summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/catapult/third_party/polymer2/bower_components
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/catapult/third_party/polymer2/bower_components')
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/.bower.json40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/Changelog.md154
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/LICENSE202
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/README.md222
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/bower.json31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/dist/js/axs_testing.js2402
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/main.js7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.bower.json75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/README.md217
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.d.ts126
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.html218
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.d.ts64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.html107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.d.ts70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.html79
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.d.ts127
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.html431
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/bower.json65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo.html35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-image-page.html106
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-demo.html62
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-page.html107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/index.html195
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/simple-demo.html116
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/route-info.html44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/search-results.html59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/video-viewer.html121
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-lite.html178
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-search.html86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-toolbar.html179
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/index.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package.json15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/.bower.json67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/CHANGELOG.md125
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/LICENSE19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/Makefile37
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/README.md1877
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/bower.json57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/component.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.css70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.js2117
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.js1265
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.js2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/karma.conf.js12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/lib/async.js1265
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/compose.js86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/forever.js44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/support/is_browser.js4
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/package.json85
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/benchmark.js228
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/memory.js46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/suites.js297
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/async/support/sync-package-managers.js53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/.bower.json37
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CODE_OF_CONDUCT.md58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CONTRIBUTING.md214
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/History.md1059
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/README.md83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/ReleaseNotes.md737
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/bower.json26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/chai.js6142
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.conf.js28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.sauce.js41
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/package.json51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chai/sauce.browsers.js128
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/.bower.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/Makefile10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/bower.json50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-input.html63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-link.html77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-mixin.html39
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-button.html160
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-carousel.html215
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-chip.html162
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-cl-link.html53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-dialog.html235
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-header.html133
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-login.html60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin-aware.html67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.html1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.js175
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-styles.css3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-timestamp.html87
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-tree-status.html143
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-dropdown.html89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-id.html127
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-input.html177
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-input_demo.html9
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-link_demo.html12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-button_demo.html83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-carousel_demo.html19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-chip_demo.html43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-cl-link_demo.html9
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-dialog_demo.html51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-header_demo.html25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-login_demo.html19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-timestamp_demo.html29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-tree-status_demo.html38
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-id_demo.html12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-input_demo.html12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img1.pngbin0 -> 20663 bytes
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img2.pngbin0 -> 23664 bytes
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/logo.pngbin0 -> 12956 bytes
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element-test.sh40
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element.sh40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/prpc-client.js209
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/.bower.json31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/README.md1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/bower.json22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package-lock.json987
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package.json26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.d.ts10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.html10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/.bower.json56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/LICENSE13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/README.md4
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/bower.json47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/demo/index.html51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-apis.html16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-client-loader.html236
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-js-api.html63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-legacy-loader.html55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-maps-api.html150
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-plusone-api.html54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-realtime-api.html57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-youtube-api.html61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/index.html15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/.bower.json63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/LICENSE13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/README.md4
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/bower.json54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/demo/index.html208
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-icons.html36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-aware.html824
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-styles.html267
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin.html596
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/index.html15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.bower.json65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/README.md55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/bower.json55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/index.html75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/x-announces.html55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/index.html28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.d.ts68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.html124
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.bower.json64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/README.md45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/bower.json54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/index.html32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html93
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/index.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html490
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.bower.json72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/README.md45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/bower.json63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/demo/index.html99
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/hero.svg33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.d.ts136
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html384
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.bower.json63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/README.md22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/bower.json53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/index.html48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/simple-button.html74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/index.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.d.ts88
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.html239
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.d.ts40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.html137
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.bower.json64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/README.md11
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/bower.json55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/index.html39
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/simple-checkbox.html57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.d.ts68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.html109
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.bower.json63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/README.md56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/bower.json54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/index.html108
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/simple-expand-collapse.html78
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/hero.svg23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/index.html31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.d.ts110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.html282
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.bower.json71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.travis.yml25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/README.md34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/bower.json62
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/grow-height-animation.html36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/index.html191
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/x-select.html80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/index.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown-scroll-manager.html374
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown.html349
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.bower.json59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/README.md43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/bower.json49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/index.html175
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/simple-fit.html28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.d.ts211
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.html679
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.bower.json64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/GUIDE.md1265
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/README.md61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/bower.json54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/demo/index.html429
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/gen-tsd.json5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/index.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.html436
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.html424
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package-lock.json986
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.bower.json59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/README.md14
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/bower.json49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/index.html71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-element.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-form.html53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.d.ts54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.html91
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package-lock.json983
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.bower.json69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/README.md22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/bower.json59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/async.html64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/index.html50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/location.pngbin0 -> 324 bytes
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/hero.svg19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.d.ts107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.html214
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.bower.json86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/README.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.html96
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/bower.json77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.html66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/demo/index.html119
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.html95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.html84
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/gen-tsd.json8
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.html64
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hero.svg35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.html171
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.d.ts43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.html353
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.html84
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.html70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package-lock.json1196
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.html35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.html46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.bower.json65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/README.md40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/bower.json55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/index.html83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/svg-sample-icons.html69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.d.ts142
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.html258
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.bower.json69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/README.md80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/bower.json60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/cats-only.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/index.html99
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/hero.svg19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.d.ts164
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.html366
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/.bower.json66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/README.md51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/bower.json57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/demo/index.html133
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/hero.svg31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.d.ts90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.html271
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.bower.json71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/README.md61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/bower.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/index.html125
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/iron-query-params.html124
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/index.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.d.ts135
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.html433
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.d.ts26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.html89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.bower.json69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/README.md18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/bower.json60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/index.html128
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menu.html45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menubar.html45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.d.ts169
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.html439
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.d.ts31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.html75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.bower.json58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/README.md10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/bower.json48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/demo/index.html75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/gen-tsd.json7
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/hero.svg33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/index.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta-extra.d.ts18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.d.ts85
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.html207
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.bower.json70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/README.md67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/bower.json60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/index.html325
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/simple-overlay.html40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.html219
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.d.ts61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.html160
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.d.ts276
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.html806
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.d.ts14
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.html389
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.d.ts49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.html391
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package-lock.json2162
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.bower.json55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/README.md8
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/bower.json45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/demo/index.html78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/index.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.d.ts53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.html97
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.bower.json58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/README.md22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/bower.json48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/index.html29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/src/x-app.html105
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/index.html25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.d.ts83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.html214
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.bower.json68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/CONTRIBUTING.md77
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/README.md102
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/bower.json59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/demo/index.html104
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/gen-tsd.json7
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/index.html28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.d.ts56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.html169
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.d.ts155
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.html410
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection-extra.d.ts60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.html120
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.d.ts19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.html87
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.bower.json66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/README.md46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/bower.json57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/cats-only.html46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/index.html56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/validatable-input.html53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.d.ts78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.html131
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/.bower.json30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/LICENSE22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/bower.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.js12352
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.min.js98
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/.bower.json33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/LICENSE.md43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/Makefile15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/README.md67
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/marked/bin/marked199
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bower.json23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/component.json10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/AUTHORS.md164
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CNAME1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CODE_OF_CONDUCT.md74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CONTRIBUTING.md95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/PUBLISHING.md24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/README.md112
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_ADVANCED.md78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_PRO.md157
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/broken.md426
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.css55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.js175
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/index.html60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/initial.md36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/quickref.md167
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black-and-white.svg133
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black.svg32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/index.html171
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/index.js1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/jasmine.json11
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/lib/marked.js1514
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.191
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1.txt96
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/marked.min.js6
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package-lock.json2501
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/.bower.json48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/CHANGELOG.md1711
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/LICENSE22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/README.md124
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/bower.json38
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.css326
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.js16590
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/.bower.json30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/LICENSE20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/README.md36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/bower.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.js1204
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.js1204
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.min.js1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone.min.js1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/changelog.md154
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/composer.json43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/meta/latest.json5118
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/packed/latest.json599
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/unpacked/latest.json125209
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone-utils.js318
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone.js605
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/.bower.json36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/CHANGELOG.md737
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/LICENSE22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/README.md58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/bower.json25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/af.js73
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-dz.js59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ly.js126
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ma.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-sa.js105
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-tn.js59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar.js142
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/az.js105
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/be.js134
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bg.js90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bn.js119
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bo.js119
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/br.js108
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bs.js143
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ca.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cs.js172
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cv.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cy.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/da.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de-at.js79
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de.js78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/dv.js100
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/el.js98
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-au.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ca.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-gb.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ie.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-nz.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eo.js73
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es-do.js80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/et.js80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eu.js66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fa.js107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fi.js107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fo.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ca.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ch.js64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr.js64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fy.js73
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gd.js76
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gl.js77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/he.js99
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hi.js124
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hr.js145
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hu.js109
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hy-am.js95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/id.js83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/is.js127
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/it.js70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ja.js76
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/jv.js83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ka.js89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/kk.js87
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/km.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ko.js65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ky.js88
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lb.js137
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lo.js70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lt.js117
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lv.js97
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/me.js111
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mi.js64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mk.js90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ml.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mr.js159
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms-my.js83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms.js82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/my.js96
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nb.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ne.js123
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl-be.js86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl.js86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nn.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pa-in.js124
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pl.js105
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt-br.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt.js65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ro.js75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ru.js183
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/se.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/si.js71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sk.js150
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sl.js162
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sq.js70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr-cyrl.js110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr.js110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ss.js89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sv.js69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sw.js59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ta.js130
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/te.js89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tet.js68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/th.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tl-ph.js62
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tlh.js120
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tr.js90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzl.js91
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm-latn.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uk.js146
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uz.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/vi.js79
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/x-pseudo.js68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/yo.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-cn.js127
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-hk.js105
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-tw.js104
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.js8624
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.min.js663
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.js12910
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.min.js1216
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment.min.js551
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/tests.js72932
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.d.ts708
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.js4301
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/check-overflow.js34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/date-from-array.js21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-anything.js109
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-array.js140
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-object.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-array.js50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-format.js107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string.js120
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/local.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/parsing-flags.js24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/utc.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/valid.js49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/abs.js18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/add-subtract.js21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/as.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/bubble.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/constructor.js41
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/create.js120
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/duration.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/get.js25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/humanize.js76
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/iso-string.js52
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/prototype.js48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/format/format.js91
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/base-config.js44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/calendar.js15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/constructor.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/en.js15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/formats.js23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/invalid.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/lists.js93
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locale.js39
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locales.js186
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/ordinal.js7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/pre-post-format.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/prototype.js69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/relative.js29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/set.js46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/add-subtract.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/calendar.js26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/clone.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/compare.js59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/constructor.js77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/creation-data.js9
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/diff.js62
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/format.js56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/from.js17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/get-set.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/locale.js34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/min-max.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/moment.js28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/now.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/prototype.js150
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/start-end-of.js59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to-type.js34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to.js17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/valid.js15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/regex.js54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/token.js33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/aliases.js30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/constants.js9
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-month.js36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-week.js363
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-year.js36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/hour.js138
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/millisecond.js69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/minute.js29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/month.js281
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/offset.js235
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/priorities.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/quarter.js32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/second.js29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timestamp.js20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timezone.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/units.js20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-calendar-utils.js65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-year.js107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/year.js75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-ceil.js7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-floor.js8
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-round.js7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/compare-arrays.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/defaults.js10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/deprecate.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/extend.js19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/has-own-prop.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/hooks.js13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/index-of.js18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-array.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-date.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-function.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-number.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object-empty.js8
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-undefined.js3
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/keys.js19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/map.js7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/some.js19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/to-int.js12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/zero-fill.js7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/af.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-dz.js50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ly.js112
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ma.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-sa.js95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-tn.js50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar.js128
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/az.js96
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/be.js125
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bg.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bn.js109
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bo.js110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/br.js99
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bs.js133
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ca.js72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cs.js163
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cv.js53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cy.js72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/da.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de-at.js69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de.js68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/dv.js89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/el.js86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-au.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ca.js53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-gb.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ie.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-nz.js57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eo.js64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es-do.js71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es.js72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/et.js71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eu.js57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fa.js97
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fi.js98
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fo.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ca.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ch.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fy.js64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gd.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gl.js68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/he.js90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hi.js115
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hr.js135
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hu.js100
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hy-am.js86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/id.js74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/is.js118
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/it.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ja.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/jv.js73
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ka.js80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/kk.js77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/km.js49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ko.js56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ky.js78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lb.js128
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lo.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lt.js108
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lv.js88
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/me.js101
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mi.js54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mk.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ml.js72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mr.js150
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms-my.js74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms.js73
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/my.js86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nb.js54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ne.js114
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl-be.js77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl.js77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nn.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pa-in.js115
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pl.js95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt-br.js52
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt.js56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ro.js66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ru.js173
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/se.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/si.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sk.js141
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sl.js152
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sq.js61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr-cyrl.js100
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr.js100
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ss.js80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sv.js60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sw.js50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ta.js120
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/te.js79
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tet.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/th.js57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tl-ph.js53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tlh.js110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tr.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzl.js82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm-latn.js49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm.js49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uk.js137
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uz.js49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/vi.js70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/x-pseudo.js58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/yo.js50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-cn.js118
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-hk.js95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-tw.js94
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/moment.js82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/default.js5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/locale-header.js6
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/test-header.js6
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.bower.json90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/README.md299
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.d.ts36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.html94
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.d.ts32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.html48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.d.ts32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.html48
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.d.ts41
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.html82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.d.ts25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.html45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.d.ts42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.html86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.d.ts44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.html92
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.d.ts35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.html64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.d.ts35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.html64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.d.ts34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.html58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.d.ts34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.html58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.d.ts35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.html59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.d.ts35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.html59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.d.ts34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.html58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.d.ts34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.html58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.d.ts34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.html58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.d.ts34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.html58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.d.ts36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.html69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/bower.json80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/index.html174
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-card.html100
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-cards-list.html81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/declarative/index.html150
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/index.html76
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-animatable.html68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-dialog.html94
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/animated-dropdown.html90
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/index.html61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/animated-grid.html160
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/fullsize-page-with-card.html125
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/index.html74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/index.html46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/full-view.html123
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/index.html38
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-demo.html101
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-view.html131
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/animated-grid.html145
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/full-page.html82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/index.html51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/shared-styles.html47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/circles-page.html115
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/index.html80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/squares-page.html102
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/gen-tsd.json5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/guides/neon-animation.md314
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.d.ts53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.html150
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.d.ts32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.html54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.d.ts38
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.html219
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.d.ts50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.html92
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.d.ts36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.html155
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.d.ts19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.html18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.d.ts30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.html29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.d.ts29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.html43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.d.ts33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.html72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package-lock.json974
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.d.ts10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.html11
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.bower.json75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.travis.yml35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/README.md44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/bower.json66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/index.html45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-button.html63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-radio-button.html110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.d.ts47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.html89
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.d.ts36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.html57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.d.ts27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.html50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.d.ts78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.html125
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.bower.json75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.travis.yml33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/README.md73
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/bower.json66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/demo/index.html140
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.d.ts92
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.html205
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.bower.json75
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.eslintrc.json18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/README.md63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/bower.json66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/demo/index.html127
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.d.ts74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.html324
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.bower.json77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/README.md44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/bower.json68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/index.html107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/simple-dialog.html28
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/hero.svg51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.d.ts70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.html143
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.d.ts16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.html100
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.bower.json78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/README.md65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/bower.json69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/demo/index.html230
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/hero.svg58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package-lock.json1196
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.d.ts74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.html109
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.bower.json71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/README.md92
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/bower.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/index.html111
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/paper-icon-button-light.html68
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/index.html23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package-lock.json983
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.d.ts50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.html130
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.d.ts92
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.html181
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.bower.json93
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.travis.yml27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/README.md44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/all-imports.html12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/bower.json84
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/index.html156
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-input.html128
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-validator.html27
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/hero.svg19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/index.html28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-addon-behavior.html44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-behavior.html566
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-char-counter.html99
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-container.html682
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-error.html94
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input.html316
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-textarea.html165
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.bower.json81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.travis.yml26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/README.md163
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/all-imports.html13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/bower.json72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/demo/index.html197
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-icon-item.html86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-behavior.html36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-body.html83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-shared-styles.html70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item.html110
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.bower.json63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/README.md34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/bower.json54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/demo/index.html85
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package-lock.json986
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.html42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.d.ts45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.html81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.bower.json65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/README.md49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/bower.json55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/demo/index.html132
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/hero.svg21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/index.html28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.d.ts117
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.html345
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.bower.json70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/README.md38
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/bower.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/demo/index.html83
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/hero.svg22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package-lock.json983
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.d.ts62
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.html252
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.bower.json70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.travis.yml29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/README.md49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/bower.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/demo/index.html76
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/hero.svg25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/index.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package-lock.json983
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.d.ts86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.html185
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.bower.json67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/README.md40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/bower.json57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/demo/index.html405
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/hero.svg30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/index.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.d.ts171
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.html729
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/.bower.json64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/README.md50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/bower.json55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.html94
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.d.ts10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.html60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.html164
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.html334
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.html71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.d.ts16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.html80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo/index.html232
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.d.ts15
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.html91
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.html78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/gen-tsd.json5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/index.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package-lock.json984
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.html22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.d.ts16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.html42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.html76
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.d.ts13
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.html178
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.bower.json82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/README.md52
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/bower.json72
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/demo/index.html318
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/hero.svg23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/index.html25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.d.ts58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.html168
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.d.ts12
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.html18
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.d.ts210
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.html614
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.bower.json70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/README.md67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/bower.json60
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/demo/index.html96
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/hero.svg20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.d.ts151
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.html299
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.bower.json70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/CODEOWNERS2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.travis.yml32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/README.md32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/bower.json61
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/demo/index.html88
-rwxr-xr-xchromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/hero.svg22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/index.html26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package-lock.json2388
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package.json19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.d.ts69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.html280
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/.bower.json47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/LICENSE21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/bower.json37
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/async.html123
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/behaviors.html84
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/index.html32
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/message-mixin.html24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/observing.html70
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/ready-state.html94
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/redux-mixin.html22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/dist/polymer-redux.html256
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/gulpfile.babel.js80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/index.html14
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.html1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.js254
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/package.json108
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer-redux.html2
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer.json5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/readme.md103
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.html1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.js212
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/wct.conf.json7
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/yarn.lock7838
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/.bower.json46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/LICENSE.txt27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/README.md522
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/bower.json35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/closure-types.js1402
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-externs.js112
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-shared-types.js165
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-types.html11
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/webcomponents-externs.js64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/gen-tsd.json23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/img/migration.pngbin0 -> 544823 bytes
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/index.html25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/array-selector.html440
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/custom-style.html114
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-bind.html139
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-if.html288
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-module.html143
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-repeat.html738
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/class.html376
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/legacy-element-mixin.html1003
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/mutable-data-behavior.html161
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer-fn.html50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer.dom.html405
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/templatizer-behavior.html151
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/dir-mixin.html181
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/disable-upgrade-mixin.html116
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/element-mixin.html739
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/gesture-event-listeners.html83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/mutable-data.html205
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-changed.html534
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-mixin.html230
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-accessors.html322
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-effects.html2808
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/template-stamp.html491
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/array-splice.html316
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/async.html216
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/boot.html65
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/case-map.html64
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/debounce.html118
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flattened-nodes-observer.html312
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flush.html62
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/gestures.html1093
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/html-tag.html129
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/import-href.html107
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/mixin.html78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/path.html284
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html133
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/resolve-url.html112
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/settings.html118
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/style-gather.html299
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/templatize.html579
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/unresolved.html31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package-lock.json10899
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package.json56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer-element.html44
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer.html30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/extra-types.d.ts147
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/array-selector.d.ts200
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/custom-style.d.ts71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-bind.d.ts47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-if.d.ts71
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-module.d.ts82
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-repeat.d.ts282
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/class.d.ts115
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/legacy-element-mixin.d.ts634
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/mutable-data-behavior.d.ts135
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer-fn.d.ts25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer.dom.d.ts179
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/templatizer-behavior.d.ts116
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/dir-mixin.d.ts52
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/disable-upgrade-mixin.d.ts49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/element-mixin.d.ts233
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/gesture-event-listeners.d.ts53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/mutable-data.d.ts147
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-changed.d.ts304
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-mixin.d.ts79
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-accessors.d.ts152
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-effects.d.ts841
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/template-stamp.d.ts258
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/array-splice.d.ts49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/async.d.ts119
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/boot.d.ts19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/case-map.d.ts39
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/debounce.d.ts78
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flattened-nodes-observer.d.ts96
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flush.d.ts28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/gestures.d.ts87
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/html-tag.d.ts86
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/import-href.d.ts27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/mixin.d.ts22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/path.d.ts151
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/render-status.d.ts45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/resolve-url.d.ts50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/settings.d.ts40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/style-gather.d.ts113
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/templatize.d.ts218
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/unresolved.d.ts10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer-element.d.ts25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer.d.ts21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/wct.conf.json20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/.bower.json46
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/README.md400
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.html10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/bower.json36
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.html10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js14
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/apply-shim.js196
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/custom-style-interface.js67
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/scoping-shim.js87
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/custom-style-element.js42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/document-style-lib.js54
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/externs/shadycss-externs.js26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/gulpfile.js113
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package-lock.json11002
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package.json59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim-utils.js149
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim.js482
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-regex.js19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-utils.js59
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/css-parse.js264
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/custom-style-interface.js162
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-wait.js45
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-watcher.js133
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/scoping-shim.js470
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-cache.js51
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-info.js74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-placeholder.js40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-properties.js612
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-settings.js47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-transformer.js363
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-util.js294
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/template-map.js17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/unscoped-style-handler.js40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/wct.conf.json17
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.bower.json14
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.editorconfig9
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintignore1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintrc.json229
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.travis.yml30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/LICENSE.txt49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/README.md256
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/lib/sinon-chai.js147
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package-lock.json1830
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package.json42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/.bower.json20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/README.md8
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/bower.json10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/sinon.js6383
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/.bower.json37
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/LICENSE27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/bower.json28
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/browser.js346
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/formatting.js158
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/index.js26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/normalization.js57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/parsing.js95
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.bower.json35
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.github/ISSUE_TEMPLATE.md33
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.travis.yml21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/CONTRIBUTING.md77
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/README.md148
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/bower.json25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/package.json24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture-mocha.js40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture.html351
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/wct.conf.json5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/.bower.json40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/CONTRIBUTING.md123
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/COPYING202
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/History.md265
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/README.md80
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/bower.json30
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/examples.md241
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/experimental.md58
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/support.md69
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/README.md10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations-next.js113
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations.js126
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/animation.js279
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply-preserving-inline-style.js239
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply.js25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/box-handler.js57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/color-handler.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/deprecation.js47
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dev.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dimension-handler.js240
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/effect-callback.js98
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/element-animatable.js23
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/font-weight-handler.js42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/group-constructors.js204
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/handler-utils.js177
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/interpolation.js49
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect-constructor.js183
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect.js57
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-interpolations.js123
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-decomposition.js440
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-interpolation.js130
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/normalize-keyframes.js321
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/number-handler.js97
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/position-handler.js117
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-interpolation.js127
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-names.js40
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/scope.js20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shadow-handler.js108
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shape-handler.js85
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/tick.js181
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timeline.js101
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timing-utilities.js420
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/transform-handler.js275
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/visibility-handler.js29
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-cancel-events.js83
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-next-animation.js383
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.html1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.html1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.html50
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.html1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/.bower.json53
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/bower.json43
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js1865
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite-npm-header.txt5
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite.js130
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/index.html27
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/package.json131
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.bower.json34
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.eslintrc.json11
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.github/CODEOWNERS1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.travis.yml25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/CONTRIBUTING.md66
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/LICENSE.md19
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/README.md169
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/bower.json24
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/closure-output.txt10
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/custom-elements-es5-adapter.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/custom-elements-es5-adapter-index.js16
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-ce-index.js21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-index.js20
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-index.js22
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-pf-index.js26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-index.js21
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-sd-ce-index.js42
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/externs/webcomponents.js25
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/gulpfile.js187
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package-lock.json9534
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package.json56
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/post-polyfill.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/pre-polyfill.js63
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/promise.js26
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/unresolved.js31
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/wct.conf.json6
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js81
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js198
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js181
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js55
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js221
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js.map1
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-loader.js74
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js172
-rw-r--r--chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js.map1
1576 files changed, 538041 insertions, 0 deletions
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/.bower.json
new file mode 100644
index 00000000000..9b7493c33b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/.bower.json
@@ -0,0 +1,40 @@
+{
+ "name": "accessibility-developer-tools",
+ "version": "2.12.0",
+ "homepage": "https://github.com/GoogleChrome/accessibility-developer-tools",
+ "authors": [
+ "Google"
+ ],
+ "description": "This is a library of accessibility-related testing and utility code.",
+ "main": "dist/js/axs_testing.js",
+ "moduleType": [
+ "amd",
+ "globals"
+ ],
+ "keywords": [
+ "accessibility",
+ "testing",
+ "WCAG",
+ "module"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "**/.*",
+ "lib",
+ "scripts",
+ "src",
+ "test",
+ "tools",
+ "Gruntfile.js",
+ "package.json"
+ ],
+ "_release": "2.12.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.12.0",
+ "commit": "3616c094e090174f70b53ca4cea25529522abffb"
+ },
+ "_source": "https://github.com/GoogleChrome/accessibility-developer-tools.git",
+ "_target": "^2.10.0",
+ "_originalSource": "accessibility-developer-tools"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/Changelog.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/Changelog.md
new file mode 100644
index 00000000000..e587f7eae53
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/Changelog.md
@@ -0,0 +1,154 @@
+## 2.11.0 - 2016-09-14
+
+### Enhancements
+
+* Performance enhancements (#263)
+
+## 2.10.1-rc.0 - 2016-01-13
+
+### Bug fixes:
+
+* Escape special characters to be used in a query selector string (PR #267)
+* Fix exception thrown by RoleTooltipRequiresDescribedBy.js (#269)
+
+## 2.10.0 - 2015-11-13
+
+## 2.10.0-rc.1 - 2015-10-19
+
+### Bug fixes:
+
+* `linkWithUnclearPurpose` should only look at links, not `<a>` without `href`. (#245)
+
+## 2.10.0-rc.0 - 2015-10-09
+
+### New rules
+* A tabpanel should be related to a tab via aria-controls or aria-labelledby (`src/audits/UncontrolledTabpanel.js`)
+* A data table must identify row and column headers (`src/audits/TableHasAppropriateHeaders.js`)
+* A tooltip element should have an aria-describedby referring to it (`src/audits/RoleTooltipRequiresDescribedBy.js`).
+
+### Enhancements
+
+* Pull DOM-related functionality out into `DOMUtils.js`
+
+### Bug fixes:
+
+* Fix `findTextAlternatives` not always correctly ignoring hidden elements (#217).
+* `findTextAlternatives` now honors `alt` attribute of input type image
+* Revert #150 which was causing the extension not to work.
+* AX_HTML_02 (duplicate IDs) now only audits elements that are referenced by an IDREF (#141);
+* Fix #171 by being smarter about finding the composed parent node.
+* Tweak in canScrollTo to handle the (common) case where the container is `document.body` (#243).
+
+## 2.9.0 - 2015-09-04
+
+## 2.9.0-rc.0 - 2015-08-21
+
+### New rules
+
+* A label element may not have labelable descendants other than its labeled control (`src/audits/MultipleLabelableElementsPerLabel.js`)
+
+### Enhancements
+
+* Implement support for specifying audit configuration options through an object when initializing audits (#165).
+* Implement support for AMD loaders.
+
+### Bug fixes:
+
+* Fix `badAriaAttributeValue` not correctly handling decimal values (#182).
+* Work around null pointer exception caused by closure compiler issue (#183).
+* Add a special case to handle color `"transparent"` to fix (#180).
+* Fix `matchSelector` not working properly in browser environments without vendor prefixes (#189).
+* Fix false positives on elements with no role for Unsupported ARIA Attribute rule (#178 and #199).
+* Fix ARIA `tablist` and ARIA `tab` scope (#204)
+* Fix link with clear purpose with text alternative (#156);
+* Handle edge cases in number parser, e.g. "+1", ".1", "01"
+* HTML button containing img with alt attribute now passes controlsWithoutLabel (#202)
+* Disabled elements should be ignored by low contrast audit (#205)
+* Fix input of type "text" did not find correct implied role (#225)
+* Hidden links are no longer relevant for meaningful link text rule.
+
+## 2.8.0 - 2015-07-24
+
+## 2.8.0-rc.0 - 2015-07-10
+
+### Enhancements:
+* Pull color code into separate file.
+* Improve color suggestion algorithm.
+* Descend into iframes when collecting matching elements.
+
+## 2.7.1 - 2015-06-30
+
+## 2.7.1-rc.1 - 2015-06-23
+
+### Bug fixes:
+
+* Check for null `textAlternatives` in `FocusableElementNotVisibleAndNotAriaHidden`'s `relevantElementMatcher` method.
+
+## 2.7.1-rc.0 - 2015-06-15
+
+### Enhancements:
+* Rework findTextAlternatives not to return non-exposed text alternatives.
+* Add Bower config (#157)
+
+### Bug fixes:
+* Check for any text alternatives when assessing unlabeled images (#154).
+
+## 2.7.0 - 2015-05-15
+
+### New rules
+* This element does not support ARIA roles, states and properties (`src/audits/AriaOnReservedElement.js`)
+* aria-owns should not be used if ownership is implicit in the DOM (`src/audits/AriaOwnsDescendant.js`)
+* Elements with ARIA roles must be in the correct scope (`src/audits/AriaRoleNotScoped.js`)
+* An element's ID must be unique in the DOM (`src/audits/DuplicateId.js`)
+* The web page should have the content's human language indicated in the markup (`src/audits/HumanLangMissing.js`)
+* An element's ID must not be present in more that one aria-owns attribute at any time (`src/audits/MultipleAriaOwners.js`)
+* ARIA attributes which refer to other elements by ID should refer to elements which exist in the DOM (`src/audits/NonExistentAriaRelatedElement.js` - previously `src/audits/NonExistentAriaLabeledBy.js`)
+* Elements with ARIA roles must ensure required owned elements are present (`src/audits/RequiredOwnedAriaRoleMissing.js`)
+* Avoid positive integer values for tabIndex (`src/audits/TabIndexGreaterThanZero.js`)
+* This element has an unsupported ARIA attribute (`src/audits/UnsupportedAriaAttribute.js`)
+
+### Enhancements:
+* Add configurable blacklist phrases and stop words to LinkWithUnclearPurpose (#99)
+* Detect and warn if we reuse the same code for more than one rule. (#133)
+* Force focus before testing visibility on focusable elements. (#65)
+* Use getDistributedNodes to get nodes distributed into shadowRoots (#128)
+* Add section to Audit Rules page for HumanLangMissing and link to it from rule (#119)
+* Reference "applied role" in axs.utils.getRoles enhancement (#130)
+* Add warning that AX_FOCUS_02 is not available from axs.Audit.run() (#85)
+
+### Bug fixes:
+* Incorrect use of nth-of-type against className in utils.getQuerySelectorText (#87)
+* AX_TEXT_01 Accessibility Audit test should probably ignore role=presentation elements (#97)
+* Fix path to audit rules in phantomjs runner (#108)
+* Label audit should fail if form fields lack a label, even with placeholder text (#81)
+* False positives for controls without labels with role=presentation (#23)
+* Fix "valid" flag on return value of axs.utils.getRoles (#131)
+
+Note: this version number is somewhat arbitrary - just bringing it vaguely in line with [the extension](https://github.com/GoogleChrome/accessibility-developer-tools-extension) since that's where the library originated - but will use semver for version bumps going forward from here.
+
+## 0.0.5 - 2014-02-04
+
+### Enhancements:
+* overlapping elements detection code made more sophisticated
+* axs.properties.getFocusProperties() returns more information about visibility
+* new axs.properties.hasDirectTextDescendant() method with more sophisticated detection of text content
+
+### Bug fixes:
+* FocusableElementNotVisibleAndNotAriaHidden audit passes on elements which are brought onscreen on focus
+* UnfocusableElementsWithOnclick checks for element.disabled
+* Fix infinite loop when getting descendant text content of a label containing an input
+* Detect elements which are out of scroll area of any parent element, not just the document scroll area
+* findTextAlternatives doesn't throw TypeError if used on a HTMLSelectElement
+
+## 0.0.4 - 2013-10-03
+
+### Enhancements:
+
+* axs.AuditRule.run() has a new signature: it now takes an options object. Please see method documentation for details.
+* Audit Rule severity can be overridden (per Audit Rule) in AuditConfig.
+
+### Bug fixes:
+
+* axs.utils.isLowContrast() now rounds to the nearest 0.1 before checking (so `#777` is now a passing value)
+* MainRoleOnInappropriateElement was always failing due to accessible name calculation taking the main role into account and not descending into content (now just gets descendant content directly)
+* UnfocusableElementsWithOnClick had a dangling if-statement causing very noisy false positives
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/LICENSE
new file mode 100644
index 00000000000..d6456956733
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/README.md
new file mode 100644
index 00000000000..3bc1a10695a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/README.md
@@ -0,0 +1,222 @@
+[![Build Status](https://travis-ci.org/GoogleChrome/accessibility-developer-tools.svg?branch=master)](https://travis-ci.org/GoogleChrome/accessibility-developer-tools)
+[![npm version](https://img.shields.io/npm/v/accessibility-developer-tools.svg)](https://www.npmjs.com/package/accessibility-developer-tools)
+[![npm downloads](https://img.shields.io/npm/dm/accessibility-developer-tools.svg)](https://www.npmjs.com/package/accessibility-developer-tools)
+
+# Accessibility Developer Tools
+
+This is a library of accessibility-related testing and utility code.
+
+Its main component is the accessibility audit: a collection of audit rules checking for common accessibility problems, and an API for running these rules in an HTML page.
+
+There is also a collection of accessibility-related utility code, including but not limited to:
+* contrast ratio calculation and color suggestions
+* retrieving and validating ARIA attributes and states
+* accessible name calculation using the algorithm at [http://www.w3.org/TR/wai-aria/roles#textalternativecomputation](http://www.w3.org/TR/wai-aria/roles#textalternativecomputation)
+
+# Getting the code
+
+To include just the javascript rules, require the following file:
+
+ https://raw.github.com/GoogleChrome/accessibility-developer-tools/stable/dist/js/axs_testing.js
+
+ `git 1.6.5` or later:
+
+ % git clone --recursive https://github.com/GoogleChrome/accessibility-developer-tools.git
+
+ Before `git 1.6.5`:
+
+ % git clone https://github.com/GoogleChrome/accessibility-developer-tools.git
+ % cd accessibility-developer-tools
+ % git submodule init; git submodule update
+
+# Building
+
+You will need `node` and `grunt-cli` to build.
+
+1. (Once only) Install [Node.js](http://nodejs.org/) and `npm` - useful instructions here: [https://gist.github.com/isaacs/579814](https://gist.github.com/isaacs/579814)
+
+ Make sure you have Node.js v 0.8 or higher.
+
+2. (Once only) Use `npm` to install `grunt-cli`
+
+ % npm install -g grunt-cli # May need to be run as root
+
+3. (Every time you make a fresh checkout) Install dependencies (including `grunt`) for this project (run from project root)
+
+ % npm install
+
+4. (Rebuild if you make changes) Build using `grunt` (run from project root)
+
+ % grunt
+
+
+## Troubleshooting
+
+This project uses [Closure Compiler](https://github.com/google/closure-compiler) to build our releases. You may need to install a recent version of [JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html) in order for builds to successfully complete.
+
+# Using the Audit API
+
+## Including the library
+
+The simplest option is to include the generated `axs_testing.js` library on your page. After you build, you will have two versions of `axs_testings.js`:
+* Distribution Build: project-root/dist/js/axs_testing.js
+* Local Build (use if you make changes): project-root/tmp/build/axs_testing.js
+
+Work is underway to include the library in WebDriver and other automated testing frameworks.
+
+## The `axs.Audit.run()` method
+
+Once you have included `axs_testing.js`, you can call `axs.Audit.run()`. This returns an object in the following form:
+
+ {
+ /** @type {axs.constants.AuditResult} */
+ result, // one of PASS, FAIL or NA
+
+ /** @type {Array.<Element>} */
+ elements, // The elements which the rule fails on, if result == axs.constants.AuditResult.FAIL
+
+ /** @type {axs.AuditRule} */
+ rule // The rule which this result is for.
+ }
+
+### Command Line Runner
+
+The Accessibility Developer Tools project includes a command line runner for the audit. To use the runner, [install phantomjs](http://phantomjs.org/download.html) then run the following command from the project root directory.
+
+ $ phantomjs tools/runner/audit.js <url-or-filepath>
+
+The runner will load the specified file or URL in a headless browser, inject axs_testing.js, run the audit and output the report text.
+
+### Run audit from Selenium WebDriver (Scala):
+ val driver = org.openqa.selenium.firefox.FirefoxDriver //use driver of your choice
+ val jse = driver.asInstanceOf[JavascriptExecutor]
+ jse.executeScript(scala.io.Source.fromURL("https://raw.githubusercontent.com/GoogleChrome/" +
+ "accessibility-developer-tools/stable/dist/js/axs_testing.js").mkString)
+ val report = jse.executeScript("var results = axs.Audit.run();return axs.Audit.createReport(results);")
+ println(report)
+
+### Run audit from Selenium WebDriver (Scala)(with caching):
+ val cache = collection.mutable.Map[String, String]()
+ val driver = org.openqa.selenium.firefox.FirefoxDriver //use driver of your choice
+ val jse = driver.asInstanceOf[JavascriptExecutor]
+ def getUrlSource(arg: String): String = cache get arg match {
+ case Some(result) => result
+ case None =>
+ val result: String = scala.io.Source.fromURL(arg).mkString
+ cache(arg) = result
+ result
+ }
+ jse.executeScript(getUrlSource("https://raw.githubusercontent.com/GoogleChrome/" +
+ "accessibility-developer-tools/stable/dist/js/axs_testing.js"))
+ val report = js.executeScript("var results = axs.Audit.run();return axs.Audit.createReport(results);")
+ println(report)
+
+If println() outputs nothing, check if you need to set DesiredCapabilities for your WebDriver (such as loggingPrefs):
+https://code.google.com/p/selenium/wiki/DesiredCapabilities
+
+## Using the results
+
+### Interpreting the result
+
+The result may be one of three constants:
+* `axs.constants.AuditResult.PASS` - This implies that there were elements on the page that may potentially have failed this audit rule, but they passed. Congratulations!
+* `axs.constants.AuditResult.NA` - This implies that there were no elements on the page that may potentially have failed this audit rule. For example, an audit rule that checks video elements for subtitles would return this result if there were no video elements on the page.
+* `axs.constants.AuditResult.FAIL` - This implies that there were elements on the page that did not pass this audit rule. This is the only result you will probably be interested in.
+
+### Creating a useful error message
+
+The static, global `axs.Audit.createReport(results, opt_url)` may be used to create an error message using the return value of axs.Audit.run(). This will look like the following:
+
+ *** Begin accessibility audit results ***
+ An accessibility audit found 4 errors and 4 warnings on this page.
+ For more information, please see https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules
+
+ Error: badAriaAttributeValue (AX_ARIA_04) failed on the following elements (1 - 3 of 3):
+ DIV:nth-of-type(3) > INPUT
+ DIV:nth-of-type(5) > INPUT
+ #aria-invalid
+
+ Error: badAriaRole (AX_ARIA_01) failed on the following element:
+ DIV:nth-of-type(11) > SPAN
+
+ Error: controlsWithoutLabel (AX_TEXT_01) failed on the following elements (1 - 3 of 3):
+ DIV > INPUT
+ DIV:nth-of-type(12) > DIV:nth-of-type(3) > INPUT
+ LABEL > INPUT
+
+ Error: requiredAriaAttributeMissing (AX_ARIA_03) failed on the following element:
+ DIV:nth-of-type(13) > DIV:nth-of-type(11) > DIV
+
+ Warning: focusableElementNotVisibleAndNotAriaHidden (AX_FOCUS_01) failed on the following element:
+ #notariahidden
+
+ Warning: imagesWithoutAltText (AX_TEXT_02) failed on the following elements (1 - 2 of 2):
+ #deceptive-img
+ DIV:nth-of-type(13) > IMG
+
+ Warning: lowContrastElements (AX_COLOR_01) failed on the following elements (1 - 2 of 2):
+ DIV:nth-of-type(13) > DIV
+ DIV:nth-of-type(13) > DIV:nth-of-type(3)
+
+ Warning: nonExistentAriaLabelledbyElement (AX_ARIA_02) failed on the following elements (1 - 2 of 2):
+ DIV:nth-of-type(3) > INPUT
+ DIV:nth-of-type(5) > INPUT
+ *** End accessibility audit results ***
+
+Each rule will have at most five elements listed as failures, in the form of a unique query selector for each element.
+
+### Configuring the Audit
+
+If you wish to fine-tune the audit, you can create an `axs.AuditConfiguration` object, with the following options:
+
+#### Ignore parts of the page for a particular audit rule
+
+For example, say you have a separate high-contrast version of your page, and there is a CSS rule which causes certain elements (with class `pretty`) on the page to be low-contrast for stylistic reasons. Running the audit unmodified produces results something like
+
+ Warning: lowContrastElements (AX_COLOR_01) failed on the following elements (1 - 5 of 15):
+ ...
+
+You can modify the audit to ignore the elements which are known and intended to have low contrast like this:
+
+ var configuration = new axs.AuditConfiguration();
+ configuration.ignoreSelectors('lowContrastElements', '.pretty');
+ axs.Audit.run(configuration);
+
+The `AuditConfiguration.ignoreSelectors()` method takes a rule name, which you can find in the audit report, and a query selector string representing the parts of the page to be ignored for that audit rule. Multiple calls to `ignoreSelectors()` can be made for each audit rule, if multiple selectors need to be ignored.
+
+#### Restrict the scope of the entire audit to a subsection of the page
+
+You may have a part of the page which varies while other parts of the page stay constant, like a content area vs. a toolbar. In this case, running the audit on the entire page may give you spurious results in the part of the page which doesn't vary, which may drown out regressions in the main part of the page.
+
+You can set a `scope` on the `AuditConfiguration` object like this:
+
+ var configuration = new axs.AuditConfiguration();
+ configuration.scope = document.querySelector('main'); // or however you wish to choose your scope element
+ axs.Audit.run(configuration);
+
+You may also specify a configuration payload while instantiating the `axs.AuditConfiguration`,
+which allows you to provide multiple configuration options at once.
+
+ var configuration = new axs.AuditConfiguration({
+ auditRulesToRun: ['badAriaRole'],
+ scope: document.querySelector('main'),
+ maxResults: 5
+ });
+
+ axs.Audit.run(configuration);
+
+## License
+
+Copyright 2013 Google Inc. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/bower.json
new file mode 100644
index 00000000000..ab38602120a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/bower.json
@@ -0,0 +1,31 @@
+{
+ "name": "accessibility-developer-tools",
+ "version": "2.11.0",
+ "homepage": "https://github.com/GoogleChrome/accessibility-developer-tools",
+ "authors": [
+ "Google"
+ ],
+ "description": "This is a library of accessibility-related testing and utility code.",
+ "main": "dist/js/axs_testing.js",
+ "moduleType": [
+ "amd",
+ "globals"
+ ],
+ "keywords": [
+ "accessibility",
+ "testing",
+ "WCAG",
+ "module"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "**/.*",
+ "lib",
+ "scripts",
+ "src",
+ "test",
+ "tools",
+ "Gruntfile.js",
+ "package.json"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/dist/js/axs_testing.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/dist/js/axs_testing.js
new file mode 100644
index 00000000000..1f83c95a0d7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/dist/js/axs_testing.js
@@ -0,0 +1,2402 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Generated from http://github.com/GoogleChrome/accessibility-developer-tools/tree/9acd1c6e3e72a39a0ec14506d68203a4e8cfafb4
+ *
+ * See project README for build steps.
+ */
+
+// AUTO-GENERATED CONTENT BELOW: DO NOT EDIT! See above for details.
+
+var fn = (function() {
+ var COMPILED = !0, goog = goog || {};
+goog.global = this;
+goog.isDef = function(a) {
+ return void 0 !== a;
+};
+goog.exportPath_ = function(a, b, c) {
+ a = a.split(".");
+ c = c || goog.global;
+ a[0] in c || !c.execScript || c.execScript("var " + a[0]);
+ for (var d;a.length && (d = a.shift());) {
+ !a.length && goog.isDef(b) ? c[d] = b : c = c[d] ? c[d] : c[d] = {};
+ }
+};
+goog.define = function(a, b) {
+ var c = b;
+ COMPILED || (goog.global.CLOSURE_UNCOMPILED_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES, a) ? c = goog.global.CLOSURE_UNCOMPILED_DEFINES[a] : goog.global.CLOSURE_DEFINES && Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES, a) && (c = goog.global.CLOSURE_DEFINES[a]));
+ goog.exportPath_(a, c);
+};
+goog.DEBUG = !0;
+goog.LOCALE = "en";
+goog.TRUSTED_SITE = !0;
+goog.STRICT_MODE_COMPATIBLE = !1;
+goog.DISALLOW_TEST_ONLY_CODE = COMPILED && !goog.DEBUG;
+goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1;
+goog.provide = function(a) {
+ if (goog.isInModuleLoader_()) {
+ throw Error("goog.provide can not be used within a goog.module.");
+ }
+ if (!COMPILED && goog.isProvided_(a)) {
+ throw Error('Namespace "' + a + '" already declared.');
+ }
+ goog.constructNamespace_(a);
+};
+goog.constructNamespace_ = function(a, b) {
+ if (!COMPILED) {
+ delete goog.implicitNamespaces_[a];
+ for (var c = a;(c = c.substring(0, c.lastIndexOf("."))) && !goog.getObjectByName(c);) {
+ goog.implicitNamespaces_[c] = !0;
+ }
+ }
+ goog.exportPath_(a, b);
+};
+goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;
+goog.module = function(a) {
+ if (!goog.isString(a) || !a || -1 == a.search(goog.VALID_MODULE_RE_)) {
+ throw Error("Invalid module identifier");
+ }
+ if (!goog.isInModuleLoader_()) {
+ throw Error("Module " + a + " has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");
+ }
+ if (goog.moduleLoaderState_.moduleName) {
+ throw Error("goog.module may only be called once per module.");
+ }
+ goog.moduleLoaderState_.moduleName = a;
+ if (!COMPILED) {
+ if (goog.isProvided_(a)) {
+ throw Error('Namespace "' + a + '" already declared.');
+ }
+ delete goog.implicitNamespaces_[a];
+ }
+};
+goog.module.get = function(a) {
+ return goog.module.getInternal_(a);
+};
+goog.module.getInternal_ = function(a) {
+ if (!COMPILED) {
+ if (a in goog.loadedModules_) {
+ return goog.loadedModules_[a];
+ }
+ if (!goog.implicitNamespaces_[a]) {
+ return a = goog.getObjectByName(a), null != a ? a : null;
+ }
+ }
+ return null;
+};
+goog.moduleLoaderState_ = null;
+goog.isInModuleLoader_ = function() {
+ return null != goog.moduleLoaderState_;
+};
+goog.module.declareLegacyNamespace = function() {
+ if (!COMPILED && !goog.isInModuleLoader_()) {
+ throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");
+ }
+ if (!COMPILED && !goog.moduleLoaderState_.moduleName) {
+ throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");
+ }
+ goog.moduleLoaderState_.declareLegacyNamespace = !0;
+};
+goog.setTestOnly = function(a) {
+ if (goog.DISALLOW_TEST_ONLY_CODE) {
+ throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : "."));
+ }
+};
+goog.forwardDeclare = function(a) {
+};
+COMPILED || (goog.isProvided_ = function(a) {
+ return a in goog.loadedModules_ || !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a));
+}, goog.implicitNamespaces_ = {"goog.module":!0});
+goog.getObjectByName = function(a, b) {
+ for (var c = a.split("."), d = b || goog.global, e;e = c.shift();) {
+ if (goog.isDefAndNotNull(d[e])) {
+ d = d[e];
+ } else {
+ return null;
+ }
+ }
+ return d;
+};
+goog.globalize = function(a, b) {
+ var c = b || goog.global, d;
+ for (d in a) {
+ c[d] = a[d];
+ }
+};
+goog.addDependency = function(a, b, c, d) {
+ if (goog.DEPENDENCIES_ENABLED) {
+ var e;
+ a = a.replace(/\\/g, "/");
+ var f = goog.dependencies_;
+ d && "boolean" !== typeof d || (d = d ? {module:"goog"} : {});
+ for (var g = 0;e = b[g];g++) {
+ f.nameToPath[e] = a, f.loadFlags[a] = d;
+ }
+ for (d = 0;b = c[d];d++) {
+ a in f.requires || (f.requires[a] = {}), f.requires[a][b] = !0;
+ }
+ }
+};
+goog.ENABLE_DEBUG_LOADER = !0;
+goog.logToConsole_ = function(a) {
+ goog.global.console && goog.global.console.error(a);
+};
+goog.require = function(a) {
+ if (!COMPILED) {
+ goog.ENABLE_DEBUG_LOADER && goog.IS_OLD_IE_ && goog.maybeProcessDeferredDep_(a);
+ if (goog.isProvided_(a)) {
+ if (goog.isInModuleLoader_()) {
+ return goog.module.getInternal_(a);
+ }
+ } else {
+ if (goog.ENABLE_DEBUG_LOADER) {
+ var b = goog.getPathFromDeps_(a);
+ if (b) {
+ goog.writeScripts_(b);
+ } else {
+ throw a = "goog.require could not find: " + a, goog.logToConsole_(a), Error(a);
+ }
+ }
+ }
+ return null;
+ }
+};
+goog.basePath = "";
+goog.nullFunction = function() {
+};
+goog.abstractMethod = function() {
+ throw Error("unimplemented abstract method");
+};
+goog.addSingletonGetter = function(a) {
+ a.getInstance = function() {
+ if (a.instance_) {
+ return a.instance_;
+ }
+ goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a);
+ return a.instance_ = new a;
+ };
+};
+goog.instantiatedSingletons_ = [];
+goog.LOAD_MODULE_USING_EVAL = !0;
+goog.SEAL_MODULE_EXPORTS = goog.DEBUG;
+goog.loadedModules_ = {};
+goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
+goog.TRANSPILE = "detect";
+goog.TRANSPILER = "transpile.js";
+goog.DEPENDENCIES_ENABLED && (goog.dependencies_ = {loadFlags:{}, nameToPath:{}, requires:{}, visited:{}, written:{}, deferred:{}}, goog.inHtmlDocument_ = function() {
+ var a = goog.global.document;
+ return null != a && "write" in a;
+}, goog.findBasePath_ = function() {
+ if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) {
+ goog.basePath = goog.global.CLOSURE_BASE_PATH;
+ } else {
+ if (goog.inHtmlDocument_()) {
+ for (var a = goog.global.document.getElementsByTagName("SCRIPT"), b = a.length - 1;0 <= b;--b) {
+ var c = a[b].src, d = c.lastIndexOf("?"), d = -1 == d ? c.length : d;
+ if ("base.js" == c.substr(d - 7, 7)) {
+ goog.basePath = c.substr(0, d - 7);
+ break;
+ }
+ }
+ }
+ }
+}, goog.importScript_ = function(a, b) {
+ (goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_)(a, b) && (goog.dependencies_.written[a] = !0);
+}, goog.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.importProcessedScript_ = function(a, b, c) {
+ goog.importScript_("", 'goog.retrieveAndExec_("' + a + '", ' + b + ", " + c + ");");
+}, goog.queuedModules_ = [], goog.wrapModule_ = function(a, b) {
+ return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(b + "\n//# sourceURL=" + a + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + b + "\n;return exports});\n//# sourceURL=" + a + "\n";
+}, goog.loadQueuedModules_ = function() {
+ var a = goog.queuedModules_.length;
+ if (0 < a) {
+ var b = goog.queuedModules_;
+ goog.queuedModules_ = [];
+ for (var c = 0;c < a;c++) {
+ goog.maybeProcessDeferredPath_(b[c]);
+ }
+ }
+}, goog.maybeProcessDeferredDep_ = function(a) {
+ goog.isDeferredModule_(a) && goog.allDepsAreAvailable_(a) && (a = goog.getPathFromDeps_(a), goog.maybeProcessDeferredPath_(goog.basePath + a));
+}, goog.isDeferredModule_ = function(a) {
+ var b = (a = goog.getPathFromDeps_(a)) && goog.dependencies_.loadFlags[a] || {}, c = b.lang || "es3";
+ return a && ("goog" == b.module || goog.needsTranspile_(c)) ? goog.basePath + a in goog.dependencies_.deferred : !1;
+}, goog.allDepsAreAvailable_ = function(a) {
+ if ((a = goog.getPathFromDeps_(a)) && a in goog.dependencies_.requires) {
+ for (var b in goog.dependencies_.requires[a]) {
+ if (!goog.isProvided_(b) && !goog.isDeferredModule_(b)) {
+ return !1;
+ }
+ }
+ }
+ return !0;
+}, goog.maybeProcessDeferredPath_ = function(a) {
+ if (a in goog.dependencies_.deferred) {
+ var b = goog.dependencies_.deferred[a];
+ delete goog.dependencies_.deferred[a];
+ goog.globalEval(b);
+ }
+}, goog.loadModuleFromUrl = function(a) {
+ goog.retrieveAndExec_(a, !0, !1);
+}, goog.writeScriptSrcNode_ = function(a) {
+ goog.global.document.write('<script type="text/javascript" src="' + a + '">\x3c/script>');
+}, goog.appendScriptSrcNode_ = function(a) {
+ var b = goog.global.document, c = b.createElement("script");
+ c.type = "text/javascript";
+ c.src = a;
+ c.defer = !1;
+ c.async = !1;
+ b.head.appendChild(c);
+}, goog.writeScriptTag_ = function(a, b) {
+ if (goog.inHtmlDocument_()) {
+ var c = goog.global.document;
+ if (!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING && "complete" == c.readyState) {
+ if (/\bdeps.js$/.test(a)) {
+ return !1;
+ }
+ throw Error('Cannot write "' + a + '" after document load');
+ }
+ if (void 0 === b) {
+ if (goog.IS_OLD_IE_) {
+ var d = " onreadystatechange='goog.onScriptLoad_(this, " + ++goog.lastNonModuleScriptIndex_ + ")' ";
+ c.write('<script type="text/javascript" src="' + a + '"' + d + ">\x3c/script>");
+ } else {
+ goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING ? goog.appendScriptSrcNode_(a) : goog.writeScriptSrcNode_(a);
+ }
+ } else {
+ c.write('<script type="text/javascript">' + goog.protectScriptTag_(b) + "\x3c/script>");
+ }
+ return !0;
+ }
+ return !1;
+}, goog.protectScriptTag_ = function(a) {
+ return a.replace(/<\/(SCRIPT)/ig, "\\x3c\\$1");
+}, goog.needsTranspile_ = function(a) {
+ if ("always" == goog.TRANSPILE) {
+ return !0;
+ }
+ if ("never" == goog.TRANSPILE) {
+ return !1;
+ }
+ goog.requiresTranspilation_ || (goog.requiresTranspilation_ = goog.createRequiresTranspilation_());
+ if (a in goog.requiresTranspilation_) {
+ return goog.requiresTranspilation_[a];
+ }
+ throw Error("Unknown language mode: " + a);
+}, goog.requiresTranspilation_ = null, goog.lastNonModuleScriptIndex_ = 0, goog.onScriptLoad_ = function(a, b) {
+ "complete" == a.readyState && goog.lastNonModuleScriptIndex_ == b && goog.loadQueuedModules_();
+ return !0;
+}, goog.writeScripts_ = function(a) {
+ function b(a) {
+ if (!(a in e.written || a in e.visited)) {
+ e.visited[a] = !0;
+ if (a in e.requires) {
+ for (var f in e.requires[a]) {
+ if (!goog.isProvided_(f)) {
+ if (f in e.nameToPath) {
+ b(e.nameToPath[f]);
+ } else {
+ throw Error("Undefined nameToPath for " + f);
+ }
+ }
+ }
+ }
+ a in d || (d[a] = !0, c.push(a));
+ }
+ }
+ var c = [], d = {}, e = goog.dependencies_;
+ b(a);
+ for (a = 0;a < c.length;a++) {
+ var f = c[a];
+ goog.dependencies_.written[f] = !0;
+ }
+ var g = goog.moduleLoaderState_;
+ goog.moduleLoaderState_ = null;
+ for (a = 0;a < c.length;a++) {
+ if (f = c[a]) {
+ var h = e.loadFlags[f] || {}, k = goog.needsTranspile_(h.lang || "es3");
+ "goog" == h.module || k ? goog.importProcessedScript_(goog.basePath + f, "goog" == h.module, k) : goog.importScript_(goog.basePath + f);
+ } else {
+ throw goog.moduleLoaderState_ = g, Error("Undefined script input");
+ }
+ }
+ goog.moduleLoaderState_ = g;
+}, goog.getPathFromDeps_ = function(a) {
+ return a in goog.dependencies_.nameToPath ? goog.dependencies_.nameToPath[a] : null;
+}, goog.findBasePath_(), goog.global.CLOSURE_NO_DEPS || goog.importScript_(goog.basePath + "deps.js"));
+goog.loadModule = function(a) {
+ var b = goog.moduleLoaderState_;
+ try {
+ goog.moduleLoaderState_ = {moduleName:void 0, declareLegacyNamespace:!1};
+ var c;
+ if (goog.isFunction(a)) {
+ c = a.call(void 0, {});
+ } else {
+ if (goog.isString(a)) {
+ c = goog.loadModuleFromSource_.call(void 0, a);
+ } else {
+ throw Error("Invalid module definition");
+ }
+ }
+ var d = goog.moduleLoaderState_.moduleName;
+ if (!goog.isString(d) || !d) {
+ throw Error('Invalid module name "' + d + '"');
+ }
+ goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(d, c) : goog.SEAL_MODULE_EXPORTS && Object.seal && goog.isObject(c) && Object.seal(c);
+ goog.loadedModules_[d] = c;
+ } finally {
+ goog.moduleLoaderState_ = b;
+ }
+};
+goog.loadModuleFromSource_ = function(a) {
+ eval(a);
+ return {};
+};
+goog.normalizePath_ = function(a) {
+ a = a.split("/");
+ for (var b = 0;b < a.length;) {
+ "." == a[b] ? a.splice(b, 1) : b && ".." == a[b] && a[b - 1] && ".." != a[b - 1] ? a.splice(--b, 2) : b++;
+ }
+ return a.join("/");
+};
+goog.loadFileSync_ = function(a) {
+ if (goog.global.CLOSURE_LOAD_FILE_SYNC) {
+ return goog.global.CLOSURE_LOAD_FILE_SYNC(a);
+ }
+ try {
+ var b = new goog.global.XMLHttpRequest;
+ b.open("get", a, !1);
+ b.send();
+ return 0 == b.status || 200 == b.status ? b.responseText : null;
+ } catch (c) {
+ return null;
+ }
+};
+goog.retrieveAndExec_ = function(a, b, c) {
+ if (!COMPILED) {
+ var d = a;
+ a = goog.normalizePath_(a);
+ var e = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_, f = goog.loadFileSync_(a);
+ if (null == f) {
+ throw Error('Load of "' + a + '" failed');
+ }
+ c && (f = goog.transpile_.call(goog.global, f, a));
+ f = b ? goog.wrapModule_(a, f) : f + ("\n//# sourceURL=" + a);
+ goog.IS_OLD_IE_ ? (goog.dependencies_.deferred[d] = f, goog.queuedModules_.push(d)) : e(a, f);
+ }
+};
+goog.transpile_ = function(a, b) {
+ var c = goog.global.$jscomp;
+ c || (goog.global.$jscomp = c = {});
+ var d = c.transpile;
+ if (!d) {
+ var e = goog.basePath + goog.TRANSPILER, f = goog.loadFileSync_(e);
+ if (f) {
+ eval(f + "\n//# sourceURL=" + e);
+ if (goog.global.$gwtExport && goog.global.$gwtExport.$jscomp && !goog.global.$gwtExport.$jscomp.transpile) {
+ throw Error('The transpiler did not properly export the "transpile" method. $gwtExport: ' + JSON.stringify(goog.global.$gwtExport));
+ }
+ goog.global.$jscomp.transpile = goog.global.$gwtExport.$jscomp.transpile;
+ c = goog.global.$jscomp;
+ d = c.transpile;
+ }
+ }
+ d || (d = c.transpile = function(a, b) {
+ goog.logToConsole_(b + " requires transpilation but no transpiler was found.");
+ return a;
+ });
+ return d(a, b);
+};
+goog.typeOf = function(a) {
+ var b = typeof a;
+ if ("object" == b) {
+ if (a) {
+ if (a instanceof Array) {
+ return "array";
+ }
+ if (a instanceof Object) {
+ return b;
+ }
+ var c = Object.prototype.toString.call(a);
+ if ("[object Window]" == c) {
+ return "object";
+ }
+ if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) {
+ return "array";
+ }
+ if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) {
+ return "function";
+ }
+ } else {
+ return "null";
+ }
+ } else {
+ if ("function" == b && "undefined" == typeof a.call) {
+ return "object";
+ }
+ }
+ return b;
+};
+goog.isNull = function(a) {
+ return null === a;
+};
+goog.isDefAndNotNull = function(a) {
+ return null != a;
+};
+goog.isArray = function(a) {
+ return "array" == goog.typeOf(a);
+};
+goog.isArrayLike = function(a) {
+ var b = goog.typeOf(a);
+ return "array" == b || "object" == b && "number" == typeof a.length;
+};
+goog.isDateLike = function(a) {
+ return goog.isObject(a) && "function" == typeof a.getFullYear;
+};
+goog.isString = function(a) {
+ return "string" == typeof a;
+};
+goog.isBoolean = function(a) {
+ return "boolean" == typeof a;
+};
+goog.isNumber = function(a) {
+ return "number" == typeof a;
+};
+goog.isFunction = function(a) {
+ return "function" == goog.typeOf(a);
+};
+goog.isObject = function(a) {
+ var b = typeof a;
+ return "object" == b && null != a || "function" == b;
+};
+goog.getUid = function(a) {
+ return a[goog.UID_PROPERTY_] || (a[goog.UID_PROPERTY_] = ++goog.uidCounter_);
+};
+goog.hasUid = function(a) {
+ return !!a[goog.UID_PROPERTY_];
+};
+goog.removeUid = function(a) {
+ null !== a && "removeAttribute" in a && a.removeAttribute(goog.UID_PROPERTY_);
+ try {
+ delete a[goog.UID_PROPERTY_];
+ } catch (b) {
+ }
+};
+goog.UID_PROPERTY_ = "closure_uid_" + (1E9 * Math.random() >>> 0);
+goog.uidCounter_ = 0;
+goog.getHashCode = goog.getUid;
+goog.removeHashCode = goog.removeUid;
+goog.cloneObject = function(a) {
+ var b = goog.typeOf(a);
+ if ("object" == b || "array" == b) {
+ if (a.clone) {
+ return a.clone();
+ }
+ var b = "array" == b ? [] : {}, c;
+ for (c in a) {
+ b[c] = goog.cloneObject(a[c]);
+ }
+ return b;
+ }
+ return a;
+};
+goog.bindNative_ = function(a, b, c) {
+ return a.call.apply(a.bind, arguments);
+};
+goog.bindJs_ = function(a, b, c) {
+ if (!a) {
+ throw Error();
+ }
+ if (2 < arguments.length) {
+ var d = Array.prototype.slice.call(arguments, 2);
+ return function() {
+ var c = Array.prototype.slice.call(arguments);
+ Array.prototype.unshift.apply(c, d);
+ return a.apply(b, c);
+ };
+ }
+ return function() {
+ return a.apply(b, arguments);
+ };
+};
+goog.bind = function(a, b, c) {
+ Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bind = goog.bindNative_ : goog.bind = goog.bindJs_;
+ return goog.bind.apply(null, arguments);
+};
+goog.partial = function(a, b) {
+ var c = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ var b = c.slice();
+ b.push.apply(b, arguments);
+ return a.apply(this, b);
+ };
+};
+goog.mixin = function(a, b) {
+ for (var c in b) {
+ a[c] = b[c];
+ }
+};
+goog.now = goog.TRUSTED_SITE && Date.now || function() {
+ return +new Date;
+};
+goog.globalEval = function(a) {
+ if (goog.global.execScript) {
+ goog.global.execScript(a, "JavaScript");
+ } else {
+ if (goog.global.eval) {
+ if (null == goog.evalWorksForGlobals_) {
+ if (goog.global.eval("var _evalTest_ = 1;"), "undefined" != typeof goog.global._evalTest_) {
+ try {
+ delete goog.global._evalTest_;
+ } catch (d) {
+ }
+ goog.evalWorksForGlobals_ = !0;
+ } else {
+ goog.evalWorksForGlobals_ = !1;
+ }
+ }
+ if (goog.evalWorksForGlobals_) {
+ goog.global.eval(a);
+ } else {
+ var b = goog.global.document, c = b.createElement("SCRIPT");
+ c.type = "text/javascript";
+ c.defer = !1;
+ c.appendChild(b.createTextNode(a));
+ b.body.appendChild(c);
+ b.body.removeChild(c);
+ }
+ } else {
+ throw Error("goog.globalEval not available");
+ }
+ }
+};
+goog.evalWorksForGlobals_ = null;
+goog.getCssName = function(a, b) {
+ if ("." == String(a).charAt(0)) {
+ throw Error('className passed in goog.getCssName must not start with ".". You passed: ' + a);
+ }
+ var c = function(a) {
+ return goog.cssNameMapping_[a] || a;
+ }, d = function(a) {
+ a = a.split("-");
+ for (var b = [], d = 0;d < a.length;d++) {
+ b.push(c(a[d]));
+ }
+ return b.join("-");
+ }, d = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? c : d : function(a) {
+ return a;
+ }, d = b ? a + "-" + d(b) : d(a);
+ return goog.global.CLOSURE_CSS_NAME_MAP_FN ? goog.global.CLOSURE_CSS_NAME_MAP_FN(d) : d;
+};
+goog.setCssNameMapping = function(a, b) {
+ goog.cssNameMapping_ = a;
+ goog.cssNameMappingStyle_ = b;
+};
+!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING);
+goog.getMsg = function(a, b) {
+ b && (a = a.replace(/\{\$([^}]+)}/g, function(a, d) {
+ return null != b && d in b ? b[d] : a;
+ }));
+ return a;
+};
+goog.getMsgWithFallback = function(a, b) {
+ return a;
+};
+goog.exportSymbol = function(a, b, c) {
+ goog.exportPath_(a, b, c);
+};
+goog.exportProperty = function(a, b, c) {
+ a[b] = c;
+};
+goog.inherits = function(a, b) {
+ function c() {
+ }
+ c.prototype = b.prototype;
+ a.superClass_ = b.prototype;
+ a.prototype = new c;
+ a.prototype.constructor = a;
+ a.base = function(a, c, f) {
+ for (var d = Array(arguments.length - 2), e = 2;e < arguments.length;e++) {
+ d[e - 2] = arguments[e];
+ }
+ return b.prototype[c].apply(a, d);
+ };
+};
+goog.base = function(a, b, c) {
+ var d = arguments.callee.caller;
+ if (goog.STRICT_MODE_COMPATIBLE || goog.DEBUG && !d) {
+ throw Error("arguments.caller not defined. goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");
+ }
+ if (d.superClass_) {
+ for (var e = Array(arguments.length - 1), f = 1;f < arguments.length;f++) {
+ e[f - 1] = arguments[f];
+ }
+ return d.superClass_.constructor.apply(a, e);
+ }
+ e = Array(arguments.length - 2);
+ for (f = 2;f < arguments.length;f++) {
+ e[f - 2] = arguments[f];
+ }
+ for (var f = !1, g = a.constructor;g;g = g.superClass_ && g.superClass_.constructor) {
+ if (g.prototype[b] === d) {
+ f = !0;
+ } else {
+ if (f) {
+ return g.prototype[b].apply(a, e);
+ }
+ }
+ }
+ if (a[b] === d) {
+ return a.constructor.prototype[b].apply(a, e);
+ }
+ throw Error("goog.base called from a method of one name to a method of a different name");
+};
+goog.scope = function(a) {
+ if (goog.isInModuleLoader_()) {
+ throw Error("goog.scope is not supported within a goog.module.");
+ }
+ a.call(goog.global);
+};
+COMPILED || (goog.global.COMPILED = COMPILED);
+goog.defineClass = function(a, b) {
+ var c = b.constructor, d = b.statics;
+ c && c != Object.prototype.constructor || (c = function() {
+ throw Error("cannot instantiate an interface (no constructor defined).");
+ });
+ c = goog.defineClass.createSealingConstructor_(c, a);
+ a && goog.inherits(c, a);
+ delete b.constructor;
+ delete b.statics;
+ goog.defineClass.applyProperties_(c.prototype, b);
+ null != d && (d instanceof Function ? d(c) : goog.defineClass.applyProperties_(c, d));
+ return c;
+};
+goog.defineClass.SEAL_CLASS_INSTANCES = goog.DEBUG;
+goog.defineClass.createSealingConstructor_ = function(a, b) {
+ if (!goog.defineClass.SEAL_CLASS_INSTANCES) {
+ return a;
+ }
+ var c = !goog.defineClass.isUnsealable_(b), d = function() {
+ var b = a.apply(this, arguments) || this;
+ b[goog.UID_PROPERTY_] = b[goog.UID_PROPERTY_];
+ this.constructor === d && c && Object.seal instanceof Function && Object.seal(b);
+ return b;
+ };
+ return d;
+};
+goog.defineClass.isUnsealable_ = function(a) {
+ return a && a.prototype && a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_];
+};
+goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
+goog.defineClass.applyProperties_ = function(a, b) {
+ for (var c in b) {
+ Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
+ }
+ for (var d = 0;d < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++) {
+ c = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d], Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
+ }
+};
+goog.tagUnsealableClass = function(a) {
+ !COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES && (a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = !0);
+};
+goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = "goog_defineClass_legacy_unsealable";
+goog.createRequiresTranspilation_ = function() {
+ function a(a, b) {
+ d ? c[a] = !0 : b() ? c[a] = !1 : d = c[a] = !0;
+ }
+ function b(a) {
+ try {
+ return !!eval(a);
+ } catch (f) {
+ return !1;
+ }
+ }
+ var c = {es3:!1}, d = !1;
+ a("es5", function() {
+ return b("[1,].length==1");
+ });
+ a("es6", function() {
+ return b('(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()');
+ });
+ a("es6-impl", function() {
+ return !0;
+ });
+ a("es7", function() {
+ return b("2 ** 2 == 4");
+ });
+ a("es8", function() {
+ return b("async () => 1, true");
+ });
+ return c;
+};
+var axs = {};
+axs.browserUtils = {};
+axs.browserUtils.matchSelector = function(a, b) {
+ return a.matches ? a.matches(b) : a.webkitMatchesSelector ? a.webkitMatchesSelector(b) : a.mozMatchesSelector ? a.mozMatchesSelector(b) : a.msMatchesSelector ? a.msMatchesSelector(b) : !1;
+};
+axs.color = {};
+axs.color.Color = function(a, b, c, d) {
+ this.red = a;
+ this.green = b;
+ this.blue = c;
+ this.alpha = d;
+};
+axs.color.YCbCr = function(a) {
+ this.luma = this.z = a[0];
+ this.Cb = this.x = a[1];
+ this.Cr = this.y = a[2];
+};
+axs.color.YCbCr.prototype = {multiply:function(a) {
+ return new axs.color.YCbCr([this.luma * a, this.Cb * a, this.Cr * a]);
+}, add:function(a) {
+ return new axs.color.YCbCr([this.luma + a.luma, this.Cb + a.Cb, this.Cr + a.Cr]);
+}, subtract:function(a) {
+ return new axs.color.YCbCr([this.luma - a.luma, this.Cb - a.Cb, this.Cr - a.Cr]);
+}};
+axs.color.calculateContrastRatio = function(a, b) {
+ 1 > a.alpha && (a = axs.color.flattenColors(a, b));
+ var c = axs.color.calculateLuminance(a), d = axs.color.calculateLuminance(b);
+ return (Math.max(c, d) + .05) / (Math.min(c, d) + .05);
+};
+axs.color.calculateLuminance = function(a) {
+ return axs.color.toYCbCr(a).luma;
+};
+axs.color.luminanceRatio = function(a, b) {
+ return (Math.max(a, b) + .05) / (Math.min(a, b) + .05);
+};
+axs.color.parseColor = function(a) {
+ if ("transparent" === a) {
+ return new axs.color.Color(0, 0, 0, 0);
+ }
+ var b = a.match(/^rgb\((\d+), (\d+), (\d+)\)$/);
+ if (b) {
+ a = parseInt(b[1], 10);
+ var c = parseInt(b[2], 10), d = parseInt(b[3], 10);
+ return new axs.color.Color(a, c, d, 1);
+ }
+ return (b = a.match(/^rgba\((\d+), (\d+), (\d+), (\d*(\.\d+)?)\)/)) ? (a = parseInt(b[1], 10), c = parseInt(b[2], 10), d = parseInt(b[3], 10), b = parseFloat(b[4]), new axs.color.Color(a, c, d, b)) : null;
+};
+axs.color.colorChannelToString = function(a) {
+ a = Math.round(a);
+ return 15 >= a ? "0" + a.toString(16) : a.toString(16);
+};
+axs.color.colorToString = function(a) {
+ return 1 == a.alpha ? "#" + axs.color.colorChannelToString(a.red) + axs.color.colorChannelToString(a.green) + axs.color.colorChannelToString(a.blue) : "rgba(" + [a.red, a.green, a.blue, a.alpha].join() + ")";
+};
+axs.color.luminanceFromContrastRatio = function(a, b, c) {
+ return c ? (a + .05) * b - .05 : (a + .05) / b - .05;
+};
+axs.color.translateColor = function(a, b) {
+ for (var c = b > a.luma ? axs.color.WHITE_YCC : axs.color.BLACK_YCC, d = c == axs.color.WHITE_YCC ? axs.color.YCC_CUBE_FACES_WHITE : axs.color.YCC_CUBE_FACES_BLACK, e = new axs.color.YCbCr([0, a.Cb, a.Cr]), f = new axs.color.YCbCr([1, a.Cb, a.Cr]), f = {a:e, b:f}, e = null, g = 0;g < d.length && !(e = axs.color.findIntersection(f, d[g]), 0 <= e.z && 1 >= e.z);g++) {
+ }
+ if (!e) {
+ throw "Couldn't find intersection with YCbCr color cube for Cb=" + a.Cb + ", Cr=" + a.Cr + ".";
+ }
+ if (e.x != a.x || e.y != a.y) {
+ throw "Intersection has wrong Cb/Cr values.";
+ }
+ if (Math.abs(c.luma - e.luma) < Math.abs(c.luma - b)) {
+ return c = [b, a.Cb, a.Cr], axs.color.fromYCbCrArray(c);
+ }
+ c = (b - e.luma) / (c.luma - e.luma);
+ c = [b, e.Cb - e.Cb * c, e.Cr - e.Cr * c];
+ return axs.color.fromYCbCrArray(c);
+};
+axs.color.suggestColors = function(a, b, c) {
+ var d = {}, e = axs.color.calculateLuminance(a), f = axs.color.calculateLuminance(b), g = f > e, h = axs.color.toYCbCr(b), k = axs.color.toYCbCr(a), m;
+ for (m in c) {
+ var l = c[m], n = axs.color.luminanceFromContrastRatio(e, l + .02, g);
+ if (1 >= n && 0 <= n) {
+ var p = axs.color.translateColor(h, n), l = axs.color.calculateContrastRatio(p, a), n = {};
+ n.fg = axs.color.colorToString(p);
+ n.bg = axs.color.colorToString(a);
+ n.contrast = l.toFixed(2);
+ d[m] = n;
+ } else {
+ l = axs.color.luminanceFromContrastRatio(f, l + .02, !g), 1 >= l && 0 <= l && (p = axs.color.translateColor(k, l), l = axs.color.calculateContrastRatio(b, p), n = {}, n.bg = axs.color.colorToString(p), n.fg = axs.color.colorToString(b), n.contrast = l.toFixed(2), d[m] = n);
+ }
+ }
+ return d;
+};
+axs.color.flattenColors = function(a, b) {
+ var c = a.alpha;
+ return new axs.color.Color((1 - c) * b.red + c * a.red, (1 - c) * b.green + c * a.green, (1 - c) * b.blue + c * a.blue, a.alpha + b.alpha * (1 - a.alpha));
+};
+axs.color.multiplyMatrixVector = function(a, b) {
+ var c = b[0], d = b[1], e = b[2];
+ return [a[0][0] * c + a[0][1] * d + a[0][2] * e, a[1][0] * c + a[1][1] * d + a[1][2] * e, a[2][0] * c + a[2][1] * d + a[2][2] * e];
+};
+axs.color.toYCbCr = function(a) {
+ var b = a.red / 255, c = a.green / 255;
+ a = a.blue / 255;
+ return new axs.color.YCbCr(axs.color.multiplyMatrixVector(axs.color.YCC_MATRIX, [.03928 >= b ? b / 12.92 : Math.pow((b + .055) / 1.055, 2.4), .03928 >= c ? c / 12.92 : Math.pow((c + .055) / 1.055, 2.4), .03928 >= a ? a / 12.92 : Math.pow((a + .055) / 1.055, 2.4)]));
+};
+axs.color.fromYCbCr = function(a) {
+ return axs.color.fromYCbCrArray([a.luma, a.Cb, a.Cr]);
+};
+axs.color.fromYCbCrArray = function(a) {
+ var b = axs.color.multiplyMatrixVector(axs.color.INVERTED_YCC_MATRIX, a);
+ a = b[0];
+ var c = b[1], b = b[2];
+ return new axs.color.Color(Math.min(Math.max(Math.round(255 * (.00303949 >= a ? 12.92 * a : 1.055 * Math.pow(a, 1 / 2.4) - .055)), 0), 255), Math.min(Math.max(Math.round(255 * (.00303949 >= c ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - .055)), 0), 255), Math.min(Math.max(Math.round(255 * (.00303949 >= b ? 12.92 * b : 1.055 * Math.pow(b, 1 / 2.4) - .055)), 0), 255), 1);
+};
+axs.color.RGBToYCbCrMatrix = function(a, b) {
+ return [[a, 1 - a - b, b], [-a / (2 - 2 * b), (a + b - 1) / (2 - 2 * b), (1 - b) / (2 - 2 * b)], [(1 - a) / (2 - 2 * a), (a + b - 1) / (2 - 2 * a), -b / (2 - 2 * a)]];
+};
+axs.color.invert3x3Matrix = function(a) {
+ var b = a[0][0], c = a[0][1], d = a[0][2], e = a[1][0], f = a[1][1], g = a[1][2], h = a[2][0], k = a[2][1];
+ a = a[2][2];
+ return axs.color.scalarMultiplyMatrix([[f * a - g * k, d * k - c * a, c * g - d * f], [g * h - e * a, b * a - d * h, d * e - b * g], [e * k - f * h, h * c - b * k, b * f - c * e]], 1 / (b * (f * a - g * k) - c * (a * e - g * h) + d * (e * k - f * h)));
+};
+axs.color.findIntersection = function(a, b) {
+ var c = [a.a.x - b.p0.x, a.a.y - b.p0.y, a.a.z - b.p0.z], d = axs.color.invert3x3Matrix([[a.a.x - a.b.x, b.p1.x - b.p0.x, b.p2.x - b.p0.x], [a.a.y - a.b.y, b.p1.y - b.p0.y, b.p2.y - b.p0.y], [a.a.z - a.b.z, b.p1.z - b.p0.z, b.p2.z - b.p0.z]]), c = axs.color.multiplyMatrixVector(d, c)[0];
+ return a.a.add(a.b.subtract(a.a).multiply(c));
+};
+axs.color.scalarMultiplyMatrix = function(a, b) {
+ for (var c = [], d = 0;3 > d;d++) {
+ c[d] = axs.color.scalarMultiplyVector(a[d], b);
+ }
+ return c;
+};
+axs.color.scalarMultiplyVector = function(a, b) {
+ for (var c = [], d = 0;d < a.length;d++) {
+ c[d] = a[d] * b;
+ }
+ return c;
+};
+axs.color.kR = .2126;
+axs.color.kB = .0722;
+axs.color.YCC_MATRIX = axs.color.RGBToYCbCrMatrix(axs.color.kR, axs.color.kB);
+axs.color.INVERTED_YCC_MATRIX = axs.color.invert3x3Matrix(axs.color.YCC_MATRIX);
+axs.color.BLACK = new axs.color.Color(0, 0, 0, 1);
+axs.color.BLACK_YCC = axs.color.toYCbCr(axs.color.BLACK);
+axs.color.WHITE = new axs.color.Color(255, 255, 255, 1);
+axs.color.WHITE_YCC = axs.color.toYCbCr(axs.color.WHITE);
+axs.color.RED = new axs.color.Color(255, 0, 0, 1);
+axs.color.RED_YCC = axs.color.toYCbCr(axs.color.RED);
+axs.color.GREEN = new axs.color.Color(0, 255, 0, 1);
+axs.color.GREEN_YCC = axs.color.toYCbCr(axs.color.GREEN);
+axs.color.BLUE = new axs.color.Color(0, 0, 255, 1);
+axs.color.BLUE_YCC = axs.color.toYCbCr(axs.color.BLUE);
+axs.color.CYAN = new axs.color.Color(0, 255, 255, 1);
+axs.color.CYAN_YCC = axs.color.toYCbCr(axs.color.CYAN);
+axs.color.MAGENTA = new axs.color.Color(255, 0, 255, 1);
+axs.color.MAGENTA_YCC = axs.color.toYCbCr(axs.color.MAGENTA);
+axs.color.YELLOW = new axs.color.Color(255, 255, 0, 1);
+axs.color.YELLOW_YCC = axs.color.toYCbCr(axs.color.YELLOW);
+axs.color.YCC_CUBE_FACES_BLACK = [{p0:axs.color.BLACK_YCC, p1:axs.color.RED_YCC, p2:axs.color.GREEN_YCC}, {p0:axs.color.BLACK_YCC, p1:axs.color.GREEN_YCC, p2:axs.color.BLUE_YCC}, {p0:axs.color.BLACK_YCC, p1:axs.color.BLUE_YCC, p2:axs.color.RED_YCC}];
+axs.color.YCC_CUBE_FACES_WHITE = [{p0:axs.color.WHITE_YCC, p1:axs.color.CYAN_YCC, p2:axs.color.MAGENTA_YCC}, {p0:axs.color.WHITE_YCC, p1:axs.color.MAGENTA_YCC, p2:axs.color.YELLOW_YCC}, {p0:axs.color.WHITE_YCC, p1:axs.color.YELLOW_YCC, p2:axs.color.CYAN_YCC}];
+axs.constants = {};
+axs.constants.ARIA_ROLES = {alert:{namefrom:["author"], parent:["region"]}, alertdialog:{namefrom:["author"], namerequired:!0, parent:["alert", "dialog"]}, application:{namefrom:["author"], namerequired:!0, parent:["landmark"]}, article:{namefrom:["author"], parent:["document", "region"]}, banner:{namefrom:["author"], parent:["landmark"]}, button:{childpresentational:!0, namefrom:["contents", "author"], namerequired:!0, parent:["command"], properties:["aria-expanded", "aria-pressed"]}, checkbox:{namefrom:["contents",
+"author"], namerequired:!0, parent:["input"], requiredProperties:["aria-checked"], properties:["aria-checked"]}, columnheader:{namefrom:["contents", "author"], namerequired:!0, parent:["gridcell", "sectionhead", "widget"], properties:["aria-sort"], scope:["row"]}, combobox:{mustcontain:["listbox", "textbox"], namefrom:["author"], namerequired:!0, parent:["select"], requiredProperties:["aria-expanded"], properties:["aria-expanded", "aria-autocomplete", "aria-required"]}, command:{"abstract":!0, namefrom:["author"],
+parent:["widget"]}, complementary:{namefrom:["author"], parent:["landmark"]}, composite:{"abstract":!0, childpresentational:!1, namefrom:["author"], parent:["widget"], properties:["aria-activedescendant"]}, contentinfo:{namefrom:["author"], parent:["landmark"]}, definition:{namefrom:["author"], parent:["section"]}, dialog:{namefrom:["author"], namerequired:!0, parent:["window"]}, directory:{namefrom:["contents", "author"], parent:["list"]}, document:{namefrom:[" author"], namerequired:!0, parent:["structure"],
+properties:["aria-expanded"]}, form:{namefrom:["author"], parent:["landmark"]}, grid:{mustcontain:["row", "rowgroup"], namefrom:["author"], namerequired:!0, parent:["composite", "region"], properties:["aria-level", "aria-multiselectable", "aria-readonly"]}, gridcell:{namefrom:["contents", "author"], namerequired:!0, parent:["section", "widget"], properties:["aria-readonly", "aria-required", "aria-selected"], scope:["row"]}, group:{namefrom:[" author"], parent:["section"], properties:["aria-activedescendant"]},
+heading:{namerequired:!0, parent:["sectionhead"], properties:["aria-level"]}, img:{childpresentational:!0, namefrom:["author"], namerequired:!0, parent:["section"]}, input:{"abstract":!0, namefrom:["author"], parent:["widget"]}, landmark:{"abstract":!0, namefrom:["contents", "author"], namerequired:!1, parent:["region"]}, link:{namefrom:["contents", "author"], namerequired:!0, parent:["command"], properties:["aria-expanded"]}, list:{mustcontain:["group", "listitem"], namefrom:["author"], parent:["region"]},
+listbox:{mustcontain:["option"], namefrom:["author"], namerequired:!0, parent:["list", "select"], properties:["aria-multiselectable", "aria-required"]}, listitem:{namefrom:["contents", "author"], namerequired:!0, parent:["section"], properties:["aria-level", "aria-posinset", "aria-setsize"], scope:["list"]}, log:{namefrom:[" author"], namerequired:!0, parent:["region"]}, main:{namefrom:["author"], parent:["landmark"]}, marquee:{namerequired:!0, parent:["section"]}, math:{childpresentational:!0, namefrom:["author"],
+parent:["section"]}, menu:{mustcontain:["group", "menuitemradio", "menuitem", "menuitemcheckbox"], namefrom:["author"], namerequired:!0, parent:["list", "select"]}, menubar:{namefrom:["author"], parent:["menu"]}, menuitem:{namefrom:["contents", "author"], namerequired:!0, parent:["command"], scope:["menu", "menubar"]}, menuitemcheckbox:{namefrom:["contents", "author"], namerequired:!0, parent:["checkbox", "menuitem"], scope:["menu", "menubar"]}, menuitemradio:{namefrom:["contents", "author"], namerequired:!0,
+parent:["menuitemcheckbox", "radio"], scope:["menu", "menubar"]}, navigation:{namefrom:["author"], parent:["landmark"]}, note:{namefrom:["author"], parent:["section"]}, option:{namefrom:["contents", "author"], namerequired:!0, parent:["input"], properties:["aria-checked", "aria-posinset", "aria-selected", "aria-setsize"]}, presentation:{parent:["structure"]}, progressbar:{childpresentational:!0, namefrom:["author"], namerequired:!0, parent:["range"]}, radio:{namefrom:["contents", "author"], namerequired:!0,
+parent:["checkbox", "option"]}, radiogroup:{mustcontain:["radio"], namefrom:["author"], namerequired:!0, parent:["select"], properties:["aria-required"]}, range:{"abstract":!0, namefrom:["author"], parent:["widget"], properties:["aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-valuetext"]}, region:{namefrom:[" author"], parent:["section"]}, roletype:{"abstract":!0, properties:"aria-atomic aria-busy aria-controls aria-describedby aria-disabled aria-dropeffect aria-flowto aria-grabbed aria-haspopup aria-hidden aria-invalid aria-label aria-labelledby aria-live aria-owns aria-relevant".split(" ")},
+row:{mustcontain:["columnheader", "gridcell", "rowheader"], namefrom:["contents", "author"], parent:["group", "widget"], properties:["aria-level", "aria-selected"], scope:["grid", "rowgroup", "treegrid"]}, rowgroup:{mustcontain:["row"], namefrom:["contents", "author"], parent:["group"], scope:["grid"]}, rowheader:{namefrom:["contents", "author"], namerequired:!0, parent:["gridcell", "sectionhead", "widget"], properties:["aria-sort"], scope:["row"]}, search:{namefrom:["author"], parent:["landmark"]},
+section:{"abstract":!0, namefrom:["contents", "author"], parent:["structure"], properties:["aria-expanded"]}, sectionhead:{"abstract":!0, namefrom:["contents", "author"], parent:["structure"], properties:["aria-expanded"]}, select:{"abstract":!0, namefrom:["author"], parent:["composite", "group", "input"]}, separator:{childpresentational:!0, namefrom:["author"], parent:["structure"], properties:["aria-expanded", "aria-orientation"]}, scrollbar:{childpresentational:!0, namefrom:["author"], namerequired:!1,
+parent:["input", "range"], requiredProperties:["aria-controls", "aria-orientation", "aria-valuemax", "aria-valuemin", "aria-valuenow"], properties:["aria-controls", "aria-orientation", "aria-valuemax", "aria-valuemin", "aria-valuenow"]}, slider:{childpresentational:!0, namefrom:["author"], namerequired:!0, parent:["input", "range"], requiredProperties:["aria-valuemax", "aria-valuemin", "aria-valuenow"], properties:["aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-orientation"]}, spinbutton:{namefrom:["author"],
+namerequired:!0, parent:["input", "range"], requiredProperties:["aria-valuemax", "aria-valuemin", "aria-valuenow"], properties:["aria-valuemax", "aria-valuemin", "aria-valuenow", "aria-required"]}, status:{parent:["region"]}, structure:{"abstract":!0, parent:["roletype"]}, tab:{namefrom:["contents", "author"], parent:["sectionhead", "widget"], properties:["aria-selected"], scope:["tablist"]}, tablist:{mustcontain:["tab"], namefrom:["author"], parent:["composite", "directory"], properties:["aria-level"]},
+tabpanel:{namefrom:["author"], namerequired:!0, parent:["region"]}, textbox:{namefrom:["author"], namerequired:!0, parent:["input"], properties:["aria-activedescendant", "aria-autocomplete", "aria-multiline", "aria-readonly", "aria-required"]}, timer:{namefrom:["author"], namerequired:!0, parent:["status"]}, toolbar:{namefrom:["author"], parent:["group"]}, tooltip:{namerequired:!0, parent:["section"]}, tree:{mustcontain:["group", "treeitem"], namefrom:["author"], namerequired:!0, parent:["select"],
+properties:["aria-multiselectable", "aria-required"]}, treegrid:{mustcontain:["row"], namefrom:["author"], namerequired:!0, parent:["grid", "tree"]}, treeitem:{namefrom:["contents", "author"], namerequired:!0, parent:["listitem", "option"], scope:["group", "tree"]}, widget:{"abstract":!0, parent:["roletype"]}, window:{"abstract":!0, namefrom:[" author"], parent:["roletype"], properties:["aria-expanded"]}};
+axs.constants.WIDGET_ROLES = {};
+axs.constants.addAllParentRolesToSet_ = function(a, b) {
+ if (a.parent) {
+ for (var c = a.parent, d = 0;d < c.length;d++) {
+ var e = c[d];
+ b[e] = !0;
+ axs.constants.addAllParentRolesToSet_(axs.constants.ARIA_ROLES[e], b);
+ }
+ }
+};
+axs.constants.addAllPropertiesToSet_ = function(a, b, c) {
+ var d = a[b];
+ if (d) {
+ for (var e = 0;e < d.length;e++) {
+ c[d[e]] = !0;
+ }
+ }
+ if (a.parent) {
+ for (a = a.parent, d = 0;d < a.length;d++) {
+ axs.constants.addAllPropertiesToSet_(axs.constants.ARIA_ROLES[a[d]], b, c);
+ }
+ }
+};
+for (var roleName in axs.constants.ARIA_ROLES) {
+ var role = axs.constants.ARIA_ROLES[roleName], propertiesSet = {};
+ axs.constants.addAllPropertiesToSet_(role, "properties", propertiesSet);
+ role.propertiesSet = propertiesSet;
+ var requiredPropertiesSet = {};
+ axs.constants.addAllPropertiesToSet_(role, "requiredProperties", requiredPropertiesSet);
+ role.requiredPropertiesSet = requiredPropertiesSet;
+ var parentRolesSet = {};
+ axs.constants.addAllParentRolesToSet_(role, parentRolesSet);
+ role.allParentRolesSet = parentRolesSet;
+ "widget" in parentRolesSet && (axs.constants.WIDGET_ROLES[roleName] = role);
+}
+axs.constants.ARIA_PROPERTIES = {activedescendant:{type:"property", valueType:"idref"}, atomic:{defaultValue:"false", type:"property", valueType:"boolean"}, autocomplete:{defaultValue:"none", type:"property", valueType:"token", values:["inline", "list", "both", "none"]}, busy:{defaultValue:"false", type:"state", valueType:"boolean"}, checked:{defaultValue:"undefined", type:"state", valueType:"token", values:["true", "false", "mixed", "undefined"]}, controls:{type:"property", valueType:"idref_list"},
+describedby:{type:"property", valueType:"idref_list"}, disabled:{defaultValue:"false", type:"state", valueType:"boolean"}, dropeffect:{defaultValue:"none", type:"property", valueType:"token_list", values:"copy move link execute popup none".split(" ")}, expanded:{defaultValue:"undefined", type:"state", valueType:"token", values:["true", "false", "undefined"]}, flowto:{type:"property", valueType:"idref_list"}, grabbed:{defaultValue:"undefined", type:"state", valueType:"token", values:["true", "false",
+"undefined"]}, haspopup:{defaultValue:"false", type:"property", valueType:"boolean"}, hidden:{defaultValue:"false", type:"state", valueType:"boolean"}, invalid:{defaultValue:"false", type:"state", valueType:"token", values:["grammar", "false", "spelling", "true"]}, label:{type:"property", valueType:"string"}, labelledby:{type:"property", valueType:"idref_list"}, level:{type:"property", valueType:"integer"}, live:{defaultValue:"off", type:"property", valueType:"token", values:["off", "polite", "assertive"]},
+multiline:{defaultValue:"false", type:"property", valueType:"boolean"}, multiselectable:{defaultValue:"false", type:"property", valueType:"boolean"}, orientation:{defaultValue:"vertical", type:"property", valueType:"token", values:["horizontal", "vertical"]}, owns:{type:"property", valueType:"idref_list"}, posinset:{type:"property", valueType:"integer"}, pressed:{defaultValue:"undefined", type:"state", valueType:"token", values:["true", "false", "mixed", "undefined"]}, readonly:{defaultValue:"false",
+type:"property", valueType:"boolean"}, relevant:{defaultValue:"additions text", type:"property", valueType:"token_list", values:["additions", "removals", "text", "all"]}, required:{defaultValue:"false", type:"property", valueType:"boolean"}, selected:{defaultValue:"undefined", type:"state", valueType:"token", values:["true", "false", "undefined"]}, setsize:{type:"property", valueType:"integer"}, sort:{defaultValue:"none", type:"property", valueType:"token", values:["ascending", "descending", "none",
+"other"]}, valuemax:{type:"property", valueType:"decimal"}, valuemin:{type:"property", valueType:"decimal"}, valuenow:{type:"property", valueType:"decimal"}, valuetext:{type:"property", valueType:"string"}};
+(function() {
+ for (var a in axs.constants.ARIA_PROPERTIES) {
+ var b = axs.constants.ARIA_PROPERTIES[a];
+ if (b.values) {
+ for (var c = {}, d = 0;d < b.values.length;d++) {
+ c[b.values[d]] = !0;
+ }
+ b.valuesSet = c;
+ }
+ }
+})();
+axs.constants.GLOBAL_PROPERTIES = axs.constants.ARIA_ROLES.roletype.propertiesSet;
+axs.constants.NO_ROLE_NAME = " ";
+axs.constants.WIDGET_ROLE_TO_NAME = {alert:"aria_role_alert", alertdialog:"aria_role_alertdialog", button:"aria_role_button", checkbox:"aria_role_checkbox", columnheader:"aria_role_columnheader", combobox:"aria_role_combobox", dialog:"aria_role_dialog", grid:"aria_role_grid", gridcell:"aria_role_gridcell", link:"aria_role_link", listbox:"aria_role_listbox", log:"aria_role_log", marquee:"aria_role_marquee", menu:"aria_role_menu", menubar:"aria_role_menubar", menuitem:"aria_role_menuitem", menuitemcheckbox:"aria_role_menuitemcheckbox",
+menuitemradio:"aria_role_menuitemradio", option:axs.constants.NO_ROLE_NAME, progressbar:"aria_role_progressbar", radio:"aria_role_radio", radiogroup:"aria_role_radiogroup", rowheader:"aria_role_rowheader", scrollbar:"aria_role_scrollbar", slider:"aria_role_slider", spinbutton:"aria_role_spinbutton", status:"aria_role_status", tab:"aria_role_tab", tabpanel:"aria_role_tabpanel", textbox:"aria_role_textbox", timer:"aria_role_timer", toolbar:"aria_role_toolbar", tooltip:"aria_role_tooltip", treeitem:"aria_role_treeitem"};
+axs.constants.STRUCTURE_ROLE_TO_NAME = {article:"aria_role_article", application:"aria_role_application", banner:"aria_role_banner", columnheader:"aria_role_columnheader", complementary:"aria_role_complementary", contentinfo:"aria_role_contentinfo", definition:"aria_role_definition", directory:"aria_role_directory", document:"aria_role_document", form:"aria_role_form", group:"aria_role_group", heading:"aria_role_heading", img:"aria_role_img", list:"aria_role_list", listitem:"aria_role_listitem",
+main:"aria_role_main", math:"aria_role_math", navigation:"aria_role_navigation", note:"aria_role_note", region:"aria_role_region", rowheader:"aria_role_rowheader", search:"aria_role_search", separator:"aria_role_separator"};
+axs.constants.ATTRIBUTE_VALUE_TO_STATUS = [{name:"aria-autocomplete", values:{inline:"aria_autocomplete_inline", list:"aria_autocomplete_list", both:"aria_autocomplete_both"}}, {name:"aria-checked", values:{"true":"aria_checked_true", "false":"aria_checked_false", mixed:"aria_checked_mixed"}}, {name:"aria-disabled", values:{"true":"aria_disabled_true"}}, {name:"aria-expanded", values:{"true":"aria_expanded_true", "false":"aria_expanded_false"}}, {name:"aria-invalid", values:{"true":"aria_invalid_true",
+grammar:"aria_invalid_grammar", spelling:"aria_invalid_spelling"}}, {name:"aria-multiline", values:{"true":"aria_multiline_true"}}, {name:"aria-multiselectable", values:{"true":"aria_multiselectable_true"}}, {name:"aria-pressed", values:{"true":"aria_pressed_true", "false":"aria_pressed_false", mixed:"aria_pressed_mixed"}}, {name:"aria-readonly", values:{"true":"aria_readonly_true"}}, {name:"aria-required", values:{"true":"aria_required_true"}}, {name:"aria-selected", values:{"true":"aria_selected_true",
+"false":"aria_selected_false"}}];
+axs.constants.INPUT_TYPE_TO_INFORMATION_TABLE_MSG = {button:"input_type_button", checkbox:"input_type_checkbox", color:"input_type_color", datetime:"input_type_datetime", "datetime-local":"input_type_datetime_local", date:"input_type_date", email:"input_type_email", file:"input_type_file", image:"input_type_image", month:"input_type_month", number:"input_type_number", password:"input_type_password", radio:"input_type_radio", range:"input_type_range", reset:"input_type_reset", search:"input_type_search",
+submit:"input_type_submit", tel:"input_type_tel", text:"input_type_text", url:"input_type_url", week:"input_type_week"};
+axs.constants.TAG_TO_INFORMATION_TABLE_VERBOSE_MSG = {A:"tag_link", BUTTON:"tag_button", H1:"tag_h1", H2:"tag_h2", H3:"tag_h3", H4:"tag_h4", H5:"tag_h5", H6:"tag_h6", LI:"tag_li", OL:"tag_ol", SELECT:"tag_select", TEXTAREA:"tag_textarea", UL:"tag_ul", SECTION:"tag_section", NAV:"tag_nav", ARTICLE:"tag_article", ASIDE:"tag_aside", HGROUP:"tag_hgroup", HEADER:"tag_header", FOOTER:"tag_footer", TIME:"tag_time", MARK:"tag_mark"};
+axs.constants.TAG_TO_INFORMATION_TABLE_BRIEF_MSG = {BUTTON:"tag_button", SELECT:"tag_select", TEXTAREA:"tag_textarea"};
+axs.constants.MIXED_VALUES = {"true":!0, "false":!0, mixed:!0};
+axs.constants.Severity = {INFO:"Info", WARNING:"Warning", SEVERE:"Severe"};
+axs.constants.AuditResult = {PASS:"PASS", FAIL:"FAIL", NA:"NA"};
+axs.constants.InlineElements = {TT:!0, I:!0, B:!0, BIG:!0, SMALL:!0, EM:!0, STRONG:!0, DFN:!0, CODE:!0, SAMP:!0, KBD:!0, VAR:!0, CITE:!0, ABBR:!0, ACRONYM:!0, A:!0, IMG:!0, OBJECT:!0, BR:!0, SCRIPT:!0, MAP:!0, Q:!0, SUB:!0, SUP:!0, SPAN:!0, BDO:!0, INPUT:!0, SELECT:!0, TEXTAREA:!0, LABEL:!0, BUTTON:!0};
+axs.constants.NATIVELY_DISABLEABLE = {BUTTON:!0, INPUT:!0, SELECT:!0, TEXTAREA:!0, FIELDSET:!0, OPTGROUP:!0, OPTION:!0};
+axs.constants.ARIA_TO_HTML_ATTRIBUTE = {"aria-checked":"checked", "aria-disabled":"disabled", "aria-hidden":"hidden", "aria-expanded":"open", "aria-valuemax":"max", "aria-valuemin":"min", "aria-readonly":"readonly", "aria-required":"required", "aria-selected":"selected", "aria-valuenow":"value"};
+axs.constants.TAG_TO_IMPLICIT_SEMANTIC_INFO = {A:[{role:"link", allowed:"button checkbox menuitem menuitemcheckbox menuitemradio tab treeitem".split(" "), selector:"a[href]"}], ADDRESS:[{role:"", allowed:["contentinfo", "presentation"]}], AREA:[{role:"link", selector:"area[href]"}], ARTICLE:[{role:"article", allowed:["presentation", "article", "document", "application", "main"]}], ASIDE:[{role:"complementary", allowed:["note", "complementary", "search", "presentation"]}], AUDIO:[{role:"", allowed:["application",
+"presentation"]}], BASE:[{role:"", reserved:!0}], BODY:[{role:"document", allowed:["presentation"]}], BUTTON:[{role:"button", allowed:["link", "menuitem", "menuitemcheckbox", "menuitemradio", "radio"], selector:'button:not([aria-pressed]):not([type="menu"])'}, {role:"button", allowed:["button"], selector:"button[aria-pressed]"}, {role:"button", attributes:{"aria-haspopup":!0}, allowed:["link", "menuitem", "menuitemcheckbox", "menuitemradio", "radio"], selector:'button[type="menu"]'}], CAPTION:[{role:"",
+allowed:["presentation"]}], COL:[{role:"", reserved:!0}], COLGROUP:[{role:"", reserved:!0}], DATALIST:[{role:"listbox", attributes:{"aria-multiselectable":!1}, allowed:["presentation"]}], DEL:[{role:"", allowed:["*"]}], DD:[{role:"", allowed:["presentation"]}], DT:[{role:"", allowed:["presentation"]}], DETAILS:[{role:"group", allowed:["group", "presentation"]}], DIALOG:[{role:"dialog", allowed:"dialog alert alertdialog application log marquee status".split(" "), selector:"dialog[open]"}, {role:"dialog",
+attributes:{"aria-hidden":!0}, allowed:"dialog alert alertdialog application log marquee status".split(" "), selector:"dialog:not([open])"}], DIV:[{role:"", allowed:["*"]}], DL:[{role:"list", allowed:["presentation"]}], EMBED:[{role:"", allowed:["application", "document", "img", "presentation"]}], FIGURE:[{role:"", allowed:["*"]}], FOOTER:[{role:"", allowed:["contentinfo", "presentation"]}], FORM:[{role:"form", allowed:["presentation"]}], P:[{role:"", allowed:["*"]}], PRE:[{role:"", allowed:["*"]}],
+BLOCKQUOTE:[{role:"", allowed:["*"]}], H1:[{role:"heading"}], H2:[{role:"heading"}], H3:[{role:"heading"}], H4:[{role:"heading"}], H5:[{role:"heading"}], H6:[{role:"heading"}], HEAD:[{role:"", reserved:!0}], HEADER:[{role:"", allowed:["banner", "presentation"]}], HR:[{role:"separator", allowed:["presentation"]}], HTML:[{role:"", reserved:!0}], IFRAME:[{role:"", allowed:["application", "document", "img", "presentation"], selector:"iframe:not([seamless])"}, {role:"", allowed:["application", "document",
+"img", "presentation", "group"], selector:"iframe[seamless]"}], IMG:[{role:"presentation", reserved:!0, selector:'img[alt=""]'}, {role:"img", allowed:["*"], selector:'img[alt]:not([alt=""])'}], INPUT:[{role:"button", allowed:["link", "menuitem", "menuitemcheckbox", "menuitemradio", "radio"], selector:'input[type="button"]:not([aria-pressed])'}, {role:"button", allowed:["button"], selector:'input[type="button"][aria-pressed]'}, {role:"checkbox", allowed:["checkbox"], selector:'input[type="checkbox"]'},
+{role:"", selector:'input[type="color"]'}, {role:"", selector:'input[type="date"]'}, {role:"", selector:'input[type="datetime"]'}, {role:"textbox", selector:'input[type="email"]:not([list])'}, {role:"", selector:'input[type="file"]'}, {role:"", reserved:!0, selector:'input[type="hidden"]'}, {role:"button", allowed:["button"], selector:'input[type="image"][aria-pressed]'}, {role:"button", allowed:["link", "menuitem", "menuitemcheckbox", "menuitemradio", "radio"], selector:'input[type="image"]:not([aria-pressed])'},
+{role:"", selector:'input[type="month"]'}, {role:"", selector:'input[type="number"]'}, {role:"textbox", selector:'input[type="password"]'}, {role:"radio", allowed:["menuitemradio"], selector:'input[type="radio"]'}, {role:"slider", selector:'input[type="range"]'}, {role:"button", selector:'input[type="reset"]'}, {role:"combobox", selector:'input[type="search"][list]'}, {role:"textbox", selector:'input[type="search"]:not([list])'}, {role:"button", selector:'input[type="submit"]'}, {role:"combobox",
+selector:'input[type="tel"][list]'}, {role:"textbox", selector:'input[type="tel"]:not([list])'}, {role:"combobox", selector:'input[type="text"][list]'}, {role:"textbox", selector:'input[type="text"]:not([list])'}, {role:"textbox", selector:"input:not([type])"}, {role:"", selector:'input[type="time"]'}, {role:"combobox", selector:'input[type="url"][list]'}, {role:"textbox", selector:'input[type="url"]:not([list])'}, {role:"", selector:'input[type="week"]'}], INS:[{role:"", allowed:["*"]}], KEYGEN:[{role:""}],
+LABEL:[{role:"", allowed:["presentation"]}], LI:[{role:"listitem", allowed:"menuitem menuitemcheckbox menuitemradio option tab treeitem presentation".split(" "), selector:'ol:not([role="presentation"])>li, ul:not([role="presentation"])>li'}, {role:"listitem", allowed:"listitem menuitem menuitemcheckbox menuitemradio option tab treeitem presentation".split(" "), selector:'ol[role="presentation"]>li, ul[role="presentation"]>li'}], LINK:[{role:"link", reserved:!0, selector:"link[href]"}], MAIN:[{role:"",
+allowed:["main", "presentation"]}], MAP:[{role:"", reserved:!0}], MATH:[{role:"", allowed:["presentation"]}], MENU:[{role:"toolbar", selector:'menu[type="toolbar"]'}], MENUITEM:[{role:"menuitem", selector:'menuitem[type="command"]'}, {role:"menuitemcheckbox", selector:'menuitem[type="checkbox"]'}, {role:"menuitemradio", selector:'menuitem[type="radio"]'}], META:[{role:"", reserved:!0}], METER:[{role:"progressbar", allowed:["presentation"]}], NAV:[{role:"navigation", allowed:["navigation", "presentation"]}],
+NOSCRIPT:[{role:"", reserved:!0}], OBJECT:[{role:"", allowed:["application", "document", "img", "presentation"]}], OL:[{role:"list", allowed:"directory group listbox menu menubar tablist toolbar tree presentation".split(" ")}], OPTGROUP:[{role:"", allowed:["presentation"]}], OPTION:[{role:"option"}], OUTPUT:[{role:"status", allowed:["*"]}], PARAM:[{role:"", reserved:!0}], PICTURE:[{role:"", reserved:!0}], PROGRESS:[{role:"progressbar", allowed:["presentation"]}], SCRIPT:[{role:"", reserved:!0}],
+SECTION:[{role:"region", allowed:"alert alertdialog application contentinfo dialog document log marquee search status presentation".split(" ")}], SELECT:[{role:"listbox"}], SOURCE:[{role:"", reserved:!0}], SPAN:[{role:"", allowed:["*"]}], STYLE:[{role:"", reserved:!0}], SVG:[{role:"", allowed:["application", "document", "img", "presentation"]}], SUMMARY:[{role:"", allowed:["presentation"]}], TABLE:[{role:"", allowed:["*"]}], TEMPLATE:[{role:"", reserved:!0}], TEXTAREA:[{role:"textbox"}], TBODY:[{role:"rowgroup",
+allowed:["*"]}], THEAD:[{role:"rowgroup", allowed:["*"]}], TFOOT:[{role:"rowgroup", allowed:["*"]}], TITLE:[{role:"", reserved:!0}], TD:[{role:"", allowed:["*"]}], TH:[{role:"", allowed:["*"]}], TR:[{role:"", allowed:["*"]}], TRACK:[{role:"", reserved:!0}], UL:[{role:"list", allowed:"directory group listbox menu menubar tablist toolbar tree presentation".split(" ")}], VIDEO:[{role:"", allowed:["application", "presentation"]}]};
+axs.dom = {};
+axs.dom.parentElement = function(a) {
+ if (!a) {
+ return null;
+ }
+ a = axs.dom.composedParentNode(a);
+ if (!a) {
+ return null;
+ }
+ switch(a.nodeType) {
+ case Node.ELEMENT_NODE:
+ return a;
+ default:
+ return axs.dom.parentElement(a);
+ }
+};
+axs.dom.shadowHost = function(a) {
+ return "host" in a ? a.host : null;
+};
+axs.dom.composedParentNode = function(a) {
+ if (!a) {
+ return null;
+ }
+ if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+ return axs.dom.shadowHost(a);
+ }
+ var b = a.parentNode;
+ if (!b) {
+ return null;
+ }
+ if (b.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+ return axs.dom.shadowHost(b);
+ }
+ if (!b.shadowRoot) {
+ return b;
+ }
+ if (a.nodeType === Node.ELEMENT_NODE || a.nodeType === Node.TEXT_NODE) {
+ if (b = a.assignedSlot, HTMLSlotElement && b instanceof HTMLSlotElement) {
+ return axs.dom.composedParentNode(b);
+ }
+ }
+ return "function" === typeof a.getDestinationInsertionPoints && (a = a.getDestinationInsertionPoints(), 0 < a.length) ? axs.dom.composedParentNode(a[a.length - 1]) : null;
+};
+axs.dom.asElement = function(a) {
+ switch(a.nodeType) {
+ case Node.COMMENT_NODE:
+ break;
+ case Node.ELEMENT_NODE:
+ if ("script" == a.localName || "template" == a.localName) {
+ break;
+ }
+ return a;
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ return a.host;
+ case Node.TEXT_NODE:
+ return axs.dom.parentElement(a);
+ default:
+ console.warn("Unhandled node type: ", a.nodeType);
+ }
+ return null;
+};
+axs.dom.composedTreeSearch = function(a, b, c, d, e) {
+ if (a === b) {
+ return !0;
+ }
+ if (a.nodeType == Node.ELEMENT_NODE) {
+ var f = a;
+ }
+ var g = !1;
+ d = Object.create(d);
+ if (f) {
+ var h = f.localName;
+ d.collectIdRefs && (d.idrefs = axs.utils.getReferencedIds(f));
+ if (!d.disabled || "legend" === h && axs.browserUtils.matchSelector(f, "fieldset>legend:first-of-type")) {
+ d.disabled = axs.utils.isElementDisabled(f, !0);
+ }
+ d.hidden || (d.hidden = axs.utils.isElementHidden(f));
+ if (c.preorder && !c.preorder(f, d)) {
+ return g;
+ }
+ var k = f.shadowRoot || f.webkitShadowRoot;
+ if (k) {
+ return d.level++, g = axs.dom.composedTreeSearch(k, b, c, d, k), f && c.postorder && !g && c.postorder(f, d), g;
+ }
+ if ("content" == h && "function" === typeof f.getDistributedNodes) {
+ a = f.getDistributedNodes();
+ for (h = 0;h < a.length && !g;h++) {
+ g = axs.dom.composedTreeSearch(a[h], b, c, d, e);
+ }
+ c.postorder && !g && c.postorder.call(null, f, d);
+ return g;
+ }
+ }
+ for (a = a.firstChild;null != a && !g;) {
+ g = axs.dom.composedTreeSearch(a, b, c, d, e), a = a.nextSibling;
+ }
+ f && c.postorder && !g && c.postorder.call(null, f, d);
+ return g;
+};
+axs.utils = {};
+axs.utils.FOCUSABLE_ELEMENTS_SELECTOR = "input:not([type=hidden]):not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),a[href],iframe,[tabindex]";
+axs.utils.LABELABLE_ELEMENTS_SELECTOR = "button,input:not([type=hidden]),keygen,meter,output,progress,select,textarea";
+axs.utils.elementIsTransparent = function(a) {
+ return "0" == a.style.opacity;
+};
+axs.utils.elementHasZeroArea = function(a) {
+ a = a.getBoundingClientRect();
+ var b = a.top - a.bottom;
+ return a.right - a.left && b ? !1 : !0;
+};
+axs.utils.elementIsOutsideScrollArea = function(a) {
+ for (var b = axs.dom.parentElement(a), c = a.ownerDocument.defaultView;b != c.document.body;) {
+ if (axs.utils.isClippedBy(a, b)) {
+ return !0;
+ }
+ if (axs.utils.canScrollTo(a, b) && !axs.utils.elementIsOutsideScrollArea(b)) {
+ return !1;
+ }
+ b = axs.dom.parentElement(b);
+ }
+ return !axs.utils.canScrollTo(a, c.document.body);
+};
+axs.utils.canScrollTo = function(a, b) {
+ var c = a.getBoundingClientRect(), d = b.getBoundingClientRect();
+ if (b == b.ownerDocument.body) {
+ var e = d.top, f = d.left;
+ } else {
+ e = d.top - b.scrollTop, f = d.left - b.scrollLeft;
+ }
+ var g = e + b.scrollHeight, h = f + b.scrollWidth;
+ if (c.right < f || c.bottom < e || c.left > h || c.top > g) {
+ return !1;
+ }
+ e = a.ownerDocument.defaultView;
+ f = e.getComputedStyle(b);
+ return c.left > d.right || c.top > d.bottom ? "scroll" == f.overflow || "auto" == f.overflow || b instanceof e.HTMLBodyElement : !0;
+};
+axs.utils.isClippedBy = function(a, b) {
+ var c = a.getBoundingClientRect(), d = b.getBoundingClientRect(), e = d.top - b.scrollTop, f = d.left - b.scrollLeft, g = a.ownerDocument.defaultView.getComputedStyle(b);
+ return (c.right < d.left || c.bottom < d.top || c.left > d.right || c.top > d.bottom) && "hidden" == g.overflow ? !0 : c.right < f || c.bottom < e ? "visible" != g.overflow : !1;
+};
+axs.utils.isAncestor = function(a, b) {
+ if (null == b) {
+ return !1;
+ }
+ if (b === a) {
+ return !0;
+ }
+ var c = axs.dom.composedParentNode(b);
+ return axs.utils.isAncestor(a, c);
+};
+axs.utils.overlappingElements = function(a) {
+ if (axs.utils.elementHasZeroArea(a)) {
+ return null;
+ }
+ for (var b = [], c = a.getClientRects(), d = 0;d < c.length;d++) {
+ var e = c[d], e = document.elementFromPoint((e.left + e.right) / 2, (e.top + e.bottom) / 2);
+ if (null != e && e != a && !axs.utils.isAncestor(e, a) && !axs.utils.isAncestor(a, e)) {
+ var f = window.getComputedStyle(e, null);
+ f && (f = axs.utils.getBgColor(f, e)) && 0 < f.alpha && 0 > b.indexOf(e) && b.push(e);
+ }
+ }
+ return b;
+};
+axs.utils.elementIsHtmlControl = function(a) {
+ var b = a.ownerDocument.defaultView;
+ return a instanceof b.HTMLButtonElement || a instanceof b.HTMLInputElement || a instanceof b.HTMLSelectElement || a instanceof b.HTMLTextAreaElement ? !0 : !1;
+};
+axs.utils.elementIsAriaWidget = function(a) {
+ return a.hasAttribute("role") && (a = a.getAttribute("role")) && (a = axs.constants.ARIA_ROLES[a]) && "widget" in a.allParentRolesSet ? !0 : !1;
+};
+axs.utils.elementIsVisible = function(a) {
+ return axs.utils.elementIsTransparent(a) || axs.utils.elementHasZeroArea(a) || axs.utils.elementIsOutsideScrollArea(a) || axs.utils.overlappingElements(a).length ? !1 : !0;
+};
+axs.utils.isLargeFont = function(a) {
+ var b = a.fontSize;
+ a = "bold" == a.fontWeight;
+ var c = b.match(/(\d+)px/);
+ if (c) {
+ b = parseInt(c[1], 10);
+ if (c = window.getComputedStyle(document.body, null).fontSize.match(/(\d+)px/)) {
+ var d = parseInt(c[1], 10), c = 1.2 * d, d = 1.5 * d;
+ } else {
+ c = 19.2, d = 24;
+ }
+ return a && b >= c || b >= d;
+ }
+ if (c = b.match(/(\d+)em/)) {
+ return b = parseInt(c[1], 10), a && 1.2 <= b || 1.5 <= b ? !0 : !1;
+ }
+ if (c = b.match(/(\d+)%/)) {
+ return b = parseInt(c[1], 10), a && 120 <= b || 150 <= b ? !0 : !1;
+ }
+ if (c = b.match(/(\d+)pt/)) {
+ if (b = parseInt(c[1], 10), a && 14 <= b || 18 <= b) {
+ return !0;
+ }
+ }
+ return !1;
+};
+axs.utils.getBgColor = function(a, b) {
+ var c = axs.color.parseColor(a.backgroundColor);
+ if (!c) {
+ return null;
+ }
+ 1 > a.opacity && (c.alpha *= a.opacity);
+ if (1 > c.alpha) {
+ var d = axs.utils.getParentBgColor(b);
+ if (null == d) {
+ return null;
+ }
+ c = axs.color.flattenColors(c, d);
+ }
+ return c;
+};
+axs.utils.getParentBgColor = function(a) {
+ var b = a;
+ a = [];
+ for (var c = null;b = axs.dom.parentElement(b);) {
+ var d = window.getComputedStyle(b, null);
+ if (d) {
+ var e = axs.color.parseColor(d.backgroundColor);
+ if (e && (1 > d.opacity && (e.alpha *= d.opacity), 0 != e.alpha && (a.push(e), 1 == e.alpha))) {
+ c = !0;
+ break;
+ }
+ }
+ }
+ c || a.push(new axs.color.Color(255, 255, 255, 1));
+ for (b = a.pop();a.length;) {
+ c = a.pop(), b = axs.color.flattenColors(c, b);
+ }
+ return b;
+};
+axs.utils.getFgColor = function(a, b, c) {
+ var d = axs.color.parseColor(a.color);
+ if (!d) {
+ return null;
+ }
+ 1 > d.alpha && (d = axs.color.flattenColors(d, c));
+ 1 > a.opacity && (b = axs.utils.getParentBgColor(b), d.alpha *= a.opacity, d = axs.color.flattenColors(d, b));
+ return d;
+};
+axs.utils.getContrastRatioForElement = function(a) {
+ var b = window.getComputedStyle(a, null);
+ return axs.utils.getContrastRatioForElementWithComputedStyle(b, a);
+};
+axs.utils.getContrastRatioForElementWithComputedStyle = function(a, b) {
+ if (axs.utils.isElementHidden(b)) {
+ return null;
+ }
+ var c = axs.utils.getBgColor(a, b);
+ if (!c) {
+ return null;
+ }
+ var d = axs.utils.getFgColor(a, b, c);
+ return d ? axs.color.calculateContrastRatio(d, c) : null;
+};
+axs.utils.isNativeTextElement = function(a) {
+ var b = a.tagName.toLowerCase();
+ a = a.type ? a.type.toLowerCase() : "";
+ if ("textarea" == b) {
+ return !0;
+ }
+ if ("input" != b) {
+ return !1;
+ }
+ switch(a) {
+ case "email":
+ case "number":
+ case "password":
+ case "search":
+ case "text":
+ case "tel":
+ case "url":
+ case "":
+ return !0;
+ default:
+ return !1;
+ }
+};
+axs.utils.isLowContrast = function(a, b, c) {
+ a = Math.round(10 * a) / 10;
+ return c ? 4.5 > a || !axs.utils.isLargeFont(b) && 7 > a : 3 > a || !axs.utils.isLargeFont(b) && 4.5 > a;
+};
+axs.utils.hasLabel = function(a) {
+ var b = a.tagName.toLowerCase(), c = a.type ? a.type.toLowerCase() : "";
+ if (a.hasAttribute("aria-label") || a.hasAttribute("title") || "img" == b && a.hasAttribute("alt") || "input" == b && "image" == c && a.hasAttribute("alt") || "input" == b && ("submit" == c || "reset" == c) || a.hasAttribute("aria-labelledby") || a.hasAttribute("id") && 0 < document.querySelectorAll('label[for="' + a.id + '"]').length) {
+ return !0;
+ }
+ for (b = axs.dom.parentElement(a);b;) {
+ if ("label" == b.tagName.toLowerCase() && b.control == a) {
+ return !0;
+ }
+ b = axs.dom.parentElement(b);
+ }
+ return !1;
+};
+axs.utils.isNativelyDisableable = function(a) {
+ return a.tagName.toUpperCase() in axs.constants.NATIVELY_DISABLEABLE;
+};
+axs.utils.isElementDisabled = function(a, b) {
+ if (axs.browserUtils.matchSelector(a, b ? "[aria-disabled=true]" : "[aria-disabled=true], [aria-disabled=true] *")) {
+ return !0;
+ }
+ if (!axs.utils.isNativelyDisableable(a) || axs.browserUtils.matchSelector(a, "fieldset>legend:first-of-type *")) {
+ return !1;
+ }
+ for (var c = a;null !== c;c = axs.dom.parentElement(c)) {
+ if (c.hasAttribute("disabled")) {
+ return !0;
+ }
+ if (b) {
+ break;
+ }
+ }
+ return !1;
+};
+axs.utils.isElementHidden = function(a) {
+ if (!(a instanceof a.ownerDocument.defaultView.HTMLElement)) {
+ return !1;
+ }
+ if (a.hasAttribute("chromevoxignoreariahidden")) {
+ var b = !0;
+ }
+ var c = window.getComputedStyle(a, null);
+ return "none" == c.display || "hidden" == c.visibility ? !0 : a.hasAttribute("aria-hidden") && "true" == a.getAttribute("aria-hidden").toLowerCase() ? !b : !1;
+};
+axs.utils.isElementOrAncestorHidden = function(a) {
+ return axs.utils.isElementHidden(a) ? !0 : axs.dom.parentElement(a) ? axs.utils.isElementOrAncestorHidden(axs.dom.parentElement(a)) : !1;
+};
+axs.utils.isInlineElement = function(a) {
+ a = a.tagName.toUpperCase();
+ return axs.constants.InlineElements[a];
+};
+axs.utils.getRoles = function(a, b) {
+ if (!a || a.nodeType !== Node.ELEMENT_NODE || !a.hasAttribute("role") && !b) {
+ return null;
+ }
+ var c = a.getAttribute("role");
+ !c && b && (c = axs.properties.getImplicitRole(a));
+ if (!c) {
+ return null;
+ }
+ for (var c = c.split(" "), d = {roles:[], valid:!1}, e = 0;e < c.length;e++) {
+ var f = c[e], g = axs.constants.ARIA_ROLES[f], f = {name:f};
+ g && !g["abstract"] ? (f.details = g, d.applied || (d.applied = f), f.valid = d.valid = !0) : f.valid = !1;
+ d.roles.push(f);
+ }
+ return d;
+};
+axs.utils.getAriaPropertyValue = function(a, b, c) {
+ var d = a.replace(/^aria-/, ""), e = axs.constants.ARIA_PROPERTIES[d], d = {name:a, rawValue:b};
+ if (!e) {
+ return d.valid = !1, d.reason = '"' + a + '" is not a valid ARIA property', d;
+ }
+ e = e.valueType;
+ if (!e) {
+ return d.valid = !1, d.reason = '"' + a + '" is not a valid ARIA property', d;
+ }
+ switch(e) {
+ case "idref":
+ a = axs.utils.isValidIDRefValue(b, c), d.valid = a.valid, d.reason = a.reason, d.idref = a.idref;
+ case "idref_list":
+ a = b.split(/\s+/);
+ d.valid = !0;
+ for (b = 0;b < a.length;b++) {
+ e = axs.utils.isValidIDRefValue(a[b], c), e.valid || (d.valid = !1), d.values ? d.values.push(e) : d.values = [e];
+ }
+ return d;
+ case "integer":
+ c = axs.utils.isValidNumber(b);
+ if (!c.valid) {
+ return d.valid = !1, d.reason = c.reason, d;
+ }
+ Math.floor(c.value) !== c.value ? (d.valid = !1, d.reason = "" + b + " is not a whole integer") : (d.valid = !0, d.value = c.value);
+ return d;
+ case "decimal":
+ case "number":
+ c = axs.utils.isValidNumber(b);
+ d.valid = c.valid;
+ if (!c.valid) {
+ return d.reason = c.reason, d;
+ }
+ d.value = c.value;
+ return d;
+ case "string":
+ return d.valid = !0, d.value = b, d;
+ case "token":
+ return c = axs.utils.isValidTokenValue(a, b.toLowerCase()), c.valid ? (d.valid = !0, d.value = c.value) : (d.valid = !1, d.value = b, d.reason = c.reason), d;
+ case "token_list":
+ e = b.split(/\s+/);
+ d.valid = !0;
+ for (b = 0;b < e.length;b++) {
+ c = axs.utils.isValidTokenValue(a, e[b].toLowerCase()), c.valid || (d.valid = !1, d.reason ? (d.reason = [d.reason], d.reason.push(c.reason)) : (d.reason = c.reason, d.possibleValues = c.possibleValues)), d.values ? d.values.push(c.value) : d.values = [c.value];
+ }
+ return d;
+ case "tristate":
+ return c = axs.utils.isPossibleValue(b.toLowerCase(), axs.constants.MIXED_VALUES, a), c.valid ? (d.valid = !0, d.value = c.value) : (d.valid = !1, d.value = b, d.reason = c.reason), d;
+ case "boolean":
+ return c = axs.utils.isValidBoolean(b), c.valid ? (d.valid = !0, d.value = c.value) : (d.valid = !1, d.value = b, d.reason = c.reason), d;
+ }
+ d.valid = !1;
+ d.reason = "Not a valid ARIA property";
+ return d;
+};
+axs.utils.isValidTokenValue = function(a, b) {
+ var c = a.replace(/^aria-/, "");
+ return axs.utils.isPossibleValue(b, axs.constants.ARIA_PROPERTIES[c].valuesSet, a);
+};
+axs.utils.isPossibleValue = function(a, b, c) {
+ return b[a] ? {valid:!0, value:a} : {valid:!1, value:a, reason:'"' + a + '" is not a valid value for ' + c, possibleValues:Object.keys(b)};
+};
+axs.utils.isValidBoolean = function(a) {
+ try {
+ var b = JSON.parse(a);
+ } catch (c) {
+ b = "";
+ }
+ return "boolean" != typeof b ? {valid:!1, value:a, reason:'"' + a + '" is not a true/false value'} : {valid:!0, value:b};
+};
+axs.utils.isValidIDRefValue = function(a, b) {
+ return 0 == a.length ? {valid:!0, idref:a} : b.ownerDocument.getElementById(a) ? {valid:!0, idref:a} : {valid:!1, idref:a, reason:'No element with ID "' + a + '"'};
+};
+axs.utils.isValidNumber = function(a) {
+ var b = {valid:!1, value:a, reason:'"' + a + '" is not a number'};
+ if (!a) {
+ return b;
+ }
+ if (/^0x/i.test(a)) {
+ return b.reason = '"' + a + '" is not a decimal number', b;
+ }
+ a *= 1;
+ return isFinite(a) ? {valid:!0, value:a} : b;
+};
+axs.utils.isElementImplicitlyFocusable = function(a) {
+ var b = a.ownerDocument.defaultView;
+ return a instanceof b.HTMLAnchorElement || a instanceof b.HTMLAreaElement ? a.hasAttribute("href") : a instanceof b.HTMLInputElement || a instanceof b.HTMLSelectElement || a instanceof b.HTMLTextAreaElement || a instanceof b.HTMLButtonElement || a instanceof b.HTMLIFrameElement ? !a.disabled : !1;
+};
+axs.utils.values = function(a) {
+ var b = [], c;
+ for (c in a) {
+ a.hasOwnProperty(c) && "function" != typeof a[c] && b.push(a[c]);
+ }
+ return b;
+};
+axs.utils.namedValues = function(a) {
+ var b = {}, c;
+ for (c in a) {
+ a.hasOwnProperty(c) && "function" != typeof a[c] && (b[c] = a[c]);
+ }
+ return b;
+};
+function escapeId(a) {
+ return a.replace(/[^a-zA-Z0-9_-]/g, function(a) {
+ return "\\" + a;
+ });
+}
+axs.utils.getQuerySelectorText = function(a) {
+ if (null == a || "HTML" == a.tagName) {
+ return "html";
+ }
+ if ("BODY" == a.tagName) {
+ return "body";
+ }
+ if (a.hasAttribute) {
+ if (a.id) {
+ return "#" + escapeId(a.id);
+ }
+ if (a.className) {
+ for (var b = "", c = 0;c < a.classList.length;c++) {
+ b += "." + a.classList[c];
+ }
+ var d = 0;
+ if (a.parentNode) {
+ for (c = 0;c < a.parentNode.children.length;c++) {
+ var e = a.parentNode.children[c];
+ axs.browserUtils.matchSelector(e, b) && d++;
+ if (e === a) {
+ break;
+ }
+ }
+ } else {
+ d = 1;
+ }
+ if (1 == d) {
+ return axs.utils.getQuerySelectorText(a.parentNode) + " > " + b;
+ }
+ }
+ if (a.parentNode) {
+ b = a.parentNode.children;
+ d = 1;
+ for (c = 0;b[c] !== a;) {
+ b[c].tagName == a.tagName && d++, c++;
+ }
+ c = "";
+ "BODY" != a.parentNode.tagName && (c = axs.utils.getQuerySelectorText(a.parentNode) + " > ");
+ return 1 == d ? c + a.tagName : c + a.tagName + ":nth-of-type(" + d + ")";
+ }
+ } else {
+ if (a.selectorText) {
+ return a.selectorText;
+ }
+ }
+ return "";
+};
+axs.utils.getAriaIdReferrers = function(a, b) {
+ var c = function(a) {
+ var b = axs.constants.ARIA_PROPERTIES[a];
+ if (b) {
+ if ("idref" === b.valueType) {
+ return "[aria-" + a + "='" + d + "']";
+ }
+ if ("idref_list" === b.valueType) {
+ return "[aria-" + a + "~='" + d + "']";
+ }
+ }
+ return "";
+ };
+ if (!a) {
+ return null;
+ }
+ var d = a.id;
+ if (!d) {
+ return null;
+ }
+ d = d.replace(/'/g, "\\'");
+ if (b) {
+ var e = b.replace(/^aria-/, ""), f = c(e);
+ if (f) {
+ return a.ownerDocument.querySelectorAll(f);
+ }
+ } else {
+ var g = [];
+ for (e in axs.constants.ARIA_PROPERTIES) {
+ (f = c(e)) && g.push(f);
+ }
+ return a.ownerDocument.querySelectorAll(g.join(","));
+ }
+ return null;
+};
+axs.utils.getHtmlIdReferrers = function(a) {
+ if (!a) {
+ return null;
+ }
+ var b = a.id;
+ if (!b) {
+ return null;
+ }
+ var b = b.replace(/'/g, "\\'"), c = "[contextmenu='{id}'] [itemref~='{id}'] button[form='{id}'] button[menu='{id}'] fieldset[form='{id}'] input[form='{id}'] input[list='{id}'] keygen[form='{id}'] label[for='{id}'] label[form='{id}'] menuitem[command='{id}'] object[form='{id}'] output[for~='{id}'] output[form='{id}'] select[form='{id}'] td[headers~='{id}'] textarea[form='{id}'] tr[headers~='{id}']".split(" ").map(function(a) {
+ return a.replace("{id}", b);
+ });
+ return a.ownerDocument.querySelectorAll(c.join(","));
+};
+axs.utils.getReferencedIds = function(a) {
+ for (var b = [], c = function(a) {
+ a && (0 < a.indexOf(" ") ? b = b.concat(f.value.split(" ")) : b.push(a));
+ }, d = 0;d < a.attributes.length;d++) {
+ var e = a.tagName.toLowerCase(), f = a.attributes[d];
+ if (f.specified) {
+ var g = f.name, h = g.match(/aria-(.+)/);
+ if (h) {
+ e = axs.constants.ARIA_PROPERTIES[h[1]], !e || "idref" !== e.valueType && "idref_list" !== e.valueType || c(f.value);
+ } else {
+ switch(g) {
+ case "contextmenu":
+ case "itemref":
+ c(f.value);
+ break;
+ case "form":
+ "button" != e && "fieldset" != e && "input" != e && "keygen" != e && "label" != e && "object" != e && "output" != e && "select" != e && "textarea" != e || c(f.value);
+ break;
+ case "for":
+ "label" != e && "output" != e || c(f.value);
+ break;
+ case "menu":
+ "button" == e && c(f.value);
+ break;
+ case "list":
+ "input" == e && c(f.value);
+ break;
+ case "command":
+ "menuitem" == e && c(f.value);
+ break;
+ case "headers":
+ "td" != e && "tr" != e || c(f.value);
+ }
+ }
+ }
+ }
+ return b;
+};
+axs.utils.getIdReferrers = function(a) {
+ var b = [], c = axs.utils.getHtmlIdReferrers(a);
+ c && (b = b.concat(Array.prototype.slice.call(c)));
+ (c = axs.utils.getAriaIdReferrers(a)) && (b = b.concat(Array.prototype.slice.call(c)));
+ return b;
+};
+axs.utils.getIdReferents = function(a, b) {
+ var c = [], d = a.replace(/^aria-/, ""), d = axs.constants.ARIA_PROPERTIES[d];
+ if (!d || !b.hasAttribute(a)) {
+ return c;
+ }
+ d = d.valueType;
+ if ("idref_list" === d || "idref" === d) {
+ for (var d = b.ownerDocument, e = b.getAttribute(a), e = e.split(/\s+/), f = 0, g = e.length;f < g;f++) {
+ var h = d.getElementById(e[f]);
+ h && (c[c.length] = h);
+ }
+ }
+ return c;
+};
+axs.utils.getAriaPropertiesByValueType = function(a) {
+ var b = {}, c;
+ for (c in axs.constants.ARIA_PROPERTIES) {
+ var d = axs.constants.ARIA_PROPERTIES[c];
+ d && 0 <= a.indexOf(d.valueType) && (b[c] = d);
+ }
+ return b;
+};
+axs.utils.getSelectorForAriaProperties = function(a) {
+ a = Object.keys(a).map(function(a) {
+ return "[aria-" + a + "]";
+ });
+ a.sort();
+ return a.join(",");
+};
+axs.utils.findDescendantsWithRole = function(a, b) {
+ if (!a || !b) {
+ return [];
+ }
+ var c = axs.properties.getSelectorForRole(b);
+ if (c && (c = a.querySelectorAll(c))) {
+ c = Array.prototype.map.call(c, function(a) {
+ return a;
+ });
+ } else {
+ return [];
+ }
+ return c;
+};
+axs.properties = {};
+axs.properties.TEXT_CONTENT_XPATH = './/text()[normalize-space(.)!=""]/parent::*[name()!="script"]';
+axs.properties.getFocusProperties = function(a) {
+ var b = {}, c = a.getAttribute("tabindex");
+ void 0 != c ? b.tabindex = {value:c, valid:!0} : axs.utils.isElementImplicitlyFocusable(a) && (b.implicitlyFocusable = {value:!0, valid:!0});
+ if (0 == Object.keys(b).length) {
+ return null;
+ }
+ var d = axs.utils.elementIsTransparent(a), e = axs.utils.elementHasZeroArea(a), f = axs.utils.elementIsOutsideScrollArea(a), g = axs.utils.overlappingElements(a);
+ if (d || e || f || 0 < g.length) {
+ var c = axs.utils.isElementOrAncestorHidden(a), h = {value:!1, valid:c};
+ d && (h.transparent = !0);
+ e && (h.zeroArea = !0);
+ f && (h.outsideScrollArea = !0);
+ g && 0 < g.length && (h.overlappingElements = g);
+ d = {value:c, valid:c};
+ c && (d.reason = axs.properties.getHiddenReason(a));
+ h.hidden = d;
+ b.visible = h;
+ } else {
+ b.visible = {value:!0, valid:!0};
+ }
+ return b;
+};
+axs.properties.getHiddenReason = function(a) {
+ if (!(a && a instanceof a.ownerDocument.defaultView.HTMLElement)) {
+ return null;
+ }
+ if (a.hasAttribute("chromevoxignoreariahidden")) {
+ var b = !0;
+ }
+ var c = window.getComputedStyle(a, null);
+ return "none" == c.display ? {property:"display: none", on:a} : "hidden" == c.visibility ? {property:"visibility: hidden", on:a} : a.hasAttribute("aria-hidden") && "true" == a.getAttribute("aria-hidden").toLowerCase() && !b ? {property:"aria-hidden", on:a} : axs.properties.getHiddenReason(axs.dom.parentElement(a));
+};
+axs.properties.getColorProperties = function(a) {
+ var b = {};
+ (a = axs.properties.getContrastRatioProperties(a)) && (b.contrastRatio = a);
+ return 0 == Object.keys(b).length ? null : b;
+};
+axs.properties.hasDirectTextDescendant = function(a) {
+ function b() {
+ for (var b = c.evaluate(axs.properties.TEXT_CONTENT_XPATH, a, null, XPathResult.ANY_TYPE, null), e = b.iterateNext();null != e;e = b.iterateNext()) {
+ if (e === a) {
+ return !0;
+ }
+ }
+ return !1;
+ }
+ var c;
+ c = a.nodeType == Node.DOCUMENT_NODE ? a : a.ownerDocument;
+ return c.evaluate ? b() : function() {
+ for (var b = c.createTreeWalker(a, NodeFilter.SHOW_TEXT, null, !1);b.nextNode();) {
+ var e = b.currentNode, f = e.parentNode, f = f.host || f, f = f.tagName.toLowerCase();
+ if (e.nodeValue.trim() && "script" !== f && a !== e) {
+ return !0;
+ }
+ }
+ return !1;
+ }();
+};
+axs.properties.getContrastRatioProperties = function(a) {
+ if (!axs.properties.hasDirectTextDescendant(a)) {
+ return null;
+ }
+ var b = {}, c = window.getComputedStyle(a, null), d = axs.utils.getBgColor(c, a);
+ if (!d) {
+ return null;
+ }
+ b.backgroundColor = axs.color.colorToString(d);
+ var e = axs.utils.getFgColor(c, a, d);
+ b.foregroundColor = axs.color.colorToString(e);
+ a = axs.utils.getContrastRatioForElementWithComputedStyle(c, a);
+ if (!a) {
+ return null;
+ }
+ b.value = a.toFixed(2);
+ axs.utils.isLowContrast(a, c) && (b.alert = !0);
+ var f = axs.utils.isLargeFont(c) ? 3 : 4.5, c = axs.utils.isLargeFont(c) ? 4.5 : 7, g = {};
+ f > a && (g.AA = f);
+ c > a && (g.AAA = c);
+ if (!Object.keys(g).length) {
+ return b;
+ }
+ (d = axs.color.suggestColors(d, e, g)) && Object.keys(d).length && (b.suggestedColors = d);
+ return b;
+};
+axs.properties.findTextAlternatives = function(a, b, c, d) {
+ var e = c || !1;
+ c = axs.dom.asElement(a);
+ if (!c || !d && axs.utils.isElementOrAncestorHidden(c)) {
+ return null;
+ }
+ if (a.nodeType == Node.TEXT_NODE) {
+ return c = {type:"text"}, c.text = a.textContent, c.lastWord = axs.properties.getLastWord(c.text), b.content = c, a.textContent;
+ }
+ a = null;
+ e || (a = axs.properties.getTextFromAriaLabelledby(c, b));
+ if (c.hasAttribute("aria-label")) {
+ var f = {type:"text"};
+ f.text = c.getAttribute("aria-label");
+ f.lastWord = axs.properties.getLastWord(f.text);
+ a ? f.unused = !0 : e && axs.utils.elementIsHtmlControl(c) || (a = f.text);
+ b.ariaLabel = f;
+ }
+ c.hasAttribute("role") && "presentation" == c.getAttribute("role") || (a = axs.properties.getTextFromHostLanguageAttributes(c, b, a, e));
+ e && axs.utils.elementIsHtmlControl(c) && (f = c.ownerDocument.defaultView, c instanceof f.HTMLInputElement && ("text" == c.type && c.value && 0 < c.value.length && (b.controlValue = {text:c.value}), "range" == c.type && (b.controlValue = {text:c.value})), c instanceof f.HTMLSelectElement && (b.controlValue = {text:c.value}), b.controlValue && (f = b.controlValue, a ? f.unused = !0 : a = f.text));
+ if (e && axs.utils.elementIsAriaWidget(c)) {
+ e = c.getAttribute("role");
+ "textbox" == e && c.textContent && 0 < c.textContent.length && (b.controlValue = {text:c.textContent});
+ if ("slider" == e || "spinbutton" == e) {
+ c.hasAttribute("aria-valuetext") ? b.controlValue = {text:c.getAttribute("aria-valuetext")} : c.hasAttribute("aria-valuenow") && (b.controlValue = {value:c.getAttribute("aria-valuenow"), text:"" + c.getAttribute("aria-valuenow")});
+ }
+ if ("menu" == e) {
+ for (var g = c.querySelectorAll("[role=menuitemcheckbox], [role=menuitemradio]"), f = [], h = 0;h < g.length;h++) {
+ "true" == g[h].getAttribute("aria-checked") && f.push(g[h]);
+ }
+ if (0 < f.length) {
+ g = "";
+ for (h = 0;h < f.length;h++) {
+ g += axs.properties.findTextAlternatives(f[h], {}, !0), h < f.length - 1 && (g += ", ");
+ }
+ b.controlValue = {text:g};
+ }
+ }
+ if ("combobox" == e || "select" == e) {
+ b.controlValue = {text:"TODO"};
+ }
+ b.controlValue && (f = b.controlValue, a ? f.unused = !0 : a = f.text);
+ }
+ f = !0;
+ c.hasAttribute("role") && (e = c.getAttribute("role"), (e = axs.constants.ARIA_ROLES[e]) && (!e.namefrom || 0 > e.namefrom.indexOf("contents")) && (f = !1));
+ (d = axs.properties.getTextFromDescendantContent(c, d)) && f && (e = {type:"text"}, e.text = d, e.lastWord = axs.properties.getLastWord(e.text), a ? e.unused = !0 : a = d, b.content = e);
+ c.hasAttribute("title") && (d = {type:"string", valid:!0}, d.text = c.getAttribute("title"), d.lastWord = axs.properties.getLastWord(d.lastWord), a ? d.unused = !0 : a = d.text, b.title = d);
+ return 0 == Object.keys(b).length && null == a ? null : a;
+};
+axs.properties.getTextFromDescendantContent = function(a, b) {
+ for (var c = a.childNodes, d = [], e = 0;e < c.length;e++) {
+ var f = axs.properties.findTextAlternatives(c[e], {}, !0, b);
+ f && d.push(f.trim());
+ }
+ if (d.length) {
+ c = "";
+ for (e = 0;e < d.length;e++) {
+ c = [c, d[e]].join(" ").trim();
+ }
+ return c;
+ }
+ return null;
+};
+axs.properties.getTextFromAriaLabelledby = function(a, b) {
+ var c = null;
+ if (!a.hasAttribute("aria-labelledby")) {
+ return c;
+ }
+ for (var d = a.getAttribute("aria-labelledby").split(/\s+/), e = {valid:!0}, f = [], g = [], h = 0;h < d.length;h++) {
+ var k = {type:"element"}, m = d[h];
+ k.value = m;
+ var l = document.getElementById(m);
+ l ? (k.valid = !0, k.text = axs.properties.findTextAlternatives(l, {}, !0, !0), k.lastWord = axs.properties.getLastWord(k.text), f.push(k.text), k.element = l) : (k.valid = !1, e.valid = !1, k.errorMessage = {messageKey:"noElementWithId", args:[m]});
+ g.push(k);
+ }
+ 0 < g.length && (g[g.length - 1].last = !0, e.values = g, e.text = f.join(" "), e.lastWord = axs.properties.getLastWord(e.text), c = e.text, b.ariaLabelledby = e);
+ return c;
+};
+axs.properties.getTextFromHostLanguageAttributes = function(a, b, c, d) {
+ if (axs.browserUtils.matchSelector(a, "img") && a.hasAttribute("alt")) {
+ var e = {type:"string", valid:!0};
+ e.text = a.getAttribute("alt");
+ c ? e.unused = !0 : c = e.text;
+ b.alt = e;
+ }
+ if (axs.browserUtils.matchSelector(a, 'input:not([type="hidden"]):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), video:not([disabled])') && !d) {
+ if (a.hasAttribute("id")) {
+ d = document.querySelectorAll('label[for="' + a.id + '"]');
+ for (var e = {}, f = [], g = [], h = 0;h < d.length;h++) {
+ var k = {type:"element"}, m = d[h], l = axs.properties.findTextAlternatives(m, {}, !0);
+ l && 0 < l.trim().length && (k.text = l.trim(), g.push(l.trim()));
+ k.element = m;
+ f.push(k);
+ }
+ 0 < f.length && (f[f.length - 1].last = !0, e.values = f, e.text = g.join(" "), e.lastWord = axs.properties.getLastWord(e.text), c ? e.unused = !0 : c = e.text, b.labelFor = e);
+ }
+ d = axs.dom.parentElement(a);
+ for (e = {};d;) {
+ if ("label" == d.tagName.toLowerCase() && (f = d, f.control == a)) {
+ e.type = "element";
+ e.text = axs.properties.findTextAlternatives(f, {}, !0);
+ e.lastWord = axs.properties.getLastWord(e.text);
+ e.element = f;
+ break;
+ }
+ d = axs.dom.parentElement(d);
+ }
+ e.text && (c ? e.unused = !0 : c = e.text, b.labelWrapped = e);
+ axs.browserUtils.matchSelector(a, 'input[type="image"]') && a.hasAttribute("alt") && (e = {type:"string", valid:!0}, e.text = a.getAttribute("alt"), c ? e.unused = !0 : c = e.text, b.alt = e);
+ Object.keys(b).length || (b.noLabel = !0);
+ }
+ return c;
+};
+axs.properties.getLastWord = function(a) {
+ if (!a) {
+ return null;
+ }
+ var b = a.lastIndexOf(" ") + 1, c = a.length - 10;
+ return a.substring(b > c ? b : c);
+};
+axs.properties.getTextProperties = function(a) {
+ var b = {}, c = axs.properties.findTextAlternatives(a, b, !1, !0);
+ if (0 == Object.keys(b).length && ((a = axs.dom.asElement(a)) && axs.browserUtils.matchSelector(a, "img") && (b.alt = {valid:!1, errorMessage:"No alt value provided"}, a = a.src, "string" == typeof a && (c = a.split("/").pop(), b.filename = {text:c})), !c)) {
+ return null;
+ }
+ b.hasProperties = !!Object.keys(b).length;
+ b.computedText = c;
+ b.lastWord = axs.properties.getLastWord(c);
+ return b;
+};
+axs.properties.getAriaProperties = function(a) {
+ var b = {}, c = axs.properties.getGlobalAriaProperties(a), d;
+ for (d in axs.constants.ARIA_PROPERTIES) {
+ var e = "aria-" + d;
+ if (a.hasAttribute(e)) {
+ var f = a.getAttribute(e);
+ c[e] = axs.utils.getAriaPropertyValue(e, f, a);
+ }
+ }
+ 0 < Object.keys(c).length && (b.properties = axs.utils.values(c));
+ f = axs.utils.getRoles(a);
+ if (!f) {
+ return Object.keys(b).length ? b : null;
+ }
+ b.roles = f;
+ if (!f.valid || !f.roles) {
+ return b;
+ }
+ for (var e = f.roles, g = 0;g < e.length;g++) {
+ var h = e[g];
+ if (h.details && h.details.propertiesSet) {
+ for (d in h.details.propertiesSet) {
+ d in c || (a.hasAttribute(d) ? (f = a.getAttribute(d), c[d] = axs.utils.getAriaPropertyValue(d, f, a), "values" in c[d] && (f = c[d].values, f[f.length - 1].isLast = !0)) : h.details.requiredPropertiesSet[d] && (c[d] = {name:d, valid:!1, reason:"Required property not set"}));
+ }
+ }
+ }
+ 0 < Object.keys(c).length && (b.properties = axs.utils.values(c));
+ return 0 < Object.keys(b).length ? b : null;
+};
+axs.properties.getGlobalAriaProperties = function(a) {
+ var b = {}, c;
+ for (c in axs.constants.GLOBAL_PROPERTIES) {
+ if (a.hasAttribute(c)) {
+ var d = a.getAttribute(c);
+ b[c] = axs.utils.getAriaPropertyValue(c, d, a);
+ }
+ }
+ return b;
+};
+axs.properties.getVideoProperties = function(a) {
+ if (!axs.browserUtils.matchSelector(a, "video")) {
+ return null;
+ }
+ var b = {};
+ b.captionTracks = axs.properties.getTrackElements(a, "captions");
+ b.descriptionTracks = axs.properties.getTrackElements(a, "descriptions");
+ b.chapterTracks = axs.properties.getTrackElements(a, "chapters");
+ return b;
+};
+axs.properties.getTrackElements = function(a, b) {
+ var c = a.querySelectorAll("track[kind=" + b + "]"), d = {};
+ if (!c.length) {
+ return d.valid = !1, d.reason = {messageKey:"noTracksProvided", args:[[b]]}, d;
+ }
+ d.valid = !0;
+ for (var e = [], f = 0;f < c.length;f++) {
+ var g = {}, h = c[f].getAttribute("src"), k = c[f].getAttribute("srcLang"), m = c[f].getAttribute("label");
+ h ? (g.valid = !0, g.src = h) : (g.valid = !1, g.reason = {messageKey:"noSrcProvided"});
+ h = "";
+ m && (h += m, k && (h += " "));
+ k && (h += "(" + k + ")");
+ "" == h && (h = "[[object Object]]");
+ g.name = h;
+ e.push(g);
+ }
+ d.values = e;
+ return d;
+};
+axs.properties.getAllProperties = function(a) {
+ var b = axs.dom.asElement(a);
+ if (!b) {
+ return {};
+ }
+ var c = {};
+ c.ariaProperties = axs.properties.getAriaProperties(b);
+ c.colorProperties = axs.properties.getColorProperties(b);
+ c.focusProperties = axs.properties.getFocusProperties(b);
+ c.textProperties = axs.properties.getTextProperties(a);
+ c.videoProperties = axs.properties.getVideoProperties(b);
+ return c;
+};
+(function() {
+ function a(a) {
+ if (!a) {
+ return null;
+ }
+ var b = a.tagName;
+ if (!b) {
+ return null;
+ }
+ b = b.toUpperCase();
+ b = axs.constants.TAG_TO_IMPLICIT_SEMANTIC_INFO[b];
+ if (!b || !b.length) {
+ return null;
+ }
+ for (var d = null, e = 0, f = b.length;e < f;e++) {
+ var g = b[e];
+ if (g.selector) {
+ if (axs.browserUtils.matchSelector(a, g.selector)) {
+ return g;
+ }
+ } else {
+ d = g;
+ }
+ }
+ return d;
+ }
+ axs.properties.getImplicitRole = function(b) {
+ return (b = a(b)) ? b.role : "";
+ };
+ axs.properties.canTakeAriaAttributes = function(b) {
+ return (b = a(b)) ? !b.reserved : !0;
+ };
+})();
+axs.properties.getNativelySupportedAttributes = function(a) {
+ var b = [];
+ if (!a) {
+ return b;
+ }
+ a = a.cloneNode(!1);
+ for (var c = Object.keys(axs.constants.ARIA_TO_HTML_ATTRIBUTE), d = 0;d < c.length;d++) {
+ var e = c[d];
+ axs.constants.ARIA_TO_HTML_ATTRIBUTE[e] in a && (b[b.length] = e);
+ }
+ return b;
+};
+(function() {
+ var a = {};
+ axs.properties.getSelectorForRole = function(b) {
+ if (!b) {
+ return "";
+ }
+ if (a[b] && a.hasOwnProperty(b)) {
+ return a[b];
+ }
+ var c = ['[role="' + b + '"]'];
+ Object.keys(axs.constants.TAG_TO_IMPLICIT_SEMANTIC_INFO).forEach(function(a) {
+ var d = axs.constants.TAG_TO_IMPLICIT_SEMANTIC_INFO[a];
+ if (d && d.length) {
+ for (var f = 0;f < d.length;f++) {
+ var g = d[f];
+ if (g.role === b) {
+ if (g.selector) {
+ c[c.length] = g.selector;
+ } else {
+ c[c.length] = a;
+ break;
+ }
+ }
+ }
+ }
+ });
+ return a[b] = c.join(",");
+ };
+})();
+axs.AuditRule = function(a) {
+ for (var b = a.opt_requires || {}, c = !0, d = [], e = 0;e < axs.AuditRule.requiredFields.length;e++) {
+ var f = axs.AuditRule.requiredFields[e];
+ f in a || (c = !1, d.push(f));
+ }
+ if (!c) {
+ throw "Invalid spec; the following fields were not specified: " + d.join(", ") + "\n" + JSON.stringify(a);
+ }
+ this.name = a.name;
+ this.severity = a.severity;
+ this.relevantElementMatcher_ = a.relevantElementMatcher;
+ this.isRelevant_ = a.isRelevant || function(a, b) {
+ return !0;
+ };
+ this.test_ = a.test;
+ this.code = a.code;
+ this.heading = a.heading || "";
+ this.url = a.url || "";
+ this.requiresConsoleAPI = !!b.consoleAPI;
+ this.relevantElements = [];
+ this.relatedElements = [];
+ this.collectIdRefs = b.idRefs || !1;
+};
+axs.AuditRule.requiredFields = "name severity relevantElementMatcher test code heading".split(" ");
+axs.AuditRule.NOT_APPLICABLE = {result:axs.constants.AuditResult.NA};
+axs.AuditRule.prototype.addElement = function(a, b) {
+ a.push(b);
+};
+axs.AuditRule.prototype.collectMatchingElement = function(a, b) {
+ return this.relevantElementMatcher_(a, b) && b.inScope ? (this.relevantElements.push({element:a, flags:b}), !0) : !1;
+};
+axs.AuditRule.prototype.canRun = function(a) {
+ return this.disabled || !a.withConsoleApi && this.requiresConsoleAPI ? !1 : !0;
+};
+axs.AuditRule.Result = function(a, b) {
+ var c = axs.utils.namedValues(b);
+ c.severity = a.getSeverity(b.name) || c.severity;
+ this.rule = c;
+ this.maxResults = a.maxResults;
+ this.update(axs.constants.AuditResult.NA);
+};
+axs.AuditRule.Result.prototype.update = function(a, b) {
+ if (a === axs.constants.AuditResult.FAIL) {
+ var c = this.elements || (this.elements = []);
+ this.result = a;
+ this.maxResults && this.elements.length >= this.maxResults ? this.resultsTruncated = !0 : b && c.push(b);
+ } else {
+ a === axs.constants.AuditResult.PASS ? (this.elements || (this.elements = []), this.result !== axs.constants.AuditResult.FAIL && (this.result = a)) : this.result || (this.result = a);
+ }
+};
+axs.AuditRule.prototype.run = function(a) {
+ try {
+ for (var b = this._options || {}, c = new axs.AuditRule.Result(a, this), d;d = this.relevantElements.shift();) {
+ var e = d.element, f = d.flags;
+ this.isRelevant_(e, f) && (this.test_(e, f, b.config) ? c.update(axs.constants.AuditResult.FAIL, e) : c.update(axs.constants.AuditResult.PASS, e));
+ }
+ return c;
+ } finally {
+ this.relatedElements.length = 0;
+ }
+};
+axs.AuditRules = {};
+(function() {
+ var a = {}, b = {};
+ axs.AuditRules.specs = {};
+ axs.AuditRules.addRule = function(c) {
+ var d = new axs.AuditRule(c);
+ if (d.code in b) {
+ throw Error('Can not add audit rule with same code: "' + d.code + '"');
+ }
+ if (d.name in a) {
+ throw Error('Can not add audit rule with same name: "' + d.name + '"');
+ }
+ a[d.name] = b[d.code] = d;
+ axs.AuditRules.specs[c.name] = c;
+ };
+ axs.AuditRules.getRule = function(c) {
+ return a[c] || b[c] || null;
+ };
+ axs.AuditRules.getRules = function(b) {
+ var c = Object.keys(a);
+ return b ? c : c.map(function(a) {
+ return this.getRule(a);
+ }, axs.AuditRules);
+ };
+ axs.AuditRules.getActiveRules = function(a) {
+ var b;
+ b = a.auditRulesToRun && 0 < a.auditRulesToRun.length ? a.auditRulesToRun : axs.AuditRules.getRules(!0);
+ if (a.auditRulesToIgnore) {
+ for (var c = 0;c < a.auditRulesToIgnore.length;c++) {
+ var f = a.auditRulesToIgnore[c];
+ 0 > b.indexOf(f) || b.splice(b.indexOf(f), 1);
+ }
+ }
+ return b.map(axs.AuditRules.getRule);
+ };
+})();
+axs.AuditResults = function() {
+ this.errors_ = [];
+ this.warnings_ = [];
+};
+goog.exportSymbol("axs.AuditResults", axs.AuditResults);
+axs.AuditResults.prototype.addError = function(a) {
+ "" != a && this.errors_.push(a);
+};
+goog.exportProperty(axs.AuditResults.prototype, "addError", axs.AuditResults.prototype.addError);
+axs.AuditResults.prototype.addWarning = function(a) {
+ "" != a && this.warnings_.push(a);
+};
+goog.exportProperty(axs.AuditResults.prototype, "addWarning", axs.AuditResults.prototype.addWarning);
+axs.AuditResults.prototype.numErrors = function() {
+ return this.errors_.length;
+};
+goog.exportProperty(axs.AuditResults.prototype, "numErrors", axs.AuditResults.prototype.numErrors);
+axs.AuditResults.prototype.numWarnings = function() {
+ return this.warnings_.length;
+};
+goog.exportProperty(axs.AuditResults.prototype, "numWarnings", axs.AuditResults.prototype.numWarnings);
+axs.AuditResults.prototype.getErrors = function() {
+ return this.errors_;
+};
+goog.exportProperty(axs.AuditResults.prototype, "getErrors", axs.AuditResults.prototype.getErrors);
+axs.AuditResults.prototype.getWarnings = function() {
+ return this.warnings_;
+};
+goog.exportProperty(axs.AuditResults.prototype, "getWarnings", axs.AuditResults.prototype.getWarnings);
+axs.AuditResults.prototype.toString = function() {
+ for (var a = "", b = 0;b < this.errors_.length;b++) {
+ 0 == b && (a += "\nErrors:\n");
+ var c = this.errors_[b], a = a + (c + "\n\n");
+ }
+ for (b = 0;b < this.warnings_.length;b++) {
+ 0 == b && (a += "\nWarnings:\n"), c = this.warnings_[b], a += c + "\n\n";
+ }
+ return a;
+};
+goog.exportProperty(axs.AuditResults.prototype, "toString", axs.AuditResults.prototype.toString);
+axs.Audit = {};
+axs.AuditConfiguration = function(a) {
+ null == a && (a = {});
+ this.rules_ = {};
+ this.maxResults = this.auditRulesToIgnore = this.auditRulesToRun = this.scope = null;
+ this.withConsoleApi = !1;
+ this.showUnsupportedRulesWarning = this.walkDom = !0;
+ for (var b in this) {
+ this.hasOwnProperty(b) && b in a && (this[b] = a[b]);
+ }
+ goog.exportProperty(this, "scope", this.scope);
+ goog.exportProperty(this, "auditRulesToRun", this.auditRulesToRun);
+ goog.exportProperty(this, "auditRulesToIgnore", this.auditRulesToIgnore);
+ goog.exportProperty(this, "withConsoleApi", this.withConsoleApi);
+ goog.exportProperty(this, "walkDom", this.walkDom);
+ goog.exportProperty(this, "showUnsupportedRulesWarning", this.showUnsupportedRulesWarning);
+};
+goog.exportSymbol("axs.AuditConfiguration", axs.AuditConfiguration);
+axs.AuditConfiguration.prototype = {ignoreSelectors:function(a, b) {
+ a in this.rules_ || (this.rules_[a] = {});
+ "ignore" in this.rules_[a] || (this.rules_[a].ignore = []);
+ Array.prototype.push.call(this.rules_[a].ignore, b);
+}, getIgnoreSelectors:function(a) {
+ return a in this.rules_ && "ignore" in this.rules_[a] ? this.rules_[a].ignore : [];
+}, setSeverity:function(a, b) {
+ a in this.rules_ || (this.rules_[a] = {});
+ this.rules_[a].severity = b;
+}, getSeverity:function(a) {
+ return a in this.rules_ && "severity" in this.rules_[a] ? this.rules_[a].severity : null;
+}, setRuleConfig:function(a, b) {
+ a in this.rules_ || (this.rules_[a] = {});
+ this.rules_[a].config = b;
+}, getRuleConfig:function(a) {
+ return a in this.rules_ && "config" in this.rules_[a] ? this.rules_[a].config : null;
+}};
+goog.exportProperty(axs.AuditConfiguration.prototype, "ignoreSelectors", axs.AuditConfiguration.prototype.ignoreSelectors);
+goog.exportProperty(axs.AuditConfiguration.prototype, "getIgnoreSelectors", axs.AuditConfiguration.prototype.getIgnoreSelectors);
+axs.Audit.unsupportedRulesWarningShown = !1;
+axs.Audit.getRulesCannotRun = function(a) {
+ return a.withConsoleApi ? [] : axs.AuditRules.getRules().filter(function(a) {
+ return a.requiresConsoleAPI;
+ }).map(function(a) {
+ return a.code;
+ });
+};
+axs.Audit.run = function(a) {
+ a = a || new axs.AuditConfiguration;
+ if (!axs.Audit.unsupportedRulesWarningShown && a.showUnsupportedRulesWarning) {
+ var b = axs.Audit.getRulesCannotRun(a);
+ 0 < b.length && (console.warn("Some rules cannot be checked using the axs.Audit.run() method call. Use the Chrome plugin to check these rules: " + b.join(", ")), console.warn("To remove this message, pass an AuditConfiguration object to axs.Audit.run() and set configuration.showUnsupportedRulesWarning = false."));
+ axs.Audit.unsupportedRulesWarningShown = !0;
+ }
+ b = axs.AuditRules.getActiveRules(a);
+ a.collectIdRefs = b.some(function(a) {
+ return a.collectIdRefs;
+ });
+ a.scope || (a.scope = document.documentElement);
+ axs.Audit.collectMatchingElements(a, b);
+ for (var c = [], d = 0;d < b.length;d++) {
+ var e = b[d];
+ e.canRun(a) && c.push(e.run(a));
+ }
+ return c;
+};
+goog.exportSymbol("axs.Audit.run", axs.Audit.run);
+(function() {
+ function a(a, c) {
+ var b = a.getIgnoreSelectors(c.name);
+ if (0 < b.length || a.scope) {
+ this.ignoreSelectors = b;
+ }
+ if (b = a.getRuleConfig(c.name)) {
+ this.config = b;
+ }
+ }
+ axs.Audit.collectMatchingElements = function(b, c) {
+ axs.dom.composedTreeSearch(b.walkDom ? document.documentElement : b.scope, null, {preorder:function(d, e) {
+ e.inScope || (e.inScope = d === b.scope);
+ for (var f = 0;f < c.length;f++) {
+ var g = c[f];
+ g.canRun(b) && (g._options = new a(b, g), e.ignoring[g.name] || (e.ignoring[g.name] = g._options.shouldIgnore(d)) || g.collectMatchingElement(d, e));
+ }
+ return !0;
+ }}, {walkDom:b.walkDom, collectIdRefs:b.collectIdRefs, level:0, ignoring:{}, disabled:!1, hidden:!1});
+ };
+ a.prototype.shouldIgnore = function(a) {
+ var b = this.ignoreSelectors;
+ if (b) {
+ for (var d = 0;d < b.length;d++) {
+ if (axs.browserUtils.matchSelector(a, b[d])) {
+ return !0;
+ }
+ }
+ }
+ return !1;
+ };
+})();
+axs.Audit.auditResults = function(a) {
+ for (var b = new axs.AuditResults, c = 0;c < a.length;c++) {
+ var d = a[c];
+ d.result == axs.constants.AuditResult.FAIL && (d.rule.severity == axs.constants.Severity.SEVERE ? b.addError(axs.Audit.accessibilityErrorMessage(d)) : b.addWarning(axs.Audit.accessibilityErrorMessage(d)));
+ }
+ return b;
+};
+goog.exportSymbol("axs.Audit.auditResults", axs.Audit.auditResults);
+axs.Audit.createReport = function(a, b) {
+ var c;
+ c = "*** Begin accessibility audit results ***\nAn accessibility audit found " + axs.Audit.auditResults(a).toString();
+ b && (c = c + "\nFor more information, please see " + b);
+ return c + "\n*** End accessibility audit results ***";
+};
+goog.exportSymbol("axs.Audit.createReport", axs.Audit.createReport);
+axs.Audit.accessibilityErrorMessage = function(a) {
+ for (var b = a.rule.severity == axs.constants.Severity.SEVERE ? "Error: " : "Warning: ", b = b + (a.rule.code + " (" + a.rule.heading + ") failed on the following " + (1 == a.elements.length ? "element" : "elements")), b = 1 == a.elements.length ? b + ":" : b + (" (1 - " + Math.min(5, a.elements.length) + " of " + a.elements.length + "):"), c = Math.min(a.elements.length, 5), d = 0;d < c;d++) {
+ var e = a.elements[d], b = b + "\n";
+ try {
+ b += axs.utils.getQuerySelectorText(e);
+ } catch (f) {
+ b += " tagName:" + e.tagName, b += " id:" + e.id;
+ }
+ }
+ "" != a.rule.url && (b += "\nSee " + a.rule.url + " for more information.");
+ return b;
+};
+goog.exportSymbol("axs.Audit.accessibilityErrorMessage", axs.Audit.accessibilityErrorMessage);
+axs.AuditRules.addRule({name:"ariaOnReservedElement", heading:"This element does not support ARIA roles, states and properties", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_12", severity:axs.constants.Severity.WARNING, relevantElementMatcher:function(a) {
+ return !axs.properties.canTakeAriaAttributes(a);
+}, test:function(a) {
+ return null !== axs.properties.getAriaProperties(a);
+}, code:"AX_ARIA_12"});
+axs.AuditRules.addRule({name:"ariaOwnsDescendant", heading:"aria-owns should not be used if ownership is implicit in the DOM", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_06", severity:axs.constants.Severity.WARNING, relevantElementMatcher:function(a) {
+ return axs.browserUtils.matchSelector(a, "[aria-owns]");
+}, test:function(a) {
+ return axs.utils.getIdReferents("aria-owns", a).some(function(b) {
+ return a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_CONTAINED_BY;
+ });
+}, code:"AX_ARIA_06"});
+axs.AuditRules.addRule({name:"ariaRoleNotScoped", heading:"Elements with ARIA roles must be in the correct scope", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_09", severity:axs.constants.Severity.SEVERE, relevantElementMatcher:function(a) {
+ return axs.browserUtils.matchSelector(a, "[role]");
+}, test:function(a) {
+ var b = axs.utils.getRoles(a);
+ if (!b || !b.applied) {
+ return !1;
+ }
+ b = b.applied.details.scope;
+ if (!b || 0 === b.length) {
+ return !1;
+ }
+ for (var c = a;c = axs.dom.parentElement(c);) {
+ var d = axs.utils.getRoles(c, !0);
+ if (d && d.applied && 0 <= b.indexOf(d.applied.name)) {
+ return !1;
+ }
+ }
+ if (a = axs.utils.getAriaIdReferrers(a, "aria-owns")) {
+ for (c = 0;c < a.length;c++) {
+ if ((d = axs.utils.getRoles(a[c], !0)) && d.applied && 0 <= b.indexOf(d.applied.name)) {
+ return !1;
+ }
+ }
+ }
+ return !0;
+}, code:"AX_ARIA_09"});
+axs.AuditRules.addRule({name:"audioWithoutControls", heading:"Audio elements should have controls", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_audio_01", severity:axs.constants.Severity.WARNING, relevantElementMatcher:function(a) {
+ return axs.browserUtils.matchSelector(a, "audio[autoplay]");
+}, test:function(a) {
+ return !a.querySelectorAll("[controls]").length && 3 < a.duration;
+}, code:"AX_AUDIO_01"});
+(function() {
+ var a = /^aria\-/;
+ axs.AuditRules.addRule({name:"badAriaAttribute", heading:"This element has an invalid ARIA attribute", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_11", severity:axs.constants.Severity.WARNING, relevantElementMatcher:function(b) {
+ b = b.attributes;
+ for (var c = 0, d = b.length;c < d;c++) {
+ if (a.test(b[c].name)) {
+ return !0;
+ }
+ }
+ return !1;
+ }, test:function(b) {
+ b = b.attributes;
+ for (var c = 0, d = b.length;c < d;c++) {
+ var e = b[c].name;
+ if (a.test(e) && (e = e.replace(a, ""), !axs.constants.ARIA_PROPERTIES.hasOwnProperty(e))) {
+ return !0;
+ }
+ }
+ return !1;
+ }, code:"AX_ARIA_11"});
+})();
+axs.AuditRules.addRule({name:"badAriaAttributeValue", heading:"ARIA state and property values must be valid", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_04", severity:axs.constants.Severity.SEVERE, relevantElementMatcher:function(a) {
+ var b = axs.utils.getSelectorForAriaProperties(axs.constants.ARIA_PROPERTIES);
+ return axs.browserUtils.matchSelector(a, b);
+}, test:function(a) {
+ for (var b in axs.constants.ARIA_PROPERTIES) {
+ var c = "aria-" + b;
+ if (a.hasAttribute(c)) {
+ var d = a.getAttribute(c);
+ if (!axs.utils.getAriaPropertyValue(c, d, a).valid) {
+ return !0;
+ }
+ }
+ }
+ return !1;
+}, code:"AX_ARIA_04"});
+axs.AuditRules.addRule({name:"badAriaRole", heading:"Elements with ARIA roles must use a valid, non-abstract ARIA role", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_aria_01", severity:axs.constants.Severity.SEVERE, relevantElementMatcher:function(a) {
+ return axs.browserUtils.matchSelector(a, "[role]");
+}, test:function(a) {
+ return !axs.utils.getRoles(a).valid;
+}, code:"AX_ARIA_01"});
+axs.AuditRules.addRule({name:"controlsWithoutLabel", heading:"Controls and media elements should have labels", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_text_01", severity:axs.constants.Severity.SEVERE, relevantElementMatcher:function(a) {
+ if (!axs.browserUtils.matchSelector(a, 'input:not([type="hidden"]):not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), video:not([disabled])') || "presentation" == a.getAttribute("role")) {
+ return !1;
+ }
+ if (0 <= a.tabIndex) {
+ return !0;
+ }
+ for (a = axs.dom.parentElement(a);null != a;a = axs.dom.parentElement(a)) {
+ if (axs.utils.elementIsAriaWidget(a)) {
+ return !1;
+ }
+ }
+ return !0;
+}, test:function(a, b) {
+ if (b.hidden || "input" == a.tagName.toLowerCase() && "button" == a.type && a.value.length || "button" == a.tagName.toLowerCase() && a.textContent.replace(/^\s+|\s+$/g, "").length || axs.utils.hasLabel(a)) {
+ return !1;
+ }
+ var c = axs.properties.findTextAlternatives(a, {});
+ return null === c || "" === c.trim() ? !0 : !1;
+}, code:"AX_TEXT_01", ruleName:"Controls and media elements should have labels"});
+axs.AuditRules.addRule({name:"duplicateId", heading:"Any ID referred to via an IDREF must be unique in the DOM", url:"https://github.com/GoogleChrome/accessibility-developer-tools/wiki/Audit-Rules#ax_html_02", severity:axs.constants.Severity.SEVERE, opt_requires:{idRefs:!0}, relevantElementMatcher:function(a, b) {
+ b.idrefs.length && !b.hidden && this.relatedElements.push({element:a, flags:b});
+ return a.hasAttribute("id") ? !0 : !1;
+}, isRelevant:function(a, b) {
+ var c = a.id, d = b.level;
+ return this.relatedElements.some(function(a) {
+ var b = a.flags.idrefs;
+ return a.flags.level === d && 0 <= b.indexOf(c);
+ });
+}, test:function(a) {
+ var b = "[id='" + a.id.replace(/'/g, "\\'") + "']";
+ return 1 < a.ownerDocument.querySelectorAll(b).length;
+}, code:"AX_HTML_02"});
+
+ return axs;
+});
+
+// Define AMD module if possible, export globals otherwise.
+if (typeof define !== 'undefined' && define.amd) {
+ define([], fn);
+} else {
+ var axs = fn.call(this);
+}
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/main.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/main.js
new file mode 100644
index 00000000000..d92b110b437
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/accessibility-developer-tools/main.js
@@ -0,0 +1,7 @@
+// This exposes the ./dist Javascript file for node libraries.
+// It also unwraps the main axs package so Audit and other objects are exposed
+// directly in the node library
+
+var library = require('./dist/js/axs_testing'); // eslint-disable-line no-undef
+
+module.exports = library.axs; // eslint-disable-line no-undef
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.bower.json
new file mode 100644
index 00000000000..47ef0f0a925
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.bower.json
@@ -0,0 +1,75 @@
+{
+ "name": "app-route",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "description": "App routing expressed as Polymer Custom Elements.",
+ "main": [
+ "app-route.html",
+ "app-location.html",
+ "app-route-converter.html"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/app-route",
+ "private": true,
+ "ignore": [],
+ "dependencies": {
+ "iron-location": "PolymerElements/iron-location#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "google-youtube": "GoogleWebComponents/google-youtube#1 - 2",
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-pages": "PolymerElements/iron-pages#1 - 2",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#1 - 2",
+ "paper-card": "PolymerElements/paper-card#1 - 2",
+ "paper-icon-button": "polymerelements/paper-icon-button#1 - 2",
+ "paper-input": "polymerelements/paper-input#1 - 2",
+ "paper-spinner": "PolymerElements/paper-spinner#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-toggle-button": "polymerelements/paper-toggle-button#1 - 2",
+ "url": "webcomponents/URL#^0.5.7",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-location": "polymerelements/iron-location#^0.8.1",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "google-youtube": "GoogleWebComponents/google-youtube#^1.2.1",
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.0",
+ "iron-pages": "PolymerElements/iron-pages#^1.0.7",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
+ "paper-card": "PolymerElements/paper-card#^1.1.1",
+ "paper-icon-button": "polymerelements/paper-icon-button#^v1.0.0",
+ "paper-input": "polymerelements/paper-input#^1.1.2",
+ "paper-spinner": "PolymerElements/paper-spinner#^1.1.1",
+ "paper-styles": "polymerelements/paper-styles#^1.0.13",
+ "paper-toggle-button": "polymerelements/paper-toggle-button#^1.0.0",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "version": "2.1.1",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "af8e578831240fd52671a2ca40b726ee21bcd4ed"
+ },
+ "_source": "https://github.com/PolymerElements/app-route.git",
+ "_target": "*",
+ "_originalSource": "PolymerElements/app-route"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/CODEOWNERS
new file mode 100644
index 00000000000..9ef9eb64211
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @e111077
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..0c018d64fc7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/app-route/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/hirore/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+* Open the page in a web browser.
+* Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.travis.yml
new file mode 100644
index 00000000000..78ddb9fec50
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Typings are stale. Please run "npm run format".' && false)
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+env:
+ global:
+ - secure: >-
+ WdFRmsbFi5zjdD/yaGR0HITPFsjSWeVYj8JcLE95nUN0fkkJuNh/A0/cDHDcDpxzY4xCNdc/IwPTtE4+awCGavot71OXlpEYD8aZUdVw9VcYVTc1IG2B/hgFcdYhXHYOLbs7JlOA/H6/RSiOensRv7QESNY2cMGzRsccav9jdAbLJqHNPI5orMRBT6/H5roZvXXEn5XmIemjCMwtGlqUeRd3nHM2n0PsQKETb+8Y04fTFuqggSEVt/SgU/UdNNm2T2mVFUDWChvjAM36l4FvgUKZm8gh2CYrXc0rHOVt7BCJN5OzZSwCmxxauhUe+7QOgZO3UE5l+M+MX9CjnSdy/HJRauMJy2eCSr9RDoChPKZOC14QrZff06L9WhDnVEHkz8PN2mwP73/uDVYyJC9Szs+4MSKK+WEIIiywEnxCp2Nq9eBNoWNDySOaud+9WxLosh01bTvytVZrd3Lqkf3MUm2sJ+v17e4JagW13zwBXjxnLP1V+H+IP/imrRRV9x5gdvK+9iL3ZYsIQmcEkqNlWrqHe3eZTgpkc/HhewfZCu49ClM6pnoJiC/7/YM3CarwkfMhGJKDU5iXfJiQABIfZ3XhTKG7nltz6VRpm8eFwxInpxNAIBghkz6PGeESHgtmsoQKtGqAg7+cRfjTS9uLMVomYHWPz0brCIQloAjSKc8=
+ - secure: >-
+ k6zYpUF0NdxNqVyfCbEztJ25Z229mpcvSdHfkOF8YqFse+1CkSR1M83Dts1K34eK43Yov375YJ/Op/MXEA0wrbnyEDg/AvwqBv5XZTslIvOjA1WvZJDGBiaZ6lvqs6tEhLfB79eZvTHP8DSDlLabklDAPaio1VC+Q6zyLIlsTIr6fH1VK1gX/uHkvSGKl8C9bfeGHgFlXaWmShN+FvLwW4PiRw2MwzXeq/qQqfS0Nn3gtuGN2kNNBpKVJwcDkYDOcJ2+49ojF8RAdbt8hsZkjGq21hpY6eKhbte66guN7lRTKY5+g2aLkg1CrBp9ZHZ4kAlfbhibhiLt/W1UbXUL/nnTFkrotuJ6vdU6gLN0EhjZN3bMAtKqHC+Bl2223ClNMs17iXReSqqOSc9D3gL9b3FYqQElS4bQIa+0L76TbkMM/H6ilQjSIvVnUXLszMIeyliIVpnI0ClTUbqe5Et51urk+KjJrOE95wyxkiL2bzKxcXCLzdvSy0nxwwcu7DnBQPG0Fg6/JVRMHM17PDhjgQLSvKr8wXtO042xzAosoZuDVOHHgpA5v9iKI/xPUseu3utfBT5ZGcyjKKuxI9Dsjoi4Go0B6uQ4rY/XUp+k4aa1Ucg3Ngx8zYgzJlFGiZq7OnG+quSTpZ32hpQqDmtYKNMxf5p/YRhxWSeuBWheLeQ=
+dist: trusty
+sudo: required
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/CONTRIBUTING.md
new file mode 100644
index 00000000000..34d615448b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/hirore/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/hirore/edit?html,output](https://jsbin.com/hirore/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/README.md
new file mode 100644
index 00000000000..b388b599f4d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/README.md
@@ -0,0 +1,217 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+app-location.html app-route-converter-behavior.html app-route-converter.html app-route.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/app-route.svg?branch=master)](https://travis-ci.org/PolymerElements/app-route)
+
+
+## &lt;app-route&gt;
+
+`app-route` is an element that enables declarative, self-describing routing
+for a web app.
+
+> *n.b. app-route is still in beta. We expect it will need some changes. We're counting on your feedback!*
+
+In its typical usage, a `app-route` element consumes an object that describes
+some state about the current route, via the `route` property. It then parses
+that state using the `pattern` property, and produces two artifacts: some `data`
+related to the `route`, and a `tail` that contains the rest of the `route` that
+did not match.
+
+Here is a basic example, when used with `app-location`:
+
+```html
+<app-location route="{{route}}"></app-location>
+<app-route
+ route="{{route}}"
+ pattern="/:page"
+ data="{{data}}"
+ tail="{{tail}}">
+</app-route>
+```
+
+In the above example, the `app-location` produces a `route` value. Then, the
+`route.path` property is matched by comparing it to the `pattern` property. If
+the `pattern` property matches `route.path`, the `app-route` will set or update
+its `data` property with an object whose properties correspond to the parameters
+in `pattern`. So, in the above example, if `route.path` was `'/about'`, the value
+of `data` would be `{"page": "about"}`.
+
+The `tail` property represents the remaining part of the route state after the
+`pattern` has been applied to a matching `route`.
+
+Here is another example, where `tail` is used:
+
+```html
+<app-location route="{{route}}"></app-location>
+<app-route
+ route="{{route}}"
+ pattern="/:page"
+ data="{{routeData}}"
+ tail="{{subroute}}">
+</app-route>
+<app-route
+ route="{{subroute}}"
+ pattern="/:id"
+ data="{{subrouteData}}">
+</app-route>
+```
+
+In the above example, there are two `app-route` elements. The first
+`app-route` consumes a `route`. When the `route` is matched, the first
+`app-route` also produces `routeData` from its `data`, and `subroute` from
+its `tail`. The second `app-route` consumes the `subroute`, and when it
+matches, it produces an object called `subrouteData` from its `data`.
+
+So, when `route.path` is `'/about'`, the `routeData` object will look like
+this: `{ page: 'about' }`
+
+And `subrouteData` will be null. However, if `route.path` changes to
+`'/article/123'`, the `routeData` object will look like this:
+`{ page: 'article' }`
+
+And the `subrouteData` will look like this: `{ id: '123' }`
+
+`app-route` is responsive to bi-directional changes to the `data` objects
+they produce. So, if `routeData.page` changed from `'article'` to `'about'`,
+the `app-route` will update `route.path`. This in-turn will update the
+`app-location`, and cause the global location bar to change its value.
+
+
+
+## &lt;app-location&gt;
+
+`app-location` is an element that provides synchronization between the
+browser location bar and the state of an app. When created, `app-location`
+elements will automatically watch the global location for changes. As changes
+occur, `app-location` produces and updates an object called `route`. This
+`route` object is suitable for passing into a `app-route`, and other similar
+elements.
+
+An example of the public API of a route object that describes the URL
+`https://elements.polymer-project.org/elements/app-location`:
+
+```css
+{
+ prefix: '',
+ path: '/elements/app-location'
+}
+```
+
+Example Usage:
+
+```html
+<app-location route="{{route}}"></app-location>
+<app-route route="{{route}}" pattern="/:page" data="{{data}}"></app-route>
+```
+
+As you can see above, the `app-location` element produces a `route` and that
+property is then bound into the `app-route` element. The bindings are two-
+directional, so when changes to the `route` object occur within `app-route`,
+they automatically reflect back to the global location.
+
+### Hashes vs Paths
+
+By default `app-location` routes uses the pathname portion of the URL. This has
+broad browser support but it does require cooperation of the backend server. An
+`app-location` can be configured to use the hash part of a URL instead using
+the `use-hash-as-path` attribute, like so:
+
+```html
+<app-location route="{{route}}" use-hash-as-path></app-location>
+```
+
+### Integrating with other routing code
+
+There is no standard event that is fired when window.location is modified.
+`app-location` fires a `location-changed` event on `window` when it updates the
+location. It also listens for that same event, and re-reads the URL when it's
+fired. This makes it very easy to interop with other routing code.
+
+So for example if you want to navigate to `/new_path` imperatively you could
+call `window.location.pushState` or `window.location.replaceState` followed by
+firing a `location-changed` event on `window`. i.e.
+
+```javascript
+window.history.pushState({}, null, '/new_path');
+window.dispatchEvent(new CustomEvent('location-changed'));
+```
+
+
+
+## &lt;app-route-converter&gt;
+
+`app-route-converter` provides a means to convert a path and query
+parameters into a route object and vice versa. This produced route object
+is to be fed into route-consuming elements such as `app-route`.
+
+> n.b. This element is intended to be a primitive of the routing system and for
+creating bespoke routing solutions from scratch. To simply include routing in
+an app, please refer to [app-location](https://github.com/PolymerElements/app-route/blob/master/app-location.html)
+and [app-route](https://github.com/PolymerElements/app-route/blob/master/app-route.html).
+
+An example of a route object that describes
+`https://elements.polymer-project.org/elements/app-route-converter?foo=bar&baz=qux`
+and should be passed to other `app-route` elements:
+
+```css
+{
+ prefix: '',
+ path: '/elements/app-route-converter',
+ __queryParams: {
+ foo: 'bar',
+ baz: 'qux'
+ }
+}
+```
+
+`__queryParams` is private to discourage directly data-binding to it. This is so
+that routing elements like `app-route` can intermediate changes to the query
+params and choose whether to propagate them upstream or not. `app-route` for
+example will not propagate changes to its `queryParams` property if it is not
+currently active. A public queryParams object will also be produced in which you
+should perform data-binding operations.
+
+Example Usage:
+
+```html
+<iron-location path="{{path}}" query="{{query}}"></iron-location>
+<iron-query-params
+ params-string="{{query}}"
+ params-object="{{queryParams}}">
+</iron-query-params>
+<app-route-converter
+ path="{{path}}"
+ query-params="{{queryParams}}"
+ route="{{route}}">
+</app-route-converter>
+<app-route route='{{route}}' pattern='/:page' data='{{data}}'>
+</app-route>
+```
+
+This is a simplified implementation of the `app-location` element. Here the
+`iron-location` produces a path and a query, the `iron-query-params` consumes
+the query and produces a queryParams object, and the `app-route-converter`
+consumes the path and the query params and converts it into a route which is in
+turn is consumed by the `app-route`.
+
+
+
+## Polymer.AppRouteConverterBehavior
+
+Provides bidirectional mapping between `path` and `queryParams` and a
+app-route compatible `route` object.
+
+For more information, see the docs for `app-route-converter`.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.d.ts
new file mode 100644
index 00000000000..edc2b8c8e67
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.d.ts
@@ -0,0 +1,126 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * app-location.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-location/iron-location.d.ts" />
+/// <reference path="../iron-location/iron-query-params.d.ts" />
+/// <reference path="app-route-converter-behavior.d.ts" />
+
+/**
+ * `app-location` is an element that provides synchronization between the
+ * browser location bar and the state of an app. When created, `app-location`
+ * elements will automatically watch the global location for changes. As changes
+ * occur, `app-location` produces and updates an object called `route`. This
+ * `route` object is suitable for passing into a `app-route`, and other similar
+ * elements.
+ *
+ * An example of the public API of a route object that describes the URL
+ * `https://elements.polymer-project.org/elements/app-location`:
+ *
+ * {
+ * prefix: '',
+ * path: '/elements/app-location'
+ * }
+ *
+ * Example Usage:
+ *
+ * <app-location route="{{route}}"></app-location>
+ * <app-route route="{{route}}" pattern="/:page" data="{{data}}"></app-route>
+ *
+ * As you can see above, the `app-location` element produces a `route` and that
+ * property is then bound into the `app-route` element. The bindings are two-
+ * directional, so when changes to the `route` object occur within `app-route`,
+ * they automatically reflect back to the global location.
+ *
+ * ### Hashes vs Paths
+ *
+ * By default `app-location` routes using the pathname portion of the URL. This has
+ * broad browser support but it does require cooperation of the backend server. An
+ * `app-location` can be configured to use the hash part of a URL instead using
+ * the `use-hash-as-path` attribute, like so:
+ *
+ * <app-location route="{{route}}" use-hash-as-path></app-location>
+ *
+ * ### Integrating with other routing code
+ *
+ * There is no standard event that is fired when window.location is modified.
+ * `app-location` fires a `location-changed` event on `window` when it updates the
+ * location. It also listens for that same event, and re-reads the URL when it's
+ * fired. This makes it very easy to interop with other routing code.
+ *
+ * So for example if you want to navigate to `/new_path` imperatively you could
+ * call `window.location.pushState` or `window.location.replaceState` followed by
+ * firing a `location-changed` event on `window`. i.e.
+ *
+ * window.history.pushState({}, null, '/new_path');
+ * window.dispatchEvent(new CustomEvent('location-changed'));
+ */
+interface AppLocationElement extends Polymer.Element, Polymer.AppRouteConverterBehavior {
+
+ /**
+ * A model representing the deserialized path through the route tree, as
+ * well as the current queryParams.
+ */
+ route: object|null|undefined;
+
+ /**
+ * The route path, which will be either the hash or the path, depending
+ * on useHashAsPath.
+ */
+ path: string|null|undefined;
+
+ /**
+ * In many scenarios, it is convenient to treat the `hash` as a stand-in
+ * alternative to the `path`. For example, if deploying an app to a static
+ * web server (e.g., Github Pages) - where one does not have control over
+ * server-side routing - it is usually a better experience to use the hash
+ * to represent paths through one's app.
+ *
+ * When this property is set to true, the `hash` will be used in place of
+ *
+ * the `path` for generating a `route`.
+ */
+ useHashAsPath: boolean|null|undefined;
+
+ /**
+ * A regexp that defines the set of URLs that should be considered part
+ * of this web app.
+ *
+ * Clicking on a link that matches this regex won't result in a full page
+ * navigation, but will instead just update the URL state in place.
+ *
+ * This regexp is given everything after the origin in an absolute
+ * URL. So to match just URLs that start with /search/ do:
+ * url-space-regex="^/search/"
+ */
+ urlSpaceRegex: string|RegExp|null;
+
+ /**
+ * Whether or not the ready function has been called.
+ */
+ _isReady: boolean|null|undefined;
+
+ /**
+ * If the user was on a URL for less than `dwellTime` milliseconds, it
+ * won't be added to the browser's history, but instead will be
+ * replaced by the next entry.
+ *
+ * This is to prevent large numbers of entries from clogging up the
+ * user's browser history. Disable by setting to a negative number.
+ *
+ * See `iron-location` for more information.
+ */
+ dwellTime: number|null|undefined;
+ ready(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "app-location": AppLocationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.html
new file mode 100644
index 00000000000..c1cfeffffad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-location.html
@@ -0,0 +1,218 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-location/iron-location.html">
+<link rel="import" href="../iron-location/iron-query-params.html">
+<link rel="import" href="app-route-converter-behavior.html">
+
+<!--
+`app-location` is an element that provides synchronization between the
+browser location bar and the state of an app. When created, `app-location`
+elements will automatically watch the global location for changes. As changes
+occur, `app-location` produces and updates an object called `route`. This
+`route` object is suitable for passing into a `app-route`, and other similar
+elements.
+
+An example of the public API of a route object that describes the URL
+`https://elements.polymer-project.org/elements/app-location`:
+
+ {
+ prefix: '',
+ path: '/elements/app-location'
+ }
+
+Example Usage:
+
+ <app-location route="{{route}}"></app-location>
+ <app-route route="{{route}}" pattern="/:page" data="{{data}}"></app-route>
+
+As you can see above, the `app-location` element produces a `route` and that
+property is then bound into the `app-route` element. The bindings are two-
+directional, so when changes to the `route` object occur within `app-route`,
+they automatically reflect back to the global location.
+
+### Hashes vs Paths
+
+By default `app-location` routes using the pathname portion of the URL. This has
+broad browser support but it does require cooperation of the backend server. An
+`app-location` can be configured to use the hash part of a URL instead using
+the `use-hash-as-path` attribute, like so:
+
+ <app-location route="{{route}}" use-hash-as-path></app-location>
+
+### Integrating with other routing code
+
+There is no standard event that is fired when window.location is modified.
+`app-location` fires a `location-changed` event on `window` when it updates the
+location. It also listens for that same event, and re-reads the URL when it's
+fired. This makes it very easy to interop with other routing code.
+
+So for example if you want to navigate to `/new_path` imperatively you could
+call `window.location.pushState` or `window.location.replaceState` followed by
+firing a `location-changed` event on `window`. i.e.
+
+ window.history.pushState({}, null, '/new_path');
+ window.dispatchEvent(new CustomEvent('location-changed'));
+
+@element app-location
+@demo demo/index.html
+-->
+<dom-module id="app-location">
+ <template>
+ <iron-query-params
+ params-string="{{__query}}"
+ params-object="{{queryParams}}">
+ </iron-query-params>
+ <iron-location
+ path="{{__path}}"
+ query="{{__query}}"
+ hash="{{__hash}}"
+ url-space-regex="[[urlSpaceRegex]]"
+ dwell-time="[[dwellTime]]">
+ </iron-location>
+ </template>
+ <script>
+ (function() {
+ 'use strict';
+
+ Polymer({
+ is: 'app-location',
+
+ properties: {
+ /**
+ * A model representing the deserialized path through the route tree, as
+ * well as the current queryParams.
+ */
+ route: {
+ type: Object,
+ notify: true,
+ },
+
+ /**
+ * In many scenarios, it is convenient to treat the `hash` as a stand-in
+ * alternative to the `path`. For example, if deploying an app to a static
+ * web server (e.g., Github Pages) - where one does not have control over
+ * server-side routing - it is usually a better experience to use the hash
+ * to represent paths through one's app.
+ *
+ * When this property is set to true, the `hash` will be used in place of
+
+ * the `path` for generating a `route`.
+ */
+ useHashAsPath: {
+ type: Boolean,
+ value: false,
+ },
+
+ /**
+ * A regexp that defines the set of URLs that should be considered part
+ * of this web app.
+ *
+ * Clicking on a link that matches this regex won't result in a full page
+ * navigation, but will instead just update the URL state in place.
+ *
+ * This regexp is given everything after the origin in an absolute
+ * URL. So to match just URLs that start with /search/ do:
+ * url-space-regex="^/search/"
+ *
+ * @type {string|RegExp}
+ */
+ urlSpaceRegex: {
+ type: String,
+ notify: true,
+ },
+
+ /**
+ * A set of key/value pairs that are universally accessible to branches
+ * of the route tree.
+ */
+ __queryParams: {
+ type: Object,
+ },
+
+ /**
+ * The pathname component of the current URL.
+ */
+ __path: {
+ type: String,
+ },
+
+ /**
+ * The query string portion of the current URL.
+ */
+ __query: {
+ type: String,
+ },
+
+ /**
+ * The hash portion of the current URL.
+ */
+ __hash: {
+ type: String,
+ },
+
+ /**
+ * The route path, which will be either the hash or the path, depending
+ * on useHashAsPath.
+ */
+ path: {
+ type: String,
+ observer: '__onPathChanged',
+ },
+
+ /**
+ * Whether or not the ready function has been called.
+ */
+ _isReady: {
+ type: Boolean,
+ },
+
+ /**
+ * If the user was on a URL for less than `dwellTime` milliseconds, it
+ * won't be added to the browser's history, but instead will be
+ * replaced by the next entry.
+ *
+ * This is to prevent large numbers of entries from clogging up the
+ * user's browser history. Disable by setting to a negative number.
+ *
+ * See `iron-location` for more information.
+ */
+ dwellTime: {
+ type: Number,
+ }
+ },
+
+ behaviors: [Polymer.AppRouteConverterBehavior],
+
+ observers: ['__computeRoutePath(useHashAsPath, __hash, __path)'],
+
+ ready: function() {
+ this._isReady = true;
+ },
+
+ __computeRoutePath: function() {
+ this.path = this.useHashAsPath ? this.__hash : this.__path;
+ },
+
+ __onPathChanged: function() {
+ if (!this._isReady) {
+ return;
+ }
+
+ if (this.useHashAsPath) {
+ this.__hash = this.path;
+ } else {
+ this.__path = this.path;
+ }
+ }
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.d.ts
new file mode 100644
index 00000000000..37af327fd80
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.d.ts
@@ -0,0 +1,64 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * app-route-converter-behavior.html
+ */
+
+declare namespace Polymer {
+
+ /**
+ * Provides bidirectional mapping between `path` and `queryParams` and a
+ * app-route compatible `route` object.
+ *
+ * For more information, see the docs for `app-route-converter`.
+ */
+ interface AppRouteConverterBehavior {
+
+ /**
+ * A model representing the deserialized path through the route tree, as
+ * well as the current queryParams.
+ *
+ * A route object is the kernel of the routing system. It is intended to
+ * be fed into consuming elements such as `app-route`.
+ */
+ route: object|null|undefined;
+
+ /**
+ * A set of key/value pairs that are universally accessible to branches of
+ * the route tree.
+ */
+ queryParams: object|null;
+
+ /**
+ * The serialized path through the route tree. This corresponds to the
+ * `window.location.pathname` value, and will update to reflect changes
+ * to that value.
+ */
+ path: string|null|undefined;
+ created(): void;
+
+ /**
+ * Handler called when the path or queryParams change.
+ */
+ _locationChanged(): void;
+
+ /**
+ * Handler called when the route prefix and route path change.
+ */
+ _routeChanged(): void;
+
+ /**
+ * Handler called when the route queryParams change.
+ *
+ * @param queryParams A set of key/value pairs that are
+ * universally accessible to branches of the route tree.
+ */
+ _routeQueryParamsChanged(queryParams: object|null): void;
+ }
+
+ const AppRouteConverterBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.html
new file mode 100644
index 00000000000..66a7b5b8c0d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter-behavior.html
@@ -0,0 +1,107 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<script>
+ (function() {
+ 'use strict';
+
+ /**
+ * Provides bidirectional mapping between `path` and `queryParams` and a
+ * app-route compatible `route` object.
+ *
+ * For more information, see the docs for `app-route-converter`.
+ *
+ * @polymerBehavior
+ */
+ Polymer.AppRouteConverterBehavior = {
+ properties: {
+ /**
+ * A model representing the deserialized path through the route tree, as
+ * well as the current queryParams.
+ *
+ * A route object is the kernel of the routing system. It is intended to
+ * be fed into consuming elements such as `app-route`.
+ *
+ * @type {?Object|undefined}
+ */
+ route: {
+ type: Object,
+ notify: true,
+ },
+
+ /**
+ * A set of key/value pairs that are universally accessible to branches of
+ * the route tree.
+ *
+ * @type {?Object}
+ */
+ queryParams: {
+ type: Object,
+ notify: true,
+ },
+
+ /**
+ * The serialized path through the route tree. This corresponds to the
+ * `window.location.pathname` value, and will update to reflect changes
+ * to that value.
+ */
+ path: {
+ type: String,
+ notify: true,
+ }
+ },
+
+ observers: [
+ '_locationChanged(path, queryParams)',
+ '_routeChanged(route.prefix, route.path)',
+ '_routeQueryParamsChanged(route.__queryParams)'
+ ],
+
+ created: function() {
+ this.linkPaths('route.__queryParams', 'queryParams');
+ this.linkPaths('queryParams', 'route.__queryParams');
+ },
+
+ /**
+ * Handler called when the path or queryParams change.
+ */
+ _locationChanged: function() {
+ if (this.route && this.route.path === this.path &&
+ this.queryParams === this.route.__queryParams) {
+ return;
+ }
+ this.route = {prefix: '', path: this.path, __queryParams: this.queryParams};
+ },
+
+ /**
+ * Handler called when the route prefix and route path change.
+ */
+ _routeChanged: function() {
+ if (!this.route) {
+ return;
+ }
+
+ this.path = this.route.prefix + this.route.path;
+ },
+
+ /**
+ * Handler called when the route queryParams change.
+ *
+ * @param {Object} queryParams A set of key/value pairs that are
+ * universally accessible to branches of the route tree.
+ */
+ _routeQueryParamsChanged: function(queryParams) {
+ if (!this.route) {
+ return;
+ }
+ this.queryParams = queryParams;
+ }
+ };
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.d.ts
new file mode 100644
index 00000000000..d6435419e05
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.d.ts
@@ -0,0 +1,70 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * app-route-converter.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="app-route-converter-behavior.d.ts" />
+
+/**
+ * `app-route-converter` provides a means to convert a path and query
+ * parameters into a route object and vice versa. This produced route object
+ * is to be fed into route-consuming elements such as `app-route`.
+ *
+ * > n.b. This element is intended to be a primitive of the routing system and for
+ * creating bespoke routing solutions from scratch. To simply include routing in
+ * an app, please refer to [app-location](https://github.com/PolymerElements/app-route/blob/master/app-location.html)
+ * and [app-route](https://github.com/PolymerElements/app-route/blob/master/app-route.html).
+ *
+ * An example of a route object that describes
+ * `https://elements.polymer-project.org/elements/app-route-converter?foo=bar&baz=qux`
+ * and should be passed to other `app-route` elements:
+ *
+ * {
+ * prefix: '',
+ * path: '/elements/app-route-converter',
+ * __queryParams: {
+ * foo: 'bar',
+ * baz: 'qux'
+ * }
+ * }
+ *
+ * `__queryParams` is private to discourage directly data-binding to it. This is so
+ * that routing elements like `app-route` can intermediate changes to the query
+ * params and choose whether to propagate them upstream or not. `app-route` for
+ * example will not propagate changes to its `queryParams` property if it is not
+ * currently active. A public queryParams object will also be produced in which you
+ * should perform data-binding operations.
+ *
+ * Example Usage:
+ *
+ * <iron-location path="{{path}}" query="{{query}}"></iron-location>
+ * <iron-query-params
+ * params-string="{{query}}"
+ * params-object="{{queryParams}}">
+ * </iron-query-params>
+ * <app-route-converter
+ * path="{{path}}"
+ * query-params="{{queryParams}}"
+ * route="{{route}}">
+ * </app-route-converter>
+ * <app-route route='{{route}}' pattern='/:page' data='{{data}}'>
+ * </app-route>
+ *
+ * This is a simplified implementation of the `app-location` element. Here the
+ * `iron-location` produces a path and a query, the `iron-query-params` consumes
+ * the query and produces a queryParams object, and the `app-route-converter`
+ * consumes the path and the query params and converts it into a route which is in
+ * turn is consumed by the `app-route`.
+ */
+interface AppRouteConverterElement extends Polymer.Element, Polymer.AppRouteConverterBehavior {
+}
+
+interface HTMLElementTagNameMap {
+ "app-route-converter": AppRouteConverterElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.html
new file mode 100644
index 00000000000..a87fb21fcfc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route-converter.html
@@ -0,0 +1,79 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="./app-route-converter-behavior.html">
+
+<!--
+`app-route-converter` provides a means to convert a path and query
+parameters into a route object and vice versa. This produced route object
+is to be fed into route-consuming elements such as `app-route`.
+
+> n.b. This element is intended to be a primitive of the routing system and for
+creating bespoke routing solutions from scratch. To simply include routing in
+an app, please refer to [app-location](https://github.com/PolymerElements/app-route/blob/master/app-location.html)
+and [app-route](https://github.com/PolymerElements/app-route/blob/master/app-route.html).
+
+An example of a route object that describes
+`https://elements.polymer-project.org/elements/app-route-converter?foo=bar&baz=qux`
+and should be passed to other `app-route` elements:
+
+ {
+ prefix: '',
+ path: '/elements/app-route-converter',
+ __queryParams: {
+ foo: 'bar',
+ baz: 'qux'
+ }
+ }
+
+`__queryParams` is private to discourage directly data-binding to it. This is so
+that routing elements like `app-route` can intermediate changes to the query
+params and choose whether to propagate them upstream or not. `app-route` for
+example will not propagate changes to its `queryParams` property if it is not
+currently active. A public queryParams object will also be produced in which you
+should perform data-binding operations.
+
+Example Usage:
+
+ <iron-location path="{{path}}" query="{{query}}"></iron-location>
+ <iron-query-params
+ params-string="{{query}}"
+ params-object="{{queryParams}}">
+ </iron-query-params>
+ <app-route-converter
+ path="{{path}}"
+ query-params="{{queryParams}}"
+ route="{{route}}">
+ </app-route-converter>
+ <app-route route='{{route}}' pattern='/:page' data='{{data}}'>
+ </app-route>
+
+This is a simplified implementation of the `app-location` element. Here the
+`iron-location` produces a path and a query, the `iron-query-params` consumes
+the query and produces a queryParams object, and the `app-route-converter`
+consumes the path and the query params and converts it into a route which is in
+turn is consumed by the `app-route`.
+
+@element app-route-converter
+@demo demo/index.html
+-->
+
+<script>
+ (function() {
+ 'use strict';
+
+ Polymer({
+ is: 'app-route-converter',
+
+ behaviors: [Polymer.AppRouteConverterBehavior]
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.d.ts
new file mode 100644
index 00000000000..c7113f5707d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.d.ts
@@ -0,0 +1,127 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * app-route.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+/**
+ * `app-route` is an element that enables declarative, self-describing routing
+ * for a web app.
+ *
+ * > *n.b. app-route is still in beta. We expect it will need some changes. We're counting on your feedback!*
+ *
+ * In its typical usage, a `app-route` element consumes an object that describes
+ * some state about the current route, via the `route` property. It then parses
+ * that state using the `pattern` property, and produces two artifacts: some `data`
+ * related to the `route`, and a `tail` that contains the rest of the `route` that
+ * did not match.
+ *
+ * Here is a basic example, when used with `app-location`:
+ *
+ * <app-location route="{{route}}"></app-location>
+ * <app-route
+ * route="{{route}}"
+ * pattern="/:page"
+ * data="{{data}}"
+ * tail="{{tail}}">
+ * </app-route>
+ *
+ * In the above example, the `app-location` produces a `route` value. Then, the
+ * `route.path` property is matched by comparing it to the `pattern` property. If
+ * the `pattern` property matches `route.path`, the `app-route` will set or update
+ * its `data` property with an object whose properties correspond to the parameters
+ * in `pattern`. So, in the above example, if `route.path` was `'/about'`, the value
+ * of `data` would be `{"page": "about"}`.
+ *
+ * The `tail` property represents the remaining part of the route state after the
+ * `pattern` has been applied to a matching `route`.
+ *
+ * Here is another example, where `tail` is used:
+ *
+ * <app-location route="{{route}}"></app-location>
+ * <app-route
+ * route="{{route}}"
+ * pattern="/:page"
+ * data="{{routeData}}"
+ * tail="{{subroute}}">
+ * </app-route>
+ * <app-route
+ * route="{{subroute}}"
+ * pattern="/:id"
+ * data="{{subrouteData}}">
+ * </app-route>
+ *
+ * In the above example, there are two `app-route` elements. The first
+ * `app-route` consumes a `route`. When the `route` is matched, the first
+ * `app-route` also produces `routeData` from its `data`, and `subroute` from
+ * its `tail`. The second `app-route` consumes the `subroute`, and when it
+ * matches, it produces an object called `subrouteData` from its `data`.
+ *
+ * So, when `route.path` is `'/about'`, the `routeData` object will look like
+ * this: `{ page: 'about' }`
+ *
+ * And `subrouteData` will be null. However, if `route.path` changes to
+ * `'/article/123'`, the `routeData` object will look like this:
+ * `{ page: 'article' }`
+ *
+ * And the `subrouteData` will look like this: `{ id: '123' }`
+ *
+ * `app-route` is responsive to bi-directional changes to the `data` objects
+ * they produce. So, if `routeData.page` changed from `'article'` to `'about'`,
+ * the `app-route` will update `route.path`. This in-turn will update the
+ * `app-location`, and cause the global location bar to change its value.
+ */
+interface AppRouteElement extends Polymer.Element {
+
+ /**
+ * The URL component managed by this element.
+ */
+ route: object|null|undefined;
+
+ /**
+ * The pattern of slash-separated segments to match `route.path` against.
+ *
+ * For example the pattern "/foo" will match "/foo" or "/foo/bar"
+ * but not "/foobar".
+ *
+ * Path segments like `/:named` are mapped to properties on the `data`
+ * object.
+ */
+ pattern: string|null|undefined;
+
+ /**
+ * The parameterized values that are extracted from the route as
+ * described by `pattern`.
+ */
+ data: object|null|undefined;
+
+ /**
+ * Auto activate route if path empty
+ */
+ autoActivate: boolean|null|undefined;
+ _queryParamsUpdating: boolean|null|undefined;
+ queryParams: object|null;
+
+ /**
+ * The part of `route.path` NOT consumed by `pattern`.
+ */
+ tail: object|null|undefined;
+
+ /**
+ * Whether the current route is active. True if `route.path` matches the
+ * `pattern`, false otherwise.
+ */
+ readonly active: boolean|null|undefined;
+ _matched: string|null;
+ created(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "app-route": AppRouteElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.html
new file mode 100644
index 00000000000..cf4d7a87b0f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/app-route.html
@@ -0,0 +1,431 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!--
+`app-route` is an element that enables declarative, self-describing routing
+for a web app.
+
+> *n.b. app-route is still in beta. We expect it will need some changes. We're counting on your feedback!*
+
+In its typical usage, a `app-route` element consumes an object that describes
+some state about the current route, via the `route` property. It then parses
+that state using the `pattern` property, and produces two artifacts: some `data`
+related to the `route`, and a `tail` that contains the rest of the `route` that
+did not match.
+
+Here is a basic example, when used with `app-location`:
+
+ <app-location route="{{route}}"></app-location>
+ <app-route
+ route="{{route}}"
+ pattern="/:page"
+ data="{{data}}"
+ tail="{{tail}}">
+ </app-route>
+
+In the above example, the `app-location` produces a `route` value. Then, the
+`route.path` property is matched by comparing it to the `pattern` property. If
+the `pattern` property matches `route.path`, the `app-route` will set or update
+its `data` property with an object whose properties correspond to the parameters
+in `pattern`. So, in the above example, if `route.path` was `'/about'`, the value
+of `data` would be `{"page": "about"}`.
+
+The `tail` property represents the remaining part of the route state after the
+`pattern` has been applied to a matching `route`.
+
+Here is another example, where `tail` is used:
+
+ <app-location route="{{route}}"></app-location>
+ <app-route
+ route="{{route}}"
+ pattern="/:page"
+ data="{{routeData}}"
+ tail="{{subroute}}">
+ </app-route>
+ <app-route
+ route="{{subroute}}"
+ pattern="/:id"
+ data="{{subrouteData}}">
+ </app-route>
+
+In the above example, there are two `app-route` elements. The first
+`app-route` consumes a `route`. When the `route` is matched, the first
+`app-route` also produces `routeData` from its `data`, and `subroute` from
+its `tail`. The second `app-route` consumes the `subroute`, and when it
+matches, it produces an object called `subrouteData` from its `data`.
+
+So, when `route.path` is `'/about'`, the `routeData` object will look like
+this: `{ page: 'about' }`
+
+And `subrouteData` will be null. However, if `route.path` changes to
+`'/article/123'`, the `routeData` object will look like this:
+`{ page: 'article' }`
+
+And the `subrouteData` will look like this: `{ id: '123' }`
+
+`app-route` is responsive to bi-directional changes to the `data` objects
+they produce. So, if `routeData.page` changed from `'article'` to `'about'`,
+the `app-route` will update `route.path`. This in-turn will update the
+`app-location`, and cause the global location bar to change its value.
+
+@element app-route
+@demo demo/index.html
+@demo demo/data-loading-demo.html
+@demo demo/simple-demo.html
+-->
+
+<script>
+ (function() {
+ 'use strict';
+
+ Polymer({
+ is: 'app-route',
+
+ properties: {
+ /**
+ * The URL component managed by this element.
+ */
+ route: {
+ type: Object,
+ notify: true,
+ },
+
+ /**
+ * The pattern of slash-separated segments to match `route.path` against.
+ *
+ * For example the pattern "/foo" will match "/foo" or "/foo/bar"
+ * but not "/foobar".
+ *
+ * Path segments like `/:named` are mapped to properties on the `data`
+ * object.
+ */
+ pattern: {
+ type: String,
+ },
+
+ /**
+ * The parameterized values that are extracted from the route as
+ * described by `pattern`.
+ */
+ data: {
+ type: Object,
+ value: function() {
+ return {};
+ },
+ notify: true,
+ },
+
+ /**
+ * Auto activate route if path empty
+ */
+ autoActivate: {
+ type: Boolean,
+ value: false,
+ },
+
+ _queryParamsUpdating: {
+ type: Boolean,
+ value: false,
+ },
+
+ /**
+ * @type {?Object}
+ */
+ queryParams: {
+ type: Object,
+ value: function() {
+ return {};
+ },
+ notify: true,
+ },
+
+ /**
+ * The part of `route.path` NOT consumed by `pattern`.
+ */
+ tail: {
+ type: Object,
+ value: function() {
+ return {
+ path: null,
+ prefix: null,
+ __queryParams: null,
+ };
+ },
+ notify: true,
+ },
+
+ /**
+ * Whether the current route is active. True if `route.path` matches the
+ * `pattern`, false otherwise.
+ */
+ active: {
+ type: Boolean,
+ notify: true,
+ readOnly: true,
+ },
+
+ /**
+ * @type {?string}
+ */
+ _matched: {
+ type: String,
+ value: '',
+ }
+ },
+
+ observers: [
+ '__tryToMatch(route.path, pattern)',
+ '__updatePathOnDataChange(data.*)',
+ '__tailPathChanged(tail.path)',
+ '__routeQueryParamsChanged(route.__queryParams)',
+ '__tailQueryParamsChanged(tail.__queryParams)',
+ '__queryParamsChanged(queryParams.*)'
+ ],
+
+ created: function() {
+ this.linkPaths('route.__queryParams', 'tail.__queryParams');
+ this.linkPaths('tail.__queryParams', 'route.__queryParams');
+ },
+
+ /**
+ * Deal with the query params object being assigned to wholesale.
+ */
+ __routeQueryParamsChanged: function(queryParams) {
+ if (queryParams && this.tail) {
+ if (this.tail.__queryParams !== queryParams) {
+ this.set('tail.__queryParams', queryParams);
+ }
+
+ if (!this.active || this._queryParamsUpdating) {
+ return;
+ }
+
+ // Copy queryParams and track whether there are any differences compared
+ // to the existing query params.
+ var copyOfQueryParams = {};
+ var anythingChanged = false;
+ for (var key in queryParams) {
+ copyOfQueryParams[key] = queryParams[key];
+ if (anythingChanged || !this.queryParams ||
+ queryParams[key] !== this.queryParams[key]) {
+ anythingChanged = true;
+ }
+ }
+ // Need to check whether any keys were deleted
+ for (var key in this.queryParams) {
+ if (anythingChanged || !(key in queryParams)) {
+ anythingChanged = true;
+ break;
+ }
+ }
+
+ if (!anythingChanged) {
+ return;
+ }
+ this._queryParamsUpdating = true;
+ this.set('queryParams', copyOfQueryParams);
+ this._queryParamsUpdating = false;
+ }
+ },
+
+ __tailQueryParamsChanged: function(queryParams) {
+ if (queryParams && this.route && this.route.__queryParams != queryParams) {
+ this.set('route.__queryParams', queryParams);
+ }
+ },
+
+ __queryParamsChanged: function(changes) {
+ if (!this.active || this._queryParamsUpdating) {
+ return;
+ }
+
+ this.set('route.__' + changes.path, changes.value);
+ },
+
+ __resetProperties: function() {
+ this._setActive(false);
+ this._matched = null;
+ },
+
+ __tryToMatch: function() {
+ if (!this.route) {
+ return;
+ }
+
+ var path = this.route.path;
+ var pattern = this.pattern;
+
+ if (this.autoActivate && path === '') {
+ path = '/';
+ }
+
+ if (!pattern) {
+ return;
+ }
+
+ if (!path) {
+ this.__resetProperties();
+ return;
+ }
+
+ var remainingPieces = path.split('/');
+ var patternPieces = pattern.split('/');
+
+ var matched = [];
+ var namedMatches = {};
+
+ for (var i = 0; i < patternPieces.length; i++) {
+ var patternPiece = patternPieces[i];
+ if (!patternPiece && patternPiece !== '') {
+ break;
+ }
+ var pathPiece = remainingPieces.shift();
+
+ // We don't match this path.
+ if (!pathPiece && pathPiece !== '') {
+ this.__resetProperties();
+ return;
+ }
+ matched.push(pathPiece);
+
+ if (patternPiece.charAt(0) == ':') {
+ namedMatches[patternPiece.slice(1)] = pathPiece;
+ } else if (patternPiece !== pathPiece) {
+ this.__resetProperties();
+ return;
+ }
+ }
+
+ this._matched = matched.join('/');
+
+ // Properties that must be updated atomically.
+ var propertyUpdates = {};
+
+ // this.active
+ if (!this.active) {
+ propertyUpdates.active = true;
+ }
+
+ // this.tail
+ var tailPrefix = this.route.prefix + this._matched;
+ var tailPath = remainingPieces.join('/');
+ if (remainingPieces.length > 0) {
+ tailPath = '/' + tailPath;
+ }
+ if (!this.tail || this.tail.prefix !== tailPrefix ||
+ this.tail.path !== tailPath) {
+ propertyUpdates.tail = {
+ prefix: tailPrefix,
+ path: tailPath,
+ __queryParams: this.route.__queryParams
+ };
+ }
+
+ // this.data
+ propertyUpdates.data = namedMatches;
+ this._dataInUrl = {};
+ for (var key in namedMatches) {
+ this._dataInUrl[key] = namedMatches[key];
+ }
+
+ if (this.setProperties) {
+ // atomic update
+ this.setProperties(propertyUpdates, true);
+ } else {
+ this.__setMulti(propertyUpdates);
+ }
+ },
+
+ __tailPathChanged: function(path) {
+ if (!this.active) {
+ return;
+ }
+ var tailPath = path;
+ var newPath = this._matched;
+ if (tailPath) {
+ if (tailPath.charAt(0) !== '/') {
+ tailPath = '/' + tailPath;
+ }
+ newPath += tailPath;
+ }
+ this.set('route.path', newPath);
+ },
+
+ __updatePathOnDataChange: function() {
+ if (!this.route || !this.active) {
+ return;
+ }
+ var newPath = this.__getLink({});
+ var oldPath = this.__getLink(this._dataInUrl);
+ if (newPath === oldPath) {
+ return;
+ }
+ this.set('route.path', newPath);
+ },
+
+ __getLink: function(overrideValues) {
+ var values = {tail: null};
+ for (var key in this.data) {
+ values[key] = this.data[key];
+ }
+ for (var key in overrideValues) {
+ values[key] = overrideValues[key];
+ }
+ var patternPieces = this.pattern.split('/');
+ var interp = patternPieces.map(function(value) {
+ if (value[0] == ':') {
+ value = values[value.slice(1)];
+ }
+ return value;
+ }, this);
+ if (values.tail && values.tail.path) {
+ if (interp.length > 0 && values.tail.path.charAt(0) === '/') {
+ interp.push(values.tail.path.slice(1));
+ } else {
+ interp.push(values.tail.path);
+ }
+ }
+ return interp.join('/');
+ },
+
+ __setMulti: function(setObj) {
+ // HACK(rictic): skirting around 1.0's lack of a setMulti by poking at
+ // internal data structures. I would not advise that you copy this
+ // example.
+ //
+ // In the future this will be a feature of Polymer itself.
+ // See: https://github.com/Polymer/polymer/issues/3640
+ //
+ // Hacking around with private methods like this is juggling footguns,
+ // and is likely to have unexpected and unsupported rough edges.
+ //
+ // Be ye so warned.
+ for (var property in setObj) {
+ this._propertySetter(property, setObj[property]);
+ }
+ // notify in a specific order
+ if (setObj.data !== undefined) {
+ this._pathEffector('data', this.data);
+ this._notifyChange('data');
+ }
+ if (setObj.active !== undefined) {
+ this._pathEffector('active', this.active);
+ this._notifyChange('active');
+ }
+ if (setObj.tail !== undefined) {
+ this._pathEffector('tail', this.tail);
+ this._notifyChange('tail');
+ }
+ }
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/bower.json
new file mode 100644
index 00000000000..f1679dcf088
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/bower.json
@@ -0,0 +1,65 @@
+{
+ "name": "app-route",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "description": "App routing expressed as Polymer Custom Elements.",
+ "main": [
+ "app-route.html",
+ "app-location.html",
+ "app-route-converter.html"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/app-route",
+ "private": true,
+ "ignore": [],
+ "dependencies": {
+ "iron-location": "PolymerElements/iron-location#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "google-youtube": "GoogleWebComponents/google-youtube#1 - 2",
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-pages": "PolymerElements/iron-pages#1 - 2",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#1 - 2",
+ "paper-card": "PolymerElements/paper-card#1 - 2",
+ "paper-icon-button": "polymerelements/paper-icon-button#1 - 2",
+ "paper-input": "polymerelements/paper-input#1 - 2",
+ "paper-spinner": "PolymerElements/paper-spinner#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-toggle-button": "polymerelements/paper-toggle-button#1 - 2",
+ "url": "webcomponents/URL#^0.5.7",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-location": "polymerelements/iron-location#^0.8.1",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "google-youtube": "GoogleWebComponents/google-youtube#^1.2.1",
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.0",
+ "iron-pages": "PolymerElements/iron-pages#^1.0.7",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
+ "paper-card": "PolymerElements/paper-card#^1.1.1",
+ "paper-icon-button": "polymerelements/paper-icon-button#^v1.0.0",
+ "paper-input": "polymerelements/paper-input#^1.1.2",
+ "paper-spinner": "PolymerElements/paper-spinner#^1.1.1",
+ "paper-styles": "polymerelements/paper-styles#^1.0.13",
+ "paper-toggle-button": "polymerelements/paper-toggle-button#^1.0.0",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo.html
new file mode 100644
index 00000000000..20797f7f891
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>carbon-route data loading example</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/url-bar.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="./data-loading-demo/flickr-search-demo.html">
+
+ <style is="custom-style" include="demo-pages-shared-styles">
+ </style>
+</head>
+<body>
+
+<url-bar></url-bar>
+
+<flickr-search-demo></flickr-search-demo>
+
+
+
+</body></html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-image-page.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-image-page.html
new file mode 100644
index 00000000000..3b39a0cc8b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-image-page.html
@@ -0,0 +1,106 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-ajax/iron-ajax.html">
+<link rel="import" href="../../../paper-spinner/paper-spinner.html">
+<link rel="import" href="../../app-route.html">
+
+<dom-module id="flickr-image-page">
+ <template>
+ <style>
+ paper-spinner {
+ display: block;
+ }
+ .tags span {
+ display: inline-block;
+ padding-right: 10px;
+ font-size: 110%;
+ }
+ .tags span::after {
+ content: ', ';
+ }
+ .tags span:last-of-type::after {
+ content: '';
+ }
+ </style>
+ <app-route route="{{route}}" pattern="/:farm/:server/:id/:secret" data="{{data}}">
+ </app-route>
+ <img src="{{_computeSrc(data)}}">
+ <iron-ajax auto url="https://www.flickr.com/services/rest/"
+ handle-as="json"
+ params="{{params}}"
+ last-response="{{metadata}}"
+ last-error="{{error}}"
+ loading="{{loading}}">
+ </iron-ajax>
+ <paper-spinner active="{{loading}}"></paper-spinner>
+ <div>
+ <h1>{{metadata.photo.title._content}}</h1>
+ <div class="tags">
+ <template is="dom-repeat" items="{{metadata.photo.tags.tag}}">
+ <span>{{item.raw}}</span>
+ </template>
+ </div>
+ <div>
+ <ul>
+ <template is="dom-repeat" items="{{metadata.photo.urls.url}}">
+ <li>
+ <a target="_blank" href="{{item._content}}">
+ {{item._content}}
+ </a>
+ </li>
+ </template>
+ </ul>
+ </div>
+ </div>
+ </template>
+ <script>
+ Polymer({
+ is: 'flickr-image-page',
+ properties: {
+ apiKey: {
+ type: String,
+ },
+
+ params: {
+ type: Object,
+ computed: '_computeParams(apiKey, data.id, data.secret)'
+ },
+
+ route: {type: Object}
+ },
+ observers: ['_clearOldMetadata(route.path)'],
+
+ _clearOldMetadata: function() {
+ this.metadata = null;
+ },
+
+ _computeParams: function(apiKey, id, secret) {
+ return {
+ method: 'flickr.photos.getInfo',
+ api_key: apiKey,
+ photo_id: id,
+ secret: secret,
+ format: 'json',
+ nojsoncallback: 1
+ };
+ },
+
+ _computeSrc: function(photo) {
+ if (!photo || !photo.farm) {
+ return '';
+ }
+ return 'https://farm' + photo.farm + '.staticflickr.com/' + photo.server +
+ '/' + photo.id + '_' + photo.secret + '.jpg';
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-demo.html
new file mode 100644
index 00000000000..eb35a8a1fe9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-demo.html
@@ -0,0 +1,62 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-pages/iron-pages.html">
+<link rel="import" href="../../app-location.html">
+<link rel="import" href="../../app-route.html">
+<link rel="import" href="./flickr-search-page.html">
+<link rel="import" href="./flickr-image-page.html">
+
+
+<dom-module id="flickr-search-demo">
+ <template>
+ <style>
+ a {
+ text-decoration: none;
+ color: inherit;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ </style>
+ <app-location route="{{route}}" use-hash-as-path></app-location>
+ <app-route route="{{route}}" pattern="/:page" data="{{data}}">
+ </app-route>
+ <app-route route="{{route}}" pattern="/search" tail="{{searchRoute}}">
+ </app-route>
+ <app-route route="{{route}}" pattern="/image" tail="{{imageRoute}}">
+ </app-route>
+
+ <h1><a href="#/search/">Public Domain Image Search</a></h1>
+
+ <iron-pages attr-for-selected="id" selected="{{data.page}}"
+ selected-attribute="selected">
+ <flickr-search-page id="search" api-key="{{apiKey}}"
+ route="{{searchRoute}}">
+ </flickr-search-page>
+ <flickr-image-page id="image" api-key="{{apiKey}}" route="{{imageRoute}}">
+ </flickr-image-page>
+ </iron-pages>
+ </template>
+ <script>
+ Polymer({
+ is: 'flickr-search-demo',
+ properties:
+ {apiKey: {type: String, value: '5358d9830b6865a13d251e5e1acb4c30'}},
+
+ attached: function() {
+ if (this.route.path === '') {
+ this.set('route.path', '/search/');
+ }
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-page.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-page.html
new file mode 100644
index 00000000000..04276abb2c9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/data-loading-demo/flickr-search-page.html
@@ -0,0 +1,107 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-spinner/paper-spinner.html">
+<link rel="import" href="../../../paper-input/paper-input.html">
+<link rel="import" href="../../app-route.html">
+
+<dom-module id="flickr-search-page">
+ <template>
+ <style>
+ paper-spinner {
+ display: block;
+ }
+ img {
+ max-width: 200px;
+ max-height: 200px;
+ }
+ </style>
+ <app-route pattern="/" route="{{route}}" query-params="{{queryParams}}"
+ active="{{active}}">
+ </app-route>
+ <paper-input autofocus label="Search the public domain on Flickr"
+ value="{{queryParams.search}}">
+ </paper-input>
+
+ <iron-ajax auto url="https://www.flickr.com/services/rest/"
+ handle-as="json"
+ debounce-duration="300"
+ params="{{params}}"
+ last-response="{{response}}"
+ last-error="{{error}}"
+ loading="{{loading}}">
+ </iron-ajax>
+ <paper-spinner active="{{loading}}"></paper-spinner>
+ <template is="dom-repeat" items="{{response.photos.photo}}" as="photo">
+ <a href="{{_computeLink(photo)}}">
+ <img src="{{_computeSrc(photo)}}">
+ </a>
+ </template>
+ <template is="dom-if" if="{{error}}">
+ <span>{{error.statusCode}}</span> Error:
+ <pre>{{error.response}}</pre>
+ </template>
+ </template>
+ <script>
+ Polymer({
+ is: 'flickr-search-page',
+ properties: {
+ apiKey: {
+ type: String,
+ },
+
+ params:
+ {type: Object, computed: '_computeParams(apiKey, queryParams.search)'},
+
+ route: {type: Object}
+ },
+
+ observers: [
+ '_clearOldSearchResults(queryParams.search)',
+ '_setDefaultSearch(active)'
+ ],
+
+ _clearOldSearchResults: function() {
+ this.response = null;
+ },
+
+ _computeParams: function(apiKey, search) {
+ return {
+ method: 'flickr.photos.search',
+ api_key: apiKey,
+ text: search,
+ license: '7,8',
+ format: 'json',
+ nojsoncallback: 1
+ };
+ },
+
+ _computeSrc: function(photo) {
+ if (!photo || !photo.farm) {
+ return '';
+ }
+ return 'https://farm' + photo.farm + '.staticflickr.com/' + photo.server +
+ '/' + photo.id + '_' + photo.secret + '.jpg';
+ },
+
+ _computeLink: function(photo) {
+ return window.location.pathname + '#/image/' + photo.farm + '/' +
+ photo.server + '/' + photo.id + '/' + photo.secret;
+ },
+
+ _setDefaultSearch: function(active) {
+ if (active && !this.queryParams.search) {
+ this.set('queryParams.search', 'spaceship')
+ }
+ }
+ })
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/index.html
new file mode 100644
index 00000000000..22f297e5957
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/index.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at
+http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at
+http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at
+http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at
+http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+<title>app-route Demo</title>
+<link rel="import" href="../../polymer/polymer.html">
+
+<link rel="import" href="../../iron-demo-helpers/url-bar.html">
+<link rel="import" href="../../iron-pages/iron-pages.html">
+
+<link rel="import" href="../app-location.html">
+<link rel="import" href="../app-route.html">
+
+<link rel="import" href="youtube-demo/youtube-search.html">
+<link rel="import" href="youtube-demo/youtube-toolbar.html">
+<link rel="import" href="youtube-demo/video-viewer.html">
+<link rel="import" href="youtube-demo/search-results.html">
+
+<style>
+ body {
+ margin: 0;
+ padding: 0;
+ }
+ url-bar {
+ background-color: white;
+ }
+</style>
+</head>
+
+<body>
+
+<url-bar></url-bar>
+
+<app-router-demo></app-router-demo>
+
+<dom-module id="app-router-demo">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ height: 100vh;
+ @apply --paper-font-common-base;
+ }
+
+ :host([video-page-active]) {
+ overflow: hidden;
+ }
+
+ :host([video-page-active]) iron-pages {
+ transform: translateY(-170px);
+ }
+
+ iron-pages {
+ transition: transform 0.3s;
+ }
+ </style>
+
+
+ <!-- app-location binds with the URL and produces a route for
+ app-route elements to consume. Since this demo needs to run without
+ server cooperation (e.g. with polyserve, in the elements catalog, etc) we'll
+ use the hash portion of the URL for our route paths. -->
+ <app-location route="{{route}}" use-hash-as-path></app-location>
+
+ <!-- app-routes parse route paths based on the their `pattern`.
+ Parameters are extracted into the `data` object. The rest of the path that
+ comes after the `pattern` is put into the `tail` object, which can be
+ passed to the `route` property of downstream app-routes. -->
+ <app-route route="{{route}}" pattern="/:page" data="{{data}}"></app-route>
+ <app-route route="{{route}}" pattern="/search" tail="{{searchTail}}"></app-route>
+ <app-route route="{{route}}" pattern="/video" tail="{{videoTail}}" active="{{videoPageActive}}"></app-route>
+
+ <youtube-toolbar collapsed$="{{videoPageActive}}">
+ <!-- The youtube-search has a app-route that consumes the tail of
+ another route (`searchTail`) -->
+ <youtube-search
+ route="{{searchTail}}"
+ video-data="{{videoData}}">
+ </youtube-search>
+ </youtube-toolbar>
+
+ <iron-pages attr-for-selected="id" selected="{{data.page}}">
+ <search-results id="search" items="{{videos}}"></search-results>
+
+ <!-- The video-viewer has a app-route that consumes the tail of
+ another route -->
+ <video-viewer id="video" route="{{videoTail}}"></video-viewer>
+ </iron-pages>
+
+ </template>
+
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ Polymer({
+ is: 'app-router-demo',
+
+ properties: {
+ route: {type: Object},
+
+ videoData: {type: Object, observer: '_videoDataChanged'},
+
+ videoPageActive: {
+ type: Boolean,
+ reflectToAttribute: true,
+ observer: '_videoPageActiveChanged'
+ },
+
+ searchTail: {type: Object, notify: true},
+
+ videoTail: {type: Object, notify: true},
+
+ newCategory: {type: String},
+
+ videos: {
+ type: Array,
+ value: function() {
+ return [];
+ }
+ },
+
+ data: {
+ type: Object,
+ value: function() {
+ return {page: '/search/'};
+ }
+ }
+ },
+
+ attached: function() {
+ // If we do not have an initial URL, we redirect to /search
+ if (!this.route || !this.route.path) {
+ this.set('route.path', '/search/');
+ }
+ },
+
+ _videoDataChanged: function(data) {
+ var allVideos = [];
+
+ var that = this;
+
+ data.items.forEach(function(videoItem) {
+ var youtubeVideo = {
+ id: videoItem.id.videoId,
+ title: videoItem.snippet.title,
+ thumbnail: videoItem.snippet.thumbnails.high.url
+ };
+
+ allVideos.push(youtubeVideo);
+ });
+
+ this.set('videos', allVideos);
+ },
+
+ _videoPageActiveChanged: function(videoPageActive, previousValue) {
+ // change color of page on page change
+ var newColor;
+
+ if (videoPageActive) {
+ // black
+ newColor = 0;
+ } else {
+ // white
+ newColor = 255;
+ }
+
+ document.body.style.backgroundColor =
+ 'rgb(' + newColor + ',' + newColor + ',' + newColor + ')';
+
+ // on first load, set the color then allow color transition animations
+ if (previousValue === undefined) {
+ document.body.style.transition = 'background-color .2s linear';
+ return;
+ }
+ }
+ });
+ });
+ </script>
+</dom-module>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/simple-demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/simple-demo.html
new file mode 100644
index 00000000000..98cc1719a96
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/simple-demo.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+<title>app-route Demo</title>
+<link rel="import" href="../../polymer/polymer.html">
+
+<link rel="import" href="../../iron-demo-helpers/url-bar.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../../iron-pages/iron-pages.html">
+<link rel="import" href="../../paper-input/paper-input.html">
+<link rel="import" href="../../paper-button/paper-button.html">
+
+<link rel="import" href="../app-location.html">
+<link rel="import" href="../app-route.html">
+</head>
+
+<body>
+<dom-module id="route-display">
+ <template>
+ <div>
+ <div>route<template is="dom-if" if="{{tail}}"> / tail</template>: {</div>
+ <div>&nbsp;&nbsp;prefix: {{route.prefix}}</div>
+ <div>&nbsp;&nbsp;path: {{route.path}}</div>
+ <div>}</div>
+ </div>
+ </template>
+ <script>
+ Polymer({
+ is: 'route-display',
+
+ properties: {route: Object, tail: Boolean}
+ });
+ </script>
+</dom-module>
+
+<dom-bind>
+ <template is="dom-bind">
+ <url-bar></url-bar>
+
+ <app-location route="{{route}}" use-hash-as-path></app-location>
+
+ <app-route
+ route="{{route}}"
+ pattern="/:demoType"
+ data="{{demoSelectionData}}"
+ tail="{{demoSelectionTail}}">
+ </app-route>
+
+ <app-route
+ route="{{route}}"
+ pattern="/pathDemo/:firstPath/:secondPath"
+ data="{{pathData}}"
+ tail="{{pathDataTail}}">
+ </app-route>
+
+ <app-route
+ route="{{route}}"
+ pattern="/queryParamsDemo"
+ query-params="{{queryParams}}"
+ tail="{{qpDemoTail}}">
+ </app-route>
+
+ <div>App location route object
+ <route-display route="{{route}}"></route-display>
+ </div>
+
+ <paper-button raised>
+ <a href="#/pathDemo/firstPath/secondPath/thirdPath">Changes in Path</a>
+ </paper-button>
+
+ <paper-button raised>
+ <a href="?hello=world&foo=bar#/queryParamsDemo">Changes in Query Params</a>
+ </paper-button>
+
+ <iron-pages selected={{demoSelectionData.demoType}} attr-for-selected="demo">
+ <div demo="pathDemo">
+ Change location of first part of the path:
+ <paper-input value="{{pathData.firstPath}}"></paper-input>
+ Change location of second part of the path:
+ <paper-input value="{{pathData.secondPath}}"></paper-input>
+
+ <app-route
+ route="{{pathDataTail}}"
+ pattern="/:thirdPath"
+ data="{{tailExampleData}}">
+ </app-route>
+ You can pass the tail of an app-route to be the route another app-route. Here is
+ the tail object of the first app-route which is the route object of this new app-route:
+ <route-display route="{{pathDataTail}}" tail></route-display>
+ You can also bind to this new route. Change the location of the third part of
+ the path:
+ <paper-input value="{{tailExampleData.thirdPath}}"></paper-input>
+ </div>
+
+ <div demo="queryParamsDemo">
+ Change the value of the hello query param
+ <paper-input value="{{queryParams.hello}}"></paper-input>
+ Change the value of the foo param
+ <paper-input value="{{queryParams.foo}}"></paper-input>
+ </div>
+ </iron-pages>
+ </template>
+</dom-bind>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/route-info.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/route-info.html
new file mode 100644
index 00000000000..90743081b85
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/route-info.html
@@ -0,0 +1,44 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+
+<dom-module id="route-info">
+ <template>
+ <style>
+ :host {
+ font-style: italic;
+ font-size: 0.85em;
+ font-weight: 200;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #fff;
+ }
+ </style>
+ <span>Route prefix: {{route.prefix}} &middot; Route path: {{route.path}} &middot; Query params: {{_stringifyQueryParams(route.__queryParams.*)}}</span>
+ </template>
+ <script>
+ Polymer({
+ is: 'route-info',
+
+ properties: {route: {type: Object}},
+
+ _stringifyQueryParams: function() {
+ var params = [];
+ if (this.route && this.route.__queryParams) {
+ for (var key in this.route.__queryParams) {
+ params.push(key + ' = ' + this.route.__queryParams[key]);
+ }
+ }
+ return params.join(', ');
+ }
+ })
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/search-results.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/search-results.html
new file mode 100644
index 00000000000..87cc856ad18
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/search-results.html
@@ -0,0 +1,59 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-card/paper-card.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+
+<dom-module id="search-results">
+ <template>
+ <style>
+ :host {
+ @apply --layout-horizontal;
+ @apply --layout-center-center;
+ @apply --layout-wrap;
+ }
+
+ a {
+ color: black;
+ text-decoration: none;
+ }
+
+ paper-card {
+ width: 300px;
+ margin: 1em 0.5em 0em;
+ font-size: 14px;
+ }
+
+ .card-content {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ </style>
+ <template is="dom-repeat" items="{{items}}" as="video">
+ <!-- The '#' is included because the use-hash-as-path property is
+ set to true in the app-location -->
+ <a href="./#/video/{{video.id}}">
+ <paper-card image="{{video.thumbnail}}">
+ <div class="card-content">
+ {{video.title}}
+ </div>
+ </paper-card>
+ </a>
+ </template>
+ </template>
+ <script>
+ Polymer({
+ is: 'search-results',
+
+ properties: {items: {type: Array}}
+ })
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/video-viewer.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/video-viewer.html
new file mode 100644
index 00000000000..ca274c6142e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/video-viewer.html
@@ -0,0 +1,121 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-styles/color.html">
+<link rel="import" href="../../../paper-input/paper-input.html">
+<link rel="import" href="../../../paper-toggle-button/paper-toggle-button.html">
+
+<link rel="import" href="../../app-route.html">
+
+<link rel="import" href="youtube-lite.html">
+<link rel="import" href="route-info.html">
+
+<dom-module id="video-viewer">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ height: calc(100vh - 60px);
+ --primary-color: var(--paper-red-500);
+ --primary-text-color: #fff;
+ --paper-toggle-button-unchecked-bar-color: #888;
+ }
+
+ paper-input {
+ width: 100px;
+ }
+
+ #controls {
+ color: #fff;
+ @apply --layout-vertical;
+ @apply --layout-center-center;
+ height: 30%;
+ }
+
+ #controls > div {
+ @apply --layout-horizontal;
+ padding-bottom: 1em;
+ }
+
+ #state {
+ margin-left: 16px;
+ }
+
+ #player {
+ height: 70%;
+ }
+ </style>
+
+ <!-- This app-route consumes the route which was provided by the tail of
+ a app-route in the host of this element. This means that the parent that
+ provides this route decides where this element lives in the URL space. In
+ this case, the parent, which uses hashes, matches #/video and hence this
+ element lives in <App serving point>?querParams#/video/:vid -->
+ <app-route route="{{route}}" pattern="/:vid" data="{{data}}" query-params="{{queryParams}}">
+ </app-route>
+
+ <!-- You can bind any element's state into the URL by binding their
+ properties into the queryParams object. youtube-lite doesn't have any code
+ that's even aware of routing or the URL. -->
+ <youtube-lite
+ id="player"
+ video-id="{{data.vid}}"
+ state="{{queryParams.state}}"
+ current-time="{{queryParams.time}}"
+ start-time="{{queryParams.time}}">
+ </youtube-lite>
+
+ <div id="controls">
+ <div>
+ <paper-input
+ id="time"
+ type="number"
+ on-focus="pause"
+ label="Time"
+ value="{{queryParams.time}}">
+ </paper-input>
+ <paper-toggle-button id="state" active="{{playing}}">[[queryParams.state]]</paper-toggle-button>
+ </div>
+ <route-info route="[[route]]"></route-info>
+ </div>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'video-viewer',
+
+ properties: {
+ route: {type: Object, notify: true},
+
+ data: {type: Object},
+
+ playing: {type: Boolean},
+
+ queryParams: {type: Object}
+ },
+
+ observers: ['_playingChanged(playing)', '_stateChanged(queryParams.state)'],
+
+ pause: function() {
+ this.set('queryParams.state', 'paused');
+ },
+
+ _playingChanged: function(playing) {
+ this.set('queryParams.state', playing ? 'playing' : 'paused');
+ },
+
+ _stateChanged: function(state) {
+ this.playing = state === 'playing';
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-lite.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-lite.html
new file mode 100644
index 00000000000..a7af9a9a734
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-lite.html
@@ -0,0 +1,178 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../google-youtube/google-youtube.html">
+<!--
+youtube-lite provides a simple subset of the google-youtube element's API. By
+simplifying the API we're also able to make it more amenable to two-way data
+binding.
+
+Note that this element is totally agnostic to routing!
+-->
+<dom-module id="youtube-lite">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ width: 100%;
+ }
+
+ google-youtube {
+ height: 100%;
+ }
+ </style>
+
+ <google-youtube
+ id="player"
+ video-id="{{videoId}}"
+ state="{{__state}}"
+ currenttime="{{__currentTime}}"
+ width="100%"
+ height="100%">
+ </google-youtube>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'youtube-lite',
+
+ properties: {
+ videoId: {type: String, notify: true},
+
+ state: {type: String, notify: true, observer: '_stateChanged'},
+
+ currentTime: {type: Number, notify: true, observer: '_currentTimeChanged'},
+
+ startTime: {type: Number},
+
+ __state: {type: String, observer: '__ytApiStateChange'},
+
+ __currentTime: {type: String, observer: '_ytCurrentTimeChanged'},
+
+ __pauseOnFirstSeek: {type: Boolean}
+ },
+
+ listeners: {'google-youtube-ready': '_onYoutubeReady'},
+
+ _seekTo: function(newTime) {
+ var player = this.$.player;
+
+ if (player.duration == 1 || newTime < player.duration) {
+ player.seekTo(newTime);
+ }
+ },
+
+ _onYoutubeReady: function() {
+ this.__pauseOnFirstSeek = this.state == 'paused';
+
+ if (!this.__pauseOnFirstSeek || this.startTime) {
+ this._seekTo(this.startTime);
+ }
+ },
+
+ _currentTimeChanged: function(newTime, oldTime) {
+ var apiState = this.__readableStateToApiState(this.state);
+
+ if (apiState != 2 || this.__state != 2) {
+ return;
+ }
+
+ this._seekTo(newTime);
+ },
+
+ _ytCurrentTimeChanged: function(ytCurrentTime) {
+ if (this.__state === this.__apiStates.PAUSED) {
+ return;
+ }
+
+ this.currentTime = ytCurrentTime;
+ },
+
+ _stateChanged: function(newState, oldState) {
+ var newApiState = this.__readableStateToApiState(newState);
+
+ if (newApiState == this.__state ||
+ this.__state == this.__apiStates.UNSTARTED) {
+ return;
+ }
+
+ this.currentTime = this.__currentTime;
+ var player = this.$.player;
+
+ switch (newApiState) {
+ case this.__apiStates.PLAYING:
+ player.play();
+ break;
+ case this.__apiStates.PAUSED:
+ player.pause();
+ break;
+ default:
+ return;
+ }
+ },
+
+ __ytApiStateChange: function(newState, oldState) {
+ var readableState;
+
+ switch (newState) {
+ case this.__apiStates.ENDED:
+ readableState = this.__states.PAUSED;
+ break;
+ case this.__apiStates.PLAYING:
+ readableState = this.__states.PLAYING;
+ break;
+ case this.__apiStates.PAUSED:
+ readableState = this.__states.PAUSED;
+ break;
+ default:
+ return;
+ }
+
+ if (this.state == readableState) {
+ return;
+ }
+
+ if (this.__pauseOnFirstSeek && readableState == this.__states.PLAYING) {
+ this.__pauseOnFirstSeek = false;
+ this.$.player.pause();
+ return;
+ }
+
+ this.state = readableState;
+ this.currentTime = this.__currentTime;
+ },
+
+ __readableStateToApiState: function(readableState) {
+ var newApiState = -2;
+
+ if (readableState == this.__states.PLAYING) {
+ newApiState = this.__apiStates.PLAYING;
+
+ } else if (readableState = this.__states.PAUSED) {
+ newApiState = this.__apiStates.PAUSED;
+ }
+
+ return newApiState;
+ },
+
+ __states: {PLAYING: 'playing', PAUSED: 'paused'},
+
+ __apiStates: {
+ UNSTARTED: -1,
+ ENDED: 0,
+ PLAYING: 1,
+ PAUSED: 2,
+ BUFFERING: 3,
+ QUEUED: 5
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-search.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-search.html
new file mode 100644
index 00000000000..9d8612d3ea7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-search.html
@@ -0,0 +1,86 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-input/paper-input.html">
+<link rel="import" href="../../../iron-ajax/iron-ajax.html">
+
+<link rel="import" href="../../app-route.html">
+
+<link rel="import" href="route-info.html">
+
+<dom-module id="youtube-search">
+ <template>
+ <style>
+ :host {
+ --primary-color: #fff;
+ --paper-input-container-color: #fff;
+ display: block;
+ position: relative;
+ padding: 1em;
+ }
+
+ route-info {
+ color: #fff;
+ }
+ </style>
+
+ <!-- This app-route consumes the route which was provided by the tail of
+ a app-route in the host of this element -->
+ <app-route route="{{route}}" pattern="/:searchQuery" data="{{data}}">
+ </app-route>
+
+ <paper-input label="Search Youtube" value="{{data.searchQuery}}"></paper-input>
+
+ <route-info route="[[route]]"></route-info>
+
+ <iron-ajax auto
+ id="youtubeSearch"
+ url="https://www.googleapis.com/youtube/v3/search"
+ params="{{params}}"
+ last-response="{{videoData}}">
+ </iron-ajax>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'youtube-search',
+
+ properties: {
+ route: {type: Object, notify: true},
+
+ data: {type: Object},
+
+ category: {type: String, notify: true},
+
+ params: {type: String, computed: '_setParams(data.searchQuery)'},
+
+ videoData: {type: Object, notify: true}
+ },
+
+ observers: ['_pathChanged(route.path)'],
+
+ _pathChanged: function() {
+ this.async(function() {
+ if (!this.route.path) {
+ this.set('route.path', '/');
+ }
+ });
+ },
+
+ _setParams: function(category) {
+ return {
+ part: 'snippet', q: this.data.searchQuery,
+ key: 'AIzaSyAuecFZ9xJXbGDkQYWBmYrtzOGJD-iDIgI', type: 'video'
+ }
+ },
+
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-toolbar.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-toolbar.html
new file mode 100644
index 00000000000..a1f3ff5325b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/demo/youtube-demo/youtube-toolbar.html
@@ -0,0 +1,179 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-styles/shadow.html">
+<link rel="import" href="../../../paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../../../iron-icons/iron-icons.html">
+
+<dom-module id="youtube-toolbar">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ --paper-icon-button-ink-color: #fff;
+ --iron-icon-fill-color: #fff;
+ }
+
+ :host([collapsed]) #background {
+ transform: scaleY(calc(60/230));
+ }
+
+ :host([collapsed]) #youtube-logo {
+ transform: scale(calc(60/230)) translateY(-195px);
+ }
+
+ :host([collapsed]) #back {
+ transform: translateX(0);
+ }
+
+ :host([collapsed]) #content {
+ opacity: 0;
+ transition-delay: 0s;
+ transform: translateY(-10px);
+ }
+
+ #background {
+ height: 230px;
+ background-image: linear-gradient(#E7291A, #C21616);
+ @apply --shadow-elevation-2dp;
+ transform-origin: 0 0;
+ transition: transform 0.3s;
+ transform: scaleY(1);
+ }
+
+ #youtube-logo {
+ display: block;
+ position: absolute;
+ margin: auto;
+ top: 30px;
+
+ left: calc(50% - 75px);
+
+ width: 150px;
+ height: calc(150px / 1.45);
+ background-image: radial-gradient(transparent 50%, #fff 50%);
+ border-radius: 9% / 13%;
+ transition: transform 0.3s;
+ }
+
+ #youtube-logo:before,
+ #youtube-logo:after {
+ content: '';
+ display: block;
+ position: absolute;
+ background-color: #fff;
+ width: 90%;
+ height: 14%;
+ left: 5%;
+ border-radius: 100% / 90%;
+ }
+
+ #youtube-logo:before {
+ top: -3.7%;
+ }
+
+ #youtube-logo:after {
+ bottom: -3.7%;
+ }
+
+ #youtube-logo > .lr-edge {
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ }
+
+ #youtube-logo > .lr-edge:before,
+ #youtube-logo > .lr-edge:after {
+ content: '';
+ display: block;
+ position: absolute;
+ background-color: #fff;
+ width: 10%;
+ height: 90%;
+ top: 5%;
+
+ border-radius: 100% / 90%;
+ }
+
+ #youtube-logo > .lr-edge:before {
+ left: -2.5%;
+ }
+
+ #youtube-logo > .lr-edge:after {
+ right: -2.5%;
+ }
+
+ #youtube-logo > .play-icon {
+ display: block;
+ position: absolute;
+ width: 80%;
+ height: 80%;
+ top: 10%;
+ left: 10%;
+ overflow: hidden;
+ background-image:
+ linear-gradient(90deg, #fff 38%, transparent 38%),
+ linear-gradient(35deg, transparent 57%, rgba(0, 0, 0, 0.3) 57%);
+ }
+
+ #youtube-logo > .play-icon:before,
+ #youtube-logo > .play-icon:after {
+ content: '';
+ display: block;
+ position: absolute;
+ width: 200%;
+ height: 65%;
+ background-color: #fff;
+ }
+
+ #youtube-logo > .play-icon:before {
+ transform-origin: top left;
+ top: -80%;
+ transform: rotate(29deg);
+ }
+
+ #youtube-logo > .play-icon:after {
+ transform-origin: bottom left;
+ bottom: -80%;
+ transform: rotate(-29deg);
+ }
+
+ #content {
+ display: block;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ transition: transform 0.15s, opacity 0.15s;
+ transition-delay: 0.2s;
+ }
+
+ #back {
+ position: absolute;
+ top: 10px;
+ transform: translateX(-64px);
+ transition: transform 0.3s;
+ }
+ </style>
+ <div id="background"></div>
+ <div id="youtube-logo">
+ <div class="lr-edge"></div>
+ <div class="play-icon"></div>
+ </div>
+ <div id="content">
+ <slot></slot>
+ </div>
+ <a id="back" href="../#/search/"><paper-icon-button icon="icons:arrow-back"></paper-icon-button></a>
+ </template>
+ <script>
+ Polymer({is: 'youtube-toolbar'});
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/index.html
new file mode 100644
index 00000000000..5b354f51bf1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>app-router</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package-lock.json
new file mode 100644
index 00000000000..733067118a0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/app-route",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.5"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.5"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.5.tgz",
+ "integrity": "sha512-ZPFmE9m1svkDUy9sK2/TaUYLEKslrETZFiH4AlVVEN7Wtow7sD3RCD6zSq/44vaiZxzQlKi769iL2yR/a+BQxg==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.5"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.5"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.5"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package.json
new file mode 100644
index 00000000000..c29cd7cc63f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/app-route/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@polymer/app-route",
+ "private": true,
+ "description": "App routing expressed as Polymer Custom Elements.",
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/.bower.json
new file mode 100644
index 00000000000..a2e40778aff
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/.bower.json
@@ -0,0 +1,67 @@
+{
+ "name": "async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "main": "lib/async.js",
+ "keywords": [
+ "async",
+ "callback",
+ "utility",
+ "module"
+ ],
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/caolan/async.git"
+ },
+ "devDependencies": {
+ "benchmark": "bestiejs/benchmark.js",
+ "bluebird": "^2.9.32",
+ "chai": "^3.1.0",
+ "coveralls": "^2.11.2",
+ "es6-promise": "^2.3.0",
+ "jscs": "^1.13.1",
+ "jshint": "~2.8.0",
+ "karma": "^0.13.2",
+ "karma-browserify": "^4.2.1",
+ "karma-firefox-launcher": "^0.1.6",
+ "karma-mocha": "^0.2.0",
+ "karma-mocha-reporter": "^1.0.2",
+ "lodash": "^3.9.0",
+ "mkdirp": "~0.5.1",
+ "mocha": "^2.2.5",
+ "native-promise-only": "^0.8.0-a",
+ "nodeunit": ">0.0.0",
+ "nyc": "^2.1.0",
+ "rsvp": "^3.0.18",
+ "semver": "^4.3.6",
+ "uglify-js": "~2.4.0",
+ "xyz": "^0.5.0",
+ "yargs": "~3.9.1"
+ },
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ],
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "authors": [
+ "Caolan McMahon"
+ ],
+ "version": "1.5.2",
+ "homepage": "https://github.com/caolan/async",
+ "_release": "1.5.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.5.2",
+ "commit": "a47eef3dac38d593180b1e2eaed7b512b022cb9f"
+ },
+ "_source": "https://github.com/caolan/async.git",
+ "_target": "^1.5.0",
+ "_originalSource": "async"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/CHANGELOG.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/CHANGELOG.md
new file mode 100644
index 00000000000..f15e08121b2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/CHANGELOG.md
@@ -0,0 +1,125 @@
+# v1.5.2
+- Allow using `"consructor"` as an argument in `memoize` (#998)
+- Give a better error messsage when `auto` dependency checking fails (#994)
+- Various doc updates (#936, #956, #979, #1002)
+
+# v1.5.1
+- Fix issue with `pause` in `queue` with concurrency enabled (#946)
+- `while` and `until` now pass the final result to callback (#963)
+- `auto` will properly handle concurrency when there is no callback (#966)
+- `auto` will now properly stop execution when an error occurs (#988, #993)
+- Various doc fixes (#971, #980)
+
+# v1.5.0
+
+- Added `transform`, analogous to [`_.transform`](http://lodash.com/docs#transform) (#892)
+- `map` now returns an object when an object is passed in, rather than array with non-numeric keys. `map` will begin always returning an array with numeric indexes in the next major release. (#873)
+- `auto` now accepts an optional `concurrency` argument to limit the number of running tasks (#637)
+- Added `queue#workersList()`, to retrieve the list of currently running tasks. (#891)
+- Various code simplifications (#896, #904)
+- Various doc fixes :scroll: (#890, #894, #903, #905, #912)
+
+# v1.4.2
+
+- Ensure coverage files don't get published on npm (#879)
+
+# v1.4.1
+
+- Add in overlooked `detectLimit` method (#866)
+- Removed unnecessary files from npm releases (#861)
+- Removed usage of a reserved word to prevent :boom: in older environments (#870)
+
+# v1.4.0
+
+- `asyncify` now supports promises (#840)
+- Added `Limit` versions of `filter` and `reject` (#836)
+- Add `Limit` versions of `detect`, `some` and `every` (#828, #829)
+- `some`, `every` and `detect` now short circuit early (#828, #829)
+- Improve detection of the global object (#804), enabling use in WebWorkers
+- `whilst` now called with arguments from iterator (#823)
+- `during` now gets called with arguments from iterator (#824)
+- Code simplifications and optimizations aplenty ([diff](https://github.com/caolan/async/compare/v1.3.0...v1.4.0))
+
+
+# v1.3.0
+
+New Features:
+- Added `constant`
+- Added `asyncify`/`wrapSync` for making sync functions work with callbacks. (#671, #806)
+- Added `during` and `doDuring`, which are like `whilst` with an async truth test. (#800)
+- `retry` now accepts an `interval` parameter to specify a delay between retries. (#793)
+- `async` should work better in Web Workers due to better `root` detection (#804)
+- Callbacks are now optional in `whilst`, `doWhilst`, `until`, and `doUntil` (#642)
+- Various internal updates (#786, #801, #802, #803)
+- Various doc fixes (#790, #794)
+
+Bug Fixes:
+- `cargo` now exposes the `payload` size, and `cargo.payload` can be changed on the fly after the `cargo` is created. (#740, #744, #783)
+
+
+# v1.2.1
+
+Bug Fix:
+
+- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782)
+
+
+# v1.2.0
+
+New Features:
+
+- Added `timesLimit` (#743)
+- `concurrency` can be changed after initialization in `queue` by setting `q.concurrency`. The new concurrency will be reflected the next time a task is processed. (#747, #772)
+
+Bug Fixes:
+
+- Fixed a regression in `each` and family with empty arrays that have additional properties. (#775, #777)
+
+
+# v1.1.1
+
+Bug Fix:
+
+- Small regression with synchronous iterator behavior in `eachSeries` with a 1-element array. Before 1.1.0, `eachSeries`'s callback was called on the same tick, which this patch restores. In 2.0.0, it will be called on the next tick. (#782)
+
+
+# v1.1.0
+
+New Features:
+
+- `cargo` now supports all of the same methods and event callbacks as `queue`.
+- Added `ensureAsync` - A wrapper that ensures an async function calls its callback on a later tick. (#769)
+- Optimized `map`, `eachOf`, and `waterfall` families of functions
+- Passing a `null` or `undefined` array to `map`, `each`, `parallel` and families will be treated as an empty array (#667).
+- The callback is now optional for the composed results of `compose` and `seq`. (#618)
+- Reduced file size by 4kb, (minified version by 1kb)
+- Added code coverage through `nyc` and `coveralls` (#768)
+
+Bug Fixes:
+
+- `forever` will no longer stack overflow with a synchronous iterator (#622)
+- `eachLimit` and other limit functions will stop iterating once an error occurs (#754)
+- Always pass `null` in callbacks when there is no error (#439)
+- Ensure proper conditions when calling `drain()` after pushing an empty data set to a queue (#668)
+- `each` and family will properly handle an empty array (#578)
+- `eachSeries` and family will finish if the underlying array is modified during execution (#557)
+- `queue` will throw if a non-function is passed to `q.push()` (#593)
+- Doc fixes (#629, #766)
+
+
+# v1.0.0
+
+No known breaking changes, we are simply complying with semver from here on out.
+
+Changes:
+
+- Start using a changelog!
+- Add `forEachOf` for iterating over Objects (or to iterate Arrays with indexes available) (#168 #704 #321)
+- Detect deadlocks in `auto` (#663)
+- Better support for require.js (#527)
+- Throw if queue created with concurrency `0` (#714)
+- Fix unneeded iteration in `queue.resume()` (#758)
+- Guard against timer mocking overriding `setImmediate` (#609 #611)
+- Miscellaneous doc fixes (#542 #596 #615 #628 #631 #690 #729)
+- Use single noop function internally (#546)
+- Optimize internal `_each`, `_map` and `_keys` functions.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/LICENSE
new file mode 100644
index 00000000000..8f296985885
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2010-2014 Caolan McMahon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/Makefile b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/Makefile
new file mode 100644
index 00000000000..87279f40cb1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/Makefile
@@ -0,0 +1,37 @@
+export PATH := ./node_modules/.bin/:$(PATH):./bin/
+
+PACKAGE = asyncjs
+XYZ = node_modules/.bin/xyz --repo git@github.com:caolan/async.git
+
+BUILDDIR = dist
+SRC = lib/async.js
+
+all: lint test clean build
+
+build: $(wildcard lib/*.js)
+ mkdir -p $(BUILDDIR)
+ cp $(SRC) $(BUILDDIR)/async.js
+ uglifyjs $(BUILDDIR)/async.js -mc \
+ --source-map $(BUILDDIR)/async.min.map \
+ -o $(BUILDDIR)/async.min.js
+
+test:
+ nodeunit test
+
+clean:
+ rm -rf $(BUILDDIR)
+
+lint:
+ jshint $(SRC) test/*.js mocha_test/* perf/*.js
+ jscs $(SRC) test/*.js mocha_test/* perf/*.js
+
+.PHONY: test lint build all clean
+
+
+.PHONY: release-major release-minor release-patch
+release-major release-minor release-patch: all
+ ./support/sync-package-managers.js
+ git add --force *.json
+ git add --force $(BUILDDIR)
+ git commit -am "update minified build"; true
+ $(XYZ) --increment $(@:release-%=%)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/README.md
new file mode 100644
index 00000000000..316c40505c7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/README.md
@@ -0,0 +1,1877 @@
+# Async.js
+
+[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async)
+[![NPM version](http://img.shields.io/npm/v/async.svg)](https://www.npmjs.org/package/async)
+[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master)
+[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+
+Async is a utility module which provides straight-forward, powerful functions
+for working with asynchronous JavaScript. Although originally designed for
+use with [Node.js](http://nodejs.org) and installable via `npm install async`,
+it can also be used directly in the browser.
+
+Async is also installable via:
+
+- [bower](http://bower.io/): `bower install async`
+- [component](https://github.com/component/component): `component install
+ caolan/async`
+- [jam](http://jamjs.org/): `jam install async`
+- [spm](http://spmjs.io/): `spm install async`
+
+Async provides around 20 functions that include the usual 'functional'
+suspects (`map`, `reduce`, `filter`, `each`…) as well as some common patterns
+for asynchronous control flow (`parallel`, `series`, `waterfall`…). All these
+functions assume you follow the Node.js convention of providing a single
+callback as the last argument of your `async` function.
+
+
+## Quick Examples
+
+```javascript
+async.map(['file1','file2','file3'], fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+
+async.filter(['file1','file2','file3'], fs.exists, function(results){
+ // results now equals an array of the existing files
+});
+
+async.parallel([
+ function(){ ... },
+ function(){ ... }
+], callback);
+
+async.series([
+ function(){ ... },
+ function(){ ... }
+]);
+```
+
+There are many more functions available so take a look at the docs below for a
+full list. This module aims to be comprehensive, so if you feel anything is
+missing please create a GitHub issue for it.
+
+## Common Pitfalls <sub>[(StackOverflow)](http://stackoverflow.com/questions/tagged/async.js)</sub>
+### Synchronous iteration functions
+
+If you get an error like `RangeError: Maximum call stack size exceeded.` or other stack overflow issues when using async, you are likely using a synchronous iterator. By *synchronous* we mean a function that calls its callback on the same tick in the javascript event loop, without doing any I/O or using any timers. Calling many callbacks iteratively will quickly overflow the stack. If you run into this issue, just defer your callback with `async.setImmediate` to start a new call stack on the next tick of the event loop.
+
+This can also arise by accident if you callback early in certain cases:
+
+```js
+async.eachSeries(hugeArray, function iterator(item, callback) {
+ if (inCache(item)) {
+ callback(null, cache[item]); // if many items are cached, you'll overflow
+ } else {
+ doSomeIO(item, callback);
+ }
+}, function done() {
+ //...
+});
+```
+
+Just change it to:
+
+```js
+async.eachSeries(hugeArray, function iterator(item, callback) {
+ if (inCache(item)) {
+ async.setImmediate(function () {
+ callback(null, cache[item]);
+ });
+ } else {
+ doSomeIO(item, callback);
+ //...
+```
+
+Async guards against synchronous functions in some, but not all, cases. If you are still running into stack overflows, you can defer as suggested above, or wrap functions with [`async.ensureAsync`](#ensureAsync) Functions that are asynchronous by their nature do not have this problem and don't need the extra callback deferral.
+
+If JavaScript's event loop is still a bit nebulous, check out [this article](http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/) or [this talk](http://2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html) for more detailed information about how it works.
+
+
+### Multiple callbacks
+
+Make sure to always `return` when calling a callback early, otherwise you will cause multiple callbacks and unpredictable behavior in many cases.
+
+```js
+async.waterfall([
+ function (callback) {
+ getSomething(options, function (err, result) {
+ if (err) {
+ callback(new Error("failed getting something:" + err.message));
+ // we should return here
+ }
+ // since we did not return, this callback still will be called and
+ // `processData` will be called twice
+ callback(null, result);
+ });
+ },
+ processData
+], done)
+```
+
+It is always good practice to `return callback(err, result)` whenever a callback call is not the last statement of a function.
+
+
+### Binding a context to an iterator
+
+This section is really about `bind`, not about `async`. If you are wondering how to
+make `async` execute your iterators in a given context, or are confused as to why
+a method of another library isn't working as an iterator, study this example:
+
+```js
+// Here is a simple object with an (unnecessarily roundabout) squaring method
+var AsyncSquaringLibrary = {
+ squareExponent: 2,
+ square: function(number, callback){
+ var result = Math.pow(number, this.squareExponent);
+ setTimeout(function(){
+ callback(null, result);
+ }, 200);
+ }
+};
+
+async.map([1, 2, 3], AsyncSquaringLibrary.square, function(err, result){
+ // result is [NaN, NaN, NaN]
+ // This fails because the `this.squareExponent` expression in the square
+ // function is not evaluated in the context of AsyncSquaringLibrary, and is
+ // therefore undefined.
+});
+
+async.map([1, 2, 3], AsyncSquaringLibrary.square.bind(AsyncSquaringLibrary), function(err, result){
+ // result is [1, 4, 9]
+ // With the help of bind we can attach a context to the iterator before
+ // passing it to async. Now the square function will be executed in its
+ // 'home' AsyncSquaringLibrary context and the value of `this.squareExponent`
+ // will be as expected.
+});
+```
+
+## Download
+
+The source is available for download from
+[GitHub](https://github.com/caolan/async/blob/master/lib/async.js).
+Alternatively, you can install using Node Package Manager (`npm`):
+
+ npm install async
+
+As well as using Bower:
+
+ bower install async
+
+__Development:__ [async.js](https://github.com/caolan/async/raw/master/lib/async.js) - 29.6kb Uncompressed
+
+## In the Browser
+
+So far it's been tested in IE6, IE7, IE8, FF3.6 and Chrome 5.
+
+Usage:
+
+```html
+<script type="text/javascript" src="async.js"></script>
+<script type="text/javascript">
+
+ async.map(data, asyncProcess, function(err, results){
+ alert(results);
+ });
+
+</script>
+```
+
+## Documentation
+
+Some functions are also available in the following forms:
+* `<name>Series` - the same as `<name>` but runs only a single async operation at a time
+* `<name>Limit` - the same as `<name>` but runs a maximum of `limit` async operations at a time
+
+### Collections
+
+* [`each`](#each), `eachSeries`, `eachLimit`
+* [`forEachOf`](#forEachOf), `forEachOfSeries`, `forEachOfLimit`
+* [`map`](#map), `mapSeries`, `mapLimit`
+* [`filter`](#filter), `filterSeries`, `filterLimit`
+* [`reject`](#reject), `rejectSeries`, `rejectLimit`
+* [`reduce`](#reduce), [`reduceRight`](#reduceRight)
+* [`detect`](#detect), `detectSeries`, `detectLimit`
+* [`sortBy`](#sortBy)
+* [`some`](#some), `someLimit`
+* [`every`](#every), `everyLimit`
+* [`concat`](#concat), `concatSeries`
+
+### Control Flow
+
+* [`series`](#seriestasks-callback)
+* [`parallel`](#parallel), `parallelLimit`
+* [`whilst`](#whilst), [`doWhilst`](#doWhilst)
+* [`until`](#until), [`doUntil`](#doUntil)
+* [`during`](#during), [`doDuring`](#doDuring)
+* [`forever`](#forever)
+* [`waterfall`](#waterfall)
+* [`compose`](#compose)
+* [`seq`](#seq)
+* [`applyEach`](#applyEach), `applyEachSeries`
+* [`queue`](#queue), [`priorityQueue`](#priorityQueue)
+* [`cargo`](#cargo)
+* [`auto`](#auto)
+* [`retry`](#retry)
+* [`iterator`](#iterator)
+* [`times`](#times), `timesSeries`, `timesLimit`
+
+### Utils
+
+* [`apply`](#apply)
+* [`nextTick`](#nextTick)
+* [`memoize`](#memoize)
+* [`unmemoize`](#unmemoize)
+* [`ensureAsync`](#ensureAsync)
+* [`constant`](#constant)
+* [`asyncify`](#asyncify)
+* [`wrapSync`](#wrapSync)
+* [`log`](#log)
+* [`dir`](#dir)
+* [`noConflict`](#noConflict)
+
+## Collections
+
+<a name="forEach" />
+<a name="each" />
+### each(arr, iterator, [callback])
+
+Applies the function `iterator` to each item in `arr`, in parallel.
+The `iterator` is called with an item from the list, and a callback for when it
+has finished. If the `iterator` passes an error to its `callback`, the main
+`callback` (for the `each` function) is immediately called with the error.
+
+Note, that since this function applies `iterator` to each item in parallel,
+there is no guarantee that the iterator functions will complete in order.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err)` which must be called once it has
+ completed. If no error has occurred, the `callback` should be run without
+ arguments or with an explicit `null` argument. The array index is not passed
+ to the iterator. If you need the index, use [`forEachOf`](#forEachOf).
+* `callback(err)` - *Optional* A callback which is called when all `iterator` functions
+ have finished, or an error occurs.
+
+__Examples__
+
+
+```js
+// assuming openFiles is an array of file names and saveFile is a function
+// to save the modified contents of that file:
+
+async.each(openFiles, saveFile, function(err){
+ // if any of the saves produced an error, err would equal that error
+});
+```
+
+```js
+// assuming openFiles is an array of file names
+
+async.each(openFiles, function(file, callback) {
+
+ // Perform operation on file here.
+ console.log('Processing file ' + file);
+
+ if( file.length > 32 ) {
+ console.log('This file name is too long');
+ callback('File name too long');
+ } else {
+ // Do work to process file here
+ console.log('File processed');
+ callback();
+ }
+}, function(err){
+ // if any of the file processing produced an error, err would equal that error
+ if( err ) {
+ // One of the iterations produced an error.
+ // All processing will now stop.
+ console.log('A file failed to process');
+ } else {
+ console.log('All files have been processed successfully');
+ }
+});
+```
+
+__Related__
+
+* eachSeries(arr, iterator, [callback])
+* eachLimit(arr, limit, iterator, [callback])
+
+---------------------------------------
+
+<a name="forEachOf" />
+<a name="eachOf" />
+
+### forEachOf(obj, iterator, [callback])
+
+Like `each`, except that it iterates over objects, and passes the key as the second argument to the iterator.
+
+__Arguments__
+
+* `obj` - An object or array to iterate over.
+* `iterator(item, key, callback)` - A function to apply to each item in `obj`.
+The `key` is the item's key, or index in the case of an array. The iterator is
+passed a `callback(err)` which must be called once it has completed. If no
+error has occurred, the callback should be run without arguments or with an
+explicit `null` argument.
+* `callback(err)` - *Optional* A callback which is called when all `iterator` functions have finished, or an error occurs.
+
+__Example__
+
+```js
+var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
+var configs = {};
+
+async.forEachOf(obj, function (value, key, callback) {
+ fs.readFile(__dirname + value, "utf8", function (err, data) {
+ if (err) return callback(err);
+ try {
+ configs[key] = JSON.parse(data);
+ } catch (e) {
+ return callback(e);
+ }
+ callback();
+ })
+}, function (err) {
+ if (err) console.error(err.message);
+ // configs is now a map of JSON data
+ doSomethingWith(configs);
+})
+```
+
+__Related__
+
+* forEachOfSeries(obj, iterator, [callback])
+* forEachOfLimit(obj, limit, iterator, [callback])
+
+---------------------------------------
+
+<a name="map" />
+### map(arr, iterator, [callback])
+
+Produces a new array of values by mapping each value in `arr` through
+the `iterator` function. The `iterator` is called with an item from `arr` and a
+callback for when it has finished processing. Each of these callback takes 2 arguments:
+an `error`, and the transformed item from `arr`. If `iterator` passes an error to its
+callback, the main `callback` (for the `map` function) is immediately called with the error.
+
+Note, that since this function applies the `iterator` to each item in parallel,
+there is no guarantee that the `iterator` functions will complete in order.
+However, the results array will be in the same order as the original `arr`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, transformed)` which must be called once
+ it has completed with an error (which can be `null`) and a transformed item.
+* `callback(err, results)` - *Optional* A callback which is called when all `iterator`
+ functions have finished, or an error occurs. Results is an array of the
+ transformed items from the `arr`.
+
+__Example__
+
+```js
+async.map(['file1','file2','file3'], fs.stat, function(err, results){
+ // results is now an array of stats for each file
+});
+```
+
+__Related__
+* mapSeries(arr, iterator, [callback])
+* mapLimit(arr, limit, iterator, [callback])
+
+---------------------------------------
+
+<a name="select" />
+<a name="filter" />
+### filter(arr, iterator, [callback])
+
+__Alias:__ `select`
+
+Returns a new array of all the values in `arr` which pass an async truth test.
+_The callback for each `iterator` call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`. This operation is
+performed in parallel, but the results array will be in the same order as the
+original.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
+ The `iterator` is passed a `callback(truthValue)`, which must be called with a
+ boolean argument once it has completed.
+* `callback(results)` - *Optional* A callback which is called after all the `iterator`
+ functions have finished.
+
+__Example__
+
+```js
+async.filter(['file1','file2','file3'], fs.exists, function(results){
+ // results now equals an array of the existing files
+});
+```
+
+__Related__
+
+* filterSeries(arr, iterator, [callback])
+* filterLimit(arr, limit, iterator, [callback])
+
+---------------------------------------
+
+<a name="reject" />
+### reject(arr, iterator, [callback])
+
+The opposite of [`filter`](#filter). Removes values that pass an `async` truth test.
+
+__Related__
+
+* rejectSeries(arr, iterator, [callback])
+* rejectLimit(arr, limit, iterator, [callback])
+
+---------------------------------------
+
+<a name="reduce" />
+### reduce(arr, memo, iterator, [callback])
+
+__Aliases:__ `inject`, `foldl`
+
+Reduces `arr` into a single value using an async `iterator` to return
+each successive step. `memo` is the initial state of the reduction.
+This function only operates in series.
+
+For performance reasons, it may make sense to split a call to this function into
+a parallel map, and then use the normal `Array.prototype.reduce` on the results.
+This function is for situations where each step in the reduction needs to be async;
+if you can get the data before reducing it, then it's probably a good idea to do so.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `memo` - The initial state of the reduction.
+* `iterator(memo, item, callback)` - A function applied to each item in the
+ array to produce the next step in the reduction. The `iterator` is passed a
+ `callback(err, reduction)` which accepts an optional error as its first
+ argument, and the state of the reduction as the second. If an error is
+ passed to the callback, the reduction is stopped and the main `callback` is
+ immediately called with the error.
+* `callback(err, result)` - *Optional* A callback which is called after all the `iterator`
+ functions have finished. Result is the reduced value.
+
+__Example__
+
+```js
+async.reduce([1,2,3], 0, function(memo, item, callback){
+ // pointless async:
+ process.nextTick(function(){
+ callback(null, memo + item)
+ });
+}, function(err, result){
+ // result is now equal to the last value of memo, which is 6
+});
+```
+
+---------------------------------------
+
+<a name="reduceRight" />
+### reduceRight(arr, memo, iterator, [callback])
+
+__Alias:__ `foldr`
+
+Same as [`reduce`](#reduce), only operates on `arr` in reverse order.
+
+
+---------------------------------------
+
+<a name="detect" />
+### detect(arr, iterator, [callback])
+
+Returns the first value in `arr` that passes an async truth test. The
+`iterator` is applied in parallel, meaning the first iterator to return `true` will
+fire the detect `callback` with that result. That means the result might not be
+the first item in the original `arr` (in terms of order) that passes the test.
+
+If order within the original `arr` is important, then look at [`detectSeries`](#detectSeries).
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in `arr`.
+ The iterator is passed a `callback(truthValue)` which must be called with a
+ boolean argument once it has completed. **Note: this callback does not take an error as its first argument.**
+* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns
+ `true`, or after all the `iterator` functions have finished. Result will be
+ the first item in the array that passes the truth test (iterator) or the
+ value `undefined` if none passed. **Note: this callback does not take an error as its first argument.**
+
+__Example__
+
+```js
+async.detect(['file1','file2','file3'], fs.exists, function(result){
+ // result now equals the first file in the list that exists
+});
+```
+
+__Related__
+
+* detectSeries(arr, iterator, [callback])
+* detectLimit(arr, limit, iterator, [callback])
+
+---------------------------------------
+
+<a name="sortBy" />
+### sortBy(arr, iterator, [callback])
+
+Sorts a list by the results of running each `arr` value through an async `iterator`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, sortValue)` which must be called once it
+ has completed with an error (which can be `null`) and a value to use as the sort
+ criteria.
+* `callback(err, results)` - *Optional* A callback which is called after all the `iterator`
+ functions have finished, or an error occurs. Results is the items from
+ the original `arr` sorted by the values returned by the `iterator` calls.
+
+__Example__
+
+```js
+async.sortBy(['file1','file2','file3'], function(file, callback){
+ fs.stat(file, function(err, stats){
+ callback(err, stats.mtime);
+ });
+}, function(err, results){
+ // results is now the original array of files sorted by
+ // modified date
+});
+```
+
+__Sort Order__
+
+By modifying the callback parameter the sorting order can be influenced:
+
+```js
+//ascending order
+async.sortBy([1,9,3,5], function(x, callback){
+ callback(null, x);
+}, function(err,result){
+ //result callback
+} );
+
+//descending order
+async.sortBy([1,9,3,5], function(x, callback){
+ callback(null, x*-1); //<- x*-1 instead of x, turns the order around
+}, function(err,result){
+ //result callback
+} );
+```
+
+---------------------------------------
+
+<a name="some" />
+### some(arr, iterator, [callback])
+
+__Alias:__ `any`
+
+Returns `true` if at least one element in the `arr` satisfies an async test.
+_The callback for each iterator call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`. Once any iterator
+call returns `true`, the main `callback` is immediately called.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in the array
+ in parallel. The iterator is passed a `callback(truthValue)`` which must be
+ called with a boolean argument once it has completed.
+* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns
+ `true`, or after all the iterator functions have finished. Result will be
+ either `true` or `false` depending on the values of the async tests.
+
+ **Note: the callbacks do not take an error as their first argument.**
+__Example__
+
+```js
+async.some(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then at least one of the files exists
+});
+```
+
+__Related__
+
+* someLimit(arr, limit, iterator, callback)
+
+---------------------------------------
+
+<a name="every" />
+### every(arr, iterator, [callback])
+
+__Alias:__ `all`
+
+Returns `true` if every element in `arr` satisfies an async test.
+_The callback for each `iterator` call only accepts a single argument of `true` or
+`false`; it does not accept an error argument first!_ This is in-line with the
+way node libraries work with truth tests like `fs.exists`.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A truth test to apply to each item in the array
+ in parallel. The iterator is passed a `callback(truthValue)` which must be
+ called with a boolean argument once it has completed.
+* `callback(result)` - *Optional* A callback which is called as soon as any iterator returns
+ `false`, or after all the iterator functions have finished. Result will be
+ either `true` or `false` depending on the values of the async tests.
+
+ **Note: the callbacks do not take an error as their first argument.**
+
+__Example__
+
+```js
+async.every(['file1','file2','file3'], fs.exists, function(result){
+ // if result is true then every file exists
+});
+```
+
+__Related__
+
+* everyLimit(arr, limit, iterator, callback)
+
+---------------------------------------
+
+<a name="concat" />
+### concat(arr, iterator, [callback])
+
+Applies `iterator` to each item in `arr`, concatenating the results. Returns the
+concatenated list. The `iterator`s are called in parallel, and the results are
+concatenated as they return. There is no guarantee that the results array will
+be returned in the original order of `arr` passed to the `iterator` function.
+
+__Arguments__
+
+* `arr` - An array to iterate over.
+* `iterator(item, callback)` - A function to apply to each item in `arr`.
+ The iterator is passed a `callback(err, results)` which must be called once it
+ has completed with an error (which can be `null`) and an array of results.
+* `callback(err, results)` - *Optional* A callback which is called after all the `iterator`
+ functions have finished, or an error occurs. Results is an array containing
+ the concatenated results of the `iterator` function.
+
+__Example__
+
+```js
+async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files){
+ // files is now a list of filenames that exist in the 3 directories
+});
+```
+
+__Related__
+
+* concatSeries(arr, iterator, [callback])
+
+
+## Control Flow
+
+<a name="series" />
+### series(tasks, [callback])
+
+Run the functions in the `tasks` array in series, each one running once the previous
+function has completed. If any functions in the series pass an error to its
+callback, no more functions are run, and `callback` is immediately called with the value of the error.
+Otherwise, `callback` receives an array of results when `tasks` have completed.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function, and the results will be passed to the final `callback` as an object
+instead of an array. This can be a more readable way of handling results from
+[`series`](#series).
+
+**Note** that while many implementations preserve the order of object properties, the
+[ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)
+explicitly states that
+
+> The mechanics and order of enumerating the properties is not specified.
+
+So if you rely on the order in which your series of functions are executed, and want
+this to work on all platforms, consider using an array.
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run, each function is passed
+ a `callback(err, result)` it must call on completion with an error `err` (which can
+ be `null`) and an optional `result` value.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed. This function gets a results array (or object) containing all
+ the result arguments passed to the `task` callbacks.
+
+__Example__
+
+```js
+async.series([
+ function(callback){
+ // do some stuff ...
+ callback(null, 'one');
+ },
+ function(callback){
+ // do some more stuff ...
+ callback(null, 'two');
+ }
+],
+// optional callback
+function(err, results){
+ // results is now equal to ['one', 'two']
+});
+
+
+// an example using an object instead of an array
+async.series({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equal to: {one: 1, two: 2}
+});
+```
+
+---------------------------------------
+
+<a name="parallel" />
+### parallel(tasks, [callback])
+
+Run the `tasks` array of functions in parallel, without waiting until the previous
+function has completed. If any of the functions pass an error to its
+callback, the main `callback` is immediately called with the value of the error.
+Once the `tasks` have completed, the results are passed to the final `callback` as an
+array.
+
+**Note:** `parallel` is about kicking-off I/O tasks in parallel, not about parallel execution of code. If your tasks do not use any timers or perform any I/O, they will actually be executed in series. Any synchronous setup sections for each task will happen one after the other. JavaScript remains single-threaded.
+
+It is also possible to use an object instead of an array. Each property will be
+run as a function and the results will be passed to the final `callback` as an object
+instead of an array. This can be a more readable way of handling results from
+[`parallel`](#parallel).
+
+
+__Arguments__
+
+* `tasks` - An array or object containing functions to run. Each function is passed
+ a `callback(err, result)` which it must call on completion with an error `err`
+ (which can be `null`) and an optional `result` value.
+* `callback(err, results)` - An optional callback to run once all the functions
+ have completed successfully. This function gets a results array (or object) containing all
+ the result arguments passed to the task callbacks.
+
+__Example__
+
+```js
+async.parallel([
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'one');
+ }, 200);
+ },
+ function(callback){
+ setTimeout(function(){
+ callback(null, 'two');
+ }, 100);
+ }
+],
+// optional callback
+function(err, results){
+ // the results array will equal ['one','two'] even though
+ // the second function had a shorter timeout.
+});
+
+
+// an example using an object instead of an array
+async.parallel({
+ one: function(callback){
+ setTimeout(function(){
+ callback(null, 1);
+ }, 200);
+ },
+ two: function(callback){
+ setTimeout(function(){
+ callback(null, 2);
+ }, 100);
+ }
+},
+function(err, results) {
+ // results is now equals to: {one: 1, two: 2}
+});
+```
+
+__Related__
+
+* parallelLimit(tasks, limit, [callback])
+
+---------------------------------------
+
+<a name="whilst" />
+### whilst(test, fn, callback)
+
+Repeatedly call `fn`, while `test` returns `true`. Calls `callback` when stopped,
+or an error occurs.
+
+__Arguments__
+
+* `test()` - synchronous truth test to perform before each execution of `fn`.
+* `fn(callback)` - A function which is called each time `test` passes. The function is
+ passed a `callback(err)`, which must be called once it has completed with an
+ optional `err` argument.
+* `callback(err, [results])` - A callback which is called after the test
+ function has failed and repeated execution of `fn` has stopped. `callback`
+ will be passed an error and any arguments passed to the final `fn`'s callback.
+
+__Example__
+
+```js
+var count = 0;
+
+async.whilst(
+ function () { return count < 5; },
+ function (callback) {
+ count++;
+ setTimeout(function () {
+ callback(null, count);
+ }, 1000);
+ },
+ function (err, n) {
+ // 5 seconds have passed, n = 5
+ }
+);
+```
+
+---------------------------------------
+
+<a name="doWhilst" />
+### doWhilst(fn, test, callback)
+
+The post-check version of [`whilst`](#whilst). To reflect the difference in
+the order of operations, the arguments `test` and `fn` are switched.
+
+`doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.
+
+---------------------------------------
+
+<a name="until" />
+### until(test, fn, callback)
+
+Repeatedly call `fn` until `test` returns `true`. Calls `callback` when stopped,
+or an error occurs. `callback` will be passed an error and any arguments passed
+to the final `fn`'s callback.
+
+The inverse of [`whilst`](#whilst).
+
+---------------------------------------
+
+<a name="doUntil" />
+### doUntil(fn, test, callback)
+
+Like [`doWhilst`](#doWhilst), except the `test` is inverted. Note the argument ordering differs from `until`.
+
+---------------------------------------
+
+<a name="during" />
+### during(test, fn, callback)
+
+Like [`whilst`](#whilst), except the `test` is an asynchronous function that is passed a callback in the form of `function (err, truth)`. If error is passed to `test` or `fn`, the main callback is immediately called with the value of the error.
+
+__Example__
+
+```js
+var count = 0;
+
+async.during(
+ function (callback) {
+ return callback(null, count < 5);
+ },
+ function (callback) {
+ count++;
+ setTimeout(callback, 1000);
+ },
+ function (err) {
+ // 5 seconds have passed
+ }
+);
+```
+
+---------------------------------------
+
+<a name="doDuring" />
+### doDuring(fn, test, callback)
+
+The post-check version of [`during`](#during). To reflect the difference in
+the order of operations, the arguments `test` and `fn` are switched.
+
+Also a version of [`doWhilst`](#doWhilst) with asynchronous `test` function.
+
+---------------------------------------
+
+<a name="forever" />
+### forever(fn, [errback])
+
+Calls the asynchronous function `fn` with a callback parameter that allows it to
+call itself again, in series, indefinitely.
+
+If an error is passed to the callback then `errback` is called with the
+error, and execution stops, otherwise it will never be called.
+
+```js
+async.forever(
+ function(next) {
+ // next is suitable for passing to things that need a callback(err [, whatever]);
+ // it will result in this function being called again.
+ },
+ function(err) {
+ // if next is called with a value in its first parameter, it will appear
+ // in here as 'err', and execution will stop.
+ }
+);
+```
+
+---------------------------------------
+
+<a name="waterfall" />
+### waterfall(tasks, [callback])
+
+Runs the `tasks` array of functions in series, each passing their results to the next in
+the array. However, if any of the `tasks` pass an error to their own callback, the
+next function is not executed, and the main `callback` is immediately called with
+the error.
+
+__Arguments__
+
+* `tasks` - An array of functions to run, each function is passed a
+ `callback(err, result1, result2, ...)` it must call on completion. The first
+ argument is an error (which can be `null`) and any further arguments will be
+ passed as arguments in order to the next task.
+* `callback(err, [results])` - An optional callback to run once all the functions
+ have completed. This will be passed the results of the last task's callback.
+
+
+
+__Example__
+
+```js
+async.waterfall([
+ function(callback) {
+ callback(null, 'one', 'two');
+ },
+ function(arg1, arg2, callback) {
+ // arg1 now equals 'one' and arg2 now equals 'two'
+ callback(null, 'three');
+ },
+ function(arg1, callback) {
+ // arg1 now equals 'three'
+ callback(null, 'done');
+ }
+], function (err, result) {
+ // result now equals 'done'
+});
+```
+Or, with named functions:
+
+```js
+async.waterfall([
+ myFirstFunction,
+ mySecondFunction,
+ myLastFunction,
+], function (err, result) {
+ // result now equals 'done'
+});
+function myFirstFunction(callback) {
+ callback(null, 'one', 'two');
+}
+function mySecondFunction(arg1, arg2, callback) {
+ // arg1 now equals 'one' and arg2 now equals 'two'
+ callback(null, 'three');
+}
+function myLastFunction(arg1, callback) {
+ // arg1 now equals 'three'
+ callback(null, 'done');
+}
+```
+
+Or, if you need to pass any argument to the first function:
+
+```js
+async.waterfall([
+ async.apply(myFirstFunction, 'zero'),
+ mySecondFunction,
+ myLastFunction,
+], function (err, result) {
+ // result now equals 'done'
+});
+function myFirstFunction(arg1, callback) {
+ // arg1 now equals 'zero'
+ callback(null, 'one', 'two');
+}
+function mySecondFunction(arg1, arg2, callback) {
+ // arg1 now equals 'one' and arg2 now equals 'two'
+ callback(null, 'three');
+}
+function myLastFunction(arg1, callback) {
+ // arg1 now equals 'three'
+ callback(null, 'done');
+}
+```
+
+---------------------------------------
+<a name="compose" />
+### compose(fn1, fn2...)
+
+Creates a function which is a composition of the passed asynchronous
+functions. Each function consumes the return value of the function that
+follows. Composing functions `f()`, `g()`, and `h()` would produce the result of
+`f(g(h()))`, only this version uses callbacks to obtain the return values.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* `functions...` - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+function add1(n, callback) {
+ setTimeout(function () {
+ callback(null, n + 1);
+ }, 10);
+}
+
+function mul3(n, callback) {
+ setTimeout(function () {
+ callback(null, n * 3);
+ }, 10);
+}
+
+var add1mul3 = async.compose(mul3, add1);
+
+add1mul3(4, function (err, result) {
+ // result now equals 15
+});
+```
+
+---------------------------------------
+<a name="seq" />
+### seq(fn1, fn2...)
+
+Version of the compose function that is more natural to read.
+Each function consumes the return value of the previous function.
+It is the equivalent of [`compose`](#compose) with the arguments reversed.
+
+Each function is executed with the `this` binding of the composed function.
+
+__Arguments__
+
+* `functions...` - the asynchronous functions to compose
+
+
+__Example__
+
+```js
+// Requires lodash (or underscore), express3 and dresende's orm2.
+// Part of an app, that fetches cats of the logged user.
+// This example uses `seq` function to avoid overnesting and error
+// handling clutter.
+app.get('/cats', function(request, response) {
+ var User = request.models.User;
+ async.seq(
+ _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data))
+ function(user, fn) {
+ user.getCats(fn); // 'getCats' has signature (callback(err, data))
+ }
+ )(req.session.user_id, function (err, cats) {
+ if (err) {
+ console.error(err);
+ response.json({ status: 'error', message: err.message });
+ } else {
+ response.json({ status: 'ok', message: 'Cats found', data: cats });
+ }
+ });
+});
+```
+
+---------------------------------------
+<a name="applyEach" />
+### applyEach(fns, args..., callback)
+
+Applies the provided arguments to each function in the array, calling
+`callback` after all functions have completed. If you only provide the first
+argument, then it will return a function which lets you pass in the
+arguments as if it were a single function call.
+
+__Arguments__
+
+* `fns` - the asynchronous functions to all call with the same arguments
+* `args...` - any number of separate arguments to pass to the function
+* `callback` - the final argument should be the callback, called when all
+ functions have completed processing
+
+
+__Example__
+
+```js
+async.applyEach([enableSearch, updateSchema], 'bucket', callback);
+
+// partial application example:
+async.each(
+ buckets,
+ async.applyEach([enableSearch, updateSchema]),
+ callback
+);
+```
+
+__Related__
+
+* applyEachSeries(tasks, args..., [callback])
+
+---------------------------------------
+
+<a name="queue" />
+### queue(worker, [concurrency])
+
+Creates a `queue` object with the specified `concurrency`. Tasks added to the
+`queue` are processed in parallel (up to the `concurrency` limit). If all
+`worker`s are in progress, the task is queued until one becomes available.
+Once a `worker` completes a `task`, that `task`'s callback is called.
+
+__Arguments__
+
+* `worker(task, callback)` - An asynchronous function for processing a queued
+ task, which must call its `callback(err)` argument when finished, with an
+ optional `error` as an argument. If you want to handle errors from an individual task, pass a callback to `q.push()`.
+* `concurrency` - An `integer` for determining how many `worker` functions should be
+ run in parallel. If omitted, the concurrency defaults to `1`. If the concurrency is `0`, an error is thrown.
+
+__Queue objects__
+
+The `queue` object returned by this function has the following properties and
+methods:
+
+* `length()` - a function returning the number of items waiting to be processed.
+* `started` - a function returning whether or not any items have been pushed and processed by the queue
+* `running()` - a function returning the number of items currently being processed.
+* `workersList()` - a function returning the array of items currently being processed.
+* `idle()` - a function returning false if there are items waiting or being processed, or true if not.
+* `concurrency` - an integer for determining how many `worker` functions should be
+ run in parallel. This property can be changed after a `queue` is created to
+ alter the concurrency on-the-fly.
+* `push(task, [callback])` - add a new task to the `queue`. Calls `callback` once
+ the `worker` has finished processing the task. Instead of a single task, a `tasks` array
+ can be submitted. The respective callback is used for every task in the list.
+* `unshift(task, [callback])` - add a new task to the front of the `queue`.
+* `saturated` - a callback that is called when the `queue` length hits the `concurrency` limit,
+ and further tasks will be queued.
+* `empty` - a callback that is called when the last item from the `queue` is given to a `worker`.
+* `drain` - a callback that is called when the last item from the `queue` has returned from the `worker`.
+* `paused` - a boolean for determining whether the queue is in a paused state
+* `pause()` - a function that pauses the processing of tasks until `resume()` is called.
+* `resume()` - a function that resumes the processing of queued tasks when the queue is paused.
+* `kill()` - a function that removes the `drain` callback and empties remaining tasks from the queue forcing it to go idle.
+
+__Example__
+
+```js
+// create a queue object with concurrency 2
+
+var q = async.queue(function (task, callback) {
+ console.log('hello ' + task.name);
+ callback();
+}, 2);
+
+
+// assign a callback
+q.drain = function() {
+ console.log('all items have been processed');
+}
+
+// add some items to the queue
+
+q.push({name: 'foo'}, function (err) {
+ console.log('finished processing foo');
+});
+q.push({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+
+// add some items to the queue (batch-wise)
+
+q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function (err) {
+ console.log('finished processing item');
+});
+
+// add some items to the front of the queue
+
+q.unshift({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+```
+
+
+---------------------------------------
+
+<a name="priorityQueue" />
+### priorityQueue(worker, concurrency)
+
+The same as [`queue`](#queue) only tasks are assigned a priority and completed in ascending priority order. There are two differences between `queue` and `priorityQueue` objects:
+
+* `push(task, priority, [callback])` - `priority` should be a number. If an array of
+ `tasks` is given, all tasks will be assigned the same priority.
+* The `unshift` method was removed.
+
+---------------------------------------
+
+<a name="cargo" />
+### cargo(worker, [payload])
+
+Creates a `cargo` object with the specified payload. Tasks added to the
+cargo will be processed altogether (up to the `payload` limit). If the
+`worker` is in progress, the task is queued until it becomes available. Once
+the `worker` has completed some tasks, each callback of those tasks is called.
+Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) for how `cargo` and `queue` work.
+
+While [queue](#queue) passes only one task to one of a group of workers
+at a time, cargo passes an array of tasks to a single worker, repeating
+when the worker is finished.
+
+__Arguments__
+
+* `worker(tasks, callback)` - An asynchronous function for processing an array of
+ queued tasks, which must call its `callback(err)` argument when finished, with
+ an optional `err` argument.
+* `payload` - An optional `integer` for determining how many tasks should be
+ processed per round; if omitted, the default is unlimited.
+
+__Cargo objects__
+
+The `cargo` object returned by this function has the following properties and
+methods:
+
+* `length()` - A function returning the number of items waiting to be processed.
+* `payload` - An `integer` for determining how many tasks should be
+ process per round. This property can be changed after a `cargo` is created to
+ alter the payload on-the-fly.
+* `push(task, [callback])` - Adds `task` to the `queue`. The callback is called
+ once the `worker` has finished processing the task. Instead of a single task, an array of `tasks`
+ can be submitted. The respective callback is used for every task in the list.
+* `saturated` - A callback that is called when the `queue.length()` hits the concurrency and further tasks will be queued.
+* `empty` - A callback that is called when the last item from the `queue` is given to a `worker`.
+* `drain` - A callback that is called when the last item from the `queue` has returned from the `worker`.
+* `idle()`, `pause()`, `resume()`, `kill()` - cargo inherits all of the same methods and event calbacks as [`queue`](#queue)
+
+__Example__
+
+```js
+// create a cargo object with payload 2
+
+var cargo = async.cargo(function (tasks, callback) {
+ for(var i=0; i<tasks.length; i++){
+ console.log('hello ' + tasks[i].name);
+ }
+ callback();
+}, 2);
+
+
+// add some items
+
+cargo.push({name: 'foo'}, function (err) {
+ console.log('finished processing foo');
+});
+cargo.push({name: 'bar'}, function (err) {
+ console.log('finished processing bar');
+});
+cargo.push({name: 'baz'}, function (err) {
+ console.log('finished processing baz');
+});
+```
+
+---------------------------------------
+
+<a name="auto" />
+### auto(tasks, [concurrency], [callback])
+
+Determines the best order for running the functions in `tasks`, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied.
+
+If any of the functions pass an error to their callback, the `auto` sequence will stop. Further tasks will not execute (so any other functions depending on it will not run), and the main `callback` is immediately called with the error. Functions also receive an object containing the results of functions which have completed so far.
+
+Note, all functions are called with a `results` object as a second argument,
+so it is unsafe to pass functions in the `tasks` object which cannot handle the
+extra argument.
+
+For example, this snippet of code:
+
+```js
+async.auto({
+ readData: async.apply(fs.readFile, 'data.txt', 'utf-8')
+}, callback);
+```
+
+will have the effect of calling `readFile` with the results object as the last
+argument, which will fail:
+
+```js
+fs.readFile('data.txt', 'utf-8', cb, {});
+```
+
+Instead, wrap the call to `readFile` in a function which does not forward the
+`results` object:
+
+```js
+async.auto({
+ readData: function(cb, results){
+ fs.readFile('data.txt', 'utf-8', cb);
+ }
+}, callback);
+```
+
+__Arguments__
+
+* `tasks` - An object. Each of its properties is either a function or an array of
+ requirements, with the function itself the last item in the array. The object's key
+ of a property serves as the name of the task defined by that property,
+ i.e. can be used when specifying requirements for other tasks.
+ The function receives two arguments: (1) a `callback(err, result)` which must be
+ called when finished, passing an `error` (which can be `null`) and the result of
+ the function's execution, and (2) a `results` object, containing the results of
+ the previously executed functions.
+* `concurrency` - An optional `integer` for determining the maximum number of tasks that can be run in parallel. By default, as many as possible.
+* `callback(err, results)` - An optional callback which is called when all the
+ tasks have been completed. It receives the `err` argument if any `tasks`
+ pass an error to their callback. Results are always returned; however, if
+ an error occurs, no further `tasks` will be performed, and the results
+ object will only contain partial results.
+
+
+__Example__
+
+```js
+async.auto({
+ get_data: function(callback){
+ console.log('in get_data');
+ // async code to get some data
+ callback(null, 'data', 'converted to array');
+ },
+ make_folder: function(callback){
+ console.log('in make_folder');
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ callback(null, 'folder');
+ },
+ write_file: ['get_data', 'make_folder', function(callback, results){
+ console.log('in write_file', JSON.stringify(results));
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ callback(null, 'filename');
+ }],
+ email_link: ['write_file', function(callback, results){
+ console.log('in email_link', JSON.stringify(results));
+ // once the file is written let's email a link to it...
+ // results.write_file contains the filename returned by write_file.
+ callback(null, {'file':results.write_file, 'email':'user@example.com'});
+ }]
+}, function(err, results) {
+ console.log('err = ', err);
+ console.log('results = ', results);
+});
+```
+
+This is a fairly trivial example, but to do this using the basic parallel and
+series functions would look like this:
+
+```js
+async.parallel([
+ function(callback){
+ console.log('in get_data');
+ // async code to get some data
+ callback(null, 'data', 'converted to array');
+ },
+ function(callback){
+ console.log('in make_folder');
+ // async code to create a directory to store a file in
+ // this is run at the same time as getting the data
+ callback(null, 'folder');
+ }
+],
+function(err, results){
+ async.series([
+ function(callback){
+ console.log('in write_file', JSON.stringify(results));
+ // once there is some data and the directory exists,
+ // write the data to a file in the directory
+ results.push('filename');
+ callback(null);
+ },
+ function(callback){
+ console.log('in email_link', JSON.stringify(results));
+ // once the file is written let's email a link to it...
+ callback(null, {'file':results.pop(), 'email':'user@example.com'});
+ }
+ ]);
+});
+```
+
+For a complicated series of `async` tasks, using the [`auto`](#auto) function makes adding
+new tasks much easier (and the code more readable).
+
+
+---------------------------------------
+
+<a name="retry" />
+### retry([opts = {times: 5, interval: 0}| 5], task, [callback])
+
+Attempts to get a successful response from `task` no more than `times` times before
+returning an error. If the task is successful, the `callback` will be passed the result
+of the successful task. If all attempts fail, the callback will be passed the error and
+result (if any) of the final attempt.
+
+__Arguments__
+
+* `opts` - Can be either an object with `times` and `interval` or a number.
+ * `times` - The number of attempts to make before giving up. The default is `5`.
+ * `interval` - The time to wait between retries, in milliseconds. The default is `0`.
+ * If `opts` is a number, the number specifies the number of times to retry, with the default interval of `0`.
+* `task(callback, results)` - A function which receives two arguments: (1) a `callback(err, result)`
+ which must be called when finished, passing `err` (which can be `null`) and the `result` of
+ the function's execution, and (2) a `results` object, containing the results of
+ the previously executed functions (if nested inside another control flow).
+* `callback(err, results)` - An optional callback which is called when the
+ task has succeeded, or after the final failed attempt. It receives the `err` and `result` arguments of the last attempt at completing the `task`.
+
+The [`retry`](#retry) function can be used as a stand-alone control flow by passing a callback, as shown below:
+
+```js
+// try calling apiMethod 3 times
+async.retry(3, apiMethod, function(err, result) {
+ // do something with the result
+});
+```
+
+```js
+// try calling apiMethod 3 times, waiting 200 ms between each retry
+async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {
+ // do something with the result
+});
+```
+
+```js
+// try calling apiMethod the default 5 times no delay between each retry
+async.retry(apiMethod, function(err, result) {
+ // do something with the result
+});
+```
+
+It can also be embedded within other control flow functions to retry individual methods
+that are not as reliable, like this:
+
+```js
+async.auto({
+ users: api.getUsers.bind(api),
+ payments: async.retry(3, api.getPayments.bind(api))
+}, function(err, results) {
+ // do something with the results
+});
+```
+
+
+---------------------------------------
+
+<a name="iterator" />
+### iterator(tasks)
+
+Creates an iterator function which calls the next function in the `tasks` array,
+returning a continuation to call the next one after that. It's also possible to
+“peek” at the next iterator with `iterator.next()`.
+
+This function is used internally by the `async` module, but can be useful when
+you want to manually control the flow of functions in series.
+
+__Arguments__
+
+* `tasks` - An array of functions to run.
+
+__Example__
+
+```js
+var iterator = async.iterator([
+ function(){ sys.p('one'); },
+ function(){ sys.p('two'); },
+ function(){ sys.p('three'); }
+]);
+
+node> var iterator2 = iterator();
+'one'
+node> var iterator3 = iterator2();
+'two'
+node> iterator3();
+'three'
+node> var nextfn = iterator2.next();
+node> nextfn();
+'three'
+```
+
+---------------------------------------
+
+<a name="apply" />
+### apply(function, arguments..)
+
+Creates a continuation function with some arguments already applied.
+
+Useful as a shorthand when combined with other control flow functions. Any arguments
+passed to the returned function are added to the arguments originally passed
+to apply.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to automatically apply when the
+ continuation is called.
+
+__Example__
+
+```js
+// using apply
+
+async.parallel([
+ async.apply(fs.writeFile, 'testfile1', 'test1'),
+ async.apply(fs.writeFile, 'testfile2', 'test2'),
+]);
+
+
+// the same process without using apply
+
+async.parallel([
+ function(callback){
+ fs.writeFile('testfile1', 'test1', callback);
+ },
+ function(callback){
+ fs.writeFile('testfile2', 'test2', callback);
+ }
+]);
+```
+
+It's possible to pass any number of additional arguments when calling the
+continuation:
+
+```js
+node> var fn = async.apply(sys.puts, 'one');
+node> fn('two', 'three');
+one
+two
+three
+```
+
+---------------------------------------
+
+<a name="nextTick" />
+### nextTick(callback), setImmediate(callback)
+
+Calls `callback` on a later loop around the event loop. In Node.js this just
+calls `process.nextTick`; in the browser it falls back to `setImmediate(callback)`
+if available, otherwise `setTimeout(callback, 0)`, which means other higher priority
+events may precede the execution of `callback`.
+
+This is used internally for browser-compatibility purposes.
+
+__Arguments__
+
+* `callback` - The function to call on a later loop around the event loop.
+
+__Example__
+
+```js
+var call_order = [];
+async.nextTick(function(){
+ call_order.push('two');
+ // call_order now equals ['one','two']
+});
+call_order.push('one')
+```
+
+<a name="times" />
+### times(n, iterator, [callback])
+
+Calls the `iterator` function `n` times, and accumulates results in the same manner
+you would use with [`map`](#map).
+
+__Arguments__
+
+* `n` - The number of times to run the function.
+* `iterator` - The function to call `n` times.
+* `callback` - see [`map`](#map)
+
+__Example__
+
+```js
+// Pretend this is some complicated async factory
+var createUser = function(id, callback) {
+ callback(null, {
+ id: 'user' + id
+ })
+}
+// generate 5 users
+async.times(5, function(n, next){
+ createUser(n, function(err, user) {
+ next(err, user)
+ })
+}, function(err, users) {
+ // we should now have 5 users
+});
+```
+
+__Related__
+
+* timesSeries(n, iterator, [callback])
+* timesLimit(n, limit, iterator, [callback])
+
+
+## Utils
+
+<a name="memoize" />
+### memoize(fn, [hasher])
+
+Caches the results of an `async` function. When creating a hash to store function
+results against, the callback is omitted from the hash and an optional hash
+function can be used.
+
+If no hash function is specified, the first argument is used as a hash key, which may work reasonably if it is a string or a data type that converts to a distinct string. Note that objects and arrays will not behave reasonably. Neither will cases where the other arguments are significant. In such cases, specify your own hash function.
+
+The cache of results is exposed as the `memo` property of the function returned
+by `memoize`.
+
+__Arguments__
+
+* `fn` - The function to proxy and cache results from.
+* `hasher` - An optional function for generating a custom hash for storing
+ results. It has all the arguments applied to it apart from the callback, and
+ must be synchronous.
+
+__Example__
+
+```js
+var slow_fn = function (name, callback) {
+ // do something
+ callback(null, result);
+};
+var fn = async.memoize(slow_fn);
+
+// fn can now be used as if it were slow_fn
+fn('some name', function () {
+ // callback
+});
+```
+
+<a name="unmemoize" />
+### unmemoize(fn)
+
+Undoes a [`memoize`](#memoize)d function, reverting it to the original, unmemoized
+form. Handy for testing.
+
+__Arguments__
+
+* `fn` - the memoized function
+
+---------------------------------------
+
+<a name="ensureAsync" />
+### ensureAsync(fn)
+
+Wrap an async function and ensure it calls its callback on a later tick of the event loop. If the function already calls its callback on a next tick, no extra deferral is added. This is useful for preventing stack overflows (`RangeError: Maximum call stack size exceeded`) and generally keeping [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) contained.
+
+__Arguments__
+
+* `fn` - an async function, one that expects a node-style callback as its last argument
+
+Returns a wrapped function with the exact same call signature as the function passed in.
+
+__Example__
+
+```js
+function sometimesAsync(arg, callback) {
+ if (cache[arg]) {
+ return callback(null, cache[arg]); // this would be synchronous!!
+ } else {
+ doSomeIO(arg, callback); // this IO would be asynchronous
+ }
+}
+
+// this has a risk of stack overflows if many results are cached in a row
+async.mapSeries(args, sometimesAsync, done);
+
+// this will defer sometimesAsync's callback if necessary,
+// preventing stack overflows
+async.mapSeries(args, async.ensureAsync(sometimesAsync), done);
+
+```
+
+---------------------------------------
+
+<a name="constant">
+### constant(values...)
+
+Returns a function that when called, calls-back with the values provided. Useful as the first function in a `waterfall`, or for plugging values in to `auto`.
+
+__Example__
+
+```js
+async.waterfall([
+ async.constant(42),
+ function (value, next) {
+ // value === 42
+ },
+ //...
+], callback);
+
+async.waterfall([
+ async.constant(filename, "utf8"),
+ fs.readFile,
+ function (fileData, next) {
+ //...
+ }
+ //...
+], callback);
+
+async.auto({
+ hostname: async.constant("https://server.net/"),
+ port: findFreePort,
+ launchServer: ["hostname", "port", function (cb, options) {
+ startServer(options, cb);
+ }],
+ //...
+}, callback);
+
+```
+
+---------------------------------------
+
+<a name="asyncify">
+<a name="wrapSync">
+### asyncify(func)
+
+__Alias:__ `wrapSync`
+
+Take a sync function and make it async, passing its return value to a callback. This is useful for plugging sync functions into a waterfall, series, or other async functions. Any arguments passed to the generated function will be passed to the wrapped function (except for the final callback argument). Errors thrown will be passed to the callback.
+
+__Example__
+
+```js
+async.waterfall([
+ async.apply(fs.readFile, filename, "utf8"),
+ async.asyncify(JSON.parse),
+ function (data, next) {
+ // data is the result of parsing the text.
+ // If there was a parsing error, it would have been caught.
+ }
+], callback)
+```
+
+If the function passed to `asyncify` returns a Promise, that promises's resolved/rejected state will be used to call the callback, rather than simply the synchronous return value. Example:
+
+```js
+async.waterfall([
+ async.apply(fs.readFile, filename, "utf8"),
+ async.asyncify(function (contents) {
+ return db.model.create(contents);
+ }),
+ function (model, next) {
+ // `model` is the instantiated model object.
+ // If there was an error, this function would be skipped.
+ }
+], callback)
+```
+
+This also means you can asyncify ES2016 `async` functions.
+
+```js
+var q = async.queue(async.asyncify(async function (file) {
+ var intermediateStep = await processFile(file);
+ return await somePromise(intermediateStep)
+}));
+
+q.push(files);
+```
+
+---------------------------------------
+
+<a name="log" />
+### log(function, arguments)
+
+Logs the result of an `async` function to the `console`. Only works in Node.js or
+in browsers that support `console.log` and `console.error` (such as FF and Chrome).
+If multiple arguments are returned from the async function, `console.log` is
+called on each argument in order.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, 'hello ' + name);
+ }, 1000);
+};
+```
+```js
+node> async.log(hello, 'world');
+'hello world'
+```
+
+---------------------------------------
+
+<a name="dir" />
+### dir(function, arguments)
+
+Logs the result of an `async` function to the `console` using `console.dir` to
+display the properties of the resulting object. Only works in Node.js or
+in browsers that support `console.dir` and `console.error` (such as FF and Chrome).
+If multiple arguments are returned from the async function, `console.dir` is
+called on each argument in order.
+
+__Arguments__
+
+* `function` - The function you want to eventually apply all arguments to.
+* `arguments...` - Any number of arguments to apply to the function.
+
+__Example__
+
+```js
+var hello = function(name, callback){
+ setTimeout(function(){
+ callback(null, {hello: name});
+ }, 1000);
+};
+```
+```js
+node> async.dir(hello, 'world');
+{hello: 'world'}
+```
+
+---------------------------------------
+
+<a name="noConflict" />
+### noConflict()
+
+Changes the value of `async` back to its original value, returning a reference to the
+`async` object.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/bower.json
new file mode 100644
index 00000000000..0ce24babbcf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/bower.json
@@ -0,0 +1,57 @@
+{
+ "name": "async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "main": "lib/async.js",
+ "keywords": [
+ "async",
+ "callback",
+ "utility",
+ "module"
+ ],
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/caolan/async.git"
+ },
+ "devDependencies": {
+ "benchmark": "bestiejs/benchmark.js",
+ "bluebird": "^2.9.32",
+ "chai": "^3.1.0",
+ "coveralls": "^2.11.2",
+ "es6-promise": "^2.3.0",
+ "jscs": "^1.13.1",
+ "jshint": "~2.8.0",
+ "karma": "^0.13.2",
+ "karma-browserify": "^4.2.1",
+ "karma-firefox-launcher": "^0.1.6",
+ "karma-mocha": "^0.2.0",
+ "karma-mocha-reporter": "^1.0.2",
+ "lodash": "^3.9.0",
+ "mkdirp": "~0.5.1",
+ "mocha": "^2.2.5",
+ "native-promise-only": "^0.8.0-a",
+ "nodeunit": ">0.0.0",
+ "nyc": "^2.1.0",
+ "rsvp": "^3.0.18",
+ "semver": "^4.3.6",
+ "uglify-js": "~2.4.0",
+ "xyz": "^0.5.0",
+ "yargs": "~3.9.1"
+ },
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ],
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "authors": [
+ "Caolan McMahon"
+ ],
+ "version": "1.5.2"
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/component.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/component.json
new file mode 100644
index 00000000000..103558d6d1d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/component.json
@@ -0,0 +1,17 @@
+{
+ "name": "async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "version": "1.5.2",
+ "keywords": [
+ "async",
+ "callback",
+ "utility",
+ "module"
+ ],
+ "license": "MIT",
+ "main": "lib/async.js",
+ "repository": "caolan/async",
+ "scripts": [
+ "lib/async.js"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.css b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.css
new file mode 100644
index 00000000000..274434a4ac8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.css
@@ -0,0 +1,70 @@
+/*!
+ * Styles taken from qunit.css
+ */
+
+h1#nodeunit-header, h1.nodeunit-header {
+ padding: 15px;
+ font-size: large;
+ background-color: #06b;
+ color: white;
+ font-family: 'trebuchet ms', verdana, arial;
+ margin: 0;
+}
+
+h1#nodeunit-header a {
+ color: white;
+}
+
+h2#nodeunit-banner {
+ height: 2em;
+ border-bottom: 1px solid white;
+ background-color: #eee;
+ margin: 0;
+ font-family: 'trebuchet ms', verdana, arial;
+}
+h2#nodeunit-banner.pass {
+ background-color: green;
+}
+h2#nodeunit-banner.fail {
+ background-color: red;
+}
+
+h2#nodeunit-userAgent, h2.nodeunit-userAgent {
+ padding: 10px;
+ background-color: #eee;
+ color: black;
+ margin: 0;
+ font-size: small;
+ font-weight: normal;
+ font-family: 'trebuchet ms', verdana, arial;
+ font-size: 10pt;
+}
+
+div#nodeunit-testrunner-toolbar {
+ background: #eee;
+ border-top: 1px solid black;
+ padding: 10px;
+ font-family: 'trebuchet ms', verdana, arial;
+ margin: 0;
+ font-size: 10pt;
+}
+
+ol#nodeunit-tests {
+ font-family: 'trebuchet ms', verdana, arial;
+ font-size: 10pt;
+}
+ol#nodeunit-tests li strong {
+ cursor:pointer;
+}
+ol#nodeunit-tests .pass {
+ color: green;
+}
+ol#nodeunit-tests .fail {
+ color: red;
+}
+
+p#nodeunit-testresult {
+ margin-left: 1em;
+ font-size: 10pt;
+ font-family: 'trebuchet ms', verdana, arial;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.js
new file mode 100644
index 00000000000..6251ba13e68
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/deps/nodeunit.js
@@ -0,0 +1,2117 @@
+/*!
+ * Nodeunit
+ * https://github.com/caolan/nodeunit
+ * Copyright (c) 2010 Caolan McMahon
+ * MIT Licensed
+ *
+ * json2.js
+ * http://www.JSON.org/json2.js
+ * Public Domain.
+ * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+ */
+nodeunit = (function(){
+/*
+ http://www.JSON.org/json2.js
+ 2010-11-17
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse.
+
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or '&nbsp;'),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the value
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date ?
+ 'Date(' + this[key] + ')' : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+*/
+
+/*jslint evil: true, strict: false, regexp: false */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+ call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+var JSON = {};
+
+(function () {
+ "use strict";
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function (key) {
+
+ return isFinite(this.valueOf()) ?
+ this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z' : null;
+ };
+
+ String.prototype.toJSON =
+ Number.prototype.toJSON =
+ Boolean.prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
+ }
+
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap,
+ indent,
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ },
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ escapable.lastIndex = 0;
+ return escapable.test(string) ?
+ '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' :
+ '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value) ? String(value) : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0 ? '[]' :
+ gap ? '[\n' + gap +
+ partial.join(',\n' + gap) + '\n' +
+ mind + ']' :
+ '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ k = rep[i];
+ if (typeof k === 'string') {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0 ? '{}' :
+ gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+ mind + '}' : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ text = String(text);
+ cx.lastIndex = 0;
+ if (cx.test(text)) {
+ text = text.replace(cx, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/
+.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
+.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
+.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function' ?
+ walk({'': j}, '') : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}());
+var assert = this.assert = {};
+var types = {};
+var core = {};
+var nodeunit = {};
+var reporter = {};
+/*global setTimeout: false, console: false */
+(function () {
+
+ var async = {};
+
+ // global on the server, window in the browser
+ var root = this,
+ previous_async = root.async;
+
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = async;
+ }
+ else {
+ root.async = async;
+ }
+
+ async.noConflict = function () {
+ root.async = previous_async;
+ return async;
+ };
+
+ //// cross-browser compatiblity functions ////
+
+ var _forEach = function (arr, iterator) {
+ if (arr.forEach) {
+ return arr.forEach(iterator);
+ }
+ for (var i = 0; i < arr.length; i += 1) {
+ iterator(arr[i], i, arr);
+ }
+ };
+
+ var _map = function (arr, iterator) {
+ if (arr.map) {
+ return arr.map(iterator);
+ }
+ var results = [];
+ _forEach(arr, function (x, i, a) {
+ results.push(iterator(x, i, a));
+ });
+ return results;
+ };
+
+ var _reduce = function (arr, iterator, memo) {
+ if (arr.reduce) {
+ return arr.reduce(iterator, memo);
+ }
+ _forEach(arr, function (x, i, a) {
+ memo = iterator(memo, x, i, a);
+ });
+ return memo;
+ };
+
+ var _keys = function (obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ }
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+ };
+
+ var _indexOf = function (arr, item) {
+ if (arr.indexOf) {
+ return arr.indexOf(item);
+ }
+ for (var i = 0; i < arr.length; i += 1) {
+ if (arr[i] === item) {
+ return i;
+ }
+ }
+ return -1;
+ };
+
+ //// exported async module functions ////
+
+ //// nextTick implementation with browser-compatible fallback ////
+ if (typeof setImmediate === 'function') {
+ async.nextTick = function (fn) {
+ setImmediate(fn);
+ };
+ }
+ else if (typeof process !== 'undefined' && process.nextTick) {
+ async.nextTick = process.nextTick;
+ }
+ else {
+ async.nextTick = function (fn) {
+ setTimeout(fn, 0);
+ };
+ }
+
+ async.forEach = function (arr, iterator, callback) {
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ _forEach(arr, function (x) {
+ iterator(x, function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed === arr.length) {
+ callback();
+ }
+ }
+ });
+ });
+ };
+
+ async.forEachSeries = function (arr, iterator, callback) {
+ if (!arr.length) {
+ return callback();
+ }
+ var completed = 0;
+ var iterate = function () {
+ iterator(arr[completed], function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ completed += 1;
+ if (completed === arr.length) {
+ callback();
+ }
+ else {
+ iterate();
+ }
+ }
+ });
+ };
+ iterate();
+ };
+
+
+ var doParallel = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.forEach].concat(args));
+ };
+ };
+ var doSeries = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ return fn.apply(null, [async.forEachSeries].concat(args));
+ };
+ };
+
+
+ var _asyncMap = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (err, v) {
+ results[x.index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ };
+ async.map = doParallel(_asyncMap);
+ async.mapSeries = doSeries(_asyncMap);
+
+
+ // reduce only has a series version, as doing reduce in parallel won't
+ // work in many situations.
+ async.reduce = function (arr, memo, iterator, callback) {
+ async.forEachSeries(arr, function (x, callback) {
+ iterator(memo, x, function (err, v) {
+ memo = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, memo);
+ });
+ };
+ // inject alias
+ async.inject = async.reduce;
+ // foldl alias
+ async.foldl = async.reduce;
+
+ async.reduceRight = function (arr, memo, iterator, callback) {
+ var reversed = _map(arr, function (x) {
+ return x;
+ }).reverse();
+ async.reduce(reversed, memo, iterator, callback);
+ };
+ // foldr alias
+ async.foldr = async.reduceRight;
+
+ var _filter = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.filter = doParallel(_filter);
+ async.filterSeries = doSeries(_filter);
+ // select alias
+ async.select = async.filter;
+ async.selectSeries = async.filterSeries;
+
+ var _reject = function (eachfn, arr, iterator, callback) {
+ var results = [];
+ arr = _map(arr, function (x, i) {
+ return {index: i, value: x};
+ });
+ eachfn(arr, function (x, callback) {
+ iterator(x.value, function (v) {
+ if (!v) {
+ results.push(x);
+ }
+ callback();
+ });
+ }, function (err) {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ };
+ async.reject = doParallel(_reject);
+ async.rejectSeries = doSeries(_reject);
+
+ var _detect = function (eachfn, arr, iterator, main_callback) {
+ eachfn(arr, function (x, callback) {
+ iterator(x, function (result) {
+ if (result) {
+ main_callback(x);
+ }
+ else {
+ callback();
+ }
+ });
+ }, function (err) {
+ main_callback();
+ });
+ };
+ async.detect = doParallel(_detect);
+ async.detectSeries = doSeries(_detect);
+
+ async.some = function (arr, iterator, main_callback) {
+ async.forEach(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (v) {
+ main_callback(true);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(false);
+ });
+ };
+ // any alias
+ async.any = async.some;
+
+ async.every = function (arr, iterator, main_callback) {
+ async.forEach(arr, function (x, callback) {
+ iterator(x, function (v) {
+ if (!v) {
+ main_callback(false);
+ main_callback = function () {};
+ }
+ callback();
+ });
+ }, function (err) {
+ main_callback(true);
+ });
+ };
+ // all alias
+ async.all = async.every;
+
+ async.sortBy = function (arr, iterator, callback) {
+ async.map(arr, function (x, callback) {
+ iterator(x, function (err, criteria) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ callback(null, {value: x, criteria: criteria});
+ }
+ });
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+ else {
+ var fn = function (left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ };
+ callback(null, _map(results.sort(fn), function (x) {
+ return x.value;
+ }));
+ }
+ });
+ };
+
+ async.auto = function (tasks, callback) {
+ callback = callback || function () {};
+ var keys = _keys(tasks);
+ if (!keys.length) {
+ return callback(null);
+ }
+
+ var completed = [];
+
+ var listeners = [];
+ var addListener = function (fn) {
+ listeners.unshift(fn);
+ };
+ var removeListener = function (fn) {
+ for (var i = 0; i < listeners.length; i += 1) {
+ if (listeners[i] === fn) {
+ listeners.splice(i, 1);
+ return;
+ }
+ }
+ };
+ var taskComplete = function () {
+ _forEach(listeners, function (fn) {
+ fn();
+ });
+ };
+
+ addListener(function () {
+ if (completed.length === keys.length) {
+ callback(null);
+ }
+ });
+
+ _forEach(keys, function (k) {
+ var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];
+ var taskCallback = function (err) {
+ if (err) {
+ callback(err);
+ // stop subsequent errors hitting callback multiple times
+ callback = function () {};
+ }
+ else {
+ completed.push(k);
+ taskComplete();
+ }
+ };
+ var requires = task.slice(0, Math.abs(task.length - 1)) || [];
+ var ready = function () {
+ return _reduce(requires, function (a, x) {
+ return (a && _indexOf(completed, x) !== -1);
+ }, true);
+ };
+ if (ready()) {
+ task[task.length - 1](taskCallback);
+ }
+ else {
+ var listener = function () {
+ if (ready()) {
+ removeListener(listener);
+ task[task.length - 1](taskCallback);
+ }
+ };
+ addListener(listener);
+ }
+ });
+ };
+
+ async.waterfall = function (tasks, callback) {
+ if (!tasks.length) {
+ return callback();
+ }
+ callback = callback || function () {};
+ var wrapIterator = function (iterator) {
+ return function (err) {
+ if (err) {
+ callback(err);
+ callback = function () {};
+ }
+ else {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var next = iterator.next();
+ if (next) {
+ args.push(wrapIterator(next));
+ }
+ else {
+ args.push(callback);
+ }
+ async.nextTick(function () {
+ iterator.apply(null, args);
+ });
+ }
+ };
+ };
+ wrapIterator(async.iterator(tasks))();
+ };
+
+ async.parallel = function (tasks, callback) {
+ callback = callback || function () {};
+ if (tasks.constructor === Array) {
+ async.map(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args || null);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ async.forEach(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.series = function (tasks, callback) {
+ callback = callback || function () {};
+ if (tasks.constructor === Array) {
+ async.mapSeries(tasks, function (fn, callback) {
+ if (fn) {
+ fn(function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ callback.call(null, err, args || null);
+ });
+ }
+ }, callback);
+ }
+ else {
+ var results = {};
+ async.forEachSeries(_keys(tasks), function (k, callback) {
+ tasks[k](function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[k] = args;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+ };
+
+ async.iterator = function (tasks) {
+ var makeCallback = function (index) {
+ var fn = function () {
+ if (tasks.length) {
+ tasks[index].apply(null, arguments);
+ }
+ return fn.next();
+ };
+ fn.next = function () {
+ return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+ };
+ return fn;
+ };
+ return makeCallback(0);
+ };
+
+ async.apply = function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function () {
+ return fn.apply(
+ null, args.concat(Array.prototype.slice.call(arguments))
+ );
+ };
+ };
+
+ var _concat = function (eachfn, arr, fn, callback) {
+ var r = [];
+ eachfn(arr, function (x, cb) {
+ fn(x, function (err, y) {
+ r = r.concat(y || []);
+ cb(err);
+ });
+ }, function (err) {
+ callback(err, r);
+ });
+ };
+ async.concat = doParallel(_concat);
+ async.concatSeries = doSeries(_concat);
+
+ async.whilst = function (test, iterator, callback) {
+ if (test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.whilst(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.until = function (test, iterator, callback) {
+ if (!test()) {
+ iterator(function (err) {
+ if (err) {
+ return callback(err);
+ }
+ async.until(test, iterator, callback);
+ });
+ }
+ else {
+ callback();
+ }
+ };
+
+ async.queue = function (worker, concurrency) {
+ var workers = 0;
+ var tasks = [];
+ var q = {
+ concurrency: concurrency,
+ push: function (data, callback) {
+ tasks.push({data: data, callback: callback});
+ async.nextTick(q.process);
+ },
+ process: function () {
+ if (workers < q.concurrency && tasks.length) {
+ var task = tasks.splice(0, 1)[0];
+ workers += 1;
+ worker(task.data, function () {
+ workers -= 1;
+ if (task.callback) {
+ task.callback.apply(task, arguments);
+ }
+ q.process();
+ });
+ }
+ },
+ length: function () {
+ return tasks.length;
+ }
+ };
+ return q;
+ };
+
+ var _console_fn = function (name) {
+ return function (fn) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ fn.apply(null, args.concat([function (err) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ if (typeof console !== 'undefined') {
+ if (err) {
+ if (console.error) {
+ console.error(err);
+ }
+ }
+ else if (console[name]) {
+ _forEach(args, function (x) {
+ console[name](x);
+ });
+ }
+ }
+ }]));
+ };
+ };
+ async.log = _console_fn('log');
+ async.dir = _console_fn('dir');
+ /*async.info = _console_fn('info');
+ async.warn = _console_fn('warn');
+ async.error = _console_fn('error');*/
+
+ async.memoize = function (fn, hasher) {
+ var memo = {};
+ hasher = hasher || function (x) {
+ return x;
+ };
+ return function () {
+ var args = Array.prototype.slice.call(arguments);
+ var callback = args.pop();
+ var key = hasher.apply(null, args);
+ if (key in memo) {
+ callback.apply(null, memo[key]);
+ }
+ else {
+ fn.apply(null, args.concat([function () {
+ memo[key] = arguments;
+ callback.apply(null, arguments);
+ }]));
+ }
+ };
+ };
+
+}());
+(function(exports){
+/**
+ * This file is based on the node.js assert module, but with some small
+ * changes for browser-compatibility
+ * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS!
+ */
+
+
+/**
+ * Added for browser compatibility
+ */
+
+var _keys = function(obj){
+ if(Object.keys) return Object.keys(obj);
+ if (typeof obj != 'object' && typeof obj != 'function') {
+ throw new TypeError('-');
+ }
+ var keys = [];
+ for(var k in obj){
+ if(obj.hasOwnProperty(k)) keys.push(k);
+ }
+ return keys;
+};
+
+
+
+// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
+//
+// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
+//
+// Originally from narwhal.js (http://narwhaljs.org)
+// Copyright (c) 2009 Thomas Robinson <280north.com>
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the 'Software'), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+var pSlice = Array.prototype.slice;
+
+// 1. The assert module provides functions that throw
+// AssertionError's when particular conditions are not met. The
+// assert module must conform to the following interface.
+
+var assert = exports;
+
+// 2. The AssertionError is defined in assert.
+// new assert.AssertionError({message: message, actual: actual, expected: expected})
+
+assert.AssertionError = function AssertionError (options) {
+ this.name = "AssertionError";
+ this.message = options.message;
+ this.actual = options.actual;
+ this.expected = options.expected;
+ this.operator = options.operator;
+ var stackStartFunction = options.stackStartFunction || fail;
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, stackStartFunction);
+ }
+};
+// code from util.inherits in node
+assert.AssertionError.super_ = Error;
+
+
+// EDITED FOR BROWSER COMPATIBILITY: replaced Object.create call
+// TODO: test what effect this may have
+var ctor = function () { this.constructor = assert.AssertionError; };
+ctor.prototype = Error.prototype;
+assert.AssertionError.prototype = new ctor();
+
+
+assert.AssertionError.prototype.toString = function() {
+ if (this.message) {
+ return [this.name+":", this.message].join(' ');
+ } else {
+ return [ this.name+":"
+ , typeof this.expected !== 'undefined' ? JSON.stringify(this.expected) : 'undefined'
+ , this.operator
+ , typeof this.actual !== 'undefined' ? JSON.stringify(this.actual) : 'undefined'
+ ].join(" ");
+ }
+};
+
+// assert.AssertionError instanceof Error
+
+assert.AssertionError.__proto__ = Error.prototype;
+
+// At present only the three keys mentioned above are used and
+// understood by the spec. Implementations or sub modules can pass
+// other keys to the AssertionError's constructor - they will be
+// ignored.
+
+// 3. All of the following functions must throw an AssertionError
+// when a corresponding condition is not met, with a message that
+// may be undefined if not provided. All assertion methods provide
+// both the actual and expected values to the assertion error for
+// display purposes.
+
+function fail(actual, expected, message, operator, stackStartFunction) {
+ throw new assert.AssertionError({
+ message: message,
+ actual: actual,
+ expected: expected,
+ operator: operator,
+ stackStartFunction: stackStartFunction
+ });
+}
+
+// EXTENSION! allows for well behaved errors defined elsewhere.
+assert.fail = fail;
+
+// 4. Pure assertion tests whether a value is truthy, as determined
+// by !!guard.
+// assert.ok(guard, message_opt);
+// This statement is equivalent to assert.equal(true, guard,
+// message_opt);. To test strictly for the value true, use
+// assert.strictEqual(true, guard, message_opt);.
+
+assert.ok = function ok(value, message) {
+ if (!!!value) fail(value, true, message, "==", assert.ok);
+};
+
+// 5. The equality assertion tests shallow, coercive equality with
+// ==.
+// assert.equal(actual, expected, message_opt);
+
+assert.equal = function equal(actual, expected, message) {
+ if (actual != expected) fail(actual, expected, message, "==", assert.equal);
+};
+
+// 6. The non-equality assertion tests for whether two objects are not equal
+// with != assert.notEqual(actual, expected, message_opt);
+
+assert.notEqual = function notEqual(actual, expected, message) {
+ if (actual == expected) {
+ fail(actual, expected, message, "!=", assert.notEqual);
+ }
+};
+
+// 7. The equivalence assertion tests a deep equality relation.
+// assert.deepEqual(actual, expected, message_opt);
+
+assert.deepEqual = function deepEqual(actual, expected, message) {
+ if (!_deepEqual(actual, expected)) {
+ fail(actual, expected, message, "deepEqual", assert.deepEqual);
+ }
+};
+
+var Buffer = null;
+if (typeof require !== 'undefined' && typeof process !== 'undefined') {
+ try {
+ Buffer = require('buffer').Buffer;
+ }
+ catch (e) {
+ // May be a CommonJS environment other than Node.js
+ Buffer = null;
+ }
+}
+
+function _deepEqual(actual, expected) {
+ // 7.1. All identical values are equivalent, as determined by ===.
+ if (actual === expected) {
+ return true;
+ // 7.2. If the expected value is a Date object, the actual value is
+ // equivalent if it is also a Date object that refers to the same time.
+ } else if (actual instanceof Date && expected instanceof Date) {
+ return actual.getTime() === expected.getTime();
+
+ // 7.2.1 If the expcted value is a RegExp object, the actual value is
+ // equivalent if it is also a RegExp object that refers to the same source and options
+ } else if (actual instanceof RegExp && expected instanceof RegExp) {
+ return actual.source === expected.source &&
+ actual.global === expected.global &&
+ actual.ignoreCase === expected.ignoreCase &&
+ actual.multiline === expected.multiline;
+
+ } else if (Buffer && actual instanceof Buffer && expected instanceof Buffer) {
+ return (function() {
+ var i, len;
+
+ for (i = 0, len = expected.length; i < len; i++) {
+ if (actual[i] !== expected[i]) {
+ return false;
+ }
+ }
+ return actual.length === expected.length;
+ })();
+ // 7.3. Other pairs that do not both pass typeof value == "object",
+ // equivalence is determined by ==.
+ } else if (typeof actual != 'object' && typeof expected != 'object') {
+ return actual == expected;
+
+ // 7.4. For all other Object pairs, including Array objects, equivalence is
+ // determined by having the same number of owned properties (as verified
+ // with Object.prototype.hasOwnProperty.call), the same set of keys
+ // (although not necessarily the same order), equivalent values for every
+ // corresponding key, and an identical "prototype" property. Note: this
+ // accounts for both named and indexed properties on Arrays.
+ } else {
+ return objEquiv(actual, expected);
+ }
+}
+
+function isUndefinedOrNull (value) {
+ return value === null || value === undefined;
+}
+
+function isArguments (object) {
+ return Object.prototype.toString.call(object) == '[object Arguments]';
+}
+
+function objEquiv (a, b) {
+ if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+ return false;
+ // an identical "prototype" property.
+ if (a.prototype !== b.prototype) return false;
+ //~~~I've managed to break Object.keys through screwy arguments passing.
+ // Converting to array solves the problem.
+ if (isArguments(a)) {
+ if (!isArguments(b)) {
+ return false;
+ }
+ a = pSlice.call(a);
+ b = pSlice.call(b);
+ return _deepEqual(a, b);
+ }
+ try{
+ var ka = _keys(a),
+ kb = _keys(b),
+ key, i;
+ } catch (e) {//happens when one is a string literal and the other isn't
+ return false;
+ }
+ // having the same number of owned properties (keys incorporates hasOwnProperty)
+ if (ka.length != kb.length)
+ return false;
+ //the same set of keys (although not necessarily the same order),
+ ka.sort();
+ kb.sort();
+ //~~~cheap key test
+ for (i = ka.length - 1; i >= 0; i--) {
+ if (ka[i] != kb[i])
+ return false;
+ }
+ //equivalent values for every corresponding key, and
+ //~~~possibly expensive deep test
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!_deepEqual(a[key], b[key] ))
+ return false;
+ }
+ return true;
+}
+
+// 8. The non-equivalence assertion tests for any deep inequality.
+// assert.notDeepEqual(actual, expected, message_opt);
+
+assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
+ if (_deepEqual(actual, expected)) {
+ fail(actual, expected, message, "notDeepEqual", assert.notDeepEqual);
+ }
+};
+
+// 9. The strict equality assertion tests strict equality, as determined by ===.
+// assert.strictEqual(actual, expected, message_opt);
+
+assert.strictEqual = function strictEqual(actual, expected, message) {
+ if (actual !== expected) {
+ fail(actual, expected, message, "===", assert.strictEqual);
+ }
+};
+
+// 10. The strict non-equality assertion tests for strict inequality, as determined by !==.
+// assert.notStrictEqual(actual, expected, message_opt);
+
+assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
+ if (actual === expected) {
+ fail(actual, expected, message, "!==", assert.notStrictEqual);
+ }
+};
+
+function expectedException(actual, expected) {
+ if (!actual || !expected) {
+ return false;
+ }
+
+ if (expected instanceof RegExp) {
+ return expected.test(actual.message || actual);
+ } else if (actual instanceof expected) {
+ return true;
+ } else if (expected.call({}, actual) === true) {
+ return true;
+ }
+
+ return false;
+}
+
+function _throws(shouldThrow, block, expected, message) {
+ var actual;
+
+ if (typeof expected === 'string') {
+ message = expected;
+ expected = null;
+ }
+
+ try {
+ block();
+ } catch (e) {
+ actual = e;
+ }
+
+ message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
+ (message ? ' ' + message : '.');
+
+ if (shouldThrow && !actual) {
+ fail('Missing expected exception' + message);
+ }
+
+ if (!shouldThrow && expectedException(actual, expected)) {
+ fail('Got unwanted exception' + message);
+ }
+
+ if ((shouldThrow && actual && expected &&
+ !expectedException(actual, expected)) || (!shouldThrow && actual)) {
+ throw actual;
+ }
+}
+
+// 11. Expected to throw an error:
+// assert.throws(block, Error_opt, message_opt);
+
+assert.throws = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [true].concat(pSlice.call(arguments)));
+};
+
+// EXTENSION! This is annoying to write outside this module.
+assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
+ _throws.apply(this, [false].concat(pSlice.call(arguments)));
+};
+
+assert.ifError = function (err) { if (err) {throw err;}};
+})(assert);
+(function(exports){
+/*!
+ * Nodeunit
+ * Copyright (c) 2010 Caolan McMahon
+ * MIT Licensed
+ *
+ * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS!
+ * Only code on that line will be removed, it's mostly to avoid requiring code
+ * that is node specific
+ */
+
+/**
+ * Module dependencies
+ */
+
+
+
+/**
+ * Creates assertion objects representing the result of an assert call.
+ * Accepts an object or AssertionError as its argument.
+ *
+ * @param {object} obj
+ * @api public
+ */
+
+exports.assertion = function (obj) {
+ return {
+ method: obj.method || '',
+ message: obj.message || (obj.error && obj.error.message) || '',
+ error: obj.error,
+ passed: function () {
+ return !this.error;
+ },
+ failed: function () {
+ return Boolean(this.error);
+ }
+ };
+};
+
+/**
+ * Creates an assertion list object representing a group of assertions.
+ * Accepts an array of assertion objects.
+ *
+ * @param {Array} arr
+ * @param {Number} duration
+ * @api public
+ */
+
+exports.assertionList = function (arr, duration) {
+ var that = arr || [];
+ that.failures = function () {
+ var failures = 0;
+ for (var i = 0; i < this.length; i += 1) {
+ if (this[i].failed()) {
+ failures += 1;
+ }
+ }
+ return failures;
+ };
+ that.passes = function () {
+ return that.length - that.failures();
+ };
+ that.duration = duration || 0;
+ return that;
+};
+
+/**
+ * Create a wrapper function for assert module methods. Executes a callback
+ * after it's complete with an assertion object representing the result.
+ *
+ * @param {Function} callback
+ * @api private
+ */
+
+var assertWrapper = function (callback) {
+ return function (new_method, assert_method, arity) {
+ return function () {
+ var message = arguments[arity - 1];
+ var a = exports.assertion({method: new_method, message: message});
+ try {
+ assert[assert_method].apply(null, arguments);
+ }
+ catch (e) {
+ a.error = e;
+ }
+ callback(a);
+ };
+ };
+};
+
+/**
+ * Creates the 'test' object that gets passed to every test function.
+ * Accepts the name of the test function as its first argument, followed by
+ * the start time in ms, the options object and a callback function.
+ *
+ * @param {String} name
+ * @param {Number} start
+ * @param {Object} options
+ * @param {Function} callback
+ * @api public
+ */
+
+exports.test = function (name, start, options, callback) {
+ var expecting;
+ var a_list = [];
+
+ var wrapAssert = assertWrapper(function (a) {
+ a_list.push(a);
+ if (options.log) {
+ async.nextTick(function () {
+ options.log(a);
+ });
+ }
+ });
+
+ var test = {
+ done: function (err) {
+ if (expecting !== undefined && expecting !== a_list.length) {
+ var e = new Error(
+ 'Expected ' + expecting + ' assertions, ' +
+ a_list.length + ' ran'
+ );
+ var a1 = exports.assertion({method: 'expect', error: e});
+ a_list.push(a1);
+ if (options.log) {
+ async.nextTick(function () {
+ options.log(a1);
+ });
+ }
+ }
+ if (err) {
+ var a2 = exports.assertion({error: err});
+ a_list.push(a2);
+ if (options.log) {
+ async.nextTick(function () {
+ options.log(a2);
+ });
+ }
+ }
+ var end = new Date().getTime();
+ async.nextTick(function () {
+ var assertion_list = exports.assertionList(a_list, end - start);
+ options.testDone(name, assertion_list);
+ callback(null, a_list);
+ });
+ },
+ ok: wrapAssert('ok', 'ok', 2),
+ same: wrapAssert('same', 'deepEqual', 3),
+ equals: wrapAssert('equals', 'equal', 3),
+ expect: function (num) {
+ expecting = num;
+ },
+ _assertion_list: a_list
+ };
+ // add all functions from the assert module
+ for (var k in assert) {
+ if (assert.hasOwnProperty(k)) {
+ test[k] = wrapAssert(k, k, assert[k].length);
+ }
+ }
+ return test;
+};
+
+/**
+ * Ensures an options object has all callbacks, adding empty callback functions
+ * if any are missing.
+ *
+ * @param {Object} opt
+ * @return {Object}
+ * @api public
+ */
+
+exports.options = function (opt) {
+ var optionalCallback = function (name) {
+ opt[name] = opt[name] || function () {};
+ };
+
+ optionalCallback('moduleStart');
+ optionalCallback('moduleDone');
+ optionalCallback('testStart');
+ optionalCallback('testReady');
+ optionalCallback('testDone');
+ //optionalCallback('log');
+
+ // 'done' callback is not optional.
+
+ return opt;
+};
+})(types);
+(function(exports){
+/*!
+ * Nodeunit
+ * Copyright (c) 2010 Caolan McMahon
+ * MIT Licensed
+ *
+ * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS!
+ * Only code on that line will be removed, it's mostly to avoid requiring code
+ * that is node specific
+ */
+
+/**
+ * Module dependencies
+ */
+
+
+
+/**
+ * Added for browser compatibility
+ */
+
+var _keys = function (obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ }
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+};
+
+
+var _copy = function (obj) {
+ var nobj = {};
+ var keys = _keys(obj);
+ for (var i = 0; i < keys.length; i += 1) {
+ nobj[keys[i]] = obj[keys[i]];
+ }
+ return nobj;
+};
+
+
+/**
+ * Runs a test function (fn) from a loaded module. After the test function
+ * calls test.done(), the callback is executed with an assertionList as its
+ * second argument.
+ *
+ * @param {String} name
+ * @param {Function} fn
+ * @param {Object} opt
+ * @param {Function} callback
+ * @api public
+ */
+
+exports.runTest = function (name, fn, opt, callback) {
+ var options = types.options(opt);
+
+ options.testStart(name);
+ var start = new Date().getTime();
+ var test = types.test(name, start, options, callback);
+
+ options.testReady(test);
+ try {
+ fn(test);
+ }
+ catch (e) {
+ test.done(e);
+ }
+};
+
+/**
+ * Takes an object containing test functions or other test suites as properties
+ * and runs each in series. After all tests have completed, the callback is
+ * called with a list of all assertions as the second argument.
+ *
+ * If a name is passed to this function it is prepended to all test and suite
+ * names that run within it.
+ *
+ * @param {String} name
+ * @param {Object} suite
+ * @param {Object} opt
+ * @param {Function} callback
+ * @api public
+ */
+
+exports.runSuite = function (name, suite, opt, callback) {
+ suite = wrapGroup(suite);
+ var keys = _keys(suite);
+
+ async.concatSeries(keys, function (k, cb) {
+ var prop = suite[k], _name;
+
+ _name = name ? [].concat(name, k) : [k];
+ _name.toString = function () {
+ // fallback for old one
+ return this.join(' - ');
+ };
+
+ if (typeof prop === 'function') {
+ var in_name = false,
+ in_specific_test = (_name.toString() === opt.testFullSpec) ? true : false;
+ for (var i = 0; i < _name.length; i += 1) {
+ if (_name[i] === opt.testspec) {
+ in_name = true;
+ }
+ }
+
+ if ((!opt.testFullSpec || in_specific_test) && (!opt.testspec || in_name)) {
+ if (opt.moduleStart) {
+ opt.moduleStart();
+ }
+ exports.runTest(_name, suite[k], opt, cb);
+ }
+ else {
+ return cb();
+ }
+ }
+ else {
+ exports.runSuite(_name, suite[k], opt, cb);
+ }
+ }, callback);
+};
+
+/**
+ * Run each exported test function or test suite from a loaded module.
+ *
+ * @param {String} name
+ * @param {Object} mod
+ * @param {Object} opt
+ * @param {Function} callback
+ * @api public
+ */
+
+exports.runModule = function (name, mod, opt, callback) {
+ var options = _copy(types.options(opt));
+
+ var _run = false;
+ var _moduleStart = options.moduleStart;
+
+ mod = wrapGroup(mod);
+
+ function run_once() {
+ if (!_run) {
+ _run = true;
+ _moduleStart(name);
+ }
+ }
+ options.moduleStart = run_once;
+
+ var start = new Date().getTime();
+
+ exports.runSuite(null, mod, options, function (err, a_list) {
+ var end = new Date().getTime();
+ var assertion_list = types.assertionList(a_list, end - start);
+ options.moduleDone(name, assertion_list);
+ if (nodeunit.complete) {
+ nodeunit.complete(name, assertion_list);
+ }
+ callback(null, a_list);
+ });
+};
+
+/**
+ * Treats an object literal as a list of modules keyed by name. Runs each
+ * module and finished with calling 'done'. You can think of this as a browser
+ * safe alternative to runFiles in the nodeunit module.
+ *
+ * @param {Object} modules
+ * @param {Object} opt
+ * @api public
+ */
+
+// TODO: add proper unit tests for this function
+exports.runModules = function (modules, opt) {
+ var all_assertions = [];
+ var options = types.options(opt);
+ var start = new Date().getTime();
+
+ async.concatSeries(_keys(modules), function (k, cb) {
+ exports.runModule(k, modules[k], options, cb);
+ },
+ function (err, all_assertions) {
+ var end = new Date().getTime();
+ options.done(types.assertionList(all_assertions, end - start));
+ });
+};
+
+
+/**
+ * Wraps a test function with setUp and tearDown functions.
+ * Used by testCase.
+ *
+ * @param {Function} setUp
+ * @param {Function} tearDown
+ * @param {Function} fn
+ * @api private
+ */
+
+var wrapTest = function (setUp, tearDown, fn) {
+ return function (test) {
+ var context = {};
+ if (tearDown) {
+ var done = test.done;
+ test.done = function (err) {
+ try {
+ tearDown.call(context, function (err2) {
+ if (err && err2) {
+ test._assertion_list.push(
+ types.assertion({error: err})
+ );
+ return done(err2);
+ }
+ done(err || err2);
+ });
+ }
+ catch (e) {
+ done(e);
+ }
+ };
+ }
+ if (setUp) {
+ setUp.call(context, function (err) {
+ if (err) {
+ return test.done(err);
+ }
+ fn.call(context, test);
+ });
+ }
+ else {
+ fn.call(context, test);
+ }
+ };
+};
+
+
+/**
+ * Returns a serial callback from two functions.
+ *
+ * @param {Function} funcFirst
+ * @param {Function} funcSecond
+ * @api private
+ */
+
+var getSerialCallback = function (fns) {
+ if (!fns.length) {
+ return null;
+ }
+ return function (callback) {
+ var that = this;
+ var bound_fns = [];
+ for (var i = 0, len = fns.length; i < len; i++) {
+ (function (j) {
+ bound_fns.push(function () {
+ return fns[j].apply(that, arguments);
+ });
+ })(i);
+ }
+ return async.series(bound_fns, callback);
+ };
+};
+
+
+/**
+ * Wraps a group of tests with setUp and tearDown functions.
+ * Used by testCase.
+ *
+ * @param {Object} group
+ * @param {Array} setUps - parent setUp functions
+ * @param {Array} tearDowns - parent tearDown functions
+ * @api private
+ */
+
+var wrapGroup = function (group, setUps, tearDowns) {
+ var tests = {};
+
+ var setUps = setUps ? setUps.slice(): [];
+ var tearDowns = tearDowns ? tearDowns.slice(): [];
+
+ if (group.setUp) {
+ setUps.push(group.setUp);
+ delete group.setUp;
+ }
+ if (group.tearDown) {
+ tearDowns.unshift(group.tearDown);
+ delete group.tearDown;
+ }
+
+ var keys = _keys(group);
+
+ for (var i = 0; i < keys.length; i += 1) {
+ var k = keys[i];
+ if (typeof group[k] === 'function') {
+ tests[k] = wrapTest(
+ getSerialCallback(setUps),
+ getSerialCallback(tearDowns),
+ group[k]
+ );
+ }
+ else if (typeof group[k] === 'object') {
+ tests[k] = wrapGroup(group[k], setUps, tearDowns);
+ }
+ }
+ return tests;
+};
+
+
+/**
+ * Backwards compatibility for test suites using old testCase API
+ */
+
+exports.testCase = function (suite) {
+ return suite;
+};
+})(core);
+(function(exports){
+/*!
+ * Nodeunit
+ * Copyright (c) 2010 Caolan McMahon
+ * MIT Licensed
+ *
+ * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS!
+ * Only code on that line will be removed, its mostly to avoid requiring code
+ * that is node specific
+ */
+
+
+/**
+ * NOTE: this test runner is not listed in index.js because it cannot be
+ * used with the command-line tool, only inside the browser.
+ */
+
+
+/**
+ * Reporter info string
+ */
+
+exports.info = "Browser-based test reporter";
+
+
+/**
+ * Run all tests within each module, reporting the results
+ *
+ * @param {Array} files
+ * @api public
+ */
+
+exports.run = function (modules, options, callback) {
+ var start = new Date().getTime(), div;
+ options = options || {};
+ div = options.div || document.body;
+
+ function setText(el, txt) {
+ if ('innerText' in el) {
+ el.innerText = txt;
+ }
+ else if ('textContent' in el){
+ el.textContent = txt;
+ }
+ }
+
+ function getOrCreate(tag, id) {
+ var el = document.getElementById(id);
+ if (!el) {
+ el = document.createElement(tag);
+ el.id = id;
+ div.appendChild(el);
+ }
+ return el;
+ };
+
+ var header = getOrCreate('h1', 'nodeunit-header');
+ var banner = getOrCreate('h2', 'nodeunit-banner');
+ var userAgent = getOrCreate('h2', 'nodeunit-userAgent');
+ var tests = getOrCreate('ol', 'nodeunit-tests');
+ var result = getOrCreate('p', 'nodeunit-testresult');
+
+ setText(userAgent, navigator.userAgent);
+
+ nodeunit.runModules(modules, {
+ moduleStart: function (name) {
+ /*var mheading = document.createElement('h2');
+ mheading.innerText = name;
+ results.appendChild(mheading);
+ module = document.createElement('ol');
+ results.appendChild(module);*/
+ },
+ testDone: function (name, assertions) {
+ var test = document.createElement('li');
+ var strong = document.createElement('strong');
+ strong.innerHTML = name + ' <b style="color: black;">(' +
+ '<b class="fail">' + assertions.failures() + '</b>, ' +
+ '<b class="pass">' + assertions.passes() + '</b>, ' +
+ assertions.length +
+ ')</b>';
+ test.className = assertions.failures() ? 'fail': 'pass';
+ test.appendChild(strong);
+
+ var aList = document.createElement('ol');
+ aList.style.display = 'none';
+ test.onclick = function () {
+ var d = aList.style.display;
+ aList.style.display = (d == 'none') ? 'block': 'none';
+ };
+ for (var i=0; i<assertions.length; i++) {
+ var li = document.createElement('li');
+ var a = assertions[i];
+ if (a.failed()) {
+ li.innerHTML = (a.message || a.method || 'no message') +
+ '<pre>' + (a.error.stack || a.error) + '</pre>';
+ li.className = 'fail';
+ }
+ else {
+ li.innerHTML = a.message || a.method || 'no message';
+ li.className = 'pass';
+ }
+ aList.appendChild(li);
+ }
+ test.appendChild(aList);
+ tests.appendChild(test);
+ },
+ done: function (assertions) {
+ var end = new Date().getTime();
+ var duration = end - start;
+
+ var failures = assertions.failures();
+ banner.className = failures ? 'fail': 'pass';
+
+ result.innerHTML = 'Tests completed in ' + duration +
+ ' milliseconds.<br/><span class="passed">' +
+ assertions.passes() + '</span> assertions of ' +
+ '<span class="all">' + assertions.length + '<span> passed, ' +
+ assertions.failures() + ' failed.';
+
+ if (callback) callback(assertions.failures() ? new Error('We have got test failures.') : undefined);
+ }
+ });
+};
+})(reporter);
+nodeunit = core;
+nodeunit.assert = assert;
+nodeunit.reporter = reporter;
+nodeunit.run = reporter.run;
+return nodeunit; })();
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.js
new file mode 100644
index 00000000000..31e7620fb6f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.js
@@ -0,0 +1,1265 @@
+/*!
+ * async
+ * https://github.com/caolan/async
+ *
+ * Copyright 2010-2014 Caolan McMahon
+ * Released under the MIT license
+ */
+(function () {
+
+ var async = {};
+ function noop() {}
+ function identity(v) {
+ return v;
+ }
+ function toBool(v) {
+ return !!v;
+ }
+ function notId(v) {
+ return !v;
+ }
+
+ // global on the server, window in the browser
+ var previous_async;
+
+ // Establish the root object, `window` (`self`) in the browser, `global`
+ // on the server, or `this` in some virtual machines. We use `self`
+ // instead of `window` for `WebWorker` support.
+ var root = typeof self === 'object' && self.self === self && self ||
+ typeof global === 'object' && global.global === global && global ||
+ this;
+
+ if (root != null) {
+ previous_async = root.async;
+ }
+
+ async.noConflict = function () {
+ root.async = previous_async;
+ return async;
+ };
+
+ function only_once(fn) {
+ return function() {
+ if (fn === null) throw new Error("Callback was already called.");
+ fn.apply(this, arguments);
+ fn = null;
+ };
+ }
+
+ function _once(fn) {
+ return function() {
+ if (fn === null) return;
+ fn.apply(this, arguments);
+ fn = null;
+ };
+ }
+
+ //// cross-browser compatiblity functions ////
+
+ var _toString = Object.prototype.toString;
+
+ var _isArray = Array.isArray || function (obj) {
+ return _toString.call(obj) === '[object Array]';
+ };
+
+ // Ported from underscore.js isObject
+ var _isObject = function(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ };
+
+ function _isArrayLike(arr) {
+ return _isArray(arr) || (
+ // has a positive integer length property
+ typeof arr.length === "number" &&
+ arr.length >= 0 &&
+ arr.length % 1 === 0
+ );
+ }
+
+ function _arrayEach(arr, iterator) {
+ var index = -1,
+ length = arr.length;
+
+ while (++index < length) {
+ iterator(arr[index], index, arr);
+ }
+ }
+
+ function _map(arr, iterator) {
+ var index = -1,
+ length = arr.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iterator(arr[index], index, arr);
+ }
+ return result;
+ }
+
+ function _range(count) {
+ return _map(Array(count), function (v, i) { return i; });
+ }
+
+ function _reduce(arr, iterator, memo) {
+ _arrayEach(arr, function (x, i, a) {
+ memo = iterator(memo, x, i, a);
+ });
+ return memo;
+ }
+
+ function _forEachOf(object, iterator) {
+ _arrayEach(_keys(object), function (key) {
+ iterator(object[key], key);
+ });
+ }
+
+ function _indexOf(arr, item) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] === item) return i;
+ }
+ return -1;
+ }
+
+ var _keys = Object.keys || function (obj) {
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+ };
+
+ function _keyIterator(coll) {
+ var i = -1;
+ var len;
+ var keys;
+ if (_isArrayLike(coll)) {
+ len = coll.length;
+ return function next() {
+ i++;
+ return i < len ? i : null;
+ };
+ } else {
+ keys = _keys(coll);
+ len = keys.length;
+ return function next() {
+ i++;
+ return i < len ? keys[i] : null;
+ };
+ }
+ }
+
+ // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html)
+ // This accumulates the arguments passed into an array, after a given index.
+ // From underscore.js (https://github.com/jashkenas/underscore/pull/2140).
+ function _restParam(func, startIndex) {
+ startIndex = startIndex == null ? func.length - 1 : +startIndex;
+ return function() {
+ var length = Math.max(arguments.length - startIndex, 0);
+ var rest = Array(length);
+ for (var index = 0; index < length; index++) {
+ rest[index] = arguments[index + startIndex];
+ }
+ switch (startIndex) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, arguments[0], rest);
+ }
+ // Currently unused but handle cases outside of the switch statement:
+ // var args = Array(startIndex + 1);
+ // for (index = 0; index < startIndex; index++) {
+ // args[index] = arguments[index];
+ // }
+ // args[startIndex] = rest;
+ // return func.apply(this, args);
+ };
+ }
+
+ function _withoutIndex(iterator) {
+ return function (value, index, callback) {
+ return iterator(value, callback);
+ };
+ }
+
+ //// exported async module functions ////
+
+ //// nextTick implementation with browser-compatible fallback ////
+
+ // capture the global reference to guard against fakeTimer mocks
+ var _setImmediate = typeof setImmediate === 'function' && setImmediate;
+
+ var _delay = _setImmediate ? function(fn) {
+ // not a direct alias for IE10 compatibility
+ _setImmediate(fn);
+ } : function(fn) {
+ setTimeout(fn, 0);
+ };
+
+ if (typeof process === 'object' && typeof process.nextTick === 'function') {
+ async.nextTick = process.nextTick;
+ } else {
+ async.nextTick = _delay;
+ }
+ async.setImmediate = _setImmediate ? _delay : async.nextTick;
+
+
+ async.forEach =
+ async.each = function (arr, iterator, callback) {
+ return async.eachOf(arr, _withoutIndex(iterator), callback);
+ };
+
+ async.forEachSeries =
+ async.eachSeries = function (arr, iterator, callback) {
+ return async.eachOfSeries(arr, _withoutIndex(iterator), callback);
+ };
+
+
+ async.forEachLimit =
+ async.eachLimit = function (arr, limit, iterator, callback) {
+ return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback);
+ };
+
+ async.forEachOf =
+ async.eachOf = function (object, iterator, callback) {
+ callback = _once(callback || noop);
+ object = object || [];
+
+ var iter = _keyIterator(object);
+ var key, completed = 0;
+
+ while ((key = iter()) != null) {
+ completed += 1;
+ iterator(object[key], key, only_once(done));
+ }
+
+ if (completed === 0) callback(null);
+
+ function done(err) {
+ completed--;
+ if (err) {
+ callback(err);
+ }
+ // Check key is null in case iterator isn't exhausted
+ // and done resolved synchronously.
+ else if (key === null && completed <= 0) {
+ callback(null);
+ }
+ }
+ };
+
+ async.forEachOfSeries =
+ async.eachOfSeries = function (obj, iterator, callback) {
+ callback = _once(callback || noop);
+ obj = obj || [];
+ var nextKey = _keyIterator(obj);
+ var key = nextKey();
+ function iterate() {
+ var sync = true;
+ if (key === null) {
+ return callback(null);
+ }
+ iterator(obj[key], key, only_once(function (err) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ key = nextKey();
+ if (key === null) {
+ return callback(null);
+ } else {
+ if (sync) {
+ async.setImmediate(iterate);
+ } else {
+ iterate();
+ }
+ }
+ }
+ }));
+ sync = false;
+ }
+ iterate();
+ };
+
+
+
+ async.forEachOfLimit =
+ async.eachOfLimit = function (obj, limit, iterator, callback) {
+ _eachOfLimit(limit)(obj, iterator, callback);
+ };
+
+ function _eachOfLimit(limit) {
+
+ return function (obj, iterator, callback) {
+ callback = _once(callback || noop);
+ obj = obj || [];
+ var nextKey = _keyIterator(obj);
+ if (limit <= 0) {
+ return callback(null);
+ }
+ var done = false;
+ var running = 0;
+ var errored = false;
+
+ (function replenish () {
+ if (done && running <= 0) {
+ return callback(null);
+ }
+
+ while (running < limit && !errored) {
+ var key = nextKey();
+ if (key === null) {
+ done = true;
+ if (running <= 0) {
+ callback(null);
+ }
+ return;
+ }
+ running += 1;
+ iterator(obj[key], key, only_once(function (err) {
+ running -= 1;
+ if (err) {
+ callback(err);
+ errored = true;
+ }
+ else {
+ replenish();
+ }
+ }));
+ }
+ })();
+ };
+ }
+
+
+ function doParallel(fn) {
+ return function (obj, iterator, callback) {
+ return fn(async.eachOf, obj, iterator, callback);
+ };
+ }
+ function doParallelLimit(fn) {
+ return function (obj, limit, iterator, callback) {
+ return fn(_eachOfLimit(limit), obj, iterator, callback);
+ };
+ }
+ function doSeries(fn) {
+ return function (obj, iterator, callback) {
+ return fn(async.eachOfSeries, obj, iterator, callback);
+ };
+ }
+
+ function _asyncMap(eachfn, arr, iterator, callback) {
+ callback = _once(callback || noop);
+ arr = arr || [];
+ var results = _isArrayLike(arr) ? [] : {};
+ eachfn(arr, function (value, index, callback) {
+ iterator(value, function (err, v) {
+ results[index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+
+ async.map = doParallel(_asyncMap);
+ async.mapSeries = doSeries(_asyncMap);
+ async.mapLimit = doParallelLimit(_asyncMap);
+
+ // reduce only has a series version, as doing reduce in parallel won't
+ // work in many situations.
+ async.inject =
+ async.foldl =
+ async.reduce = function (arr, memo, iterator, callback) {
+ async.eachOfSeries(arr, function (x, i, callback) {
+ iterator(memo, x, function (err, v) {
+ memo = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, memo);
+ });
+ };
+
+ async.foldr =
+ async.reduceRight = function (arr, memo, iterator, callback) {
+ var reversed = _map(arr, identity).reverse();
+ async.reduce(reversed, memo, iterator, callback);
+ };
+
+ async.transform = function (arr, memo, iterator, callback) {
+ if (arguments.length === 3) {
+ callback = iterator;
+ iterator = memo;
+ memo = _isArray(arr) ? [] : {};
+ }
+
+ async.eachOf(arr, function(v, k, cb) {
+ iterator(memo, v, k, cb);
+ }, function(err) {
+ callback(err, memo);
+ });
+ };
+
+ function _filter(eachfn, arr, iterator, callback) {
+ var results = [];
+ eachfn(arr, function (x, index, callback) {
+ iterator(x, function (v) {
+ if (v) {
+ results.push({index: index, value: x});
+ }
+ callback();
+ });
+ }, function () {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ }
+
+ async.select =
+ async.filter = doParallel(_filter);
+
+ async.selectLimit =
+ async.filterLimit = doParallelLimit(_filter);
+
+ async.selectSeries =
+ async.filterSeries = doSeries(_filter);
+
+ function _reject(eachfn, arr, iterator, callback) {
+ _filter(eachfn, arr, function(value, cb) {
+ iterator(value, function(v) {
+ cb(!v);
+ });
+ }, callback);
+ }
+ async.reject = doParallel(_reject);
+ async.rejectLimit = doParallelLimit(_reject);
+ async.rejectSeries = doSeries(_reject);
+
+ function _createTester(eachfn, check, getResult) {
+ return function(arr, limit, iterator, cb) {
+ function done() {
+ if (cb) cb(getResult(false, void 0));
+ }
+ function iteratee(x, _, callback) {
+ if (!cb) return callback();
+ iterator(x, function (v) {
+ if (cb && check(v)) {
+ cb(getResult(true, x));
+ cb = iterator = false;
+ }
+ callback();
+ });
+ }
+ if (arguments.length > 3) {
+ eachfn(arr, limit, iteratee, done);
+ } else {
+ cb = iterator;
+ iterator = limit;
+ eachfn(arr, iteratee, done);
+ }
+ };
+ }
+
+ async.any =
+ async.some = _createTester(async.eachOf, toBool, identity);
+
+ async.someLimit = _createTester(async.eachOfLimit, toBool, identity);
+
+ async.all =
+ async.every = _createTester(async.eachOf, notId, notId);
+
+ async.everyLimit = _createTester(async.eachOfLimit, notId, notId);
+
+ function _findGetResult(v, x) {
+ return x;
+ }
+ async.detect = _createTester(async.eachOf, identity, _findGetResult);
+ async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult);
+ async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult);
+
+ async.sortBy = function (arr, iterator, callback) {
+ async.map(arr, function (x, callback) {
+ iterator(x, function (err, criteria) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ callback(null, {value: x, criteria: criteria});
+ }
+ });
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+ else {
+ callback(null, _map(results.sort(comparator), function (x) {
+ return x.value;
+ }));
+ }
+
+ });
+
+ function comparator(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }
+ };
+
+ async.auto = function (tasks, concurrency, callback) {
+ if (typeof arguments[1] === 'function') {
+ // concurrency is optional, shift the args.
+ callback = concurrency;
+ concurrency = null;
+ }
+ callback = _once(callback || noop);
+ var keys = _keys(tasks);
+ var remainingTasks = keys.length;
+ if (!remainingTasks) {
+ return callback(null);
+ }
+ if (!concurrency) {
+ concurrency = remainingTasks;
+ }
+
+ var results = {};
+ var runningTasks = 0;
+
+ var hasError = false;
+
+ var listeners = [];
+ function addListener(fn) {
+ listeners.unshift(fn);
+ }
+ function removeListener(fn) {
+ var idx = _indexOf(listeners, fn);
+ if (idx >= 0) listeners.splice(idx, 1);
+ }
+ function taskComplete() {
+ remainingTasks--;
+ _arrayEach(listeners.slice(0), function (fn) {
+ fn();
+ });
+ }
+
+ addListener(function () {
+ if (!remainingTasks) {
+ callback(null, results);
+ }
+ });
+
+ _arrayEach(keys, function (k) {
+ if (hasError) return;
+ var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]];
+ var taskCallback = _restParam(function(err, args) {
+ runningTasks--;
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ if (err) {
+ var safeResults = {};
+ _forEachOf(results, function(val, rkey) {
+ safeResults[rkey] = val;
+ });
+ safeResults[k] = args;
+ hasError = true;
+
+ callback(err, safeResults);
+ }
+ else {
+ results[k] = args;
+ async.setImmediate(taskComplete);
+ }
+ });
+ var requires = task.slice(0, task.length - 1);
+ // prevent dead-locks
+ var len = requires.length;
+ var dep;
+ while (len--) {
+ if (!(dep = tasks[requires[len]])) {
+ throw new Error('Has nonexistent dependency in ' + requires.join(', '));
+ }
+ if (_isArray(dep) && _indexOf(dep, k) >= 0) {
+ throw new Error('Has cyclic dependencies');
+ }
+ }
+ function ready() {
+ return runningTasks < concurrency && _reduce(requires, function (a, x) {
+ return (a && results.hasOwnProperty(x));
+ }, true) && !results.hasOwnProperty(k);
+ }
+ if (ready()) {
+ runningTasks++;
+ task[task.length - 1](taskCallback, results);
+ }
+ else {
+ addListener(listener);
+ }
+ function listener() {
+ if (ready()) {
+ runningTasks++;
+ removeListener(listener);
+ task[task.length - 1](taskCallback, results);
+ }
+ }
+ });
+ };
+
+
+
+ async.retry = function(times, task, callback) {
+ var DEFAULT_TIMES = 5;
+ var DEFAULT_INTERVAL = 0;
+
+ var attempts = [];
+
+ var opts = {
+ times: DEFAULT_TIMES,
+ interval: DEFAULT_INTERVAL
+ };
+
+ function parseTimes(acc, t){
+ if(typeof t === 'number'){
+ acc.times = parseInt(t, 10) || DEFAULT_TIMES;
+ } else if(typeof t === 'object'){
+ acc.times = parseInt(t.times, 10) || DEFAULT_TIMES;
+ acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL;
+ } else {
+ throw new Error('Unsupported argument type for \'times\': ' + typeof t);
+ }
+ }
+
+ var length = arguments.length;
+ if (length < 1 || length > 3) {
+ throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)');
+ } else if (length <= 2 && typeof times === 'function') {
+ callback = task;
+ task = times;
+ }
+ if (typeof times !== 'function') {
+ parseTimes(opts, times);
+ }
+ opts.callback = callback;
+ opts.task = task;
+
+ function wrappedTask(wrappedCallback, wrappedResults) {
+ function retryAttempt(task, finalAttempt) {
+ return function(seriesCallback) {
+ task(function(err, result){
+ seriesCallback(!err || finalAttempt, {err: err, result: result});
+ }, wrappedResults);
+ };
+ }
+
+ function retryInterval(interval){
+ return function(seriesCallback){
+ setTimeout(function(){
+ seriesCallback(null);
+ }, interval);
+ };
+ }
+
+ while (opts.times) {
+
+ var finalAttempt = !(opts.times-=1);
+ attempts.push(retryAttempt(opts.task, finalAttempt));
+ if(!finalAttempt && opts.interval > 0){
+ attempts.push(retryInterval(opts.interval));
+ }
+ }
+
+ async.series(attempts, function(done, data){
+ data = data[data.length - 1];
+ (wrappedCallback || opts.callback)(data.err, data.result);
+ });
+ }
+
+ // If a callback is passed, run this as a controll flow
+ return opts.callback ? wrappedTask() : wrappedTask;
+ };
+
+ async.waterfall = function (tasks, callback) {
+ callback = _once(callback || noop);
+ if (!_isArray(tasks)) {
+ var err = new Error('First argument to waterfall must be an array of functions');
+ return callback(err);
+ }
+ if (!tasks.length) {
+ return callback();
+ }
+ function wrapIterator(iterator) {
+ return _restParam(function (err, args) {
+ if (err) {
+ callback.apply(null, [err].concat(args));
+ }
+ else {
+ var next = iterator.next();
+ if (next) {
+ args.push(wrapIterator(next));
+ }
+ else {
+ args.push(callback);
+ }
+ ensureAsync(iterator).apply(null, args);
+ }
+ });
+ }
+ wrapIterator(async.iterator(tasks))();
+ };
+
+ function _parallel(eachfn, tasks, callback) {
+ callback = callback || noop;
+ var results = _isArrayLike(tasks) ? [] : {};
+
+ eachfn(tasks, function (task, key, callback) {
+ task(_restParam(function (err, args) {
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[key] = args;
+ callback(err);
+ }));
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+
+ async.parallel = function (tasks, callback) {
+ _parallel(async.eachOf, tasks, callback);
+ };
+
+ async.parallelLimit = function(tasks, limit, callback) {
+ _parallel(_eachOfLimit(limit), tasks, callback);
+ };
+
+ async.series = function(tasks, callback) {
+ _parallel(async.eachOfSeries, tasks, callback);
+ };
+
+ async.iterator = function (tasks) {
+ function makeCallback(index) {
+ function fn() {
+ if (tasks.length) {
+ tasks[index].apply(null, arguments);
+ }
+ return fn.next();
+ }
+ fn.next = function () {
+ return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+ };
+ return fn;
+ }
+ return makeCallback(0);
+ };
+
+ async.apply = _restParam(function (fn, args) {
+ return _restParam(function (callArgs) {
+ return fn.apply(
+ null, args.concat(callArgs)
+ );
+ });
+ });
+
+ function _concat(eachfn, arr, fn, callback) {
+ var result = [];
+ eachfn(arr, function (x, index, cb) {
+ fn(x, function (err, y) {
+ result = result.concat(y || []);
+ cb(err);
+ });
+ }, function (err) {
+ callback(err, result);
+ });
+ }
+ async.concat = doParallel(_concat);
+ async.concatSeries = doSeries(_concat);
+
+ async.whilst = function (test, iterator, callback) {
+ callback = callback || noop;
+ if (test()) {
+ var next = _restParam(function(err, args) {
+ if (err) {
+ callback(err);
+ } else if (test.apply(this, args)) {
+ iterator(next);
+ } else {
+ callback.apply(null, [null].concat(args));
+ }
+ });
+ iterator(next);
+ } else {
+ callback(null);
+ }
+ };
+
+ async.doWhilst = function (iterator, test, callback) {
+ var calls = 0;
+ return async.whilst(function() {
+ return ++calls <= 1 || test.apply(this, arguments);
+ }, iterator, callback);
+ };
+
+ async.until = function (test, iterator, callback) {
+ return async.whilst(function() {
+ return !test.apply(this, arguments);
+ }, iterator, callback);
+ };
+
+ async.doUntil = function (iterator, test, callback) {
+ return async.doWhilst(iterator, function() {
+ return !test.apply(this, arguments);
+ }, callback);
+ };
+
+ async.during = function (test, iterator, callback) {
+ callback = callback || noop;
+
+ var next = _restParam(function(err, args) {
+ if (err) {
+ callback(err);
+ } else {
+ args.push(check);
+ test.apply(this, args);
+ }
+ });
+
+ var check = function(err, truth) {
+ if (err) {
+ callback(err);
+ } else if (truth) {
+ iterator(next);
+ } else {
+ callback(null);
+ }
+ };
+
+ test(check);
+ };
+
+ async.doDuring = function (iterator, test, callback) {
+ var calls = 0;
+ async.during(function(next) {
+ if (calls++ < 1) {
+ next(null, true);
+ } else {
+ test.apply(this, arguments);
+ }
+ }, iterator, callback);
+ };
+
+ function _queue(worker, concurrency, payload) {
+ if (concurrency == null) {
+ concurrency = 1;
+ }
+ else if(concurrency === 0) {
+ throw new Error('Concurrency must not be zero');
+ }
+ function _insert(q, data, pos, callback) {
+ if (callback != null && typeof callback !== "function") {
+ throw new Error("task callback must be a function");
+ }
+ q.started = true;
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length === 0 && q.idle()) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ q.drain();
+ });
+ }
+ _arrayEach(data, function(task) {
+ var item = {
+ data: task,
+ callback: callback || noop
+ };
+
+ if (pos) {
+ q.tasks.unshift(item);
+ } else {
+ q.tasks.push(item);
+ }
+
+ if (q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ });
+ async.setImmediate(q.process);
+ }
+ function _next(q, tasks) {
+ return function(){
+ workers -= 1;
+
+ var removed = false;
+ var args = arguments;
+ _arrayEach(tasks, function (task) {
+ _arrayEach(workersList, function (worker, index) {
+ if (worker === task && !removed) {
+ workersList.splice(index, 1);
+ removed = true;
+ }
+ });
+
+ task.callback.apply(task, args);
+ });
+ if (q.tasks.length + workers === 0) {
+ q.drain();
+ }
+ q.process();
+ };
+ }
+
+ var workers = 0;
+ var workersList = [];
+ var q = {
+ tasks: [],
+ concurrency: concurrency,
+ payload: payload,
+ saturated: noop,
+ empty: noop,
+ drain: noop,
+ started: false,
+ paused: false,
+ push: function (data, callback) {
+ _insert(q, data, false, callback);
+ },
+ kill: function () {
+ q.drain = noop;
+ q.tasks = [];
+ },
+ unshift: function (data, callback) {
+ _insert(q, data, true, callback);
+ },
+ process: function () {
+ while(!q.paused && workers < q.concurrency && q.tasks.length){
+
+ var tasks = q.payload ?
+ q.tasks.splice(0, q.payload) :
+ q.tasks.splice(0, q.tasks.length);
+
+ var data = _map(tasks, function (task) {
+ return task.data;
+ });
+
+ if (q.tasks.length === 0) {
+ q.empty();
+ }
+ workers += 1;
+ workersList.push(tasks[0]);
+ var cb = only_once(_next(q, tasks));
+ worker(data, cb);
+ }
+ },
+ length: function () {
+ return q.tasks.length;
+ },
+ running: function () {
+ return workers;
+ },
+ workersList: function () {
+ return workersList;
+ },
+ idle: function() {
+ return q.tasks.length + workers === 0;
+ },
+ pause: function () {
+ q.paused = true;
+ },
+ resume: function () {
+ if (q.paused === false) { return; }
+ q.paused = false;
+ var resumeCount = Math.min(q.concurrency, q.tasks.length);
+ // Need to call q.process once per concurrent
+ // worker to preserve full concurrency after pause
+ for (var w = 1; w <= resumeCount; w++) {
+ async.setImmediate(q.process);
+ }
+ }
+ };
+ return q;
+ }
+
+ async.queue = function (worker, concurrency) {
+ var q = _queue(function (items, cb) {
+ worker(items[0], cb);
+ }, concurrency, 1);
+
+ return q;
+ };
+
+ async.priorityQueue = function (worker, concurrency) {
+
+ function _compareTasks(a, b){
+ return a.priority - b.priority;
+ }
+
+ function _binarySearch(sequence, item, compare) {
+ var beg = -1,
+ end = sequence.length - 1;
+ while (beg < end) {
+ var mid = beg + ((end - beg + 1) >>> 1);
+ if (compare(item, sequence[mid]) >= 0) {
+ beg = mid;
+ } else {
+ end = mid - 1;
+ }
+ }
+ return beg;
+ }
+
+ function _insert(q, data, priority, callback) {
+ if (callback != null && typeof callback !== "function") {
+ throw new Error("task callback must be a function");
+ }
+ q.started = true;
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length === 0) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ q.drain();
+ });
+ }
+ _arrayEach(data, function(task) {
+ var item = {
+ data: task,
+ priority: priority,
+ callback: typeof callback === 'function' ? callback : noop
+ };
+
+ q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item);
+
+ if (q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ // Start with a normal queue
+ var q = async.queue(worker, concurrency);
+
+ // Override push to accept second parameter representing priority
+ q.push = function (data, priority, callback) {
+ _insert(q, data, priority, callback);
+ };
+
+ // Remove unshift function
+ delete q.unshift;
+
+ return q;
+ };
+
+ async.cargo = function (worker, payload) {
+ return _queue(worker, 1, payload);
+ };
+
+ function _console_fn(name) {
+ return _restParam(function (fn, args) {
+ fn.apply(null, args.concat([_restParam(function (err, args) {
+ if (typeof console === 'object') {
+ if (err) {
+ if (console.error) {
+ console.error(err);
+ }
+ }
+ else if (console[name]) {
+ _arrayEach(args, function (x) {
+ console[name](x);
+ });
+ }
+ }
+ })]));
+ });
+ }
+ async.log = _console_fn('log');
+ async.dir = _console_fn('dir');
+ /*async.info = _console_fn('info');
+ async.warn = _console_fn('warn');
+ async.error = _console_fn('error');*/
+
+ async.memoize = function (fn, hasher) {
+ var memo = {};
+ var queues = {};
+ var has = Object.prototype.hasOwnProperty;
+ hasher = hasher || identity;
+ var memoized = _restParam(function memoized(args) {
+ var callback = args.pop();
+ var key = hasher.apply(null, args);
+ if (has.call(memo, key)) {
+ async.setImmediate(function () {
+ callback.apply(null, memo[key]);
+ });
+ }
+ else if (has.call(queues, key)) {
+ queues[key].push(callback);
+ }
+ else {
+ queues[key] = [callback];
+ fn.apply(null, args.concat([_restParam(function (args) {
+ memo[key] = args;
+ var q = queues[key];
+ delete queues[key];
+ for (var i = 0, l = q.length; i < l; i++) {
+ q[i].apply(null, args);
+ }
+ })]));
+ }
+ });
+ memoized.memo = memo;
+ memoized.unmemoized = fn;
+ return memoized;
+ };
+
+ async.unmemoize = function (fn) {
+ return function () {
+ return (fn.unmemoized || fn).apply(null, arguments);
+ };
+ };
+
+ function _times(mapper) {
+ return function (count, iterator, callback) {
+ mapper(_range(count), iterator, callback);
+ };
+ }
+
+ async.times = _times(async.map);
+ async.timesSeries = _times(async.mapSeries);
+ async.timesLimit = function (count, limit, iterator, callback) {
+ return async.mapLimit(_range(count), limit, iterator, callback);
+ };
+
+ async.seq = function (/* functions... */) {
+ var fns = arguments;
+ return _restParam(function (args) {
+ var that = this;
+
+ var callback = args[args.length - 1];
+ if (typeof callback == 'function') {
+ args.pop();
+ } else {
+ callback = noop;
+ }
+
+ async.reduce(fns, args, function (newargs, fn, cb) {
+ fn.apply(that, newargs.concat([_restParam(function (err, nextargs) {
+ cb(err, nextargs);
+ })]));
+ },
+ function (err, results) {
+ callback.apply(that, [err].concat(results));
+ });
+ });
+ };
+
+ async.compose = function (/* functions... */) {
+ return async.seq.apply(null, Array.prototype.reverse.call(arguments));
+ };
+
+
+ function _applyEach(eachfn) {
+ return _restParam(function(fns, args) {
+ var go = _restParam(function(args) {
+ var that = this;
+ var callback = args.pop();
+ return eachfn(fns, function (fn, _, cb) {
+ fn.apply(that, args.concat([cb]));
+ },
+ callback);
+ });
+ if (args.length) {
+ return go.apply(this, args);
+ }
+ else {
+ return go;
+ }
+ });
+ }
+
+ async.applyEach = _applyEach(async.eachOf);
+ async.applyEachSeries = _applyEach(async.eachOfSeries);
+
+
+ async.forever = function (fn, callback) {
+ var done = only_once(callback || noop);
+ var task = ensureAsync(fn);
+ function next(err) {
+ if (err) {
+ return done(err);
+ }
+ task(next);
+ }
+ next();
+ };
+
+ function ensureAsync(fn) {
+ return _restParam(function (args) {
+ var callback = args.pop();
+ args.push(function () {
+ var innerArgs = arguments;
+ if (sync) {
+ async.setImmediate(function () {
+ callback.apply(null, innerArgs);
+ });
+ } else {
+ callback.apply(null, innerArgs);
+ }
+ });
+ var sync = true;
+ fn.apply(this, args);
+ sync = false;
+ });
+ }
+
+ async.ensureAsync = ensureAsync;
+
+ async.constant = _restParam(function(values) {
+ var args = [null].concat(values);
+ return function (callback) {
+ return callback.apply(this, args);
+ };
+ });
+
+ async.wrapSync =
+ async.asyncify = function asyncify(func) {
+ return _restParam(function (args) {
+ var callback = args.pop();
+ var result;
+ try {
+ result = func.apply(this, args);
+ } catch (e) {
+ return callback(e);
+ }
+ // if result is Promise object
+ if (_isObject(result) && typeof result.then === "function") {
+ result.then(function(value) {
+ callback(null, value);
+ })["catch"](function(err) {
+ callback(err.message ? err : new Error(err));
+ });
+ } else {
+ callback(null, result);
+ }
+ });
+ };
+
+ // Node.js
+ if (typeof module === 'object' && module.exports) {
+ module.exports = async;
+ }
+ // AMD / RequireJS
+ else if (typeof define === 'function' && define.amd) {
+ define([], function () {
+ return async;
+ });
+ }
+ // included directly via <script> tag
+ else {
+ root.async = async;
+ }
+
+}());
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.js
new file mode 100644
index 00000000000..2490016a06f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.js
@@ -0,0 +1,2 @@
+!function(){function n(){}function t(n){return n}function e(n){return!!n}function r(n){return!n}function u(n){return function(){if(null===n)throw new Error("Callback was already called.");n.apply(this,arguments),n=null}}function i(n){return function(){null!==n&&(n.apply(this,arguments),n=null)}}function o(n){return M(n)||"number"==typeof n.length&&n.length>=0&&n.length%1===0}function c(n,t){for(var e=-1,r=n.length;++e<r;)t(n[e],e,n)}function a(n,t){for(var e=-1,r=n.length,u=Array(r);++e<r;)u[e]=t(n[e],e,n);return u}function f(n){return a(Array(n),function(n,t){return t})}function l(n,t,e){return c(n,function(n,r,u){e=t(e,n,r,u)}),e}function s(n,t){c(W(n),function(e){t(n[e],e)})}function p(n,t){for(var e=0;e<n.length;e++)if(n[e]===t)return e;return-1}function h(n){var t,e,r=-1;return o(n)?(t=n.length,function(){return r++,t>r?r:null}):(e=W(n),t=e.length,function(){return r++,t>r?e[r]:null})}function m(n,t){return t=null==t?n.length-1:+t,function(){for(var e=Math.max(arguments.length-t,0),r=Array(e),u=0;e>u;u++)r[u]=arguments[u+t];switch(t){case 0:return n.call(this,r);case 1:return n.call(this,arguments[0],r)}}}function y(n){return function(t,e,r){return n(t,r)}}function v(t){return function(e,r,o){o=i(o||n),e=e||[];var c=h(e);if(0>=t)return o(null);var a=!1,f=0,l=!1;!function s(){if(a&&0>=f)return o(null);for(;t>f&&!l;){var n=c();if(null===n)return a=!0,void(0>=f&&o(null));f+=1,r(e[n],n,u(function(n){f-=1,n?(o(n),l=!0):s()}))}}()}}function d(n){return function(t,e,r){return n(P.eachOf,t,e,r)}}function g(n){return function(t,e,r,u){return n(v(e),t,r,u)}}function k(n){return function(t,e,r){return n(P.eachOfSeries,t,e,r)}}function b(t,e,r,u){u=i(u||n),e=e||[];var c=o(e)?[]:{};t(e,function(n,t,e){r(n,function(n,r){c[t]=r,e(n)})},function(n){u(n,c)})}function w(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(e){e&&u.push({index:t,value:n}),r()})},function(){r(a(u.sort(function(n,t){return n.index-t.index}),function(n){return n.value}))})}function O(n,t,e,r){w(n,t,function(n,t){e(n,function(n){t(!n)})},r)}function S(n,t,e){return function(r,u,i,o){function c(){o&&o(e(!1,void 0))}function a(n,r,u){return o?void i(n,function(r){o&&t(r)&&(o(e(!0,n)),o=i=!1),u()}):u()}arguments.length>3?n(r,u,a,c):(o=i,i=u,n(r,a,c))}}function E(n,t){return t}function L(t,e,r){r=r||n;var u=o(e)?[]:{};t(e,function(n,t,e){n(m(function(n,r){r.length<=1&&(r=r[0]),u[t]=r,e(n)}))},function(n){r(n,u)})}function j(n,t,e,r){var u=[];n(t,function(n,t,r){e(n,function(n,t){u=u.concat(t||[]),r(n)})},function(n){r(n,u)})}function I(t,e,r){function i(t,e,r,u){if(null!=u&&"function"!=typeof u)throw new Error("task callback must be a function");return t.started=!0,M(e)||(e=[e]),0===e.length&&t.idle()?P.setImmediate(function(){t.drain()}):(c(e,function(e){var i={data:e,callback:u||n};r?t.tasks.unshift(i):t.tasks.push(i),t.tasks.length===t.concurrency&&t.saturated()}),void P.setImmediate(t.process))}function o(n,t){return function(){f-=1;var e=!1,r=arguments;c(t,function(n){c(l,function(t,r){t!==n||e||(l.splice(r,1),e=!0)}),n.callback.apply(n,r)}),n.tasks.length+f===0&&n.drain(),n.process()}}if(null==e)e=1;else if(0===e)throw new Error("Concurrency must not be zero");var f=0,l=[],s={tasks:[],concurrency:e,payload:r,saturated:n,empty:n,drain:n,started:!1,paused:!1,push:function(n,t){i(s,n,!1,t)},kill:function(){s.drain=n,s.tasks=[]},unshift:function(n,t){i(s,n,!0,t)},process:function(){for(;!s.paused&&f<s.concurrency&&s.tasks.length;){var n=s.payload?s.tasks.splice(0,s.payload):s.tasks.splice(0,s.tasks.length),e=a(n,function(n){return n.data});0===s.tasks.length&&s.empty(),f+=1,l.push(n[0]);var r=u(o(s,n));t(e,r)}},length:function(){return s.tasks.length},running:function(){return f},workersList:function(){return l},idle:function(){return s.tasks.length+f===0},pause:function(){s.paused=!0},resume:function(){if(s.paused!==!1){s.paused=!1;for(var n=Math.min(s.concurrency,s.tasks.length),t=1;n>=t;t++)P.setImmediate(s.process)}}};return s}function x(n){return m(function(t,e){t.apply(null,e.concat([m(function(t,e){"object"==typeof console&&(t?console.error&&console.error(t):console[n]&&c(e,function(t){console[n](t)}))})]))})}function A(n){return function(t,e,r){n(f(t),e,r)}}function T(n){return m(function(t,e){var r=m(function(e){var r=this,u=e.pop();return n(t,function(n,t,u){n.apply(r,e.concat([u]))},u)});return e.length?r.apply(this,e):r})}function z(n){return m(function(t){var e=t.pop();t.push(function(){var n=arguments;r?P.setImmediate(function(){e.apply(null,n)}):e.apply(null,n)});var r=!0;n.apply(this,t),r=!1})}var q,P={},C="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this;null!=C&&(q=C.async),P.noConflict=function(){return C.async=q,P};var H=Object.prototype.toString,M=Array.isArray||function(n){return"[object Array]"===H.call(n)},U=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},W=Object.keys||function(n){var t=[];for(var e in n)n.hasOwnProperty(e)&&t.push(e);return t},B="function"==typeof setImmediate&&setImmediate,D=B?function(n){B(n)}:function(n){setTimeout(n,0)};"object"==typeof process&&"function"==typeof process.nextTick?P.nextTick=process.nextTick:P.nextTick=D,P.setImmediate=B?D:P.nextTick,P.forEach=P.each=function(n,t,e){return P.eachOf(n,y(t),e)},P.forEachSeries=P.eachSeries=function(n,t,e){return P.eachOfSeries(n,y(t),e)},P.forEachLimit=P.eachLimit=function(n,t,e,r){return v(t)(n,y(e),r)},P.forEachOf=P.eachOf=function(t,e,r){function o(n){f--,n?r(n):null===c&&0>=f&&r(null)}r=i(r||n),t=t||[];for(var c,a=h(t),f=0;null!=(c=a());)f+=1,e(t[c],c,u(o));0===f&&r(null)},P.forEachOfSeries=P.eachOfSeries=function(t,e,r){function o(){var n=!0;return null===a?r(null):(e(t[a],a,u(function(t){if(t)r(t);else{if(a=c(),null===a)return r(null);n?P.setImmediate(o):o()}})),void(n=!1))}r=i(r||n),t=t||[];var c=h(t),a=c();o()},P.forEachOfLimit=P.eachOfLimit=function(n,t,e,r){v(t)(n,e,r)},P.map=d(b),P.mapSeries=k(b),P.mapLimit=g(b),P.inject=P.foldl=P.reduce=function(n,t,e,r){P.eachOfSeries(n,function(n,r,u){e(t,n,function(n,e){t=e,u(n)})},function(n){r(n,t)})},P.foldr=P.reduceRight=function(n,e,r,u){var i=a(n,t).reverse();P.reduce(i,e,r,u)},P.transform=function(n,t,e,r){3===arguments.length&&(r=e,e=t,t=M(n)?[]:{}),P.eachOf(n,function(n,r,u){e(t,n,r,u)},function(n){r(n,t)})},P.select=P.filter=d(w),P.selectLimit=P.filterLimit=g(w),P.selectSeries=P.filterSeries=k(w),P.reject=d(O),P.rejectLimit=g(O),P.rejectSeries=k(O),P.any=P.some=S(P.eachOf,e,t),P.someLimit=S(P.eachOfLimit,e,t),P.all=P.every=S(P.eachOf,r,r),P.everyLimit=S(P.eachOfLimit,r,r),P.detect=S(P.eachOf,t,E),P.detectSeries=S(P.eachOfSeries,t,E),P.detectLimit=S(P.eachOfLimit,t,E),P.sortBy=function(n,t,e){function r(n,t){var e=n.criteria,r=t.criteria;return r>e?-1:e>r?1:0}P.map(n,function(n,e){t(n,function(t,r){t?e(t):e(null,{value:n,criteria:r})})},function(n,t){return n?e(n):void e(null,a(t.sort(r),function(n){return n.value}))})},P.auto=function(t,e,r){function u(n){g.unshift(n)}function o(n){var t=p(g,n);t>=0&&g.splice(t,1)}function a(){h--,c(g.slice(0),function(n){n()})}"function"==typeof arguments[1]&&(r=e,e=null),r=i(r||n);var f=W(t),h=f.length;if(!h)return r(null);e||(e=h);var y={},v=0,d=!1,g=[];u(function(){h||r(null,y)}),c(f,function(n){function i(){return e>v&&l(k,function(n,t){return n&&y.hasOwnProperty(t)},!0)&&!y.hasOwnProperty(n)}function c(){i()&&(v++,o(c),h[h.length-1](g,y))}if(!d){for(var f,h=M(t[n])?t[n]:[t[n]],g=m(function(t,e){if(v--,e.length<=1&&(e=e[0]),t){var u={};s(y,function(n,t){u[t]=n}),u[n]=e,d=!0,r(t,u)}else y[n]=e,P.setImmediate(a)}),k=h.slice(0,h.length-1),b=k.length;b--;){if(!(f=t[k[b]]))throw new Error("Has nonexistent dependency in "+k.join(", "));if(M(f)&&p(f,n)>=0)throw new Error("Has cyclic dependencies")}i()?(v++,h[h.length-1](g,y)):u(c)}})},P.retry=function(n,t,e){function r(n,t){if("number"==typeof t)n.times=parseInt(t,10)||i;else{if("object"!=typeof t)throw new Error("Unsupported argument type for 'times': "+typeof t);n.times=parseInt(t.times,10)||i,n.interval=parseInt(t.interval,10)||o}}function u(n,t){function e(n,e){return function(r){n(function(n,t){r(!n||e,{err:n,result:t})},t)}}function r(n){return function(t){setTimeout(function(){t(null)},n)}}for(;a.times;){var u=!(a.times-=1);c.push(e(a.task,u)),!u&&a.interval>0&&c.push(r(a.interval))}P.series(c,function(t,e){e=e[e.length-1],(n||a.callback)(e.err,e.result)})}var i=5,o=0,c=[],a={times:i,interval:o},f=arguments.length;if(1>f||f>3)throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)");return 2>=f&&"function"==typeof n&&(e=t,t=n),"function"!=typeof n&&r(a,n),a.callback=e,a.task=t,a.callback?u():u},P.waterfall=function(t,e){function r(n){return m(function(t,u){if(t)e.apply(null,[t].concat(u));else{var i=n.next();i?u.push(r(i)):u.push(e),z(n).apply(null,u)}})}if(e=i(e||n),!M(t)){var u=new Error("First argument to waterfall must be an array of functions");return e(u)}return t.length?void r(P.iterator(t))():e()},P.parallel=function(n,t){L(P.eachOf,n,t)},P.parallelLimit=function(n,t,e){L(v(t),n,e)},P.series=function(n,t){L(P.eachOfSeries,n,t)},P.iterator=function(n){function t(e){function r(){return n.length&&n[e].apply(null,arguments),r.next()}return r.next=function(){return e<n.length-1?t(e+1):null},r}return t(0)},P.apply=m(function(n,t){return m(function(e){return n.apply(null,t.concat(e))})}),P.concat=d(j),P.concatSeries=k(j),P.whilst=function(t,e,r){if(r=r||n,t()){var u=m(function(n,i){n?r(n):t.apply(this,i)?e(u):r.apply(null,[null].concat(i))});e(u)}else r(null)},P.doWhilst=function(n,t,e){var r=0;return P.whilst(function(){return++r<=1||t.apply(this,arguments)},n,e)},P.until=function(n,t,e){return P.whilst(function(){return!n.apply(this,arguments)},t,e)},P.doUntil=function(n,t,e){return P.doWhilst(n,function(){return!t.apply(this,arguments)},e)},P.during=function(t,e,r){r=r||n;var u=m(function(n,e){n?r(n):(e.push(i),t.apply(this,e))}),i=function(n,t){n?r(n):t?e(u):r(null)};t(i)},P.doDuring=function(n,t,e){var r=0;P.during(function(n){r++<1?n(null,!0):t.apply(this,arguments)},n,e)},P.queue=function(n,t){var e=I(function(t,e){n(t[0],e)},t,1);return e},P.priorityQueue=function(t,e){function r(n,t){return n.priority-t.priority}function u(n,t,e){for(var r=-1,u=n.length-1;u>r;){var i=r+(u-r+1>>>1);e(t,n[i])>=0?r=i:u=i-1}return r}function i(t,e,i,o){if(null!=o&&"function"!=typeof o)throw new Error("task callback must be a function");return t.started=!0,M(e)||(e=[e]),0===e.length?P.setImmediate(function(){t.drain()}):void c(e,function(e){var c={data:e,priority:i,callback:"function"==typeof o?o:n};t.tasks.splice(u(t.tasks,c,r)+1,0,c),t.tasks.length===t.concurrency&&t.saturated(),P.setImmediate(t.process)})}var o=P.queue(t,e);return o.push=function(n,t,e){i(o,n,t,e)},delete o.unshift,o},P.cargo=function(n,t){return I(n,1,t)},P.log=x("log"),P.dir=x("dir"),P.memoize=function(n,e){var r={},u={},i=Object.prototype.hasOwnProperty;e=e||t;var o=m(function(t){var o=t.pop(),c=e.apply(null,t);i.call(r,c)?P.setImmediate(function(){o.apply(null,r[c])}):i.call(u,c)?u[c].push(o):(u[c]=[o],n.apply(null,t.concat([m(function(n){r[c]=n;var t=u[c];delete u[c];for(var e=0,i=t.length;i>e;e++)t[e].apply(null,n)})])))});return o.memo=r,o.unmemoized=n,o},P.unmemoize=function(n){return function(){return(n.unmemoized||n).apply(null,arguments)}},P.times=A(P.map),P.timesSeries=A(P.mapSeries),P.timesLimit=function(n,t,e,r){return P.mapLimit(f(n),t,e,r)},P.seq=function(){var t=arguments;return m(function(e){var r=this,u=e[e.length-1];"function"==typeof u?e.pop():u=n,P.reduce(t,e,function(n,t,e){t.apply(r,n.concat([m(function(n,t){e(n,t)})]))},function(n,t){u.apply(r,[n].concat(t))})})},P.compose=function(){return P.seq.apply(null,Array.prototype.reverse.call(arguments))},P.applyEach=T(P.eachOf),P.applyEachSeries=T(P.eachOfSeries),P.forever=function(t,e){function r(n){return n?i(n):void o(r)}var i=u(e||n),o=z(t);r()},P.ensureAsync=z,P.constant=m(function(n){var t=[null].concat(n);return function(n){return n.apply(this,t)}}),P.wrapSync=P.asyncify=function(n){return m(function(t){var e,r=t.pop();try{e=n.apply(this,t)}catch(u){return r(u)}U(e)&&"function"==typeof e.then?e.then(function(n){r(null,n)})["catch"](function(n){r(n.message?n:new Error(n))}):r(null,e)})},"object"==typeof module&&module.exports?module.exports=P:"function"==typeof define&&define.amd?define([],function(){return P}):C.async=P}();
+//# sourceMappingURL=dist/async.min.map \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.map
new file mode 100644
index 00000000000..1e23922cd55
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/dist/async.min.map
@@ -0,0 +1 @@
+{"version":3,"file":"dist/async.min.js","sources":["dist/async.js"],"names":["noop","identity","v","toBool","notId","only_once","fn","Error","apply","this","arguments","_once","_isArrayLike","arr","_isArray","length","_arrayEach","iterator","index","_map","result","Array","_range","count","i","_reduce","memo","x","a","_forEachOf","object","_keys","key","_indexOf","item","_keyIterator","coll","len","keys","_restParam","func","startIndex","Math","max","rest","call","_withoutIndex","value","callback","_eachOfLimit","limit","obj","nextKey","done","running","errored","replenish","err","doParallel","async","eachOf","doParallelLimit","doSeries","eachOfSeries","_asyncMap","eachfn","results","_filter","push","sort","b","_reject","cb","_createTester","check","getResult","iteratee","_","_findGetResult","_parallel","tasks","task","args","_concat","y","concat","_queue","worker","concurrency","payload","_insert","q","data","pos","started","idle","setImmediate","drain","unshift","saturated","process","_next","workers","removed","workersList","splice","empty","paused","kill","pause","resume","resumeCount","min","w","_console_fn","name","console","error","_times","mapper","_applyEach","fns","go","that","pop","ensureAsync","innerArgs","sync","previous_async","root","self","global","noConflict","_toString","Object","prototype","toString","isArray","_isObject","type","k","hasOwnProperty","_setImmediate","_delay","setTimeout","nextTick","forEach","each","forEachSeries","eachSeries","forEachLimit","eachLimit","forEachOf","completed","iter","forEachOfSeries","iterate","forEachOfLimit","eachOfLimit","map","mapSeries","mapLimit","inject","foldl","reduce","foldr","reduceRight","reversed","reverse","transform","select","filter","selectLimit","filterLimit","selectSeries","filterSeries","reject","rejectLimit","rejectSeries","any","some","someLimit","all","every","everyLimit","detect","detectSeries","detectLimit","sortBy","comparator","left","right","criteria","auto","addListener","listeners","removeListener","idx","taskComplete","remainingTasks","slice","runningTasks","hasError","ready","requires","listener","taskCallback","dep","safeResults","val","rkey","join","retry","times","parseTimes","acc","t","parseInt","DEFAULT_TIMES","interval","DEFAULT_INTERVAL","wrappedTask","wrappedCallback","wrappedResults","retryAttempt","finalAttempt","seriesCallback","retryInterval","opts","attempts","series","waterfall","wrapIterator","next","parallel","parallelLimit","makeCallback","callArgs","concatSeries","whilst","test","doWhilst","calls","until","doUntil","during","truth","doDuring","queue","items","priorityQueue","_compareTasks","priority","_binarySearch","sequence","compare","beg","end","mid","cargo","log","dir","memoize","hasher","queues","has","memoized","l","unmemoized","unmemoize","timesSeries","timesLimit","seq","newargs","nextargs","compose","applyEach","applyEachSeries","forever","constant","values","wrapSync","asyncify","e","then","message","module","exports","define","amd"],"mappings":"CAOC,WAGG,QAASA,MACT,QAASC,GAASC,GACd,MAAOA,GAEX,QAASC,GAAOD,GACZ,QAASA,EAEb,QAASE,GAAMF,GACX,OAAQA,EAsBZ,QAASG,GAAUC,GACf,MAAO,YACH,GAAW,OAAPA,EAAa,KAAM,IAAIC,OAAM,+BACjCD,GAAGE,MAAMC,KAAMC,WACfJ,EAAK,MAIb,QAASK,GAAML,GACX,MAAO,YACQ,OAAPA,IACJA,EAAGE,MAAMC,KAAMC,WACfJ,EAAK,OAkBb,QAASM,GAAaC,GAClB,MAAOC,GAASD,IAEU,gBAAfA,GAAIE,QACXF,EAAIE,QAAU,GACdF,EAAIE,OAAS,IAAM,EAI3B,QAASC,GAAWH,EAAKI,GAIrB,IAHA,GAAIC,GAAQ,GACRH,EAASF,EAAIE,SAERG,EAAQH,GACbE,EAASJ,EAAIK,GAAQA,EAAOL,GAIpC,QAASM,GAAKN,EAAKI,GAKf,IAJA,GAAIC,GAAQ,GACRH,EAASF,EAAIE,OACbK,EAASC,MAAMN,KAEVG,EAAQH,GACbK,EAAOF,GAASD,EAASJ,EAAIK,GAAQA,EAAOL,EAEhD,OAAOO,GAGX,QAASE,GAAOC,GACZ,MAAOJ,GAAKE,MAAME,GAAQ,SAAUrB,EAAGsB,GAAK,MAAOA,KAGvD,QAASC,GAAQZ,EAAKI,EAAUS,GAI5B,MAHAV,GAAWH,EAAK,SAAUc,EAAGH,EAAGI,GAC5BF,EAAOT,EAASS,EAAMC,EAAGH,EAAGI,KAEzBF,EAGX,QAASG,GAAWC,EAAQb,GACxBD,EAAWe,EAAMD,GAAS,SAAUE,GAChCf,EAASa,EAAOE,GAAMA,KAI9B,QAASC,GAASpB,EAAKqB,GACnB,IAAK,GAAIV,GAAI,EAAGA,EAAIX,EAAIE,OAAQS,IAC5B,GAAIX,EAAIW,KAAOU,EAAM,MAAOV,EAEhC,OAAO,GAaX,QAASW,GAAaC,GAClB,GACIC,GACAC,EAFAd,EAAI,EAGR,OAAIZ,GAAawB,IACbC,EAAMD,EAAKrB,OACJ,WAEH,MADAS,KACWa,EAAJb,EAAUA,EAAI,QAGzBc,EAAOP,EAAMK,GACbC,EAAMC,EAAKvB,OACJ,WAEH,MADAS,KACWa,EAAJb,EAAUc,EAAKd,GAAK,OAQvC,QAASe,GAAWC,EAAMC,GAEtB,MADAA,GAA2B,MAAdA,EAAqBD,EAAKzB,OAAS,GAAK0B,EAC9C,WAGH,IAAK,GAFD1B,GAAS2B,KAAKC,IAAIjC,UAAUK,OAAS0B,EAAY,GACjDG,EAAOvB,MAAMN,GACRG,EAAQ,EAAWH,EAARG,EAAgBA,IAChC0B,EAAK1B,GAASR,UAAUQ,EAAQuB,EAEpC,QAAQA,GACJ,IAAK,GAAG,MAAOD,GAAKK,KAAKpC,KAAMmC,EAC/B,KAAK,GAAG,MAAOJ,GAAKK,KAAKpC,KAAMC,UAAU,GAAIkC,KAYzD,QAASE,GAAc7B,GACnB,MAAO,UAAU8B,EAAO7B,EAAO8B,GAC3B,MAAO/B,GAAS8B,EAAOC,IA8G/B,QAASC,GAAaC,GAElB,MAAO,UAAUC,EAAKlC,EAAU+B,GAC5BA,EAAWrC,EAAMqC,GAAYhD,GAC7BmD,EAAMA,KACN,IAAIC,GAAUjB,EAAagB,EAC3B,IAAa,GAATD,EACA,MAAOF,GAAS,KAEpB,IAAIK,IAAO,EACPC,EAAU,EACVC,GAAU,GAEd,QAAUC,KACN,GAAIH,GAAmB,GAAXC,EACR,MAAON,GAAS,KAGpB,MAAiBE,EAAVI,IAAoBC,GAAS,CAChC,GAAIvB,GAAMoB,GACV,IAAY,OAARpB,EAKA,MAJAqB,IAAO,OACQ,GAAXC,GACAN,EAAS,MAIjBM,IAAW,EACXrC,EAASkC,EAAInB,GAAMA,EAAK3B,EAAU,SAAUoD,GACxCH,GAAW,EACPG,GACAT,EAASS,GACTF,GAAU,GAGVC,YASxB,QAASE,GAAWpD,GAChB,MAAO,UAAU6C,EAAKlC,EAAU+B,GAC5B,MAAO1C,GAAGqD,EAAMC,OAAQT,EAAKlC,EAAU+B,IAG/C,QAASa,GAAgBvD,GACrB,MAAO,UAAU6C,EAAKD,EAAOjC,EAAU+B,GACnC,MAAO1C,GAAG2C,EAAaC,GAAQC,EAAKlC,EAAU+B,IAGtD,QAASc,GAASxD,GACd,MAAO,UAAU6C,EAAKlC,EAAU+B,GAC5B,MAAO1C,GAAGqD,EAAMI,aAAcZ,EAAKlC,EAAU+B,IAIrD,QAASgB,GAAUC,EAAQpD,EAAKI,EAAU+B,GACtCA,EAAWrC,EAAMqC,GAAYhD,GAC7Ba,EAAMA,KACN,IAAIqD,GAAUtD,EAAaC,QAC3BoD,GAAOpD,EAAK,SAAUkC,EAAO7B,EAAO8B,GAChC/B,EAAS8B,EAAO,SAAUU,EAAKvD,GAC3BgE,EAAQhD,GAAShB,EACjB8C,EAASS,MAEd,SAAUA,GACTT,EAASS,EAAKS,KA2CtB,QAASC,GAAQF,EAAQpD,EAAKI,EAAU+B,GACpC,GAAIkB,KACJD,GAAOpD,EAAK,SAAUc,EAAGT,EAAO8B,GAC5B/B,EAASU,EAAG,SAAUzB,GACdA,GACAgE,EAAQE,MAAMlD,MAAOA,EAAO6B,MAAOpB,IAEvCqB,OAEL,WACCA,EAAS7B,EAAK+C,EAAQG,KAAK,SAAUzC,EAAG0C,GACpC,MAAO1C,GAAEV,MAAQoD,EAAEpD,QACnB,SAAUS,GACV,MAAOA,GAAEoB,WAcrB,QAASwB,GAAQN,EAAQpD,EAAKI,EAAU+B,GACpCmB,EAAQF,EAAQpD,EAAK,SAASkC,EAAOyB,GACjCvD,EAAS8B,EAAO,SAAS7C,GACrBsE,GAAItE,MAET8C,GAMP,QAASyB,GAAcR,EAAQS,EAAOC,GAClC,MAAO,UAAS9D,EAAKqC,EAAOjC,EAAUuD,GAClC,QAASnB,KACDmB,GAAIA,EAAGG,GAAU,EAAO,SAEhC,QAASC,GAASjD,EAAGkD,EAAG7B,GACpB,MAAKwB,OACLvD,GAASU,EAAG,SAAUzB,GACdsE,GAAME,EAAMxE,KACZsE,EAAGG,GAAU,EAAMhD,IACnB6C,EAAKvD,GAAW,GAEpB+B,MANYA,IAShBtC,UAAUK,OAAS,EACnBkD,EAAOpD,EAAKqC,EAAO0B,EAAUvB,IAE7BmB,EAAKvD,EACLA,EAAWiC,EACXe,EAAOpD,EAAK+D,EAAUvB,KAelC,QAASyB,GAAe5E,EAAGyB,GACvB,MAAOA,GA2OX,QAASoD,GAAUd,EAAQe,EAAOhC,GAC9BA,EAAWA,GAAYhD,CACvB,IAAIkE,GAAUtD,EAAaoE,QAE3Bf,GAAOe,EAAO,SAAUC,EAAMjD,EAAKgB,GAC/BiC,EAAK1C,EAAW,SAAUkB,EAAKyB,GACvBA,EAAKnE,QAAU,IACfmE,EAAOA,EAAK,IAEhBhB,EAAQlC,GAAOkD,EACflC,EAASS,OAEd,SAAUA,GACTT,EAASS,EAAKS,KAwCtB,QAASiB,GAAQlB,EAAQpD,EAAKP,EAAI0C,GAC9B,GAAI5B,KACJ6C,GAAOpD,EAAK,SAAUc,EAAGT,EAAOsD,GAC5BlE,EAAGqB,EAAG,SAAU8B,EAAK2B,GACjBhE,EAASA,EAAOiE,OAAOD,OACvBZ,EAAGf,MAER,SAAUA,GACTT,EAASS,EAAKrC,KA+EtB,QAASkE,GAAOC,EAAQC,EAAaC,GAOjC,QAASC,GAAQC,EAAGC,EAAMC,EAAK7C,GAC3B,GAAgB,MAAZA,GAAwC,kBAAbA,GAC3B,KAAM,IAAIzC,OAAM,mCAMpB,OAJAoF,GAAEG,SAAU,EACPhF,EAAS8E,KACVA,GAAQA,IAEO,IAAhBA,EAAK7E,QAAgB4E,EAAEI,OAEfpC,EAAMqC,aAAa,WACtBL,EAAEM,WAGVjF,EAAW4E,EAAM,SAASX,GACtB,GAAI/C,IACA0D,KAAMX,EACNjC,SAAUA,GAAYhD,EAGtB6F,GACAF,EAAEX,MAAMkB,QAAQhE,GAEhByD,EAAEX,MAAMZ,KAAKlC,GAGbyD,EAAEX,MAAMjE,SAAW4E,EAAEH,aACrBG,EAAEQ,kBAGVxC,GAAMqC,aAAaL,EAAES,UAEzB,QAASC,GAAMV,EAAGX,GACd,MAAO,YACHsB,GAAW,CAEX,IAAIC,IAAU,EACVrB,EAAOxE,SACXM,GAAWgE,EAAO,SAAUC,GACxBjE,EAAWwF,EAAa,SAAUjB,EAAQrE,GAClCqE,IAAWN,GAASsB,IACpBC,EAAYC,OAAOvF,EAAO,GAC1BqF,GAAU,KAIlBtB,EAAKjC,SAASxC,MAAMyE,EAAMC,KAE1BS,EAAEX,MAAMjE,OAASuF,IAAY,GAC7BX,EAAEM,QAENN,EAAES,WAzDV,GAAmB,MAAfZ,EACAA,EAAc,MAEb,IAAmB,IAAhBA,EACJ,KAAM,IAAIjF,OAAM,+BAyDpB,IAAI+F,GAAU,EACVE,KACAb,GACAX,SACAQ,YAAaA,EACbC,QAASA,EACTU,UAAWnG,EACX0G,MAAO1G,EACPiG,MAAOjG,EACP8F,SAAS,EACTa,QAAQ,EACRvC,KAAM,SAAUwB,EAAM5C,GAClB0C,EAAQC,EAAGC,GAAM,EAAO5C,IAE5B4D,KAAM,WACFjB,EAAEM,MAAQjG,EACV2F,EAAEX,UAENkB,QAAS,SAAUN,EAAM5C,GACrB0C,EAAQC,EAAGC,GAAM,EAAM5C,IAE3BoD,QAAS,WACL,MAAOT,EAAEgB,QAAUL,EAAUX,EAAEH,aAAeG,EAAEX,MAAMjE,QAAO,CAEzD,GAAIiE,GAAQW,EAAEF,QACVE,EAAEX,MAAMyB,OAAO,EAAGd,EAAEF,SACpBE,EAAEX,MAAMyB,OAAO,EAAGd,EAAEX,MAAMjE,QAE1B6E,EAAOzE,EAAK6D,EAAO,SAAUC,GAC7B,MAAOA,GAAKW,MAGO,KAAnBD,EAAEX,MAAMjE,QACR4E,EAAEe,QAENJ,GAAW,EACXE,EAAYpC,KAAKY,EAAM,GACvB,IAAIR,GAAKnE,EAAUgG,EAAMV,EAAGX,GAC5BO,GAAOK,EAAMpB,KAGrBzD,OAAQ,WACJ,MAAO4E,GAAEX,MAAMjE,QAEnBuC,QAAS,WACL,MAAOgD,IAEXE,YAAa,WACT,MAAOA,IAEXT,KAAM,WACF,MAAOJ,GAAEX,MAAMjE,OAASuF,IAAY,GAExCO,MAAO,WACHlB,EAAEgB,QAAS,GAEfG,OAAQ,WACJ,GAAInB,EAAEgB,UAAW,EAAjB,CACAhB,EAAEgB,QAAS,CAIX,KAAK,GAHDI,GAAcrE,KAAKsE,IAAIrB,EAAEH,YAAaG,EAAEX,MAAMjE,QAGzCkG,EAAI,EAAQF,GAALE,EAAkBA,IAC9BtD,EAAMqC,aAAaL,EAAES,WAIjC,OAAOT,GA+EX,QAASuB,GAAYC,GACjB,MAAO5E,GAAW,SAAUjC,EAAI4E,GAC5B5E,EAAGE,MAAM,KAAM0E,EAAKG,QAAQ9C,EAAW,SAAUkB,EAAKyB,GAC3B,gBAAZkC,WACH3D,EACI2D,QAAQC,OACRD,QAAQC,MAAM5D,GAGb2D,QAAQD,IACbnG,EAAWkE,EAAM,SAAUvD,GACvByF,QAAQD,GAAMxF,aAoDtC,QAAS2F,GAAOC,GACZ,MAAO,UAAUhG,EAAON,EAAU+B,GAC9BuE,EAAOjG,EAAOC,GAAQN,EAAU+B,IAsCxC,QAASwE,GAAWvD,GAChB,MAAO1B,GAAW,SAASkF,EAAKvC,GAC5B,GAAIwC,GAAKnF,EAAW,SAAS2C,GACzB,GAAIyC,GAAOlH,KACPuC,EAAWkC,EAAK0C,KACpB,OAAO3D,GAAOwD,EAAK,SAAUnH,EAAIuE,EAAGL,GAChClE,EAAGE,MAAMmH,EAAMzC,EAAKG,QAAQb,MAEhCxB,IAEJ,OAAIkC,GAAKnE,OACE2G,EAAGlH,MAAMC,KAAMyE,GAGfwC,IAqBnB,QAASG,GAAYvH,GACjB,MAAOiC,GAAW,SAAU2C,GACxB,GAAIlC,GAAWkC,EAAK0C,KACpB1C,GAAKd,KAAK,WACN,GAAI0D,GAAYpH,SACZqH,GACApE,EAAMqC,aAAa,WACfhD,EAASxC,MAAM,KAAMsH,KAGzB9E,EAASxC,MAAM,KAAMsH,IAG7B,IAAIC,IAAO,CACXzH,GAAGE,MAAMC,KAAMyE,GACf6C,GAAO,IAprCf,GAaIC,GAbArE,KAkBAsE,EAAuB,gBAATC,OAAqBA,KAAKA,OAASA,MAAQA,MACnC,gBAAXC,SAAuBA,OAAOA,SAAWA,QAAUA,QAC1D1H,IAEI,OAARwH,IACAD,EAAiBC,EAAKtE,OAG1BA,EAAMyE,WAAa,WAEf,MADAH,GAAKtE,MAAQqE,EACNrE,EAqBX,IAAI0E,GAAYC,OAAOC,UAAUC,SAE7B1H,EAAWO,MAAMoH,SAAW,SAAUtF,GACtC,MAA+B,mBAAxBkF,EAAUxF,KAAKM,IAItBuF,EAAY,SAASvF,GACrB,GAAIwF,SAAcxF,EAClB,OAAgB,aAATwF,GAAgC,WAATA,KAAuBxF,GAwDrDpB,EAAQuG,OAAOhG,MAAQ,SAAUa,GACjC,GAAIb,KACJ,KAAK,GAAIsG,KAAKzF,GACNA,EAAI0F,eAAeD,IACnBtG,EAAK8B,KAAKwE,EAGlB,OAAOtG,IA2DPwG,EAAwC,kBAAjB9C,eAA+BA,aAEtD+C,EAASD,EAAgB,SAASxI,GAElCwI,EAAcxI,IACd,SAASA,GACT0I,WAAW1I,EAAI,GAGI,iBAAZ8F,UAAoD,kBAArBA,SAAQ6C,SAC9CtF,EAAMsF,SAAW7C,QAAQ6C,SAEzBtF,EAAMsF,SAAWF,EAErBpF,EAAMqC,aAAe8C,EAAgBC,EAASpF,EAAMsF,SAGpDtF,EAAMuF,QACNvF,EAAMwF,KAAO,SAAUtI,EAAKI,EAAU+B,GAClC,MAAOW,GAAMC,OAAO/C,EAAKiC,EAAc7B,GAAW+B,IAGtDW,EAAMyF,cACNzF,EAAM0F,WAAa,SAAUxI,EAAKI,EAAU+B,GACxC,MAAOW,GAAMI,aAAalD,EAAKiC,EAAc7B,GAAW+B,IAI5DW,EAAM2F,aACN3F,EAAM4F,UAAY,SAAU1I,EAAKqC,EAAOjC,EAAU+B,GAC9C,MAAOC,GAAaC,GAAOrC,EAAKiC,EAAc7B,GAAW+B,IAG7DW,EAAM6F,UACN7F,EAAMC,OAAS,SAAU9B,EAAQb,EAAU+B,GAcvC,QAASK,GAAKI,GACVgG,IACIhG,EACAT,EAASS,GAII,OAARzB,GAA6B,GAAbyH,GACrBzG,EAAS,MArBjBA,EAAWrC,EAAMqC,GAAYhD,GAC7B8B,EAASA,KAKT,KAHA,GACIE,GADA0H,EAAOvH,EAAaL,GACf2H,EAAY,EAEI,OAAjBzH,EAAM0H,MACVD,GAAa,EACbxI,EAASa,EAAOE,GAAMA,EAAK3B,EAAUgD,GAGvB,KAAdoG,GAAiBzG,EAAS,OAelCW,EAAMgG,gBACNhG,EAAMI,aAAe,SAAUZ,EAAKlC,EAAU+B,GAK1C,QAAS4G,KACL,GAAI7B,IAAO,CACX,OAAY,QAAR/F,EACOgB,EAAS,OAEpB/B,EAASkC,EAAInB,GAAMA,EAAK3B,EAAU,SAAUoD,GACxC,GAAIA,EACAT,EAASS,OAER,CAED,GADAzB,EAAMoB,IACM,OAARpB,EACA,MAAOgB,GAAS,KAEZ+E,GACApE,EAAMqC,aAAa4D,GAEnBA,aAKhB7B,GAAO,IA1BX/E,EAAWrC,EAAMqC,GAAYhD,GAC7BmD,EAAMA,KACN,IAAIC,GAAUjB,EAAagB,GACvBnB,EAAMoB,GAyBVwG,MAKJjG,EAAMkG,eACNlG,EAAMmG,YAAc,SAAU3G,EAAKD,EAAOjC,EAAU+B,GAChDC,EAAaC,GAAOC,EAAKlC,EAAU+B,IA6EvCW,EAAMoG,IAAMrG,EAAWM,GACvBL,EAAMqG,UAAYlG,EAASE,GAC3BL,EAAMsG,SAAWpG,EAAgBG,GAIjCL,EAAMuG,OACNvG,EAAMwG,MACNxG,EAAMyG,OAAS,SAAUvJ,EAAKa,EAAMT,EAAU+B,GAC1CW,EAAMI,aAAalD,EAAK,SAAUc,EAAGH,EAAGwB,GACpC/B,EAASS,EAAMC,EAAG,SAAU8B,EAAKvD,GAC7BwB,EAAOxB,EACP8C,EAASS,MAEd,SAAUA,GACTT,EAASS,EAAK/B,MAItBiC,EAAM0G,MACN1G,EAAM2G,YAAc,SAAUzJ,EAAKa,EAAMT,EAAU+B,GAC/C,GAAIuH,GAAWpJ,EAAKN,EAAKZ,GAAUuK,SACnC7G,GAAMyG,OAAOG,EAAU7I,EAAMT,EAAU+B,IAG3CW,EAAM8G,UAAY,SAAU5J,EAAKa,EAAMT,EAAU+B,GACpB,IAArBtC,UAAUK,SACViC,EAAW/B,EACXA,EAAWS,EACXA,EAAOZ,EAASD,UAGpB8C,EAAMC,OAAO/C,EAAK,SAASX,EAAG0I,EAAGpE,GAC7BvD,EAASS,EAAMxB,EAAG0I,EAAGpE,IACtB,SAASf,GACRT,EAASS,EAAK/B,MAsBtBiC,EAAM+G,OACN/G,EAAMgH,OAASjH,EAAWS,GAE1BR,EAAMiH,YACNjH,EAAMkH,YAAchH,EAAgBM,GAEpCR,EAAMmH,aACNnH,EAAMoH,aAAejH,EAASK,GAS9BR,EAAMqH,OAAStH,EAAWa,GAC1BZ,EAAMsH,YAAcpH,EAAgBU,GACpCZ,EAAMuH,aAAepH,EAASS,GA2B9BZ,EAAMwH,IACNxH,EAAMyH,KAAO3G,EAAcd,EAAMC,OAAQzD,EAAQF,GAEjD0D,EAAM0H,UAAY5G,EAAcd,EAAMmG,YAAa3J,EAAQF,GAE3D0D,EAAM2H,IACN3H,EAAM4H,MAAQ9G,EAAcd,EAAMC,OAAQxD,EAAOA,GAEjDuD,EAAM6H,WAAa/G,EAAcd,EAAMmG,YAAa1J,EAAOA,GAK3DuD,EAAM8H,OAAShH,EAAcd,EAAMC,OAAQ3D,EAAU6E,GACrDnB,EAAM+H,aAAejH,EAAcd,EAAMI,aAAc9D,EAAU6E,GACjEnB,EAAMgI,YAAclH,EAAcd,EAAMmG,YAAa7J,EAAU6E,GAE/DnB,EAAMiI,OAAS,SAAU/K,EAAKI,EAAU+B,GAsBpC,QAAS6I,GAAWC,EAAMC,GACtB,GAAInK,GAAIkK,EAAKE,SAAU1H,EAAIyH,EAAMC,QACjC,OAAW1H,GAAJ1C,EAAQ,GAAKA,EAAI0C,EAAI,EAAI,EAvBpCX,EAAMoG,IAAIlJ,EAAK,SAAUc,EAAGqB,GACxB/B,EAASU,EAAG,SAAU8B,EAAKuI,GACnBvI,EACAT,EAASS,GAGTT,EAAS,MAAOD,MAAOpB,EAAGqK,SAAUA,OAG7C,SAAUvI,EAAKS,GACd,MAAIT,GACOT,EAASS,OAGhBT,GAAS,KAAM7B,EAAK+C,EAAQG,KAAKwH,GAAa,SAAUlK,GACpD,MAAOA,GAAEoB,YAYzBY,EAAMsI,KAAO,SAAUjH,EAAOQ,EAAaxC,GAsBvC,QAASkJ,GAAY5L,GACjB6L,EAAUjG,QAAQ5F,GAEtB,QAAS8L,GAAe9L,GACpB,GAAI+L,GAAMpK,EAASkK,EAAW7L,EAC1B+L,IAAO,GAAGF,EAAU1F,OAAO4F,EAAK,GAExC,QAASC,KACLC,IACAvL,EAAWmL,EAAUK,MAAM,GAAI,SAAUlM,GACrCA,MA/BoB,kBAAjBI,WAAU,KAEjBsC,EAAWwC,EACXA,EAAc,MAElBxC,EAAWrC,EAAMqC,GAAYhD,EAC7B,IAAIsC,GAAOP,EAAMiD,GACbuH,EAAiBjK,EAAKvB,MAC1B,KAAKwL,EACD,MAAOvJ,GAAS,KAEfwC,KACDA,EAAc+G,EAGlB,IAAIrI,MACAuI,EAAe,EAEfC,GAAW,EAEXP,IAeJD,GAAY,WACHK,GACDvJ,EAAS,KAAMkB,KAIvBlD,EAAWsB,EAAM,SAAUsG,GAmCvB,QAAS+D,KACL,MAAsBnH,GAAfiH,GAA8BhL,EAAQmL,EAAU,SAAUhL,EAAGD,GAChE,MAAQC,IAAKsC,EAAQ2E,eAAelH,KACrC,KAAUuC,EAAQ2E,eAAeD,GASxC,QAASiE,KACDF,MACAF,IACAL,EAAeS,GACf5H,EAAKA,EAAKlE,OAAS,GAAG+L,EAAc5I,IAlD5C,IAAIwI,EAAJ,CA0BA,IAzBA,GAwBIK,GAxBA9H,EAAOnE,EAASkE,EAAM4D,IAAM5D,EAAM4D,IAAK5D,EAAM4D,IAC7CkE,EAAevK,EAAW,SAASkB,EAAKyB,GAKxC,GAJAuH,IACIvH,EAAKnE,QAAU,IACfmE,EAAOA,EAAK,IAEZzB,EAAK,CACL,GAAIuJ,KACJnL,GAAWqC,EAAS,SAAS+I,EAAKC,GAC9BF,EAAYE,GAAQD,IAExBD,EAAYpE,GAAK1D,EACjBwH,GAAW,EAEX1J,EAASS,EAAKuJ,OAGd9I,GAAQ0E,GAAK1D,EACbvB,EAAMqC,aAAasG,KAGvBM,EAAW3H,EAAKuH,MAAM,EAAGvH,EAAKlE,OAAS,GAEvCsB,EAAMuK,EAAS7L,OAEZsB,KAAO,CACV,KAAM0K,EAAM/H,EAAM4H,EAASvK,KACvB,KAAM,IAAI9B,OAAM,iCAAmCqM,EAASO,KAAK,MAErE,IAAIrM,EAASiM,IAAQ9K,EAAS8K,EAAKnE,IAAM,EACrC,KAAM,IAAIrI,OAAM,2BAQpBoM,KACAF,IACAxH,EAAKA,EAAKlE,OAAS,GAAG+L,EAAc5I,IAGpCgI,EAAYW,OAcxBlJ,EAAMyJ,MAAQ,SAASC,EAAOpI,EAAMjC,GAWhC,QAASsK,GAAWC,EAAKC,GACrB,GAAgB,gBAANA,GACND,EAAIF,MAAQI,SAASD,EAAG,KAAOE,MAC5B,CAAA,GAAgB,gBAANF,GAIb,KAAM,IAAIjN,OAAM,gDAAqDiN,GAHrED,GAAIF,MAAQI,SAASD,EAAEH,MAAO,KAAOK,EACrCH,EAAII,SAAWF,SAASD,EAAEG,SAAU,KAAOC,GAmBnD,QAASC,GAAYC,EAAiBC,GAClC,QAASC,GAAa/I,EAAMgJ,GACxB,MAAO,UAASC,GACZjJ,EAAK,SAASxB,EAAKrC,GACf8M,GAAgBzK,GAAOwK,GAAexK,IAAKA,EAAKrC,OAAQA,KACzD2M,IAIX,QAASI,GAAcR,GACnB,MAAO,UAASO,GACZlF,WAAW,WACPkF,EAAe,OAChBP,IAIX,KAAOS,EAAKf,OAAO,CAEf,GAAIY,KAAiBG,EAAKf,OAAO,EACjCgB,GAASjK,KAAK4J,EAAaI,EAAKnJ,KAAMgJ,KAClCA,GAAgBG,EAAKT,SAAW,GAChCU,EAASjK,KAAK+J,EAAcC,EAAKT,WAIzChK,EAAM2K,OAAOD,EAAU,SAAShL,EAAMuC,GAClCA,EAAOA,EAAKA,EAAK7E,OAAS,IACzB+M,GAAmBM,EAAKpL,UAAU4C,EAAKnC,IAAKmC,EAAKxE,UA9D1D,GAAIsM,GAAgB,EAChBE,EAAmB,EAEnBS,KAEAD,GACAf,MAAOK,EACPC,SAAUC,GAcV7M,EAASL,UAAUK,MACvB,IAAa,EAATA,GAAcA,EAAS,EACvB,KAAM,IAAIR,OAAM,wGA4CpB,OA3CqB,IAAVQ,GAAgC,kBAAVsM,KAC7BrK,EAAWiC,EACXA,EAAOoI,GAEU,kBAAVA,IACPC,EAAWc,EAAMf,GAErBe,EAAKpL,SAAWA,EAChBoL,EAAKnJ,KAAOA,EAmCLmJ,EAAKpL,SAAW6K,IAAgBA,GAG3ClK,EAAM4K,UAAY,SAAUvJ,EAAOhC,GAS/B,QAASwL,GAAavN,GAClB,MAAOsB,GAAW,SAAUkB,EAAKyB,GAC7B,GAAIzB,EACAT,EAASxC,MAAM,MAAOiD,GAAK4B,OAAOH,QAEjC,CACD,GAAIuJ,GAAOxN,EAASwN,MAChBA,GACAvJ,EAAKd,KAAKoK,EAAaC,IAGvBvJ,EAAKd,KAAKpB,GAEd6E,EAAY5G,GAAUT,MAAM,KAAM0E,MApB9C,GADAlC,EAAWrC,EAAMqC,GAAYhD,IACxBc,EAASkE,GAAQ,CAClB,GAAIvB,GAAM,GAAIlD,OAAM,4DACpB,OAAOyC,GAASS,GAEpB,MAAKuB,GAAMjE,WAoBXyN,GAAa7K,EAAM1C,SAAS+D,MAnBjBhC,KAuCfW,EAAM+K,SAAW,SAAU1J,EAAOhC,GAC9B+B,EAAUpB,EAAMC,OAAQoB,EAAOhC,IAGnCW,EAAMgL,cAAgB,SAAS3J,EAAO9B,EAAOF,GACzC+B,EAAU9B,EAAaC,GAAQ8B,EAAOhC,IAG1CW,EAAM2K,OAAS,SAAStJ,EAAOhC,GAC3B+B,EAAUpB,EAAMI,aAAciB,EAAOhC,IAGzCW,EAAM1C,SAAW,SAAU+D,GACvB,QAAS4J,GAAa1N,GAClB,QAASZ,KAIL,MAHI0E,GAAMjE,QACNiE,EAAM9D,GAAOV,MAAM,KAAME,WAEtBJ,EAAGmO,OAKd,MAHAnO,GAAGmO,KAAO,WACN,MAAQvN,GAAQ8D,EAAMjE,OAAS,EAAK6N,EAAa1N,EAAQ,GAAI,MAE1DZ,EAEX,MAAOsO,GAAa,IAGxBjL,EAAMnD,MAAQ+B,EAAW,SAAUjC,EAAI4E,GACnC,MAAO3C,GAAW,SAAUsM,GACxB,MAAOvO,GAAGE,MACN,KAAM0E,EAAKG,OAAOwJ,QAgB9BlL,EAAM0B,OAAS3B,EAAWyB,GAC1BxB,EAAMmL,aAAehL,EAASqB,GAE9BxB,EAAMoL,OAAS,SAAUC,EAAM/N,EAAU+B,GAErC,GADAA,EAAWA,GAAYhD,EACnBgP,IAAQ,CACR,GAAIP,GAAOlM,EAAW,SAASkB,EAAKyB,GAC5BzB,EACAT,EAASS,GACFuL,EAAKxO,MAAMC,KAAMyE,GACxBjE,EAASwN,GAETzL,EAASxC,MAAM,MAAO,MAAM6E,OAAOH,KAG3CjE,GAASwN,OAETzL,GAAS,OAIjBW,EAAMsL,SAAW,SAAUhO,EAAU+N,EAAMhM,GACvC,GAAIkM,GAAQ,CACZ,OAAOvL,GAAMoL,OAAO,WAChB,QAASG,GAAS,GAAKF,EAAKxO,MAAMC,KAAMC,YACzCO,EAAU+B,IAGjBW,EAAMwL,MAAQ,SAAUH,EAAM/N,EAAU+B,GACpC,MAAOW,GAAMoL,OAAO,WAChB,OAAQC,EAAKxO,MAAMC,KAAMC,YAC1BO,EAAU+B,IAGjBW,EAAMyL,QAAU,SAAUnO,EAAU+N,EAAMhM,GACtC,MAAOW,GAAMsL,SAAShO,EAAU,WAC5B,OAAQ+N,EAAKxO,MAAMC,KAAMC,YAC1BsC,IAGPW,EAAM0L,OAAS,SAAUL,EAAM/N,EAAU+B,GACrCA,EAAWA,GAAYhD,CAEvB,IAAIyO,GAAOlM,EAAW,SAASkB,EAAKyB,GAC5BzB,EACAT,EAASS,IAETyB,EAAKd,KAAKM,GACVsK,EAAKxO,MAAMC,KAAMyE,MAIrBR,EAAQ,SAASjB,EAAK6L,GAClB7L,EACAT,EAASS,GACF6L,EACPrO,EAASwN,GAETzL,EAAS,MAIjBgM,GAAKtK,IAGTf,EAAM4L,SAAW,SAAUtO,EAAU+N,EAAMhM,GACvC,GAAIkM,GAAQ,CACZvL,GAAM0L,OAAO,SAASZ,GACdS,IAAU,EACVT,EAAK,MAAM,GAEXO,EAAKxO,MAAMC,KAAMC,YAEtBO,EAAU+B,IAuIjBW,EAAM6L,MAAQ,SAAUjK,EAAQC,GAC5B,GAAIG,GAAIL,EAAO,SAAUmK,EAAOjL,GAC5Be,EAAOkK,EAAM,GAAIjL,IAClBgB,EAAa,EAEhB,OAAOG,IAGXhC,EAAM+L,cAAgB,SAAUnK,EAAQC,GAEpC,QAASmK,GAAc/N,EAAG0C,GACtB,MAAO1C,GAAEgO,SAAWtL,EAAEsL,SAG1B,QAASC,GAAcC,EAAU5N,EAAM6N,GAGnC,IAFA,GAAIC,GAAM,GACNC,EAAMH,EAAS/O,OAAS,EACfkP,EAAND,GAAW,CACd,GAAIE,GAAMF,GAAQC,EAAMD,EAAM,IAAO,EACjCD,GAAQ7N,EAAM4N,EAASI,KAAS,EAChCF,EAAME,EAEND,EAAMC,EAAM,EAGpB,MAAOF,GAGX,QAAStK,GAAQC,EAAGC,EAAMgK,EAAU5M,GAChC,GAAgB,MAAZA,GAAwC,kBAAbA,GAC3B,KAAM,IAAIzC,OAAM,mCAMpB,OAJAoF,GAAEG,SAAU,EACPhF,EAAS8E,KACVA,GAAQA,IAEO,IAAhBA,EAAK7E,OAEG4C,EAAMqC,aAAa,WACtBL,EAAEM,cAGVjF,GAAW4E,EAAM,SAASX,GACtB,GAAI/C,IACA0D,KAAMX,EACN2K,SAAUA,EACV5M,SAA8B,kBAAbA,GAA0BA,EAAWhD,EAG1D2F,GAAEX,MAAMyB,OAAOoJ,EAAclK,EAAEX,MAAO9C,EAAMyN,GAAiB,EAAG,EAAGzN,GAE/DyD,EAAEX,MAAMjE,SAAW4E,EAAEH,aACrBG,EAAEQ,YAENxC,EAAMqC,aAAaL,EAAES,WAK7B,GAAIT,GAAIhC,EAAM6L,MAAMjK,EAAQC,EAU5B,OAPAG,GAAEvB,KAAO,SAAUwB,EAAMgK,EAAU5M,GAC/B0C,EAAQC,EAAGC,EAAMgK,EAAU5M,UAIxB2C,GAAEO,QAEFP,GAGXhC,EAAMwM,MAAQ,SAAU5K,EAAQE,GAC5B,MAAOH,GAAOC,EAAQ,EAAGE,IAqB7B9B,EAAMyM,IAAMlJ,EAAY,OACxBvD,EAAM0M,IAAMnJ,EAAY,OAKxBvD,EAAM2M,QAAU,SAAUhQ,EAAIiQ,GAC1B,GAAI7O,MACA8O,KACAC,EAAMnI,OAAOC,UAAUM,cAC3B0H,GAASA,GAAUtQ,CACnB,IAAIyQ,GAAWnO,EAAW,SAAkB2C,GACxC,GAAIlC,GAAWkC,EAAK0C,MAChB5F,EAAMuO,EAAO/P,MAAM,KAAM0E,EACzBuL,GAAI5N,KAAKnB,EAAMM,GACf2B,EAAMqC,aAAa,WACfhD,EAASxC,MAAM,KAAMkB,EAAKM,MAGzByO,EAAI5N,KAAK2N,EAAQxO,GACtBwO,EAAOxO,GAAKoC,KAAKpB,IAGjBwN,EAAOxO,IAAQgB,GACf1C,EAAGE,MAAM,KAAM0E,EAAKG,QAAQ9C,EAAW,SAAU2C,GAC7CxD,EAAKM,GAAOkD,CACZ,IAAIS,GAAI6K,EAAOxO,SACRwO,GAAOxO,EACd,KAAK,GAAIR,GAAI,EAAGmP,EAAIhL,EAAE5E,OAAY4P,EAAJnP,EAAOA,IACjCmE,EAAEnE,GAAGhB,MAAM,KAAM0E,UAOjC,OAFAwL,GAAShP,KAAOA,EAChBgP,EAASE,WAAatQ,EACfoQ,GAGX/M,EAAMkN,UAAY,SAAUvQ,GACxB,MAAO,YACH,OAAQA,EAAGsQ,YAActQ,GAAIE,MAAM,KAAME,aAUjDiD,EAAM0J,MAAQ/F,EAAO3D,EAAMoG,KAC3BpG,EAAMmN,YAAcxJ,EAAO3D,EAAMqG,WACjCrG,EAAMoN,WAAa,SAAUxP,EAAO2B,EAAOjC,EAAU+B,GACjD,MAAOW,GAAMsG,SAAS3I,EAAOC,GAAQ2B,EAAOjC,EAAU+B,IAG1DW,EAAMqN,IAAM,WACR,GAAIvJ,GAAM/G,SACV,OAAO6B,GAAW,SAAU2C,GACxB,GAAIyC,GAAOlH,KAEPuC,EAAWkC,EAAKA,EAAKnE,OAAS,EACX,mBAAZiC,GACPkC,EAAK0C,MAEL5E,EAAWhD,EAGf2D,EAAMyG,OAAO3C,EAAKvC,EAAM,SAAU+L,EAAS3Q,EAAIkE,GAC3ClE,EAAGE,MAAMmH,EAAMsJ,EAAQ5L,QAAQ9C,EAAW,SAAUkB,EAAKyN,GACrD1M,EAAGf,EAAKyN,SAGhB,SAAUzN,EAAKS,GACXlB,EAASxC,MAAMmH,GAAOlE,GAAK4B,OAAOnB,SAK9CP,EAAMwN,QAAU,WACZ,MAAOxN,GAAMqN,IAAIxQ,MAAM,KAAMa,MAAMkH,UAAUiC,QAAQ3H,KAAKnC,aAuB9DiD,EAAMyN,UAAY5J,EAAW7D,EAAMC,QACnCD,EAAM0N,gBAAkB7J,EAAW7D,EAAMI,cAGzCJ,EAAM2N,QAAU,SAAUhR,EAAI0C,GAG1B,QAASyL,GAAKhL,GACV,MAAIA,GACOJ,EAAKI,OAEhBwB,GAAKwJ,GANT,GAAIpL,GAAOhD,EAAU2C,GAAYhD,GAC7BiF,EAAO4C,EAAYvH,EAOvBmO,MAsBJ9K,EAAMkE,YAAcA,EAEpBlE,EAAM4N,SAAWhP,EAAW,SAASiP,GACjC,GAAItM,IAAQ,MAAMG,OAAOmM,EACzB,OAAO,UAAUxO,GACb,MAAOA,GAASxC,MAAMC,KAAMyE,MAIpCvB,EAAM8N,SACN9N,EAAM+N,SAAW,SAAkBlP,GAC/B,MAAOD,GAAW,SAAU2C,GACxB,GACI9D,GADA4B,EAAWkC,EAAK0C,KAEpB,KACIxG,EAASoB,EAAKhC,MAAMC,KAAMyE,GAC5B,MAAOyM,GACL,MAAO3O,GAAS2O,GAGhBjJ,EAAUtH,IAAkC,kBAAhBA,GAAOwQ,KACnCxQ,EAAOwQ,KAAK,SAAS7O,GACjBC,EAAS,KAAMD,KAChB,SAAS,SAASU,GACjBT,EAASS,EAAIoO,QAAUpO,EAAM,GAAIlD,OAAMkD,MAG3CT,EAAS,KAAM5B,MAML,gBAAX0Q,SAAuBA,OAAOC,QACrCD,OAAOC,QAAUpO,EAGM,kBAAXqO,SAAyBA,OAAOC,IAC5CD,UAAW,WACP,MAAOrO,KAKXsE,EAAKtE,MAAQA"} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/karma.conf.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/karma.conf.js
new file mode 100644
index 00000000000..9e048c3daba
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/karma.conf.js
@@ -0,0 +1,12 @@
+module.exports = function (config) {
+ config.set({
+ browsers: ['Firefox'],
+ files: ['mocha_test/*.js'],
+ frameworks: ['browserify', 'mocha'],
+ preprocessors: {
+ 'mocha_test/*.js': ['browserify']
+ },
+ reporters: ['mocha'],
+ singleRun: true
+ });
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/lib/async.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/lib/async.js
new file mode 100644
index 00000000000..31e7620fb6f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/lib/async.js
@@ -0,0 +1,1265 @@
+/*!
+ * async
+ * https://github.com/caolan/async
+ *
+ * Copyright 2010-2014 Caolan McMahon
+ * Released under the MIT license
+ */
+(function () {
+
+ var async = {};
+ function noop() {}
+ function identity(v) {
+ return v;
+ }
+ function toBool(v) {
+ return !!v;
+ }
+ function notId(v) {
+ return !v;
+ }
+
+ // global on the server, window in the browser
+ var previous_async;
+
+ // Establish the root object, `window` (`self`) in the browser, `global`
+ // on the server, or `this` in some virtual machines. We use `self`
+ // instead of `window` for `WebWorker` support.
+ var root = typeof self === 'object' && self.self === self && self ||
+ typeof global === 'object' && global.global === global && global ||
+ this;
+
+ if (root != null) {
+ previous_async = root.async;
+ }
+
+ async.noConflict = function () {
+ root.async = previous_async;
+ return async;
+ };
+
+ function only_once(fn) {
+ return function() {
+ if (fn === null) throw new Error("Callback was already called.");
+ fn.apply(this, arguments);
+ fn = null;
+ };
+ }
+
+ function _once(fn) {
+ return function() {
+ if (fn === null) return;
+ fn.apply(this, arguments);
+ fn = null;
+ };
+ }
+
+ //// cross-browser compatiblity functions ////
+
+ var _toString = Object.prototype.toString;
+
+ var _isArray = Array.isArray || function (obj) {
+ return _toString.call(obj) === '[object Array]';
+ };
+
+ // Ported from underscore.js isObject
+ var _isObject = function(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ };
+
+ function _isArrayLike(arr) {
+ return _isArray(arr) || (
+ // has a positive integer length property
+ typeof arr.length === "number" &&
+ arr.length >= 0 &&
+ arr.length % 1 === 0
+ );
+ }
+
+ function _arrayEach(arr, iterator) {
+ var index = -1,
+ length = arr.length;
+
+ while (++index < length) {
+ iterator(arr[index], index, arr);
+ }
+ }
+
+ function _map(arr, iterator) {
+ var index = -1,
+ length = arr.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iterator(arr[index], index, arr);
+ }
+ return result;
+ }
+
+ function _range(count) {
+ return _map(Array(count), function (v, i) { return i; });
+ }
+
+ function _reduce(arr, iterator, memo) {
+ _arrayEach(arr, function (x, i, a) {
+ memo = iterator(memo, x, i, a);
+ });
+ return memo;
+ }
+
+ function _forEachOf(object, iterator) {
+ _arrayEach(_keys(object), function (key) {
+ iterator(object[key], key);
+ });
+ }
+
+ function _indexOf(arr, item) {
+ for (var i = 0; i < arr.length; i++) {
+ if (arr[i] === item) return i;
+ }
+ return -1;
+ }
+
+ var _keys = Object.keys || function (obj) {
+ var keys = [];
+ for (var k in obj) {
+ if (obj.hasOwnProperty(k)) {
+ keys.push(k);
+ }
+ }
+ return keys;
+ };
+
+ function _keyIterator(coll) {
+ var i = -1;
+ var len;
+ var keys;
+ if (_isArrayLike(coll)) {
+ len = coll.length;
+ return function next() {
+ i++;
+ return i < len ? i : null;
+ };
+ } else {
+ keys = _keys(coll);
+ len = keys.length;
+ return function next() {
+ i++;
+ return i < len ? keys[i] : null;
+ };
+ }
+ }
+
+ // Similar to ES6's rest param (http://ariya.ofilabs.com/2013/03/es6-and-rest-parameter.html)
+ // This accumulates the arguments passed into an array, after a given index.
+ // From underscore.js (https://github.com/jashkenas/underscore/pull/2140).
+ function _restParam(func, startIndex) {
+ startIndex = startIndex == null ? func.length - 1 : +startIndex;
+ return function() {
+ var length = Math.max(arguments.length - startIndex, 0);
+ var rest = Array(length);
+ for (var index = 0; index < length; index++) {
+ rest[index] = arguments[index + startIndex];
+ }
+ switch (startIndex) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, arguments[0], rest);
+ }
+ // Currently unused but handle cases outside of the switch statement:
+ // var args = Array(startIndex + 1);
+ // for (index = 0; index < startIndex; index++) {
+ // args[index] = arguments[index];
+ // }
+ // args[startIndex] = rest;
+ // return func.apply(this, args);
+ };
+ }
+
+ function _withoutIndex(iterator) {
+ return function (value, index, callback) {
+ return iterator(value, callback);
+ };
+ }
+
+ //// exported async module functions ////
+
+ //// nextTick implementation with browser-compatible fallback ////
+
+ // capture the global reference to guard against fakeTimer mocks
+ var _setImmediate = typeof setImmediate === 'function' && setImmediate;
+
+ var _delay = _setImmediate ? function(fn) {
+ // not a direct alias for IE10 compatibility
+ _setImmediate(fn);
+ } : function(fn) {
+ setTimeout(fn, 0);
+ };
+
+ if (typeof process === 'object' && typeof process.nextTick === 'function') {
+ async.nextTick = process.nextTick;
+ } else {
+ async.nextTick = _delay;
+ }
+ async.setImmediate = _setImmediate ? _delay : async.nextTick;
+
+
+ async.forEach =
+ async.each = function (arr, iterator, callback) {
+ return async.eachOf(arr, _withoutIndex(iterator), callback);
+ };
+
+ async.forEachSeries =
+ async.eachSeries = function (arr, iterator, callback) {
+ return async.eachOfSeries(arr, _withoutIndex(iterator), callback);
+ };
+
+
+ async.forEachLimit =
+ async.eachLimit = function (arr, limit, iterator, callback) {
+ return _eachOfLimit(limit)(arr, _withoutIndex(iterator), callback);
+ };
+
+ async.forEachOf =
+ async.eachOf = function (object, iterator, callback) {
+ callback = _once(callback || noop);
+ object = object || [];
+
+ var iter = _keyIterator(object);
+ var key, completed = 0;
+
+ while ((key = iter()) != null) {
+ completed += 1;
+ iterator(object[key], key, only_once(done));
+ }
+
+ if (completed === 0) callback(null);
+
+ function done(err) {
+ completed--;
+ if (err) {
+ callback(err);
+ }
+ // Check key is null in case iterator isn't exhausted
+ // and done resolved synchronously.
+ else if (key === null && completed <= 0) {
+ callback(null);
+ }
+ }
+ };
+
+ async.forEachOfSeries =
+ async.eachOfSeries = function (obj, iterator, callback) {
+ callback = _once(callback || noop);
+ obj = obj || [];
+ var nextKey = _keyIterator(obj);
+ var key = nextKey();
+ function iterate() {
+ var sync = true;
+ if (key === null) {
+ return callback(null);
+ }
+ iterator(obj[key], key, only_once(function (err) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ key = nextKey();
+ if (key === null) {
+ return callback(null);
+ } else {
+ if (sync) {
+ async.setImmediate(iterate);
+ } else {
+ iterate();
+ }
+ }
+ }
+ }));
+ sync = false;
+ }
+ iterate();
+ };
+
+
+
+ async.forEachOfLimit =
+ async.eachOfLimit = function (obj, limit, iterator, callback) {
+ _eachOfLimit(limit)(obj, iterator, callback);
+ };
+
+ function _eachOfLimit(limit) {
+
+ return function (obj, iterator, callback) {
+ callback = _once(callback || noop);
+ obj = obj || [];
+ var nextKey = _keyIterator(obj);
+ if (limit <= 0) {
+ return callback(null);
+ }
+ var done = false;
+ var running = 0;
+ var errored = false;
+
+ (function replenish () {
+ if (done && running <= 0) {
+ return callback(null);
+ }
+
+ while (running < limit && !errored) {
+ var key = nextKey();
+ if (key === null) {
+ done = true;
+ if (running <= 0) {
+ callback(null);
+ }
+ return;
+ }
+ running += 1;
+ iterator(obj[key], key, only_once(function (err) {
+ running -= 1;
+ if (err) {
+ callback(err);
+ errored = true;
+ }
+ else {
+ replenish();
+ }
+ }));
+ }
+ })();
+ };
+ }
+
+
+ function doParallel(fn) {
+ return function (obj, iterator, callback) {
+ return fn(async.eachOf, obj, iterator, callback);
+ };
+ }
+ function doParallelLimit(fn) {
+ return function (obj, limit, iterator, callback) {
+ return fn(_eachOfLimit(limit), obj, iterator, callback);
+ };
+ }
+ function doSeries(fn) {
+ return function (obj, iterator, callback) {
+ return fn(async.eachOfSeries, obj, iterator, callback);
+ };
+ }
+
+ function _asyncMap(eachfn, arr, iterator, callback) {
+ callback = _once(callback || noop);
+ arr = arr || [];
+ var results = _isArrayLike(arr) ? [] : {};
+ eachfn(arr, function (value, index, callback) {
+ iterator(value, function (err, v) {
+ results[index] = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+
+ async.map = doParallel(_asyncMap);
+ async.mapSeries = doSeries(_asyncMap);
+ async.mapLimit = doParallelLimit(_asyncMap);
+
+ // reduce only has a series version, as doing reduce in parallel won't
+ // work in many situations.
+ async.inject =
+ async.foldl =
+ async.reduce = function (arr, memo, iterator, callback) {
+ async.eachOfSeries(arr, function (x, i, callback) {
+ iterator(memo, x, function (err, v) {
+ memo = v;
+ callback(err);
+ });
+ }, function (err) {
+ callback(err, memo);
+ });
+ };
+
+ async.foldr =
+ async.reduceRight = function (arr, memo, iterator, callback) {
+ var reversed = _map(arr, identity).reverse();
+ async.reduce(reversed, memo, iterator, callback);
+ };
+
+ async.transform = function (arr, memo, iterator, callback) {
+ if (arguments.length === 3) {
+ callback = iterator;
+ iterator = memo;
+ memo = _isArray(arr) ? [] : {};
+ }
+
+ async.eachOf(arr, function(v, k, cb) {
+ iterator(memo, v, k, cb);
+ }, function(err) {
+ callback(err, memo);
+ });
+ };
+
+ function _filter(eachfn, arr, iterator, callback) {
+ var results = [];
+ eachfn(arr, function (x, index, callback) {
+ iterator(x, function (v) {
+ if (v) {
+ results.push({index: index, value: x});
+ }
+ callback();
+ });
+ }, function () {
+ callback(_map(results.sort(function (a, b) {
+ return a.index - b.index;
+ }), function (x) {
+ return x.value;
+ }));
+ });
+ }
+
+ async.select =
+ async.filter = doParallel(_filter);
+
+ async.selectLimit =
+ async.filterLimit = doParallelLimit(_filter);
+
+ async.selectSeries =
+ async.filterSeries = doSeries(_filter);
+
+ function _reject(eachfn, arr, iterator, callback) {
+ _filter(eachfn, arr, function(value, cb) {
+ iterator(value, function(v) {
+ cb(!v);
+ });
+ }, callback);
+ }
+ async.reject = doParallel(_reject);
+ async.rejectLimit = doParallelLimit(_reject);
+ async.rejectSeries = doSeries(_reject);
+
+ function _createTester(eachfn, check, getResult) {
+ return function(arr, limit, iterator, cb) {
+ function done() {
+ if (cb) cb(getResult(false, void 0));
+ }
+ function iteratee(x, _, callback) {
+ if (!cb) return callback();
+ iterator(x, function (v) {
+ if (cb && check(v)) {
+ cb(getResult(true, x));
+ cb = iterator = false;
+ }
+ callback();
+ });
+ }
+ if (arguments.length > 3) {
+ eachfn(arr, limit, iteratee, done);
+ } else {
+ cb = iterator;
+ iterator = limit;
+ eachfn(arr, iteratee, done);
+ }
+ };
+ }
+
+ async.any =
+ async.some = _createTester(async.eachOf, toBool, identity);
+
+ async.someLimit = _createTester(async.eachOfLimit, toBool, identity);
+
+ async.all =
+ async.every = _createTester(async.eachOf, notId, notId);
+
+ async.everyLimit = _createTester(async.eachOfLimit, notId, notId);
+
+ function _findGetResult(v, x) {
+ return x;
+ }
+ async.detect = _createTester(async.eachOf, identity, _findGetResult);
+ async.detectSeries = _createTester(async.eachOfSeries, identity, _findGetResult);
+ async.detectLimit = _createTester(async.eachOfLimit, identity, _findGetResult);
+
+ async.sortBy = function (arr, iterator, callback) {
+ async.map(arr, function (x, callback) {
+ iterator(x, function (err, criteria) {
+ if (err) {
+ callback(err);
+ }
+ else {
+ callback(null, {value: x, criteria: criteria});
+ }
+ });
+ }, function (err, results) {
+ if (err) {
+ return callback(err);
+ }
+ else {
+ callback(null, _map(results.sort(comparator), function (x) {
+ return x.value;
+ }));
+ }
+
+ });
+
+ function comparator(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }
+ };
+
+ async.auto = function (tasks, concurrency, callback) {
+ if (typeof arguments[1] === 'function') {
+ // concurrency is optional, shift the args.
+ callback = concurrency;
+ concurrency = null;
+ }
+ callback = _once(callback || noop);
+ var keys = _keys(tasks);
+ var remainingTasks = keys.length;
+ if (!remainingTasks) {
+ return callback(null);
+ }
+ if (!concurrency) {
+ concurrency = remainingTasks;
+ }
+
+ var results = {};
+ var runningTasks = 0;
+
+ var hasError = false;
+
+ var listeners = [];
+ function addListener(fn) {
+ listeners.unshift(fn);
+ }
+ function removeListener(fn) {
+ var idx = _indexOf(listeners, fn);
+ if (idx >= 0) listeners.splice(idx, 1);
+ }
+ function taskComplete() {
+ remainingTasks--;
+ _arrayEach(listeners.slice(0), function (fn) {
+ fn();
+ });
+ }
+
+ addListener(function () {
+ if (!remainingTasks) {
+ callback(null, results);
+ }
+ });
+
+ _arrayEach(keys, function (k) {
+ if (hasError) return;
+ var task = _isArray(tasks[k]) ? tasks[k]: [tasks[k]];
+ var taskCallback = _restParam(function(err, args) {
+ runningTasks--;
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ if (err) {
+ var safeResults = {};
+ _forEachOf(results, function(val, rkey) {
+ safeResults[rkey] = val;
+ });
+ safeResults[k] = args;
+ hasError = true;
+
+ callback(err, safeResults);
+ }
+ else {
+ results[k] = args;
+ async.setImmediate(taskComplete);
+ }
+ });
+ var requires = task.slice(0, task.length - 1);
+ // prevent dead-locks
+ var len = requires.length;
+ var dep;
+ while (len--) {
+ if (!(dep = tasks[requires[len]])) {
+ throw new Error('Has nonexistent dependency in ' + requires.join(', '));
+ }
+ if (_isArray(dep) && _indexOf(dep, k) >= 0) {
+ throw new Error('Has cyclic dependencies');
+ }
+ }
+ function ready() {
+ return runningTasks < concurrency && _reduce(requires, function (a, x) {
+ return (a && results.hasOwnProperty(x));
+ }, true) && !results.hasOwnProperty(k);
+ }
+ if (ready()) {
+ runningTasks++;
+ task[task.length - 1](taskCallback, results);
+ }
+ else {
+ addListener(listener);
+ }
+ function listener() {
+ if (ready()) {
+ runningTasks++;
+ removeListener(listener);
+ task[task.length - 1](taskCallback, results);
+ }
+ }
+ });
+ };
+
+
+
+ async.retry = function(times, task, callback) {
+ var DEFAULT_TIMES = 5;
+ var DEFAULT_INTERVAL = 0;
+
+ var attempts = [];
+
+ var opts = {
+ times: DEFAULT_TIMES,
+ interval: DEFAULT_INTERVAL
+ };
+
+ function parseTimes(acc, t){
+ if(typeof t === 'number'){
+ acc.times = parseInt(t, 10) || DEFAULT_TIMES;
+ } else if(typeof t === 'object'){
+ acc.times = parseInt(t.times, 10) || DEFAULT_TIMES;
+ acc.interval = parseInt(t.interval, 10) || DEFAULT_INTERVAL;
+ } else {
+ throw new Error('Unsupported argument type for \'times\': ' + typeof t);
+ }
+ }
+
+ var length = arguments.length;
+ if (length < 1 || length > 3) {
+ throw new Error('Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)');
+ } else if (length <= 2 && typeof times === 'function') {
+ callback = task;
+ task = times;
+ }
+ if (typeof times !== 'function') {
+ parseTimes(opts, times);
+ }
+ opts.callback = callback;
+ opts.task = task;
+
+ function wrappedTask(wrappedCallback, wrappedResults) {
+ function retryAttempt(task, finalAttempt) {
+ return function(seriesCallback) {
+ task(function(err, result){
+ seriesCallback(!err || finalAttempt, {err: err, result: result});
+ }, wrappedResults);
+ };
+ }
+
+ function retryInterval(interval){
+ return function(seriesCallback){
+ setTimeout(function(){
+ seriesCallback(null);
+ }, interval);
+ };
+ }
+
+ while (opts.times) {
+
+ var finalAttempt = !(opts.times-=1);
+ attempts.push(retryAttempt(opts.task, finalAttempt));
+ if(!finalAttempt && opts.interval > 0){
+ attempts.push(retryInterval(opts.interval));
+ }
+ }
+
+ async.series(attempts, function(done, data){
+ data = data[data.length - 1];
+ (wrappedCallback || opts.callback)(data.err, data.result);
+ });
+ }
+
+ // If a callback is passed, run this as a controll flow
+ return opts.callback ? wrappedTask() : wrappedTask;
+ };
+
+ async.waterfall = function (tasks, callback) {
+ callback = _once(callback || noop);
+ if (!_isArray(tasks)) {
+ var err = new Error('First argument to waterfall must be an array of functions');
+ return callback(err);
+ }
+ if (!tasks.length) {
+ return callback();
+ }
+ function wrapIterator(iterator) {
+ return _restParam(function (err, args) {
+ if (err) {
+ callback.apply(null, [err].concat(args));
+ }
+ else {
+ var next = iterator.next();
+ if (next) {
+ args.push(wrapIterator(next));
+ }
+ else {
+ args.push(callback);
+ }
+ ensureAsync(iterator).apply(null, args);
+ }
+ });
+ }
+ wrapIterator(async.iterator(tasks))();
+ };
+
+ function _parallel(eachfn, tasks, callback) {
+ callback = callback || noop;
+ var results = _isArrayLike(tasks) ? [] : {};
+
+ eachfn(tasks, function (task, key, callback) {
+ task(_restParam(function (err, args) {
+ if (args.length <= 1) {
+ args = args[0];
+ }
+ results[key] = args;
+ callback(err);
+ }));
+ }, function (err) {
+ callback(err, results);
+ });
+ }
+
+ async.parallel = function (tasks, callback) {
+ _parallel(async.eachOf, tasks, callback);
+ };
+
+ async.parallelLimit = function(tasks, limit, callback) {
+ _parallel(_eachOfLimit(limit), tasks, callback);
+ };
+
+ async.series = function(tasks, callback) {
+ _parallel(async.eachOfSeries, tasks, callback);
+ };
+
+ async.iterator = function (tasks) {
+ function makeCallback(index) {
+ function fn() {
+ if (tasks.length) {
+ tasks[index].apply(null, arguments);
+ }
+ return fn.next();
+ }
+ fn.next = function () {
+ return (index < tasks.length - 1) ? makeCallback(index + 1): null;
+ };
+ return fn;
+ }
+ return makeCallback(0);
+ };
+
+ async.apply = _restParam(function (fn, args) {
+ return _restParam(function (callArgs) {
+ return fn.apply(
+ null, args.concat(callArgs)
+ );
+ });
+ });
+
+ function _concat(eachfn, arr, fn, callback) {
+ var result = [];
+ eachfn(arr, function (x, index, cb) {
+ fn(x, function (err, y) {
+ result = result.concat(y || []);
+ cb(err);
+ });
+ }, function (err) {
+ callback(err, result);
+ });
+ }
+ async.concat = doParallel(_concat);
+ async.concatSeries = doSeries(_concat);
+
+ async.whilst = function (test, iterator, callback) {
+ callback = callback || noop;
+ if (test()) {
+ var next = _restParam(function(err, args) {
+ if (err) {
+ callback(err);
+ } else if (test.apply(this, args)) {
+ iterator(next);
+ } else {
+ callback.apply(null, [null].concat(args));
+ }
+ });
+ iterator(next);
+ } else {
+ callback(null);
+ }
+ };
+
+ async.doWhilst = function (iterator, test, callback) {
+ var calls = 0;
+ return async.whilst(function() {
+ return ++calls <= 1 || test.apply(this, arguments);
+ }, iterator, callback);
+ };
+
+ async.until = function (test, iterator, callback) {
+ return async.whilst(function() {
+ return !test.apply(this, arguments);
+ }, iterator, callback);
+ };
+
+ async.doUntil = function (iterator, test, callback) {
+ return async.doWhilst(iterator, function() {
+ return !test.apply(this, arguments);
+ }, callback);
+ };
+
+ async.during = function (test, iterator, callback) {
+ callback = callback || noop;
+
+ var next = _restParam(function(err, args) {
+ if (err) {
+ callback(err);
+ } else {
+ args.push(check);
+ test.apply(this, args);
+ }
+ });
+
+ var check = function(err, truth) {
+ if (err) {
+ callback(err);
+ } else if (truth) {
+ iterator(next);
+ } else {
+ callback(null);
+ }
+ };
+
+ test(check);
+ };
+
+ async.doDuring = function (iterator, test, callback) {
+ var calls = 0;
+ async.during(function(next) {
+ if (calls++ < 1) {
+ next(null, true);
+ } else {
+ test.apply(this, arguments);
+ }
+ }, iterator, callback);
+ };
+
+ function _queue(worker, concurrency, payload) {
+ if (concurrency == null) {
+ concurrency = 1;
+ }
+ else if(concurrency === 0) {
+ throw new Error('Concurrency must not be zero');
+ }
+ function _insert(q, data, pos, callback) {
+ if (callback != null && typeof callback !== "function") {
+ throw new Error("task callback must be a function");
+ }
+ q.started = true;
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length === 0 && q.idle()) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ q.drain();
+ });
+ }
+ _arrayEach(data, function(task) {
+ var item = {
+ data: task,
+ callback: callback || noop
+ };
+
+ if (pos) {
+ q.tasks.unshift(item);
+ } else {
+ q.tasks.push(item);
+ }
+
+ if (q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ });
+ async.setImmediate(q.process);
+ }
+ function _next(q, tasks) {
+ return function(){
+ workers -= 1;
+
+ var removed = false;
+ var args = arguments;
+ _arrayEach(tasks, function (task) {
+ _arrayEach(workersList, function (worker, index) {
+ if (worker === task && !removed) {
+ workersList.splice(index, 1);
+ removed = true;
+ }
+ });
+
+ task.callback.apply(task, args);
+ });
+ if (q.tasks.length + workers === 0) {
+ q.drain();
+ }
+ q.process();
+ };
+ }
+
+ var workers = 0;
+ var workersList = [];
+ var q = {
+ tasks: [],
+ concurrency: concurrency,
+ payload: payload,
+ saturated: noop,
+ empty: noop,
+ drain: noop,
+ started: false,
+ paused: false,
+ push: function (data, callback) {
+ _insert(q, data, false, callback);
+ },
+ kill: function () {
+ q.drain = noop;
+ q.tasks = [];
+ },
+ unshift: function (data, callback) {
+ _insert(q, data, true, callback);
+ },
+ process: function () {
+ while(!q.paused && workers < q.concurrency && q.tasks.length){
+
+ var tasks = q.payload ?
+ q.tasks.splice(0, q.payload) :
+ q.tasks.splice(0, q.tasks.length);
+
+ var data = _map(tasks, function (task) {
+ return task.data;
+ });
+
+ if (q.tasks.length === 0) {
+ q.empty();
+ }
+ workers += 1;
+ workersList.push(tasks[0]);
+ var cb = only_once(_next(q, tasks));
+ worker(data, cb);
+ }
+ },
+ length: function () {
+ return q.tasks.length;
+ },
+ running: function () {
+ return workers;
+ },
+ workersList: function () {
+ return workersList;
+ },
+ idle: function() {
+ return q.tasks.length + workers === 0;
+ },
+ pause: function () {
+ q.paused = true;
+ },
+ resume: function () {
+ if (q.paused === false) { return; }
+ q.paused = false;
+ var resumeCount = Math.min(q.concurrency, q.tasks.length);
+ // Need to call q.process once per concurrent
+ // worker to preserve full concurrency after pause
+ for (var w = 1; w <= resumeCount; w++) {
+ async.setImmediate(q.process);
+ }
+ }
+ };
+ return q;
+ }
+
+ async.queue = function (worker, concurrency) {
+ var q = _queue(function (items, cb) {
+ worker(items[0], cb);
+ }, concurrency, 1);
+
+ return q;
+ };
+
+ async.priorityQueue = function (worker, concurrency) {
+
+ function _compareTasks(a, b){
+ return a.priority - b.priority;
+ }
+
+ function _binarySearch(sequence, item, compare) {
+ var beg = -1,
+ end = sequence.length - 1;
+ while (beg < end) {
+ var mid = beg + ((end - beg + 1) >>> 1);
+ if (compare(item, sequence[mid]) >= 0) {
+ beg = mid;
+ } else {
+ end = mid - 1;
+ }
+ }
+ return beg;
+ }
+
+ function _insert(q, data, priority, callback) {
+ if (callback != null && typeof callback !== "function") {
+ throw new Error("task callback must be a function");
+ }
+ q.started = true;
+ if (!_isArray(data)) {
+ data = [data];
+ }
+ if(data.length === 0) {
+ // call drain immediately if there are no tasks
+ return async.setImmediate(function() {
+ q.drain();
+ });
+ }
+ _arrayEach(data, function(task) {
+ var item = {
+ data: task,
+ priority: priority,
+ callback: typeof callback === 'function' ? callback : noop
+ };
+
+ q.tasks.splice(_binarySearch(q.tasks, item, _compareTasks) + 1, 0, item);
+
+ if (q.tasks.length === q.concurrency) {
+ q.saturated();
+ }
+ async.setImmediate(q.process);
+ });
+ }
+
+ // Start with a normal queue
+ var q = async.queue(worker, concurrency);
+
+ // Override push to accept second parameter representing priority
+ q.push = function (data, priority, callback) {
+ _insert(q, data, priority, callback);
+ };
+
+ // Remove unshift function
+ delete q.unshift;
+
+ return q;
+ };
+
+ async.cargo = function (worker, payload) {
+ return _queue(worker, 1, payload);
+ };
+
+ function _console_fn(name) {
+ return _restParam(function (fn, args) {
+ fn.apply(null, args.concat([_restParam(function (err, args) {
+ if (typeof console === 'object') {
+ if (err) {
+ if (console.error) {
+ console.error(err);
+ }
+ }
+ else if (console[name]) {
+ _arrayEach(args, function (x) {
+ console[name](x);
+ });
+ }
+ }
+ })]));
+ });
+ }
+ async.log = _console_fn('log');
+ async.dir = _console_fn('dir');
+ /*async.info = _console_fn('info');
+ async.warn = _console_fn('warn');
+ async.error = _console_fn('error');*/
+
+ async.memoize = function (fn, hasher) {
+ var memo = {};
+ var queues = {};
+ var has = Object.prototype.hasOwnProperty;
+ hasher = hasher || identity;
+ var memoized = _restParam(function memoized(args) {
+ var callback = args.pop();
+ var key = hasher.apply(null, args);
+ if (has.call(memo, key)) {
+ async.setImmediate(function () {
+ callback.apply(null, memo[key]);
+ });
+ }
+ else if (has.call(queues, key)) {
+ queues[key].push(callback);
+ }
+ else {
+ queues[key] = [callback];
+ fn.apply(null, args.concat([_restParam(function (args) {
+ memo[key] = args;
+ var q = queues[key];
+ delete queues[key];
+ for (var i = 0, l = q.length; i < l; i++) {
+ q[i].apply(null, args);
+ }
+ })]));
+ }
+ });
+ memoized.memo = memo;
+ memoized.unmemoized = fn;
+ return memoized;
+ };
+
+ async.unmemoize = function (fn) {
+ return function () {
+ return (fn.unmemoized || fn).apply(null, arguments);
+ };
+ };
+
+ function _times(mapper) {
+ return function (count, iterator, callback) {
+ mapper(_range(count), iterator, callback);
+ };
+ }
+
+ async.times = _times(async.map);
+ async.timesSeries = _times(async.mapSeries);
+ async.timesLimit = function (count, limit, iterator, callback) {
+ return async.mapLimit(_range(count), limit, iterator, callback);
+ };
+
+ async.seq = function (/* functions... */) {
+ var fns = arguments;
+ return _restParam(function (args) {
+ var that = this;
+
+ var callback = args[args.length - 1];
+ if (typeof callback == 'function') {
+ args.pop();
+ } else {
+ callback = noop;
+ }
+
+ async.reduce(fns, args, function (newargs, fn, cb) {
+ fn.apply(that, newargs.concat([_restParam(function (err, nextargs) {
+ cb(err, nextargs);
+ })]));
+ },
+ function (err, results) {
+ callback.apply(that, [err].concat(results));
+ });
+ });
+ };
+
+ async.compose = function (/* functions... */) {
+ return async.seq.apply(null, Array.prototype.reverse.call(arguments));
+ };
+
+
+ function _applyEach(eachfn) {
+ return _restParam(function(fns, args) {
+ var go = _restParam(function(args) {
+ var that = this;
+ var callback = args.pop();
+ return eachfn(fns, function (fn, _, cb) {
+ fn.apply(that, args.concat([cb]));
+ },
+ callback);
+ });
+ if (args.length) {
+ return go.apply(this, args);
+ }
+ else {
+ return go;
+ }
+ });
+ }
+
+ async.applyEach = _applyEach(async.eachOf);
+ async.applyEachSeries = _applyEach(async.eachOfSeries);
+
+
+ async.forever = function (fn, callback) {
+ var done = only_once(callback || noop);
+ var task = ensureAsync(fn);
+ function next(err) {
+ if (err) {
+ return done(err);
+ }
+ task(next);
+ }
+ next();
+ };
+
+ function ensureAsync(fn) {
+ return _restParam(function (args) {
+ var callback = args.pop();
+ args.push(function () {
+ var innerArgs = arguments;
+ if (sync) {
+ async.setImmediate(function () {
+ callback.apply(null, innerArgs);
+ });
+ } else {
+ callback.apply(null, innerArgs);
+ }
+ });
+ var sync = true;
+ fn.apply(this, args);
+ sync = false;
+ });
+ }
+
+ async.ensureAsync = ensureAsync;
+
+ async.constant = _restParam(function(values) {
+ var args = [null].concat(values);
+ return function (callback) {
+ return callback.apply(this, args);
+ };
+ });
+
+ async.wrapSync =
+ async.asyncify = function asyncify(func) {
+ return _restParam(function (args) {
+ var callback = args.pop();
+ var result;
+ try {
+ result = func.apply(this, args);
+ } catch (e) {
+ return callback(e);
+ }
+ // if result is Promise object
+ if (_isObject(result) && typeof result.then === "function") {
+ result.then(function(value) {
+ callback(null, value);
+ })["catch"](function(err) {
+ callback(err.message ? err : new Error(err));
+ });
+ } else {
+ callback(null, result);
+ }
+ });
+ };
+
+ // Node.js
+ if (typeof module === 'object' && module.exports) {
+ module.exports = async;
+ }
+ // AMD / RequireJS
+ else if (typeof define === 'function' && define.amd) {
+ define([], function () {
+ return async;
+ });
+ }
+ // included directly via <script> tag
+ else {
+ root.async = async;
+ }
+
+}());
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/compose.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/compose.js
new file mode 100644
index 00000000000..85306a5f77b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/compose.js
@@ -0,0 +1,86 @@
+var async = require('../lib/async');
+var expect = require('chai').expect;
+
+describe('compose', function(){
+ context('all functions succeed', function(){
+ it('yields the result of the composition of the functions', function(done){
+ var add2 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n + 2);
+ });
+ };
+ var mul3 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n * 3);
+ });
+ };
+ var add1 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n + 1);
+ });
+ };
+ var add2mul3add1 = async.compose(add1, mul3, add2);
+ add2mul3add1(3, function (err, result) {
+ expect(err).to.not.exist;
+ expect(result).to.eql(16);
+ done();
+ });
+ });
+ });
+
+ context('a function errors', function(){
+ it('yields the error and does not call later functions', function(done){
+ var add1called = false;
+ var mul3error = new Error('mul3 error');
+ var add2 = function (n, cb) {
+ setTimeout(function () {
+ cb(null, n + 2);
+ });
+ };
+ var mul3 = function (n, cb) {
+ setTimeout(function () {
+ cb(mul3error);
+ });
+ };
+ var add1 = function (n, cb) {
+ add1called = true;
+ setTimeout(function () {
+ cb(null, n + 1);
+ });
+ };
+ var add2mul3add1 = async.compose(add1, mul3, add2);
+ add2mul3add1(3, function (err, result) {
+ expect(err).to.eql(mul3error);
+ expect(result).to.not.exist;
+ expect(add1called).to.be.false;
+ done();
+ });
+ });
+ });
+
+ it('calls each function with the binding of the composed function', function(done){
+ var context = {};
+ var add2Context = null;
+ var mul3Context = null;
+ var add2 = function (n, cb) {
+ add2Context = this;
+ setTimeout(function () {
+ cb(null, n + 2);
+ });
+ };
+ var mul3 = function (n, cb) {
+ mul3Context = this;
+ setTimeout(function () {
+ cb(null, n * 3);
+ });
+ };
+ var add2mul3 = async.compose(mul3, add2);
+ add2mul3.call(context, 3, function (err, result) {
+ expect(err).to.not.exist;
+ expect(result).to.eql(15);
+ expect(add2Context).to.equal(context);
+ expect(mul3Context).to.equal(context);
+ done();
+ });
+ });
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/forever.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/forever.js
new file mode 100644
index 00000000000..970c42289b0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/forever.js
@@ -0,0 +1,44 @@
+var async = require('../lib/async');
+var expect = require('chai').expect;
+var isBrowser = require('./support/is_browser');
+
+describe('forever', function(){
+ context('function is asynchronous', function(){
+ it('executes the function over and over until it yields an error', function(done){
+ var counter = 0;
+ function addOne(callback) {
+ counter++;
+ if (counter === 50) {
+ return callback('too big!');
+ }
+ async.setImmediate(function () {
+ callback();
+ });
+ }
+ async.forever(addOne, function (err) {
+ expect(err).to.eql('too big!');
+ expect(counter).to.eql(50);
+ done();
+ });
+ });
+ });
+
+ context('function is synchronous', function(){
+ it('does not cause a stack overflow', function(done){
+ if (isBrowser()) return done(); // this will take forever in a browser
+ var counter = 0;
+ function addOne(callback) {
+ counter++;
+ if (counter === 50000) { // needs to be huge to potentially overflow stack in node
+ return callback('too big!');
+ }
+ callback();
+ }
+ async.forever(addOne, function (err) {
+ expect(err).to.eql('too big!');
+ expect(counter).to.eql(50000);
+ done();
+ });
+ });
+ });
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/support/is_browser.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/support/is_browser.js
new file mode 100644
index 00000000000..85e1522cedd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/mocha_test/support/is_browser.js
@@ -0,0 +1,4 @@
+module.exports = function() {
+ return (typeof process === "undefined") ||
+ (process + "" !== "[object process]"); // browserify
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/package.json
new file mode 100644
index 00000000000..11725e8de11
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "async",
+ "description": "Higher-order functions and common patterns for asynchronous code",
+ "main": "lib/async.js",
+ "files": [
+ "lib",
+ "dist/async.js",
+ "dist/async.min.js"
+ ],
+ "author": "Caolan McMahon",
+ "version": "1.5.2",
+ "keywords": [
+ "async",
+ "callback",
+ "utility",
+ "module"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/caolan/async.git"
+ },
+ "bugs": {
+ "url": "https://github.com/caolan/async/issues"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "benchmark": "bestiejs/benchmark.js",
+ "bluebird": "^2.9.32",
+ "chai": "^3.1.0",
+ "coveralls": "^2.11.2",
+ "es6-promise": "^2.3.0",
+ "jscs": "^1.13.1",
+ "jshint": "~2.8.0",
+ "karma": "^0.13.2",
+ "karma-browserify": "^4.2.1",
+ "karma-firefox-launcher": "^0.1.6",
+ "karma-mocha": "^0.2.0",
+ "karma-mocha-reporter": "^1.0.2",
+ "lodash": "^3.9.0",
+ "mkdirp": "~0.5.1",
+ "mocha": "^2.2.5",
+ "native-promise-only": "^0.8.0-a",
+ "nodeunit": ">0.0.0",
+ "nyc": "^2.1.0",
+ "rsvp": "^3.0.18",
+ "semver": "^4.3.6",
+ "uglify-js": "~2.4.0",
+ "xyz": "^0.5.0",
+ "yargs": "~3.9.1"
+ },
+ "jam": {
+ "main": "lib/async.js",
+ "include": [
+ "lib/async.js",
+ "README.md",
+ "LICENSE"
+ ],
+ "categories": [
+ "Utilities"
+ ]
+ },
+ "scripts": {
+ "mocha-node-test": "mocha mocha_test/",
+ "mocha-browser-test": "karma start",
+ "mocha-test": "npm run mocha-node-test && npm run mocha-browser-test",
+ "nodeunit-test": "nodeunit test/test-async.js",
+ "test": "npm run-script lint && npm run nodeunit-test && npm run mocha-test",
+ "lint": "jshint lib/*.js test/*.js perf/*.js && jscs lib/*.js test/*.js perf/*.js",
+ "coverage": "nyc npm test && nyc report",
+ "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls"
+ },
+ "spm": {
+ "main": "lib/async.js"
+ },
+ "volo": {
+ "main": "lib/async.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ]
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/benchmark.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/benchmark.js
new file mode 100755
index 00000000000..f75e05d475b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/benchmark.js
@@ -0,0 +1,228 @@
+#!/usr/bin/env node
+
+var _ = require("lodash");
+var Benchmark = require("benchmark");
+var exec = require("child_process").exec;
+var execSync = require("child_process").execSync;
+var fs = require("fs");
+var path = require("path");
+var mkdirp = require("mkdirp");
+var async = require("../");
+var suiteConfigs = require("./suites");
+var semver = require("semver");
+
+var args = require("yargs")
+ .usage("Usage: $0 [options] [tag1] [tag2]")
+ .describe("g", "run only benchmarks whose names match this regex")
+ .alias("g", "grep")
+ .default("g", ".*")
+ .describe("i", "skip benchmarks whose names match this regex")
+ .alias("i", "reject")
+ .default("i", "^$")
+ .describe("l", "maximum running time per test (in seconds)")
+ .alias("l", "limit")
+ .default("l", 2)
+ .help("h")
+ .alias("h", "help")
+ .example("$0 0.9.2 0.9.0", "Compare v0.9.2 with v0.9.0")
+ .example("$0 0.9.2", "Compare v0.9.2 with the current working version")
+ .example("$0", "Compare the latest tag with the current working version")
+ .example("$0 -g each", "only run the each(), eachLimit() and " +
+ "eachSeries() benchmarks")
+ .example("")
+ .argv;
+
+var grep = new RegExp(args.g, "i");
+var reject = new RegExp(args.i, "i");
+
+function getLatestVersion() {
+ var tags = execSync("git tag");
+ var latest = _(tags).split("\n")
+ .compact()
+ .sort(semver.gt)
+ .last();
+ console.log("Latest tag is ", latest);
+ return latest;
+}
+
+var version0 = args._[0] || getLatestVersion();
+var version1 = args._[1] || "current";
+var versionNames = [version0, version1];
+var benchOptions = {defer: true, minSamples: 1, maxTime: +args.l};
+var versions;
+var wins = {};
+var totalTime = {};
+totalTime[version0] = wins[version0] = 0;
+totalTime[version1] = wins[version1] = 0;
+
+console.log("Comparing " + version0 + " with " + version1 +
+ " on Node " + process.version);
+console.log("--------------------------------------");
+
+
+async.eachSeries(versionNames, cloneVersion, function (err) {
+ if (err) { throw err; }
+ versions = versionNames.map(requireVersion);
+
+ var suites = suiteConfigs
+ .map(setDefaultOptions)
+ .reduce(handleMultipleArgs, [])
+ .map(setName)
+ .filter(matchesGrep)
+ .filter(doesNotMatch)
+ .map(createSuite);
+
+ async.eachSeries(suites, runSuite, function () {
+ var totalTime0 = +totalTime[version0].toPrecision(3);
+ var totalTime1 = +totalTime[version1].toPrecision(3);
+
+ var wins0 = wins[version0];
+ var wins1 = wins[version1];
+
+ if ( Math.abs((totalTime0 / totalTime1) - 1) < 0.01) {
+ // if < 1% difference, we're likely within the margins of error
+ console.log("Both versions are about equal " +
+ "(" + totalTime0 + "ms total vs. " + totalTime1 + "ms total)");
+ } else if (totalTime0 < totalTime1) {
+ console.log(version0 + " faster overall " +
+ "(" + totalTime0 + "ms total vs. " + totalTime1 + "ms total)");
+ } else if (totalTime1 < totalTime0) {
+ console.log(version1 + " faster overall " +
+ "(" + totalTime1 + "ms total vs. " + totalTime0 + "ms total)");
+ }
+
+ if (wins0 > wins1) {
+ console.log(version0 + " won more benchmarks " +
+ "(" + wins0 + " vs. " + wins1 + ")");
+ } else if (wins1 > wins0) {
+ console.log(version1 + " won more benchmarks " +
+ "(" + wins1 + " vs. " + wins0 + ")");
+ } else {
+ console.log("Both versions won the same number of benchmarks " +
+ "(" + wins0 + " vs. " + wins1 + ")");
+ }
+ });
+});
+
+function runSuite(suite, callback) {
+ suite.on("complete", function () {
+ callback();
+ }).run({async: true});
+}
+
+function setDefaultOptions(suiteConfig) {
+ suiteConfig.args = suiteConfig.args || [[]];
+ suiteConfig.setup = suiteConfig.setup || function () {};
+ return suiteConfig;
+}
+
+function handleMultipleArgs(list, suiteConfig) {
+ return list.concat(suiteConfig.args.map(function (args) {
+ return _.defaults({args: args}, suiteConfig);
+ }));
+}
+
+function setName(suiteConfig) {
+ suiteConfig.name = suiteConfig.name + "(" + suiteConfig.args.join(",") + ")";
+ return suiteConfig;
+}
+
+function matchesGrep(suiteConfig) {
+ return !!grep.exec(suiteConfig.name);
+}
+
+function doesNotMatch(suiteConfig) {
+ return !reject.exec(suiteConfig.name);
+}
+
+function createSuite(suiteConfig) {
+ var suite = new Benchmark.Suite();
+ var args = suiteConfig.args;
+ var errored = false;
+
+ function addBench(version, versionName) {
+ var name = suiteConfig.name + " " + versionName;
+
+ try {
+ suiteConfig.setup(1);
+ suiteConfig.fn(version, function () {});
+ } catch (e) {
+ console.error(name + " Errored");
+ errored = true;
+ return;
+ }
+
+ suite.add(name, function (deferred) {
+ suiteConfig.fn(version, function () {
+ deferred.resolve();
+ });
+ }, _.extend({
+ versionName: versionName,
+ setup: _.partial.apply(null, [suiteConfig.setup].concat(args)),
+ onError: function (err) {
+ console.log(err.stack);
+ }
+ }, benchOptions));
+ }
+
+ addBench(versions[0], versionNames[0]);
+ addBench(versions[1], versionNames[1]);
+
+
+ return suite.on('cycle', function(event) {
+ var mean = event.target.stats.mean * 1000;
+ console.log(event.target + ", " + mean.toPrecision(3) + "ms per run");
+ var version = event.target.options.versionName;
+ if (errored) return;
+ totalTime[version] += mean;
+ })
+ .on('error', function (err) { console.error(err); })
+ .on('complete', function() {
+ if (!errored) {
+ var fastest = this.filter('fastest');
+ if (fastest.length === 2) {
+ console.log("Tie");
+ } else {
+ var winner = fastest[0].options.versionName;
+ console.log(winner + ' is faster');
+ wins[winner]++;
+ }
+ }
+ console.log("--------------------------------------");
+ });
+
+}
+
+function requireVersion(tag) {
+ if (tag === "current") {
+ return async;
+ }
+
+ return require("./versions/" + tag + "/");
+}
+
+function cloneVersion(tag, callback) {
+ if (tag === "current") return callback();
+
+ var versionDir = __dirname + "/versions/" + tag;
+ mkdirp.sync(versionDir);
+ fs.open(versionDir + "/package.json", "r", function (err, handle) {
+ if (!err) {
+ // version has already been cloned
+ fs.close(handle);
+ return callback();
+ }
+
+ var repoPath = path.join(__dirname, "..");
+
+ var cmd = "git clone --branch " + tag + " " + repoPath + " " + versionDir;
+
+ exec(cmd, function (err) {
+ if (err) {
+ throw err;
+ }
+ callback();
+ });
+
+ });
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/memory.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/memory.js
new file mode 100644
index 00000000000..1a022af3576
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/memory.js
@@ -0,0 +1,46 @@
+if (process.execArgv[0] !== "--expose-gc") {
+ console.error("please run with node --expose-gc");
+ process.exit(1);
+}
+
+var async = require("../");
+global.gc();
+var startMem = process.memoryUsage().heapUsed;
+
+function waterfallTest(cb) {
+ var functions = [];
+
+ for(var i = 0; i < 10000; i++) {
+ functions.push(function leaky(next) {
+ function func1(cb) {return cb(); }
+
+ function func2(callback) {
+ if (true) {
+ callback();
+ //return next(); // Should be callback here.
+ }
+ }
+
+ function func3(cb) {return cb(); }
+
+ async.waterfall([
+ func1,
+ func2,
+ func3
+ ], next);
+ });
+ }
+
+ async.parallel(functions, cb);
+}
+
+function reportMemory() {
+ global.gc();
+ var increase = process.memoryUsage().heapUsed - startMem;
+ console.log("memory increase: " +
+ (+(increase / 1024).toPrecision(3)) + "kB");
+}
+
+waterfallTest(function () {
+ setTimeout(reportMemory, 0);
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/suites.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/suites.js
new file mode 100644
index 00000000000..dd8392c3820
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/perf/suites.js
@@ -0,0 +1,297 @@
+var _ = require("lodash");
+var tasks;
+
+module.exports = [
+ {
+ name: "each",
+ // args lists are passed to the setup function
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.each(tasks, function (num, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "eachSeries",
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.eachSeries(tasks, function (num, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "eachLimit",
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.eachLimit(tasks, 4, function (num, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "map",
+ // args lists are passed to the setup function
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.map(tasks, function (num, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "mapSeries",
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.mapSeries(tasks, function (num, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "mapLimit",
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.mapLimit(tasks, 4, function (num, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "eachOf",
+ // args lists are passed to the setup function
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.eachOf(tasks, function (num, i, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "eachOfSeries",
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.eachOfSeries(tasks, function (num, i, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "eachOfLimit",
+ args: [[10], [300], [10000]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.eachOfLimit(tasks, 4, function (num, i, cb) {
+ async.setImmediate(cb);
+ }, done);
+ }
+ },
+ {
+ name: "parallel",
+ args: [[10], [100], [1000]],
+ setup: function (count) {
+ tasks = _.range(count).map(function () {
+ return function (cb) {
+ setImmediate(cb);
+ };
+ });
+ },
+ fn: function (async, done) {
+ async.parallel(tasks, done);
+ }
+ },
+ {
+ name: "series",
+ args: [[10], [100], [1000]],
+ setup: function (count) {
+ tasks = _.range(count).map(function () {
+ return function (cb) { setImmediate(cb); };
+ });
+ },
+ fn: function (async, done) {
+ async.series(tasks, done);
+ }
+ },
+ {
+ name: "waterfall",
+ args: [[10], [100], [1000]],
+ setup: function (count) {
+ tasks = [
+ function (cb) {
+ return cb(null, 1);
+ }
+ ].concat(_.range(count).map(function (i) {
+ return function (arg, cb) {
+ setImmediate(function () {
+ cb(null, i);
+ });
+ };
+ }));
+ },
+ fn: function (async, done) {
+ async.waterfall(tasks, done);
+ }
+ },
+ {
+ name: "queue",
+ args: [[1000], [30000], [100000], [200000]],
+ setup: function (count) {
+ tasks = count;
+ },
+ fn: function (async, done) {
+ var numEntries = tasks;
+ var q = async.queue(worker, 1);
+ for (var i = 1; i <= numEntries; i++) {
+ q.push({num: i});
+ }
+ function worker(task, callback) {
+ if (task.num === numEntries) {
+ return done();
+ }
+ setImmediate(callback);
+ }
+ }
+ },
+ {
+ name: "some - no short circuit- false",
+ // args lists are passed to the setup function
+ args: [[500]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.some(tasks, function(i, cb) {
+ async.setImmediate(function() {
+ cb(i >= 600);
+ });
+ }, done);
+ }
+ },
+ {
+ name: "some - short circuit - true",
+ // args lists are passed to the setup function
+ args: [[500]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.some(tasks, function(i, cb) {
+ async.setImmediate(function() {
+ cb(i >= 60);
+ });
+ }, done);
+ }
+ },
+ {
+ name: "every - no short circuit- true",
+ // args lists are passed to the setup function
+ args: [[500]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.every(tasks, function(i, cb) {
+ async.setImmediate(function() {
+ cb(i <= 600);
+ });
+ }, done);
+ }
+ },
+ {
+ name: "every - short circuit - false",
+ // args lists are passed to the setup function
+ args: [[500]],
+ setup: function(count) {
+ tasks = _.range(count);
+ },
+ fn: function (async, done) {
+ async.every(tasks, function(i, cb) {
+ async.setImmediate(function() {
+ cb(i <= 60);
+ });
+ }, done);
+ }
+ },
+ {
+ name: "defer nextTick",
+ fn: function (async, done) {
+ process.nextTick(done);
+ }
+ },
+ {
+ name: "defer setImmediate",
+ fn: function (async, done) {
+ setImmediate(done);
+ }
+ },
+ {
+ name: "defer async.nextTick",
+ fn: function (async, done) {
+ async.nextTick(done);
+ }
+ },
+ {
+ name: "defer async.setImmediate",
+ fn: function (async, done) {
+ async.setImmediate(done);
+ }
+ },
+ {
+ name: "defer setTimeout",
+ fn: function (async, done) {
+ setTimeout(done, 0);
+ }
+ },
+ {
+ name: "ensureAsync sync",
+ fn: function (async, done) {
+ async.ensureAsync(function (cb) {
+ cb();
+ })(done);
+ }
+ },
+ {
+ name: "ensureAsync async",
+ fn: function (async, done) {
+ async.ensureAsync(function (cb) {
+ setImmediate(cb);
+ })(done);
+ }
+ },
+ {
+ name: "ensureAsync async noWrap",
+ fn: function (async, done) {
+ (function (cb) {
+ setImmediate(cb);
+ }(done));
+ }
+ }
+];
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/async/support/sync-package-managers.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/support/sync-package-managers.js
new file mode 100755
index 00000000000..28c22e9f91c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/async/support/sync-package-managers.js
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+
+// This should probably be its own module but complaints about bower/etc.
+// support keep coming up and I'd rather just enable the workflow here for now
+// and figure out where this should live later. -- @beaugunderson
+
+var fs = require('fs');
+var _ = require('lodash');
+
+var packageJson = require('../package.json');
+
+var IGNORES = ['**/.*', 'node_modules', 'bower_components', 'test', 'tests'];
+var INCLUDES = ['lib/async.js', 'README.md', 'LICENSE'];
+var REPOSITORY_NAME = 'caolan/async';
+
+packageJson.jam = {
+ main: packageJson.main,
+ include: INCLUDES,
+ categories: ['Utilities']
+};
+
+packageJson.spm = {
+ main: packageJson.main
+};
+
+packageJson.volo = {
+ main: packageJson.main,
+ ignore: IGNORES
+};
+
+var bowerSpecific = {
+ moduleType: ['amd', 'globals', 'node'],
+ ignore: IGNORES,
+ authors: [packageJson.author]
+};
+
+var bowerInclude = ['name', 'description', 'main', 'keywords',
+ 'license', 'homepage', 'repository', 'devDependencies'];
+
+var componentSpecific = {
+ repository: REPOSITORY_NAME,
+ scripts: [packageJson.main]
+};
+
+var componentInclude = ['name', 'description', 'version', 'keywords',
+ 'license', 'main'];
+
+var bowerJson = _.merge({}, _.pick(packageJson, bowerInclude), bowerSpecific);
+var componentJson = _.merge({}, _.pick(packageJson, componentInclude), componentSpecific);
+
+fs.writeFileSync('./bower.json', JSON.stringify(bowerJson, null, 2));
+fs.writeFileSync('./component.json', JSON.stringify(componentJson, null, 2));
+fs.writeFileSync('./package.json', JSON.stringify(packageJson, null, 2));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/.bower.json
new file mode 100644
index 00000000000..ed4bb733dd8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/.bower.json
@@ -0,0 +1,37 @@
+{
+ "name": "chai",
+ "description": "BDD/TDD assertion library for node.js and the browser. Test framework agnostic.",
+ "license": "MIT",
+ "keywords": [
+ "test",
+ "assertion",
+ "assert",
+ "testing",
+ "chai"
+ ],
+ "main": "chai.js",
+ "ignore": [
+ "build",
+ "components",
+ "lib",
+ "node_modules",
+ "support",
+ "test",
+ "index.js",
+ "Makefile",
+ ".*"
+ ],
+ "dependencies": {},
+ "devDependencies": {},
+ "homepage": "https://github.com/chaijs/chai",
+ "version": "3.5.0",
+ "_release": "3.5.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "3.5.0",
+ "commit": "57c85f624a7e19ffaf1a2c7d07d81180db17bec7"
+ },
+ "_source": "https://github.com/chaijs/chai.git",
+ "_target": "^3.2.0",
+ "_originalSource": "chai"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CODE_OF_CONDUCT.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000000..5194527f26e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CODE_OF_CONDUCT.md
@@ -0,0 +1,58 @@
+# Contributor Code of Conduct
+
+> Read in: [Español](http://contributor-covenant.org/version/1/3/0/es/) |
+[Français](http://contributor-covenant.org/version/1/3/0/fr/) |
+[Italiano](http://contributor-covenant.org/version/1/3/0/it/) |
+[Magyar](http://contributor-covenant.org/version/1/3/0/hu/) |
+[Polskie](http://contributor-covenant.org/version/1/3/0/pl/) |
+[Português](http://contributor-covenant.org/version/1/3/0/pt/) |
+[Português do Brasil](http://contributor-covenant.org/version/1/3/0/pt_br/)
+
+As contributors and maintainers of this project, and in the interest of
+fostering an open and welcoming community, we pledge to respect all people who
+contribute through reporting issues, posting feature requests, updating
+documentation, submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery
+* Personal attacks
+* Trolling or insulting/derogatory comments
+* Public or private harassment
+* Publishing other's private information, such as physical or electronic
+ addresses, without explicit permission
+* Other unethical or unprofessional conduct
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+By adopting this Code of Conduct, project maintainers commit themselves to
+fairly and consistently applying these principles to every aspect of managing
+this project. Project maintainers who do not follow or enforce the Code of
+Conduct may be permanently removed from the project team.
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting a project maintainer at [INSERT EMAIL ADDRESS]. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. Maintainers are
+obligated to maintain confidentiality with regard to the reporter of an
+incident.
+
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 1.3.0, available at
+[http://contributor-covenant.org/version/1/3/0/][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/3/0/
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CONTRIBUTING.md
new file mode 100644
index 00000000000..8de9ba8eed1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/CONTRIBUTING.md
@@ -0,0 +1,214 @@
+# Chai Contribution Guidelines
+
+We like to encourage you to contribute to the Chai.js repository. This should be as easy as possible for you but there are a few things to consider when contributing. The following guidelines for contribution should be followed if you want to submit a pull request or open an issue.
+
+Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue or assessing patches and features.
+
+#### Table of Contents
+
+- [TLDR;](#tldr)
+- [Contributing](#contributing)
+ - [Bug Reports](#bugs)
+ - [Feature Requests](#features)
+ - [Pull Requests](#pull-requests)
+- [Releasing](#releasing)
+- [Support](#support)
+ - [Resources](#resources)
+ - [Core Contributors](#contributors)
+
+<a name="tldr"></a>
+## TLDR;
+
+- Creating an Issue or Pull Request requires a [GitHub](http://github.com) account.
+- Issue reports should be **clear**, **concise** and **reproducible**. Check to see if your issue has already been resolved in the [master]() branch or already reported in Chai's [GitHub Issue Tracker](https://github.com/chaijs/chai/issues).
+- Pull Requests must adhere to strict [coding style guidelines](https://github.com/chaijs/chai/wiki/Chai-Coding-Style-Guide).
+- In general, avoid submitting PRs for new Assertions without asking core contributors first. More than likely it would be better implemented as a plugin.
+- Additional support is available via the [Google Group](http://groups.google.com/group/chaijs) or on irc.freenode.net#chaijs.
+- **IMPORTANT**: By submitting a patch, you agree to allow the project owner to license your work under the same license as that used by the project.
+
+
+
+<a name="contributing"></a>
+## Contributing
+
+The issue tracker is the preferred channel for [bug reports](#bugs),
+[feature requests](#features) and [submitting pull
+requests](#pull-requests), but please respect the following restrictions:
+
+* Please **do not** use the issue tracker for personal support requests (use
+ [Google Group](https://groups.google.com/forum/#!forum/chaijs) or IRC).
+* Please **do not** derail or troll issues. Keep the discussion on topic and
+ respect the opinions of others
+
+<a name="bugs"></a>
+### Bug Reports
+
+A bug is a **demonstrable problem** that is caused by the code in the repository.
+
+Guidelines for bug reports:
+
+1. **Use the GitHub issue search** &mdash; check if the issue has already been reported.
+2. **Check if the issue has been fixed** &mdash; try to reproduce it using the latest `master` or development branch in the repository.
+3. **Isolate the problem** &mdash; create a test case to demonstrate your issue. Provide either a repo, gist, or code sample to demonstrate you problem.
+
+A good bug report shouldn't leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment? What steps will reproduce the issue? What browser(s) and/or Node.js versions experience the problem? What would you expect to be the outcome? All these details will help people to fix any potential bugs.
+
+Example:
+
+> Short and descriptive example bug report title
+>
+> A summary of the issue and the browser/OS environment in which it occurs. If suitable, include the steps required to reproduce the bug.
+>
+> 1. This is the first step
+> 2. This is the second step
+> 3. Further steps, etc.
+>
+> `<url>` - a link to the reduced test case OR
+> ```js
+> expect(a).to.equal('a');
+> // code sample
+> ```
+>
+> Any other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits).
+
+<a name="features"></a>
+### Feature Requests
+
+Feature requests are welcome. But take a moment to find out whether your idea fits with the scope and aims of the project. It's up to *you* to make a strong case to convince the project's developers of the merits of this feature. Please provide as much detail and context as possible.
+
+Furthermore, since Chai.js has a [robust plugin API](http://chaijs.com/guide/plugins/), we encourage you to publish **new Assertions** as plugins. If your feature is an enhancement to an **existing Assertion**, please propose your changes as an issue prior to opening a pull request. If the core Chai.js contributors feel your plugin would be better suited as a core assertion, they will invite you to open a PR in [chaijs/chai](https://github.com/chaijs/chai).
+
+<a name="pull-requests"></a>
+### Pull Requests
+
+- PRs for new core-assertions are advised against.
+- PRs for core-assertion bug fixes are always welcome.
+- PRs for enhancing the interfaces are always welcome.
+- PRs that increase test coverage are always welcome.
+- PRs are scrutinized for coding-style.
+
+Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits.
+
+**Please ask first** before embarking on any significant pull request (e.g. implementing features, refactoring code), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project.
+
+Please adhere to the coding conventions used throughout a project (indentation, accurate comments, etc.) and any other requirements (such as test coverage). Please review the [Chai.js Coding Style Guide](https://github.com/chaijs/chai/wiki/Chai-Coding-Style-Guide).
+
+Follow this process if you'd like your work considered for inclusion in the project:
+
+1. [Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes:
+
+```bash
+# Clone your fork of the repo into the current directory
+git clone https://github.com/<your-username>/<repo-name>
+# Navigate to the newly cloned directory
+cd <repo-name>
+# Assign the original repo to a remote called "upstream"
+git remote add upstream https://github.com/<upstream-owner>/<repo-name>
+```
+
+2. If you cloned a while ago, get the latest changes from upstream:
+
+```bash
+git checkout <dev-branch>
+git pull upstream <dev-branch>
+```
+
+3. Create a new topic branch (off the main project development branch) to contain your feature, change, or fix:
+
+```bash
+git checkout -b <topic-branch-name>
+```
+
+4. Commit your changes in logical chunks. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public.
+
+5. Run you code to make sure it works. If you're still having problems please try to run `make clean` and then test your code again.
+
+```bash
+npm test
+# when finished running tests...
+git checkout chai.js
+```
+
+6. Locally merge (or rebase) the upstream development branch into your topic branch:
+
+```bash
+git pull [--rebase] upstream <dev-branch>
+```
+
+7. Push your topic branch up to your fork:
+
+```bash
+git push origin <topic-branch-name>
+```
+
+8. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description.
+
+**IMPORTANT**: By submitting a patch, you agree to allow the project owner to license your work under the same license as that used by the project.
+
+<a name="releasing"></a>
+## Releasing
+
+Releases can be **prepared** by anyone with access to the code.
+
+Simply run `make release-major`, `make release-minor`, or `make-release-patch`
+and it will automatically do the following:
+
+ - Build chai.js
+ - Bump the version numbers accross the project
+ - Make a commit within git
+
+All you need to do is push the commit up and make a pull request, one of the core contributors will merge it and publish a release.
+
+### Publishing a Release
+
+Anyone who is a core contributor (see the [Core Contributors Heading in the Readme](https://github.com/chaijs/chai#core-contributors)) can publish a release:
+
+1. Go to te [Releases page on Github](https://github.com/chaijs/chai/releases)
+2. Hit "Draft a new release" (if you can't see this, you're not a core contributor!)
+3. Write human-friendly Release Notes based on changelog.
+ - The release title is "x.x.x / YYYY-MM-DD" (where x.x.x is the version number)
+ - If breaking changes, write migration tutorial(s) and reasoning.
+ - Callouts for community contributions (PRs) with links to PR and contributing user.
+ - Callouts for other fixes made by core contributors with links to issue.
+4. Hit "Save Draft" and get other core contributors to check your work, or alternatively hit "Publish release"
+5. That's it!
+
+<a name="support"></a>
+## Support
+
+<a name="resources"></a>
+### Resources
+
+For most of the documentation you are going to want to visit [ChaiJS.com](http://chaijs.com).
+
+- [Getting Started Guide](http://chaijs.com/guide/)
+- [API Reference](http://chaijs.com/api/)
+- [Plugins](http://chaijs.com/plugins/)
+
+Alternatively, the [wiki](https://github.com/chaijs/chai/wiki) might be what you are looking for.
+
+- [Chai Coding Style Guide](https://github.com/chaijs/chai/wiki/Chai-Coding-Style-Guide)
+- [Third-party Resources](https://github.com/chaijs/chai/wiki/Third-Party-Resources)
+
+Or finally, you may find a core-contributor or like-minded developer in any of our support channels.
+
+- IRC: irc.freenode.org #chaijs
+- [Mailing List / Google Group](https://groups.google.com/forum/#!forum/chaijs)
+
+<a name="contributors"></a>
+### Core Contributors
+
+Feel free to reach out to any of the core-contributors with you questions or concerns. We will do our best to respond in a timely manner.
+
+- Jake Luer
+ - GH: [@logicalparadox](https://github.com/logicalparadox)
+ - TW: [@jakeluer](http://twitter.com/jakeluer)
+ - IRC: logicalparadox
+- Veselin Todorov
+ - GH: [@vesln](https://github.com/vesln/)
+ - TW: [@vesln](http://twitter.com/vesln)
+ - IRC: vesln
+- Keith Cirkel
+ - GH: [@keithamus](https://github.com/keithamus)
+ - TW: [@keithamus](http://twitter.com/keithamus)
+ - IRC: keithamus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/History.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/History.md
new file mode 100644
index 00000000000..ae4d323e7da
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/History.md
@@ -0,0 +1,1059 @@
+### Note
+
+As of 3.0.0, the History.md file has been deprecated. [Please refer to the full
+commit logs available on GitHub](https://github.com/chaijs/chai/commits/master).
+
+---
+
+2.3.0 / 2015-04-26
+==================
+
+ * Merge pull request #423 from ehntoo/patch-1
+ * Merge pull request #422 from ljharb/fix_descriptor_tests
+ * Fix a small bug in the .null assertion docs
+ * Use a regex to account for property ordering issues across engines.
+ * Add `make test-firefox`
+ * Merge pull request #417 from astorije/astorije/minimalist-typo
+ * Remove trailing whitespaces
+ * Fix super minor typo in an example
+ * Merge pull request #408 from ljharb/enumerableProperty
+ * Add `ownPropertyDescriptor` assertion.
+
+2.2.0 / 2015-03-26
+==================
+
+ * Merge pull request #405 from chaijs/deep-escape-doc-tweaks
+ * Tweak documentation on `.deep` flag.
+ * Merge pull request #402 from umireon/escaping-dot-should-be-taken
+ * Documentation of escaping in `.deep` flag.
+ * take regular expression apart
+ * Feature: backslash-escaping in `.deep.property`
+ * Escaping dot should be taken in deep property
+
+2.1.2 / 2015-03-15
+==================
+
+ * Merge pull request #396 from chaijs/add-keith-cirkel-contributing-md
+ * Add Keith Cirkel to CONTRIBUTING.md
+ * Merge pull request #395 from cjqed/386-assert-operator-no-eval
+ * No longer using eval on assert operator #386
+ * Merge pull request #389 from chaijs/update-git-summary
+ * Update `git summary` in README
+
+2.1.1 / 2015-03-04
+==================
+
+ * Merge pull request #385 from eldritch-fossicker/master
+ * updates to reflect code style preference from @keithamus
+ * fix indexing into array with deep propery
+ * Merge pull request #382 from astorije/patch-2
+ * Merge pull request #383 from gurdiga/config-doc-wording-improvement
+ * config.truncateThreshold docs: simpler wording
+ * Add missing docstring for showDiff argument of assert
+ * Merge pull request #381 from astorije/patch-1
+ * Add a minor precision that empty asserts on strings too.
+ * Merge pull request #379 from dcneiner/should-primitive-fix
+ * Primitives now use valueOf in shouldGetter
+
+2.1.0 / 2015-02-23
+==================
+
+ * Merge pull request #374 from jmm/v2.0.1
+ * Increment version to 2.0.1.
+ * Merge pull request #365 from chaijs/fix-travis
+ * Fix travis.yml deploy
+ * Merge pull request #356 from Soviut/master
+ * documented fail methods for expect and should interfaces
+ * fail method added directly to expect
+
+2.0.0 / 2015-02-09
+==================
+
+ * Merge pull request #361 from gregglind/b265-keys-object
+ * fix #359. Add `.keys(object)`
+ * Merge pull request #359 from gregglind/b359-unexpected-keys-sort
+ * Fix #359 keys() sorts input unexpectedly
+ * contrib: publish release strategy and travis npm creds #337
+ * Merge pull request #357 from danilovaz/master
+ * Update copyright date
+ * Merge pull request #349 from toastynerd/add-which-chain-method
+ * add the which chain method as per issue #347
+ * Merge pull request #333 from cmpolis/change-assertions
+ * more `by` cleanup
+ * cleaned out `.by` for #333
+ * Merge pull request #335 from DingoEatingFuzz/expose-util
+ * Expose chai util through the chai object
+ * cleanup (per notes on pr #333)
+ * updated `change` to work w/ non-number values + tests
+ * Merge pull request #334 from hurrymaplelad/patch-1
+ * Typo, the flag is called 'contains' with an 's'
+ * updated assertion interface with `change` (#330)
+ * added `change`,`increase`,`decrease` assertions (#330)
+ * assert tests for `change`,`increase`,`decrease`
+ * expect/should tests for `change`,`increase`,`decrease`
+ * Merge pull request #328 from lo1tuma/issue-327
+ * Add includes and contains alias (fixes #327)
+ * Merge pull request #325 from chasenlehara/overwriteChainableMethodDocs
+ * Fix docs for overwriteChainableMethod parameters
+ * Merge pull request #317 from jasonkarns/patch-2
+ * Merge pull request #318 from jasonkarns/patch-3
+ * Merge pull request #316 from jasonkarns/patch-1
+ * typos in docs
+ * minor docs typo
+ * update docs: getAllFlags -> transferFlags
+ * Merge pull request #313 from cjqed/254-expect-any-all
+ * Added the all and any flags for keys assertion, with all being the default behavior
+ * Merge pull request #312 from cjqed/291-assert-same-deep-members
+ * Changed public comment of sameDeepMemebers to be more clear
+ * Fixes issue #291, adds assert.sameDeepMembers
+ * Merge pull request #311 from cjqed/305-above-below-on-assert
+ * Merge pull request #308 from prodatakey/hasproperty
+ * Issue #305 fixed, added assert.isAbove and assert.isBelow
+ * Fix typo
+ * More unit tests for new utility functions
+ * Refactor common functionality, document, test
+ * Refactor if statement out
+ * Small unit test fix
+ * Handle array indexing terminating paths
+ * Merge pull request #309 from ericdouglas/iterableEqual-couting-once
+ * couting variables just once
+ * Fix properties with `undefined` value pass property assertion
+ * Merge pull request #306 from chaijs/revert-297-noopchainfunc
+ * Revert "Allows writing lint-friendly tests"
+
+1.10.0 / 2014-11-10
+==================
+
+ * Merge pull request #297 from prodatakey/noopchainfunc
+ * Merge pull request #300 from julienw/299-fix-getMessage-test
+ * Fix #299: the test is defining global variables
+ * Add a couple more unit tests
+ * Add unit tests for chained terminating property asserts
+ * Revise documentation wording
+ * Add docs for function style NOOP asserts
+ * Make the NOOP function a shared constant
+ * Merge pull request #298 from dasilvacontin/negativeZeroLogging
+ * why not more assertions
+ * added test for inspecting `-0`
+ * a more readable/simple condition statement, as pointed out by @keithamus
+ * added check for logging negative zero
+ * Change test to not trigger argument bug
+ * Allows writing lint-friendly tests
+ * readme: update contributors for 1.9.2
+
+1.9.2 / 2014-09-29
+==================
+
+ * Merge pull request #268 from charlierudolph/cr-lazyMessages
+ * Merge pull request #269 from charlierudolph/cr-codeCleanup
+ * Merge pull request #277 from charlierudolph/fix-doc
+ * Merge pull request #279 from mohayonao/fix-closeTo
+ * Merge pull request #292 from boneskull/mocha
+ * resolves #255: upgrade mocha
+ * Merge pull request #289 from charlierudolph/cr-dryUpCode
+ * Dry up code
+ * Merge pull request #275 from DrRataplan/master
+ * assert: .closeTo() verify value's type before assertion
+ * Rewrite pretty-printing HTML elements to prevent throwing internal errors Fixes errors occuring when using a non-native DOM implementation
+ * Fix assert documentation
+ * Remove unused argument
+ * Allow messages to be functions
+ * Merge pull request #267 from shinnn/master
+ * Use SVG badge
+ * Merge pull request #264 from cjthompson/keys_diff
+ * Show diff for keys assertion
+
+1.9.1 / 2014-03-19
+==================
+
+ * deps update
+ * util: [getActual] select actual logic now allows undefined for actual. Closes #183
+ * docs: [config] make public, express param type
+ * Merge pull request #251 from romario333/threshold3
+ * Fix issue #166 - configurable threshold in objDisplay.
+ * Move configuration options to config.js.
+ * Merge pull request #233 from Empeeric/master
+ * Merge pull request #244 from leider/fix_for_contains
+ * Merge pull request #247 from didoarellano/typo-fixes
+ * Fix typos
+ * Merge pull request #245 from lfac-pt/patch-1
+ * Update `exports.version` to 1.9.0
+ * aborting loop on finding
+ * declaring variable only once
+ * additional test finds incomplete implementation
+ * simplified code
+ * fixing #239 (without changing chai.js)
+ * ssfi as it should be
+ * Merge pull request #228 from duncanbeevers/deep_members
+ * Deep equality check for collection membership
+
+1.9.0 / 2014-01-29
+==================
+
+ * docs: add contributing.md #238
+ * assert: .throws() returns thrown error. Closes #185
+ * Merge pull request #232 from laconbass/assert-throws
+ * assert: .fail() parameter mismatch. Closes #206
+ * Merge branch 'karma-fixes'
+ * Add karma phantomjs launcher
+ * Use latest karma and sauce launcher
+ * Karma tweaks
+ * Merge pull request #230 from jkroso/include
+ * Merge pull request #237 from chaijs/coverage
+ * Add coverage to npmignore
+ * Remove lib-cov from test-travisci dependents
+ * Remove the not longer needed lcov reporter
+ * Test coverage with istanbul
+ * Remove jscoverage
+ * Remove coveralls
+ * Merge pull request #226 from duncanbeevers/add_has
+ * Avoid error instantiation if possible on assert.throws
+ * Merge pull request #231 from duncanbeevers/update_copyright_year
+ * Update Copyright notices to 2014
+ * handle negation correctly
+ * add failing test case
+ * support `{a:1,b:2}.should.include({a:1})`
+ * Merge pull request #224 from vbardales/master
+ * Add `has` to language chains
+ * Merge pull request #219 from demands/overwrite_chainable
+ * return error on throw method to chain on error properties, possibly different from message
+ * util: store chainable behavior in a __methods object on ctx
+ * util: code style fix
+ * util: add overwriteChainableMethod utility (for #215)
+ * Merge pull request #217 from demands/test_cleanup
+ * test: make it possible to run utilities tests with --watch
+ * makefile: change location of karma-runner bin script
+ * Merge pull request #202 from andreineculau/patch-2
+ * test: add tests for throwing custom errors
+ * Merge pull request #201 from andreineculau/patch-1
+ * test: updated for the new assertion errors
+ * core: improve message for assertion errors (throw assertion)
+
+1.8.1 / 2013-10-10
+==================
+
+ * pkg: update deep-eql version
+
+1.8.0 / 2013-09-18
+==================
+
+ * test: [sauce] add a few more browsers
+ * Merge branch 'refactor/deep-equal'
+ * util: remove embedded deep equal utility
+ * util: replace embedded deep equal with external module
+ * Merge branch 'feature/karma'
+ * docs: add sauce badge to readme [ci skip]
+ * test: [sauce] use karma@canary to prevent timeouts
+ * travis: only run on node 0.10
+ * test: [karma] use karma phantomjs runner
+ * Merge pull request #181 from tricknotes/fix-highlight
+ * Fix highlight for example code
+
+1.7.2 / 2013-06-27
+==================
+
+ * coverage: add coveralls badge
+ * test: [coveralls] add coveralls api integration. testing travis-ci integration
+ * Merge branch 'master' of github.com:chaijs/chai
+ * Merge branch 'feature/bower'
+ * Merge pull request #180 from tricknotes/modify-method-title
+ * Merge pull request #179 from tricknotes/highlight-code-example
+ * Modify method title to include argument name
+ * Fix to highlight code example
+ * bower: granular ignores
+
+1.7.1 / 2013-06-24
+==================
+
+ * Merge branch 'feature/bower'. #175
+ * bower: add json file
+ * build: browser
+
+1.7.0 / 2013-06-17
+==================
+
+ * error: remove internal assertion error constructor
+ * core: [assertion-error] replace internal assertion error with dep
+ * deps: add chaijs/assertion-error@1.0.0
+ * docs: fix typo in source file. #174
+ * Merge pull request #174 from piecioshka/master
+ * typo
+ * Merge branch 'master' of github.com:chaijs/chai
+ * pkg: lock mocha/mocha-phantomjs versions (for now)
+ * Merge pull request #173 from chaijs/inspect-fix
+ * Fix `utils.inspect` with custom object-returning inspect()s.
+ * Merge pull request #171 from Bartvds/master
+ * replaced tabs with 2 spaces
+ * added assert.notOk()
+ * Merge pull request #169 from katsgeorgeek/topics/master
+ * Fix comparison objects.
+
+1.6.1 / 2013-06-05
+==================
+
+ * Merge pull request #168 from katsgeorgeek/topics/master
+ * Add test for different RegExp flags.
+ * Add test for regexp comparison.
+ * Downgrade mocha version for fix running Phantom tests.
+ * Fix comparison equality of two regexps.
+ * Merge pull request #161 from brandonpayton/master
+ * Fix documented name for assert interfaces isDefined method
+
+1.6.0 / 2013-04-29
+==================
+
+ * build: browser
+ * assert: [(not)include] throw on incompatible haystack. Closes #142
+ * assert: [notInclude] add assert.notInclude. Closes #158
+ * browser build
+ * makefile: force browser build on browser-test
+ * makefile: use component for browser build
+ * core: [assertions] remove extraneous comments
+ * Merge branch 'master' of github.com:chaijs/chai
+ * test: [assert] deep equal ordering
+ * Merge pull request #153 from NickHeiner/array-assertions
+ * giving members a no-flag assertion
+ * Code review comments - changing syntax
+ * Code review comments
+ * Adding members and memberEquals assertions for checking for subsets and set equality. Implements chaijs/chai#148.
+ * Merge pull request #140 from RubenVerborgh/function-prototype
+ * Restore the `call` and `apply` methods of Function when adding a chainable method.
+ * readme: 2013
+ * notes: migration notes for deep equal changes
+ * test: for ever err() there must be a passing version
+
+1.5.0 / 2013-02-03
+==================
+
+ * docs: add Release Notes for non-gitlog summary of changes.
+ * lib: update copyright to 2013
+ * Merge branch 'refactor/travis'
+ * makefile: remove test-component for full test run
+ * pkg: script test now runs make test so travis will test browser
+ * browser: build
+ * tests: refactor some tests to support new objDisplay output
+ * test: [bootstrap] normalize boostrap across all test scenarios
+ * assertions: refactor some assertions to use objDisplay instead of inspect
+ * util: [objDisplay] normalize output of functions
+ * makefile: refactor for full build scenarios
+ * component: fix build bug where missing util:type file
+ * assertions: [throw] code cleanup
+ * Merge branch 'refactor/typeDetection'
+ * browser: build
+ * makefile: chai.js is .PHONY so it builds every time
+ * test: [expect] add arguments type detection test
+ * core/assertions: [type] (a/an) refactor to use type detection utility
+ * util: add cross-browser type detection utility
+ * Merge branch 'feature/component'
+ * browser: build
+ * component: add component.json file
+ * makefile: refactor for fine grain control of testing scenarios
+ * test: add mochaPhantomJS support and component test file
+ * deps: add component and mocha-phantomjs for browser testing
+ * ignore: update ignore files for component support
+ * travis: run for all branches
+ * Merge branch 'feature/showDiff'
+ * test: [Assertion] configruable showDiff flag. Closes #132
+ * lib: [Assertion] add configurable showDiff flag. #132
+ * Merge branch 'feature/saucelabs'
+ * Merge branch 'master' into feature/saucelabs
+ * browser: build
+ * support: add mocha cloud runner, client, and html test page
+ * test: [saucelabs] add auth placeholder
+ * deps: add mocha-cloud
+ * Merge pull request #136 from whatthejeff/message_fix
+ * Merge pull request #138 from timnew/master
+ * Fix issue #137, test message existence by using message!=null rather than using message
+ * Fixed backwards negation messages.
+ * Merge pull request #133 from RubenVerborgh/throw
+ * Functions throwing strings can reliably be tested.
+ * Merge pull request #131 from RubenVerborgh/proto
+ * Cache whether __proto__ is supported.
+ * Use __proto__ if available.
+ * Determine the property names to exclude beforehand.
+ * Merge pull request #126 from RubenVerborgh/eqls
+ * Add alias eqls for eql.
+ * Use inherited enumerable properties in deep equality comparison.
+ * Show inherited properties when inspecting an object.
+ * Add new getProperties and getEnumerableProperties utils.
+ * showDiff: force true for equal and eql
+
+1.4.2 / 2012-12-21
+==================
+
+ * browser build: (object diff support when used with mocha) #106
+ * test: [display] array test for mocha object diff
+ * browser: no longer need different AssertionError constructor
+
+1.4.1 / 2012-12-21
+==================
+
+ * showDiff: force diff for equal and eql. #106
+ * test: [expect] type null. #122
+ * Merge pull request #115 from eshao/fix-assert-Throw
+ * FIX: assert.Throw checks error type/message
+ * TST: assert.Throw should check error type/message
+
+1.4.0 / 2012-11-29
+==================
+
+ * pre-release browser build
+ * clean up index.js to not check for cov, revert package.json to use index.js
+ * convert tests to use new bootstrap
+ * refactor testing bootstrap
+ * use spaces (not tabs). Clean up #114
+ * Merge pull request #114 from trantorLiu/master
+ * Add most() (alias: lte) and least() (alias: gte) to the API with new chainers "at" and "of".
+ * Change `main` to ./lib/chai. Fixes #28.
+ * Merge pull request #104 from connec/deep_equals_circular_references_
+ * Merge pull request #109 from nnarhinen/patch-1
+ * Check for 'actual' type
+ * Added support for circular references when checking deep (in)equality.
+
+1.3.0 / 2012-10-01
+==================
+
+ * browser build w/ folio >= 0.3.4. Closes #99
+ * add back buffer test for deep equal
+ * do not write flags to assertion.prototype
+ * remove buffer test from expect
+ * browser build
+ * improve documentation of custom error messages
+ * Merge branch 'master' of git://github.com/Liffft/chai into Liffft-master
+ * browser build
+ * improved buffer deep equal checking
+ * mocha is npm test command
+ * Cleaning up the js style…
+ * expect tests now include message pass-through
+ * packaging up browser-side changes…
+ * Increasing Throws error message verbosity
+ * Should syntax: piping message through
+ * Make globalShould test work in browser too.
+ * Add a setter for `Object.prototype.should`. Closes #86.
+
+1.2.0 / 2012-08-07
+==================
+
+ * Merge branch 'feature/errmsg'
+ * browser build
+ * comment updates for utilities
+ * tweak objDislay to only kick in if object inspection is too long
+ * Merge branch 'master' into feature/errmsg
+ * add display sample for error message refactor
+ * first draft of error message refactor. #93
+ * add `closeTo` assertion to `assert` interface. Closes #89.
+ * update folio build for better require.js handling. Closes #85
+ * Merge pull request #92 from paulmillr/topics/add-dom-checks
+ * Add check for DOM objects.
+ * browser build
+ * Merge branch 'master' of github.com:chaijs/chai
+ * bug - getActual not defaulting to assertion subject
+ * Merge pull request #88 from pwnall/master
+ * Don't inspect() assertion arguments if the assertion passes.
+
+1.1.1 / 2012-07-09
+==================
+
+ * improve commonjs support on browser build
+ * Merge pull request #83 from tkazec/equals
+ * Document .equals
+ * Add .equals as an alias of .equal
+ * remove unused browser prefix/suffix
+ * Merge branch 'feature/folio-build'
+ * browser build
+ * using folio to compile
+ * clean up makefile
+ * early folio 0.3.x support
+
+1.1.0 / 2012-06-26
+==================
+
+ * browser build
+ * Disable "Assertion.includeStack is false" test in IE.
+ * Use `utils.getName` for all function inspections.
+ * Merge pull request #80 from kilianc/closeTo
+ * fixes #79
+ * browser build
+ * expand docs to indicate change of subject for chaining. Closes #78
+ * add `that` chain noop
+ * Merge branch 'bug/74'
+ * comments on how to property use `length` as chain. Closes #74
+ * tests for length as chainable property. #74
+ * add support for `length` as chainable prop/method.
+ * Merge branch 'bug/77'
+ * tests for getPathValue when working with nested arrays. Closes #77
+ * add getPathValue support for nested arrays
+ * browser build
+ * fix bug for missing browser utils
+ * compile tool aware of new folder layout
+ * Merge branch 'refactor/1dot1'
+ * move core assertions to own file and refactor all using utils
+ * rearrange folder structure
+
+1.0.4 / 2012-06-03
+==================
+
+ * Merge pull request #68 from fizker/itself
+ * Added itself chain.
+ * simplify error inspections for cross browser compatibility
+ * fix safari `addChainableMethod` errors. Closes #69
+
+1.0.3 / 2012-05-27
+==================
+
+ * Point Travis badge to the right place.
+ * Make error message for eql/deep.equal more clear.
+ * Fix .not.deep.equal.
+ * contributors list
+
+1.0.2 / 2012-05-26
+==================
+
+ * Merge pull request #67 from chaijs/chaining-and-flags
+ * Browser build.
+ * Use `addChainableMethod` to get away from `__proto__` manipulation.
+ * New `addChainableMethod` utility.
+ * Replace `getAllFlags` with `transferFlags` utility.
+ * browser build
+ * test - get all flags
+ * utility - get all flags
+ * Add .mailmap to .npmignore.
+ * Add a .mailmap file to fix my name in shortlogs.
+
+1.0.1 / 2012-05-18
+==================
+
+ * browser build
+ * Fixing "an" vs. "a" grammar in type assertions.
+ * Uniformize `assert` interface inline docs.
+ * Don't use `instanceof` for `assert.isArray`.
+ * Add `deep` flag for equality and property value.
+ * Merge pull request #64 from chaijs/assertion-docs
+ * Uniformize assertion inline docs.
+ * Add npm-debug.log to .gitignore.
+ * no reserved words as actuals. #62
+
+1.0.0 / 2012-05-15
+==================
+
+ * readme cleanup
+ * browser build
+ * utility comments
+ * removed docs
+ * update to package.json
+ * docs build
+ * comments / docs updates
+ * plugins app cleanup
+ * Merge pull request #61 from joliss/doc
+ * Fix and improve documentation of assert.equal and friends
+ * browser build
+ * doc checkpoint - texture
+ * Update chai-jquery link
+ * Use defined return value of Assertion extension functions
+ * Update utility docs
+
+1.0.0-rc3 / 2012-05-09
+==================
+
+ * Merge branch 'feature/rc3'
+ * docs update
+ * browser build
+ * assert test conformity for minor refactor api
+ * assert minor refactor
+ * update util tests for new add/overwrite prop/method format
+ * added chai.Assertion.add/overwrite prop/method for plugin toolbox
+ * add/overwrite prop/method don't make assumptions about context
+ * doc test suite
+ * docs don't need coverage
+ * refactor all simple chains into one forEach loop, for clean documentation
+ * updated npm ignore
+ * remove old docs
+ * docs checkpoint - guide styled
+ * Merge pull request #59 from joliss/doc
+ * Document how to run the test suite
+ * don't need to rebuild docs to view
+ * dep update
+ * docs checkpoint - api section
+ * comment updates for docs
+ * new doc site checkpoint - plugin directory!
+ * Merge pull request #57 from kossnocorp/patch-1
+ * Fix typo: devDependancies → devDependencies
+ * Using message flag in `getMessage` util instead of old `msg` property.
+ * Adding self to package.json contributors.
+ * `getMessage` shouldn't choke on null/omitted messages.
+ * `return this` not necessary in example.
+ * `return this` not necessary in example.
+ * Sinon–Chai has a dash
+ * updated plugins list for docs
+
+1.0.0-rc2 / 2012-05-06
+==================
+
+ * Merge branch 'feature/test-cov'
+ * browser build
+ * missing assert tests for ownProperty
+ * appropriate assert equivalent for expect.to.have.property(key, val)
+ * reset AssertionError to include full stack
+ * test for plugin utilities
+ * overwrite Property and Method now ensure chain
+ * version notes in readme
+
+1.0.0-rc1 / 2012-05-04
+==================
+
+ * browser build (rc1)
+ * assert match/notMatch tests
+ * assert interface - notMatch, ownProperty, notOwnProperty, ownPropertyVal, ownPropertyNotVal
+ * cleaner should interface export.
+ * added chai.Assertion.prototype._obj (getter) for quick access to object flag
+ * moved almostEqual / almostDeepEqual to stats plugin
+ * added mocha.opts
+ * Add test for `utils.addMethod`
+ * Fix a typo
+ * Add test for `utils.overwriteMethod`
+ * Fix a typo
+ * Browser build
+ * Add undefined assertion
+ * Add null assertion
+ * Fix an issue with `mocha --watch`
+ * travis no longer tests on node 0.4.x
+ * removing unnecissary carbon dep
+ * Merge branch 'feature/plugins-app'
+ * docs build
+ * templates for docs express app for plugin directory
+ * express app for plugin and static serving
+ * added web server deps
+ * Merge pull request #54 from josher19/master
+ * Remove old test.assert code
+ * Use util.inspect instead of inspect for deepAlmostEqual and almostEqual
+ * browser build
+ * Added almostEqual and deepAlmostEqual to assert test suite.
+ * bug - context determinants for utils
+ * dec=0 means rounding, so assert.deepAlmostEqual({pi: 3.1416}, {pi: 3}, 0) is true
+ * wrong travis link
+ * readme updates for version information
+ * travis tests 0.5.x branch as well
+ * [bug] util `addProperty` not correctly exporting
+ * read me version notes
+ * browser build 1.0.0alpha1
+ * not using reserved words in internal assertions. #52
+ * version tick
+ * clean up redundant tests
+ * Merge branch 'refs/heads/0.6.x'
+ * update version tag in package 1.0.0alpha1
+ * browser build
+ * added utility tests to browser specs
+ * beginning utility testing
+ * updated utility comments
+ * utility - overwriteMethod
+ * utility - overwriteProperty
+ * utility - addMethod
+ * utility - addProperty
+ * missing ;
+ * contributors list update
+ * Merge branch 'refs/heads/0.6.x-docs' into 0.6.x
+ * Added guide link to docs. WIP
+ * Include/contain are now both properties and methods
+ * Add an alias annotation
+ * Remove usless function wrapper
+ * Fix a typo
+ * A/an are now both properties and methods
+ * [docs] new site homepage layout / color checkpoint
+ * Ignore IE-specific error properties.
+ * Fixing order of error message test.
+ * New cross-browser `getName` util.
+ * Fixing up `AssertionError` inheritance.
+ * backup docs
+ * Add doctypes
+ * [bug] was still using `constructor.name` in `throw` assertion
+ * [bug] flag Object.create(null) instead of new Object
+ * [test] browser build
+ * [refactor] all usage of Assertion.prototype.assert now uses template tags and flags
+ * [refactor] remove Assertion.prototype.inspect for testable object inspection
+ * [refactor] object to test is now stored in flag, with ssfi and custom message
+ * [bug] flag util - don't return on `set`
+ * [docs] comments for getMessage utility
+ * [feature] getMessage
+ * [feature] testing utilities
+ * [refactor] flag doesn't require `call`
+ * Make order of source files well-defined
+ * Added support for throw(errorInstance).
+ * Use a foolproof method of grabbing an error's name.
+ * Removed constructor.name check from throw.
+ * disabled stackTrack configuration tests until api is stable again
+ * first version of line displayed error for node js (unstable)
+ * refactor core Assertion to use flag utility for negation
+ * added flag utility
+ * tests for assert interface negatives. Closed #42
+ * added assertion negatives that were missing. #42
+ * Support for expected and actual parameters in assert-style error object
+ * chai as promised - readme
+ * Added assert.fail. Closes #40
+ * better error message for assert.operator. Closes #39
+ * [refactor] Assertion#property to use getPathValue property
+ * added getPathValue utility helper
+ * removed todo about browser build
+ * version notes
+ * version bumb 0.6.0
+ * browser build
+ * [refactor] browser compile function to replace with `require('./error')' with 'require('./browser/error')'
+ * [feature] browser uses different error.js
+ * [refactor] error without chai.fail
+ * Assertion & interfaces use new utils helper export
+ * [refactor] primary export for new plugin util usage
+ * added util index.js helper
+ * added 2012 to copyright headers
+ * Added DeepEqual assertions
+
+0.5.3 / 2012-04-21
+==================
+
+ * Merge branch 'refs/heads/jgonera-oldbrowsers'
+ * browser build
+ * fixed reserved names for old browsers in interface/assert
+ * fixed reserved names for old browsers in interface/should
+ * fixed: chai.js no longer contains fail()
+ * fixed reserved names for old browsers in Assertion
+ * Merge pull request #49 from joliss/build-order
+ * Make order of source files well-defined
+ * Merge pull request #43 from zzen/patch-1
+ * Support for expected and actual parameters in assert-style error object
+ * chai as promised - readme
+
+0.5.2 / 2012-03-21
+==================
+
+ * browser build
+ * Merge branch 'feature/assert-fail'
+ * Added assert.fail. Closes #40
+ * Merge branch 'bug/operator-msg'
+ * better error message for assert.operator. Closes #39
+ * version notes
+
+0.5.1 / 2012-03-14
+==================
+
+ * chai.fail no longer exists
+ * Merge branch 'feature/assertdefined'
+ * Added asset#isDefined. Closes #37.
+ * dev docs update for Assertion#assert
+
+0.5.0 / 2012-03-07
+==================
+
+ * [bug] on inspect of reg on n 0.4.12
+ * Merge branch 'bug/33-throws'
+ * Merge pull request #35 from logicalparadox/empty-object
+ * browser build
+ * updated #throw docs
+ * Assertion#throw `should` tests updated
+ * Assertion#throw `expect` tests
+ * Should interface supports multiple throw parameters
+ * Update Assertion#throw to support strings and type checks.
+ * Add more tests for `empty` in `should`.
+ * Add more tests for `empty` in `expect`.
+ * Merge branch 'master' into empty-object
+ * don't switch act/exp
+ * Merge pull request #34 from logicalparadox/assert-operator
+ * Update the compiled verison.
+ * Add `assert.operator`.
+ * Notes on messages. #22
+ * browser build
+ * have been test
+ * below tests
+ * Merge branch 'feature/actexp'
+ * browser build
+ * remove unnecessary fail export
+ * full support for actual/expected where relevant
+ * Assertion.assert support expected value
+ * clean up error
+ * Update the compiled version.
+ * Add object & sane arguments support to `Assertion#empty`.
+
+0.4.2 / 2012-02-28
+==================
+
+ * fix for `process` not available in browser when used via browserify. Closes #28
+ * Merge pull request #31 from joliss/doc
+ * Document that "should" works in browsers other than IE
+ * Merge pull request #30 from logicalparadox/assert-tests
+ * Update the browser version of chai.
+ * Update `assert.doesNotThrow` test in order to check the use case when type is a string.
+ * Add test for `assert.ifError`.
+ * Falsey -> falsy.
+ * Full coverage for `assert.throws` and `assert.doesNotThrow`.
+ * Add test for `assert.doesNotThrow`.
+ * Add test for `assert.throws`.
+ * Add test for `assert.length`.
+ * Add test for `assert.include`.
+ * Add test for `assert.isBoolean`.
+ * Fix the implementation of `assert.isNumber`.
+ * Add test for `assert.isNumber`.
+ * Add test for `assert.isString`.
+ * Add test for `assert.isArray`.
+ * Add test for `assert.isUndefined`.
+ * Add test for `assert.isNotNull`.
+ * Fix `assert.isNotNull` implementation.
+ * Fix `assert.isNull` implementation.
+ * Add test for `assert.isNull`.
+ * Add test for `assert.notDeepEqual`.
+ * Add test for `assert.deepEqual`.
+ * Add test for `assert.notStrictEqual`.
+ * Add test for `assert.strictEqual`.
+ * Add test for `assert.notEqual`.
+
+0.4.1 / 2012-02-26
+==================
+
+ * Merge pull request #27 from logicalparadox/type-fix
+ * Update the browser version.
+ * Add should tests for type checks.
+ * Add function type check test.
+ * Add more type checks tests.
+ * Add test for `new Number` type check.
+ * Fix type of actual checks.
+
+0.4.0 / 2012-02-25
+==================
+
+ * docs and readme for upcoming 0.4.0
+ * docs generated
+ * putting coverage and tests for docs in docs/out/support
+ * make docs
+ * makefile copy necessary resources for tests in docs
+ * rename configuration test
+ * Merge pull request #21 from logicalparadox/close-to
+ * Update the browser version.
+ * Update `closeTo()` docs.
+ * Add `Assertion.closeTo()` method.
+ * Add `.closeTo()` should test.
+ * Add `.closeTo()` expect test.
+ * Merge pull request #20 from logicalparadox/satisfy
+ * Update the browser version.
+ * `..` -> `()` in `.satisfy()` should test.
+ * Update example for `.satisfy()`.
+ * Update the compiled browser version.
+ * Add `Assertion.satisfy()` method.
+ * Add `.satisfy()` should test.
+ * Add `.satisfy()` expect test.
+ * Merge pull request #19 from logicalparadox/respond-to
+ * Update the compiled browser version.
+ * Add `respondTo` Assertion.
+ * Add `respondTo` should test.
+ * Add `respondTo` expect test.
+ * Merge branch 'feature/coverage'
+ * mocha coverage support
+ * doc contributors
+ * README contributors
+
+0.3.4 / 2012-02-23
+==================
+
+ * inline comment typos for #15
+ * Merge branch 'refs/heads/jeffbski-configErrorStackCompat'
+ * includeStack documentation for all interfaces
+ * suite name more generic
+ * Update test to be compatible with browsers that do not support err.stack
+ * udpated compiled chai.js and added to browser tests
+ * Allow inclusion of stack trace for Assert error messages to be configurable
+ * docs sharing buttons
+ * sinon-chai link
+ * doc updates
+ * read me updates include plugins
+
+0.3.3 / 2012-02-12
+==================
+
+ * Merge pull request #14 from jfirebaugh/configurable_properties
+ * Make Assertion.prototype properties configurable
+
+0.3.2 / 2012-02-10
+==================
+
+ * codex version
+ * docs
+ * docs cleanup
+
+0.3.1 / 2012-02-07
+==================
+
+ * node 0.4.x compat
+
+0.3.0 / 2012-02-07
+==================
+
+ * Merge branch 'feature/03x'
+ * browser build
+ * remove html/json/headers testign
+ * regex error.message testing
+ * tests for using plugins
+ * Merge pull request #11 from domenic/master
+ * Make `chai.use` a no-op if the function has already been used.
+
+0.2.4 / 2012-02-02
+==================
+
+ * added in past tense switch for `been`
+
+0.2.3 / 2012-02-01
+==================
+
+ * try that again
+
+0.2.2 / 2012-02-01
+==================
+
+ * added `been` (past of `be`) alias
+
+0.2.1 / 2012-01-29
+==================
+
+ * added Throw, with a capital T, as an alias to `throw` (#7)
+
+0.2.0 / 2012-01-26
+==================
+
+ * update gitignore for vim *.swp
+ * Merge branch 'feature/plugins'
+ * browser build
+ * interfaces now work with use
+ * simple .use function. See #9.
+ * readme notice on browser compat
+
+0.1.7 / 2012-01-25
+==================
+
+ * added assert tests to browser test runner
+ * browser update
+ * `should` interface patch for primitives support in FF
+ * fix isObject() Thanks @milewise
+ * travis only on branch `master`
+ * add instanceof alias `instanceOf`. #6
+ * some tests for assert module
+
+0.1.6 / 2012-01-02
+==================
+
+ * commenting for assert interface
+ * updated codex dep
+
+0.1.5 / 2012-01-02
+==================
+
+ * browser tests pass
+ * type in should.not.equal
+ * test for should (not) exist
+ * added should.exist and should.not.exist
+ * browser uses tdd
+ * convert tests to tdd
+
+0.1.4 / 2011-12-26
+==================
+
+ * browser lib update for new assert interface compatiblitiy
+ * inspect typos
+ * added strict equal + negatives and ifError
+ * interface assert had doesNotThrow
+ * added should tests to browser
+ * new expect empty tests
+ * should test browser compat
+ * Fix typo for instanceof docs. Closes #3 [ci skip]
+
+0.1.3 / 2011-12-18
+==================
+
+ * much cleaner reporting string on error.
+
+0.1.2 / 2011-12-18
+==================
+
+ * [docs] for upcoming 0.1.2
+ * browser version built with pre/suffix … all tests passing
+ * make / compile now use prefix/suffix correctly
+ * code clean
+ * prefix/suffix to wrap browser output to prevent conflicts with other `require` methods.
+ * Merge branch 'feature/should4xcompatibility'
+ * compile for browser tests.. all pass
+ * added header/status/html/json
+ * throw tests
+ * should.throw & should.not.throw shortcuts
+ * improved `throw` type detection and messaging
+ * contain is now `include` … keys modifier is now `contain`
+ * removed object() test
+ * removed #respondTo
+ * Merge branch 'bug/2'
+ * replaced __defineGetter__ with defineProperty for all uses
+ * [docs] change mp tracking code
+ * docs site updated with assert (TDD) interface
+ * updated doc comments for assert interface
+
+0.1.1 / 2011-12-16
+==================
+
+ * docs ready for upcoming 0.1.1
+ * readme image fixed [ci skip]
+ * more readme tweaks [ci skip]
+ * réadmet image fixed [ci skip]
+ * documentation
+ * codex locked in version 0.0.5
+ * more comments to assertions for docs
+ * assertions fully commented, browser library updated
+ * adding codex as doc dependancy
+ * prepping for docs
+ * assertion component completely commented for documentation
+ * added exist test
+ * var expect outside of browser if check
+ * added keywords to package.json
+
+0.1.0 / 2011-12-15
+==================
+
+ * failing on purpose successful .. back to normal
+ * testing travis failure
+ * assert#arguments getter
+ * readme typo
+ * updated README
+ * added travis and npmignore
+ * copyright notices … think i got them all
+ * moved expect interface to own file for consistency
+ * assert ui deepEqual
+ * browser tests expect (all working)
+ * browser version built
+ * chai.fail (should ui)
+ * expect tests browser compatible
+ * tests for should and expect (all pass)
+ * moved fail to primary export
+ * should compatibility testing
+ * within, greaterThan, object, keys,
+ * Aliases
+ * Assertion#property now correctly works with negate and undefined values
+ * error message language matches should
+ * Assertion#respondTo
+ * Assertion now uses inspect util
+ * git ignore node modules
+ * should is exported
+ * AssertionError __proto__ from Error.prototype
+ * add should interface for should.js compatibility
+ * moved eql to until folder and added inspect from (joyent/node)
+ * added mocha for testing
+ * browser build for current api
+ * multiple .property assertions
+ * added deep equal from node
+
+0.0.2 / 2011-12-07
+==================
+
+ * cleaner output on error
+ * improved exists detection
+ * package remnant artifact
+ * empty deep equal
+ * test browser build
+ * assertion cleanup
+ * client compile script
+ * makefile
+ * most of the basic assertions
+ * allow no parameters to assertion error
+ * name change
+ * assertion error instance
+ * main exports: assert() & expect()
+ * initialize
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/README.md
new file mode 100644
index 00000000000..c61bfa8b793
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/README.md
@@ -0,0 +1,83 @@
+[![Chai Documentation](http://chaijs.com/public/img/chai-logo.png)](http://chaijs.com)
+
+[![license:mit](https://img.shields.io/badge/license-mit-green.svg?style=flat-square)](#license)<br>
+[![tag:?](https://img.shields.io/github/tag/chaijs/chai.svg?style=flat-square)](https://github.com/chaijs/chai/releases)
+[![build:?](https://img.shields.io/travis/chaijs/chai/master.svg?style=flat-square)](https://travis-ci.org/chaijs/chai)
+[![coverage:?](https://img.shields.io/coveralls/chaijs/chai/master.svg?style=flat-square)](https://coveralls.io/r/chaijs/chai)<br>
+[![npm:](https://img.shields.io/npm/v/chai.svg?style=flat-square)](https://www.npmjs.com/packages/chai)
+[![dependencies:?](https://img.shields.io/npm/dm/chai.svg?style=flat-square)](https://www.npmjs.com/packages/chai)
+[![devDependencies:?](https://img.shields.io/david/chaijs/chai.svg?style=flat-square)](https://david-dm.org/chaijs/chai)
+
+[![Selenium Test Status](https://saucelabs.com/browser-matrix/chaijs.svg)](https://saucelabs.com/u/chaijs)
+
+[![Slack Status](https://chai-slack.herokuapp.com/badge.svg)]( https://chai-slack.herokuapp.com/)
+[![Join the chat at https://gitter.im/chaijs/chai](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/chaijs/chai)
+
+Chai is a BDD / TDD assertion library for [node](http://nodejs.org) and the browser that
+can be delightfully paired with any javascript testing framework.
+
+For more information or to download plugins, view the [documentation](http://chaijs.com).
+
+### Plugins
+
+Chai offers a robust Plugin architecture for extending Chai's assertions and interfaces.
+
+- Need a plugin? View the [official plugin list](http://chaijs.com/plugins).
+- Have a plugin and want it listed? Open a Pull Request at [chaijs/chai-docs:plugin.js](https://github.com/chaijs/chai-docs/blob/master/plugins.js#L1-L12).
+- Want to build a plugin? Read the [plugin api documentation](http://chaijs.com/guide/plugins/).
+
+### Related Projects
+
+- [chaijs / assertion-error](https://github.com/chaijs/assertion-error): Custom `Error` constructor thrown upon an assertion failing.
+- [chaijs / deep-eql](https://github.com/chaijs/deep-eql): Improved deep equality testing for Node.js and the browser.
+- [chaijs / type-detect](https://github.com/chaijs/type-detect): Improved typeof detection for node.js and the browser.
+
+### Contributing
+
+Thank you very much for considering to contribute!
+
+Here are a few issues other contributors frequently ran into when opening pull requests:
+
+- Please do not commit changes to the `chai.js` build. We do it once per release.
+- Before pushing your commits, please make sure you [rebase](https://github.com/chaijs/chai/blob/master/CONTRIBUTING.md#pull-requests) them.
+
+We also strongly encourage you to read our detailed [contribution guidelines](https://github.com/chaijs/chai/blob/master/CONTRIBUTING.md).
+
+### Contributors
+
+Please see the full
+[Contributors Graph](https://github.com/chaijs/chai/graphs/contributors) for our
+list of contributors.
+
+### Core Contributors
+
+Feel free to reach out to any of the core contributors with your questions or
+concerns. We will do our best to respond in a timely manner.
+
+[![Jake Luer](https://avatars3.githubusercontent.com/u/58988?v=3&s=50)](https://github.com/logicalparadox)
+[![Veselin Todorov](https://avatars3.githubusercontent.com/u/330048?v=3&s=50)](https://github.com/vesln)
+[![Keith Cirkel](https://avatars3.githubusercontent.com/u/118266?v=3&s=50)](https://github.com/keithamus)
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2011-2015 Jake Luer <jake@alogicalparadox.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/ReleaseNotes.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/ReleaseNotes.md
new file mode 100644
index 00000000000..2a80d5cec1a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/ReleaseNotes.md
@@ -0,0 +1,737 @@
+# Release Notes
+
+## Note
+
+As of 3.0.0, the ReleaseNotes.md file has been deprecated. [Please refer to the release notes available on Github](https://github.com/chaijs/chai/releases). Or
+[the release notes on the chaijs.com website](https://chaijs.com/releases).
+
+---
+
+## 2.3.0 / 2015-04-26
+
+Added `ownPropertyDescriptor` assertion:
+
+```js
+expect('test').to.have.ownPropertyDescriptor('length');
+expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });
+expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });
+expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);
+expect('test').ownPropertyDescriptor('length').to.have.keys('value');
+```
+
+### Community Contributions
+
+#### Code Features & Fixes
+
+ * [#408](https://github.com/chaijs/chai/pull/408) Add `ownPropertyDescriptor`
+ assertion.
+ By [@ljharb](https://github.com/ljharb)
+ * [#422](https://github.com/chaijs/chai/pull/422) Improve ownPropertyDescriptor
+ tests.
+ By [@ljharb](https://github.com/ljharb)
+
+#### Documentation fixes
+
+ * [#417](https://github.com/chaijs/chai/pull/417) Fix documentation typo
+ By [@astorije](https://github.com/astorije)
+ * [#423](https://github.com/chaijs/chai/pull/423) Fix inconsistency in docs.
+ By [@ehntoo](https://github.com/ehntoo)
+
+
+## 2.2.0 / 2015-03-26
+
+Deep property strings can now be escaped using `\\` - for example:
+
+```js
+var deepCss = { '.link': { '[target]': 42 }};
+expect(deepCss).to.have.deep.property('\\.link.\\[target\\]', 42)
+```
+
+### Community Contributions
+
+#### Code Features & Fixes
+
+ * [#402](https://github.com/chaijs/chai/pull/402) Allow escaping of deep
+ property keys.
+ By [@umireon](https://github.com/umireon)
+
+#### Documentation fixes
+
+ * [#405](https://github.com/chaijs/chai/pull/405) Tweak documentation around
+ deep property escaping.
+ By [@keithamus](https://github.com/keithamus)
+
+
+## 2.1.2 / 2015-03-15
+
+A minor bug fix. No new features.
+
+### Community Contributions
+
+#### Code Features & Fixes
+
+ * [#395](https://github.com/chaijs/chai/pull/395) Fix eval-related bugs with
+ assert.operator ([#386](https://github.com/chaijs/chai/pull/386)).
+ By [@cjqed](https://github.com/cjqed)
+
+## 2.1.1 / 2015-03-04
+
+Two minor bugfixes. No new features.
+
+### Community Contributions
+
+#### Code Features & Fixes
+
+ * [#385](https://github.com/chaijs/chai/pull/385) Fix a bug (also described in
+ [#387](https://github.com/chaijs/chai/pull/385)) where `deep.property` would not work with single
+ key names. By [@eldritch-fossicker](https://github.com/eldritch-fossicker)
+ * [#379](https://github.com/chaijs/chai/pull/379) Fix bug where tools which overwrite
+ primitive prototypes, such as Babel or core-js would fail.
+ By [@dcneiner](https://github.com/dcneiner)
+
+#### Documentation fixes
+
+ * [#382](https://github.com/chaijs/chai/pull/382) Add doc for showDiff argument in assert.
+ By [@astorije](https://github.com/astorije)
+ * [#383](https://github.com/chaijs/chai/pull/383) Improve wording for truncateTreshold docs
+ By [@gurdiga](https://github.com/gurdiga)
+ * [#381](https://github.com/chaijs/chai/pull/381) Improve wording for assert.empty docs
+ By [@astorije](https://github.com/astorije)
+
+## 2.1.0 / 2015-02-23
+
+Small release; fixes an issue where the Chai lib was incorrectly reporting the
+version number.
+
+Adds new `should.fail()` and `expect.fail()` methods, which are convinience
+methods to throw Assertion Errors.
+
+### Community Contributions
+
+#### Code Features & Fixes
+
+ * [#356](https://github.com/chaijs/chai/pull/356) Add should.fail(), expect.fail(). By [@Soviut](https://github.com/Soviut)
+ * [#374](https://github.com/chaijs/chai/pull/374) Increment version. By [@jmm](https://github.com/jmm)
+
+## 2.0.0 / 2015-02-09
+
+Unfortunately with 1.10.0 - compatibility broke with older versions because of
+the `addChainableNoop`. This change has been reverted.
+
+Any plugins using `addChainableNoop` should cease to do so.
+
+Any developers wishing for this behaviour can use [dirty-chai](https://www.npmjs.com/package/dirty-chai)
+by [@joshperry](https://github.com/joshperry)
+
+### Community Contributions
+
+#### Code Features & Fixes
+
+ * [#361](https://github.com/chaijs/chai/pull/361) `.keys()` now accepts Objects, extracting keys from them. By [@gregglind](https://github.com/gregglind)
+ * [#359](https://github.com/chaijs/chai/pull/359) `.keys()` no longer mutates passed arrays. By [@gregglind](https://github.com/gregglind)
+ * [#349](https://github.com/chaijs/chai/pull/349) Add a new chainable keyword - `.which`. By [@toastynerd](https://github.com/toastynerd)
+ * [#333](https://github.com/chaijs/chai/pull/333) Add `.change`, `.increase` and `.decrease` assertions. By [@cmpolis](https://github.com/cmpolis)
+ * [#335](https://github.com/chaijs/chai/pull/335) `chai.util` is now exposed [@DingoEatingFuzz](https://github.com/DingoEatingFuzz)
+ * [#328](https://github.com/chaijs/chai/pull/328) Add `.includes` and `.contains` aliases (for `.include` and `.contain`). By [@lo1tuma](https://github.com/lo1tuma)
+ * [#313](https://github.com/chaijs/chai/pull/313) Add `.any.keys()` and `.all.keys()` qualifiers. By [@cjqed](https://github.com/cjqed)
+ * [#312](https://github.com/chaijs/chai/pull/312) Add `assert.sameDeepMembers()`. By [@cjqed](https://github.com/cjqed)
+ * [#311](https://github.com/chaijs/chai/pull/311) Add `assert.isAbove()` and `assert.isBelow()`. By [@cjqed](https://github.com/cjqed)
+ * [#308](https://github.com/chaijs/chai/pull/308) `property` and `deep.property` now pass if a value is set to `undefined`. By [@prodatakey](https://github.com/prodatakey)
+ * [#309](https://github.com/chaijs/chai/pull/309) optimize deep equal in Arrays. By [@ericdouglas](https://github.com/ericdouglas)
+ * [#306](https://github.com/chaijs/chai/pull/306) revert #297 - allowing lint-friendly tests. By [@keithamus](https://github.com/keithamus)
+
+#### Documentation fixes
+
+ * [#357](https://github.com/chaijs/chai/pull/357) Copyright year updated in docs. By [@danilovaz](https://github.com/danilovaz)
+ * [#325](https://github.com/chaijs/chai/pull/325) Fix documentation for overwriteChainableMethod. By [@chasenlehara](https://github.com/chasenlehara)
+ * [#334](https://github.com/chaijs/chai/pull/334) Typo fix. By [@hurrymaplelad](https://github.com/hurrymaplelad)
+ * [#317](https://github.com/chaijs/chai/pull/317) Typo fix. By [@jasonkarns](https://github.com/jasonkarns)
+ * [#318](https://github.com/chaijs/chai/pull/318) Typo fix. By [@jasonkarns](https://github.com/jasonkarns)
+ * [#316](https://github.com/chaijs/chai/pull/316) Typo fix. By [@jasonkarns](https://github.com/jasonkarns)
+
+
+## 1.10.0 / 2014-11-10
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required
+- **Plugin Developers:**
+ - Review `addChainableNoop` notes below.
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Noop Function for Terminating Assertion Properties
+
+The following assertions can now also be used in the function-call form:
+
+* ok
+* true
+* false
+* null
+* undefined
+* exist
+* empty
+* arguments
+* Arguments
+
+The above list of assertions are property getters that assert immediately on
+access. Because of that, they were written to be used by terminating the assertion
+chain with a property access.
+
+```js
+expect(true).to.be.true;
+foo.should.be.ok;
+```
+
+This syntax is definitely aesthetically pleasing but, if you are linting your
+test code, your linter will complain with an error something like "Expected an
+assignment or function call and instead saw an expression." Since the linter
+doesn't know about the property getter it assumes this line has no side-effects,
+and throws a warning in case you made a mistake.
+
+Squelching these errors is not a good solution as test code is getting to be
+just as important as, if not more than, production code. Catching syntactical
+errors in tests using static analysis is a great tool to help make sure that your
+tests are well-defined and free of typos.
+
+A better option was to provide a function-call form for these assertions so that
+the code's intent is more clear and the linters stop complaining about something
+looking off. This form is added in addition to the existing property access form
+and does not impact existing test code.
+
+```js
+expect(true).to.be.true();
+foo.should.be.ok();
+```
+
+These forms can also be mixed in any way, these are all functionally identical:
+
+```js
+expect(true).to.be.true.and.not.false();
+expect(true).to.be.true().and.not.false;
+expect(true).to.be.true.and.not.false;
+```
+
+#### Plugin Authors
+
+If you would like to provide this function-call form for your terminating assertion
+properties, there is a new function to register these types of asserts. Instead
+of using `addProperty` to register terminating assertions, simply use `addChainableNoop`
+instead; the arguments to both are identical. The latter will make the assertion
+available in both the attribute and function-call forms and should have no impact
+on existing users of your plugin.
+
+### Community Contributions
+
+- [#297](https://github.com/chaijs/chai/pull/297) Allow writing lint-friendly tests. [@joshperry](https://github.com/joshperry)
+- [#298](https://github.com/chaijs/chai/pull/298) Add check for logging `-0`. [@dasilvacontin](https://github.com/dasilvacontin)
+- [#300](https://github.com/chaijs/chai/pull/300) Fix #299: the test is defining global variables [@julienw](https://github.com/julienw)
+
+Thank you to all who took time to contribute!
+
+## 1.9.2 / 2014-09-29
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required
+- **Plugin Developers:**
+ - No changes required
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Community Contributions
+
+- [#264](https://github.com/chaijs/chai/pull/264) Show diff for keys assertions [@cjthompson](https://github.com/cjthompson)
+- [#267](https://github.com/chaijs/chai/pull/267) Use SVG badges [@shinnn](https://github.com/shinnn)
+- [#268](https://github.com/chaijs/chai/pull/268) Allow messages to be functions (sinon-compat) [@charlierudolph](https://github.com/charlierudolph)
+- [#269](https://github.com/chaijs/chai/pull/269) Remove unused argument for #lengthOf [@charlierudolph](https://github.com/charlierudolph)
+- [#275](https://github.com/chaijs/chai/pull/275) Rewrite pretty-printing HTML elements to prevent throwing internal errors [@DrRataplan](https://github.com/DrRataplan)
+- [#277](https://github.com/chaijs/chai/pull/277) Fix assert documentation for #sameMembers [@charlierudolph](https://github.com/charlierudolph)
+- [#279](https://github.com/chaijs/chai/pull/279) closeTo should check value's type before assertion [@mohayonao](https://github.com/mohayonao)
+- [#289](https://github.com/chaijs/chai/pull/289) satisfy is called twice [@charlierudolph](https://github.com/charlierudolph)
+- [#292](https://github.com/chaijs/chai/pull/292) resolve conflicts with node-webkit and global usage [@boneskull](https://github.com/boneskull)
+
+Thank you to all who took time to contribute!
+
+## 1.9.1 / 2014-03-19
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - Migrate configuration options to new interface. (see notes)
+- **Plugin Developers:**
+ - No changes required
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Configuration
+
+There have been requests for changes and additions to the configuration mechanisms
+and their impact in the Chai architecture. As such, we have decoupled the
+configuration from the `Assertion` constructor. This not only allows for centralized
+configuration, but will allow us to shift the responsibility from the `Assertion`
+constructor to the `assert` interface in future releases.
+
+These changes have been implemented in a non-breaking way, but a depretiation
+warning will be presented to users until they migrate. The old config method will
+be removed in either `v1.11.0` or `v2.0.0`, whichever comes first.
+
+#### Quick Migration
+
+```js
+// change this:
+chai.Assertion.includeStack = true;
+chai.Assertion.showDiff = false;
+
+// ... to this:
+chai.config.includeStack = true;
+chai.config.showDiff = false;
+```
+
+#### All Config Options
+
+##### config.includeStack
+
+- **@param** _{Boolean}_
+- **@default** `false`
+
+User configurable property, influences whether stack trace is included in
+Assertion error message. Default of `false` suppresses stack trace in the error
+message.
+
+##### config.showDiff
+
+- **@param** _{Boolean}_
+- **@default** `true`
+
+User configurable property, influences whether or not the `showDiff` flag
+should be included in the thrown AssertionErrors. `false` will always be `false`;
+`true` will be true when the assertion has requested a diff be shown.
+
+##### config.truncateThreshold **(NEW)**
+
+- **@param** _{Number}_
+- **@default** `40`
+
+User configurable property, sets length threshold for actual and expected values
+in assertion errors. If this threshold is exceeded, the value is truncated.
+
+Set it to zero if you want to disable truncating altogether.
+
+```js
+chai.config.truncateThreshold = 0; // disable truncating
+```
+
+### Community Contributions
+
+- [#228](https://github.com/chaijs/chai/pull/228) Deep equality check for memebers. [@duncanbeevers](https://github.com/duncanbeevers)
+- [#247](https://github.com/chaijs/chai/pull/247) Proofreading. [@didorellano](https://github.com/didoarellano)
+- [#244](https://github.com/chaijs/chai/pull/244) Fix `contain`/`include` 1.9.0 regression. [@leider](https://github.com/leider)
+- [#233](https://github.com/chaijs/chai/pull/233) Improvements to `ssfi` for `assert` interface. [@refack](https://github.com/refack)
+- [#251](https://github.com/chaijs/chai/pull/251) New config option: object display threshold. [@romario333](https://github.com/romario333)
+
+Thank you to all who took time to contribute!
+
+### Other Bug Fixes
+
+- [#183](https://github.com/chaijs/chai/issues/183) Allow `undefined` for actual. (internal api)
+- Update Karam(+plugins)/Istanbul to most recent versions.
+
+## 1.9.0 / 2014-01-29
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required
+- **Plugin Developers:**
+ - Review [#219](https://github.com/chaijs/chai/pull/219).
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Community Contributions
+
+- [#202](https://github.com/chaijs/chai/pull/201) Improve error message for .throw(). [@andreineculau](https://github.com/andreineculau)
+- [#217](https://github.com/chaijs/chai/pull/217) Chai tests can be run with `--watch`. [@demands](https://github.com/demands)
+- [#219](https://github.com/chaijs/chai/pull/219) Add overwriteChainableMethod utility. [@demands](https://github.com/demands)
+- [#224](https://github.com/chaijs/chai/pull/224) Return error on throw method to chain on error properties. [@vbardales](https://github.com/vbardales)
+- [#226](https://github.com/chaijs/chai/pull/226) Add `has` to language chains. [@duncanbeevers](https://github.com/duncanbeevers)
+- [#230](https://github.com/chaijs/chai/pull/230) Support `{a:1,b:2}.should.include({a:1})` [@jkroso](https://github.com/jkroso)
+- [#231](https://github.com/chaijs/chai/pull/231) Update Copyright notices to 2014 [@duncanbeevers](https://github.com/duncanbeevers)
+- [#232](https://github.com/chaijs/chai/pull/232) Avoid error instantiation if possible on assert.throws. [@laconbass](https://github.com/laconbass)
+
+Thank you to all who took time to contribute!
+
+### Other Bug Fixes
+
+- [#225](https://github.com/chaijs/chai/pull/225) Improved AMD wrapper provided by upstream `component(1)`.
+- [#185](https://github.com/chaijs/chai/issues/185) `assert.throws()` returns thrown error for further assertions.
+- [#237](https://github.com/chaijs/chai/pull/237) Remove coveralls/jscoverage, include istanbul coverage report in travis test.
+- Update Karma and Sauce runner versions for consistent CI results. No more karma@canary.
+
+## 1.8.1 / 2013-10-10
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - Refresh `node_modules` folder for updated dependencies.
+- **Plugin Developers:**
+ - No changes required
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Browserify
+
+This is a small patch that updates the dependency tree so browserify users can install
+chai. (Remove conditional requires)
+
+## 1.8.0 / 2013-09-18
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - See `deep.equal` notes.
+- **Plugin Developers:**
+ - No changes required
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Deep Equals
+
+This version of Chai focused on a overhaul to the deep equal utility. The code for this
+tool has been removed from the core lib and can now be found at:
+[chai / deep-eql](https://github.com/chaijs/deep-eql). As stated in previous releases,
+this is part of a larger initiative to provide transparency, independent testing, and coverage for
+some of the more complicated internal tools.
+
+For the most part `.deep.equal` will behave the same as it has. However, in order to provide a
+consistent ruleset across all types being tested, the following changes have been made and _might_
+require changes to your tests.
+
+**1.** Strict equality for non-traversable nodes according to [egal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
+
+_Previously:_ Non-traversable equal via `===`.
+
+```js
+expect(NaN).to.deep.equal(NaN);
+expect(-0).to.not.deep.equal(+0);
+```
+
+**2.** Arguments are not Arrays (and all types must be equal):
+
+_Previously:_ Some crazy nonsense that led to empty arrays deep equaling empty objects deep equaling dates.
+
+```js
+expect(arguments).to.not.deep.equal([]);
+expect(Array.prototype.slice.call(arguments)).to.deep.equal([]);
+```
+
+- [#156](https://github.com/chaijs/chai/issues/156) Empty object is eql to empty array
+- [#192](https://github.com/chaijs/chai/issues/192) empty object is eql to a Date object
+- [#194](https://github.com/chaijs/chai/issues/194) refactor deep-equal utility
+
+### CI and Browser Testing
+
+Chai now runs the browser CI suite using [Karma](http://karma-runner.github.io/) directed at
+[SauceLabs](https://saucelabs.com/). This means we get to know where our browser support stands...
+and we get a cool badge:
+
+[![Selenium Test Status](https://saucelabs.com/browser-matrix/logicalparadox.svg)](https://saucelabs.com/u/logicalparadox)
+
+Look for the list of browsers/versions to expand over the coming releases.
+
+- [#195](https://github.com/chaijs/chai/issues/195) karma test framework
+
+## 1.7.2 / 2013-06-27
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required.
+- **Plugin Developers:**
+ - No changes required
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Coverage Reporting
+
+Coverage reporting has always been available for core-developers but the data has never been published
+for our end users. In our ongoing effort to improve accountability this data will now be published via
+the [coveralls.io](https://coveralls.io/) service. A badge has been added to the README and the full report
+can be viewed online at the [chai coveralls project](https://coveralls.io/r/chaijs/chai). Furthermore, PRs
+will receive automated messages indicating how their PR impacts test coverage. This service is tied to TravisCI.
+
+### Other Fixes
+
+- [#175](https://github.com/chaijs/chai/issues/175) Add `bower.json`. (Fix ignore all)
+
+## 1.7.1 / 2013-06-24
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required.
+- **Plugin Developers:**
+ - No changes required
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### Official Bower Support
+
+Support has been added for the Bower Package Manager ([bower.io])(http://bower.io/). Though
+Chai could be installed via Bower in the past, this update adds official support via the `bower.json`
+specification file.
+
+- [#175](https://github.com/chaijs/chai/issues/175) Add `bower.json`.
+
+## 1.7.0 / 2013-06-17
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required.
+- **Plugin Developers:**
+ - Review AssertionError update notice.
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated dependencies.
+
+### AssertionError Update Notice
+
+Chai now uses [chaijs/assertion-error](https://github.com/chaijs/assertion-error) instead an internal
+constructor. This will allow for further iteration/experimentation of the AssertionError constructor
+independant of Chai. Future plans include stack parsing for callsite support.
+
+This update constructor has a different constructor param signature that conforms more with the standard
+`Error` object. If your plugin throws and `AssertionError` directly you will need to update your plugin
+with the new signature.
+
+```js
+var AssertionError = require('chai').AssertionError;
+
+/**
+ * previous
+ *
+ * @param {Object} options
+ */
+
+throw new AssertionError({
+ message: 'An assertion error occurred'
+ , actual: actual
+ , expect: expect
+ , startStackFunction: arguments.callee
+ , showStack: true
+});
+
+/**
+ * new
+ *
+ * @param {String} message
+ * @param {Object} options
+ * @param {Function} start stack function
+ */
+
+throw new AssertionError('An assertion error occurred', {
+ actual: actual
+ , expect: expect
+ , showStack: true
+}, arguments.callee);
+
+// other signatures
+throw new AssertionError('An assertion error occurred');
+throw new AssertionError('An assertion error occurred', null, arguments.callee);
+```
+
+#### External Dependencies
+
+This is the first non-developement dependency for Chai. As Chai continues to evolve we will begin adding
+more; the next will likely be improved type detection and deep equality. With Chai's userbase continually growing
+there is an higher need for accountability and documentation. External dependencies will allow us to iterate and
+test on features independent from our interfaces.
+
+Note: The browser packaged version `chai.js` will ALWAYS contain all dependencies needed to run Chai.
+
+### Community Contributions
+
+- [#169](https://github.com/chaijs/chai/pull/169) Fix deep equal comparison for Date/Regexp types. [@katsgeorgeek](https://github.com/katsgeorgeek)
+- [#171](https://github.com/chaijs/chai/pull/171) Add `assert.notOk()`. [@Bartvds](https://github.com/Bartvds)
+- [#173](https://github.com/chaijs/chai/pull/173) Fix `inspect` utility. [@domenic](https://github.com/domenic)
+
+Thank you to all who took the time to contribute!
+
+## 1.6.1 / 2013-06-05
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required.
+- **Plugin Developers:**
+ - No changes required.
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated developement dependencies.
+
+### Deep Equality
+
+Regular Expressions are now tested as part of all deep equality assertions. In previous versions
+they silently passed for all scenarios. Thanks to [@katsgeorgeek](https://github.com/katsgeorgeek) for the contribution.
+
+### Community Contributions
+
+- [#161](https://github.com/chaijs/chai/pull/161) Fix documented name for assert interface's isDefined method. [@brandonpayton](https://github.com/brandonpayton)
+- [#168](https://github.com/chaijs/chai/pull/168) Fix comparison equality of two regexps for when using deep equality. [@katsgeorgeek](https://github.com/katsgeorgeek)
+
+Thank you to all who took the time to contribute!
+
+### Additional Notes
+
+- Mocha has been locked at version `1.8.x` to ensure `mocha-phantomjs` compatibility.
+
+## 1.6.0 / 2013-04-29
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - No changes required.
+- **Plugin Developers:**
+ - No changes required.
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated developement dependencies.
+
+### New Assertions
+
+#### Array Members Inclusion
+
+Asserts that the target is a superset of `set`, or that the target and `set` have the same members.
+Order is not taken into account. Thanks to [@NickHeiner](https://github.com/NickHeiner) for the contribution.
+
+```js
+// (expect/should) full set
+expect([4, 2]).to.have.members([2, 4]);
+expect([5, 2]).to.not.have.members([5, 2, 1]);
+
+// (expect/should) inclusion
+expect([1, 2, 3]).to.include.members([3, 2]);
+expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
+
+// (assert) full set
+assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
+
+// (assert) inclusion
+assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');
+
+```
+
+#### Non-inclusion for Assert Interface
+
+Most `assert` functions have a negative version, like `instanceOf()` has a corresponding `notInstaceOf()`.
+However `include()` did not have a corresponding `notInclude()`. This has been added.
+
+```js
+assert.notInclude([ 1, 2, 3 ], 8);
+assert.notInclude('foobar', 'baz');
+```
+
+### Community Contributions
+
+- [#140](https://github.com/chaijs/chai/pull/140) Restore `call`/`apply` methods for plugin interface. [@RubenVerborgh](https://github.com/RubenVerborgh)
+- [#148](https://github.com/chaijs/chai/issues/148)/[#153](https://github.com/chaijs/chai/pull/153) Add `members` and `include.members` assertions. [#NickHeiner](https://github.com/NickHeiner)
+
+Thank you to all who took time to contribute!
+
+### Other Bug Fixes
+
+- [#142](https://github.com/chaijs/chai/issues/142) `assert#include` will no longer silently pass on wrong-type haystack.
+- [#158](https://github.com/chaijs/chai/issues/158) `assert#notInclude` has been added.
+- Travis-CI now tests Node.js `v0.10.x`. Support for `v0.6.x` has been removed. `v0.8.x` is still tested as before.
+
+## 1.5.0 / 2013-02-03
+
+### Migration Requirements
+
+The following changes are required if you are upgrading from the previous version:
+
+- **Users:**
+ - _Update [2013-02-04]:_ Some users may notice a small subset of deep equality assertions will no longer pass. This is the result of
+ [#120](https://github.com/chaijs/chai/issues/120), an improvement to our deep equality algorithm. Users will need to revise their assertions
+ to be more granular should this occur. Further information: [#139](https://github.com/chaijs/chai/issues/139).
+- **Plugin Developers:**
+ - No changes required.
+- **Core Contributors:**
+ - Refresh `node_modules` folder for updated developement dependencies.
+
+### Community Contributions
+
+- [#126](https://github.com/chaijs/chai/pull/126): Add `eqls` alias for `eql`. [@RubenVerborgh](https://github.com/RubenVerborgh)
+- [#127](https://github.com/chaijs/chai/issues/127): Performance refactor for chainable methods. [@RubenVerborgh](https://github.com/RubenVerborgh)
+- [#133](https://github.com/chaijs/chai/pull/133): Assertion `.throw` support for primitives. [@RubenVerborgh](https://github.com/RubenVerborgh)
+- [#137](https://github.com/chaijs/chai/issues/137): Assertion `.throw` support for empty messages. [@timnew](https://github.com/timnew)
+- [#136](https://github.com/chaijs/chai/pull/136): Fix backward negation messages when using `.above()` and `.below()`. [@whatthejeff](https://github.com/whatthejeff)
+
+Thank you to all who took time to contribute!
+
+### Other Bug Fixes
+
+- Improve type detection of `.a()`/`.an()` to work in cross-browser scenarios.
+- [#116](https://github.com/chaijs/chai/issues/116): `.throw()` has cleaner display of errors when WebKit browsers.
+- [#120](https://github.com/chaijs/chai/issues/120): `.eql()` now works to compare dom nodes in browsers.
+
+
+### Usage Updates
+
+#### For Users
+
+**1. Component Support:** Chai now included the proper configuration to be installed as a
+[component](https://github.com/component/component). Component users are encouraged to consult
+[chaijs.com](http://chaijs.com) for the latest version number as using the master branch
+does not gaurantee stability.
+
+```js
+// relevant component.json
+ devDependencies: {
+ "chaijs/chai": "1.5.0"
+ }
+```
+
+Alternatively, bleeding-edge is available:
+
+ $ component install chaijs/chai
+
+**2. Configurable showDiff:** Some test runners (such as [mocha](http://visionmedia.github.com/mocha/))
+include support for showing the diff of strings and objects when an equality error occurs. Chai has
+already included support for this, however some users may not prefer this display behavior. To revert to
+no diff display, the following configuration is available:
+
+```js
+chai.Assertion.showDiff = false; // diff output disabled
+chai.Assertion.showDiff = true; // default, diff output enabled
+```
+
+#### For Plugin Developers
+
+**1. New Utility - type**: The new utility `.type()` is available as a better implementation of `typeof`
+that can be used cross-browser. It handles the inconsistencies of Array, `null`, and `undefined` detection.
+
+- **@param** _{Mixed}_ object to detect type of
+- **@return** _{String}_ object type
+
+```js
+chai.use(function (c, utils) {
+ // some examples
+ utils.type({}); // 'object'
+ utils.type(null); // `null'
+ utils.type(undefined); // `undefined`
+ utils.type([]); // `array`
+});
+```
+
+#### For Core Contributors
+
+**1. Browser Testing**: Browser testing of the `./chai.js` file is now available in the command line
+via PhantomJS. `make test` and Travis-CI will now also rebuild and test `./chai.js`. Consequently, all
+pull requests will now be browser tested in this way.
+
+_Note: Contributors opening pull requests should still NOT include the browser build._
+
+**2. SauceLabs Testing**: Early SauceLab support has been enabled with the file `./support/mocha-cloud.js`.
+Those interested in trying it out should create a free [Open Sauce](https://saucelabs.com/signup/plan) account
+and include their credentials in `./test/auth/sauce.json`.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/bower.json
new file mode 100644
index 00000000000..af2ee029b73
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/bower.json
@@ -0,0 +1,26 @@
+{
+ "name": "chai",
+ "description": "BDD/TDD assertion library for node.js and the browser. Test framework agnostic.",
+ "license": "MIT",
+ "keywords": [
+ "test",
+ "assertion",
+ "assert",
+ "testing",
+ "chai"
+ ],
+ "main": "chai.js",
+ "ignore": [
+ "build",
+ "components",
+ "lib",
+ "node_modules",
+ "support",
+ "test",
+ "index.js",
+ "Makefile",
+ ".*"
+ ],
+ "dependencies": {},
+ "devDependencies": {}
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/chai.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/chai.js
new file mode 100644
index 00000000000..1d30296a41b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/chai.js
@@ -0,0 +1,6142 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.chai = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+module.exports = require('./lib/chai');
+
+},{"./lib/chai":2}],2:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var used = []
+ , exports = module.exports = {};
+
+/*!
+ * Chai version
+ */
+
+exports.version = '3.5.0';
+
+/*!
+ * Assertion Error
+ */
+
+exports.AssertionError = require('assertion-error');
+
+/*!
+ * Utils for plugins (not exported)
+ */
+
+var util = require('./chai/utils');
+
+/**
+ * # .use(function)
+ *
+ * Provides a way to extend the internals of Chai
+ *
+ * @param {Function}
+ * @returns {this} for chaining
+ * @api public
+ */
+
+exports.use = function (fn) {
+ if (!~used.indexOf(fn)) {
+ fn(this, util);
+ used.push(fn);
+ }
+
+ return this;
+};
+
+/*!
+ * Utility Functions
+ */
+
+exports.util = util;
+
+/*!
+ * Configuration
+ */
+
+var config = require('./chai/config');
+exports.config = config;
+
+/*!
+ * Primary `Assertion` prototype
+ */
+
+var assertion = require('./chai/assertion');
+exports.use(assertion);
+
+/*!
+ * Core Assertions
+ */
+
+var core = require('./chai/core/assertions');
+exports.use(core);
+
+/*!
+ * Expect interface
+ */
+
+var expect = require('./chai/interface/expect');
+exports.use(expect);
+
+/*!
+ * Should interface
+ */
+
+var should = require('./chai/interface/should');
+exports.use(should);
+
+/*!
+ * Assert interface
+ */
+
+var assert = require('./chai/interface/assert');
+exports.use(assert);
+
+},{"./chai/assertion":3,"./chai/config":4,"./chai/core/assertions":5,"./chai/interface/assert":6,"./chai/interface/expect":7,"./chai/interface/should":8,"./chai/utils":22,"assertion-error":30}],3:[function(require,module,exports){
+/*!
+ * chai
+ * http://chaijs.com
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var config = require('./config');
+
+module.exports = function (_chai, util) {
+ /*!
+ * Module dependencies.
+ */
+
+ var AssertionError = _chai.AssertionError
+ , flag = util.flag;
+
+ /*!
+ * Module export.
+ */
+
+ _chai.Assertion = Assertion;
+
+ /*!
+ * Assertion Constructor
+ *
+ * Creates object for chaining.
+ *
+ * @api private
+ */
+
+ function Assertion (obj, msg, stack) {
+ flag(this, 'ssfi', stack || arguments.callee);
+ flag(this, 'object', obj);
+ flag(this, 'message', msg);
+ }
+
+ Object.defineProperty(Assertion, 'includeStack', {
+ get: function() {
+ console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
+ return config.includeStack;
+ },
+ set: function(value) {
+ console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
+ config.includeStack = value;
+ }
+ });
+
+ Object.defineProperty(Assertion, 'showDiff', {
+ get: function() {
+ console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
+ return config.showDiff;
+ },
+ set: function(value) {
+ console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
+ config.showDiff = value;
+ }
+ });
+
+ Assertion.addProperty = function (name, fn) {
+ util.addProperty(this.prototype, name, fn);
+ };
+
+ Assertion.addMethod = function (name, fn) {
+ util.addMethod(this.prototype, name, fn);
+ };
+
+ Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
+ util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
+ };
+
+ Assertion.overwriteProperty = function (name, fn) {
+ util.overwriteProperty(this.prototype, name, fn);
+ };
+
+ Assertion.overwriteMethod = function (name, fn) {
+ util.overwriteMethod(this.prototype, name, fn);
+ };
+
+ Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {
+ util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
+ };
+
+ /**
+ * ### .assert(expression, message, negateMessage, expected, actual, showDiff)
+ *
+ * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
+ *
+ * @name assert
+ * @param {Philosophical} expression to be tested
+ * @param {String|Function} message or function that returns message to display if expression fails
+ * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails
+ * @param {Mixed} expected value (remember to check for negation)
+ * @param {Mixed} actual (optional) will default to `this.obj`
+ * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails
+ * @api private
+ */
+
+ Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
+ var ok = util.test(this, arguments);
+ if (true !== showDiff) showDiff = false;
+ if (true !== config.showDiff) showDiff = false;
+
+ if (!ok) {
+ var msg = util.getMessage(this, arguments)
+ , actual = util.getActual(this, arguments);
+ throw new AssertionError(msg, {
+ actual: actual
+ , expected: expected
+ , showDiff: showDiff
+ }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));
+ }
+ };
+
+ /*!
+ * ### ._obj
+ *
+ * Quick reference to stored `actual` value for plugin developers.
+ *
+ * @api private
+ */
+
+ Object.defineProperty(Assertion.prototype, '_obj',
+ { get: function () {
+ return flag(this, 'object');
+ }
+ , set: function (val) {
+ flag(this, 'object', val);
+ }
+ });
+};
+
+},{"./config":4}],4:[function(require,module,exports){
+module.exports = {
+
+ /**
+ * ### config.includeStack
+ *
+ * User configurable property, influences whether stack trace
+ * is included in Assertion error message. Default of false
+ * suppresses stack trace in the error message.
+ *
+ * chai.config.includeStack = true; // enable stack on error
+ *
+ * @param {Boolean}
+ * @api public
+ */
+
+ includeStack: false,
+
+ /**
+ * ### config.showDiff
+ *
+ * User configurable property, influences whether or not
+ * the `showDiff` flag should be included in the thrown
+ * AssertionErrors. `false` will always be `false`; `true`
+ * will be true when the assertion has requested a diff
+ * be shown.
+ *
+ * @param {Boolean}
+ * @api public
+ */
+
+ showDiff: true,
+
+ /**
+ * ### config.truncateThreshold
+ *
+ * User configurable property, sets length threshold for actual and
+ * expected values in assertion errors. If this threshold is exceeded, for
+ * example for large data structures, the value is replaced with something
+ * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.
+ *
+ * Set it to zero if you want to disable truncating altogether.
+ *
+ * This is especially userful when doing assertions on arrays: having this
+ * set to a reasonable large value makes the failure messages readily
+ * inspectable.
+ *
+ * chai.config.truncateThreshold = 0; // disable truncating
+ *
+ * @param {Number}
+ * @api public
+ */
+
+ truncateThreshold: 40
+
+};
+
+},{}],5:[function(require,module,exports){
+/*!
+ * chai
+ * http://chaijs.com
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, _) {
+ var Assertion = chai.Assertion
+ , toString = Object.prototype.toString
+ , flag = _.flag;
+
+ /**
+ * ### Language Chains
+ *
+ * The following are provided as chainable getters to
+ * improve the readability of your assertions. They
+ * do not provide testing capabilities unless they
+ * have been overwritten by a plugin.
+ *
+ * **Chains**
+ *
+ * - to
+ * - be
+ * - been
+ * - is
+ * - that
+ * - which
+ * - and
+ * - has
+ * - have
+ * - with
+ * - at
+ * - of
+ * - same
+ *
+ * @name language chains
+ * @namespace BDD
+ * @api public
+ */
+
+ [ 'to', 'be', 'been'
+ , 'is', 'and', 'has', 'have'
+ , 'with', 'that', 'which', 'at'
+ , 'of', 'same' ].forEach(function (chain) {
+ Assertion.addProperty(chain, function () {
+ return this;
+ });
+ });
+
+ /**
+ * ### .not
+ *
+ * Negates any of assertions following in the chain.
+ *
+ * expect(foo).to.not.equal('bar');
+ * expect(goodFn).to.not.throw(Error);
+ * expect({ foo: 'baz' }).to.have.property('foo')
+ * .and.not.equal('bar');
+ *
+ * @name not
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('not', function () {
+ flag(this, 'negate', true);
+ });
+
+ /**
+ * ### .deep
+ *
+ * Sets the `deep` flag, later used by the `equal` and
+ * `property` assertions.
+ *
+ * expect(foo).to.deep.equal({ bar: 'baz' });
+ * expect({ foo: { bar: { baz: 'quux' } } })
+ * .to.have.deep.property('foo.bar.baz', 'quux');
+ *
+ * `.deep.property` special characters can be escaped
+ * by adding two slashes before the `.` or `[]`.
+ *
+ * var deepCss = { '.link': { '[target]': 42 }};
+ * expect(deepCss).to.have.deep.property('\\.link.\\[target\\]', 42);
+ *
+ * @name deep
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('deep', function () {
+ flag(this, 'deep', true);
+ });
+
+ /**
+ * ### .any
+ *
+ * Sets the `any` flag, (opposite of the `all` flag)
+ * later used in the `keys` assertion.
+ *
+ * expect(foo).to.have.any.keys('bar', 'baz');
+ *
+ * @name any
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('any', function () {
+ flag(this, 'any', true);
+ flag(this, 'all', false)
+ });
+
+
+ /**
+ * ### .all
+ *
+ * Sets the `all` flag (opposite of the `any` flag)
+ * later used by the `keys` assertion.
+ *
+ * expect(foo).to.have.all.keys('bar', 'baz');
+ *
+ * @name all
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('all', function () {
+ flag(this, 'all', true);
+ flag(this, 'any', false);
+ });
+
+ /**
+ * ### .a(type)
+ *
+ * The `a` and `an` assertions are aliases that can be
+ * used either as language chains or to assert a value's
+ * type.
+ *
+ * // typeof
+ * expect('test').to.be.a('string');
+ * expect({ foo: 'bar' }).to.be.an('object');
+ * expect(null).to.be.a('null');
+ * expect(undefined).to.be.an('undefined');
+ * expect(new Error).to.be.an('error');
+ * expect(new Promise).to.be.a('promise');
+ * expect(new Float32Array()).to.be.a('float32array');
+ * expect(Symbol()).to.be.a('symbol');
+ *
+ * // es6 overrides
+ * expect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');
+ *
+ * // language chain
+ * expect(foo).to.be.an.instanceof(Foo);
+ *
+ * @name a
+ * @alias an
+ * @param {String} type
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function an (type, msg) {
+ if (msg) flag(this, 'message', msg);
+ type = type.toLowerCase();
+ var obj = flag(this, 'object')
+ , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';
+
+ this.assert(
+ type === _.type(obj)
+ , 'expected #{this} to be ' + article + type
+ , 'expected #{this} not to be ' + article + type
+ );
+ }
+
+ Assertion.addChainableMethod('an', an);
+ Assertion.addChainableMethod('a', an);
+
+ /**
+ * ### .include(value)
+ *
+ * The `include` and `contain` assertions can be used as either property
+ * based language chains or as methods to assert the inclusion of an object
+ * in an array or a substring in a string. When used as language chains,
+ * they toggle the `contains` flag for the `keys` assertion.
+ *
+ * expect([1,2,3]).to.include(2);
+ * expect('foobar').to.contain('foo');
+ * expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');
+ *
+ * @name include
+ * @alias contain
+ * @alias includes
+ * @alias contains
+ * @param {Object|String|Number} obj
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function includeChainingBehavior () {
+ flag(this, 'contains', true);
+ }
+
+ function include (val, msg) {
+ _.expectTypes(this, ['array', 'object', 'string']);
+
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ var expected = false;
+
+ if (_.type(obj) === 'array' && _.type(val) === 'object') {
+ for (var i in obj) {
+ if (_.eql(obj[i], val)) {
+ expected = true;
+ break;
+ }
+ }
+ } else if (_.type(val) === 'object') {
+ if (!flag(this, 'negate')) {
+ for (var k in val) new Assertion(obj).property(k, val[k]);
+ return;
+ }
+ var subset = {};
+ for (var k in val) subset[k] = obj[k];
+ expected = _.eql(subset, val);
+ } else {
+ expected = (obj != undefined) && ~obj.indexOf(val);
+ }
+ this.assert(
+ expected
+ , 'expected #{this} to include ' + _.inspect(val)
+ , 'expected #{this} to not include ' + _.inspect(val));
+ }
+
+ Assertion.addChainableMethod('include', include, includeChainingBehavior);
+ Assertion.addChainableMethod('contain', include, includeChainingBehavior);
+ Assertion.addChainableMethod('contains', include, includeChainingBehavior);
+ Assertion.addChainableMethod('includes', include, includeChainingBehavior);
+
+ /**
+ * ### .ok
+ *
+ * Asserts that the target is truthy.
+ *
+ * expect('everything').to.be.ok;
+ * expect(1).to.be.ok;
+ * expect(false).to.not.be.ok;
+ * expect(undefined).to.not.be.ok;
+ * expect(null).to.not.be.ok;
+ *
+ * @name ok
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('ok', function () {
+ this.assert(
+ flag(this, 'object')
+ , 'expected #{this} to be truthy'
+ , 'expected #{this} to be falsy');
+ });
+
+ /**
+ * ### .true
+ *
+ * Asserts that the target is `true`.
+ *
+ * expect(true).to.be.true;
+ * expect(1).to.not.be.true;
+ *
+ * @name true
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('true', function () {
+ this.assert(
+ true === flag(this, 'object')
+ , 'expected #{this} to be true'
+ , 'expected #{this} to be false'
+ , this.negate ? false : true
+ );
+ });
+
+ /**
+ * ### .false
+ *
+ * Asserts that the target is `false`.
+ *
+ * expect(false).to.be.false;
+ * expect(0).to.not.be.false;
+ *
+ * @name false
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('false', function () {
+ this.assert(
+ false === flag(this, 'object')
+ , 'expected #{this} to be false'
+ , 'expected #{this} to be true'
+ , this.negate ? true : false
+ );
+ });
+
+ /**
+ * ### .null
+ *
+ * Asserts that the target is `null`.
+ *
+ * expect(null).to.be.null;
+ * expect(undefined).to.not.be.null;
+ *
+ * @name null
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('null', function () {
+ this.assert(
+ null === flag(this, 'object')
+ , 'expected #{this} to be null'
+ , 'expected #{this} not to be null'
+ );
+ });
+
+ /**
+ * ### .undefined
+ *
+ * Asserts that the target is `undefined`.
+ *
+ * expect(undefined).to.be.undefined;
+ * expect(null).to.not.be.undefined;
+ *
+ * @name undefined
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('undefined', function () {
+ this.assert(
+ undefined === flag(this, 'object')
+ , 'expected #{this} to be undefined'
+ , 'expected #{this} not to be undefined'
+ );
+ });
+
+ /**
+ * ### .NaN
+ * Asserts that the target is `NaN`.
+ *
+ * expect('foo').to.be.NaN;
+ * expect(4).not.to.be.NaN;
+ *
+ * @name NaN
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('NaN', function () {
+ this.assert(
+ isNaN(flag(this, 'object'))
+ , 'expected #{this} to be NaN'
+ , 'expected #{this} not to be NaN'
+ );
+ });
+
+ /**
+ * ### .exist
+ *
+ * Asserts that the target is neither `null` nor `undefined`.
+ *
+ * var foo = 'hi'
+ * , bar = null
+ * , baz;
+ *
+ * expect(foo).to.exist;
+ * expect(bar).to.not.exist;
+ * expect(baz).to.not.exist;
+ *
+ * @name exist
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('exist', function () {
+ this.assert(
+ null != flag(this, 'object')
+ , 'expected #{this} to exist'
+ , 'expected #{this} to not exist'
+ );
+ });
+
+
+ /**
+ * ### .empty
+ *
+ * Asserts that the target's length is `0`. For arrays and strings, it checks
+ * the `length` property. For objects, it gets the count of
+ * enumerable keys.
+ *
+ * expect([]).to.be.empty;
+ * expect('').to.be.empty;
+ * expect({}).to.be.empty;
+ *
+ * @name empty
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('empty', function () {
+ var obj = flag(this, 'object')
+ , expected = obj;
+
+ if (Array.isArray(obj) || 'string' === typeof object) {
+ expected = obj.length;
+ } else if (typeof obj === 'object') {
+ expected = Object.keys(obj).length;
+ }
+
+ this.assert(
+ !expected
+ , 'expected #{this} to be empty'
+ , 'expected #{this} not to be empty'
+ );
+ });
+
+ /**
+ * ### .arguments
+ *
+ * Asserts that the target is an arguments object.
+ *
+ * function test () {
+ * expect(arguments).to.be.arguments;
+ * }
+ *
+ * @name arguments
+ * @alias Arguments
+ * @namespace BDD
+ * @api public
+ */
+
+ function checkArguments () {
+ var obj = flag(this, 'object')
+ , type = Object.prototype.toString.call(obj);
+ this.assert(
+ '[object Arguments]' === type
+ , 'expected #{this} to be arguments but got ' + type
+ , 'expected #{this} to not be arguments'
+ );
+ }
+
+ Assertion.addProperty('arguments', checkArguments);
+ Assertion.addProperty('Arguments', checkArguments);
+
+ /**
+ * ### .equal(value)
+ *
+ * Asserts that the target is strictly equal (`===`) to `value`.
+ * Alternately, if the `deep` flag is set, asserts that
+ * the target is deeply equal to `value`.
+ *
+ * expect('hello').to.equal('hello');
+ * expect(42).to.equal(42);
+ * expect(1).to.not.equal(true);
+ * expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });
+ * expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
+ *
+ * @name equal
+ * @alias equals
+ * @alias eq
+ * @alias deep.equal
+ * @param {Mixed} value
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertEqual (val, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ if (flag(this, 'deep')) {
+ return this.eql(val);
+ } else {
+ this.assert(
+ val === obj
+ , 'expected #{this} to equal #{exp}'
+ , 'expected #{this} to not equal #{exp}'
+ , val
+ , this._obj
+ , true
+ );
+ }
+ }
+
+ Assertion.addMethod('equal', assertEqual);
+ Assertion.addMethod('equals', assertEqual);
+ Assertion.addMethod('eq', assertEqual);
+
+ /**
+ * ### .eql(value)
+ *
+ * Asserts that the target is deeply equal to `value`.
+ *
+ * expect({ foo: 'bar' }).to.eql({ foo: 'bar' });
+ * expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);
+ *
+ * @name eql
+ * @alias eqls
+ * @param {Mixed} value
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertEql(obj, msg) {
+ if (msg) flag(this, 'message', msg);
+ this.assert(
+ _.eql(obj, flag(this, 'object'))
+ , 'expected #{this} to deeply equal #{exp}'
+ , 'expected #{this} to not deeply equal #{exp}'
+ , obj
+ , this._obj
+ , true
+ );
+ }
+
+ Assertion.addMethod('eql', assertEql);
+ Assertion.addMethod('eqls', assertEql);
+
+ /**
+ * ### .above(value)
+ *
+ * Asserts that the target is greater than `value`.
+ *
+ * expect(10).to.be.above(5);
+ *
+ * Can also be used in conjunction with `length` to
+ * assert a minimum length. The benefit being a
+ * more informative error message than if the length
+ * was supplied directly.
+ *
+ * expect('foo').to.have.length.above(2);
+ * expect([ 1, 2, 3 ]).to.have.length.above(2);
+ *
+ * @name above
+ * @alias gt
+ * @alias greaterThan
+ * @param {Number} value
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertAbove (n, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ if (flag(this, 'doLength')) {
+ new Assertion(obj, msg).to.have.property('length');
+ var len = obj.length;
+ this.assert(
+ len > n
+ , 'expected #{this} to have a length above #{exp} but got #{act}'
+ , 'expected #{this} to not have a length above #{exp}'
+ , n
+ , len
+ );
+ } else {
+ this.assert(
+ obj > n
+ , 'expected #{this} to be above ' + n
+ , 'expected #{this} to be at most ' + n
+ );
+ }
+ }
+
+ Assertion.addMethod('above', assertAbove);
+ Assertion.addMethod('gt', assertAbove);
+ Assertion.addMethod('greaterThan', assertAbove);
+
+ /**
+ * ### .least(value)
+ *
+ * Asserts that the target is greater than or equal to `value`.
+ *
+ * expect(10).to.be.at.least(10);
+ *
+ * Can also be used in conjunction with `length` to
+ * assert a minimum length. The benefit being a
+ * more informative error message than if the length
+ * was supplied directly.
+ *
+ * expect('foo').to.have.length.of.at.least(2);
+ * expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);
+ *
+ * @name least
+ * @alias gte
+ * @param {Number} value
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertLeast (n, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ if (flag(this, 'doLength')) {
+ new Assertion(obj, msg).to.have.property('length');
+ var len = obj.length;
+ this.assert(
+ len >= n
+ , 'expected #{this} to have a length at least #{exp} but got #{act}'
+ , 'expected #{this} to have a length below #{exp}'
+ , n
+ , len
+ );
+ } else {
+ this.assert(
+ obj >= n
+ , 'expected #{this} to be at least ' + n
+ , 'expected #{this} to be below ' + n
+ );
+ }
+ }
+
+ Assertion.addMethod('least', assertLeast);
+ Assertion.addMethod('gte', assertLeast);
+
+ /**
+ * ### .below(value)
+ *
+ * Asserts that the target is less than `value`.
+ *
+ * expect(5).to.be.below(10);
+ *
+ * Can also be used in conjunction with `length` to
+ * assert a maximum length. The benefit being a
+ * more informative error message than if the length
+ * was supplied directly.
+ *
+ * expect('foo').to.have.length.below(4);
+ * expect([ 1, 2, 3 ]).to.have.length.below(4);
+ *
+ * @name below
+ * @alias lt
+ * @alias lessThan
+ * @param {Number} value
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertBelow (n, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ if (flag(this, 'doLength')) {
+ new Assertion(obj, msg).to.have.property('length');
+ var len = obj.length;
+ this.assert(
+ len < n
+ , 'expected #{this} to have a length below #{exp} but got #{act}'
+ , 'expected #{this} to not have a length below #{exp}'
+ , n
+ , len
+ );
+ } else {
+ this.assert(
+ obj < n
+ , 'expected #{this} to be below ' + n
+ , 'expected #{this} to be at least ' + n
+ );
+ }
+ }
+
+ Assertion.addMethod('below', assertBelow);
+ Assertion.addMethod('lt', assertBelow);
+ Assertion.addMethod('lessThan', assertBelow);
+
+ /**
+ * ### .most(value)
+ *
+ * Asserts that the target is less than or equal to `value`.
+ *
+ * expect(5).to.be.at.most(5);
+ *
+ * Can also be used in conjunction with `length` to
+ * assert a maximum length. The benefit being a
+ * more informative error message than if the length
+ * was supplied directly.
+ *
+ * expect('foo').to.have.length.of.at.most(4);
+ * expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);
+ *
+ * @name most
+ * @alias lte
+ * @param {Number} value
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertMost (n, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ if (flag(this, 'doLength')) {
+ new Assertion(obj, msg).to.have.property('length');
+ var len = obj.length;
+ this.assert(
+ len <= n
+ , 'expected #{this} to have a length at most #{exp} but got #{act}'
+ , 'expected #{this} to have a length above #{exp}'
+ , n
+ , len
+ );
+ } else {
+ this.assert(
+ obj <= n
+ , 'expected #{this} to be at most ' + n
+ , 'expected #{this} to be above ' + n
+ );
+ }
+ }
+
+ Assertion.addMethod('most', assertMost);
+ Assertion.addMethod('lte', assertMost);
+
+ /**
+ * ### .within(start, finish)
+ *
+ * Asserts that the target is within a range.
+ *
+ * expect(7).to.be.within(5,10);
+ *
+ * Can also be used in conjunction with `length` to
+ * assert a length range. The benefit being a
+ * more informative error message than if the length
+ * was supplied directly.
+ *
+ * expect('foo').to.have.length.within(2,4);
+ * expect([ 1, 2, 3 ]).to.have.length.within(2,4);
+ *
+ * @name within
+ * @param {Number} start lowerbound inclusive
+ * @param {Number} finish upperbound inclusive
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addMethod('within', function (start, finish, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object')
+ , range = start + '..' + finish;
+ if (flag(this, 'doLength')) {
+ new Assertion(obj, msg).to.have.property('length');
+ var len = obj.length;
+ this.assert(
+ len >= start && len <= finish
+ , 'expected #{this} to have a length within ' + range
+ , 'expected #{this} to not have a length within ' + range
+ );
+ } else {
+ this.assert(
+ obj >= start && obj <= finish
+ , 'expected #{this} to be within ' + range
+ , 'expected #{this} to not be within ' + range
+ );
+ }
+ });
+
+ /**
+ * ### .instanceof(constructor)
+ *
+ * Asserts that the target is an instance of `constructor`.
+ *
+ * var Tea = function (name) { this.name = name; }
+ * , Chai = new Tea('chai');
+ *
+ * expect(Chai).to.be.an.instanceof(Tea);
+ * expect([ 1, 2, 3 ]).to.be.instanceof(Array);
+ *
+ * @name instanceof
+ * @param {Constructor} constructor
+ * @param {String} message _optional_
+ * @alias instanceOf
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertInstanceOf (constructor, msg) {
+ if (msg) flag(this, 'message', msg);
+ var name = _.getName(constructor);
+ this.assert(
+ flag(this, 'object') instanceof constructor
+ , 'expected #{this} to be an instance of ' + name
+ , 'expected #{this} to not be an instance of ' + name
+ );
+ };
+
+ Assertion.addMethod('instanceof', assertInstanceOf);
+ Assertion.addMethod('instanceOf', assertInstanceOf);
+
+ /**
+ * ### .property(name, [value])
+ *
+ * Asserts that the target has a property `name`, optionally asserting that
+ * the value of that property is strictly equal to `value`.
+ * If the `deep` flag is set, you can use dot- and bracket-notation for deep
+ * references into objects and arrays.
+ *
+ * // simple referencing
+ * var obj = { foo: 'bar' };
+ * expect(obj).to.have.property('foo');
+ * expect(obj).to.have.property('foo', 'bar');
+ *
+ * // deep referencing
+ * var deepObj = {
+ * green: { tea: 'matcha' }
+ * , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]
+ * };
+ *
+ * expect(deepObj).to.have.deep.property('green.tea', 'matcha');
+ * expect(deepObj).to.have.deep.property('teas[1]', 'matcha');
+ * expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');
+ *
+ * You can also use an array as the starting point of a `deep.property`
+ * assertion, or traverse nested arrays.
+ *
+ * var arr = [
+ * [ 'chai', 'matcha', 'konacha' ]
+ * , [ { tea: 'chai' }
+ * , { tea: 'matcha' }
+ * , { tea: 'konacha' } ]
+ * ];
+ *
+ * expect(arr).to.have.deep.property('[0][1]', 'matcha');
+ * expect(arr).to.have.deep.property('[1][2].tea', 'konacha');
+ *
+ * Furthermore, `property` changes the subject of the assertion
+ * to be the value of that property from the original object. This
+ * permits for further chainable assertions on that property.
+ *
+ * expect(obj).to.have.property('foo')
+ * .that.is.a('string');
+ * expect(deepObj).to.have.property('green')
+ * .that.is.an('object')
+ * .that.deep.equals({ tea: 'matcha' });
+ * expect(deepObj).to.have.property('teas')
+ * .that.is.an('array')
+ * .with.deep.property('[2]')
+ * .that.deep.equals({ tea: 'konacha' });
+ *
+ * Note that dots and bracket in `name` must be backslash-escaped when
+ * the `deep` flag is set, while they must NOT be escaped when the `deep`
+ * flag is not set.
+ *
+ * // simple referencing
+ * var css = { '.link[target]': 42 };
+ * expect(css).to.have.property('.link[target]', 42);
+ *
+ * // deep referencing
+ * var deepCss = { '.link': { '[target]': 42 }};
+ * expect(deepCss).to.have.deep.property('\\.link.\\[target\\]', 42);
+ *
+ * @name property
+ * @alias deep.property
+ * @param {String} name
+ * @param {Mixed} value (optional)
+ * @param {String} message _optional_
+ * @returns value of property for chaining
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addMethod('property', function (name, val, msg) {
+ if (msg) flag(this, 'message', msg);
+
+ var isDeep = !!flag(this, 'deep')
+ , descriptor = isDeep ? 'deep property ' : 'property '
+ , negate = flag(this, 'negate')
+ , obj = flag(this, 'object')
+ , pathInfo = isDeep ? _.getPathInfo(name, obj) : null
+ , hasProperty = isDeep
+ ? pathInfo.exists
+ : _.hasProperty(name, obj)
+ , value = isDeep
+ ? pathInfo.value
+ : obj[name];
+
+ if (negate && arguments.length > 1) {
+ if (undefined === value) {
+ msg = (msg != null) ? msg + ': ' : '';
+ throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));
+ }
+ } else {
+ this.assert(
+ hasProperty
+ , 'expected #{this} to have a ' + descriptor + _.inspect(name)
+ , 'expected #{this} to not have ' + descriptor + _.inspect(name));
+ }
+
+ if (arguments.length > 1) {
+ this.assert(
+ val === value
+ , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'
+ , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'
+ , val
+ , value
+ );
+ }
+
+ flag(this, 'object', value);
+ });
+
+
+ /**
+ * ### .ownProperty(name)
+ *
+ * Asserts that the target has an own property `name`.
+ *
+ * expect('test').to.have.ownProperty('length');
+ *
+ * @name ownProperty
+ * @alias haveOwnProperty
+ * @param {String} name
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertOwnProperty (name, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ this.assert(
+ obj.hasOwnProperty(name)
+ , 'expected #{this} to have own property ' + _.inspect(name)
+ , 'expected #{this} to not have own property ' + _.inspect(name)
+ );
+ }
+
+ Assertion.addMethod('ownProperty', assertOwnProperty);
+ Assertion.addMethod('haveOwnProperty', assertOwnProperty);
+
+ /**
+ * ### .ownPropertyDescriptor(name[, descriptor[, message]])
+ *
+ * Asserts that the target has an own property descriptor `name`, that optionally matches `descriptor`.
+ *
+ * expect('test').to.have.ownPropertyDescriptor('length');
+ * expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });
+ * expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });
+ * expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);
+ * expect('test').ownPropertyDescriptor('length').to.have.keys('value');
+ *
+ * @name ownPropertyDescriptor
+ * @alias haveOwnPropertyDescriptor
+ * @param {String} name
+ * @param {Object} descriptor _optional_
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertOwnPropertyDescriptor (name, descriptor, msg) {
+ if (typeof descriptor === 'string') {
+ msg = descriptor;
+ descriptor = null;
+ }
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);
+ if (actualDescriptor && descriptor) {
+ this.assert(
+ _.eql(descriptor, actualDescriptor)
+ , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)
+ , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)
+ , descriptor
+ , actualDescriptor
+ , true
+ );
+ } else {
+ this.assert(
+ actualDescriptor
+ , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)
+ , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)
+ );
+ }
+ flag(this, 'object', actualDescriptor);
+ }
+
+ Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);
+ Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);
+
+ /**
+ * ### .length
+ *
+ * Sets the `doLength` flag later used as a chain precursor to a value
+ * comparison for the `length` property.
+ *
+ * expect('foo').to.have.length.above(2);
+ * expect([ 1, 2, 3 ]).to.have.length.above(2);
+ * expect('foo').to.have.length.below(4);
+ * expect([ 1, 2, 3 ]).to.have.length.below(4);
+ * expect('foo').to.have.length.within(2,4);
+ * expect([ 1, 2, 3 ]).to.have.length.within(2,4);
+ *
+ * *Deprecation notice:* Using `length` as an assertion will be deprecated
+ * in version 2.4.0 and removed in 3.0.0. Code using the old style of
+ * asserting for `length` property value using `length(value)` should be
+ * switched to use `lengthOf(value)` instead.
+ *
+ * @name length
+ * @namespace BDD
+ * @api public
+ */
+
+ /**
+ * ### .lengthOf(value[, message])
+ *
+ * Asserts that the target's `length` property has
+ * the expected value.
+ *
+ * expect([ 1, 2, 3]).to.have.lengthOf(3);
+ * expect('foobar').to.have.lengthOf(6);
+ *
+ * @name lengthOf
+ * @param {Number} length
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertLengthChain () {
+ flag(this, 'doLength', true);
+ }
+
+ function assertLength (n, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ new Assertion(obj, msg).to.have.property('length');
+ var len = obj.length;
+
+ this.assert(
+ len == n
+ , 'expected #{this} to have a length of #{exp} but got #{act}'
+ , 'expected #{this} to not have a length of #{act}'
+ , n
+ , len
+ );
+ }
+
+ Assertion.addChainableMethod('length', assertLength, assertLengthChain);
+ Assertion.addMethod('lengthOf', assertLength);
+
+ /**
+ * ### .match(regexp)
+ *
+ * Asserts that the target matches a regular expression.
+ *
+ * expect('foobar').to.match(/^foo/);
+ *
+ * @name match
+ * @alias matches
+ * @param {RegExp} RegularExpression
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+ function assertMatch(re, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ this.assert(
+ re.exec(obj)
+ , 'expected #{this} to match ' + re
+ , 'expected #{this} not to match ' + re
+ );
+ }
+
+ Assertion.addMethod('match', assertMatch);
+ Assertion.addMethod('matches', assertMatch);
+
+ /**
+ * ### .string(string)
+ *
+ * Asserts that the string target contains another string.
+ *
+ * expect('foobar').to.have.string('bar');
+ *
+ * @name string
+ * @param {String} string
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addMethod('string', function (str, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ new Assertion(obj, msg).is.a('string');
+
+ this.assert(
+ ~obj.indexOf(str)
+ , 'expected #{this} to contain ' + _.inspect(str)
+ , 'expected #{this} to not contain ' + _.inspect(str)
+ );
+ });
+
+
+ /**
+ * ### .keys(key1, [key2], [...])
+ *
+ * Asserts that the target contains any or all of the passed-in keys.
+ * Use in combination with `any`, `all`, `contains`, or `have` will affect
+ * what will pass.
+ *
+ * When used in conjunction with `any`, at least one key that is passed
+ * in must exist in the target object. This is regardless whether or not
+ * the `have` or `contain` qualifiers are used. Note, either `any` or `all`
+ * should be used in the assertion. If neither are used, the assertion is
+ * defaulted to `all`.
+ *
+ * When both `all` and `contain` are used, the target object must have at
+ * least all of the passed-in keys but may have more keys not listed.
+ *
+ * When both `all` and `have` are used, the target object must both contain
+ * all of the passed-in keys AND the number of keys in the target object must
+ * match the number of keys passed in (in other words, a target object must
+ * have all and only all of the passed-in keys).
+ *
+ * expect({ foo: 1, bar: 2 }).to.have.any.keys('foo', 'baz');
+ * expect({ foo: 1, bar: 2 }).to.have.any.keys('foo');
+ * expect({ foo: 1, bar: 2 }).to.contain.any.keys('bar', 'baz');
+ * expect({ foo: 1, bar: 2 }).to.contain.any.keys(['foo']);
+ * expect({ foo: 1, bar: 2 }).to.contain.any.keys({'foo': 6});
+ * expect({ foo: 1, bar: 2 }).to.have.all.keys(['bar', 'foo']);
+ * expect({ foo: 1, bar: 2 }).to.have.all.keys({'bar': 6, 'foo': 7});
+ * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys(['bar', 'foo']);
+ * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys({'bar': 6});
+ *
+ *
+ * @name keys
+ * @alias key
+ * @param {...String|Array|Object} keys
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertKeys (keys) {
+ var obj = flag(this, 'object')
+ , str
+ , ok = true
+ , mixedArgsMsg = 'keys must be given single argument of Array|Object|String, or multiple String arguments';
+
+ switch (_.type(keys)) {
+ case "array":
+ if (arguments.length > 1) throw (new Error(mixedArgsMsg));
+ break;
+ case "object":
+ if (arguments.length > 1) throw (new Error(mixedArgsMsg));
+ keys = Object.keys(keys);
+ break;
+ default:
+ keys = Array.prototype.slice.call(arguments);
+ }
+
+ if (!keys.length) throw new Error('keys required');
+
+ var actual = Object.keys(obj)
+ , expected = keys
+ , len = keys.length
+ , any = flag(this, 'any')
+ , all = flag(this, 'all');
+
+ if (!any && !all) {
+ all = true;
+ }
+
+ // Has any
+ if (any) {
+ var intersection = expected.filter(function(key) {
+ return ~actual.indexOf(key);
+ });
+ ok = intersection.length > 0;
+ }
+
+ // Has all
+ if (all) {
+ ok = keys.every(function(key){
+ return ~actual.indexOf(key);
+ });
+ if (!flag(this, 'negate') && !flag(this, 'contains')) {
+ ok = ok && keys.length == actual.length;
+ }
+ }
+
+ // Key string
+ if (len > 1) {
+ keys = keys.map(function(key){
+ return _.inspect(key);
+ });
+ var last = keys.pop();
+ if (all) {
+ str = keys.join(', ') + ', and ' + last;
+ }
+ if (any) {
+ str = keys.join(', ') + ', or ' + last;
+ }
+ } else {
+ str = _.inspect(keys[0]);
+ }
+
+ // Form
+ str = (len > 1 ? 'keys ' : 'key ') + str;
+
+ // Have / include
+ str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;
+
+ // Assertion
+ this.assert(
+ ok
+ , 'expected #{this} to ' + str
+ , 'expected #{this} to not ' + str
+ , expected.slice(0).sort()
+ , actual.sort()
+ , true
+ );
+ }
+
+ Assertion.addMethod('keys', assertKeys);
+ Assertion.addMethod('key', assertKeys);
+
+ /**
+ * ### .throw(constructor)
+ *
+ * Asserts that the function target will throw a specific error, or specific type of error
+ * (as determined using `instanceof`), optionally with a RegExp or string inclusion test
+ * for the error's message.
+ *
+ * var err = new ReferenceError('This is a bad function.');
+ * var fn = function () { throw err; }
+ * expect(fn).to.throw(ReferenceError);
+ * expect(fn).to.throw(Error);
+ * expect(fn).to.throw(/bad function/);
+ * expect(fn).to.not.throw('good function');
+ * expect(fn).to.throw(ReferenceError, /bad function/);
+ * expect(fn).to.throw(err);
+ *
+ * Please note that when a throw expectation is negated, it will check each
+ * parameter independently, starting with error constructor type. The appropriate way
+ * to check for the existence of a type of error but for a message that does not match
+ * is to use `and`.
+ *
+ * expect(fn).to.throw(ReferenceError)
+ * .and.not.throw(/good function/);
+ *
+ * @name throw
+ * @alias throws
+ * @alias Throw
+ * @param {ErrorConstructor} constructor
+ * @param {String|RegExp} expected error message
+ * @param {String} message _optional_
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @returns error for chaining (null if no error)
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertThrows (constructor, errMsg, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ new Assertion(obj, msg).is.a('function');
+
+ var thrown = false
+ , desiredError = null
+ , name = null
+ , thrownError = null;
+
+ if (arguments.length === 0) {
+ errMsg = null;
+ constructor = null;
+ } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {
+ errMsg = constructor;
+ constructor = null;
+ } else if (constructor && constructor instanceof Error) {
+ desiredError = constructor;
+ constructor = null;
+ errMsg = null;
+ } else if (typeof constructor === 'function') {
+ name = constructor.prototype.name;
+ if (!name || (name === 'Error' && constructor !== Error)) {
+ name = constructor.name || (new constructor()).name;
+ }
+ } else {
+ constructor = null;
+ }
+
+ try {
+ obj();
+ } catch (err) {
+ // first, check desired error
+ if (desiredError) {
+ this.assert(
+ err === desiredError
+ , 'expected #{this} to throw #{exp} but #{act} was thrown'
+ , 'expected #{this} to not throw #{exp}'
+ , (desiredError instanceof Error ? desiredError.toString() : desiredError)
+ , (err instanceof Error ? err.toString() : err)
+ );
+
+ flag(this, 'object', err);
+ return this;
+ }
+
+ // next, check constructor
+ if (constructor) {
+ this.assert(
+ err instanceof constructor
+ , 'expected #{this} to throw #{exp} but #{act} was thrown'
+ , 'expected #{this} to not throw #{exp} but #{act} was thrown'
+ , name
+ , (err instanceof Error ? err.toString() : err)
+ );
+
+ if (!errMsg) {
+ flag(this, 'object', err);
+ return this;
+ }
+ }
+
+ // next, check message
+ var message = 'error' === _.type(err) && "message" in err
+ ? err.message
+ : '' + err;
+
+ if ((message != null) && errMsg && errMsg instanceof RegExp) {
+ this.assert(
+ errMsg.exec(message)
+ , 'expected #{this} to throw error matching #{exp} but got #{act}'
+ , 'expected #{this} to throw error not matching #{exp}'
+ , errMsg
+ , message
+ );
+
+ flag(this, 'object', err);
+ return this;
+ } else if ((message != null) && errMsg && 'string' === typeof errMsg) {
+ this.assert(
+ ~message.indexOf(errMsg)
+ , 'expected #{this} to throw error including #{exp} but got #{act}'
+ , 'expected #{this} to throw error not including #{act}'
+ , errMsg
+ , message
+ );
+
+ flag(this, 'object', err);
+ return this;
+ } else {
+ thrown = true;
+ thrownError = err;
+ }
+ }
+
+ var actuallyGot = ''
+ , expectedThrown = name !== null
+ ? name
+ : desiredError
+ ? '#{exp}' //_.inspect(desiredError)
+ : 'an error';
+
+ if (thrown) {
+ actuallyGot = ' but #{act} was thrown'
+ }
+
+ this.assert(
+ thrown === true
+ , 'expected #{this} to throw ' + expectedThrown + actuallyGot
+ , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
+ , (desiredError instanceof Error ? desiredError.toString() : desiredError)
+ , (thrownError instanceof Error ? thrownError.toString() : thrownError)
+ );
+
+ flag(this, 'object', thrownError);
+ };
+
+ Assertion.addMethod('throw', assertThrows);
+ Assertion.addMethod('throws', assertThrows);
+ Assertion.addMethod('Throw', assertThrows);
+
+ /**
+ * ### .respondTo(method)
+ *
+ * Asserts that the object or class target will respond to a method.
+ *
+ * Klass.prototype.bar = function(){};
+ * expect(Klass).to.respondTo('bar');
+ * expect(obj).to.respondTo('bar');
+ *
+ * To check if a constructor will respond to a static function,
+ * set the `itself` flag.
+ *
+ * Klass.baz = function(){};
+ * expect(Klass).itself.to.respondTo('baz');
+ *
+ * @name respondTo
+ * @alias respondsTo
+ * @param {String} method
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function respondTo (method, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object')
+ , itself = flag(this, 'itself')
+ , context = ('function' === _.type(obj) && !itself)
+ ? obj.prototype[method]
+ : obj[method];
+
+ this.assert(
+ 'function' === typeof context
+ , 'expected #{this} to respond to ' + _.inspect(method)
+ , 'expected #{this} to not respond to ' + _.inspect(method)
+ );
+ }
+
+ Assertion.addMethod('respondTo', respondTo);
+ Assertion.addMethod('respondsTo', respondTo);
+
+ /**
+ * ### .itself
+ *
+ * Sets the `itself` flag, later used by the `respondTo` assertion.
+ *
+ * function Foo() {}
+ * Foo.bar = function() {}
+ * Foo.prototype.baz = function() {}
+ *
+ * expect(Foo).itself.to.respondTo('bar');
+ * expect(Foo).itself.not.to.respondTo('baz');
+ *
+ * @name itself
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('itself', function () {
+ flag(this, 'itself', true);
+ });
+
+ /**
+ * ### .satisfy(method)
+ *
+ * Asserts that the target passes a given truth test.
+ *
+ * expect(1).to.satisfy(function(num) { return num > 0; });
+ *
+ * @name satisfy
+ * @alias satisfies
+ * @param {Function} matcher
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function satisfy (matcher, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+ var result = matcher(obj);
+ this.assert(
+ result
+ , 'expected #{this} to satisfy ' + _.objDisplay(matcher)
+ , 'expected #{this} to not satisfy' + _.objDisplay(matcher)
+ , this.negate ? false : true
+ , result
+ );
+ }
+
+ Assertion.addMethod('satisfy', satisfy);
+ Assertion.addMethod('satisfies', satisfy);
+
+ /**
+ * ### .closeTo(expected, delta)
+ *
+ * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+ *
+ * expect(1.5).to.be.closeTo(1, 0.5);
+ *
+ * @name closeTo
+ * @alias approximately
+ * @param {Number} expected
+ * @param {Number} delta
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function closeTo(expected, delta, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+
+ new Assertion(obj, msg).is.a('number');
+ if (_.type(expected) !== 'number' || _.type(delta) !== 'number') {
+ throw new Error('the arguments to closeTo or approximately must be numbers');
+ }
+
+ this.assert(
+ Math.abs(obj - expected) <= delta
+ , 'expected #{this} to be close to ' + expected + ' +/- ' + delta
+ , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta
+ );
+ }
+
+ Assertion.addMethod('closeTo', closeTo);
+ Assertion.addMethod('approximately', closeTo);
+
+ function isSubsetOf(subset, superset, cmp) {
+ return subset.every(function(elem) {
+ if (!cmp) return superset.indexOf(elem) !== -1;
+
+ return superset.some(function(elem2) {
+ return cmp(elem, elem2);
+ });
+ })
+ }
+
+ /**
+ * ### .members(set)
+ *
+ * Asserts that the target is a superset of `set`,
+ * or that the target and `set` have the same strictly-equal (===) members.
+ * Alternately, if the `deep` flag is set, set members are compared for deep
+ * equality.
+ *
+ * expect([1, 2, 3]).to.include.members([3, 2]);
+ * expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
+ *
+ * expect([4, 2]).to.have.members([2, 4]);
+ * expect([5, 2]).to.not.have.members([5, 2, 1]);
+ *
+ * expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);
+ *
+ * @name members
+ * @param {Array} set
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addMethod('members', function (subset, msg) {
+ if (msg) flag(this, 'message', msg);
+ var obj = flag(this, 'object');
+
+ new Assertion(obj).to.be.an('array');
+ new Assertion(subset).to.be.an('array');
+
+ var cmp = flag(this, 'deep') ? _.eql : undefined;
+
+ if (flag(this, 'contains')) {
+ return this.assert(
+ isSubsetOf(subset, obj, cmp)
+ , 'expected #{this} to be a superset of #{act}'
+ , 'expected #{this} to not be a superset of #{act}'
+ , obj
+ , subset
+ );
+ }
+
+ this.assert(
+ isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)
+ , 'expected #{this} to have the same members as #{act}'
+ , 'expected #{this} to not have the same members as #{act}'
+ , obj
+ , subset
+ );
+ });
+
+ /**
+ * ### .oneOf(list)
+ *
+ * Assert that a value appears somewhere in the top level of array `list`.
+ *
+ * expect('a').to.be.oneOf(['a', 'b', 'c']);
+ * expect(9).to.not.be.oneOf(['z']);
+ * expect([3]).to.not.be.oneOf([1, 2, [3]]);
+ *
+ * var three = [3];
+ * // for object-types, contents are not compared
+ * expect(three).to.not.be.oneOf([1, 2, [3]]);
+ * // comparing references works
+ * expect(three).to.be.oneOf([1, 2, three]);
+ *
+ * @name oneOf
+ * @param {Array<*>} list
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function oneOf (list, msg) {
+ if (msg) flag(this, 'message', msg);
+ var expected = flag(this, 'object');
+ new Assertion(list).to.be.an('array');
+
+ this.assert(
+ list.indexOf(expected) > -1
+ , 'expected #{this} to be one of #{exp}'
+ , 'expected #{this} to not be one of #{exp}'
+ , list
+ , expected
+ );
+ }
+
+ Assertion.addMethod('oneOf', oneOf);
+
+
+ /**
+ * ### .change(function)
+ *
+ * Asserts that a function changes an object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val += 3 };
+ * var noChangeFn = function() { return 'foo' + 'bar'; }
+ * expect(fn).to.change(obj, 'val');
+ * expect(noChangeFn).to.not.change(obj, 'val')
+ *
+ * @name change
+ * @alias changes
+ * @alias Change
+ * @param {String} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertChanges (object, prop, msg) {
+ if (msg) flag(this, 'message', msg);
+ var fn = flag(this, 'object');
+ new Assertion(object, msg).to.have.property(prop);
+ new Assertion(fn).is.a('function');
+
+ var initial = object[prop];
+ fn();
+
+ this.assert(
+ initial !== object[prop]
+ , 'expected .' + prop + ' to change'
+ , 'expected .' + prop + ' to not change'
+ );
+ }
+
+ Assertion.addChainableMethod('change', assertChanges);
+ Assertion.addChainableMethod('changes', assertChanges);
+
+ /**
+ * ### .increase(function)
+ *
+ * Asserts that a function increases an object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 15 };
+ * expect(fn).to.increase(obj, 'val');
+ *
+ * @name increase
+ * @alias increases
+ * @alias Increase
+ * @param {String} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertIncreases (object, prop, msg) {
+ if (msg) flag(this, 'message', msg);
+ var fn = flag(this, 'object');
+ new Assertion(object, msg).to.have.property(prop);
+ new Assertion(fn).is.a('function');
+
+ var initial = object[prop];
+ fn();
+
+ this.assert(
+ object[prop] - initial > 0
+ , 'expected .' + prop + ' to increase'
+ , 'expected .' + prop + ' to not increase'
+ );
+ }
+
+ Assertion.addChainableMethod('increase', assertIncreases);
+ Assertion.addChainableMethod('increases', assertIncreases);
+
+ /**
+ * ### .decrease(function)
+ *
+ * Asserts that a function decreases an object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 5 };
+ * expect(fn).to.decrease(obj, 'val');
+ *
+ * @name decrease
+ * @alias decreases
+ * @alias Decrease
+ * @param {String} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace BDD
+ * @api public
+ */
+
+ function assertDecreases (object, prop, msg) {
+ if (msg) flag(this, 'message', msg);
+ var fn = flag(this, 'object');
+ new Assertion(object, msg).to.have.property(prop);
+ new Assertion(fn).is.a('function');
+
+ var initial = object[prop];
+ fn();
+
+ this.assert(
+ object[prop] - initial < 0
+ , 'expected .' + prop + ' to decrease'
+ , 'expected .' + prop + ' to not decrease'
+ );
+ }
+
+ Assertion.addChainableMethod('decrease', assertDecreases);
+ Assertion.addChainableMethod('decreases', assertDecreases);
+
+ /**
+ * ### .extensible
+ *
+ * Asserts that the target is extensible (can have new properties added to
+ * it).
+ *
+ * var nonExtensibleObject = Object.preventExtensions({});
+ * var sealedObject = Object.seal({});
+ * var frozenObject = Object.freeze({});
+ *
+ * expect({}).to.be.extensible;
+ * expect(nonExtensibleObject).to.not.be.extensible;
+ * expect(sealedObject).to.not.be.extensible;
+ * expect(frozenObject).to.not.be.extensible;
+ *
+ * @name extensible
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('extensible', function() {
+ var obj = flag(this, 'object');
+
+ // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
+ // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible
+ // The following provides ES6 behavior when a TypeError is thrown under ES5.
+
+ var isExtensible;
+
+ try {
+ isExtensible = Object.isExtensible(obj);
+ } catch (err) {
+ if (err instanceof TypeError) isExtensible = false;
+ else throw err;
+ }
+
+ this.assert(
+ isExtensible
+ , 'expected #{this} to be extensible'
+ , 'expected #{this} to not be extensible'
+ );
+ });
+
+ /**
+ * ### .sealed
+ *
+ * Asserts that the target is sealed (cannot have new properties added to it
+ * and its existing properties cannot be removed).
+ *
+ * var sealedObject = Object.seal({});
+ * var frozenObject = Object.freeze({});
+ *
+ * expect(sealedObject).to.be.sealed;
+ * expect(frozenObject).to.be.sealed;
+ * expect({}).to.not.be.sealed;
+ *
+ * @name sealed
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('sealed', function() {
+ var obj = flag(this, 'object');
+
+ // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
+ // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.
+ // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed
+ // The following provides ES6 behavior when a TypeError is thrown under ES5.
+
+ var isSealed;
+
+ try {
+ isSealed = Object.isSealed(obj);
+ } catch (err) {
+ if (err instanceof TypeError) isSealed = true;
+ else throw err;
+ }
+
+ this.assert(
+ isSealed
+ , 'expected #{this} to be sealed'
+ , 'expected #{this} to not be sealed'
+ );
+ });
+
+ /**
+ * ### .frozen
+ *
+ * Asserts that the target is frozen (cannot have new properties added to it
+ * and its existing properties cannot be modified).
+ *
+ * var frozenObject = Object.freeze({});
+ *
+ * expect(frozenObject).to.be.frozen;
+ * expect({}).to.not.be.frozen;
+ *
+ * @name frozen
+ * @namespace BDD
+ * @api public
+ */
+
+ Assertion.addProperty('frozen', function() {
+ var obj = flag(this, 'object');
+
+ // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.
+ // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.
+ // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen
+ // The following provides ES6 behavior when a TypeError is thrown under ES5.
+
+ var isFrozen;
+
+ try {
+ isFrozen = Object.isFrozen(obj);
+ } catch (err) {
+ if (err instanceof TypeError) isFrozen = true;
+ else throw err;
+ }
+
+ this.assert(
+ isFrozen
+ , 'expected #{this} to be frozen'
+ , 'expected #{this} to not be frozen'
+ );
+ });
+};
+
+},{}],6:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+
+module.exports = function (chai, util) {
+
+ /*!
+ * Chai dependencies.
+ */
+
+ var Assertion = chai.Assertion
+ , flag = util.flag;
+
+ /*!
+ * Module export.
+ */
+
+ /**
+ * ### assert(expression, message)
+ *
+ * Write your own test expressions.
+ *
+ * assert('foo' !== 'bar', 'foo is not bar');
+ * assert(Array.isArray([]), 'empty arrays are arrays');
+ *
+ * @param {Mixed} expression to test for truthiness
+ * @param {String} message to display on error
+ * @name assert
+ * @namespace Assert
+ * @api public
+ */
+
+ var assert = chai.assert = function (express, errmsg) {
+ var test = new Assertion(null, null, chai.assert);
+ test.assert(
+ express
+ , errmsg
+ , '[ negation message unavailable ]'
+ );
+ };
+
+ /**
+ * ### .fail(actual, expected, [message], [operator])
+ *
+ * Throw a failure. Node.js `assert` module-compatible.
+ *
+ * @name fail
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @param {String} operator
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.fail = function (actual, expected, message, operator) {
+ message = message || 'assert.fail()';
+ throw new chai.AssertionError(message, {
+ actual: actual
+ , expected: expected
+ , operator: operator
+ }, assert.fail);
+ };
+
+ /**
+ * ### .isOk(object, [message])
+ *
+ * Asserts that `object` is truthy.
+ *
+ * assert.isOk('everything', 'everything is ok');
+ * assert.isOk(false, 'this will fail');
+ *
+ * @name isOk
+ * @alias ok
+ * @param {Mixed} object to test
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isOk = function (val, msg) {
+ new Assertion(val, msg).is.ok;
+ };
+
+ /**
+ * ### .isNotOk(object, [message])
+ *
+ * Asserts that `object` is falsy.
+ *
+ * assert.isNotOk('everything', 'this will fail');
+ * assert.isNotOk(false, 'this will pass');
+ *
+ * @name isNotOk
+ * @alias notOk
+ * @param {Mixed} object to test
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotOk = function (val, msg) {
+ new Assertion(val, msg).is.not.ok;
+ };
+
+ /**
+ * ### .equal(actual, expected, [message])
+ *
+ * Asserts non-strict equality (`==`) of `actual` and `expected`.
+ *
+ * assert.equal(3, '3', '== coerces values to strings');
+ *
+ * @name equal
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.equal = function (act, exp, msg) {
+ var test = new Assertion(act, msg, assert.equal);
+
+ test.assert(
+ exp == flag(test, 'object')
+ , 'expected #{this} to equal #{exp}'
+ , 'expected #{this} to not equal #{act}'
+ , exp
+ , act
+ );
+ };
+
+ /**
+ * ### .notEqual(actual, expected, [message])
+ *
+ * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
+ *
+ * assert.notEqual(3, 4, 'these numbers are not equal');
+ *
+ * @name notEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notEqual = function (act, exp, msg) {
+ var test = new Assertion(act, msg, assert.notEqual);
+
+ test.assert(
+ exp != flag(test, 'object')
+ , 'expected #{this} to not equal #{exp}'
+ , 'expected #{this} to equal #{act}'
+ , exp
+ , act
+ );
+ };
+
+ /**
+ * ### .strictEqual(actual, expected, [message])
+ *
+ * Asserts strict equality (`===`) of `actual` and `expected`.
+ *
+ * assert.strictEqual(true, true, 'these booleans are strictly equal');
+ *
+ * @name strictEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.strictEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.equal(exp);
+ };
+
+ /**
+ * ### .notStrictEqual(actual, expected, [message])
+ *
+ * Asserts strict inequality (`!==`) of `actual` and `expected`.
+ *
+ * assert.notStrictEqual(3, '3', 'no coercion for strict equality');
+ *
+ * @name notStrictEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notStrictEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.not.equal(exp);
+ };
+
+ /**
+ * ### .deepEqual(actual, expected, [message])
+ *
+ * Asserts that `actual` is deeply equal to `expected`.
+ *
+ * assert.deepEqual({ tea: 'green' }, { tea: 'green' });
+ *
+ * @name deepEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.deepEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.eql(exp);
+ };
+
+ /**
+ * ### .notDeepEqual(actual, expected, [message])
+ *
+ * Assert that `actual` is not deeply equal to `expected`.
+ *
+ * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });
+ *
+ * @name notDeepEqual
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notDeepEqual = function (act, exp, msg) {
+ new Assertion(act, msg).to.not.eql(exp);
+ };
+
+ /**
+ * ### .isAbove(valueToCheck, valueToBeAbove, [message])
+ *
+ * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`
+ *
+ * assert.isAbove(5, 2, '5 is strictly greater than 2');
+ *
+ * @name isAbove
+ * @param {Mixed} valueToCheck
+ * @param {Mixed} valueToBeAbove
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isAbove = function (val, abv, msg) {
+ new Assertion(val, msg).to.be.above(abv);
+ };
+
+ /**
+ * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])
+ *
+ * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`
+ *
+ * assert.isAtLeast(5, 2, '5 is greater or equal to 2');
+ * assert.isAtLeast(3, 3, '3 is greater or equal to 3');
+ *
+ * @name isAtLeast
+ * @param {Mixed} valueToCheck
+ * @param {Mixed} valueToBeAtLeast
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isAtLeast = function (val, atlst, msg) {
+ new Assertion(val, msg).to.be.least(atlst);
+ };
+
+ /**
+ * ### .isBelow(valueToCheck, valueToBeBelow, [message])
+ *
+ * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`
+ *
+ * assert.isBelow(3, 6, '3 is strictly less than 6');
+ *
+ * @name isBelow
+ * @param {Mixed} valueToCheck
+ * @param {Mixed} valueToBeBelow
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isBelow = function (val, blw, msg) {
+ new Assertion(val, msg).to.be.below(blw);
+ };
+
+ /**
+ * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])
+ *
+ * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`
+ *
+ * assert.isAtMost(3, 6, '3 is less than or equal to 6');
+ * assert.isAtMost(4, 4, '4 is less than or equal to 4');
+ *
+ * @name isAtMost
+ * @param {Mixed} valueToCheck
+ * @param {Mixed} valueToBeAtMost
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isAtMost = function (val, atmst, msg) {
+ new Assertion(val, msg).to.be.most(atmst);
+ };
+
+ /**
+ * ### .isTrue(value, [message])
+ *
+ * Asserts that `value` is true.
+ *
+ * var teaServed = true;
+ * assert.isTrue(teaServed, 'the tea has been served');
+ *
+ * @name isTrue
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isTrue = function (val, msg) {
+ new Assertion(val, msg).is['true'];
+ };
+
+ /**
+ * ### .isNotTrue(value, [message])
+ *
+ * Asserts that `value` is not true.
+ *
+ * var tea = 'tasty chai';
+ * assert.isNotTrue(tea, 'great, time for tea!');
+ *
+ * @name isNotTrue
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotTrue = function (val, msg) {
+ new Assertion(val, msg).to.not.equal(true);
+ };
+
+ /**
+ * ### .isFalse(value, [message])
+ *
+ * Asserts that `value` is false.
+ *
+ * var teaServed = false;
+ * assert.isFalse(teaServed, 'no tea yet? hmm...');
+ *
+ * @name isFalse
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isFalse = function (val, msg) {
+ new Assertion(val, msg).is['false'];
+ };
+
+ /**
+ * ### .isNotFalse(value, [message])
+ *
+ * Asserts that `value` is not false.
+ *
+ * var tea = 'tasty chai';
+ * assert.isNotFalse(tea, 'great, time for tea!');
+ *
+ * @name isNotFalse
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotFalse = function (val, msg) {
+ new Assertion(val, msg).to.not.equal(false);
+ };
+
+ /**
+ * ### .isNull(value, [message])
+ *
+ * Asserts that `value` is null.
+ *
+ * assert.isNull(err, 'there was no error');
+ *
+ * @name isNull
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNull = function (val, msg) {
+ new Assertion(val, msg).to.equal(null);
+ };
+
+ /**
+ * ### .isNotNull(value, [message])
+ *
+ * Asserts that `value` is not null.
+ *
+ * var tea = 'tasty chai';
+ * assert.isNotNull(tea, 'great, time for tea!');
+ *
+ * @name isNotNull
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotNull = function (val, msg) {
+ new Assertion(val, msg).to.not.equal(null);
+ };
+
+ /**
+ * ### .isNaN
+ * Asserts that value is NaN
+ *
+ * assert.isNaN('foo', 'foo is NaN');
+ *
+ * @name isNaN
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNaN = function (val, msg) {
+ new Assertion(val, msg).to.be.NaN;
+ };
+
+ /**
+ * ### .isNotNaN
+ * Asserts that value is not NaN
+ *
+ * assert.isNotNaN(4, '4 is not NaN');
+ *
+ * @name isNotNaN
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+ assert.isNotNaN = function (val, msg) {
+ new Assertion(val, msg).not.to.be.NaN;
+ };
+
+ /**
+ * ### .isUndefined(value, [message])
+ *
+ * Asserts that `value` is `undefined`.
+ *
+ * var tea;
+ * assert.isUndefined(tea, 'no tea defined');
+ *
+ * @name isUndefined
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isUndefined = function (val, msg) {
+ new Assertion(val, msg).to.equal(undefined);
+ };
+
+ /**
+ * ### .isDefined(value, [message])
+ *
+ * Asserts that `value` is not `undefined`.
+ *
+ * var tea = 'cup of chai';
+ * assert.isDefined(tea, 'tea has been defined');
+ *
+ * @name isDefined
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isDefined = function (val, msg) {
+ new Assertion(val, msg).to.not.equal(undefined);
+ };
+
+ /**
+ * ### .isFunction(value, [message])
+ *
+ * Asserts that `value` is a function.
+ *
+ * function serveTea() { return 'cup of tea'; };
+ * assert.isFunction(serveTea, 'great, we can have tea now');
+ *
+ * @name isFunction
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isFunction = function (val, msg) {
+ new Assertion(val, msg).to.be.a('function');
+ };
+
+ /**
+ * ### .isNotFunction(value, [message])
+ *
+ * Asserts that `value` is _not_ a function.
+ *
+ * var serveTea = [ 'heat', 'pour', 'sip' ];
+ * assert.isNotFunction(serveTea, 'great, we have listed the steps');
+ *
+ * @name isNotFunction
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotFunction = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('function');
+ };
+
+ /**
+ * ### .isObject(value, [message])
+ *
+ * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).
+ * _The assertion does not match subclassed objects._
+ *
+ * var selection = { name: 'Chai', serve: 'with spices' };
+ * assert.isObject(selection, 'tea selection is an object');
+ *
+ * @name isObject
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isObject = function (val, msg) {
+ new Assertion(val, msg).to.be.a('object');
+ };
+
+ /**
+ * ### .isNotObject(value, [message])
+ *
+ * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).
+ *
+ * var selection = 'chai'
+ * assert.isNotObject(selection, 'tea selection is not an object');
+ * assert.isNotObject(null, 'null is not an object');
+ *
+ * @name isNotObject
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotObject = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('object');
+ };
+
+ /**
+ * ### .isArray(value, [message])
+ *
+ * Asserts that `value` is an array.
+ *
+ * var menu = [ 'green', 'chai', 'oolong' ];
+ * assert.isArray(menu, 'what kind of tea do we want?');
+ *
+ * @name isArray
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isArray = function (val, msg) {
+ new Assertion(val, msg).to.be.an('array');
+ };
+
+ /**
+ * ### .isNotArray(value, [message])
+ *
+ * Asserts that `value` is _not_ an array.
+ *
+ * var menu = 'green|chai|oolong';
+ * assert.isNotArray(menu, 'what kind of tea do we want?');
+ *
+ * @name isNotArray
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotArray = function (val, msg) {
+ new Assertion(val, msg).to.not.be.an('array');
+ };
+
+ /**
+ * ### .isString(value, [message])
+ *
+ * Asserts that `value` is a string.
+ *
+ * var teaOrder = 'chai';
+ * assert.isString(teaOrder, 'order placed');
+ *
+ * @name isString
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isString = function (val, msg) {
+ new Assertion(val, msg).to.be.a('string');
+ };
+
+ /**
+ * ### .isNotString(value, [message])
+ *
+ * Asserts that `value` is _not_ a string.
+ *
+ * var teaOrder = 4;
+ * assert.isNotString(teaOrder, 'order placed');
+ *
+ * @name isNotString
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotString = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('string');
+ };
+
+ /**
+ * ### .isNumber(value, [message])
+ *
+ * Asserts that `value` is a number.
+ *
+ * var cups = 2;
+ * assert.isNumber(cups, 'how many cups');
+ *
+ * @name isNumber
+ * @param {Number} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNumber = function (val, msg) {
+ new Assertion(val, msg).to.be.a('number');
+ };
+
+ /**
+ * ### .isNotNumber(value, [message])
+ *
+ * Asserts that `value` is _not_ a number.
+ *
+ * var cups = '2 cups please';
+ * assert.isNotNumber(cups, 'how many cups');
+ *
+ * @name isNotNumber
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotNumber = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('number');
+ };
+
+ /**
+ * ### .isBoolean(value, [message])
+ *
+ * Asserts that `value` is a boolean.
+ *
+ * var teaReady = true
+ * , teaServed = false;
+ *
+ * assert.isBoolean(teaReady, 'is the tea ready');
+ * assert.isBoolean(teaServed, 'has tea been served');
+ *
+ * @name isBoolean
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isBoolean = function (val, msg) {
+ new Assertion(val, msg).to.be.a('boolean');
+ };
+
+ /**
+ * ### .isNotBoolean(value, [message])
+ *
+ * Asserts that `value` is _not_ a boolean.
+ *
+ * var teaReady = 'yep'
+ * , teaServed = 'nope';
+ *
+ * assert.isNotBoolean(teaReady, 'is the tea ready');
+ * assert.isNotBoolean(teaServed, 'has tea been served');
+ *
+ * @name isNotBoolean
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotBoolean = function (val, msg) {
+ new Assertion(val, msg).to.not.be.a('boolean');
+ };
+
+ /**
+ * ### .typeOf(value, name, [message])
+ *
+ * Asserts that `value`'s type is `name`, as determined by
+ * `Object.prototype.toString`.
+ *
+ * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');
+ * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');
+ * assert.typeOf('tea', 'string', 'we have a string');
+ * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');
+ * assert.typeOf(null, 'null', 'we have a null');
+ * assert.typeOf(undefined, 'undefined', 'we have an undefined');
+ *
+ * @name typeOf
+ * @param {Mixed} value
+ * @param {String} name
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.typeOf = function (val, type, msg) {
+ new Assertion(val, msg).to.be.a(type);
+ };
+
+ /**
+ * ### .notTypeOf(value, name, [message])
+ *
+ * Asserts that `value`'s type is _not_ `name`, as determined by
+ * `Object.prototype.toString`.
+ *
+ * assert.notTypeOf('tea', 'number', 'strings are not numbers');
+ *
+ * @name notTypeOf
+ * @param {Mixed} value
+ * @param {String} typeof name
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notTypeOf = function (val, type, msg) {
+ new Assertion(val, msg).to.not.be.a(type);
+ };
+
+ /**
+ * ### .instanceOf(object, constructor, [message])
+ *
+ * Asserts that `value` is an instance of `constructor`.
+ *
+ * var Tea = function (name) { this.name = name; }
+ * , chai = new Tea('chai');
+ *
+ * assert.instanceOf(chai, Tea, 'chai is an instance of tea');
+ *
+ * @name instanceOf
+ * @param {Object} object
+ * @param {Constructor} constructor
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.instanceOf = function (val, type, msg) {
+ new Assertion(val, msg).to.be.instanceOf(type);
+ };
+
+ /**
+ * ### .notInstanceOf(object, constructor, [message])
+ *
+ * Asserts `value` is not an instance of `constructor`.
+ *
+ * var Tea = function (name) { this.name = name; }
+ * , chai = new String('chai');
+ *
+ * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');
+ *
+ * @name notInstanceOf
+ * @param {Object} object
+ * @param {Constructor} constructor
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notInstanceOf = function (val, type, msg) {
+ new Assertion(val, msg).to.not.be.instanceOf(type);
+ };
+
+ /**
+ * ### .include(haystack, needle, [message])
+ *
+ * Asserts that `haystack` includes `needle`. Works
+ * for strings and arrays.
+ *
+ * assert.include('foobar', 'bar', 'foobar contains string "bar"');
+ * assert.include([ 1, 2, 3 ], 3, 'array contains value');
+ *
+ * @name include
+ * @param {Array|String} haystack
+ * @param {Mixed} needle
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.include = function (exp, inc, msg) {
+ new Assertion(exp, msg, assert.include).include(inc);
+ };
+
+ /**
+ * ### .notInclude(haystack, needle, [message])
+ *
+ * Asserts that `haystack` does not include `needle`. Works
+ * for strings and arrays.
+ *
+ * assert.notInclude('foobar', 'baz', 'string not include substring');
+ * assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');
+ *
+ * @name notInclude
+ * @param {Array|String} haystack
+ * @param {Mixed} needle
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notInclude = function (exp, inc, msg) {
+ new Assertion(exp, msg, assert.notInclude).not.include(inc);
+ };
+
+ /**
+ * ### .match(value, regexp, [message])
+ *
+ * Asserts that `value` matches the regular expression `regexp`.
+ *
+ * assert.match('foobar', /^foo/, 'regexp matches');
+ *
+ * @name match
+ * @param {Mixed} value
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.match = function (exp, re, msg) {
+ new Assertion(exp, msg).to.match(re);
+ };
+
+ /**
+ * ### .notMatch(value, regexp, [message])
+ *
+ * Asserts that `value` does not match the regular expression `regexp`.
+ *
+ * assert.notMatch('foobar', /^foo/, 'regexp does not match');
+ *
+ * @name notMatch
+ * @param {Mixed} value
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notMatch = function (exp, re, msg) {
+ new Assertion(exp, msg).to.not.match(re);
+ };
+
+ /**
+ * ### .property(object, property, [message])
+ *
+ * Asserts that `object` has a property named by `property`.
+ *
+ * assert.property({ tea: { green: 'matcha' }}, 'tea');
+ *
+ * @name property
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.property = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.have.property(prop);
+ };
+
+ /**
+ * ### .notProperty(object, property, [message])
+ *
+ * Asserts that `object` does _not_ have a property named by `property`.
+ *
+ * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');
+ *
+ * @name notProperty
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notProperty = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.not.have.property(prop);
+ };
+
+ /**
+ * ### .deepProperty(object, property, [message])
+ *
+ * Asserts that `object` has a property named by `property`, which can be a
+ * string using dot- and bracket-notation for deep reference.
+ *
+ * assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');
+ *
+ * @name deepProperty
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.deepProperty = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.have.deep.property(prop);
+ };
+
+ /**
+ * ### .notDeepProperty(object, property, [message])
+ *
+ * Asserts that `object` does _not_ have a property named by `property`, which
+ * can be a string using dot- and bracket-notation for deep reference.
+ *
+ * assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');
+ *
+ * @name notDeepProperty
+ * @param {Object} object
+ * @param {String} property
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.notDeepProperty = function (obj, prop, msg) {
+ new Assertion(obj, msg).to.not.have.deep.property(prop);
+ };
+
+ /**
+ * ### .propertyVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property` with value given
+ * by `value`.
+ *
+ * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');
+ *
+ * @name propertyVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.propertyVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.have.property(prop, val);
+ };
+
+ /**
+ * ### .propertyNotVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property`, but with a value
+ * different from that given by `value`.
+ *
+ * assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');
+ *
+ * @name propertyNotVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.propertyNotVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.not.have.property(prop, val);
+ };
+
+ /**
+ * ### .deepPropertyVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property` with value given
+ * by `value`. `property` can use dot- and bracket-notation for deep
+ * reference.
+ *
+ * assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');
+ *
+ * @name deepPropertyVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.deepPropertyVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.have.deep.property(prop, val);
+ };
+
+ /**
+ * ### .deepPropertyNotVal(object, property, value, [message])
+ *
+ * Asserts that `object` has a property named by `property`, but with a value
+ * different from that given by `value`. `property` can use dot- and
+ * bracket-notation for deep reference.
+ *
+ * assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');
+ *
+ * @name deepPropertyNotVal
+ * @param {Object} object
+ * @param {String} property
+ * @param {Mixed} value
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.deepPropertyNotVal = function (obj, prop, val, msg) {
+ new Assertion(obj, msg).to.not.have.deep.property(prop, val);
+ };
+
+ /**
+ * ### .lengthOf(object, length, [message])
+ *
+ * Asserts that `object` has a `length` property with the expected value.
+ *
+ * assert.lengthOf([1,2,3], 3, 'array has length of 3');
+ * assert.lengthOf('foobar', 6, 'string has length of 6');
+ *
+ * @name lengthOf
+ * @param {Mixed} object
+ * @param {Number} length
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.lengthOf = function (exp, len, msg) {
+ new Assertion(exp, msg).to.have.length(len);
+ };
+
+ /**
+ * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])
+ *
+ * Asserts that `function` will throw an error that is an instance of
+ * `constructor`, or alternately that it will throw an error with message
+ * matching `regexp`.
+ *
+ * assert.throws(fn, 'function throws a reference error');
+ * assert.throws(fn, /function throws a reference error/);
+ * assert.throws(fn, ReferenceError);
+ * assert.throws(fn, ReferenceError, 'function throws a reference error');
+ * assert.throws(fn, ReferenceError, /function throws a reference error/);
+ *
+ * @name throws
+ * @alias throw
+ * @alias Throw
+ * @param {Function} function
+ * @param {ErrorConstructor} constructor
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.throws = function (fn, errt, errs, msg) {
+ if ('string' === typeof errt || errt instanceof RegExp) {
+ errs = errt;
+ errt = null;
+ }
+
+ var assertErr = new Assertion(fn, msg).to.throw(errt, errs);
+ return flag(assertErr, 'object');
+ };
+
+ /**
+ * ### .doesNotThrow(function, [constructor/regexp], [message])
+ *
+ * Asserts that `function` will _not_ throw an error that is an instance of
+ * `constructor`, or alternately that it will not throw an error with message
+ * matching `regexp`.
+ *
+ * assert.doesNotThrow(fn, Error, 'function does not throw');
+ *
+ * @name doesNotThrow
+ * @param {Function} function
+ * @param {ErrorConstructor} constructor
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.doesNotThrow = function (fn, type, msg) {
+ if ('string' === typeof type) {
+ msg = type;
+ type = null;
+ }
+
+ new Assertion(fn, msg).to.not.Throw(type);
+ };
+
+ /**
+ * ### .operator(val1, operator, val2, [message])
+ *
+ * Compares two values using `operator`.
+ *
+ * assert.operator(1, '<', 2, 'everything is ok');
+ * assert.operator(1, '>', 2, 'this will fail');
+ *
+ * @name operator
+ * @param {Mixed} val1
+ * @param {String} operator
+ * @param {Mixed} val2
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.operator = function (val, operator, val2, msg) {
+ var ok;
+ switch(operator) {
+ case '==':
+ ok = val == val2;
+ break;
+ case '===':
+ ok = val === val2;
+ break;
+ case '>':
+ ok = val > val2;
+ break;
+ case '>=':
+ ok = val >= val2;
+ break;
+ case '<':
+ ok = val < val2;
+ break;
+ case '<=':
+ ok = val <= val2;
+ break;
+ case '!=':
+ ok = val != val2;
+ break;
+ case '!==':
+ ok = val !== val2;
+ break;
+ default:
+ throw new Error('Invalid operator "' + operator + '"');
+ }
+ var test = new Assertion(ok, msg);
+ test.assert(
+ true === flag(test, 'object')
+ , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)
+ , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );
+ };
+
+ /**
+ * ### .closeTo(actual, expected, delta, [message])
+ *
+ * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+ *
+ * assert.closeTo(1.5, 1, 0.5, 'numbers are close');
+ *
+ * @name closeTo
+ * @param {Number} actual
+ * @param {Number} expected
+ * @param {Number} delta
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.closeTo = function (act, exp, delta, msg) {
+ new Assertion(act, msg).to.be.closeTo(exp, delta);
+ };
+
+ /**
+ * ### .approximately(actual, expected, delta, [message])
+ *
+ * Asserts that the target is equal `expected`, to within a +/- `delta` range.
+ *
+ * assert.approximately(1.5, 1, 0.5, 'numbers are close');
+ *
+ * @name approximately
+ * @param {Number} actual
+ * @param {Number} expected
+ * @param {Number} delta
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.approximately = function (act, exp, delta, msg) {
+ new Assertion(act, msg).to.be.approximately(exp, delta);
+ };
+
+ /**
+ * ### .sameMembers(set1, set2, [message])
+ *
+ * Asserts that `set1` and `set2` have the same members.
+ * Order is not taken into account.
+ *
+ * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
+ *
+ * @name sameMembers
+ * @param {Array} set1
+ * @param {Array} set2
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.sameMembers = function (set1, set2, msg) {
+ new Assertion(set1, msg).to.have.same.members(set2);
+ }
+
+ /**
+ * ### .sameDeepMembers(set1, set2, [message])
+ *
+ * Asserts that `set1` and `set2` have the same members - using a deep equality checking.
+ * Order is not taken into account.
+ *
+ * assert.sameDeepMembers([ {b: 3}, {a: 2}, {c: 5} ], [ {c: 5}, {b: 3}, {a: 2} ], 'same deep members');
+ *
+ * @name sameDeepMembers
+ * @param {Array} set1
+ * @param {Array} set2
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.sameDeepMembers = function (set1, set2, msg) {
+ new Assertion(set1, msg).to.have.same.deep.members(set2);
+ }
+
+ /**
+ * ### .includeMembers(superset, subset, [message])
+ *
+ * Asserts that `subset` is included in `superset`.
+ * Order is not taken into account.
+ *
+ * assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');
+ *
+ * @name includeMembers
+ * @param {Array} superset
+ * @param {Array} subset
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.includeMembers = function (superset, subset, msg) {
+ new Assertion(superset, msg).to.include.members(subset);
+ }
+
+ /**
+ * ### .includeDeepMembers(superset, subset, [message])
+ *
+ * Asserts that `subset` is included in `superset` - using deep equality checking.
+ * Order is not taken into account.
+ * Duplicates are ignored.
+ *
+ * assert.includeDeepMembers([ {a: 1}, {b: 2}, {c: 3} ], [ {b: 2}, {a: 1}, {b: 2} ], 'include deep members');
+ *
+ * @name includeDeepMembers
+ * @param {Array} superset
+ * @param {Array} subset
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.includeDeepMembers = function (superset, subset, msg) {
+ new Assertion(superset, msg).to.include.deep.members(subset);
+ }
+
+ /**
+ * ### .oneOf(inList, list, [message])
+ *
+ * Asserts that non-object, non-array value `inList` appears in the flat array `list`.
+ *
+ * assert.oneOf(1, [ 2, 1 ], 'Not found in list');
+ *
+ * @name oneOf
+ * @param {*} inList
+ * @param {Array<*>} list
+ * @param {String} message
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.oneOf = function (inList, list, msg) {
+ new Assertion(inList, msg).to.be.oneOf(list);
+ }
+
+ /**
+ * ### .changes(function, object, property)
+ *
+ * Asserts that a function changes the value of a property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 22 };
+ * assert.changes(fn, obj, 'val');
+ *
+ * @name changes
+ * @param {Function} modifier function
+ * @param {Object} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.changes = function (fn, obj, prop) {
+ new Assertion(fn).to.change(obj, prop);
+ }
+
+ /**
+ * ### .doesNotChange(function, object, property)
+ *
+ * Asserts that a function does not changes the value of a property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { console.log('foo'); };
+ * assert.doesNotChange(fn, obj, 'val');
+ *
+ * @name doesNotChange
+ * @param {Function} modifier function
+ * @param {Object} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.doesNotChange = function (fn, obj, prop) {
+ new Assertion(fn).to.not.change(obj, prop);
+ }
+
+ /**
+ * ### .increases(function, object, property)
+ *
+ * Asserts that a function increases an object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 13 };
+ * assert.increases(fn, obj, 'val');
+ *
+ * @name increases
+ * @param {Function} modifier function
+ * @param {Object} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.increases = function (fn, obj, prop) {
+ new Assertion(fn).to.increase(obj, prop);
+ }
+
+ /**
+ * ### .doesNotIncrease(function, object, property)
+ *
+ * Asserts that a function does not increase object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 8 };
+ * assert.doesNotIncrease(fn, obj, 'val');
+ *
+ * @name doesNotIncrease
+ * @param {Function} modifier function
+ * @param {Object} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.doesNotIncrease = function (fn, obj, prop) {
+ new Assertion(fn).to.not.increase(obj, prop);
+ }
+
+ /**
+ * ### .decreases(function, object, property)
+ *
+ * Asserts that a function decreases an object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 5 };
+ * assert.decreases(fn, obj, 'val');
+ *
+ * @name decreases
+ * @param {Function} modifier function
+ * @param {Object} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.decreases = function (fn, obj, prop) {
+ new Assertion(fn).to.decrease(obj, prop);
+ }
+
+ /**
+ * ### .doesNotDecrease(function, object, property)
+ *
+ * Asserts that a function does not decreases an object property
+ *
+ * var obj = { val: 10 };
+ * var fn = function() { obj.val = 15 };
+ * assert.doesNotDecrease(fn, obj, 'val');
+ *
+ * @name doesNotDecrease
+ * @param {Function} modifier function
+ * @param {Object} object
+ * @param {String} property name
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.doesNotDecrease = function (fn, obj, prop) {
+ new Assertion(fn).to.not.decrease(obj, prop);
+ }
+
+ /*!
+ * ### .ifError(object)
+ *
+ * Asserts if value is not a false value, and throws if it is a true value.
+ * This is added to allow for chai to be a drop-in replacement for Node's
+ * assert class.
+ *
+ * var err = new Error('I am a custom error');
+ * assert.ifError(err); // Rethrows err!
+ *
+ * @name ifError
+ * @param {Object} object
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.ifError = function (val) {
+ if (val) {
+ throw(val);
+ }
+ };
+
+ /**
+ * ### .isExtensible(object)
+ *
+ * Asserts that `object` is extensible (can have new properties added to it).
+ *
+ * assert.isExtensible({});
+ *
+ * @name isExtensible
+ * @alias extensible
+ * @param {Object} object
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isExtensible = function (obj, msg) {
+ new Assertion(obj, msg).to.be.extensible;
+ };
+
+ /**
+ * ### .isNotExtensible(object)
+ *
+ * Asserts that `object` is _not_ extensible.
+ *
+ * var nonExtensibleObject = Object.preventExtensions({});
+ * var sealedObject = Object.seal({});
+ * var frozenObject = Object.freese({});
+ *
+ * assert.isNotExtensible(nonExtensibleObject);
+ * assert.isNotExtensible(sealedObject);
+ * assert.isNotExtensible(frozenObject);
+ *
+ * @name isNotExtensible
+ * @alias notExtensible
+ * @param {Object} object
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotExtensible = function (obj, msg) {
+ new Assertion(obj, msg).to.not.be.extensible;
+ };
+
+ /**
+ * ### .isSealed(object)
+ *
+ * Asserts that `object` is sealed (cannot have new properties added to it
+ * and its existing properties cannot be removed).
+ *
+ * var sealedObject = Object.seal({});
+ * var frozenObject = Object.seal({});
+ *
+ * assert.isSealed(sealedObject);
+ * assert.isSealed(frozenObject);
+ *
+ * @name isSealed
+ * @alias sealed
+ * @param {Object} object
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isSealed = function (obj, msg) {
+ new Assertion(obj, msg).to.be.sealed;
+ };
+
+ /**
+ * ### .isNotSealed(object)
+ *
+ * Asserts that `object` is _not_ sealed.
+ *
+ * assert.isNotSealed({});
+ *
+ * @name isNotSealed
+ * @alias notSealed
+ * @param {Object} object
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotSealed = function (obj, msg) {
+ new Assertion(obj, msg).to.not.be.sealed;
+ };
+
+ /**
+ * ### .isFrozen(object)
+ *
+ * Asserts that `object` is frozen (cannot have new properties added to it
+ * and its existing properties cannot be modified).
+ *
+ * var frozenObject = Object.freeze({});
+ * assert.frozen(frozenObject);
+ *
+ * @name isFrozen
+ * @alias frozen
+ * @param {Object} object
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isFrozen = function (obj, msg) {
+ new Assertion(obj, msg).to.be.frozen;
+ };
+
+ /**
+ * ### .isNotFrozen(object)
+ *
+ * Asserts that `object` is _not_ frozen.
+ *
+ * assert.isNotFrozen({});
+ *
+ * @name isNotFrozen
+ * @alias notFrozen
+ * @param {Object} object
+ * @param {String} message _optional_
+ * @namespace Assert
+ * @api public
+ */
+
+ assert.isNotFrozen = function (obj, msg) {
+ new Assertion(obj, msg).to.not.be.frozen;
+ };
+
+ /*!
+ * Aliases.
+ */
+
+ (function alias(name, as){
+ assert[as] = assert[name];
+ return alias;
+ })
+ ('isOk', 'ok')
+ ('isNotOk', 'notOk')
+ ('throws', 'throw')
+ ('throws', 'Throw')
+ ('isExtensible', 'extensible')
+ ('isNotExtensible', 'notExtensible')
+ ('isSealed', 'sealed')
+ ('isNotSealed', 'notSealed')
+ ('isFrozen', 'frozen')
+ ('isNotFrozen', 'notFrozen');
+};
+
+},{}],7:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, util) {
+ chai.expect = function (val, message) {
+ return new chai.Assertion(val, message);
+ };
+
+ /**
+ * ### .fail(actual, expected, [message], [operator])
+ *
+ * Throw a failure.
+ *
+ * @name fail
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @param {String} operator
+ * @namespace Expect
+ * @api public
+ */
+
+ chai.expect.fail = function (actual, expected, message, operator) {
+ message = message || 'expect.fail()';
+ throw new chai.AssertionError(message, {
+ actual: actual
+ , expected: expected
+ , operator: operator
+ }, chai.expect.fail);
+ };
+};
+
+},{}],8:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+module.exports = function (chai, util) {
+ var Assertion = chai.Assertion;
+
+ function loadShould () {
+ // explicitly define this method as function as to have it's name to include as `ssfi`
+ function shouldGetter() {
+ if (this instanceof String || this instanceof Number || this instanceof Boolean ) {
+ return new Assertion(this.valueOf(), null, shouldGetter);
+ }
+ return new Assertion(this, null, shouldGetter);
+ }
+ function shouldSetter(value) {
+ // See https://github.com/chaijs/chai/issues/86: this makes
+ // `whatever.should = someValue` actually set `someValue`, which is
+ // especially useful for `global.should = require('chai').should()`.
+ //
+ // Note that we have to use [[DefineProperty]] instead of [[Put]]
+ // since otherwise we would trigger this very setter!
+ Object.defineProperty(this, 'should', {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ }
+ // modify Object.prototype to have `should`
+ Object.defineProperty(Object.prototype, 'should', {
+ set: shouldSetter
+ , get: shouldGetter
+ , configurable: true
+ });
+
+ var should = {};
+
+ /**
+ * ### .fail(actual, expected, [message], [operator])
+ *
+ * Throw a failure.
+ *
+ * @name fail
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @param {String} operator
+ * @namespace Should
+ * @api public
+ */
+
+ should.fail = function (actual, expected, message, operator) {
+ message = message || 'should.fail()';
+ throw new chai.AssertionError(message, {
+ actual: actual
+ , expected: expected
+ , operator: operator
+ }, should.fail);
+ };
+
+ /**
+ * ### .equal(actual, expected, [message])
+ *
+ * Asserts non-strict equality (`==`) of `actual` and `expected`.
+ *
+ * should.equal(3, '3', '== coerces values to strings');
+ *
+ * @name equal
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Should
+ * @api public
+ */
+
+ should.equal = function (val1, val2, msg) {
+ new Assertion(val1, msg).to.equal(val2);
+ };
+
+ /**
+ * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])
+ *
+ * Asserts that `function` will throw an error that is an instance of
+ * `constructor`, or alternately that it will throw an error with message
+ * matching `regexp`.
+ *
+ * should.throw(fn, 'function throws a reference error');
+ * should.throw(fn, /function throws a reference error/);
+ * should.throw(fn, ReferenceError);
+ * should.throw(fn, ReferenceError, 'function throws a reference error');
+ * should.throw(fn, ReferenceError, /function throws a reference error/);
+ *
+ * @name throw
+ * @alias Throw
+ * @param {Function} function
+ * @param {ErrorConstructor} constructor
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @namespace Should
+ * @api public
+ */
+
+ should.Throw = function (fn, errt, errs, msg) {
+ new Assertion(fn, msg).to.Throw(errt, errs);
+ };
+
+ /**
+ * ### .exist
+ *
+ * Asserts that the target is neither `null` nor `undefined`.
+ *
+ * var foo = 'hi';
+ *
+ * should.exist(foo, 'foo exists');
+ *
+ * @name exist
+ * @namespace Should
+ * @api public
+ */
+
+ should.exist = function (val, msg) {
+ new Assertion(val, msg).to.exist;
+ }
+
+ // negation
+ should.not = {}
+
+ /**
+ * ### .not.equal(actual, expected, [message])
+ *
+ * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
+ *
+ * should.not.equal(3, 4, 'these numbers are not equal');
+ *
+ * @name not.equal
+ * @param {Mixed} actual
+ * @param {Mixed} expected
+ * @param {String} message
+ * @namespace Should
+ * @api public
+ */
+
+ should.not.equal = function (val1, val2, msg) {
+ new Assertion(val1, msg).to.not.equal(val2);
+ };
+
+ /**
+ * ### .throw(function, [constructor/regexp], [message])
+ *
+ * Asserts that `function` will _not_ throw an error that is an instance of
+ * `constructor`, or alternately that it will not throw an error with message
+ * matching `regexp`.
+ *
+ * should.not.throw(fn, Error, 'function does not throw');
+ *
+ * @name not.throw
+ * @alias not.Throw
+ * @param {Function} function
+ * @param {ErrorConstructor} constructor
+ * @param {RegExp} regexp
+ * @param {String} message
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
+ * @namespace Should
+ * @api public
+ */
+
+ should.not.Throw = function (fn, errt, errs, msg) {
+ new Assertion(fn, msg).to.not.Throw(errt, errs);
+ };
+
+ /**
+ * ### .not.exist
+ *
+ * Asserts that the target is neither `null` nor `undefined`.
+ *
+ * var bar = null;
+ *
+ * should.not.exist(bar, 'bar does not exist');
+ *
+ * @name not.exist
+ * @namespace Should
+ * @api public
+ */
+
+ should.not.exist = function (val, msg) {
+ new Assertion(val, msg).to.not.exist;
+ }
+
+ should['throw'] = should['Throw'];
+ should.not['throw'] = should.not['Throw'];
+
+ return should;
+ };
+
+ chai.should = loadShould;
+ chai.Should = loadShould;
+};
+
+},{}],9:[function(require,module,exports){
+/*!
+ * Chai - addChainingMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependencies
+ */
+
+var transferFlags = require('./transferFlags');
+var flag = require('./flag');
+var config = require('../config');
+
+/*!
+ * Module variables
+ */
+
+// Check whether `__proto__` is supported
+var hasProtoSupport = '__proto__' in Object;
+
+// Without `__proto__` support, this module will need to add properties to a function.
+// However, some Function.prototype methods cannot be overwritten,
+// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).
+var excludeNames = /^(?:length|name|arguments|caller)$/;
+
+// Cache `Function` properties
+var call = Function.prototype.call,
+ apply = Function.prototype.apply;
+
+/**
+ * ### addChainableMethod (ctx, name, method, chainingBehavior)
+ *
+ * Adds a method to an object, such that the method can also be chained.
+ *
+ * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
+ * var obj = utils.flag(this, 'object');
+ * new chai.Assertion(obj).to.be.equal(str);
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
+ *
+ * The result can then be used as both a method assertion, executing both `method` and
+ * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
+ *
+ * expect(fooStr).to.be.foo('bar');
+ * expect(fooStr).to.be.foo.equal('foo');
+ *
+ * @param {Object} ctx object to which the method is added
+ * @param {String} name of method to add
+ * @param {Function} method function to be used for `name`, when called
+ * @param {Function} chainingBehavior function to be called every time the property is accessed
+ * @namespace Utils
+ * @name addChainableMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method, chainingBehavior) {
+ if (typeof chainingBehavior !== 'function') {
+ chainingBehavior = function () { };
+ }
+
+ var chainableBehavior = {
+ method: method
+ , chainingBehavior: chainingBehavior
+ };
+
+ // save the methods so we can overwrite them later, if we need to.
+ if (!ctx.__methods) {
+ ctx.__methods = {};
+ }
+ ctx.__methods[name] = chainableBehavior;
+
+ Object.defineProperty(ctx, name,
+ { get: function () {
+ chainableBehavior.chainingBehavior.call(this);
+
+ var assert = function assert() {
+ var old_ssfi = flag(this, 'ssfi');
+ if (old_ssfi && config.includeStack === false)
+ flag(this, 'ssfi', assert);
+ var result = chainableBehavior.method.apply(this, arguments);
+ return result === undefined ? this : result;
+ };
+
+ // Use `__proto__` if available
+ if (hasProtoSupport) {
+ // Inherit all properties from the object by replacing the `Function` prototype
+ var prototype = assert.__proto__ = Object.create(this);
+ // Restore the `call` and `apply` methods from `Function`
+ prototype.call = call;
+ prototype.apply = apply;
+ }
+ // Otherwise, redefine all properties (slow!)
+ else {
+ var asserterNames = Object.getOwnPropertyNames(ctx);
+ asserterNames.forEach(function (asserterName) {
+ if (!excludeNames.test(asserterName)) {
+ var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
+ Object.defineProperty(assert, asserterName, pd);
+ }
+ });
+ }
+
+ transferFlags(this, assert);
+ return assert;
+ }
+ , configurable: true
+ });
+};
+
+},{"../config":4,"./flag":13,"./transferFlags":29}],10:[function(require,module,exports){
+/*!
+ * Chai - addMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var config = require('../config');
+
+/**
+ * ### .addMethod (ctx, name, method)
+ *
+ * Adds a method to the prototype of an object.
+ *
+ * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
+ * var obj = utils.flag(this, 'object');
+ * new chai.Assertion(obj).to.be.equal(str);
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.addMethod('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(fooStr).to.be.foo('bar');
+ *
+ * @param {Object} ctx object to which the method is added
+ * @param {String} name of method to add
+ * @param {Function} method function to be used for name
+ * @namespace Utils
+ * @name addMethod
+ * @api public
+ */
+var flag = require('./flag');
+
+module.exports = function (ctx, name, method) {
+ ctx[name] = function () {
+ var old_ssfi = flag(this, 'ssfi');
+ if (old_ssfi && config.includeStack === false)
+ flag(this, 'ssfi', ctx[name]);
+ var result = method.apply(this, arguments);
+ return result === undefined ? this : result;
+ };
+};
+
+},{"../config":4,"./flag":13}],11:[function(require,module,exports){
+/*!
+ * Chai - addProperty utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var config = require('../config');
+var flag = require('./flag');
+
+/**
+ * ### addProperty (ctx, name, getter)
+ *
+ * Adds a property to the prototype of an object.
+ *
+ * utils.addProperty(chai.Assertion.prototype, 'foo', function () {
+ * var obj = utils.flag(this, 'object');
+ * new chai.Assertion(obj).to.be.instanceof(Foo);
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.addProperty('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.be.foo;
+ *
+ * @param {Object} ctx object to which the property is added
+ * @param {String} name of property to add
+ * @param {Function} getter function to be used for name
+ * @namespace Utils
+ * @name addProperty
+ * @api public
+ */
+
+module.exports = function (ctx, name, getter) {
+ Object.defineProperty(ctx, name,
+ { get: function addProperty() {
+ var old_ssfi = flag(this, 'ssfi');
+ if (old_ssfi && config.includeStack === false)
+ flag(this, 'ssfi', addProperty);
+
+ var result = getter.call(this);
+ return result === undefined ? this : result;
+ }
+ , configurable: true
+ });
+};
+
+},{"../config":4,"./flag":13}],12:[function(require,module,exports){
+/*!
+ * Chai - expectTypes utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### expectTypes(obj, types)
+ *
+ * Ensures that the object being tested against is of a valid type.
+ *
+ * utils.expectTypes(this, ['array', 'object', 'string']);
+ *
+ * @param {Mixed} obj constructed Assertion
+ * @param {Array} type A list of allowed types for this assertion
+ * @namespace Utils
+ * @name expectTypes
+ * @api public
+ */
+
+var AssertionError = require('assertion-error');
+var flag = require('./flag');
+var type = require('type-detect');
+
+module.exports = function (obj, types) {
+ var obj = flag(obj, 'object');
+ types = types.map(function (t) { return t.toLowerCase(); });
+ types.sort();
+
+ // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum'
+ var str = types.map(function (t, index) {
+ var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';
+ var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';
+ return or + art + ' ' + t;
+ }).join(', ');
+
+ if (!types.some(function (expected) { return type(obj) === expected; })) {
+ throw new AssertionError(
+ 'object tested must be ' + str + ', but ' + type(obj) + ' given'
+ );
+ }
+};
+
+},{"./flag":13,"assertion-error":30,"type-detect":35}],13:[function(require,module,exports){
+/*!
+ * Chai - flag utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### flag(object, key, [value])
+ *
+ * Get or set a flag value on an object. If a
+ * value is provided it will be set, else it will
+ * return the currently set value or `undefined` if
+ * the value is not set.
+ *
+ * utils.flag(this, 'foo', 'bar'); // setter
+ * utils.flag(this, 'foo'); // getter, returns `bar`
+ *
+ * @param {Object} object constructed Assertion
+ * @param {String} key
+ * @param {Mixed} value (optional)
+ * @namespace Utils
+ * @name flag
+ * @api private
+ */
+
+module.exports = function (obj, key, value) {
+ var flags = obj.__flags || (obj.__flags = Object.create(null));
+ if (arguments.length === 3) {
+ flags[key] = value;
+ } else {
+ return flags[key];
+ }
+};
+
+},{}],14:[function(require,module,exports){
+/*!
+ * Chai - getActual utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * # getActual(object, [actual])
+ *
+ * Returns the `actual` value for an Assertion
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ * @namespace Utils
+ * @name getActual
+ */
+
+module.exports = function (obj, args) {
+ return args.length > 4 ? args[4] : obj._obj;
+};
+
+},{}],15:[function(require,module,exports){
+/*!
+ * Chai - getEnumerableProperties utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### .getEnumerableProperties(object)
+ *
+ * This allows the retrieval of enumerable property names of an object,
+ * inherited or not.
+ *
+ * @param {Object} object
+ * @returns {Array}
+ * @namespace Utils
+ * @name getEnumerableProperties
+ * @api public
+ */
+
+module.exports = function getEnumerableProperties(object) {
+ var result = [];
+ for (var name in object) {
+ result.push(name);
+ }
+ return result;
+};
+
+},{}],16:[function(require,module,exports){
+/*!
+ * Chai - message composition utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var flag = require('./flag')
+ , getActual = require('./getActual')
+ , inspect = require('./inspect')
+ , objDisplay = require('./objDisplay');
+
+/**
+ * ### .getMessage(object, message, negateMessage)
+ *
+ * Construct the error message based on flags
+ * and template tags. Template tags will return
+ * a stringified inspection of the object referenced.
+ *
+ * Message template tags:
+ * - `#{this}` current asserted object
+ * - `#{act}` actual value
+ * - `#{exp}` expected value
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ * @namespace Utils
+ * @name getMessage
+ * @api public
+ */
+
+module.exports = function (obj, args) {
+ var negate = flag(obj, 'negate')
+ , val = flag(obj, 'object')
+ , expected = args[3]
+ , actual = getActual(obj, args)
+ , msg = negate ? args[2] : args[1]
+ , flagMsg = flag(obj, 'message');
+
+ if(typeof msg === "function") msg = msg();
+ msg = msg || '';
+ msg = msg
+ .replace(/#\{this\}/g, function () { return objDisplay(val); })
+ .replace(/#\{act\}/g, function () { return objDisplay(actual); })
+ .replace(/#\{exp\}/g, function () { return objDisplay(expected); });
+
+ return flagMsg ? flagMsg + ': ' + msg : msg;
+};
+
+},{"./flag":13,"./getActual":14,"./inspect":23,"./objDisplay":24}],17:[function(require,module,exports){
+/*!
+ * Chai - getName utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * # getName(func)
+ *
+ * Gets the name of a function, in a cross-browser way.
+ *
+ * @param {Function} a function (usually a constructor)
+ * @namespace Utils
+ * @name getName
+ */
+
+module.exports = function (func) {
+ if (func.name) return func.name;
+
+ var match = /^\s?function ([^(]*)\(/.exec(func);
+ return match && match[1] ? match[1] : "";
+};
+
+},{}],18:[function(require,module,exports){
+/*!
+ * Chai - getPathInfo utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var hasProperty = require('./hasProperty');
+
+/**
+ * ### .getPathInfo(path, object)
+ *
+ * This allows the retrieval of property info in an
+ * object given a string path.
+ *
+ * The path info consists of an object with the
+ * following properties:
+ *
+ * * parent - The parent object of the property referenced by `path`
+ * * name - The name of the final property, a number if it was an array indexer
+ * * value - The value of the property, if it exists, otherwise `undefined`
+ * * exists - Whether the property exists or not
+ *
+ * @param {String} path
+ * @param {Object} object
+ * @returns {Object} info
+ * @namespace Utils
+ * @name getPathInfo
+ * @api public
+ */
+
+module.exports = function getPathInfo(path, obj) {
+ var parsed = parsePath(path),
+ last = parsed[parsed.length - 1];
+
+ var info = {
+ parent: parsed.length > 1 ? _getPathValue(parsed, obj, parsed.length - 1) : obj,
+ name: last.p || last.i,
+ value: _getPathValue(parsed, obj)
+ };
+ info.exists = hasProperty(info.name, info.parent);
+
+ return info;
+};
+
+
+/*!
+ * ## parsePath(path)
+ *
+ * Helper function used to parse string object
+ * paths. Use in conjunction with `_getPathValue`.
+ *
+ * var parsed = parsePath('myobject.property.subprop');
+ *
+ * ### Paths:
+ *
+ * * Can be as near infinitely deep and nested
+ * * Arrays are also valid using the formal `myobject.document[3].property`.
+ * * Literal dots and brackets (not delimiter) must be backslash-escaped.
+ *
+ * @param {String} path
+ * @returns {Object} parsed
+ * @api private
+ */
+
+function parsePath (path) {
+ var str = path.replace(/([^\\])\[/g, '$1.[')
+ , parts = str.match(/(\\\.|[^.]+?)+/g);
+ return parts.map(function (value) {
+ var re = /^\[(\d+)\]$/
+ , mArr = re.exec(value);
+ if (mArr) return { i: parseFloat(mArr[1]) };
+ else return { p: value.replace(/\\([.\[\]])/g, '$1') };
+ });
+}
+
+
+/*!
+ * ## _getPathValue(parsed, obj)
+ *
+ * Helper companion function for `.parsePath` that returns
+ * the value located at the parsed address.
+ *
+ * var value = getPathValue(parsed, obj);
+ *
+ * @param {Object} parsed definition from `parsePath`.
+ * @param {Object} object to search against
+ * @param {Number} object to search against
+ * @returns {Object|Undefined} value
+ * @api private
+ */
+
+function _getPathValue (parsed, obj, index) {
+ var tmp = obj
+ , res;
+
+ index = (index === undefined ? parsed.length : index);
+
+ for (var i = 0, l = index; i < l; i++) {
+ var part = parsed[i];
+ if (tmp) {
+ if ('undefined' !== typeof part.p)
+ tmp = tmp[part.p];
+ else if ('undefined' !== typeof part.i)
+ tmp = tmp[part.i];
+ if (i == (l - 1)) res = tmp;
+ } else {
+ res = undefined;
+ }
+ }
+ return res;
+}
+
+},{"./hasProperty":21}],19:[function(require,module,exports){
+/*!
+ * Chai - getPathValue utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * @see https://github.com/logicalparadox/filtr
+ * MIT Licensed
+ */
+
+var getPathInfo = require('./getPathInfo');
+
+/**
+ * ### .getPathValue(path, object)
+ *
+ * This allows the retrieval of values in an
+ * object given a string path.
+ *
+ * var obj = {
+ * prop1: {
+ * arr: ['a', 'b', 'c']
+ * , str: 'Hello'
+ * }
+ * , prop2: {
+ * arr: [ { nested: 'Universe' } ]
+ * , str: 'Hello again!'
+ * }
+ * }
+ *
+ * The following would be the results.
+ *
+ * getPathValue('prop1.str', obj); // Hello
+ * getPathValue('prop1.att[2]', obj); // b
+ * getPathValue('prop2.arr[0].nested', obj); // Universe
+ *
+ * @param {String} path
+ * @param {Object} object
+ * @returns {Object} value or `undefined`
+ * @namespace Utils
+ * @name getPathValue
+ * @api public
+ */
+module.exports = function(path, obj) {
+ var info = getPathInfo(path, obj);
+ return info.value;
+};
+
+},{"./getPathInfo":18}],20:[function(require,module,exports){
+/*!
+ * Chai - getProperties utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### .getProperties(object)
+ *
+ * This allows the retrieval of property names of an object, enumerable or not,
+ * inherited or not.
+ *
+ * @param {Object} object
+ * @returns {Array}
+ * @namespace Utils
+ * @name getProperties
+ * @api public
+ */
+
+module.exports = function getProperties(object) {
+ var result = Object.getOwnPropertyNames(object);
+
+ function addProperty(property) {
+ if (result.indexOf(property) === -1) {
+ result.push(property);
+ }
+ }
+
+ var proto = Object.getPrototypeOf(object);
+ while (proto !== null) {
+ Object.getOwnPropertyNames(proto).forEach(addProperty);
+ proto = Object.getPrototypeOf(proto);
+ }
+
+ return result;
+};
+
+},{}],21:[function(require,module,exports){
+/*!
+ * Chai - hasProperty utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+var type = require('type-detect');
+
+/**
+ * ### .hasProperty(object, name)
+ *
+ * This allows checking whether an object has
+ * named property or numeric array index.
+ *
+ * Basically does the same thing as the `in`
+ * operator but works properly with natives
+ * and null/undefined values.
+ *
+ * var obj = {
+ * arr: ['a', 'b', 'c']
+ * , str: 'Hello'
+ * }
+ *
+ * The following would be the results.
+ *
+ * hasProperty('str', obj); // true
+ * hasProperty('constructor', obj); // true
+ * hasProperty('bar', obj); // false
+ *
+ * hasProperty('length', obj.str); // true
+ * hasProperty(1, obj.str); // true
+ * hasProperty(5, obj.str); // false
+ *
+ * hasProperty('length', obj.arr); // true
+ * hasProperty(2, obj.arr); // true
+ * hasProperty(3, obj.arr); // false
+ *
+ * @param {Objuect} object
+ * @param {String|Number} name
+ * @returns {Boolean} whether it exists
+ * @namespace Utils
+ * @name getPathInfo
+ * @api public
+ */
+
+var literals = {
+ 'number': Number
+ , 'string': String
+};
+
+module.exports = function hasProperty(name, obj) {
+ var ot = type(obj);
+
+ // Bad Object, obviously no props at all
+ if(ot === 'null' || ot === 'undefined')
+ return false;
+
+ // The `in` operator does not work with certain literals
+ // box these before the check
+ if(literals[ot] && typeof obj !== 'object')
+ obj = new literals[ot](obj);
+
+ return name in obj;
+};
+
+},{"type-detect":35}],22:[function(require,module,exports){
+/*!
+ * chai
+ * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Main exports
+ */
+
+var exports = module.exports = {};
+
+/*!
+ * test utility
+ */
+
+exports.test = require('./test');
+
+/*!
+ * type utility
+ */
+
+exports.type = require('type-detect');
+
+/*!
+ * expectTypes utility
+ */
+exports.expectTypes = require('./expectTypes');
+
+/*!
+ * message utility
+ */
+
+exports.getMessage = require('./getMessage');
+
+/*!
+ * actual utility
+ */
+
+exports.getActual = require('./getActual');
+
+/*!
+ * Inspect util
+ */
+
+exports.inspect = require('./inspect');
+
+/*!
+ * Object Display util
+ */
+
+exports.objDisplay = require('./objDisplay');
+
+/*!
+ * Flag utility
+ */
+
+exports.flag = require('./flag');
+
+/*!
+ * Flag transferring utility
+ */
+
+exports.transferFlags = require('./transferFlags');
+
+/*!
+ * Deep equal utility
+ */
+
+exports.eql = require('deep-eql');
+
+/*!
+ * Deep path value
+ */
+
+exports.getPathValue = require('./getPathValue');
+
+/*!
+ * Deep path info
+ */
+
+exports.getPathInfo = require('./getPathInfo');
+
+/*!
+ * Check if a property exists
+ */
+
+exports.hasProperty = require('./hasProperty');
+
+/*!
+ * Function name
+ */
+
+exports.getName = require('./getName');
+
+/*!
+ * add Property
+ */
+
+exports.addProperty = require('./addProperty');
+
+/*!
+ * add Method
+ */
+
+exports.addMethod = require('./addMethod');
+
+/*!
+ * overwrite Property
+ */
+
+exports.overwriteProperty = require('./overwriteProperty');
+
+/*!
+ * overwrite Method
+ */
+
+exports.overwriteMethod = require('./overwriteMethod');
+
+/*!
+ * Add a chainable method
+ */
+
+exports.addChainableMethod = require('./addChainableMethod');
+
+/*!
+ * Overwrite chainable method
+ */
+
+exports.overwriteChainableMethod = require('./overwriteChainableMethod');
+
+},{"./addChainableMethod":9,"./addMethod":10,"./addProperty":11,"./expectTypes":12,"./flag":13,"./getActual":14,"./getMessage":16,"./getName":17,"./getPathInfo":18,"./getPathValue":19,"./hasProperty":21,"./inspect":23,"./objDisplay":24,"./overwriteChainableMethod":25,"./overwriteMethod":26,"./overwriteProperty":27,"./test":28,"./transferFlags":29,"deep-eql":31,"type-detect":35}],23:[function(require,module,exports){
+// This is (almost) directly from Node.js utils
+// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
+
+var getName = require('./getName');
+var getProperties = require('./getProperties');
+var getEnumerableProperties = require('./getEnumerableProperties');
+
+module.exports = inspect;
+
+/**
+ * Echos the value of a value. Trys to print the value out
+ * in the best way possible given the different types.
+ *
+ * @param {Object} obj The object to print out.
+ * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
+ * properties of objects.
+ * @param {Number} depth Depth in which to descend in object. Default is 2.
+ * @param {Boolean} colors Flag to turn on ANSI escape codes to color the
+ * output. Default is false (no coloring).
+ * @namespace Utils
+ * @name inspect
+ */
+function inspect(obj, showHidden, depth, colors) {
+ var ctx = {
+ showHidden: showHidden,
+ seen: [],
+ stylize: function (str) { return str; }
+ };
+ return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));
+}
+
+// Returns true if object is a DOM element.
+var isDOMElement = function (object) {
+ if (typeof HTMLElement === 'object') {
+ return object instanceof HTMLElement;
+ } else {
+ return object &&
+ typeof object === 'object' &&
+ object.nodeType === 1 &&
+ typeof object.nodeName === 'string';
+ }
+};
+
+function formatValue(ctx, value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (value && typeof value.inspect === 'function' &&
+ // Filter out the util module, it's inspect function is special
+ value.inspect !== exports.inspect &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ var ret = value.inspect(recurseTimes);
+ if (typeof ret !== 'string') {
+ ret = formatValue(ctx, ret, recurseTimes);
+ }
+ return ret;
+ }
+
+ // Primitive types cannot have properties
+ var primitive = formatPrimitive(ctx, value);
+ if (primitive) {
+ return primitive;
+ }
+
+ // If this is a DOM element, try to get the outer HTML.
+ if (isDOMElement(value)) {
+ if ('outerHTML' in value) {
+ return value.outerHTML;
+ // This value does not have an outerHTML attribute,
+ // it could still be an XML element
+ } else {
+ // Attempt to serialize it
+ try {
+ if (document.xmlVersion) {
+ var xmlSerializer = new XMLSerializer();
+ return xmlSerializer.serializeToString(value);
+ } else {
+ // Firefox 11- do not support outerHTML
+ // It does, however, support innerHTML
+ // Use the following to render the element
+ var ns = "http://www.w3.org/1999/xhtml";
+ var container = document.createElementNS(ns, '_');
+
+ container.appendChild(value.cloneNode(false));
+ html = container.innerHTML
+ .replace('><', '>' + value.innerHTML + '<');
+ container.innerHTML = '';
+ return html;
+ }
+ } catch (err) {
+ // This could be a non-native DOM implementation,
+ // continue with the normal flow:
+ // printing the element as if it is an object.
+ }
+ }
+ }
+
+ // Look up the keys of the object.
+ var visibleKeys = getEnumerableProperties(value);
+ var keys = ctx.showHidden ? getProperties(value) : visibleKeys;
+
+ // Some type of object without properties can be shortcutted.
+ // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
+ // a `stack` plus `description` property; ignore those for consistency.
+ if (keys.length === 0 || (isError(value) && (
+ (keys.length === 1 && keys[0] === 'stack') ||
+ (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')
+ ))) {
+ if (typeof value === 'function') {
+ var name = getName(value);
+ var nameSuffix = name ? ': ' + name : '';
+ return ctx.stylize('[Function' + nameSuffix + ']', 'special');
+ }
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ }
+ if (isDate(value)) {
+ return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
+ }
+ if (isError(value)) {
+ return formatError(value);
+ }
+ }
+
+ var base = '', array = false, braces = ['{', '}'];
+
+ // Make Array say that they are Array
+ if (isArray(value)) {
+ array = true;
+ braces = ['[', ']'];
+ }
+
+ // Make functions say that they are functions
+ if (typeof value === 'function') {
+ var name = getName(value);
+ var nameSuffix = name ? ': ' + name : '';
+ base = ' [Function' + nameSuffix + ']';
+ }
+
+ // Make RegExps say that they are RegExps
+ if (isRegExp(value)) {
+ base = ' ' + RegExp.prototype.toString.call(value);
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + Date.prototype.toUTCString.call(value);
+ }
+
+ // Make error with message first say the error
+ if (isError(value)) {
+ return formatError(value);
+ }
+
+ if (keys.length === 0 && (!array || value.length == 0)) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ } else {
+ return ctx.stylize('[Object]', 'special');
+ }
+ }
+
+ ctx.seen.push(value);
+
+ var output;
+ if (array) {
+ output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+ } else {
+ output = keys.map(function(key) {
+ return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+ });
+ }
+
+ ctx.seen.pop();
+
+ return reduceToSingleString(output, base, braces);
+}
+
+
+function formatPrimitive(ctx, value) {
+ switch (typeof value) {
+ case 'undefined':
+ return ctx.stylize('undefined', 'undefined');
+
+ case 'string':
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return ctx.stylize(simple, 'string');
+
+ case 'number':
+ if (value === 0 && (1/value) === -Infinity) {
+ return ctx.stylize('-0', 'number');
+ }
+ return ctx.stylize('' + value, 'number');
+
+ case 'boolean':
+ return ctx.stylize('' + value, 'boolean');
+ }
+ // For some reason typeof null is "object", so special case here.
+ if (value === null) {
+ return ctx.stylize('null', 'null');
+ }
+}
+
+
+function formatError(value) {
+ return '[' + Error.prototype.toString.call(value) + ']';
+}
+
+
+function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+ var output = [];
+ for (var i = 0, l = value.length; i < l; ++i) {
+ if (Object.prototype.hasOwnProperty.call(value, String(i))) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ String(i), true));
+ } else {
+ output.push('');
+ }
+ }
+ keys.forEach(function(key) {
+ if (!key.match(/^\d+$/)) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ key, true));
+ }
+ });
+ return output;
+}
+
+
+function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+ var name, str;
+ if (value.__lookupGetter__) {
+ if (value.__lookupGetter__(key)) {
+ if (value.__lookupSetter__(key)) {
+ str = ctx.stylize('[Getter/Setter]', 'special');
+ } else {
+ str = ctx.stylize('[Getter]', 'special');
+ }
+ } else {
+ if (value.__lookupSetter__(key)) {
+ str = ctx.stylize('[Setter]', 'special');
+ }
+ }
+ }
+ if (visibleKeys.indexOf(key) < 0) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (ctx.seen.indexOf(value[key]) < 0) {
+ if (recurseTimes === null) {
+ str = formatValue(ctx, value[key], null);
+ } else {
+ str = formatValue(ctx, value[key], recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (array) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = ctx.stylize('[Circular]', 'special');
+ }
+ }
+ if (typeof name === 'undefined') {
+ if (array && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = ctx.stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = ctx.stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+}
+
+
+function reduceToSingleString(output, base, braces) {
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.length + 1;
+ }, 0);
+
+ if (length > 60) {
+ return braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+ }
+
+ return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+}
+
+function isArray(ar) {
+ return Array.isArray(ar) ||
+ (typeof ar === 'object' && objectToString(ar) === '[object Array]');
+}
+
+function isRegExp(re) {
+ return typeof re === 'object' && objectToString(re) === '[object RegExp]';
+}
+
+function isDate(d) {
+ return typeof d === 'object' && objectToString(d) === '[object Date]';
+}
+
+function isError(e) {
+ return typeof e === 'object' && objectToString(e) === '[object Error]';
+}
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+},{"./getEnumerableProperties":15,"./getName":17,"./getProperties":20}],24:[function(require,module,exports){
+/*!
+ * Chai - flag utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var inspect = require('./inspect');
+var config = require('../config');
+
+/**
+ * ### .objDisplay (object)
+ *
+ * Determines if an object or an array matches
+ * criteria to be inspected in-line for error
+ * messages or should be truncated.
+ *
+ * @param {Mixed} javascript object to inspect
+ * @name objDisplay
+ * @namespace Utils
+ * @api public
+ */
+
+module.exports = function (obj) {
+ var str = inspect(obj)
+ , type = Object.prototype.toString.call(obj);
+
+ if (config.truncateThreshold && str.length >= config.truncateThreshold) {
+ if (type === '[object Function]') {
+ return !obj.name || obj.name === ''
+ ? '[Function]'
+ : '[Function: ' + obj.name + ']';
+ } else if (type === '[object Array]') {
+ return '[ Array(' + obj.length + ') ]';
+ } else if (type === '[object Object]') {
+ var keys = Object.keys(obj)
+ , kstr = keys.length > 2
+ ? keys.splice(0, 2).join(', ') + ', ...'
+ : keys.join(', ');
+ return '{ Object (' + kstr + ') }';
+ } else {
+ return str;
+ }
+ } else {
+ return str;
+ }
+};
+
+},{"../config":4,"./inspect":23}],25:[function(require,module,exports){
+/*!
+ * Chai - overwriteChainableMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteChainableMethod (ctx, name, method, chainingBehavior)
+ *
+ * Overwites an already existing chainable method
+ * and provides access to the previous function or
+ * property. Must return functions to be used for
+ * name.
+ *
+ * utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',
+ * function (_super) {
+ * }
+ * , function (_super) {
+ * }
+ * );
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.overwriteChainableMethod('foo', fn, fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.have.length(3);
+ * expect(myFoo).to.have.length.above(3);
+ *
+ * @param {Object} ctx object whose method / property is to be overwritten
+ * @param {String} name of method / property to overwrite
+ * @param {Function} method function that returns a function to be used for name
+ * @param {Function} chainingBehavior function that returns a function to be used for property
+ * @namespace Utils
+ * @name overwriteChainableMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method, chainingBehavior) {
+ var chainableBehavior = ctx.__methods[name];
+
+ var _chainingBehavior = chainableBehavior.chainingBehavior;
+ chainableBehavior.chainingBehavior = function () {
+ var result = chainingBehavior(_chainingBehavior).call(this);
+ return result === undefined ? this : result;
+ };
+
+ var _method = chainableBehavior.method;
+ chainableBehavior.method = function () {
+ var result = method(_method).apply(this, arguments);
+ return result === undefined ? this : result;
+ };
+};
+
+},{}],26:[function(require,module,exports){
+/*!
+ * Chai - overwriteMethod utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteMethod (ctx, name, fn)
+ *
+ * Overwites an already existing method and provides
+ * access to previous function. Must return function
+ * to be used for name.
+ *
+ * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
+ * return function (str) {
+ * var obj = utils.flag(this, 'object');
+ * if (obj instanceof Foo) {
+ * new chai.Assertion(obj.value).to.equal(str);
+ * } else {
+ * _super.apply(this, arguments);
+ * }
+ * }
+ * });
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.overwriteMethod('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.equal('bar');
+ *
+ * @param {Object} ctx object whose method is to be overwritten
+ * @param {String} name of method to overwrite
+ * @param {Function} method function that returns a function to be used for name
+ * @namespace Utils
+ * @name overwriteMethod
+ * @api public
+ */
+
+module.exports = function (ctx, name, method) {
+ var _method = ctx[name]
+ , _super = function () { return this; };
+
+ if (_method && 'function' === typeof _method)
+ _super = _method;
+
+ ctx[name] = function () {
+ var result = method(_super).apply(this, arguments);
+ return result === undefined ? this : result;
+ }
+};
+
+},{}],27:[function(require,module,exports){
+/*!
+ * Chai - overwriteProperty utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### overwriteProperty (ctx, name, fn)
+ *
+ * Overwites an already existing property getter and provides
+ * access to previous value. Must return function to use as getter.
+ *
+ * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
+ * return function () {
+ * var obj = utils.flag(this, 'object');
+ * if (obj instanceof Foo) {
+ * new chai.Assertion(obj.name).to.equal('bar');
+ * } else {
+ * _super.call(this);
+ * }
+ * }
+ * });
+ *
+ *
+ * Can also be accessed directly from `chai.Assertion`.
+ *
+ * chai.Assertion.overwriteProperty('foo', fn);
+ *
+ * Then can be used as any other assertion.
+ *
+ * expect(myFoo).to.be.ok;
+ *
+ * @param {Object} ctx object whose property is to be overwritten
+ * @param {String} name of property to overwrite
+ * @param {Function} getter function that returns a getter function to be used for name
+ * @namespace Utils
+ * @name overwriteProperty
+ * @api public
+ */
+
+module.exports = function (ctx, name, getter) {
+ var _get = Object.getOwnPropertyDescriptor(ctx, name)
+ , _super = function () {};
+
+ if (_get && 'function' === typeof _get.get)
+ _super = _get.get
+
+ Object.defineProperty(ctx, name,
+ { get: function () {
+ var result = getter(_super).call(this);
+ return result === undefined ? this : result;
+ }
+ , configurable: true
+ });
+};
+
+},{}],28:[function(require,module,exports){
+/*!
+ * Chai - test utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependancies
+ */
+
+var flag = require('./flag');
+
+/**
+ * # test(object, expression)
+ *
+ * Test and object for expression.
+ *
+ * @param {Object} object (constructed Assertion)
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
+ * @namespace Utils
+ * @name test
+ */
+
+module.exports = function (obj, args) {
+ var negate = flag(obj, 'negate')
+ , expr = args[0];
+ return negate ? !expr : expr;
+};
+
+},{"./flag":13}],29:[function(require,module,exports){
+/*!
+ * Chai - transferFlags utility
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/**
+ * ### transferFlags(assertion, object, includeAll = true)
+ *
+ * Transfer all the flags for `assertion` to `object`. If
+ * `includeAll` is set to `false`, then the base Chai
+ * assertion flags (namely `object`, `ssfi`, and `message`)
+ * will not be transferred.
+ *
+ *
+ * var newAssertion = new Assertion();
+ * utils.transferFlags(assertion, newAssertion);
+ *
+ * var anotherAsseriton = new Assertion(myObj);
+ * utils.transferFlags(assertion, anotherAssertion, false);
+ *
+ * @param {Assertion} assertion the assertion to transfer the flags from
+ * @param {Object} object the object to transfer the flags to; usually a new assertion
+ * @param {Boolean} includeAll
+ * @namespace Utils
+ * @name transferFlags
+ * @api private
+ */
+
+module.exports = function (assertion, object, includeAll) {
+ var flags = assertion.__flags || (assertion.__flags = Object.create(null));
+
+ if (!object.__flags) {
+ object.__flags = Object.create(null);
+ }
+
+ includeAll = arguments.length === 3 ? includeAll : true;
+
+ for (var flag in flags) {
+ if (includeAll ||
+ (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {
+ object.__flags[flag] = flags[flag];
+ }
+ }
+};
+
+},{}],30:[function(require,module,exports){
+/*!
+ * assertion-error
+ * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Return a function that will copy properties from
+ * one object to another excluding any originally
+ * listed. Returned function will create a new `{}`.
+ *
+ * @param {String} excluded properties ...
+ * @return {Function}
+ */
+
+function exclude () {
+ var excludes = [].slice.call(arguments);
+
+ function excludeProps (res, obj) {
+ Object.keys(obj).forEach(function (key) {
+ if (!~excludes.indexOf(key)) res[key] = obj[key];
+ });
+ }
+
+ return function extendExclude () {
+ var args = [].slice.call(arguments)
+ , i = 0
+ , res = {};
+
+ for (; i < args.length; i++) {
+ excludeProps(res, args[i]);
+ }
+
+ return res;
+ };
+};
+
+/*!
+ * Primary Exports
+ */
+
+module.exports = AssertionError;
+
+/**
+ * ### AssertionError
+ *
+ * An extension of the JavaScript `Error` constructor for
+ * assertion and validation scenarios.
+ *
+ * @param {String} message
+ * @param {Object} properties to include (optional)
+ * @param {callee} start stack function (optional)
+ */
+
+function AssertionError (message, _props, ssf) {
+ var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')
+ , props = extend(_props || {});
+
+ // default values
+ this.message = message || 'Unspecified AssertionError';
+ this.showDiff = false;
+
+ // copy from properties
+ for (var key in props) {
+ this[key] = props[key];
+ }
+
+ // capture stack trace
+ ssf = ssf || arguments.callee;
+ if (ssf && Error.captureStackTrace) {
+ Error.captureStackTrace(this, ssf);
+ } else {
+ this.stack = new Error().stack;
+ }
+}
+
+/*!
+ * Inherit from Error.prototype
+ */
+
+AssertionError.prototype = Object.create(Error.prototype);
+
+/*!
+ * Statically set name
+ */
+
+AssertionError.prototype.name = 'AssertionError';
+
+/*!
+ * Ensure correct constructor
+ */
+
+AssertionError.prototype.constructor = AssertionError;
+
+/**
+ * Allow errors to be converted to JSON for static transfer.
+ *
+ * @param {Boolean} include stack (default: `true`)
+ * @return {Object} object that can be `JSON.stringify`
+ */
+
+AssertionError.prototype.toJSON = function (stack) {
+ var extend = exclude('constructor', 'toJSON', 'stack')
+ , props = extend({ name: this.name }, this);
+
+ // include stack if exists and not turned off
+ if (false !== stack && this.stack) {
+ props.stack = this.stack;
+ }
+
+ return props;
+};
+
+},{}],31:[function(require,module,exports){
+module.exports = require('./lib/eql');
+
+},{"./lib/eql":32}],32:[function(require,module,exports){
+/*!
+ * deep-eql
+ * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Module dependencies
+ */
+
+var type = require('type-detect');
+
+/*!
+ * Buffer.isBuffer browser shim
+ */
+
+var Buffer;
+try { Buffer = require('buffer').Buffer; }
+catch(ex) {
+ Buffer = {};
+ Buffer.isBuffer = function() { return false; }
+}
+
+/*!
+ * Primary Export
+ */
+
+module.exports = deepEqual;
+
+/**
+ * Assert super-strict (egal) equality between
+ * two objects of any type.
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @param {Array} memoised (optional)
+ * @return {Boolean} equal match
+ */
+
+function deepEqual(a, b, m) {
+ if (sameValue(a, b)) {
+ return true;
+ } else if ('date' === type(a)) {
+ return dateEqual(a, b);
+ } else if ('regexp' === type(a)) {
+ return regexpEqual(a, b);
+ } else if (Buffer.isBuffer(a)) {
+ return bufferEqual(a, b);
+ } else if ('arguments' === type(a)) {
+ return argumentsEqual(a, b, m);
+ } else if (!typeEqual(a, b)) {
+ return false;
+ } else if (('object' !== type(a) && 'object' !== type(b))
+ && ('array' !== type(a) && 'array' !== type(b))) {
+ return sameValue(a, b);
+ } else {
+ return objectEqual(a, b, m);
+ }
+}
+
+/*!
+ * Strict (egal) equality test. Ensures that NaN always
+ * equals NaN and `-0` does not equal `+0`.
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @return {Boolean} equal match
+ */
+
+function sameValue(a, b) {
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ return a !== a && b !== b;
+}
+
+/*!
+ * Compare the types of two given objects and
+ * return if they are equal. Note that an Array
+ * has a type of `array` (not `object`) and arguments
+ * have a type of `arguments` (not `array`/`object`).
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @return {Boolean} result
+ */
+
+function typeEqual(a, b) {
+ return type(a) === type(b);
+}
+
+/*!
+ * Compare two Date objects by asserting that
+ * the time values are equal using `saveValue`.
+ *
+ * @param {Date} a
+ * @param {Date} b
+ * @return {Boolean} result
+ */
+
+function dateEqual(a, b) {
+ if ('date' !== type(b)) return false;
+ return sameValue(a.getTime(), b.getTime());
+}
+
+/*!
+ * Compare two regular expressions by converting them
+ * to string and checking for `sameValue`.
+ *
+ * @param {RegExp} a
+ * @param {RegExp} b
+ * @return {Boolean} result
+ */
+
+function regexpEqual(a, b) {
+ if ('regexp' !== type(b)) return false;
+ return sameValue(a.toString(), b.toString());
+}
+
+/*!
+ * Assert deep equality of two `arguments` objects.
+ * Unfortunately, these must be sliced to arrays
+ * prior to test to ensure no bad behavior.
+ *
+ * @param {Arguments} a
+ * @param {Arguments} b
+ * @param {Array} memoize (optional)
+ * @return {Boolean} result
+ */
+
+function argumentsEqual(a, b, m) {
+ if ('arguments' !== type(b)) return false;
+ a = [].slice.call(a);
+ b = [].slice.call(b);
+ return deepEqual(a, b, m);
+}
+
+/*!
+ * Get enumerable properties of a given object.
+ *
+ * @param {Object} a
+ * @return {Array} property names
+ */
+
+function enumerable(a) {
+ var res = [];
+ for (var key in a) res.push(key);
+ return res;
+}
+
+/*!
+ * Simple equality for flat iterable objects
+ * such as Arrays or Node.js buffers.
+ *
+ * @param {Iterable} a
+ * @param {Iterable} b
+ * @return {Boolean} result
+ */
+
+function iterableEqual(a, b) {
+ if (a.length !== b.length) return false;
+
+ var i = 0;
+ var match = true;
+
+ for (; i < a.length; i++) {
+ if (a[i] !== b[i]) {
+ match = false;
+ break;
+ }
+ }
+
+ return match;
+}
+
+/*!
+ * Extension to `iterableEqual` specifically
+ * for Node.js Buffers.
+ *
+ * @param {Buffer} a
+ * @param {Mixed} b
+ * @return {Boolean} result
+ */
+
+function bufferEqual(a, b) {
+ if (!Buffer.isBuffer(b)) return false;
+ return iterableEqual(a, b);
+}
+
+/*!
+ * Block for `objectEqual` ensuring non-existing
+ * values don't get in.
+ *
+ * @param {Mixed} object
+ * @return {Boolean} result
+ */
+
+function isValue(a) {
+ return a !== null && a !== undefined;
+}
+
+/*!
+ * Recursively check the equality of two objects.
+ * Once basic sameness has been established it will
+ * defer to `deepEqual` for each enumerable key
+ * in the object.
+ *
+ * @param {Mixed} a
+ * @param {Mixed} b
+ * @return {Boolean} result
+ */
+
+function objectEqual(a, b, m) {
+ if (!isValue(a) || !isValue(b)) {
+ return false;
+ }
+
+ if (a.prototype !== b.prototype) {
+ return false;
+ }
+
+ var i;
+ if (m) {
+ for (i = 0; i < m.length; i++) {
+ if ((m[i][0] === a && m[i][1] === b)
+ || (m[i][0] === b && m[i][1] === a)) {
+ return true;
+ }
+ }
+ } else {
+ m = [];
+ }
+
+ try {
+ var ka = enumerable(a);
+ var kb = enumerable(b);
+ } catch (ex) {
+ return false;
+ }
+
+ ka.sort();
+ kb.sort();
+
+ if (!iterableEqual(ka, kb)) {
+ return false;
+ }
+
+ m.push([ a, b ]);
+
+ var key;
+ for (i = ka.length - 1; i >= 0; i--) {
+ key = ka[i];
+ if (!deepEqual(a[key], b[key], m)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+},{"buffer":undefined,"type-detect":33}],33:[function(require,module,exports){
+module.exports = require('./lib/type');
+
+},{"./lib/type":34}],34:[function(require,module,exports){
+/*!
+ * type-detect
+ * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Primary Exports
+ */
+
+var exports = module.exports = getType;
+
+/*!
+ * Detectable javascript natives
+ */
+
+var natives = {
+ '[object Array]': 'array'
+ , '[object RegExp]': 'regexp'
+ , '[object Function]': 'function'
+ , '[object Arguments]': 'arguments'
+ , '[object Date]': 'date'
+};
+
+/**
+ * ### typeOf (obj)
+ *
+ * Use several different techniques to determine
+ * the type of object being tested.
+ *
+ *
+ * @param {Mixed} object
+ * @return {String} object type
+ * @api public
+ */
+
+function getType (obj) {
+ var str = Object.prototype.toString.call(obj);
+ if (natives[str]) return natives[str];
+ if (obj === null) return 'null';
+ if (obj === undefined) return 'undefined';
+ if (obj === Object(obj)) return 'object';
+ return typeof obj;
+}
+
+exports.Library = Library;
+
+/**
+ * ### Library
+ *
+ * Create a repository for custom type detection.
+ *
+ * ```js
+ * var lib = new type.Library;
+ * ```
+ *
+ */
+
+function Library () {
+ this.tests = {};
+}
+
+/**
+ * #### .of (obj)
+ *
+ * Expose replacement `typeof` detection to the library.
+ *
+ * ```js
+ * if ('string' === lib.of('hello world')) {
+ * // ...
+ * }
+ * ```
+ *
+ * @param {Mixed} object to test
+ * @return {String} type
+ */
+
+Library.prototype.of = getType;
+
+/**
+ * #### .define (type, test)
+ *
+ * Add a test to for the `.test()` assertion.
+ *
+ * Can be defined as a regular expression:
+ *
+ * ```js
+ * lib.define('int', /^[0-9]+$/);
+ * ```
+ *
+ * ... or as a function:
+ *
+ * ```js
+ * lib.define('bln', function (obj) {
+ * if ('boolean' === lib.of(obj)) return true;
+ * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];
+ * if ('string' === lib.of(obj)) obj = obj.toLowerCase();
+ * return !! ~blns.indexOf(obj);
+ * });
+ * ```
+ *
+ * @param {String} type
+ * @param {RegExp|Function} test
+ * @api public
+ */
+
+Library.prototype.define = function (type, test) {
+ if (arguments.length === 1) return this.tests[type];
+ this.tests[type] = test;
+ return this;
+};
+
+/**
+ * #### .test (obj, test)
+ *
+ * Assert that an object is of type. Will first
+ * check natives, and if that does not pass it will
+ * use the user defined custom tests.
+ *
+ * ```js
+ * assert(lib.test('1', 'int'));
+ * assert(lib.test('yes', 'bln'));
+ * ```
+ *
+ * @param {Mixed} object
+ * @param {String} type
+ * @return {Boolean} result
+ * @api public
+ */
+
+Library.prototype.test = function (obj, type) {
+ if (type === getType(obj)) return true;
+ var test = this.tests[type];
+
+ if (test && 'regexp' === getType(test)) {
+ return test.test(obj);
+ } else if (test && 'function' === getType(test)) {
+ return test(obj);
+ } else {
+ throw new ReferenceError('Type test "' + type + '" not defined or invalid.');
+ }
+};
+
+},{}],35:[function(require,module,exports){
+arguments[4][33][0].apply(exports,arguments)
+},{"./lib/type":36,"dup":33}],36:[function(require,module,exports){
+/*!
+ * type-detect
+ * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
+ * MIT Licensed
+ */
+
+/*!
+ * Primary Exports
+ */
+
+var exports = module.exports = getType;
+
+/**
+ * ### typeOf (obj)
+ *
+ * Use several different techniques to determine
+ * the type of object being tested.
+ *
+ *
+ * @param {Mixed} object
+ * @return {String} object type
+ * @api public
+ */
+var objectTypeRegexp = /^\[object (.*)\]$/;
+
+function getType(obj) {
+ var type = Object.prototype.toString.call(obj).match(objectTypeRegexp)[1].toLowerCase();
+ // Let "new String('')" return 'object'
+ if (typeof Promise === 'function' && obj instanceof Promise) return 'promise';
+ // PhantomJS has type "DOMWindow" for null
+ if (obj === null) return 'null';
+ // PhantomJS has type "DOMWindow" for undefined
+ if (obj === undefined) return 'undefined';
+ return type;
+}
+
+exports.Library = Library;
+
+/**
+ * ### Library
+ *
+ * Create a repository for custom type detection.
+ *
+ * ```js
+ * var lib = new type.Library;
+ * ```
+ *
+ */
+
+function Library() {
+ if (!(this instanceof Library)) return new Library();
+ this.tests = {};
+}
+
+/**
+ * #### .of (obj)
+ *
+ * Expose replacement `typeof` detection to the library.
+ *
+ * ```js
+ * if ('string' === lib.of('hello world')) {
+ * // ...
+ * }
+ * ```
+ *
+ * @param {Mixed} object to test
+ * @return {String} type
+ */
+
+Library.prototype.of = getType;
+
+/**
+ * #### .define (type, test)
+ *
+ * Add a test to for the `.test()` assertion.
+ *
+ * Can be defined as a regular expression:
+ *
+ * ```js
+ * lib.define('int', /^[0-9]+$/);
+ * ```
+ *
+ * ... or as a function:
+ *
+ * ```js
+ * lib.define('bln', function (obj) {
+ * if ('boolean' === lib.of(obj)) return true;
+ * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];
+ * if ('string' === lib.of(obj)) obj = obj.toLowerCase();
+ * return !! ~blns.indexOf(obj);
+ * });
+ * ```
+ *
+ * @param {String} type
+ * @param {RegExp|Function} test
+ * @api public
+ */
+
+Library.prototype.define = function(type, test) {
+ if (arguments.length === 1) return this.tests[type];
+ this.tests[type] = test;
+ return this;
+};
+
+/**
+ * #### .test (obj, test)
+ *
+ * Assert that an object is of type. Will first
+ * check natives, and if that does not pass it will
+ * use the user defined custom tests.
+ *
+ * ```js
+ * assert(lib.test('1', 'int'));
+ * assert(lib.test('yes', 'bln'));
+ * ```
+ *
+ * @param {Mixed} object
+ * @param {String} type
+ * @return {Boolean} result
+ * @api public
+ */
+
+Library.prototype.test = function(obj, type) {
+ if (type === getType(obj)) return true;
+ var test = this.tests[type];
+
+ if (test && 'regexp' === getType(test)) {
+ return test.test(obj);
+ } else if (test && 'function' === getType(test)) {
+ return test(obj);
+ } else {
+ throw new ReferenceError('Type test "' + type + '" not defined or invalid.');
+ }
+};
+
+},{}]},{},[1])(1)
+}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.conf.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.conf.js
new file mode 100644
index 00000000000..48cf541932b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.conf.js
@@ -0,0 +1,28 @@
+module.exports = function(config) {
+ config.set({
+ frameworks: [ 'mocha' ]
+ , files: [
+ 'chai.js'
+ , 'test/bootstrap/karma.js'
+ , 'test/*.js'
+ ]
+ , reporters: [ 'progress' ]
+ , colors: true
+ , logLevel: config.LOG_INFO
+ , autoWatch: false
+ , browsers: [ 'PhantomJS' ]
+ , browserDisconnectTimeout: 10000
+ , browserDisconnectTolerance: 2
+ , browserNoActivityTimeout: 20000
+ , singleRun: true
+ });
+
+ switch (process.env.CHAI_TEST_ENV) {
+ case 'sauce':
+ require('./karma.sauce')(config);
+ break;
+ default:
+ // ...
+ break;
+ };
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.sauce.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.sauce.js
new file mode 100644
index 00000000000..e57d5e0db81
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/karma.sauce.js
@@ -0,0 +1,41 @@
+var version = require('./package.json').version;
+var ts = new Date().getTime();
+
+module.exports = function(config) {
+ var auth;
+
+ try {
+ auth = require('./test/auth/index');
+ } catch(ex) {
+ auth = {};
+ auth.SAUCE_USERNAME = process.env.SAUCE_USERNAME || null;
+ auth.SAUCE_ACCESS_KEY = process.env.SAUCE_ACCESS_KEY || null;
+ }
+
+ if (!auth.SAUCE_USERNAME || !auth.SAUCE_ACCESS_KEY) return;
+ if (process.env.SKIP_SAUCE) return;
+
+ var branch = process.env.TRAVIS_BRANCH || 'local'
+ var browserConfig = require('./sauce.browsers');
+ var browsers = Object.keys(browserConfig);
+ var tags = [ 'chaijs_' + version, auth.SAUCE_USERNAME + '@' + branch ];
+ var tunnel = process.env.TRAVIS_JOB_NUMBER || ts;
+
+ if (process.env.TRAVIS_JOB_NUMBER) {
+ tags.push('travis@' + process.env.TRAVIS_JOB_NUMBER);
+ }
+
+ config.browsers = config.browsers.concat(browsers);
+ config.customLaunchers = browserConfig;
+ config.reporters.push('saucelabs');
+ config.transports = [ 'xhr-polling' ];
+
+ config.sauceLabs = {
+ username: auth.SAUCE_USERNAME
+ , accessKey: auth.SAUCE_ACCESS_KEY
+ , startConnect: true
+ , tags: tags
+ , testName: 'ChaiJS'
+ , tunnelIdentifier: tunnel
+ };
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/package.json
new file mode 100644
index 00000000000..d88685537e1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/package.json
@@ -0,0 +1,51 @@
+{
+ "author": "Jake Luer <jake@alogicalparadox.com>",
+ "name": "chai",
+ "description": "BDD/TDD assertion library for node.js and the browser. Test framework agnostic.",
+ "keywords": [
+ "test",
+ "assertion",
+ "assert",
+ "testing",
+ "chai"
+ ],
+ "homepage": "http://chaijs.com",
+ "license": "MIT",
+ "contributors": [
+ "Jake Luer <jake@alogicalparadox.com>",
+ "Domenic Denicola <domenic@domenicdenicola.com> (http://domenicdenicola.com)",
+ "Veselin Todorov <hi@vesln.com>",
+ "John Firebaugh <john.firebaugh@gmail.com>"
+ ],
+ "version": "3.5.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/chaijs/chai"
+ },
+ "bugs": {
+ "url": "https://github.com/chaijs/chai/issues"
+ },
+ "main": "./index",
+ "scripts": {
+ "test": "make test"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ },
+ "dependencies": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ },
+ "devDependencies": {
+ "browserify": "^10.2.1",
+ "bump-cli": "^1.1.3",
+ "karma": "^0.13.16",
+ "karma-mocha": "^0.1.10",
+ "karma-sauce-launcher": "^0.2.11",
+ "karma-phantomjs-launcher": "^0.2.0",
+ "karma-firefox-launcher": "^0.1.6",
+ "mocha": "^2.2.5",
+ "istanbul": "^0.3.14"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/sauce.browsers.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/sauce.browsers.js
new file mode 100644
index 00000000000..690c7cca1c7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chai/sauce.browsers.js
@@ -0,0 +1,128 @@
+
+/*!
+ * Chrome
+ */
+
+exports['SL_Chrome'] = {
+ base: 'SauceLabs'
+ , browserName: 'chrome'
+};
+
+/*!
+ * Firefox
+ */
+
+/*!
+ * TODO: Karma doesn't seem to like this, though sauce boots its up
+ *
+
+exports['SL_Firefox_23'] = {
+ base: 'SauceLabs'
+ , browserName: 'firefox'
+ , platform: 'Windows XP'
+ , version: '23'
+};
+
+*/
+
+exports['SL_Firefox_22'] = {
+ base: 'SauceLabs'
+ , browserName: 'firefox'
+ , platform: 'Windows 7'
+ , version: '22'
+};
+
+/*!
+ * Opera
+ */
+
+exports['SL_Opera_12'] = {
+ base: 'SauceLabs'
+ , browserName: 'opera'
+ , platform: 'Windows 7'
+ , version: '12'
+};
+
+exports['SL_Opera_11'] = {
+ base: 'SauceLabs'
+ , browserName: 'opera'
+ , platform: 'Windows 7'
+ , version: '11'
+};
+
+/*!
+ * Internet Explorer
+ */
+
+exports['SL_IE_10'] = {
+ base: 'SauceLabs'
+ , browserName: 'internet explorer'
+ , platform: 'Windows 2012'
+ , version: '10'
+};
+
+/*!
+ * Safari
+ */
+
+exports['SL_Safari_6'] = {
+ base: 'SauceLabs'
+ , browserName: 'safari'
+ , platform: 'Mac 10.8'
+ , version: '6'
+};
+
+exports['SL_Safari_5'] = {
+ base: 'SauceLabs'
+ , browserName: 'safari'
+ , platform: 'Mac 10.6'
+ , version: '5'
+};
+
+/*!
+ * iPhone
+ */
+
+/*!
+ * TODO: These take forever to boot or shut down. Causes timeout.
+ *
+
+exports['SL_iPhone_6'] = {
+ base: 'SauceLabs'
+ , browserName: 'iphone'
+ , platform: 'Mac 10.8'
+ , version: '6'
+};
+
+exports['SL_iPhone_5-1'] = {
+ base: 'SauceLabs'
+ , browserName: 'iphone'
+ , platform: 'Mac 10.8'
+ , version: '5.1'
+};
+
+exports['SL_iPhone_5'] = {
+ base: 'SauceLabs'
+ , browserName: 'iphone'
+ , platform: 'Mac 10.6'
+ , version: '5'
+};
+
+*/
+
+/*!
+ * Android
+ */
+
+/*!
+ * TODO: fails because of error serialization
+ *
+
+exports['SL_Android_4'] = {
+ base: 'SauceLabs'
+ , browserName: 'android'
+ , platform: 'Linux'
+ , version: '4'
+};
+
+*/
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/.bower.json
new file mode 100644
index 00000000000..a8c84c63625
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/.bower.json
@@ -0,0 +1,61 @@
+{
+ "name": "chopsui",
+ "description": "Common elements for ChOps Frontends",
+ "authors": [
+ "ChOps CRDX Team"
+ ],
+ "keywords": [
+ "chopsui",
+ "chops-ui"
+ ],
+ "main": "chops-user-dropdown.html",
+ "repository": {
+ "type": "git",
+ "url": "https://chromium.googlesource.com/infra/infra/crdx/chopsui.git"
+ },
+ "moduleType": [
+ "es6"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "README.md"
+ ],
+ "dependencies": {
+ "iron-behaviors": "^2.1.0",
+ "iron-dropdown": "PolymerElements/iron-dropdown#~2.0",
+ "iron-icons": "^2.0.0",
+ "moment": "2.17.1",
+ "moment-timezone": "^0.5.10",
+ "paper-item": "PolymerElements/paper-item#~2.0",
+ "paper-input": "PolymerElements/paper-input#~2.0",
+ "polymer": "Polymer/polymer#^2.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.1",
+ "marked": "^0.4.0"
+ },
+ "devDependencies": {
+ "iron-test-helpers": "PolymerElements/iron-test-helpers",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers",
+ "web-component-tester": "web-component-tester#6.0.0"
+ },
+ "resolutions": {
+ "polymer": "^2.0.0",
+ "iron-behaviors": "1 - 2",
+ "marked": "^0.4.0"
+ },
+ "version": "0.0.38",
+ "_release": "0.0.38",
+ "_resolution": {
+ "type": "version",
+ "tag": "v0.0.38",
+ "commit": "1afa59b56d8e46bc63ed31e9b8cc2da9df141795"
+ },
+ "_source": "https://chromium.googlesource.com/infra/infra/crdx/chopsui.git",
+ "_target": "^0.0.38",
+ "_originalSource": "chopsui",
+ "_direct": true
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/Makefile b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/Makefile
new file mode 100644
index 00000000000..9fbfe6a86ac
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/Makefile
@@ -0,0 +1,10 @@
+# Copyright 201 The Chromium Authors. All rights reserved.
+# Use of this source code is govered by a BSD-style
+# license that can be found in the LICENSE file or at
+# https://developers.google.com/open-source/licenses/bsd
+
+wct:
+ xvfb-run go run ../../go/src/infra/tools/wct/wct.go ../../go/src/infra/tools/wct/monkeypatch.go -chrome=google-chrome
+
+wct_debug:
+ go run ../../go/src/infra/tools/wct/wct.go ../../go/src/infra/tools/wct/monkeypatch.go -chrome=google-chrome -persist
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/bower.json
new file mode 100644
index 00000000000..acf008f6151
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/bower.json
@@ -0,0 +1,50 @@
+{
+ "name": "chopsui",
+ "description": "Common elements for ChOps Frontends",
+ "authors": [
+ "ChOps CRDX Team"
+ ],
+ "keywords": [
+ "chopsui",
+ "chops-ui"
+ ],
+ "main": "chops-user-dropdown.html",
+ "repository": {
+ "type": "git",
+ "url": "https://chromium.googlesource.com/infra/infra/crdx/chopsui.git"
+ },
+ "moduleType": [
+ "es6"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests",
+ "README.md"
+ ],
+ "dependencies": {
+ "iron-behaviors": "^2.1.0",
+ "iron-dropdown": "PolymerElements/iron-dropdown#~2.0",
+ "iron-icons": "^2.0.0",
+ "moment": "2.17.1",
+ "moment-timezone": "^0.5.10",
+ "paper-item": "PolymerElements/paper-item#~2.0",
+ "paper-input": "PolymerElements/paper-input#~2.0",
+ "polymer": "Polymer/polymer#^2.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.1",
+ "marked": "^0.4.0"
+ },
+ "devDependencies": {
+ "iron-test-helpers": "PolymerElements/iron-test-helpers",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers",
+ "web-component-tester": "web-component-tester#6.0.0"
+ },
+ "resolutions": {
+ "polymer": "^2.0.0",
+ "iron-behaviors": "1 - 2",
+ "marked": "^0.4.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-input.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-input.html
new file mode 100644
index 00000000000..e65df66ed76
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-input.html
@@ -0,0 +1,63 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-input/paper-input.html">
+<link rel="import" href="chops-bug-mixin.html">
+
+<dom-module id="chops-bug-input">
+ <template>
+ <paper-input
+ label="[[label]]"
+ value="{{value}}"
+ auto-validate
+ pattern="[[_bugPattern]]"
+ error-message="Please enter a bug id or bug url">
+ </paper-input>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-bug-input>` is an input element for crbug urls and bug ids.
+ *
+ * `<chops-bug-input>` does validation on the input and puts the final bug id in
+ * the bugId property. If the input is invalid, this will be expressed in
+ * the invalidBug property.
+ *
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-bug-input_demo.html
+ */
+ class ChopsBugInput extends ChopsBugMixin(Polymer.Element) {
+ static get is() { return 'chops-bug-input'; }
+
+ static get properties() {
+ return {
+ /** A bug id, bug url, or a bug in the form of 'projectName:bugId' . Required. */
+ value: String,
+ /** The bug id. */
+ bugId: {
+ type: String,
+ computed: '_computeBugId(value)',
+ },
+ /** The bug's project name. */
+ bugProject: {
+ type: String,
+ computed: '_computeBugProject(value)',
+ },
+ /** The input label for the user inputting the bug with 'Bug # or URL' default. */
+ label: {
+ type: String,
+ value: 'Bug # or URL',
+ },
+ /** True if the given bug is an invalid id or url. */
+ invalidBug: {
+ type: Boolean,
+ notify: true,
+ computed: '_computeInvalidBug(bugId)',
+ },
+ }
+ }
+ }
+ customElements.define(ChopsBugInput.is, ChopsBugInput);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-link.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-link.html
new file mode 100644
index 00000000000..e1cc25db31c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-link.html
@@ -0,0 +1,77 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="chops-bug-mixin.html">
+
+<dom-module id="chops-bug-link">
+ <template>
+ <style>
+ :host {
+ display: block;
+ }
+ p {
+ display: inline;
+ }
+ </style>
+ <a href$="https://bugs.chromium.org/p/[[_bugProject]]/issues/detail?id=[[_bugId]]">
+ [[bugProject]]:[[bugId]]</a>
+ <template is="dom-if" if="[[status]]">
+ <p>([[status]])</p>
+ </template>
+
+ <template is="dom-if" if="[[pri]]">
+ <p>(Pri-[[pri]])</p>
+ </template>
+
+ <template is="dom-if" if="[[!short]]">
+ <p>[[description]]</p>
+ </template>
+
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-bug-link>` displays a link to a chromium bug.
+ *
+ * All properties except for `bug` are optional. Set short to true
+ * when the description should not be shown.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-bug-link_demo.html
+ */
+ class ChopsBugLink extends ChopsBugMixin(Polymer.Element) {
+ static get is() { return 'chops-bug-link'; }
+
+ static get properties() {
+ return {
+ /** A bug id, bug url, or a bug in the form of 'projectName:bugId' . Required. */
+ bug: String,
+ /** The bug id. */
+ bugId: {
+ type: String,
+ computed: '_computeBugId(bug)',
+ },
+ /** The bug's project name. */
+ bugProject: {
+ type: String,
+ computed: '_computeBugProject(bug)',
+ },
+ /** The status of the bug, eg. 'Untriaged', 'Available'. Optional. */
+ status: String,
+ /** The priority number of the bug. Optional. */
+ pri: {
+ type: String,
+ },
+ /** The bug's description. Optional. */
+ description: String,
+ /** Set to true if you don't want the bug's description to be displayed. */
+ short: {
+ type: Boolean,
+ value: false,
+ }
+ }
+ }
+ }
+ customElements.define(ChopsBugLink.is, ChopsBugLink);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-mixin.html
new file mode 100644
index 00000000000..2ab9fb2bc0e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-bug-mixin.html
@@ -0,0 +1,39 @@
+<script>
+ 'use strict';
+
+ const bugIdRe = /[0-9]{3,}/;
+ const bugRe = /([^0-9]*)?[0-9]{3,}([^0-9]*)?/;
+ const bugProjectUrlRe = /(\/p\/[a-z0-9][-a-z0-9]*[a-z0-9]\/)/i;
+ const bugProjectPairRe = /([a-z0-9][-a-z0-9]*[a-z0-9]:)/i;
+ const bugProjectNameRe = /[a-z0-9][-a-z0-9]*[a-z0-9]/i;
+
+ /**
+ * A class mixin for use in parsing bug data.
+ *
+ * This class is based around parsing "bugString", a free form user bug input
+ * that is in the format of a bug id, bug url, or a bug in the form of
+ * 'projectName:bugId'.
+ */
+ // TODO(zhangtiff): Add support for Buganizer bugs here.
+ var ChopsBugMixin = function(superClass) {
+ return class extends superClass {
+ constructor() {
+ super();
+ }
+
+ _computeBugId(bugString) {
+ return bugRe.test(bugString) ? bugIdRe.exec(bugString) : 'Unknown';
+ }
+
+ _computeBugProject(bugString) {
+ let cleanBug = bugString.replace(/http(s?):/i, "");
+ let projectSection = bugProjectUrlRe.exec(cleanBug) || bugProjectPairRe.exec(cleanBug);
+ return projectSection ? bugProjectNameRe.exec(projectSection)[0] : 'chromium';
+ }
+
+ _computeInvalidBug(bugId) {
+ return bugId == 'Unknown';
+ }
+ };
+ }
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-button.html
new file mode 100644
index 00000000000..63baef8babb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-button.html
@@ -0,0 +1,160 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-button">
+ <template>
+ <style>
+ :host {
+ background: hsla(0, 0%, 95%, 1);
+ margin: 0.25em 4px;
+ padding: 0.5em 16px;
+ cursor: pointer;
+ border-radius: 3px;
+ text-align: center;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ user-select: none;
+ transition: filter 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
+ font-family: Roboto, Noto, sans-serif;
+ }
+ :host([raised]) {
+ box-shadow: 0px 2px 8px -1px hsla(0, 0%, 0%, 0.5);
+ }
+ :host(:hover) {
+ filter: brightness(95%);
+ }
+ :host(:active), :host(.active) {
+ filter: brightness(115%);
+ }
+ :host([raised]:active), :host([raised].active) {
+ box-shadow: 0px 1px 8px -1px hsla(0, 0%, 0%, 0.5);
+ }
+ :host([disabled]),
+ :host([disabled]:hover) {
+ filter: grayscale(30%);
+ opacity: 0.4;
+ background: hsla(0, 0%, 87%, 1);
+ cursor: default;
+ pointer-events: none;
+ box-shadow: none;
+ }
+ </style>
+ <slot></slot>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-button>` displays a styled button component with a few niceties.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-button_demo.html
+ */
+ class ChopsButton extends Polymer.Element {
+ static get is() { return 'chops-button'; }
+
+ static get properties() {
+ return {
+ /** Whether the button is available for input or not. */
+ disabled: {
+ type: Boolean,
+ reflectToAttribute: true,
+ },
+ /**
+ * For accessibility. These are the keys that you can use to fire the
+ * onclick event for chops-button. The value is an Array of
+ * JavaScript key input codes, defaulting to space and enter keys.
+ */
+ inputKeys: {
+ type: Array,
+ value: [13, 32],
+ },
+ /**
+ * If true, the element currently has focus. Changed through focus
+ * and blur event listeners.
+ */
+ focused: {
+ type: Boolean,
+ value: false,
+ notify: true,
+ readOnly: true,
+ reflectToAttribute: true,
+ },
+ /** Whether the button should have a shadow or not. */
+ raised: {
+ type: Boolean,
+ value: false,
+ reflectToAttribute: true,
+ },
+ /** Used for accessibility to state this component is a button. **/
+ role: {
+ type: String,
+ value: 'button',
+ readOnly: true,
+ reflectToAttribute: true,
+ },
+ /** Causes the button to be focusable for accessbility. **/
+ tabindex: {
+ type: Number,
+ value: 0,
+ reflectToAttribute: true,
+ },
+ _boundKeypressHandler: {
+ type: Function,
+ value: function() {
+ return this._keypressHandler.bind(this);
+ },
+ },
+ _boundFocusBlurHandler: {
+ type: Function,
+ value: function() {
+ return this._focusBlurHandler.bind(this);
+ },
+ },
+ _debouncedRemoveActive: Object,
+ };
+ }
+
+ ready() {
+ super.ready();
+ this.addEventListener('focus', this._boundFocusBlurHandler, true);
+ this.addEventListener('blur', this._boundFocusBlurHandler, true);
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+ window.addEventListener('keypress', this._boundKeypressHandler, true);
+ }
+
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ window.removeEventListener('keypress', this._boundKeypressHandler,
+ true);
+ }
+
+ _keypressHandler(event) {
+ if (!this.focused) return;
+ let keyCode = event.keyCode;
+ if (this.inputKeys.includes(keyCode)) {
+ this.click();
+
+ // Trigger the animation for a button click.
+ this.classList.add('active');
+ this._debouncedRemoveActive = Polymer.Debouncer.debounce(
+ this._debouncedRemoveActive,
+ Polymer.Async.timeOut.after(400),
+ () => {
+ this.classList.remove('active');
+ }
+ );
+ }
+ }
+
+ _focusBlurHandler(event) {
+ this._setFocused(event.type === 'focus');
+ }
+ }
+ customElements.define(ChopsButton.is, ChopsButton);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-carousel.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-carousel.html
new file mode 100644
index 00000000000..0fb52d264e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-carousel.html
@@ -0,0 +1,215 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-carousel">
+ <template>
+ <style>
+ :host {
+ width: 100%;
+ max-width: 100%;
+ box-sizing: border-box;
+ --chops-carousel-slide-height: 256px;
+ --chops-carousel-slide-width: 400px;
+ }
+ .carousel-content {
+ width: 100%;
+ max-width: 100%;
+ padding: 0.5em 32px;
+ overflow-x: hidden;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ }
+ .carousel-nav {
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ width: 100%;
+ padding: 0.5em 16px;
+ box-sizing: border-box;
+ }
+ .carousel-nav-item {
+ border: 0;
+ border-radius: 50%;
+ width: 20px;
+ height: 20px;
+ margin: 0 8px;
+ background: hsl(227, 5%, 80%);
+ transition: box-shadow 0.5s ease-in-out, background 0.5s ease-in-out;
+ cursor: pointer;
+ }
+ .carousel-nav-item:hover,
+ .carousel-nav-item.focused {
+ background: hsl(227, 20%, 60%);
+ }
+ .carousel-nav-item.focused {
+ box-shadow: 0px 2px 8px -1px hsla(0, 0%, 0%, 0.3);
+ }
+ .img-wrapper {
+ width: var(--chops-carousel-slide-width);
+ height: var(--chops-carousel-slide-height);
+ overflow-y: hidden;
+ box-sizing: border-box;
+ transition: opacity 0.5s ease-in-out, box-shadow 0.5s linear;
+ opacity: 0.7;
+ cursor: pointer;
+ transform: scale(0.95, 0.95);
+ border: 1px solid hsl(0, 0%, 83%);
+ padding: 0.5em 8px;
+ margin: 0 8px;
+ background: hsl(0, 0%, 95%);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ }
+ .img-wrapper.focused {
+ border: 1px solid hsl(227, 20%, 75%);
+ opacity: 1;
+ transform: scale(1, 1);
+ flex-grow: 1;
+ }
+ .img-wrapper:hover {
+ box-shadow: 0px 2px 8px -1px hsla(0, 0%, 0%, 0.5);
+ opacity: 1;
+ }
+ </style>
+ <div id="carouselRoot" class="carousel-content">
+ <button id="prevImage" hidden$="[[!_showNav]]"
+ class="img-wrapper prev-image"
+ on-click="_focusPrevImage">
+ <img src$="[[_prevImage]]" />
+ </button>
+ <button
+ class="img-wrapper focused"
+ on-click="_focusedImageClicked">
+ <img src$="[[_focusedImage]]" />
+ </button>
+ <button id="nextImage" hidden$="[[!_showNav]]"
+ class="img-wrapper next-image"
+ on-click="_focusNextImage">
+ <img src$="[[_nextImage]]" />
+ </button>
+ </div>
+ <template is="dom-if" if="[[_showNav]]">
+ <div id="carouselNav" class="carousel-nav">
+ <template is="dom-repeat" items="[[images]]">
+ <button
+ class$="carousel-nav-item [[_computeFocusedClass(focusedIndex, index)]]"
+ data-index$="[[index]]"
+ on-click="_handleNavClick"></button>
+ </template>
+ </div>
+ </template>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-carousel>`
+ *
+ * This creates a carousel of images to browse through.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-carousel_demo.html
+ */
+ class ChopsCarousel extends Polymer.Element {
+ static get is() {
+ return 'chops-carousel';
+ }
+
+ static get properties() {
+ return {
+ /** Index of the currently focused image. */
+ focusedIndex: {
+ type: Number,
+ value: 0,
+ },
+ /**
+ * Function handler that gets fired when the user clicks the
+ * focused image. Useful for functions like displaying the image in a
+ * lightbox.
+ */
+ handleFocusedClick: Function,
+ /** Array of image urls to be displayed in the carousel. */
+ images: {
+ type: Array,
+ value: [],
+ observer: '_preloadImages',
+ },
+ _focusedImage: {
+ type: String,
+ computed: '_computeFocusedImage(images, focusedIndex)',
+ },
+ _showNav: {
+ type: Boolean,
+ computed: '_computeShowNav(images.length)',
+ },
+ _prevImage: {
+ type: String,
+ computed: '_computePrevImage(images, focusedIndex)',
+ },
+ _nextImage: {
+ type: String,
+ computed: '_computeNextImage(images, focusedIndex)',
+ },
+ };
+ }
+
+ _computeFocusedClass(focusedIndex, i) {
+ if (focusedIndex === i) {
+ return 'focused';
+ }
+ return '';
+ }
+
+ _computeFocusedImage(images, i) {
+ if (!images || i >= images.length || i < 0) return;
+ return images[i];
+ }
+
+ _computeNextImage(images, i) {
+ if (!images || i >= images.length || i < 0) return;
+ return images[(i + 1) % images.length];
+ }
+
+ _computePrevImage(images, i) {
+ if (!images || i >= images.length || i < 0) return;
+ return images[(i - 1 + images.length) % images.length];
+ }
+
+ _computeShowNav(len) {
+ return len > 1;
+ }
+
+ _focusedImageClicked(evt) {
+ if (this.handleFocusedClick) {
+ this.handleFocusedClick();
+ }
+ }
+
+ _focusNextImage() {
+ this.focusedIndex = (this.focusedIndex + 1) % this.images.length;
+ }
+
+ _focusPrevImage() {
+ const l = this.images.length;
+ this.focusedIndex = (this.focusedIndex - 1 + l) % l;
+ }
+
+ _handleNavClick(evt) {
+ this.focusedIndex = evt.target.dataset.index * 1;
+ }
+
+ _preloadImages(images) {
+ images.forEach((img) => {
+ let image = new Image();
+ image.src = img;
+ });
+ }
+ }
+ customElements.define(ChopsCarousel.is, ChopsCarousel);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-chip.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-chip.html
new file mode 100644
index 00000000000..18926baecb1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-chip.html
@@ -0,0 +1,162 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-icons/iron-icons.html">
+
+<dom-module id="chops-chip">
+ <template>
+ <style>
+ :host {
+ vertical-align: top;
+ font-family: 'Roboto', 'Noto', sans-serif;
+ font-size: 0.9em;
+ display: inline-flex;
+ align-items: center;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ border-radius: 15px;
+ padding: 0.25em 4px;
+ margin: 0.25em 2px;
+ background-color: hsl(0, 0%, 92%);
+ color: hsl(0, 0%, 13%);
+ /* Make sure chips with and without images are the same height. */
+ line-height: var(--chops-chip-img-size);
+ --chops-chip-img-size: 18px;
+ --chops-chip-remove-button-size: 15px;
+ }
+ img {
+ border-radius: 50%;
+ height: var(--chops-chip-img-size);
+ width: var(--chops-chip-img-size);
+ }
+ a {
+ color: hsl(0, 0%, 13%);
+ text-decoration: none;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ iron-icon {
+ cursor: pointer;
+ --iron-icon-height: var(--chops-chip-remove-button-size);
+ --iron-icon-width: var(--chops-chip-remove-button-size);
+ }
+ iron-icon:hover {
+ background-color: hsl(0, 0%, 78%);
+ border-radius: 50%;
+ }
+ .label {
+ padding: 0 4px;
+ }
+ </style>
+ <template is="dom-if" if="[[imageSrc]]">
+ <img
+ src$="[[imageSrc]]"
+ title$="[[_displayedLabel]]"
+ role="presentation"
+ aria-hidden="true"
+ />
+ </template>
+ <template is="dom-if" if="[[url]]">
+ <a href$="[[url]]" class="label">[[_displayedLabel]]</a>
+ </template>
+ <template is="dom-if" if="[[!url]]">
+ <span class="label">
+ [[_displayedLabel]]
+ </span>
+ </template>
+ <iron-icon
+ icon="clear"
+ hidden$="[[!removeable]]"
+ on-click="remove"
+ ></iron-icon>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-chip>` is an element used for displaying a general data chip.
+ *
+ * See https://material.io/design/components/chips.html
+ *
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-chip_demo.html
+ */
+ class ChopsChip extends Polymer.Element {
+ static get is() { return 'chops-chip'; }
+
+ static get properties() {
+ return {
+ /**
+ * The data value represented by the chip. We recommend making this
+ * value unique between chips in a set.
+ *
+ * @type String
+ */
+ value: {
+ type: String,
+ },
+ /**
+ * The text displayed for a given chip. Defaults to displaying value
+ * if no label is specified.
+ *
+ * @type String
+ */
+ label: {
+ type: String,
+ },
+ /**
+ * An optional url for a link to an image to be displayed on the chip.
+ *
+ * @type String
+ */
+ imageSrc: {
+ type: String,
+ value: '',
+ },
+ /**
+ * An optional value for the text in the chip to be linked to.
+ *
+ * @type String
+ */
+ url: {
+ type: String,
+ value: '',
+ },
+ /**
+ * If true, a 'remove' icon will be visible and fire 'remove' on click.
+ *
+ * @type Boolean
+ */
+ removeable: {
+ type: Boolean,
+ value: false,
+ },
+ _displayedLabel: {
+ type: String,
+ computed: '_computeDisplayedLabel(value, label)',
+ },
+ }
+ }
+
+ /** Fires 'remove-chip' event. */
+ remove(e) {
+ this.dispatchEvent(new CustomEvent('remove-chip', {
+ detail: {value: this.value}
+ }));
+ }
+
+ _computeDisplayedLabel(value, label) {
+ return label || value;
+ }
+
+ /**
+ * Fired when someone attempts to remove a chip.
+ *
+ * @event remove-chip
+ * @param {Object} value string containing the value for the chip.
+ */
+ }
+ customElements.define(ChopsChip.is, ChopsChip);
+ </script>
+ <dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-cl-link.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-cl-link.html
new file mode 100644
index 00000000000..5286c50726c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-cl-link.html
@@ -0,0 +1,53 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-cl-link">
+ <template>
+ <style>
+ :host {
+ font-family: 'Roboto', 'Noto', sans-serif;
+ }
+ </style>
+ <a href$="https://crrev.com/[[change]]">[[change]]</a>
+ (<a href$="mailto:[[ownerEmail]]">[[_userName]]</a>):
+ [[description]]
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-cl-link>` displays basic information of a cl with a
+ * link to the full details of the change
+ *
+ * Provide the change number, owner email, and description.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-cl-link_demo.html
+ */
+ class ChopsClLink extends Polymer.Element {
+ static get is() { return 'chops-cl-link'; }
+
+ static get properties() {
+ return {
+ /** The change number. */
+ change: String,
+ /** The owner's email. */
+ ownerEmail: String,
+ /** The change description. */
+ description: String,
+ _userName : {
+ type: String,
+ computed: '_computeUserName(ownerEmail)',
+ },
+ }
+ }
+
+ _computeUserName(email) {
+ let cutoff = email.indexOf('@');
+ return (cutoff < 0) ? 'Unkown' : email.substring(0, cutoff);
+ }
+
+ }
+ customElements.define(ChopsClLink.is, ChopsClLink);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-dialog.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-dialog.html
new file mode 100644
index 00000000000..a3ec993c968
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-dialog.html
@@ -0,0 +1,235 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-overlay-behavior/iron-focusables-helper.html">
+
+<dom-module id="chops-dialog">
+ <template>
+ <style>
+ :host {
+ position: fixed;
+ z-index: 9999;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+ background-color: rgba(0,0,0,0.4);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ :host(:not([opened])), [hidden] {
+ display: none;
+ visibility: hidden;
+ }
+ :host([close-on-outside-click]) {
+ cursor: pointer;
+ }
+ .dialog {
+ box-sizing: border-box;
+ background: white;
+ max-width: 90%;
+ max-height: 95%;
+ overflow: auto;
+ padding: 1em 16px;
+ cursor: default;
+ box-shadow: 0px 3px 20px 0px hsla(0, 0%, 0%, 0.4);
+
+ /*
+ * Would have really preferred to just have the dialog itself be the
+ * :host element so that users could style it more easily, but this
+ * causes issues with the backdrop, because there's not a good way to
+ * make a child element appear behind its parent without using wrappers.
+ */
+ @apply --chops-dialog-theme;
+ }
+ </style>
+ <div id="dialog" class="dialog" role="dialog">
+ <slot></slot>
+ </div>
+ </template>
+ <script>
+ (function(window) {
+ 'use strict';
+
+ const ESC_KEYCODE = 27;
+ const TAB_KEYCODE = 9;
+
+ /**
+ * `<chops-dialog>` displays a modal/dialog overlay.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-dialog_demo.html
+ */
+ class ChopsDialog extends Polymer.mixinBehaviors([Polymer.IronFocusablesHelper], Polymer.Element) {
+ static get is() { return 'chops-dialog'; }
+
+ static get properties() {
+ return {
+ /**
+ * Whether the dialog should currently be displayed or not.
+ */
+ opened: {
+ type: Boolean,
+ notify: true,
+ value: false,
+ reflectToAttribute: true,
+ observer: '_openedChanged',
+ },
+ /**
+ * A boolean that determines whether clicking outside of the dialog
+ * window should close it.
+ */
+ closeOnOutsideClick: {
+ type: Boolean,
+ value: true,
+ reflectToAttribute: true,
+ },
+ /**
+ * A function fired when the element tries to change its own opened
+ * state. This is useful if you want the dialog state managed outside
+ * of the dialog instead of with internal state. (ie: with Redux)
+ */
+ onOpenedChange: Function,
+ /**
+ * Allow people to exit the dialog using keyboard shortcuts. Defaults
+ * to the escape key.
+ */
+ exitKeys: {
+ type: Array,
+ value: [ESC_KEYCODE],
+ },
+ _boundKeydownHandler: {
+ type: Function,
+ value: function() {
+ return this._keydownHandler.bind(this);
+ },
+ },
+ _previousFocusedElement: Object,
+ }
+ }
+
+ ready() {
+ super.ready();
+ this.addEventListener('click', (evt) => {
+ if (!this.opened || !this.closeOnOutsideClick) return;
+
+ const hasDialog = evt.composedPath().find(
+ (node) => {
+ return node.classList && node.classList.contains('dialog');
+ }
+ );
+ if (hasDialog) return;
+
+ this.close();
+ });
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+ window.addEventListener('keydown', this._boundKeydownHandler, true);
+ }
+
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ window.removeEventListener('keydown', this._boundKeydownHandler,
+ true);
+ }
+
+ _keydownHandler(event) {
+ if (!this.opened) return;
+ let keyCode = event.keyCode;
+
+ // Handle closing hot keys.
+ if (this.exitKeys.includes(keyCode)) {
+ this.close();
+ }
+
+ // For accessibility, prevent tabbing outside of the dialog.
+ // Key code 9 is tab.
+ if (keyCode === TAB_KEYCODE) {
+ const tabbables = this.getTabbableNodes(this);
+ const active = this._getActiveElement();
+
+ if (!tabbables || !tabbables.length) {
+ event.preventDefault();
+ }
+
+ if (event.shiftKey) {
+ // backwards tab.
+ if (active === tabbables[0]) {
+ event.preventDefault();
+ tabbables[tabbables.length - 1].focus();
+ }
+ } else {
+ // forward tab.
+ if (active === tabbables[tabbables.length - 1]) {
+ event.preventDefault();
+ tabbables[0].focus();
+ }
+ }
+ }
+ }
+
+ close() {
+ if (this.onOpenedChange) {
+ this.onOpenedChange(false);
+ } else {
+ this.opened = false;
+ }
+ }
+
+ open() {
+ if (this.onOpenedChange) {
+ this.onOpenedChange(true);
+ } else {
+ this.opened = true;
+ }
+ }
+
+ toggle() {
+ this.opened = !this.opened;
+ }
+
+ _getActiveElement() {
+ // document.activeElement alone isn't sufficient to find the active
+ // element within shadow dom.
+ let active = document.activeElement || document.body;
+ while (active.root && Polymer.dom(active.root).activeElement) {
+ active = Polymer.dom(active.root).activeElement;
+ }
+ return active;
+ }
+
+ _openedChanged(opened) {
+ if (opened) {
+ // For accessibility, we want to ensure we remember the element that was
+ // focused before this dialog opened.
+ this._previousFocusedElement = this._getActiveElement();
+
+ // Focus the first element within the dialog when it's opened.
+ const tabbables = this.getTabbableNodes(this);
+ if (tabbables && tabbables.length) {
+ tabbables[0].focus();
+ } else if (this._previousFocusedElement) {
+ this._previousFocusedElement.blur();
+ }
+ } else {
+ if (this._previousFocusedElement) {
+ const element = this._previousFocusedElement;
+ setTimeout(function() {
+ // HACK. This is to prevent a possible accessibility bug where
+ // using a keypress to trigger a button that exits a modal causes
+ // the modal to immediately re-open because the button that
+ // originally opened the modal refocuses, and the keypress
+ // propagates.
+ element.focus();
+ }, 1);
+ }
+ }
+ }
+ }
+ customElements.define(ChopsDialog.is, ChopsDialog);
+ })(window);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-header.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-header.html
new file mode 100644
index 00000000000..0525f73d2f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-header.html
@@ -0,0 +1,133 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-header">
+ <template>
+ <style>
+ :host {
+ color: var(--chops-header-text-color);
+ box-sizing: border-box;
+ background: hsl(221, 67%, 92%);
+ font-size: 14px;
+ width: 100%;
+ height: 50px;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ z-index: 100;
+ }
+ a {
+ color: var(--chops-header-text-color);
+ text-decoration: none;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ #headerTitle {
+ font-size: 18px;
+ display: flex;
+ align-items: center;
+ @apply --chops-header-title-theme;
+ }
+ #headerTitle img {
+ height: 32px;
+ width: 32px;
+ font-size: 10px;
+ overflow: hidden;
+ margin: 0;
+ }
+ #headerTitle small {
+ font-size: 14px;
+ }
+ #headerTitleText {
+ display: flex;
+ align-items: baseline;
+ }
+ #headerTitleTextMain {
+ padding: 0 8px;
+ }
+ .header-section {
+ padding: 0.5em 16px;
+ display: flex;
+ align-items: center;
+ }
+ @media (max-width: 840px) {
+ .header-section {
+ font-size: 0.8em;
+ min-width: 10%;
+ text-align: left;
+ }
+ }
+ </style>
+ <div class="header-section">
+ <slot name="before-header"></slot>
+ <div id="headerTitle">
+ <template is="dom-if" if="[[logoSrc]]">
+ <a href="/">
+ <img src$="[[logoSrc]]" alt$="[[appTitle]] Logo" title$="[[appTitle]] Logo" />
+ </a>
+ </template>
+ <span id="headerTitleText">
+ <a id="headerTitleTextMain" href="/">
+ [[appTitle]]
+ </a>
+ <small>
+ <slot name="subheader"></slot>
+ </small>
+ </span>
+ </div>
+ </div>
+ <div class="header-section">
+ <slot></slot>
+ </div>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `chops-header` is a shared header element for ChOps frontends to use.
+ *
+ * This element contains two slots for clients to add content. The default
+ * slot holds content in the header section to the right of the title. And
+ * the 'subheader' slot holds content which appears next to the title.
+ *
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-header_demo.html
+ */
+ class ChopsHeader extends Polymer.Element {
+
+ static get is() {
+ return 'chops-header';
+ }
+
+ static get properties() {
+ return {
+ /* String for the title of the application. */
+ appTitle: {
+ type: String,
+ value: 'Chops App',
+ },
+ /* The home URL for the application. Defaults to '/'. */
+ homeUrl: {
+ type: String,
+ value: '/',
+ },
+ /* URL for the image location of the application's logo. No logo is
+ * shown if this is not specified. */
+ logoSrc: String,
+ // TODO(zhangtiff): Also make the :host element extend the "header"
+ // tag once browsers implement extending native elements with web
+ // components.
+ role: {
+ type: String,
+ reflectToAttribute: true,
+ },
+ };
+ }
+ }
+
+ customElements.define(ChopsHeader.is, ChopsHeader);
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-login.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-login.html
new file mode 100644
index 00000000000..a863e8aae31
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-login.html
@@ -0,0 +1,60 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-login">
+ <template>
+ <style>
+ :host {
+ --chops-login-link-color: inherit;
+ }
+ a, a:link {
+ color: var(--chops-login-link-color);
+ font-size: 0.75em;
+ text-decoration: none;
+ }
+ </style>
+ <template is="dom-if" if="[[!user]]">
+ <a href="[[loginUrl]]">LOGIN</a>
+ </template>
+ <template is="dom-if" if="[[user]]">
+ [[user]] (<a href="[[logoutUrl]]">LOGOUT</a>)
+ </template>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `chops-login` shows the login/logout links and current user, if provided.
+ *
+ * When the user is logged in provide, at least, the user and logoutURL properties.
+ * When there is no user logged in provide, at least the loginURL property.
+ * In either case, bother URLs may be provided but only one will be shown.
+ *
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-login_demo.html
+ */
+ class ChopsLogin extends Polymer.Element {
+ static get is() { return 'chops-login'; }
+
+ static get properties() {
+ return {
+ /** The login URL must be provided if no user is given. */
+ loginUrl: {
+ type: String,
+ },
+ /** The logout URL must be provided if a user is given. */
+ logoutUrl: {
+ type: String,
+ },
+ /** The logged in user. If this isn't given the login URL will be shown.*/
+ user: {
+ type: String,
+ value: '',
+ },
+ }
+ }
+ }
+ customElements.define(ChopsLogin.is, ChopsLogin);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin-aware.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin-aware.html
new file mode 100644
index 00000000000..a887c959f77
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin-aware.html
@@ -0,0 +1,67 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-signin-aware">
+ <template>
+ </template>
+</dom-module>
+<script>
+'use strict';
+// This component adapts chops-signin to an API that is more familiar to Polymer
+// components. Use this table to convert from google-signin-aware:
+
+// google-signin-aware chops-signin-aware
+// *events*
+// google-signin-aware-success user-update
+// google-signin-aware-signed-out user-update
+// signed-in-changed user-update
+// *properties*
+// signedIn signedIn
+// (getAuthResponse()) authHeaders
+// clientId (set window.AUTH_CLIENT_ID)
+// scopes (not supported)
+// height (not supported)
+// theme (not supported)
+// (user.getBasicProfile()) profile
+
+class ChopsSigninAware extends Polymer.Element {
+ static get is() {
+ return 'chops-signin-aware';
+ }
+
+ static get properties() {
+ return {
+ authHeaders: {type: Object, notify: true, readOnly: true},
+ profile: {type: Object, notify: true, readOnly: true},
+ signedIn: {type: Boolean, notify: true, readOnly: true},
+ };
+ }
+
+ connectedCallback() {
+ this.onUserUpdate_ = this.onUserUpdate_.bind(this);
+ window.addEventListener('user-update', this.onUserUpdate_);
+ this.updateProperties_();
+ }
+
+ disconnectedCallback() {
+ window.removeEventListener('user-update', this.onUserUpdate_);
+ }
+
+ updateProperties_() {
+ const self = this;
+ return window.getAuthorizationHeaders().then(function(headers) {
+ self._setAuthHeaders(headers);
+ self._setProfile(window.getUserProfileSync());
+ self._setSignedIn(!!self.profile);
+ });
+ }
+
+ onUserUpdate_() {
+ const self = this;
+ return this.updateProperties_().then(function() {
+ self.dispatchEvent(new CustomEvent('user-update'));
+ });
+ }
+}
+
+customElements.define(ChopsSigninAware.is, ChopsSigninAware);
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.html
new file mode 100644
index 00000000000..0a4f110c197
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.html
@@ -0,0 +1 @@
+<script src="./chops-signin.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.js
new file mode 100644
index 00000000000..affcc5ac625
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-signin.js
@@ -0,0 +1,175 @@
+'use strict';
+// chops-signin is a web component that manages signing into services using
+// client-side OAuth via gapi.auth2. chops-signin visually indicates whether the
+// user is signed in using either an icon or the user's profile picture. The
+// signin or signout flow is initiated when the user clicks on this component.
+// This component does not require Polymer, but if you are using Polymer, see
+// chops-signin-aware.
+//
+// Usage:
+// html:
+// <chops-signin></chops-signin>
+// js:
+// window.AUTH_CLIENT_ID = '...';
+// window.addEventListener('user-update', ...);
+// const headers = await window.getAuthorizationHeaders();
+//
+// TODO(benjhayden): Remove the namespace and export functions when all clients
+// import this as an ES6 module.
+// TODO(benjhayden): Use async/await when all clients that need to support IE
+// use a compiler like babel.
+(function() {
+ let resolveAuthInitializedPromise;
+ const authInitializedPromise = new Promise(function(resolve) {
+ resolveAuthInitializedPromise = resolve;
+ });
+
+ const callbackName = 'gapi' + Math.random();
+ const gapiScript = document.createElement('script');
+ gapiScript.src = 'https://apis.google.com/js/api.js?onload=' + callbackName;
+ window[callbackName] = function() {
+ gapi.load('auth2', onAuthLoaded);
+ delete window[callbackName];
+ };
+ document.head.appendChild(gapiScript);
+
+ function onAuthLoaded() {
+ if (!window.gapi || !gapi.auth2) return;
+ if (window.AUTH_CLIENT_ID === undefined) {
+ window.setTimeout(onAuthLoaded, 20);
+ return;
+ }
+ if (window.AUTH_CLIENT_ID === '') {
+ console.log('Not initializing gapi.auth2.');
+ return;
+ }
+ const auth = gapi.auth2.init({
+ client_id: window.AUTH_CLIENT_ID,
+ scope: 'email',
+ });
+ auth.currentUser.listen(function(user) {
+ window.dispatchEvent(new CustomEvent('user-update', {detail: {user}}));
+ });
+ auth.then(
+ function onFulfilled() {
+ resolveAuthInitializedPromise();
+ },
+ function onRejected(error) {
+ console.error(error);
+ }
+ );
+ }
+
+ const SVG_NS = 'http://www.w3.org/2000/svg';
+ const SIZE = 32;
+ const SIZE_PX = SIZE + 'px';
+
+ class ChopsSignin extends HTMLElement {
+ connectedCallback() {
+ this.style.cursor = 'pointer';
+ this.style.strokeWidth = 0;
+ this.style.width = SIZE_PX;
+ this.style.height = SIZE_PX;
+ this.img_ = document.createElement('img');
+ this.img_.style.height = SIZE_PX;
+ this.img_.style.borderRadius = '50%';
+ this.img_.style.overflow = 'hidden';
+ this.render_();
+ this.addEventListener('click', this.onClick_.bind(this));
+ window.addEventListener('user-update', this.onUserUpdate_.bind(this));
+ }
+
+ render_() {
+ while (this.children.length) this.removeChild(this.children[0]);
+ const profile = getUserProfileSync();
+ if (!profile) {
+ this.title = 'Signin with Google';
+ this.appendChild(this.icon_);
+ this.style.fill = 'red';
+ return;
+ }
+ this.title = 'Signout of ' + profile.getEmail();
+ this.img_.src = profile.getImageUrl();
+ if (this.img_.src) {
+ this.appendChild(this.img_);
+ return;
+ }
+ this.appendChild(this.icon_);
+ this.style.fill = 'green';
+ }
+
+ get icon_() {
+ if (this.icon__) return this.icon__;
+ this.icon__ = document.createElementNS(SVG_NS, 'svg');
+ this.icon__.setAttribute('width', SIZE_PX);
+ this.icon__.setAttribute('height', SIZE_PX);
+ this.icon__.setAttribute('viewBox', '0 0 24 24');
+ const path = document.createElementNS(SVG_NS, 'path');
+ // iron-icons account-circle
+ path.setAttributeNS(null, 'd', `
+ M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0
+ 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5
+ 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29
+ 1.94-3.5 3.22-6 3.22z
+ `);
+ this.icon__.appendChild(path);
+ return this.icon__;
+ }
+
+ onUserUpdate_() {
+ this.render_();
+ }
+
+ onClick_() {
+ return authInitializedPromise.then(function() {
+ const auth = gapi.auth2.getAuthInstance();
+ if (auth.currentUser.get().isSignedIn()) {
+ return auth.signOut();
+ } else {
+ return auth.signIn();
+ }
+ });
+ }
+ }
+
+ customElements.define('chops-signin', ChopsSignin);
+
+ window.getAuthInstanceAsync = function() {
+ return authInitializedPromise.then(function() {
+ return gapi.auth2.getAuthInstance();
+ });
+ };
+
+ window.getUserProfileSync = function() {
+ if (!window.gapi || !gapi.auth2) return undefined;
+ const user = gapi.auth2.getAuthInstance().currentUser.get();
+ if (!user.isSignedIn()) return undefined;
+ return user.getBasicProfile();
+ };
+
+ // This async version waits for gapi.auth2 to finish initializing before
+ // getting the profile.
+ window.getUserProfileAsync = function() {
+ return authInitializedPromise.then(getUserProfileSync);
+ };
+
+ window.getAuthorizationHeaders = function() {
+ return window.getAuthInstanceAsync().then(function(auth) {
+ if (!auth) return undefined;
+ const user = auth.currentUser.get();
+ const response = user.getAuthResponse();
+ if (response.expires_at === undefined) {
+ // The user is not signed in.
+ return undefined;
+ }
+ if (response.expires_at < new Date()) {
+ // The token has expired, so reload it.
+ return user.reloadAuthResponse();
+ }
+ return response;
+ }).then(function(response) {
+ if (!response) return {};
+ return {Authorization: response.token_type + ' ' + response.access_token};
+ });
+ };
+})();
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-styles.css b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-styles.css
new file mode 100644
index 00000000000..54bca4c407f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-styles.css
@@ -0,0 +1,3 @@
+:root {
+ font-family: 'Roboto', 'Noto', sans-serif;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-timestamp.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-timestamp.html
new file mode 100644
index 00000000000..1061e94fad9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-timestamp.html
@@ -0,0 +1,87 @@
+<link rel="import" href="../polymer/polymer.html">
+<script src="../moment/min/moment.min.js"></script>
+<script src="../moment-timezone/builds/moment-timezone-with-data.min.js"></script>
+
+<dom-module id="chops-timestamp">
+ <template>
+ <style>
+ </style>
+ <template is="dom-if" if="[[!short]]">
+ [[_formattedDate]] ([[_computeRelativeTime(_date)]])
+ </template>
+ <template is="dom-if" if="[[short]]" title="[[_formattedDate]]">
+ [[_computeRelativeTime(_date)]]
+ </template>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-timestamp>` displays a formatted time string in PDT and the relative time.
+ *
+ * This element shows a time in a human readable form.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-timestamp_demo.html
+ */
+ class ChopsTimestamp extends Polymer.Element {
+ static get is() { return 'chops-timestamp'; }
+
+ static get properties() {
+ return {
+ /** The data for the time which can be in any format readable by
+ * Date.parse.
+ */
+ timestamp: String,
+ /** When true, a shorter version of the date will be displayed. */
+ short: {
+ type: Boolean,
+ value: false,
+ },
+ /** The format of the date. */
+ dateFormat: {
+ type: String,
+ value: "ddd, D MMM YYYY, h:mm a z",
+ },
+ /** The moment object, which is stored in UTC, to be processed. */
+ _date: {
+ type: Object,
+ value: () => (moment()),
+ computed: '_computeDate(timestamp)',
+ },
+ /** The formatted date. */
+ _formattedDate: {
+ type: String,
+ computed: '_computeDisplayedTime(_date, dateFormat)',
+ },
+ }
+ }
+
+ _computeDate(timestamp) {
+ // Check if timestamp is unix time first.
+ let date = Number.parseInt(timestamp);
+ if (Number.isNaN(date)) {
+ // Date.parse returns milliseconds since epoch but we want seconds.
+ date = Date.parse(timestamp) / 1000;
+ if (Number.isNaN(date)) {
+ // Default to now if all else fails.
+ date = (new Date()).getTime() / 1000;
+ }
+ }
+
+ return moment.unix(date).tz('America/Los_Angeles');
+ }
+
+ _computeDisplayedTime(date, format) {
+ return date.format(format);
+ }
+
+ _computeRelativeTime(date) {
+ return date.fromNow();
+ }
+
+ }
+ customElements.define(ChopsTimestamp.is, ChopsTimestamp);
+ </script>
+<dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-tree-status.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-tree-status.html
new file mode 100644
index 00000000000..03345719555
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-tree-status.html
@@ -0,0 +1,143 @@
+<link rel="import" href="../polymer/polymer.html">
+
+<dom-module id="chops-tree-status">
+ <template>
+ <style>
+ .closed {
+ background-color: hsl(0, 70%, 71%);
+ }
+ .maintenance {
+ background-color: hsl(300, 100%, 75%);
+ }
+ .open {
+ background-color: hsl(98, 67%, 62%);
+ }
+ .throttled {
+ background-color: hsl(59, 100%, 71%);
+ }
+ .tree-banner {
+ box-sizing: border-box;
+ color: #222;
+ margin: 0.5em auto;
+ padding: 0.5em 8px;
+ width: 100%;
+ }
+ </style>
+ <div class="error" hidden$="[[!_hasError]]">
+ Error fetching tree status from <a href$="[[statusUrl]]" target="_blank">[[statusUrl]]</a>
+ </div>
+ <div class$="treeStatus [[_status]]" hidden$="[[_hasError]]">
+ Tree status: [[_message]] by
+ <a href$="mailto:[[_email]]">[[_username]]</a>
+ on [[_time]]
+ (<a href$="[[statusUrl]]" target="_blank">More</a>)
+ </div>
+ </template>
+ <script>
+ 'use strict';
+ /**
+ * `<chops-tree-status>` is an element used for displaying the tree status
+ * available via the statusUrl.
+ *
+ * Provide a statusUrl like 'https://infra-status.appspot.com/' or
+ * 'http://chromium-status.appspot.com/'
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-tree-status_demo.html
+ */
+ class ChopsTreeStatus extends Polymer.Element {
+ static get is() { return 'chops-tree-status'; }
+
+ static get properties() {
+ return {
+ /**
+ * The url where the tree's status can be found.
+ *
+ * @type String
+ */
+ statusUrl: {
+ type: String,
+ value: '',
+ },
+ /**
+ * The error data json. This property should only be passed in if
+ * there was an error getting the status.
+ *
+ * @type Object{error}
+ */
+ statusErrorJson: {
+ type: Object,
+ value: () => { return {}; },
+ },
+ /**
+ * The tree status data json. This can be taken directly from the
+ * 'current?format=json' page and passed directly to <chops-tree-status>
+ *
+ * @type Object{username, generatl_status, date, message}
+ */
+ statusJson: {
+ type: Object,
+ value: () => {
+ return {message: 'Unknown', date: 'Unknown', general_state: '', username: ''};
+ },
+ },
+ _hasError: {
+ type: Boolean,
+ computed: '_computeHasError(statusErrorJson)',
+ value: false,
+ },
+
+ // Processed JSON data
+ _email: {
+ type: String,
+ computed: '_computeEmail(statusJson)',
+ },
+ _message: {
+ type: String,
+ computed: '_computeMessage(statusJson)',
+ },
+ _status: {
+ type: String,
+ computed: '_computeStatus(statusJson)',
+ },
+ _time: {
+ type: String,
+ computed: '_computeTime(statusJson)',
+ },
+ _username: {
+ type: String,
+ computed: '_computeUsername(_email)',
+ },
+ };
+ }
+
+ _computeHasError(errorJson) {
+ return !!errorJson && Object.keys(errorJson).length > 0;
+ }
+
+ _computeEmail(json) {
+ return json ? json.username : '';
+ }
+
+ _computeStatus(json) {
+ return json ? json.general_state : ''
+ }
+
+ _computeMessage(json) {
+ return json ? json.message : 'Unknown';
+ }
+
+ _computeTime(json) {
+ return json ? `${json.date.split(".")[0]} GMT`: 'Unknown';
+ }
+
+ _computeUsername(email) {
+ let cutoff = email.indexOf('@');
+ return (cutoff < 0) ? 'Unknown' : email.substring(0, cutoff);
+ }
+
+ }
+ customElements.define(ChopsTreeStatus.is, ChopsTreeStatus);
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-dropdown.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-dropdown.html
new file mode 100644
index 00000000000..15503df9352
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-dropdown.html
@@ -0,0 +1,89 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-item/paper-item.html">
+
+<dom-module id="chops-user-dropdown">
+ <template>
+ <style>
+ .resize {
+ display: block;
+ overflow: auto;
+ }
+ .hidden {
+ display: none !important;
+ }
+ paper-item:hover {
+ background: grey;
+ }
+ </style>
+ <div id="dropdown" class="resize">
+ <template is="dom-repeat" items="[[suggestions]]">
+ <paper-item id$="[[index]]" on-click="_userSelected">[[_computeUserDisplay(item)]]</paper-item>
+ </template>
+ </div>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `chops-user-dropdown` is a dropdown element displaying a list of user ids.
+ *
+ * When using this, provide an array of suggestions that should be displayed
+ * This element should, idealy, be used with chops-user-input
+ *
+ * @customElement
+ * @polymer
+ *
+ */
+ class UserDropdown extends Polymer.Element {
+ static get is() { return 'chops-user-dropdown'; }
+
+ static get properties() {
+ return {
+ /**
+ * The array of users that should be listed.
+ *
+ * @type Array<Object{userId, email(opt), profileLink(opt), fullName(opt)}>
+ */
+ suggestions: {
+ type: Array,
+ value: () => {return []; },
+ },
+ }
+ }
+
+ ready() {
+ super.ready();
+ this.$.dropdown.classList.add('hidden');
+ }
+
+ /** Opens the dropdown element. */
+ open() {
+ this.$.dropdown.classList.remove('hidden');
+ }
+
+ /** Closes the dropdown element. */
+ close() {
+ this.$.dropdown.classList.add('hidden');
+ }
+
+ /** Gets the selected user information and fires 'user-selected'. */
+ _userSelected(e) {
+ let user = this.suggestions[e.currentTarget.id];
+ this.dispatchEvent(new CustomEvent('user-selected', {detail: {selectedUser: user}}));
+ }
+
+ _computeUserDisplay(user) {
+ return user.email ? `${user.userId} <${user.email}> ` : user.userId;
+ }
+
+ /**
+ * Fired when a user has been selected.
+ *
+ * @event user-selected
+ * @param {string} selectedUser username of the selected user.
+ */
+
+ }
+ customElements.define(UserDropdown.is, UserDropdown);
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-id.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-id.html
new file mode 100644
index 00000000000..46a2d08e656
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-id.html
@@ -0,0 +1,127 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-icons/iron-icons.html">
+
+<dom-module id="chops-user-id">
+ <template>
+ <style>
+ a {
+ color: black;
+ text-decoration: none;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ iron-icon {
+ top: -1px;
+ --iron-icon-height: 10px;
+ --iron-icon-width: 10px;
+ }
+ iron-icon:hover {
+ background-color: hsl(0, 0%, 81%);
+ }
+ .user-label {
+ font-size: .81em;
+ border-radius: 15px;
+ padding: 2px 8px;
+ background-color: hsl(0, 0%, 88%);
+ }
+ </style>
+ <span class="user-label">
+ <template is="dom-if" if="[[profileLink]]">
+ <a href$="[[profileLink]]">[[userId]]</a>
+ </template>
+ <template is="dom-if" if="[[!profileLink]]">
+ [[userId]]
+ </template>
+ <iron-icon
+ icon="clear"
+ hidden$="[[!removeable]]"
+ on-click="_removeUser"
+ title="[[fullName]] [[email]]"></iron-icon>
+ </span>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * `<chops-user-id>` is an element used for displaying users.
+ *
+ * The only required attribute is userId. If the profile-link is provided
+ * the userId text will be displayed as a link. If an email and/or fullName
+ * are provided they will be visible when hovering over the element.
+ *
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/chops-user-id_demo.html
+ */
+ class ChopsUserId extends Polymer.Element {
+ static get is() { return 'chops-user-id'; }
+
+ static get properties() {
+ return {
+ /**
+ * The user's id to be displayed. Required.
+ *
+ * @type String
+ */
+ userId: {
+ type: String,
+ },
+ /**
+ * The user's email. Optional.
+ *
+ * @type String
+ */
+ email: {
+ type: String,
+ },
+ /**
+ * The full name of the user. Optional.
+ *
+ * @type String
+ */
+ fullName: {
+ type: String,
+ },
+ /**
+ * The link to the user's profile page. Optional.
+ *
+ * @type String
+ */
+ profileLink: {
+ type: String,
+ value: "",
+ },
+ /**
+ * If true, a 'remove' icon will be visible and fire 'remove-user' on click.
+ *
+ * @type Boolean
+ */
+ removeable: {
+ type: Boolean,
+ value: false,
+ },
+ }
+ }
+
+ /** Gets the user information and fires 'user-removed'. */
+ _removeUser(e) {
+ let user = {userId: this.userId};
+ if (this.email) { user.email = this.email; }
+ if (this.fullName) { user.fullName = this.fullName; }
+ if (this.profileLink) { user.profileLink = this.profileLink; }
+ this.dispatchEvent(new CustomEvent('remove-user', {detail: {removedUser: user}}));
+ }
+
+ /**
+ * Fired when a user wants to remove this user.
+ *
+ * @event remove-user
+ * @param {Object} removedUser object containing all of the user's given information.
+ */
+
+ }
+ customElements.define(ChopsUserId.is, ChopsUserId);
+ </script>
+ <dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-input.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-input.html
new file mode 100644
index 00000000000..70b033bf74e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/chops-user-input.html
@@ -0,0 +1,177 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="chops-user-dropdown.html">
+<link rel="import" href="chops-user-id.html">
+<link rel="import" href="../paper-input/paper-input.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+
+<dom-module id="chops-user-input">
+ <template>
+ <style>
+ </style>
+ <paper-input id="input" label="[[label]]" value="{{inputValue}}" on-input="_inputChanged">
+ <template is="dom-repeat" items="[[selectedUsers]]">
+ <chops-user-id
+ slot="prefix"
+ user-id="[[item.userId]]"
+ email="[[item.email]]"
+ profile-link="[[item.profileLink]]"
+ full-name="[[item.fullName]]"
+ on-remove-user="_removeUser"
+ removeable>
+ </chops-user-id>
+ </template>
+ </paper-input>
+ <chops-user-dropdown id="dropdown" on-user-selected="_saveUser" suggestions="[[suggestions]]">
+ </chops-user-dropdown>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ *
+ * `<chops-user-input>` as an input element for choosing users with
+ * dropdown suggestions and autocomplete.
+ *
+ * It is up to the developer using this element to provide and update
+ * the users listed in the `suggestions` property. The properties,
+ * `inputValue` and `selectedUsers` are available for two-way binding
+ * for this purpose.
+ *
+ * customElement
+ * @polymer
+ * @demo /demo/chops-user-input_demo.html
+ *
+ */
+ class ChopsUserInput extends Polymer.mixinBehaviors(
+ [Polymer.IronControlState], Polymer.Element) {
+ static get is() { return 'chops-user-input'; }
+
+ static get properties() {
+ return {
+ /**
+ * The current input value.
+ *
+ * @type String
+ */
+ inputValue: {
+ type: String,
+ value: '',
+ notify: true,
+ },
+ /**
+ * The display label.
+ *
+ * @type String
+ */
+ label: {
+ type: String,
+ value: 'place holder',
+ },
+ /**
+ * List of suggestions displayed in the dropdown.
+ *
+ * @type Array<Object{userId, email(opt), profileLink(opt), fullName(opt)}>
+ */
+ suggestions: {
+ type: Array,
+ value: () => { return []; },
+ notify: true,
+ },
+ /**
+ * List of users selected, so far.
+ *
+ * @type Array<Object{userId, email(opt), profileLink(opt), fullName(opt)}>
+ */
+ selectedUsers: {
+ type: Array,
+ value: () => { return []; },
+ notify: true,
+ },
+ /**
+ * If true, multiple users can be selected.
+ *
+ * @type Boolean
+ */
+ multiple: {
+ type: Boolean,
+ value: false,
+ },
+ /**
+ * If true, additional users cannot be selected.
+ *
+ * @type Boolean
+ */
+ _inputDisabled: {
+ type: Boolean,
+ value: false,
+ },
+ }
+ }
+
+ static get observers() {
+ return [
+ '_updateInputDisabled(selectedUsers.length)'
+ ]
+ }
+
+ ready() {
+ super.ready();
+ this.addEventListener('focused-changed', e => this._toggleDropdown(e));
+ }
+
+ /** Updates inputDisabled. */
+ _updateInputDisabled(length) {
+ this._inputDisabled = Boolean(!this.multiple && length);
+ }
+
+ /** Toggles the visibility of the dropdown element. */
+ _toggleDropdown(e) {
+ if (!this._inputDisabled) {
+ if (!this.focused) {
+ this.$.dropdown.close();
+ } else {
+ this.$.dropdown.open();
+ }
+ }
+ }
+
+ /**
+ * Pushes a newly selected user to the selectedUser property
+ *
+ * @param {Event} e event that triggered the function with selectedUser
+ * in the detail{}.
+ */
+ _saveUser(e) {
+ this.push('selectedUsers', e.detail.selectedUser);
+ this.$.dropdown.close();
+ this.inputValue = '';
+ this.dispatchEvent(
+ new CustomEvent('user-selected', {detail: e.detail}));
+ }
+
+ /**
+ * Removes a selected user from the selectedUser property.
+ *
+ * @param {Event} e event that triggered the function with removedUser
+ * in the detail{}.
+ */
+ _removeUser(e) {
+ let userId = e.detail.removedUser.userId;
+ let index = -1;
+ this.selectedUsers.forEach((user, i) => {
+ if (user.userId === userId) {
+ index = i;
+ }
+ });
+ if (index != -1) {
+ this.splice('selectedUsers', index, 1);
+ }
+ }
+
+ _inputChanged(e) {
+ this.dispatchEvent(new CustomEvent('input', {detail: e.detail}));
+ }
+ }
+ customElements.define(ChopsUserInput.is, ChopsUserInput);
+ </script>
+</dom-moduel>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-input_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-input_demo.html
new file mode 100644
index 00000000000..b0eaa6c7c27
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-input_demo.html
@@ -0,0 +1,9 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-bug-input.html">
+
+<demo-snippet>
+ <template>
+ <chops-bug-input></chops-bug-input>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-link_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-link_demo.html
new file mode 100644
index 00000000000..67144e55857
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-bug-link_demo.html
@@ -0,0 +1,12 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-bug-link.html">
+
+<demo-snippet>
+ <template>
+ <chops-bug-link bug="https://bugs.chromium.org/p/monorail/issues/detail?id=1347#c3"></chops-bug-link>
+ <chops-bug-link bug="crbug/761347" short description="Some long bug description" pri="0" status="Untriaged"></chops-bug-link>
+ <chops-bug-link bug="crbug.com/761347" pri="2" description="Some long bug description"></chops-bug-link>
+ <chops-bug-link bug="gerrit:1347" pri="2" description="problem in gerrit"></chops-bug-link>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-button_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-button_demo.html
new file mode 100644
index 00000000000..ad41f19fcd2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-button_demo.html
@@ -0,0 +1,83 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-button.html">
+
+<demo-snippet>
+ <template>
+ <style>
+ .blue {
+ background-color: hsla(207, 90%, 54%, 1);
+ color: hsla(0, 0%, 100%, 1);
+ }
+ .green {
+ background-color: hsla(122, 39%, 49%, 1);
+ color: hsla(0, 0%, 100%, 1);
+ }
+ .red {
+ background-color: hsla(4, 90%, 58%, 1);
+ color: hsla(0, 0%, 100%, 1);
+ }
+ </style>
+ <chops-button onclick="console.log('You clicked a basic button!');">Basic Button</chops-button>
+ <chops-button raised>Raised Button</chops-button>
+ <chops-button disabled>Disabled Button</chops-button>
+ <chops-button class="blue">Blue</chops-button>
+ <chops-button class="blue" raised>Raised Blue</chops-button>
+ <chops-button class="blue" disabled>Disabled Blue</chops-button>
+ <chops-button class="green" raised>Green</chops-button>
+ <chops-button class="red" raised>Warning!</chops-button>
+ </template>
+</demo-snippet>
+
+<h2>Styling tips for buttons</h2>
+<p>
+ Use color on your buttons to create hierarchy. Buttons with bright or
+ contrasting colors stand out more than plain buttons, so it's often a good
+ idea to reserve certain buttons colors for the primary actions your users use.
+ On the flipside, if you want to de-emphasize a button, you can make the
+ background color the same as your app's background color.
+</p>
+<demo-snippet>
+ <template>
+ <style>
+ .primary {
+ background-color: hsla(207, 90%, 54%, 1);
+ color: hsla(0, 0%, 100%, 1);
+ }
+ .tertiary {
+ background: hsla(0, 0%, 100%, 1);
+ }
+ </style>
+ <chops-button class="primary">Primary Action</chops-button>
+ <chops-button class="secondary">Secondary Action 1</chops-button>
+ <chops-button class="secondary">Secondary Action 2</chops-button>
+ <chops-button class="tertiary">Tertiary Action</chops-button>
+ </template>
+</demo-snippet>
+
+<p>
+ Consider adding a subtle text-shadow to your buttons if you are using white
+ text against a color background. This can help make the text on your buttons
+ "pop" more.
+</p>
+<demo-snippet>
+ <template>
+ <style>
+ .blue {
+ background-color: hsla(207, 90%, 54%, 1);
+ color: hsla(0, 0%, 100%, 1);
+ }
+ .green {
+ background-color: hsla(122, 39%, 49%, 1);
+ color: hsla(0, 0%, 100%, 1);
+ }
+ .text-shadow {
+ text-shadow: 1px 1px 3px hsla(0, 0%, 0%, 0.25);
+ }
+ </style>
+ <chops-button class="blue" raised>Raised Blue Button</chops-button>
+ <chops-button class="blue text-shadow" raised>Subtle Text Shadow</chops-button>
+ <chops-button class="green" raised>Raised Green Button</chops-button>
+ <chops-button class="green text-shadow" raised>Subtle Text Shadow</chops-button>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-carousel_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-carousel_demo.html
new file mode 100644
index 00000000000..ae31863fb4a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-carousel_demo.html
@@ -0,0 +1,19 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-carousel.html">
+
+Example of chops-carousel with some images.
+
+<demo-snippet>
+ <template>
+ <chops-carousel images='["/bower_components/chopsui/img/logo.png", "/bower_components/chopsui/img/img1.png", "/bower_components/chopsui/img/img2.png"]'></chops-carousel>
+ </template>
+</demo-snippet>
+
+Example of chops-carousel with just one image.
+
+<demo-snippet>
+ <template>
+ <chops-carousel images='["../img/logo.png"]'></chops-carousel>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-chip_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-chip_demo.html
new file mode 100644
index 00000000000..0ff458b7459
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-chip_demo.html
@@ -0,0 +1,43 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-chip.html">
+
+<demo-snippet>
+ <template>
+ <chops-chip value="chip"></chops-chip>
+ <chops-chip value="chip2" label="A charming chip"></chops-chip>
+ <chops-chip value="chip3" label="A linked chip" url="https://www.google.com"></chops-chip>
+ <chops-chip value="chip4" label="Chip with an image" image-src="../img/logo.png"></chops-chip>
+ </template>
+</demo-snippet>
+
+<h2>Handling remove events</h2>
+<p>
+ The parent for a given chip is responsible for figuring out what to do when
+ the 'remove-chip' event is fired.
+</p>
+<demo-snippet>
+ <template>
+ <chops-chip id="removeable1"
+ value="chip1"
+ label="A removeable chip"
+ removeable></chops-chip>
+ <chops-chip id="removeable2"
+ value="chip2"
+ label="I have an image"
+ image-src="../img/logo.png"
+ removeable></chops-chip>
+ <chops-chip id="removeable3"
+ value="chip3"
+ label="Delete me"
+ removeable></chops-chip>
+ <script>
+ const removeHandler = (evt) => {
+ evt.target.remove();
+ }
+ removeable1.addEventListener('remove-chip', removeHandler);
+ removeable2.addEventListener('remove-chip', removeHandler);
+ removeable3.addEventListener('remove-chip', removeHandler);
+ </script>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-cl-link_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-cl-link_demo.html
new file mode 100644
index 00000000000..e1596d5ef33
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-cl-link_demo.html
@@ -0,0 +1,9 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-cl-link.html">
+
+<demo-snippet>
+ <template>
+ <chops-cl-link change="6f1faebd" owner-email="avi@chromium.org" description="Added something cool"></chops-cl-link>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-dialog_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-dialog_demo.html
new file mode 100644
index 00000000000..7ddc463d781
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-dialog_demo.html
@@ -0,0 +1,51 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-button.html">
+<link rel="import" href="../chops-dialog.html">
+
+<demo-snippet>
+ <chops-button onclick="dialog.open()">Open dialog</chops-button>
+ <chops-button onclick="tabDialog.open()">Dialog with tabbable children</chops-button>
+ <template>
+ <chops-dialog id="dialog">
+ <h1>Test dialog</h1>
+ <p>
+ Here is a test dialog.
+ </p>
+ </chops-dialog>
+ <chops-dialog id="tabDialog">
+ <h1>Tabbable children dialog</h1>
+ <p>
+ To see how chops-dialog handles tabbing, try tabbing
+ through the elements in this dialog.
+ </p>
+ <chops-button>Button 1</chops-button>
+ <chops-button>Button 2</chops-button>
+ <a href="#">A link</a>
+ </chops-dialog>
+ </template>
+</demo-snippet>
+<demo-snippet>
+ <h2>Accessibility notes</h2>
+ <p>
+ Please consider <a href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_dialog_role">
+ best practices for accessible dialogs
+ </a> when using chops-dialog.
+ </p>
+ <p>
+ While chops-dialog sets dialogs to role="dialog"
+ by default, it is up to you to set the aria-labelledby and aria-describedby
+ attributes when using chops-dialog. chops-dialog doesn't set these
+ attributes by default because we try to avoid making assumptions about the
+ shape of the markup in your dialog.
+ </p>
+ <chops-button onclick="ariaDialog.open()">Open dialog with aria-labelledby and aria-describedby</chops-button>
+ <template>
+ <chops-dialog id="ariaDialog" aria-labelledby="dialogTitle" aria-describedby="dialogDescription">
+ <h1 id="dialogTitle">Test dialog</h1>
+ <p id="dialogDescription">
+ Here is a description for a dialog.
+ </p>
+ </chops-dialog>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-header_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-header_demo.html
new file mode 100644
index 00000000000..2d949aa9d9c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-header_demo.html
@@ -0,0 +1,25 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-header.html">
+<link rel="import" href="../chops-login.html">
+
+<link rel="stylesheet" type="text/css" href="../chops-styles.css">
+
+Example of chops-header without any content in slots
+
+<demo-snippet>
+ <template>
+ <chops-header app-title="Demo" logo-src="../img/logo.png"></chops-header>
+ </template>
+</demo-snippet>
+
+Example of chops-header using slots and chops-login
+
+<demo-snippet>
+ <template>
+ <chops-header app-title="Demo" logo-src="../img/logo.png">
+ <span slot="subheader">&gt; <a href="#">Breadcrumbs</a></span>
+ <chops-login login-url="https://www.google.com/" logout-url="https://store.google.com/" user="jojwang@chromium.org"></chops-login>
+ </chops-header>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-login_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-login_demo.html
new file mode 100644
index 00000000000..c451fcac682
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-login_demo.html
@@ -0,0 +1,19 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-login.html">
+
+Example of chops-login with no current user specified
+
+<demo-snippet>
+ <template>
+ <chops-login login-url="https://www.google.com/" logout-url="https://store.google.com/"></chops-login>
+ </template>
+</demo-snippet>
+
+Example of chops-login with a current user specified
+
+<demo-snippet>
+ <template>
+ <chops-login login-url="https://www.google.com/" logout-url="https://store.google.com/" user="jojwang@chromium.org"></chops-login>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-timestamp_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-timestamp_demo.html
new file mode 100644
index 00000000000..542a5f39bfa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-timestamp_demo.html
@@ -0,0 +1,29 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-timestamp.html">
+
+<demo-snippet>
+ <template>
+ <script>
+ // Set first chops-timestamp element properties.
+ let date = new Date();
+ let ts1 = document.getElementById('js-ts1');
+ ts1.date = date;
+
+ // Set second chops-timestamp element properties.
+ let date2 = date;
+ date2.setDate(date2.getDate() - 3);
+ let ts2 = document.getElementById('js-ts2')
+ ts2.date = date2;
+ ts2.dateFormat = 'D MMM YYYY';
+
+ // Set second chops-timestamp element properties.
+ document.getElementById('js-ts3').date = date;
+ </script>
+ <chops-timestamp id="js-ts1"></chops-timestamp>
+ <br>
+ <chops-timestamp id="js-ts2"></chops-timestamp>
+ <br>
+ <chops-timestamp id="js-ts3" short></chops-timestamp>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-tree-status_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-tree-status_demo.html
new file mode 100644
index 00000000000..4386a7b61f0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-tree-status_demo.html
@@ -0,0 +1,38 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-tree-status.html">
+
+<demo-snippet>
+ <template>
+ <script>
+ let closedStatusJson = {
+ 'username': 'nobody@chromium.org',
+ 'general_state': 'closed',
+ 'date': '2017-08-28 18:29:00.267230',
+ 'message': 'whoopsie',
+ }
+ let closedTree = document.getElementById('closed-tree');
+ closedTree.statusJson = closedStatusJson;
+ closedTree.statusUrl = 'http://chromium-status.appspot.com/';
+
+ let openStatusJson = {
+ 'username': 'nobody@chromium.org',
+ 'general_state': 'open',
+ 'date': '2017-08-28 18:29:00.267230',
+ 'message': 'chill',
+ }
+ let openTree = document.getElementById('open-tree');
+ openTree.statusJson = openStatusJson;
+ openTree.statusUrl = 'https://infra-status.appspot.com/';
+
+ let errorTree = document.getElementById('error-tree');
+ errorTree.statusErrorJson = {error: 'Failure!'};
+ errorTree.statusUrl = 'https://infra-status.appspot.com/';
+ </script>
+ <chops-tree-status id="closed-tree"> </chops-tree-status>
+ <br>
+ <chops-tree-status id="open-tree"></chops-tree-status>
+ <br>
+ <chops-tree-status id="error-tree"></chops-tree-status>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-id_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-id_demo.html
new file mode 100644
index 00000000000..d116917701c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-id_demo.html
@@ -0,0 +1,12 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-user-id.html">
+<!--- TODO(jojwang): Add some element that listens for the 'remove-user' event -->
+
+<demo-snippet>
+ <template>
+ <chops-user-id user-id="afinch"></chops-user-id>
+ <chops-user-id user-id="sfinch" profile-link="https://www.google.com" removeable></chops-user-id>
+ <chops-user-id user-id="gatsby" full-name="Jay Gatsby" email="gatsbylooking@greenlight.com"></chops-user-id>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-input_demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-input_demo.html
new file mode 100644
index 00000000000..2c84bc9c0e1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/demo/chops-user-input_demo.html
@@ -0,0 +1,12 @@
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+<link rel="import" href="../chops-user-input.html">
+
+<demo-snippet>
+ <template>
+ <chops-user-input suggestions='[{"userId": "one", "email": "one@gmail.com"}, {"userId": "userTwo"}]'>
+ </chops-user-input>
+ <chops-user-input suggestions='[{"userId": "one", "email": "one@gmail.com"}, {"userId": "userTwo"}]' multiple>
+ </chops-user-input>
+ </template>
+</demo-snippet>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img1.png b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img1.png
new file mode 100644
index 00000000000..a8221411631
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img1.png
Binary files differ
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img2.png b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img2.png
new file mode 100644
index 00000000000..26d3ff2ae45
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/img2.png
Binary files differ
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/logo.png b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/logo.png
new file mode 100644
index 00000000000..c436234d7ae
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/img/logo.png
Binary files differ
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element-test.sh b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element-test.sh
new file mode 100755
index 00000000000..64164ca9028
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element-test.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Create the skeleton for a polymer element.
+# ./new-element-test time-stamp > test/time-stamp_test.html
+
+spinal=$1
+camel=$(sed -r 's/(^|-)([a-z])/\U\2/g' <<< "${spinal}")
+
+cat <<- _EOF_
+<!DOCTYPE html>
+<title>${camel}</title>
+<meta charset="utf-8">
+<script src="/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
+<script src="/bower_components/web-component-tester/browser.js"></script>
+<link rel="import" href="/elements/${spinal}.html">
+
+<test-fixture id="${spinal}-test">
+ <template>
+ <${spinal}></${spinal}>
+ </template>
+</test-fixture>
+
+<script>
+ 'use strict';
+
+ suite('${spinal}', function() {
+ let element;
+ setup(function() {
+ element = fixture('${spinal}-test');
+
+ });
+
+ test('TEST DESCRIPTION', function(done) {
+
+ done();
+ });
+
+ });
+</script>
+
+_EOF_
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element.sh b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element.sh
new file mode 100755
index 00000000000..f7ef1c3e384
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/new-element.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Create the skeleton for a polymer element.
+# ./new-element time-stamp > elements/time-stamp.html
+
+spinal=$1
+camel=$(sed -r 's/(^|-)([a-z])/\U\2/g' <<< "${spinal}")
+
+cat <<- _EOF_
+<link rel="import" href="/bower_components/polymer/polymer.html">
+
+<dom-module id="${spinal}">
+ <template>
+ <style>
+ </style>
+ </template>
+ <script>
+ 'use strict';
+
+ /**
+ * \`<${spinal}>\` ....
+ *
+ * Element description here.
+ *
+ * @customElement
+ * @polymer
+ * @demo /demo/${spinal}_demo.html
+ */
+ class ${camel} extends Polymer.Element {
+ static get is() { return '${spinal}'; }
+
+ static get properties() {
+ return {
+ }
+ }
+
+ }
+ customElements.define(${camel}.is, ${camel});
+ </script>
+<dom-module>
+_EOF_
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/prpc-client.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/prpc-client.js
new file mode 100644
index 00000000000..cdc22c30bd4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/chopsui/prpc-client.js
@@ -0,0 +1,209 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// TODO(jeffcarp): Package as an ES module when ready.
+(function(window) {
+
+ /**
+ * An enum object mapping gRPC code names to integer codes.
+ * Reference: https://github.com/grpc/grpc-go/blob/972dbd2/codes/codes.go#L43
+ * @readonly
+ * @enum {number}
+ */
+ const RpcCode = Object.freeze({
+ OK: 0,
+ CANCELED: 1,
+ UNKNOWN: 2,
+ INVALID_ARGUMENT: 3,
+ DEADLINE_EXCEEDED: 4,
+ NOT_FOUND: 5,
+ ALREADY_EXISTS: 6,
+ PERMISSION_DENIED: 7,
+ RESOURCE_EXHAUSTED: 8,
+ FAILED_PRECONDITION: 9,
+ ABORTED: 10,
+ OUT_OF_RANGE: 11,
+ UNIMPLEMENTED: 12,
+ INTERNAL: 13,
+ UNAVAILABLE: 14,
+ DATA_LOSS: 15,
+ UNAUTHENTICATED: 16,
+ });
+
+ const rpcCodeNames = {};
+ for (const name in RpcCode) {
+ rpcCodeNames[RpcCode[name]] = name;
+ }
+
+ /**
+ * Converts a gRPC code integer into its code name.
+ * @param rpcCode {number} the RPC code to convert.
+ * @return {string|undefined} the code name of the corresponding gRPC code
+ * or undefined if not found.
+ */
+ function rpcCodeToCodeName(rpcCode) {
+ return rpcCodeNames[rpcCode];
+ }
+
+ /**
+ * Class for interacting with a pRPC API.
+ * Protocol: https://godoc.org/go.chromium.org/luci/grpc/prpc
+ */
+ class PrpcClient {
+
+ /**
+ * @constructor
+ * @param options {Object} with the following (all optional) config options:
+ * - host: {string} pRPC server host, defaults to current document host.
+ * - accessToken {string} OAuth 2.0 access token to use in RPC.
+ * - insecure {boolean} if true, use HTTP instead of HTTPS. Defaults to false.
+ * - fetchImpl {function} if supplied, use this function instead of fetch.
+ * Defaults to `window.fetch`.
+ */
+ constructor(options=null) {
+ options = options || {};
+ this.host = options.host || document.location.host;
+ this.accessToken = options.accessToken || null;
+ this.insecure = options.hasOwnProperty('insecure') && Boolean(options.insecure);
+ this.fetchImpl = options.fetchImpl || window.fetch.bind(window);
+ }
+
+ /**
+ * Send an RPC request.
+ * @async
+ * @param service {string} Full service name, including package name.
+ * @param method {string} Service method name.
+ * @param message {Object} The protobuf message to send.
+ * Note: because this method is async the following exceptions reject
+ * the returned Promise.
+ * @throws {TypeError} for invalid arguments.
+ * @throws {ProtocolError} when an error happens at the pRPC protocol
+ * (HTTP) level.
+ * @throws {GrpcError} when the response returns a non-OK gRPC status.
+ * @return {Promise<Object>} a promise resolving the response message
+ * or rejecting with an error..
+ */
+ async call(service, method, message) {
+ if (!service) {
+ throw new TypeError('missing required argument: service');
+ }
+ if (!method) {
+ throw new TypeError('missing required argument: method');
+ }
+ if (!message) {
+ throw new TypeError('missing required argument: message');
+ }
+ if (!(message instanceof Object)) {
+ throw new TypeError('argument `message` must be a protobuf object');
+ }
+
+ const protocol = this.insecure === true ? 'http:' : 'https:';
+ const url = `${protocol}//${this.host}/prpc/${service}/${method}`;
+ const options = this._requestOptions(message);
+
+ const response = await this.fetchImpl(url, options);
+
+ if (!response.headers.has('X-Prpc-Grpc-Code')) {
+ throw new ProtocolError(response.status,
+ 'Invalid response: no X-Prpc-Grpc-Code response header');
+ }
+
+ const rpcCode = Number.parseInt(response.headers.get('X-Prpc-Grpc-Code'), 10);
+ if (Number.isNaN(rpcCode)) {
+ throw new ProtocolError(response.status,
+ `Invalid X-Prpc-Grpc-Code response header`);
+ }
+
+ const XSSIPrefix = ')]}\'';
+ const rawResponseText = await response.text();
+
+ if (rpcCode !== RpcCode.OK) {
+ throw new GrpcError(rpcCode, rawResponseText);
+ }
+
+ if (!rawResponseText.startsWith(XSSIPrefix)) {
+ throw new ProtocolError(response.status,
+ `Response body does not start with XSSI prefix: ${XSSIPrefix}`);
+ }
+
+ return JSON.parse(rawResponseText.substr(XSSIPrefix.length));
+ }
+
+ /**
+ * @return {Object} the options used in fetch().
+ */
+ _requestOptions(message) {
+ const headers = {
+ 'accept': 'application/json',
+ 'content-type': 'application/json',
+ };
+ if (this.accessToken) {
+ headers.authorization = `Bearer ${this.accessToken}`;
+ }
+
+ return {
+ credentials: 'omit',
+ method: 'POST',
+ headers: headers,
+ body: JSON.stringify(message),
+ };
+ }
+ }
+
+ /**
+ * Data class representing an error returned from pRPC-gRPC.
+ */
+ class GrpcError extends Error {
+
+ /**
+ * @constructor
+ * @param code {number} gRPC code.
+ * @param description {string} error message.
+ */
+ constructor(code, description) {
+ super();
+ if (code === null) {
+ throw new Error('missing required argument: code');
+ }
+
+ this.code = code;
+ this.codeName = rpcCodeToCodeName(code);
+ this.description = description;
+ }
+
+ get message() {
+ return `code: ${this.code} (${this.codeName}) desc: ${this.description}`;
+ }
+ }
+
+ /**
+ * Data class representing a violation of the pRPC protocol.
+ */
+ class ProtocolError extends Error {
+ constructor(httpStatus, description) {
+ super();
+ if (httpStatus === null) {
+ throw new Error('missing required argument: httpStatus');
+ }
+
+ this.httpStatus = httpStatus;
+ this.description = description;
+ }
+
+ get message() {
+ return `status: ${this.httpStatus} desc: ${this.description}`;
+ }
+ }
+
+ // Export variables onto window.chops.rpc.
+ window.chops = window.chops || {};
+ window.chops.rpc = window.chops.rpc || {};
+ Object.assign(window.chops.rpc, {
+ RpcCode,
+ rpcCodeToCodeName,
+ PrpcClient,
+ ProtocolError,
+ GrpcError,
+ });
+})(window);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/.bower.json
new file mode 100644
index 00000000000..525574c6ce7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/.bower.json
@@ -0,0 +1,31 @@
+{
+ "name": "font-roboto",
+ "version": "1.1.0",
+ "description": "An HTML import for Roboto",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "font",
+ "roboto"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/font-roboto.git"
+ },
+ "main": "roboto.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/font-roboto/",
+ "ignore": [
+ "/.*"
+ ],
+ "_release": "1.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.1.0",
+ "commit": "014b084ae51314648053e792cf6c870946942953"
+ },
+ "_source": "https://github.com/PolymerElements/font-roboto.git",
+ "_target": "^1.0.1",
+ "_originalSource": "PolymerElements/font-roboto"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/README.md
new file mode 100644
index 00000000000..61c6394ce36
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/README.md
@@ -0,0 +1 @@
+# font-roboto
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/bower.json
new file mode 100644
index 00000000000..7099d7ff64f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/bower.json
@@ -0,0 +1,22 @@
+{
+ "name": "font-roboto",
+ "version": "1.0.3",
+ "description": "An HTML import for Roboto",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "font",
+ "roboto"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/font-roboto.git"
+ },
+ "main": "roboto.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/font-roboto/",
+ "ignore": [
+ "/.*"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package-lock.json
new file mode 100644
index 00000000000..0a8f0abd2a1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package-lock.json
@@ -0,0 +1,987 @@
+{
+ "name": "@polymerelements/font-roboto",
+ "version": "1.0.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.1.1.tgz",
+ "integrity": "sha512-rUfH6USpiPYSHl2dC+/rGb3RYK8LPyqNhiuZCLv13F0fhYr01jdTogGuSphEoSLklm1gKRsDsrfZq7OvpzPYEg==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.1",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.10"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.97",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.97.tgz",
+ "integrity": "sha512-k3CDdCq8Uv8AZ7/bmGSSvlwbPDPhkkckSq8Y9ndXowv86m3k07PjG98SigpjVAY9EyHV9kiFldEV306xh4gkig==",
+ "dev": true
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.10",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.10.tgz",
+ "integrity": "sha1-9vCd15PdL0IomsAdoCb8q6ZfGYw=",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.97",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "2.2.3",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz",
+ "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.7.tgz",
+ "integrity": "sha512-jNhbkxPtt9xbzvihfA0OavjJbpCIyTDSmwE03BVXgCKcz9lwNsq4cg2wsNkY4Av5eH35ttBArhYtVJa6CIrg2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.1.tgz",
+ "integrity": "sha512-gRJDcIjFSzMcmG/GrJlgL0wWoAxr11mVzCq32bjka0endupm9meLwvoJUKc4HDeFiEIB2X3GvNrhF5cKO4Bd4A==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.7",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package.json
new file mode 100644
index 00000000000..a74ad2b74fb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "@polymerelements/font-roboto",
+ "version": "1.0.1",
+ "description": "An HTML import for Roboto",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "font",
+ "roboto"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/font-roboto.git"
+ },
+ "main": "roboto.html",
+ "license": "BSD-3-Clause",
+ "homepage": "https://github.com/PolymerElements/font-roboto/",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.d.ts
new file mode 100644
index 00000000000..12fab1efa81
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.d.ts
@@ -0,0 +1,10 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * roboto.html
+ */
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.html
new file mode 100644
index 00000000000..417ee18c7e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/font-roboto/roboto.html
@@ -0,0 +1,10 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,700|Roboto:400,300,300italic,400italic,500,500italic,700,700italic" crossorigin="anonymous">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/.bower.json
new file mode 100644
index 00000000000..e1730d6dead
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/.bower.json
@@ -0,0 +1,56 @@
+{
+ "name": "google-apis",
+ "version": "2.0.1",
+ "description": "Web components to load Google API libraries",
+ "homepage": "https://elements.polymer-project.org/elements/google-apis?active=google-js-api",
+ "main": "google-apis.html",
+ "authors": [
+ "Scott Miles <sjmiles@google.com>",
+ "Eric Bidelman <ebidel@gmail.com>"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "keywords": [
+ "web-component",
+ "web-components",
+ "polymer",
+ "google",
+ "apis"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-jsonp-library": "PolymerElements/iron-jsonp-library#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "iron-jsonp-library": "PolymerElements/iron-jsonp-library#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.0.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.1",
+ "commit": "cb0a9fd502a845096a63e4a1499fe43efe942638"
+ },
+ "_source": "https://github.com/GoogleWebComponents/google-apis.git",
+ "_target": "1 - 2",
+ "_originalSource": "GoogleWebComponents/google-apis"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/LICENSE
new file mode 100644
index 00000000000..3dde500925f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/LICENSE
@@ -0,0 +1,13 @@
+Copyright 2015 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/README.md
new file mode 100644
index 00000000000..dd9268cd404
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/README.md
@@ -0,0 +1,4 @@
+google-apis
+===========
+
+See https://elements.polymer-project.org/elements/google-apis
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/bower.json
new file mode 100644
index 00000000000..d854f69317d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/bower.json
@@ -0,0 +1,47 @@
+{
+ "name": "google-apis",
+ "version": "2.0.1",
+ "description": "Web components to load Google API libraries",
+ "homepage": "https://elements.polymer-project.org/elements/google-apis?active=google-js-api",
+ "main": "google-apis.html",
+ "authors": [
+ "Scott Miles <sjmiles@google.com>",
+ "Eric Bidelman <ebidel@gmail.com>"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "keywords": [
+ "web-component",
+ "web-components",
+ "polymer",
+ "google",
+ "apis"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-jsonp-library": "PolymerElements/iron-jsonp-library#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "iron-jsonp-library": "PolymerElements/iron-jsonp-library#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/demo/index.html
new file mode 100644
index 00000000000..0455cbb6a3a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/demo/index.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<!-- Copyright (c) 2015 Google Inc. All rights reserved. -->
+<html>
+<head>
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>google-apis Demo</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../google-apis.html">
+</head>
+<body>
+ <div id="messages"></div>
+
+ <dom-bind id="bind">
+ <template id="t" is="dom-bind">
+
+ <google-client-loader id="shortener"
+ name="urlshortener"
+ version="v1"
+ on-google-api-load="loadedShortener"></google-client-loader>
+ <google-js-api on-js-api-load="loaded"></google-js-api>
+ <google-plusone-api on-api-load="loaded"></google-plusone-api>
+ <google-realtime-api on-api-load="loaded"></google-realtime-api>
+ <google-maps-api on-api-load="loaded"></google-maps-api>
+ <google-youtube-api on-api-load="loaded"></google-youtube-api>
+ <google-legacy-loader on-api-load="loaded"></google-legacy-loader>
+
+ </template>
+ </dom-bind>
+ <script>
+ // polymer 1.x compatibility
+ t.loadedShortener = function(event) {
+ var request = event.target.api.url.get({
+ shortUrl: 'http://goo.gl/fbsS'
+ })
+ request.execute(function(resp) {
+ console.log(resp);
+ });
+ }
+
+ t.loaded = function(e) {
+ document.querySelector('#messages').innerHTML +=
+ e.target.localName + ' loaded' + '<br>';
+ console.log(e.target.localName + ' loaded', event.target.api);
+ }
+
+ // Polymer 2.0 compatibility
+ bind.loadedShortener = t.loadedShortener;
+ bind.loaded = t.loaded;
+ </script>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-apis.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-apis.html
new file mode 100644
index 00000000000..29f9883b652
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-apis.html
@@ -0,0 +1,16 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<!-- Load all Google APIs, for backwards compatibility -->
+<link rel="import" href="google-client-loader.html">
+<link rel="import" href="google-legacy-loader.html">
+<link rel="import" href="google-maps-api.html">
+<link rel="import" href="google-plusone-api.html">
+<link rel="import" href="google-realtime-api.html">
+<link rel="import" href="google-youtube-api.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-client-loader.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-client-loader.html
new file mode 100644
index 00000000000..cbbb6d0034f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-client-loader.html
@@ -0,0 +1,236 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="google-js-api.html">
+
+<!--
+Element for loading a specific client Google API with the JavaScript client library.
+
+For loading `gapi.client` libraries
+
+##### Example
+
+ <google-client-loader id="shortener"
+ name="urlshortener"
+ version="v1"></google-client-loader>
+
+ <script>
+ var shortener = document.getElementById('shortener');
+ shortener.addEventListener('google-api-load', function(event) {
+ var request = shortener.api.url.get({
+ shortUrl: 'http://goo.gl/fbsS'
+ });
+ request.execute(function(resp) {
+ console.log(resp);
+ });
+ });
+ </script>
+
+@demo
+-->
+
+<script>
+ (function() {
+ 'use strict';
+
+ // Stores whether the API client is done loading.
+ var _clientLoaded = false;
+
+ // Loaders and loading statuses for all APIs, indexed by API name.
+ // This helps prevent multiple loading requests being fired at the same time
+ // by multiple google-api-loader elements.
+ var _statuses = {};
+ var _loaders = {};
+
+ Polymer({
+
+ is: 'google-client-loader',
+
+ /**
+ * Fired when the requested API is loaded. Override this name
+ * by setting `successEventName`.
+ * @event google-api-load
+ */
+
+ /**
+ * Fired if an error occurs while loading the requested API. Override this name
+ * by setting `errorEventName`.
+ * @event google-api-load-error
+ */
+
+ properties: {
+ /**
+ * Name of the API to load, e.g. 'urlshortener'.
+ *
+ * You can find the full list of APIs on the
+ * <a href="https://developers.google.com/apis-explorer"> Google APIs
+ * Explorer</a>.
+ */
+ name: String,
+
+ /**
+ * Version of the API to load, e.g. 'v1'.
+ */
+ version: String,
+
+ /**
+ * App Engine application ID for loading a Google Cloud Endpoints API.
+ */
+ appId: String,
+
+ /**
+ * Root URL where to load the API from, e.g. 'http://host/apis'.
+ * For App Engine dev server this would be something like:
+ * 'http://localhost:8080/_ah/api'.
+ * Overrides 'appId' if both are specified.
+ */
+ apiRoot: String,
+
+ /**
+ * Name of the event fired when API library is loaded.
+ */
+ successEventName: {
+ type: String,
+ value: 'google-api-load'
+ },
+
+ /**
+ * Name of the event fired when there is an error loading the library.
+ */
+ errorEventName: {
+ type: String,
+ value: 'google-api-load-error'
+ }
+ },
+
+ hostAttributes: {
+ hidden: true // remove from rendering tree.
+ },
+
+ // Used to fix events potentially being fired multiple times by
+ // iron-jsonp-library.
+ _waiting: false,
+
+ /**
+ * Returns the loaded API.
+ */
+ get api() {
+ if (window.gapi && window.gapi.client &&
+ window.gapi.client[this.name]) {
+ return window.gapi.client[this.name];
+ } else {
+ return undefined;
+ }
+ },
+
+ /**
+ * Wrapper for `gapi.auth`.
+ */
+ get auth() {
+ return gapi.auth;
+ },
+
+ ready: function() {
+ this._loader = document.createElement('google-js-api');
+
+ if (!this.shadowRoot) { this.attachShadow({mode: 'open'}); }
+ this.shadowRoot.appendChild(this._loader);
+
+ this.listen(this._loader, 'js-api-load', '_loadClient');
+ },
+
+ detached: function() {
+ this.unlisten(this._loader, 'js-api-load', '_loadClient');
+ },
+
+ _loadClient: function() {
+ gapi.load('client', this._doneLoadingClient.bind(this));
+ },
+
+ _handleLoadResponse: function(response) {
+ if (response && response.error) {
+ _statuses[this.name] = 'error';
+ this._fireError(response);
+ } else {
+ _statuses[this.name] = 'loaded';
+ this._fireSuccess();
+ }
+ },
+
+ _fireSuccess: function() {
+ this.fire(this.successEventName,
+ { 'name': this.name, 'version': this.version });
+ },
+
+ _fireError: function(response) {
+ if (response && response.error) {
+ this.fire(this.errorEventName, {
+ 'name': this.name,
+ 'version': this.version,
+ 'error': response.error });
+ } else {
+ this.fire(this.errorEventName, {
+ 'name': this.name,
+ 'version': this.version });
+ }
+ },
+
+ _doneLoadingClient: function() {
+ _clientLoaded = true;
+ // Fix for API client load event being fired multiple times by
+ // iron-jsonp-library.
+ if (!this._waiting) {
+ this._loadApi();
+ }
+ },
+
+ _createSelfRemovingListener: function(eventName) {
+ var handler = function () {
+ _loaders[this.name].removeEventListener(eventName, handler);
+ this._loadApi();
+ }.bind(this);
+
+ return handler;
+ },
+
+ _loadApi: function() {
+ if (_clientLoaded && this.name && this.version) {
+ this._waiting = false;
+ // Is this API already loaded?
+ if (_statuses[this.name] == 'loaded') {
+ this._fireSuccess();
+ // Is a different google-api-loader already loading this API?
+ } else if (_statuses[this.name] == 'loading') {
+ this._waiting = true;
+ _loaders[this.name].addEventListener(this.successEventName,
+ this._createSelfRemovingListener(this.successEventName));
+ _loaders[this.name].addEventListener(this.errorEventName,
+ this._createSelfRemovingListener(this.errorEventName));
+ // Did we get an error when we tried to load this API before?
+ } else if (_statuses[this.name] == 'error') {
+ this._fireError(null);
+ // Otherwise, looks like we're loading a new API.
+ } else {
+ var root;
+ if (this.apiRoot) {
+ root = this.apiRoot;
+ } else if (this.appId) {
+ root = 'https://' + this.appId + '.appspot.com/_ah/api';
+ }
+ _statuses[this.name] = 'loading';
+ _loaders[this.name] = this;
+ gapi.client.load(this.name, this.version,
+ this._handleLoadResponse.bind(this), root);
+ }
+ }
+ }
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-js-api.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-js-api.html
new file mode 100644
index 00000000000..3b05a109756
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-js-api.html
@@ -0,0 +1,63 @@
+<!--
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-jsonp-library/iron-jsonp-library.html">
+
+<!--
+Dynamically loads Google JavaScript API `gapi`, firing the `js-api-load` event when ready.
+
+Any number of components can use `<google-js-api>` elements, and the library will only be loaded once.
+
+##### Example
+
+ <google-js-api></google-js-api>
+ <script>
+ var api = document.querySelector('google-js-api');
+ api.addEventListener('js-api-load', function(e) {
+ console.log('API loaded', gapi);
+ });
+ </script>
+-->
+<script>
+ Polymer({
+
+ is: 'google-js-api',
+
+ behaviors: [
+ Polymer.IronJsonpLibraryBehavior
+ ],
+
+ properties: {
+
+ /** @private */
+ libraryUrl: {
+ type: String,
+ value: 'https://apis.google.com/js/api.js?onload=%%callback%%'
+ },
+
+ /**
+ * Fired when the API library is loaded and available.
+ * @event js-api-load
+ */
+ /**
+ * Name of event fired when library is loaded and available.
+ */
+ notifyEvent: {
+ type: String,
+ value: 'js-api-load'
+ },
+ },
+
+ get api() {
+ return gapi;
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-legacy-loader.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-legacy-loader.html
new file mode 100644
index 00000000000..02e7a5c4215
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-legacy-loader.html
@@ -0,0 +1,55 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-jsonp-library/iron-jsonp-library.html">
+
+<!--
+Dynamically loads the legacy Google JavaScript API Loader (https://developers.google.com/loader/).
+
+Fires `api-load` event when ready.
+-->
+<script>
+ Polymer({
+
+ is: 'google-legacy-loader',
+
+ behaviors: [
+ Polymer.IronJsonpLibraryBehavior
+ ],
+
+ properties: {
+
+ /** @private */
+ libraryUrl: {
+ type: String,
+ value: 'https://www.google.com/jsapi?callback=%%callback%%'
+ },
+
+ /**
+ * Fired when the API library is loaded and available.
+ * @event js-api-load
+ */
+ /**
+ * Name of event fired when library is loaded and available.
+ */
+ notifyEvent: {
+ type: String,
+ value: 'api-load'
+ }
+ },
+
+ /**
+ * Wrapper for `google` API namespace.
+ */
+ get api() {
+ return google;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-maps-api.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-maps-api.html
new file mode 100644
index 00000000000..fb9bbacab00
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-maps-api.html
@@ -0,0 +1,150 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-jsonp-library/iron-jsonp-library.html">
+
+<!--
+Dynamically loads the Google Maps JavaScript API, firing the `api-load` event when ready.
+
+#### Example
+
+ <google-maps-api api-key="abc123" version="3.exp"></google-maps-api>
+ <script>
+ var mapsAPI = document.querySelector('google-maps-api');
+ mapsAPI.addEventListener('api-load', function(e) {
+ // this.api === google.maps
+ });
+ </script>
+
+Any number of components can use `<google-maps-api>` elements, and the library will only be loaded once.
+
+@summary Element wrapper around Google Maps API.
+-->
+<script>
+ Polymer({
+
+ is: 'google-maps-api',
+
+ behaviors: [
+ Polymer.IronJsonpLibraryBehavior
+ ],
+
+ properties: {
+
+ /** @private */
+ mapsUrl: {
+ type: String,
+ value: 'https://maps.googleapis.com/maps/api/js?callback=%%callback%%'
+ },
+
+ /**
+ * A Maps API key. To obtain an API key, see developers.google.com/maps/documentation/javascript/tutorial#api_key.
+ */
+ apiKey: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * A Maps API for Business Client ID. To obtain a Maps API for Business Client ID, see developers.google.com/maps/documentation/business/.
+ * If set, a Client ID will take precedence over an API Key.
+ */
+ clientId: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * Version of the Maps API to use.
+ */
+ version: {
+ type: String,
+ value: '3.exp'
+ },
+
+ /**
+ * The localized language to load the Maps API with. For more information
+ * see https://developers.google.com/maps/documentation/javascript/basics#Language
+ *
+ * Note: the Maps API defaults to the preffered language setting of the browser.
+ * Use this parameter to override that behavior.
+ */
+ language: {
+ type: String,
+ value: ''
+ },
+ /**
+ * If true, sign-in is enabled.
+ * See https://developers.google.com/maps/documentation/javascript/signedin#enable_sign_in
+ */
+ signedIn: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Fired when the Maps API library is loaded and ready.
+ * @event api-load
+ */
+ /**
+ * Name of event fired when library is loaded and available.
+ */
+ notifyEvent: {
+ type: String,
+ value: 'api-load'
+ },
+
+ /** @private */
+ libraryUrl: {
+ type: String,
+ computed: '_computeUrl(mapsUrl, version, apiKey, clientId, language, signedIn)'
+ }
+ },
+
+ _computeUrl: function(mapsUrl, version, apiKey, clientId, language, signedIn) {
+ var url = mapsUrl + '&v=' + version;
+
+ // Always load all Maps API libraries.
+ url += '&libraries=drawing,geometry,places,visualization';
+
+ if (apiKey && !clientId) {
+ url += '&key=' + apiKey;
+ }
+
+ if (clientId) {
+ url += '&client=' + clientId;
+ }
+
+ // Log a warning if the user is not using an API Key or Client ID.
+ if (!apiKey && !clientId) {
+ var warning = 'No Google Maps API Key or Client ID specified. ' +
+ 'See https://developers.google.com/maps/documentation/javascript/get-api-key ' +
+ 'for instructions to get started with a key or client id.';
+ console.warn(warning);
+ }
+
+ if (language) {
+ url += '&language=' + language;
+ }
+
+ if (signedIn) {
+ url += '&signed_in=' + signedIn;
+ }
+ return url;
+ },
+
+ /**
+ * Provides the google.maps JS API namespace.
+ */
+ get api() {
+ return google.maps;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-plusone-api.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-plusone-api.html
new file mode 100644
index 00000000000..205658e04cc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-plusone-api.html
@@ -0,0 +1,54 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-jsonp-library/iron-jsonp-library.html">
+
+<!--
+Dynamically loads the Google+ JavaScript API, firing the `api-load` event when ready.
+
+Any number of components can use `<google-plusone-api>` elements, and the library will only be loaded once.
+-->
+<script>
+ Polymer({
+
+ is: 'google-plusone-api',
+
+ behaviors: [
+ Polymer.IronJsonpLibraryBehavior
+ ],
+
+ properties: {
+
+ /** @private */
+ libraryUrl: {
+ type: String,
+ value: 'https://apis.google.com/js/plusone.js?onload=%%callback%%'
+ },
+
+ /**
+ * Fired when the API library is loaded and available.
+ * @event js-api-load
+ */
+ /**
+ * Name of event fired when library is loaded and available.
+ */
+ notifyEvent: {
+ type: String,
+ value: 'api-load'
+ }
+
+ },
+
+ get api() {
+ return gapi;
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-realtime-api.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-realtime-api.html
new file mode 100644
index 00000000000..a41fb517adb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-realtime-api.html
@@ -0,0 +1,57 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-jsonp-library/iron-jsonp-library.html">
+
+<!--
+Dynamically loads the Google Drive Realtime API, firing the `api-load` event when ready.
+
+Any number of components can use `<google-realtime-api>` elements, and the library will only be loaded once.
+-->
+<script>
+ Polymer({
+
+ is: 'google-realtime-api',
+
+ behaviors: [
+ Polymer.IronJsonpLibraryBehavior
+ ],
+
+ properties: {
+
+ /** @private */
+ libraryUrl: {
+ type: String,
+ value: 'https://apis.google.com/js/drive-realtime.js?onload=%%callback%%'
+ },
+
+ /**
+ * Fired when the API library is loaded and available.
+ * @event api-load
+ */
+ /**
+ * Name of event fired when library is loaded and available.
+ */
+ notifyEvent: {
+ type: String,
+ value: 'api-load'
+ }
+
+ },
+
+ /**
+ * Returns `gapi.drive.realtime`
+ */
+ get api() {
+ return gapi.drive.realtime;
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-youtube-api.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-youtube-api.html
new file mode 100644
index 00000000000..7f8960d74c5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/google-youtube-api.html
@@ -0,0 +1,61 @@
+<!--
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at https://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at https://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at https://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at https://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-jsonp-library/iron-jsonp-library.html">
+
+<!--
+Dynamically loads the Google Youtube Iframe API, firing the `api-load` event when ready.
+
+Any number of components can use `<google-youtube-api>` elements, and the library will only be loaded once.
+
+https://developers.google.com/youtube/iframe_api_reference
+-->
+<script>
+ Polymer({
+
+ is: 'google-youtube-api',
+
+ behaviors: [
+ Polymer.IronJsonpLibraryBehavior
+ ],
+
+ properties: {
+
+ /** @private */
+ libraryUrl: {
+ type: String,
+ value: 'https://www.youtube.com/iframe_api'
+ },
+
+ /**
+ * Fired when the API library is loaded and available.
+ * @event api-load
+ */
+ /**
+ * Name of event fired when library loads.
+ */
+ notifyEvent: {
+ type: String,
+ value: 'api-load'
+ },
+
+ callbackName: {
+ type: String,
+ value: 'onYouTubeIframeAPIReady'
+ }
+
+ },
+
+ get api() {
+ return YT;
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/index.html
new file mode 100644
index 00000000000..203f4fa4813
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-apis/index.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<!-- Copyright (c) 2015 Google Inc. All rights reserved. -->
+<html>
+<head>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/.bower.json
new file mode 100644
index 00000000000..79bb496fa2f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/.bower.json
@@ -0,0 +1,63 @@
+{
+ "name": "google-signin",
+ "version": "2.0.0",
+ "description": "Web components to authenticate with Google services",
+ "homepage": "https://googlewebcomponents.github.io/google-signin",
+ "main": "google-signin.html",
+ "authors": [
+ "Addy Osmani",
+ "Randy Merrill"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "keywords": [
+ "web-component",
+ "web-components",
+ "polymer",
+ "sign-in",
+ "google",
+ "authentication"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "paper-ripple": "PolymerElements/paper-ripple#1 - 2",
+ "paper-material": "PolymerElements/paper-material#1 - 2",
+ "google-apis": "GoogleWebComponents/google-apis#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.3.0",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
+ "paper-material": "PolymerElements/paper-material#^1.0.0",
+ "google-apis": "GoogleWebComponents/google-apis#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
+ }
+ }
+ },
+ "_release": "2.0.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.0",
+ "commit": "6a3182651e531f221abc0a8341c8fd0246acd08f"
+ },
+ "_source": "https://github.com/GoogleWebComponents/google-signin.git",
+ "_target": "*",
+ "_originalSource": "GoogleWebComponents/google-signin"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/LICENSE
new file mode 100644
index 00000000000..52aea39185b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/LICENSE
@@ -0,0 +1,13 @@
+Copyright 2014 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/README.md
new file mode 100644
index 00000000000..e2fc16e4249
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/README.md
@@ -0,0 +1,4 @@
+google-signin
+================
+
+See https://elements.polymer-project.org/elements/google-signin
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/bower.json
new file mode 100644
index 00000000000..06febde750e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/bower.json
@@ -0,0 +1,54 @@
+{
+ "name": "google-signin",
+ "version": "2.0.0",
+ "description": "Web components to authenticate with Google services",
+ "homepage": "https://googlewebcomponents.github.io/google-signin",
+ "main": "google-signin.html",
+ "authors": [
+ "Addy Osmani",
+ "Randy Merrill"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "keywords": [
+ "web-component",
+ "web-components",
+ "polymer",
+ "sign-in",
+ "google",
+ "authentication"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "paper-ripple": "PolymerElements/paper-ripple#1 - 2",
+ "paper-material": "PolymerElements/paper-material#1 - 2",
+ "google-apis": "GoogleWebComponents/google-apis#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.3.0",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
+ "paper-material": "PolymerElements/paper-material#^1.0.0",
+ "google-apis": "GoogleWebComponents/google-apis#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/demo/index.html
new file mode 100644
index 00000000000..0db7e5a9788
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/demo/index.html
@@ -0,0 +1,208 @@
+<!doctype html>
+<!-- Copyright (c) 2014 Google Inc. All rights reserved. -->
+<html>
+<head>
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>google-signin Demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../google-signin.html">
+ <link rel="import" href="../google-signin-aware.html">
+
+ <!-- Demo only styles -->
+ <style>
+ body {
+ font-family: 'RobotoDraft', 'Roboto', sans-serif;
+ line-height:1.2;
+ vertical-align:middle;
+ background: rgba(204, 204, 204, 0.31);
+ }
+
+
+ .map {
+ background: whitesmoke;
+ margin: .5rem -1.5rem 0 -1.5rem;
+ padding: 0.5rem;
+ }
+
+ h1 {
+ font-size: 2rem;
+ font-weight:200;
+ clear: both;
+ }
+
+ h1 strong {
+ font-weight:300;
+ color:#539D00;
+ }
+
+ h2 {
+ font-size:.9rem;
+ line-height:2.5;
+ color:gray;
+ font-weight:400;
+ clear: both;
+ }
+
+ .showcase {
+ display: inline-block;
+ margin-right: 2rem;
+ float: left;
+ }
+ </style>
+
+</head>
+
+<body>
+ <p>A <code>&lt;google-signin&gt;</code> element looks like this button:</p>
+
+ <p><google-signin brand="google" client-id="1054047045356-j8pgqgls9vdef3rl09hapoicumbte0bo.apps.googleusercontent.com"></google-signin>
+or like this if plus scopes are present
+ <google-signin brand="google-plus"></google-signin>
+ </p>
+ <p>Signin button can vary its appearance:</p>
+ <p>Width:
+ <google-signin brand="google" width="wide"></google-signin>
+ <google-signin brand="google" width="iconOnly"></google-signin>
+ Height:
+ <google-signin brand="google" height="tall"></google-signin>
+ <google-signin brand="google" height="standard"></google-signin>
+ <google-signin brand="google" height="short"></google-signin>
+ </p>
+ <p>
+ Theme:
+ <google-signin brand="google" theme="dark"></google-signin>
+ <google-signin brand="google" theme="light"></google-signin>
+ <google-signin brand="google-plus" theme="dark"></google-signin>
+ <google-signin brand="google-plus" theme="light"></google-signin>
+ <google-signin brand="google-plus" theme="light" raised></google-signin>
+ </p>
+ <!-- Demo the ability to use the google-signin-aware element. -->
+ <p><code>&lt;google-signin-aware&gt;</code> is a companion element.</p>
+ <p>You can use it inside your components to request additional scopes.</p>
+ <p>Every signin button will request all the scopes present in the document,
+ and change its appearance to match</p>
+ <p>For example, here is a signin-aware scope. You can change its scopes via popup</p>
+ <dom-bind id="awareness">
+ <template is="dom-bind">
+ <div><code>&lt;google-signin-aware
+ <div>scope=
+ <select value="{{scope::change}}">
+ <option value="">None</option>
+ <option value="https://www.googleapis.com/auth/analytics">Google Analytics</option>
+ <option value="https://www.googleapis.com/auth/plus.login">Google Plus view circles</option>
+ <option value="https://www.googleapis.com/auth/youtube">YouTube</option>
+ <option value="https://www.googleapis.com/auth/calendar">Calendar</option>
+ <option value="profile">Profile info</option>
+ </select>
+ </div>
+ <div>openid-prompt=
+ <input type="checkbox" checked="{{openidPrompt.none::change}}">none
+ <input type="checkbox" checked="{{openidPrompt.login::change}}">login
+ <input type="checkbox" checked="{{openidPrompt.consent::change}}">consent
+ <input type="checkbox"
+ checked="{{openidPrompt.select_account::change}}">select_account
+ </div>
+ <div>offline=<input type="checkbox" checked="{{offline::change}}"></div>
+ <div>initialized="<span>{{initialized}}</span>"</div>
+ <div>signedIn="<span>{{signedIn}}</span>"</div>
+ <div>isAuthorized="<span>{{isAuthorized}}</span>"</div>
+ <div>needAdditionalAuth:"<span>{{needAdditionalAuth}}</span>"&gt;</div>
+ </code></div>
+ <p>Every new scope you select will be added to requested scopes.</p>
+ <p>When you select a Google Plus scope, button will turn red.</p>
+ <google-signin></google-signin>
+ </p>
+ <google-signin-aware
+ scopes="{{scope}}"
+ openid-prompt="{{openidPromptValue}}"
+ initialized="{{initialized}}"
+ signed-in="{{signedIn}}"
+ offline="{{offline}}"
+ is-authorized="{{isAuthorized}}"
+ need-additional-auth="{{needAdditionalAuth}}"
+ on-google-signin-aware-error="handleSignInError"
+ on-google-signin-aware-success="handleSignIn"
+ on-google-signin-offline-success="handleOffline"
+ on-google-signin-aware-signed-out="handleSignOut"
+ on-signed-in-changed="handleStateChange"
+ on-initialized-changed="handleStateChange"></google-signin-aware>
+ <p>User name:<span>{{userName}}</span></p>
+ <p>Testing <code>google-signin-aware</code> events: <span>{{status}}</span></p>
+ <p>Testing <code>google-signin-offline</code> events: <span>{{offlineCode}}</span></p>
+ <p>Only display "not signed in" element after auth state is initialized (avoid flickering): <b hidden id="not-signed-in">Not signed in!</b></p>
+ <p><button on-click="disconnect">Disconnect to start over</button></p>
+ </template>
+ </dom-bind>
+ <script>
+ var aware = document.querySelector('#awareness');
+ if (!Polymer.Element) {
+ aware = aware.querySelector('template');
+ }
+
+ aware.status = 'Not granted';
+ aware.offlineCode = 'No offline login.';
+ aware.userName = 'N/A';
+ aware.openidPrompt = {};
+
+ aware.handleSignInError = function(event) {
+ this.status = JSON.stringify(event.detail);
+ };
+ aware.handleSignIn = function(response) {
+ this.status = 'Signin granted';
+ // console.log('[Aware] Signin Response', response);
+ this.userName = gapi.auth2.getAuthInstance().currentUser.get().getBasicProfile().getName();
+ };
+ aware.handleOffline = function(response) {
+ this.offlineCode = response.detail.code;
+ };
+ aware.handleSignOut = function(response) {
+ this.status = 'Signed out';
+ // console.log('[Aware] Signout Response', response);
+ this.userName = 'N/A';
+ };
+ aware.disconnect = function() {
+ var currentUser = gapi.auth2.getAuthInstance().currentUser.get();
+ if (currentUser) {
+ currentUser.disconnect();
+ }
+ gapi.auth2.getAuthInstance().signOut();
+ };
+
+ aware.handleStateChange = function(e) {
+ var signedIn = e.target.signedIn;
+ var initialized = e.target.initialized;
+ if(initialized && !signedIn) {
+ document.querySelector("#not-signed-in").removeAttribute("hidden");
+ } else {
+ document.querySelector("#not-signed-in").setAttribute("hidden", true);
+ }
+ };
+
+ aware.addEventListener('openid-prompt-changed', function(e) {
+ if (e.detail.value) {
+ if (e.detail.path === 'openidPrompt.none') {
+ aware.set('openidPrompt', {
+ none: true,
+ login: false,
+ consent: false,
+ select_account: false
+ });
+ } else {
+ aware.set('openidPrompt.none', false);
+ }
+ }
+
+ var values = [];
+ Object.keys(aware.openidPrompt).forEach(function(k) {
+ if (aware.openidPrompt[k]) {
+ values.push(k);
+ }
+ });
+ this.set('openidPromptValue', values.join(' '));
+ });
+
+ </script>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-icons.html
new file mode 100644
index 00000000000..0787b94f2c2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-icons.html
@@ -0,0 +1,36 @@
+<!--
+Copyright 2014 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="google" size="24">
+<svg>
+ <defs>
+ <g id="google">
+ <path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z"/>
+ <path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
+ <path fill="#FBBC05" d="M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z"/>
+ <path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z"/>
+ <path fill="none" d="M1 1h22v22H1z"/>
+ </g>
+ <g id="google-plus">
+ <path fill="none" d="M0 0h24v24H0V0z"/>
+ <path d="M23 11h-2V9h-2v2h-2v2h2v2h2v-2h2zM8 11v2.4h3.97c-.16 1.03-1.2 3.02-3.97 3.02-2.39 0-4.34-1.98-4.34-4.42S5.61 7.58 8 7.58c1.36 0 2.27.58 2.79 1.08l1.9-1.83C11.47 5.69 9.89 5 8 5c-3.87 0-7 3.13-7 7s3.13 7 7 7c4.04 0 6.72-2.84 6.72-6.84 0-.46-.05-.81-.11-1.16H8z"/>
+ <path fill="none" d="M1 5h14v14H1z"/>
+ </g>
+ </defs>
+</svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-aware.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-aware.html
new file mode 100644
index 00000000000..e6e731bfad1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-aware.html
@@ -0,0 +1,824 @@
+<!--
+Copyright 2014 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../google-apis/google-js-api.html">
+
+<script>
+ (function() {
+
+ /**
+ * Enum of attributes to be passed through to the login API call.
+ * @readonly
+ * @enum {string}
+ */
+ var ProxyLoginAttributes = {
+ 'appPackageName': 'apppackagename',
+ 'clientId': 'clientid',
+ 'cookiePolicy': 'cookiepolicy',
+ 'hostedDomain': 'hostedDomain',
+ 'openidPrompt': 'prompt',
+ 'requestVisibleActions': 'requestvisibleactions'
+ };
+
+ /**
+ * AuthEngine does all interactions with gapi.auth2
+ *
+ * It is tightly coupled with <google-signin-aware> element
+ * The elements configure AuthEngine.
+ * AuthEngine propagates all authentication events to all google-signin-aware elements
+ *
+ * API used: https://developers.google.com/identity/sign-in/web/reference
+ *
+ */
+ var AuthEngine = {
+
+ /**
+ * oauth2 argument, set by google-signin-aware
+ */
+ _clientId: null,
+
+ get clientId() {
+ return this._clientId;
+ },
+
+ set clientId(val) {
+ if (this._clientId && val && val != this._clientId) {
+ throw new Error('clientId cannot change. Values do not match. New: ' + val + ' Old:' + this._clientId);
+ }
+ if (val && val != this._clientId) {
+ this._clientId = val;
+ this.initAuth2();
+ }
+ },
+
+ /**
+ * oauth2 argument, set by google-signin-aware
+ */
+ _cookiePolicy: 'single_host_origin',
+
+ get cookiePolicy() {
+ return this._cookiePolicy;
+ },
+
+ set cookiePolicy(val) {
+ if (val) {
+ this._cookiePolicy = val;
+ }
+ },
+
+ /**
+ * oauth2 argument, set by google-signin-aware
+ */
+ _appPackageName: '',
+
+ get appPackageName() {
+ return this._appPackageName;
+ },
+
+ set appPackageName(val) {
+ if (this._appPackageName && val && val != this._appPackageName) {
+ throw new Error('appPackageName cannot change. Values do not match. New: ' + val + ' Old: ' + this._appPackageName);
+ }
+ if (val) {
+ this._appPackageName = val;
+ }
+ },
+
+ /**
+ * oauth2 argument, set by google-signin-aware
+ */
+ _requestVisibleActions: '',
+
+ get requestVisibleactions() {
+ return this._requestVisibleActions;
+ },
+
+ set requestVisibleactions(val) {
+ if (this._requestVisibleActions && val && val != this._requestVisibleActions) {
+ throw new Error('requestVisibleactions cannot change. Values do not match. New: ' + val + ' Old: ' + this._requestVisibleActions);
+ }
+ if (val)
+ this._requestVisibleActions = val;
+ },
+
+ /**
+ * oauth2 argument, set by google-signin-aware
+ */
+ _hostedDomain: '',
+
+ get hostedDomain() {
+ return this._hostedDomain;
+ },
+
+ set hostedDomain(val) {
+ if (this._hostedDomain && val && val != this._hostedDomain) {
+ throw new Error('hostedDomain cannot change. Values do not match. New: ' + val + ' Old: ' + this._hostedDomain);
+ }
+ if (val)
+ this._hostedDomain = val;
+ },
+
+ /**
+ * oauth2 argument, set by google-signin-aware
+ */
+ _openidPrompt: '',
+
+ get openidPrompt() {
+ return this._openidPrompt;
+ },
+
+ set openidPrompt(val) {
+ if (typeof val !== 'string') {
+ throw new Error(
+ 'openidPrompt must be a string. Received ' + typeof val);
+ }
+ if (val) {
+ var values = val.split(' ');
+ values = values.map(function(v) {
+ return v.trim();
+ });
+ values = values.filter(function(v) {
+ return v;
+ });
+ var validValues = {none: 0, login: 0, consent: 0, select_account: 0};
+ values.forEach(function(v) {
+ if (v == 'none' && values.length > 1) {
+ throw new Error(
+ 'none cannot be combined with other openidPrompt values');
+ }
+ if (!(v in validValues)) {
+ throw new Error(
+ 'invalid openidPrompt value ' + v +
+ '. Valid values: ' + Object.keys(validValues).join(', '));
+ }
+ });
+ }
+ this._openidPrompt = val;
+ },
+
+ /** Is offline access currently enabled in the google-signin-aware element? */
+ _offline: false,
+
+ get offline() {
+ return this._offline;
+ },
+
+ set offline(val) {
+ this._offline = val;
+ this.updateAdditionalAuth();
+ },
+
+ /** Should we force a re-prompt for offline access? */
+ _offlineAlwaysPrompt: false,
+
+ get offlineAlwaysPrompt() {
+ return this._offlineAlwaysPrompt;
+ },
+
+ set offlineAlwaysPrompt(val) {
+ this._offlineAlwaysPrompt = val;
+ this.updateAdditionalAuth();
+ },
+
+ /** Have we already gotten offline access from Google during this session? */
+ offlineGranted: false,
+
+ /** <google-js-api> */
+ _apiLoader: null,
+
+ /** an array of wanted scopes. oauth2 argument */
+ _requestedScopeArray: [],
+
+ /** _requestedScopeArray as string */
+ get requestedScopes() {
+ return this._requestedScopeArray.join(' ');
+ },
+
+ /** Is auth library initalized? */
+ _initialized: false,
+
+ /** Is user signed in? */
+ _signedIn: false,
+
+ /** Currently granted scopes */
+ _grantedScopeArray: [],
+
+ /** True if additional authorization is required */
+ _needAdditionalAuth: true,
+
+ /** True if have google+ scopes */
+ _hasPlusScopes: false,
+
+ /**
+ * array of <google-signin-aware>
+ * state changes are broadcast to them
+ */
+ signinAwares: [],
+
+ init: function() {
+ this._apiLoader = document.createElement('google-js-api');
+ this._apiLoader.addEventListener('js-api-load', this.loadAuth2.bind(this));
+ if (Polymer.Element) {
+ document.body.appendChild(this._apiLoader);
+ }
+ },
+
+ loadAuth2: function() {
+ gapi.load('auth2', this.initAuth2.bind(this));
+ },
+
+ initAuth2: function() {
+ if (!('gapi' in window) || !('auth2' in window.gapi) || !this.clientId) {
+ return;
+ }
+ var auth = gapi.auth2.init({
+ 'client_id': this.clientId,
+ 'cookie_policy': this.cookiePolicy,
+ 'scope': this.requestedScopes,
+ 'hosted_domain': this.hostedDomain
+ });
+
+ auth['currentUser'].listen(this.handleUserUpdate.bind(this));
+
+ auth.then(
+ function onFulfilled() {
+ // Let the current user listener trigger the changes.
+ },
+ function onRejected(error) {
+ console.error(error);
+ }
+ );
+ },
+
+ handleUserUpdate: function(newPrimaryUser) {
+ // update and broadcast currentUser
+ var isSignedIn = newPrimaryUser.isSignedIn();
+ if (isSignedIn != this._signedIn) {
+ this._signedIn = isSignedIn;
+ for (var i=0; i<this.signinAwares.length; i++) {
+ this.signinAwares[i]._setSignedIn(isSignedIn);
+ }
+ }
+ // update and broadcast initialized property the first time the isSignedIn property is set.
+ if(!this._initialized) {
+ for (var i=0; i<this.signinAwares.length; i++) {
+ this.signinAwares[i]._setInitialized(true);
+ }
+ this._initialized = true;
+ }
+
+
+ // update granted scopes
+ this._grantedScopeArray = this.strToScopeArray(
+ newPrimaryUser.getGrantedScopes());
+ // console.log(this._grantedScopeArray);
+ this.updateAdditionalAuth();
+
+ var response = newPrimaryUser.getAuthResponse();
+ for (var i=0; i<this.signinAwares.length; i++) {
+ this.signinAwares[i]._updateScopeStatus(response);
+ }
+ },
+
+ setOfflineCode: function(code) {
+ for (var i=0; i<this.signinAwares.length; i++) {
+ this.signinAwares[i]._updateOfflineCode(code);
+ }
+ },
+
+ /** convert scope string to scope array */
+ strToScopeArray: function(str) {
+ if (!str) {
+ return [];
+ }
+ // remove extra spaces, then split
+ var scopes = str.replace(/\ +/g, ' ').trim().split(' ');
+ for (var i=0; i<scopes.length; i++) {
+ scopes[i] = scopes[i].toLowerCase();
+ // Handle scopes that will be deprecated but are still returned with their old value
+ if (scopes[i] === 'https://www.googleapis.com/auth/userinfo.profile') {
+ scopes[i] = 'profile';
+ }
+ if (scopes[i] === 'https://www.googleapis.com/auth/userinfo.email') {
+ scopes[i] = 'email';
+ }
+ }
+ // return with duplicates filtered out
+ return scopes.filter( function(value, index, self) {
+ return self.indexOf(value) === index;
+ });
+ },
+
+ /** true if scopes have google+ scopes */
+ isPlusScope: function(scope) {
+ return (scope.indexOf('/auth/games') > -1)
+ || (scope.indexOf('auth/plus.') > -1 && scope.indexOf('auth/plus.me') < 0);
+ },
+
+ /** true if scopes have been granted */
+ hasGrantedScopes: function(scopeStr) {
+ var scopes = this.strToScopeArray(scopeStr);
+ for (var i=0; i< scopes.length; i++) {
+ if (this._grantedScopeArray.indexOf(scopes[i]) === -1)
+ return false;
+ }
+ return true;
+ },
+
+ /** request additional scopes */
+ requestScopes: function(newScopeStr) {
+ var newScopes = this.strToScopeArray(newScopeStr);
+ var scopesUpdated = false;
+ for (var i=0; i<newScopes.length; i++) {
+ if (this._requestedScopeArray.indexOf(newScopes[i]) === -1) {
+ this._requestedScopeArray.push(newScopes[i]);
+ scopesUpdated = true;
+ }
+ }
+ if (scopesUpdated) {
+ this.updateAdditionalAuth();
+ this.updatePlusScopes();
+ }
+ },
+
+ /** update status of _needAdditionalAuth */
+ updateAdditionalAuth: function() {
+ var needMoreAuth = false;
+ if ((this.offlineAlwaysPrompt || this.offline ) && !this.offlineGranted) {
+ needMoreAuth = true;
+ } else {
+ for (var i=0; i<this._requestedScopeArray.length; i++) {
+ if (this._grantedScopeArray.indexOf(this._requestedScopeArray[i]) === -1) {
+ needMoreAuth = true;
+ break;
+ }
+ }
+ }
+ if (this._needAdditionalAuth != needMoreAuth) {
+ this._needAdditionalAuth = needMoreAuth;
+ // broadcast new value
+ for (var i=0; i<this.signinAwares.length; i++) {
+ this.signinAwares[i]._setNeedAdditionalAuth(needMoreAuth);
+ }
+ }
+ },
+
+ updatePlusScopes: function() {
+ var hasPlusScopes = false;
+ for (var i = 0; i < this._requestedScopeArray.length; i++) {
+ if (this.isPlusScope(this._requestedScopeArray[i])) {
+ hasPlusScopes = true;
+ break;
+ }
+ }
+ if (this._hasPlusScopes != hasPlusScopes) {
+ this._hasPlusScopes = hasPlusScopes;
+ for (var i=0; i<this.signinAwares.length; i++) {
+ this.signinAwares[i]._setHasPlusScopes(hasPlusScopes);
+ }
+ }
+ },
+ /**
+ * attached <google-signin-aware>
+ * @param {!GoogleSigninAwareElement} aware element to add
+ */
+ attachSigninAware: function(aware) {
+ if (this.signinAwares.indexOf(aware) == -1) {
+ this.signinAwares.push(aware);
+ // Initialize aware properties
+ aware._setNeedAdditionalAuth(this._needAdditionalAuth);
+ aware._setInitialized(this._initialized);
+ aware._setSignedIn(this._signedIn);
+ aware._setHasPlusScopes(this._hasPlusScopes);
+ } else {
+ console.warn('signinAware attached more than once', aware);
+ }
+ },
+
+ detachSigninAware: function(aware) {
+ var index = this.signinAwares.indexOf(aware);
+ if (index != -1) {
+ this.signinAwares.splice(index, 1);
+ } else {
+ console.warn('Trying to detach unattached signin-aware');
+ }
+ },
+
+ /** returns scopes not granted */
+ getMissingScopes: function() {
+ return this._requestedScopeArray.filter( function(scope) {
+ return this._grantedScopeArray.indexOf(scope) === -1;
+ }.bind(this)).join(' ');
+ },
+
+ assertAuthInitialized: function() {
+ if (!this.clientId) {
+ throw new Error("AuthEngine not initialized. clientId has not been configured.");
+ }
+ if (!('gapi' in window)) {
+ throw new Error("AuthEngine not initialized. gapi has not loaded.");
+ }
+ if (!('auth2' in window.gapi)) {
+ throw new Error("AuthEngine not initialized. auth2 not loaded.");
+ }
+ },
+
+ /** pops up sign-in dialog */
+ signIn: function() {
+ this.assertAuthInitialized();
+ var params = {
+ 'scope': this.getMissingScopes()
+ };
+
+ // Proxy specific attributes through to the signIn options.
+ Object.keys(ProxyLoginAttributes).forEach(function(key) {
+ if (this[key] && this[key] !== '') {
+ params[ProxyLoginAttributes[key]] = this[key];
+ }
+ }, this);
+
+ var promise;
+ var user = gapi.auth2.getAuthInstance()['currentUser'].get();
+ if (!(this.offline || this.offlineAlwaysPrompt)) {
+ if (user.getGrantedScopes()) {
+ // additional auth, skip multiple account dialog
+ promise = user.grant(params);
+ } else {
+ // initial signin
+ promise = gapi.auth2.getAuthInstance().signIn(params);
+ }
+ } else {
+ params.redirect_uri = 'postmessage';
+ if (this.offlineAlwaysPrompt) {
+ params.approval_prompt = 'force';
+ }
+
+ // Despite being documented at https://goo.gl/tiO0Bk
+ // It doesn't seem like user.grantOfflineAccess() actually exists in
+ // the current version of the Google Sign-In JS client we're using
+ // through GoogleWebComponents. So in the offline case, we will not
+ // distinguish between a first auth and an additional one.
+ promise = gapi.auth2.getAuthInstance().grantOfflineAccess(params);
+ }
+ promise.then(
+ function onFulfilled(response) {
+ // If login was offline, response contains one string "code"
+ // Otherwise it contains the user object already
+ var newUser;
+ if (response.code) {
+ AuthEngine.offlineGranted = true;
+ newUser = gapi.auth2.getAuthInstance()['currentUser'].get();
+ AuthEngine.setOfflineCode(response.code);
+ } else {
+ newUser = response;
+ }
+
+ var authResponse = newUser.getAuthResponse();
+ // Let the current user listener trigger the changes.
+ },
+ function onRejected(error) {
+ // Access denied is not an error, user hit cancel
+ if ("Access denied." !== error.reason) {
+ this.signinAwares.forEach(function(awareInstance) {
+ awareInstance.errorNotify(error);
+ });
+ }
+ }.bind(this)
+ );
+ },
+
+ /** signs user out */
+ signOut: function() {
+ this.assertAuthInitialized();
+ gapi.auth2.getAuthInstance().signOut().then(
+ function onFulfilled() {
+ // Let the current user listener trigger the changes.
+ },
+ function onRejected(error) {
+ console.error(error);
+ }
+ );
+ }
+ };
+
+ AuthEngine.init();
+
+/**
+`google-signin-aware` is used to enable authentication in custom elements by
+interacting with a google-signin element that needs to be present somewhere
+on the page.
+
+The `scopes` attribute allows you to specify which scope permissions are required
+(e.g do you want to allow interaction with the Google Drive API).
+
+The `google-signin-aware-success` event is triggered when a user successfully
+authenticates. If either `offline` or `offlineAlwaysPrompt` is set to true, successful
+authentication will also trigger the `google-signin-offline-success`event.
+The `google-signin-aware-signed-out` event is triggered when a user explicitly
+signs out via the google-signin element.
+
+You can bind to `isAuthorized` property to monitor authorization state.
+##### Example
+
+ <google-signin-aware scopes="https://www.googleapis.com/auth/drive"></google-signin-aware>
+
+
+##### Example with offline
+ <template id="awareness" is="dom-bind">
+ <google-signin-aware
+ scopes="https://www.googleapis.com/auth/drive"
+ offline
+ on-google-signin-aware-success="handleSignin"
+ on-google-signin-offline-success="handleOffline"></google-signin-aware>
+ <\/template>
+ <script>
+ var aware = document.querySelector('#awareness');
+ aware.handleSignin = function(response) {
+ var user = gapi.auth2.getAuthInstance()['currentUser'].get();
+ console.log('User name: ' + user.getBasicProfile().getName());
+ };
+ aware.handleOffline = function(response) {
+ console.log('Offline code received: ' + response.detail.code);
+ // Here you would POST response.detail.code to your webserver, which can
+ // exchange the authorization code for an access token. More info at:
+ // https://developers.google.com/identity/protocols/OAuth2WebServer
+ };
+ <\/script>
+*/
+ Polymer({
+
+ is: 'google-signin-aware',
+
+ /**
+ * Fired when this scope has been authorized
+ * @param {Object} result Authorization result.
+ * @event google-signin-aware-success
+ */
+
+ /**
+ * Fired when an offline authorization is successful.
+ * @param {{code: string}} detail -
+ * code: The one-time authorization code from Google.
+ * Your application can exchange this for an `access_token` and `refresh_token`
+ * @event google-signin-offline-success
+ */
+
+ /**
+ * Fired when this scope is not authorized
+ * @event google-signin-aware-signed-out
+ */
+
+ /**
+ * Fired when there is an error during the signin flow.
+ * @param {Object} detail The error object returned from the OAuth 2 flow.
+ * @event google-signin-aware-error
+ */
+
+ /**
+ * This block is needed so the previous @param is not assigned to the next property.
+ */
+
+ properties: {
+ /**
+ * App package name for android over-the-air installs.
+ * See the relevant [docs](https://developers.google.com/+/web/signin/android-app-installs)
+ */
+ appPackageName: {
+ type: String,
+ observer: '_appPackageNameChanged'
+ },
+
+ /**
+ * a Google Developers clientId reference
+ */
+ clientId: {
+ type: String,
+ observer: '_clientIdChanged'
+ },
+
+ /**
+ * The cookie policy defines what URIs have access to the session cookie
+ * remembering the user's sign-in state.
+ * See the relevant [docs](https://developers.google.com/+/web/signin/reference#determining_a_value_for_cookie_policy) for more information.
+ * @default 'single_host_origin'
+ */
+ cookiePolicy: {
+ type: String,
+ observer: '_cookiePolicyChanged'
+ },
+
+ /**
+ * The app activity types you want to write on behalf of the user
+ * (e.g http://schemas.google.com/AddActivity)
+ *
+ */
+ requestVisibleActions: {
+ type: String,
+ observer: '_requestVisibleActionsChanged'
+ },
+
+ /**
+ * The Google Apps domain to which users must belong to sign in.
+ * See the relevant [docs](https://developers.google.com/identity/sign-in/web/reference) for more information.
+ */
+ hostedDomain: {
+ type: String,
+ observer: '_hostedDomainChanged'
+ },
+
+ /**
+ * Allows for offline `access_token` retrieval during the signin process.
+ * See also `offlineAlwaysPrompt`. You only need to set one of the two; if both
+ * are set, the behavior of `offlineAlwaysPrompt` will override `offline`.
+ */
+ offline: {
+ type: Boolean,
+ value: false,
+ observer: '_offlineChanged'
+ },
+
+ /**
+ * Works the same as `offline` with the addition that it will always
+ * force a re-prompt to the user, guaranteeing that you will get a
+ * refresh_token even if the user has already granted offline access to
+ * this application. You only need to set one of `offline` or
+ * `offlineAlwaysPrompt`, not both.
+ */
+ offlineAlwaysPrompt: {
+ type: Boolean,
+ value: false,
+ observer: '_offlineAlwaysPromptChanged'
+ },
+
+ /**
+ * The scopes to provide access to (e.g https://www.googleapis.com/auth/drive)
+ * and should be space-delimited.
+ */
+ scopes: {
+ type: String,
+ value: 'profile',
+ observer: '_scopesChanged'
+ },
+
+ /**
+ * Space-delimited, case-sensitive list of strings that
+ * specifies whether the the user is prompted for reauthentication
+ * and/or consent. The defined values are:
+ * none: do not display authentication or consent pages.
+ * This value is mutually exclusive with the rest.
+ * login: always prompt the user for reauthentication.
+ * consent: always show consent screen.
+ * select_account: always show account selection page.
+ * This enables a user who has multiple accounts to select amongst
+ * the multiple accounts that they might have current sessions for.
+ * For more information, see "prompt" parameter description in
+ * https://openid.net/specs/openid-connect-basic-1_0.html#RequestParameters
+ */
+ openidPrompt: {
+ type: String,
+ value: '',
+ observer: '_openidPromptChanged'
+ },
+
+ /**
+ * True when the auth library has been initialized, and signedIn property value is set from the first api response.
+ */
+ initialized: {
+ type: Boolean,
+ notify: true,
+ readOnly: true
+ },
+
+ /**
+ * True if user is signed in
+ */
+ signedIn: {
+ type: Boolean,
+ notify: true,
+ readOnly: true
+ },
+
+ /**
+ * True if authorizations for *this* element have been granted
+ */
+ isAuthorized: {
+ type: Boolean,
+ notify: true,
+ readOnly: true,
+ value: false
+ },
+
+ /**
+ * True if additional authorizations for *any* element are required
+ */
+ needAdditionalAuth: {
+ type: Boolean,
+ notify: true,
+ readOnly: true
+ },
+
+ /**
+ * True if *any* element has google+ scopes
+ */
+ hasPlusScopes: {
+ type: Boolean,
+ value: false,
+ notify: true,
+ readOnly: true
+ }
+ },
+
+ attached: function() {
+ AuthEngine.attachSigninAware(this);
+ },
+
+ detached: function() {
+ AuthEngine.detachSigninAware(this);
+ },
+
+ /** pops up the authorization dialog */
+ signIn: function() {
+ AuthEngine.signIn();
+ },
+
+ /** signs user out */
+ signOut: function() {
+ AuthEngine.signOut();
+ },
+
+ errorNotify: function(error) {
+ this.fire('google-signin-aware-error', error);
+ },
+
+ _appPackageNameChanged: function(newName, oldName) {
+ AuthEngine.appPackageName = newName;
+ },
+
+ _clientIdChanged: function(newId, oldId) {
+ AuthEngine.clientId = newId;
+ },
+
+ _cookiePolicyChanged: function(newPolicy, oldPolicy) {
+ AuthEngine.cookiePolicy = newPolicy;
+ },
+
+ _requestVisibleActionsChanged: function(newVal, oldVal) {
+ AuthEngine.requestVisibleActions = newVal;
+ },
+
+ _hostedDomainChanged: function(newVal, oldVal) {
+ AuthEngine.hostedDomain = newVal;
+ },
+
+ _offlineChanged: function(newVal, oldVal) {
+ AuthEngine.offline = newVal;
+ },
+
+ _offlineAlwaysPromptChanged: function(newVal, oldVal) {
+ AuthEngine.offlineAlwaysPrompt = newVal;
+ },
+
+ _scopesChanged: function(newVal, oldVal) {
+ AuthEngine.requestScopes(newVal);
+ this._updateScopeStatus(undefined);
+ },
+
+ _openidPromptChanged: function(newVal, oldVal) {
+ AuthEngine.openidPrompt = newVal;
+ },
+
+ _updateScopeStatus: function(user) {
+ var newAuthorized = this.signedIn && AuthEngine.hasGrantedScopes(this.scopes);
+ if (newAuthorized !== this.isAuthorized) {
+ this._setIsAuthorized(newAuthorized);
+ if (newAuthorized) {
+ this.fire('google-signin-aware-success', user);
+ }
+ else {
+ this.fire('google-signin-aware-signed-out', user);
+ }
+ }
+ },
+
+ _updateOfflineCode: function(code) {
+ if (code) {
+ this.fire('google-signin-offline-success', {code: code});
+ }
+ }
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-styles.html
new file mode 100644
index 00000000000..5a111199335
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin-styles.html
@@ -0,0 +1,267 @@
+<!--
+Copyright 2014 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<dom-module id="google-signin-styles">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ position: relative;
+ box-sizing: border-box;
+ margin: 0 0.29em;
+ background: transparent;
+ text-align: center;
+ font: inherit;
+ outline: none;
+ border-radius: 3px;
+ -webkit-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ z-index: 0;
+ }
+
+ :host([disabled]) {
+ cursor: auto;
+ pointer-events: none;
+ }
+
+ :host([disabled]) #button {
+ background: #eaeaea;
+ color: #a8a8a8;
+ }
+
+ #button {
+ position: relative;
+ outline: none;
+ font-size: 14px;
+ font-weight: 400;
+ font-family: 'RobotoDraft','Roboto',arial,sans-serif;
+ white-space: nowrap;
+ border-radius: inherit;
+ }
+
+ iron-icon {
+ width: 22px;
+ height: 22px;
+ margin: 6px;
+ }
+
+ .icon {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ #shadow {
+ border-radius: inherit;
+ }
+
+ #ripple {
+ pointer-events: none;
+ }
+
+ .button-content {
+ outline: none;
+ }
+
+ .buttonText {
+ display: inline-block;
+ vertical-align: middle;
+ padding-right: .8em;
+ }
+
+ /*
+ * Dark Theme
+ */
+ .theme-dark {
+ background: #da4336;
+ color: #ffffff;
+ border: 1px solid transparent;
+ }
+
+ .theme-dark.signedIn-true.additionalAuth-false {
+ background: #999;
+ border: 1px solid #888;
+ }
+
+ .theme-dark.signedIn-true.additionalAuth-false:hover,
+ .theme-dark.signedIn-true.additionalAuth-false:focus {
+ background: #aaa;
+ }
+
+ :host([noink]) .theme-dark:hover,
+ :host([noink]) .theme-dark:focus {
+ background: #e74b37;
+ }
+
+ :host([noink]) .theme-dark.signedIn-true.additionalAuth-false:hover,
+ :host([noink]) .theme-dark.signedIn-true.additionalAuth-false:focus {
+ background: #aaa;
+ }
+
+ /*
+ * Light Theme
+ */
+ .theme-light {
+ background: #fff;
+ color: #737373;
+ border: 1px solid #d9d9d9;
+ }
+
+ .theme-light.signedIn-true.additionalAuth-false {
+ background: #c0c0c0;
+ color: #fff;
+ border: #888 1px solid;
+ }
+
+ .theme-light.signedIn-true.additionalAuth-false:hover,
+ .theme-light.signedIn-true.additionalAuth-false:focus {
+ background: #aaa;
+ }
+
+ :host([noink]) .theme-light .button-content:hover,
+ :host([noink]) .theme-light:focus {
+ border: 1px solid #c0c0c0;
+ }
+
+ :host([noink]) .theme-light.signedIn-true.additionalAuth-false:hover,
+ :host([noink]) .theme-light.signedIn-true.additionalAuth-false:focus {
+ background: #aaa;
+ }
+
+ /*
+ * Icon Only Width
+ */
+ .width-iconOnly .buttonText {
+ display: none;
+ }
+
+ /*
+ * Tall Height
+ */
+ .height-tall .buttonText {
+ font-size: 15px;
+ font-weight: 700;
+ }
+
+ .height-tall iron-icon {
+ width: 30px;
+ height: 30px;
+ margin: 8px;
+ }
+
+ /*
+ * Short Height
+ */
+ .height-short .buttonText {
+ font-size: 11px;
+ }
+
+ .height-short iron-icon {
+ width: 16px;
+ height: 16px;
+ margin: 3px;
+ }
+
+
+ /*
+ * Branding
+ */
+
+ /* Google Scopes */
+
+ /* Dark Theme */
+ .brand-google.theme-dark {
+ background: #4184F3;
+ color: #fff;
+ border: 1px solid #3266d5;
+ }
+
+ .brand-google.theme-dark .icon {
+ background: #fff;
+ border-top-left-radius: 2px;
+ border-bottom-left-radius: 2px;
+ }
+
+ .brand-google.theme-dark.width-iconOnly .icon {
+ border-radius: 2px;
+ }
+
+ .brand-google.theme-dark .buttonText {
+ padding-left: .8em;
+ }
+
+ .brand-google.theme-dark #ripple {
+ color: #1b39a8;
+ }
+
+ :host([noink]) .brand-google.theme-dark:hover,
+ :host([noink]) .brand-google.theme-dark:focus {
+ background: #e74b37;
+ }
+
+ .brand-google.theme-light .icon {
+ color: #4184F3;
+ }
+
+ .brand-google.theme-light.signedIn-true.additionalAuth-false .icon {
+ color: #fff;
+ }
+
+ .brand-google.theme-light #ripple {
+ color: #444;
+ }
+
+ :host([noink]) .brand-google.theme-light:hover,
+ :host([noink]) .brand-google.theme-light:focus {
+ border: 1px solid #c0c0c0;
+ }
+
+ .brand-google-plus.theme-dark {
+ background: #da4336;
+ color: #fff;
+ border: 1px solid transparent;
+ }
+
+ .brand-google-plus.theme-dark #ripple {
+ color: #c43828;
+ }
+
+ /* Light Theme */
+ .brand-google-plus.theme-light {
+ background: #fff;
+ color: #737373;
+ border: 1px solid #d9d9d9;
+ }
+
+ .brand-google-plus.theme-light .icon {
+ color: #e74b37;
+ }
+
+ .brand-google-plus.theme-light.signedIn-true.additionalAuth-false .icon {
+ color: #fff;
+ }
+
+ .brand-google-plus.theme-light #ripple {
+ color: #400;
+ }
+
+ :host([noink]) .brand-google-plus.theme-light:hover,
+ :host([noink]) .brand-google-plus.theme-light:focus {
+ border: 1px solid #c0c0c0;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin.html
new file mode 100644
index 00000000000..dfafc8cecc5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/google-signin.html
@@ -0,0 +1,596 @@
+<!--
+Copyright 2014 Google Inc
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="google-signin-aware.html">
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../font-roboto/roboto.html">
+<link rel="import" href="../google-apis/google-js-api.html">
+<link rel="import" href="../paper-ripple/paper-ripple.html">
+<link rel="import" href="../paper-material/paper-material.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout-classes.html">
+<link rel="import" href="google-icons.html">
+<link rel="import" href="google-signin-styles.html">
+
+<dom-module id="google-signin">
+ <template>
+ <style include="google-signin-styles iron-positioning"></style>
+
+ <google-signin-aware id="aware"
+ app-package-name="{{appPackageName}}"
+ client-id="{{clientId}}"
+ cookie-policy="{{cookiePolicy}}"
+ request-visible-actions="{{requestVisibleActions}}"
+ hosted-domain="{{hostedDomain}}"
+ offline="{{offline}}"
+ offline-always-prompt="{{offlineAlwaysPrompt}}"
+ scopes="{{scopes}}"
+ openid-prompt="{{openidPrompt}}"
+ initialized="{{initialized}}"
+ signed-in="{{signedIn}}"
+ is-authorized="{{isAuthorized}}"
+ need-additional-auth="{{needAdditionalAuth}}"
+ has-plus-scopes="{{hasPlusScopes}}"></google-signin-aware>
+ <template is="dom-if" if="{{raised}}">
+ <paper-material id="shadow" class="fit" elevation="2" animated></paper-material>
+ </template>
+ <div id="button"
+ class$="[[_computeButtonClass(height, width, theme, signedIn, _brand, needAdditionalAuth)]]">
+
+ <paper-ripple id="ripple" class="fit"></paper-ripple>
+ <!-- this div is needed to position the ripple behind text content -->
+ <div>
+ <template is="dom-if" if="{{_computeButtonIsSignIn(signedIn, needAdditionalAuth)}}">
+ <div class="button-content signIn" tabindex="0"
+ on-click="signIn" on-keydown="_signInKeyPress">
+ <span class="icon"><iron-icon icon="[[_brandIcon]]"></iron-icon></span>
+ <span class="buttonText">{{_labelSignin}}</span>
+ </div>
+ </template>
+ <template is="dom-if" if="{{_computeButtonIsSignOut(signedIn, needAdditionalAuth) }}">
+ <div class="button-content signOut" tabindex="0"
+ on-click="signOut" on-keydown="_signOutKeyPress">
+ <span class="icon"><iron-icon icon="[[_brandIcon]]"></iron-icon></span>
+ <span class="buttonText">{{labelSignout}}</span>
+ </div>
+ </template>
+ <template is="dom-if" if="{{_computeButtonIsSignOutAddl(signedIn, needAdditionalAuth) }}">
+ <div class="button-content signIn" tabindex="0"
+ on-click="signIn" on-keydown="_signInKeyPress">
+ <span class="icon"><iron-icon icon="[[_brandIcon]]"></iron-icon></span>
+ <span class="buttonText">{{labelAdditional}}</span>
+ </div>
+ </template>
+ </div>
+
+ </div>
+ </template>
+</dom-module>
+<script>
+ (function() {
+
+ /**
+ * Enum brand values.
+ * @readonly
+ * @enum {string}
+ */
+ var BrandValue = {
+ GOOGLE: 'google',
+ PLUS: 'google-plus'
+ };
+
+ /**
+ * Enum height values.
+ * @readonly
+ * @enum {string}
+ */
+ var HeightValue = {
+ SHORT: 'short',
+ STANDARD: 'standard',
+ TALL: 'tall'
+ };
+
+ /**
+ * Enum button label default values.
+ * @readonly
+ * @enum {string}
+ */
+ var LabelValue = {
+ STANDARD: 'Sign in',
+ WIDE: 'Sign in with Google',
+ WIDE_PLUS: 'Sign in with Google+'
+ };
+
+ /**
+ * Enum theme values.
+ * @readonly
+ * @enum {string}
+ */
+ var ThemeValue = {
+ LIGHT: 'light',
+ DARK: 'dark'
+ };
+
+ /**
+ * Enum width values.
+ * @readonly
+ * @enum {string}
+ */
+ var WidthValue = {
+ ICON_ONLY: 'iconOnly',
+ STANDARD: 'standard',
+ WIDE: 'wide'
+ };
+
+/**
+&lt;google-signin&gt; is used to authenticate with Google, allowing you to interact
+with other Google APIs such as Drive and Google+.
+
+<img style="max-width:100%;" src="https://cloud.githubusercontent.com/assets/107076/6791176/5c868822-d16a-11e4-918c-ec9b84a2db45.png"/>
+
+If you do not need to show the button, use companion `<google-signin-aware>` element to declare scopes, check authentication state.
+
+#### Examples
+
+ <google-signin client-id="..." scopes="https://www.googleapis.com/auth/drive"></google-signin>
+
+ <google-signin label-signin="Sign-in" client-id="..." scopes="https://www.googleapis.com/auth/drive"></google-signin>
+
+ <google-signin theme="dark" width="iconOnly" client-id="..." scopes="https://www.googleapis.com/auth/drive"></google-signin>
+
+
+#### Notes
+
+The attribute `clientId` is provided in your Google Developers Console
+(https://console.developers.google.com).
+
+The `scopes` attribute allows you to specify which scope permissions are required
+(e.g do you want to allow interaction with the Google Drive API). Many APIs also
+need to be enabled in the Google Developers Console before you can use them.
+
+The `requestVisibleActions` attribute is necessary if you want to write app
+activities (https://developers.google.com/+/web/app-activities/) on behalf of
+the user. Please note that this attribute is only valid in combination with the
+plus.login scope (https://www.googleapis.com/auth/plus.login).
+
+The `offline` attribute allows you to get an auth code which your server can
+redeem for an offline access token
+(https://developers.google.com/identity/sign-in/web/server-side-flow).
+You can also set `offline-always-prompt` instead of `offline` to ensure that your app
+will re-prompt the user for offline access and generate a working `refresh_token`
+even if they have already granted offline access to your app in the past.
+
+Use label properties to customize prompts.
+
+The button can be styled in using the `height`, `width`, and `theme` attributes.
+These attributes help you follow the Google+ Sign-In button branding guidelines
+(https://developers.google.com/+/branding-guidelines).
+
+The `google-signin-success` event is triggered when a user successfully authenticates
+and `google-signed-out` is triggered when user signs out.
+You can also use `isAuthorized` attribute to observe user's authentication state.
+
+Additional events, such as `google-signout-attempted` are
+triggered when the user attempts to sign-out and successfully signs out.
+
+When requesting offline access, the `google-signin-offline-success` event is
+triggered when the user successfully consents with offline support.
+
+The `google-signin-necessary` event is fired when scopes requested via
+google-signin-aware elements require additional user permissions.
+
+#### Testing
+
+By default, the demo accompanying this element is setup to work on localhost with
+port 8080. That said, you *should* update the `clientId` to your own one for
+any apps you're building. See the Google Developers Console
+(https://console.developers.google.com) for more info.
+
+@demo
+*/
+
+ Polymer({
+
+ is: 'google-signin',
+
+ /**
+ * Fired when user is signed in.
+ * You can use auth2 api to retrieve current user: `gapi.auth2.getAuthInstance()['currentUser'].get();`
+ * @event google-signin-success
+ */
+
+ /**
+ * Fired when the user is signed-out.
+ * @event google-signed-out
+ */
+
+ /**
+ * Fired if user requires additional authorization
+ * @event google-signin-necessary
+ */
+
+ /**
+ * Fired when signed in, and scope has been authorized
+ * @param {Object} result Authorization result.
+ * @event google-signin-aware-success
+ */
+
+ /**
+ * Fired when there is an error during the signin flow.
+ * @param {Object} detail The error object returned from the OAuth 2 flow.
+ * @event google-signin-aware-error
+ */
+
+ /**
+ * Fired when an offline authorization is successful.
+ * @param {{code: string}} detail -
+ * code: The one-time authorization code from Google.
+ * Your application can exchange this for an `access_token` and `refresh_token`
+ * @event google-signin-offline-success
+ */
+
+ /**
+ * This block is needed so the previous @param is not assigned to the next property.
+ */
+
+ properties: {
+ /**
+ * App package name for android over-the-air installs.
+ * See the relevant [docs](https://developers.google.com/+/web/signin/android-app-installs)
+ */
+ appPackageName: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * The brand being used for logo and styling.
+ *
+ * @default 'google'
+ */
+ brand: {
+ type: String,
+ value: ''
+ },
+
+ /** @private */
+ _brand: {
+ type: String,
+ computed: '_computeBrand(brand, hasPlusScopes)'
+ },
+
+ /**
+ * a Google Developers clientId reference
+ */
+ clientId: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * The cookie policy defines what URIs have access to the session cookie
+ * remembering the user's sign-in state.
+ * See the relevant [docs](https://developers.google.com/+/web/signin/reference#determining_a_value_for_cookie_policy) for more information.
+ *
+ * @default 'single_host_origin'
+ */
+ cookiePolicy: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * The height to use for the button.
+ *
+ * Available options: short, standard, tall.
+ *
+ * @type {string}
+ */
+ height: {
+ type: String,
+ value: 'standard'
+ },
+
+ /**
+ * By default the ripple expands to fill the button. Set this to true to
+ * constrain the ripple to a circle within the button.
+ */
+ fill: {
+ type: Boolean,
+ value: true
+ },
+
+ /**
+ * An optional label for the button for additional permissions.
+ */
+ labelAdditional: {
+ type: String,
+ value: 'Additional permissions required'
+ },
+
+ /**
+ * An optional label for the sign-in button.
+ */
+ labelSignin: {
+ type: String,
+ value: ''
+ },
+
+ _labelSignin: {
+ type: String,
+ computed: '_computeSigninLabel(labelSignin, width, _brand)'
+ },
+
+ /**
+ * An optional label for the sign-out button.
+ */
+ labelSignout: {
+ type: String,
+ value: 'Sign out'
+ },
+
+ /**
+ * If true, the button will be styled with a shadow.
+ */
+ raised: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * The app activity types you want to write on behalf of the user
+ * (e.g http://schemas.google.com/AddActivity)
+ */
+ requestVisibleActions: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * The Google Apps domain to which users must belong to sign in.
+ * See the relevant [docs](https://developers.google.com/identity/sign-in/web/reference) for more information.
+ */
+ hostedDomain: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * Allows for offline `access_token` retrieval during the signin process.
+ */
+ offline: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Forces a re-prompt, even if the user has already granted offline
+ * access to your application in the past. You only need one of
+ * `offline` and `offlineAlwaysPrompt`.
+ */
+ offlineAlwaysPrompt: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * The scopes to provide access to (e.g https://www.googleapis.com/auth/drive)
+ * and should be space-delimited.
+ */
+ scopes: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * Space-delimited, case-sensitive list of strings that
+ * specifies whether the the user is prompted for reauthentication
+ * and/or consent. The defined values are:
+ * none: do not display authentication or consent pages.
+ * This value is mutually exclusive with the rest.
+ * login: always prompt the user for reauthentication.
+ * consent: always show consent screen.
+ * select_account: always show account selection page.
+ * This enables a user who has multiple accounts to select amongst
+ * the multiple accounts that they might have current sessions for.
+ * For more information, see "prompt" parameter description in
+ * https://openid.net/specs/openid-connect-basic-1_0.html#RequestParameters
+ */
+ openidPrompt: {
+ type: String,
+ value: ''
+ },
+
+ /**
+ * The theme to use for the button.
+ *
+ * Available options: light, dark.
+ *
+ * @attribute theme
+ * @type {string}
+ * @default 'dark'
+ */
+ theme: {
+ type: String,
+ value: 'light'
+ },
+
+ /**
+ * The width to use for the button.
+ *
+ * Available options: iconOnly, standard, wide.
+ *
+ * @type {string}
+ */
+ width: {
+ type: String,
+ value: 'standard'
+ },
+
+ _brandIcon: {
+ type: String,
+ computed: '_computeIcon(_brand)'
+ },
+
+ /**
+ * True if *any* element has google+ scopes
+ */
+ hasPlusScopes: {
+ type: Boolean,
+ notify: true,
+ value: false
+ },
+
+ /**
+ * True if additional authorization required globally
+ */
+ needAdditionalAuth: {
+ type: Boolean,
+ notify: true,
+ value: false
+ },
+
+ /**
+ * True when the auth library has been initialized, and signedIn property value is set from the first api response.
+ */
+ initialized: {
+ type: Boolean,
+ notify: true,
+ value: false
+ },
+
+ /**
+ * Is user signed in?
+ */
+ signedIn: {
+ type: Boolean,
+ notify: true,
+ value: false,
+ observer: '_observeSignedIn'
+ },
+
+ /**
+ * True if authorizations for *this* element have been granted
+ */
+ isAuthorized: {
+ type: Boolean,
+ notify: true,
+ value: false
+ }
+
+ },
+
+ _computeButtonClass: function(height, width, theme, signedIn, brand, needAdditionalAuth) {
+ return "height-" + height + " width-" + width + " theme-" + theme + " signedIn-" + signedIn + " brand-" + brand + " additionalAuth-" + needAdditionalAuth;
+ },
+
+ _computeIcon: function(brand) {
+ return "google:" + brand;
+ },
+
+ /* Button state computed */
+ _computeButtonIsSignIn: function(signedIn, additionalAuth) {
+ return !signedIn;
+ },
+
+ _computeButtonIsSignOut: function(signedIn, additionalAuth) {
+ return signedIn && !additionalAuth;
+ },
+
+ _computeButtonIsSignOutAddl: function(signedIn, additionalAuth) {
+ return signedIn && additionalAuth;
+ },
+
+ _computeBrand: function(attrBrand, hasPlusScopes) {
+ var newBrand;
+ if (attrBrand) {
+ newBrand = attrBrand;
+ } else if (hasPlusScopes) {
+ newBrand = BrandValue.PLUS;
+ } else {
+ newBrand = BrandValue.GOOGLE;
+ };
+ return newBrand;
+ },
+
+ _observeSignedIn: function(newVal, oldVal) {
+ if (newVal) {
+ if (this.needAdditionalAuth) {
+ this.fire('google-signin-necessary');
+ }
+ this.fire('google-signin-success');
+ }
+ // Use `oldVal` avoids to fire the event at the initialization of
+ // `signedIn`.
+ else if (oldVal) {
+ this.fire('google-signed-out');
+ }
+ },
+
+ /**
+ * Determines the proper label based on the attributes.
+ */
+ _computeSigninLabel: function(labelSignin, width, _brand) {
+ if (labelSignin) {
+ return labelSignin;
+ } else {
+ switch(width) {
+
+ case WidthValue.WIDE:
+ return (_brand == BrandValue.PLUS) ?
+ LabelValue.WIDE_PLUS : LabelValue.WIDE;
+
+ case WidthValue.STANDARD:
+ return LabelValue.STANDARD;
+
+ case WidthValue.ICON_ONLY:
+ return '';
+
+ default:
+ console.warn("bad width value: ", width);
+ return LabelValue.STANDARD;
+ }
+ }
+ },
+
+ /** Sign in user. Opens the authorization dialog for signing in.
+ * The dialog will be blocked by a popup blocker unless called inside click handler.
+ */
+ signIn: function () {
+ this.$.aware.signIn();
+ },
+
+ _signInKeyPress: function (e) {
+ if (e.which == 13 || e.keyCode == 13 || e.which == 32 || e.keyCode == 32) {
+ e.preventDefault();
+ this.signIn();
+ }
+ },
+
+ /** Sign out the user */
+ signOut: function () {
+ this.fire('google-signout-attempted');
+ this.$.aware.signOut();
+ },
+
+ _signOutKeyPress: function (e) {
+ if (e.which == 13 || e.keyCode == 13 || e.which == 32 || e.keyCode == 32) {
+ e.preventDefault();
+ this.signOut();
+ }
+ }
+ });
+ }());
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/index.html
new file mode 100644
index 00000000000..e8f85ae269b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/google-signin/index.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<!-- Copyright (c) 2014 Google Inc. All rights reserved. -->
+<html>
+<head>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.bower.json
new file mode 100644
index 00000000000..cfc23be12aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.bower.json
@@ -0,0 +1,65 @@
+{
+ "name": "iron-a11y-announcer",
+ "version": "2.1.0",
+ "description": "A singleton element that simplifies announcing text to screen readers.",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "a11y",
+ "live"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-a11y-announcer.git"
+ },
+ "main": "iron-a11y-announcer.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-a11y-announcer",
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "7e2c529fcb96582cb8c13905896fcf8496763966"
+ },
+ "_source": "https://github.com/PolymerElements/iron-a11y-announcer.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-a11y-announcer"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..594376ff9e7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-a11y-announcer/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.travis.yml
new file mode 100644
index 00000000000..d13ba205987
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ QlyQxWnziNgzWqptOtM0Oq1s/q6YHT/GPuslA31yC0nex7Wi6X9DFoF5rNlDEY0Y6WxCh8xzsZpwXrI9vZypgKoZlAwO1e3RLDsGV0APPrWg66MyImAwlHAJolvJg+ASsLJ8pm9nxMP/xapRamciqUMTUTeZh0V/5SR82BXQCf3zXe+9cMmAFNXBrIg6LDCm77AwW+1vkE/IZAL1oShSBwXEybn9kpYsdCiOGdnvMlChhaeqRlOUXkr3LHPUDtV8hbd2EswmPeHSV+RGdB/UFyRGa4g7gPgqtz7U2FS0/BqT0G2iJlAXGCttJnS6fXwyCriREplYjXzqrX0MeRWHD5vNxAucO/Va1n2tHEmJM3OhIYgO8VDM8S3nRRUDE/ifSjsu1UgBN7b1vml0zWo7rdvpD8fedx6+g4ph390kg5XRFNJZJ03YijfcNVUfnOTEWt9LntGRq5aKPB6RSbEvkuZFjLGHHD/xQu2LfyIjmueIWJNk4JeCNrm3zFPMhBAZfu7WTJPTk3dZ2L+0mty1QbaJ/lyTWIBYbTVBwwHzXKrPbgg5u/9e6DjhT8Zg/eJvmN/+sXAlUqnmTAE9coQ0LIivg6COWPoRDmdGl2uMygiCaLkFAy4sqhjP99Aq5/ekZWXUrTTa4NGw2qnvM4JY9YcEzUC0ZqzM11gj8x8ATi0=
+ - secure: >-
+ d0wz93AwXyNVmCr33od+TFC51nZgUzcdwHiJWxX0E+msZ8VgYCjj21D6OOZy84O7vYiPFy8vO03dvyqkj1uclEvfu2YlfiEaRxifKaxN6mQx142WjBtdHFjEUfBJR5eqm5qSeGj7aSZzPgerUl6yAkYH5tFldBatevF5Ax98Yr1dCsgpegsLCmBmusPH7tERnBilalcvXKVBfRXrnrkFkVoWroBb04W79aZSTlLGTlpBJCzR9Xe7RiXqnanSQQb1LjyCl55P0NvVVRjwpoVnikRqkIV/jehcNfIiJSC/vetepqqUehD6RdP2T8Nio7YvlLtXnW9vptlKYL2uZjhg23DyhgGW/4ZPaIABWVBqVUBbyaX6GCXo3EMyQcZhi17qCWEKnFGCrorC/4ZM6A0kJ+olOfQxszf9HrAX8+9DCaiKscn2Lz+ON/opFKFRAQngCJ9swBc27twavUxx4qNzOVJLdH8oGhCdl5DA4mgGGDWZz463X0HzagGUpi/RfME26uQnTkyK8eErL2yac+1VmA/QOx0RkYlrZ/pIEywkZPWusjJepCm9nlZGylaBr2mDpk8Kea+7IytO6sefiBwjX1RiqmnjnszO3jb/w5s0giUItWuFmDr14sOaFmj6wQB643eSGi42LSPG+FMea1RwUupyEPeLZq/aoJ0jmewGLv4=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/README.md
new file mode 100644
index 00000000000..8b997a30770
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/README.md
@@ -0,0 +1,55 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-a11y-announcer.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-a11y-announcer.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-a11y-announcer)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-a11y-announcer)_
+
+
+##&lt;iron-a11y-announcer&gt;
+
+`iron-a11y-announcer` is a singleton element that is intended to add a11y
+to features that require on-demand announcement from screen readers. In
+order to make use of the announcer, it is best to request its availability
+in the announcing element.
+
+Example:
+
+```javascript
+Polymer({
+
+ is: 'x-chatty',
+
+ attached: function() {
+ // This will create the singleton element if it has not
+ // been created yet:
+ Polymer.IronA11yAnnouncer.requestAvailability();
+ }
+});
+```
+
+After the `iron-a11y-announcer` has been made available, elements can
+make announces by firing bubbling `iron-announce` events.
+
+Example:
+
+```javascript
+this.fire('iron-announce', {
+ text: 'This is an announcement!'
+}, { bubbles: true });
+```
+
+Note: announcements are only audible if you have a screen reader enabled.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/bower.json
new file mode 100644
index 00000000000..524c047bdfe
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/bower.json
@@ -0,0 +1,55 @@
+{
+ "name": "iron-a11y-announcer",
+ "version": "2.0.0",
+ "description": "A singleton element that simplifies announcing text to screen readers.",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "a11y",
+ "live"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-a11y-announcer.git"
+ },
+ "main": "iron-a11y-announcer.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/index.html
new file mode 100644
index 00000000000..8d5aa4c45b6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/index.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>iron-a11y-announcer demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../paper-button/paper-button.html">
+ <link rel="import" href="x-announces.html">
+ <link rel="import" href="../iron-a11y-announcer.html">
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ input {
+ margin-right: 20px;
+ }
+ </style>
+ </custom-style>
+</head>
+<body>
+ <div class="vertical-section-container centered">
+ <p><b>Note</b>: in order to hear the announcements, be sure to turn on your favorite screen reader!</p>
+
+ <h4>Announcer used directly on the main document</h4>
+ <demo-snippet>
+ <template>
+ <input id="input" value="Pizza is delicious">
+ <paper-button raised onclick="_announce()">Announce</paper-button>
+
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ // Initialize the announcer.
+ Polymer.IronA11yAnnouncer.requestAvailability();
+
+ // Optional; for testing, set the mode to assertive to announce immediately.
+ Polymer.IronA11yAnnouncer.instance.mode = 'assertive';
+ });
+
+ function _announce() {
+ Polymer.IronA11yAnnouncer.instance.fire('iron-announce', {
+ text: input.value.trim()
+ }, {
+ bubbles: true
+ });
+ }
+ </script>
+ </template>
+ </demo-snippet>
+
+ <h4>Announcer used inside a custom element</h4>
+ <demo-snippet>
+ <template>
+ <x-announces message="Hello, my name is Ava"></x-announces>
+ <x-announces message="This true sentence is false."></x-announces>
+ <x-announces message="Are you paying attention?"></x-announces>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/x-announces.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/x-announces.html
new file mode 100644
index 00000000000..b46d49d5e6d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/demo/x-announces.html
@@ -0,0 +1,55 @@
+<!--
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
+The complete set of authors may be found at http://polymer.github.io/AUTHORS
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-announcer.html">
+<link rel="import" href="../../paper-button/paper-button.html">
+
+<dom-module id="x-announces">
+ <template>
+ <style>
+ :host {
+ display: block;
+ padding: 1em 0;
+ font-family: inherit;
+ }
+ </style>
+
+ <span>[[message]]</span>
+ <paper-button raised on-tap="_onTapAnnounce">Announce</paper-button>
+
+ </template>
+ <script>
+ Polymer({
+ is: 'x-announces',
+
+ hostAttributes: {
+ 'aria-hidden': 'true'
+ },
+
+ properties: {
+ message: {
+ type: String
+ }
+ },
+
+ attached: function() {
+ Polymer.IronA11yAnnouncer.requestAvailability();
+ },
+
+ _onTapAnnounce: function() {
+ this.fire('iron-announce', {
+ text: this.message.trim()
+ }, {
+ bubbles: true
+ });
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/index.html
new file mode 100644
index 00000000000..1f8889a8da9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <title>iron-a11y-announcer</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.d.ts
new file mode 100644
index 00000000000..e777c3720ce
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.d.ts
@@ -0,0 +1,68 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-a11y-announcer.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `iron-a11y-announcer` is a singleton element that is intended to add a11y
+ * to features that require on-demand announcement from screen readers. In
+ * order to make use of the announcer, it is best to request its availability
+ * in the announcing element.
+ *
+ * Example:
+ *
+ * Polymer({
+ *
+ * is: 'x-chatty',
+ *
+ * attached: function() {
+ * // This will create the singleton element if it has not
+ * // been created yet:
+ * Polymer.IronA11yAnnouncer.requestAvailability();
+ * }
+ * });
+ *
+ * After the `iron-a11y-announcer` has been made available, elements can
+ * make announces by firing bubbling `iron-announce` events.
+ *
+ * Example:
+ *
+ * this.fire('iron-announce', {
+ * text: 'This is an announcement!'
+ * }, { bubbles: true });
+ *
+ * Note: announcements are only audible if you have a screen reader enabled.
+ */
+ class IronA11yAnnouncer extends Polymer.Element {
+
+ /**
+ * The value of mode is used to set the `aria-live` attribute
+ * for the element that will be announced. Valid values are: `off`,
+ * `polite` and `assertive`.
+ */
+ mode: string|null|undefined;
+ _text: string|null|undefined;
+ created(): void;
+
+ /**
+ * Cause a text string to be announced by screen readers.
+ *
+ * @param text The text that should be announced.
+ */
+ announce(text: string): void;
+ _onIronAnnounce(event: any): void;
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "iron-a11y-announcer": Polymer.IronA11yAnnouncer;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.html
new file mode 100644
index 00000000000..11a8809ff84
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/iron-a11y-announcer.html
@@ -0,0 +1,124 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!--
+`iron-a11y-announcer` is a singleton element that is intended to add a11y
+to features that require on-demand announcement from screen readers. In
+order to make use of the announcer, it is best to request its availability
+in the announcing element.
+
+Example:
+
+ Polymer({
+
+ is: 'x-chatty',
+
+ attached: function() {
+ // This will create the singleton element if it has not
+ // been created yet:
+ Polymer.IronA11yAnnouncer.requestAvailability();
+ }
+ });
+
+After the `iron-a11y-announcer` has been made available, elements can
+make announces by firing bubbling `iron-announce` events.
+
+Example:
+
+ this.fire('iron-announce', {
+ text: 'This is an announcement!'
+ }, { bubbles: true });
+
+Note: announcements are only audible if you have a screen reader enabled.
+
+@group Iron Elements
+@demo demo/index.html
+-->
+
+<dom-module id="iron-a11y-announcer">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ position: fixed;
+ clip: rect(0px,0px,0px,0px);
+ }
+ </style>
+ <div aria-live$="[[mode]]">[[_text]]</div>
+ </template>
+
+ <script>
+
+ (function() {
+ 'use strict';
+
+ Polymer.IronA11yAnnouncer = Polymer({
+ is: 'iron-a11y-announcer',
+
+ properties: {
+
+ /**
+ * The value of mode is used to set the `aria-live` attribute
+ * for the element that will be announced. Valid values are: `off`,
+ * `polite` and `assertive`.
+ */
+ mode: {
+ type: String,
+ value: 'polite'
+ },
+
+ _text: {
+ type: String,
+ value: ''
+ }
+ },
+
+ created: function() {
+ if (!Polymer.IronA11yAnnouncer.instance) {
+ Polymer.IronA11yAnnouncer.instance = this;
+ }
+
+ document.body.addEventListener('iron-announce', this._onIronAnnounce.bind(this));
+ },
+
+ /**
+ * Cause a text string to be announced by screen readers.
+ *
+ * @param {string} text The text that should be announced.
+ */
+ announce: function(text) {
+ this._text = '';
+ this.async(function() {
+ this._text = text;
+ }, 100);
+ },
+
+ _onIronAnnounce: function(event) {
+ if (event.detail && event.detail.text) {
+ this.announce(event.detail.text);
+ }
+ }
+ });
+
+ Polymer.IronA11yAnnouncer.instance = null;
+
+ Polymer.IronA11yAnnouncer.requestAvailability = function() {
+ if (!Polymer.IronA11yAnnouncer.instance) {
+ Polymer.IronA11yAnnouncer.instance = document.createElement('iron-a11y-announcer');
+ }
+
+ document.body.appendChild(Polymer.IronA11yAnnouncer.instance);
+ };
+ })();
+
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package-lock.json
new file mode 100644
index 00000000000..51a44e05e59
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-a11y-announcer",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package.json
new file mode 100644
index 00000000000..ee95f42463c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-announcer/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-a11y-announcer",
+ "private": true,
+ "description": "A singleton element that simplifies announcing text to screen readers.",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-a11y-announcer.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.bower.json
new file mode 100644
index 00000000000..5d8f1f6f4b2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.bower.json
@@ -0,0 +1,64 @@
+{
+ "name": "iron-a11y-keys-behavior",
+ "version": "2.1.1",
+ "description": "A behavior that enables keybindings for greater a11y.",
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "a11y",
+ "input"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git"
+ },
+ "main": "iron-a11y-keys-behavior.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-a11y-keys-behavior",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "b7e78a4a8bdd857780ecd8b54852bb27dbf8f216"
+ },
+ "_source": "https://github.com/PolymerElements/iron-a11y-keys-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-a11y-keys-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..7d93604870d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-a11y-keys-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.travis.yml
new file mode 100644
index 00000000000..c0d007ab8f9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g bower polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Typings are stale. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ XJ31r/5USVGZRtziCLfr8qM1pJKKQMUN1AeYbCdDFEc6i293WxZneR8PwUVhvyptu+qdyd28uy24sH+Ob7kShFbZTUaif5P4gqHPekrYToI0aHyhmVX7C1LmT7nEL8IcT62NhUwh+83eHTAdodkXgnhfQhPn9FHV24Dkvwm8OKhhzEhtTgUGVuGX9j9FyNV6n1+gf4X3Zq63+NkEUh5vpolpue4W7ul2u0sf4l0fzg9pvKPCmywUwX2i7wwAEf3CJghMu2xup54OzXTEkjjSou/ebt1ZnxaUNV1+dblfUne0v9wTD0dPF8H3DwgewwzcZSbOZmj6lFVHRzmLzWcRJOEKdDrpJkjpg7HIhNPGCKDUcNylekafqi7ezhzrkzFwkh6JCdAj7He4mv/X/OUDNjNCClB7Ms/+WPZwtACvIcR2/pvgZ+1PHbIkbIInyAe6iVMMR0oUecei/X+d04DH7iW7rrODVEu6qdibsJki0R0lR2184rrDO9pGek4rLu9sUQBDNgEM6ZLEXXByO8lpG4xStRdkg0/uR5i1/Q8kux4gIJ9yV8WLANkS8NVlmuJgIi6kbh5n4VVKaihGhbBUuTt2aL7fLnH2I6YRwjyNI9TOIRxwk4afppFYUuq6Fv+nfPcdqDOi5Y2AOXLJ3Yvco0+H57nXe/Ny29gFVW4Kftg=
+ - secure: >-
+ huEi/Ja2qnLatb7EJ4Jdc/XAeKphhdH6G+px7/XZY33oDawjStxakx0N/MpT0LPE1BdEWOYTzc17CzKv9R2L3ybWksqXyv/Zs+1NMTmpEAS/54Sk4E61aE3nrV5cfS2R8dBGbJhFoH1W237BDsbw9A4XhsTvhxlIsluWsZgeurbleGg+DgAmg8KlHGRddsfBFgXEk+Khhj6KPsbgPUiWhXpdnXKBPJKF7fJEAbsGR4aFK2eFbYd1OAgJg2Aye0n93IHe+SsxcKRUYteg6UK9V8fk7q5PBlvaodly4F3gH82l+zbnhcTFVW+qN0s6xDBTQzsQ55eTlO3pEezIo3u/1Lq41Yoe6scEkLs63pSYqoB3kakbhLMDJAen080ggdNg9evqvgyznKFYM7sqEcPu+KxHd043DyLTTW11y9lZ/hV3xSTdG4W8mV7+ILbIi54wMaYAcWSGMTOVM0JC/KDoVjze3tzDmfcZwiutLPBFgfrkfJQf3fyqcgvhoLKtHaWHI+76XDsXwEOS2Q5OX9oDtjoZaZ7r8Gp4dqwaKYceOrlsLbaZOLh5nJ4WnDbf4AqZkeM22QWWIfUN6aK+yhsDpQ/d+xJ+/WFENDADrMEKp0Lf3CkzAAcpHp3u65B9qsqweD5/5Je9t0GsA/NvK2xCasnNz6inYy4tAx9i4NWPcOY=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/README.md
new file mode 100644
index 00000000000..87f9902674e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/README.md
@@ -0,0 +1,45 @@
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-a11y-keys-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-a11y-keys-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-a11y-keys-behavior)_
+
+
+## Polymer.IronA11yKeysBehavior
+
+`Polymer.IronA11yKeysBehavior` provides a normalized interface for processing
+keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding).
+The element takes care of browser differences with respect to Keyboard events
+and uses an expressive syntax to filter key presses.
+
+Use the `keyBindings` prototype property to express what combination of keys
+will trigger the callback. A key binding has the format
+`"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or
+`"KEY:EVENT": "callback"` are valid as well). Some examples:
+
+```javascript
+ keyBindings: {
+ 'space': '_onKeydown', // same as 'space:keydown'
+ 'shift+tab': '_onKeydown',
+ 'enter:keypress': '_onKeypress',
+ 'esc:keyup': '_onKeyup'
+ }
+```
+
+The callback will receive with an event containing the following information in `event.detail`:
+
+```javascript
+ _onKeydown: function(event) {
+ console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab"
+ console.log(event.detail.key); // KEY only, e.g. "tab"
+ console.log(event.detail.event); // EVENT, e.g. "keydown"
+ console.log(event.detail.keyboardEvent); // the original KeyboardEvent
+ }
+```
+
+Use the `keyEventTarget` attribute to set up event handlers on a specific
+node.
+
+See the [demo source code](https://github.com/PolymerElements/iron-a11y-keys-behavior/blob/master/demo/x-key-aware.html)
+for an example.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/bower.json
new file mode 100644
index 00000000000..f79293d70e0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/bower.json
@@ -0,0 +1,54 @@
+{
+ "name": "iron-a11y-keys-behavior",
+ "version": "2.1.1",
+ "description": "A behavior that enables keybindings for greater a11y.",
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "a11y",
+ "input"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git"
+ },
+ "main": "iron-a11y-keys-behavior.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/index.html
new file mode 100644
index 00000000000..e7685e83107
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Iron A11y Keys Behavior demo</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="x-key-aware.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles"></style></custom-style>
+</head>
+
+<body unresolved class="centered">
+
+ <demo-snippet>
+ <template>
+ <x-key-aware></x-key-aware>
+ </template>
+ </demo-snippet>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html
new file mode 100644
index 00000000000..8d4eb2a7ad6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html
@@ -0,0 +1,93 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior.html">
+
+<dom-module id="x-key-aware">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ }
+
+ pre {
+ color: #3367d6;
+ }
+
+ .keys {
+ line-height: 25px;
+ }
+
+ .keys span {
+ cursor: default;
+ background-color: #f5f5f5;
+ border: 1px solid #e0e0e0;
+ padding: 1px 5px;
+ border-radius: 5px;
+ }
+ </style>
+
+ <h4>Press any of these keys</h4>
+ <input type="checkbox" checked="{{preventDefault::change}}"> prevent default = {{preventDefault}}
+ <p class="keys">
+ <template is="dom-repeat" items="[[boundKeys]]">
+ <span>{{item}}</span>
+ </template>
+ </p>
+ <pre>[[pressed]]</pre>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'x-key-aware',
+
+ behaviors: [Polymer.IronA11yKeysBehavior],
+
+ properties: {
+ pressed: {type: String, readOnly: true, value: ''},
+
+ boundKeys: {
+ type: Array,
+ value: function() {
+ return Object.keys(this.keyBindings).join(' ').split(' ');
+ }
+ },
+
+ preventDefault: {type: Boolean, value: true, notify: true},
+
+ keyEventTarget: {
+ type: Object,
+ value: function() {
+ return document.body;
+ }
+ }
+ },
+
+ keyBindings: {
+ '* pageup pagedown left right down up home end space enter @ ~ " $ ? ! \\ + : # backspace':
+ '_updatePressed',
+ 'a': '_updatePressed',
+ 'shift+a alt+a': '_updatePressed',
+ 'shift+tab shift+space': '_updatePressed'
+ },
+
+ _updatePressed: function(event) {
+ console.log(event.detail);
+
+ if (this.preventDefault) {
+ event.preventDefault();
+ }
+ this._setPressed(this.pressed + event.detail.combo + ' pressed!\n');
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/index.html
new file mode 100644
index 00000000000..c53ba6cf31e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>iron-a11y-keys-behavior</title>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts
new file mode 100644
index 00000000000..f02a1f65323
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts
@@ -0,0 +1,107 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-a11y-keys-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.IronA11yKeysBehavior` provides a normalized interface for processing
+ * keyboard commands that pertain to [WAI-ARIA best
+ * practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). The
+ * element takes care of browser differences with respect to Keyboard events and
+ * uses an expressive syntax to filter key presses.
+ *
+ * Use the `keyBindings` prototype property to express what combination of keys
+ * will trigger the callback. A key binding has the format
+ * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or
+ * `"KEY:EVENT": "callback"` are valid as well). Some examples:
+ *
+ * keyBindings: {
+ * 'space': '_onKeydown', // same as 'space:keydown'
+ * 'shift+tab': '_onKeydown',
+ * 'enter:keypress': '_onKeypress',
+ * 'esc:keyup': '_onKeyup'
+ * }
+ *
+ * The callback will receive with an event containing the following information
+ * in `event.detail`:
+ *
+ * _onKeydown: function(event) {
+ * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab"
+ * console.log(event.detail.key); // KEY only, e.g. "tab"
+ * console.log(event.detail.event); // EVENT, e.g. "keydown"
+ * console.log(event.detail.keyboardEvent); // the original KeyboardEvent
+ * }
+ *
+ * Use the `keyEventTarget` attribute to set up event handlers on a specific
+ * node.
+ *
+ * See the [demo source
+ * code](https://github.com/PolymerElements/iron-a11y-keys-behavior/blob/master/demo/x-key-aware.html)
+ * for an example.
+ */
+ interface IronA11yKeysBehavior {
+
+ /**
+ * The EventTarget that will be firing relevant KeyboardEvents. Set it to
+ * `null` to disable the listeners.
+ */
+ keyEventTarget: EventTarget|null;
+
+ /**
+ * If true, this property will cause the implementing element to
+ * automatically stop propagation on any handled KeyboardEvents.
+ */
+ stopKeyboardEventPropagation: boolean|null|undefined;
+ _boundKeyHandlers: any[]|null|undefined;
+
+ /**
+ * own properties of everything on the "prototype".
+ */
+ _imperativeKeyBindings: object|null|undefined;
+
+ /**
+ * To be used to express what combination of keys will trigger the relative
+ * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}`
+ */
+ keyBindings: object;
+ registered(): void;
+ attached(): void;
+ detached(): void;
+
+ /**
+ * Can be used to imperatively add a key binding to the implementing
+ * element. This is the imperative equivalent of declaring a keybinding
+ * in the `keyBindings` prototype property.
+ */
+ addOwnKeyBinding(eventString: string, handlerName: string): void;
+
+ /**
+ * When called, will remove all imperatively-added key bindings.
+ */
+ removeOwnKeyBindings(): void;
+
+ /**
+ * Returns true if a keyboard event matches `eventString`.
+ */
+ keyboardEventMatchesKeys(event: KeyboardEvent|null, eventString: string): boolean;
+ _collectKeyBindings(): any;
+ _prepKeyBindings(): void;
+ _addKeyBinding(eventString: any, handlerName: any): void;
+ _resetKeyEventListeners(): void;
+ _listenKeyEventListeners(): void;
+ _unlistenKeyEventListeners(): void;
+ _onKeyBindingEvent(keyBindings: any, event: any): void;
+ _triggerKeyHandler(keyCombo: any, handlerName: any, keyboardEvent: any): void;
+ }
+
+ const IronA11yKeysBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
new file mode 100644
index 00000000000..0005de96d32
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
@@ -0,0 +1,490 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ /**
+ * Chrome uses an older version of DOM Level 3 Keyboard Events
+ *
+ * Most keys are labeled as text, but some are Unicode codepoints.
+ * Values taken from:
+ * http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/keyset.html#KeySet-Set
+ */
+ var KEY_IDENTIFIER = {
+ 'U+0008': 'backspace',
+ 'U+0009': 'tab',
+ 'U+001B': 'esc',
+ 'U+0020': 'space',
+ 'U+007F': 'del'
+ };
+
+ /**
+ * Special table for KeyboardEvent.keyCode.
+ * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even better
+ * than that.
+ *
+ * Values from:
+ * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.keyCode#Value_of_keyCode
+ */
+ var KEY_CODE = {
+ 8: 'backspace',
+ 9: 'tab',
+ 13: 'enter',
+ 27: 'esc',
+ 33: 'pageup',
+ 34: 'pagedown',
+ 35: 'end',
+ 36: 'home',
+ 32: 'space',
+ 37: 'left',
+ 38: 'up',
+ 39: 'right',
+ 40: 'down',
+ 46: 'del',
+ 106: '*'
+ };
+
+ /**
+ * MODIFIER_KEYS maps the short name for modifier keys used in a key
+ * combo string to the property name that references those same keys
+ * in a KeyboardEvent instance.
+ */
+ var MODIFIER_KEYS = {
+ 'shift': 'shiftKey',
+ 'ctrl': 'ctrlKey',
+ 'alt': 'altKey',
+ 'meta': 'metaKey'
+ };
+
+ /**
+ * KeyboardEvent.key is mostly represented by printable character made by
+ * the keyboard, with unprintable keys labeled nicely.
+ *
+ * However, on OS X, Alt+char can make a Unicode character that follows an
+ * Apple-specific mapping. In this case, we fall back to .keyCode.
+ */
+ var KEY_CHAR = /[a-z0-9*]/;
+
+ /**
+ * Matches a keyIdentifier string.
+ */
+ var IDENT_CHAR = /U\+/;
+
+ /**
+ * Matches arrow keys in Gecko 27.0+
+ */
+ var ARROW_KEY = /^arrow/;
+
+ /**
+ * Matches space keys everywhere (notably including IE10's exceptional name
+ * `spacebar`).
+ */
+ var SPACE_KEY = /^space(bar)?/;
+
+ /**
+ * Matches ESC key.
+ *
+ * Value from: http://w3c.github.io/uievents-key/#key-Escape
+ */
+ var ESC_KEY = /^escape$/;
+
+ /**
+ * Transforms the key.
+ * @param {string} key The KeyBoardEvent.key
+ * @param {Boolean} [noSpecialChars] Limits the transformation to
+ * alpha-numeric characters.
+ */
+ function transformKey(key, noSpecialChars) {
+ var validKey = '';
+ if (key) {
+ var lKey = key.toLowerCase();
+ if (lKey === ' ' || SPACE_KEY.test(lKey)) {
+ validKey = 'space';
+ } else if (ESC_KEY.test(lKey)) {
+ validKey = 'esc';
+ } else if (lKey.length == 1) {
+ if (!noSpecialChars || KEY_CHAR.test(lKey)) {
+ validKey = lKey;
+ }
+ } else if (ARROW_KEY.test(lKey)) {
+ validKey = lKey.replace('arrow', '');
+ } else if (lKey == 'multiply') {
+ // numpad '*' can map to Multiply on IE/Windows
+ validKey = '*';
+ } else {
+ validKey = lKey;
+ }
+ }
+ return validKey;
+ }
+
+ function transformKeyIdentifier(keyIdent) {
+ var validKey = '';
+ if (keyIdent) {
+ if (keyIdent in KEY_IDENTIFIER) {
+ validKey = KEY_IDENTIFIER[keyIdent];
+ } else if (IDENT_CHAR.test(keyIdent)) {
+ keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16);
+ validKey = String.fromCharCode(keyIdent).toLowerCase();
+ } else {
+ validKey = keyIdent.toLowerCase();
+ }
+ }
+ return validKey;
+ }
+
+ function transformKeyCode(keyCode) {
+ var validKey = '';
+ if (Number(keyCode)) {
+ if (keyCode >= 65 && keyCode <= 90) {
+ // ascii a-z
+ // lowercase is 32 offset from uppercase
+ validKey = String.fromCharCode(32 + keyCode);
+ } else if (keyCode >= 112 && keyCode <= 123) {
+ // function keys f1-f12
+ validKey = 'f' + (keyCode - 112 + 1);
+ } else if (keyCode >= 48 && keyCode <= 57) {
+ // top 0-9 keys
+ validKey = String(keyCode - 48);
+ } else if (keyCode >= 96 && keyCode <= 105) {
+ // num pad 0-9
+ validKey = String(keyCode - 96);
+ } else {
+ validKey = KEY_CODE[keyCode];
+ }
+ }
+ return validKey;
+ }
+
+ /**
+ * Calculates the normalized key for a KeyboardEvent.
+ * @param {KeyboardEvent} keyEvent
+ * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key
+ * transformation to alpha-numeric chars. This is useful with key
+ * combinations like shift + 2, which on FF for MacOS produces
+ * keyEvent.key = @
+ * To get 2 returned, set noSpecialChars = true
+ * To get @ returned, set noSpecialChars = false
+ */
+ function normalizedKeyForEvent(keyEvent, noSpecialChars) {
+ // Fall back from .key, to .detail.key for artifical keyboard events,
+ // and then to deprecated .keyIdentifier and .keyCode.
+ if (keyEvent.key) {
+ return transformKey(keyEvent.key, noSpecialChars);
+ }
+ if (keyEvent.detail && keyEvent.detail.key) {
+ return transformKey(keyEvent.detail.key, noSpecialChars);
+ }
+ return transformKeyIdentifier(keyEvent.keyIdentifier) ||
+ transformKeyCode(keyEvent.keyCode) || '';
+ }
+
+ function keyComboMatchesEvent(keyCombo, event) {
+ // For combos with modifiers we support only alpha-numeric keys
+ var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers);
+ return keyEvent === keyCombo.key &&
+ (!keyCombo.hasModifiers ||
+ (!!event.shiftKey === !!keyCombo.shiftKey &&
+ !!event.ctrlKey === !!keyCombo.ctrlKey &&
+ !!event.altKey === !!keyCombo.altKey &&
+ !!event.metaKey === !!keyCombo.metaKey));
+ }
+
+ function parseKeyComboString(keyComboString) {
+ if (keyComboString.length === 1) {
+ return {combo: keyComboString, key: keyComboString, event: 'keydown'};
+ }
+ return keyComboString.split('+')
+ .reduce(function(parsedKeyCombo, keyComboPart) {
+ var eventParts = keyComboPart.split(':');
+ var keyName = eventParts[0];
+ var event = eventParts[1];
+
+ if (keyName in MODIFIER_KEYS) {
+ parsedKeyCombo[MODIFIER_KEYS[keyName]] = true;
+ parsedKeyCombo.hasModifiers = true;
+ } else {
+ parsedKeyCombo.key = keyName;
+ parsedKeyCombo.event = event || 'keydown';
+ }
+
+ return parsedKeyCombo;
+ }, {combo: keyComboString.split(':').shift()});
+ }
+
+ function parseEventString(eventString) {
+ return eventString.trim().split(' ').map(function(keyComboString) {
+ return parseKeyComboString(keyComboString);
+ });
+ }
+
+ /**
+ * `Polymer.IronA11yKeysBehavior` provides a normalized interface for processing
+ * keyboard commands that pertain to [WAI-ARIA best
+ * practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). The
+ * element takes care of browser differences with respect to Keyboard events and
+ * uses an expressive syntax to filter key presses.
+ *
+ * Use the `keyBindings` prototype property to express what combination of keys
+ * will trigger the callback. A key binding has the format
+ * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or
+ * `"KEY:EVENT": "callback"` are valid as well). Some examples:
+ *
+ * keyBindings: {
+ * 'space': '_onKeydown', // same as 'space:keydown'
+ * 'shift+tab': '_onKeydown',
+ * 'enter:keypress': '_onKeypress',
+ * 'esc:keyup': '_onKeyup'
+ * }
+ *
+ * The callback will receive with an event containing the following information
+ * in `event.detail`:
+ *
+ * _onKeydown: function(event) {
+ * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab"
+ * console.log(event.detail.key); // KEY only, e.g. "tab"
+ * console.log(event.detail.event); // EVENT, e.g. "keydown"
+ * console.log(event.detail.keyboardEvent); // the original KeyboardEvent
+ * }
+ *
+ * Use the `keyEventTarget` attribute to set up event handlers on a specific
+ * node.
+ *
+ * See the [demo source
+ * code](https://github.com/PolymerElements/iron-a11y-keys-behavior/blob/master/demo/x-key-aware.html)
+ * for an example.
+ *
+ * @demo demo/index.html
+ * @polymerBehavior
+ */
+ Polymer.IronA11yKeysBehavior = {
+ properties: {
+ /**
+ * The EventTarget that will be firing relevant KeyboardEvents. Set it to
+ * `null` to disable the listeners.
+ * @type {?EventTarget}
+ */
+ keyEventTarget: {
+ type: Object,
+ value: function() {
+ return this;
+ }
+ },
+
+ /**
+ * If true, this property will cause the implementing element to
+ * automatically stop propagation on any handled KeyboardEvents.
+ */
+ stopKeyboardEventPropagation: {type: Boolean, value: false},
+
+ _boundKeyHandlers: {
+ type: Array,
+ value: function() {
+ return [];
+ }
+ },
+
+ // We use this due to a limitation in IE10 where instances will have
+ // own properties of everything on the "prototype".
+ _imperativeKeyBindings: {
+ type: Object,
+ value: function() {
+ return {};
+ }
+ }
+ },
+
+ observers: ['_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)'],
+
+
+ /**
+ * To be used to express what combination of keys will trigger the relative
+ * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}`
+ * @type {!Object}
+ */
+ keyBindings: {},
+
+ registered: function() {
+ this._prepKeyBindings();
+ },
+
+ attached: function() {
+ this._listenKeyEventListeners();
+ },
+
+ detached: function() {
+ this._unlistenKeyEventListeners();
+ },
+
+ /**
+ * Can be used to imperatively add a key binding to the implementing
+ * element. This is the imperative equivalent of declaring a keybinding
+ * in the `keyBindings` prototype property.
+ *
+ * @param {string} eventString
+ * @param {string} handlerName
+ */
+ addOwnKeyBinding: function(eventString, handlerName) {
+ this._imperativeKeyBindings[eventString] = handlerName;
+ this._prepKeyBindings();
+ this._resetKeyEventListeners();
+ },
+
+ /**
+ * When called, will remove all imperatively-added key bindings.
+ */
+ removeOwnKeyBindings: function() {
+ this._imperativeKeyBindings = {};
+ this._prepKeyBindings();
+ this._resetKeyEventListeners();
+ },
+
+ /**
+ * Returns true if a keyboard event matches `eventString`.
+ *
+ * @param {KeyboardEvent} event
+ * @param {string} eventString
+ * @return {boolean}
+ */
+ keyboardEventMatchesKeys: function(event, eventString) {
+ var keyCombos = parseEventString(eventString);
+ for (var i = 0; i < keyCombos.length; ++i) {
+ if (keyComboMatchesEvent(keyCombos[i], event)) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ _collectKeyBindings: function() {
+ var keyBindings = this.behaviors.map(function(behavior) {
+ return behavior.keyBindings;
+ });
+
+ if (keyBindings.indexOf(this.keyBindings) === -1) {
+ keyBindings.push(this.keyBindings);
+ }
+
+ return keyBindings;
+ },
+
+ _prepKeyBindings: function() {
+ this._keyBindings = {};
+
+ this._collectKeyBindings().forEach(function(keyBindings) {
+ for (var eventString in keyBindings) {
+ this._addKeyBinding(eventString, keyBindings[eventString]);
+ }
+ }, this);
+
+ for (var eventString in this._imperativeKeyBindings) {
+ this._addKeyBinding(
+ eventString, this._imperativeKeyBindings[eventString]);
+ }
+
+ // Give precedence to combos with modifiers to be checked first.
+ for (var eventName in this._keyBindings) {
+ this._keyBindings[eventName].sort(function(kb1, kb2) {
+ var b1 = kb1[0].hasModifiers;
+ var b2 = kb2[0].hasModifiers;
+ return (b1 === b2) ? 0 : b1 ? -1 : 1;
+ })
+ }
+ },
+
+ _addKeyBinding: function(eventString, handlerName) {
+ parseEventString(eventString).forEach(function(keyCombo) {
+ this._keyBindings[keyCombo.event] =
+ this._keyBindings[keyCombo.event] || [];
+
+ this._keyBindings[keyCombo.event].push([keyCombo, handlerName]);
+ }, this);
+ },
+
+ _resetKeyEventListeners: function() {
+ this._unlistenKeyEventListeners();
+
+ if (this.isAttached) {
+ this._listenKeyEventListeners();
+ }
+ },
+
+ _listenKeyEventListeners: function() {
+ if (!this.keyEventTarget) {
+ return;
+ }
+ Object.keys(this._keyBindings).forEach(function(eventName) {
+ var keyBindings = this._keyBindings[eventName];
+ var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings);
+
+ this._boundKeyHandlers.push(
+ [this.keyEventTarget, eventName, boundKeyHandler]);
+
+ this.keyEventTarget.addEventListener(eventName, boundKeyHandler);
+ }, this);
+ },
+
+ _unlistenKeyEventListeners: function() {
+ var keyHandlerTuple;
+ var keyEventTarget;
+ var eventName;
+ var boundKeyHandler;
+
+ while (this._boundKeyHandlers.length) {
+ // My kingdom for block-scope binding and destructuring assignment..
+ keyHandlerTuple = this._boundKeyHandlers.pop();
+ keyEventTarget = keyHandlerTuple[0];
+ eventName = keyHandlerTuple[1];
+ boundKeyHandler = keyHandlerTuple[2];
+
+ keyEventTarget.removeEventListener(eventName, boundKeyHandler);
+ }
+ },
+
+ _onKeyBindingEvent: function(keyBindings, event) {
+ if (this.stopKeyboardEventPropagation) {
+ event.stopPropagation();
+ }
+
+ // if event has been already prevented, don't do anything
+ if (event.defaultPrevented) {
+ return;
+ }
+
+ for (var i = 0; i < keyBindings.length; i++) {
+ var keyCombo = keyBindings[i][0];
+ var handlerName = keyBindings[i][1];
+ if (keyComboMatchesEvent(keyCombo, event)) {
+ this._triggerKeyHandler(keyCombo, handlerName, event);
+ // exit the loop if eventDefault was prevented
+ if (event.defaultPrevented) {
+ return;
+ }
+ }
+ }
+ },
+
+ _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) {
+ var detail = Object.create(keyCombo);
+ detail.keyboardEvent = keyboardEvent;
+ var event =
+ new CustomEvent(keyCombo.event, {detail: detail, cancelable: true});
+ this[handlerName].call(this, event);
+ if (event.defaultPrevented) {
+ keyboardEvent.preventDefault();
+ }
+ }
+ };
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package-lock.json
new file mode 100644
index 00000000000..f8244363de5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-a11y-keys-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.3.tgz",
+ "integrity": "sha512-igaEysRgtg5tYJVIdQ1T2lJ3G6OmoY7g0YVWKHLFiVs4YUChd9IRSiLoHSLffwut+CpsHHBDj4vRxxNEMstctw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package.json
new file mode 100644
index 00000000000..88f10c16f25
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-a11y-keys-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-a11y-keys-behavior",
+ "private": true,
+ "description": "A behavior that enables keybindings for greater a11y.",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.bower.json
new file mode 100644
index 00000000000..1b870736b6b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.bower.json
@@ -0,0 +1,72 @@
+{
+ "name": "iron-autogrow-textarea",
+ "version": "2.2.0",
+ "description": "A textarea element that automatically grows with input",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "input",
+ "textarea"
+ ],
+ "main": "iron-autogrow-textarea.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-autogrow-textarea.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-autogrow-textarea",
+ "ignore": [],
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.2.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.0",
+ "commit": "e5cdb402561bfcfea17a24aae478cbd5ea4bf943"
+ },
+ "_source": "https://github.com/PolymerElements/iron-autogrow-textarea.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-autogrow-textarea"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..0b70c29de3c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-autogrow-textarea/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.travis.yml
new file mode 100644
index 00000000000..08b3ca10425
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ TqFz1Cdu4BtLCHYLFPES0q+6wPfCnj9bnTfven9LIU+gtek70FPDT3UlnviNwp5ob3o0sbLgsLWG5OkCsRHli+HCgPEVDazSrghfwaT9mL+h/DlM/PVB079VDdIKvZM6L7xEF0zPv7t26kljBRQcZJ81O3K7h1mNjeBj6sDXHzE=
+ - secure: >-
+ ihYM52Uu3H7FGU+x+f+hzMcWt00B7l6GZOtxzT1xYx4hb4E9/WwXYR5z9bqN+s5p10yf3FG64zbmMTuJeBvknDpSyBt/vKP+QBBZT0hxv05GifS38hiSoYT3HBxEpwhYdpjlsSJtIbKfYGR3xIXutRzRrRKSYigcrQNX83MGWFY=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/README.md
new file mode 100644
index 00000000000..73e8f8af1c6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/README.md
@@ -0,0 +1,45 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-autogrow-textarea.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-autogrow-textarea.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-autogrow-textarea)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-autogrow-textarea)_
+
+
+## &lt;iron-autogrow-textarea&gt;
+
+`iron-autogrow-textarea` is an element containing a textarea that grows in height as more
+lines of input are entered. Unless an explicit height or the `maxRows` property is set, it will
+never scroll.
+
+Example:
+
+```html
+<iron-autogrow-textarea></iron-autogrow-textarea>
+```
+
+### Changes in 2.0
+- `bind-value` is deprecated, and just mirrors the `value` property
+- corrected the behaviour of `validate()`
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--iron-autogrow-textarea` | Mixin applied to the textarea | `{}` |
+| `--iron-autogrow-textarea-placeholder` | Mixin applied to the textarea placeholder | `{}` |
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/bower.json
new file mode 100644
index 00000000000..1ed77375e4b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/bower.json
@@ -0,0 +1,63 @@
+{
+ "name": "iron-autogrow-textarea",
+ "version": "2.1.1",
+ "description": "A textarea element that automatically grows with input",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "input",
+ "textarea"
+ ],
+ "main": "iron-autogrow-textarea.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-autogrow-textarea.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-autogrow-textarea",
+ "ignore": [],
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/demo/index.html
new file mode 100644
index 00000000000..9b87df87948
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/demo/index.html
@@ -0,0 +1,99 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>iron-autogrow-textarea demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../iron-autogrow-textarea.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ iron-autogrow-textarea {
+ display: block;
+ width: 200px;
+ margin: 5px 0;
+ }
+
+ textarea {
+ width: 200px;
+ }
+
+ demo-snippet {
+ --demo-snippet-demo: {
+ @apply --layout-vertical;
+ @apply --layout-center-center;
+ }
+ }
+ </style>
+ </custom-style>
+ </head>
+ <body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>An iron-autogrow-textarea grows automatically as more text is entered</h3>
+ <demo-snippet>
+ <template>
+ <iron-autogrow-textarea></iron-autogrow-textarea>
+ </template>
+ </demo-snippet>
+
+ <h3>The maximum height can be controlled either through the <i>max-rows</i>
+ property, or through a fixed max height</h3>
+ <demo-snippet>
+ <template>
+ <iron-autogrow-textarea max-rows="4" placeholder="scrolls after 4 rows"></iron-autogrow-textarea>
+ <iron-autogrow-textarea style="max-height: 50px;" placeholder="scrolls after 50px"></iron-autogrow-textarea>
+ </template>
+ </demo-snippet>
+
+ <h3>The initial height can also be controlled using the <i>rows</i> property,
+ or through a fixed height</h3>
+ <demo-snippet>
+ <template>
+ <iron-autogrow-textarea rows="4" placeholder="start with 4 rows"></iron-autogrow-textarea>
+ <iron-autogrow-textarea style="height: 50px;"></iron-autogrow-textarea>
+ </template>
+ </demo-snippet>
+
+ <h3>Example of updating the value imperatively</h3>
+ <demo-snippet>
+ <template>
+ <dom-bind>
+ <template is="dom-bind">
+ <div class="vertical-section">
+ <iron-autogrow-textarea value="{{value}}" id="a1"></iron-autogrow-textarea>
+ <p>bind to the iron-autogrow-textarea's <code>value</code>: {{value}}</p>
+
+ <br>
+ <p>Imperatively updating <code>ironAutogrowTextarea.value</code> will also update the
+ <code>textarea.value</code></p>
+ <button onclick="a1.value='pineapple'">Set value to 'pineapple'</button>
+
+ <br>
+ <p>Imperatively updating <code>ironAutogrowTextarea.textarea.value</code> will update
+ the display, but not update the internal <code>value</code></p>
+ <button onclick="a1.textarea.value='watermelon'">Set textarea.value to 'watermelon'</button>
+ </div>
+ </template>
+ </dom-bind>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/hero.svg
new file mode 100755
index 00000000000..19ec70a0545
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/hero.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <path d="M140,47c-3,0-4.7-2.4-6.2-4.4c-1.3-1.9-2.4-3.6-4.7-3.6c-2.3,0-3.4,1.7-4.7,3.6c-1.5,2.1-3.1,4.4-6.4,4.4
+ c-3.3,0-4.9-2.4-6.4-4.4c-1.3-1.9-2.5-3.6-4.8-3.6c-2.3,0-3.4,1.7-4.8,3.6c-1.5,2.1-3.1,4.4-6.4,4.4s-5.2-2.4-6.7-4.4
+ c-1.3-1.9-2-3.6-5-3.6v-2c4,0,5.2,2.4,6.7,4.4c1.3,1.9,2.6,3.6,4.9,3.6c2.3,0,3.5-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.5-4.4
+ s5,2.4,6.4,4.4c1.3,1.9,2.5,3.6,4.8,3.6c2.3,0,3.4-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.4-4.4c3.3,0,4.7,2.4,6.2,4.4
+ c1.3,1.9,2.5,3.6,4.5,3.6V47z"/>
+ <path d="M140,65c-3,0-4.7-2.4-6.2-4.4c-1.3-1.9-2.4-3.6-4.7-3.6c-2.3,0-3.4,1.7-4.7,3.6c-1.5,2.1-3.1,4.4-6.4,4.4
+ c-3.3,0-4.9-2.4-6.4-4.4c-1.3-1.9-2.5-3.6-4.8-3.6c-2.3,0-3.4,1.7-4.8,3.6c-1.5,2.1-3.1,4.4-6.4,4.4s-5.2-2.4-6.7-4.4
+ c-1.3-1.9-2-3.6-5-3.6v-2c4,0,5.2,2.4,6.7,4.4c1.3,1.9,2.6,3.6,4.9,3.6c2.3,0,3.5-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.5-4.4
+ s5,2.4,6.4,4.4c1.3,1.9,2.5,3.6,4.8,3.6c2.3,0,3.4-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.4-4.4c3.3,0,4.7,2.4,6.2,4.4
+ c1.3,1.9,2.5,3.6,4.5,3.6V65z"/>
+ <path d="M140,83c-3,0-4.7-2.4-6.2-4.4c-1.3-1.9-2.4-3.6-4.7-3.6c-2.3,0-3.4,1.7-4.7,3.6c-1.5,2.1-3.1,4.4-6.4,4.4
+ c-3.3,0-4.9-2.4-6.4-4.4c-1.3-1.9-2.5-3.6-4.8-3.6c-2.3,0-3.4,1.7-4.8,3.6c-1.5,2.1-3.1,4.4-6.4,4.4s-5.2-2.4-6.7-4.4
+ c-1.3-1.9-2-3.6-5-3.6v-2c4,0,5.2,2.4,6.7,4.4c1.3,1.9,2.6,3.6,4.9,3.6c2.3,0,3.5-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.5-4.4
+ s5,2.4,6.4,4.4c1.3,1.9,2.5,3.6,4.8,3.6c2.3,0,3.4-1.7,4.8-3.6c1.5-2.1,3.1-4.4,6.4-4.4c3.3,0,4.7,2.4,6.2,4.4
+ c1.3,1.9,2.5,3.6,4.5,3.6V83z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+ <path d="M151,102H73V24h78V102z M75,100h74V26H75V100z"/>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/index.html
new file mode 100644
index 00000000000..3be2964faf2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-autogrow-textarea</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+ </head>
+ <body>
+
+ <iron-component-page></iron-component-page>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.d.ts
new file mode 100644
index 00000000000..7f45efcbe61
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.d.ts
@@ -0,0 +1,136 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-autogrow-textarea.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-behaviors/iron-control-state.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../iron-validatable-behavior/iron-validatable-behavior.d.ts" />
+
+/**
+ * `iron-autogrow-textarea` is an element containing a textarea that grows in height as more
+ * lines of input are entered. Unless an explicit height or the `maxRows` property is set, it will
+ * never scroll.
+ *
+ * Example:
+ *
+ * <iron-autogrow-textarea></iron-autogrow-textarea>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--iron-autogrow-textarea` | Mixin applied to the textarea | `{}`
+ * `--iron-autogrow-textarea-placeholder` | Mixin applied to the textarea placeholder | `{}`
+ */
+interface IronAutogrowTextareaElement extends Polymer.Element, Polymer.IronValidatableBehavior, Polymer.IronControlState {
+
+ /**
+ * Use this property instead of `bind-value` for two-way data binding.
+ */
+ value: string|number;
+
+ /**
+ * This property is deprecated, and just mirrors `value`. Use `value` instead.
+ */
+ bindValue: string|number;
+
+ /**
+ * The initial number of rows.
+ */
+ rows: number|null|undefined;
+
+ /**
+ * The maximum number of rows this element can grow to until it
+ * scrolls. 0 means no maximum.
+ */
+ maxRows: number|null|undefined;
+
+ /**
+ * Bound to the textarea's `autocomplete` attribute.
+ */
+ autocomplete: string|null|undefined;
+
+ /**
+ * Bound to the textarea's `autofocus` attribute.
+ */
+ autofocus: boolean|null|undefined;
+
+ /**
+ * Bound to the textarea's `inputmode` attribute.
+ */
+ inputmode: string|null|undefined;
+
+ /**
+ * Bound to the textarea's `placeholder` attribute.
+ */
+ placeholder: string|null|undefined;
+
+ /**
+ * Bound to the textarea's `readonly` attribute.
+ */
+ readonly: string|null|undefined;
+
+ /**
+ * Set to true to mark the textarea as required.
+ */
+ required: boolean|null|undefined;
+
+ /**
+ * The minimum length of the input value.
+ */
+ minlength: number|null|undefined;
+
+ /**
+ * The maximum length of the input value.
+ */
+ maxlength: number|null|undefined;
+
+ /**
+ * Bound to the textarea's `aria-label` attribute.
+ */
+ label: string|null|undefined;
+
+ /**
+ * Returns the underlying textarea.
+ */
+ readonly textarea: HTMLTextAreaElement;
+
+ /**
+ * Returns textarea's selection start.
+ */
+ selectionStart: number;
+
+ /**
+ * Returns textarea's selection end.
+ */
+ selectionEnd: number;
+
+ /**
+ * Returns true if `value` is valid. The validator provided in `validator`
+ * will be used first, if it exists; otherwise, the `textarea`'s validity
+ * is used.
+ *
+ * @returns True if the value is valid.
+ */
+ validate(): boolean;
+ attached(): void;
+ _bindValueChanged(bindValue: any): void;
+ _valueChanged(value: any): void;
+ _onInput(event: any): void;
+ _constrain(tokens: any): any;
+ _valueForMirror(): any;
+ _updateCached(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-autogrow-textarea": IronAutogrowTextareaElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html
new file mode 100644
index 00000000000..f46bc2ddad6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html
@@ -0,0 +1,384 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../iron-validatable-behavior/iron-validatable-behavior.html">
+
+<!--
+`iron-autogrow-textarea` is an element containing a textarea that grows in height as more
+lines of input are entered. Unless an explicit height or the `maxRows` property is set, it will
+never scroll.
+
+Example:
+
+ <iron-autogrow-textarea></iron-autogrow-textarea>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--iron-autogrow-textarea` | Mixin applied to the textarea | `{}`
+`--iron-autogrow-textarea-placeholder` | Mixin applied to the textarea placeholder | `{}`
+
+@group Iron Elements
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="iron-autogrow-textarea">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ position: relative;
+ width: 400px;
+ border: 1px solid;
+ padding: 2px;
+ -moz-appearance: textarea;
+ -webkit-appearance: textarea;
+ overflow: hidden;
+ }
+
+ .mirror-text {
+ visibility: hidden;
+ word-wrap: break-word;
+ @apply --iron-autogrow-textarea;
+ }
+
+ .fit {
+ @apply --layout-fit;
+ }
+
+ textarea {
+ position: relative;
+ outline: none;
+ border: none;
+ resize: none;
+ background: inherit;
+ color: inherit;
+ /* see comments in template */
+ width: 100%;
+ height: 100%;
+ font-size: inherit;
+ font-family: inherit;
+ line-height: inherit;
+ text-align: inherit;
+ @apply --iron-autogrow-textarea;
+ }
+
+ textarea::-webkit-input-placeholder {
+ @apply --iron-autogrow-textarea-placeholder;
+ }
+
+ textarea:-moz-placeholder {
+ @apply --iron-autogrow-textarea-placeholder;
+ }
+
+ textarea::-moz-placeholder {
+ @apply --iron-autogrow-textarea-placeholder;
+ }
+
+ textarea:-ms-input-placeholder {
+ @apply --iron-autogrow-textarea-placeholder;
+ }
+ </style>
+
+ <!-- the mirror sizes the input/textarea so it grows with typing -->
+ <!-- use &#160; instead &nbsp; of to allow this element to be used in XHTML -->
+ <div id="mirror" class="mirror-text" aria-hidden="true">&#160;</div>
+
+ <!-- size the input/textarea with a div, because the textarea has intrinsic size in ff -->
+ <div class="textarea-container fit">
+ <textarea id="textarea"
+ name$="[[name]]"
+ aria-label$="[[label]]"
+ autocomplete$="[[autocomplete]]"
+ autofocus$="[[autofocus]]"
+ inputmode$="[[inputmode]]"
+ placeholder$="[[placeholder]]"
+ readonly$="[[readonly]]"
+ required$="[[required]]"
+ disabled$="[[disabled]]"
+ rows$="[[rows]]"
+ minlength$="[[minlength]]"
+ maxlength$="[[maxlength]]"></textarea>
+ </div>
+ </template>
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'iron-autogrow-textarea',
+
+ behaviors: [
+ Polymer.IronValidatableBehavior,
+ Polymer.IronControlState
+ ],
+
+ properties: {
+ /**
+ * Use this property instead of `bind-value` for two-way data binding.
+ * @type {string|number}
+ */
+ value: {
+ observer: '_valueChanged',
+ type: String,
+ notify: true
+ },
+
+ /**
+ * This property is deprecated, and just mirrors `value`. Use `value` instead.
+ * @type {string|number}
+ */
+ bindValue: {
+ observer: '_bindValueChanged',
+ type: String,
+ notify: true
+ },
+
+ /**
+ * The initial number of rows.
+ *
+ * @attribute rows
+ * @type number
+ * @default 1
+ */
+ rows: {
+ type: Number,
+ value: 1,
+ observer: '_updateCached'
+ },
+
+ /**
+ * The maximum number of rows this element can grow to until it
+ * scrolls. 0 means no maximum.
+ *
+ * @attribute maxRows
+ * @type number
+ * @default 0
+ */
+ maxRows: {
+ type: Number,
+ value: 0,
+ observer: '_updateCached'
+ },
+
+ /**
+ * Bound to the textarea's `autocomplete` attribute.
+ */
+ autocomplete: {
+ type: String,
+ value: 'off'
+ },
+
+ /**
+ * Bound to the textarea's `autofocus` attribute.
+ */
+ autofocus: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Bound to the textarea's `inputmode` attribute.
+ */
+ inputmode: {
+ type: String
+ },
+
+ /**
+ * Bound to the textarea's `placeholder` attribute.
+ */
+ placeholder: {
+ type: String
+ },
+
+ /**
+ * Bound to the textarea's `readonly` attribute.
+ */
+ readonly: {
+ type: String
+ },
+
+ /**
+ * Set to true to mark the textarea as required.
+ */
+ required: {
+ type: Boolean
+ },
+
+ /**
+ * The minimum length of the input value.
+ */
+ minlength: {
+ type: Number
+ },
+
+ /**
+ * The maximum length of the input value.
+ */
+ maxlength: {
+ type: Number
+ },
+
+ /**
+ * Bound to the textarea's `aria-label` attribute.
+ */
+ label: {
+ type: String
+ }
+
+ },
+
+ listeners: {
+ 'input': '_onInput'
+ },
+
+ /**
+ * Returns the underlying textarea.
+ * @return {!HTMLTextAreaElement}
+ */
+ get textarea() {
+ return this.$.textarea;
+ },
+
+ /**
+ * Returns textarea's selection start.
+ * @return {number}
+ */
+ get selectionStart() {
+ return this.$.textarea.selectionStart;
+ },
+
+ /**
+ * Returns textarea's selection end.
+ * @return {number}
+ */
+ get selectionEnd() {
+ return this.$.textarea.selectionEnd;
+ },
+
+ /**
+ * Sets the textarea's selection start.
+ */
+ set selectionStart(value) {
+ this.$.textarea.selectionStart = value;
+ },
+
+ /**
+ * Sets the textarea's selection end.
+ */
+ set selectionEnd(value) {
+ this.$.textarea.selectionEnd = value;
+ },
+
+ attached: function() {
+ /* iOS has an arbitrary left margin of 3px that isn't present
+ * in any other browser, and means that the paper-textarea's cursor
+ * overlaps the label.
+ * See https://github.com/PolymerElements/paper-input/issues/468.
+ */
+ var IS_IOS = navigator.userAgent.match(/iP(?:[oa]d|hone)/);
+ if (IS_IOS) {
+ this.$.textarea.style.marginLeft = '-3px';
+ }
+ },
+
+ /**
+ * Returns true if `value` is valid. The validator provided in `validator`
+ * will be used first, if it exists; otherwise, the `textarea`'s validity
+ * is used.
+ * @return {boolean} True if the value is valid.
+ */
+ validate: function() {
+ // Use the nested input's native validity.
+ var valid = this.$.textarea.validity.valid;
+
+ // Only do extra checking if the browser thought this was valid.
+ if (valid) {
+ // Empty, required input is invalid
+ if (this.required && this.value === '') {
+ valid = false;
+ } else if (this.hasValidator()) {
+ valid = Polymer.IronValidatableBehavior.validate.call(this, this.value);
+ }
+ }
+
+ this.invalid = !valid;
+ this.fire('iron-input-validate');
+ return valid;
+ },
+
+ _bindValueChanged: function(bindValue) {
+ this.value = bindValue;
+ },
+
+ _valueChanged: function(value) {
+ var textarea = this.textarea;
+ if (!textarea) {
+ return;
+ }
+
+ // If the bindValue changed manually, then we need to also update
+ // the underlying textarea's value. Otherwise this change was probably
+ // generated from the _onInput handler, and the two values are already
+ // the same.
+ if (textarea.value !== value) {
+ textarea.value = !(value || value === 0) ? '' : value;
+ }
+
+ this.bindValue = value;
+ this.$.mirror.innerHTML = this._valueForMirror();
+
+ // Manually notify because we don't want to notify until after setting value.
+ this.fire('bind-value-changed', {value: this.bindValue});
+ },
+
+ _onInput: function(event) {
+ var eventPath = Polymer.dom(event).path;
+ this.value = eventPath ? eventPath[0].value : event.target.value;
+ },
+
+ _constrain: function(tokens) {
+ var _tokens;
+ tokens = tokens || [''];
+ // Enforce the min and max heights for a multiline input to avoid measurement
+ if (this.maxRows > 0 && tokens.length > this.maxRows) {
+ _tokens = tokens.slice(0, this.maxRows);
+ } else {
+ _tokens = tokens.slice(0);
+ }
+ while (this.rows > 0 && _tokens.length < this.rows) {
+ _tokens.push('');
+ }
+ // Use &#160; instead &nbsp; of to allow this element to be used in XHTML.
+ return _tokens.join('<br/>') + '&#160;';
+ },
+
+ _valueForMirror: function() {
+ var input = this.textarea;
+ if (!input) {
+ return;
+ }
+ this.tokens = (input && input.value) ? input.value.replace(/&/gm, '&amp;').replace(/"/gm, '&quot;').replace(/'/gm, '&#39;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;').split('\n') : [''];
+ return this._constrain(this.tokens);
+ },
+
+ _updateCached: function() {
+ this.$.mirror.innerHTML = this._constrain(this.tokens);
+ },
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package-lock.json
new file mode 100644
index 00000000000..cd64a5299c4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-autogrow-textarea",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package.json
new file mode 100644
index 00000000000..f29402fe973
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-autogrow-textarea/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-autogrow-textarea",
+ "private": true,
+ "description": "A textarea element that automatically grows with input",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-autogrow-textarea.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.bower.json
new file mode 100644
index 00000000000..1043fd4f0f3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.bower.json
@@ -0,0 +1,63 @@
+{
+ "name": "iron-behaviors",
+ "version": "2.1.1",
+ "description": "Provides a set of behaviors for the iron elements",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-behaviors.git"
+ },
+ "main": [
+ "iron-button-state.html",
+ "iron-control-state.html"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-input": "PolymerElements/paper-input#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "paper-input": "PolymerElements/paper-input#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-behaviors",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "a27b45bebb2af58506af77c377dab301bf7406ce"
+ },
+ "_source": "https://github.com/PolymerElements/iron-behaviors.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-behaviors"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..1cc85c0c790
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-behaviors/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.travis.yml
new file mode 100644
index 00000000000..bf521e2a1a4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ H49pcRc5C6G+ti/ehtT74GZdsUsM/xCvEVJBmKq8rpck7s18R6BbH37RkF2XgYfO4rVa1Bl4KU4Wf5S6aIDYzdaq/phGtFQ04NmDYGbmBhRjwfgxlW4dJ7mkXqXCvNZkxJtAJpgzgVG+xu/I6GsO1Lp4VjGENvVYSsrkGIlSA34=
+ - secure: >-
+ Zq+hvOlL1RmTtMfAtO3bxqYnB7X6MY199cVCKo2J/EbsMvOHII1JvEU1+s2/UG9tgoiXkd7N2OfFOivlbQ75BDIwtvkq32KZNrUEC6vRGhbMBc8JCKkdFB/XHh1mNhQcn6Js656PhZIj2WteZYMSGYDUj7KcBBMacRZQKWuB0OU=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/README.md
new file mode 100644
index 00000000000..0a0629ec7e1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/README.md
@@ -0,0 +1,22 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-button-state.html iron-control-state.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-behaviors.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-behaviors)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-behaviors)_
+
+
+<!-- No docs for Polymer.IronButtonState found. -->
+
+<!-- No docs for Polymer.IronControlState found. -->
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/bower.json
new file mode 100644
index 00000000000..6350520227f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/bower.json
@@ -0,0 +1,53 @@
+{
+ "name": "iron-behaviors",
+ "version": "2.1.1",
+ "description": "Provides a set of behaviors for the iron elements",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-behaviors.git"
+ },
+ "main": [
+ "iron-button-state.html",
+ "iron-control-state.html"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-input": "PolymerElements/paper-input#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "paper-input": "PolymerElements/paper-input#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/index.html
new file mode 100644
index 00000000000..e7cbdcc6f1d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/index.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>simple-button</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link href="../../paper-styles/demo-pages.html" rel="import">
+ <link href="simple-button.html" rel="import">
+
+ <style>
+
+ .vertical-section {
+ text-align: center;
+ }
+
+ </style>
+
+</head>
+<body unresolved>
+ <div class="vertical-section vertical-section-container centered">
+ <h3>Normal</h3>
+
+ <simple-button tabindex="0">Hello World</simple-button>
+
+ <h3>Toggles</h3>
+
+ <simple-button toggles tabindex="0">Hello World</simple-button>
+
+ <h3>Disabled</h3>
+
+ <simple-button disabled tabindex="0">Hello World</simple-button>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/simple-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/simple-button.html
new file mode 100644
index 00000000000..2c3aeefff57
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/demo/simple-button.html
@@ -0,0 +1,74 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-button-state.html">
+<link rel="import" href="../iron-control-state.html">
+
+<dom-module id="simple-button">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ background-color: #4285F4;
+ color: #fff;
+ min-height: 8px;
+ min-width: 8px;
+ padding: 16px;
+ text-transform: uppercase;
+ border-radius: 3px;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ }
+
+ :host([disabled]) {
+ opacity: 0.3;
+ pointer-events: none;
+ }
+
+ :host([active]),
+ :host([pressed]) {
+ background-color: #3367D6;
+ box-shadow: inset 0 3px 5px rgba(0,0,0,.2);
+ }
+
+ :host([focused]) {
+ box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),
+ 0 6px 30px 5px rgba(0, 0, 0, 0.12),
+ 0 8px 10px -5px rgba(0, 0, 0, 0.4);
+ }
+ </style>
+
+ <slot></slot>
+
+ </template>
+
+ <script>
+
+ Polymer({
+
+ is: 'simple-button',
+
+ behaviors: [
+ Polymer.IronControlState,
+ Polymer.IronButtonState
+ ],
+
+ hostAttributes: {
+ role: 'button'
+ }
+ });
+
+ </script>
+
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/index.html
new file mode 100644
index 00000000000..220deb00349
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>Iron Behaviors</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page src="iron-button-state.html"></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.d.ts
new file mode 100644
index 00000000000..9a231cb3a35
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.d.ts
@@ -0,0 +1,88 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-button-state.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts" />
+/// <reference path="iron-control-state.d.ts" />
+
+declare namespace Polymer {
+
+ interface IronButtonState extends Polymer.IronA11yKeysBehavior {
+ keyBindings: object;
+
+ /**
+ * If true, the user is currently holding down the button.
+ */
+ readonly pressed: boolean|null|undefined;
+
+ /**
+ * If true, the button toggles the active state with each tap or press
+ * of the spacebar.
+ */
+ toggles: boolean|null|undefined;
+
+ /**
+ * If true, the button is a toggle and is currently in the active state.
+ */
+ active: boolean|null|undefined;
+
+ /**
+ * True if the element is currently being pressed by a "pointer," which
+ * is loosely defined as mouse or touch input (but specifically excluding
+ * keyboard input).
+ */
+ readonly pointerDown: boolean|null|undefined;
+
+ /**
+ * True if the input device that caused the element to receive focus
+ * was a keyboard.
+ */
+ readonly receivedFocusFromKeyboard: boolean|null|undefined;
+
+ /**
+ * The aria attribute to be set if the button is a toggle and in the
+ * active state.
+ */
+ ariaActiveAttribute: string|null|undefined;
+ _mouseEventRe: RegExp|null;
+ _tapHandler(): void;
+ _focusChanged(focused: any): void;
+ _detectKeyboardFocus(focused: any): void;
+
+ /**
+ * 'change' events
+ */
+ _userActivate(active: any): void;
+ _downHandler(event: any): void;
+ _upHandler(): void;
+
+ /**
+ * @param event .
+ */
+ _spaceKeyDownHandler(event: KeyboardEvent): void;
+
+ /**
+ * @param event .
+ */
+ _spaceKeyUpHandler(event: KeyboardEvent): void;
+
+ /**
+ * event handler to unwind before triggering another event
+ */
+ _asyncClick(): void;
+ _pressedChanged(pressed: any): void;
+ _ariaActiveAttributeChanged(value: any, oldValue: any): void;
+ _activeChanged(active: any, ariaActiveAttribute: any): void;
+ _controlStateChanged(): void;
+ _changedButtonState(): void;
+ }
+
+ const IronButtonState: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.html
new file mode 100644
index 00000000000..45e5d313818
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-button-state.html
@@ -0,0 +1,239 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+<link rel="import" href="iron-control-state.html">
+
+<script>
+
+ /**
+ * @demo demo/index.html
+ * @polymerBehavior Polymer.IronButtonState
+ */
+ Polymer.IronButtonStateImpl = {
+
+ properties: {
+
+ /**
+ * If true, the user is currently holding down the button.
+ */
+ pressed: {
+ type: Boolean,
+ readOnly: true,
+ value: false,
+ reflectToAttribute: true,
+ observer: '_pressedChanged'
+ },
+
+ /**
+ * If true, the button toggles the active state with each tap or press
+ * of the spacebar.
+ */
+ toggles: {
+ type: Boolean,
+ value: false,
+ reflectToAttribute: true
+ },
+
+ /**
+ * If true, the button is a toggle and is currently in the active state.
+ */
+ active: {
+ type: Boolean,
+ value: false,
+ notify: true,
+ reflectToAttribute: true
+ },
+
+ /**
+ * True if the element is currently being pressed by a "pointer," which
+ * is loosely defined as mouse or touch input (but specifically excluding
+ * keyboard input).
+ */
+ pointerDown: {
+ type: Boolean,
+ readOnly: true,
+ value: false
+ },
+
+ /**
+ * True if the input device that caused the element to receive focus
+ * was a keyboard.
+ */
+ receivedFocusFromKeyboard: {
+ type: Boolean,
+ readOnly: true
+ },
+
+ /**
+ * The aria attribute to be set if the button is a toggle and in the
+ * active state.
+ */
+ ariaActiveAttribute: {
+ type: String,
+ value: 'aria-pressed',
+ observer: '_ariaActiveAttributeChanged'
+ }
+ },
+
+ listeners: {
+ down: '_downHandler',
+ up: '_upHandler',
+ tap: '_tapHandler'
+ },
+
+ observers: [
+ '_focusChanged(focused)',
+ '_activeChanged(active, ariaActiveAttribute)'
+ ],
+
+ /**
+ * @type {!Object}
+ */
+ keyBindings: {
+ 'enter:keydown': '_asyncClick',
+ 'space:keydown': '_spaceKeyDownHandler',
+ 'space:keyup': '_spaceKeyUpHandler',
+ },
+
+ _mouseEventRe: /^mouse/,
+
+ _tapHandler: function() {
+ if (this.toggles) {
+ // a tap is needed to toggle the active state
+ this._userActivate(!this.active);
+ } else {
+ this.active = false;
+ }
+ },
+
+ _focusChanged: function(focused) {
+ this._detectKeyboardFocus(focused);
+
+ if (!focused) {
+ this._setPressed(false);
+ }
+ },
+
+ _detectKeyboardFocus: function(focused) {
+ this._setReceivedFocusFromKeyboard(!this.pointerDown && focused);
+ },
+
+ // to emulate native checkbox, (de-)activations from a user interaction fire
+ // 'change' events
+ _userActivate: function(active) {
+ if (this.active !== active) {
+ this.active = active;
+ this.fire('change');
+ }
+ },
+
+ _downHandler: function(event) {
+ this._setPointerDown(true);
+ this._setPressed(true);
+ this._setReceivedFocusFromKeyboard(false);
+ },
+
+ _upHandler: function() {
+ this._setPointerDown(false);
+ this._setPressed(false);
+ },
+
+ /**
+ * @param {!KeyboardEvent} event .
+ */
+ _spaceKeyDownHandler: function(event) {
+ var keyboardEvent = event.detail.keyboardEvent;
+ var target = Polymer.dom(keyboardEvent).localTarget;
+
+ // Ignore the event if this is coming from a focused light child, since that
+ // element will deal with it.
+ if (this.isLightDescendant(/** @type {Node} */(target)))
+ return;
+
+ keyboardEvent.preventDefault();
+ keyboardEvent.stopImmediatePropagation();
+ this._setPressed(true);
+ },
+
+ /**
+ * @param {!KeyboardEvent} event .
+ */
+ _spaceKeyUpHandler: function(event) {
+ var keyboardEvent = event.detail.keyboardEvent;
+ var target = Polymer.dom(keyboardEvent).localTarget;
+
+ // Ignore the event if this is coming from a focused light child, since that
+ // element will deal with it.
+ if (this.isLightDescendant(/** @type {Node} */(target)))
+ return;
+
+ if (this.pressed) {
+ this._asyncClick();
+ }
+ this._setPressed(false);
+ },
+
+ // trigger click asynchronously, the asynchrony is useful to allow one
+ // event handler to unwind before triggering another event
+ _asyncClick: function() {
+ this.async(function() {
+ this.click();
+ }, 1);
+ },
+
+ // any of these changes are considered a change to button state
+
+ _pressedChanged: function(pressed) {
+ this._changedButtonState();
+ },
+
+ _ariaActiveAttributeChanged: function(value, oldValue) {
+ if (oldValue && oldValue != value && this.hasAttribute(oldValue)) {
+ this.removeAttribute(oldValue);
+ }
+ },
+
+ _activeChanged: function(active, ariaActiveAttribute) {
+ if (this.toggles) {
+ this.setAttribute(this.ariaActiveAttribute,
+ active ? 'true' : 'false');
+ } else {
+ this.removeAttribute(this.ariaActiveAttribute);
+ }
+ this._changedButtonState();
+ },
+
+ _controlStateChanged: function() {
+ if (this.disabled) {
+ this._setPressed(false);
+ } else {
+ this._changedButtonState();
+ }
+ },
+
+ // provide hook for follow-on behaviors to react to button-state
+
+ _changedButtonState: function() {
+ if (this._buttonStateChanged) {
+ this._buttonStateChanged(); // abstract
+ }
+ }
+
+ };
+
+ /** @polymerBehavior */
+ Polymer.IronButtonState = [
+ Polymer.IronA11yKeysBehavior,
+ Polymer.IronButtonStateImpl
+ ];
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.d.ts
new file mode 100644
index 00000000000..9082c66a301
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.d.ts
@@ -0,0 +1,40 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-control-state.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ interface IronControlState {
+
+ /**
+ * If true, the element currently has focus.
+ */
+ readonly focused: boolean|null|undefined;
+
+ /**
+ * If true, the user cannot interact with this element.
+ */
+ disabled: boolean|null|undefined;
+
+ /**
+ * Value of the `tabindex` attribute before `disabled` was activated.
+ * `null` means the attribute was not present.
+ */
+ _oldTabIndex: string|null|undefined;
+ _boundFocusBlurHandler: Function|null|undefined;
+ ready(): void;
+ _focusBlurHandler(event: any): void;
+ _disabledChanged(disabled: any, old: any): void;
+ _changedControlState(): void;
+ }
+
+ const IronControlState: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.html
new file mode 100644
index 00000000000..100ac3977c9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/iron-control-state.html
@@ -0,0 +1,137 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+
+ /**
+ * @demo demo/index.html
+ * @polymerBehavior
+ */
+ Polymer.IronControlState = {
+
+ properties: {
+
+ /**
+ * If true, the element currently has focus.
+ */
+ focused: {
+ type: Boolean,
+ value: false,
+ notify: true,
+ readOnly: true,
+ reflectToAttribute: true
+ },
+
+ /**
+ * If true, the user cannot interact with this element.
+ */
+ disabled: {
+ type: Boolean,
+ value: false,
+ notify: true,
+ observer: '_disabledChanged',
+ reflectToAttribute: true
+ },
+
+ /**
+ * Value of the `tabindex` attribute before `disabled` was activated.
+ * `null` means the attribute was not present.
+ * @type {?string|undefined}
+ */
+ _oldTabIndex: {
+ type: String
+ },
+
+ _boundFocusBlurHandler: {
+ type: Function,
+ value: function() {
+ return this._focusBlurHandler.bind(this);
+ }
+ },
+
+ __handleEventRetargeting: {
+ type: Boolean,
+ value: function() {
+ return !this.shadowRoot && !Polymer.Element;
+ }
+ }
+ },
+
+ observers: [
+ '_changedControlState(focused, disabled)'
+ ],
+
+ /**
+ * @return {void}
+ */
+ ready: function() {
+ this.addEventListener('focus', this._boundFocusBlurHandler, true);
+ this.addEventListener('blur', this._boundFocusBlurHandler, true);
+ },
+
+ _focusBlurHandler: function(event) {
+ // In Polymer 2.0, the library takes care of retargeting events.
+ if (Polymer.Element) {
+ this._setFocused(event.type === 'focus');
+ return;
+ }
+
+ // NOTE(cdata): if we are in ShadowDOM land, `event.target` will
+ // eventually become `this` due to retargeting; if we are not in
+ // ShadowDOM land, `event.target` will eventually become `this` due
+ // to the second conditional which fires a synthetic event (that is also
+ // handled). In either case, we can disregard `event.path`.
+ if (event.target === this) {
+ this._setFocused(event.type === 'focus');
+ } else if (this.__handleEventRetargeting) {
+ var target = /** @type {Node} */(Polymer.dom(event).localTarget);
+ if (!this.isLightDescendant(target)) {
+ this.fire(event.type, {sourceEvent: event}, {
+ node: this,
+ bubbles: event.bubbles,
+ cancelable: event.cancelable
+ });
+ }
+ }
+ },
+
+ _disabledChanged: function(disabled, old) {
+ this.setAttribute('aria-disabled', disabled ? 'true' : 'false');
+ this.style.pointerEvents = disabled ? 'none' : '';
+ if (disabled) {
+ // Read the `tabindex` attribute instead of the `tabIndex` property.
+ // The property returns `-1` if there is no `tabindex` attribute.
+ // This distinction is important when restoring the value because
+ // leaving `-1` hides shadow root children from the tab order.
+ this._oldTabIndex = this.getAttribute('tabindex');
+ this._setFocused(false);
+ this.tabIndex = -1;
+ this.blur();
+ } else if (this._oldTabIndex !== undefined) {
+ if (this._oldTabIndex === null) {
+ this.removeAttribute('tabindex');
+ } else {
+ this.setAttribute('tabindex', this._oldTabIndex);
+ }
+ }
+ },
+
+ _changedControlState: function() {
+ // _controlStateChanged is abstract, follow-on behaviors may implement it
+ if (this._controlStateChanged) {
+ this._controlStateChanged();
+ }
+ }
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package-lock.json
new file mode 100644
index 00000000000..fcd0a62fac9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-behaviors",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package.json
new file mode 100644
index 00000000000..85ff46c8ccc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-behaviors/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-behaviors",
+ "private": true,
+ "description": "Provides a set of behaviors for the iron elements",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-behaviors.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.bower.json
new file mode 100644
index 00000000000..c20553a6889
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.bower.json
@@ -0,0 +1,64 @@
+{
+ "name": "iron-checked-element-behavior",
+ "version": "2.1.1",
+ "description": "Implements an element that has a checked attribute and can be added to a form",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "main": "iron-checked-element-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-checked-element-behavior.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-checked-element-behavior",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#1 - 2",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "2081eb82a4ee7f7045e5b8b0dcfbfefc229ef37f"
+ },
+ "_source": "https://github.com/PolymerElements/iron-checked-element-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-checked-element-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..2d520b47239
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-checked-element-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.travis.yml
new file mode 100644
index 00000000000..e1b366bd6fd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ zj5WTkJrZAy1QK0j65jHEsHluT4B/PZl0u3iVEWnyd4CSUbHh3rS5NytZTA8wZ63DYnUcrdbhPeIQI3UKaVBUM2MO/K4MwsC2YTRpifpCLbC+wlRV9WRZNZ9CJ3hu6leshOBWHzZucUWAcKtyQRm66rAU+90ZaJcrBPC/xtgPG1n/Bm2aygr5IA36vJy80Zpwk1+yFmb08eu7jpzNVhcFor+VX0gBW3rxeX0kvzhHGn0bTLxKztNB56Oe+bzx6vU8ACjBcSylouOtPJVIk/iIh7AIDHDcpoZGzmwtVnwAV2mJQtu3V8hQ2kE8eXpDloBGID+AUfTF3YSOVQo34I1yv4T+FlB7uxWrgJo80X5IRXUe15+OoXqraZ25v736RPdTWPjV2b6cWHqdOa45wODkDY0KZ9SrmwZibF3vcfVOG21llW2jF/HC5FvDIiM7gv1ro5jsFbEIwv7ligh0KKa+TOZBphL4sEtMrpxR/zXLqBLXUbKL54A+AefHelxjDIqT3oKQylesrGZ58fEF7Fx5xDSYGJwhIEwTLsEQWIWw8sWB34yRtDBIPocqh8nNZ9pJBOdhK3oC5KK44IQnE44YrIzLRRinHzRVoywpUb5OJDxxSSvOwcqmTYbkFmRJMzfJCEj/EtYsEokmSFv8zIRRDetvenBTGouNK/VsU9xQpA=
+ - secure: >-
+ Q3xN3fRvTQuy/HKlkYFFnVrFo01r6Q8zgzHHK8yKNKio9T/BM0+iIMYP8mRY+qvCQxCboXuUawG6gsxxT2Zn/p7SgNZ+UHq7DcLmocqxmECdGfqra6Hy9Y7BZVYPWlWIADkNUjI0RfOz69/3o/TAFlt4Cnw3BX3ip0o0Rri5/jzj0Nn+xSF+onyMnpH2gQvUE77MHvCuWTPki3R86Bz8RRzbTwKYwVa0oVca7jzdPtOjqzsnz8k9X0HVwQEpHGjqgTP3lg8EotON0rac/ayWs3J3bk9ye5AfvdTCYcZnDcz8POAN6FeC2Xey7oqQO4N8vFagru88mC3AmN67ZYqwI0fmDEYre20lnXFAFBFzsiu4FvKMgFYi/C5tG5ngSR5XcXwLskax82Un7yYYRzVbyhFSxxWZCqIC4cJ5d+E0Wex4eEYDwAlZ9AFP/hRJ2qrBVUbzXeGVMkHlg4qtdUIzHRkMUmjvEWVzTvk0Xa2wD+S0mYPcBwQcscoZy9zqdJM4hfbG9IGi02/DyrTOL3IuNH8WHHvGWS4ajDhSRkGCV4I5VtGKQ/Y3RA/pU6AaI7tVcDhbxOyIPKuOXO6PWuZOiJhhPQ/kceMkUXeh0TmsDtSBpe5OKCnjsdSn02lTT5yYf4nlVIVczP9p6zBerXorzZk1/S3CRBtqYZPgRrefbCw=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/README.md
new file mode 100644
index 00000000000..d3a11bc7911
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/README.md
@@ -0,0 +1,11 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-checked-element-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-checked-element-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-checked-element-behavior)_
+
+
+##Polymer.IronCheckedElementBehavior
+
+Use `Polymer.IronCheckedElementBehavior` to implement a custom element
+that has a `checked` property, which can be used for validation if the
+element is also `required`. Element instances implementing this behavior
+will also be registered for use in an `iron-form` element.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/bower.json
new file mode 100644
index 00000000000..418c1995191
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/bower.json
@@ -0,0 +1,55 @@
+{
+ "name": "iron-checked-element-behavior",
+ "version": "2.1.1",
+ "description": "Implements an element that has a checked attribute and can be added to a form",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "main": "iron-checked-element-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-checked-element-behavior.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-checked-element-behavior",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#1 - 2",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/index.html
new file mode 100644
index 00000000000..788a64f0016
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/index.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>iron-checked-element-behavior demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="simple-checkbox.html">
+</head>
+<body unresolved>
+ <div class="horizontal-section-container">
+ <div>
+ <h4>Not required</h4>
+ <div class="horizontal-section">
+ <simple-checkbox></simple-checkbox>
+ </div>
+ </div>
+ <div>
+ <h4>Required</h4>
+ <div class="horizontal-section">
+ <simple-checkbox required></simple-checkbox>
+ </div>
+ </div>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/simple-checkbox.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/simple-checkbox.html
new file mode 100644
index 00000000000..f7bdd14b2d4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/demo/simple-checkbox.html
@@ -0,0 +1,57 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../paper-button/paper-button.html">
+<link rel="import" href="../iron-checked-element-behavior.html">
+
+<dom-module id="simple-checkbox">
+ <template>
+ <style>
+ :host {
+ display: block;
+ }
+
+ :host([invalid]) span {
+ color: red;
+ }
+
+ #labelText {
+ display: inline-block;
+ width: 100px;
+ }
+ </style>
+
+ <input type="checkbox" id="checkbox" on-tap="_onCheckTap">
+ <span id="labelText">{{label}}</span>
+ <paper-button raised on-click="_onClick">validate</paper-button>
+
+ </template>
+ <script>
+ Polymer({
+
+ is: 'simple-checkbox',
+
+ behaviors: [Polymer.IronCheckedElementBehavior],
+
+ properties: {label: {type: String, value: 'not validated'}},
+
+ _onCheckTap: function() {
+ this.checked = this.$.checkbox.checked;
+ },
+
+ _onClick: function() {
+ this.validate();
+ this.label = this.invalid ? 'is invalid' : 'is valid';
+ }
+ });
+ </script>
+
+ </dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/index.html
new file mode 100644
index 00000000000..1975dc5a75c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-checked-element-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.d.ts
new file mode 100644
index 00000000000..56f12e1736d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.d.ts
@@ -0,0 +1,68 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-checked-element-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-validatable-behavior/iron-validatable-behavior.d.ts" />
+/// <reference path="../iron-form-element-behavior/iron-form-element-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Use `Polymer.IronCheckedElementBehavior` to implement a custom element
+ * that has a `checked` property, which can be used for validation if the
+ * element is also `required`. Element instances implementing this behavior
+ * will also be registered for use in an `iron-form` element.
+ */
+ interface IronCheckedElementBehavior extends Polymer.IronFormElementBehavior, Polymer.IronValidatableBehavior {
+
+ /**
+ * Overriden from Polymer.IronFormElementBehavior
+ */
+ value: string|null|undefined;
+
+ /**
+ * Gets or sets the state, `true` is checked and `false` is unchecked.
+ */
+ checked: boolean|null|undefined;
+
+ /**
+ * If true, the button toggles the active state with each tap or press
+ * of the spacebar.
+ */
+ toggles: boolean|null|undefined;
+
+ /**
+ * Returns false if the element is required and not checked, and true
+ * otherwise.
+ *
+ * @param _value Ignored.
+ * @returns true if `required` is false or if `checked` is true.
+ */
+ _getValidity(_value?: any): boolean;
+ created(): void;
+
+ /**
+ * Update the aria-required label when `required` is changed.
+ */
+ _requiredChanged(): void;
+
+ /**
+ * Fire `iron-changed` when the checked state changes.
+ */
+ _checkedChanged(): void;
+
+ /**
+ * Reset value to 'on' if it is set to `undefined`.
+ */
+ _valueChanged(): void;
+ }
+
+ const IronCheckedElementBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.html
new file mode 100644
index 00000000000..fde93e7daff
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/iron-checked-element-behavior.html
@@ -0,0 +1,109 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-validatable-behavior/iron-validatable-behavior.html">
+<link rel="import" href="../iron-form-element-behavior/iron-form-element-behavior.html">
+
+<script>
+ /**
+ * Use `Polymer.IronCheckedElementBehavior` to implement a custom element
+ * that has a `checked` property, which can be used for validation if the
+ * element is also `required`. Element instances implementing this behavior
+ * will also be registered for use in an `iron-form` element.
+ *
+ * @demo demo/index.html
+ * @polymerBehavior Polymer.IronCheckedElementBehavior
+ */
+ Polymer.IronCheckedElementBehaviorImpl = {
+
+ properties: {
+ /**
+ * Fired when the checked state changes.
+ *
+ * @event iron-change
+ */
+
+ /**
+ * Gets or sets the state, `true` is checked and `false` is unchecked.
+ */
+ checked: {
+ type: Boolean,
+ value: false,
+ reflectToAttribute: true,
+ notify: true,
+ observer: '_checkedChanged'
+ },
+
+ /**
+ * If true, the button toggles the active state with each tap or press
+ * of the spacebar.
+ */
+ toggles: {type: Boolean, value: true, reflectToAttribute: true},
+
+ /* Overriden from Polymer.IronFormElementBehavior */
+ value: {type: String, value: 'on', observer: '_valueChanged'}
+ },
+
+ observers: ['_requiredChanged(required)'],
+
+ created: function() {
+ // Used by `iron-form` to handle the case that an element with this behavior
+ // doesn't have a role of 'checkbox' or 'radio', but should still only be
+ // included when the form is serialized if `this.checked === true`.
+ this._hasIronCheckedElementBehavior = true;
+ },
+
+ /**
+ * Returns false if the element is required and not checked, and true
+ * otherwise.
+ * @param {*=} _value Ignored.
+ * @return {boolean} true if `required` is false or if `checked` is true.
+ */
+ _getValidity: function(_value) {
+ return this.disabled || !this.required || this.checked;
+ },
+
+ /**
+ * Update the aria-required label when `required` is changed.
+ */
+ _requiredChanged: function() {
+ if (this.required) {
+ this.setAttribute('aria-required', 'true');
+ } else {
+ this.removeAttribute('aria-required');
+ }
+ },
+
+ /**
+ * Fire `iron-changed` when the checked state changes.
+ */
+ _checkedChanged: function() {
+ this.active = this.checked;
+ this.fire('iron-change');
+ },
+
+ /**
+ * Reset value to 'on' if it is set to `undefined`.
+ */
+ _valueChanged: function() {
+ if (this.value === undefined || this.value === null) {
+ this.value = 'on';
+ }
+ }
+ };
+
+ /** @polymerBehavior Polymer.IronCheckedElementBehavior */
+ Polymer.IronCheckedElementBehavior = [
+ Polymer.IronFormElementBehavior,
+ Polymer.IronValidatableBehavior,
+ Polymer.IronCheckedElementBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package-lock.json
new file mode 100644
index 00000000000..c430994beab
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-checked-element-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.7.tgz",
+ "integrity": "sha512-5QC0YAHH7aXzrrbgQ+faSeBKbJwTaUyYuaywYzDTr1Myz5C0knx5FHOV5QyhBeE1x8n2xfkBUGE/C0X1paLp+Q==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package.json
new file mode 100644
index 00000000000..206a5199e4b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-checked-element-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-checked-element-behavior",
+ "private": true,
+ "description": "Implements an element that has a checked attribute and can be added to a form",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-checked-element-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.bower.json
new file mode 100644
index 00000000000..f3e1beb9f09
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.bower.json
@@ -0,0 +1,63 @@
+{
+ "name": "iron-collapse",
+ "version": "2.2.1",
+ "description": "Provides a collapsable container",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "container"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/PolymerElements/iron-collapse"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-collapse",
+ "ignore": [],
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^5.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "main": "iron-collapse.html",
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.2.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.1",
+ "commit": "c39063e959bd80be79ef6ff0b4a080260ef13868"
+ },
+ "_source": "https://github.com/PolymerElements/iron-collapse.git",
+ "_target": "^2.0.0",
+ "_originalSource": "iron-collapse"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..544b51e70c9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-collapse/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.travis.yml
new file mode 100644
index 00000000000..f9e4afb72a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Typings are stale. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ UKNKHUjbp8O3UiVmnCmmprLR573ZXak9znhIvy0Uvxpkga7DFvfKvYRFCXQI/eV2I9YOI1FgVjlPfH8Id1NOWdMLdNjAI7G5p4FWisgu36kfat853HDYemoxx0C9nqPwakPGCJ9duL1w0dwje2sEHndk1cdwkU3TMsgkawdOJbU=
+ - secure: >-
+ cWudj1yh2mzialubEqhSHBG/CPLtI9ZeUPaI1+N3hiPzvuxqGaEbkpzEmlZrdAfuy9axCQStg88dgKRSv+TdMbcDKpzQqfClxTf9baKgrSgzVoMReY0kjHumCJz1tIVIz74ggp/gdQVFyS9CiA82pHTnxDl/drwPIHa2S8ST02U=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/README.md
new file mode 100644
index 00000000000..4157dac7914
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/README.md
@@ -0,0 +1,56 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-collapse.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-collapse)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-collapse)_
+
+
+## &lt;iron-collapse&gt;
+
+`iron-collapse` creates a collapsible block of content. By default, the content
+will be collapsed. Use `opened` or `toggle()` to show/hide the content. The
+aria-expanded attribute should only be set on the button that controls the
+collapsable area, not on the area itself. See
+https://www.w3.org/WAI/GL/wiki/Using_aria-expanded_to_indicate_the_state_of_a_collapsible_element#Description
+
+```html
+<button id="button" on-click="toggle">toggle collapse</button>
+
+<iron-collapse id="collapse">
+ <div>Content goes here...</div>
+</iron-collapse>
+
+...
+
+toggle: function() {
+ this.$.collapse.toggle();
+ this.$.button.setAttribute('aria-expanded', this.$.collapse.opened);
+}
+```
+
+`iron-collapse` adjusts the max-height/max-width of the collapsible element to show/hide
+the content. So avoid putting padding/margin/border on the collapsible directly,
+and instead put a div inside and style that.
+
+```html
+<style>
+ .collapse-content {
+ padding: 15px;
+ border: 1px solid #dedede;
+ }
+</style>
+
+<iron-collapse>
+ <div class="collapse-content">
+ <div>Content goes here...</div>
+ </div>
+</iron-collapse>
+```
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--iron-collapse-transition-duration` | Animation transition duration | `300ms` |
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/bower.json
new file mode 100644
index 00000000000..4e2da7460b3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/bower.json
@@ -0,0 +1,54 @@
+{
+ "name": "iron-collapse",
+ "version": "2.2.1",
+ "description": "Provides a collapsable container",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "container"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/PolymerElements/iron-collapse"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-collapse",
+ "ignore": [],
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^5.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "main": "iron-collapse.html",
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/index.html
new file mode 100644
index 00000000000..c9d48111921
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/index.html
@@ -0,0 +1,108 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+
+<head>
+
+ <title>iron-collapse demo</title>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="simple-expand-collapse.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles">
+
+ demo-snippet {
+ --demo-snippet-code: {
+ max-height: 250px;
+ }
+ }
+
+ simple-expand-collapse {
+ margin: 10px;
+ }
+
+ .content {
+ padding: 15px;
+ }
+ </style></custom-style>
+
+</head>
+
+<body unresolved class="centered">
+
+ <h4>Basic</h4>
+ <demo-snippet>
+ <template>
+ <simple-expand-collapse>
+ <div class="content">
+ Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum
+ eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus. Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea,
+ id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique
+ neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus.
+ </div>
+ </simple-expand-collapse>
+ </template>
+ </demo-snippet>
+
+ <h4>Nested, horizontal expand</h4>
+ <demo-snippet>
+ <template>
+ <style>
+ simple-expand-collapse[horizontal] .content {
+ max-height: 250px;
+ overflow: auto;
+ }
+ </style>
+
+ <simple-expand-collapse>
+ <div class="content">
+ <div>
+ Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum
+ eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus. Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea,
+ id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique
+ neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus.
+ </div>
+ <simple-expand-collapse horizontal>
+ <div class="content">
+ Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum
+ eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus. Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere
+ ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos
+ reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus.
+ </div>
+ </simple-expand-collapse>
+ </div>
+ </simple-expand-collapse>
+ </template>
+ </demo-snippet>
+
+ <h4>No animation</h4>
+ <demo-snippet>
+ <template>
+ <simple-expand-collapse no-animation>
+ <div class="content">
+ Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea, id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum
+ eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus. Lorem ipsum dolor sit amet, per in nusquam nominavi periculis, sit elit oportere ea,
+ id minim maiestatis incorrupte duo. Dolorum verterem ad ius, his et nullam verterem. Eu alia debet usu, an doming tritani est. Vix ad ponderum petentium suavitate, eum eu tempor populo, graece sententiae constituam vim ex. Cu torquatos reprimique
+ neglegentur nec, voluptua periculis has ut, at eos discere deleniti sensibus.
+ </div>
+ </simple-expand-collapse>
+ </template>
+ </demo-snippet>
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/simple-expand-collapse.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/simple-expand-collapse.html
new file mode 100644
index 00000000000..f5a0b9b7d9f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/demo/simple-expand-collapse.html
@@ -0,0 +1,78 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-collapse.html">
+<link rel="import" href="../../paper-styles/shadow.html">
+
+<dom-module id="simple-expand-collapse">
+
+ <template>
+
+ <style>
+
+ :host {
+ display: block;
+ }
+
+ #trigger {
+ padding: 10px 15px;
+ background-color: #f3f3f3;
+ border: 1px solid #dedede;
+ border-radius: 5px;
+ font-size: 18px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ text-align: left;
+ }
+
+ :host([opened]) #trigger {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ }
+
+ iron-collapse {
+ border: 1px solid #dedede;
+ border-top: none;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ @apply --shadow-elevation-2dp;
+ }
+ </style>
+ <button id="trigger" on-click="toggle" aria-expanded$="[[opened]]" aria-controls="collapse">[[_getText(opened)]]</button>
+ <iron-collapse id="collapse" opened="{{opened}}" horizontal="[[horizontal]]" no-animation="[[noAnimation]]" tabindex="0">
+ <slot></slot>
+ </iron-collapse>
+
+ </template>
+
+</dom-module>
+
+<script>
+ Polymer({
+
+ is: 'simple-expand-collapse',
+
+ properties: {
+
+ horizontal: {type: Boolean},
+ opened: {type: Boolean, reflectToAttribute: true},
+ noAnimation: {type: Boolean},
+ },
+
+ toggle: function() {
+ this.$.collapse.toggle();
+ },
+
+ _getText: function(opened) {
+ return opened ? 'Collapse' : 'Expand';
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/hero.svg
new file mode 100755
index 00000000000..ae1a49efab0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/hero.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+ <path display="inline" fill="none" d="M167.5,51.7c3.7-0.8,6.9,2.4,6.1,6.1c-0.4,1.9-1.9,3.4-3.8,3.8c-3.7,0.8-6.9-2.4-6.1-6.1
+ C164.2,53.6,165.7,52.1,167.5,51.7z"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <path d="M151,102H73V52h78V102z M75,100h74V54H75V100z"/>
+ <path d="M151,38H73V24h78V38z M75,36h74V26H75V36z"/>
+ <circle cx="171" cy="51" r="4"/>
+ <path d="M151,72v-2c10.5,0,19-8.5,19-19s-8.5-19-19-19v-2c11.6,0,21,9.4,21,21S162.6,72,151,72z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/index.html
new file mode 100644
index 00000000000..b5d20077c41
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/index.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-collapse</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+ </head>
+ <body>
+
+ <iron-component-page></iron-component-page>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.d.ts
new file mode 100644
index 00000000000..b260d0bce45
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.d.ts
@@ -0,0 +1,110 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-collapse.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-resizable-behavior/iron-resizable-behavior.d.ts" />
+
+/**
+ * `iron-collapse` creates a collapsible block of content. By default, the content
+ * will be collapsed. Use `opened` or `toggle()` to show/hide the content.
+ *
+ * <button on-click="toggle">toggle collapse</button>
+ *
+ * <iron-collapse id="collapse">
+ * <div>Content goes here...</div>
+ * </iron-collapse>
+ *
+ * ...
+ *
+ * toggle: function() {
+ * this.$.collapse.toggle();
+ * }
+ *
+ * `iron-collapse` adjusts the max-height/max-width of the collapsible element to show/hide
+ * the content. So avoid putting padding/margin/border on the collapsible directly,
+ * and instead put a div inside and style that.
+ *
+ * <style>
+ * .collapse-content {
+ * padding: 15px;
+ * border: 1px solid #dedede;
+ * }
+ * </style>
+ *
+ * <iron-collapse>
+ * <div class="collapse-content">
+ * <div>Content goes here...</div>
+ * </div>
+ * </iron-collapse>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--iron-collapse-transition-duration` | Animation transition duration | `300ms`
+ */
+interface IronCollapseElement extends Polymer.Element, Polymer.IronResizableBehavior {
+
+ /**
+ * If true, the orientation is horizontal; otherwise is vertical.
+ */
+ horizontal: boolean|null|undefined;
+
+ /**
+ * Set opened to true to show the collapse element and to false to hide it.
+ */
+ opened: boolean|null|undefined;
+
+ /**
+ * When true, the element is transitioning its opened state. When false,
+ * the element has finished opening/closing.
+ */
+ readonly transitioning: boolean|null|undefined;
+
+ /**
+ * Set noAnimation to true to disable animations.
+ */
+ noAnimation: boolean|null|undefined;
+ hostAttributes: object|null;
+ readonly dimension: any;
+
+ /**
+ * Toggle the opened state.
+ */
+ toggle(): void;
+ show(): void;
+ hide(): void;
+
+ /**
+ * Updates the size of the element.
+ *
+ * @param size The new value for `maxWidth`/`maxHeight` as css property value, usually `auto` or `0px`.
+ * @param animated if `true` updates the size with an animation, otherwise without.
+ */
+ updateSize(size: string, animated?: boolean): void;
+
+ /**
+ * enableTransition() is deprecated, but left over so it doesn't break
+ * existing code. Please use `noAnimation` property instead.
+ */
+ enableTransition(enabled: any): void;
+ _updateTransition(enabled: any): void;
+ _horizontalChanged(): void;
+ _openedChanged(): void;
+ _transitionEnd(): void;
+ _onTransitionEnd(event: any): void;
+ _calcSize(): any;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-collapse": IronCollapseElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.html
new file mode 100644
index 00000000000..604034e5ffa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/iron-collapse.html
@@ -0,0 +1,282 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
+
+<!--
+`iron-collapse` creates a collapsible block of content. By default, the content
+will be collapsed. Use `opened` or `toggle()` to show/hide the content.
+
+ <button on-click="toggle">toggle collapse</button>
+
+ <iron-collapse id="collapse">
+ <div>Content goes here...</div>
+ </iron-collapse>
+
+ ...
+
+ toggle: function() {
+ this.$.collapse.toggle();
+ }
+
+`iron-collapse` adjusts the max-height/max-width of the collapsible element to show/hide
+the content. So avoid putting padding/margin/border on the collapsible directly,
+and instead put a div inside and style that.
+
+ <style>
+ .collapse-content {
+ padding: 15px;
+ border: 1px solid #dedede;
+ }
+ </style>
+
+ <iron-collapse>
+ <div class="collapse-content">
+ <div>Content goes here...</div>
+ </div>
+ </iron-collapse>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--iron-collapse-transition-duration` | Animation transition duration | `300ms`
+
+@group Iron Elements
+@hero hero.svg
+@demo demo/index.html
+@element iron-collapse
+-->
+
+<dom-module id="iron-collapse">
+
+ <template>
+
+ <style>
+ :host {
+ display: block;
+ transition-duration: var(--iron-collapse-transition-duration, 300ms);
+ /* Safari 10 needs this property prefixed to correctly apply the custom property */
+ -webkit-transition-duration: var(--iron-collapse-transition-duration, 300ms);
+ overflow: visible;
+ }
+
+ :host(.iron-collapse-closed) {
+ display: none;
+ }
+
+ :host(:not(.iron-collapse-opened)) {
+ overflow: hidden;
+ }
+ </style>
+
+ <slot></slot>
+
+ </template>
+
+</dom-module>
+
+<script>
+ Polymer({
+
+ is: 'iron-collapse',
+
+ behaviors: [Polymer.IronResizableBehavior],
+
+ properties: {
+
+ /**
+ * If true, the orientation is horizontal; otherwise is vertical.
+ *
+ * @attribute horizontal
+ */
+ horizontal: {type: Boolean, value: false, observer: '_horizontalChanged'},
+
+ /**
+ * Set opened to true to show the collapse element and to false to hide it.
+ *
+ * @attribute opened
+ */
+ opened:
+ {type: Boolean, value: false, notify: true, observer: '_openedChanged'},
+
+ /**
+ * When true, the element is transitioning its opened state. When false,
+ * the element has finished opening/closing.
+ *
+ * @attribute transitioning
+ */
+ transitioning: {type: Boolean, notify: true, readOnly: true},
+
+ /**
+ * Set noAnimation to true to disable animations.
+ *
+ * @attribute noAnimation
+ */
+ noAnimation: {type: Boolean},
+
+ /**
+ * Stores the desired size of the collapse body.
+ * @private
+ */
+ _desiredSize: {type: String, value: ''}
+ },
+
+ get dimension() {
+ return this.horizontal ? 'width' : 'height';
+ },
+
+ /**
+ * `maxWidth` or `maxHeight`.
+ * @private
+ */
+ get _dimensionMax() {
+ return this.horizontal ? 'maxWidth' : 'maxHeight';
+ },
+
+ /**
+ * `max-width` or `max-height`.
+ * @private
+ */
+ get _dimensionMaxCss() {
+ return this.horizontal ? 'max-width' : 'max-height';
+ },
+
+ hostAttributes: {
+ role: 'group',
+ 'aria-hidden': 'true',
+ },
+
+ listeners: {transitionend: '_onTransitionEnd'},
+
+ /**
+ * Toggle the opened state.
+ *
+ * @method toggle
+ */
+ toggle: function() {
+ this.opened = !this.opened;
+ },
+
+ show: function() {
+ this.opened = true;
+ },
+
+ hide: function() {
+ this.opened = false;
+ },
+
+ /**
+ * Updates the size of the element.
+ * @param {string} size The new value for `maxWidth`/`maxHeight` as css property value, usually `auto` or `0px`.
+ * @param {boolean=} animated if `true` updates the size with an animation, otherwise without.
+ */
+ updateSize: function(size, animated) {
+ // Consider 'auto' as '', to take full size.
+ size = size === 'auto' ? '' : size;
+
+ var willAnimate = animated && !this.noAnimation && this.isAttached &&
+ this._desiredSize !== size;
+
+ this._desiredSize = size;
+
+ this._updateTransition(false);
+ // If we can animate, must do some prep work.
+ if (willAnimate) {
+ // Animation will start at the current size.
+ var startSize = this._calcSize();
+ // For `auto` we must calculate what is the final size for the animation.
+ // After the transition is done, _transitionEnd will set the size back to
+ // `auto`.
+ if (size === '') {
+ this.style[this._dimensionMax] = '';
+ size = this._calcSize();
+ }
+ // Go to startSize without animation.
+ this.style[this._dimensionMax] = startSize;
+ // Force layout to ensure transition will go. Set scrollTop to itself
+ // so that compilers won't remove it.
+ this.scrollTop = this.scrollTop;
+ // Enable animation.
+ this._updateTransition(true);
+ // If final size is the same as startSize it will not animate.
+ willAnimate = (size !== startSize);
+ }
+ // Set the final size.
+ this.style[this._dimensionMax] = size;
+ // If it won't animate, call transitionEnd to set correct classes.
+ if (!willAnimate) {
+ this._transitionEnd();
+ }
+ },
+
+ /**
+ * enableTransition() is deprecated, but left over so it doesn't break
+ * existing code. Please use `noAnimation` property instead.
+ *
+ * @method enableTransition
+ * @deprecated since version 1.0.4
+ */
+ enableTransition: function(enabled) {
+ Polymer.Base._warn(
+ '`enableTransition()` is deprecated, use `noAnimation` instead.');
+ this.noAnimation = !enabled;
+ },
+
+ _updateTransition: function(enabled) {
+ this.style.transitionDuration = (enabled && !this.noAnimation) ? '' : '0s';
+ },
+
+ _horizontalChanged: function() {
+ this.style.transitionProperty = this._dimensionMaxCss;
+ var otherDimension =
+ this._dimensionMax === 'maxWidth' ? 'maxHeight' : 'maxWidth';
+ this.style[otherDimension] = '';
+ this.updateSize(this.opened ? 'auto' : '0px', false);
+ },
+
+ _openedChanged: function() {
+ this.setAttribute('aria-hidden', !this.opened);
+
+ this._setTransitioning(true);
+ this.toggleClass('iron-collapse-closed', false);
+ this.toggleClass('iron-collapse-opened', false);
+ this.updateSize(this.opened ? 'auto' : '0px', true);
+
+ // Focus the current collapse.
+ if (this.opened) {
+ this.focus();
+ }
+ },
+
+ _transitionEnd: function() {
+ this.style[this._dimensionMax] = this._desiredSize;
+ this.toggleClass('iron-collapse-closed', !this.opened);
+ this.toggleClass('iron-collapse-opened', this.opened);
+ this._updateTransition(false);
+ this.notifyResize();
+ this._setTransitioning(false);
+ },
+
+ _onTransitionEnd: function(event) {
+ if (Polymer.dom(event).rootTarget === this) {
+ this._transitionEnd();
+ }
+ },
+
+ _calcSize: function() {
+ return this.getBoundingClientRect()[this.dimension] + 'px';
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package-lock.json
new file mode 100644
index 00000000000..cd8c08250a6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-collapse",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.3.tgz",
+ "integrity": "sha512-igaEysRgtg5tYJVIdQ1T2lJ3G6OmoY7g0YVWKHLFiVs4YUChd9IRSiLoHSLffwut+CpsHHBDj4vRxxNEMstctw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package.json
new file mode 100644
index 00000000000..0c188543e53
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-collapse/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-collapse",
+ "private": true,
+ "description": "Provides a collapsable container",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/PolymerElements/iron-collapse"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.bower.json
new file mode 100644
index 00000000000..3b2df138961
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.bower.json
@@ -0,0 +1,71 @@
+{
+ "name": "iron-dropdown",
+ "version": "2.0.0",
+ "description": "An unstyled element that works similarly to a native browser select",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer"
+ ],
+ "main": "iron-dropdown.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-dropdown"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-dropdown",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "neon-animation": "PolymerElements/neon-animation#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "iron-image": "PolymerElements/iron-image#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.8.6",
+ "neon-animation": "PolymerElements/neon-animation#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "iron-image": "PolymerElements/iron-image#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.0.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.0",
+ "commit": "1f581967ae539bf6d94f08a29783e323992a33c8"
+ },
+ "_source": "https://github.com/PolymerElements/iron-dropdown.git",
+ "_target": "~2.0",
+ "_originalSource": "PolymerElements/iron-dropdown"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..a1b71482eab
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-dropdown/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.travis.yml
new file mode 100644
index 00000000000..823a13c1306
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/.travis.yml
@@ -0,0 +1,25 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+env:
+ global:
+ - secure: >-
+ YMlrRxFp8QBJ9KfvrPru2sIaHm5GeVHsZ/wE4qm5ntdsoqQlsJXRYYhlE2jPSHte+2VrOnFItjCsoqG6myeCbMrDS+/ZAZd+PWNdxbSs0DiGVMJWtrd8PwhKeOoVYzJleTwU0Uj2mF/mKwoC6aNgf56V9XzC2mkooRJX9cDbCkfddcIGoU/45zsPPMJV+BRVDcETw5g0PD+7NJBPtJP+d8TMO+jtdgXQ1V0vPJhkS7RaYZoDeljsml/Xc8Djb3zUttu5cFk4lXeKAKtFgFzxVsFqytxuYY2aSkMcq2/KxwexnnK/SCe5uQC014TjYAMzSs5A7l/ZBEzRGDhxKmkR2JHY3ktRCOFphqrQa9JoK3k+Tc28JeXJXTXNW7B5SODclN45ik5jQQ/FaJgRlideK07LsEObC9FjEoSd0U5rt75bzIhGuBQ6vr16JQLtN7+NvPRMsNqZRGHQysbW7SbfuLdWwmprn8kXaiQoensAnWlrrGoaPtPfKgA68YRQ/2cr9zZWFmMTzfDP6/Y8YSulj1mzqP2U8AZStXZ1vKN7IWY/ADzYrRG/nCqwd8gQpQoiAEgOfc+de5fIzLPRfLS8fI8sow9yZC8hE91JDatxOPvg/YCDGfJUQddCG+Z3LIBqY6RYKjXzCTCexGD6XWIJso8x5HEEWEQKArqT6vLM4gE=
+ - secure: >-
+ yNGht7DLQ56gIwWh+Wu/3spWaIo0qR/EXB7SDzGtE7Y1KLbgYjmGCnA+3Y+vQ8q9Smpv66FMi8ejbBnObb347806LykEG23OJWBbruUi3gGoImNqLmaj+iqxiaYzxqIWs7gwhpYMdNGFiu1T83eBLOLoVQqO1OIIVbH1Fk0MvHvbknY52VyOEaEjVBdnWAxTpDdgujzVaPBxaPCbD15nUFgaMCsBdR0SKtX0X+vVZRdu0VzHqLJPhUxrQJIxdAYc/OyEKki5pR93b0df+0P14NHxduWNtaAReBtMtpVsiLfaxiHdoWzjHdJ2g+x4DEoH1ynbs4v/8qWE1xLABcgHK2UeZYwTtk7KSA9ZcYSx7JxnO1mhseWdiCSKO4Y0bZuBcSsQ9O5skvIOhAd9bLdQHMe4bHSf8mhtv/Kw6IHmEqZ9YZ8TIk7YY4bYiLOKsN6q2kYbWO7UVeYBLul3mppiEWZ04JmbjVU5us1hq40RdSsc34/fW3KitLfVaYQlTWlZ/h9nx7tOQ2o6OOSHgRnD8qPpFM+xExqkj2FIgUWyecn8VKQ6FojgfOeVyEQ3WdPK17LdFxhKfHVod+Qufl6ArBsUMWctns4/jQTCJXL+VIPfZWQ/wrYmkIW7dEjA6NnTMBqhjBa37C1G8+Ak5kvSAcU4iAbjqA1jVv4RANRV5x8=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/README.md
new file mode 100644
index 00000000000..ac614b7e8c2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/README.md
@@ -0,0 +1,34 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-dropdown.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-dropdown)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-dropdown)_
+
+
+## &lt;iron-dropdown&gt;
+
+`<iron-dropdown>` is a generalized element that is useful when you have
+hidden content (`dropdown-content`) that is revealed due to some change in
+state that should cause it to do so.
+
+Note that this is a low-level element intended to be used as part of other
+composite elements that cause dropdowns to be revealed.
+
+Examples of elements that might be implemented using an `iron-dropdown`
+include comboboxes, menubuttons, selects. The list goes on.
+
+The `<iron-dropdown>` element exposes attributes that allow the position
+of the `dropdown-content` relative to the `dropdown-trigger` to be
+configured.
+
+```html
+<iron-dropdown horizontal-align="right" vertical-align="top">
+ <div slot="dropdown-content">Hello!</div>
+</iron-dropdown>
+```
+
+In the above example, the `<div>` assigned to the `dropdown-content` slot will be
+hidden until the dropdown element has `opened` set to true, or when the `open`
+method is called on the element.
+
+### Changes in 2.0
+- Removed the private property `_focusTarget` which was deprecated.
+- `neon-animation 2.0` doesn't import the Web Animations polyfill, so you'll have to import it ([see example](demo/index.html))
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/bower.json
new file mode 100644
index 00000000000..6ecf2b24bce
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/bower.json
@@ -0,0 +1,62 @@
+{
+ "name": "iron-dropdown",
+ "version": "2.0.0",
+ "description": "An unstyled element that works similarly to a native browser select",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer"
+ ],
+ "main": "iron-dropdown.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-dropdown"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-dropdown",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "neon-animation": "PolymerElements/neon-animation#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "iron-image": "PolymerElements/iron-image#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.8.6",
+ "neon-animation": "PolymerElements/neon-animation#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "iron-image": "PolymerElements/iron-image#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/grow-height-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/grow-height-animation.html
new file mode 100644
index 00000000000..e2fdc448a07
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/grow-height-animation.html
@@ -0,0 +1,36 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../neon-animation/neon-animation-behavior.html">
+
+<script>
+ Polymer({
+ is: 'expand-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ var height = node.getBoundingClientRect().height;
+
+ this._effect = new KeyframeEffect(node, [{
+ height: (height / 2) + 'px'
+ }, {
+ height: height + 'px'
+ }], this.timingFromConfig(config));
+
+ return this._effect;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/index.html
new file mode 100644
index 00000000000..4c0f5bcddbd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/index.html
@@ -0,0 +1,191 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+
+<head>
+
+ <title>iron-dropdown</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-image/iron-image.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../neon-animation/web-animations.html">
+
+ <link rel="import" href="x-select.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles">
+ demo-snippet {
+ --demo-snippet-code: {
+ max-height: 250px;
+ }
+ }
+
+ [slot="dropdown-content"] {
+ background-color: white;
+ line-height: 20px;
+ border-radius: 3px;
+ box-shadow: 0px 2px 6px #ccc;
+ }
+
+ .random-content {
+ padding: 1.5em 2em;
+ max-width: 250px;
+ }
+
+ button {
+ border: 1px solid #ccc;
+ background-color: #eee;
+ padding: 1em;
+ border-radius: 3px;
+ cursor: pointer;
+ }
+
+ button:focus {
+ outline: none;
+ border-color: blue;
+ }
+
+ ul, li {
+ display: block;
+ position: relative;
+ margin: 0;
+ padding: 0;
+ }
+
+ a {
+ display: block;
+ position: relative;
+ padding: 1em;
+ text-decoration: none;
+ }
+
+ li:not(:last-of-type) {
+ border-bottom: 1px solid #eee;
+ }
+
+ a:hover {
+ text-decoration: underline;
+ }
+
+ iron-image {
+ padding: 1em;
+ background-color: #fff;
+ box-shadow: 0px 2px 6px #ccc;
+ border-radius: 3px;
+ }
+ </style></custom-style>
+</head>
+
+<body unresolved class="centered">
+ <h3>Basic</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <x-select>
+ <button slot="dropdown-trigger">Basic</button>
+ <div slot="dropdown-content" class="random-content">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
+ in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </div>
+ </x-select>
+ <x-select>
+ <button slot="dropdown-trigger">Overflowing</button>
+ <div slot="dropdown-content" class="random-content">
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem
+ quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam
+ eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
+ reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p>
+ </div>
+ </x-select>
+ </template>
+ </demo-snippet>
+
+ <h3>Alignment</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <x-select vertical-align="bottom">
+ <button slot="dropdown-trigger">Bottom-left Aligned</button>
+ <div slot="dropdown-content" class="random-content">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
+ in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </div>
+ </x-select>
+ <x-select horizontal-align="right" vertical-align="top">
+ <button slot="dropdown-trigger">Top-right Aligned</button>
+ <div slot="dropdown-content" class="random-content">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
+ in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </div>
+ </x-select>
+ </template>
+ </demo-snippet>
+
+ <h3>Content</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <x-select horizontal-align="left" vertical-align="top">
+ <button slot="dropdown-trigger">Content</button>
+ <iron-image slot="dropdown-content" src="../../iron-image/demo/polymer.svg"></iron-image>
+ </x-select>
+ <x-select horizontal-align="right" vertical-align="top">
+ <button slot="dropdown-trigger">Unordered list</button>
+ <ul slot="dropdown-content" tabindex="0">
+ <dom-repeat id="Demo">
+ <template is="dom-repeat">
+ <li><a href="javascript:void(0)">[[item]]</a></li>
+ </template>
+ </dom-repeat>
+ </ul>
+ </x-select>
+
+ <script>
+ Demo.items = [
+ 'allosaurus',
+ 'brontosaurus',
+ 'carcharodontosaurus',
+ 'diplodocus',
+ 'ekrixinatosaurus',
+ 'fukuiraptor',
+ 'gallimimus',
+ 'hadrosaurus',
+ 'iguanodon',
+ 'jainosaurus',
+ 'kritosaurus',
+ 'liaoceratops',
+ 'megalosaurus',
+ 'nemegtosaurus',
+ 'ornithomimus',
+ 'protoceratops',
+ 'quetecsaurus',
+ 'rajasaurus',
+ 'stegosaurus',
+ 'triceratops',
+ 'utahraptor',
+ 'vulcanodon',
+ 'wannanosaurus',
+ 'xenoceratops',
+ 'yandusaurus',
+ 'zephyrosaurus'
+ ];
+ // Support hybrid mode.
+ Demo.firstElementChild.items = Demo.items;
+ </script>
+ </template>
+ </demo-snippet>
+
+
+
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/x-select.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/x-select.html
new file mode 100644
index 00000000000..18ddb9494a1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/demo/x-select.html
@@ -0,0 +1,80 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-dropdown.html">
+<link rel="import" href="../../neon-animation/neon-animations.html">
+<link rel="import" href="grow-height-animation.html">
+
+<dom-module id="x-select">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ margin: 1em;
+ }
+ </style>
+ <div on-tap="open">
+ <slot name="dropdown-trigger"></slot>
+ </div>
+ <iron-dropdown id="dropdown"
+ vertical-align="[[verticalAlign]]"
+ horizontal-align="[[horizontalAlign]]"
+ disabled="[[disabled]]"
+ open-animation-config="[[openAnimationConfig]]"
+ close-animation-config="[[closeAnimationConfig]]">
+ <slot name="dropdown-content" slot="dropdown-content"></slot>
+ </iron-dropdown>
+ </template>
+ <script>
+ Polymer({
+ is: 'x-select',
+
+ properties: {
+ verticalAlign: String,
+ horizontalAlign: String,
+ disabled: Boolean,
+ openAnimationConfig: {
+ type: Array,
+ value: function() {
+ return [{
+ name: 'fade-in-animation',
+ timing: {
+ delay: 150,
+ duration: 50
+ }
+ }, {
+ name: 'expand-animation',
+ timing: {
+ delay: 150,
+ duration: 200
+ }
+ }];
+ }
+ },
+
+ closeAnimationConfig: {
+ type: Array,
+ value: function() {
+ return [{
+ name: 'fade-out-animation',
+ timing: {
+ duration: 200
+ }
+ }];
+ }
+ }
+ },
+
+ open: function() {
+ this.$.dropdown.open();
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/index.html
new file mode 100644
index 00000000000..1d3d6cada97
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
+The complete set of authors may be found at http://polymer.github.io/AUTHORS
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
+-->
+<html>
+<head>
+
+ <title>iron-dropdown</title>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown-scroll-manager.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown-scroll-manager.html
new file mode 100644
index 00000000000..38c21d8e2cf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown-scroll-manager.html
@@ -0,0 +1,374 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ (function() {
+ 'use strict';
+ /**
+ * Used to calculate the scroll direction during touch events.
+ * @type {!Object}
+ */
+ var lastTouchPosition = {
+ pageX: 0,
+ pageY: 0
+ };
+ /**
+ * Used to avoid computing event.path and filter scrollable nodes (better perf).
+ * @type {?EventTarget}
+ */
+ var lastRootTarget = null;
+ /**
+ * @type {!Array<Node>}
+ */
+ var lastScrollableNodes = [];
+
+ var scrollEvents = [
+ // Modern `wheel` event for mouse wheel scrolling:
+ 'wheel',
+ // Older, non-standard `mousewheel` event for some FF:
+ 'mousewheel',
+ // IE:
+ 'DOMMouseScroll',
+ // Touch enabled devices
+ 'touchstart',
+ 'touchmove'
+ ];
+
+ /**
+ * The IronDropdownScrollManager is intended to provide a central source
+ * of authority and control over which elements in a document are currently
+ * allowed to scroll.
+ */
+
+ Polymer.IronDropdownScrollManager = {
+
+ /**
+ * The current element that defines the DOM boundaries of the
+ * scroll lock. This is always the most recently locking element.
+ */
+ get currentLockingElement() {
+ return this._lockingElements[this._lockingElements.length - 1];
+ },
+
+ /**
+ * Returns true if the provided element is "scroll locked", which is to
+ * say that it cannot be scrolled via pointer or keyboard interactions.
+ *
+ * @param {HTMLElement} element An HTML element instance which may or may
+ * not be scroll locked.
+ */
+ elementIsScrollLocked: function(element) {
+ var currentLockingElement = this.currentLockingElement;
+
+ if (currentLockingElement === undefined)
+ return false;
+
+ var scrollLocked;
+
+ if (this._hasCachedLockedElement(element)) {
+ return true;
+ }
+
+ if (this._hasCachedUnlockedElement(element)) {
+ return false;
+ }
+
+ scrollLocked = !!currentLockingElement &&
+ currentLockingElement !== element &&
+ !this._composedTreeContains(currentLockingElement, element);
+
+ if (scrollLocked) {
+ this._lockedElementCache.push(element);
+ } else {
+ this._unlockedElementCache.push(element);
+ }
+
+ return scrollLocked;
+ },
+
+ /**
+ * Push an element onto the current scroll lock stack. The most recently
+ * pushed element and its children will be considered scrollable. All
+ * other elements will not be scrollable.
+ *
+ * Scroll locking is implemented as a stack so that cases such as
+ * dropdowns within dropdowns are handled well.
+ *
+ * @param {HTMLElement} element The element that should lock scroll.
+ */
+ pushScrollLock: function(element) {
+ // Prevent pushing the same element twice
+ if (this._lockingElements.indexOf(element) >= 0) {
+ return;
+ }
+
+ if (this._lockingElements.length === 0) {
+ this._lockScrollInteractions();
+ }
+
+ this._lockingElements.push(element);
+
+ this._lockedElementCache = [];
+ this._unlockedElementCache = [];
+ },
+
+ /**
+ * Remove an element from the scroll lock stack. The element being
+ * removed does not need to be the most recently pushed element. However,
+ * the scroll lock constraints only change when the most recently pushed
+ * element is removed.
+ *
+ * @param {HTMLElement} element The element to remove from the scroll
+ * lock stack.
+ */
+ removeScrollLock: function(element) {
+ var index = this._lockingElements.indexOf(element);
+
+ if (index === -1) {
+ return;
+ }
+
+ this._lockingElements.splice(index, 1);
+
+ this._lockedElementCache = [];
+ this._unlockedElementCache = [];
+
+ if (this._lockingElements.length === 0) {
+ this._unlockScrollInteractions();
+ }
+ },
+
+ _lockingElements: [],
+
+ _lockedElementCache: null,
+
+ _unlockedElementCache: null,
+
+ _hasCachedLockedElement: function(element) {
+ return this._lockedElementCache.indexOf(element) > -1;
+ },
+
+ _hasCachedUnlockedElement: function(element) {
+ return this._unlockedElementCache.indexOf(element) > -1;
+ },
+
+ _composedTreeContains: function(element, child) {
+ // NOTE(cdata): This method iterates over content elements and their
+ // corresponding distributed nodes to implement a contains-like method
+ // that pierces through the composed tree of the ShadowDOM. Results of
+ // this operation are cached (elsewhere) on a per-scroll-lock basis, to
+ // guard against potentially expensive lookups happening repeatedly as
+ // a user scrolls / touchmoves.
+ var contentElements;
+ var distributedNodes;
+ var contentIndex;
+ var nodeIndex;
+
+ if (element.contains(child)) {
+ return true;
+ }
+
+ contentElements = Polymer.dom(element).querySelectorAll('content,slot');
+
+ for (contentIndex = 0; contentIndex < contentElements.length; ++contentIndex) {
+
+ distributedNodes = Polymer.dom(contentElements[contentIndex]).getDistributedNodes();
+
+ for (nodeIndex = 0; nodeIndex < distributedNodes.length; ++nodeIndex) {
+ // Polymer 2.x returns slot.assignedNodes which can contain text nodes.
+ if (distributedNodes[nodeIndex].nodeType !== Node.ELEMENT_NODE) continue;
+
+ if (this._composedTreeContains(distributedNodes[nodeIndex], child)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ _scrollInteractionHandler: function(event) {
+ // Avoid canceling an event with cancelable=false, e.g. scrolling is in
+ // progress and cannot be interrupted.
+ if (event.cancelable && this._shouldPreventScrolling(event)) {
+ event.preventDefault();
+ }
+ // If event has targetTouches (touch event), update last touch position.
+ if (event.targetTouches) {
+ var touch = event.targetTouches[0];
+ lastTouchPosition.pageX = touch.pageX;
+ lastTouchPosition.pageY = touch.pageY;
+ }
+ },
+
+ _lockScrollInteractions: function() {
+ this._boundScrollHandler = this._boundScrollHandler ||
+ this._scrollInteractionHandler.bind(this);
+ for (var i = 0, l = scrollEvents.length; i < l; i++) {
+ // NOTE: browsers that don't support objects as third arg will
+ // interpret it as boolean, hence useCapture = true in this case.
+ document.addEventListener(scrollEvents[i], this._boundScrollHandler, {
+ capture: true,
+ passive: false
+ });
+ }
+ },
+
+ _unlockScrollInteractions: function() {
+ for (var i = 0, l = scrollEvents.length; i < l; i++) {
+ // NOTE: browsers that don't support objects as third arg will
+ // interpret it as boolean, hence useCapture = true in this case.
+ document.removeEventListener(scrollEvents[i], this._boundScrollHandler, {
+ capture: true,
+ passive: false
+ });
+ }
+ },
+
+ /**
+ * Returns true if the event causes scroll outside the current locking
+ * element, e.g. pointer/keyboard interactions, or scroll "leaking"
+ * outside the locking element when it is already at its scroll boundaries.
+ * @param {!Event} event
+ * @return {boolean}
+ * @private
+ */
+ _shouldPreventScrolling: function(event) {
+
+ // Update if root target changed. For touch events, ensure we don't
+ // update during touchmove.
+ var target = Polymer.dom(event).rootTarget;
+ if (event.type !== 'touchmove' && lastRootTarget !== target) {
+ lastRootTarget = target;
+ lastScrollableNodes = this._getScrollableNodes(Polymer.dom(event).path);
+ }
+
+ // Prevent event if no scrollable nodes.
+ if (!lastScrollableNodes.length) {
+ return true;
+ }
+ // Don't prevent touchstart event inside the locking element when it has
+ // scrollable nodes.
+ if (event.type === 'touchstart') {
+ return false;
+ }
+ // Get deltaX/Y.
+ var info = this._getScrollInfo(event);
+ // Prevent if there is no child that can scroll.
+ return !this._getScrollingNode(lastScrollableNodes, info.deltaX, info.deltaY);
+ },
+
+ /**
+ * Returns an array of scrollable nodes up to the current locking element,
+ * which is included too if scrollable.
+ * @param {!Array<Node>} nodes
+ * @return {Array<Node>} scrollables
+ * @private
+ */
+ _getScrollableNodes: function(nodes) {
+ var scrollables = [];
+ var lockingIndex = nodes.indexOf(this.currentLockingElement);
+ // Loop from root target to locking element (included).
+ for (var i = 0; i <= lockingIndex; i++) {
+ // Skip non-Element nodes.
+ if (nodes[i].nodeType !== Node.ELEMENT_NODE) {
+ continue;
+ }
+ var node = /** @type {!Element} */ (nodes[i]);
+ // Check inline style before checking computed style.
+ var style = node.style;
+ if (style.overflow !== 'scroll' && style.overflow !== 'auto') {
+ style = window.getComputedStyle(node);
+ }
+ if (style.overflow === 'scroll' || style.overflow === 'auto') {
+ scrollables.push(node);
+ }
+ }
+ return scrollables;
+ },
+
+ /**
+ * Returns the node that is scrolling. If there is no scrolling,
+ * returns undefined.
+ * @param {!Array<Node>} nodes
+ * @param {number} deltaX Scroll delta on the x-axis
+ * @param {number} deltaY Scroll delta on the y-axis
+ * @return {Node|undefined}
+ * @private
+ */
+ _getScrollingNode: function(nodes, deltaX, deltaY) {
+ // No scroll.
+ if (!deltaX && !deltaY) {
+ return;
+ }
+ // Check only one axis according to where there is more scroll.
+ // Prefer vertical to horizontal.
+ var verticalScroll = Math.abs(deltaY) >= Math.abs(deltaX);
+ for (var i = 0; i < nodes.length; i++) {
+ var node = nodes[i];
+ var canScroll = false;
+ if (verticalScroll) {
+ // delta < 0 is scroll up, delta > 0 is scroll down.
+ canScroll = deltaY < 0 ? node.scrollTop > 0 :
+ node.scrollTop < node.scrollHeight - node.clientHeight;
+ } else {
+ // delta < 0 is scroll left, delta > 0 is scroll right.
+ canScroll = deltaX < 0 ? node.scrollLeft > 0 :
+ node.scrollLeft < node.scrollWidth - node.clientWidth;
+ }
+ if (canScroll) {
+ return node;
+ }
+ }
+ },
+
+ /**
+ * Returns scroll `deltaX` and `deltaY`.
+ * @param {!Event} event The scroll event
+ * @return {{deltaX: number, deltaY: number}} Object containing the
+ * x-axis scroll delta (positive: scroll right, negative: scroll left,
+ * 0: no scroll), and the y-axis scroll delta (positive: scroll down,
+ * negative: scroll up, 0: no scroll).
+ * @private
+ */
+ _getScrollInfo: function(event) {
+ var info = {
+ deltaX: event.deltaX,
+ deltaY: event.deltaY
+ };
+ // Already available.
+ if ('deltaX' in event) {
+ // do nothing, values are already good.
+ }
+ // Safari has scroll info in `wheelDeltaX/Y`.
+ else if ('wheelDeltaX' in event) {
+ info.deltaX = -event.wheelDeltaX;
+ info.deltaY = -event.wheelDeltaY;
+ }
+ // Firefox has scroll info in `detail` and `axis`.
+ else if ('axis' in event) {
+ info.deltaX = event.axis === 1 ? event.detail : 0;
+ info.deltaY = event.axis === 2 ? event.detail : 0;
+ }
+ // On mobile devices, calculate scroll direction.
+ else if (event.targetTouches) {
+ var touch = event.targetTouches[0];
+ // Touch moves from right to left => scrolling goes right.
+ info.deltaX = lastTouchPosition.pageX - touch.pageX;
+ // Touch moves from down to up => scrolling goes down.
+ info.deltaY = lastTouchPosition.pageY - touch.pageY;
+ }
+ return info;
+ }
+ };
+ })();
+</script> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown.html
new file mode 100644
index 00000000000..a693cccda7c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-dropdown/iron-dropdown.html
@@ -0,0 +1,349 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+<link rel="import" href="../iron-overlay-behavior/iron-overlay-behavior.html">
+<link rel="import" href="../neon-animation/neon-animation-runner-behavior.html">
+<link rel="import" href="iron-dropdown-scroll-manager.html">
+
+<!--
+`<iron-dropdown>` is a generalized element that is useful when you have
+hidden content (`dropdown-content`) that is revealed due to some change in
+state that should cause it to do so.
+
+Note that this is a low-level element intended to be used as part of other
+composite elements that cause dropdowns to be revealed.
+
+Examples of elements that might be implemented using an `iron-dropdown`
+include comboboxes, menubuttons, selects. The list goes on.
+
+The `<iron-dropdown>` element exposes attributes that allow the position
+of the `dropdown-content` relative to the `dropdown-trigger` to be
+configured.
+
+ <iron-dropdown horizontal-align="right" vertical-align="top">
+ <div slot="dropdown-content">Hello!</div>
+ </iron-dropdown>
+
+In the above example, the `<div>` assigned to the `dropdown-content` slot will be
+hidden until the dropdown element has `opened` set to true, or when the `open`
+method is called on the element.
+
+@demo demo/index.html
+-->
+
+<dom-module id="iron-dropdown">
+ <template>
+ <style>
+ :host {
+ position: fixed;
+ }
+
+ #contentWrapper ::slotted(*) {
+ overflow: auto;
+ }
+
+ #contentWrapper.animating ::slotted(*) {
+ overflow: hidden;
+ }
+ </style>
+
+ <div id="contentWrapper">
+ <slot id="content" name="dropdown-content"></slot>
+ </div>
+ </template>
+
+ <script>
+ (function() {
+ 'use strict';
+
+ Polymer({
+ is: 'iron-dropdown',
+
+ behaviors: [
+ Polymer.IronControlState,
+ Polymer.IronA11yKeysBehavior,
+ Polymer.IronOverlayBehavior,
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ properties: {
+ /**
+ * The orientation against which to align the dropdown content
+ * horizontally relative to the dropdown trigger.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ horizontalAlign: {
+ type: String,
+ value: 'left',
+ reflectToAttribute: true
+ },
+
+ /**
+ * The orientation against which to align the dropdown content
+ * vertically relative to the dropdown trigger.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ verticalAlign: {
+ type: String,
+ value: 'top',
+ reflectToAttribute: true
+ },
+
+ /**
+ * An animation config. If provided, this will be used to animate the
+ * opening of the dropdown. Pass an Array for multiple animations.
+ * See `neon-animation` documentation for more animation configuration
+ * details.
+ */
+ openAnimationConfig: {
+ type: Object
+ },
+
+ /**
+ * An animation config. If provided, this will be used to animate the
+ * closing of the dropdown. Pass an Array for multiple animations.
+ * See `neon-animation` documentation for more animation configuration
+ * details.
+ */
+ closeAnimationConfig: {
+ type: Object
+ },
+
+ /**
+ * If provided, this will be the element that will be focused when
+ * the dropdown opens.
+ */
+ focusTarget: {
+ type: Object
+ },
+
+ /**
+ * Set to true to disable animations when opening and closing the
+ * dropdown.
+ */
+ noAnimations: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * By default, the dropdown will constrain scrolling on the page
+ * to itself when opened.
+ * Set to true in order to prevent scroll from being constrained
+ * to the dropdown when it opens.
+ */
+ allowOutsideScroll: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Callback for scroll events.
+ * @type {Function}
+ * @private
+ */
+ _boundOnCaptureScroll: {
+ type: Function,
+ value: function() {
+ return this._onCaptureScroll.bind(this);
+ }
+ }
+ },
+
+ listeners: {
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+
+ observers: [
+ '_updateOverlayPosition(positionTarget, verticalAlign, horizontalAlign, verticalOffset, horizontalOffset)'
+ ],
+
+ /**
+ * The element that is contained by the dropdown, if any.
+ */
+ get containedElement() {
+ // Polymer 2.x returns slot.assignedNodes which can contain text nodes.
+ var nodes = Polymer.dom(this.$.content).getDistributedNodes();
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ if (nodes[i].nodeType === Node.ELEMENT_NODE) {
+ return nodes[i];
+ }
+ }
+ },
+
+ ready: function() {
+ // Memoized scrolling position, used to block scrolling outside.
+ this._scrollTop = 0;
+ this._scrollLeft = 0;
+ // Used to perform a non-blocking refit on scroll.
+ this._refitOnScrollRAF = null;
+ },
+
+ attached: function () {
+ if (!this.sizingTarget || this.sizingTarget === this) {
+ this.sizingTarget = this.containedElement || this;
+ }
+ },
+
+ detached: function() {
+ this.cancelAnimation();
+ document.removeEventListener('scroll', this._boundOnCaptureScroll);
+ Polymer.IronDropdownScrollManager.removeScrollLock(this);
+ },
+
+ /**
+ * Called when the value of `opened` changes.
+ * Overridden from `IronOverlayBehavior`
+ */
+ _openedChanged: function() {
+ if (this.opened && this.disabled) {
+ this.cancel();
+ } else {
+ this.cancelAnimation();
+ this._updateAnimationConfig();
+ this._saveScrollPosition();
+ if (this.opened) {
+ document.addEventListener('scroll', this._boundOnCaptureScroll);
+ !this.allowOutsideScroll && Polymer.IronDropdownScrollManager.pushScrollLock(this);
+ } else {
+ document.removeEventListener('scroll', this._boundOnCaptureScroll);
+ Polymer.IronDropdownScrollManager.removeScrollLock(this);
+ }
+ Polymer.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments);
+ }
+ },
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
+ _renderOpened: function() {
+ if (!this.noAnimations && this.animationConfig.open) {
+ this.$.contentWrapper.classList.add('animating');
+ this.playAnimation('open');
+ } else {
+ Polymer.IronOverlayBehaviorImpl._renderOpened.apply(this, arguments);
+ }
+ },
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
+ _renderClosed: function() {
+ if (!this.noAnimations && this.animationConfig.close) {
+ this.$.contentWrapper.classList.add('animating');
+ this.playAnimation('close');
+ } else {
+ Polymer.IronOverlayBehaviorImpl._renderClosed.apply(this, arguments);
+ }
+ },
+
+ /**
+ * Called when animation finishes on the dropdown (when opening or
+ * closing). Responsible for "completing" the process of opening or
+ * closing the dropdown by positioning it or setting its display to
+ * none.
+ */
+ _onNeonAnimationFinish: function() {
+ this.$.contentWrapper.classList.remove('animating');
+ if (this.opened) {
+ this._finishRenderOpened();
+ } else {
+ this._finishRenderClosed();
+ }
+ },
+
+ _onCaptureScroll: function() {
+ if (!this.allowOutsideScroll) {
+ this._restoreScrollPosition();
+ } else {
+ this._refitOnScrollRAF && window.cancelAnimationFrame(this._refitOnScrollRAF);
+ this._refitOnScrollRAF = window.requestAnimationFrame(this.refit.bind(this));
+ }
+ },
+
+ /**
+ * Memoizes the scroll position of the outside scrolling element.
+ * @private
+ */
+ _saveScrollPosition: function() {
+ if (document.scrollingElement) {
+ this._scrollTop = document.scrollingElement.scrollTop;
+ this._scrollLeft = document.scrollingElement.scrollLeft;
+ } else {
+ // Since we don't know if is the body or html, get max.
+ this._scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
+ this._scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
+ }
+ },
+
+ /**
+ * Resets the scroll position of the outside scrolling element.
+ * @private
+ */
+ _restoreScrollPosition: function() {
+ if (document.scrollingElement) {
+ document.scrollingElement.scrollTop = this._scrollTop;
+ document.scrollingElement.scrollLeft = this._scrollLeft;
+ } else {
+ // Since we don't know if is the body or html, set both.
+ document.documentElement.scrollTop = this._scrollTop;
+ document.documentElement.scrollLeft = this._scrollLeft;
+ document.body.scrollTop = this._scrollTop;
+ document.body.scrollLeft = this._scrollLeft;
+ }
+ },
+
+ /**
+ * Constructs the final animation config from different properties used
+ * to configure specific parts of the opening and closing animations.
+ */
+ _updateAnimationConfig: function() {
+ // Update the animation node to be the containedElement.
+ var animationNode = this.containedElement;
+ var animations = [].concat(this.openAnimationConfig || []).concat(this.closeAnimationConfig || []);
+ for (var i = 0; i < animations.length; i++) {
+ animations[i].node = animationNode;
+ }
+ this.animationConfig = {
+ open: this.openAnimationConfig,
+ close: this.closeAnimationConfig
+ };
+ },
+
+ /**
+ * Updates the overlay position based on configured horizontal
+ * and vertical alignment.
+ */
+ _updateOverlayPosition: function() {
+ if (this.isAttached) {
+ // This triggers iron-resize, and iron-overlay-behavior will call refit if needed.
+ this.notifyResize();
+ }
+ },
+
+ /**
+ * Apply focus to focusTarget or containedElement
+ */
+ _applyFocus: function() {
+ var focusTarget = this.focusTarget || this.containedElement;
+ if (focusTarget && this.opened && !this.noAutoFocus) {
+ focusTarget.focus();
+ } else {
+ Polymer.IronOverlayBehaviorImpl._applyFocus.apply(this, arguments);
+ }
+ }
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.bower.json
new file mode 100644
index 00000000000..a577ee88567
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.bower.json
@@ -0,0 +1,59 @@
+{
+ "name": "iron-fit-behavior",
+ "version": "2.2.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Fits an element inside another element",
+ "private": true,
+ "main": "iron-fit-behavior.html",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-fit-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-fit-behavior",
+ "_release": "2.2.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.0",
+ "commit": "ec88a7bc2c4fcf37af6892b790e466b8fd5c6af9"
+ },
+ "_source": "https://github.com/PolymerElements/iron-fit-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-fit-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..0bd8a80654a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-fit-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.travis.yml
new file mode 100644
index 00000000000..873670d26a8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Typings are stale. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ L4lSnuQZDY+YcXYzBZSRKjJJ1rZf18Lc/8YDgQPfkMkAItrRHGR8vblBoKiPAmtvgNxztcpZxAXTiDy1vAeVv54QnX9b1JsuOs7rrQxB4BS04Dj7LdT6DDu1p/V09MJBN11lzLVxgpxljbumwGWE4gfpDl2+rjbBt7cRV5VkVnE=
+ - secure: >-
+ H7dHZ9FQvJszK2UMNZJiZmzOPET3muO/XvlkUc1x3KcUlV5/tD/404V05XfFMowH7DavHFYleZkb89deYjq9PHncO9c4bp4SHD7HKN4FaGyhzfpXjg66v3dZH/OcERjaas337uUE2jo/x1jCq4HJCz2bMVh+bvd4du1C/2OWarc=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/README.md
new file mode 100644
index 00000000000..4900ab986fc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/README.md
@@ -0,0 +1,43 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-fit-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-fit-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-fit-behavior)_
+
+
+## Polymer.IronFitBehavior
+
+`Polymer.IronFitBehavior` fits an element in another element using `max-height` and `max-width`, and
+optionally centers it in the window or another element.
+
+The element will only be sized and/or positioned if it has not already been sized and/or positioned
+by CSS.
+
+| CSS properties | Action |
+| --- | --- |
+| `position` set | Element is not centered horizontally or vertically |
+| `top` or `bottom` set | Element is not vertically centered |
+| `left` or `right` set | Element is not horizontally centered |
+| `max-height` set | Element respects `max-height` |
+| `max-width` set | Element respects `max-width` |
+
+`Polymer.IronFitBehavior` can position an element into another element using
+`verticalAlign` and `horizontalAlign`. This will override the element's css position.
+
+```html
+ <div class="container">
+ <iron-fit-impl vertical-align="top" horizontal-align="auto">
+ Positioned into the container
+ </iron-fit-impl>
+ </div>
+```
+
+Use `noOverlap` to position the element around another element without overlapping it.
+
+```html
+ <div class="container">
+ <iron-fit-impl no-overlap vertical-align="auto" horizontal-align="auto">
+ Positioned around the container
+ </iron-fit-impl>
+ </div>
+```
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/bower.json
new file mode 100644
index 00000000000..bd865a4a148
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/bower.json
@@ -0,0 +1,49 @@
+{
+ "name": "iron-fit-behavior",
+ "version": "2.2.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Fits an element inside another element",
+ "private": true,
+ "main": "iron-fit-behavior.html",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-fit-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/index.html
new file mode 100644
index 00000000000..3b166d9be1f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/index.html
@@ -0,0 +1,175 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+
+<head>
+
+ <title>iron-fit-behavior demo</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="simple-fit.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles">
+ .centered {
+ min-width: 600px;
+ }
+ demo-snippet {
+ --demo-snippet-code: {
+ max-height: 250px;
+ }
+ }
+ </style></custom-style>
+
+</head>
+
+<body unresolved class="centered">
+ <h3>
+ An element with <code>IronFitBehavior</code> can be centered in
+ <code>fitInto</code> or positioned around a <code>positionTarget</code>
+ </h3>
+ <demo-snippet>
+ <template>
+ <style>
+ .target {
+ cursor: pointer;
+ text-align: center;
+ display: inline-block;
+ box-sizing: border-box;
+ border: 1px solid;
+ width: 120px;
+ padding: 26px 0;
+ margin: 8px;
+ }
+
+ #myFit {
+ z-index: 10;
+ padding: 20px;
+ overflow: auto;
+ min-width: 100px;
+ min-height: 100px;
+ }
+
+ button {
+ background-color: white;
+ border-radius: 5px;
+ border-width: 1px;
+ }
+ button.selected {
+ background-color: #b3e5fc;
+ }
+ </style>
+ <dom-bind><template is="dom-bind">
+ <template is="dom-repeat" items="[[containers]]">
+ <div class="target" on-tap="updatePositionTarget">Target</div>
+ </template>
+ <simple-fit id="myFit" auto-fit-on-attach>
+ <h2>Align</h2>
+ <p>
+ <button on-tap="updateAlign" vertical-align="top">top</button>
+ <button on-tap="updateAlign" vertical-align="middle">middle</button>
+ <button on-tap="updateAlign" vertical-align="bottom">bottom</button>
+ <button on-tap="updateAlign" vertical-align="auto">auto</button>
+ <button on-tap="updateAlign" vertical-align>null</button>
+ </p>
+ <p>
+ <button on-tap="updateAlign" horizontal-align="left">left</button>
+ <button on-tap="updateAlign" horizontal-align="center">center</button>
+ <button on-tap="updateAlign" horizontal-align="right">right</button>
+ <button on-tap="updateAlign" horizontal-align="auto">auto</button>
+ <button on-tap="updateAlign" horizontal-align>null</button>
+ </p>
+ <button on-tap="toggleNoOverlap">no overlap</button>
+ <button on-tap="toggleDynamicAlign">dynamic align</button>
+ </simple-fit>
+ <script>
+
+ var template = document.querySelector('template[is="dom-bind"]');
+
+ template.containers = new Array(30);
+
+ template.updatePositionTarget = function(e) {
+ var target = Polymer.dom(e).rootTarget;
+ target = myFit.positionTarget === target ? myFit._defaultPositionTarget : target;
+ myFit.positionTarget.style.backgroundColor = '';
+ target.style.backgroundColor = 'orange';
+ myFit.positionTarget = target;
+ refit();
+ };
+
+ template.updateAlign = function(e) {
+ var target = Polymer.dom(e).rootTarget;
+ if (target.hasAttribute('horizontal-align')) {
+ myFit.horizontalAlign = target.getAttribute('horizontal-align');
+ var children = target.parentNode.querySelectorAll('[horizontal-align]');
+ for (var i = 0; i < children.length; i++) {
+ toggleClass(children[i], 'selected', children[i] === target);
+ }
+ }
+ if (target.hasAttribute('vertical-align')) {
+ myFit.verticalAlign = target.getAttribute('vertical-align');
+ var children = target.parentNode.querySelectorAll('[vertical-align]');
+ for (var i = 0; i < children.length; i++) {
+ toggleClass(children[i], 'selected', children[i] === target);
+ }
+ }
+ refit();
+ };
+
+ template.toggleNoOverlap = function(e) {
+ myFit.noOverlap = !myFit.noOverlap;
+ toggleClass(Polymer.dom(e).rootTarget, 'selected', myFit.noOverlap);
+ refit();
+ };
+
+ template.toggleDynamicAlign = function(e) {
+ myFit.dynamicAlign = !myFit.dynamicAlign;
+ toggleClass(Polymer.dom(e).rootTarget, 'selected', myFit.dynamicAlign);
+ refit();
+ };
+
+ // Support hybrid mode
+ var templatev1 = document.querySelector('dom-bind');
+ templatev1.containers = template.containers;
+ templatev1.updatePositionTarget = template.updatePositionTarget;
+ templatev1.updateAlign = template.updateAlign;
+ templatev1.toggleNoOverlap = template.toggleNoOverlap;
+ templatev1.toggleDynamicAlign = template.toggleDynamicAlign;
+
+ // Listen for resize and scroll on window.
+ window.addEventListener('resize', refit);
+ window.addEventListener('scroll', refit);
+
+ var _raf = null;
+ function refit() {
+ _raf && window.cancelAnimationFrame(_raf);
+ _raf = window.requestAnimationFrame(function() {
+ _raf = null;
+ myFit.refit();
+ });
+ }
+
+ function toggleClass(element, cssClass, condition) {
+ element.classList[condition ? 'add' : 'remove'](cssClass);
+ }
+ </script>
+ </template></dom-bind>
+ </template>
+ </demo-snippet>
+
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/simple-fit.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/simple-fit.html
new file mode 100644
index 00000000000..c7c6b876e36
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/demo/simple-fit.html
@@ -0,0 +1,28 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-fit-behavior.html">
+<link rel="import" href="../../paper-styles/color.html">
+
+<dom-module id="simple-fit">
+ <template>
+ <style>
+ :host {
+ background-color: var(--paper-light-blue-500);
+ color: white;
+ text-align: center;
+ }
+ </style>
+ <slot></slot>
+ </template>
+ <script>
+ Polymer({is: 'simple-fit', behaviors: [Polymer.IronFitBehavior]});
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/index.html
new file mode 100644
index 00000000000..5ffa7d61cec
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-fit-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.d.ts
new file mode 100644
index 00000000000..e9356e60f21
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.d.ts
@@ -0,0 +1,211 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-fit-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.IronFitBehavior` fits an element in another element using `max-height`
+ * and `max-width`, and optionally centers it in the window or another element.
+ *
+ * The element will only be sized and/or positioned if it has not already been
+ * sized and/or positioned by CSS.
+ *
+ * CSS properties | Action
+ * -----------------------------|-------------------------------------------
+ * `position` set | Element is not centered horizontally or
+ * vertically `top` or `bottom` set | Element is not vertically centered
+ * `left` or `right` set | Element is not horizontally centered
+ * `max-height` set | Element respects `max-height`
+ * `max-width` set | Element respects `max-width`
+ *
+ * `Polymer.IronFitBehavior` can position an element into another element using
+ * `verticalAlign` and `horizontalAlign`. This will override the element's css
+ * position.
+ *
+ * <div class="container">
+ * <iron-fit-impl vertical-align="top" horizontal-align="auto">
+ * Positioned into the container
+ * </iron-fit-impl>
+ * </div>
+ *
+ * Use `noOverlap` to position the element around another element without
+ * overlapping it.
+ *
+ * <div class="container">
+ * <iron-fit-impl no-overlap vertical-align="auto" horizontal-align="auto">
+ * Positioned around the container
+ * </iron-fit-impl>
+ * </div>
+ *
+ * Use `horizontalOffset, verticalOffset` to offset the element from its
+ * `positionTarget`; `Polymer.IronFitBehavior` will collapse these in order to keep
+ * the element within `fitInto` boundaries, while preserving the element's CSS
+ * margin values.
+ *
+ * <div class="container">
+ * <iron-fit-impl vertical-align="top" vertical-offset="20">
+ * With vertical offset
+ * </iron-fit-impl>
+ * </div>
+ *
+ *
+ *
+ */
+ interface IronFitBehavior {
+
+ /**
+ * The element that will receive a `max-height`/`width`. By default it is
+ * the same as `this`, but it can be set to a child element. This is useful,
+ * for example, for implementing a scrolling region inside the element.
+ */
+ sizingTarget: Element;
+
+ /**
+ * The element to fit `this` into.
+ */
+ fitInto: object|null|undefined;
+
+ /**
+ * Will position the element around the positionTarget without overlapping
+ * it.
+ */
+ noOverlap: boolean|null|undefined;
+
+ /**
+ * The element that should be used to position the element. If not set, it
+ * will default to the parent node.
+ */
+ positionTarget: Element;
+
+ /**
+ * The orientation against which to align the element horizontally
+ * relative to the `positionTarget`. Possible values are "left", "right",
+ * "center", "auto".
+ */
+ horizontalAlign: string|null|undefined;
+
+ /**
+ * The orientation against which to align the element vertically
+ * relative to the `positionTarget`. Possible values are "top", "bottom",
+ * "middle", "auto".
+ */
+ verticalAlign: string|null|undefined;
+
+ /**
+ * If true, it will use `horizontalAlign` and `verticalAlign` values as
+ * preferred alignment and if there's not enough space, it will pick the
+ * values which minimize the cropping.
+ */
+ dynamicAlign: boolean|null|undefined;
+
+ /**
+ * A pixel value that will be added to the position calculated for the
+ * given `horizontalAlign`, in the direction of alignment. You can think
+ * of it as increasing or decreasing the distance to the side of the
+ * screen given by `horizontalAlign`.
+ *
+ * If `horizontalAlign` is "left" or "center", this offset will increase or
+ * decrease the distance to the left side of the screen: a negative offset
+ * will move the dropdown to the left; a positive one, to the right.
+ *
+ * Conversely if `horizontalAlign` is "right", this offset will increase
+ * or decrease the distance to the right side of the screen: a negative
+ * offset will move the dropdown to the right; a positive one, to the left.
+ */
+ horizontalOffset: number|null|undefined;
+
+ /**
+ * A pixel value that will be added to the position calculated for the
+ * given `verticalAlign`, in the direction of alignment. You can think
+ * of it as increasing or decreasing the distance to the side of the
+ * screen given by `verticalAlign`.
+ *
+ * If `verticalAlign` is "top" or "middle", this offset will increase or
+ * decrease the distance to the top side of the screen: a negative offset
+ * will move the dropdown upwards; a positive one, downwards.
+ *
+ * Conversely if `verticalAlign` is "bottom", this offset will increase
+ * or decrease the distance to the bottom side of the screen: a negative
+ * offset will move the dropdown downwards; a positive one, upwards.
+ */
+ verticalOffset: number|null|undefined;
+
+ /**
+ * Set to true to auto-fit on attach.
+ */
+ autoFitOnAttach: boolean|null|undefined;
+ _fitInfo: object|null;
+ readonly _fitWidth: any;
+ readonly _fitHeight: any;
+ readonly _fitLeft: any;
+ readonly _fitTop: any;
+
+ /**
+ * The element that should be used to position the element,
+ * if no position target is configured.
+ *
+ */
+ readonly _defaultPositionTarget: any;
+
+ /**
+ * The horizontal align value, accounting for the RTL/LTR text direction.
+ *
+ */
+ readonly _localeHorizontalAlign: any;
+ attached(): void;
+ detached(): void;
+
+ /**
+ * Positions and fits the element into the `fitInto` element.
+ */
+ fit(): void;
+
+ /**
+ * Memoize information needed to position and size the target element.
+ */
+ _discoverInfo(): void;
+
+ /**
+ * Resets the target element's position and size constraints, and clear
+ * the memoized data.
+ */
+ resetFit(): void;
+
+ /**
+ * Equivalent to calling `resetFit()` and `fit()`. Useful to call this after
+ * the element or the `fitInto` element has been resized, or if any of the
+ * positioning properties (e.g. `horizontalAlign, verticalAlign`) is updated.
+ * It preserves the scroll position of the sizingTarget.
+ */
+ refit(): void;
+
+ /**
+ * Positions the element according to `horizontalAlign, verticalAlign`.
+ */
+ position(): void;
+
+ /**
+ * Constrains the size of the element to `fitInto` by setting `max-height`
+ * and/or `max-width`.
+ */
+ constrain(): void;
+ _sizeDimension(rect: any, positionedBy: any, start: any, end: any, extent: any): void;
+
+ /**
+ * Centers horizontally and vertically if not already positioned. This also
+ * sets `position:fixed`.
+ */
+ center(): void;
+ }
+
+ const IronFitBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.html
new file mode 100644
index 00000000000..b335c704d25
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/iron-fit-behavior.html
@@ -0,0 +1,679 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ /**
+ `Polymer.IronFitBehavior` fits an element in another element using `max-height`
+ and `max-width`, and optionally centers it in the window or another element.
+
+ The element will only be sized and/or positioned if it has not already been
+ sized and/or positioned by CSS.
+
+ CSS properties | Action
+ -----------------------------|-------------------------------------------
+ `position` set | Element is not centered horizontally or
+ vertically `top` or `bottom` set | Element is not vertically centered
+ `left` or `right` set | Element is not horizontally centered
+ `max-height` set | Element respects `max-height`
+ `max-width` set | Element respects `max-width`
+
+ `Polymer.IronFitBehavior` can position an element into another element using
+ `verticalAlign` and `horizontalAlign`. This will override the element's css
+ position.
+
+ <div class="container">
+ <iron-fit-impl vertical-align="top" horizontal-align="auto">
+ Positioned into the container
+ </iron-fit-impl>
+ </div>
+
+ Use `noOverlap` to position the element around another element without
+ overlapping it.
+
+ <div class="container">
+ <iron-fit-impl no-overlap vertical-align="auto" horizontal-align="auto">
+ Positioned around the container
+ </iron-fit-impl>
+ </div>
+
+ Use `horizontalOffset, verticalOffset` to offset the element from its
+ `positionTarget`; `Polymer.IronFitBehavior` will collapse these in order to keep
+ the element within `fitInto` boundaries, while preserving the element's CSS
+ margin values.
+
+ <div class="container">
+ <iron-fit-impl vertical-align="top" vertical-offset="20">
+ With vertical offset
+ </iron-fit-impl>
+ </div>
+
+
+ @demo demo/index.html
+ @polymerBehavior
+ */
+ Polymer.IronFitBehavior = {
+
+ properties: {
+
+ /**
+ * The element that will receive a `max-height`/`width`. By default it is
+ * the same as `this`, but it can be set to a child element. This is useful,
+ * for example, for implementing a scrolling region inside the element.
+ * @type {!Element}
+ */
+ sizingTarget: {
+ type: Object,
+ value: function() {
+ return this;
+ }
+ },
+
+ /**
+ * The element to fit `this` into.
+ */
+ fitInto: {type: Object, value: window},
+
+ /**
+ * Will position the element around the positionTarget without overlapping
+ * it.
+ */
+ noOverlap: {type: Boolean},
+
+ /**
+ * The element that should be used to position the element. If not set, it
+ * will default to the parent node.
+ * @type {!Element}
+ */
+ positionTarget: {type: Element},
+
+ /**
+ * The orientation against which to align the element horizontally
+ * relative to the `positionTarget`. Possible values are "left", "right",
+ * "center", "auto".
+ */
+ horizontalAlign: {type: String},
+
+ /**
+ * The orientation against which to align the element vertically
+ * relative to the `positionTarget`. Possible values are "top", "bottom",
+ * "middle", "auto".
+ */
+ verticalAlign: {type: String},
+
+ /**
+ * If true, it will use `horizontalAlign` and `verticalAlign` values as
+ * preferred alignment and if there's not enough space, it will pick the
+ * values which minimize the cropping.
+ */
+ dynamicAlign: {type: Boolean},
+
+ /**
+ * A pixel value that will be added to the position calculated for the
+ * given `horizontalAlign`, in the direction of alignment. You can think
+ * of it as increasing or decreasing the distance to the side of the
+ * screen given by `horizontalAlign`.
+ *
+ * If `horizontalAlign` is "left" or "center", this offset will increase or
+ * decrease the distance to the left side of the screen: a negative offset
+ * will move the dropdown to the left; a positive one, to the right.
+ *
+ * Conversely if `horizontalAlign` is "right", this offset will increase
+ * or decrease the distance to the right side of the screen: a negative
+ * offset will move the dropdown to the right; a positive one, to the left.
+ */
+ horizontalOffset: {type: Number, value: 0, notify: true},
+
+ /**
+ * A pixel value that will be added to the position calculated for the
+ * given `verticalAlign`, in the direction of alignment. You can think
+ * of it as increasing or decreasing the distance to the side of the
+ * screen given by `verticalAlign`.
+ *
+ * If `verticalAlign` is "top" or "middle", this offset will increase or
+ * decrease the distance to the top side of the screen: a negative offset
+ * will move the dropdown upwards; a positive one, downwards.
+ *
+ * Conversely if `verticalAlign` is "bottom", this offset will increase
+ * or decrease the distance to the bottom side of the screen: a negative
+ * offset will move the dropdown downwards; a positive one, upwards.
+ */
+ verticalOffset: {type: Number, value: 0, notify: true},
+
+ /**
+ * Set to true to auto-fit on attach.
+ */
+ autoFitOnAttach: {type: Boolean, value: false},
+
+ /** @type {?Object} */
+ _fitInfo: {type: Object}
+ },
+
+ get _fitWidth() {
+ var fitWidth;
+ if (this.fitInto === window) {
+ fitWidth = this.fitInto.innerWidth;
+ } else {
+ fitWidth = this.fitInto.getBoundingClientRect().width;
+ }
+ return fitWidth;
+ },
+
+ get _fitHeight() {
+ var fitHeight;
+ if (this.fitInto === window) {
+ fitHeight = this.fitInto.innerHeight;
+ } else {
+ fitHeight = this.fitInto.getBoundingClientRect().height;
+ }
+ return fitHeight;
+ },
+
+ get _fitLeft() {
+ var fitLeft;
+ if (this.fitInto === window) {
+ fitLeft = 0;
+ } else {
+ fitLeft = this.fitInto.getBoundingClientRect().left;
+ }
+ return fitLeft;
+ },
+
+ get _fitTop() {
+ var fitTop;
+ if (this.fitInto === window) {
+ fitTop = 0;
+ } else {
+ fitTop = this.fitInto.getBoundingClientRect().top;
+ }
+ return fitTop;
+ },
+
+ /**
+ * The element that should be used to position the element,
+ * if no position target is configured.
+ */
+ get _defaultPositionTarget() {
+ var parent = Polymer.dom(this).parentNode;
+
+ if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+ parent = parent.host;
+ }
+
+ return parent;
+ },
+
+ /**
+ * The horizontal align value, accounting for the RTL/LTR text direction.
+ */
+ get _localeHorizontalAlign() {
+ if (this._isRTL) {
+ // In RTL, "left" becomes "right".
+ if (this.horizontalAlign === 'right') {
+ return 'left';
+ }
+ if (this.horizontalAlign === 'left') {
+ return 'right';
+ }
+ }
+ return this.horizontalAlign;
+ },
+
+ /**
+ * True if the element should be positioned instead of centered.
+ * @private
+ */
+ get __shouldPosition() {
+ return (this.horizontalAlign || this.verticalAlign) &&
+ (this.horizontalAlign !== 'center' || this.verticalAlign !== 'middle');
+ },
+
+ attached: function() {
+ // Memoize this to avoid expensive calculations & relayouts.
+ // Make sure we do it only once
+ if (typeof this._isRTL === 'undefined') {
+ this._isRTL = window.getComputedStyle(this).direction == 'rtl';
+ }
+ this.positionTarget = this.positionTarget || this._defaultPositionTarget;
+ if (this.autoFitOnAttach) {
+ if (window.getComputedStyle(this).display === 'none') {
+ setTimeout(function() {
+ this.fit();
+ }.bind(this));
+ } else {
+ // NOTE: shadydom applies distribution asynchronously
+ // for performance reasons webcomponents/shadydom#120
+ // Flush to get correct layout info.
+ window.ShadyDOM && ShadyDOM.flush();
+ this.fit();
+ }
+ }
+ },
+
+ detached: function() {
+ if (this.__deferredFit) {
+ clearTimeout(this.__deferredFit);
+ this.__deferredFit = null;
+ }
+ },
+
+ /**
+ * Positions and fits the element into the `fitInto` element.
+ */
+ fit: function() {
+ this.position();
+ this.constrain();
+ this.center();
+ },
+
+ /**
+ * Memoize information needed to position and size the target element.
+ * @suppress {deprecated}
+ */
+ _discoverInfo: function() {
+ if (this._fitInfo) {
+ return;
+ }
+ var target = window.getComputedStyle(this);
+ var sizer = window.getComputedStyle(this.sizingTarget);
+
+ this._fitInfo = {
+ inlineStyle: {
+ top: this.style.top || '',
+ left: this.style.left || '',
+ position: this.style.position || ''
+ },
+ sizerInlineStyle: {
+ maxWidth: this.sizingTarget.style.maxWidth || '',
+ maxHeight: this.sizingTarget.style.maxHeight || '',
+ boxSizing: this.sizingTarget.style.boxSizing || ''
+ },
+ positionedBy: {
+ vertically: target.top !== 'auto' ?
+ 'top' :
+ (target.bottom !== 'auto' ? 'bottom' : null),
+ horizontally: target.left !== 'auto' ?
+ 'left' :
+ (target.right !== 'auto' ? 'right' : null)
+ },
+ sizedBy: {
+ height: sizer.maxHeight !== 'none',
+ width: sizer.maxWidth !== 'none',
+ minWidth: parseInt(sizer.minWidth, 10) || 0,
+ minHeight: parseInt(sizer.minHeight, 10) || 0
+ },
+ margin: {
+ top: parseInt(target.marginTop, 10) || 0,
+ right: parseInt(target.marginRight, 10) || 0,
+ bottom: parseInt(target.marginBottom, 10) || 0,
+ left: parseInt(target.marginLeft, 10) || 0
+ }
+ };
+ },
+
+ /**
+ * Resets the target element's position and size constraints, and clear
+ * the memoized data.
+ */
+ resetFit: function() {
+ var info = this._fitInfo || {};
+ for (var property in info.sizerInlineStyle) {
+ this.sizingTarget.style[property] = info.sizerInlineStyle[property];
+ }
+ for (var property in info.inlineStyle) {
+ this.style[property] = info.inlineStyle[property];
+ }
+
+ this._fitInfo = null;
+ },
+
+ /**
+ * Equivalent to calling `resetFit()` and `fit()`. Useful to call this after
+ * the element or the `fitInto` element has been resized, or if any of the
+ * positioning properties (e.g. `horizontalAlign, verticalAlign`) is updated.
+ * It preserves the scroll position of the sizingTarget.
+ */
+ refit: function() {
+ var scrollLeft = this.sizingTarget.scrollLeft;
+ var scrollTop = this.sizingTarget.scrollTop;
+ this.resetFit();
+ this.fit();
+ this.sizingTarget.scrollLeft = scrollLeft;
+ this.sizingTarget.scrollTop = scrollTop;
+ },
+
+ /**
+ * Positions the element according to `horizontalAlign, verticalAlign`.
+ */
+ position: function() {
+ if (!this.__shouldPosition) {
+ // needs to be centered, and it is done after constrain.
+ return;
+ }
+ this._discoverInfo();
+
+ this.style.position = 'fixed';
+ // Need border-box for margin/padding.
+ this.sizingTarget.style.boxSizing = 'border-box';
+ // Set to 0, 0 in order to discover any offset caused by parent stacking
+ // contexts.
+ this.style.left = '0px';
+ this.style.top = '0px';
+
+ var rect = this.getBoundingClientRect();
+ var positionRect = this.__getNormalizedRect(this.positionTarget);
+ var fitRect = this.__getNormalizedRect(this.fitInto);
+
+ var margin = this._fitInfo.margin;
+
+ // Consider the margin as part of the size for position calculations.
+ var size = {
+ width: rect.width + margin.left + margin.right,
+ height: rect.height + margin.top + margin.bottom
+ };
+
+ var position = this.__getPosition(
+ this._localeHorizontalAlign,
+ this.verticalAlign,
+ size,
+ rect,
+ positionRect,
+ fitRect);
+
+ var left = position.left + margin.left;
+ var top = position.top + margin.top;
+
+ // We first limit right/bottom within fitInto respecting the margin,
+ // then use those values to limit top/left.
+ var right = Math.min(fitRect.right - margin.right, left + rect.width);
+ var bottom = Math.min(fitRect.bottom - margin.bottom, top + rect.height);
+
+ // Keep left/top within fitInto respecting the margin.
+ left = Math.max(
+ fitRect.left + margin.left,
+ Math.min(left, right - this._fitInfo.sizedBy.minWidth));
+ top = Math.max(
+ fitRect.top + margin.top,
+ Math.min(top, bottom - this._fitInfo.sizedBy.minHeight));
+
+ // Use right/bottom to set maxWidth/maxHeight, and respect
+ // minWidth/minHeight.
+ this.sizingTarget.style.maxWidth =
+ Math.max(right - left, this._fitInfo.sizedBy.minWidth) + 'px';
+ this.sizingTarget.style.maxHeight =
+ Math.max(bottom - top, this._fitInfo.sizedBy.minHeight) + 'px';
+
+ // Remove the offset caused by any stacking context.
+ this.style.left = (left - rect.left) + 'px';
+ this.style.top = (top - rect.top) + 'px';
+ },
+
+ /**
+ * Constrains the size of the element to `fitInto` by setting `max-height`
+ * and/or `max-width`.
+ */
+ constrain: function() {
+ if (this.__shouldPosition) {
+ return;
+ }
+ this._discoverInfo();
+
+ var info = this._fitInfo;
+ // position at (0px, 0px) if not already positioned, so we can measure the
+ // natural size.
+ if (!info.positionedBy.vertically) {
+ this.style.position = 'fixed';
+ this.style.top = '0px';
+ }
+ if (!info.positionedBy.horizontally) {
+ this.style.position = 'fixed';
+ this.style.left = '0px';
+ }
+
+ // need border-box for margin/padding
+ this.sizingTarget.style.boxSizing = 'border-box';
+ // constrain the width and height if not already set
+ var rect = this.getBoundingClientRect();
+ if (!info.sizedBy.height) {
+ this.__sizeDimension(
+ rect, info.positionedBy.vertically, 'top', 'bottom', 'Height');
+ }
+ if (!info.sizedBy.width) {
+ this.__sizeDimension(
+ rect, info.positionedBy.horizontally, 'left', 'right', 'Width');
+ }
+ },
+
+ /**
+ * @protected
+ * @deprecated
+ */
+ _sizeDimension: function(rect, positionedBy, start, end, extent) {
+ this.__sizeDimension(rect, positionedBy, start, end, extent);
+ },
+
+ /**
+ * @private
+ */
+ __sizeDimension: function(rect, positionedBy, start, end, extent) {
+ var info = this._fitInfo;
+ var fitRect = this.__getNormalizedRect(this.fitInto);
+ var max = extent === 'Width' ? fitRect.width : fitRect.height;
+ var flip = (positionedBy === end);
+ var offset = flip ? max - rect[end] : rect[start];
+ var margin = info.margin[flip ? start : end];
+ var offsetExtent = 'offset' + extent;
+ var sizingOffset = this[offsetExtent] - this.sizingTarget[offsetExtent];
+ this.sizingTarget.style['max' + extent] =
+ (max - margin - offset - sizingOffset) + 'px';
+ },
+
+ /**
+ * Centers horizontally and vertically if not already positioned. This also
+ * sets `position:fixed`.
+ */
+ center: function() {
+ if (this.__shouldPosition) {
+ return;
+ }
+ this._discoverInfo();
+
+ var positionedBy = this._fitInfo.positionedBy;
+ if (positionedBy.vertically && positionedBy.horizontally) {
+ // Already positioned.
+ return;
+ }
+ // Need position:fixed to center
+ this.style.position = 'fixed';
+ // Take into account the offset caused by parents that create stacking
+ // contexts (e.g. with transform: translate3d). Translate to 0,0 and
+ // measure the bounding rect.
+ if (!positionedBy.vertically) {
+ this.style.top = '0px';
+ }
+ if (!positionedBy.horizontally) {
+ this.style.left = '0px';
+ }
+ // It will take in consideration margins and transforms
+ var rect = this.getBoundingClientRect();
+ var fitRect = this.__getNormalizedRect(this.fitInto);
+ if (!positionedBy.vertically) {
+ var top = fitRect.top - rect.top + (fitRect.height - rect.height) / 2;
+ this.style.top = top + 'px';
+ }
+ if (!positionedBy.horizontally) {
+ var left = fitRect.left - rect.left + (fitRect.width - rect.width) / 2;
+ this.style.left = left + 'px';
+ }
+ },
+
+ __getNormalizedRect: function(target) {
+ if (target === document.documentElement || target === window) {
+ return {
+ top: 0,
+ left: 0,
+ width: window.innerWidth,
+ height: window.innerHeight,
+ right: window.innerWidth,
+ bottom: window.innerHeight
+ };
+ }
+ return target.getBoundingClientRect();
+ },
+
+ __getOffscreenArea: function(position, size, fitRect) {
+ var verticalCrop = Math.min(0, position.top) +
+ Math.min(0, fitRect.bottom - (position.top + size.height));
+ var horizontalCrop = Math.min(0, position.left) +
+ Math.min(0, fitRect.right - (position.left + size.width));
+ return Math.abs(verticalCrop) * size.width +
+ Math.abs(horizontalCrop) * size.height;
+ },
+
+
+ __getPosition: function(
+ hAlign, vAlign, size, sizeNoMargins, positionRect, fitRect) {
+ // All the possible configurations.
+ // Ordered as top-left, top-right, bottom-left, bottom-right.
+ var positions = [
+ {
+ verticalAlign: 'top',
+ horizontalAlign: 'left',
+ top: positionRect.top + this.verticalOffset,
+ left: positionRect.left + this.horizontalOffset
+ },
+ {
+ verticalAlign: 'top',
+ horizontalAlign: 'right',
+ top: positionRect.top + this.verticalOffset,
+ left: positionRect.right - size.width - this.horizontalOffset
+ },
+ {
+ verticalAlign: 'bottom',
+ horizontalAlign: 'left',
+ top: positionRect.bottom - size.height - this.verticalOffset,
+ left: positionRect.left + this.horizontalOffset
+ },
+ {
+ verticalAlign: 'bottom',
+ horizontalAlign: 'right',
+ top: positionRect.bottom - size.height - this.verticalOffset,
+ left: positionRect.right - size.width - this.horizontalOffset
+ }
+ ];
+
+ if (this.noOverlap) {
+ // Duplicate.
+ for (var i = 0, l = positions.length; i < l; i++) {
+ var copy = {};
+ for (var key in positions[i]) {
+ copy[key] = positions[i][key];
+ }
+ positions.push(copy);
+ }
+ // Horizontal overlap only.
+ positions[0].top = positions[1].top += positionRect.height;
+ positions[2].top = positions[3].top -= positionRect.height;
+ // Vertical overlap only.
+ positions[4].left = positions[6].left += positionRect.width;
+ positions[5].left = positions[7].left -= positionRect.width;
+ }
+
+ // Consider auto as null for coding convenience.
+ vAlign = vAlign === 'auto' ? null : vAlign;
+ hAlign = hAlign === 'auto' ? null : hAlign;
+
+ if (!hAlign || hAlign === 'center') {
+ positions.push({
+ verticalAlign: 'top',
+ horizontalAlign: 'center',
+ top: positionRect.top + this.verticalOffset +
+ (this.noOverlap ? positionRect.height : 0),
+ left: positionRect.left - sizeNoMargins.width / 2 +
+ positionRect.width / 2 + this.horizontalOffset
+ });
+ positions.push({
+ verticalAlign: 'bottom',
+ horizontalAlign: 'center',
+ top: positionRect.bottom - size.height - this.verticalOffset -
+ (this.noOverlap ? positionRect.height : 0),
+ left: positionRect.left - sizeNoMargins.width / 2 +
+ positionRect.width / 2 + this.horizontalOffset
+ });
+ }
+
+ if (!vAlign || vAlign === 'middle') {
+ positions.push({
+ verticalAlign: 'middle',
+ horizontalAlign: 'left',
+ top: positionRect.top - sizeNoMargins.height / 2 +
+ positionRect.height / 2 + this.verticalOffset,
+ left: positionRect.left + this.horizontalOffset +
+ (this.noOverlap ? positionRect.width : 0)
+ });
+ positions.push({
+ verticalAlign: 'middle',
+ horizontalAlign: 'right',
+ top: positionRect.top - sizeNoMargins.height / 2 +
+ positionRect.height / 2 + this.verticalOffset,
+ left: positionRect.right - size.width - this.horizontalOffset -
+ (this.noOverlap ? positionRect.width : 0)
+ });
+ }
+
+ var position;
+ for (var i = 0; i < positions.length; i++) {
+ var candidate = positions[i];
+ var vAlignOk = candidate.verticalAlign === vAlign;
+ var hAlignOk = candidate.horizontalAlign === hAlign;
+
+ // If both vAlign and hAlign are defined, return exact match.
+ // For dynamicAlign and noOverlap we'll have more than one candidate, so
+ // we'll have to check the offscreenArea to make the best choice.
+ if (!this.dynamicAlign && !this.noOverlap && vAlignOk && hAlignOk) {
+ position = candidate;
+ break;
+ }
+
+ // Align is ok if alignment preferences are respected. If no preferences,
+ // it is considered ok.
+ var alignOk = (!vAlign || vAlignOk) && (!hAlign || hAlignOk);
+
+ // Filter out elements that don't match the alignment (if defined).
+ // With dynamicAlign, we need to consider all the positions to find the
+ // one that minimizes the cropped area.
+ if (!this.dynamicAlign && !alignOk) {
+ continue;
+ }
+
+ candidate.offscreenArea =
+ this.__getOffscreenArea(candidate, size, fitRect);
+ // If not cropped and respects the align requirements, keep it.
+ // This allows to prefer positions overlapping horizontally over the
+ // ones overlapping vertically.
+ if (candidate.offscreenArea === 0 && alignOk) {
+ position = candidate;
+ break;
+ }
+ position = position || candidate;
+ var diff = candidate.offscreenArea - position.offscreenArea;
+ // Check which crops less. If it crops equally, check if at least one
+ // align setting is ok.
+ if (diff < 0 || (diff === 0 && (vAlignOk || hAlignOk))) {
+ position = candidate;
+ }
+ }
+
+ return position;
+ }
+
+ };
+</script> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package-lock.json
new file mode 100644
index 00000000000..6b08ab8c052
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-fit-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.3.tgz",
+ "integrity": "sha512-igaEysRgtg5tYJVIdQ1T2lJ3G6OmoY7g0YVWKHLFiVs4YUChd9IRSiLoHSLffwut+CpsHHBDj4vRxxNEMstctw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package.json
new file mode 100644
index 00000000000..b2584fe5b17
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-fit-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-fit-behavior",
+ "private": true,
+ "description": "Fits an element inside another element",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-fit-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.bower.json
new file mode 100644
index 00000000000..12214869a4e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.bower.json
@@ -0,0 +1,64 @@
+{
+ "name": "iron-flex-layout",
+ "version": "2.0.3",
+ "description": "Provide flexbox-based layouts",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "layout"
+ ],
+ "main": "iron-flex-layout.html",
+ "private": true,
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-flex-layout.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "pages": {
+ "Flexbox layout guide": "GUIDE.md"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-flex-layout",
+ "_release": "2.0.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.3",
+ "commit": "67461d70607ca19d17b462b9a649c1585094f798"
+ },
+ "_source": "https://github.com/PolymerElements/iron-flex-layout.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-flex-layout"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..b79eca40e83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-flex-layout/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.travis.yml
new file mode 100644
index 00000000000..2d3f9f6e271
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ idlCNYtNQ7rLGCSl2NuZ++XZEwofpojkakXhL8m34pCX1ZwhGRprHsvNE7h7tz8SIV+mUjuUT8DaM7rlgZ+bLyw/Hq7G15DdmU5puUsCVibFFBBEhh82lxkdK/Rlfo+ytt0MFsbTJljEoqTSbnL0fSeC0cN/7wf6yEQs/+mTR0I=
+ - secure: >-
+ i/rAHa9rxszmbE+RbQ2b7ln6OYzrcoUssdPk36lNeJk/B1HjBS9cfg1PMwSAw+t6yvAN3I0fbOOl4dlGB1K5T4kAtmcAcC3fbptJL08IvK9K15pz/rMEzIBWLXj9oVJliwBZR2GFH+5zv6aFdEwQxh1leBnHQwmKgl24QX8XGO4=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/GUIDE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/GUIDE.md
new file mode 100644
index 00000000000..e230ce07a22
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/GUIDE.md
@@ -0,0 +1,1265 @@
+## Overview
+
+The `iron-flex-layout` component provides simple ways to use [CSS flexible box layout](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes), also known as _flexbox_. This component provides two different ways to use flexbox:
+
+* Layout classes. The layout class stylesheet provides a simple set of class-based flexbox rules. Layout classes
+ let you specify layout properties directly in markup.
+
+* Custom CSS mixins. The mixin stylesheet includes custom CSS mixins that can be applied
+ inside a CSS rule using the `@apply` function.
+
+Using the classes or CSS mixins is largely a matter of preference. The following sections discuss
+how to use the each of the stylesheets.
+
+> <b>Note:</b> Before using either of these stylesheets, it's helpful to be familiar with the basics
+of flexbox layout. Chris Coyier's [A Complete Guide to Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) is a
+good primer.</aside>
+
+### Using layout classes
+
+To use layout classes import the `iron-flex-layout-classes` file. You
+must do this in any element that uses any of the `iron-flex-layout` styles.
+```html
+<link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout-classes.html">
+```
+
+Then include the module(s) that you need:
+```html
+<!-- include classes in the main document -->
+<style is="custom-style" include="iron-flex iron-flex-alignment">
+```
+
+or:
+```html
+<!-- import classes in an element -->
+<style include="iron-flex iron-flex-alignment">
+```
+
+Then simply apply the classes to any element.
+```html
+<div class="layout horizontal wrap">
+```
+
+Many of the layout rules involve combinations of multiple classes (such as `layout horizontal wrap` above),
+and will need a combination of modules.
+The order in which the classes are specified doesn't matter, so `layout horizontal` and `horizontal layout`
+are equivalent.
+
+There are 5 modules available:
+- `iron-flex`. Basic flex layouts.
+- `iron-flex-reverse`. Reverse flexbox layouts.
+- `iron-flex-alignment`. Main axis, cross axis and self alignment.
+- `iron-flex-factors`. All the available flex factors.
+- `iron-positioning`. Generic, non-flexbox positioning helpers.
+
+**Example: using classes in the main document**
+```html
+<head>
+
+ ...
+
+ <link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout-classes.html">
+
+ ...
+
+ <!-- main document -- include the module you need in a custom-style element -->
+ <style is="custom-style" include="iron-flex"></style>
+
+</head>
+<body>
+
+ <div class="layout horizontal">
+ <div>One</div>
+ <div>Two</div>
+ <div>Three</div>
+ </div>
+
+</body>
+```
+**Example: using classes in a Polymer element**
+```html
+<link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout-classes.html">
+
+ ...
+
+<dom-module id="mixin-demo">
+
+ <!-- inside an element -- include the module you need in a standard style element -->
+ <style include="iron-flex"></style>
+
+ <template>
+ <div class="layout horizontal">
+ <div>One</div>
+ <div>Two</div>
+ <div>Three</div>
+ </div>
+ </template>
+
+ <script>
+ Polymer({ is: 'mixin-demo' });
+ </script>
+
+</dom-module>
+```
+
+It's important to note that unlike the previous layout class stylesheets
+(found in `/classes/iron-flex-layout.html`), the new version does not use the `/deep/`
+combinator: it does not work across local DOM boundaries,
+and the modules must be imported into each scope where they're used.
+
+### Using layout mixins
+
+Custom mixins can be applied inside a Polymer
+custom element's stylesheet, **or** inside a `custom-style` stylesheet to apply styles to the
+main document. (They cannot be applied in the main document without a `custom-style` stylesheet.)
+
+**Example: using mixins in the main document**
+```html
+<head>
+
+ ...
+
+ <link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout.html">
+
+ ...
+
+ <!-- main document -- apply mixins in a custom-style element -->
+ <style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-wrap;
+ }
+ </style>
+
+</head>
+<body>
+
+ <div class="container">
+ <div>One</div>
+ <div>Two</div>
+ <div>Three</div>
+ </div>
+
+</body>
+```
+**Example: using mixins in a Polymer element**
+```html
+<link rel="import" href="bower_components/iron-flex-layout/iron-flex-layout.html">
+
+ ...
+
+<dom-module id="mixin-demo">
+
+ <!-- inside an element -- apply mixins in a standard style element -->
+ <style>
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-wrap;
+ }
+ </style>
+
+ <template>
+ <div class="container">
+ <div>One</div>
+ <div>Two</div>
+ <div>Three</div>
+ </div>
+ </template>
+
+ <script>
+ Polymer({ is: 'mixin-demo' });
+ </script>
+
+</dom-module>
+```
+
+In general the mixins require a little more code to use, but they can be preferable if you
+don't want to use the classes, or if you want to switch layouts based on a media query.
+
+Custom CSS properties and mixins are features provided by the Polymer library.
+See [Cross-scope styling](https://www.polymer-project.org/1.0/docs/devguide/styling.html#xscope-styling)
+in the Polymer developer guide.
+
+## Horizontal and vertical layout
+
+Create a flex container that lays out its children vertically or horizontally.
+
+Class | Mixin | Result
+:-|:-|:-
+<code>layout horizontal</code>| <code>--layout-horizontal</code> | Horizontal layout container.
+<code>layout vertical</code> | <code>--layout-vertical</code> | Vertical layout container.
+
+The classes listed here are included in the `iron-flex` module of the `iron-flex-layout-classes` file.
+
+**Example: classes**
+```html
+<div class="layout horizontal">
+ <div>One</div>
+ <div>Two</div>
+ <div>Three</div>
+</div>
+```
+
+**Example: mixins**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ }
+</style>
+
+<div class="container">
+ <div>One</div>
+ <div>Two</div>
+ <div>Three</div>
+</div>
+```
+
+### Flexible children
+
+Children of a flex container can use flex to control their own sizing.
+
+Class | Mixin | Result
+:-|:-|:-
+<code>flex</code>| <code>--layout-flex</code> | Expand the child to fill available space in the main axis.
+<code>flex-<var>ratio</var></code>| <code>--layout-flex-<var>ratio</var></code> | Assign a flex ratio of 1 to 12.
+<code>flex-none</code>| <code>--layout-flex-none</code> | Don't flex the child.
+<code>flex-auto</code>| <code>--layout-flex-auto</code> | Sets flex `flex-basis` to `auto` and `flex-grow` and `flex-shrink` to 1.
+
+The classes listed here are included in the `iron-flex` module of the `iron-flex-layout-classes` file.
+
+**Example: classes**
+```html
+<div class="horizontal layout">
+ <div>Alpha</div>
+ <div class="flex">Beta (flex)</div>
+ <div>Gamma</div>
+</div>
+```
+
+**Example: mixins**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ }
+ .flexchild {
+ @apply --layout-flex;
+ }
+</style>
+
+<div class="container">
+<div>Alpha</div>
+ <div class="flexchild">Beta (flex)</div>
+ <div>Gamma</div>
+</div>
+```
+
+#### Flexible children in vertical layouts
+
+The same rules can be used for children in vertical layouts.
+
+**Example: classes**
+```html
+<div class="vertical layout" style="height:250px">
+ <div>Alpha</div>
+ <div class="flex">Beta (flex)</div>
+ <div>Gamma</div>
+</div>
+```
+
+**Example: mixins**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-vertical;
+ }
+ .flexchild {
+ @apply --layout-flex;
+ }
+</style>
+
+<div class="container" style="height: 250px">
+ <div>One</div>
+ <div class="flexchild">Two</div>
+ <div>Three</div>
+</div>
+```
+
+> **Note**: for vertical layouts, the container needs to have a height for the
+children to flex correctly.
+
+#### Flex ratios
+
+Children elements can be told to take up more space by including a "flex ratio"
+from 1 to 12. This is equivalent to specifying the CSS `flex-grow` property.
+
+For example, the following examples make "Gamma" 2x larger than "Beta" and "Alpha" 3x larger, use
+`flex-2` and `flex-3`, respectively.
+
+The classes listed here are included in the `iron-flex-factors` module of the `iron-flex-layout-classes` file.
+
+**Example: classes**
+```html
+<div class="horizontal layout demo">
+ <div class="flex-3">Alpha</div>
+ <div class="flex">Beta</div>
+ <div class="flex-2">Gamma</div>
+</div>
+```
+
+**Example: mixins**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ }
+ .flexchild {
+ @apply --layout-flex;
+ }
+ .flex2child {
+ @apply --layout-flex-2;
+ }
+ .flex3child {
+ @apply --layout-flex-3;
+ }
+</style>
+
+<div class="container">
+ <div class="flex3child">One</div>
+ <div class="flexchild">Two</div>
+ <div class="flex2child">Three</div>
+</div>
+```
+
+### Cross-axis alignment
+
+By default, children stretch to fit the cross-axis (e.g. _vertical_ stretching in a _horizontal_ layout).
+
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal layout" style="height: 154px">
+ <div>Stretch Fill</div>
+</div>
+```
+
+Center _across_ the main axis (e.g. _vertical_ centering elements in a _horizontal_ layout)
+by adding the `center` class or applying the `--layout-center` mixin.
+
+**Example: classes, cross-axis center**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal layout center" style="height: 154px">
+ <div>Center</div>
+</div>
+```
+
+**Example: mixins, cross-axis center**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ height: 154px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+ }
+</style>
+
+<div class="container" style="height: 154px">
+ <div>Center</div>
+</div>
+```
+
+You can also position at the top/bottom (or left/right in `vertical` layouts) using the `start` or `end`
+classes, or by applying the `--layout-start` or `--layout-end` mixins.
+
+
+**Example: classes, cross-axis start**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal layout start" style="height: 154px">
+ <div>start</div>
+</div>
+```
+
+**Example: mixins, cross-axis start**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-start;
+ }
+</style>
+
+<div class="container" style="height: 154px">
+ <div>start</div>
+</div>
+```
+
+**Example: classes, cross-axis end**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal layout end" style="height: 154px">
+ <div>end</div>
+</div>
+```
+
+**Example: mixins, cross-axis end**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-end;
+ }
+</style>
+
+<div class="container" style="height: 154px">
+ <div>end</div>
+</div>
+```
+
+### Justification
+
+Justifying aligns contents along the **main axis**. Justify the layout
+by specifying one of the following.
+
+
+Class | Mixin | Result
+:-|:-|:-
+`start-justified`| <code>--layout-start-justified</code> | Aligns contents at the start of the main axis.
+`center-justified` | <code>--layout-center-justified</code> | Centers contents along the main axis.
+`end-justified` | <code>--layout-end-justified</code> | Aligns contents to the end of the main axis.
+`justified` | <code>--layout-justified</code> | Aligns contents with equal spaces between children.
+`around-justified` | <code>--layout-around-justified</code> | Aligns contents with equal spaces arround children.
+
+The classes listed here are included in the `iron-flex-alignment` module of the `iron-flex-layout-classes` file.
+
+**Example: classes, start justified**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal start-justified layout">
+ <div>start-justified</div>
+</div>
+```
+
+**Example: mixins, center justified**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-center-justified;
+ }
+</style>
+
+<div class="container">
+ <div>center-justified</div>
+</div>
+```
+
+**Example: classes, end justified**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal end-justified layout">
+ <div>end-justified</div>
+</div>
+```
+
+**Example: mixins, equal space between elements**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-justified;
+ }
+</style>
+
+<div class="container">
+ <div>justified</div>
+ <div>justified</div>
+ <div>justified</div>
+</div>
+```
+
+**Example: classes, equal space around each element**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal around-justified layout">
+ <div>around-justified</div>
+ <div>around-justified</div>
+</div>
+```
+
+## Self alignment
+
+Alignment can also be set per-child (instead of using the layout container's rules).
+
+Class | Mixin | Result
+:-|:-|:-
+`self-start`| <code>--layout-self-start</code> | Aligns the child at the start of the cross-axis.
+`self-center` | <code>--layout-self-center</code> | Centers the child along the cross-axis.
+`self-end` | <code>--layout-self-end</code> | Aligns the child at the end of the cross-axis.
+`self-stretch` | <code>--layout-self-stretch</code> | Stretches the child to fit the cross-axis.
+
+**Example: classes**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal layout" style="height: 120px;">
+ <div class="flex self-start">Alpha</div>
+ <div class="flex self-center">Beta</div>
+ <div class="flex self-end">Gamma</div>
+ <div class="flex self-stretch">Delta</div>
+</div>
+```
+
+**Example: mixins**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal;
+ @apply --layout-justified;
+ height: 120px;
+ }
+ .container div {
+ @apply --layout-flex;
+ }
+ .child1 {
+ @apply --layout-self-start;
+ }
+ .child2 {
+ @apply --layout-self-center;
+ }
+ .child3 {
+ @apply --layout-self-end;
+ }
+ .child4 {
+ @apply --layout-self-stretch;
+ }
+</style>
+<div class="container">
+ <div class="child1">Alpha</div>
+ <div class="child2">Beta</div>
+ <div class="child3">Gamma</div>
+ <div class="child4">Delta</div>
+</div>
+```
+
+> <b>Note:</b> The <code>flex</code> class
+(and <code>--layout-flex</code> mixin) shown in these examples is
+added for the demo and not required for self-alignment.
+
+
+## Wrapping
+
+Wrapped layouts can be enabled with the `wrap` class or `--layout-wrap` mixin.
+
+**Example: classes**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="horizontal layout wrap" style="width: 220px">
+ <div>Alpha</div>
+ <div>Beta</div>
+ <div>Gamma</div>
+ <div>Delta</div>
+</div>
+```
+
+## Reversed layouts
+
+Layout direction can be mirrored using the following rules:
+
+Class | Mixin | Result
+:-|:-|:-
+<code>layout horizontal-reverse</code>| <code>--layout-horizontal-reverse</code> | Horizontal layout with children laid out in reverse order (last-to-first).
+<code>layout vertical-reverse</code> | <code>--layout-vertical-reverse</code> | Vertical layout with children laid out in reverse order.
+<code>layout wrap-reverse</code> | <code>--layout-wrap-reverse</code> | Wrap layout with wrapped rows placed in the reverse order (for example, in a vertical layout, the second row is placed above the first row, instead of below).
+
+The classes listed here are included in the `iron-flex-reverse` module of the `iron-flex-layout-classes` file.
+
+**Example: mixins**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment iron-flex-reverse"></style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<style is="custom-style">
+ .container {
+ @apply --layout-horizontal-reverse;
+ }
+</style>
+
+<div class="container">
+ <div>Alpha</div>
+ <div>Beta</div>
+ <div>Gamma</div>
+ <div>Delta</div>
+</div>
+```
+
+## Full bleed &lt;body>
+
+It's common to want the entire `<body>` to fit to the viewport. By themselves, Polymer's layout features on
+`<body>` don't achieve the result. You can make `<body>` take up the entire viewport by adding the `fullbleed` class:
+
+```html
+<body class="fullbleed vertical layout">
+ <div class="flex">Fitting a fullbleed body.</div>
+</body>
+```
+
+This removes its margins and maximizes its height to the viewport. There is no equivalent mixin, but the same result can
+be achieved in CSS very simply:
+```css
+body {
+ margin: 0;
+ height: 100vh;
+}
+```
+
+This class is included in the `iron-positioning` module of the `iron-flex-layout-classes` file.
+
+Note that the `fullbleed` class **only works on the `<body>` tag.** This is the only rule in the
+stylesheet that is scoped to a particular tag.
+
+
+## General purpose rules
+
+Polymer also includes other general purpose rules for basic positioning:
+
+Class | Mixin | Result
+:-|:-|:-
+`block`| `--layout-block` | Assigns `display: block`
+`invisible` | `--layout-invisible` | Assigns `visibility: hidden`
+`relative` | `--layout-relative` | Assigns `position: relative`
+`fit` | `--layout-fit` | Sets `position: absolute` and sets `top:0;right:0;bottom:0;left:0;` (aka "trbl fitting").
+
+The classes listed here are included in the `iron-positioning` module of the `iron-flex-layout-classes` file.
+
+> <b>Note:</b>When using `fit` layout, the element must have an ancestor with fixed size and `position: relative` layout
+to fit inside of.
+
+
+**Example: classes**
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <style is="custom-style" include="iron-flex iron-flex-alignment iron-positioning"></style>
+ <style>
+ :host {
+ display: block;
+ background: #ccc;
+ }
+
+ .demo {
+ background-color: white;
+ margin: 12px;
+ padding: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="demo">Before <span>[A Span]</span> After</div>
+<div class="demo">Before <span class="block">[A Block Span]</span> After</div>
+<div class="demo">Before invisible span <span class="invisible">Not displayed</span> After invisible span</div>
+<div class="relative" style="height: 100px;">
+ <div class="fit" style="background-color: #000;color: white">Fit</div>
+</div>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/README.md
new file mode 100644
index 00000000000..ca54ed33350
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/README.md
@@ -0,0 +1,61 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-flex-layout.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-flex-layout)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://beta.webcomponents.org/element/PolymerElements/iron-flex-layout)
+
+## &lt;iron-flex-layout&gt;
+
+The `<iron-flex-layout>` component provides simple ways to use
+[CSS flexible box layout](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes),
+also known as flexbox. This component provides two different ways to use flexbox:
+
+1. [Layout classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html).
+The layout class stylesheet provides a simple set of class-based flexbox rules, that
+let you specify layout properties directly in markup. You must include this file
+in every element that needs to use them.
+
+Sample use:
+
+<!--
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <dom-module id="demo-element">
+ <template>
+ <custom-style>
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ </custom-style>
+ <style>
+ .container, .layout {
+ background-color: #ccc;
+ padding: 4px;
+ }
+ .container div, .layout div {
+ background-color: white;
+ padding: 12px;
+ margin: 4px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+ <script>Polymer({is: "demo-element"});</script>
+ </dom-module>
+ <demo-element></demo-element>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div class="layout horizontal layout-start" style="height: 154px">
+ <div>cross axis start alignment</div>
+</div>
+```
+
+1. [Custom CSS mixins](https://github.com/PolymerElements/iron-flex-layout/blob/master/iron-flex-layout.html).
+The mixin stylesheet includes custom CSS mixins that can be applied inside a CSS rule using the `@apply` function.
+
+A complete [guide](https://elements.polymer-project.org/guides/flex-layout) to `<iron-flex-layout>` is available.
+
+## Changes in 2.0
+- removed the deprecated `/deep/` classes -- files removed: `classes/iron-flex-layout.html`, `classes/iron-shadow-flex-layout`
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/bower.json
new file mode 100644
index 00000000000..28c3bd3de1f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/bower.json
@@ -0,0 +1,54 @@
+{
+ "name": "iron-flex-layout",
+ "version": "2.0.3",
+ "description": "Provide flexbox-based layouts",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "layout"
+ ],
+ "main": "iron-flex-layout.html",
+ "private": true,
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-flex-layout.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "pages": {
+ "Flexbox layout guide": "GUIDE.md"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/demo/index.html
new file mode 100644
index 00000000000..887ff3f9ec1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/demo/index.html
@@ -0,0 +1,429 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <title>iron-flex-layout demo</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../iron-flex-layout.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ demo-snippet {
+ --demo-snippet-demo: {
+ padding: 0;
+ };
+ }
+
+ .container {
+ background-color: #ccc;
+ padding: 5px;
+ margin: 0;
+ }
+
+ .container > div {
+ padding: 15px;
+ margin: 5px;
+ background-color: white;
+ min-height: 20px;
+ }
+ </style>
+ </custom-style>
+
+</head>
+<body unresolved class="fullbleed">
+ <div class="vertical-section-container centered">
+ <h4>Horizontal and vertical layout</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex {
+ @apply --layout-horizontal;
+ }
+ </style>
+ </custom-style>
+ <div class="container flex">
+ <div>one</div>
+ <div>two</div>
+ <div>three</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Flexible children</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-horizontal {
+ @apply --layout-horizontal;
+ }
+ .flexchild {
+ @apply --layout-flex;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-horizontal">
+ <div>one</div>
+ <div class="flexchild">two (flex)</div>
+ <div>three</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Flexible children in vertical layouts</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-vertical {
+ @apply --layout-vertical;
+ height: 220px;
+ }
+ .flexchild-vertical {
+ @apply --layout-flex;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-vertical">
+ <div>one</div>
+ <div class="flexchild-vertical">two (flex)</div>
+ <div>three</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Flex ratios</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-horizontal-with-ratios {
+ @apply --layout-horizontal;
+ }
+ .flexchild {
+ @apply --layout-flex;
+ }
+ .flex2child {
+ @apply --layout-flex-2;
+ }
+ .flex3child {
+ @apply --layout-flex-3;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-horizontal-with-ratios">
+ <div class="flex3child">one</div>
+ <div class="flexchild">two</div>
+ <div class="flex2child">three</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Cross-axis stretch alignment (default)</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-stretch-align {
+ @apply --layout-horizontal;
+ height: 120px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-stretch-align">
+ <div>stretch</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Cross-axis center alignment</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-center-align {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+ height: 120px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-center-align">
+ <div>center</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Cross-axis start alignment</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-start-align {
+ @apply --layout-horizontal;
+ @apply --layout-start;
+ height: 120px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-start-align">
+ <div>start</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Cross-axis end alignment</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-end-align {
+ @apply --layout-horizontal;
+ @apply --layout-end;
+ height: 120px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-end-align">
+ <div>end</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Justification, start justified</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-start-justified {
+ @apply --layout-horizontal;
+ @apply --layout-start-justified;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-start-justified">
+ <div>start-justified</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Justification, center justified</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-center-justified {
+ @apply --layout-horizontal;
+ @apply --layout-center-justified;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-center-justified">
+ <div>center-justified</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Justification, end justified</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-end-justified {
+ @apply --layout-horizontal;
+ @apply --layout-end-justified;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-end-justified">
+ <div>end-justified</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Justification, equal space between elements</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-equal-justified {
+ @apply --layout-horizontal;
+ @apply --layout-justified;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-equal-justified">
+ <div>justified</div>
+ <div>justified</div>
+ <div>justified</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Justification, equal space around each element</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-equal-around-justified {
+ @apply --layout-horizontal;
+ @apply --layout-around-justified;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-equal-around-justified">
+ <div>around-justified</div>
+ <div>around-justified</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Self alignment</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-self-align {
+ @apply --layout-horizontal;
+ @apply --layout-justified;
+ height: 120px;
+ }
+ .flex-self-align div {
+ @apply --layout-flex;
+ }
+ .child1 {
+ @apply --layout-self-start;
+ }
+ .child2 {
+ @apply --layout-self-center;
+ }
+ .child3 {
+ @apply --layout-self-end;
+ }
+ .child4 {
+ @apply --layout-self-stretch;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-self-align">
+ <div class="child1">one</div>
+ <div class="child2">two</div>
+ <div class="child3">three</div>
+ <div class="child4">four</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Wrapping</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-wrap {
+ @apply --layout-horizontal;
+ @apply --layout-wrap;
+ width: 200px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-wrap">
+ <div>one</div>
+ <div>two</div>
+ <div>three</div>
+ <div>four</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>Reversed layouts</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .flex-reversed {
+ @apply --layout-horizontal-reverse;
+ }
+ </style>
+ </custom-style>
+
+ <div class="container flex-reversed">
+ <div>one</div>
+ <div>two</div>
+ <div>three</div>
+ <div>four</div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h4>General purpose rules</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .general {
+ width: 100%;
+ }
+ .general > div {
+ background-color: #ccc;
+ padding: 4px;
+ margin: 12px;
+ }
+ .block {
+ @apply --layout-block;
+ }
+ .invisible {
+ @apply --layout-invisible;
+ }
+ .relative {
+ @apply --layout-relative;
+ }
+ .fit {
+ @apply --layout-fit;
+ }
+ </style>
+ </custom-style>
+
+ <div class="general">
+ <div>Before <span>[A Span]</span> After</div>
+ <div>Before <span class="block">[A Block Span]</span> After</div>
+ <div>Before invisible span <span class="invisible">Not displayed</span> After invisible span</div>
+ <div class="relative" style="height: 100px;">
+ <div class="fit" style="background-color: #000;color: white">Fit</div>
+ </div>
+ </div>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/gen-tsd.json
new file mode 100644
index 00000000000..cc757dbf801
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/gen-tsd.json
@@ -0,0 +1,5 @@
+{
+ "excludeIdentifiers": [
+ "iron-flex-layout"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/index.html
new file mode 100644
index 00000000000..7d3b0881f8c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>iron-flex-layout</title>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.d.ts
new file mode 100644
index 00000000000..139911b8f40
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-flex-layout-classes.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.html
new file mode 100644
index 00000000000..a4e84c1f9e8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout-classes.html
@@ -0,0 +1,436 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<!--
+A set of layout classes that let you specify layout properties directly in markup.
+You must include this file in every element that needs to use them.
+
+Sample use:
+
+ <link rel="import" href="../iron-flex-layout/iron-flex-layout-classes.html">
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+
+ <div class="layout horizontal layout-start">
+ <div>cross axis start alignment</div>
+ </div>
+
+The following imports are available:
+ - iron-flex
+ - iron-flex-reverse
+ - iron-flex-alignment
+ - iron-flex-factors
+ - iron-positioning
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!-- Most common used flex styles-->
+<dom-module id="iron-flex">
+ <template>
+ <style>
+ .layout.horizontal,
+ .layout.vertical {
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ }
+
+ .layout.inline {
+ display: -ms-inline-flexbox;
+ display: -webkit-inline-flex;
+ display: inline-flex;
+ }
+
+ .layout.horizontal {
+ -ms-flex-direction: row;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ }
+
+ .layout.vertical {
+ -ms-flex-direction: column;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ }
+
+ .layout.wrap {
+ -ms-flex-wrap: wrap;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+ }
+
+ .layout.no-wrap {
+ -ms-flex-wrap: nowrap;
+ -webkit-flex-wrap: nowrap;
+ flex-wrap: nowrap;
+ }
+
+ .layout.center,
+ .layout.center-center {
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ }
+
+ .layout.center-justified,
+ .layout.center-center {
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+ }
+
+ .flex {
+ -ms-flex: 1 1 0.000000001px;
+ -webkit-flex: 1;
+ flex: 1;
+ -webkit-flex-basis: 0.000000001px;
+ flex-basis: 0.000000001px;
+ }
+
+ .flex-auto {
+ -ms-flex: 1 1 auto;
+ -webkit-flex: 1 1 auto;
+ flex: 1 1 auto;
+ }
+
+ .flex-none {
+ -ms-flex: none;
+ -webkit-flex: none;
+ flex: none;
+ }
+ </style>
+ </template>
+</dom-module>
+
+<!-- Basic flexbox reverse styles -->
+<dom-module id="iron-flex-reverse">
+ <template>
+ <style>
+ .layout.horizontal-reverse,
+ .layout.vertical-reverse {
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ }
+
+ .layout.horizontal-reverse {
+ -ms-flex-direction: row-reverse;
+ -webkit-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+ }
+
+ .layout.vertical-reverse {
+ -ms-flex-direction: column-reverse;
+ -webkit-flex-direction: column-reverse;
+ flex-direction: column-reverse;
+ }
+
+ .layout.wrap-reverse {
+ -ms-flex-wrap: wrap-reverse;
+ -webkit-flex-wrap: wrap-reverse;
+ flex-wrap: wrap-reverse;
+ }
+ </style>
+ </template>
+</dom-module>
+
+<!-- Flexbox alignment -->
+<dom-module id="iron-flex-alignment">
+ <template>
+ <style>
+ /**
+ * Alignment in cross axis.
+ */
+ .layout.start {
+ -ms-flex-align: start;
+ -webkit-align-items: flex-start;
+ align-items: flex-start;
+ }
+
+ .layout.center,
+ .layout.center-center {
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ }
+
+ .layout.end {
+ -ms-flex-align: end;
+ -webkit-align-items: flex-end;
+ align-items: flex-end;
+ }
+
+ .layout.baseline {
+ -ms-flex-align: baseline;
+ -webkit-align-items: baseline;
+ align-items: baseline;
+ }
+
+ /**
+ * Alignment in main axis.
+ */
+ .layout.start-justified {
+ -ms-flex-pack: start;
+ -webkit-justify-content: flex-start;
+ justify-content: flex-start;
+ }
+
+ .layout.center-justified,
+ .layout.center-center {
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+ }
+
+ .layout.end-justified {
+ -ms-flex-pack: end;
+ -webkit-justify-content: flex-end;
+ justify-content: flex-end;
+ }
+
+ .layout.around-justified {
+ -ms-flex-pack: distribute;
+ -webkit-justify-content: space-around;
+ justify-content: space-around;
+ }
+
+ .layout.justified {
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ }
+
+ /**
+ * Self alignment.
+ */
+ .self-start {
+ -ms-align-self: flex-start;
+ -webkit-align-self: flex-start;
+ align-self: flex-start;
+ }
+
+ .self-center {
+ -ms-align-self: center;
+ -webkit-align-self: center;
+ align-self: center;
+ }
+
+ .self-end {
+ -ms-align-self: flex-end;
+ -webkit-align-self: flex-end;
+ align-self: flex-end;
+ }
+
+ .self-stretch {
+ -ms-align-self: stretch;
+ -webkit-align-self: stretch;
+ align-self: stretch;
+ }
+
+ .self-baseline {
+ -ms-align-self: baseline;
+ -webkit-align-self: baseline;
+ align-self: baseline;
+ }
+
+ /**
+ * multi-line alignment in main axis.
+ */
+ .layout.start-aligned {
+ -ms-flex-line-pack: start; /* IE10 */
+ -ms-align-content: flex-start;
+ -webkit-align-content: flex-start;
+ align-content: flex-start;
+ }
+
+ .layout.end-aligned {
+ -ms-flex-line-pack: end; /* IE10 */
+ -ms-align-content: flex-end;
+ -webkit-align-content: flex-end;
+ align-content: flex-end;
+ }
+
+ .layout.center-aligned {
+ -ms-flex-line-pack: center; /* IE10 */
+ -ms-align-content: center;
+ -webkit-align-content: center;
+ align-content: center;
+ }
+
+ .layout.between-aligned {
+ -ms-flex-line-pack: justify; /* IE10 */
+ -ms-align-content: space-between;
+ -webkit-align-content: space-between;
+ align-content: space-between;
+ }
+
+ .layout.around-aligned {
+ -ms-flex-line-pack: distribute; /* IE10 */
+ -ms-align-content: space-around;
+ -webkit-align-content: space-around;
+ align-content: space-around;
+ }
+ </style>
+ </template>
+</dom-module>
+
+<dom-module id="iron-flex-factors">
+ <template>
+ <style>
+ .flex,
+ .flex-1 {
+ -ms-flex: 1 1 0.000000001px;
+ -webkit-flex: 1;
+ flex: 1;
+ -webkit-flex-basis: 0.000000001px;
+ flex-basis: 0.000000001px;
+ }
+
+ .flex-2 {
+ -ms-flex: 2;
+ -webkit-flex: 2;
+ flex: 2;
+ }
+
+ .flex-3 {
+ -ms-flex: 3;
+ -webkit-flex: 3;
+ flex: 3;
+ }
+
+ .flex-4 {
+ -ms-flex: 4;
+ -webkit-flex: 4;
+ flex: 4;
+ }
+
+ .flex-5 {
+ -ms-flex: 5;
+ -webkit-flex: 5;
+ flex: 5;
+ }
+
+ .flex-6 {
+ -ms-flex: 6;
+ -webkit-flex: 6;
+ flex: 6;
+ }
+
+ .flex-7 {
+ -ms-flex: 7;
+ -webkit-flex: 7;
+ flex: 7;
+ }
+
+ .flex-8 {
+ -ms-flex: 8;
+ -webkit-flex: 8;
+ flex: 8;
+ }
+
+ .flex-9 {
+ -ms-flex: 9;
+ -webkit-flex: 9;
+ flex: 9;
+ }
+
+ .flex-10 {
+ -ms-flex: 10;
+ -webkit-flex: 10;
+ flex: 10;
+ }
+
+ .flex-11 {
+ -ms-flex: 11;
+ -webkit-flex: 11;
+ flex: 11;
+ }
+
+ .flex-12 {
+ -ms-flex: 12;
+ -webkit-flex: 12;
+ flex: 12;
+ }
+ </style>
+ </template>
+</dom-module>
+
+<!-- Non-flexbox positioning helper styles -->
+<dom-module id="iron-positioning">
+ <template>
+ <style>
+ .block {
+ display: block;
+ }
+
+ [hidden] {
+ display: none !important;
+ }
+
+ .invisible {
+ visibility: hidden !important;
+ }
+
+ .relative {
+ position: relative;
+ }
+
+ .fit {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+
+ body.fullbleed {
+ margin: 0;
+ height: 100vh;
+ }
+
+ .scroll {
+ -webkit-overflow-scrolling: touch;
+ overflow: auto;
+ }
+
+ /* fixed position */
+ .fixed-bottom,
+ .fixed-left,
+ .fixed-right,
+ .fixed-top {
+ position: fixed;
+ }
+
+ .fixed-top {
+ top: 0;
+ left: 0;
+ right: 0;
+ }
+
+ .fixed-right {
+ top: 0;
+ right: 0;
+ bottom: 0;
+ }
+
+ .fixed-bottom {
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+
+ .fixed-left {
+ top: 0;
+ bottom: 0;
+ left: 0;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.d.ts
new file mode 100644
index 00000000000..c7301adc888
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-flex-layout.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.html
new file mode 100644
index 00000000000..99bc55350e0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/iron-flex-layout.html
@@ -0,0 +1,424 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!--
+The `<iron-flex-layout>` component provides simple ways to use
+[CSS flexible box layout](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes),
+also known as flexbox. This component provides two different ways to use flexbox:
+
+1. [Layout classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html).
+The layout class stylesheet provides a simple set of class-based flexbox rules, that
+let you specify layout properties directly in markup. You must include this file
+in every element that needs to use them.
+
+ Sample use:
+
+ ```
+ <custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <next-code-block></next-code-block>
+ </template>
+ </custom-element-demo>
+ ```
+
+ ```html
+ <link rel="import" href="iron-flex-layout-classes.html">
+ <style is="custom-style" include="iron-flex iron-flex-alignment"></style>
+ <style>
+ .test { width: 100px; }
+ </style>
+ <div class="layout horizontal center-center">
+ <div class="test">horizontal layout center alignment</div>
+ </div>
+ ```
+
+2. [Custom CSS mixins](https://github.com/PolymerElements/iron-flex-layout/blob/master/iron-flex-layout.html).
+The mixin stylesheet includes custom CSS mixins that can be applied inside a CSS rule using the `@apply` function.
+
+Please note that the old [/deep/ layout classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/classes)
+are deprecated, and should not be used. To continue using layout properties
+directly in markup, please switch to using the new `dom-module`-based
+[layout classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html).
+Please note that the new version does not use `/deep/`, and therefore requires you
+to import the `dom-modules` in every element that needs to use them.
+
+A complete [guide](https://elements.polymer-project.org/guides/flex-layout) to `<iron-flex-layout>` is available.
+
+@group Iron Elements
+@pseudoElement iron-flex-layout
+@demo demo/index.html
+-->
+<script>
+ // This is left only for backward compatibility with projects
+ // that incorrectly relied on unscoped global [hidden] rules;
+ // removing would be a breaking change, but new projects
+ // should never rely on this.
+ (function() {
+ var style = document.createElement('style');
+ style.textContent = '[hidden] { display: none !important; }';
+ document.head.appendChild(style);
+ })();
+</script>
+<custom-style>
+ <style is="custom-style">
+ [hidden] {
+ display: none !important;
+ }
+ </style>
+</custom-style>
+
+<custom-style>
+ <style is="custom-style">
+ html {
+
+ --layout: {
+ display: -ms-flexbox;
+ display: -webkit-flex;
+ display: flex;
+ };
+
+ --layout-inline: {
+ display: -ms-inline-flexbox;
+ display: -webkit-inline-flex;
+ display: inline-flex;
+ };
+
+ --layout-horizontal: {
+ @apply --layout;
+
+ -ms-flex-direction: row;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ };
+
+ --layout-horizontal-reverse: {
+ @apply --layout;
+
+ -ms-flex-direction: row-reverse;
+ -webkit-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+ };
+
+ --layout-vertical: {
+ @apply --layout;
+
+ -ms-flex-direction: column;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ };
+
+ --layout-vertical-reverse: {
+ @apply --layout;
+
+ -ms-flex-direction: column-reverse;
+ -webkit-flex-direction: column-reverse;
+ flex-direction: column-reverse;
+ };
+
+ --layout-wrap: {
+ -ms-flex-wrap: wrap;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+ };
+
+ --layout-wrap-reverse: {
+ -ms-flex-wrap: wrap-reverse;
+ -webkit-flex-wrap: wrap-reverse;
+ flex-wrap: wrap-reverse;
+ };
+
+ --layout-flex-auto: {
+ -ms-flex: 1 1 auto;
+ -webkit-flex: 1 1 auto;
+ flex: 1 1 auto;
+ };
+
+ --layout-flex-none: {
+ -ms-flex: none;
+ -webkit-flex: none;
+ flex: none;
+ };
+
+ --layout-flex: {
+ -ms-flex: 1 1 0.000000001px;
+ -webkit-flex: 1;
+ flex: 1;
+ -webkit-flex-basis: 0.000000001px;
+ flex-basis: 0.000000001px;
+ };
+
+ --layout-flex-2: {
+ -ms-flex: 2;
+ -webkit-flex: 2;
+ flex: 2;
+ };
+
+ --layout-flex-3: {
+ -ms-flex: 3;
+ -webkit-flex: 3;
+ flex: 3;
+ };
+
+ --layout-flex-4: {
+ -ms-flex: 4;
+ -webkit-flex: 4;
+ flex: 4;
+ };
+
+ --layout-flex-5: {
+ -ms-flex: 5;
+ -webkit-flex: 5;
+ flex: 5;
+ };
+
+ --layout-flex-6: {
+ -ms-flex: 6;
+ -webkit-flex: 6;
+ flex: 6;
+ };
+
+ --layout-flex-7: {
+ -ms-flex: 7;
+ -webkit-flex: 7;
+ flex: 7;
+ };
+
+ --layout-flex-8: {
+ -ms-flex: 8;
+ -webkit-flex: 8;
+ flex: 8;
+ };
+
+ --layout-flex-9: {
+ -ms-flex: 9;
+ -webkit-flex: 9;
+ flex: 9;
+ };
+
+ --layout-flex-10: {
+ -ms-flex: 10;
+ -webkit-flex: 10;
+ flex: 10;
+ };
+
+ --layout-flex-11: {
+ -ms-flex: 11;
+ -webkit-flex: 11;
+ flex: 11;
+ };
+
+ --layout-flex-12: {
+ -ms-flex: 12;
+ -webkit-flex: 12;
+ flex: 12;
+ };
+
+ /* alignment in cross axis */
+
+ --layout-start: {
+ -ms-flex-align: start;
+ -webkit-align-items: flex-start;
+ align-items: flex-start;
+ };
+
+ --layout-center: {
+ -ms-flex-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+ };
+
+ --layout-end: {
+ -ms-flex-align: end;
+ -webkit-align-items: flex-end;
+ align-items: flex-end;
+ };
+
+ --layout-baseline: {
+ -ms-flex-align: baseline;
+ -webkit-align-items: baseline;
+ align-items: baseline;
+ };
+
+ /* alignment in main axis */
+
+ --layout-start-justified: {
+ -ms-flex-pack: start;
+ -webkit-justify-content: flex-start;
+ justify-content: flex-start;
+ };
+
+ --layout-center-justified: {
+ -ms-flex-pack: center;
+ -webkit-justify-content: center;
+ justify-content: center;
+ };
+
+ --layout-end-justified: {
+ -ms-flex-pack: end;
+ -webkit-justify-content: flex-end;
+ justify-content: flex-end;
+ };
+
+ --layout-around-justified: {
+ -ms-flex-pack: distribute;
+ -webkit-justify-content: space-around;
+ justify-content: space-around;
+ };
+
+ --layout-justified: {
+ -ms-flex-pack: justify;
+ -webkit-justify-content: space-between;
+ justify-content: space-between;
+ };
+
+ --layout-center-center: {
+ @apply --layout-center;
+ @apply --layout-center-justified;
+ };
+
+ /* self alignment */
+
+ --layout-self-start: {
+ -ms-align-self: flex-start;
+ -webkit-align-self: flex-start;
+ align-self: flex-start;
+ };
+
+ --layout-self-center: {
+ -ms-align-self: center;
+ -webkit-align-self: center;
+ align-self: center;
+ };
+
+ --layout-self-end: {
+ -ms-align-self: flex-end;
+ -webkit-align-self: flex-end;
+ align-self: flex-end;
+ };
+
+ --layout-self-stretch: {
+ -ms-align-self: stretch;
+ -webkit-align-self: stretch;
+ align-self: stretch;
+ };
+
+ --layout-self-baseline: {
+ -ms-align-self: baseline;
+ -webkit-align-self: baseline;
+ align-self: baseline;
+ };
+
+ /* multi-line alignment in main axis */
+
+ --layout-start-aligned: {
+ -ms-flex-line-pack: start; /* IE10 */
+ -ms-align-content: flex-start;
+ -webkit-align-content: flex-start;
+ align-content: flex-start;
+ };
+
+ --layout-end-aligned: {
+ -ms-flex-line-pack: end; /* IE10 */
+ -ms-align-content: flex-end;
+ -webkit-align-content: flex-end;
+ align-content: flex-end;
+ };
+
+ --layout-center-aligned: {
+ -ms-flex-line-pack: center; /* IE10 */
+ -ms-align-content: center;
+ -webkit-align-content: center;
+ align-content: center;
+ };
+
+ --layout-between-aligned: {
+ -ms-flex-line-pack: justify; /* IE10 */
+ -ms-align-content: space-between;
+ -webkit-align-content: space-between;
+ align-content: space-between;
+ };
+
+ --layout-around-aligned: {
+ -ms-flex-line-pack: distribute; /* IE10 */
+ -ms-align-content: space-around;
+ -webkit-align-content: space-around;
+ align-content: space-around;
+ };
+
+ /*******************************
+ Other Layout
+ *******************************/
+
+ --layout-block: {
+ display: block;
+ };
+
+ --layout-invisible: {
+ visibility: hidden !important;
+ };
+
+ --layout-relative: {
+ position: relative;
+ };
+
+ --layout-fit: {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ };
+
+ --layout-scroll: {
+ -webkit-overflow-scrolling: touch;
+ overflow: auto;
+ };
+
+ --layout-fullbleed: {
+ margin: 0;
+ height: 100vh;
+ };
+
+ /* fixed position */
+
+ --layout-fixed-top: {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ };
+
+ --layout-fixed-right: {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ };
+
+ --layout-fixed-bottom: {
+ position: fixed;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ };
+
+ --layout-fixed-left: {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ };
+
+ }
+ </style>
+</custom-style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package-lock.json
new file mode 100644
index 00000000000..56139b2b721
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package-lock.json
@@ -0,0 +1,986 @@
+{
+ "name": "@polymer/iron-flex-layout",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.1.1.tgz",
+ "integrity": "sha512-rUfH6USpiPYSHl2dC+/rGb3RYK8LPyqNhiuZCLv13F0fhYr01jdTogGuSphEoSLklm1gKRsDsrfZq7OvpzPYEg==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.1",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.10"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.97",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.97.tgz",
+ "integrity": "sha512-k3CDdCq8Uv8AZ7/bmGSSvlwbPDPhkkckSq8Y9ndXowv86m3k07PjG98SigpjVAY9EyHV9kiFldEV306xh4gkig==",
+ "dev": true
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.10",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.10.tgz",
+ "integrity": "sha1-9vCd15PdL0IomsAdoCb8q6ZfGYw=",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.97",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "2.2.3",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz",
+ "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.7.tgz",
+ "integrity": "sha512-jNhbkxPtt9xbzvihfA0OavjJbpCIyTDSmwE03BVXgCKcz9lwNsq4cg2wsNkY4Av5eH35ttBArhYtVJa6CIrg2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.1.tgz",
+ "integrity": "sha512-gRJDcIjFSzMcmG/GrJlgL0wWoAxr11mVzCq32bjka0endupm9meLwvoJUKc4HDeFiEIB2X3GvNrhF5cKO4Bd4A==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.7",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package.json
new file mode 100644
index 00000000000..5656aeb459d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-flex-layout/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-flex-layout",
+ "private": true,
+ "description": "Provide flexbox-based layouts",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-flex-layout.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.bower.json
new file mode 100644
index 00000000000..9587c307c99
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.bower.json
@@ -0,0 +1,59 @@
+{
+ "name": "iron-form-element-behavior",
+ "version": "2.1.2",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "private": true,
+ "main": "iron-form-element-behavior.html",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "description": "Enables a custom element to be included in an iron-form",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "form"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-form-element-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-form-element-behavior",
+ "_release": "2.1.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.2",
+ "commit": "601b8337c2728c8421c2a018c016d9ca97e0f385"
+ },
+ "_source": "https://github.com/PolymerElements/iron-form-element-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-form-element-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..36493f30b8b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-form-element-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.travis.yml
new file mode 100644
index 00000000000..334e24468fd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ IJ2DKBWd4T446kn7yV/2tStL8tTZcmfguzymvE+U9p9JBJl6Qu+KwfzETjJPyiEhzwS8gqcrV8takloMto2dMLCyCc9RBzJt/AHlLC5vcZ0aJ06ArYkn98/lz4q9noDDpd1dqXbzC8ea4En/b+DCgf8iei7pFmoNjFo8+RGoSMN7GvmUIBEbZ0akQnZcvMNgbWrRQQ31Qkug492ybrmizBMlBoMSRVkMjKkuKQyOr/7CTEvmj62XuapM9VoE21qr6E0T1iXrBbT9ay5HPlitkfBXe+oV3tj3ONBp81+HhEiIkZua3xnGcs0YkT9qd/fipy/1hfPAj5bBco/IyYEjVYUuIrhdJEfzFlHBwNqlWtl5yuW9srHP5V4k7NiUWBESoQ2V4AH7ZDuxcsdhBT1N/2D0dksBP4UkfyBIYQaUOYSI0a4O6BpgTQRPh7yHZ88fG6B2/k59dlX1PuPFuiI7dECPMmaLVsUGH3PMkezHsD4BNdp89HzJVk0jTM8W5oP1/Lj8EEp1X48zHg7IZo+o0rOPtvjqrYtdhw9+BVujRKkLhXBDIh+bjQeX4WpeDPtAxAaOH7bAWxWa+w1h0DbOkHzB6cV3H8jzg/oJKwZyIgmrR9aVjeaW2IP3sYxbkGq2ZM/x9+mcRo+JV3TONStYRc6lEKpmOGQgUZbVMyU0S2E=
+ - secure: >-
+ KZmse/kaUHZKkjYYWssUihkjaWmhXFfJio6/TcyxlvzlRN+b+s8xkMx09F2mfCEzCuxbhMeYaOLYUP+x44mO/N5OKvRYqGKLBJASQ+LvsVe6ep972AfWtb2P2E6OK/b9vAdW0v52j1gTaj94KtUfjaWjxP78TTEG5slMMwadqBm5e7nW4vS+wV26sbNymnWB9NErLebJr0T+wwrXDyjXWkUTH8yPzlwFjPcfXZavQwFyM9E+k+HQVUOQ8b3oMxVnwc2aHRWLWRDu97k1S/hVk+c1j+qamOa16faJLTsG9lay7RRkeq/OQBvjdWtmsq95NkP27/uLlQrKKOY7nZZ331LlqYK/o1+i+nVjZqWAgMXun7OjTtZvU53dOFXPVroXNoIcAPhdVNxLNvlJLvTL1uoVybzjeDdiMrTpZc6FpSLRKOj9AGmnT4vy+A2MSxn3rwujvz2PlRvoXYxnN36QbONbF7Zr1Sv6i+53eN+/1xC78i7otJEsvJhKe6YAq9/7xyOBGhELhOYMIES2gy/Nbc+47pEWWgYQ/tvBO1RXuaRgKG2iwiWL83Phhgw3SAdYaAL5xk6lUTTsuCJZHmcDoD8bTDblBIjntWvtzT6Z1NPTiuUXszJXkLSwUjfNUeQtb4H9GnNWF0P4ze91RZippygyWfrDz7aQhf+NcbF/PE0=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/README.md
new file mode 100644
index 00000000000..14e1ebf78a3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/README.md
@@ -0,0 +1,14 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-form-element-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-form-element-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-form-element-behavior)_
+
+
+## Polymer.IronFormElementBehavior
+
+Polymer.IronFormElementBehavior enables a custom element to be included
+in an `iron-form`.
+
+### Changes in 2.0
+
+If your form element is used with Polymer 2.0, it doesn't need to implement `Polymer.IronFormElementBehavior` as `iron-form#2.0.0` won't rely on it.
+The events `iron-form-element-register` and `iron-form-element-unregister` are not fired on Polymer 2.0.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/bower.json
new file mode 100644
index 00000000000..0870b00b0ae
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/bower.json
@@ -0,0 +1,49 @@
+{
+ "name": "iron-form-element-behavior",
+ "version": "2.1.2",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "private": true,
+ "main": "iron-form-element-behavior.html",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "description": "Enables a custom element to be included in an iron-form",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "form"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-form-element-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/index.html
new file mode 100644
index 00000000000..7688e8269d4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/index.html
@@ -0,0 +1,71 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+
+ <title>iron-form-element-behavior demo</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="simple-form.html">
+ <link rel="import" href="simple-element.html">
+ </head>
+ <style>
+ input {
+ margin-bottom: 24px;
+ width: 200px;
+ }
+ </style>
+ <body>
+
+ <div class="vertical-section-container centered">
+ <div class="vertical-section">
+ <form is="simple-form" id="form">
+ Element with iron-form-element-behavior <input is="simple-element" type="text" name="one" value="one">
+ <br>
+ Element without iron-form-element-behavior <input type="text" name="two" value="two">
+ <br>
+ Element with iron-form-element-behavior <input is="simple-element" type="text" name="three" value="three">
+ </form>
+
+ <h4>Elements tracked by the form: <button onclick="update()">Update</button> </h4>
+
+ <ul id="output">
+ </ul>
+ </div>
+ </div>
+
+ <script>
+ function update() {
+ if (Polymer.Element) {
+ console.warn('IronFormElementBehavior is deprecated in Polymer 2.0');
+ return;
+ }
+ var output = document.getElementById('output');
+ var elements = document.getElementById('form').formElements;
+ document.getElementById('output').innerHTML = '';
+ for (var i = 0; i < elements.length; i++) {
+ var li = document.createElement('li');
+ var text = document.createTextNode(elements[i].value);
+ li.appendChild(text);
+ output.appendChild(li);
+ }
+ }
+ </script>
+ </body>
+
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-element.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-element.html
new file mode 100644
index 00000000000..450276923b3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-element.html
@@ -0,0 +1,27 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-form-element-behavior.html">
+
+<script>
+
+ Polymer({
+
+ is: 'simple-element',
+
+ extends: 'input',
+
+ behaviors: [
+ Polymer.IronFormElementBehavior
+ ]
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-form.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-form.html
new file mode 100644
index 00000000000..4dc5dc6bb8f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/demo/simple-form.html
@@ -0,0 +1,53 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../polymer/polymer.html">
+
+<script>
+
+ Polymer({
+
+ is: 'simple-form',
+
+ extends: 'form',
+
+ properties: {
+ formElements: {
+ type: Object,
+ notify: true
+ }
+ },
+
+ listeners: {
+ 'iron-form-element-register': '_elementRegistered',
+ 'iron-form-element-unregister': '_elementUnregistered'
+ },
+
+ ready: function() {
+ this.formElements = [];
+ },
+
+ _elementRegistered: function(e) {
+ this.formElements.push(e.target);
+ e.target._parentForm = this;
+ },
+
+ _elementUnregistered: function(e) {
+ var target = e.detail.target;
+ if (target) {
+ var index = this.formElements.indexOf(target);
+ if (index > -1) {
+ this.formElements.splice(index, 1);
+ }
+ }
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/index.html
new file mode 100644
index 00000000000..8d748c0509b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-form-element-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.d.ts
new file mode 100644
index 00000000000..da153011278
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.d.ts
@@ -0,0 +1,54 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-form-element-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Polymer.IronFormElementBehavior enables a custom element to be included
+ * in an `iron-form`.
+ *
+ * Events `iron-form-element-register` and `iron-form-element-unregister` are not fired on Polymer 2.0.
+ *
+ *
+ */
+ interface IronFormElementBehavior {
+
+ /**
+ * The name of this element.
+ */
+ name: string|null|undefined;
+
+ /**
+ * The value for this element.
+ */
+ value: string|number|null|undefined;
+
+ /**
+ * Set to true to mark the input as required. If used in a form, a
+ * custom element that uses this behavior should also use
+ * Polymer.IronValidatableBehavior and define a custom validation method.
+ * Otherwise, a `required` element will always be considered valid.
+ * It's also strongly recommended to provide a visual style for the element
+ * when its value is invalid.
+ */
+ required: boolean|null|undefined;
+
+ /**
+ * The form that the element is registered to.
+ */
+ _parentForm: object|null|undefined;
+ attached(): void;
+ detached(): void;
+ }
+
+ const IronFormElementBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.html
new file mode 100644
index 00000000000..e36371c2305
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/iron-form-element-behavior.html
@@ -0,0 +1,91 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ /**
+ Polymer.IronFormElementBehavior enables a custom element to be included
+ in an `iron-form`.
+
+ Events `iron-form-element-register` and `iron-form-element-unregister` are not fired on Polymer 2.0.
+
+ @demo demo/index.html
+ @polymerBehavior
+ */
+ Polymer.IronFormElementBehavior = {
+
+ properties: {
+ /**
+ * Fired when the element is added to an `iron-form`.
+ *
+ * @event iron-form-element-register
+ */
+
+ /**
+ * Fired when the element is removed from an `iron-form`.
+ *
+ * @event iron-form-element-unregister
+ */
+
+ /**
+ * The name of this element.
+ */
+ name: {
+ type: String
+ },
+
+ /**
+ * The value for this element.
+ * @type {string|number|null|undefined}
+ */
+ value: {
+ notify: true,
+ type: String
+ },
+
+ /**
+ * Set to true to mark the input as required. If used in a form, a
+ * custom element that uses this behavior should also use
+ * Polymer.IronValidatableBehavior and define a custom validation method.
+ * Otherwise, a `required` element will always be considered valid.
+ * It's also strongly recommended to provide a visual style for the element
+ * when its value is invalid.
+ */
+ required: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * The form that the element is registered to.
+ */
+ _parentForm: {
+ type: Object
+ }
+ },
+
+ attached() {
+ if (!Polymer.Element) {
+ // Note: the iron-form that this element belongs to will set this
+ // element's _parentForm property when handling this event.
+ this.fire('iron-form-element-register');
+ }
+ },
+
+ detached() {
+ if (!Polymer.Element && this._parentForm) {
+ this._parentForm.fire('iron-form-element-unregister', {target: this});
+ }
+ }
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package-lock.json
new file mode 100644
index 00000000000..fc39988423e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package-lock.json
@@ -0,0 +1,983 @@
+{
+ "name": "@polymer/iron-form-element-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.7.tgz",
+ "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.102",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.9.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.9.0.tgz",
+ "integrity": "sha512-WPOqlV2W/M4Ni40QIqYSv8PE7H4rjiPm1KEf02QPtjZOGlAC4Rv7e6UJ1Ke1O70WT5bydcsEn3LViFIqYpVOJw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.102",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package.json
new file mode 100644
index 00000000000..9fab6832f62
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-form-element-behavior/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-form-element-behavior",
+ "private": true,
+ "description": "Enables a custom element to be included in an iron-form",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-form-element-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.bower.json
new file mode 100644
index 00000000000..b8132922e1a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.bower.json
@@ -0,0 +1,69 @@
+{
+ "name": "iron-icon",
+ "private": true,
+ "version": "2.1.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "An element that supports displaying an icon",
+ "main": "iron-icon.html",
+ "author": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "icon"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-icon.git"
+ },
+ "ignore": [],
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-meta": "PolymerElements/iron-meta#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "promise-polyfill": "polymerlabs/promise-polyfill#1 - 2",
+ "iron-iconset": "PolymerElements/iron-iconset#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
+ "iron-meta": "polymerelements/iron-meta#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
+ "iron-iconset": "polymerelements/iron-iconset#^1.0.0",
+ "iron-icons": "polymerelements/iron-icons#^1.0.0",
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.5"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-icon",
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "c592bd3f0b442e3e4c1fc574f08545d0f9810d15"
+ },
+ "_source": "https://github.com/PolymerElements/iron-icon.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-icon"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..61da83fb287
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-icon/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.travis.yml
new file mode 100644
index 00000000000..d47c0333f9a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ TTp7q3OKEpaFqnqbYczhMd8iXTa1Ya0jOQVq1OhljpJogLWb78qvHLHgnxgMWkw+/KDyE5KHW1CXhYUQa7C9QF2Zn7uoN27+7+4q7HuK3pTuUtqdfstLVuLHQrfK6VqUT4XjSpeMzNX/HxuD3EMBH0bMBR4CIr76sLJOuIL/XF8=
+ - secure: >-
+ damHvQXygRYIJG/8Vmqh7U4zxoi5224JIZiZVQL6I5z//s5zqHq6AqwDyfOoc0zWndJCwE8NvOzKD/lmVYXIsPcY95kkZS45Dbye0krYWUzKnv42rDi/7olXcg647iAEDVhW3BRHmA+opzQtKUpAkXl97DtPVkszLL1ReyNyv3A=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/README.md
new file mode 100644
index 00000000000..c2f956f4535
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/README.md
@@ -0,0 +1,22 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-icon.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-icon)
+
+## &lt;iron-icon&gt;
+
+The `iron-icon` element displays an icon. By default an icon renders as a 24px square.
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-icons/iron-icons.html">
+ <link rel="import" href="iron-icon.html">
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<iron-icon icon="menu"></iron-icon>
+<iron-icon src="demo/location.png"></iron-icon>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/bower.json
new file mode 100644
index 00000000000..98243f5e824
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/bower.json
@@ -0,0 +1,59 @@
+{
+ "name": "iron-icon",
+ "private": true,
+ "version": "2.0.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "An element that supports displaying an icon",
+ "main": "iron-icon.html",
+ "author": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "icon"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-icon.git"
+ },
+ "ignore": [],
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-meta": "PolymerElements/iron-meta#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "promise-polyfill": "polymerlabs/promise-polyfill#1 - 2",
+ "iron-iconset": "PolymerElements/iron-iconset#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
+ "iron-meta": "polymerelements/iron-meta#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
+ "iron-iconset": "polymerelements/iron-iconset#^1.0.0",
+ "iron-icons": "polymerelements/iron-icons#^1.0.0",
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.5"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/async.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/async.html
new file mode 100644
index 00000000000..0e7bffc0b8a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/async.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <title>iron-icon demo</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-icon.html">
+ <link rel="import" href="../../paper-styles/demo-pages.html" >
+
+ <custom-style>
+ <style is="custom-style">
+ #loading_message {
+ color: #444;
+ margin-bottom: 16px;
+ }
+ .vertical-section h4 {
+ border-left: 3px solid var(--paper-grey-300);
+ padding-left: 10px;
+ }
+
+ .vertical-section h4:hover {
+ border-left-color: var(--google-blue-700);
+ }
+ </style>
+ </custom-style>
+</head>
+<body>
+ <div class="vertical-section-container centered">
+ <h4>
+ This demo is for an &lt;iron-icon&gt; with an asynchronously loaded
+ iconset.
+ </h4>
+
+ <div id='loading_message'>Waiting to load iconset...</div>
+
+ <div class="vertical-section">
+ <!-- iron-icon using a iron-iconset as its icon source -->
+ <iron-iconset name="example" icons="location" src="location.png" size="24" width="24"></iron-iconset>
+
+ <h4>&lt;iron-icon icon="example:location"&gt;</h4>
+ <iron-icon icon="example:location"></iron-icon>
+
+ </div>
+ </div>
+ <script>
+ setTimeout(function() {
+ // Import the code that powers the iron-iconset asynchronously
+ var linkElem = document.createElement('link');
+ linkElem.setAttribute('rel', 'import');
+ linkElem.setAttribute('href', '../../iron-iconset/iron-iconset.html');
+ document.head.appendChild(linkElem);
+ document.querySelector('#loading_message').innerText = "Iconset Loaded.";
+ }, 1000);
+ </script>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/index.html
new file mode 100644
index 00000000000..36f292ecc1c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/index.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <title>iron-icon demo</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-icon.html">
+ <link rel="import" href="../../iron-iconset/iron-iconset.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+</head>
+<body unresolved>
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles"></style>
+ </custom-style>
+
+ <div class="vertical-section-container centered">
+ <h3>
+ This demo is for a single &lt;iron-icon&gt;. If you're looking for the
+ whole set of available icons, check out the
+ <a href="https://www.webcomponents.org/element/PolymerElements/iron-icons/demo/demo/index.html" target="_top">&lt;iron-icons&gt;
+ demo.</a>
+ </h3>
+
+ <h3><code>iron-icon</code> using a iron-iconset as its icon source.</h3>
+ <demo-snippet>
+ <template>
+ <iron-iconset name="example" icons="location" src="location.png" size="24" width="24"></iron-iconset>
+
+ <iron-icon icon="example:location"></iron-icon>
+ </template>
+ </demo-snippet>
+
+ <h3><code>iron-icon</code> using an image url as its icon source.</h3>
+ <demo-snippet>
+ <template>
+ <iron-icon src="location.png"></iron-icon>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/location.png b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/location.png
new file mode 100644
index 00000000000..9bb74236b85
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/demo/location.png
Binary files differ
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/hero.svg
new file mode 100755
index 00000000000..f0f58536e53
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/hero.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <circle cx="112" cy="61" r="8"/>
+ <path d="M129,78H95V44h34V78z M97,76h30V46H97V76z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/index.html
new file mode 100644
index 00000000000..487bb5c38a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.d.ts
new file mode 100644
index 00000000000..f326c64a2a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.d.ts
@@ -0,0 +1,107 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-icon.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-meta/iron-meta.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+
+/**
+ * The `iron-icon` element displays an icon. By default an icon renders as a 24px square.
+ *
+ * Example using src:
+ *
+ * <iron-icon src="star.png"></iron-icon>
+ *
+ * Example setting size to 32px x 32px:
+ *
+ * <iron-icon class="big" src="big_star.png"></iron-icon>
+ *
+ * <style is="custom-style">
+ * .big {
+ * --iron-icon-height: 32px;
+ * --iron-icon-width: 32px;
+ * }
+ * </style>
+ *
+ * The iron elements include several sets of icons.
+ * To use the default set of icons, import `iron-icons.html` and use the `icon` attribute to specify an icon:
+ *
+ * <link rel="import" href="/components/iron-icons/iron-icons.html">
+ *
+ * <iron-icon icon="menu"></iron-icon>
+ *
+ * To use a different built-in set of icons, import the specific `iron-icons/<iconset>-icons.html`, and
+ * specify the icon as `<iconset>:<icon>`. For example, to use a communication icon, you would
+ * use:
+ *
+ * <link rel="import" href="/components/iron-icons/communication-icons.html">
+ *
+ * <iron-icon icon="communication:email"></iron-icon>
+ *
+ * You can also create custom icon sets of bitmap or SVG icons.
+ *
+ * Example of using an icon named `cherry` from a custom iconset with the ID `fruit`:
+ *
+ * <iron-icon icon="fruit:cherry"></iron-icon>
+ *
+ * See [iron-iconset](iron-iconset) and [iron-iconset-svg](iron-iconset-svg) for more information about
+ * how to create a custom iconset.
+ *
+ * See the [iron-icons demo](iron-icons?view=demo:demo/index.html) to see the icons available
+ * in the various iconsets.
+ *
+ * To load a subset of icons from one of the default `iron-icons` sets, you can
+ * use the [poly-icon](https://poly-icon.appspot.com/) tool. It allows you
+ * to select individual icons, and creates an iconset from them that you can
+ * use directly in your elements.
+ *
+ * ### Styling
+ *
+ * The following custom properties are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--iron-icon` | Mixin applied to the icon | {}
+ * `--iron-icon-width` | Width of the icon | `24px`
+ * `--iron-icon-height` | Height of the icon | `24px`
+ * `--iron-icon-fill-color` | Fill color of the svg icon | `currentcolor`
+ * `--iron-icon-stroke-color` | Stroke color of the svg icon | none
+ */
+interface IronIconElement extends Polymer.Element {
+
+ /**
+ * The name of the icon to use. The name should be of the form:
+ * `iconset_name:icon_name`.
+ */
+ icon: string|null|undefined;
+
+ /**
+ * The name of the theme to used, if one is specified by the
+ * iconset.
+ */
+ theme: string|null|undefined;
+
+ /**
+ * If using iron-icon without an iconset, you can set the src to be
+ * the URL of an individual icon image file. Note that this will take
+ * precedence over a given icon attribute.
+ */
+ src: string|null|undefined;
+ _meta: Polymer.IronMeta;
+ _DEFAULT_ICONSET: string;
+ _iconChanged(icon: any): void;
+ _srcChanged(src: any): void;
+ _usesIconset(): any;
+ _updateIcon(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-icon": IronIconElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.html
new file mode 100644
index 00000000000..71378a776cb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/iron-icon.html
@@ -0,0 +1,214 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-meta/iron-meta.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+
+<!--
+
+The `iron-icon` element displays an icon. By default an icon renders as a 24px square.
+
+Example using src:
+
+ <iron-icon src="star.png"></iron-icon>
+
+Example setting size to 32px x 32px:
+
+ <iron-icon class="big" src="big_star.png"></iron-icon>
+
+ <style is="custom-style">
+ .big {
+ --iron-icon-height: 32px;
+ --iron-icon-width: 32px;
+ }
+ </style>
+
+The iron elements include several sets of icons.
+To use the default set of icons, import `iron-icons.html` and use the `icon` attribute to specify an icon:
+
+ <link rel="import" href="/components/iron-icons/iron-icons.html">
+
+ <iron-icon icon="menu"></iron-icon>
+
+To use a different built-in set of icons, import the specific `iron-icons/<iconset>-icons.html`, and
+specify the icon as `<iconset>:<icon>`. For example, to use a communication icon, you would
+use:
+
+ <link rel="import" href="/components/iron-icons/communication-icons.html">
+
+ <iron-icon icon="communication:email"></iron-icon>
+
+You can also create custom icon sets of bitmap or SVG icons.
+
+Example of using an icon named `cherry` from a custom iconset with the ID `fruit`:
+
+ <iron-icon icon="fruit:cherry"></iron-icon>
+
+See [iron-iconset](iron-iconset) and [iron-iconset-svg](iron-iconset-svg) for more information about
+how to create a custom iconset.
+
+See the [iron-icons demo](iron-icons?view=demo:demo/index.html) to see the icons available
+in the various iconsets.
+
+To load a subset of icons from one of the default `iron-icons` sets, you can
+use the [poly-icon](https://poly-icon.appspot.com/) tool. It allows you
+to select individual icons, and creates an iconset from them that you can
+use directly in your elements.
+
+### Styling
+
+The following custom properties are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--iron-icon` | Mixin applied to the icon | {}
+`--iron-icon-width` | Width of the icon | `24px`
+`--iron-icon-height` | Height of the icon | `24px`
+`--iron-icon-fill-color` | Fill color of the svg icon | `currentcolor`
+`--iron-icon-stroke-color` | Stroke color of the svg icon | none
+
+@group Iron Elements
+@element iron-icon
+@demo demo/index.html
+@hero hero.svg
+@homepage polymer.github.io
+-->
+
+<dom-module id="iron-icon">
+ <template>
+ <style>
+ :host {
+ @apply --layout-inline;
+ @apply --layout-center-center;
+ position: relative;
+
+ vertical-align: middle;
+
+ fill: var(--iron-icon-fill-color, currentcolor);
+ stroke: var(--iron-icon-stroke-color, none);
+
+ width: var(--iron-icon-width, 24px);
+ height: var(--iron-icon-height, 24px);
+ @apply --iron-icon;
+ }
+
+ :host([hidden]) {
+ display: none;
+ }
+ </style>
+ </template>
+
+ <script>
+
+ Polymer({
+
+ is: 'iron-icon',
+
+ properties: {
+
+ /**
+ * The name of the icon to use. The name should be of the form:
+ * `iconset_name:icon_name`.
+ */
+ icon: {
+ type: String
+ },
+
+ /**
+ * The name of the theme to used, if one is specified by the
+ * iconset.
+ */
+ theme: {
+ type: String
+ },
+
+ /**
+ * If using iron-icon without an iconset, you can set the src to be
+ * the URL of an individual icon image file. Note that this will take
+ * precedence over a given icon attribute.
+ */
+ src: {
+ type: String
+ },
+
+ /**
+ * @type {!Polymer.IronMeta}
+ */
+ _meta: {
+ value: Polymer.Base.create('iron-meta', {type: 'iconset'})
+ }
+
+ },
+
+ observers: [
+ '_updateIcon(_meta, isAttached)',
+ '_updateIcon(theme, isAttached)',
+ '_srcChanged(src, isAttached)',
+ '_iconChanged(icon, isAttached)'
+ ],
+
+ _DEFAULT_ICONSET: 'icons',
+
+ _iconChanged: function(icon) {
+ var parts = (icon || '').split(':');
+ this._iconName = parts.pop();
+ this._iconsetName = parts.pop() || this._DEFAULT_ICONSET;
+ this._updateIcon();
+ },
+
+ _srcChanged: function(src) {
+ this._updateIcon();
+ },
+
+ _usesIconset: function() {
+ return this.icon || !this.src;
+ },
+
+ /** @suppress {visibility} */
+ _updateIcon: function() {
+ if (this._usesIconset()) {
+ if (this._img && this._img.parentNode) {
+ Polymer.dom(this.root).removeChild(this._img);
+ }
+ if (this._iconName === "") {
+ if (this._iconset) {
+ this._iconset.removeIcon(this);
+ }
+ } else if (this._iconsetName && this._meta) {
+ this._iconset = /** @type {?Polymer.Iconset} */ (
+ this._meta.byKey(this._iconsetName));
+ if (this._iconset) {
+ this._iconset.applyIcon(this, this._iconName, this.theme);
+ this.unlisten(window, 'iron-iconset-added', '_updateIcon');
+ } else {
+ this.listen(window, 'iron-iconset-added', '_updateIcon');
+ }
+ }
+ } else {
+ if (this._iconset) {
+ this._iconset.removeIcon(this);
+ }
+ if (!this._img) {
+ this._img = document.createElement('img');
+ this._img.style.width = '100%';
+ this._img.style.height = '100%';
+ this._img.draggable = false;
+ }
+ this._img.src = this.src;
+ Polymer.dom(this.root).appendChild(this._img);
+ }
+ }
+
+ });
+
+ </script>
+
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package-lock.json
new file mode 100644
index 00000000000..8e8e4f36efe
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-icon",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package.json
new file mode 100644
index 00000000000..fa9ba54927d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icon/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-icon",
+ "private": true,
+ "description": "An element that supports displaying an icon",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-icon.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.bower.json
new file mode 100644
index 00000000000..f63980774ef
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.bower.json
@@ -0,0 +1,86 @@
+{
+ "name": "iron-icons",
+ "version": "2.1.1",
+ "description": "A set of icons for use with iron-icon",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "icon"
+ ],
+ "main": "iron-icons.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-icons"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-icons",
+ "dependencies": {
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-meta": "PolymerElements/iron-meta#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#^1.0.2",
+ "iron-component-page": "polymerelements/iron-component-page#1.0.0",
+ "iron-meta": "polymerelements/iron-meta#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ },
+ "polymer-1.x_iron-meta-2.x": {
+ "dependencies": {
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#^1.0.2",
+ "iron-component-page": "polymerelements/iron-component-page#1.0.0",
+ "iron-meta": "polymerelements/iron-meta#^2.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7",
+ "iron-meta": "^2.0.0"
+ }
+ }
+ },
+ "ignore": [
+ "util",
+ "update-icons.sh"
+ ],
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "bc3d1a82b24449732cf3cb3d663748a9f5636d2d"
+ },
+ "_source": "https://github.com/PolymerElements/iron-icons.git",
+ "_target": "^2.0.0",
+ "_originalSource": "iron-icons"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..95ef5d3703c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-icons/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.travis.yml
new file mode 100644
index 00000000000..b9a33174574
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ L3XJmmXJlYZYyvlKoZ25HpEC1FcTtWejNk2xRQKAH4cg8+oNMjE80OxkaIVHtZlatpLdIIYk79p+9OtGiskXZ1QsAjHtrxWE5YRSSz3nL/XyZqUu7tjiNtrih6PiEvocmwMCCdRGMSXwVl1YoUUYM0DWxHdykd0EMXYYkYe+yQo=
+ - secure: >-
+ PSLkHUoiTj6UxN+7KtZG2miLmeuDuGN4c+ksviIP4/4lh5x7xic7CIeMmf2HLd18MR8CwCHjfMrIrxYF/IusILn6fdQ8rdBw+XhEF7xP+8UqqgF6YjGHs/xPDYYiGtisEc2OOg+vzqXIMhmKTg2vVlhuNq16eggGsRDcsEhEong=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/README.md
new file mode 100644
index 00000000000..6377bcf66e3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/README.md
@@ -0,0 +1,33 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-icons.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-icons)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-icons)_
+
+
+## &lt;iron-icons&gt;
+
+`iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set.
+
+The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project.
+
+Example loading icon set:
+
+```html
+<link rel="import" href="../iron-icons/maps-icons.html">
+```
+
+To use an icon from one of these sets, first prefix your `iron-icon` with the icon set name, followed by a colon, ":", and then the icon id.
+
+Example using the directions-bus icon from the maps icon set:
+
+```html
+<iron-icon icon="maps:directions-bus"></iron-icon>
+```
+
+To load a subset of icons from one of the default `iron-icons` sets, you can
+use the [poly-icon](https://poly-icon.appspot.com/) tool. It allows you
+to select individual icons, and creates an iconset from them that you can
+use directly in your elements.
+
+See [iron-icon](https://github.com/PolymerElements/iron-icon) for more information about working with icons.
+
+See [iron-iconset](https://github.com/PolymerElements/iron-iconset) and [iron-iconset-svg](https://github.com/PolymerElements/iron-iconset-svg) for more information about how to create a custom iconset.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.d.ts
new file mode 100644
index 00000000000..5d185519e93
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * av-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.html
new file mode 100644
index 00000000000..764d6229576
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/av-icons.html
@@ -0,0 +1,96 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="av" size="24">
+<svg><defs>
+<g id="add-to-queue"><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12zm-5-7v2h-3v3h-2v-3H8v-2h3V7h2v3h3z"/></g>
+<g id="airplay"><path d="M6 22h12l-6-6zM21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4v-2H3V5h18v12h-4v2h4c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></g>
+<g id="album"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 14.5c-2.49 0-4.5-2.01-4.5-4.5S9.51 7.5 12 7.5s4.5 2.01 4.5 4.5-2.01 4.5-4.5 4.5zm0-5.5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"/></g>
+<g id="art-track"><path d="M22 13h-8v-2h8v2zm0-6h-8v2h8V7zm-8 10h8v-2h-8v2zm-2-8v6c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V9c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2zm-1.5 6l-2.25-3-1.75 2.26-1.25-1.51L3.5 15h7z"/></g>
+<g id="av-timer"><path d="M11 17c0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1-1 .45-1 1zm0-14v4h2V5.08c3.39.49 6 3.39 6 6.92 0 3.87-3.13 7-7 7s-7-3.13-7-7c0-1.68.59-3.22 1.58-4.42L12 13l1.41-1.41-6.8-6.8v.02C4.42 6.45 3 9.05 3 12c0 4.97 4.02 9 9 9 4.97 0 9-4.03 9-9s-4.03-9-9-9h-1zm7 9c0-.55-.45-1-1-1s-1 .45-1 1 .45 1 1 1 1-.45 1-1zM6 12c0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1-1 .45-1 1z"/></g>
+<g id="branding-watermark"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16h-9v-6h9v6z"/></g>
+<g id="call-to-action"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"/></g>
+<g id="closed-caption"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 7H9.5v-.5h-2v3h2V13H11v1c0 .55-.45 1-1 1H7c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H18v1c0 .55-.45 1-1 1h-3c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v1z"/></g>
+<g id="equalizer"><path d="M10 20h4V4h-4v16zm-6 0h4v-8H4v8zM16 9v11h4V9h-4z"/></g>
+<g id="explicit"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 6h-4v2h4v2h-4v2h4v2H9V7h6v2z"/></g>
+<g id="fast-forward"><path d="M4 18l8.5-6L4 6v12zm9-12v12l8.5-6L13 6z"/></g>
+<g id="fast-rewind"><path d="M11 18V6l-8.5 6 8.5 6zm.5-6l8.5 6V6l-8.5 6z"/></g>
+<g id="featured-play-list"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9 8H3V9h9v2zm0-4H3V5h9v2z"/></g>
+<g id="featured-video"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9 9H3V5h9v7z"/></g>
+<g id="fiber-dvr"><path d="M17.5 10.5h2v1h-2zm-13 0h2v3h-2zM21 3H3c-1.11 0-2 .89-2 2v14c0 1.1.89 2 2 2h18c1.11 0 2-.9 2-2V5c0-1.11-.89-2-2-2zM8 13.5c0 .85-.65 1.5-1.5 1.5H3V9h3.5c.85 0 1.5.65 1.5 1.5v3zm4.62 1.5h-1.5L9.37 9h1.5l1 3.43 1-3.43h1.5l-1.75 6zM21 11.5c0 .6-.4 1.15-.9 1.4L21 15h-1.5l-.85-2H17.5v2H16V9h3.5c.85 0 1.5.65 1.5 1.5v1z"/></g>
+<g id="fiber-manual-record"><circle cx="12" cy="12" r="8"/></g>
+<g id="fiber-new"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zM8.5 15H7.3l-2.55-3.5V15H3.5V9h1.25l2.5 3.5V9H8.5v6zm5-4.74H11v1.12h2.5v1.26H11v1.11h2.5V15h-4V9h4v1.26zm7 3.74c0 .55-.45 1-1 1h-4c-.55 0-1-.45-1-1V9h1.25v4.51h1.13V9.99h1.25v3.51h1.12V9h1.25v5z"/></g>
+<g id="fiber-pin"><path d="M5.5 10.5h2v1h-2zM20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zM9 11.5c0 .85-.65 1.5-1.5 1.5h-2v2H4V9h3.5c.85 0 1.5.65 1.5 1.5v1zm3.5 3.5H11V9h1.5v6zm7.5 0h-1.2l-2.55-3.5V15H15V9h1.25l2.5 3.5V9H20v6z"/></g>
+<g id="fiber-smart-record"><g><circle cx="9" cy="12" r="8"/><path d="M17 4.26v2.09c2.33.82 4 3.04 4 5.65s-1.67 4.83-4 5.65v2.09c3.45-.89 6-4.01 6-7.74s-2.55-6.85-6-7.74z"/></g></g>
+<g id="forward-10"><path d="M4 13c0 4.4 3.6 8 8 8s8-3.6 8-8h-2c0 3.3-2.7 6-6 6s-6-2.7-6-6 2.7-6 6-6v4l5-5-5-5v4c-4.4 0-8 3.6-8 8zm6.8 3H10v-3.3L9 13v-.7l1.8-.6h.1V16zm4.3-1.8c0 .3 0 .6-.1.8l-.3.6s-.3.3-.5.3-.4.1-.6.1-.4 0-.6-.1-.3-.2-.5-.3-.2-.3-.3-.6-.1-.5-.1-.8v-.7c0-.3 0-.6.1-.8l.3-.6s.3-.3.5-.3.4-.1.6-.1.4 0 .6.1.3.2.5.3.2.3.3.6.1.5.1.8v.7zm-.8-.8v-.5s-.1-.2-.1-.3-.1-.1-.2-.2-.2-.1-.3-.1-.2 0-.3.1l-.2.2s-.1.2-.1.3v2s.1.2.1.3.1.1.2.2.2.1.3.1.2 0 .3-.1l.2-.2s.1-.2.1-.3v-1.5z"/></g>
+<g id="forward-30"><path d="M9.6 13.5h.4c.2 0 .4-.1.5-.2s.2-.2.2-.4v-.2s-.1-.1-.1-.2-.1-.1-.2-.1h-.5s-.1.1-.2.1-.1.1-.1.2v.2h-1c0-.2 0-.3.1-.5s.2-.3.3-.4.3-.2.4-.2.4-.1.5-.1c.2 0 .4 0 .6.1s.3.1.5.2.2.2.3.4.1.3.1.5v.3s-.1.2-.1.3-.1.2-.2.2-.2.1-.3.2c.2.1.4.2.5.4s.2.4.2.6c0 .2 0 .4-.1.5s-.2.3-.3.4-.3.2-.5.2-.4.1-.6.1c-.2 0-.4 0-.5-.1s-.3-.1-.5-.2-.2-.2-.3-.4-.1-.4-.1-.6h.8v.2s.1.1.1.2.1.1.2.1h.5s.1-.1.2-.1.1-.1.1-.2v-.5s-.1-.1-.1-.2-.1-.1-.2-.1h-.6v-.7zm5.7.7c0 .3 0 .6-.1.8l-.3.6s-.3.3-.5.3-.4.1-.6.1-.4 0-.6-.1-.3-.2-.5-.3-.2-.3-.3-.6-.1-.5-.1-.8v-.7c0-.3 0-.6.1-.8l.3-.6s.3-.3.5-.3.4-.1.6-.1.4 0 .6.1.3.2.5.3.2.3.3.6.1.5.1.8v.7zm-.9-.8v-.5s-.1-.2-.1-.3-.1-.1-.2-.2-.2-.1-.3-.1-.2 0-.3.1l-.2.2s-.1.2-.1.3v2s.1.2.1.3.1.1.2.2.2.1.3.1.2 0 .3-.1l.2-.2s.1-.2.1-.3v-1.5zM4 13c0 4.4 3.6 8 8 8s8-3.6 8-8h-2c0 3.3-2.7 6-6 6s-6-2.7-6-6 2.7-6 6-6v4l5-5-5-5v4c-4.4 0-8 3.6-8 8z"/></g>
+<g id="forward-5"><path d="M4 13c0 4.4 3.6 8 8 8s8-3.6 8-8h-2c0 3.3-2.7 6-6 6s-6-2.7-6-6 2.7-6 6-6v4l5-5-5-5v4c-4.4 0-8 3.6-8 8zm6.7.9l.2-2.2h2.4v.7h-1.7l-.1.9s.1 0 .1-.1.1 0 .1-.1.1 0 .2 0h.2c.2 0 .4 0 .5.1s.3.2.4.3.2.3.3.5.1.4.1.6c0 .2 0 .4-.1.5s-.1.3-.3.5-.3.2-.5.3-.4.1-.6.1c-.2 0-.4 0-.5-.1s-.3-.1-.5-.2-.2-.2-.3-.4-.1-.3-.1-.5h.8c0 .2.1.3.2.4s.2.1.4.1c.1 0 .2 0 .3-.1l.2-.2s.1-.2.1-.3v-.6l-.1-.2-.2-.2s-.2-.1-.3-.1h-.2s-.1 0-.2.1-.1 0-.1.1-.1.1-.1.1h-.6z"/></g>
+<g id="games"><path d="M15 7.5V2H9v5.5l3 3 3-3zM7.5 9H2v6h5.5l3-3-3-3zM9 16.5V22h6v-5.5l-3-3-3 3zM16.5 9l-3 3 3 3H22V9h-5.5z"/></g>
+<g id="hd"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 12H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm2-6h4c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1h-4V9zm1.5 4.5h2v-3h-2v3z"/></g>
+<g id="hearing"><path d="M17 20c-.29 0-.56-.06-.76-.15-.71-.37-1.21-.88-1.71-2.38-.51-1.56-1.47-2.29-2.39-3-.79-.61-1.61-1.24-2.32-2.53C9.29 10.98 9 9.93 9 9c0-2.8 2.2-5 5-5s5 2.2 5 5h2c0-3.93-3.07-7-7-7S7 5.07 7 9c0 1.26.38 2.65 1.07 3.9.91 1.65 1.98 2.48 2.85 3.15.81.62 1.39 1.07 1.71 2.05.6 1.82 1.37 2.84 2.73 3.55.51.23 1.07.35 1.64.35 2.21 0 4-1.79 4-4h-2c0 1.1-.9 2-2 2zM7.64 2.64L6.22 1.22C4.23 3.21 3 5.96 3 9s1.23 5.79 3.22 7.78l1.41-1.41C6.01 13.74 5 11.49 5 9s1.01-4.74 2.64-6.36zM11.5 9c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5-1.12-2.5-2.5-2.5-2.5 1.12-2.5 2.5z"/></g>
+<g id="high-quality"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 11H9.5v-2h-2v2H6V9h1.5v2.5h2V9H11v6zm7-1c0 .55-.45 1-1 1h-.75v1.5h-1.5V15H14c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1h3c.55 0 1 .45 1 1v4zm-3.5-.5h2v-3h-2v3z"/></g>
+<g id="library-add"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9h-4v4h-2v-4H9V9h4V5h2v4h4v2z"/></g>
+<g id="library-books"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9H9V9h10v2zm-4 4H9v-2h6v2zm4-8H9V5h10v2z"/></g>
+<g id="library-music"><path d="M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 5h-3v5.5c0 1.38-1.12 2.5-2.5 2.5S10 13.88 10 12.5s1.12-2.5 2.5-2.5c.57 0 1.08.19 1.5.51V5h4v2zM4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6z"/></g>
+<g id="loop"><path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/></g>
+<g id="mic"><path d="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"/></g>
+<g id="mic-none"><path d="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm-1.2-9.1c0-.66.54-1.2 1.2-1.2.66 0 1.2.54 1.2 1.2l-.01 6.2c0 .66-.53 1.2-1.19 1.2-.66 0-1.2-.54-1.2-1.2V4.9zm6.5 6.1c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"/></g>
+<g id="mic-off"><path d="M19 11h-1.7c0 .74-.16 1.43-.43 2.05l1.23 1.23c.56-.98.9-2.09.9-3.28zm-4.02.17c0-.06.02-.11.02-.17V5c0-1.66-1.34-3-3-3S9 3.34 9 5v.18l5.98 5.99zM4.27 3L3 4.27l6.01 6.01V11c0 1.66 1.33 3 2.99 3 .22 0 .44-.03.65-.08l1.66 1.66c-.71.33-1.5.52-2.31.52-2.76 0-5.3-2.1-5.3-5.1H5c0 3.41 2.72 6.23 6 6.72V21h2v-3.28c.91-.13 1.77-.45 2.54-.9L19.73 21 21 19.73 4.27 3z"/></g>
+<g id="movie"><path d="M18 4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4z"/></g>
+<g id="music-video"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14zM8 15c0-1.66 1.34-3 3-3 .35 0 .69.07 1 .18V6h5v2h-3v7.03c-.02 1.64-1.35 2.97-3 2.97-1.66 0-3-1.34-3-3z"/></g>
+<g id="new-releases"><path d="M23 12l-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68L23 12zm-10 5h-2v-2h2v2zm0-4h-2V7h2v6z"/></g>
+<g id="not-interested"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20zm6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9z"/></g>
+<g id="note"><path d="M22 10l-6-6H4c-1.1 0-2 .9-2 2v12.01c0 1.1.9 1.99 2 1.99l16-.01c1.1 0 2-.89 2-1.99v-8zm-7-4.5l5.5 5.5H15V5.5z"/></g>
+<g id="pause"><path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/></g>
+<g id="pause-circle-filled"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z"/></g>
+<g id="pause-circle-outline"><path d="M9 16h2V8H9v8zm3-14C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm1-4h2V8h-2v8z"/></g>
+<g id="play-arrow"><path d="M8 5v14l11-7z"/></g>
+<g id="play-circle-filled"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z"/></g>
+<g id="play-circle-outline"><path d="M10 16.5l6-4.5-6-4.5v9zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="playlist-add"><path d="M14 10H2v2h12v-2zm0-4H2v2h12V6zm4 8v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zM2 16h8v-2H2v2z"/></g>
+<g id="playlist-add-check"><path d="M14 10H2v2h12v-2zm0-4H2v2h12V6zM2 16h8v-2H2v2zm19.5-4.5L23 13l-6.99 7-4.51-4.5L13 14l3.01 3 5.49-5.5z"/></g>
+<g id="playlist-play"><path d="M19 9H2v2h17V9zm0-4H2v2h17V5zM2 15h13v-2H2v2zm15-2v6l5-3-5-3z"/></g>
+<g id="queue"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9h-4v4h-2v-4H9V9h4V5h2v4h4v2z"/></g>
+<g id="queue-music"><path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z"/></g>
+<g id="queue-play-next"><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h2v-2H3V5h18v8h2V5c0-1.11-.9-2-2-2zm-8 7V7h-2v3H8v2h3v3h2v-3h3v-2h-3zm11 8l-4.5 4.5L18 21l3-3-3-3 1.5-1.5L24 18z"/></g>
+<g id="radio"><path d="M3.24 6.15C2.51 6.43 2 7.17 2 8v12c0 1.1.89 2 2 2h16c1.11 0 2-.9 2-2V8c0-1.11-.89-2-2-2H8.3l8.26-3.34L15.88 1 3.24 6.15zM7 20c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm13-8h-2v-2h-2v2H4V8h16v4z"/></g>
+<g id="recent-actors"><path d="M21 5v14h2V5h-2zm-4 14h2V5h-2v14zM14 5H2c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM8 7.75c1.24 0 2.25 1.01 2.25 2.25S9.24 12.25 8 12.25 5.75 11.24 5.75 10 6.76 7.75 8 7.75zM12.5 17h-9v-.75c0-1.5 3-2.25 4.5-2.25s4.5.75 4.5 2.25V17z"/></g>
+<g id="remove-from-queue"><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12zm-5-7v2H8v-2h8z"/></g>
+<g id="repeat"><path d="M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4z"/></g>
+<g id="repeat-one"><path d="M7 7h10v3l4-4-4-4v3H5v6h2V7zm10 10H7v-3l-4 4 4 4v-3h12v-6h-2v4zm-4-2V9h-1l-2 1v1h1.5v4H13z"/></g>
+<g id="replay"><path d="M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z"/></g>
+<g id="replay-10"><path d="M12 5V1L7 6l5 5V7c3.3 0 6 2.7 6 6s-2.7 6-6 6-6-2.7-6-6H4c0 4.4 3.6 8 8 8s8-3.6 8-8-3.6-8-8-8zm-1.1 11H10v-3.3L9 13v-.7l1.8-.6h.1V16zm4.3-1.8c0 .3 0 .6-.1.8l-.3.6s-.3.3-.5.3-.4.1-.6.1-.4 0-.6-.1-.3-.2-.5-.3-.2-.3-.3-.6-.1-.5-.1-.8v-.7c0-.3 0-.6.1-.8l.3-.6s.3-.3.5-.3.4-.1.6-.1.4 0 .6.1c.2.1.3.2.5.3s.2.3.3.6.1.5.1.8v.7zm-.9-.8v-.5s-.1-.2-.1-.3-.1-.1-.2-.2-.2-.1-.3-.1-.2 0-.3.1l-.2.2s-.1.2-.1.3v2s.1.2.1.3.1.1.2.2.2.1.3.1.2 0 .3-.1l.2-.2s.1-.2.1-.3v-1.5z"/></g>
+<g id="replay-30"><path d="M12 5V1L7 6l5 5V7c3.3 0 6 2.7 6 6s-2.7 6-6 6-6-2.7-6-6H4c0 4.4 3.6 8 8 8s8-3.6 8-8-3.6-8-8-8zm-2.4 8.5h.4c.2 0 .4-.1.5-.2s.2-.2.2-.4v-.2s-.1-.1-.1-.2-.1-.1-.2-.1h-.5s-.1.1-.2.1-.1.1-.1.2v.2h-1c0-.2 0-.3.1-.5s.2-.3.3-.4.3-.2.4-.2.4-.1.5-.1c.2 0 .4 0 .6.1s.3.1.5.2.2.2.3.4.1.3.1.5v.3s-.1.2-.1.3-.1.2-.2.2-.2.1-.3.2c.2.1.4.2.5.4s.2.4.2.6c0 .2 0 .4-.1.5s-.2.3-.3.4-.3.2-.5.2-.4.1-.6.1c-.2 0-.4 0-.5-.1s-.3-.1-.5-.2-.2-.2-.3-.4-.1-.4-.1-.6h.8v.2s.1.1.1.2.1.1.2.1h.5s.1-.1.2-.1.1-.1.1-.2v-.5s-.1-.1-.1-.2-.1-.1-.2-.1h-.6v-.7zm5.7.7c0 .3 0 .6-.1.8l-.3.6s-.3.3-.5.3-.4.1-.6.1-.4 0-.6-.1-.3-.2-.5-.3-.2-.3-.3-.6-.1-.5-.1-.8v-.7c0-.3 0-.6.1-.8l.3-.6s.3-.3.5-.3.4-.1.6-.1.4 0 .6.1.3.2.5.3.2.3.3.6.1.5.1.8v.7zm-.8-.8v-.5c0-.1-.1-.2-.1-.3s-.1-.1-.2-.2-.2-.1-.3-.1-.2 0-.3.1l-.2.2s-.1.2-.1.3v2s.1.2.1.3.1.1.2.2.2.1.3.1.2 0 .3-.1l.2-.2s.1-.2.1-.3v-1.5z"/></g>
+<g id="replay-5"><path d="M12 5V1L7 6l5 5V7c3.3 0 6 2.7 6 6s-2.7 6-6 6-6-2.7-6-6H4c0 4.4 3.6 8 8 8s8-3.6 8-8-3.6-8-8-8zm-1.3 8.9l.2-2.2h2.4v.7h-1.7l-.1.9s.1 0 .1-.1.1 0 .1-.1.1 0 .2 0h.2c.2 0 .4 0 .5.1s.3.2.4.3.2.3.3.5.1.4.1.6c0 .2 0 .4-.1.5s-.1.3-.3.5-.3.2-.4.3-.4.1-.6.1c-.2 0-.4 0-.5-.1s-.3-.1-.5-.2-.2-.2-.3-.4-.1-.3-.1-.5h.8c0 .2.1.3.2.4s.2.1.4.1c.1 0 .2 0 .3-.1l.2-.2s.1-.2.1-.3v-.6l-.1-.2-.2-.2s-.2-.1-.3-.1h-.2s-.1 0-.2.1-.1 0-.1.1-.1.1-.1.1h-.7z"/></g>
+<g id="shuffle"><path d="M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z"/></g>
+<g id="skip-next"><path d="M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z"/></g>
+<g id="skip-previous"><path d="M6 6h2v12H6zm3.5 6l8.5 6V6z"/></g>
+<g id="slow-motion-video"><path d="M13.05 9.79L10 7.5v9l3.05-2.29L16 12zm0 0L10 7.5v9l3.05-2.29L16 12zm0 0L10 7.5v9l3.05-2.29L16 12zM11 4.07V2.05c-2.01.2-3.84 1-5.32 2.21L7.1 5.69c1.11-.86 2.44-1.44 3.9-1.62zM5.69 7.1L4.26 5.68C3.05 7.16 2.25 8.99 2.05 11h2.02c.18-1.46.76-2.79 1.62-3.9zM4.07 13H2.05c.2 2.01 1 3.84 2.21 5.32l1.43-1.43c-.86-1.1-1.44-2.43-1.62-3.89zm1.61 6.74C7.16 20.95 9 21.75 11 21.95v-2.02c-1.46-.18-2.79-.76-3.9-1.62l-1.42 1.43zM22 12c0 5.16-3.92 9.42-8.95 9.95v-2.02C16.97 19.41 20 16.05 20 12s-3.03-7.41-6.95-7.93V2.05C18.08 2.58 22 6.84 22 12z"/></g>
+<g id="snooze"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm-3-9h3.63L9 15.2V17h6v-2h-3.63L15 10.8V9H9v2z"/></g>
+<g id="sort-by-alpha"><path d="M14.94 4.66h-4.72l2.36-2.36zm-4.69 14.71h4.66l-2.33 2.33zM6.1 6.27L1.6 17.73h1.84l.92-2.45h5.11l.92 2.45h1.84L7.74 6.27H6.1zm-1.13 7.37l1.94-5.18 1.94 5.18H4.97zm10.76 2.5h6.12v1.59h-8.53v-1.29l5.92-8.56h-5.88v-1.6h8.3v1.26l-5.93 8.6z"/></g>
+<g id="stop"><path d="M6 6h12v12H6z"/></g>
+<g id="subscriptions"><path d="M20 8H4V6h16v2zm-2-6H6v2h12V2zm4 10v8c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2v-8c0-1.1.9-2 2-2h16c1.1 0 2 .9 2 2zm-6 4l-6-3.27v6.53L16 16z"/></g>
+<g id="subtitles"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z"/></g>
+<g id="surround-sound"><path d="M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM7.76 16.24l-1.41 1.41C4.78 16.1 4 14.05 4 12c0-2.05.78-4.1 2.34-5.66l1.41 1.41C6.59 8.93 6 10.46 6 12s.59 3.07 1.76 4.24zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4zm5.66 1.66l-1.41-1.41C17.41 15.07 18 13.54 18 12s-.59-3.07-1.76-4.24l1.41-1.41C19.22 7.9 20 9.95 20 12c0 2.05-.78 4.1-2.34 5.66zM12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="video-call"><path d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4zM14 13h-3v3H9v-3H6v-2h3V8h2v3h3v2z"/></g>
+<g id="video-label"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 13H3V5h18v11z"/></g>
+<g id="video-library"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-8 12.5v-9l6 4.5-6 4.5z"/></g>
+<g id="videocam"><path d="M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"/></g>
+<g id="videocam-off"><path d="M21 6.5l-4 4V7c0-.55-.45-1-1-1H9.82L21 17.18V6.5zM3.27 2L2 3.27 4.73 6H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.21 0 .39-.08.54-.18L19.73 21 21 19.73 3.27 2z"/></g>
+<g id="volume-down"><path d="M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"/></g>
+<g id="volume-mute"><path d="M7 9v6h4l5 5V4l-5 5H7z"/></g>
+<g id="volume-off"><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"/></g>
+<g id="volume-up"><path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/></g>
+<g id="web"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z"/></g>
+<g id="web-asset"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm0 14H5V8h14v10z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/bower.json
new file mode 100644
index 00000000000..0d71899fe3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/bower.json
@@ -0,0 +1,77 @@
+{
+ "name": "iron-icons",
+ "version": "2.1.1",
+ "description": "A set of icons for use with iron-icon",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "icon"
+ ],
+ "main": "iron-icons.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-icons"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-icons",
+ "dependencies": {
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-meta": "PolymerElements/iron-meta#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#^1.0.2",
+ "iron-component-page": "polymerelements/iron-component-page#1.0.0",
+ "iron-meta": "polymerelements/iron-meta#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ },
+ "polymer-1.x_iron-meta-2.x": {
+ "dependencies": {
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#^1.0.2",
+ "iron-component-page": "polymerelements/iron-component-page#1.0.0",
+ "iron-meta": "polymerelements/iron-meta#^2.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7",
+ "iron-meta": "^2.0.0"
+ }
+ }
+ },
+ "ignore": [
+ "util",
+ "update-icons.sh"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.d.ts
new file mode 100644
index 00000000000..f8a5292434c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * communication-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.html
new file mode 100644
index 00000000000..a9e1839a532
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/communication-icons.html
@@ -0,0 +1,66 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="communication" size="24">
+<svg><defs>
+<g id="business"><path d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z"/></g>
+<g id="call"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></g>
+<g id="call-end"><path d="M12 9c-1.6 0-3.15.25-4.6.72v3.1c0 .39-.23.74-.56.9-.98.49-1.87 1.12-2.66 1.85-.18.18-.43.28-.7.28-.28 0-.53-.11-.71-.29L.29 13.08c-.18-.17-.29-.42-.29-.7 0-.28.11-.53.29-.71C3.34 8.78 7.46 7 12 7s8.66 1.78 11.71 4.67c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2.48 2.48c-.18.18-.43.29-.71.29-.27 0-.52-.11-.7-.28-.79-.74-1.69-1.36-2.67-1.85-.33-.16-.56-.5-.56-.9v-3.1C15.15 9.25 13.6 9 12 9z"/></g>
+<g id="call-made"><path d="M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5z"/></g>
+<g id="call-merge"><path d="M17 20.41L18.41 19 15 15.59 13.59 17 17 20.41zM7.5 8H11v5.59L5.59 19 7 20.41l6-6V8h3.5L12 3.5 7.5 8z"/></g>
+<g id="call-missed"><path d="M19.59 7L12 14.59 6.41 9H11V7H3v8h2v-4.59l7 7 9-9z"/></g>
+<g id="call-missed-outgoing"><path d="M3 8.41l9 9 7-7V15h2V7h-8v2h4.59L12 14.59 4.41 7 3 8.41z"/></g>
+<g id="call-received"><path d="M20 5.41L18.59 4 7 15.59V9H5v10h10v-2H8.41z"/></g>
+<g id="call-split"><path d="M14 4l2.29 2.29-2.88 2.88 1.42 1.42 2.88-2.88L20 10V4zm-4 0H4v6l2.29-2.29 4.71 4.7V20h2v-8.41l-5.29-5.3z"/></g>
+<g id="chat"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 9h12v2H6V9zm8 5H6v-2h8v2zm4-6H6V6h12v2z"/></g>
+<g id="chat-bubble"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z"/></g>
+<g id="chat-bubble-outline"><path d="M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z"/></g>
+<g id="clear-all"><path d="M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z"/></g>
+<g id="comment"><path d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18zM18 14H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/></g>
+<g id="contact-mail"><path d="M21 8V7l-3 2-3-2v1l3 2 3-2zm1-5H2C.9 3 0 3.9 0 5v14c0 1.1.9 2 2 2h20c1.1 0 1.99-.9 1.99-2L24 5c0-1.1-.9-2-2-2zM8 6c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H2v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1zm8-6h-8V6h8v6z"/></g>
+<g id="contact-phone"><path d="M22 3H2C.9 3 0 3.9 0 5v14c0 1.1.9 2 2 2h20c1.1 0 1.99-.9 1.99-2L24 5c0-1.1-.9-2-2-2zM8 6c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H2v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1zm3.85-4h1.64L21 16l-1.99 1.99c-1.31-.98-2.28-2.38-2.73-3.99-.18-.64-.28-1.31-.28-2s.1-1.36.28-2c.45-1.62 1.42-3.01 2.73-3.99L21 8l-1.51 2h-1.64c-.22.63-.35 1.3-.35 2s.13 1.37.35 2z"/></g>
+<g id="contacts"><path d="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25 2.25S9.75 10.24 9.75 9 10.76 6.75 12 6.75zM17 17H7v-1.5c0-1.67 3.33-2.5 5-2.5s5 .83 5 2.5V17z"/></g>
+<g id="dialer-sip"><path d="M17 3h-1v5h1V3zm-2 2h-2V4h2V3h-3v3h2v1h-2v1h3V5zm3-2v5h1V6h2V3h-3zm2 2h-1V4h1v1zm0 10.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.01.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.27-.26.35-.65.24-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z"/></g>
+<g id="dialpad"><path d="M12 19c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM6 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-6 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="email"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></g>
+<g id="forum"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"/></g>
+<g id="import-contacts"><path d="M21 5c-1.11-.35-2.33-.5-3.5-.5-1.95 0-4.05.4-5.5 1.5-1.45-1.1-3.55-1.5-5.5-1.5S2.45 4.9 1 6v14.65c0 .25.25.5.5.5.1 0 .15-.05.25-.05C3.1 20.45 5.05 20 6.5 20c1.95 0 4.05.4 5.5 1.5 1.35-.85 3.8-1.5 5.5-1.5 1.65 0 3.35.3 4.75 1.05.1.05.15.05.25.05.25 0 .5-.25.5-.5V6c-.6-.45-1.25-.75-2-1zm0 13.5c-1.1-.35-2.3-.5-3.5-.5-1.7 0-4.15.65-5.5 1.5V8c1.35-.85 3.8-1.5 5.5-1.5 1.2 0 2.4.15 3.5.5v11.5z"/></g>
+<g id="import-export"><path d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/></g>
+<g id="invert-colors-off"><path d="M20.65 20.87l-2.35-2.35-6.3-6.29-3.56-3.57-1.42-1.41L4.27 4.5 3 5.77l2.78 2.78c-2.55 3.14-2.36 7.76.56 10.69C7.9 20.8 9.95 21.58 12 21.58c1.79 0 3.57-.59 5.03-1.78l2.7 2.7L21 21.23l-.35-.36zM12 19.59c-1.6 0-3.11-.62-4.24-1.76C6.62 16.69 6 15.19 6 13.59c0-1.32.43-2.57 1.21-3.6L12 14.77v4.82zM12 5.1v4.58l7.25 7.26c1.37-2.96.84-6.57-1.6-9.01L12 2.27l-3.7 3.7 1.41 1.41L12 5.1z"/></g>
+<g id="live-help"><path d="M19 2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h4l3 3 3-3h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-6 16h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 11.9 13 12.5 13 14h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></g>
+<g id="location-off"><path d="M12 6.5c1.38 0 2.5 1.12 2.5 2.5 0 .74-.33 1.39-.83 1.85l3.63 3.63c.98-1.86 1.7-3.8 1.7-5.48 0-3.87-3.13-7-7-7-1.98 0-3.76.83-5.04 2.15l3.19 3.19c.46-.52 1.11-.84 1.85-.84zm4.37 9.6l-4.63-4.63-.11-.11L3.27 3 2 4.27l3.18 3.18C5.07 7.95 5 8.47 5 9c0 5.25 7 13 7 13s1.67-1.85 3.38-4.35L18.73 21 20 19.73l-3.63-3.63z"/></g>
+<g id="location-on"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></g>
+<g id="mail-outline"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V8l8 5 8-5v10zm-8-7L4 6h16l-8 5z"/></g>
+<g id="message"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/></g>
+<g id="no-sim"><path d="M18.99 5c0-1.1-.89-2-1.99-2h-7L7.66 5.34 19 16.68 18.99 5zM3.65 3.88L2.38 5.15 5 7.77V19c0 1.1.9 2 2 2h10.01c.35 0 .67-.1.96-.26l1.88 1.88 1.27-1.27L3.65 3.88z"/></g>
+<g id="phone"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></g>
+<g id="phonelink-erase"><path d="M13 8.2l-1-1-4 4-4-4-1 1 4 4-4 4 1 1 4-4 4 4 1-1-4-4 4-4zM19 1H9c-1.1 0-2 .9-2 2v3h2V4h10v16H9v-2H7v3c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2z"/></g>
+<g id="phonelink-lock"><path d="M19 1H9c-1.1 0-2 .9-2 2v3h2V4h10v16H9v-2H7v3c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm-8.2 10V9.5C10.8 8.1 9.4 7 8 7S5.2 8.1 5.2 9.5V11c-.6 0-1.2.6-1.2 1.2v3.5c0 .7.6 1.3 1.2 1.3h5.5c.7 0 1.3-.6 1.3-1.2v-3.5c0-.7-.6-1.3-1.2-1.3zm-1.3 0h-3V9.5c0-.8.7-1.3 1.5-1.3s1.5.5 1.5 1.3V11z"/></g>
+<g id="phonelink-ring"><path d="M20.1 7.7l-1 1c1.8 1.8 1.8 4.6 0 6.5l1 1c2.5-2.3 2.5-6.1 0-8.5zM18 9.8l-1 1c.5.7.5 1.6 0 2.3l1 1c1.2-1.2 1.2-3 0-4.3zM14 1H4c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 19H4V4h10v16z"/></g>
+<g id="phonelink-setup"><path d="M11.8 12.5v-1l1.1-.8c.1-.1.1-.2.1-.3l-1-1.7c-.1-.1-.2-.2-.3-.1l-1.3.4c-.3-.2-.6-.4-.9-.5l-.2-1.3c0-.1-.1-.2-.3-.2H7c-.1 0-.2.1-.3.2l-.2 1.3c-.3.1-.6.3-.9.5l-1.3-.5c-.1 0-.2 0-.3.1l-1 1.7c-.1.1 0 .2.1.3l1.1.8v1l-1.1.8c-.1.2-.1.3-.1.4l1 1.7c.1.1.2.2.3.1l1.4-.4c.3.2.6.4.9.5l.2 1.3c-.1.1.1.2.2.2h2c.1 0 .2-.1.3-.2l.2-1.3c.3-.1.6-.3.9-.5l1.3.5c.1 0 .2 0 .3-.1l1-1.7c.1-.1 0-.2-.1-.3l-1.1-.9zM8 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM19 1H9c-1.1 0-2 .9-2 2v3h2V4h10v16H9v-2H7v3c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2z"/></g>
+<g id="portable-wifi-off"><path d="M17.56 14.24c.28-.69.44-1.45.44-2.24 0-3.31-2.69-6-6-6-.79 0-1.55.16-2.24.44l1.62 1.62c.2-.03.41-.06.62-.06 2.21 0 4 1.79 4 4 0 .21-.02.42-.05.63l1.61 1.61zM12 4c4.42 0 8 3.58 8 8 0 1.35-.35 2.62-.95 3.74l1.47 1.47C21.46 15.69 22 13.91 22 12c0-5.52-4.48-10-10-10-1.91 0-3.69.55-5.21 1.47l1.46 1.46C9.37 4.34 10.65 4 12 4zM3.27 2.5L2 3.77l2.1 2.1C2.79 7.57 2 9.69 2 12c0 3.7 2.01 6.92 4.99 8.65l1-1.73C5.61 17.53 4 14.96 4 12c0-1.76.57-3.38 1.53-4.69l1.43 1.44C6.36 9.68 6 10.8 6 12c0 2.22 1.21 4.15 3 5.19l1-1.74c-1.19-.7-2-1.97-2-3.45 0-.65.17-1.25.44-1.79l1.58 1.58L10 12c0 1.1.9 2 2 2l.21-.02.01.01 7.51 7.51L21 20.23 4.27 3.5l-1-1z"/></g>
+<g id="present-to-all"><path d="M21 3H3c-1.11 0-2 .89-2 2v14c0 1.11.89 2 2 2h18c1.11 0 2-.89 2-2V5c0-1.11-.89-2-2-2zm0 16.02H3V4.98h18v14.04zM10 12H8l4-4 4 4h-2v4h-4v-4z"/></g>
+<g id="ring-volume"><path d="M23.71 16.67C20.66 13.78 16.54 12 12 12 7.46 12 3.34 13.78.29 16.67c-.18.18-.29.43-.29.71 0 .28.11.53.29.71l2.48 2.48c.18.18.43.29.71.29.27 0 .52-.11.7-.28.79-.74 1.69-1.36 2.66-1.85.33-.16.56-.5.56-.9v-3.1c1.45-.48 3-.73 4.6-.73s3.15.25 4.6.72v3.1c0 .39.23.74.56.9.98.49 1.87 1.12 2.66 1.85.18.18.43.28.7.28.28 0 .53-.11.71-.29l2.48-2.48c.18-.18.29-.43.29-.71 0-.27-.11-.52-.29-.7zM21.16 6.26l-1.41-1.41-3.56 3.55 1.41 1.41s3.45-3.52 3.56-3.55zM13 2h-2v5h2V2zM6.4 9.81L7.81 8.4 4.26 4.84 2.84 6.26c.11.03 3.56 3.55 3.56 3.55z"/></g>
+<g id="rss-feed"><circle cx="6.18" cy="17.82" r="2.18"/><path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z"/></g>
+<g id="screen-share"><path d="M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.11-.9-2-2-2H4c-1.11 0-2 .89-2 2v10c0 1.1.89 2 2 2H0v2h24v-2h-4zm-7-3.53v-2.19c-2.78 0-4.61.85-6 2.72.56-2.67 2.11-5.33 6-5.87V7l4 3.73-4 3.74z"/></g>
+<g id="speaker-phone"><path d="M7 7.07L8.43 8.5c.91-.91 2.18-1.48 3.57-1.48s2.66.57 3.57 1.48L17 7.07C15.72 5.79 13.95 5 12 5s-3.72.79-5 2.07zM12 1C8.98 1 6.24 2.23 4.25 4.21l1.41 1.41C7.28 4 9.53 3 12 3s4.72 1 6.34 2.62l1.41-1.41C17.76 2.23 15.02 1 12 1zm2.86 9.01L9.14 10C8.51 10 8 10.51 8 11.14v9.71c0 .63.51 1.14 1.14 1.14h5.71c.63 0 1.14-.51 1.14-1.14v-9.71c.01-.63-.5-1.13-1.13-1.13zM15 20H9v-8h6v8z"/></g>
+<g id="stay-current-landscape"><path d="M1.01 7L1 17c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2H3c-1.1 0-1.99.9-1.99 2zM19 7v10H5V7h14z"/></g>
+<g id="stay-current-portrait"><path d="M17 1.01L7 1c-1.1 0-1.99.9-1.99 2v18c0 1.1.89 2 1.99 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"/></g>
+<g id="stay-primary-landscape"><path d="M1.01 7L1 17c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2H3c-1.1 0-1.99.9-1.99 2zM19 7v10H5V7h14z"/></g>
+<g id="stay-primary-portrait"><path d="M17 1.01L7 1c-1.1 0-1.99.9-1.99 2v18c0 1.1.89 2 1.99 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"/></g>
+<g id="stop-screen-share"><path d="M21.22 18.02l2 2H24v-2h-2.78zm.77-2l.01-10c0-1.11-.9-2-2-2H7.22l5.23 5.23c.18-.04.36-.07.55-.1V7.02l4 3.73-1.58 1.47 5.54 5.54c.61-.33 1.03-.99 1.03-1.74zM2.39 1.73L1.11 3l1.54 1.54c-.4.36-.65.89-.65 1.48v10c0 1.1.89 2 2 2H0v2h18.13l2.71 2.71 1.27-1.27L2.39 1.73zM7 15.02c.31-1.48.92-2.95 2.07-4.06l1.59 1.59c-1.54.38-2.7 1.18-3.66 2.47z"/></g>
+<g id="swap-calls"><path d="M18 4l-4 4h3v7c0 1.1-.9 2-2 2s-2-.9-2-2V8c0-2.21-1.79-4-4-4S5 5.79 5 8v7H2l4 4 4-4H7V8c0-1.1.9-2 2-2s2 .9 2 2v7c0 2.21 1.79 4 4 4s4-1.79 4-4V8h3l-4-4z"/></g>
+<g id="textsms"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z"/></g>
+<g id="voicemail"><path d="M18.5 6C15.46 6 13 8.46 13 11.5c0 1.33.47 2.55 1.26 3.5H9.74c.79-.95 1.26-2.17 1.26-3.5C11 8.46 8.54 6 5.5 6S0 8.46 0 11.5 2.46 17 5.5 17h13c3.04 0 5.5-2.46 5.5-5.5S21.54 6 18.5 6zm-13 9C3.57 15 2 13.43 2 11.5S3.57 8 5.5 8 9 9.57 9 11.5 7.43 15 5.5 15zm13 0c-1.93 0-3.5-1.57-3.5-3.5S16.57 8 18.5 8 22 9.57 22 11.5 20.43 15 18.5 15z"/></g>
+<g id="vpn-key"><path d="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/demo/index.html
new file mode 100644
index 00000000000..be1a56f58bd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/demo/index.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <title>iron-icons demo</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../iron-meta/iron-meta.html">
+
+ <!-- load default iconset -->
+ <link rel="import" href="../iron-icons.html">
+
+ <!-- load the rest -->
+ <link rel="import" href="../av-icons.html">
+ <link rel="import" href="../communication-icons.html">
+ <link rel="import" href="../device-icons.html">
+ <link rel="import" href="../editor-icons.html">
+ <link rel="import" href="../hardware-icons.html">
+ <link rel="import" href="../image-icons.html">
+ <link rel="import" href="../maps-icons.html">
+ <link rel="import" href="../notification-icons.html">
+ <link rel="import" href="../social-icons.html">
+ <link rel="import" href="../places-icons.html">
+</head>
+<body>
+ <custom-style>
+ <style is="custom-style">
+ h2 {
+ text-transform: capitalize;
+ }
+
+ iron-icon {
+ transition: all 0.2s;
+ -webkit-transition: all 0.2s;
+ }
+
+ iron-icon:hover {
+ fill: var(--google-yellow-700);
+ }
+
+ .set {
+ display: block;
+ text-align: center;
+ margin: auto;
+ padding: 1em 0;
+ border-bottom: 1px solid silver;
+ }
+
+ .set:last-of-type {
+ border-bottom: none;
+ }
+
+ .set:nth-of-type(4n-3) {
+ color: var(--paper-grey-700);
+ }
+
+ .set:nth-of-type(4n-2) {
+ color: var(--paper-pink-500);
+ }
+
+ .set:nth-of-type(4n-1) {
+ color: var(--google-green-500);
+ }
+
+ .set:nth-of-type(4n) {
+ color: var(--google-blue-500);
+ }
+
+ .container {
+ display: inline-block;
+ width: 10em;
+ margin: 1em 0.5em;
+ text-align: center;
+ }
+
+ .container > div {
+ margin-top: 0.5em;
+ color: black;
+ font-size: 10px;
+ }
+ </style>
+ </custom-style>
+
+ <dom-bind id="scope">
+ <template is="dom-bind">
+ <template is="dom-repeat" id="iconsetRepeat">
+ <h2>{{item.name}}</h2>
+ <div class="set">
+ <template is="dom-repeat" items="{{getIconNames(item)}}">
+ <span class="container">
+ <iron-icon icon="{{item}}"></iron-icon>
+ <div>{{item}}</div>
+ </span>
+ </template>
+ </div>
+ </template>
+ </template>
+ </dom-bind>
+
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ scope.getIconNames = function(iconset) {
+ return iconset.getIconNames();
+ };
+ scope.parentNode.getIconNames = scope.getIconNames;
+ iconsetRepeat.items = new Polymer.IronMeta({type: 'iconset'}).list;
+ });
+ </script>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.d.ts
new file mode 100644
index 00000000000..4a676ad78a7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * device-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.html
new file mode 100644
index 00000000000..190f896252b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/device-icons.html
@@ -0,0 +1,95 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="device" size="24">
+<svg><defs>
+<g id="access-alarm"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="access-alarms"><path d="M22 5.7l-4.6-3.9-1.3 1.5 4.6 3.9L22 5.7zM7.9 3.4L6.6 1.9 2 5.7l1.3 1.5 4.6-3.8zM12.5 8H11v6l4.7 2.9.8-1.2-4-2.4V8zM12 4c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 16c-3.9 0-7-3.1-7-7s3.1-7 7-7 7 3.1 7 7-3.1 7-7 7z"/></g>
+<g id="access-time"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
+<g id="add-alarm"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm1-11h-2v3H8v2h3v3h2v-3h3v-2h-3V9z"/></g>
+<g id="airplanemode-active"><path d="M10.18 9"/><path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z"/></g>
+<g id="airplanemode-inactive"><path d="M13 9V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5v3.68l7.83 7.83L21 16v-2l-8-5zM3 5.27l4.99 4.99L2 14v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-3.73L18.73 21 20 19.73 4.27 4 3 5.27z"/></g>
+<g id="battery-20"><path d="M7 17v3.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V17H7z"/><path fill-opacity=".3" d="M17 5.33C17 4.6 16.4 4 15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V17h10V5.33z"/></g>
+<g id="battery-30"><path fill-opacity=".3" d="M17 5.33C17 4.6 16.4 4 15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V15h10V5.33z"/><path d="M7 15v5.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V15H7z"/></g>
+<g id="battery-50"><path fill-opacity=".3" d="M17 5.33C17 4.6 16.4 4 15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V13h10V5.33z"/><path d="M7 13v7.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V13H7z"/></g>
+<g id="battery-60"><path fill-opacity=".3" d="M17 5.33C17 4.6 16.4 4 15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V11h10V5.33z"/><path d="M7 11v9.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V11H7z"/></g>
+<g id="battery-80"><path fill-opacity=".3" d="M17 5.33C17 4.6 16.4 4 15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V9h10V5.33z"/><path d="M7 9v11.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V9H7z"/></g>
+<g id="battery-90"><path fill-opacity=".3" d="M17 5.33C17 4.6 16.4 4 15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V8h10V5.33z"/><path d="M7 8v12.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V8H7z"/></g>
+<g id="battery-alert"><path d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4zM13 18h-2v-2h2v2zm0-4h-2V9h2v5z"/></g>
+<g id="battery-charging-20"><path d="M11 20v-3H7v3.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V17h-4.4L11 20z"/><path fill-opacity=".3" d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V17h4v-2.5H9L13 7v5.5h2L12.6 17H17V5.33C17 4.6 16.4 4 15.67 4z"/></g>
+<g id="battery-charging-30"><path fill-opacity=".3" d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v9.17h2L13 7v5.5h2l-1.07 2H17V5.33C17 4.6 16.4 4 15.67 4z"/><path d="M11 20v-5.5H7v6.17C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V14.5h-3.07L11 20z"/></g>
+<g id="battery-charging-50"><path d="M14.47 13.5L11 20v-5.5H9l.53-1H7v7.17C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V13.5h-2.53z"/><path fill-opacity=".3" d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v8.17h2.53L13 7v5.5h2l-.53 1H17V5.33C17 4.6 16.4 4 15.67 4z"/></g>
+<g id="battery-charging-60"><path fill-opacity=".3" d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V11h3.87L13 7v4h4V5.33C17 4.6 16.4 4 15.67 4z"/><path d="M13 12.5h2L11 20v-5.5H9l1.87-3.5H7v9.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V11h-4v1.5z"/></g>
+<g id="battery-charging-80"><path fill-opacity=".3" d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V9h4.93L13 7v2h4V5.33C17 4.6 16.4 4 15.67 4z"/><path d="M13 12.5h2L11 20v-5.5H9L11.93 9H7v11.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V9h-4v3.5z"/></g>
+<g id="battery-charging-90"><path fill-opacity=".3" d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33V8h5.47L13 7v1h4V5.33C17 4.6 16.4 4 15.67 4z"/><path d="M13 12.5h2L11 20v-5.5H9L12.47 8H7v12.67C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V8h-4v4.5z"/></g>
+<g id="battery-charging-full"><path d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4zM11 20v-5.5H9L13 7v5.5h2L11 20z"/></g>
+<g id="battery-full"><path d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4z"/></g>
+<g id="battery-std"><path d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4z"/></g>
+<g id="battery-unknown"><path d="M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4zm-2.72 13.95h-1.9v-1.9h1.9v1.9zm1.35-5.26s-.38.42-.67.71c-.48.48-.83 1.15-.83 1.6h-1.6c0-.83.46-1.52.93-2l.93-.94c.27-.27.44-.65.44-1.06 0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5H9c0-1.66 1.34-3 3-3s3 1.34 3 3c0 .66-.27 1.26-.7 1.69z"/></g>
+<g id="bluetooth"><path d="M17.71 7.71L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88z"/></g>
+<g id="bluetooth-connected"><path d="M7 12l-2-2-2 2 2 2 2-2zm10.71-4.29L12 2h-1v7.59L6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 5.83l1.88 1.88L13 9.59V5.83zm1.88 10.46L13 18.17v-3.76l1.88 1.88zM19 10l-2 2 2 2 2-2-2-2z"/></g>
+<g id="bluetooth-disabled"><path d="M13 5.83l1.88 1.88-1.6 1.6 1.41 1.41 3.02-3.02L12 2h-1v5.03l2 2v-3.2zM5.41 4L4 5.41 10.59 12 5 17.59 6.41 19 11 14.41V22h1l4.29-4.29 2.3 2.29L20 18.59 5.41 4zM13 18.17v-3.76l1.88 1.88L13 18.17z"/></g>
+<g id="bluetooth-searching"><path d="M14.24 12.01l2.32 2.32c.28-.72.44-1.51.44-2.33 0-.82-.16-1.59-.43-2.31l-2.33 2.32zm5.29-5.3l-1.26 1.26c.63 1.21.98 2.57.98 4.02s-.36 2.82-.98 4.02l1.2 1.2c.97-1.54 1.54-3.36 1.54-5.31-.01-1.89-.55-3.67-1.48-5.19zm-3.82 1L10 2H9v7.59L4.41 5 3 6.41 8.59 12 3 17.59 4.41 19 9 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM11 5.83l1.88 1.88L11 9.59V5.83zm1.88 10.46L11 18.17v-3.76l1.88 1.88z"/></g>
+<g id="brightness-auto"><path d="M10.85 12.65h2.3L12 9l-1.15 3.65zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM14.3 16l-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9z"/></g>
+<g id="brightness-high"><path d="M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm0-10c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z"/></g>
+<g id="brightness-low"><path d="M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"/></g>
+<g id="brightness-medium"><path d="M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69zM12 18V6c3.31 0 6 2.69 6 6s-2.69 6-6 6z"/></g>
+<g id="data-usage"><path d="M13 2.05v3.03c3.39.49 6 3.39 6 6.92 0 .9-.18 1.75-.48 2.54l2.6 1.53c.56-1.24.88-2.62.88-4.07 0-5.18-3.95-9.45-9-9.95zM12 19c-3.87 0-7-3.13-7-7 0-3.53 2.61-6.43 6-6.92V2.05c-5.06.5-9 4.76-9 9.95 0 5.52 4.47 10 9.99 10 3.31 0 6.24-1.61 8.06-4.09l-2.6-1.53C16.17 17.98 14.21 19 12 19z"/></g>
+<g id="developer-mode"><path d="M7 5h10v2h2V3c0-1.1-.9-1.99-2-1.99L7 1c-1.1 0-2 .9-2 2v4h2V5zm8.41 11.59L20 12l-4.59-4.59L14 8.83 17.17 12 14 15.17l1.41 1.42zM10 15.17L6.83 12 10 8.83 8.59 7.41 4 12l4.59 4.59L10 15.17zM17 19H7v-2H5v4c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2v-4h-2v2z"/></g>
+<g id="devices"><path d="M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4V6zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-1 9h-4v-7h4v7z"/></g>
+<g id="dvr"><path d="M21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.1-.9-2-2-2zm0 14H3V5h18v12zm-2-9H8v2h11V8zm0 4H8v2h11v-2zM7 8H5v2h2V8zm0 4H5v2h2v-2z"/></g>
+<g id="gps-fixed"><path d="M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm8.94 3c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="gps-not-fixed"><path d="M20.94 11c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="gps-off"><path d="M20.94 11c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06c-1.13.12-2.19.46-3.16.97l1.5 1.5C10.16 5.19 11.06 5 12 5c3.87 0 7 3.13 7 7 0 .94-.19 1.84-.52 2.65l1.5 1.5c.5-.96.84-2.02.97-3.15H23v-2h-2.06zM3 4.27l2.04 2.04C3.97 7.62 3.25 9.23 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c1.77-.2 3.38-.91 4.69-1.98L19.73 21 21 19.73 4.27 3 3 4.27zm13.27 13.27C15.09 18.45 13.61 19 12 19c-3.87 0-7-3.13-7-7 0-1.61.55-3.09 1.46-4.27l9.81 9.81z"/></g>
+<g id="graphic-eq"><path d="M7 18h2V6H7v12zm4 4h2V2h-2v20zm-8-8h2v-4H3v4zm12 4h2V6h-2v12zm4-8v4h2v-4h-2z"/></g>
+<g id="location-disabled"><path d="M20.94 11c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06c-1.13.12-2.19.46-3.16.97l1.5 1.5C10.16 5.19 11.06 5 12 5c3.87 0 7 3.13 7 7 0 .94-.19 1.84-.52 2.65l1.5 1.5c.5-.96.84-2.02.97-3.15H23v-2h-2.06zM3 4.27l2.04 2.04C3.97 7.62 3.25 9.23 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c1.77-.2 3.38-.91 4.69-1.98L19.73 21 21 19.73 4.27 3 3 4.27zm13.27 13.27C15.09 18.45 13.61 19 12 19c-3.87 0-7-3.13-7-7 0-1.61.55-3.09 1.46-4.27l9.81 9.81z"/></g>
+<g id="location-searching"><path d="M20.94 11c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="network-cell"><path fill-opacity=".3" d="M2 22h20V2z"/><path d="M17 7L2 22h15z"/></g>
+<g id="network-wifi"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"/><path d="M3.53 10.95l8.46 10.54.01.01.01-.01 8.46-10.54C20.04 10.62 16.81 8 12 8c-4.81 0-8.04 2.62-8.47 2.95z"/></g>
+<g id="nfc"><path d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 18H4V4h16v16zM18 6h-5c-1.1 0-2 .9-2 2v2.28c-.6.35-1 .98-1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V8h3v8H8V8h2V6H6v12h12V6z"/></g>
+<g id="screen-lock-landscape"><path d="M21 5H3c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-2 12H5V7h14v10zm-9-1h4c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1v-1c0-1.11-.9-2-2-2-1.11 0-2 .9-2 2v1c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1zm.8-6c0-.66.54-1.2 1.2-1.2.66 0 1.2.54 1.2 1.2v1h-2.4v-1z"/></g>
+<g id="screen-lock-portrait"><path d="M10 16h4c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1v-1c0-1.11-.9-2-2-2-1.11 0-2 .9-2 2v1c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1zm.8-6c0-.66.54-1.2 1.2-1.2.66 0 1.2.54 1.2 1.2v1h-2.4v-1zM17 1H7c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 18H7V5h10v14z"/></g>
+<g id="screen-lock-rotation"><path d="M23.25 12.77l-2.57-2.57-1.41 1.41 2.22 2.22-5.66 5.66L4.51 8.17l5.66-5.66 2.1 2.1 1.41-1.41L11.23.75c-.59-.59-1.54-.59-2.12 0L2.75 7.11c-.59.59-.59 1.54 0 2.12l12.02 12.02c.59.59 1.54.59 2.12 0l6.36-6.36c.59-.59.59-1.54 0-2.12zM8.47 20.48C5.2 18.94 2.86 15.76 2.5 12H1c.51 6.16 5.66 11 11.95 11l.66-.03-3.81-3.82-1.33 1.33zM16 9h5c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1v-.5C21 1.12 19.88 0 18.5 0S16 1.12 16 2.5V3c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1zm.8-6.5c0-.94.76-1.7 1.7-1.7s1.7.76 1.7 1.7V3h-3.4v-.5z"/></g>
+<g id="screen-rotation"><path d="M16.48 2.52c3.27 1.55 5.61 4.72 5.97 8.48h1.5C23.44 4.84 18.29 0 12 0l-.66.03 3.81 3.81 1.33-1.32zm-6.25-.77c-.59-.59-1.54-.59-2.12 0L1.75 8.11c-.59.59-.59 1.54 0 2.12l12.02 12.02c.59.59 1.54.59 2.12 0l6.36-6.36c.59-.59.59-1.54 0-2.12L10.23 1.75zm4.6 19.44L2.81 9.17l6.36-6.36 12.02 12.02-6.36 6.36zm-7.31.29C4.25 19.94 1.91 16.76 1.55 13H.05C.56 19.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32z"/></g>
+<g id="sd-storage"><path d="M18 2h-8L4.02 8 4 20c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-6 6h-2V4h2v4zm3 0h-2V4h2v4zm3 0h-2V4h2v4z"/></g>
+<g id="settings-system-daydream"><path d="M9 16h6.5c1.38 0 2.5-1.12 2.5-2.5S16.88 11 15.5 11h-.05c-.24-1.69-1.69-3-3.45-3-1.4 0-2.6.83-3.16 2.02h-.16C7.17 10.18 6 11.45 6 13c0 1.66 1.34 3 3 3zM21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"/></g>
+<g id="signal-cellular-0-bar"><path fill-opacity=".3" d="M2 22h20V2z"/></g>
+<g id="signal-cellular-1-bar"><path fill-opacity=".3" d="M2 22h20V2z"/><path d="M12 12L2 22h10z"/></g>
+<g id="signal-cellular-2-bar"><path fill-opacity=".3" d="M2 22h20V2z"/><path d="M14 10L2 22h12z"/></g>
+<g id="signal-cellular-3-bar"><path fill-opacity=".3" d="M2 22h20V2z"/><path d="M17 7L2 22h15z"/></g>
+<g id="signal-cellular-4-bar"><path d="M2 22h20V2z"/></g>
+<g id="signal-cellular-connected-no-internet-0-bar"><path fill-opacity=".3" d="M22 8V2L2 22h16V8z"/><path d="M20 22h2v-2h-2v2zm0-12v8h2v-8h-2z"/></g>
+<g id="signal-cellular-connected-no-internet-1-bar"><path fill-opacity=".3" d="M22 8V2L2 22h16V8z"/><path d="M20 10v8h2v-8h-2zm-8 12V12L2 22h10zm8 0h2v-2h-2v2z"/></g>
+<g id="signal-cellular-connected-no-internet-2-bar"><path fill-opacity=".3" d="M22 8V2L2 22h16V8z"/><path d="M14 22V10L2 22h12zm6-12v8h2v-8h-2zm0 12h2v-2h-2v2z"/></g>
+<g id="signal-cellular-connected-no-internet-3-bar"><path fill-opacity=".3" d="M22 8V2L2 22h16V8z"/><path d="M17 22V7L2 22h15zm3-12v8h2v-8h-2zm0 12h2v-2h-2v2z"/></g>
+<g id="signal-cellular-connected-no-internet-4-bar"><path d="M20 18h2v-8h-2v8zm0 4h2v-2h-2v2zM2 22h16V8h4V2L2 22z"/></g>
+<g id="signal-cellular-no-sim"><path d="M18.99 5c0-1.1-.89-2-1.99-2h-7L7.66 5.34 19 16.68 18.99 5zM3.65 3.88L2.38 5.15 5 7.77V19c0 1.1.9 2 2 2h10.01c.35 0 .67-.1.96-.26l1.88 1.88 1.27-1.27L3.65 3.88z"/></g>
+<g id="signal-cellular-null"><path d="M20 6.83V20H6.83L20 6.83M22 2L2 22h20V2z"/></g>
+<g id="signal-cellular-off"><path d="M21 1l-8.59 8.59L21 18.18V1zM4.77 4.5L3.5 5.77l6.36 6.36L1 21h17.73l2 2L22 21.73 4.77 4.5z"/></g>
+<g id="signal-wifi-0-bar"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"/></g>
+<g id="signal-wifi-1-bar"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"/><path d="M6.67 14.86L12 21.49v.01l.01-.01 5.33-6.63C17.06 14.65 15.03 13 12 13s-5.06 1.65-5.33 1.86z"/></g>
+<g id="signal-wifi-1-bar-lock"><path d="M23 16v-1.5c0-1.4-1.1-2.5-2.5-2.5S18 13.1 18 14.5V16c-.5 0-1 .5-1 1v4c0 .5.5 1 1 1h5c.5 0 1-.5 1-1v-4c0-.5-.5-1-1-1zm-1 0h-3v-1.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5V16z"/><path d="M15.5 14.5c0-2.8 2.2-5 5-5 .4 0 .7 0 1 .1L23.6 7c-.4-.3-4.9-4-11.6-4C5.3 3 .8 6.7.4 7L12 21.5l3.5-4.3v-2.7z" opacity=".3"/><path d="M6.7 14.9l5.3 6.6 3.5-4.3v-2.6c0-.2 0-.5.1-.7-.9-.5-2.2-.9-3.6-.9-3 0-5.1 1.7-5.3 1.9z"/></g>
+<g id="signal-wifi-2-bar"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"/><path d="M4.79 12.52l7.2 8.98H12l.01-.01 7.2-8.98C18.85 12.24 16.1 10 12 10s-6.85 2.24-7.21 2.52z"/></g>
+<g id="signal-wifi-2-bar-lock"><path d="M23 16v-1.5c0-1.4-1.1-2.5-2.5-2.5S18 13.1 18 14.5V16c-.5 0-1 .5-1 1v4c0 .5.5 1 1 1h5c.5 0 1-.5 1-1v-4c0-.5-.5-1-1-1zm-1 0h-3v-1.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5V16z"/><path d="M15.5 14.5c0-2.8 2.2-5 5-5 .4 0 .7 0 1 .1L23.6 7c-.4-.3-4.9-4-11.6-4C5.3 3 .8 6.7.4 7L12 21.5l3.5-4.3v-2.7z" opacity=".3"/><path d="M4.8 12.5l7.2 9 3.5-4.4v-2.6c0-1.3.5-2.5 1.4-3.4C15.6 10.5 14 10 12 10c-4.1 0-6.8 2.2-7.2 2.5z"/></g>
+<g id="signal-wifi-3-bar"><path fill-opacity=".3" d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"/><path d="M3.53 10.95l8.46 10.54.01.01.01-.01 8.46-10.54C20.04 10.62 16.81 8 12 8c-4.81 0-8.04 2.62-8.47 2.95z"/></g>
+<g id="signal-wifi-3-bar-lock"><path opacity=".3" d="M12 3C5.3 3 .8 6.7.4 7l3.2 3.9L12 21.5l3.5-4.3v-2.6c0-2.2 1.4-4 3.3-4.7.3-.1.5-.2.8-.2.3-.1.6-.1.9-.1.4 0 .7 0 1 .1L23.6 7c-.4-.3-4.9-4-11.6-4z"/><path d="M23 16v-1.5c0-1.4-1.1-2.5-2.5-2.5S18 13.1 18 14.5V16c-.5 0-1 .5-1 1v4c0 .5.5 1 1 1h5c.5 0 1-.5 1-1v-4c0-.5-.5-1-1-1zm-1 0h-3v-1.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5V16zm-10 5.5l3.5-4.3v-2.6c0-2.2 1.4-4 3.3-4.7C17.3 9 14.9 8 12 8c-4.8 0-8 2.6-8.5 2.9"/></g>
+<g id="signal-wifi-4-bar"><path d="M12.01 21.49L23.64 7c-.45-.34-4.93-4-11.64-4C5.28 3 .81 6.66.36 7l11.63 14.49.01.01.01-.01z"/></g>
+<g id="signal-wifi-4-bar-lock"><path d="M23 16v-1.5c0-1.4-1.1-2.5-2.5-2.5S18 13.1 18 14.5V16c-.5 0-1 .5-1 1v4c0 .5.5 1 1 1h5c.5 0 1-.5 1-1v-4c0-.5-.5-1-1-1zm-1 0h-3v-1.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5V16zm-6.5-1.5c0-2.8 2.2-5 5-5 .4 0 .7 0 1 .1L23.6 7c-.4-.3-4.9-4-11.6-4C5.3 3 .8 6.7.4 7L12 21.5l3.5-4.4v-2.6z"/></g>
+<g id="signal-wifi-off"><path d="M23.64 7c-.45-.34-4.93-4-11.64-4-1.5 0-2.89.19-4.15.48L18.18 13.8 23.64 7zm-6.6 8.22L3.27 1.44 2 2.72l2.05 2.06C1.91 5.76.59 6.82.36 7l11.63 14.49.01.01.01-.01 3.9-4.86 3.32 3.32 1.27-1.27-3.46-3.46z"/></g>
+<g id="storage"><path d="M2 20h20v-4H2v4zm2-3h2v2H4v-2zM2 4v4h20V4H2zm4 3H4V5h2v2zm-4 7h20v-4H2v4zm2-3h2v2H4v-2z"/></g>
+<g id="usb"><path d="M15 7v4h1v2h-3V5h2l-3-4-3 4h2v8H8v-2.07c.7-.37 1.2-1.08 1.2-1.93 0-1.21-.99-2.2-2.2-2.2-1.21 0-2.2.99-2.2 2.2 0 .85.5 1.56 1.2 1.93V13c0 1.11.89 2 2 2h3v3.05c-.71.37-1.2 1.1-1.2 1.95 0 1.22.99 2.2 2.2 2.2 1.21 0 2.2-.98 2.2-2.2 0-.85-.49-1.58-1.2-1.95V15h3c1.11 0 2-.89 2-2v-2h1V7h-4z"/></g>
+<g id="wallpaper"><path d="M4 4h7V2H4c-1.1 0-2 .9-2 2v7h2V4zm6 9l-4 5h12l-3-4-2.03 2.71L10 13zm7-4.5c0-.83-.67-1.5-1.5-1.5S14 7.67 14 8.5s.67 1.5 1.5 1.5S17 9.33 17 8.5zM20 2h-7v2h7v7h2V4c0-1.1-.9-2-2-2zm0 18h-7v2h7c1.1 0 2-.9 2-2v-7h-2v7zM4 13H2v7c0 1.1.9 2 2 2h7v-2H4v-7z"/></g>
+<g id="widgets"><path d="M13 13v8h8v-8h-8zM3 21h8v-8H3v8zM3 3v8h8V3H3zm13.66-1.31L11 7.34 16.66 13l5.66-5.66-5.66-5.65z"/></g>
+<g id="wifi-lock"><path d="M20.5 9.5c.28 0 .55.04.81.08L24 6c-3.34-2.51-7.5-4-12-4S3.34 3.49 0 6l12 16 3.5-4.67V14.5c0-2.76 2.24-5 5-5zM23 16v-1.5c0-1.38-1.12-2.5-2.5-2.5S18 13.12 18 14.5V16c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm-1 0h-3v-1.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V16z"/></g>
+<g id="wifi-tethering"><path d="M12 11c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 2c0-3.31-2.69-6-6-6s-6 2.69-6 6c0 2.22 1.21 4.15 3 5.19l1-1.74c-1.19-.7-2-1.97-2-3.45 0-2.21 1.79-4 4-4s4 1.79 4 4c0 1.48-.81 2.75-2 3.45l1 1.74c1.79-1.04 3-2.97 3-5.19zM12 3C6.48 3 2 7.48 2 13c0 3.7 2.01 6.92 4.99 8.65l1-1.73C5.61 18.53 4 15.96 4 13c0-4.42 3.58-8 8-8s8 3.58 8 8c0 2.96-1.61 5.53-4 6.92l1 1.73c2.99-1.73 5-4.95 5-8.65 0-5.52-4.48-10-10-10z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.d.ts
new file mode 100644
index 00000000000..6ecc0bc5c8e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * editor-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.html
new file mode 100644
index 00000000000..bc7084db25b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/editor-icons.html
@@ -0,0 +1,84 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="editor" size="24">
+<svg><defs>
+<g id="attach-file"><path d="M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z"/></g>
+<g id="attach-money"><path d="M11.8 10.9c-2.27-.59-3-1.2-3-2.15 0-1.09 1.01-1.85 2.7-1.85 1.78 0 2.44.85 2.5 2.1h2.21c-.07-1.72-1.12-3.3-3.21-3.81V3h-3v2.16c-1.94.42-3.5 1.68-3.5 3.61 0 2.31 1.91 3.46 4.7 4.13 2.5.6 3 1.48 3 2.41 0 .69-.49 1.79-2.7 1.79-2.06 0-2.87-.92-2.98-2.1h-2.2c.12 2.19 1.76 3.42 3.68 3.83V21h3v-2.15c1.95-.37 3.5-1.5 3.5-3.55 0-2.84-2.43-3.81-4.7-4.4z"/></g>
+<g id="border-all"><path d="M3 3v18h18V3H3zm8 16H5v-6h6v6zm0-8H5V5h6v6zm8 8h-6v-6h6v6zm0-8h-6V5h6v6z"/></g>
+<g id="border-bottom"><path d="M9 11H7v2h2v-2zm4 4h-2v2h2v-2zM9 3H7v2h2V3zm4 8h-2v2h2v-2zM5 3H3v2h2V3zm8 4h-2v2h2V7zm4 4h-2v2h2v-2zm-4-8h-2v2h2V3zm4 0h-2v2h2V3zm2 10h2v-2h-2v2zm0 4h2v-2h-2v2zM5 7H3v2h2V7zm14-4v2h2V3h-2zm0 6h2V7h-2v2zM5 11H3v2h2v-2zM3 21h18v-2H3v2zm2-6H3v2h2v-2z"/></g>
+<g id="border-clear"><path d="M7 5h2V3H7v2zm0 8h2v-2H7v2zm0 8h2v-2H7v2zm4-4h2v-2h-2v2zm0 4h2v-2h-2v2zm-8 0h2v-2H3v2zm0-4h2v-2H3v2zm0-4h2v-2H3v2zm0-4h2V7H3v2zm0-4h2V3H3v2zm8 8h2v-2h-2v2zm8 4h2v-2h-2v2zm0-4h2v-2h-2v2zm0 8h2v-2h-2v2zm0-12h2V7h-2v2zm-8 0h2V7h-2v2zm8-6v2h2V3h-2zm-8 2h2V3h-2v2zm4 16h2v-2h-2v2zm0-8h2v-2h-2v2zm0-8h2V3h-2v2z"/></g>
+<g id="border-color"><path d="M17.75 7L14 3.25l-10 10V17h3.75l10-10zm2.96-2.96c.39-.39.39-1.02 0-1.41L18.37.29c-.39-.39-1.02-.39-1.41 0L15 2.25 18.75 6l1.96-1.96z"/><path fill-opacity=".36" d="M0 20h24v4H0z"/></g>
+<g id="border-horizontal"><path d="M3 21h2v-2H3v2zM5 7H3v2h2V7zM3 17h2v-2H3v2zm4 4h2v-2H7v2zM5 3H3v2h2V3zm4 0H7v2h2V3zm8 0h-2v2h2V3zm-4 4h-2v2h2V7zm0-4h-2v2h2V3zm6 14h2v-2h-2v2zm-8 4h2v-2h-2v2zm-8-8h18v-2H3v2zM19 3v2h2V3h-2zm0 6h2V7h-2v2zm-8 8h2v-2h-2v2zm4 4h2v-2h-2v2zm4 0h2v-2h-2v2z"/></g>
+<g id="border-inner"><path d="M3 21h2v-2H3v2zm4 0h2v-2H7v2zM5 7H3v2h2V7zM3 17h2v-2H3v2zM9 3H7v2h2V3zM5 3H3v2h2V3zm12 0h-2v2h2V3zm2 6h2V7h-2v2zm0-6v2h2V3h-2zm-4 18h2v-2h-2v2zM13 3h-2v8H3v2h8v8h2v-8h8v-2h-8V3zm6 18h2v-2h-2v2zm0-4h2v-2h-2v2z"/></g>
+<g id="border-left"><path d="M11 21h2v-2h-2v2zm0-4h2v-2h-2v2zm0-12h2V3h-2v2zm0 4h2V7h-2v2zm0 4h2v-2h-2v2zm-4 8h2v-2H7v2zM7 5h2V3H7v2zm0 8h2v-2H7v2zm-4 8h2V3H3v18zM19 9h2V7h-2v2zm-4 12h2v-2h-2v2zm4-4h2v-2h-2v2zm0-14v2h2V3h-2zm0 10h2v-2h-2v2zm0 8h2v-2h-2v2zm-4-8h2v-2h-2v2zm0-8h2V3h-2v2z"/></g>
+<g id="border-outer"><path d="M13 7h-2v2h2V7zm0 4h-2v2h2v-2zm4 0h-2v2h2v-2zM3 3v18h18V3H3zm16 16H5V5h14v14zm-6-4h-2v2h2v-2zm-4-4H7v2h2v-2z"/></g>
+<g id="border-right"><path d="M7 21h2v-2H7v2zM3 5h2V3H3v2zm4 0h2V3H7v2zm0 8h2v-2H7v2zm-4 8h2v-2H3v2zm8 0h2v-2h-2v2zm-8-8h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm8 8h2v-2h-2v2zm4-4h2v-2h-2v2zm4-10v18h2V3h-2zm-4 18h2v-2h-2v2zm0-16h2V3h-2v2zm-4 8h2v-2h-2v2zm0-8h2V3h-2v2zm0 4h2V7h-2v2z"/></g>
+<g id="border-style"><path d="M15 21h2v-2h-2v2zm4 0h2v-2h-2v2zM7 21h2v-2H7v2zm4 0h2v-2h-2v2zm8-4h2v-2h-2v2zm0-4h2v-2h-2v2zM3 3v18h2V5h16V3H3zm16 6h2V7h-2v2z"/></g>
+<g id="border-top"><path d="M7 21h2v-2H7v2zm0-8h2v-2H7v2zm4 0h2v-2h-2v2zm0 8h2v-2h-2v2zm-8-4h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2v-2H3v2zm0-4h2V7H3v2zm8 8h2v-2h-2v2zm8-8h2V7h-2v2zm0 4h2v-2h-2v2zM3 3v2h18V3H3zm16 14h2v-2h-2v2zm-4 4h2v-2h-2v2zM11 9h2V7h-2v2zm8 12h2v-2h-2v2zm-4-8h2v-2h-2v2z"/></g>
+<g id="border-vertical"><path d="M3 9h2V7H3v2zm0-4h2V3H3v2zm4 16h2v-2H7v2zm0-8h2v-2H7v2zm-4 0h2v-2H3v2zm0 8h2v-2H3v2zm0-4h2v-2H3v2zM7 5h2V3H7v2zm12 12h2v-2h-2v2zm-8 4h2V3h-2v18zm8 0h2v-2h-2v2zm0-8h2v-2h-2v2zm0-10v2h2V3h-2zm0 6h2V7h-2v2zm-4-4h2V3h-2v2zm0 16h2v-2h-2v2zm0-8h2v-2h-2v2z"/></g>
+<g id="bubble-chart"><circle cx="7.2" cy="14.4" r="3.2"/><circle cx="14.8" cy="18" r="2"/><circle cx="15.2" cy="8.8" r="4.8"/></g>
+<g id="drag-handle"><path d="M20 9H4v2h16V9zM4 15h16v-2H4v2z"/></g>
+<g id="format-align-center"><path d="M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z"/></g>
+<g id="format-align-justify"><path d="M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z"/></g>
+<g id="format-align-left"><path d="M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z"/></g>
+<g id="format-align-right"><path d="M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z"/></g>
+<g id="format-bold"><path d="M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z"/></g>
+<g id="format-clear"><path d="M3.27 5L2 6.27l6.97 6.97L6.5 19h3l1.57-3.66L16.73 21 18 19.73 3.55 5.27 3.27 5zM6 5v.18L8.82 8h2.4l-.72 1.68 2.1 2.1L14.21 8H20V5H6z"/></g>
+<g id="format-color-fill"><path d="M16.56 8.94L7.62 0 6.21 1.41l2.38 2.38-5.15 5.15c-.59.59-.59 1.54 0 2.12l5.5 5.5c.29.29.68.44 1.06.44s.77-.15 1.06-.44l5.5-5.5c.59-.58.59-1.53 0-2.12zM5.21 10L10 5.21 14.79 10H5.21zM19 11.5s-2 2.17-2 3.5c0 1.1.9 2 2 2s2-.9 2-2c0-1.33-2-3.5-2-3.5z"/><path fill-opacity=".36" d="M0 20h24v4H0z"/></g>
+<g id="format-color-reset"><path d="M18 14c0-4-6-10.8-6-10.8s-1.33 1.51-2.73 3.52l8.59 8.59c.09-.42.14-.86.14-1.31zm-.88 3.12L12.5 12.5 5.27 5.27 4 6.55l3.32 3.32C6.55 11.32 6 12.79 6 14c0 3.31 2.69 6 6 6 1.52 0 2.9-.57 3.96-1.5l2.63 2.63 1.27-1.27-2.74-2.74z"/></g>
+<g id="format-color-text"><path fill-opacity=".36" d="M0 20h24v4H0z"/><path d="M11 3L5.5 17h2.25l1.12-3h6.25l1.12 3h2.25L13 3h-2zm-1.38 9L12 5.67 14.38 12H9.62z"/></g>
+<g id="format-indent-decrease"><path d="M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z"/></g>
+<g id="format-indent-increase"><path d="M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z"/></g>
+<g id="format-italic"><path d="M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z"/></g>
+<g id="format-line-spacing"><path d="M6 7h2.5L5 3.5 1.5 7H4v10H1.5L5 20.5 8.5 17H6V7zm4-2v2h12V5H10zm0 14h12v-2H10v2zm0-6h12v-2H10v2z"/></g>
+<g id="format-list-bulleted"><path d="M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z"/></g>
+<g id="format-list-numbered"><path d="M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z"/></g>
+<g id="format-paint"><path d="M18 4V3c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V6h1v4H9v11c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-9h8V4h-3z"/></g>
+<g id="format-quote"><path d="M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z"/></g>
+<g id="format-shapes"><path d="M23 7V1h-6v2H7V1H1v6h2v10H1v6h6v-2h10v2h6v-6h-2V7h2zM3 3h2v2H3V3zm2 18H3v-2h2v2zm12-2H7v-2H5V7h2V5h10v2h2v10h-2v2zm4 2h-2v-2h2v2zM19 5V3h2v2h-2zm-5.27 9h-3.49l-.73 2H7.89l3.4-9h1.4l3.41 9h-1.63l-.74-2zm-3.04-1.26h2.61L12 8.91l-1.31 3.83z"/></g>
+<g id="format-size"><path d="M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3V9H3v3z"/></g>
+<g id="format-strikethrough"><path d="M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z"/></g>
+<g id="format-textdirection-l-to-r"><path d="M9 10v5h2V4h2v11h2V4h2V2H9C6.79 2 5 3.79 5 6s1.79 4 4 4zm12 8l-4-4v3H5v2h12v3l4-4z"/></g>
+<g id="format-textdirection-r-to-l"><path d="M10 10v5h2V4h2v11h2V4h2V2h-8C7.79 2 6 3.79 6 6s1.79 4 4 4zm-2 7v-3l-4 4 4 4v-3h12v-2H8z"/></g>
+<g id="format-underlined"><path d="M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z"/></g>
+<g id="functions"><path d="M18 4H6v2l6.5 6L6 18v2h12v-3h-7l5-5-5-5h7z"/></g>
+<g id="highlight"><path d="M6 14l3 3v5h6v-5l3-3V9H6zm5-12h2v3h-2zM3.5 5.875L4.914 4.46l2.12 2.122L5.62 7.997zm13.46.71l2.123-2.12 1.414 1.414L18.375 8z"/></g>
+<g id="insert-chart"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></g>
+<g id="insert-comment"><path d="M20 2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/></g>
+<g id="insert-drive-file"><path d="M6 2c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6H6zm7 7V3.5L18.5 9H13z"/></g>
+<g id="insert-emoticon"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></g>
+<g id="insert-invitation"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"/></g>
+<g id="insert-link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></g>
+<g id="insert-photo"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></g>
+<g id="linear-scale"><path d="M19.5 9.5c-1.03 0-1.9.62-2.29 1.5h-2.92c-.39-.88-1.26-1.5-2.29-1.5s-1.9.62-2.29 1.5H6.79c-.39-.88-1.26-1.5-2.29-1.5C3.12 9.5 2 10.62 2 12s1.12 2.5 2.5 2.5c1.03 0 1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5s1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5 1.38 0 2.5-1.12 2.5-2.5s-1.12-2.5-2.5-2.5z"/></g>
+<g id="merge-type"><path d="M17 20.41L18.41 19 15 15.59 13.59 17 17 20.41zM7.5 8H11v5.59L5.59 19 7 20.41l6-6V8h3.5L12 3.5 7.5 8z"/></g>
+<g id="mode-comment"><path d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18z"/></g>
+<g id="mode-edit"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></g>
+<g id="monetization-on"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1.41 16.09V20h-2.67v-1.93c-1.71-.36-3.16-1.46-3.27-3.4h1.96c.1 1.05.82 1.87 2.65 1.87 1.96 0 2.4-.98 2.4-1.59 0-.83-.44-1.61-2.67-2.14-2.48-.6-4.18-1.62-4.18-3.67 0-1.72 1.39-2.84 3.11-3.21V4h2.67v1.95c1.86.45 2.79 1.86 2.85 3.39H14.3c-.05-1.11-.64-1.87-2.22-1.87-1.5 0-2.4.68-2.4 1.64 0 .84.65 1.39 2.67 1.91s4.18 1.39 4.18 3.91c-.01 1.83-1.38 2.83-3.12 3.16z"/></g>
+<g id="money-off"><path d="M12.5 6.9c1.78 0 2.44.85 2.5 2.1h2.21c-.07-1.72-1.12-3.3-3.21-3.81V3h-3v2.16c-.53.12-1.03.3-1.48.54l1.47 1.47c.41-.17.91-.27 1.51-.27zM5.33 4.06L4.06 5.33 7.5 8.77c0 2.08 1.56 3.21 3.91 3.91l3.51 3.51c-.34.48-1.05.91-2.42.91-2.06 0-2.87-.92-2.98-2.1h-2.2c.12 2.19 1.76 3.42 3.68 3.83V21h3v-2.15c.96-.18 1.82-.55 2.45-1.12l2.22 2.22 1.27-1.27L5.33 4.06z"/></g>
+<g id="multiline-chart"><path d="M22 6.92l-1.41-1.41-2.85 3.21C15.68 6.4 12.83 5 9.61 5 6.72 5 4.07 6.16 2 8l1.42 1.42C5.12 7.93 7.27 7 9.61 7c2.74 0 5.09 1.26 6.77 3.24l-2.88 3.24-4-4L2 16.99l1.5 1.5 6-6.01 4 4 4.05-4.55c.75 1.35 1.25 2.9 1.44 4.55H21c-.22-2.3-.95-4.39-2.04-6.14L22 6.92z"/></g>
+<g id="pie-chart"><path d="M11 2v20c-5.07-.5-9-4.79-9-10s3.93-9.5 9-10zm2.03 0v8.99H22c-.47-4.74-4.24-8.52-8.97-8.99zm0 11.01V22c4.74-.47 8.5-4.25 8.97-8.99h-8.97z"/></g>
+<g id="pie-chart-outlined"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm1 2.07c3.61.45 6.48 3.33 6.93 6.93H13V4.07zM4 12c0-4.06 3.07-7.44 7-7.93v15.87c-3.93-.5-7-3.88-7-7.94zm9 7.93V13h6.93c-.45 3.61-3.32 6.48-6.93 6.93z"/></g>
+<g id="publish"><path d="M5 4v2h14V4H5zm0 10h4v6h6v-6h4l-7-7-7 7z"/></g>
+<g id="short-text"><path d="M4 9h16v2H4zm0 4h10v2H4z"/></g>
+<g id="show-chart"><path d="M3.5 18.49l6-6.01 4 4L22 6.92l-1.41-1.41-7.09 7.97-4-4L2 16.99z"/></g>
+<g id="space-bar"><path d="M18 9v4H6V9H4v6h16V9z"/></g>
+<g id="strikethrough-s"><path d="M7.24 8.75c-.26-.48-.39-1.03-.39-1.67 0-.61.13-1.16.4-1.67.26-.5.63-.93 1.11-1.29.48-.35 1.05-.63 1.7-.83.66-.19 1.39-.29 2.18-.29.81 0 1.54.11 2.21.34.66.22 1.23.54 1.69.94.47.4.83.88 1.08 1.43.25.55.38 1.15.38 1.81h-3.01c0-.31-.05-.59-.15-.85-.09-.27-.24-.49-.44-.68-.2-.19-.45-.33-.75-.44-.3-.1-.66-.16-1.06-.16-.39 0-.74.04-1.03.13-.29.09-.53.21-.72.36-.19.16-.34.34-.44.55-.1.21-.15.43-.15.66 0 .48.25.88.74 1.21.38.25.77.48 1.41.7H7.39c-.05-.08-.11-.17-.15-.25zM21 12v-2H3v2h9.62c.18.07.4.14.55.2.37.17.66.34.87.51.21.17.35.36.43.57.07.2.11.43.11.69 0 .23-.05.45-.14.66-.09.2-.23.38-.42.53-.19.15-.42.26-.71.35-.29.08-.63.13-1.01.13-.43 0-.83-.04-1.18-.13s-.66-.23-.91-.42c-.25-.19-.45-.44-.59-.75-.14-.31-.25-.76-.25-1.21H6.4c0 .55.08 1.13.24 1.58.16.45.37.85.65 1.21.28.35.6.66.98.92.37.26.78.48 1.22.65.44.17.9.3 1.38.39.48.08.96.13 1.44.13.8 0 1.53-.09 2.18-.28s1.21-.45 1.67-.79c.46-.34.82-.77 1.07-1.27s.38-1.07.38-1.71c0-.6-.1-1.14-.31-1.61-.05-.11-.11-.23-.17-.33H21z"/></g>
+<g id="text-fields"><path d="M2.5 4v3h5v12h3V7h5V4h-13zm19 5h-9v3h3v7h3v-7h3V9z"/></g>
+<g id="title"><path d="M5 4v3h5.5v12h3V7H19V4z"/></g>
+<g id="vertical-align-bottom"><path d="M16 13h-3V3h-2v10H8l4 4 4-4zM4 19v2h16v-2H4z"/></g>
+<g id="vertical-align-center"><path d="M8 19h3v4h2v-4h3l-4-4-4 4zm8-14h-3V1h-2v4H8l4 4 4-4zM4 11v2h16v-2H4z"/></g>
+<g id="vertical-align-top"><path d="M8 11h3v10h2V11h3l-4-4-4 4zM4 3v2h16V3H4z"/></g>
+<g id="wrap-text"><path d="M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3 3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/gen-tsd.json
new file mode 100644
index 00000000000..2f5920a3620
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/gen-tsd.json
@@ -0,0 +1,8 @@
+{
+ "exclude": [
+ "index.html",
+ "test/**",
+ "demo/**",
+ "util/**"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.d.ts
new file mode 100644
index 00000000000..1ffcbe7014d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * hardware-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.html
new file mode 100644
index 00000000000..3268e5adb9d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hardware-icons.html
@@ -0,0 +1,64 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="hardware" size="24">
+<svg><defs>
+<g id="cast"><path d="M21 3H3c-1.1 0-2 .9-2 2v3h2V5h18v14h-7v2h7c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM1 18v3h3c0-1.66-1.34-3-3-3zm0-4v2c2.76 0 5 2.24 5 5h2c0-3.87-3.13-7-7-7zm0-4v2c4.97 0 9 4.03 9 9h2c0-6.08-4.93-11-11-11z"/></g>
+<g id="cast-connected"><path d="M1 18v3h3c0-1.66-1.34-3-3-3zm0-4v2c2.76 0 5 2.24 5 5h2c0-3.87-3.13-7-7-7zm18-7H5v1.63c3.96 1.28 7.09 4.41 8.37 8.37H19V7zM1 10v2c4.97 0 9 4.03 9 9h2c0-6.08-4.93-11-11-11zm20-7H3c-1.1 0-2 .9-2 2v3h2V5h18v14h-7v2h7c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></g>
+<g id="computer"><path d="M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z"/></g>
+<g id="desktop-mac"><path d="M21 2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7l-2 3v1h8v-1l-2-3h7c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 12H3V4h18v10z"/></g>
+<g id="desktop-windows"><path d="M21 2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7v2H8v2h8v-2h-2v-2h7c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H3V4h18v12z"/></g>
+<g id="developer-board"><path d="M22 9V7h-2V5c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-2h2v-2h-2v-2h2v-2h-2V9h2zm-4 10H4V5h14v14zM6 13h5v4H6zm6-6h4v3h-4zM6 7h5v5H6zm6 4h4v6h-4z"/></g>
+<g id="device-hub"><path d="M17 16l-4-4V8.82C14.16 8.4 15 7.3 15 6c0-1.66-1.34-3-3-3S9 4.34 9 6c0 1.3.84 2.4 2 2.82V12l-4 4H3v5h5v-3.05l4-4.2 4 4.2V21h5v-5h-4z"/></g>
+<g id="devices-other"><path d="M3 6h18V4H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4v-2H3V6zm10 6H9v1.78c-.61.55-1 1.33-1 2.22s.39 1.67 1 2.22V20h4v-1.78c.61-.55 1-1.34 1-2.22s-.39-1.67-1-2.22V12zm-2 5.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM22 8h-6c-.5 0-1 .5-1 1v10c0 .5.5 1 1 1h6c.5 0 1-.5 1-1V9c0-.5-.5-1-1-1zm-1 10h-4v-8h4v8z"/></g>
+<g id="dock"><path d="M8 23h8v-2H8v2zm8-21.99L8 1c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM16 15H8V5h8v10z"/></g>
+<g id="gamepad"><path d="M15 7.5V2H9v5.5l3 3 3-3zM7.5 9H2v6h5.5l3-3-3-3zM9 16.5V22h6v-5.5l-3-3-3 3zM16.5 9l-3 3 3 3H22V9h-5.5z"/></g>
+<g id="headset"><path d="M12 1c-4.97 0-9 4.03-9 9v7c0 1.66 1.34 3 3 3h3v-8H5v-2c0-3.87 3.13-7 7-7s7 3.13 7 7v2h-4v8h3c1.66 0 3-1.34 3-3v-7c0-4.97-4.03-9-9-9z"/></g>
+<g id="headset-mic"><path d="M12 1c-4.97 0-9 4.03-9 9v7c0 1.66 1.34 3 3 3h3v-8H5v-2c0-3.87 3.13-7 7-7s7 3.13 7 7v2h-4v8h4v1h-7v2h6c1.66 0 3-1.34 3-3V10c0-4.97-4.03-9-9-9z"/></g>
+<g id="keyboard"><path d="M20 5H4c-1.1 0-1.99.9-1.99 2L2 17c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z"/></g>
+<g id="keyboard-arrow-down"><path d="M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z"/></g>
+<g id="keyboard-arrow-left"><path d="M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"/></g>
+<g id="keyboard-arrow-right"><path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/></g>
+<g id="keyboard-arrow-up"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"/></g>
+<g id="keyboard-backspace"><path d="M21 11H6.83l3.58-3.59L9 6l-6 6 6 6 1.41-1.41L6.83 13H21z"/></g>
+<g id="keyboard-capslock"><path d="M12 8.41L16.59 13 18 11.59l-6-6-6 6L7.41 13 12 8.41zM6 18h12v-2H6v2z"/></g>
+<g id="keyboard-hide"><path d="M20 3H4c-1.1 0-1.99.9-1.99 2L2 15c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9 3h2v2h-2V6zm0 3h2v2h-2V9zM8 6h2v2H8V6zm0 3h2v2H8V9zm-1 2H5V9h2v2zm0-3H5V6h2v2zm9 7H8v-2h8v2zm0-4h-2V9h2v2zm0-3h-2V6h2v2zm3 3h-2V9h2v2zm0-3h-2V6h2v2zm-7 15l4-4H8l4 4z"/></g>
+<g id="keyboard-return"><path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/></g>
+<g id="keyboard-tab"><path d="M11.59 7.41L15.17 11H1v2h14.17l-3.59 3.59L13 18l6-6-6-6-1.41 1.41zM20 6v12h2V6h-2z"/></g>
+<g id="keyboard-voice"><path d="M12 15c1.66 0 2.99-1.34 2.99-3L15 6c0-1.66-1.34-3-3-3S9 4.34 9 6v6c0 1.66 1.34 3 3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 15 6.7 12H5c0 3.42 2.72 6.23 6 6.72V22h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z"/></g>
+<g id="laptop"><path d="M20 18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z"/></g>
+<g id="laptop-chromebook"><path d="M22 18V3H2v15H0v2h24v-2h-2zm-8 0h-4v-1h4v1zm6-3H4V5h16v10z"/></g>
+<g id="laptop-mac"><path d="M20 18c1.1 0 1.99-.9 1.99-2L22 5c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2H0c0 1.1.9 2 2 2h20c1.1 0 2-.9 2-2h-4zM4 5h16v11H4V5zm8 14c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"/></g>
+<g id="laptop-windows"><path d="M20 18v-1c1.1 0 1.99-.9 1.99-2L22 5c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2v1H0v2h24v-2h-4zM4 5h16v10H4V5z"/></g>
+<g id="memory"><path d="M15 9H9v6h6V9zm-2 4h-2v-2h2v2zm8-2V9h-2V7c0-1.1-.9-2-2-2h-2V3h-2v2h-2V3H9v2H7c-1.1 0-2 .9-2 2v2H3v2h2v2H3v2h2v2c0 1.1.9 2 2 2h2v2h2v-2h2v2h2v-2h2c1.1 0 2-.9 2-2v-2h2v-2h-2v-2h2zm-4 6H7V7h10v10z"/></g>
+<g id="mouse"><path d="M13 1.07V9h7c0-4.08-3.05-7.44-7-7.93zM4 15c0 4.42 3.58 8 8 8s8-3.58 8-8v-4H4v4zm7-13.93C7.05 1.56 4 4.92 4 9h7V1.07z"/></g>
+<g id="phone-android"><path d="M16 1H8C6.34 1 5 2.34 5 4v16c0 1.66 1.34 3 3 3h8c1.66 0 3-1.34 3-3V4c0-1.66-1.34-3-3-3zm-2 20h-4v-1h4v1zm3.25-3H6.75V4h10.5v14z"/></g>
+<g id="phone-iphone"><path d="M15.5 1h-8C6.12 1 5 2.12 5 3.5v17C5 21.88 6.12 23 7.5 23h8c1.38 0 2.5-1.12 2.5-2.5v-17C18 2.12 16.88 1 15.5 1zm-4 21c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5-4H7V4h9v14z"/></g>
+<g id="phonelink"><path d="M4 6h18V4H4c-1.1 0-2 .9-2 2v11H0v3h14v-3H4V6zm19 2h-6c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zm-1 9h-4v-7h4v7z"/></g>
+<g id="phonelink-off"><path d="M22 6V4H6.82l2 2H22zM1.92 1.65L.65 2.92l1.82 1.82C2.18 5.08 2 5.52 2 6v11H0v3h17.73l2.35 2.35 1.27-1.27L3.89 3.62 1.92 1.65zM4 6.27L14.73 17H4V6.27zM23 8h-6c-.55 0-1 .45-1 1v4.18l2 2V10h4v7h-2.18l3 3H23c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1z"/></g>
+<g id="power-input"><path d="M2 9v2h19V9H2zm0 6h5v-2H2v2zm7 0h5v-2H9v2zm7 0h5v-2h-5v2z"/></g>
+<g id="router"><path d="M20.2 5.9l.8-.8C19.6 3.7 17.8 3 16 3s-3.6.7-5 2.1l.8.8C13 4.8 14.5 4.2 16 4.2s3 .6 4.2 1.7zm-.9.8c-.9-.9-2.1-1.4-3.3-1.4s-2.4.5-3.3 1.4l.8.8c.7-.7 1.6-1 2.5-1 .9 0 1.8.3 2.5 1l.8-.8zM19 13h-2V9h-2v4H5c-1.1 0-2 .9-2 2v4c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-4c0-1.1-.9-2-2-2zM8 18H6v-2h2v2zm3.5 0h-2v-2h2v2zm3.5 0h-2v-2h2v2z"/></g>
+<g id="scanner"><path d="M19.8 10.7L4.2 5l-.7 1.9L17.6 12H5c-1.1 0-2 .9-2 2v4c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-5.5c0-.8-.5-1.6-1.2-1.8zM7 17H5v-2h2v2zm12 0H9v-2h10v2z"/></g>
+<g id="security"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/></g>
+<g id="sim-card"><path d="M19.99 4c0-1.1-.89-2-1.99-2h-8L4 8v12c0 1.1.9 2 2 2h12.01c1.1 0 1.99-.9 1.99-2l-.01-16zM9 19H7v-2h2v2zm8 0h-2v-2h2v2zm-8-4H7v-4h2v4zm4 4h-2v-4h2v4zm0-6h-2v-2h2v2zm4 2h-2v-4h2v4z"/></g>
+<g id="smartphone"><path d="M17 1.01L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"/></g>
+<g id="speaker"><path d="M17 2H7c-1.1 0-2 .9-2 2v16c0 1.1.9 1.99 2 1.99L17 22c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-5 2c1.1 0 2 .9 2 2s-.9 2-2 2c-1.11 0-2-.9-2-2s.89-2 2-2zm0 16c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></g>
+<g id="speaker-group"><path d="M18.2 1H9.8C8.81 1 8 1.81 8 2.8v14.4c0 .99.81 1.79 1.8 1.79l8.4.01c.99 0 1.8-.81 1.8-1.8V2.8c0-.99-.81-1.8-1.8-1.8zM14 3c1.1 0 2 .89 2 2s-.9 2-2 2-2-.89-2-2 .9-2 2-2zm0 13.5c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"/><circle cx="14" cy="12.5" r="2.5"/><path d="M6 5H4v16c0 1.1.89 2 2 2h10v-2H6V5z"/></g>
+<g id="tablet"><path d="M21 4H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 1.99-.9 1.99-2L23 6c0-1.1-.9-2-2-2zm-2 14H5V6h14v12z"/></g>
+<g id="tablet-android"><path d="M18 0H6C4.34 0 3 1.34 3 3v18c0 1.66 1.34 3 3 3h12c1.66 0 3-1.34 3-3V3c0-1.66-1.34-3-3-3zm-4 22h-4v-1h4v1zm5.25-3H4.75V3h14.5v16z"/></g>
+<g id="tablet-mac"><path d="M18.5 0h-14C3.12 0 2 1.12 2 2.5v19C2 22.88 3.12 24 4.5 24h14c1.38 0 2.5-1.12 2.5-2.5v-19C21 1.12 19.88 0 18.5 0zm-7 23c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm7.5-4H4V3h15v16z"/></g>
+<g id="toys"><path d="M12 12c0-3 2.5-5.5 5.5-5.5S23 9 23 12H12zm0 0c0 3-2.5 5.5-5.5 5.5S1 15 1 12h11zm0 0c-3 0-5.5-2.5-5.5-5.5S9 1 12 1v11zm0 0c3 0 5.5 2.5 5.5 5.5S15 23 12 23V12z"/></g>
+<g id="tv"><path d="M21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.1-.9-2-2-2zm0 14H3V5h18v12z"/></g>
+<g id="videogame-asset"><path d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-10 7H8v3H6v-3H3v-2h3V8h2v3h3v2zm4.5 2c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4-3c-.83 0-1.5-.67-1.5-1.5S18.67 9 19.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="watch"><path d="M20 12c0-2.54-1.19-4.81-3.04-6.27L16 0H8l-.95 5.73C5.19 7.19 4 9.45 4 12s1.19 4.81 3.05 6.27L8 24h8l.96-5.73C18.81 16.81 20 14.54 20 12zM6 12c0-3.31 2.69-6 6-6s6 2.69 6 6-2.69 6-6 6-6-2.69-6-6z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hero.svg
new file mode 100755
index 00000000000..167321c9422
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/hero.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <circle cx="73" cy="24" r="4"/>
+ <path d="M82,33H64V15h18V33z M66,31h14V17H66V31z"/>
+ <circle cx="112.5" cy="24" r="4"/>
+ <circle cx="151" cy="24" r="4"/>
+ <path d="M121,33h-18V15h18V33z M105,31h14V17h-14V31z"/>
+ <path d="M160,33h-18V15h18V33z M144,31h14V17h-14V31z"/>
+ <circle cx="73" cy="62" r="4"/>
+ <path d="M82,71H64V53h18V71z M66,69h14V55H66V69z"/>
+ <circle cx="112.5" cy="62" r="4"/>
+ <path d="M121,71h-18V53h18V71z M105,69h14V55h-14V69z"/>
+ <circle cx="151" cy="62" r="4"/>
+ <path d="M160,71h-18V53h18V71z M144,69h14V55h-14V69z"/>
+ <circle cx="73" cy="102" r="4"/>
+ <path d="M82,111H64V93h18V111z M66,109h14V95H66V109z"/>
+ <circle cx="112.5" cy="102" r="4"/>
+ <path d="M121,111h-18V93h18V111z M105,109h14V95h-14V109z"/>
+ <circle cx="151" cy="102" r="4"/>
+ <path d="M160,111h-18V93h18V111z M144,109h14V95h-14V109z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.d.ts
new file mode 100644
index 00000000000..2d14c7634a9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * image-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.html
new file mode 100644
index 00000000000..bb1a4da3d2b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/image-icons.html
@@ -0,0 +1,171 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="image" size="24">
+<svg><defs>
+<g id="add-a-photo"><path d="M3 4V1h2v3h3v2H5v3H3V6H0V4h3zm3 6V7h3V4h7l1.83 2H21c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2V10h3zm7 9c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-3.2-5c0 1.77 1.43 3.2 3.2 3.2s3.2-1.43 3.2-3.2-1.43-3.2-3.2-3.2-3.2 1.43-3.2 3.2z"/></g>
+<g id="add-to-photos"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-1 9h-4v4h-2v-4H9V9h4V5h2v4h4v2z"/></g>
+<g id="adjust"><path d="M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3z"/></g>
+<g id="assistant"><path d="M19 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h4l3 3 3-3h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-5.12 10.88L12 17l-1.88-4.12L6 11l4.12-1.88L12 5l1.88 4.12L18 11l-4.12 1.88z"/></g>
+<g id="assistant-photo"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"/></g>
+<g id="audiotrack"><path d="M12 3v9.28c-.47-.17-.97-.28-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z"/></g>
+<g id="blur-circular"><path d="M10 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM7 9.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm3 7c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-3-3c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm3-6c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM14 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-1.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm3 6c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm0-4c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm2-3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm0-3.5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"/></g>
+<g id="blur-linear"><path d="M5 17.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zM9 13c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zM3 21h18v-2H3v2zM5 9.5c.83 0 1.5-.67 1.5-1.5S5.83 6.5 5 6.5 3.5 7.17 3.5 8 4.17 9.5 5 9.5zm0 4c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zM9 17c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm8-.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM3 3v2h18V3H3zm14 5.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm0 4c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM13 9c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1z"/></g>
+<g id="blur-off"><path d="M14 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-.2 4.48l.2.02c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5l.02.2c.09.67.61 1.19 1.28 1.28zM14 3.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm-4 0c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm11 7c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm8 8c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-4c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm-4 13.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM2.5 5.27l3.78 3.78L6 9c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1c0-.1-.03-.19-.06-.28l2.81 2.81c-.71.11-1.25.73-1.25 1.47 0 .83.67 1.5 1.5 1.5.74 0 1.36-.54 1.47-1.25l2.81 2.81c-.09-.03-.18-.06-.28-.06-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1c0-.1-.03-.19-.06-.28l3.78 3.78L20 20.23 3.77 4 2.5 5.27zM10 17c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm11-3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zM3 9.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 11c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM6 17c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-3-3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5z"/></g>
+<g id="blur-on"><path d="M6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-3 .5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm15 5.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM14 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-3.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm-11 10c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 7c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm0-17c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 5.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm8 .5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3 8.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM14 17c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-4-12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 8.5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-4.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-4c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"/></g>
+<g id="brightness-1"><circle cx="12" cy="12" r="10"/></g>
+<g id="brightness-2"><path d="M10 2c-1.82 0-3.53.5-5 1.35C7.99 5.08 10 8.3 10 12s-2.01 6.92-5 8.65C6.47 21.5 8.18 22 10 22c5.52 0 10-4.48 10-10S15.52 2 10 2z"/></g>
+<g id="brightness-3"><path d="M9 2c-1.05 0-2.05.16-3 .46 4.06 1.27 7 5.06 7 9.54 0 4.48-2.94 8.27-7 9.54.95.3 1.95.46 3 .46 5.52 0 10-4.48 10-10S14.52 2 9 2z"/></g>
+<g id="brightness-4"><path d="M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6c3.31 0 6 2.69 6 6s-2.69 6-6 6z"/></g>
+<g id="brightness-5"><path d="M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"/></g>
+<g id="brightness-6"><path d="M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69zM12 18V6c3.31 0 6 2.69 6 6s-2.69 6-6 6z"/></g>
+<g id="brightness-7"><path d="M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zm0-10c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z"/></g>
+<g id="broken-image"><path d="M21 5v6.59l-3-3.01-4 4.01-4-4-4 4-3-3.01V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2zm-3 6.42l3 3.01V19c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-6.58l3 2.99 4-4 4 4 4-3.99z"/></g>
+<g id="brush"><path d="M7 14c-1.66 0-3 1.34-3 3 0 1.31-1.16 2-2 2 .92 1.22 2.49 2 4 2 2.21 0 4-1.79 4-4 0-1.66-1.34-3-3-3zm13.71-9.37l-1.34-1.34c-.39-.39-1.02-.39-1.41 0L9 12.25 11.75 15l8.96-8.96c.39-.39.39-1.02 0-1.41z"/></g>
+<g id="burst-mode"><path d="M1 5h2v14H1zm4 0h2v14H5zm17 0H10c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h12c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zM11 17l2.5-3.15L15.29 16l2.5-3.22L21 17H11z"/></g>
+<g id="camera"><path d="M9.4 10.5l4.77-8.26C13.47 2.09 12.75 2 12 2c-2.4 0-4.6.85-6.32 2.25l3.66 6.35.06-.1zM21.54 9c-.92-2.92-3.15-5.26-6-6.34L11.88 9h9.66zm.26 1h-7.49l.29.5 4.76 8.25C21 16.97 22 14.61 22 12c0-.69-.07-1.35-.2-2zM8.54 12l-3.9-6.75C3.01 7.03 2 9.39 2 12c0 .69.07 1.35.2 2h7.49l-1.15-2zm-6.08 3c.92 2.92 3.15 5.26 6 6.34L12.12 15H2.46zm11.27 0l-3.9 6.76c.7.15 1.42.24 2.17.24 2.4 0 4.6-.85 6.32-2.25l-3.66-6.35-.93 1.6z"/></g>
+<g id="camera-alt"><circle cx="12" cy="12" r="3.2"/><path d="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/></g>
+<g id="camera-front"><path d="M10 20H5v2h5v2l3-3-3-3v2zm4 0v2h5v-2h-5zM12 8c1.1 0 2-.9 2-2s-.9-2-2-2-1.99.9-1.99 2S10.9 8 12 8zm5-8H7C5.9 0 5 .9 5 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2zM7 2h10v10.5c0-1.67-3.33-2.5-5-2.5s-5 .83-5 2.5V2z"/></g>
+<g id="camera-rear"><path d="M10 20H5v2h5v2l3-3-3-3v2zm4 0v2h5v-2h-5zm3-20H7C5.9 0 5 .9 5 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2zm-5 6c-1.11 0-2-.9-2-2s.89-2 1.99-2 2 .9 2 2C14 5.1 13.1 6 12 6z"/></g>
+<g id="camera-roll"><path d="M14 5c0-1.1-.9-2-2-2h-1V2c0-.55-.45-1-1-1H6c-.55 0-1 .45-1 1v1H4c-1.1 0-2 .9-2 2v15c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2h8V5h-8zm-2 13h-2v-2h2v2zm0-9h-2V7h2v2zm4 9h-2v-2h2v2zm0-9h-2V7h2v2zm4 9h-2v-2h2v2zm0-9h-2V7h2v2z"/></g>
+<g id="center-focus-strong"><path d="M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-7 7H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4z"/></g>
+<g id="center-focus-weak"><path d="M5 15H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zM12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+<g id="collections"><path d="M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"/></g>
+<g id="collections-bookmark"><path d="M4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm16-4H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 10l-2.5-1.5L15 12V4h5v8z"/></g>
+<g id="color-lens"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="colorize"><path d="M20.71 5.63l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-3.12 3.12-1.93-1.91-1.41 1.41 1.42 1.42L3 16.25V21h4.75l8.92-8.92 1.42 1.42 1.41-1.41-1.92-1.92 3.12-3.12c.4-.4.4-1.03.01-1.42zM6.92 19L5 17.08l8.06-8.06 1.92 1.92L6.92 19z"/></g>
+<g id="compare"><path d="M10 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h5v2h2V1h-2v2zm0 15H5l5-6v6zm9-15h-5v2h5v13l-5-6v9h5c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></g>
+<g id="control-point"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="control-point-duplicate"><path d="M16 8h-2v3h-3v2h3v3h2v-3h3v-2h-3zM2 12c0-2.79 1.64-5.2 4.01-6.32V3.52C2.52 4.76 0 8.09 0 12s2.52 7.24 6.01 8.48v-2.16C3.64 17.2 2 14.79 2 12zm13-9c-4.96 0-9 4.04-9 9s4.04 9 9 9 9-4.04 9-9-4.04-9-9-9zm0 16c-3.86 0-7-3.14-7-7s3.14-7 7-7 7 3.14 7 7-3.14 7-7 7z"/></g>
+<g id="crop"><path d="M17 15h2V7c0-1.1-.9-2-2-2H9v2h8v8zM7 17V1H5v4H1v2h4v10c0 1.1.9 2 2 2h10v4h2v-4h4v-2H7z"/></g>
+<g id="crop-16-9"><path d="M19 6H5c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H5V8h14v8z"/></g>
+<g id="crop-3-2"><path d="M19 4H5c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H5V6h14v12z"/></g>
+<g id="crop-5-4"><path d="M19 5H5c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 12H5V7h14v10z"/></g>
+<g id="crop-7-5"><path d="M19 7H5c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm0 8H5V9h14v6z"/></g>
+<g id="crop-din"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14z"/></g>
+<g id="crop-free"><path d="M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2zm2 10H3v4c0 1.1.9 2 2 2h4v-2H5v-4zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2z"/></g>
+<g id="crop-landscape"><path d="M19 5H5c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 12H5V7h14v10z"/></g>
+<g id="crop-original"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-5.04-6.71l-2.75 3.54-1.96-2.36L6.5 17h11l-3.54-4.71z"/></g>
+<g id="crop-portrait"><path d="M17 3H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H7V5h10v14z"/></g>
+<g id="crop-rotate"><path d="M7.47 21.49C4.2 19.93 1.86 16.76 1.5 13H0c.51 6.16 5.66 11 11.95 11 .23 0 .44-.02.66-.03L8.8 20.15l-1.33 1.34zM12.05 0c-.23 0-.44.02-.66.04l3.81 3.81 1.33-1.33C19.8 4.07 22.14 7.24 22.5 11H24c-.51-6.16-5.66-11-11.95-11zM16 14h2V8c0-1.11-.9-2-2-2h-6v2h6v6zm-8 2V4H6v2H4v2h2v8c0 1.1.89 2 2 2h8v2h2v-2h2v-2H8z"/></g>
+<g id="crop-square"><path d="M18 4H6c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H6V6h12v12z"/></g>
+<g id="dehaze"><path d="M2 15.5v2h20v-2H2zm0-5v2h20v-2H2zm0-5v2h20v-2H2z"/></g>
+<g id="details"><path d="M3 4l9 16 9-16H3zm3.38 2h11.25L12 16 6.38 6z"/></g>
+<g id="edit"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></g>
+<g id="exposure"><path d="M15 17v2h2v-2h2v-2h-2v-2h-2v2h-2v2h2zm5-15H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM5 5h6v2H5V5zm15 15H4L20 4v16z"/></g>
+<g id="exposure-neg-1"><path d="M4 11v2h8v-2H4zm15 7h-2V7.38L14 8.4V6.7L18.7 5h.3v13z"/></g>
+<g id="exposure-neg-2"><path d="M15.05 16.29l2.86-3.07c.38-.39.72-.79 1.04-1.18.32-.39.59-.78.82-1.17.23-.39.41-.78.54-1.17s.19-.79.19-1.18c0-.53-.09-1.02-.27-1.46-.18-.44-.44-.81-.78-1.11-.34-.31-.77-.54-1.26-.71-.51-.16-1.08-.24-1.72-.24-.69 0-1.31.11-1.85.32-.54.21-1 .51-1.36.88-.37.37-.65.8-.84 1.3-.18.47-.27.97-.28 1.5h2.14c.01-.31.05-.6.13-.87.09-.29.23-.54.4-.75.18-.21.41-.37.68-.49.27-.12.6-.18.96-.18.31 0 .58.05.81.15.23.1.43.25.59.43.16.18.28.4.37.65.08.25.13.52.13.81 0 .22-.03.43-.08.65-.06.22-.15.45-.29.7-.14.25-.32.53-.56.83-.23.3-.52.65-.88 1.03l-4.17 4.55V18H21v-1.71h-5.95zM2 11v2h8v-2H2z"/></g>
+<g id="exposure-plus-1"><path d="M10 7H8v4H4v2h4v4h2v-4h4v-2h-4V7zm10 11h-2V7.38L15 8.4V6.7L19.7 5h.3v13z"/></g>
+<g id="exposure-plus-2"><path d="M16.05 16.29l2.86-3.07c.38-.39.72-.79 1.04-1.18.32-.39.59-.78.82-1.17.23-.39.41-.78.54-1.17.13-.39.19-.79.19-1.18 0-.53-.09-1.02-.27-1.46-.18-.44-.44-.81-.78-1.11-.34-.31-.77-.54-1.26-.71-.51-.16-1.08-.24-1.72-.24-.69 0-1.31.11-1.85.32-.54.21-1 .51-1.36.88-.37.37-.65.8-.84 1.3-.18.47-.27.97-.28 1.5h2.14c.01-.31.05-.6.13-.87.09-.29.23-.54.4-.75.18-.21.41-.37.68-.49.27-.12.6-.18.96-.18.31 0 .58.05.81.15.23.1.43.25.59.43.16.18.28.4.37.65.08.25.13.52.13.81 0 .22-.03.43-.08.65-.06.22-.15.45-.29.7-.14.25-.32.53-.56.83-.23.3-.52.65-.88 1.03l-4.17 4.55V18H22v-1.71h-5.95zM8 7H6v4H2v2h4v4h2v-4h4v-2H8V7z"/></g>
+<g id="exposure-zero"><path d="M16.14 12.5c0 1-.1 1.85-.3 2.55-.2.7-.48 1.27-.83 1.7-.36.44-.79.75-1.3.95-.51.2-1.07.3-1.7.3-.62 0-1.18-.1-1.69-.3-.51-.2-.95-.51-1.31-.95-.36-.44-.65-1.01-.85-1.7-.2-.7-.3-1.55-.3-2.55v-2.04c0-1 .1-1.85.3-2.55.2-.7.48-1.26.84-1.69.36-.43.8-.74 1.31-.93C10.81 5.1 11.38 5 12 5c.63 0 1.19.1 1.7.29.51.19.95.5 1.31.93.36.43.64.99.84 1.69.2.7.3 1.54.3 2.55v2.04zm-2.11-2.36c0-.64-.05-1.18-.13-1.62-.09-.44-.22-.79-.4-1.06-.17-.27-.39-.46-.64-.58-.25-.13-.54-.19-.86-.19-.32 0-.61.06-.86.18s-.47.31-.64.58c-.17.27-.31.62-.4 1.06s-.13.98-.13 1.62v2.67c0 .64.05 1.18.14 1.62.09.45.23.81.4 1.09s.39.48.64.61.54.19.87.19c.33 0 .62-.06.87-.19s.46-.33.63-.61c.17-.28.3-.64.39-1.09.09-.45.13-.99.13-1.62v-2.66z"/></g>
+<g id="filter"><path d="M15.96 10.29l-2.75 3.54-1.96-2.36L8.5 15h11l-3.54-4.71zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"/></g>
+<g id="filter-1"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm11 10h2V5h-4v2h2v8zm7-14H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"/></g>
+<g id="filter-2"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zm-4-4h-4v-2h2c1.1 0 2-.89 2-2V7c0-1.11-.9-2-2-2h-4v2h4v2h-2c-1.1 0-2 .89-2 2v4h6v-2z"/></g>
+<g id="filter-3"><path d="M21 1H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm14 8v-1.5c0-.83-.67-1.5-1.5-1.5.83 0 1.5-.67 1.5-1.5V7c0-1.11-.9-2-2-2h-4v2h4v2h-2v2h2v2h-4v2h4c1.1 0 2-.89 2-2z"/></g>
+<g id="filter-4"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm12 10h2V5h-2v4h-2V5h-2v6h4v4zm6-14H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"/></g>
+<g id="filter-5"><path d="M21 1H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm14 8v-2c0-1.11-.9-2-2-2h-2V7h4V5h-6v6h4v2h-4v2h4c1.1 0 2-.89 2-2z"/></g>
+<g id="filter-6"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zm-8-2h2c1.1 0 2-.89 2-2v-2c0-1.11-.9-2-2-2h-2V7h4V5h-4c-1.1 0-2 .89-2 2v6c0 1.11.9 2 2 2zm0-4h2v2h-2v-2z"/></g>
+<g id="filter-7"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zm-8-2l4-8V5h-6v2h4l-4 8h2z"/></g>
+<g id="filter-8"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zm-8-2h2c1.1 0 2-.89 2-2v-1.5c0-.83-.67-1.5-1.5-1.5.83 0 1.5-.67 1.5-1.5V7c0-1.11-.9-2-2-2h-2c-1.1 0-2 .89-2 2v1.5c0 .83.67 1.5 1.5 1.5-.83 0-1.5.67-1.5 1.5V13c0 1.11.9 2 2 2zm0-8h2v2h-2V7zm0 4h2v2h-2v-2z"/></g>
+<g id="filter-9"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14zM15 5h-2c-1.1 0-2 .89-2 2v2c0 1.11.9 2 2 2h2v2h-4v2h4c1.1 0 2-.89 2-2V7c0-1.11-.9-2-2-2zm0 4h-2V7h2v2z"/></g>
+<g id="filter-9-plus"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm11 7V8c0-1.11-.9-2-2-2h-1c-1.1 0-2 .89-2 2v1c0 1.11.9 2 2 2h1v1H9v2h3c1.1 0 2-.89 2-2zm-3-3V8h1v1h-1zm10-8H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 8h-2V7h-2v2h-2v2h2v2h2v-2h2v6H7V3h14v6z"/></g>
+<g id="filter-b-and-w"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16l-7-8v8H5l7-8V5h7v14z"/></g>
+<g id="filter-center-focus"><path d="M5 15H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zM12 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></g>
+<g id="filter-drama"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.61 5.64 5.36 8.04 2.35 8.36 0 10.9 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4h2c0-2.76-1.86-5.08-4.4-5.78C8.61 6.88 10.2 6 12 6c3.03 0 5.5 2.47 5.5 5.5v.5H19c1.65 0 3 1.35 3 3s-1.35 3-3 3z"/></g>
+<g id="filter-frames"><path d="M20 4h-4l-4-4-4 4H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H4V6h4.52l3.52-3.5L15.52 6H20v14zM18 8H6v10h12"/></g>
+<g id="filter-hdr"><path d="M14 6l-3.75 5 2.85 3.8-1.6 1.2C9.81 13.75 7 10 7 10l-6 8h22L14 6z"/></g>
+<g id="filter-none"><path d="M3 5H1v16c0 1.1.9 2 2 2h16v-2H3V5zm18-4H7c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V3c0-1.1-.9-2-2-2zm0 16H7V3h14v14z"/></g>
+<g id="filter-tilt-shift"><path d="M11 4.07V2.05c-2.01.2-3.84 1-5.32 2.21L7.1 5.69c1.11-.86 2.44-1.44 3.9-1.62zm7.32.19C16.84 3.05 15.01 2.25 13 2.05v2.02c1.46.18 2.79.76 3.9 1.62l1.42-1.43zM19.93 11h2.02c-.2-2.01-1-3.84-2.21-5.32L18.31 7.1c.86 1.11 1.44 2.44 1.62 3.9zM5.69 7.1L4.26 5.68C3.05 7.16 2.25 8.99 2.05 11h2.02c.18-1.46.76-2.79 1.62-3.9zM4.07 13H2.05c.2 2.01 1 3.84 2.21 5.32l1.43-1.43c-.86-1.1-1.44-2.43-1.62-3.89zM15 12c0-1.66-1.34-3-3-3s-3 1.34-3 3 1.34 3 3 3 3-1.34 3-3zm3.31 4.9l1.43 1.43c1.21-1.48 2.01-3.32 2.21-5.32h-2.02c-.18 1.45-.76 2.78-1.62 3.89zM13 19.93v2.02c2.01-.2 3.84-1 5.32-2.21l-1.43-1.43c-1.1.86-2.43 1.44-3.89 1.62zm-7.32-.19C7.16 20.95 9 21.75 11 21.95v-2.02c-1.46-.18-2.79-.76-3.9-1.62l-1.42 1.43z"/></g>
+<g id="filter-vintage"><path d="M18.7 12.4c-.28-.16-.57-.29-.86-.4.29-.11.58-.24.86-.4 1.92-1.11 2.99-3.12 3-5.19-1.79-1.03-4.07-1.11-6 0-.28.16-.54.35-.78.54.05-.31.08-.63.08-.95 0-2.22-1.21-4.15-3-5.19C10.21 1.85 9 3.78 9 6c0 .32.03.64.08.95-.24-.2-.5-.39-.78-.55-1.92-1.11-4.2-1.03-6 0 0 2.07 1.07 4.08 3 5.19.28.16.57.29.86.4-.29.11-.58.24-.86.4-1.92 1.11-2.99 3.12-3 5.19 1.79 1.03 4.07 1.11 6 0 .28-.16.54-.35.78-.54-.05.32-.08.64-.08.96 0 2.22 1.21 4.15 3 5.19 1.79-1.04 3-2.97 3-5.19 0-.32-.03-.64-.08-.95.24.2.5.38.78.54 1.92 1.11 4.2 1.03 6 0-.01-2.07-1.08-4.08-3-5.19zM12 16c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"/></g>
+<g id="flare"><path d="M7 11H1v2h6v-2zm2.17-3.24L7.05 5.64 5.64 7.05l2.12 2.12 1.41-1.41zM13 1h-2v6h2V1zm5.36 6.05l-1.41-1.41-2.12 2.12 1.41 1.41 2.12-2.12zM17 11v2h6v-2h-6zm-5-2c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm2.83 7.24l2.12 2.12 1.41-1.41-2.12-2.12-1.41 1.41zm-9.19.71l1.41 1.41 2.12-2.12-1.41-1.41-2.12 2.12zM11 23h2v-6h-2v6z"/></g>
+<g id="flash-auto"><path d="M3 2v12h3v9l7-12H9l4-9H3zm16 0h-2l-3.2 9h1.9l.7-2h3.2l.7 2h1.9L19 2zm-2.15 5.65L18 4l1.15 3.65h-2.3z"/></g>
+<g id="flash-off"><path d="M3.27 3L2 4.27l5 5V13h3v9l3.58-6.14L17.73 20 19 18.73 3.27 3zM17 10h-4l4-8H7v2.18l8.46 8.46L17 10z"/></g>
+<g id="flash-on"><path d="M7 2v11h3v9l7-12h-4l4-8z"/></g>
+<g id="flip"><path d="M15 21h2v-2h-2v2zm4-12h2V7h-2v2zM3 5v14c0 1.1.9 2 2 2h4v-2H5V5h4V3H5c-1.1 0-2 .9-2 2zm16-2v2h2c0-1.1-.9-2-2-2zm-8 20h2V1h-2v22zm8-6h2v-2h-2v2zM15 5h2V3h-2v2zm4 8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2z"/></g>
+<g id="gradient"><path d="M11 9h2v2h-2zm-2 2h2v2H9zm4 0h2v2h-2zm2-2h2v2h-2zM7 9h2v2H7zm12-6H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 18H7v-2h2v2zm4 0h-2v-2h2v2zm4 0h-2v-2h2v2zm2-7h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v2H9v-2H7v2H5v-2h2v-2H5V5h14v6z"/></g>
+<g id="grain"><path d="M10 12c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zM6 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-4 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-4-4c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="grid-off"><path d="M8 4v1.45l2 2V4h4v4h-3.45l2 2H14v1.45l2 2V10h4v4h-3.45l2 2H20v1.45l2 2V4c0-1.1-.9-2-2-2H4.55l2 2H8zm8 0h4v4h-4V4zM1.27 1.27L0 2.55l2 2V20c0 1.1.9 2 2 2h15.46l2 2 1.27-1.27L1.27 1.27zM10 12.55L11.45 14H10v-1.45zm-6-6L5.45 8H4V6.55zM8 20H4v-4h4v4zm0-6H4v-4h3.45l.55.55V14zm6 6h-4v-4h3.45l.55.54V20zm2 0v-1.46L17.46 20H16z"/></g>
+<g id="grid-on"><path d="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 20H4v-4h4v4zm0-6H4v-4h4v4zm0-6H4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4zm6 12h-4v-4h4v4zm0-6h-4v-4h4v4zm0-6h-4V4h4v4z"/></g>
+<g id="hdr-off"><path d="M17.5 15v-2h1.1l.9 2H21l-.9-2.1c.5-.2.9-.8.9-1.4v-1c0-.8-.7-1.5-1.5-1.5H16v4.9l1.1 1.1h.4zm0-4.5h2v1h-2v-1zm-4.5 0v.4l1.5 1.5v-1.9c0-.8-.7-1.5-1.5-1.5h-1.9l1.5 1.5h.4zm-3.5-1l-7-7-1.1 1L6.9 9h-.4v2h-2V9H3v6h1.5v-2.5h2V15H8v-4.9l1.5 1.5V15h3.4l7.6 7.6 1.1-1.1-12.1-12z"/></g>
+<g id="hdr-on"><path d="M21 11.5v-1c0-.8-.7-1.5-1.5-1.5H16v6h1.5v-2h1.1l.9 2H21l-.9-2.1c.5-.3.9-.8.9-1.4zm-1.5 0h-2v-1h2v1zm-13-.5h-2V9H3v6h1.5v-2.5h2V15H8V9H6.5v2zM13 9H9.5v6H13c.8 0 1.5-.7 1.5-1.5v-3c0-.8-.7-1.5-1.5-1.5zm0 4.5h-2v-3h2v3z"/></g>
+<g id="hdr-strong"><path d="M17 6c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zM5 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+<g id="hdr-weak"><path d="M5 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm12-2c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm0 10c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z"/></g>
+<g id="healing"><path d="M17.73 12.02l3.98-3.98c.39-.39.39-1.02 0-1.41l-4.34-4.34c-.39-.39-1.02-.39-1.41 0l-3.98 3.98L8 2.29C7.8 2.1 7.55 2 7.29 2c-.25 0-.51.1-.7.29L2.25 6.63c-.39.39-.39 1.02 0 1.41l3.98 3.98L2.25 16c-.39.39-.39 1.02 0 1.41l4.34 4.34c.39.39 1.02.39 1.41 0l3.98-3.98 3.98 3.98c.2.2.45.29.71.29.26 0 .51-.1.71-.29l4.34-4.34c.39-.39.39-1.02 0-1.41l-3.99-3.98zM12 9c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-4.71 1.96L3.66 7.34l3.63-3.63 3.62 3.62-3.62 3.63zM10 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm2 2c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm2-4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2.66 9.34l-3.63-3.62 3.63-3.63 3.62 3.62-3.62 3.63z"/></g>
+<g id="image"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></g>
+<g id="image-aspect-ratio"><path d="M16 10h-2v2h2v-2zm0 4h-2v2h2v-2zm-8-4H6v2h2v-2zm4 0h-2v2h2v-2zm8-6H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V6h16v12z"/></g>
+<g id="iso"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5.5 7.5h2v-2H9v2h2V9H9v2H7.5V9h-2V7.5zM19 19H5L19 5v14zm-2-2v-1.5h-5V17h5z"/></g>
+<g id="landscape"><path d="M14 6l-3.75 5 2.85 3.8-1.6 1.2C9.81 13.75 7 10 7 10l-6 8h22L14 6z"/></g>
+<g id="leak-add"><path d="M6 3H3v3c1.66 0 3-1.34 3-3zm8 0h-2c0 4.97-4.03 9-9 9v2c6.08 0 11-4.93 11-11zm-4 0H8c0 2.76-2.24 5-5 5v2c3.87 0 7-3.13 7-7zm0 18h2c0-4.97 4.03-9 9-9v-2c-6.07 0-11 4.93-11 11zm8 0h3v-3c-1.66 0-3 1.34-3 3zm-4 0h2c0-2.76 2.24-5 5-5v-2c-3.87 0-7 3.13-7 7z"/></g>
+<g id="leak-remove"><path d="M10 3H8c0 .37-.04.72-.12 1.06l1.59 1.59C9.81 4.84 10 3.94 10 3zM3 4.27l2.84 2.84C5.03 7.67 4.06 8 3 8v2c1.61 0 3.09-.55 4.27-1.46L8.7 9.97C7.14 11.24 5.16 12 3 12v2c2.71 0 5.19-.99 7.11-2.62l2.5 2.5C10.99 15.81 10 18.29 10 21h2c0-2.16.76-4.14 2.03-5.69l1.43 1.43C14.55 17.91 14 19.39 14 21h2c0-1.06.33-2.03.89-2.84L19.73 21 21 19.73 4.27 3 3 4.27zM14 3h-2c0 1.5-.37 2.91-1.02 4.16l1.46 1.46C13.42 6.98 14 5.06 14 3zm5.94 13.12c.34-.08.69-.12 1.06-.12v-2c-.94 0-1.84.19-2.66.52l1.6 1.6zm-4.56-4.56l1.46 1.46C18.09 12.37 19.5 12 21 12v-2c-2.06 0-3.98.58-5.62 1.56z"/></g>
+<g id="lens"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"/></g>
+<g id="linked-camera"><circle cx="12" cy="14" r="3.2"/><path d="M16 3.33c2.58 0 4.67 2.09 4.67 4.67H22c0-3.31-2.69-6-6-6v1.33M16 6c1.11 0 2 .89 2 2h1.33c0-1.84-1.49-3.33-3.33-3.33V6"/><path d="M17 9c0-1.11-.89-2-2-2V4H9L7.17 6H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V9h-5zm-5 10c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/></g>
+<g id="looks"><path d="M12 10c-3.86 0-7 3.14-7 7h2c0-2.76 2.24-5 5-5s5 2.24 5 5h2c0-3.86-3.14-7-7-7zm0-4C5.93 6 1 10.93 1 17h2c0-4.96 4.04-9 9-9s9 4.04 9 9h2c0-6.07-4.93-11-11-11z"/></g>
+<g id="looks-3"><path d="M19.01 3h-14c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 7.5c0 .83-.67 1.5-1.5 1.5.83 0 1.5.67 1.5 1.5V15c0 1.11-.9 2-2 2h-4v-2h4v-2h-2v-2h2V9h-4V7h4c1.1 0 2 .89 2 2v1.5z"/></g>
+<g id="looks-4"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 14h-2v-4H9V7h2v4h2V7h2v10z"/></g>
+<g id="looks-5"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 6h-4v2h2c1.1 0 2 .89 2 2v2c0 1.11-.9 2-2 2H9v-2h4v-2H9V7h6v2z"/></g>
+<g id="looks-6"><path d="M11 15h2v-2h-2v2zm8-12H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 6h-4v2h2c1.1 0 2 .89 2 2v2c0 1.11-.9 2-2 2h-2c-1.1 0-2-.89-2-2V9c0-1.11.9-2 2-2h4v2z"/></g>
+<g id="looks-one"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14h-2V9h-2V7h4v10z"/></g>
+<g id="looks-two"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-4 8c0 1.11-.9 2-2 2h-2v2h4v2H9v-4c0-1.11.9-2 2-2h2V9H9V7h4c1.1 0 2 .89 2 2v2z"/></g>
+<g id="loupe"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.49 2 2 6.49 2 12s4.49 10 10 10h8c1.1 0 2-.9 2-2v-8c0-5.51-4.49-10-10-10zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="monochrome-photos"><path d="M20 5h-3.2L15 3H9L7.2 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 14h-8v-1c-2.8 0-5-2.2-5-5s2.2-5 5-5V7h8v12zm-3-6c0-2.8-2.2-5-5-5v1.8c1.8 0 3.2 1.4 3.2 3.2s-1.4 3.2-3.2 3.2V18c2.8 0 5-2.2 5-5zm-8.2 0c0 1.8 1.4 3.2 3.2 3.2V9.8c-1.8 0-3.2 1.4-3.2 3.2z"/></g>
+<g id="movie-creation"><path d="M18 4l2 4h-3l-2-4h-2l2 4h-3l-2-4H8l2 4H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4z"/></g>
+<g id="movie-filter"><path d="M18 4l2 3h-3l-2-3h-2l2 3h-3l-2-3H8l2 3H7L5 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4h-4zm-6.75 11.25L10 18l-1.25-2.75L6 14l2.75-1.25L10 10l1.25 2.75L14 14l-2.75 1.25zm5.69-3.31L16 14l-.94-2.06L13 11l2.06-.94L16 8l.94 2.06L19 11l-2.06.94z"/></g>
+<g id="music-note"><path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"/></g>
+<g id="nature"><path d="M13 16.12c3.47-.41 6.17-3.36 6.17-6.95 0-3.87-3.13-7-7-7s-7 3.13-7 7c0 3.47 2.52 6.34 5.83 6.89V20H5v2h14v-2h-6v-3.88z"/></g>
+<g id="nature-people"><path d="M22.17 9.17c0-3.87-3.13-7-7-7s-7 3.13-7 7c0 3.47 2.52 6.34 5.83 6.89V20H6v-3h1v-4c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v4h1v5h16v-2h-3v-3.88c3.47-.41 6.17-3.36 6.17-6.95zM4.5 11c.83 0 1.5-.67 1.5-1.5S5.33 8 4.5 8 3 8.67 3 9.5 3.67 11 4.5 11z"/></g>
+<g id="navigate-before"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/></g>
+<g id="navigate-next"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></g>
+<g id="palette"><path d="M12 3c-4.97 0-9 4.03-9 9s4.03 9 9 9c.83 0 1.5-.67 1.5-1.5 0-.39-.15-.74-.39-1.01-.23-.26-.38-.61-.38-.99 0-.83.67-1.5 1.5-1.5H16c2.76 0 5-2.24 5-5 0-4.42-4.03-8-9-8zm-5.5 9c-.83 0-1.5-.67-1.5-1.5S5.67 9 6.5 9 8 9.67 8 10.5 7.33 12 6.5 12zm3-4C8.67 8 8 7.33 8 6.5S8.67 5 9.5 5s1.5.67 1.5 1.5S10.33 8 9.5 8zm5 0c-.83 0-1.5-.67-1.5-1.5S13.67 5 14.5 5s1.5.67 1.5 1.5S15.33 8 14.5 8zm3 4c-.83 0-1.5-.67-1.5-1.5S16.67 9 17.5 9s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="panorama"><path d="M23 18V6c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zM8.5 12.5l2.5 3.01L14.5 11l4.5 6H5l3.5-4.5z"/></g>
+<g id="panorama-fish-eye"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="panorama-horizontal"><path d="M20 6.54v10.91c-2.6-.77-5.28-1.16-8-1.16-2.72 0-5.4.39-8 1.16V6.54c2.6.77 5.28 1.16 8 1.16 2.72.01 5.4-.38 8-1.16M21.43 4c-.1 0-.2.02-.31.06C18.18 5.16 15.09 5.7 12 5.7c-3.09 0-6.18-.55-9.12-1.64-.11-.04-.22-.06-.31-.06-.34 0-.57.23-.57.63v14.75c0 .39.23.62.57.62.1 0 .2-.02.31-.06 2.94-1.1 6.03-1.64 9.12-1.64 3.09 0 6.18.55 9.12 1.64.11.04.21.06.31.06.33 0 .57-.23.57-.63V4.63c0-.4-.24-.63-.57-.63z"/></g>
+<g id="panorama-vertical"><path d="M19.94 21.12c-1.1-2.94-1.64-6.03-1.64-9.12 0-3.09.55-6.18 1.64-9.12.04-.11.06-.22.06-.31 0-.34-.23-.57-.63-.57H4.63c-.4 0-.63.23-.63.57 0 .1.02.2.06.31C5.16 5.82 5.71 8.91 5.71 12c0 3.09-.55 6.18-1.64 9.12-.05.11-.07.22-.07.31 0 .33.23.57.63.57h14.75c.39 0 .63-.24.63-.57-.01-.1-.03-.2-.07-.31zM6.54 20c.77-2.6 1.16-5.28 1.16-8 0-2.72-.39-5.4-1.16-8h10.91c-.77 2.6-1.16 5.28-1.16 8 0 2.72.39 5.4 1.16 8H6.54z"/></g>
+<g id="panorama-wide-angle"><path d="M12 6c2.45 0 4.71.2 7.29.64.47 1.78.71 3.58.71 5.36 0 1.78-.24 3.58-.71 5.36-2.58.44-4.84.64-7.29.64s-4.71-.2-7.29-.64C4.24 15.58 4 13.78 4 12c0-1.78.24-3.58.71-5.36C7.29 6.2 9.55 6 12 6m0-2c-2.73 0-5.22.24-7.95.72l-.93.16-.25.9C2.29 7.85 2 9.93 2 12s.29 4.15.87 6.22l.25.89.93.16c2.73.49 5.22.73 7.95.73s5.22-.24 7.95-.72l.93-.16.25-.89c.58-2.08.87-4.16.87-6.23s-.29-4.15-.87-6.22l-.25-.89-.93-.16C17.22 4.24 14.73 4 12 4z"/></g>
+<g id="photo"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></g>
+<g id="photo-album"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4zm0 15l3-3.86 2.14 2.58 3-3.86L18 19H6z"/></g>
+<g id="photo-camera"><circle cx="12" cy="12" r="3.2"/><path d="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/></g>
+<g id="photo-filter"><path d="M19.02 10v9H5V5h9V3H5.02c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2v-9h-2zM17 10l.94-2.06L20 7l-2.06-.94L17 4l-.94 2.06L14 7l2.06.94zm-3.75.75L12 8l-1.25 2.75L8 12l2.75 1.25L12 16l1.25-2.75L16 12z"/></g>
+<g id="photo-library"><path d="M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"/></g>
+<g id="photo-size-select-actual"><path d="M21 3H3C2 3 1 4 1 5v14c0 1.1.9 2 2 2h18c1 0 2-1 2-2V5c0-1-1-2-2-2zM5 17l3.5-4.5 2.5 3.01L14.5 11l4.5 6H5z"/></g>
+<g id="photo-size-select-large"><path d="M21 15h2v2h-2v-2zm0-4h2v2h-2v-2zm2 8h-2v2c1 0 2-1 2-2zM13 3h2v2h-2V3zm8 4h2v2h-2V7zm0-4v2h2c0-1-1-2-2-2zM1 7h2v2H1V7zm16-4h2v2h-2V3zm0 16h2v2h-2v-2zM3 3C2 3 1 4 1 5h2V3zm6 0h2v2H9V3zM5 3h2v2H5V3zm-4 8v8c0 1.1.9 2 2 2h12V11H1zm2 8l2.5-3.21 1.79 2.15 2.5-3.22L13 19H3z"/></g>
+<g id="photo-size-select-small"><path d="M23 15h-2v2h2v-2zm0-4h-2v2h2v-2zm0 8h-2v2c1 0 2-1 2-2zM15 3h-2v2h2V3zm8 4h-2v2h2V7zm-2-4v2h2c0-1-1-2-2-2zM3 21h8v-6H1v4c0 1.1.9 2 2 2zM3 7H1v2h2V7zm12 12h-2v2h2v-2zm4-16h-2v2h2V3zm0 16h-2v2h2v-2zM3 3C2 3 1 4 1 5h2V3zm0 8H1v2h2v-2zm8-8H9v2h2V3zM7 3H5v2h2V3z"/></g>
+<g id="picture-as-pdf"><path d="M20 2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-8.5 7.5c0 .83-.67 1.5-1.5 1.5H9v2H7.5V7H10c.83 0 1.5.67 1.5 1.5v1zm5 2c0 .83-.67 1.5-1.5 1.5h-2.5V7H15c.83 0 1.5.67 1.5 1.5v3zm4-3H19v1h1.5V11H19v2h-1.5V7h3v1.5zM9 9.5h1v-1H9v1zM4 6H2v14c0 1.1.9 2 2 2h14v-2H4V6zm10 5.5h1v-3h-1v3z"/></g>
+<g id="portrait"><path d="M12 12.25c1.24 0 2.25-1.01 2.25-2.25S13.24 7.75 12 7.75 9.75 8.76 9.75 10s1.01 2.25 2.25 2.25zm4.5 4c0-1.5-3-2.25-4.5-2.25s-4.5.75-4.5 2.25V17h9v-.75zM19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14z"/></g>
+<g id="remove-red-eye"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></g>
+<g id="rotate-90-degrees-ccw"><path d="M7.34 6.41L.86 12.9l6.49 6.48 6.49-6.48-6.5-6.49zM3.69 12.9l3.66-3.66L11 12.9l-3.66 3.66-3.65-3.66zm15.67-6.26C17.61 4.88 15.3 4 13 4V.76L8.76 5 13 9.24V6c1.79 0 3.58.68 4.95 2.05 2.73 2.73 2.73 7.17 0 9.9C16.58 19.32 14.79 20 13 20c-.97 0-1.94-.21-2.84-.61l-1.49 1.49C10.02 21.62 11.51 22 13 22c2.3 0 4.61-.88 6.36-2.64 3.52-3.51 3.52-9.21 0-12.72z"/></g>
+<g id="rotate-left"><path d="M7.11 8.53L5.7 7.11C4.8 8.27 4.24 9.61 4.07 11h2.02c.14-.87.49-1.72 1.02-2.47zM6.09 13H4.07c.17 1.39.72 2.73 1.62 3.89l1.41-1.42c-.52-.75-.87-1.59-1.01-2.47zm1.01 5.32c1.16.9 2.51 1.44 3.9 1.61V17.9c-.87-.15-1.71-.49-2.46-1.03L7.1 18.32zM13 4.07V1L8.45 5.55 13 10V6.09c2.84.48 5 2.94 5 5.91s-2.16 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93s-3.05-7.44-7-7.93z"/></g>
+<g id="rotate-right"><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11c-.17-1.39-.72-2.73-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"/></g>
+<g id="slideshow"><path d="M10 8v8l5-4-5-4zm9-5H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14z"/></g>
+<g id="straighten"><path d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z"/></g>
+<g id="style"><path d="M2.53 19.65l1.34.56v-9.03l-2.43 5.86c-.41 1.02.08 2.19 1.09 2.61zm19.5-3.7L17.07 3.98c-.31-.75-1.04-1.21-1.81-1.23-.26 0-.53.04-.79.15L7.1 5.95c-.75.31-1.21 1.03-1.23 1.8-.01.27.04.54.15.8l4.96 11.97c.31.76 1.05 1.22 1.83 1.23.26 0 .52-.05.77-.15l7.36-3.05c1.02-.42 1.51-1.59 1.09-2.6zM7.88 8.75c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-2 11c0 1.1.9 2 2 2h1.45l-3.45-8.34v6.34z"/></g>
+<g id="switch-camera"><path d="M20 4h-3.17L15 2H9L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 11.5V13H9v2.5L5.5 12 9 8.5V11h6V8.5l3.5 3.5-3.5 3.5z"/></g>
+<g id="switch-video"><path d="M18 9.5V6c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-3.5l4 4v-13l-4 4zm-5 6V13H7v2.5L3.5 12 7 8.5V11h6V8.5l3.5 3.5-3.5 3.5z"/></g>
+<g id="tag-faces"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></g>
+<g id="texture"><path d="M19.51 3.08L3.08 19.51c.09.34.27.65.51.9.25.24.56.42.9.51L20.93 4.49c-.19-.69-.73-1.23-1.42-1.41zM11.88 3L3 11.88v2.83L14.71 3h-2.83zM5 3c-1.1 0-2 .9-2 2v2l4-4H5zm14 18c.55 0 1.05-.22 1.41-.59.37-.36.59-.86.59-1.41v-2l-4 4h2zm-9.71 0h2.83L21 12.12V9.29L9.29 21z"/></g>
+<g id="timelapse"><path d="M16.24 7.76C15.07 6.59 13.54 6 12 6v6l-4.24 4.24c2.34 2.34 6.14 2.34 8.49 0 2.34-2.34 2.34-6.14-.01-8.48zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
+<g id="timer"><path d="M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.03-6.61l1.42-1.42c-.43-.51-.9-.99-1.41-1.41l-1.42 1.42C16.07 4.74 14.12 4 12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9 9-4.03 9-9c0-2.12-.74-4.07-1.97-5.61zM12 20c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="timer-10"><path d="M0 7.72V9.4l3-1V18h2V6h-.25L0 7.72zm23.78 6.65c-.14-.28-.35-.53-.63-.74-.28-.21-.61-.39-1.01-.53s-.85-.27-1.35-.38c-.35-.07-.64-.15-.87-.23-.23-.08-.41-.16-.55-.25-.14-.09-.23-.19-.28-.3-.05-.11-.08-.24-.08-.39 0-.14.03-.28.09-.41.06-.13.15-.25.27-.34.12-.1.27-.18.45-.24s.4-.09.64-.09c.25 0 .47.04.66.11.19.07.35.17.48.29.13.12.22.26.29.42.06.16.1.32.1.49h1.95c0-.39-.08-.75-.24-1.09-.16-.34-.39-.63-.69-.88-.3-.25-.66-.44-1.09-.59C21.49 9.07 21 9 20.46 9c-.51 0-.98.07-1.39.21-.41.14-.77.33-1.06.57-.29.24-.51.52-.67.84-.16.32-.23.65-.23 1.01s.08.69.23.96c.15.28.36.52.64.73.27.21.6.38.98.53.38.14.81.26 1.27.36.39.08.71.17.95.26s.43.19.57.29c.13.1.22.22.27.34.05.12.07.25.07.39 0 .32-.13.57-.4.77-.27.2-.66.29-1.17.29-.22 0-.43-.02-.64-.08-.21-.05-.4-.13-.56-.24-.17-.11-.3-.26-.41-.44-.11-.18-.17-.41-.18-.67h-1.89c0 .36.08.71.24 1.05.16.34.39.65.7.93.31.27.69.49 1.15.66.46.17.98.25 1.58.25.53 0 1.01-.06 1.44-.19.43-.13.8-.31 1.11-.54.31-.23.54-.51.71-.83.17-.32.25-.67.25-1.06-.02-.4-.09-.74-.24-1.02zm-9.96-7.32c-.34-.4-.75-.7-1.23-.88-.47-.18-1.01-.27-1.59-.27-.58 0-1.11.09-1.59.27-.48.18-.89.47-1.23.88-.34.41-.6.93-.79 1.59-.18.65-.28 1.45-.28 2.39v1.92c0 .94.09 1.74.28 2.39.19.66.45 1.19.8 1.6.34.41.75.71 1.23.89.48.18 1.01.28 1.59.28.59 0 1.12-.09 1.59-.28.48-.18.88-.48 1.22-.89.34-.41.6-.94.78-1.6.18-.65.28-1.45.28-2.39v-1.92c0-.94-.09-1.74-.28-2.39-.18-.66-.44-1.19-.78-1.59zm-.92 6.17c0 .6-.04 1.11-.12 1.53-.08.42-.2.76-.36 1.02-.16.26-.36.45-.59.57-.23.12-.51.18-.82.18-.3 0-.58-.06-.82-.18s-.44-.31-.6-.57c-.16-.26-.29-.6-.38-1.02-.09-.42-.13-.93-.13-1.53v-2.5c0-.6.04-1.11.13-1.52.09-.41.21-.74.38-1 .16-.25.36-.43.6-.55.24-.11.51-.17.81-.17.31 0 .58.06.81.17.24.11.44.29.6.55.16.25.29.58.37.99.08.41.13.92.13 1.52v2.51z"/></g>
+<g id="timer-3"><path d="M11.61 12.97c-.16-.24-.36-.46-.62-.65-.25-.19-.56-.35-.93-.48.3-.14.57-.3.8-.5.23-.2.42-.41.57-.64.15-.23.27-.46.34-.71.08-.24.11-.49.11-.73 0-.55-.09-1.04-.28-1.46-.18-.42-.44-.77-.78-1.06-.33-.28-.73-.5-1.2-.64-.45-.13-.97-.2-1.53-.2-.55 0-1.06.08-1.52.24-.47.17-.87.4-1.2.69-.33.29-.6.63-.78 1.03-.2.39-.29.83-.29 1.29h1.98c0-.26.05-.49.14-.69.09-.2.22-.38.38-.52.17-.14.36-.25.58-.33.22-.08.46-.12.73-.12.61 0 1.06.16 1.36.47.3.31.44.75.44 1.32 0 .27-.04.52-.12.74-.08.22-.21.41-.38.57-.17.16-.38.28-.63.37-.25.09-.55.13-.89.13H6.72v1.57H7.9c.34 0 .64.04.91.11.27.08.5.19.69.35.19.16.34.36.44.61.1.24.16.54.16.87 0 .62-.18 1.09-.53 1.42-.35.33-.84.49-1.45.49-.29 0-.56-.04-.8-.13-.24-.08-.44-.2-.61-.36-.17-.16-.3-.34-.39-.56-.09-.22-.14-.46-.14-.72H4.19c0 .55.11 1.03.32 1.45.21.42.5.77.86 1.05s.77.49 1.24.63.96.21 1.48.21c.57 0 1.09-.08 1.58-.23.49-.15.91-.38 1.26-.68.36-.3.64-.66.84-1.1.2-.43.3-.93.3-1.48 0-.29-.04-.58-.11-.86-.08-.25-.19-.51-.35-.76zm9.26 1.4c-.14-.28-.35-.53-.63-.74-.28-.21-.61-.39-1.01-.53s-.85-.27-1.35-.38c-.35-.07-.64-.15-.87-.23-.23-.08-.41-.16-.55-.25-.14-.09-.23-.19-.28-.3-.05-.11-.08-.24-.08-.39s.03-.28.09-.41c.06-.13.15-.25.27-.34.12-.1.27-.18.45-.24s.4-.09.64-.09c.25 0 .47.04.66.11.19.07.35.17.48.29.13.12.22.26.29.42.06.16.1.32.1.49h1.95c0-.39-.08-.75-.24-1.09-.16-.34-.39-.63-.69-.88-.3-.25-.66-.44-1.09-.59-.43-.15-.92-.22-1.46-.22-.51 0-.98.07-1.39.21-.41.14-.77.33-1.06.57-.29.24-.51.52-.67.84-.16.32-.23.65-.23 1.01s.08.68.23.96c.15.28.37.52.64.73.27.21.6.38.98.53.38.14.81.26 1.27.36.39.08.71.17.95.26s.43.19.57.29c.13.1.22.22.27.34.05.12.07.25.07.39 0 .32-.13.57-.4.77-.27.2-.66.29-1.17.29-.22 0-.43-.02-.64-.08-.21-.05-.4-.13-.56-.24-.17-.11-.3-.26-.41-.44-.11-.18-.17-.41-.18-.67h-1.89c0 .36.08.71.24 1.05.16.34.39.65.7.93.31.27.69.49 1.15.66.46.17.98.25 1.58.25.53 0 1.01-.06 1.44-.19.43-.13.8-.31 1.11-.54.31-.23.54-.51.71-.83.17-.32.25-.67.25-1.06-.02-.4-.09-.74-.24-1.02z"/></g>
+<g id="timer-off"><path d="M19.04 4.55l-1.42 1.42C16.07 4.74 14.12 4 12 4c-1.83 0-3.53.55-4.95 1.48l1.46 1.46C9.53 6.35 10.73 6 12 6c3.87 0 7 3.13 7 7 0 1.27-.35 2.47-.94 3.49l1.45 1.45C20.45 16.53 21 14.83 21 13c0-2.12-.74-4.07-1.97-5.61l1.42-1.42-1.41-1.42zM15 1H9v2h6V1zm-4 8.44l2 2V8h-2v1.44zM3.02 4L1.75 5.27 4.5 8.03C3.55 9.45 3 11.16 3 13c0 4.97 4.02 9 9 9 1.84 0 3.55-.55 4.98-1.5l2.5 2.5 1.27-1.27-7.71-7.71L3.02 4zM12 20c-3.87 0-7-3.13-7-7 0-1.28.35-2.48.95-3.52l9.56 9.56c-1.03.61-2.23.96-3.51.96z"/></g>
+<g id="tonality"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.94-.49-7-3.85-7-7.93s3.05-7.44 7-7.93v15.86zm2-15.86c1.03.13 2 .45 2.87.93H13v-.93zM13 7h5.24c.25.31.48.65.68 1H13V7zm0 3h6.74c.08.33.15.66.19 1H13v-1zm0 9.93V19h2.87c-.87.48-1.84.8-2.87.93zM18.24 17H13v-1h5.92c-.2.35-.43.69-.68 1zm1.5-3H13v-1h6.93c-.04.34-.11.67-.19 1z"/></g>
+<g id="transform"><path d="M22 18v-2H8V4h2L7 1 4 4h2v2H2v2h4v8c0 1.1.9 2 2 2h8v2h-2l3 3 3-3h-2v-2h4zM10 8h6v6h2V8c0-1.1-.9-2-2-2h-6v2z"/></g>
+<g id="tune"><path d="M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"/></g>
+<g id="view-comfy"><path d="M3 9h4V5H3v4zm0 5h4v-4H3v4zm5 0h4v-4H8v4zm5 0h4v-4h-4v4zM8 9h4V5H8v4zm5-4v4h4V5h-4zm5 9h4v-4h-4v4zM3 19h4v-4H3v4zm5 0h4v-4H8v4zm5 0h4v-4h-4v4zm5 0h4v-4h-4v4zm0-14v4h4V5h-4z"/></g>
+<g id="view-compact"><path d="M3 19h6v-7H3v7zm7 0h12v-7H10v7zM3 5v6h19V5H3z"/></g>
+<g id="vignette"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-9 15c-4.42 0-8-2.69-8-6s3.58-6 8-6 8 2.69 8 6-3.58 6-8 6z"/></g>
+<g id="wb-auto"><path d="M6.85 12.65h2.3L8 9l-1.15 3.65zM22 7l-1.2 6.29L19.3 7h-1.6l-1.49 6.29L15 7h-.76C12.77 5.17 10.53 4 8 4c-4.42 0-8 3.58-8 8s3.58 8 8 8c3.13 0 5.84-1.81 7.15-4.43l.1.43H17l1.5-6.1L20 16h1.75l2.05-9H22zm-11.7 9l-.7-2H6.4l-.7 2H3.8L7 7h2l3.2 9h-1.9z"/></g>
+<g id="wb-cloudy"><path d="M19.36 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.64-4.96z"/></g>
+<g id="wb-incandescent"><path d="M3.55 18.54l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8zM11 22.45h2V19.5h-2v2.95zM4 10.5H1v2h3v-2zm11-4.19V1.5H9v4.81C7.21 7.35 6 9.28 6 11.5c0 3.31 2.69 6 6 6s6-2.69 6-6c0-2.22-1.21-4.15-3-5.19zm5 4.19v2h3v-2h-3zm-2.76 7.66l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4z"/></g>
+<g id="wb-iridescent"><path d="M5 14.5h14v-6H5v6zM11 .55V3.5h2V.55h-2zm8.04 2.5l-1.79 1.79 1.41 1.41 1.8-1.79-1.42-1.41zM13 22.45V19.5h-2v2.95h2zm7.45-3.91l-1.8-1.79-1.41 1.41 1.79 1.8 1.42-1.42zM3.55 4.46l1.79 1.79 1.41-1.41-1.79-1.79-1.41 1.41zm1.41 15.49l1.79-1.8-1.41-1.41-1.79 1.79 1.41 1.42z"/></g>
+<g id="wb-sunny"><path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/index.html
new file mode 100644
index 00000000000..fa5b89bbef7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.d.ts
new file mode 100644
index 00000000000..4f327505650
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.d.ts
@@ -0,0 +1,43 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
+/**
+ * `iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set.
+ *
+ * The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project.
+ *
+ * Example loading icon set:
+ *
+ * <link rel="import" href="../iron-icons/maps-icons.html">
+ *
+ * To use an icon from one of these sets, first prefix your `iron-icon` with the icon set name, followed by a colon, ":", and then the icon id.
+ *
+ * Example using the directions-bus icon from the maps icon set:
+ *
+ * <iron-icon icon="maps:directions-bus"></iron-icon>
+ *
+ * To load a subset of icons from one of the default `iron-icons` sets, you can
+ * use the [poly-icon](https://poly-icon.appspot.com/) tool. It allows you
+ * to select individual icons, and creates an iconset from them that you can
+ * use directly in your elements.
+ *
+ * See [iron-icon](#iron-icon) for more information about working with icons.
+ *
+ * See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for more information about how to create a custom iconset.
+ */
+interface IronIconsElement extends Polymer.Element {
+}
+
+interface HTMLElementTagNameMap {
+ "iron-icons": IronIconsElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.html
new file mode 100644
index 00000000000..739131cc92b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/iron-icons.html
@@ -0,0 +1,353 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<!--
+
+`iron-icons` is a utility import that includes the definition for the `iron-icon` element, `iron-iconset-svg` element, as well as an import for the default icon set.
+
+The `iron-icons` directory also includes imports for additional icon sets that can be loaded into your project.
+
+Example loading icon set:
+
+ <link rel="import" href="../iron-icons/maps-icons.html">
+
+To use an icon from one of these sets, first prefix your `iron-icon` with the icon set name, followed by a colon, ":", and then the icon id.
+
+Example using the directions-bus icon from the maps icon set:
+
+ <iron-icon icon="maps:directions-bus"></iron-icon>
+
+ To load a subset of icons from one of the default `iron-icons` sets, you can
+ use the [poly-icon](https://poly-icon.appspot.com/) tool. It allows you
+ to select individual icons, and creates an iconset from them that you can
+ use directly in your elements.
+
+See [iron-icon](#iron-icon) for more information about working with icons.
+
+See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for more information about how to create a custom iconset.
+
+@group Iron Elements
+@pseudoElement iron-icons
+@demo demo/index.html
+-->
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="icons" size="24">
+<svg><defs>
+<g id="3d-rotation"><path d="M7.52 21.48C4.25 19.94 1.91 16.76 1.55 13H.05C.56 19.16 5.71 24 12 24l.66-.03-3.81-3.81-1.33 1.32zm.89-6.52c-.19 0-.37-.03-.52-.08-.16-.06-.29-.13-.4-.24-.11-.1-.2-.22-.26-.37-.06-.14-.09-.3-.09-.47h-1.3c0 .36.07.68.21.95.14.27.33.5.56.69.24.18.51.32.82.41.3.1.62.15.96.15.37 0 .72-.05 1.03-.15.32-.1.6-.25.83-.44s.42-.43.55-.72c.13-.29.2-.61.2-.97 0-.19-.02-.38-.07-.56-.05-.18-.12-.35-.23-.51-.1-.16-.24-.3-.4-.43-.17-.13-.37-.23-.61-.31.2-.09.37-.2.52-.33.15-.13.27-.27.37-.42.1-.15.17-.3.22-.46.05-.16.07-.32.07-.48 0-.36-.06-.68-.18-.96-.12-.28-.29-.51-.51-.69-.2-.19-.47-.33-.77-.43C9.1 8.05 8.76 8 8.39 8c-.36 0-.69.05-1 .16-.3.11-.57.26-.79.45-.21.19-.38.41-.51.67-.12.26-.18.54-.18.85h1.3c0-.17.03-.32.09-.45s.14-.25.25-.34c.11-.09.23-.17.38-.22.15-.05.3-.08.48-.08.4 0 .7.1.89.31.19.2.29.49.29.86 0 .18-.03.34-.08.49-.05.15-.14.27-.25.37-.11.1-.25.18-.41.24-.16.06-.36.09-.58.09H7.5v1.03h.77c.22 0 .42.02.6.07s.33.13.45.23c.12.11.22.24.29.4.07.16.1.35.1.57 0 .41-.12.72-.35.93-.23.23-.55.33-.95.33zm8.55-5.92c-.32-.33-.7-.59-1.14-.77-.43-.18-.92-.27-1.46-.27H12v8h2.3c.55 0 1.06-.09 1.51-.27.45-.18.84-.43 1.16-.76.32-.33.57-.73.74-1.19.17-.47.26-.99.26-1.57v-.4c0-.58-.09-1.1-.26-1.57-.18-.47-.43-.87-.75-1.2zm-.39 3.16c0 .42-.05.79-.14 1.13-.1.33-.24.62-.43.85-.19.23-.43.41-.71.53-.29.12-.62.18-.99.18h-.91V9.12h.97c.72 0 1.27.23 1.64.69.38.46.57 1.12.57 1.99v.4zM12 0l-.66.03 3.81 3.81 1.33-1.33c3.27 1.55 5.61 4.72 5.96 8.48h1.5C23.44 4.84 18.29 0 12 0z"/></g>
+<g id="accessibility"><path d="M12 2c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm9 7h-6v13h-2v-6h-2v6H9V9H3V7h18v2z"/></g>
+<g id="accessible"><circle cx="12" cy="4" r="2"/><path d="M19 13v-2c-1.54.02-3.09-.75-4.07-1.83l-1.29-1.43c-.17-.19-.38-.34-.61-.45-.01 0-.01-.01-.02-.01H13c-.35-.2-.75-.3-1.19-.26C10.76 7.11 10 8.04 10 9.09V15c0 1.1.9 2 2 2h5v5h2v-5.5c0-1.1-.9-2-2-2h-3v-3.45c1.29 1.07 3.25 1.94 5 1.95zm-6.17 5c-.41 1.16-1.52 2-2.83 2-1.66 0-3-1.34-3-3 0-1.31.84-2.41 2-2.83V12.1c-2.28.46-4 2.48-4 4.9 0 2.76 2.24 5 5 5 2.42 0 4.44-1.72 4.9-4h-2.07z"/></g>
+<g id="account-balance"><path d="M4 10v7h3v-7H4zm6 0v7h3v-7h-3zM2 22h19v-3H2v3zm14-12v7h3v-7h-3zm-4.5-9L2 6v2h19V6l-9.5-5z"/></g>
+<g id="account-balance-wallet"><path d="M21 18v1c0 1.1-.9 2-2 2H5c-1.11 0-2-.9-2-2V5c0-1.1.89-2 2-2h14c1.1 0 2 .9 2 2v1h-9c-1.11 0-2 .9-2 2v8c0 1.1.89 2 2 2h9zm-9-2h10V8H12v8zm4-2.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="account-box"><path d="M3 5v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2H5c-1.11 0-2 .9-2 2zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z"/></g>
+<g id="account-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z"/></g>
+<g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></g>
+<g id="add-alert"><path d="M10.01 21.01c0 1.1.89 1.99 1.99 1.99s1.99-.89 1.99-1.99h-3.98zm8.87-4.19V11c0-3.25-2.25-5.97-5.29-6.69v-.72C13.59 2.71 12.88 2 12 2s-1.59.71-1.59 1.59v.72C7.37 5.03 5.12 7.75 5.12 11v5.82L3 18.94V20h18v-1.06l-2.12-2.12zM16 13.01h-3v3h-2v-3H8V11h3V8h2v3h3v2.01z"/></g>
+<g id="add-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></g>
+<g id="add-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></g>
+<g id="add-circle-outline"><path d="M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="add-shopping-cart"><path d="M11 9h2V6h3V4h-3V1h-2v3H8v2h3v3zm-4 9c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zm10 0c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2zm-9.83-3.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.86-7.01L19.42 4h-.01l-1.1 2-2.76 5H8.53l-.13-.27L6.16 6l-.95-2-.94-2H1v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.13 0-.25-.11-.25-.25z"/></g>
+<g id="alarm"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="alarm-add"><path d="M7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm1-11h-2v3H8v2h3v3h2v-3h3v-2h-3V9z"/></g>
+<g id="alarm-off"><path d="M12 6c3.87 0 7 3.13 7 7 0 .84-.16 1.65-.43 2.4l1.52 1.52c.58-1.19.91-2.51.91-3.92 0-4.97-4.03-9-9-9-1.41 0-2.73.33-3.92.91L9.6 6.43C10.35 6.16 11.16 6 12 6zm10-.28l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM2.92 2.29L1.65 3.57 2.98 4.9l-1.11.93 1.42 1.42 1.11-.94.8.8C3.83 8.69 3 10.75 3 13c0 4.97 4.02 9 9 9 2.25 0 4.31-.83 5.89-2.2l2.2 2.2 1.27-1.27L3.89 3.27l-.97-.98zm13.55 16.1C15.26 19.39 13.7 20 12 20c-3.87 0-7-3.13-7-7 0-1.7.61-3.26 1.61-4.47l9.86 9.86zM8.02 3.28L6.6 1.86l-.86.71 1.42 1.42.86-.71z"/></g>
+<g id="alarm-on"><path d="M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7zm-1.46-5.47L8.41 12.4l-1.06 1.06 3.18 3.18 6-6-1.06-1.06-4.93 4.95z"/></g>
+<g id="all-out"><path d="M16.21 4.16l4 4v-4zm4 12l-4 4h4zm-12 4l-4-4v4zm-4-12l4-4h-4zm12.95-.95c-2.73-2.73-7.17-2.73-9.9 0s-2.73 7.17 0 9.9 7.17 2.73 9.9 0 2.73-7.16 0-9.9zm-1.1 8.8c-2.13 2.13-5.57 2.13-7.7 0s-2.13-5.57 0-7.7 5.57-2.13 7.7 0 2.13 5.57 0 7.7z"/></g>
+<g id="android"><path d="M6 18c0 .55.45 1 1 1h1v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h2v3.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V19h1c.55 0 1-.45 1-1V8H6v10zM3.5 8C2.67 8 2 8.67 2 9.5v7c0 .83.67 1.5 1.5 1.5S5 17.33 5 16.5v-7C5 8.67 4.33 8 3.5 8zm17 0c-.83 0-1.5.67-1.5 1.5v7c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-7c0-.83-.67-1.5-1.5-1.5zm-4.97-5.84l1.3-1.3c.2-.2.2-.51 0-.71-.2-.2-.51-.2-.71 0l-1.48 1.48C13.85 1.23 12.95 1 12 1c-.96 0-1.86.23-2.66.63L7.85.15c-.2-.2-.51-.2-.71 0-.2.2-.2.51 0 .71l1.31 1.31C6.97 3.26 6 5.01 6 7h12c0-1.99-.97-3.75-2.47-4.84zM10 5H9V4h1v1zm5 0h-1V4h1v1z"/></g>
+<g id="announcement"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 9h-2V5h2v6zm0 4h-2v-2h2v2z"/></g>
+<g id="apps"><path d="M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4zm6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z"/></g>
+<g id="archive"><path d="M20.54 5.23l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.16.55L3.46 5.23C3.17 5.57 3 6.02 3 6.5V19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.48-.17-.93-.46-1.27zM12 17.5L6.5 12H10v-2h4v2h3.5L12 17.5zM5.12 5l.81-1h12l.94 1H5.12z"/></g>
+<g id="arrow-back"><path d="M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"/></g>
+<g id="arrow-downward"><path d="M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"/></g>
+<g id="arrow-drop-down"><path d="M7 10l5 5 5-5z"/></g>
+<g id="arrow-drop-down-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 12l-4-4h8l-4 4z"/></g>
+<g id="arrow-drop-up"><path d="M7 14l5-5 5 5z"/></g>
+<g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"/></g>
+<g id="arrow-upward"><path d="M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"/></g>
+<g id="aspect-ratio"><path d="M19 12h-2v3h-3v2h5v-5zM7 9h3V7H5v5h2V9zm14-6H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"/></g>
+<g id="assessment"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></g>
+<g id="assignment"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm2 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"/></g>
+<g id="assignment-ind"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 4c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1.4c0-2 4-3.1 6-3.1s6 1.1 6 3.1V19z"/></g>
+<g id="assignment-late"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-6 15h-2v-2h2v2zm0-4h-2V8h2v6zm-1-9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"/></g>
+<g id="assignment-return"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm4 12h-4v3l-5-5 5-5v3h4v4z"/></g>
+<g id="assignment-returned"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm0 15l-5-5h3V9h4v4h3l-5 5z"/></g>
+<g id="assignment-turned-in"><path d="M19 3h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm-2 14l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/></g>
+<g id="attachment"><path d="M2 12.5C2 9.46 4.46 7 7.5 7H18c2.21 0 4 1.79 4 4s-1.79 4-4 4H9.5C8.12 15 7 13.88 7 12.5S8.12 10 9.5 10H17v2H9.41c-.55 0-.55 1 0 1H18c1.1 0 2-.9 2-2s-.9-2-2-2H7.5C5.57 9 4 10.57 4 12.5S5.57 16 7.5 16H17v2H7.5C4.46 18 2 15.54 2 12.5z"/></g>
+<g id="autorenew"><path d="M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"/></g>
+<g id="backspace"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59 12.59 12 9 8.41 10.41 7 14 10.59 17.59 7 19 8.41 15.41 12 19 15.59z"/></g>
+<g id="backup"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"/></g>
+<g id="block"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"/></g>
+<g id="book"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"/></g>
+<g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z"/></g>
+<g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"/></g>
+<g id="bug-report"><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5c-.49 0-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-6 8h-4v-2h4v2zm0-4h-4v-2h4v2z"/></g>
+<g id="build"><path d="M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"/></g>
+<g id="cached"><path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l4 4 4-4H6z"/></g>
+<g id="camera-enhance"><path d="M9 3L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2h-3.17L15 3H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-1l1.25-2.75L16 13l-2.75-1.25L12 9l-1.25 2.75L8 13l2.75 1.25z"/></g>
+<g id="cancel"><path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"/></g>
+<g id="card-giftcard"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"/></g>
+<g id="card-membership"><path d="M20 2H4c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h4v5l4-2 4 2v-5h4c1.11 0 2-.89 2-2V4c0-1.11-.89-2-2-2zm0 13H4v-2h16v2zm0-5H4V4h16v6z"/></g>
+<g id="card-travel"><path d="M20 6h-3V4c0-1.11-.89-2-2-2H9c-1.11 0-2 .89-2 2v2H4c-1.11 0-2 .89-2 2v11c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zM9 4h6v2H9V4zm11 15H4v-2h16v2zm0-5H4V8h3v2h2V8h6v2h2V8h3v6z"/></g>
+<g id="change-history"><path d="M12 7.77L18.39 18H5.61L12 7.77M12 4L2 20h20L12 4z"/></g>
+<g id="check"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></g>
+<g id="check-box"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></g>
+<g id="check-box-outline-blank"><path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></g>
+<g id="check-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></g>
+<g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/></g>
+<g id="chevron-right"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></g>
+<g id="chrome-reader-mode"><path d="M13 12h7v1.5h-7zm0-2.5h7V11h-7zm0 5h7V16h-7zM21 4H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 15h-9V6h9v13z"/></g>
+<g id="class"><path d="M18 2H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 4h5v8l-2.5-1.5L6 12V4z"/></g>
+<g id="clear"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></g>
+<g id="close"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></g>
+<g id="cloud"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"/></g>
+<g id="cloud-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.5 14H8c-1.66 0-3-1.34-3-3s1.34-3 3-3l.14.01C8.58 8.28 10.13 7 12 7c2.21 0 4 1.79 4 4h.5c1.38 0 2.5 1.12 2.5 2.5S17.88 16 16.5 16z"/></g>
+<g id="cloud-done"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM10 17l-3.5-3.5 1.41-1.41L10 14.17 15.18 9l1.41 1.41L10 17z"/></g>
+<g id="cloud-download"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM17 13l-5 5-5-5h3V9h4v4h3z"/></g>
+<g id="cloud-off"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4c-1.48 0-2.85.43-4.01 1.17l1.46 1.46C10.21 6.23 11.08 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3 0 1.13-.64 2.11-1.56 2.62l1.45 1.45C23.16 18.16 24 16.68 24 15c0-2.64-2.05-4.78-4.65-4.96zM3 5.27l2.75 2.74C2.56 8.15 0 10.77 0 14c0 3.31 2.69 6 6 6h11.73l2 2L21 20.73 4.27 4 3 5.27zM7.73 10l8 8H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h1.73z"/></g>
+<g id="cloud-queue"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4s1.79-4 4-4h.71C7.37 7.69 9.48 6 12 6c3.04 0 5.5 2.46 5.5 5.5v.5H19c1.66 0 3 1.34 3 3s-1.34 3-3 3z"/></g>
+<g id="cloud-upload"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"/></g>
+<g id="code"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></g>
+<g id="compare-arrows"><path d="M9.01 14H2v2h7.01v3L13 15l-3.99-4v3zm5.98-1v-3H22V8h-7.01V5L11 9l3.99 4z"/></g>
+<g id="content-copy"><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></g>
+<g id="content-cut"><path d="M9.64 7.64c.23-.5.36-1.05.36-1.64 0-2.21-1.79-4-4-4S2 3.79 2 6s1.79 4 4 4c.59 0 1.14-.13 1.64-.36L10 12l-2.36 2.36C7.14 14.13 6.59 14 6 14c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4c0-.59-.13-1.14-.36-1.64L12 14l7 7h3v-1L9.64 7.64zM6 8c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm0 12c-1.1 0-2-.89-2-2s.9-2 2-2 2 .89 2 2-.9 2-2 2zm6-7.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5.5.22.5.5-.22.5-.5.5zM19 3l-6 6 2 2 7-7V3z"/></g>
+<g id="content-paste"><path d="M19 2h-4.18C14.4.84 13.3 0 12 0c-1.3 0-2.4.84-2.82 2H5c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 0c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm7 18H5V4h2v3h10V4h2v16z"/></g>
+<g id="copyright"><path d="M10.08 10.86c.05-.33.16-.62.3-.87s.34-.46.59-.62c.24-.15.54-.22.91-.23.23.01.44.05.63.13.2.09.38.21.52.36s.25.33.34.53.13.42.14.64h1.79c-.02-.47-.11-.9-.28-1.29s-.4-.73-.7-1.01-.66-.5-1.08-.66-.88-.23-1.39-.23c-.65 0-1.22.11-1.7.34s-.88.53-1.2.92-.56.84-.71 1.36S8 11.29 8 11.87v.27c0 .58.08 1.12.23 1.64s.39.97.71 1.35.72.69 1.2.91 1.05.34 1.7.34c.47 0 .91-.08 1.32-.23s.77-.36 1.08-.63.56-.58.74-.94.29-.74.3-1.15h-1.79c-.01.21-.06.4-.15.58s-.21.33-.36.46-.32.23-.52.3c-.19.07-.39.09-.6.1-.36-.01-.66-.08-.89-.23-.25-.16-.45-.37-.59-.62s-.25-.55-.3-.88-.08-.67-.08-1v-.27c0-.35.03-.68.08-1.01zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></g>
+<g id="create-new-folder"><path d="M20 6h-8l-2-2H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-1 8h-3v3h-2v-3h-3v-2h3V9h2v3h3v2z"/></g>
+<g id="credit-card"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"/></g>
+<g id="dashboard"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z"/></g>
+<g id="date-range"><path d="M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z"/></g>
+<g id="delete"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"/></g>
+<g id="delete-forever"><path d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"/></g>
+<g id="delete-sweep"><path d="M15 16h4v2h-4zm0-8h7v2h-7zm0 4h6v2h-6zM3 18c0 1.1.9 2 2 2h6c1.1 0 2-.9 2-2V8H3v10zM14 5h-3l-1-1H6L5 5H2v2h12z"/></g>
+<g id="description"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/></g>
+<g id="dns"><path d="M20 13H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zM7 19c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM20 3H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h16c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1zM7 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+<g id="done"><path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/></g>
+<g id="done-all"><path d="M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"/></g>
+<g id="donut-large"><path d="M11 5.08V2c-5 .5-9 4.81-9 10s4 9.5 9 10v-3.08c-3-.48-6-3.4-6-6.92s3-6.44 6-6.92zM18.97 11H22c-.47-5-4-8.53-9-9v3.08C16 5.51 18.54 8 18.97 11zM13 18.92V22c5-.47 8.53-4 9-9h-3.03c-.43 3-2.97 5.49-5.97 5.92z"/></g>
+<g id="donut-small"><path d="M11 9.16V2c-5 .5-9 4.79-9 10s4 9.5 9 10v-7.16c-1-.41-2-1.52-2-2.84s1-2.43 2-2.84zM14.86 11H22c-.48-4.75-4-8.53-9-9v7.16c1 .3 1.52.98 1.86 1.84zM13 14.84V22c5-.47 8.52-4.25 9-9h-7.14c-.34.86-.86 1.54-1.86 1.84z"/></g>
+<g id="drafts"><path d="M21.99 8c0-.72-.37-1.35-.94-1.7L12 1 2.95 6.3C2.38 6.65 2 7.28 2 8v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2l-.01-10zM12 13L3.74 7.84 12 3l8.26 4.84L12 13z"/></g>
+<g id="eject"><path d="M5 17h14v2H5zm7-12L5.33 15h13.34z"/></g>
+<g id="error"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></g>
+<g id="error-outline"><path d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
+<g id="euro-symbol"><path d="M15 18.5c-2.51 0-4.68-1.42-5.76-3.5H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24C10.32 6.92 12.5 5.5 15 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3C19.41 3.87 17.3 3 15 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06c-.04.33-.06.66-.06 1 0 .34.02.67.06 1H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z"/></g>
+<g id="event"><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"/></g>
+<g id="event-seat"><path d="M4 18v3h3v-3h10v3h3v-6H4zm15-8h3v3h-3zM2 10h3v3H2zm15 3H7V5c0-1.1.9-2 2-2h6c1.1 0 2 .9 2 2v8z"/></g>
+<g id="exit-to-app"><path d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/></g>
+<g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"/></g>
+<g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z"/></g>
+<g id="explore"><path d="M12 10.9c-.61 0-1.1.49-1.1 1.1s.49 1.1 1.1 1.1c.61 0 1.1-.49 1.1-1.1s-.49-1.1-1.1-1.1zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm2.19 12.19L6 18l3.81-8.19L18 6l-3.81 8.19z"/></g>
+<g id="extension"><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></g>
+<g id="face"><path d="M9 11.75c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25zm6 0c-.69 0-1.25.56-1.25 1.25s.56 1.25 1.25 1.25 1.25-.56 1.25-1.25-.56-1.25-1.25-1.25zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8 0-.29.02-.58.05-.86 2.36-1.05 4.23-2.98 5.21-5.37C11.07 8.33 14.05 10 17.42 10c.78 0 1.53-.09 2.25-.26.21.71.33 1.47.33 2.26 0 4.41-3.59 8-8 8z"/></g>
+<g id="favorite"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></g>
+<g id="favorite-border"><path d="M16.5 3c-1.74 0-3.41.81-4.5 2.09C10.91 3.81 9.24 3 7.5 3 4.42 3 2 5.42 2 8.5c0 3.78 3.4 6.86 8.55 11.54L12 21.35l1.45-1.32C18.6 15.36 22 12.28 22 8.5 22 5.42 19.58 3 16.5 3zm-4.4 15.55l-.1.1-.1-.1C7.14 14.24 4 11.39 4 8.5 4 6.5 5.5 5 7.5 5c1.54 0 3.04.99 3.57 2.36h1.87C13.46 5.99 14.96 5 16.5 5c2 0 3.5 1.5 3.5 3.5 0 2.89-3.14 5.74-7.9 10.05z"/></g>
+<g id="feedback"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"/></g>
+<g id="file-download"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></g>
+<g id="file-upload"><path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z"/></g>
+<g id="filter-list"><path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/></g>
+<g id="find-in-page"><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"/></g>
+<g id="find-replace"><path d="M11 6c1.38 0 2.63.56 3.54 1.46L12 10h6V4l-2.05 2.05C14.68 4.78 12.93 4 11 4c-3.53 0-6.43 2.61-6.92 6H6.1c.46-2.28 2.48-4 4.9-4zm5.64 9.14c.66-.9 1.12-1.97 1.28-3.14H15.9c-.46 2.28-2.48 4-4.9 4-1.38 0-2.63-.56-3.54-1.46L10 12H4v6l2.05-2.05C7.32 17.22 9.07 18 11 18c1.55 0 2.98-.51 4.14-1.36L20 21.49 21.49 20l-4.85-4.86z"/></g>
+<g id="fingerprint"><path d="M17.81 4.47c-.08 0-.16-.02-.23-.06C15.66 3.42 14 3 12.01 3c-1.98 0-3.86.47-5.57 1.41-.24.13-.54.04-.68-.2-.13-.24-.04-.55.2-.68C7.82 2.52 9.86 2 12.01 2c2.13 0 3.99.47 6.03 1.52.25.13.34.43.21.67-.09.18-.26.28-.44.28zM3.5 9.72c-.1 0-.2-.03-.29-.09-.23-.16-.28-.47-.12-.7.99-1.4 2.25-2.5 3.75-3.27C9.98 4.04 14 4.03 17.15 5.65c1.5.77 2.76 1.86 3.75 3.25.16.22.11.54-.12.7-.23.16-.54.11-.7-.12-.9-1.26-2.04-2.25-3.39-2.94-2.87-1.47-6.54-1.47-9.4.01-1.36.7-2.5 1.7-3.4 2.96-.08.14-.23.21-.39.21zm6.25 12.07c-.13 0-.26-.05-.35-.15-.87-.87-1.34-1.43-2.01-2.64-.69-1.23-1.05-2.73-1.05-4.34 0-2.97 2.54-5.39 5.66-5.39s5.66 2.42 5.66 5.39c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-2.42-2.09-4.39-4.66-4.39-2.57 0-4.66 1.97-4.66 4.39 0 1.44.32 2.77.93 3.85.64 1.15 1.08 1.64 1.85 2.42.19.2.19.51 0 .71-.11.1-.24.15-.37.15zm7.17-1.85c-1.19 0-2.24-.3-3.1-.89-1.49-1.01-2.38-2.65-2.38-4.39 0-.28.22-.5.5-.5s.5.22.5.5c0 1.41.72 2.74 1.94 3.56.71.48 1.54.71 2.54.71.24 0 .64-.03 1.04-.1.27-.05.53.13.58.41.05.27-.13.53-.41.58-.57.11-1.07.12-1.21.12zM14.91 22c-.04 0-.09-.01-.13-.02-1.59-.44-2.63-1.03-3.72-2.1-1.4-1.39-2.17-3.24-2.17-5.22 0-1.62 1.38-2.94 3.08-2.94 1.7 0 3.08 1.32 3.08 2.94 0 1.07.93 1.94 2.08 1.94s2.08-.87 2.08-1.94c0-3.77-3.25-6.83-7.25-6.83-2.84 0-5.44 1.58-6.61 4.03-.39.81-.59 1.76-.59 2.8 0 .78.07 2.01.67 3.61.1.26-.03.55-.29.64-.26.1-.55-.04-.64-.29-.49-1.31-.73-2.61-.73-3.96 0-1.2.23-2.29.68-3.24 1.33-2.79 4.28-4.6 7.51-4.6 4.55 0 8.25 3.51 8.25 7.83 0 1.62-1.38 2.94-3.08 2.94s-3.08-1.32-3.08-2.94c0-1.07-.93-1.94-2.08-1.94s-2.08.87-2.08 1.94c0 1.71.66 3.31 1.87 4.51.95.94 1.86 1.46 3.27 1.85.27.07.42.35.35.61-.05.23-.26.38-.47.38z"/></g>
+<g id="first-page"><path d="M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z"/></g>
+<g id="flag"><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"/></g>
+<g id="flight-land"><path d="M2.5 19h19v2h-19zm7.18-5.73l4.35 1.16 5.31 1.42c.8.21 1.62-.26 1.84-1.06.21-.8-.26-1.62-1.06-1.84l-5.31-1.42-2.76-9.02L10.12 2v8.28L5.15 8.95l-.93-2.32-1.45-.39v5.17l1.6.43 5.31 1.43z"/></g>
+<g id="flight-takeoff"><path d="M2.5 19h19v2h-19zm19.57-9.36c-.21-.8-1.04-1.28-1.84-1.06L14.92 10l-6.9-6.43-1.93.51 4.14 7.17-4.97 1.33-1.97-1.54-1.45.39 1.82 3.16.77 1.33 1.6-.43 5.31-1.42 4.35-1.16L21 11.49c.81-.23 1.28-1.05 1.07-1.85z"/></g>
+<g id="flip-to-back"><path d="M9 7H7v2h2V7zm0 4H7v2h2v-2zm0-8c-1.11 0-2 .9-2 2h2V3zm4 12h-2v2h2v-2zm6-12v2h2c0-1.1-.9-2-2-2zm-6 0h-2v2h2V3zM9 17v-2H7c0 1.1.89 2 2 2zm10-4h2v-2h-2v2zm0-4h2V7h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zM5 7H3v12c0 1.1.89 2 2 2h12v-2H5V7zm10-2h2V3h-2v2zm0 12h2v-2h-2v2z"/></g>
+<g id="flip-to-front"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z"/></g>
+<g id="folder"><path d="M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/></g>
+<g id="folder-open"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 12H4V8h16v10z"/></g>
+<g id="folder-shared"><path d="M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-5 3c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm4 8h-8v-1c0-1.33 2.67-2 4-2s4 .67 4 2v1z"/></g>
+<g id="font-download"><path d="M9.93 13.5h4.14L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.12 3H5.96l5.11-13h1.86l5.11 13h-2.09z"/></g>
+<g id="forward"><path d="M12 8V4l8 8-8 8v-4H4V8z"/></g>
+<g id="fullscreen"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></g>
+<g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/></g>
+<g id="g-translate"><path d="M20 5h-9.12L10 2H4c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h7l1 3h8c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zM7.17 14.59c-2.25 0-4.09-1.83-4.09-4.09s1.83-4.09 4.09-4.09c1.04 0 1.99.37 2.74 1.07l.07.06-1.23 1.18-.06-.05c-.29-.27-.78-.59-1.52-.59-1.31 0-2.38 1.09-2.38 2.42s1.07 2.42 2.38 2.42c1.37 0 1.96-.87 2.12-1.46H7.08V9.91h3.95l.01.07c.04.21.05.4.05.61 0 2.35-1.61 4-3.92 4zm6.03-1.71c.33.6.74 1.18 1.19 1.7l-.54.53-.65-2.23zm.77-.76h-.99l-.31-1.04h3.99s-.34 1.31-1.56 2.74c-.52-.62-.89-1.23-1.13-1.7zM21 20c0 .55-.45 1-1 1h-7l2-2-.81-2.77.92-.92L17.79 18l.73-.73-2.71-2.68c.9-1.03 1.6-2.25 1.92-3.51H19v-1.04h-3.64V9h-1.04v1.04h-1.96L11.18 6H20c.55 0 1 .45 1 1v13z"/></g>
+<g id="gavel"><path d="M1 21h12v2H1zM5.245 8.07l2.83-2.827 14.14 14.142-2.828 2.828zM12.317 1l5.657 5.656-2.83 2.83-5.654-5.66zM3.825 9.485l5.657 5.657-2.828 2.828-5.657-5.657z"/></g>
+<g id="gesture"><path d="M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52-.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07-.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-3.78.64-5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06 2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.85-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25c-.36.36-.66.66-.88.93l1.75 1.71zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2 2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48z"/></g>
+<g id="get-app"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></g>
+<g id="gif"><path d="M11.5 9H13v6h-1.5zM9 9H6c-.6 0-1 .5-1 1v4c0 .5.4 1 1 1h3c.6 0 1-.5 1-1v-2H8.5v1.5h-2v-3H10V10c0-.5-.4-1-1-1zm10 1.5V9h-4.5v6H16v-2h2v-1.5h-2v-1z"/></g>
+<g id="grade"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></g>
+<g id="group-work"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM8 17.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5zM9.5 8c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5S9.5 9.38 9.5 8zm6.5 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></g>
+<g id="help"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z"/></g>
+<g id="help-outline"><path d="M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"/></g>
+<g id="highlight-off"><path d="M14.59 8L12 10.59 9.41 8 8 9.41 10.59 12 8 14.59 9.41 16 12 13.41 14.59 16 16 14.59 13.41 12 16 9.41 14.59 8zM12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="history"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></g>
+<g id="home"><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></g>
+<g id="hourglass-empty"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z"/></g>
+<g id="hourglass-full"><path d="M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6z"/></g>
+<g id="http"><path d="M4.5 11h-2V9H1v6h1.5v-2.5h2V15H6V9H4.5v2zm2.5-.5h1.5V15H10v-4.5h1.5V9H7v1.5zm5.5 0H14V15h1.5v-4.5H17V9h-4.5v1.5zm9-1.5H18v6h1.5v-2h2c.8 0 1.5-.7 1.5-1.5v-1c0-.8-.7-1.5-1.5-1.5zm0 2.5h-2v-1h2v1z"/></g>
+<g id="https"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/></g>
+<g id="important-devices"><path d="M23 11.01L18 11c-.55 0-1 .45-1 1v9c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-9c0-.55-.45-.99-1-.99zM23 20h-5v-7h5v7zM20 2H2C.89 2 0 2.89 0 4v12c0 1.1.89 2 2 2h7v2H7v2h8v-2h-2v-2h2v-2H2V4h18v5h2V4c0-1.11-.9-2-2-2zm-8.03 7L11 6l-.97 3H7l2.47 1.76-.94 2.91 2.47-1.8 2.47 1.8-.94-2.91L15 9h-3.03z"/></g>
+<g id="inbox"><path d="M19 3H4.99c-1.11 0-1.98.89-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.11-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10z"/></g>
+<g id="indeterminate-check-box"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"/></g>
+<g id="info"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></g>
+<g id="info-outline"><path d="M11 17h2v-6h-2v6zm1-15C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zM11 9h2V7h-2v2z"/></g>
+<g id="input"><path d="M21 3.01H3c-1.1 0-2 .9-2 2V9h2V4.99h18v14.03H3V15H1v4.01c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98v-14c0-1.11-.9-2-2-2zM11 16l4-4-4-4v3H1v2h10v3z"/></g>
+<g id="invert-colors"><path d="M17.66 7.93L12 2.27 6.34 7.93c-3.12 3.12-3.12 8.19 0 11.31C7.9 20.8 9.95 21.58 12 21.58c2.05 0 4.1-.78 5.66-2.34 3.12-3.12 3.12-8.19 0-11.31zM12 19.59c-1.6 0-3.11-.62-4.24-1.76C6.62 16.69 6 15.19 6 13.59s.62-3.11 1.76-4.24L12 5.1v14.49z"/></g>
+<g id="label"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16z"/></g>
+<g id="label-outline"><path d="M17.63 5.84C17.27 5.33 16.67 5 16 5L5 5.01C3.9 5.01 3 5.9 3 7v10c0 1.1.9 1.99 2 1.99L16 19c.67 0 1.27-.33 1.63-.84L22 12l-4.37-6.16zM16 17H5V7h11l3.55 5L16 17z"/></g>
+<g id="language"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95c-.32-1.25-.78-2.45-1.38-3.56 1.84.63 3.37 1.91 4.33 3.56zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56-1.84-.63-3.37-1.9-4.33-3.56zm2.95-8H5.08c.96-1.66 2.49-2.93 4.33-3.56C8.81 5.55 8.35 6.75 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95c-.96 1.65-2.49 2.93-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"/></g>
+<g id="last-page"><path d="M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z"/></g>
+<g id="launch"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></g>
+<g id="lightbulb-outline"><path d="M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7zm2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6C7.8 12.16 7 10.63 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1z"/></g>
+<g id="line-style"><path d="M3 16h5v-2H3v2zm6.5 0h5v-2h-5v2zm6.5 0h5v-2h-5v2zM3 20h2v-2H3v2zm4 0h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM3 12h8v-2H3v2zm10 0h8v-2h-8v2zM3 4v4h18V4H3z"/></g>
+<g id="line-weight"><path d="M3 17h18v-2H3v2zm0 3h18v-1H3v1zm0-7h18v-3H3v3zm0-9v4h18V4H3z"/></g>
+<g id="link"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></g>
+<g id="list"><path d="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z"/></g>
+<g id="lock"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z"/></g>
+<g id="lock-open"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6h1.9c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z"/></g>
+<g id="lock-outline"><path d="M12 17c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm6-9h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v2H8.9V6zM18 20H6V10h12v10z"/></g>
+<g id="low-priority"><path d="M14 5h8v2h-8zm0 5.5h8v2h-8zm0 5.5h8v2h-8zM2 11.5C2 15.08 4.92 18 8.5 18H9v2l3-3-3-3v2h-.5C6.02 16 4 13.98 4 11.5S6.02 7 8.5 7H12V5H8.5C4.92 5 2 7.92 2 11.5z"/></g>
+<g id="loyalty"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 14.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1.08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"/></g>
+<g id="mail"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></g>
+<g id="markunread"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></g>
+<g id="markunread-mailbox"><path d="M20 6H10v6H8V4h6V0H6v6H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z"/></g>
+<g id="menu"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></g>
+<g id="more-horiz"><path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="more-vert"><path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="motorcycle"><path d="M19.44 9.03L15.41 5H11v2h3.59l2 2H5c-2.8 0-5 2.2-5 5s2.2 5 5 5c2.46 0 4.45-1.69 4.9-4h1.65l2.77-2.77c-.21.54-.32 1.14-.32 1.77 0 2.8 2.2 5 5 5s5-2.2 5-5c0-2.65-1.97-4.77-4.56-4.97zM7.82 15C7.4 16.15 6.28 17 5 17c-1.63 0-3-1.37-3-3s1.37-3 3-3c1.28 0 2.4.85 2.82 2H5v2h2.82zM19 17c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3z"/></g>
+<g id="move-to-inbox"><path d="M19 3H4.99c-1.11 0-1.98.9-1.98 2L3 19c0 1.1.88 2 1.99 2H19c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12h-4c0 1.66-1.35 3-3 3s-3-1.34-3-3H4.99V5H19v10zm-3-5h-2V7h-4v3H8l4 4 4-4z"/></g>
+<g id="next-week"><path d="M20 7h-4V5c0-.55-.22-1.05-.59-1.41C15.05 3.22 14.55 3 14 3h-4c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zM10 5h4v2h-4V5zm1 13.5l-1-1 3-3-3-3 1-1 4 4-4 4z"/></g>
+<g id="note-add"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 14h-3v3h-2v-3H8v-2h3v-3h2v3h3v2zm-3-7V3.5L18.5 9H13z"/></g>
+<g id="offline-pin"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm5 16H7v-2h10v2zm-6.7-4L7 10.7l1.4-1.4 1.9 1.9 5.3-5.3L17 7.3 10.3 14z"/></g>
+<g id="opacity"><path d="M17.66 8L12 2.35 6.34 8C4.78 9.56 4 11.64 4 13.64s.78 4.11 2.34 5.67 3.61 2.35 5.66 2.35 4.1-.79 5.66-2.35S20 15.64 20 13.64 19.22 9.56 17.66 8zM6 14c.01-2 .62-3.27 1.76-4.4L12 5.27l4.24 4.38C17.38 10.77 17.99 12 18 14H6z"/></g>
+<g id="open-in-browser"><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"/></g>
+<g id="open-in-new"><path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/></g>
+<g id="open-with"><path d="M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z"/></g>
+<g id="pageview"><path d="M11.5 9C10.12 9 9 10.12 9 11.5s1.12 2.5 2.5 2.5 2.5-1.12 2.5-2.5S12.88 9 11.5 9zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-3.21 14.21l-2.91-2.91c-.69.44-1.51.7-2.39.7C9.01 16 7 13.99 7 11.5S9.01 7 11.5 7 16 9.01 16 11.5c0 .88-.26 1.69-.7 2.39l2.91 2.9-1.42 1.42z"/></g>
+<g id="pan-tool"><path d="M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z"/></g>
+<g id="payment"><path d="M20 4H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4v-6h16v6zm0-10H4V6h16v2z"/></g>
+<g id="perm-camera-mic"><path d="M20 5h-3.17L15 3H9L7.17 5H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7v-2.09c-2.83-.48-5-2.94-5-5.91h2c0 2.21 1.79 4 4 4s4-1.79 4-4h2c0 2.97-2.17 5.43-5 5.91V21h7c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm-6 8c0 1.1-.9 2-2 2s-2-.9-2-2V9c0-1.1.9-2 2-2s2 .9 2 2v4z"/></g>
+<g id="perm-contact-calendar"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-7 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm6 12H6v-1c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1z"/></g>
+<g id="perm-data-setting"><path d="M18.99 11.5c.34 0 .67.03 1 .07L20 0 0 20h11.56c-.04-.33-.07-.66-.07-1 0-4.14 3.36-7.5 7.5-7.5zm3.71 7.99c.02-.16.04-.32.04-.49 0-.17-.01-.33-.04-.49l1.06-.83c.09-.08.12-.21.06-.32l-1-1.73c-.06-.11-.19-.15-.31-.11l-1.24.5c-.26-.2-.54-.37-.85-.49l-.19-1.32c-.01-.12-.12-.21-.24-.21h-2c-.12 0-.23.09-.25.21l-.19 1.32c-.3.13-.59.29-.85.49l-1.24-.5c-.11-.04-.24 0-.31.11l-1 1.73c-.06.11-.04.24.06.32l1.06.83c-.02.16-.03.32-.03.49 0 .17.01.33.03.49l-1.06.83c-.09.08-.12.21-.06.32l1 1.73c.06.11.19.15.31.11l1.24-.5c.26.2.54.37.85.49l.19 1.32c.02.12.12.21.25.21h2c.12 0 .23-.09.25-.21l.19-1.32c.3-.13.59-.29.84-.49l1.25.5c.11.04.24 0 .31-.11l1-1.73c.06-.11.03-.24-.06-.32l-1.07-.83zm-3.71 1.01c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="perm-device-information"><path d="M13 7h-2v2h2V7zm0 4h-2v6h2v-6zm4-9.99L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"/></g>
+<g id="perm-identity"><path d="M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"/></g>
+<g id="perm-media"><path d="M2 6H0v5h.01L0 20c0 1.1.9 2 2 2h18v-2H2V6zm20-2h-8l-2-2H6c-1.1 0-1.99.9-1.99 2L4 16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM7 15l4.5-6 3.5 4.51 2.5-3.01L21 15H7z"/></g>
+<g id="perm-phone-msg"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM12 3v10l3-3h6V3h-9z"/></g>
+<g id="perm-scan-wifi"><path d="M12 3C6.95 3 3.15 4.85 0 7.23L12 22 24 7.25C20.85 4.87 17.05 3 12 3zm1 13h-2v-6h2v6zm-2-8V6h2v2h-2z"/></g>
+<g id="pets"><circle cx="4.5" cy="9.5" r="2.5"/><circle cx="9" cy="5.5" r="2.5"/><circle cx="15" cy="5.5" r="2.5"/><circle cx="19.5" cy="9.5" r="2.5"/><path d="M17.34 14.86c-.87-1.02-1.6-1.89-2.48-2.91-.46-.54-1.05-1.08-1.75-1.32-.11-.04-.22-.07-.33-.09-.25-.04-.52-.04-.78-.04s-.53 0-.79.05c-.11.02-.22.05-.33.09-.7.24-1.28.78-1.75 1.32-.87 1.02-1.6 1.89-2.48 2.91-1.31 1.31-2.92 2.76-2.62 4.79.29 1.02 1.02 2.03 2.33 2.32.73.15 3.06-.44 5.54-.44h.18c2.48 0 4.81.58 5.54.44 1.31-.29 2.04-1.31 2.33-2.32.31-2.04-1.3-3.49-2.61-4.8z"/></g>
+<g id="picture-in-picture"><path d="M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 1.98 2 1.98h18c1.1 0 2-.88 2-1.98V5c0-1.1-.9-2-2-2zm0 16.01H3V4.98h18v14.03z"/></g>
+<g id="picture-in-picture-alt"><path d="M19 11h-8v6h8v-6zm4 8V4.98C23 3.88 22.1 3 21 3H3c-1.1 0-2 .88-2 1.98V19c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2zm-2 .02H3V4.97h18v14.05z"/></g>
+<g id="play-for-work"><path d="M11 5v5.59H7.5l4.5 4.5 4.5-4.5H13V5h-2zm-5 9c0 3.31 2.69 6 6 6s6-2.69 6-6h-2c0 2.21-1.79 4-4 4s-4-1.79-4-4H6z"/></g>
+<g id="polymer"><path d="M19 4h-4L7.11 16.63 4.5 12 9 4H5L.5 12 5 20h4l7.89-12.63L19.5 12 15 20h4l4.5-8z"/></g>
+<g id="power-settings-new"><path d="M13 3h-2v10h2V3zm4.83 2.17l-1.42 1.42C17.99 7.86 19 9.81 19 12c0 3.87-3.13 7-7 7s-7-3.13-7-7c0-2.19 1.01-4.14 2.58-5.42L6.17 5.17C4.23 6.82 3 9.26 3 12c0 4.97 4.03 9 9 9s9-4.03 9-9c0-2.74-1.23-5.18-3.17-6.83z"/></g>
+<g id="pregnant-woman"><path d="M9 4c0-1.11.89-2 2-2s2 .89 2 2-.89 2-2 2-2-.89-2-2zm7 9c-.01-1.34-.83-2.51-2-3 0-1.66-1.34-3-3-3s-3 1.34-3 3v7h2v5h3v-5h3v-4z"/></g>
+<g id="print"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></g>
+<g id="query-builder"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
+<g id="question-answer"><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"/></g>
+<g id="radio-button-checked"><path d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
+<g id="radio-button-unchecked"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
+<g id="receipt"><path d="M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v20z"/></g>
+<g id="record-voice-over"><circle cx="9" cy="9" r="4"/><path d="M9 15c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4zm7.76-9.64l-1.68 1.69c.84 1.18.84 2.71 0 3.89l1.68 1.69c2.02-2.02 2.02-5.07 0-7.27zM20.07 2l-1.63 1.63c2.77 3.02 2.77 7.56 0 10.74L20.07 16c3.9-3.89 3.91-9.95 0-14z"/></g>
+<g id="redeem"><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"/></g>
+<g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"/></g>
+<g id="refresh"><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/></g>
+<g id="remove"><path d="M19 13H5v-2h14v2z"/></g>
+<g id="remove-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z"/></g>
+<g id="remove-circle-outline"><path d="M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/></g>
+<g id="remove-shopping-cart"><path d="M22.73 22.73L2.77 2.77 2 2l-.73-.73L0 2.54l4.39 4.39 2.21 4.66-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h7.46l1.38 1.38c-.5.36-.83.95-.83 1.62 0 1.1.89 2 1.99 2 .67 0 1.26-.33 1.62-.84L21.46 24l1.27-1.27zM7.42 15c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h2.36l2 2H7.42zm8.13-2c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H6.54l9.01 9zM7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2z"/></g>
+<g id="reorder"><path d="M3 15h18v-2H3v2zm0 4h18v-2H3v2zm0-8h18V9H3v2zm0-6v2h18V5H3z"/></g>
+<g id="reply"><path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"/></g>
+<g id="reply-all"><path d="M7 8V5l-7 7 7 7v-3l-4-4 4-4zm6 1V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"/></g>
+<g id="report"><path d="M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15.73 3zM12 17.3c-.72 0-1.3-.58-1.3-1.3 0-.72.58-1.3 1.3-1.3.72 0 1.3.58 1.3 1.3 0 .72-.58 1.3-1.3 1.3zm1-4.3h-2V7h2v6z"/></g>
+<g id="report-problem"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></g>
+<g id="restore"><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></g>
+<g id="restore-page"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm-2 16c-2.05 0-3.81-1.24-4.58-3h1.71c.63.9 1.68 1.5 2.87 1.5 1.93 0 3.5-1.57 3.5-3.5S13.93 9.5 12 9.5c-1.35 0-2.52.78-3.1 1.9l1.6 1.6h-4V9l1.3 1.3C8.69 8.92 10.23 8 12 8c2.76 0 5 2.24 5 5s-2.24 5-5 5z"/></g>
+<g id="room"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></g>
+<g id="rounded-corner"><path d="M19 19h2v2h-2v-2zm0-2h2v-2h-2v2zM3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm0-4h2V3H3v2zm4 0h2V3H7v2zm8 16h2v-2h-2v2zm-4 0h2v-2h-2v2zm4 0h2v-2h-2v2zm-8 0h2v-2H7v2zm-4 0h2v-2H3v2zM21 8c0-2.76-2.24-5-5-5h-5v2h5c1.65 0 3 1.35 3 3v5h2V8z"/></g>
+<g id="rowing"><path d="M8.5 14.5L4 19l1.5 1.5L9 17h2l-2.5-2.5zM15 1c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 20.01L18 24l-2.99-3.01V19.5l-7.1-7.09c-.31.05-.61.07-.91.07v-2.16c1.66.03 3.61-.87 4.67-2.04l1.4-1.55c.19-.21.43-.38.69-.5.29-.14.62-.23.96-.23h.03C15.99 6.01 17 7.02 17 8.26v5.75c0 .84-.35 1.61-.92 2.16l-3.58-3.58v-2.27c-.63.52-1.43 1.02-2.29 1.39L16.5 18H18l3 3.01z"/></g>
+<g id="save"><path d="M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3zm3-10H5V5h10v4z"/></g>
+<g id="schedule"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></g>
+<g id="search"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></g>
+<g id="select-all"><path d="M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2zM7 17h10V7H7v10zm2-8h6v6H9V9z"/></g>
+<g id="send"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></g>
+<g id="settings"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"/></g>
+<g id="settings-applications"><path d="M12 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm7-7H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-1.75 9c0 .23-.02.46-.05.68l1.48 1.16c.13.11.17.3.08.45l-1.4 2.42c-.09.15-.27.21-.43.15l-1.74-.7c-.36.28-.76.51-1.18.69l-.26 1.85c-.03.17-.18.3-.35.3h-2.8c-.17 0-.32-.13-.35-.29l-.26-1.85c-.43-.18-.82-.41-1.18-.69l-1.74.7c-.16.06-.34 0-.43-.15l-1.4-2.42c-.09-.15-.05-.34.08-.45l1.48-1.16c-.03-.23-.05-.46-.05-.69 0-.23.02-.46.05-.68l-1.48-1.16c-.13-.11-.17-.3-.08-.45l1.4-2.42c.09-.15.27-.21.43-.15l1.74.7c.36-.28.76-.51 1.18-.69l.26-1.85c.03-.17.18-.3.35-.3h2.8c.17 0 .32.13.35.29l.26 1.85c.43.18.82.41 1.18.69l1.74-.7c.16-.06.34 0 .43.15l1.4 2.42c.09.15.05.34-.08.45l-1.48 1.16c.03.23.05.46.05.69z"/></g>
+<g id="settings-backup-restore"><path d="M14 12c0-1.1-.9-2-2-2s-2 .9-2 2 .9 2 2 2 2-.9 2-2zm-2-9c-4.97 0-9 4.03-9 9H0l4 4 4-4H5c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.51 0-2.91-.49-4.06-1.3l-1.42 1.44C8.04 20.3 9.94 21 12 21c4.97 0 9-4.03 9-9s-4.03-9-9-9z"/></g>
+<g id="settings-bluetooth"><path d="M11 24h2v-2h-2v2zm-4 0h2v-2H7v2zm8 0h2v-2h-2v2zm2.71-18.29L12 0h-1v7.59L6.41 3 5 4.41 10.59 10 5 15.59 6.41 17 11 12.41V20h1l5.71-5.71-4.3-4.29 4.3-4.29zM13 3.83l1.88 1.88L13 7.59V3.83zm1.88 10.46L13 16.17v-3.76l1.88 1.88z"/></g>
+<g id="settings-brightness"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02zM8 16h2.5l1.5 1.5 1.5-1.5H16v-2.5l1.5-1.5-1.5-1.5V8h-2.5L12 6.5 10.5 8H8v2.5L6.5 12 8 13.5V16zm4-7c1.66 0 3 1.34 3 3s-1.34 3-3 3V9z"/></g>
+<g id="settings-cell"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm4 0h2v-2h-2v2zM16 .01L8 0C6.9 0 6 .9 6 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V2c0-1.1-.9-1.99-2-1.99zM16 16H8V4h8v12z"/></g>
+<g id="settings-ethernet"><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.28L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z"/></g>
+<g id="settings-input-antenna"><path d="M12 5c-3.87 0-7 3.13-7 7h2c0-2.76 2.24-5 5-5s5 2.24 5 5h2c0-3.87-3.13-7-7-7zm1 9.29c.88-.39 1.5-1.26 1.5-2.29 0-1.38-1.12-2.5-2.5-2.5S9.5 10.62 9.5 12c0 1.02.62 1.9 1.5 2.29v3.3L7.59 21 9 22.41l3-3 3 3L16.41 21 13 17.59v-3.3zM12 1C5.93 1 1 5.93 1 12h2c0-4.97 4.03-9 9-9s9 4.03 9 9h2c0-6.07-4.93-11-11-11z"/></g>
+<g id="settings-input-component"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1-1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"/></g>
+<g id="settings-input-composite"><path d="M5 2c0-.55-.45-1-1-1s-1 .45-1 1v4H1v6h6V6H5V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2H9v2zm-8 0c0 1.3.84 2.4 2 2.82V23h2v-4.18C6.16 18.4 7 17.3 7 16v-2H1v2zM21 6V2c0-.55-.45-1-1-1s-1 .45-1 1v4h-2v6h6V6h-2zm-8-4c0-.55-.45-1-1-1s-1 .45-1 1v4H9v6h6V6h-2V2zm4 14c0 1.3.84 2.4 2 2.82V23h2v-4.18c1.16-.41 2-1.51 2-2.82v-2h-6v2z"/></g>
+<g id="settings-input-hdmi"><path d="M18 7V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v3H5v6l3 6v3h8v-3l3-6V7h-1zM8 4h8v3h-2V5h-1v2h-2V5h-1v2H8V4z"/></g>
+<g id="settings-input-svideo"><path d="M8 11.5c0-.83-.67-1.5-1.5-1.5S5 10.67 5 11.5 5.67 13 6.5 13 8 12.33 8 11.5zm7-5c0-.83-.67-1.5-1.5-1.5h-3C9.67 5 9 5.67 9 6.5S9.67 8 10.5 8h3c.83 0 1.5-.67 1.5-1.5zM8.5 15c-.83 0-1.5.67-1.5 1.5S7.67 18 8.5 18s1.5-.67 1.5-1.5S9.33 15 8.5 15zM12 1C5.93 1 1 5.93 1 12s4.93 11 11 11 11-4.93 11-11S18.07 1 12 1zm0 20c-4.96 0-9-4.04-9-9s4.04-9 9-9 9 4.04 9 9-4.04 9-9 9zm5.5-11c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm-2 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"/></g>
+<g id="settings-overscan"><path d="M12.01 5.5L10 8h4l-1.99-2.5zM18 10v4l2.5-1.99L18 10zM6 10l-2.5 2.01L6 14v-4zm8 6h-4l2.01 2.5L14 16zm7-13H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16.01H3V4.99h18v14.02z"/></g>
+<g id="settings-phone"><path d="M13 9h-2v2h2V9zm4 0h-2v2h2V9zm3 6.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.58l2.2-2.21c.28-.27.36-.66.25-1.01C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 9v2h2V9h-2z"/></g>
+<g id="settings-power"><path d="M7 24h2v-2H7v2zm4 0h2v-2h-2v2zm2-22h-2v10h2V2zm3.56 2.44l-1.45 1.45C16.84 6.94 18 8.83 18 11c0 3.31-2.69 6-6 6s-6-2.69-6-6c0-2.17 1.16-4.06 2.88-5.12L7.44 4.44C5.36 5.88 4 8.28 4 11c0 4.42 3.58 8 8 8s8-3.58 8-8c0-2.72-1.36-5.12-3.44-6.56zM15 24h2v-2h-2v2z"/></g>
+<g id="settings-remote"><path d="M15 9H9c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h6c.55 0 1-.45 1-1V10c0-.55-.45-1-1-1zm-3 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zM7.05 6.05l1.41 1.41C9.37 6.56 10.62 6 12 6s2.63.56 3.54 1.46l1.41-1.41C15.68 4.78 13.93 4 12 4s-3.68.78-4.95 2.05zM12 0C8.96 0 6.21 1.23 4.22 3.22l1.41 1.41C7.26 3.01 9.51 2 12 2s4.74 1.01 6.36 2.64l1.41-1.41C17.79 1.23 15.04 0 12 0z"/></g>
+<g id="settings-voice"><path d="M7 24h2v-2H7v2zm5-11c1.66 0 2.99-1.34 2.99-3L15 4c0-1.66-1.34-3-3-3S9 2.34 9 4v6c0 1.66 1.34 3 3 3zm-1 11h2v-2h-2v2zm4 0h2v-2h-2v2zm4-14h-1.7c0 3-2.54 5.1-5.3 5.1S6.7 13 6.7 10H5c0 3.41 2.72 6.23 6 6.72V20h2v-3.28c3.28-.49 6-3.31 6-6.72z"/></g>
+<g id="shop"><path d="M16 6V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H2v13c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6h-6zm-6-2h4v2h-4V4zM9 18V9l7.5 4L9 18z"/></g>
+<g id="shop-two"><path d="M3 9H1v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2H3V9zm15-4V3c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H5v11c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2V5h-5zm-6-2h4v2h-4V3zm0 12V8l5.5 3-5.5 4z"/></g>
+<g id="shopping-basket"><path d="M17.21 9l-4.38-6.56c-.19-.28-.51-.42-.83-.42-.32 0-.64.14-.83.43L6.79 9H2c-.55 0-1 .45-1 1 0 .09.01.18.04.27l2.54 9.27c.23.84 1 1.46 1.92 1.46h13c.92 0 1.69-.62 1.93-1.46l2.54-9.27L23 10c0-.55-.45-1-1-1h-4.79zM9 9l3-4.4L15 9H9zm3 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+<g id="shopping-cart"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="sort"><path d="M3 18h6v-2H3v2zM3 6v2h18V6H3zm0 7h12v-2H3v2z"/></g>
+<g id="speaker-notes"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM8 14H6v-2h2v2zm0-3H6V9h2v2zm0-3H6V6h2v2zm7 6h-5v-2h5v2zm3-3h-8V9h8v2zm0-3h-8V6h8v2z"/></g>
+<g id="speaker-notes-off"><path d="M10.54 11l-.54-.54L7.54 8 6 6.46 2.38 2.84 1.27 1.73 0 3l2.01 2.01L2 22l4-4h9l5.73 5.73L22 22.46 17.54 18l-7-7zM8 14H6v-2h2v2zm-2-3V9l2 2H6zm14-9H4.08L10 7.92V6h8v2h-7.92l1 1H18v2h-4.92l6.99 6.99C21.14 17.95 22 17.08 22 16V4c0-1.1-.9-2-2-2z"/></g>
+<g id="spellcheck"><path d="M12.45 16h2.09L9.43 3H7.57L2.46 16h2.09l1.12-3h5.64l1.14 3zm-6.02-5L8.5 5.48 10.57 11H6.43zm15.16.59l-8.09 8.09L9.83 16l-1.41 1.41 5.09 5.09L23 13l-1.41-1.41z"/></g>
+<g id="star"><path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/></g>
+<g id="star-border"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/></g>
+<g id="star-half"><path d="M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z"/></g>
+<g id="stars"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.42L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z"/></g>
+<g id="store"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h1zm-9 4H6v-4h6v4z"/></g>
+<g id="subdirectory-arrow-left"><path d="M11 9l1.42 1.42L8.83 14H18V4h2v12H8.83l3.59 3.58L11 21l-6-6 6-6z"/></g>
+<g id="subdirectory-arrow-right"><path d="M19 15l-6 6-1.42-1.42L15.17 16H4V4h2v10h9.17l-3.59-3.58L13 9l6 6z"/></g>
+<g id="subject"><path d="M14 17H4v2h10v-2zm6-8H4v2h16V9zM4 15h16v-2H4v2zM4 5v2h16V5H4z"/></g>
+<g id="supervisor-account"><path d="M16.5 12c1.38 0 2.49-1.12 2.49-2.5S17.88 7 16.5 7C15.12 7 14 8.12 14 9.5s1.12 2.5 2.5 2.5zM9 11c1.66 0 2.99-1.34 2.99-3S10.66 5 9 5C7.34 5 6 6.34 6 8s1.34 3 3 3zm7.5 3c-1.83 0-5.5.92-5.5 2.75V19h11v-2.25c0-1.83-3.67-2.75-5.5-2.75zM9 13c-2.33 0-7 1.17-7 3.5V19h7v-2.25c0-.85.33-2.34 2.37-3.47C10.5 13.1 9.66 13 9 13z"/></g>
+<g id="swap-horiz"><path d="M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z"/></g>
+<g id="swap-vert"><path d="M16 17.01V10h-2v7.01h-3L15 21l4-3.99h-3zM9 3L5 6.99h3V14h2V6.99h3L9 3z"/></g>
+<g id="swap-vertical-circle"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM6.5 9L10 5.5 13.5 9H11v4H9V9H6.5zm11 6L14 18.5 10.5 15H13v-4h2v4h2.5z"/></g>
+<g id="system-update-alt"><path d="M12 16.5l4-4h-3v-9h-2v9H8l4 4zm9-13h-6v1.99h6v14.03H3V5.49h6V3.5H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-14c0-1.1-.9-2-2-2z"/></g>
+<g id="tab"><path d="M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h10v4h8v10z"/></g>
+<g id="tab-unselected"><path d="M1 9h2V7H1v2zm0 4h2v-2H1v2zm0-8h2V3c-1.1 0-2 .9-2 2zm8 16h2v-2H9v2zm-8-4h2v-2H1v2zm2 4v-2H1c0 1.1.9 2 2 2zM21 3h-8v6h10V5c0-1.1-.9-2-2-2zm0 14h2v-2h-2v2zM9 5h2V3H9v2zM5 21h2v-2H5v2zM5 5h2V3H5v2zm16 16c1.1 0 2-.9 2-2h-2v2zm0-8h2v-2h-2v2zm-8 8h2v-2h-2v2zm4 0h2v-2h-2v2z"/></g>
+<g id="text-format"><path d="M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z"/></g>
+<g id="theaters"><path d="M18 3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3h-2zM8 17H6v-2h2v2zm0-4H6v-2h2v2zm0-4H6V7h2v2zm10 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V7h2v2z"/></g>
+<g id="thumb-down"><path d="M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v1.91l.01.01L1 14c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2zm4 0v12h4V3h-4z"/></g>
+<g id="thumb-up"><path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/></g>
+<g id="thumbs-up-down"><path d="M12 6c0-.55-.45-1-1-1H5.82l.66-3.18.02-.23c0-.31-.13-.59-.33-.8L5.38 0 .44 4.94C.17 5.21 0 5.59 0 6v6.5c0 .83.67 1.5 1.5 1.5h6.75c.62 0 1.15-.38 1.38-.91l2.26-5.29c.07-.17.11-.36.11-.55V6zm10.5 4h-6.75c-.62 0-1.15.38-1.38.91l-2.26 5.29c-.07.17-.11.36-.11.55V18c0 .55.45 1 1 1h5.18l-.66 3.18-.02.24c0 .31.13.59.33.8l.79.78 4.94-4.94c.27-.27.44-.65.44-1.06v-6.5c0-.83-.67-1.5-1.5-1.5z"/></g>
+<g id="timeline"><path d="M23 8c0 1.1-.9 2-2 2-.18 0-.35-.02-.51-.07l-3.56 3.55c.05.16.07.34.07.52 0 1.1-.9 2-2 2s-2-.9-2-2c0-.18.02-.36.07-.52l-2.55-2.55c-.16.05-.34.07-.52.07s-.36-.02-.52-.07l-4.55 4.56c.05.16.07.33.07.51 0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2c.18 0 .35.02.51.07l4.56-4.55C8.02 9.36 8 9.18 8 9c0-1.1.9-2 2-2s2 .9 2 2c0 .18-.02.36-.07.52l2.55 2.55c.16-.05.34-.07.52-.07s.36.02.52.07l3.55-3.56C19.02 8.35 19 8.18 19 8c0-1.1.9-2 2-2s2 .9 2 2z"/></g>
+<g id="toc"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10v2h2V7h-2zm0 6h2v-2h-2v2z"/></g>
+<g id="today"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"/></g>
+<g id="toll"><path d="M15 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6zM3 12c0-2.61 1.67-4.83 4-5.65V4.26C3.55 5.15 1 8.27 1 12s2.55 6.85 6 7.74v-2.09c-2.33-.82-4-3.04-4-5.65z"/></g>
+<g id="touch-app"><path d="M9 11.24V7.5C9 6.12 10.12 5 11.5 5S14 6.12 14 7.5v3.74c1.21-.81 2-2.18 2-3.74C16 5.01 13.99 3 11.5 3S7 5.01 7 7.5c0 1.56.79 2.93 2 3.74zm9.84 4.63l-4.54-2.26c-.17-.07-.35-.11-.54-.11H13v-6c0-.83-.67-1.5-1.5-1.5S10 6.67 10 7.5v10.74l-3.43-.72c-.08-.01-.15-.03-.24-.03-.31 0-.59.13-.79.33l-.79.8 4.94 4.94c.27.27.65.44 1.06.44h6.79c.75 0 1.33-.55 1.44-1.28l.75-5.27c.01-.07.02-.14.02-.2 0-.62-.38-1.16-.91-1.38z"/></g>
+<g id="track-changes"><path d="M19.07 4.93l-1.41 1.41C19.1 7.79 20 9.79 20 12c0 4.42-3.58 8-8 8s-8-3.58-8-8c0-4.08 3.05-7.44 7-7.93v2.02C8.16 6.57 6 9.03 6 12c0 3.31 2.69 6 6 6s6-2.69 6-6c0-1.66-.67-3.16-1.76-4.24l-1.41 1.41C15.55 9.9 16 10.9 16 12c0 2.21-1.79 4-4 4s-4-1.79-4-4c0-1.86 1.28-3.41 3-3.86v2.14c-.6.35-1 .98-1 1.72 0 1.1.9 2 2 2s2-.9 2-2c0-.74-.4-1.38-1-1.72V2h-1C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-2.76-1.12-5.26-2.93-7.07z"/></g>
+<g id="translate"><path d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></g>
+<g id="trending-down"><path d="M16 18l2.29-2.29-4.88-4.88-4 4L2 7.41 3.41 6l6 6 4-4 6.3 6.29L22 12v6z"/></g>
+<g id="trending-flat"><path d="M22 12l-4-4v3H3v2h15v3z"/></g>
+<g id="trending-up"><path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"/></g>
+<g id="turned-in"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z"/></g>
+<g id="turned-in-not"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"/></g>
+<g id="unarchive"><path d="M20.55 5.22l-1.39-1.68C18.88 3.21 18.47 3 18 3H6c-.47 0-.88.21-1.15.55L3.46 5.22C3.17 5.57 3 6.01 3 6.5V19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6.5c0-.49-.17-.93-.45-1.28zM12 9.5l5.5 5.5H14v2h-4v-2H6.5L12 9.5zM5.12 5l.82-1h12l.93 1H5.12z"/></g>
+<g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"/></g>
+<g id="unfold-less"><path d="M7.41 18.59L8.83 20 12 16.83 15.17 20l1.41-1.41L12 14l-4.59 4.59zm9.18-13.18L15.17 4 12 7.17 8.83 4 7.41 5.41 12 10l4.59-4.59z"/></g>
+<g id="unfold-more"><path d="M12 5.83L15.17 9l1.41-1.41L12 3 7.41 7.59 8.83 9 12 5.83zm0 12.34L8.83 15l-1.41 1.41L12 21l4.59-4.59L15.17 15 12 18.17z"/></g>
+<g id="update"><path d="M21 10.12h-6.78l2.74-2.82c-2.73-2.7-7.15-2.8-9.88-.1-2.73 2.71-2.73 7.08 0 9.79 2.73 2.71 7.15 2.71 9.88 0C18.32 15.65 19 14.08 19 12.1h2c0 1.98-.88 4.55-2.64 6.29-3.51 3.48-9.21 3.48-12.72 0-3.5-3.47-3.53-9.11-.02-12.58 3.51-3.47 9.14-3.47 12.65 0L21 3v7.12zM12.5 8v4.25l3.5 2.08-.72 1.21L11 13V8h1.5z"/></g>
+<g id="verified-user"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z"/></g>
+<g id="view-agenda"><path d="M20 13H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1zm0-10H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z"/></g>
+<g id="view-array"><path d="M4 18h3V5H4v13zM18 5v13h3V5h-3zM8 18h9V5H8v13z"/></g>
+<g id="view-carousel"><path d="M7 19h10V4H7v15zm-5-2h4V6H2v11zM18 6v11h4V6h-4z"/></g>
+<g id="view-column"><path d="M10 18h5V5h-5v13zm-6 0h5V5H4v13zM16 5v13h5V5h-5z"/></g>
+<g id="view-day"><path d="M2 21h19v-3H2v3zM20 8H3c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1h17c.55 0 1-.45 1-1V9c0-.55-.45-1-1-1zM2 3v3h19V3H2z"/></g>
+<g id="view-headline"><path d="M4 15h16v-2H4v2zm0 4h16v-2H4v2zm0-8h16V9H4v2zm0-6v2h16V5H4z"/></g>
+<g id="view-list"><path d="M4 14h4v-4H4v4zm0 5h4v-4H4v4zM4 9h4V5H4v4zm5 5h12v-4H9v4zm0 5h12v-4H9v4zM9 5v4h12V5H9z"/></g>
+<g id="view-module"><path d="M4 11h5V5H4v6zm0 7h5v-6H4v6zm6 0h5v-6h-5v6zm6 0h5v-6h-5v6zm-6-7h5V5h-5v6zm6-6v6h5V5h-5z"/></g>
+<g id="view-quilt"><path d="M10 18h5v-6h-5v6zm-6 0h5V5H4v13zm12 0h5v-6h-5v6zM10 5v6h11V5H10z"/></g>
+<g id="view-stream"><path d="M4 18h17v-6H4v6zM4 5v6h17V5H4z"/></g>
+<g id="view-week"><path d="M6 5H3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm14 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1zm-7 0h-3c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h3c.55 0 1-.45 1-1V6c0-.55-.45-1-1-1z"/></g>
+<g id="visibility"><path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/></g>
+<g id="visibility-off"><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/></g>
+<g id="warning"><path d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"/></g>
+<g id="watch-later"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zm4.2 14.2L11 13V7h1.5v5.2l4.5 2.7-.8 1.3z"/></g>
+<g id="weekend"><path d="M21 10c-1.1 0-2 .9-2 2v3H5v-3c0-1.1-.9-2-2-2s-2 .9-2 2v5c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2v-5c0-1.1-.9-2-2-2zm-3-5H6c-1.1 0-2 .9-2 2v2.15c1.16.41 2 1.51 2 2.82V14h12v-2.03c0-1.3.84-2.4 2-2.82V7c0-1.1-.9-2-2-2z"/></g>
+<g id="work"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z"/></g>
+<g id="youtube-searched-for"><path d="M17.01 14h-.8l-.27-.27c.98-1.14 1.57-2.61 1.57-4.23 0-3.59-2.91-6.5-6.5-6.5s-6.5 3-6.5 6.5H2l3.84 4 4.16-4H6.51C6.51 7 8.53 5 11.01 5s4.5 2.01 4.5 4.5c0 2.48-2.02 4.5-4.5 4.5-.65 0-1.26-.14-1.82-.38L7.71 15.1c.97.57 2.09.9 3.3.9 1.61 0 3.08-.59 4.22-1.57l.27.27v.79l5.01 4.99L22 19l-4.99-5z"/></g>
+<g id="zoom-in"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zm2.5-4h-2v2H9v-2H7V9h2V7h1v2h2v1z"/></g>
+<g id="zoom-out"><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14zM7 9h5v1H7z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.d.ts
new file mode 100644
index 00000000000..7cd6cf09579
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * maps-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.html
new file mode 100644
index 00000000000..d6ad092fbd6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/maps-icons.html
@@ -0,0 +1,84 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="maps" size="24">
+<svg><defs>
+<g id="add-location"><path d="M12 2C8.14 2 5 5.14 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.86-3.14-7-7-7zm4 8h-3v3h-2v-3H8V8h3V5h2v3h3v2z"/></g>
+<g id="beenhere"><path d="M19 1H5c-1.1 0-1.99.9-1.99 2L3 15.93c0 .69.35 1.3.88 1.66L12 23l8.11-5.41c.53-.36.88-.97.88-1.66L21 3c0-1.1-.9-2-2-2zm-9 15l-5-5 1.41-1.41L10 13.17l7.59-7.59L19 7l-9 9z"/></g>
+<g id="directions"><path d="M21.71 11.29l-9-9c-.39-.39-1.02-.39-1.41 0l-9 9c-.39.39-.39 1.02 0 1.41l9 9c.39.39 1.02.39 1.41 0l9-9c.39-.38.39-1.01 0-1.41zM14 14.5V12h-4v3H8v-4c0-.55.45-1 1-1h5V7.5l3.5 3.5-3.5 3.5z"/></g>
+<g id="directions-bike"><path d="M15.5 5.5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM5 12c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5-2.2-5-5-5zm0 8.5c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5zm5.8-10l2.4-2.4.8.8c1.3 1.3 3 2.1 5.1 2.1V9c-1.5 0-2.7-.6-3.6-1.5l-1.9-1.9c-.5-.4-1-.6-1.6-.6s-1.1.2-1.4.6L7.8 8.4c-.4.4-.6.9-.6 1.4 0 .6.2 1.1.6 1.4L11 14v5h2v-6.2l-2.2-2.3zM19 12c-2.8 0-5 2.2-5 5s2.2 5 5 5 5-2.2 5-5-2.2-5-5-5zm0 8.5c-1.9 0-3.5-1.6-3.5-3.5s1.6-3.5 3.5-3.5 3.5 1.6 3.5 3.5-1.6 3.5-3.5 3.5z"/></g>
+<g id="directions-boat"><path d="M20 21c-1.39 0-2.78-.47-4-1.32-2.44 1.71-5.56 1.71-8 0C6.78 20.53 5.39 21 4 21H2v2h2c1.38 0 2.74-.35 4-.99 2.52 1.29 5.48 1.29 8 0 1.26.65 2.62.99 4 .99h2v-2h-2zM3.95 19H4c1.6 0 3.02-.88 4-2 .98 1.12 2.4 2 4 2s3.02-.88 4-2c.98 1.12 2.4 2 4 2h.05l1.89-6.68c.08-.26.06-.54-.06-.78s-.34-.42-.6-.5L20 10.62V6c0-1.1-.9-2-2-2h-3V1H9v3H6c-1.1 0-2 .9-2 2v4.62l-1.29.42c-.26.08-.48.26-.6.5s-.15.52-.06.78L3.95 19zM6 6h12v3.97L12 8 6 9.97V6z"/></g>
+<g id="directions-bus"><path d="M4 16c0 .88.39 1.67 1 2.22V20c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h8v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1.78c.61-.55 1-1.34 1-2.22V6c0-3.5-3.58-4-8-4s-8 .5-8 4v10zm3.5 1c-.83 0-1.5-.67-1.5-1.5S6.67 14 7.5 14s1.5.67 1.5 1.5S8.33 17 7.5 17zm9 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm1.5-6H6V6h12v5z"/></g>
+<g id="directions-car"><path d="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21.42-1.42 1.01L3 12v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5.67 1.5 1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z"/></g>
+<g id="directions-railway"><path d="M4 15.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h12v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V5c0-3.5-3.58-4-8-4s-8 .5-8 4v10.5zm8 1.5c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm6-7H6V5h12v5z"/></g>
+<g id="directions-run"><path d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z"/></g>
+<g id="directions-subway"><path d="M12 2c-4.42 0-8 .5-8 4v9.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h12v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V6c0-3.5-3.58-4-8-4zM7.5 17c-.83 0-1.5-.67-1.5-1.5S6.67 14 7.5 14s1.5.67 1.5 1.5S8.33 17 7.5 17zm3.5-6H6V6h5v5zm5.5 6c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm1.5-6h-5V6h5v5z"/></g>
+<g id="directions-transit"><path d="M12 2c-4.42 0-8 .5-8 4v9.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h12v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V6c0-3.5-3.58-4-8-4zM7.5 17c-.83 0-1.5-.67-1.5-1.5S6.67 14 7.5 14s1.5.67 1.5 1.5S8.33 17 7.5 17zm3.5-6H6V6h5v5zm5.5 6c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm1.5-6h-5V6h5v5z"/></g>
+<g id="directions-walk"><path d="M13.5 5.5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM9.8 8.9L7 23h2.1l1.8-8 2.1 2v6h2v-7.5l-2.1-2 .6-3C14.8 12 16.8 13 19 13v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1L6 8.3V13h2V9.6l1.8-.7"/></g>
+<g id="edit-location"><path d="M12 2C8.14 2 5 5.14 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.86-3.14-7-7-7zm-1.56 10H9v-1.44l3.35-3.34 1.43 1.43L10.44 12zm4.45-4.45l-.7.7-1.44-1.44.7-.7c.15-.15.39-.15.54 0l.9.9c.15.15.15.39 0 .54z"/></g>
+<g id="ev-station"><path d="M19.77 7.23l.01-.01-3.72-3.72L15 4.56l2.11 2.11c-.94.36-1.61 1.26-1.61 2.33 0 1.38 1.12 2.5 2.5 2.5.36 0 .69-.08 1-.21v7.21c0 .55-.45 1-1 1s-1-.45-1-1V14c0-1.1-.9-2-2-2h-1V5c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v16h10v-7.5h1.5v5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V9c0-.69-.28-1.32-.73-1.77zM18 10c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zM8 18v-4.5H6L10 6v5h2l-4 7z"/></g>
+<g id="flight"><path d="M10.18 9"/><path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z"/></g>
+<g id="hotel"><path d="M7 13c1.66 0 3-1.34 3-3S8.66 7 7 7s-3 1.34-3 3 1.34 3 3 3zm12-6h-8v7H3V5H1v15h2v-3h18v3h2v-9c0-2.21-1.79-4-4-4z"/></g>
+<g id="layers"><path d="M11.99 18.54l-7.37-5.73L3 14.07l9 7 9-7-1.63-1.27-7.38 5.74zM12 16l7.36-5.73L21 9l-9-7-9 7 1.63 1.27L12 16z"/></g>
+<g id="layers-clear"><path d="M19.81 14.99l1.19-.92-1.43-1.43-1.19.92 1.43 1.43zm-.45-4.72L21 9l-9-7-2.91 2.27 7.87 7.88 2.4-1.88zM3.27 1L2 2.27l4.22 4.22L3 9l1.63 1.27L12 16l2.1-1.63 1.43 1.43L12 18.54l-7.37-5.73L3 14.07l9 7 4.95-3.85L20.73 21 22 19.73 3.27 1z"/></g>
+<g id="local-activity"><path d="M20 12c0-1.1.9-2 2-2V6c0-1.1-.9-2-2-2H4c-1.1 0-1.99.9-1.99 2v4c1.1 0 1.99.9 1.99 2s-.89 2-2 2v4c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-4c-1.1 0-2-.9-2-2zm-4.42 4.8L12 14.5l-3.58 2.3 1.08-4.12-3.29-2.69 4.24-.25L12 5.8l1.54 3.95 4.24.25-3.29 2.69 1.09 4.11z"/></g>
+<g id="local-airport"><path d="M21 16v-2l-8-5V3.5c0-.83-.67-1.5-1.5-1.5S10 2.67 10 3.5V9l-8 5v2l8-2.5V19l-2 1.5V22l3.5-1 3.5 1v-1.5L13 19v-5.5l8 2.5z"/></g>
+<g id="local-atm"><path d="M11 17h2v-1h1c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1h-3v-1h4V8h-2V7h-2v1h-1c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h3v1H9v2h2v1zm9-13H4c-1.11 0-1.99.89-1.99 2L2 18c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V6c0-1.11-.89-2-2-2zm0 14H4V6h16v12z"/></g>
+<g id="local-bar"><path d="M21 5V3H3v2l8 9v5H6v2h12v-2h-5v-5l8-9zM7.43 7L5.66 5h12.69l-1.78 2H7.43z"/></g>
+<g id="local-cafe"><path d="M20 3H4v10c0 2.21 1.79 4 4 4h6c2.21 0 4-1.79 4-4v-3h2c1.11 0 2-.89 2-2V5c0-1.11-.89-2-2-2zm0 5h-2V5h2v3zM2 21h18v-2H2v2z"/></g>
+<g id="local-car-wash"><path d="M17 5c.83 0 1.5-.67 1.5-1.5 0-1-1.5-2.7-1.5-2.7s-1.5 1.7-1.5 2.7c0 .83.67 1.5 1.5 1.5zm-5 0c.83 0 1.5-.67 1.5-1.5 0-1-1.5-2.7-1.5-2.7s-1.5 1.7-1.5 2.7c0 .83.67 1.5 1.5 1.5zM7 5c.83 0 1.5-.67 1.5-1.5C8.5 2.5 7 .8 7 .8S5.5 2.5 5.5 3.5C5.5 4.33 6.17 5 7 5zm11.92 3.01C18.72 7.42 18.16 7 17.5 7h-11c-.66 0-1.21.42-1.42 1.01L3 14v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 18c-.83 0-1.5-.67-1.5-1.5S5.67 15 6.5 15s1.5.67 1.5 1.5S7.33 18 6.5 18zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 13l1.5-4.5h11L19 13H5z"/></g>
+<g id="local-convenience-store"><path d="M19 7V4H5v3H2v13h8v-4h4v4h8V7h-3zm-8 3H9v1h2v1H8V9h2V8H8V7h3v3zm5 2h-1v-2h-2V7h1v2h1V7h1v5z"/></g>
+<g id="local-dining"><path d="M8.1 13.34l2.83-2.83L3.91 3.5c-1.56 1.56-1.56 4.09 0 5.66l4.19 4.18zm6.78-1.81c1.53.71 3.68.21 5.27-1.38 1.91-1.91 2.28-4.65.81-6.12-1.46-1.46-4.2-1.1-6.12.81-1.59 1.59-2.09 3.74-1.38 5.27L3.7 19.87l1.41 1.41L12 14.41l6.88 6.88 1.41-1.41L13.41 13l1.47-1.47z"/></g>
+<g id="local-drink"><path d="M3 2l2.01 18.23C5.13 21.23 5.97 22 7 22h10c1.03 0 1.87-.77 1.99-1.77L21 2H3zm9 17c-1.66 0-3-1.34-3-3 0-2 3-5.4 3-5.4s3 3.4 3 5.4c0 1.66-1.34 3-3 3zm6.33-11H5.67l-.44-4h13.53l-.43 4z"/></g>
+<g id="local-florist"><path d="M12 22c4.97 0 9-4.03 9-9-4.97 0-9 4.03-9 9zM5.6 10.25c0 1.38 1.12 2.5 2.5 2.5.53 0 1.01-.16 1.42-.44l-.02.19c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5l-.02-.19c.4.28.89.44 1.42.44 1.38 0 2.5-1.12 2.5-2.5 0-1-.59-1.85-1.43-2.25.84-.4 1.43-1.25 1.43-2.25 0-1.38-1.12-2.5-2.5-2.5-.53 0-1.01.16-1.42.44l.02-.19C14.5 2.12 13.38 1 12 1S9.5 2.12 9.5 3.5l.02.19c-.4-.28-.89-.44-1.42-.44-1.38 0-2.5 1.12-2.5 2.5 0 1 .59 1.85 1.43 2.25-.84.4-1.43 1.25-1.43 2.25zM12 5.5c1.38 0 2.5 1.12 2.5 2.5s-1.12 2.5-2.5 2.5S9.5 9.38 9.5 8s1.12-2.5 2.5-2.5zM3 13c0 4.97 4.03 9 9 9 0-4.97-4.03-9-9-9z"/></g>
+<g id="local-gas-station"><path d="M19.77 7.23l.01-.01-3.72-3.72L15 4.56l2.11 2.11c-.94.36-1.61 1.26-1.61 2.33 0 1.38 1.12 2.5 2.5 2.5.36 0 .69-.08 1-.21v7.21c0 .55-.45 1-1 1s-1-.45-1-1V14c0-1.1-.9-2-2-2h-1V5c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v16h10v-7.5h1.5v5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V9c0-.69-.28-1.32-.73-1.77zM12 10H6V5h6v5zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"/></g>
+<g id="local-grocery-store"><path d="M7 18c-1.1 0-1.99.9-1.99 2S5.9 22 7 22s2-.9 2-2-.9-2-2-2zM1 2v2h2l3.6 7.59-1.35 2.45c-.16.28-.25.61-.25.96 0 1.1.9 2 2 2h12v-2H7.42c-.14 0-.25-.11-.25-.25l.03-.12.9-1.63h7.45c.75 0 1.41-.41 1.75-1.03l3.58-6.49c.08-.14.12-.31.12-.48 0-.55-.45-1-1-1H5.21l-.94-2H1zm16 16c-1.1 0-1.99.9-1.99 2s.89 2 1.99 2 2-.9 2-2-.9-2-2-2z"/></g>
+<g id="local-hospital"><path d="M19 3H5c-1.1 0-1.99.9-1.99 2L3 19c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 11h-4v4h-4v-4H6v-4h4V6h4v4h4v4z"/></g>
+<g id="local-hotel"><path d="M7 13c1.66 0 3-1.34 3-3S8.66 7 7 7s-3 1.34-3 3 1.34 3 3 3zm12-6h-8v7H3V5H1v15h2v-3h18v3h2v-9c0-2.21-1.79-4-4-4z"/></g>
+<g id="local-laundry-service"><path d="M9.17 16.83c1.56 1.56 4.1 1.56 5.66 0 1.56-1.56 1.56-4.1 0-5.66l-5.66 5.66zM18 2.01L6 2c-1.11 0-2 .89-2 2v16c0 1.11.89 2 2 2h12c1.11 0 2-.89 2-2V4c0-1.11-.89-1.99-2-1.99zM10 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM7 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm5 16c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z"/></g>
+<g id="local-library"><path d="M12 11.55C9.64 9.35 6.48 8 3 8v11c3.48 0 6.64 1.35 9 3.55 2.36-2.19 5.52-3.55 9-3.55V8c-3.48 0-6.64 1.35-9 3.55zM12 8c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3z"/></g>
+<g id="local-mall"><path d="M19 6h-2c0-2.76-2.24-5-5-5S7 3.24 7 6H5c-1.1 0-1.99.9-1.99 2L3 20c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-7-3c1.66 0 3 1.34 3 3H9c0-1.66 1.34-3 3-3zm0 10c-2.76 0-5-2.24-5-5h2c0 1.66 1.34 3 3 3s3-1.34 3-3h2c0 2.76-2.24 5-5 5z"/></g>
+<g id="local-movies"><path d="M18 3v2h-2V3H8v2H6V3H4v18h2v-2h2v2h8v-2h2v2h2V3h-2zM8 17H6v-2h2v2zm0-4H6v-2h2v2zm0-4H6V7h2v2zm10 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V7h2v2z"/></g>
+<g id="local-offer"><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/></g>
+<g id="local-parking"><path d="M13 3H6v18h4v-6h3c3.31 0 6-2.69 6-6s-2.69-6-6-6zm.2 8H10V7h3.2c1.1 0 2 .9 2 2s-.9 2-2 2z"/></g>
+<g id="local-pharmacy"><path d="M21 5h-2.64l1.14-3.14L17.15 1l-1.46 4H3v2l2 6-2 6v2h18v-2l-2-6 2-6V5zm-5 9h-3v3h-2v-3H8v-2h3V9h2v3h3v2z"/></g>
+<g id="local-phone"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></g>
+<g id="local-pizza"><path d="M12 2C8.43 2 5.23 3.54 3.01 6L12 22l8.99-16C18.78 3.55 15.57 2 12 2zM7 7c0-1.1.9-2 2-2s2 .9 2 2-.9 2-2 2-2-.9-2-2zm5 8c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+<g id="local-play"><path d="M20 12c0-1.1.9-2 2-2V6c0-1.1-.9-2-2-2H4c-1.1 0-1.99.9-1.99 2v4c1.1 0 1.99.9 1.99 2s-.89 2-2 2v4c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-4c-1.1 0-2-.9-2-2zm-4.42 4.8L12 14.5l-3.58 2.3 1.08-4.12-3.29-2.69 4.24-.25L12 5.8l1.54 3.95 4.24.25-3.29 2.69 1.09 4.11z"/></g>
+<g id="local-post-office"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></g>
+<g id="local-printshop"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></g>
+<g id="local-see"><circle cx="12" cy="12" r="3.2"/><path d="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/></g>
+<g id="local-shipping"><path d="M20 8h-3V4H3c-1.1 0-2 .9-2 2v11h2c0 1.66 1.34 3 3 3s3-1.34 3-3h6c0 1.66 1.34 3 3 3s3-1.34 3-3h2v-5l-3-4zM6 18.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm13.5-9l1.96 2.5H17V9.5h2.5zm-1.5 9c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="local-taxi"><path d="M18.92 6.01C18.72 5.42 18.16 5 17.5 5H15V3H9v2H6.5c-.66 0-1.21.42-1.42 1.01L3 12v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5.67 1.5 1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z"/></g>
+<g id="map"><path d="M20.5 3l-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM15 19l-6-2.11V5l6 2.11V19z"/></g>
+<g id="my-location"><path d="M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm8.94 3c-.46-4.17-3.77-7.48-7.94-7.94V1h-2v2.06C6.83 3.52 3.52 6.83 3.06 11H1v2h2.06c.46 4.17 3.77 7.48 7.94 7.94V23h2v-2.06c4.17-.46 7.48-3.77 7.94-7.94H23v-2h-2.06zM12 19c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z"/></g>
+<g id="navigation"><path d="M12 2L4.5 20.29l.71.71L12 18l6.79 3 .71-.71z"/></g>
+<g id="near-me"><path d="M21 3L3 10.53v.98l6.84 2.65L12.48 21h.98L21 3z"/></g>
+<g id="person-pin"><path d="M19 2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h4l3 3 3-3h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 3.3c1.49 0 2.7 1.21 2.7 2.7 0 1.49-1.21 2.7-2.7 2.7-1.49 0-2.7-1.21-2.7-2.7 0-1.49 1.21-2.7 2.7-2.7zM18 16H6v-.9c0-2 4-3.1 6-3.1s6 1.1 6 3.1v.9z"/></g>
+<g id="person-pin-circle"><path d="M12 2C8.14 2 5 5.14 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.86-3.14-7-7-7zm0 2c1.1 0 2 .9 2 2 0 1.11-.9 2-2 2s-2-.89-2-2c0-1.1.9-2 2-2zm0 10c-1.67 0-3.14-.85-4-2.15.02-1.32 2.67-2.05 4-2.05s3.98.73 4 2.05c-.86 1.3-2.33 2.15-4 2.15z"/></g>
+<g id="pin-drop"><path d="M18 8c0-3.31-2.69-6-6-6S6 4.69 6 8c0 4.5 6 11 6 11s6-6.5 6-11zm-8 0c0-1.1.9-2 2-2s2 .9 2 2-.89 2-2 2c-1.1 0-2-.9-2-2zM5 20v2h14v-2H5z"/></g>
+<g id="place"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></g>
+<g id="rate-review"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM6 14v-2.47l6.88-6.88c.2-.2.51-.2.71 0l1.77 1.77c.2.2.2.51 0 .71L8.47 14H6zm12 0h-7.5l2-2H18v2z"/></g>
+<g id="restaurant"><path d="M11 9H9V2H7v7H5V2H3v7c0 2.12 1.66 3.84 3.75 3.97V22h2.5v-9.03C11.34 12.84 13 11.12 13 9V2h-2v7zm5-3v8h2.5v8H21V2c-2.76 0-5 2.24-5 4z"/></g>
+<g id="restaurant-menu"><path d="M8.1 13.34l2.83-2.83L3.91 3.5c-1.56 1.56-1.56 4.09 0 5.66l4.19 4.18zm6.78-1.81c1.53.71 3.68.21 5.27-1.38 1.91-1.91 2.28-4.65.81-6.12-1.46-1.46-4.2-1.1-6.12.81-1.59 1.59-2.09 3.74-1.38 5.27L3.7 19.87l1.41 1.41L12 14.41l6.88 6.88 1.41-1.41L13.41 13l1.47-1.47z"/></g>
+<g id="satellite"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM5 4.99h3C8 6.65 6.66 8 5 8V4.99zM5 12v-2c2.76 0 5-2.25 5-5.01h2C12 8.86 8.87 12 5 12zm0 6l3.5-4.5 2.5 3.01L14.5 12l4.5 6H5z"/></g>
+<g id="store-mall-directory"><path d="M20 4H4v2h16V4zm1 10v-2l-1-5H4l-1 5v2h1v6h10v-6h4v6h2v-6h1zm-9 4H6v-4h6v4z"/></g>
+<g id="streetview"><path d="M12.56 14.33c-.34.27-.56.7-.56 1.17V21h7c1.1 0 2-.9 2-2v-5.98c-.94-.33-1.95-.52-3-.52-2.03 0-3.93.7-5.44 1.83z"/><circle cx="18" cy="6" r="5"/><path d="M11.5 6c0-1.08.27-2.1.74-3H5c-1.1 0-2 .9-2 2v14c0 .55.23 1.05.59 1.41l9.82-9.82C12.23 9.42 11.5 7.8 11.5 6z"/></g>
+<g id="subway"><circle cx="15.5" cy="16" r="1"/><circle cx="8.5" cy="16" r="1"/><path d="M7.01 9h10v5h-10zM17.8 2.8C16 2.09 13.86 2 12 2c-1.86 0-4 .09-5.8.8C3.53 3.84 2 6.05 2 8.86V22h20V8.86c0-2.81-1.53-5.02-4.2-6.06zm.2 13.08c0 1.45-1.18 2.62-2.63 2.62l1.13 1.12V20H15l-1.5-1.5h-2.83L9.17 20H7.5v-.38l1.12-1.12C7.18 18.5 6 17.32 6 15.88V9c0-2.63 3-3 6-3 3.32 0 6 .38 6 3v6.88z"/></g>
+<g id="terrain"><path d="M14 6l-3.75 5 2.85 3.8-1.6 1.2C9.81 13.75 7 10 7 10l-6 8h22L14 6z"/></g>
+<g id="traffic"><path d="M20 10h-3V8.86c1.72-.45 3-2 3-3.86h-3V4c0-.55-.45-1-1-1H8c-.55 0-1 .45-1 1v1H4c0 1.86 1.28 3.41 3 3.86V10H4c0 1.86 1.28 3.41 3 3.86V15H4c0 1.86 1.28 3.41 3 3.86V20c0 .55.45 1 1 1h8c.55 0 1-.45 1-1v-1.14c1.72-.45 3-2 3-3.86h-3v-1.14c1.72-.45 3-2 3-3.86zm-8 9c-1.11 0-2-.9-2-2s.89-2 2-2c1.1 0 2 .9 2 2s-.89 2-2 2zm0-5c-1.11 0-2-.9-2-2s.89-2 2-2c1.1 0 2 .9 2 2s-.89 2-2 2zm0-5c-1.11 0-2-.9-2-2 0-1.11.89-2 2-2 1.1 0 2 .89 2 2 0 1.1-.89 2-2 2z"/></g>
+<g id="train"><path d="M12 2c-4 0-8 .5-8 4v9.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h2.23l2-2H14l2 2h2v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V6c0-3.5-3.58-4-8-4zM7.5 17c-.83 0-1.5-.67-1.5-1.5S6.67 14 7.5 14s1.5.67 1.5 1.5S8.33 17 7.5 17zm3.5-7H6V6h5v4zm2 0V6h5v4h-5zm3.5 7c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="tram"><path d="M19 16.94V8.5c0-2.79-2.61-3.4-6.01-3.49l.76-1.51H17V2H7v1.5h4.75l-.76 1.52C7.86 5.11 5 5.73 5 8.5v8.44c0 1.45 1.19 2.66 2.59 2.97L6 21.5v.5h2.23l2-2H14l2 2h2v-.5L16.5 20h-.08c1.69 0 2.58-1.37 2.58-3.06zm-7 1.56c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm5-4.5H7V9h10v5z"/></g>
+<g id="transfer-within-a-station"><path d="M16.49 15.5v-1.75L14 16.25l2.49 2.5V17H22v-1.5zm3.02 4.25H14v1.5h5.51V23L22 20.5 19.51 18zM9.5 5.5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM5.75 8.9L3 23h2.1l1.75-8L9 17v6h2v-7.55L8.95 13.4l.6-3C10.85 12 12.8 13 15 13v-2c-1.85 0-3.45-1-4.35-2.45l-.95-1.6C9.35 6.35 8.7 6 8 6c-.25 0-.5.05-.75.15L2 8.3V13h2V9.65l1.75-.75"/></g>
+<g id="zoom-out-map"><path d="M15 3l2.3 2.3-2.89 2.87 1.42 1.42L18.7 6.7 21 9V3zM3 9l2.3-2.3 2.87 2.89 1.42-1.42L6.7 5.3 9 3H3zm6 12l-2.3-2.3 2.89-2.87-1.42-1.42L5.3 17.3 3 15v6zm12-6l-2.3 2.3-2.87-2.89-1.42 1.42 2.89 2.87L15 21h6z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.d.ts
new file mode 100644
index 00000000000..2a380db11a0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * notification-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.html
new file mode 100644
index 00000000000..272b95b0ee3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/notification-icons.html
@@ -0,0 +1,70 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="notification" size="24">
+<svg><defs>
+<g id="adb"><path d="M5 16c0 3.87 3.13 7 7 7s7-3.13 7-7v-4H5v4zM16.12 4.37l2.1-2.1-.82-.83-2.3 2.31C14.16 3.28 13.12 3 12 3s-2.16.28-3.09.75L6.6 1.44l-.82.83 2.1 2.1C6.14 5.64 5 7.68 5 10v1h14v-1c0-2.32-1.14-4.36-2.88-5.63zM9 9c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm6 0c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z"/></g>
+<g id="airline-seat-flat"><path d="M22 11v2H9V7h9c2.21 0 4 1.79 4 4zM2 14v2h6v2h8v-2h6v-2H2zm5.14-1.9c1.16-1.19 1.14-3.08-.04-4.24-1.19-1.16-3.08-1.14-4.24.04-1.16 1.19-1.14 3.08.04 4.24 1.19 1.16 3.08 1.14 4.24-.04z"/></g>
+<g id="airline-seat-flat-angled"><path d="M22.25 14.29l-.69 1.89L9.2 11.71l2.08-5.66 8.56 3.09c2.1.76 3.18 3.06 2.41 5.15zM1.5 12.14L8 14.48V19h8v-1.63L20.52 19l.69-1.89-19.02-6.86-.69 1.89zm5.8-1.94c1.49-.72 2.12-2.51 1.41-4C7.99 4.71 6.2 4.08 4.7 4.8c-1.49.71-2.12 2.5-1.4 4 .71 1.49 2.5 2.12 4 1.4z"/></g>
+<g id="airline-seat-individual-suite"><path d="M7 13c1.65 0 3-1.35 3-3S8.65 7 7 7s-3 1.35-3 3 1.35 3 3 3zm12-6h-8v7H3V7H1v10h22v-6c0-2.21-1.79-4-4-4z"/></g>
+<g id="airline-seat-legroom-extra"><path d="M4 12V3H2v9c0 2.76 2.24 5 5 5h6v-2H7c-1.66 0-3-1.34-3-3zm18.83 5.24c-.38-.72-1.29-.97-2.03-.63l-1.09.5-3.41-6.98c-.34-.68-1.03-1.12-1.79-1.12L11 9V3H5v8c0 1.66 1.34 3 3 3h7l3.41 7 3.72-1.7c.77-.36 1.1-1.3.7-2.06z"/></g>
+<g id="airline-seat-legroom-normal"><path d="M5 12V3H3v9c0 2.76 2.24 5 5 5h6v-2H8c-1.66 0-3-1.34-3-3zm15.5 6H19v-7c0-1.1-.9-2-2-2h-5V3H6v8c0 1.65 1.35 3 3 3h7v7h4.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5z"/></g>
+<g id="airline-seat-legroom-reduced"><path d="M19.97 19.2c.18.96-.55 1.8-1.47 1.8H14v-3l1-4H9c-1.65 0-3-1.35-3-3V3h6v6h5c1.1 0 2 .9 2 2l-2 7h1.44c.73 0 1.39.49 1.53 1.2zM5 12V3H3v9c0 2.76 2.24 5 5 5h4v-2H8c-1.66 0-3-1.34-3-3z"/></g>
+<g id="airline-seat-recline-extra"><path d="M5.35 5.64c-.9-.64-1.12-1.88-.49-2.79.63-.9 1.88-1.12 2.79-.49.9.64 1.12 1.88.49 2.79-.64.9-1.88 1.12-2.79.49zM16 19H8.93c-1.48 0-2.74-1.08-2.96-2.54L4 7H2l1.99 9.76C4.37 19.2 6.47 21 8.94 21H16v-2zm.23-4h-4.88l-1.03-4.1c1.58.89 3.28 1.54 5.15 1.22V9.99c-1.63.31-3.44-.27-4.69-1.25L9.14 7.47c-.23-.18-.49-.3-.76-.38-.32-.09-.66-.12-.99-.06h-.02c-1.23.22-2.05 1.39-1.84 2.61l1.35 5.92C7.16 16.98 8.39 18 9.83 18h6.85l3.82 3 1.5-1.5-5.77-4.5z"/></g>
+<g id="airline-seat-recline-normal"><path d="M7.59 5.41c-.78-.78-.78-2.05 0-2.83.78-.78 2.05-.78 2.83 0 .78.78.78 2.05 0 2.83-.79.79-2.05.79-2.83 0zM6 16V7H4v9c0 2.76 2.24 5 5 5h6v-2H9c-1.66 0-3-1.34-3-3zm14 4.07L14.93 15H11.5v-3.68c1.4 1.15 3.6 2.16 5.5 2.16v-2.16c-1.66.02-3.61-.87-4.67-2.04l-1.4-1.55c-.19-.21-.43-.38-.69-.5-.29-.14-.62-.23-.96-.23h-.03C8.01 7 7 8.01 7 9.25V15c0 1.66 1.34 3 3 3h5.07l3.5 3.5L20 20.07z"/></g>
+<g id="bluetooth-audio"><path d="M14.24 12.01l2.32 2.32c.28-.72.44-1.51.44-2.33 0-.82-.16-1.59-.43-2.31l-2.33 2.32zm5.29-5.3l-1.26 1.26c.63 1.21.98 2.57.98 4.02s-.36 2.82-.98 4.02l1.2 1.2c.97-1.54 1.54-3.36 1.54-5.31-.01-1.89-.55-3.67-1.48-5.19zm-3.82 1L10 2H9v7.59L4.41 5 3 6.41 8.59 12 3 17.59 4.41 19 9 14.41V22h1l5.71-5.71-4.3-4.29 4.3-4.29zM11 5.83l1.88 1.88L11 9.59V5.83zm1.88 10.46L11 18.17v-3.76l1.88 1.88z"/></g>
+<g id="confirmation-number"><path d="M22 10V6c0-1.11-.9-2-2-2H4c-1.1 0-1.99.89-1.99 2v4c1.1 0 1.99.9 1.99 2s-.89 2-2 2v4c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-4c-1.1 0-2-.9-2-2s.9-2 2-2zm-9 7.5h-2v-2h2v2zm0-4.5h-2v-2h2v2zm0-4.5h-2v-2h2v2z"/></g>
+<g id="disc-full"><path d="M20 16h2v-2h-2v2zm0-9v5h2V7h-2zM10 4c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 10c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></g>
+<g id="do-not-disturb"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8 0-1.85.63-3.55 1.69-4.9L16.9 18.31C15.55 19.37 13.85 20 12 20zm6.31-3.1L7.1 5.69C8.45 4.63 10.15 4 12 4c4.42 0 8 3.58 8 8 0 1.85-.63 3.55-1.69 4.9z"/></g>
+<g id="do-not-disturb-alt"><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2zM4 12c0-4.4 3.6-8 8-8 1.8 0 3.5.6 4.9 1.7L5.7 16.9C4.6 15.5 4 13.8 4 12zm8 8c-1.8 0-3.5-.6-4.9-1.7L18.3 7.1C19.4 8.5 20 10.2 20 12c0 4.4-3.6 8-8 8z"/></g>
+<g id="do-not-disturb-off"><path d="M17 11v2h-1.46l4.68 4.68C21.34 16.07 22 14.11 22 12c0-5.52-4.48-10-10-10-2.11 0-4.07.66-5.68 1.78L13.54 11H17zM2.27 2.27L1 3.54l2.78 2.78C2.66 7.93 2 9.89 2 12c0 5.52 4.48 10 10 10 2.11 0 4.07-.66 5.68-1.78L20.46 23l1.27-1.27L11 11 2.27 2.27zM7 13v-2h1.46l2 2H7z"/></g>
+<g id="do-not-disturb-on"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11H7v-2h10v2z"/></g>
+<g id="drive-eta"><path d="M18.92 5.01C18.72 4.42 18.16 4 17.5 4h-11c-.66 0-1.21.42-1.42 1.01L3 11v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 15c-.83 0-1.5-.67-1.5-1.5S5.67 12 6.5 12s1.5.67 1.5 1.5S7.33 15 6.5 15zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 10l1.5-4.5h11L19 10H5z"/></g>
+<g id="enhanced-encryption"><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v2H8.9V6zM16 16h-3v3h-2v-3H8v-2h3v-3h2v3h3v2z"/></g>
+<g id="event-available"><path d="M16.53 11.06L15.47 10l-4.88 4.88-2.12-2.12-1.06 1.06L10.59 17l5.94-5.94zM19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11z"/></g>
+<g id="event-busy"><path d="M9.31 17l2.44-2.44L14.19 17l1.06-1.06-2.44-2.44 2.44-2.44L14.19 10l-2.44 2.44L9.31 10l-1.06 1.06 2.44 2.44-2.44 2.44L9.31 17zM19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11z"/></g>
+<g id="event-note"><path d="M17 10H7v2h10v-2zm2-7h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zm-5-5H7v2h7v-2z"/></g>
+<g id="folder-special"><path d="M20 6h-8l-2-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm-2.06 11L15 15.28 12.06 17l.78-3.33-2.59-2.24 3.41-.29L15 8l1.34 3.14 3.41.29-2.59 2.24.78 3.33z"/></g>
+<g id="live-tv"><path d="M21 6h-7.59l3.29-3.29L16 2l-4 4-4-4-.71.71L10.59 6H3c-1.1 0-2 .89-2 2v12c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.11-.9-2-2-2zm0 14H3V8h18v12zM9 10v8l7-4z"/></g>
+<g id="mms"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM5 14l3.5-4.5 2.5 3.01L14.5 8l4.5 6H5z"/></g>
+<g id="more"><path d="M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.97.89 1.66.89H22c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 13.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm5 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm5 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z"/></g>
+<g id="network-check"><path d="M15.9 5c-.17 0-.32.09-.41.23l-.07.15-5.18 11.65c-.16.29-.26.61-.26.96 0 1.11.9 2.01 2.01 2.01.96 0 1.77-.68 1.96-1.59l.01-.03L16.4 5.5c0-.28-.22-.5-.5-.5zM1 9l2 2c2.88-2.88 6.79-4.08 10.53-3.62l1.19-2.68C9.89 3.84 4.74 5.27 1 9zm20 2l2-2c-1.64-1.64-3.55-2.82-5.59-3.57l-.53 2.82c1.5.62 2.9 1.53 4.12 2.75zm-4 4l2-2c-.8-.8-1.7-1.42-2.66-1.89l-.55 2.92c.42.27.83.59 1.21.97zM5 13l2 2c1.13-1.13 2.56-1.79 4.03-2l1.28-2.88c-2.63-.08-5.3.87-7.31 2.88z"/></g>
+<g id="network-locked"><path d="M19.5 10c.17 0 .33.03.5.05V1L1 20h13v-3c0-.89.39-1.68 1-2.23v-.27c0-2.48 2.02-4.5 4.5-4.5zm2.5 6v-1.5c0-1.38-1.12-2.5-2.5-2.5S17 13.12 17 14.5V16c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-4c0-.55-.45-1-1-1zm-1 0h-3v-1.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V16z"/></g>
+<g id="no-encryption"><path d="M21 21.78L4.22 5 3 6.22l2.04 2.04C4.42 8.6 4 9.25 4 10v10c0 1.1.9 2 2 2h12c.23 0 .45-.05.66-.12L19.78 23 21 21.78zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v2H9.66L20 18.34V10c0-1.1-.9-2-2-2h-1V6c0-2.76-2.24-5-5-5-2.56 0-4.64 1.93-4.94 4.4L8.9 7.24V6z"/></g>
+<g id="ondemand-video"><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12zm-5-6l-7 4V7z"/></g>
+<g id="personal-video"><path d="M21 3H3c-1.11 0-2 .89-2 2v12c0 1.1.89 2 2 2h5v2h8v-2h5c1.1 0 1.99-.9 1.99-2L23 5c0-1.11-.9-2-2-2zm0 14H3V5h18v12z"/></g>
+<g id="phone-bluetooth-speaker"><path d="M14.71 9.5L17 7.21V11h.5l2.85-2.85L18.21 6l2.15-2.15L17.5 1H17v3.79L14.71 2.5l-.71.71L16.79 6 14 8.79l.71.71zM18 2.91l.94.94-.94.94V2.91zm0 4.3l.94.94-.94.94V7.21zm2 8.29c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z"/></g>
+<g id="phone-forwarded"><path d="M18 11l5-5-5-5v3h-4v4h4v3zm2 4.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1z"/></g>
+<g id="phone-in-talk"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 12h2c0-4.97-4.03-9-9-9v2c3.87 0 7 3.13 7 7zm-4 0h2c0-2.76-2.24-5-5-5v2c1.66 0 3 1.34 3 3z"/></g>
+<g id="phone-locked"><path d="M20 15.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM20 4v-.5C20 2.12 18.88 1 17.5 1S15 2.12 15 3.5V4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-.8 0h-3.4v-.5c0-.94.76-1.7 1.7-1.7s1.7.76 1.7 1.7V4z"/></g>
+<g id="phone-missed"><path d="M6.5 5.5L12 11l7-7-1-1-6 6-4.5-4.5H11V3H5v6h1.5V5.5zm17.21 11.17C20.66 13.78 16.54 12 12 12 7.46 12 3.34 13.78.29 16.67c-.18.18-.29.43-.29.71s.11.53.29.71l2.48 2.48c.18.18.43.29.71.29.27 0 .52-.11.7-.28.79-.74 1.69-1.36 2.66-1.85.33-.16.56-.5.56-.9v-3.1c1.45-.48 3-.73 4.6-.73 1.6 0 3.15.25 4.6.72v3.1c0 .39.23.74.56.9.98.49 1.87 1.12 2.67 1.85.18.18.43.28.7.28.28 0 .53-.11.71-.29l2.48-2.48c.18-.18.29-.43.29-.71s-.12-.52-.3-.7z"/></g>
+<g id="phone-paused"><path d="M17 3h-2v7h2V3zm3 12.5c-1.25 0-2.45-.2-3.57-.57-.35-.11-.74-.03-1.02.24l-2.2 2.2c-2.83-1.44-5.15-3.75-6.59-6.59l2.2-2.21c.28-.26.36-.65.25-1C8.7 6.45 8.5 5.25 8.5 4c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1 0 9.39 7.61 17 17 17 .55 0 1-.45 1-1v-3.5c0-.55-.45-1-1-1zM19 3v7h2V3h-2z"/></g>
+<g id="power"><path d="M16.01 7L16 3h-2v4h-4V3H8v4h-.01C7 6.99 6 7.99 6 8.99v5.49L9.5 18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z"/></g>
+<g id="priority-high"><circle cx="12" cy="19" r="2"/><path d="M10 3h4v12h-4z"/></g>
+<g id="rv-hookup"><path d="M20 17v-6c0-1.1-.9-2-2-2H7V7l-3 3 3 3v-2h4v3H4v3c0 1.1.9 2 2 2h2c0 1.66 1.34 3 3 3s3-1.34 3-3h8v-2h-2zm-9 3c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm7-6h-4v-3h4v3zM17 2v2H9v2h8v2l3-3z"/></g>
+<g id="sd-card"><path d="M18 2h-8L4.02 8 4 20c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-6 6h-2V4h2v4zm3 0h-2V4h2v4zm3 0h-2V4h2v4z"/></g>
+<g id="sim-card-alert"><path d="M18 2h-8L4.02 8 4 20c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-5 15h-2v-2h2v2zm0-4h-2V8h2v5z"/></g>
+<g id="sms"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9 11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z"/></g>
+<g id="sms-failed"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-7 12h-2v-2h2v2zm0-4h-2V6h2v4z"/></g>
+<g id="sync"><path d="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z"/></g>
+<g id="sync-disabled"><path d="M10 6.35V4.26c-.8.21-1.55.54-2.23.96l1.46 1.46c.25-.12.5-.24.77-.33zm-7.14-.94l2.36 2.36C4.45 8.99 4 10.44 4 12c0 2.21.91 4.2 2.36 5.64L4 20h6v-6l-2.24 2.24C6.68 15.15 6 13.66 6 12c0-1 .25-1.94.68-2.77l8.08 8.08c-.25.13-.5.25-.77.34v2.09c.8-.21 1.55-.54 2.23-.96l2.36 2.36 1.27-1.27L4.14 4.14 2.86 5.41zM20 4h-6v6l2.24-2.24C17.32 8.85 18 10.34 18 12c0 1-.25 1.94-.68 2.77l1.46 1.46C19.55 15.01 20 13.56 20 12c0-2.21-.91-4.2-2.36-5.64L20 4z"/></g>
+<g id="sync-problem"><path d="M3 12c0 2.21.91 4.2 2.36 5.64L3 20h6v-6l-2.24 2.24C5.68 15.15 5 13.66 5 12c0-2.61 1.67-4.83 4-5.65V4.26C5.55 5.15 3 8.27 3 12zm8 5h2v-2h-2v2zM21 4h-6v6l2.24-2.24C18.32 8.85 19 10.34 19 12c0 2.61-1.67 4.83-4 5.65v2.09c3.45-.89 6-4.01 6-7.74 0-2.21-.91-4.2-2.36-5.64L21 4zm-10 9h2V7h-2v6z"/></g>
+<g id="system-update"><path d="M17 1.01L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14zm-1-6h-3V8h-2v5H8l4 4 4-4z"/></g>
+<g id="tap-and-play"><path d="M2 16v2c2.76 0 5 2.24 5 5h2c0-3.87-3.13-7-7-7zm0 4v3h3c0-1.66-1.34-3-3-3zm0-8v2c4.97 0 9 4.03 9 9h2c0-6.08-4.92-11-11-11zM17 1.01L7 1c-1.1 0-2 .9-2 2v7.37c.69.16 1.36.37 2 .64V5h10v13h-3.03c.52 1.25.84 2.59.95 4H17c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99z"/></g>
+<g id="time-to-leave"><path d="M18.92 5.01C18.72 4.42 18.16 4 17.5 4h-11c-.66 0-1.21.42-1.42 1.01L3 11v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 15c-.83 0-1.5-.67-1.5-1.5S5.67 12 6.5 12s1.5.67 1.5 1.5S7.33 15 6.5 15zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 10l1.5-4.5h11L19 10H5z"/></g>
+<g id="vibration"><path d="M0 15h2V9H0v6zm3 2h2V7H3v10zm19-8v6h2V9h-2zm-3 8h2V7h-2v10zM16.5 3h-9C6.67 3 6 3.67 6 4.5v15c0 .83.67 1.5 1.5 1.5h9c.83 0 1.5-.67 1.5-1.5v-15c0-.83-.67-1.5-1.5-1.5zM16 19H8V5h8v14z"/></g>
+<g id="voice-chat"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12l-4-3.2V14H6V6h8v3.2L18 6v8z"/></g>
+<g id="vpn-lock"><path d="M22 4v-.5C22 2.12 20.88 1 19.5 1S17 2.12 17 3.5V4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h5c.55 0 1-.45 1-1V5c0-.55-.45-1-1-1zm-.8 0h-3.4v-.5c0-.94.76-1.7 1.7-1.7s1.7.76 1.7 1.7V4zm-2.28 8c.04.33.08.66.08 1 0 2.08-.8 3.97-2.1 5.39-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H7v-2h2c.55 0 1-.45 1-1V8h2c1.1 0 2-.9 2-2V3.46c-.95-.3-1.95-.46-3-.46C5.48 3 1 7.48 1 13s4.48 10 10 10 10-4.48 10-10c0-.34-.02-.67-.05-1h-2.03zM10 20.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L8 16v1c0 1.1.9 2 2 2v1.93z"/></g>
+<g id="wc"><path d="M5.5 22v-7.5H4V9c0-1.1.9-2 2-2h3c1.1 0 2 .9 2 2v5.5H9.5V22h-4zM18 22v-6h3l-2.54-7.63C18.18 7.55 17.42 7 16.56 7h-.12c-.86 0-1.63.55-1.9 1.37L12 16h3v6h3zM7.5 6c1.11 0 2-.89 2-2s-.89-2-2-2-2 .89-2 2 .89 2 2 2zm9 0c1.11 0 2-.89 2-2s-.89-2-2-2-2 .89-2 2 .89 2 2 2z"/></g>
+<g id="wifi"><path d="M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8l3 3 3-3c-1.65-1.66-4.34-1.66-6 0zm-4-4l2 2c2.76-2.76 7.24-2.76 10 0l2-2C15.14 9.14 8.87 9.14 5 13z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package-lock.json
new file mode 100644
index 00000000000..b66123d60f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package-lock.json
@@ -0,0 +1,1196 @@
+{
+ "name": "@polymer/iron-icons",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.1.tgz",
+ "integrity": "sha512-N0rNp+F8Cp0iQ40i3Lx3onWnRXMnfMosR9WFE+IHMF4k5Fv2toRYz77EZMEPPZCz1tzFmCUelHxvxpdssT9oCw==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.2",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.7.tgz",
+ "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz",
+ "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.2.tgz",
+ "integrity": "sha512-hICrJJ5zUI7hnEBBluE2169CG3Xnn4D5HPeLkMjbiOyneSLTUX5Wz1d4FSi3xALUtzulIBStSt0S2tLXs8eVrg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.102",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.40",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.9.0",
+ "resolve": "1.5.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.9.0.tgz",
+ "integrity": "sha512-WPOqlV2W/M4Ni40QIqYSv8PE7H4rjiPm1KEf02QPtjZOGlAC4Rv7e6UJ1Ke1O70WT5bydcsEn3LViFIqYpVOJw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.102",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package.json
new file mode 100644
index 00000000000..e6360ac2d50
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-icons",
+ "private": true,
+ "description": "A set of icons for use with iron-icon",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-icons"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.1",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.d.ts
new file mode 100644
index 00000000000..6b03265d44f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * places-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.html
new file mode 100644
index 00000000000..fa4827bf02a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/places-icons.html
@@ -0,0 +1,35 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="places" size="24">
+<svg><defs>
+<g id="ac-unit"><path d="M22 11h-4.17l3.24-3.24-1.41-1.42L15 11h-2V9l4.66-4.66-1.42-1.41L13 6.17V2h-2v4.17L7.76 2.93 6.34 4.34 11 9v2H9L4.34 6.34 2.93 7.76 6.17 11H2v2h4.17l-3.24 3.24 1.41 1.42L9 13h2v2l-4.66 4.66 1.42 1.41L11 17.83V22h2v-4.17l3.24 3.24 1.42-1.41L13 15v-2h2l4.66 4.66 1.41-1.42L17.83 13H22z"/></g>
+<g id="airport-shuttle"><path d="M17 5H3c-1.1 0-2 .89-2 2v9h2c0 1.65 1.34 3 3 3s3-1.35 3-3h5.5c0 1.65 1.34 3 3 3s3-1.35 3-3H23v-5l-6-6zM3 11V7h4v4H3zm3 6.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm7-6.5H9V7h4v4zm4.5 6.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM15 11V7h1l4 4h-5z"/></g>
+<g id="all-inclusive"><path d="M18.6 6.62c-1.44 0-2.8.56-3.77 1.53L12 10.66 10.48 12h.01L7.8 14.39c-.64.64-1.49.99-2.4.99-1.87 0-3.39-1.51-3.39-3.38S3.53 8.62 5.4 8.62c.91 0 1.76.35 2.44 1.03l1.13 1 1.51-1.34L9.22 8.2C8.2 7.18 6.84 6.62 5.4 6.62 2.42 6.62 0 9.04 0 12s2.42 5.38 5.4 5.38c1.44 0 2.8-.56 3.77-1.53l2.83-2.5.01.01L13.52 12h-.01l2.69-2.39c.64-.64 1.49-.99 2.4-.99 1.87 0 3.39 1.51 3.39 3.38s-1.52 3.38-3.39 3.38c-.9 0-1.76-.35-2.44-1.03l-1.14-1.01-1.51 1.34 1.27 1.12c1.02 1.01 2.37 1.57 3.82 1.57 2.98 0 5.4-2.41 5.4-5.38s-2.42-5.37-5.4-5.37z"/></g>
+<g id="beach-access"><path d="M13.127 14.56l1.43-1.43 6.44 6.443L19.57 21zm4.293-5.73l2.86-2.86c-3.95-3.95-10.35-3.96-14.3-.02 3.93-1.3 8.31-.25 11.44 2.88zM5.95 5.98c-3.94 3.95-3.93 10.35.02 14.3l2.86-2.86C5.7 14.29 4.65 9.91 5.95 5.98zm.02-.02l-.01.01c-.38 3.01 1.17 6.88 4.3 10.02l5.73-5.73c-3.13-3.13-7.01-4.68-10.02-4.3z"/></g>
+<g id="business-center"><path d="M10 16v-1H3.01L3 19c0 1.11.89 2 2 2h14c1.11 0 2-.89 2-2v-4h-7v1h-4zm10-9h-4.01V5l-2-2h-4l-2 2v2H4c-1.1 0-2 .9-2 2v3c0 1.11.89 2 2 2h6v-2h4v2h6c1.1 0 2-.9 2-2V9c0-1.1-.9-2-2-2zm-6 0h-4V5h4v2z"/></g>
+<g id="casino"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM7.5 18c-.83 0-1.5-.67-1.5-1.5S6.67 15 7.5 15s1.5.67 1.5 1.5S8.33 18 7.5 18zm0-9C6.67 9 6 8.33 6 7.5S6.67 6 7.5 6 9 6.67 9 7.5 8.33 9 7.5 9zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm0-9c-.83 0-1.5-.67-1.5-1.5S15.67 6 16.5 6s1.5.67 1.5 1.5S17.33 9 16.5 9z"/></g>
+<g id="child-care"><circle cx="14.5" cy="10.5" r="1.25"/><circle cx="9.5" cy="10.5" r="1.25"/><path d="M22.94 12.66c.04-.21.06-.43.06-.66s-.02-.45-.06-.66c-.25-1.51-1.36-2.74-2.81-3.17-.53-1.12-1.28-2.1-2.19-2.91C16.36 3.85 14.28 3 12 3s-4.36.85-5.94 2.26c-.92.81-1.67 1.8-2.19 2.91-1.45.43-2.56 1.65-2.81 3.17-.04.21-.06.43-.06.66s.02.45.06.66c.25 1.51 1.36 2.74 2.81 3.17.52 1.11 1.27 2.09 2.17 2.89C7.62 20.14 9.71 21 12 21s4.38-.86 5.97-2.28c.9-.8 1.65-1.79 2.17-2.89 1.44-.43 2.55-1.65 2.8-3.17zM19 14c-.1 0-.19-.02-.29-.03-.2.67-.49 1.29-.86 1.86C16.6 17.74 14.45 19 12 19s-4.6-1.26-5.85-3.17c-.37-.57-.66-1.19-.86-1.86-.1.01-.19.03-.29.03-1.1 0-2-.9-2-2s.9-2 2-2c.1 0 .19.02.29.03.2-.67.49-1.29.86-1.86C7.4 6.26 9.55 5 12 5s4.6 1.26 5.85 3.17c.37.57.66 1.19.86 1.86.1-.01.19-.03.29-.03 1.1 0 2 .9 2 2s-.9 2-2 2zM7.5 14c.76 1.77 2.49 3 4.5 3s3.74-1.23 4.5-3h-9z"/></g>
+<g id="child-friendly"><path d="M13 2v8h8c0-4.42-3.58-8-8-8zm6.32 13.89C20.37 14.54 21 12.84 21 11H6.44l-.95-2H2v2h2.22s1.89 4.07 2.12 4.42c-1.1.59-1.84 1.75-1.84 3.08C4.5 20.43 6.07 22 8 22c1.76 0 3.22-1.3 3.46-3h2.08c.24 1.7 1.7 3 3.46 3 1.93 0 3.5-1.57 3.5-3.5 0-1.04-.46-1.97-1.18-2.61zM8 20c-.83 0-1.5-.67-1.5-1.5S7.17 17 8 17s1.5.67 1.5 1.5S8.83 20 8 20zm9 0c-.83 0-1.5-.67-1.5-1.5S16.17 17 17 17s1.5.67 1.5 1.5S17.83 20 17 20z"/></g>
+<g id="fitness-center"><path d="M20.57 14.86L22 13.43 20.57 12 17 15.57 8.43 7 12 3.43 10.57 2 9.14 3.43 7.71 2 5.57 4.14 4.14 2.71 2.71 4.14l1.43 1.43L2 7.71l1.43 1.43L2 10.57 3.43 12 7 8.43 15.57 17 12 20.57 13.43 22l1.43-1.43L16.29 22l2.14-2.14 1.43 1.43 1.43-1.43-1.43-1.43L22 16.29z"/></g>
+<g id="free-breakfast"><path d="M20 3H4v10c0 2.21 1.79 4 4 4h6c2.21 0 4-1.79 4-4v-3h2c1.11 0 2-.9 2-2V5c0-1.11-.89-2-2-2zm0 5h-2V5h2v3zM4 19h16v2H4z"/></g>
+<g id="golf-course"><circle cx="19.5" cy="19.5" r="1.5"/><path d="M17 5.92L9 2v18H7v-1.73c-1.79.35-3 .99-3 1.73 0 1.1 2.69 2 6 2s6-.9 6-2c0-.99-2.16-1.81-5-1.97V8.98l6-3.06z"/></g>
+<g id="hot-tub"><circle cx="7" cy="6" r="2"/><path d="M11.15 12c-.31-.22-.59-.46-.82-.72l-1.4-1.55c-.19-.21-.43-.38-.69-.5-.29-.14-.62-.23-.96-.23h-.03C6.01 9 5 10.01 5 11.25V12H2v8c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-8H11.15zM7 20H5v-6h2v6zm4 0H9v-6h2v6zm4 0h-2v-6h2v6zm4 0h-2v-6h2v6zm-.35-14.14l-.07-.07c-.57-.62-.82-1.41-.67-2.2L18 3h-1.89l-.06.43c-.2 1.36.27 2.71 1.3 3.72l.07.06c.57.62.82 1.41.67 2.2l-.11.59h1.91l.06-.43c.21-1.36-.27-2.71-1.3-3.71zm-4 0l-.07-.07c-.57-.62-.82-1.41-.67-2.2L14 3h-1.89l-.06.43c-.2 1.36.27 2.71 1.3 3.72l.07.06c.57.62.82 1.41.67 2.2l-.11.59h1.91l.06-.43c.21-1.36-.27-2.71-1.3-3.71z"/></g>
+<g id="kitchen"><path d="M18 2.01L6 2c-1.1 0-2 .89-2 2v16c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V4c0-1.11-.9-1.99-2-1.99zM18 20H6v-9.02h12V20zm0-11H6V4h12v5zM8 5h2v3H8zm0 7h2v5H8z"/></g>
+<g id="pool"><path d="M22 21c-1.11 0-1.73-.37-2.18-.64-.37-.22-.6-.36-1.15-.36-.56 0-.78.13-1.15.36-.46.27-1.07.64-2.18.64s-1.73-.37-2.18-.64c-.37-.22-.6-.36-1.15-.36-.56 0-.78.13-1.15.36-.46.27-1.08.64-2.19.64-1.11 0-1.73-.37-2.18-.64-.37-.23-.6-.36-1.15-.36s-.78.13-1.15.36c-.46.27-1.08.64-2.19.64v-2c.56 0 .78-.13 1.15-.36.46-.27 1.08-.64 2.19-.64s1.73.37 2.18.64c.37.23.59.36 1.15.36.56 0 .78-.13 1.15-.36.46-.27 1.08-.64 2.19-.64 1.11 0 1.73.37 2.18.64.37.22.6.36 1.15.36s.78-.13 1.15-.36c.45-.27 1.07-.64 2.18-.64s1.73.37 2.18.64c.37.23.59.36 1.15.36v2zm0-4.5c-1.11 0-1.73-.37-2.18-.64-.37-.22-.6-.36-1.15-.36-.56 0-.78.13-1.15.36-.45.27-1.07.64-2.18.64s-1.73-.37-2.18-.64c-.37-.22-.6-.36-1.15-.36-.56 0-.78.13-1.15.36-.45.27-1.07.64-2.18.64s-1.73-.37-2.18-.64c-.37-.22-.6-.36-1.15-.36s-.78.13-1.15.36c-.47.27-1.09.64-2.2.64v-2c.56 0 .78-.13 1.15-.36.45-.27 1.07-.64 2.18-.64s1.73.37 2.18.64c.37.22.6.36 1.15.36.56 0 .78-.13 1.15-.36.45-.27 1.07-.64 2.18-.64s1.73.37 2.18.64c.37.22.6.36 1.15.36s.78-.13 1.15-.36c.45-.27 1.07-.64 2.18-.64s1.73.37 2.18.64c.37.22.6.36 1.15.36v2zM8.67 12c.56 0 .78-.13 1.15-.36.46-.27 1.08-.64 2.19-.64 1.11 0 1.73.37 2.18.64.37.22.6.36 1.15.36s.78-.13 1.15-.36c.12-.07.26-.15.41-.23L10.48 5C8.93 3.45 7.5 2.99 5 3v2.5c1.82-.01 2.89.39 4 1.5l1 1-3.25 3.25c.31.12.56.27.77.39.37.23.59.36 1.15.36z"/><circle cx="16.5" cy="5.5" r="2.5"/></g>
+<g id="room-service"><path d="M2 17h20v2H2zm11.84-9.21c.1-.24.16-.51.16-.79 0-1.1-.9-2-2-2s-2 .9-2 2c0 .28.06.55.16.79C6.25 8.6 3.27 11.93 3 16h18c-.27-4.07-3.25-7.4-7.16-8.21z"/></g>
+<g id="rv-hookup"><path d="M20 17v-6c0-1.1-.9-2-2-2H7V7l-3 3 3 3v-2h4v3H4v3c0 1.1.9 2 2 2h2c0 1.66 1.34 3 3 3s3-1.34 3-3h8v-2h-2zm-9 3c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm7-6h-4v-3h4v3zM17 2v2H9v2h8v2l3-3z"/></g>
+<g id="smoke-free"><path d="M2 6l6.99 7H2v3h9.99l7 7 1.26-1.25-17-17zm18.5 7H22v3h-1.5zM18 13h1.5v3H18zm.85-8.12c.62-.61 1-1.45 1-2.38h-1.5c0 1.02-.83 1.85-1.85 1.85v1.5c2.24 0 4 1.83 4 4.07V12H22V9.92c0-2.23-1.28-4.15-3.15-5.04zM14.5 8.7h1.53c1.05 0 1.97.74 1.97 2.05V12h1.5v-1.59c0-1.8-1.6-3.16-3.47-3.16H14.5c-1.02 0-1.85-.98-1.85-2s.83-1.75 1.85-1.75V2c-1.85 0-3.35 1.5-3.35 3.35s1.5 3.35 3.35 3.35zm2.5 7.23V13h-2.93z"/></g>
+<g id="smoking-rooms"><path d="M2 16h15v3H2zm18.5 0H22v3h-1.5zM18 16h1.5v3H18zm.85-8.27c.62-.61 1-1.45 1-2.38C19.85 3.5 18.35 2 16.5 2v1.5c1.02 0 1.85.83 1.85 1.85S17.52 7.2 16.5 7.2v1.5c2.24 0 4 1.83 4 4.07V15H22v-2.24c0-2.22-1.28-4.14-3.15-5.03zm-2.82 2.47H14.5c-1.02 0-1.85-.98-1.85-2s.83-1.75 1.85-1.75v-1.5c-1.85 0-3.35 1.5-3.35 3.35s1.5 3.35 3.35 3.35h1.53c1.05 0 1.97.74 1.97 2.05V15h1.5v-1.64c0-1.81-1.6-3.16-3.47-3.16z"/></g>
+<g id="spa"><path d="M8.55 12c-1.07-.71-2.25-1.27-3.53-1.61 1.28.34 2.46.9 3.53 1.61zm10.43-1.61c-1.29.34-2.49.91-3.57 1.64 1.08-.73 2.28-1.3 3.57-1.64z"/><path d="M15.49 9.63c-.18-2.79-1.31-5.51-3.43-7.63-2.14 2.14-3.32 4.86-3.55 7.63 1.28.68 2.46 1.56 3.49 2.63 1.03-1.06 2.21-1.94 3.49-2.63zm-6.5 2.65c-.14-.1-.3-.19-.45-.29.15.11.31.19.45.29zm6.42-.25c-.13.09-.27.16-.4.26.13-.1.27-.17.4-.26zM12 15.45C9.85 12.17 6.18 10 2 10c0 5.32 3.36 9.82 8.03 11.49.63.23 1.29.4 1.97.51.68-.12 1.33-.29 1.97-.51C18.64 19.82 22 15.32 22 10c-4.18 0-7.85 2.17-10 5.45z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.d.ts
new file mode 100644
index 00000000000..c7cbfe0f344
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * social-icons.html
+ */
+
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.html
new file mode 100644
index 00000000000..a0424735edf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-icons/social-icons.html
@@ -0,0 +1,46 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+<iron-iconset-svg name="social" size="24">
+<svg><defs>
+<g id="cake"><path d="M12 6c1.11 0 2-.9 2-2 0-.38-.1-.73-.29-1.03L12 0l-1.71 2.97c-.19.3-.29.65-.29 1.03 0 1.1.9 2 2 2zm4.6 9.99l-1.07-1.07-1.08 1.07c-1.3 1.3-3.58 1.31-4.89 0l-1.07-1.07-1.09 1.07C6.75 16.64 5.88 17 4.96 17c-.73 0-1.4-.23-1.96-.61V21c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-4.61c-.56.38-1.23.61-1.96.61-.92 0-1.79-.36-2.44-1.01zM18 9h-5V7h-2v2H6c-1.66 0-3 1.34-3 3v1.54c0 1.08.88 1.96 1.96 1.96.52 0 1.02-.2 1.38-.57l2.14-2.13 2.13 2.13c.74.74 2.03.74 2.77 0l2.14-2.13 2.13 2.13c.37.37.86.57 1.38.57 1.08 0 1.96-.88 1.96-1.96V12C21 10.34 19.66 9 18 9z"/></g>
+<g id="domain"><path d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z"/></g>
+<g id="group"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></g>
+<g id="group-add"><path d="M8 10H5V7H3v3H0v2h3v3h2v-3h3v-2zm10 1c1.66 0 2.99-1.34 2.99-3S19.66 5 18 5c-.32 0-.63.05-.91.14.57.81.9 1.79.9 2.86s-.34 2.04-.9 2.86c.28.09.59.14.91.14zm-5 0c1.66 0 2.99-1.34 2.99-3S14.66 5 13 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm6.62 2.16c.83.73 1.38 1.66 1.38 2.84v2h3v-2c0-1.54-2.37-2.49-4.38-2.84zM13 13c-2 0-6 1-6 3v2h12v-2c0-2-4-3-6-3z"/></g>
+<g id="location-city"><path d="M15 11V5l-3-3-3 3v2H3v14h18V11h-6zm-8 8H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V9h2v2zm6 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V9h2v2zm0-4h-2V5h2v2zm6 12h-2v-2h2v2zm0-4h-2v-2h2v2z"/></g>
+<g id="mood"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></g>
+<g id="mood-bad"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 3c-2.33 0-4.31 1.46-5.11 3.5h10.22c-.8-2.04-2.78-3.5-5.11-3.5z"/></g>
+<g id="notifications"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/></g>
+<g id="notifications-active"><path d="M7.58 4.08L6.15 2.65C3.75 4.48 2.17 7.3 2.03 10.5h2c.15-2.65 1.51-4.97 3.55-6.42zm12.39 6.42h2c-.15-3.2-1.73-6.02-4.12-7.85l-1.42 1.43c2.02 1.45 3.39 3.77 3.54 6.42zM18 11c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2v-5zm-6 11c.14 0 .27-.01.4-.04.65-.14 1.18-.58 1.44-1.18.1-.24.15-.5.15-.78h-4c.01 1.1.9 2 2.01 2z"/></g>
+<g id="notifications-none"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"/></g>
+<g id="notifications-off"><path d="M20 18.69L7.84 6.14 5.27 3.49 4 4.76l2.8 2.8v.01c-.52.99-.8 2.16-.8 3.42v5l-2 2v1h13.73l2 2L21 19.72l-1-1.03zM12 22c1.11 0 2-.89 2-2h-4c0 1.11.89 2 2 2zm6-7.32V11c0-3.08-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68c-.15.03-.29.08-.42.12-.1.03-.2.07-.3.11h-.01c-.01 0-.01 0-.02.01-.23.09-.46.2-.68.31 0 0-.01 0-.01.01L18 14.68z"/></g>
+<g id="notifications-paused"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.93 6 11v5l-2 2v1h16v-1l-2-2zm-3.5-6.2l-2.8 3.4h2.8V15h-5v-1.8l2.8-3.4H9.5V8h5v1.8z"/></g>
+<g id="pages"><path d="M3 5v6h5L7 7l4 1V3H5c-1.1 0-2 .9-2 2zm5 8H3v6c0 1.1.9 2 2 2h6v-5l-4 1 1-4zm9 4l-4-1v5h6c1.1 0 2-.9 2-2v-6h-5l1 4zm2-14h-6v5l4-1-1 4h5V5c0-1.1-.9-2-2-2z"/></g>
+<g id="party-mode"><path d="M20 4h-3.17L15 2H9L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 3c1.63 0 3.06.79 3.98 2H12c-1.66 0-3 1.34-3 3 0 .35.07.69.18 1H7.1c-.06-.32-.1-.66-.1-1 0-2.76 2.24-5 5-5zm0 10c-1.63 0-3.06-.79-3.98-2H12c1.66 0 3-1.34 3-3 0-.35-.07-.69-.18-1h2.08c.07.32.1.66.1 1 0 2.76-2.24 5-5 5z"/></g>
+<g id="people"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></g>
+<g id="people-outline"><path d="M16.5 13c-1.2 0-3.07.34-4.5 1-1.43-.67-3.3-1-4.5-1C5.33 13 1 14.08 1 16.25V19h22v-2.75c0-2.17-4.33-3.25-6.5-3.25zm-4 4.5h-10v-1.25c0-.54 2.56-1.75 5-1.75s5 1.21 5 1.75v1.25zm9 0H14v-1.25c0-.46-.2-.86-.52-1.22.88-.3 1.96-.53 3.02-.53 2.44 0 5 1.21 5 1.75v1.25zM7.5 12c1.93 0 3.5-1.57 3.5-3.5S9.43 5 7.5 5 4 6.57 4 8.5 5.57 12 7.5 12zm0-5.5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm9 5.5c1.93 0 3.5-1.57 3.5-3.5S18.43 5 16.5 5 13 6.57 13 8.5s1.57 3.5 3.5 3.5zm0-5.5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z"/></g>
+<g id="person"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></g>
+<g id="person-add"><path d="M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></g>
+<g id="person-outline"><path d="M12 5.9c1.16 0 2.1.94 2.1 2.1s-.94 2.1-2.1 2.1S9.9 9.16 9.9 8s.94-2.1 2.1-2.1m0 9c2.97 0 6.1 1.46 6.1 2.1v1.1H5.9V17c0-.64 3.13-2.1 6.1-2.1M12 4C9.79 4 8 5.79 8 8s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 9c-2.67 0-8 1.34-8 4v3h16v-3c0-2.66-5.33-4-8-4z"/></g>
+<g id="plus-one"><path d="M10 8H8v4H4v2h4v4h2v-4h4v-2h-4zm4.5-1.92V7.9l2.5-.5V18h2V5z"/></g>
+<g id="poll"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/></g>
+<g id="public"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></g>
+<g id="school"><path d="M5 13.18v4L12 21l7-3.82v-4L12 17l-7-3.82zM12 3L1 9l11 6 9-4.91V17h2V9L12 3z"/></g>
+<g id="sentiment-dissatisfied"><circle cx="15.5" cy="9.5" r="1.5"/><circle cx="8.5" cy="9.5" r="1.5"/><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-6c-2.33 0-4.32 1.45-5.12 3.5h1.67c.69-1.19 1.97-2 3.45-2s2.75.81 3.45 2h1.67c-.8-2.05-2.79-3.5-5.12-3.5z"/></g>
+<g id="sentiment-neutral"><path d="M9 14h6v1.5H9z"/><circle cx="15.5" cy="9.5" r="1.5"/><circle cx="8.5" cy="9.5" r="1.5"/><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/></g>
+<g id="sentiment-satisfied"><circle cx="15.5" cy="9.5" r="1.5"/><circle cx="8.5" cy="9.5" r="1.5"/><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm0-4c-1.48 0-2.75-.81-3.45-2H6.88c.8 2.05 2.79 3.5 5.12 3.5s4.32-1.45 5.12-3.5h-1.67c-.7 1.19-1.97 2-3.45 2z"/></g>
+<g id="sentiment-very-dissatisfied"><path d="M11.99 2C6.47 2 2 6.47 2 12s4.47 10 9.99 10S22 17.53 22 12 17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm4.18-12.24l-1.06 1.06-1.06-1.06L13 8.82l1.06 1.06L13 10.94 14.06 12l1.06-1.06L16.18 12l1.06-1.06-1.06-1.06 1.06-1.06zM7.82 12l1.06-1.06L9.94 12 11 10.94 9.94 9.88 11 8.82 9.94 7.76 8.88 8.82 7.82 7.76 6.76 8.82l1.06 1.06-1.06 1.06zM12 14c-2.33 0-4.31 1.46-5.11 3.5h10.22c-.8-2.04-2.78-3.5-5.11-3.5z"/></g>
+<g id="sentiment-very-satisfied"><path d="M11.99 2C6.47 2 2 6.47 2 12s4.47 10 9.99 10S22 17.53 22 12 17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm1-10.06L14.06 11l1.06-1.06L16.18 11l1.06-1.06-2.12-2.12zm-4.12 0L9.94 11 11 9.94 8.88 7.82 6.76 9.94 7.82 11zM12 17.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"/></g>
+<g id="share"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92 1.61 0 2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z"/></g>
+<g id="whatshot"><path d="M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 17.41 3.8 13.5.67zM11.71 19c-1.78 0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 4.04 0 2.65-2.15 4.8-4.8 4.8z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.bower.json
new file mode 100644
index 00000000000..e813deebfe9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.bower.json
@@ -0,0 +1,65 @@
+{
+ "name": "iron-iconset-svg",
+ "description": "Manages a set of svg icons",
+ "version": "2.2.1",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "icon"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-iconset-svg.git"
+ },
+ "main": "iron-iconset-svg.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-meta": "PolymerElements/iron-meta#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "promise-polyfill": "polymerlabs/promise-polyfill#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-meta": "polymerelements/iron-meta#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-iconset-svg",
+ "_release": "2.2.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.1",
+ "commit": "65b04ec3aaeb46efa11be109aa41ea0c6d327a32"
+ },
+ "_source": "https://github.com/PolymerElements/iron-iconset-svg.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-iconset-svg"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..9f7691f53c4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-iconset-svg/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.travis.yml
new file mode 100644
index 00000000000..5f6187be91e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ FVt0rYGSWqJW3i57y9CQHuDaa97UDwZuGc5ts+TDpbuR3DVP8LxB9MT1ApA2bqhg101hPzhWJWIK3Siotkb7eAlsiWgVhdNr8t5eZBPOOnjLiU6PNCF6ZGCZRJHQ6q4xQ2DycGug8OfwMw63yewLEYmVBppeAlStnPUfDWURlJ8=
+ - secure: >-
+ X7cWxU13zLWoahM/BNBPSvgnI396zMmLzVHDHX6zAQL7gFL+PS4Dz6WjooO3Jx79ks2E8REUzWB8IFY3FohVAncXA///PAaqNLX0k2et4aOTOs5tcsCWL4nj8tKA6vjZIZ61rCjWTyNRR+o2QPsY9QQgi3Y+6bzLguWoPuycRbE=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/README.md
new file mode 100644
index 00000000000..bf8c40a5c71
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/README.md
@@ -0,0 +1,40 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-iconset-svg.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-iconset-svg)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-iconset-svg)_
+
+
+## &lt;iron-iconset-svg&gt;
+
+The `iron-iconset-svg` element allows users to define their own icon sets
+that contain svg icons. The svg icon elements should be children of the
+`iron-iconset-svg` element. Multiple icons should be given distinct id's.
+
+Using svg elements to create icons has a few advantages over traditional
+bitmap graphics like jpg or png. Icons that use svg are vector based so
+they are resolution independent and should look good on any device. They
+are stylable via css. Icons can be themed, colorized, and even animated.
+
+Example:
+
+```html
+<iron-iconset-svg name="my-svg-icons" size="24">
+ <svg>
+ <defs>
+ <g id="shape">
+ <rect x="12" y="0" width="12" height="24" />
+ <circle cx="12" cy="12" r="12" />
+ </g>
+ </defs>
+ </svg>
+</iron-iconset-svg>
+```
+
+This will automatically register the icon set "my-svg-icons" to the iconset
+database. To use these icons from within another element, make a
+`iron-iconset` element and call the `byId` method
+to retrieve a given iconset. To apply a particular icon inside an
+element use the `applyIcon` method. For example:
+
+```javascript
+iconset.applyIcon(iconNode, 'car');
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/bower.json
new file mode 100644
index 00000000000..fb61b8ea152
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/bower.json
@@ -0,0 +1,55 @@
+{
+ "name": "iron-iconset-svg",
+ "description": "Manages a set of svg icons",
+ "version": "2.2.1",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "icon"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-iconset-svg.git"
+ },
+ "main": "iron-iconset-svg.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-meta": "PolymerElements/iron-meta#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "promise-polyfill": "polymerlabs/promise-polyfill#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-meta": "polymerelements/iron-meta#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/index.html
new file mode 100644
index 00000000000..4ae9289ad81
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/index.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+ <title>iron-iconset-svg</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-icon/iron-icon.html">
+ <link rel="import" href="../iron-iconset-svg.html">
+ <link rel="import" href="./svg-sample-icons.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles"></style>
+ </custom-style>
+</head>
+<body>
+ <div class="vertical-section-container centered">
+ <h3>
+ Import a document with an <code>&lt;iron-iconset-svg&gt;</code> to use the
+ icons it contains with <code>&lt;iron-icon&gt;</code> elements in your page.
+ </h3>
+ <demo-snippet>
+ <template>
+ <!-- Import your document with an <iron-iconset-svg> in <head>:
+ <link rel="import" href="./svg-sample-icons.html">
+ -->
+
+ <custom-style>
+ <style is="custom-style">
+ iron-icon {
+ height: 64px;
+ width: 64px;
+ margin: 1em;
+
+ fill: black;
+ }
+
+ iron-icon:hover {
+ fill: blue;
+ }
+ </style>
+ </custom-style>
+
+ <iron-icon icon="svg-sample-icons:codepen" role="img" aria-label="CodePen logo"></iron-icon>
+ <iron-icon icon="svg-sample-icons:twitter" role="img" aria-label="Twitter logo"></iron-icon>
+ <iron-icon icon="svg-sample-icons:youtube" role="img" aria-label="YouTube logo"></iron-icon>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use an inline <code>&lt;iron-iconset-svg&gt;</code> if you need to both
+ define and use your icons in the same document.
+ </h3>
+ <demo-snippet>
+ <template>
+ <iron-iconset-svg name="inline" size="24">
+ <svg>
+ <defs>
+ <g id="shape">
+ <rect x="12" y="0" width="12" height="24" />
+ <circle cx="12" cy="12" r="12" />
+ </g>
+ </defs>
+ </svg>
+ </iron-iconset-svg>
+
+ <iron-icon icon="inline:shape" role="img" aria-label="A shape"></iron-icon>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/svg-sample-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/svg-sample-icons.html
new file mode 100644
index 00000000000..3dd1d525481
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/demo/svg-sample-icons.html
@@ -0,0 +1,69 @@
+
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-iconset-svg.html">
+
+<iron-iconset-svg name="svg-sample-icons" size="100">
+ <svg>
+ <defs>
+ <g id="codepen">
+ <path class="outer-ring" d="M50,0C22.385,0,0,22.385,0,50c0,27.615,22.385,50,50,50c27.614,0,50-22.385,50-50C100,22.385,77.615,0,50,0z M50,91.789
+ C26.958,91.789,8.212,73.042,8.212,50C8.212,26.958,26.958,8.212,50,8.212c23.042,0,41.788,18.747,41.788,41.789
+ C91.788,73.042,73.042,91.789,50,91.789z"></path>
+ <path class="inner-logo" d="M80.893,40.234c-0.006-0.039-0.016-0.076-0.022-0.115c-0.013-0.075-0.027-0.15-0.046-0.223
+ c-0.012-0.044-0.028-0.086-0.042-0.128c-0.021-0.065-0.042-0.13-0.068-0.193c-0.018-0.044-0.039-0.088-0.059-0.13
+ c-0.028-0.06-0.057-0.119-0.09-0.175c-0.024-0.042-0.051-0.083-0.076-0.124c-0.036-0.055-0.073-0.109-0.112-0.161
+ c-0.029-0.039-0.06-0.078-0.091-0.115c-0.042-0.049-0.086-0.098-0.132-0.143c-0.035-0.036-0.069-0.072-0.106-0.104
+ c-0.049-0.044-0.099-0.086-0.15-0.127c-0.04-0.031-0.079-0.062-0.12-0.091c-0.016-0.01-0.029-0.023-0.044-0.033L51.474,19.531
+ c-0.893-0.595-2.055-0.595-2.947,0L20.267,38.371c-0.015,0.01-0.028,0.023-0.044,0.033c-0.042,0.029-0.081,0.06-0.12,0.091
+ c-0.052,0.041-0.102,0.083-0.15,0.127c-0.037,0.032-0.071,0.068-0.106,0.104c-0.046,0.045-0.09,0.094-0.132,0.143
+ c-0.031,0.038-0.062,0.077-0.092,0.115c-0.039,0.052-0.076,0.106-0.111,0.161c-0.027,0.041-0.052,0.082-0.076,0.124
+ c-0.033,0.057-0.062,0.115-0.09,0.175c-0.021,0.042-0.042,0.086-0.06,0.13c-0.026,0.063-0.047,0.128-0.068,0.193
+ c-0.014,0.042-0.029,0.084-0.042,0.128c-0.02,0.073-0.032,0.148-0.046,0.223c-0.006,0.039-0.016,0.076-0.021,0.115
+ c-0.016,0.114-0.024,0.229-0.024,0.346V59.42c0,0.117,0.009,0.233,0.024,0.348c0.005,0.038,0.015,0.077,0.021,0.114
+ c0.014,0.075,0.027,0.149,0.046,0.223c0.012,0.043,0.028,0.086,0.042,0.128c0.021,0.065,0.042,0.13,0.068,0.195
+ c0.018,0.044,0.039,0.086,0.06,0.129c0.028,0.06,0.058,0.118,0.09,0.177c0.024,0.041,0.049,0.082,0.076,0.122
+ c0.035,0.056,0.072,0.109,0.111,0.161c0.029,0.041,0.061,0.078,0.092,0.115c0.042,0.049,0.086,0.098,0.132,0.144
+ c0.035,0.036,0.069,0.071,0.106,0.104c0.048,0.044,0.099,0.086,0.15,0.127c0.039,0.031,0.078,0.062,0.12,0.091
+ c0.016,0.01,0.029,0.023,0.044,0.032l28.259,18.84c0.446,0.297,0.96,0.447,1.474,0.447c0.513,0,1.027-0.149,1.473-0.447
+ l28.259-18.84c0.015-0.009,0.028-0.022,0.044-0.032c0.042-0.029,0.081-0.06,0.12-0.091c0.051-0.041,0.102-0.083,0.15-0.127
+ c0.037-0.033,0.071-0.068,0.106-0.104c0.046-0.046,0.09-0.095,0.132-0.144c0.031-0.037,0.062-0.075,0.091-0.115
+ c0.04-0.052,0.076-0.105,0.112-0.161c0.025-0.041,0.051-0.081,0.076-0.122c0.033-0.059,0.062-0.117,0.09-0.177
+ c0.02-0.042,0.041-0.085,0.059-0.129c0.026-0.065,0.047-0.13,0.068-0.195c0.014-0.042,0.03-0.085,0.042-0.128
+ c0.02-0.074,0.033-0.148,0.046-0.223c0.006-0.037,0.016-0.076,0.022-0.114c0.014-0.115,0.023-0.231,0.023-0.348V40.581
+ C80.916,40.464,80.907,40.348,80.893,40.234z M52.657,26.707l20.817,13.877l-9.298,6.221l-11.519-7.706V26.707z M47.343,26.707
+ v12.393l-11.518,7.706l-9.299-6.221L47.343,26.707z M24.398,45.554L31.046,50l-6.648,4.446V45.554z M47.343,73.294L26.525,59.417
+ l9.299-6.219l11.518,7.704V73.294z M50,56.286L40.603,50L50,43.715L59.397,50L50,56.286z M52.657,73.294V60.902l11.519-7.704
+ l9.298,6.219L52.657,73.294z M75.602,54.447L68.955,50l6.647-4.446V54.447z"></path>
+ </g>
+
+ <path id="twitter" d="M100.001,17.942c-3.681,1.688-7.633,2.826-11.783,3.339
+ c4.236-2.624,7.49-6.779,9.021-11.73c-3.965,2.432-8.354,4.193-13.026,5.146C80.47,10.575,75.138,8,69.234,8
+ c-11.33,0-20.518,9.494-20.518,21.205c0,1.662,0.183,3.281,0.533,4.833c-17.052-0.884-32.168-9.326-42.288-22.155
+ c-1.767,3.133-2.778,6.773-2.778,10.659c0,7.357,3.622,13.849,9.127,17.65c-3.363-0.109-6.525-1.064-9.293-2.651
+ c-0.002,0.089-0.002,0.178-0.002,0.268c0,10.272,7.072,18.845,16.458,20.793c-1.721,0.484-3.534,0.744-5.405,0.744
+ c-1.322,0-2.606-0.134-3.859-0.379c2.609,8.424,10.187,14.555,19.166,14.726c-7.021,5.688-15.867,9.077-25.48,9.077
+ c-1.656,0-3.289-0.102-4.895-0.297C9.08,88.491,19.865,92,31.449,92c37.737,0,58.374-32.312,58.374-60.336
+ c0-0.92-0.02-1.834-0.059-2.743C93.771,25.929,97.251,22.195,100.001,17.942L100.001,17.942z"></path>
+
+ <g id="youtube">
+ <path class="youtube" d="M98.77,27.492c-1.225-5.064-5.576-8.799-10.811-9.354C75.561,16.818,63.01,15.993,50.514,16
+ c-12.495-0.007-25.045,0.816-37.446,2.139c-5.235,0.557-9.583,4.289-10.806,9.354C0.522,34.704,0.5,42.574,0.5,50.001
+ c0,7.426,0,15.296,1.741,22.509c1.224,5.061,5.572,8.799,10.807,9.352c12.399,1.32,24.949,2.145,37.446,2.14
+ c12.494,0.005,25.047-0.817,37.443-2.14c5.234-0.555,9.586-4.291,10.81-9.352c1.741-7.213,1.753-15.083,1.753-22.509
+ S100.51,34.704,98.77,27.492 M67.549,52.203L43.977,64.391c-2.344,1.213-4.262,0.119-4.262-2.428V38.036
+ c0-2.548,1.917-3.644,4.262-2.429l23.572,12.188C69.896,49.008,69.896,50.992,67.549,52.203"></path>
+ </g>
+
+ </defs>
+
+ </svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/index.html
new file mode 100644
index 00000000000..487bb5c38a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.d.ts
new file mode 100644
index 00000000000..e2ed09b2556
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.d.ts
@@ -0,0 +1,142 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-iconset-svg.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-meta/iron-meta.d.ts" />
+
+/**
+ * The `iron-iconset-svg` element allows users to define their own icon sets
+ * that contain svg icons. The svg icon elements should be children of the
+ * `iron-iconset-svg` element. Multiple icons should be given distinct id's.
+ *
+ * Using svg elements to create icons has a few advantages over traditional
+ * bitmap graphics like jpg or png. Icons that use svg are vector based so
+ * they are resolution independent and should look good on any device. They
+ * are stylable via css. Icons can be themed, colorized, and even animated.
+ *
+ * Example:
+ *
+ * <iron-iconset-svg name="my-svg-icons" size="24">
+ * <svg>
+ * <defs>
+ * <g id="shape">
+ * <rect x="12" y="0" width="12" height="24" />
+ * <circle cx="12" cy="12" r="12" />
+ * </g>
+ * </defs>
+ * </svg>
+ * </iron-iconset-svg>
+ *
+ * This will automatically register the icon set "my-svg-icons" to the iconset
+ * database. To use these icons from within another element, make a
+ * `iron-iconset` element and call the `byId` method
+ * to retrieve a given iconset. To apply a particular icon inside an
+ * element use the `applyIcon` method. For example:
+ *
+ * iconset.applyIcon(iconNode, 'car');
+ */
+interface IronIconsetSvgElement extends Polymer.Element {
+
+ /**
+ * The name of the iconset.
+ */
+ name: string|null|undefined;
+
+ /**
+ * The size of an individual icon. Note that icons must be square.
+ */
+ size: number|null|undefined;
+
+ /**
+ * Set to true to enable mirroring of icons where specified when they are
+ * stamped. Icons that should be mirrored should be decorated with a
+ * `mirror-in-rtl` attribute.
+ *
+ * NOTE: For performance reasons, direction will be resolved once per
+ * document per iconset, so moving icons in and out of RTL subtrees will
+ * not cause their mirrored state to change.
+ */
+ rtlMirroring: boolean|null|undefined;
+
+ /**
+ * Set to true to measure RTL based on the dir attribute on the body or
+ * html elements (measured on document.body or document.documentElement as
+ * available).
+ */
+ useGlobalRtlAttribute: boolean|null|undefined;
+ created(): void;
+ attached(): void;
+
+ /**
+ * Construct an array of all icon names in this iconset.
+ *
+ * @returns Array of icon names.
+ */
+ getIconNames(): any[];
+
+ /**
+ * Applies an icon to the given element.
+ *
+ * An svg icon is prepended to the element's shadowRoot if it exists,
+ * otherwise to the element itself.
+ *
+ * If RTL mirroring is enabled, and the icon is marked to be mirrored in
+ * RTL, the element will be tested (once and only once ever for each
+ * iconset) to determine the direction of the subtree the element is in.
+ * This direction will apply to all future icon applications, although only
+ * icons marked to be mirrored will be affected.
+ *
+ * @param element Element to which the icon is applied.
+ * @param iconName Name of the icon to apply.
+ * @returns The svg element which renders the icon.
+ */
+ applyIcon(element: Element|null, iconName: string): Element|null;
+
+ /**
+ * Remove an icon from the given element by undoing the changes effected
+ * by `applyIcon`.
+ *
+ * @param element The element from which the icon is removed.
+ */
+ removeIcon(element: Element|null): void;
+
+ /**
+ * Measures and memoizes the direction of the element. Note that this
+ * measurement is only done once and the result is memoized for future
+ * invocations.
+ */
+ _targetIsRTL(target: any): any;
+
+ /**
+ * When name is changed, register iconset metadata
+ */
+ _nameChanged(): void;
+
+ /**
+ * Create a map of child SVG elements by id.
+ *
+ * @returns Map of id's to SVG elements.
+ */
+ _createIconMap(): object;
+
+ /**
+ * Produce installable clone of the SVG element matching `id` in this
+ * iconset, or `undefined` if there is no matching element.
+ *
+ * @returns Returns an installable clone of the SVG element
+ * matching `id`.
+ */
+ _cloneIcon(id: any, mirrorAllowed: any): Element|null;
+ _prepareSvgClone(sourceSvg: Element|null, size: number, mirrorAllowed: Boolean|null): Element|null;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-iconset-svg": IronIconsetSvgElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.html
new file mode 100644
index 00000000000..152afcb5ce7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/iron-iconset-svg.html
@@ -0,0 +1,258 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-meta/iron-meta.html">
+
+<script>
+ /**
+ * The `iron-iconset-svg` element allows users to define their own icon sets
+ * that contain svg icons. The svg icon elements should be children of the
+ * `iron-iconset-svg` element. Multiple icons should be given distinct id's.
+ *
+ * Using svg elements to create icons has a few advantages over traditional
+ * bitmap graphics like jpg or png. Icons that use svg are vector based so
+ * they are resolution independent and should look good on any device. They
+ * are stylable via css. Icons can be themed, colorized, and even animated.
+ *
+ * Example:
+ *
+ * <iron-iconset-svg name="my-svg-icons" size="24">
+ * <svg>
+ * <defs>
+ * <g id="shape">
+ * <rect x="12" y="0" width="12" height="24" />
+ * <circle cx="12" cy="12" r="12" />
+ * </g>
+ * </defs>
+ * </svg>
+ * </iron-iconset-svg>
+ *
+ * This will automatically register the icon set "my-svg-icons" to the iconset
+ * database. To use these icons from within another element, make a
+ * `iron-iconset` element and call the `byId` method
+ * to retrieve a given iconset. To apply a particular icon inside an
+ * element use the `applyIcon` method. For example:
+ *
+ * iconset.applyIcon(iconNode, 'car');
+ *
+ * @element iron-iconset-svg
+ * @demo demo/index.html
+ * @implements {Polymer.Iconset}
+ */
+ Polymer({
+ is: 'iron-iconset-svg',
+
+ properties: {
+
+ /**
+ * The name of the iconset.
+ */
+ name: {type: String, observer: '_nameChanged'},
+
+ /**
+ * The size of an individual icon. Note that icons must be square.
+ */
+ size: {type: Number, value: 24},
+
+ /**
+ * Set to true to enable mirroring of icons where specified when they are
+ * stamped. Icons that should be mirrored should be decorated with a
+ * `mirror-in-rtl` attribute.
+ *
+ * NOTE: For performance reasons, direction will be resolved once per
+ * document per iconset, so moving icons in and out of RTL subtrees will
+ * not cause their mirrored state to change.
+ */
+ rtlMirroring: {type: Boolean, value: false},
+
+ /**
+ * Set to true to measure RTL based on the dir attribute on the body or
+ * html elements (measured on document.body or document.documentElement as
+ * available).
+ */
+ useGlobalRtlAttribute: {type: Boolean, value: false}
+ },
+
+ created: function() {
+ this._meta =
+ new Polymer.IronMeta({type: 'iconset', key: null, value: null});
+ },
+
+ attached: function() {
+ this.style.display = 'none';
+ },
+
+ /**
+ * Construct an array of all icon names in this iconset.
+ *
+ * @return {!Array} Array of icon names.
+ */
+ getIconNames: function() {
+ this._icons = this._createIconMap();
+ return Object.keys(this._icons).map(function(n) {
+ return this.name + ':' + n;
+ }, this);
+ },
+
+ /**
+ * Applies an icon to the given element.
+ *
+ * An svg icon is prepended to the element's shadowRoot if it exists,
+ * otherwise to the element itself.
+ *
+ * If RTL mirroring is enabled, and the icon is marked to be mirrored in
+ * RTL, the element will be tested (once and only once ever for each
+ * iconset) to determine the direction of the subtree the element is in.
+ * This direction will apply to all future icon applications, although only
+ * icons marked to be mirrored will be affected.
+ *
+ * @method applyIcon
+ * @param {Element} element Element to which the icon is applied.
+ * @param {string} iconName Name of the icon to apply.
+ * @return {?Element} The svg element which renders the icon.
+ */
+ applyIcon: function(element, iconName) {
+ // Remove old svg element
+ this.removeIcon(element);
+ // install new svg element
+ var svg = this._cloneIcon(
+ iconName, this.rtlMirroring && this._targetIsRTL(element));
+ if (svg) {
+ // insert svg element into shadow root, if it exists
+ var pde = Polymer.dom(element.root || element);
+ pde.insertBefore(svg, pde.childNodes[0]);
+ return element._svgIcon = svg;
+ }
+ return null;
+ },
+
+ /**
+ * Remove an icon from the given element by undoing the changes effected
+ * by `applyIcon`.
+ *
+ * @param {Element} element The element from which the icon is removed.
+ */
+ removeIcon: function(element) {
+ // Remove old svg element
+ if (element._svgIcon) {
+ Polymer.dom(element.root || element).removeChild(element._svgIcon);
+ element._svgIcon = null;
+ }
+ },
+
+ /**
+ * Measures and memoizes the direction of the element. Note that this
+ * measurement is only done once and the result is memoized for future
+ * invocations.
+ */
+ _targetIsRTL: function(target) {
+ if (this.__targetIsRTL == null) {
+ if (this.useGlobalRtlAttribute) {
+ var globalElement =
+ (document.body && document.body.hasAttribute('dir')) ?
+ document.body :
+ document.documentElement;
+
+ this.__targetIsRTL = globalElement.getAttribute('dir') === 'rtl';
+ } else {
+ if (target && target.nodeType !== Node.ELEMENT_NODE) {
+ target = target.host;
+ }
+
+ this.__targetIsRTL =
+ target && window.getComputedStyle(target)['direction'] === 'rtl';
+ }
+ }
+
+ return this.__targetIsRTL;
+ },
+
+ /**
+ *
+ * When name is changed, register iconset metadata
+ *
+ */
+ _nameChanged: function() {
+ this._meta.value = null;
+ this._meta.key = this.name;
+ this._meta.value = this;
+
+ this.async(function() {
+ this.fire('iron-iconset-added', this, {node: window});
+ });
+ },
+
+ /**
+ * Create a map of child SVG elements by id.
+ *
+ * @return {!Object} Map of id's to SVG elements.
+ */
+ _createIconMap: function() {
+ // Objects chained to Object.prototype (`{}`) have members. Specifically,
+ // on FF there is a `watch` method that confuses the icon map, so we
+ // need to use a null-based object here.
+ var icons = Object.create(null);
+ Polymer.dom(this).querySelectorAll('[id]').forEach(function(icon) {
+ icons[icon.id] = icon;
+ });
+ return icons;
+ },
+
+ /**
+ * Produce installable clone of the SVG element matching `id` in this
+ * iconset, or `undefined` if there is no matching element.
+ *
+ * @return {Element} Returns an installable clone of the SVG element
+ * matching `id`.
+ */
+ _cloneIcon: function(id, mirrorAllowed) {
+ // create the icon map on-demand, since the iconset itself has no discrete
+ // signal to know when it's children are fully parsed
+ this._icons = this._icons || this._createIconMap();
+ return this._prepareSvgClone(this._icons[id], this.size, mirrorAllowed);
+ },
+
+ /**
+ * @param {Element} sourceSvg
+ * @param {number} size
+ * @param {Boolean} mirrorAllowed
+ * @return {Element}
+ */
+ _prepareSvgClone: function(sourceSvg, size, mirrorAllowed) {
+ if (sourceSvg) {
+ var content = sourceSvg.cloneNode(true),
+ svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'),
+ viewBox =
+ content.getAttribute('viewBox') || '0 0 ' + size + ' ' + size,
+ cssText =
+ 'pointer-events: none; display: block; width: 100%; height: 100%;';
+
+ if (mirrorAllowed && content.hasAttribute('mirror-in-rtl')) {
+ cssText +=
+ '-webkit-transform:scale(-1,1);transform:scale(-1,1);transform-origin:center;';
+ }
+
+ svg.setAttribute('viewBox', viewBox);
+ svg.setAttribute('preserveAspectRatio', 'xMidYMid meet');
+ svg.setAttribute('focusable', 'false');
+ // TODO(dfreedm): `pointer-events: none` works around
+ // https://crbug.com/370136
+ // TODO(sjmiles): inline style may not be ideal, but avoids requiring a
+ // shadow-root
+ svg.style.cssText = cssText;
+ svg.appendChild(content).removeAttribute('id');
+ return svg;
+ }
+ return null;
+ }
+
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package-lock.json
new file mode 100644
index 00000000000..4736abc096c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-iconset-svg",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.3.tgz",
+ "integrity": "sha512-igaEysRgtg5tYJVIdQ1T2lJ3G6OmoY7g0YVWKHLFiVs4YUChd9IRSiLoHSLffwut+CpsHHBDj4vRxxNEMstctw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.3"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package.json
new file mode 100644
index 00000000000..2c775d09bd1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-iconset-svg/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-iconset-svg",
+ "private": true,
+ "description": "Manages a set of svg icons",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-iconset-svg.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.bower.json
new file mode 100644
index 00000000000..c18915c0025
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.bower.json
@@ -0,0 +1,69 @@
+{
+ "name": "iron-input",
+ "version": "2.1.3",
+ "description": "An input element with data binding",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "input"
+ ],
+ "main": "iron-input.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-input.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-input",
+ "ignore": [],
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#1 - 2",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "polymerelements/iron-demo-helpers#1 - 2",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#1 - 2",
+ "paper-styles": "polymerelements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#^1.0.0",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
+ "paper-styles": "polymerelements/paper-styles#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.3",
+ "commit": "72a4a9e898a4b825602eacd78944e8e25ee41f5c"
+ },
+ "_source": "https://github.com/PolymerElements/iron-input.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-input"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..b01fd73e1e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-input/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.travis.yml
new file mode 100644
index 00000000000..23948e96ec8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ NQunbnhwQFU/uRU1Dz8VIYXpG9cq4wEldllph4To1XJqEa21pG1Q9+a/M4+aOkW6iIPRgfI/bQ6mPWaRnE/KGrsusARqgYDytq42dJpSoLOiLYbVdRKIHI3t9cr1MiZKUxwz/vpOsKcMK8dW5RmR6zJ8k5roijNAmjFRlzfGOKY=
+ - secure: >-
+ Ge6m7GkHZdhv6Ru7uNEVS9jUQ15CsCa9ZBcBQncA/w8zEmDfM2tzcTUJ54piZ03mo9qnWOcV4IcJj78nXsyKcYZHiGpe63w5R5NWhO3uZ72C48SMPbWQxL0Kyt6PN4u7i5MNCMJ3+a+ttyet8H9qTzxAwOLVSFCUr3On1/B1APU=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/README.md
new file mode 100644
index 00000000000..32a84ebe626
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/README.md
@@ -0,0 +1,80 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-input.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-input.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-input)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-input)_
+
+
+## &lt;iron-input&gt;
+
+`<iron-input>` adds two-way binding and custom validators using `Polymer.IronValidatorBehavior`
+to `<input>`.
+
+### Changes in 2.0
+Since type-extensions are not available in 2.0, `<iron-input` is a wrapper against a native `input`:
+
+```html
+<iron-input>
+ <input>
+</iron-input>
+ ```
+
+Other changes:
+- `prevent-invalid-input` and `allowed-pattern` had to be always used together; deleted `prevent-invalid-input`, so that only
+`allowed-pattern` is needed
+- added an `auto-validate` property
+- Note: imperatively setting the `value` attribute on the native `<input>` is not supported -- the native `input` does not fire an event in this case, so this update cannot be observed, and `bind-value` cannot be updated.
+
+### Two-way binding
+
+By default you can only get notified of changes to an `input`'s `value` due to user input:
+
+```html
+<input value="{{myValue::input}}">
+```
+
+`iron-input` adds the `bind-value` property that mirrors the `value` property, and can be used
+for two-way data binding. `bind-value` will notify if it is changed either by user input or by script.
+
+```html
+<iron-input bind-value="{{bindValue}}">
+ <input value="{{value::input}}">
+</iron-input>
+```
+
+### Custom validators
+
+You can use custom validators that implement `Polymer.IronValidatorBehavior` with `<iron-input>`.
+
+```html
+<iron-input auto-validate validator="my-custom-validator">
+ <input placeholder="only 'cat' is valid">
+ </iron-input>
+```
+
+### Stopping invalid input
+
+It may be desirable to only allow users to enter certain characters. You can use the
+`prevent-invalid-input` and `allowed-pattern` attributes together to accomplish this. This feature
+is separate from validation, and `allowed-pattern` does not affect how the input is validated.
+
+```html
+<!-- only allow characters that match [0-9] -->
+<iron-input allowed-pattern="[0-9]">
+ <input pattern="\d{5}">
+</iron-input>
+```
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/bower.json
new file mode 100644
index 00000000000..57976900b3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/bower.json
@@ -0,0 +1,60 @@
+{
+ "name": "iron-input",
+ "version": "2.1.3",
+ "description": "An input element with data binding",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "input"
+ ],
+ "main": "iron-input.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-input.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-input",
+ "ignore": [],
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#1 - 2",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "polymerelements/iron-demo-helpers#1 - 2",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#1 - 2",
+ "paper-styles": "polymerelements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#^1.0.0",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "polymerelements/iron-demo-helpers#^1.0.0",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
+ "paper-styles": "polymerelements/paper-styles#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/cats-only.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/cats-only.html
new file mode 100644
index 00000000000..ad32866e295
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/cats-only.html
@@ -0,0 +1,24 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-validator-behavior/iron-validator-behavior.html">
+
+<script>
+ Polymer({
+ is: 'cats-only',
+
+ behaviors: [Polymer.IronValidatorBehavior],
+
+ validate: function(value) {
+ return value === 'cat'
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/index.html
new file mode 100644
index 00000000000..5d2a2711ef8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/demo/index.html
@@ -0,0 +1,99 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>iron-input demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ <!-- Order of imports matters. The validator needs to be imported before the
+ iron-input needs it. -->
+ <link rel="import" href="cats-only.html">
+ <link rel="import" href="../iron-input.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles"></style>
+ </custom-style>
+</head>
+<body>
+ <div class="vertical-section-container centered">
+ <h4>Basic inputs</h4>
+ <demo-snippet class="centered-demo">
+ <template>
+ <iron-input><input placeholder="type=date" type="date"></iron-input>
+ <iron-input><input placeholder="type=number" type="number"></iron-input>
+ <iron-input><input placeholder="disabled" disabled></iron-input>
+ </template>
+ </demo-snippet>
+
+ <h4>Updating the iron-input's value</h4>
+ <demo-snippet>
+ <template>
+ <dom-bind>
+ <template>
+ <iron-input bind-value="{{bindValue}}" id="input1"><input value="{{value::input}}"></iron-input>
+ <p>bind to the iron-input's <code>bind-value</code>: {{bindValue}}</p>
+ <p>bind to the distributed input's <code>value::input</code>: {{value}}</p>
+ <button onclick="input1.bindValue='pineapple'">Set bindValue to 'pineapple'</button>
+ </template>
+ </dom-bind>
+ </template>
+ </demo-snippet>
+
+ <h4>Preventing invalid characters: only allow <code>!@#0123456789</code></h4>
+ <demo-snippet class="centered-demo">
+ <template>
+ <iron-input allowed-pattern="[!@#0-9]">
+ <input>
+ </iron-input>
+ </template>
+ </demo-snippet>
+
+ <h4>Auto-validation and preventing invalid characters</h4>
+ <demo-snippet class="centered-demo">
+ <template>
+ <style>
+ iron-input[invalid] > input {
+ border: 1px solid red;
+ background-color: #FFCDD2;
+ }
+ </style>
+ <iron-input allowed-pattern="[0-9]" auto-validate>
+ <input pattern="\d{3}" placeholder="exactly 3 digits are valid">
+ </iron-input>
+ </template>
+ </demo-snippet>
+
+ <h4>Validation with a custom validator</h4>
+ <demo-snippet class="centered-demo">
+ <template>
+ <style>
+ iron-input[invalid] > input {
+ border: 1px solid red;
+ background-color: #FFCDD2;
+ }
+ </style>
+ <cats-only></cats-only>
+ <iron-input auto-validate validator="cats-only">
+ <input placeholder="only 'cat' is valid">
+ </iron-input>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/hero.svg
new file mode 100755
index 00000000000..146ffeac67c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/hero.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <rect x="49" y="53" width="2" height="18"/>
+ <path d="M188,78H37V44h151V78z M39,76h147V46H39V76z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/index.html
new file mode 100644
index 00000000000..ca0dac066a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-input</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.d.ts
new file mode 100644
index 00000000000..cf1139f501c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.d.ts
@@ -0,0 +1,164 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-input.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-a11y-announcer/iron-a11y-announcer.d.ts" />
+/// <reference path="../iron-validatable-behavior/iron-validatable-behavior.d.ts" />
+
+/**
+ * `<iron-input>` is a wrapper to a native `<input>` element, that adds two-way binding
+ * and prevention of invalid input. To use it, you must distribute a native `<input>`
+ * yourself. You can continue to use the native `input` as you would normally:
+ *
+ * <iron-input>
+ * <input>
+ * </iron-input>
+ *
+ * <iron-input>
+ * <input type="email" disabled>
+ * </iron-input>
+ *
+ * ### Two-way binding
+ *
+ * By default you can only get notified of changes to a native `<input>`'s `value`
+ * due to user input:
+ *
+ * <input value="{{myValue::input}}">
+ *
+ * This means that if you imperatively set the value (i.e. `someNativeInput.value = 'foo'`),
+ * no events will be fired and this change cannot be observed.
+ *
+ * `iron-input` adds the `bind-value` property that mirrors the native `input`'s '`value` property; this
+ * property can be used for two-way data binding.
+ * `bind-value` will notify if it is changed either by user input or by script.
+ *
+ * <iron-input bind-value="{{myValue}}">
+ * <input>
+ * </iron-input>
+ *
+ * Note: this means that if you want to imperatively set the native `input`'s, you _must_
+ * set `bind-value` instead, so that the wrapper `iron-input` can be notified.
+ *
+ * ### Validation
+ *
+ * `iron-input` uses the native `input`'s validation. For simplicity, `iron-input`
+ * has a `validate()` method (which internally just checks the distributed `input`'s
+ * validity), which sets an `invalid` attribute that can also be used for styling.
+ *
+ * To validate automatically as you type, you can use the `auto-validate` attribute.
+ *
+ * `iron-input` also fires an `iron-input-validate` event after `validate()` is
+ * called. You can use it to implement a custom validator:
+ *
+ * var CatsOnlyValidator = {
+ * validate: function(ironInput) {
+ * var valid = !ironInput.bindValue || ironInput.bindValue === 'cat';
+ * ironInput.invalid = !valid;
+ * return valid;
+ * }
+ * }
+ * ironInput.addEventListener('iron-input-validate', function() {
+ * CatsOnly.validate(input2);
+ * });
+ *
+ * You can also use an element implementing an [`IronValidatorBehavior`](/element/PolymerElements/iron-validatable-behavior).
+ * This example can also be found in the demo for this element:
+ *
+ * <iron-input validator="cats-only">
+ * <input>
+ * </iron-input>
+ *
+ * ### Preventing invalid input
+ *
+ * It may be desirable to only allow users to enter certain characters. You can use the
+ * `allowed-pattern` attribute to accomplish this. This feature
+ * is separate from validation, and `allowed-pattern` does not affect how the input is validated.
+ *
+ * // Only allow typing digits, but a valid input has exactly 5 digits.
+ * <iron-input allowed-pattern="[0-9]">
+ * <input pattern="\d{5}">
+ * </iron-input>
+ */
+interface IronInputElement extends Polymer.Element, Polymer.IronValidatableBehavior {
+
+ /**
+ * Use this property instead of `value` for two-way data binding, or to
+ * set a default value for the input. **Do not** use the distributed
+ * input's `value` property to set a default value.
+ */
+ bindValue: string|null|undefined;
+
+ /**
+ * Computed property that echoes `bindValue` (mostly used for Polymer 1.0
+ * backcompatibility, if you were one-way binding to the Polymer 1.0
+ * `input is="iron-input"` value attribute).
+ */
+ readonly value: string|null|undefined;
+
+ /**
+ * Regex-like list of characters allowed as input; all characters not in the
+ * list will be rejected. The recommended format should be a list of allowed
+ * characters, for example, `[a-zA-Z0-9.+-!;:]`.
+ *
+ * This pattern represents the allowed characters for the field; as the user
+ * inputs text, each individual character will be checked against the
+ * pattern (rather than checking the entire value as a whole). If a
+ * character is not a match, it will be rejected.
+ *
+ * Pasted input will have each character checked individually; if any
+ * character doesn't match `allowedPattern`, the entire pasted string will
+ * be rejected.
+ *
+ * Note: if you were using `iron-input` in 1.0, you were also required to
+ * set `prevent-invalid-input`. This is no longer needed as of Polymer 2.0,
+ * and will be set automatically for you if an `allowedPattern` is provided.
+ */
+ allowedPattern: string|null|undefined;
+
+ /**
+ * Set to true to auto-validate the input value as you type.
+ */
+ autoValidate: boolean|null|undefined;
+
+ /**
+ * The native input element.
+ */
+ _inputElement: object|null|undefined;
+
+ /**
+ * Returns the distributed input element.
+ *
+ */
+ readonly inputElement: any;
+ readonly _patternRegExp: any;
+
+ /**
+ * Returns true if `value` is valid. The validator provided in `validator`
+ * will be used first, then any constraints.
+ *
+ * @returns True if the value is valid.
+ */
+ validate(): boolean;
+ created(): void;
+ attached(): void;
+ detached(): void;
+ _initSlottedInput(): void;
+ _bindValueChanged(bindValue: any, inputElement: any): void;
+ _onInput(): void;
+ _isPrintable(event: any): any;
+ _onKeypress(event: any): void;
+ _checkPatternValidity(): any;
+ _announceInvalidCharacter(message: any): void;
+ _computeValue(bindValue: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-input": IronInputElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.html
new file mode 100644
index 00000000000..63ab90be3f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/iron-input.html
@@ -0,0 +1,366 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-announcer/iron-a11y-announcer.html">
+<link rel="import" href="../iron-validatable-behavior/iron-validatable-behavior.html">
+
+<!--
+`<iron-input>` is a wrapper to a native `<input>` element, that adds two-way binding
+and prevention of invalid input. To use it, you must distribute a native `<input>`
+yourself. You can continue to use the native `input` as you would normally:
+
+ <iron-input>
+ <input>
+ </iron-input>
+
+ <iron-input>
+ <input type="email" disabled>
+ </iron-input>
+
+### Two-way binding
+
+By default you can only get notified of changes to a native `<input>`'s `value`
+due to user input:
+
+ <input value="{{myValue::input}}">
+
+This means that if you imperatively set the value (i.e. `someNativeInput.value = 'foo'`),
+no events will be fired and this change cannot be observed.
+
+`iron-input` adds the `bind-value` property that mirrors the native `input`'s '`value` property; this
+property can be used for two-way data binding.
+`bind-value` will notify if it is changed either by user input or by script.
+
+ <iron-input bind-value="{{myValue}}">
+ <input>
+ </iron-input>
+
+Note: this means that if you want to imperatively set the native `input`'s, you _must_
+set `bind-value` instead, so that the wrapper `iron-input` can be notified.
+
+### Validation
+
+`iron-input` uses the native `input`'s validation. For simplicity, `iron-input`
+has a `validate()` method (which internally just checks the distributed `input`'s
+validity), which sets an `invalid` attribute that can also be used for styling.
+
+To validate automatically as you type, you can use the `auto-validate` attribute.
+
+`iron-input` also fires an `iron-input-validate` event after `validate()` is
+called. You can use it to implement a custom validator:
+
+ var CatsOnlyValidator = {
+ validate: function(ironInput) {
+ var valid = !ironInput.bindValue || ironInput.bindValue === 'cat';
+ ironInput.invalid = !valid;
+ return valid;
+ }
+ }
+ ironInput.addEventListener('iron-input-validate', function() {
+ CatsOnly.validate(input2);
+ });
+
+You can also use an element implementing an [`IronValidatorBehavior`](/element/PolymerElements/iron-validatable-behavior).
+This example can also be found in the demo for this element:
+
+ <iron-input validator="cats-only">
+ <input>
+ </iron-input>
+
+### Preventing invalid input
+
+It may be desirable to only allow users to enter certain characters. You can use the
+`allowed-pattern` attribute to accomplish this. This feature
+is separate from validation, and `allowed-pattern` does not affect how the input is validated.
+
+ // Only allow typing digits, but a valid input has exactly 5 digits.
+ <iron-input allowed-pattern="[0-9]">
+ <input pattern="\d{5}">
+ </iron-input>
+
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="iron-input">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ }
+ </style>
+ <slot id="content"></slot>
+ </template>
+ <script>
+ Polymer({
+ is: 'iron-input',
+
+ behaviors: [Polymer.IronValidatableBehavior],
+
+ /**
+ * Fired whenever `validate()` is called.
+ *
+ * @event iron-input-validate
+ */
+
+ properties: {
+
+ /**
+ * Use this property instead of `value` for two-way data binding, or to
+ * set a default value for the input. **Do not** use the distributed
+ * input's `value` property to set a default value.
+ */
+ bindValue: {type: String, value: ''},
+
+ /**
+ * Computed property that echoes `bindValue` (mostly used for Polymer 1.0
+ * backcompatibility, if you were one-way binding to the Polymer 1.0
+ * `input is="iron-input"` value attribute).
+ */
+ value: {type: String, computed: '_computeValue(bindValue)'},
+
+ /**
+ * Regex-like list of characters allowed as input; all characters not in the
+ * list will be rejected. The recommended format should be a list of allowed
+ * characters, for example, `[a-zA-Z0-9.+-!;:]`.
+ *
+ * This pattern represents the allowed characters for the field; as the user
+ * inputs text, each individual character will be checked against the
+ * pattern (rather than checking the entire value as a whole). If a
+ * character is not a match, it will be rejected.
+ *
+ * Pasted input will have each character checked individually; if any
+ * character doesn't match `allowedPattern`, the entire pasted string will
+ * be rejected.
+ *
+ * Note: if you were using `iron-input` in 1.0, you were also required to
+ * set `prevent-invalid-input`. This is no longer needed as of Polymer 2.0,
+ * and will be set automatically for you if an `allowedPattern` is provided.
+ *
+ */
+ allowedPattern: {type: String},
+
+ /**
+ * Set to true to auto-validate the input value as you type.
+ */
+ autoValidate: {type: Boolean, value: false},
+
+ /**
+ * The native input element.
+ */
+ _inputElement: Object,
+ },
+
+ observers: ['_bindValueChanged(bindValue, _inputElement)'],
+
+ listeners: {'input': '_onInput', 'keypress': '_onKeypress'},
+
+ created: function() {
+ Polymer.IronA11yAnnouncer.requestAvailability();
+ this._previousValidInput = '';
+ this._patternAlreadyChecked = false;
+ },
+
+ attached: function() {
+ // If the input is added at a later time, update the internal reference.
+ this._observer = Polymer.dom(this).observeNodes(function(info) {
+ this._initSlottedInput();
+ }.bind(this));
+ },
+
+ detached: function() {
+ if (this._observer) {
+ Polymer.dom(this).unobserveNodes(this._observer);
+ this._observer = null;
+ }
+ },
+
+ /**
+ * Returns the distributed input element.
+ */
+ get inputElement() {
+ return this._inputElement;
+ },
+
+ _initSlottedInput: function() {
+ this._inputElement = this.getEffectiveChildren()[0];
+
+ if (this.inputElement && this.inputElement.value) {
+ this.bindValue = this.inputElement.value;
+ }
+
+ this.fire('iron-input-ready');
+ },
+
+ get _patternRegExp() {
+ var pattern;
+ if (this.allowedPattern) {
+ pattern = new RegExp(this.allowedPattern);
+ } else {
+ switch (this.inputElement.type) {
+ case 'number':
+ pattern = /[0-9.,e-]/;
+ break;
+ }
+ }
+ return pattern;
+ },
+
+ /**
+ * @suppress {checkTypes}
+ */
+ _bindValueChanged: function(bindValue, inputElement) {
+ // The observer could have run before attached() when we have actually
+ // initialized this property.
+ if (!inputElement) {
+ return;
+ }
+
+ if (bindValue === undefined) {
+ inputElement.value = null;
+ } else if (bindValue !== inputElement.value) {
+ this.inputElement.value = bindValue;
+ }
+
+ if (this.autoValidate) {
+ this.validate();
+ }
+
+ // manually notify because we don't want to notify until after setting value
+ this.fire('bind-value-changed', {value: bindValue});
+ },
+
+ _onInput: function() {
+ // Need to validate each of the characters pasted if they haven't
+ // been validated inside `_onKeypress` already.
+ if (this.allowedPattern && !this._patternAlreadyChecked) {
+ var valid = this._checkPatternValidity();
+ if (!valid) {
+ this._announceInvalidCharacter(
+ 'Invalid string of characters not entered.');
+ this.inputElement.value = this._previousValidInput;
+ }
+ }
+ this.bindValue = this._previousValidInput = this.inputElement.value;
+ this._patternAlreadyChecked = false;
+ },
+
+ _isPrintable: function(event) {
+ // What a control/printable character is varies wildly based on the browser.
+ // - most control characters (arrows, backspace) do not send a `keypress`
+ // event
+ // in Chrome, but the *do* on Firefox
+ // - in Firefox, when they do send a `keypress` event, control chars have
+ // a charCode = 0, keyCode = xx (for ex. 40 for down arrow)
+ // - printable characters always send a keypress event.
+ // - in Firefox, printable chars always have a keyCode = 0. In Chrome, the
+ // keyCode
+ // always matches the charCode.
+ // None of this makes any sense.
+
+ // For these keys, ASCII code == browser keycode.
+ var anyNonPrintable = (event.keyCode == 8) || // backspace
+ (event.keyCode == 9) || // tab
+ (event.keyCode == 13) || // enter
+ (event.keyCode == 27); // escape
+
+ // For these keys, make sure it's a browser keycode and not an ASCII code.
+ var mozNonPrintable = (event.keyCode == 19) || // pause
+ (event.keyCode == 20) || // caps lock
+ (event.keyCode == 45) || // insert
+ (event.keyCode == 46) || // delete
+ (event.keyCode == 144) || // num lock
+ (event.keyCode == 145) || // scroll lock
+ (event.keyCode > 32 &&
+ event.keyCode < 41) || // page up/down, end, home, arrows
+ (event.keyCode > 111 && event.keyCode < 124); // fn keys
+
+ return !anyNonPrintable && !(event.charCode == 0 && mozNonPrintable);
+ },
+
+ _onKeypress: function(event) {
+ if (!this.allowedPattern && this.inputElement.type !== 'number') {
+ return;
+ }
+ var regexp = this._patternRegExp;
+ if (!regexp) {
+ return;
+ }
+
+ // Handle special keys and backspace
+ if (event.metaKey || event.ctrlKey || event.altKey) {
+ return;
+ }
+
+ // Check the pattern either here or in `_onInput`, but not in both.
+ this._patternAlreadyChecked = true;
+
+ var thisChar = String.fromCharCode(event.charCode);
+ if (this._isPrintable(event) && !regexp.test(thisChar)) {
+ event.preventDefault();
+ this._announceInvalidCharacter(
+ 'Invalid character ' + thisChar + ' not entered.');
+ }
+ },
+
+ _checkPatternValidity: function() {
+ var regexp = this._patternRegExp;
+ if (!regexp) {
+ return true;
+ }
+ for (var i = 0; i < this.inputElement.value.length; i++) {
+ if (!regexp.test(this.inputElement.value[i])) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ /**
+ * Returns true if `value` is valid. The validator provided in `validator`
+ * will be used first, then any constraints.
+ * @return {boolean} True if the value is valid.
+ */
+ validate: function() {
+ if (!this.inputElement) {
+ this.invalid = false;
+ return true;
+ }
+
+ // Use the nested input's native validity.
+ var valid = this.inputElement.checkValidity();
+
+ // Only do extra checking if the browser thought this was valid.
+ if (valid) {
+ // Empty, required input is invalid
+ if (this.required && this.bindValue === '') {
+ valid = false;
+ } else if (this.hasValidator()) {
+ valid =
+ Polymer.IronValidatableBehavior.validate.call(this, this.bindValue);
+ }
+ }
+
+ this.invalid = !valid;
+ this.fire('iron-input-validate');
+ return valid;
+ },
+
+ _announceInvalidCharacter: function(message) {
+ this.fire('iron-announce', {text: message});
+ },
+
+ _computeValue: function(bindValue) {
+ return bindValue;
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package-lock.json
new file mode 100644
index 00000000000..726a87fcbd5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-input",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.7.tgz",
+ "integrity": "sha512-5QC0YAHH7aXzrrbgQ+faSeBKbJwTaUyYuaywYzDTr1Myz5C0knx5FHOV5QyhBeE1x8n2xfkBUGE/C0X1paLp+Q==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package.json
new file mode 100644
index 00000000000..a35aa5d3d88
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-input/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-input",
+ "private": true,
+ "description": "An input element with data binding",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-input.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/.bower.json
new file mode 100644
index 00000000000..8220520a5d8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/.bower.json
@@ -0,0 +1,66 @@
+{
+ "name": "iron-jsonp-library",
+ "version": "2.1.0",
+ "description": "Loads jsonp libraries",
+ "authors": [
+ "Aleks Totic <a@totic.org>",
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-component",
+ "polymer",
+ "behavior"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-jsonp-library.git"
+ },
+ "main": "iron-jsonp-library.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-jsonp-library/",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-spinner": "PolymerElements/paper-spinner#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.2",
+ "paper-spinner": "PolymerElements/paper-spinner#^1.0.1",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "107e718aad5868ee3d409502c2772b54d95ce395"
+ },
+ "_source": "https://github.com/PolymerElements/iron-jsonp-library.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-jsonp-library"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/README.md
new file mode 100644
index 00000000000..c93e1d6bcaa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/README.md
@@ -0,0 +1,51 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-jsonp-library.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-jsonp-library.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-jsonp-library)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-jsonp-library)_
+
+
+## &lt;iron-jsonp-library&gt;
+
+Loads specified jsonp library.
+
+Example:
+
+```html
+<iron-jsonp-library
+ library-url="https://apis.google.com/js/plusone.js?onload=%%callback%%"
+ notify-event="api-load"
+ library-loaded="{{loaded}}"></iron-jsonp-library>
+```
+
+Will emit 'api-load' event when loaded, and set 'loaded' to true
+
+Implemented by Polymer.IronJsonpLibraryBehavior. Use it
+to create specific library loader elements.
+
+
+
+## Polymer.IronJsonpLibraryBehavior
+
+`Polymer.IronJsonpLibraryBehavior` loads a jsonp library.
+Multiple components can request same library, only one copy will load.
+
+Some libraries require a specific global function be defined.
+If this is the case, specify the `callbackName` property.
+
+You should use an HTML Import to load library dependencies
+when possible instead of using this element.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/bower.json
new file mode 100644
index 00000000000..ef4c8b7d828
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/bower.json
@@ -0,0 +1,57 @@
+{
+ "name": "iron-jsonp-library",
+ "version": "2.0.0",
+ "description": "Loads jsonp libraries",
+ "authors": [
+ "Aleks Totic <a@totic.org>",
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-component",
+ "polymer",
+ "behavior"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-jsonp-library.git"
+ },
+ "main": "iron-jsonp-library.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-jsonp-library/",
+ "ignore": [
+ "/.*",
+ "/test/"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "paper-spinner": "PolymerElements/paper-spinner#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.2",
+ "paper-spinner": "PolymerElements/paper-spinner#^1.0.1",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/demo/index.html
new file mode 100644
index 00000000000..13abb9a7dd5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/demo/index.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>iron-jsonp-library Demo</title>
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="../../paper-spinner/paper-spinner.html">
+ <link rel="import" href="../iron-jsonp-library.html">
+ <style is="custom-style">
+
+ .loading {
+ color: var(--google-grey-500);
+ }
+
+ .success {
+ color: var(--paper-green-800);
+ }
+
+ .failure {
+ color: var(--paper-red-800);
+ }
+
+ paper-spinner {
+ --paper-spinner-layer-1-color: var(--google-grey-500);
+ --paper-spinner-layer-2-color: var(--google-grey-500);
+ --paper-spinner-layer-3-color: var(--google-grey-500);
+ --paper-spinner-layer-4-color: var(--google-grey-500);
+ }
+ </style>
+ </head>
+ <body>
+
+ <div class="vertical-section vertical-section-container centered">
+ <h1>&lt;iron-jsonp-library&gt;</h1>
+ <dom-bind>
+ <template is="dom-bind">
+ <h3>Good loader</h3>
+ <iron-jsonp-library
+ library-url="https://apis.google.com/js/plusone.js?onload=%%callback%%"
+ notify-event="api-load"
+ library-loaded="{{loaded}}"
+ library-error-message="{{errorMessage}}"></iron-jsonp-library>
+ <template is="dom-if" if="{{loaded}}">
+ <p class="success">The <code>Google+ API</code> has been loaded</p>
+ </template>
+ <template is="dom-if" if="{{!loaded}}">
+ <template is="dom-if" if="{{errorMessage}}">
+ <p class="failure">{{errorMessage}}</p>
+ </template>
+ <template is="dom-if" if="{{!errorMessage}}">
+ <p class="loading">Loading...</p>
+ </template>
+ </template>
+ </template>
+ </dom-bind>
+
+ <hr>
+ <dom-bind>
+ <template is="dom-bind">
+ <h3>Bad loader</h3>
+ <iron-jsonp-library
+ library-url="https://badapis.google.com/js/plusone.js?onload=%%callback%%"
+ notify-event="api-load"
+ library-loaded="{{loaded}}"
+ library-error-message="{{errorMessage}}"></iron-jsonp-library>
+ <template is="dom-if" if="{{loaded}}">
+ <p><code>badapis</code> has been loaded</p>
+ </template>
+ <template is="dom-if" if="{{!loaded}}">
+ <template is="dom-if" if="{{errorMessage}}">
+ <p class="failure">{{errorMessage}}</p>
+ </template>
+ <template is="dom-if" if="{{!errorMessage}}">
+ <p class="loading">Loading...</p>
+ </template>
+ </template>
+ </template>
+ </dom-bind>
+
+ <hr>
+ <dom-bind>
+ <template is="dom-bind" id="delayedLoader">
+ <h3>Delayed libraryUrl loader</h3>
+ <iron-jsonp-library
+ library-url="{{libraryUrl}}"
+ library-loaded="{{loaded}}"
+ library-error-message="{{errorMessage}}">
+ </iron-jsonp-library>
+ <template is="dom-if" if="{{loaded}}">
+ <p><code>{{libraryUrl}}</code> has been loaded</p>
+ </template>
+ <template is="dom-if" if="{{!loaded}}">
+ <template is="dom-if" if="{{errorMessage}}">
+ <p class="failure">{{errorMessage}}</p>
+ </template>
+ <template is="dom-if" if="{{!errorMessage}}">
+ <p class="loading">Loading...<code>{{libraryUrl}}</code></p>
+ </template>
+ </template>
+ </template>
+ </dom-bind>
+
+ </div>
+
+ <script>
+ // kick off delayed loader by setting libraryUrl
+ window.setTimeout(function() {
+ var t = document.querySelector('#delayedLoader');
+
+ if (Polymer.Element) {
+ // value is set on the dom-bind in 2.x
+ t.parentNode.libraryUrl = 'https://apis.google.com/js/drive-realtime.js?onload=%%callback%%';
+ } else {
+ // value is set on template in Polymer 1.x
+ t.libraryUrl = 'https://apis.google.com/js/drive-realtime.js?onload=%%callback%%';
+ }
+ },
+ 1000);
+ </script>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/hero.svg
new file mode 100755
index 00000000000..d6c1c13f8f0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/hero.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <circle cx="112" cy="36" r="4"/>
+ <circle cx="112" cy="90" r="4"/>
+ <circle cx="91" cy="98" r="4"/>
+ <circle cx="91" cy="29" r="4"/>
+ <circle cx="133" cy="29" r="4"/>
+ <circle cx="133" cy="97" r="4"/>
+ <circle cx="56" cy="63" r="4"/>
+ <circle cx="168" cy="63" r="4"/>
+ <circle cx="99" cy="63" r="4"/>
+ <circle cx="125" cy="63" r="4"/>
+ <path d="M90.8,98.5c-19.6,0-35.5-15.9-35.5-35.5s15.9-35.5,35.5-35.5s35.5,15.9,35.5,35.5S110.3,98.5,90.8,98.5z M90.8,29.5
+ c-18.5,0-33.5,15-33.5,33.5s15,33.5,33.5,33.5s33.5-15,33.5-33.5S109.2,29.5,90.8,29.5z"/>
+ <path d="M133.2,98.5c-19.6,0-35.5-15.9-35.5-35.5s15.9-35.5,35.5-35.5s35.5,15.9,35.5,35.5S152.8,98.5,133.2,98.5z M133.2,29.5
+ c-18.5,0-33.5,15-33.5,33.5s15,33.5,33.5,33.5s33.5-15,33.5-33.5S151.7,29.5,133.2,29.5z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/index.html
new file mode 100644
index 00000000000..487bb5c38a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.d.ts
new file mode 100644
index 00000000000..a0923bf156a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.d.ts
@@ -0,0 +1,90 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-jsonp-library.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.IronJsonpLibraryBehavior` loads a jsonp library.
+ * Multiple components can request same library, only one copy will load.
+ *
+ * Some libraries require a specific global function be defined.
+ * If this is the case, specify the `callbackName` property.
+ *
+ * You should use an HTML Import to load library dependencies
+ * when possible instead of using this element.
+ */
+ interface IronJsonpLibraryBehavior {
+
+ /**
+ * True if library has been successfully loaded
+ */
+ readonly libraryLoaded: boolean|null|undefined;
+
+ /**
+ * Not null if library has failed to load
+ */
+ readonly libraryErrorMessage: string|null|undefined;
+ _libraryUrlChanged(libraryUrl: any): void;
+ _libraryLoadCallback(err: any, result: any): void;
+
+ /**
+ * loads the library, and fires this.notifyEvent upon completion
+ */
+ _loadLibrary(): void;
+ ready(): void;
+ }
+
+ const IronJsonpLibraryBehavior: object;
+}
+
+/**
+ * Loads specified jsonp library.
+ *
+ * Example:
+ *
+ * <iron-jsonp-library
+ * library-url="https://apis.google.com/js/plusone.js?onload=%%callback%%"
+ * notify-event="api-load"
+ * library-loaded="{{loaded}}"></iron-jsonp-library>
+ *
+ * Will emit 'api-load' event when loaded, and set 'loaded' to true
+ *
+ * Implemented by Polymer.IronJsonpLibraryBehavior. Use it
+ * to create specific library loader elements.
+ */
+interface IronJsonpLibraryElement extends Polymer.Element, Polymer.IronJsonpLibraryBehavior {
+
+ /**
+ * Library url. Must contain string `%%callback%%`.
+ *
+ * `%%callback%%` is a placeholder for jsonp wrapper function name
+ *
+ * Ex: https://maps.googleapis.com/maps/api/js?callback=%%callback%%
+ */
+ libraryUrl: string|null|undefined;
+
+ /**
+ * Set if library requires specific callback name.
+ * Name will be automatically generated if not set.
+ */
+ callbackName: string|null|undefined;
+
+ /**
+ * event with name specified in 'notifyEvent' attribute
+ * will fire upon successful load
+ */
+ notifyEvent: string|null|undefined;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-jsonp-library": IronJsonpLibraryElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.html
new file mode 100644
index 00000000000..09277da417c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/iron-jsonp-library.html
@@ -0,0 +1,271 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+(function() {
+ "use strict";
+ /**
+ * `Polymer.IronJsonpLibraryBehavior` loads a jsonp library.
+ * Multiple components can request same library, only one copy will load.
+ *
+ * Some libraries require a specific global function be defined.
+ * If this is the case, specify the `callbackName` property.
+ *
+ * You should use an HTML Import to load library dependencies
+ * when possible instead of using this element.
+ *
+ * @hero hero.svg
+ * @demo demo/index.html
+ * @polymerBehavior
+ */
+ Polymer.IronJsonpLibraryBehavior = {
+
+ properties: {
+ /**
+ * True if library has been successfully loaded
+ */
+ libraryLoaded: {
+ type: Boolean,
+ value: false,
+ notify: true,
+ readOnly: true
+ },
+ /**
+ * Not null if library has failed to load
+ */
+ libraryErrorMessage: {
+ type: String,
+ value: null,
+ notify: true,
+ readOnly: true
+ }
+ // Following properties are to be set by behavior users
+ /**
+ * Library url. Must contain string `%%callback%%`.
+ *
+ * `%%callback%%` is a placeholder for jsonp wrapper function name
+ *
+ * Ex: https://maps.googleapis.com/maps/api/js?callback=%%callback%%
+ * @property libraryUrl
+ */
+ /**
+ * Set if library requires specific callback name.
+ * Name will be automatically generated if not set.
+ * @property callbackName
+ */
+ /**
+ * name of event to be emitted when library loads. Standard is `api-load`
+ * @property notifyEvent
+ */
+ /**
+ * event with name specified in `notifyEvent` attribute
+ * will fire upon successful load2
+ * @event `notifyEvent`
+ */
+ },
+
+ observers: [
+ '_libraryUrlChanged(libraryUrl)'
+ ],
+
+ _libraryUrlChanged: function(libraryUrl) {
+ // can't load before ready because notifyEvent might not be set
+ if (this._isReady && this.libraryUrl)
+ this._loadLibrary();
+ },
+
+ _libraryLoadCallback: function(err, result) {
+ if (err) {
+ Polymer.Base._warn("Library load failed:", err.message);
+ this._setLibraryErrorMessage(err.message);
+ }
+ else {
+ this._setLibraryErrorMessage(null);
+ this._setLibraryLoaded(true);
+ if (this.notifyEvent)
+ this.fire(this.notifyEvent, result, {composed: true});
+ }
+ },
+
+ /** loads the library, and fires this.notifyEvent upon completion */
+ _loadLibrary: function() {
+ LoaderMap.require(
+ this.libraryUrl,
+ this._libraryLoadCallback.bind(this),
+ this.callbackName
+ );
+ },
+
+ ready: function() {
+ this._isReady = true;
+ if (this.libraryUrl)
+ this._loadLibrary();
+ }
+ };
+
+ /**
+ * LoaderMap keeps track of all Loaders
+ */
+ var LoaderMap = {
+ apiMap: {}, // { hash -> Loader }
+
+ /**
+ * @param {Function} notifyCallback loaded callback fn(result)
+ * @param {string} jsonpCallbackName name of jsonpcallback. If API does not provide it, leave empty. Optional.
+ */
+ require: function(url, notifyCallback, jsonpCallbackName) {
+
+ // make hashable string form url
+ var name = this.nameFromUrl(url);
+
+ // create a loader as needed
+ if (!this.apiMap[name])
+ this.apiMap[name] = new Loader(name, url, jsonpCallbackName);
+
+ // ask for notification
+ this.apiMap[name].requestNotify(notifyCallback);
+ },
+
+ nameFromUrl: function(url) {
+ return url.replace(/[\:\/\%\?\&\.\=\-\,]/g, '_') + '_api';
+ }
+ };
+
+ /** @constructor */
+ var Loader = function(name, url, callbackName) {
+ this.notifiers = []; // array of notifyFn [ notifyFn* ]
+
+ // callback is specified either as callback name
+ // or computed dynamically if url has callbackMacro in it
+ if (!callbackName) {
+ if (url.indexOf(this.callbackMacro) >= 0) {
+ callbackName = name + '_loaded';
+ url = url.replace(this.callbackMacro, callbackName);
+ } else {
+ this.error = new Error('IronJsonpLibraryBehavior a %%callback%% parameter is required in libraryUrl');
+ // TODO(sjmiles): we should probably fallback to listening to script.load
+ return;
+ }
+ }
+ this.callbackName = callbackName;
+ window[this.callbackName] = this.success.bind(this);
+ this.addScript(url);
+ };
+
+ Loader.prototype = {
+
+ callbackMacro: '%%callback%%',
+ loaded: false,
+
+ addScript: function(src) {
+ var script = document.createElement('script');
+ script.src = src;
+ script.onerror = this.handleError.bind(this);
+ var s = document.querySelector('script') || document.body;
+ s.parentNode.insertBefore(script, s);
+ this.script = script;
+ },
+
+ removeScript: function() {
+ if (this.script.parentNode) {
+ this.script.parentNode.removeChild(this.script);
+ }
+ this.script = null;
+ },
+
+ handleError: function(ev) {
+ this.error = new Error("Library failed to load");
+ this.notifyAll();
+ this.cleanup();
+ },
+
+ success: function() {
+ this.loaded = true;
+ this.result = Array.prototype.slice.call(arguments);
+ this.notifyAll();
+ this.cleanup();
+ },
+
+ cleanup: function() {
+ delete window[this.callbackName];
+ },
+
+ notifyAll: function() {
+ this.notifiers.forEach( function(notifyCallback) {
+ notifyCallback(this.error, this.result);
+ }.bind(this));
+ this.notifiers = [];
+ },
+
+ requestNotify: function(notifyCallback) {
+ if (this.loaded || this.error) {
+ notifyCallback( this.error, this.result);
+ } else {
+ this.notifiers.push(notifyCallback);
+ }
+ }
+ };
+})();
+</script>
+
+<!--
+ Loads specified jsonp library.
+
+ Example:
+
+ <iron-jsonp-library
+ library-url="https://apis.google.com/js/plusone.js?onload=%%callback%%"
+ notify-event="api-load"
+ library-loaded="{{loaded}}"></iron-jsonp-library>
+
+ Will emit 'api-load' event when loaded, and set 'loaded' to true
+
+ Implemented by Polymer.IronJsonpLibraryBehavior. Use it
+ to create specific library loader elements.
+
+ @demo
+-->
+<script>
+ Polymer({
+
+ is: 'iron-jsonp-library',
+
+ behaviors: [ Polymer.IronJsonpLibraryBehavior ],
+
+ properties: {
+ /**
+ * Library url. Must contain string `%%callback%%`.
+ *
+ * `%%callback%%` is a placeholder for jsonp wrapper function name
+ *
+ * Ex: https://maps.googleapis.com/maps/api/js?callback=%%callback%%
+ */
+ libraryUrl: String,
+ /**
+ * Set if library requires specific callback name.
+ * Name will be automatically generated if not set.
+ */
+ callbackName: String,
+ /**
+ * event with name specified in 'notifyEvent' attribute
+ * will fire upon successful load
+ */
+ notifyEvent: String
+ /**
+ * event with name specified in 'notifyEvent' attribute
+ * will fire upon successful load
+ * @event `notifyEvent`
+ */
+
+ }
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package-lock.json
new file mode 100644
index 00000000000..dee184cd29b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-jsonp-library",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package.json
new file mode 100644
index 00000000000..8dfc458bb86
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-jsonp-library/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-jsonp-library",
+ "private": true,
+ "description": "Loads jsonp libraries",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-jsonp-library.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.bower.json
new file mode 100644
index 00000000000..257a96c24f2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.bower.json
@@ -0,0 +1,71 @@
+{
+ "name": "iron-location",
+ "description": "Bidirectional data binding into the page's URL.",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "routing"
+ ],
+ "main": [
+ "iron-location.html",
+ "iron-query-params.html"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-location.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-location",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "promise-polyfill": "polymerlabs/promise-polyfill#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
+ "paper-input": "polymerelements/paper-input#^1.0.0",
+ "paper-slider": "polymerelements/paper-slider#^1.0.0",
+ "paper-styles": "polymerelements/paper-styles#^1.0.0",
+ "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
+ "test-fixture": "polymerelements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.3"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "version": "2.2.1",
+ "_release": "2.2.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.1",
+ "commit": "a0619aa3628371004cecb20758dad282ac8aff8b"
+ },
+ "_source": "https://github.com/PolymerElements/iron-location.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-location"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/CODEOWNERS
new file mode 100644
index 00000000000..9ef9eb64211
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @e111077
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..e3b4e289b66
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-location/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/lebawa/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.travis.yml
new file mode 100644
index 00000000000..6db554ea090
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+env:
+ global:
+ - secure: >-
+ LSHof0ip5tJswHk4wAIXXsf8Z0WL44Y1pB1XmqFtIsjQLl+2K5bdhRq6Hd6RUZYcpTL29cMStCLQJEG1hxnMks37omHuVFWRtk0NaYlGnJY4i/m/ukUBmM7Yr7LROWRnBgU75PVUvc4YMbCjvlQ9KKjdgBbQBFH2KjhKr9GUN+ihB1yaKRMADvFtC6JWisG4RPv1pRxF6UgvGkOsaCdVb9H9AbKA0psAI1cpg8IMGgUBslbwhYw+viMEQdZ5lW++T3Tb9cwzCVaTqBgvkQCXW4I6T4En9yvUWbV0Ry8uChchvs6BJfwpgN/nksYnLCbCLmN+Rw5eU0+XyWZDLiki/HpsNQblqVEW7vHo1hmtpK24GUv2g8kuE1OjjW7K/l+Q20D8FJFIcPdFjmZ/XgLWxdtXbgNC8n4Z1XBEqKuV1BJ29ojvZk5a5/gFBf9PWdMNTVwSepk7+LoEVQW17vzSHT/HDF7WYEs14uZ0x9I0AV2+339RG7iCcVFMZKYgIif0DmZVysnm0Z9j+wRRk227JpiF9MHeVkFUaXl3+3XIQMz04t+H1wOXiDRlJLJG9IUrzFs+KYuCA+OxNc0XrxjA6Zkl75AQAjAY5vMEWYD+N2OGjkfwD7dB4JtltmZ4llMhEZUt/RPLeZJvL4Sus8hfA6SNG9/tdVgef0mQ91acxZg=
+ - secure: >-
+ h0j4eT4lJqbDkEVz4OjkPuAHxxT0Cy7bWbT71oDllhDAvl9zXxIn5BHSnCaUfO0xUhXVpwNuVmDzOE6yQETJ3MamoqL2Hrbg0VCr4hux9/2ipa4tlCTjQ2Y/YaIoID7CpCchdoOQAjrxeg0ZhpMnwxV18NHTqlxNrsdoSDDSmCdffWQwgjVI07O4h1ISIWx6oY0i1Z+9nJI001iZIw5vGopK8zACa5hfSu9my8Nog5gYOBOEoYmT8lNBaKkNuZacGAkHmXPmeeWiflM49sRO5MfyCgVvNtn6yohXs5D1QD2KUZs4mTzVBebT3vPuV7I9NFd+ZY9GT9YeH9BLuxKpYhGlnjL2HhGAvGjIcKX8315EOCpVvgwX3VE1f9PJe3K9q6LP/sFUqf8cUrbj9FhiAVp79IPJkvLUc+1hUG3iQ8X83mjQxcrCt6I50BINOLgjsfzCmnvv12g3FuRry2EBRxEultvPLRCNc2bJCPqol6kiWzs8ySOPXCYOcXqW5/6Z4DYLMTYevapkJZhErcTBuIH7rXEX4tGsdBjtGjTepcW7k2dsCElrul79czZA3AwdLEK/fuygxXR8eMCeS8Tdh4+Ba4M9TfXtAjjnR30NayTOCwyWW9IvTJeWeXKd6SilJcGVO7r546ayGWJ2G+Fltyi7RGixMplRMm8y6YfeM9k=
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/CONTRIBUTING.md
new file mode 100644
index 00000000000..cfda1a55427
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/lebawa/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/lebawa/edit?html,output](https://jsbin.com/lebawa/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/README.md
new file mode 100644
index 00000000000..ec532cf17dd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/README.md
@@ -0,0 +1,61 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-location.html iron-query-params.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-location.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-location)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/iron-location)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-location)_
+
+## Changes in 2.0
+* URL Polyfill no longer a dependency. Small workaround implemented.
+
+## &lt;iron-location&gt;
+
+The `iron-location` element manages binding to and from the current URL.
+
+iron-location is the first, and lowest level element in the Polymer team's
+routing system. This is a beta release of iron-location as we continue work
+on higher level elements, and as such iron-location may undergo breaking
+changes.
+
+#### Properties
+
+When the URL is: `/search?query=583#details` iron-location's properties will be:
+
+* path: `'/search'`
+* query: `'query=583'`
+* hash: `'details'`
+
+These bindings are bidirectional. Modifying them will in turn modify the URL.
+
+iron-location is only active while it is attached to the document.
+
+#### Links
+
+While iron-location is active in the document it will intercept clicks on links
+within your site, updating the URL pushing the updated URL out through the
+databinding system. iron-location only intercepts clicks with the intent to
+open in the same window, so middle mouse clicks and ctrl/cmd clicks work fine.
+
+You can customize this behavior with the `urlSpaceRegex`.
+
+#### Dwell Time
+
+iron-location protects against accidental history spamming by only adding
+entries to the user's history if the URL stays unchanged for `dwellTime`
+milliseconds.
+
+
+
+<!-- No docs for <iron-query-params> found. -->
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/bower.json
new file mode 100644
index 00000000000..48b9ff14d8d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/bower.json
@@ -0,0 +1,61 @@
+{
+ "name": "iron-location",
+ "description": "Bidirectional data binding into the page's URL.",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "routing"
+ ],
+ "main": [
+ "iron-location.html",
+ "iron-query-params.html"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-location.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-location",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "promise-polyfill": "polymerlabs/promise-polyfill#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0",
+ "paper-input": "polymerelements/paper-input#^1.0.0",
+ "paper-slider": "polymerelements/paper-slider#^1.0.0",
+ "paper-styles": "polymerelements/paper-styles#^1.0.0",
+ "promise-polyfill": "polymerlabs/promise-polyfill#^1.0.0",
+ "test-fixture": "polymerelements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.3"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/index.html
new file mode 100644
index 00000000000..2a94af06753
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/index.html
@@ -0,0 +1,125 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>iron-location</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../polymer/polymer.html">
+ <link rel="import" href="../iron-location.html">
+ <link rel="import" href="../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../iron-demo-helpers/url-bar.html">
+</head>
+<body>
+ <url-bar></url-bar>
+
+ <dom-module id="iron-location-demo">
+ <template>
+ <style>
+ div.inputs {
+ margin-bottom: 15px;
+ }
+ label {
+ display: inline-block;
+ width: 100px;
+ }
+
+ h3 {
+ padding: 0;
+ margin: 0;
+ }
+
+ .inputs, .history_entries {
+ @apply --layout-vertical;
+ @apply --layout-flex;
+ padding: 20px;
+ max-width: 500px;
+ }
+
+ .container {
+ @apply --layout-horizontal;
+ }
+
+ input {
+ margin-top: 15px;
+ margin-bottom: 15px;
+ }
+ </style>
+ <iron-location path="{{path}}" hash="{{hash}}" query="{{query}}"
+ dwell-time="{{dwellTime}}">
+ </iron-location>
+
+ <div class="container">
+ <div class="inputs">
+ <h3>URL</h3>
+ <input placeholder="path" value="{{path::input}}">
+ <input placeholder="hash" value="{{hash::input}}">
+ <input placeholder="query" value="{{query::input}}">
+ </div>
+ <div class="history_entries">
+ <h3>Dwell Time</h3>
+ <p>
+ iron-location won't add extraneous entries to the browser's history
+ when changes come in quick succession.
+ </p>
+ <p>
+ A new history entry will only be added if iron-location stays in
+ the same state longer than dwellTime.
+ </p>
+ <div>
+ <label>History added: </label>
+ {{historyElementsAdded}} entries
+ </div>
+ <div>
+ <label>Dwell time:</label>
+ {{inSeconds(dwellTime)}}s
+ </div>
+ <input type="range" min="-1" max="5000" step="100"
+ value="{{dwellTime::input}}">
+ </div>
+ </div>
+ </template>
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ Polymer({
+ is: 'iron-location-demo',
+ properties: {
+ historyElementsAdded: {type: Number},
+
+ dwellTime: {type: Number, value: 2000}
+ },
+ observers: ['checkHistorySize(path, hash, query, startingHistoryLength)'],
+
+ ready: function() {
+ this.startingHistoryLength = window.history.length;
+ },
+
+ checkHistorySize: function() {
+ this.historyElementsAdded =
+ window.history.length - this.startingHistoryLength;
+ },
+
+ inSeconds: function(dwellTime) {
+ if (dwellTime === -1 || dwellTime === undefined) {
+ return -1;
+ }
+
+ return (Math.round(dwellTime / 100) / 10)
+ }
+ });
+ });
+ </script>
+ </dom-module>
+
+ <iron-location-demo></iron-location-demo>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/iron-query-params.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/iron-query-params.html
new file mode 100644
index 00000000000..43dc376f96b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/demo/iron-query-params.html
@@ -0,0 +1,124 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>iron-query-params</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-query-params.html">
+ <link rel="import" href="../../iron-flex-layout/iron-flex-layout-classes.html">
+</head>
+<body>
+
+ <dom-module id='iron-query-params-demo'>
+ <template>
+ <style include="iron-flex">
+ div.inputs {
+ margin-bottom: 15px;
+ }
+ label {
+ display: inline-block;
+ width: 100px;
+ }
+ h3 {
+ padding: 0;
+ margin: 0;
+ }
+ </style>
+ <iron-query-params
+ id="queryParams"
+ params-string='{{paramString}}'
+ params-object='{{params}}'>
+ </iron-query-params>
+
+ <div class="layout horizontal">
+ <div class="layout vertical flex" class='inputs'>
+ <div>Params as string:</div>
+ <input value="{{paramString::input}}">
+
+ <div>Params as object</div>
+ <template is="dom-if" if="{{paramsInvalid}}">
+ <div>INVALID PARAMS: Should be legal JSON</div>
+ </template>
+ <input value="{{stringifiedParams::input}}">
+ </div>
+ </div>
+ </template>
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ Polymer({
+ is: 'iron-query-params-demo',
+ properties: {
+ params: {observer: 'paramsChanged'},
+
+ paramsInvalid: {
+ value: false,
+ },
+
+ paramString: {type: String, observer: 'paramStringChanged'},
+
+ stringifiedParams: {type: String, observer: 'stringifedParamsChanged'}
+ },
+
+ paramStringChanged: function() {
+ if (this.ignore) {
+ return;
+ }
+
+ this.ignore = true;
+
+ try {
+ this.paramsInvalid = false;
+ } catch (_) {
+ this.paramsInvalid = true;
+ }
+
+ this.ignore = false;
+ },
+
+ stringifedParamsChanged: function() {
+ if (this.ignore) {
+ return;
+ }
+
+ this.ignore = true;
+
+ try {
+ var newParamsObject = JSON.parse(this.stringifiedParams);
+ this.$.queryParams.paramsObject = newParamsObject;
+ this.paramsInvalid = false;
+
+ } catch (e) {
+ this.paramsInvalid = true;
+ }
+
+ this.ignore = false;
+ },
+
+ paramsChanged: function() {
+ if (this.ignore) {
+ return;
+ }
+
+ this.ignore = true;
+ this.stringifiedParams = JSON.stringify(this.params);
+ this.paramsInvalid = false;
+ this.ignore = false;
+ }
+ });
+ });
+ </script>
+ </dom-module>
+
+ <iron-query-params-demo></iron-query-params-demo>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/index.html
new file mode 100644
index 00000000000..8ded2107516
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>iron-location</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.d.ts
new file mode 100644
index 00000000000..0d55d71a77e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.d.ts
@@ -0,0 +1,135 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-location.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+/**
+ * The `iron-location` element manages binding to and from the current URL.
+ *
+ * iron-location is the first, and lowest level element in the Polymer team's
+ * routing system. This is a beta release of iron-location as we continue work
+ * on higher level elements, and as such iron-location may undergo breaking
+ * changes.
+ *
+ * #### Properties
+ *
+ * When the URL is: `/search?query=583#details` iron-location's properties will be:
+ *
+ * - path: `'/search'`
+ * - query: `'query=583'`
+ * - hash: `'details'`
+ *
+ * These bindings are bidirectional. Modifying them will in turn modify the URL.
+ *
+ * iron-location is only active while it is attached to the document.
+ *
+ * #### Links
+ *
+ * While iron-location is active in the document it will intercept clicks on links
+ * within your site, updating the URL pushing the updated URL out through the
+ * databinding system. iron-location only intercepts clicks with the intent to
+ * open in the same window, so middle mouse clicks and ctrl/cmd clicks work fine.
+ *
+ * You can customize this behavior with the `urlSpaceRegex`.
+ *
+ * #### Dwell Time
+ *
+ * iron-location protects against accidental history spamming by only adding
+ * entries to the user's history if the URL stays unchanged for `dwellTime`
+ * milliseconds.
+ */
+interface IronLocationElement extends Polymer.Element {
+
+ /**
+ * The pathname component of the URL.
+ */
+ path: string|null|undefined;
+
+ /**
+ * The query string portion of the URL.
+ */
+ query: string|null|undefined;
+
+ /**
+ * The hash component of the URL.
+ */
+ hash: string|null|undefined;
+
+ /**
+ * If the user was on a URL for less than `dwellTime` milliseconds, it
+ * won't be added to the browser's history, but instead will be replaced
+ * by the next entry.
+ *
+ * This is to prevent large numbers of entries from clogging up the user's
+ * browser history. Disable by setting to a negative number.
+ */
+ dwellTime: number|null|undefined;
+
+ /**
+ * A regexp that defines the set of URLs that should be considered part
+ * of this web app.
+ *
+ * Clicking on a link that matches this regex won't result in a full page
+ * navigation, but will instead just update the URL state in place.
+ *
+ * This regexp is given everything after the origin in an absolute
+ * URL. So to match just URLs that start with /search/ do:
+ * url-space-regex="^/search/"
+ */
+ urlSpaceRegex: string|RegExp|null;
+
+ /**
+ * A flag that specifies whether the spaces in query that would normally be
+ * encoded as %20 should be encoded as +.
+ *
+ * Given an example text "hello world", it is encoded in query as
+ * - "hello%20world" without the parameter
+ * - "hello+world" with the parameter
+ */
+ encodeSpaceAsPlusInQuery: boolean|null|undefined;
+
+ /**
+ * urlSpaceRegex, but coerced into a regexp.
+ */
+ readonly _urlSpaceRegExp: RegExp|null;
+ _lastChangedAt: number|null|undefined;
+ _initialized: boolean|null|undefined;
+ hostAttributes: object|null;
+ created(): void;
+ attached(): void;
+ detached(): void;
+ _hashChanged(): void;
+ _urlChanged(): void;
+ _getUrl(): any;
+ _updateUrl(): void;
+
+ /**
+ * A necessary evil so that links work as expected. Does its best to
+ * bail out early if possible.
+ *
+ * @param event .
+ */
+ _globalOnClick(event: MouseEvent|null): void;
+
+ /**
+ * Returns the absolute URL of the link (if any) that this click event
+ * is clicking on, if we can and should override the resulting full
+ * page navigation. Returns null otherwise.
+ *
+ * @param event .
+ * @returns .
+ */
+ _getSameOriginLinkHref(event: MouseEvent|null): string|null;
+ _makeRegExp(urlSpaceRegex: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-location": IronLocationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.html
new file mode 100644
index 00000000000..5b42ae7fe77
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-location.html
@@ -0,0 +1,433 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!--
+
+The `iron-location` element manages binding to and from the current URL.
+
+iron-location is the first, and lowest level element in the Polymer team's
+routing system. This is a beta release of iron-location as we continue work
+on higher level elements, and as such iron-location may undergo breaking
+changes.
+
+#### Properties
+
+When the URL is: `/search?query=583#details` iron-location's properties will be:
+
+ - path: `'/search'`
+ - query: `'query=583'`
+ - hash: `'details'`
+
+These bindings are bidirectional. Modifying them will in turn modify the URL.
+
+iron-location is only active while it is attached to the document.
+
+#### Links
+
+While iron-location is active in the document it will intercept clicks on links
+within your site, updating the URL pushing the updated URL out through the
+databinding system. iron-location only intercepts clicks with the intent to
+open in the same window, so middle mouse clicks and ctrl/cmd clicks work fine.
+
+You can customize this behavior with the `urlSpaceRegex`.
+
+#### Dwell Time
+
+iron-location protects against accidental history spamming by only adding
+entries to the user's history if the URL stays unchanged for `dwellTime`
+milliseconds.
+
+@demo demo/index.html
+
+ -->
+<script>
+ (function() {
+ 'use strict';
+
+ var workingURL;
+
+ var urlDoc, urlBase, anchor;
+
+ /**
+ * @param {string} path
+ * @param {string=} base
+ * @return {!URL|!HTMLAnchorElement}
+ */
+ function resolveURL(path, base) {
+ if (workingURL === undefined) {
+ workingURL = false;
+ try {
+ var u = new URL('b', 'http://a');
+ u.pathname = 'c%20d';
+ workingURL = (u.href === 'http://a/c%20d');
+ workingURL = workingURL &&
+ (new URL('http://www.google.com/?foo bar').href ===
+ 'http://www.google.com/?foo%20bar');
+ } catch (e) {
+ }
+ }
+ if (workingURL) {
+ return new URL(path, base);
+ }
+ if (!urlDoc) {
+ urlDoc = document.implementation.createHTMLDocument('url');
+ urlBase = urlDoc.createElement('base');
+ urlDoc.head.appendChild(urlBase);
+ anchor = /** @type {HTMLAnchorElement}*/ (urlDoc.createElement('a'));
+ }
+ urlBase.href = base;
+ anchor.href = path.replace(/ /g, '%20');
+ return anchor;
+ }
+
+ Polymer({
+ is: 'iron-location',
+
+ properties: {
+ /**
+ * The pathname component of the URL.
+ */
+ path: {
+ type: String,
+ notify: true,
+ value: function() {
+ return window.decodeURIComponent(window.location.pathname);
+ }
+ },
+
+ /**
+ * The query string portion of the URL.
+ */
+ query: {
+ type: String,
+ notify: true,
+ value: function() {
+ return window.location.search.slice(1);
+ }
+ },
+
+ /**
+ * The hash component of the URL.
+ */
+ hash: {
+ type: String,
+ notify: true,
+ value: function() {
+ return window.decodeURIComponent(window.location.hash.slice(1));
+ }
+ },
+
+ /**
+ * If the user was on a URL for less than `dwellTime` milliseconds, it
+ * won't be added to the browser's history, but instead will be replaced
+ * by the next entry.
+ *
+ * This is to prevent large numbers of entries from clogging up the user's
+ * browser history. Disable by setting to a negative number.
+ */
+ dwellTime: {type: Number, value: 2000},
+
+ /**
+ * A regexp that defines the set of URLs that should be considered part
+ * of this web app.
+ *
+ * Clicking on a link that matches this regex won't result in a full page
+ * navigation, but will instead just update the URL state in place.
+ *
+ * This regexp is given everything after the origin in an absolute
+ * URL. So to match just URLs that start with /search/ do:
+ * url-space-regex="^/search/"
+ *
+ * @type {string|RegExp}
+ */
+ urlSpaceRegex: {type: String, value: ''},
+
+ /**
+ * A flag that specifies whether the spaces in query that would normally be
+ * encoded as %20 should be encoded as +.
+ *
+ * Given an example text "hello world", it is encoded in query as
+ * - "hello%20world" without the parameter
+ * - "hello+world" with the parameter
+ */
+ encodeSpaceAsPlusInQuery: {type: Boolean, value: false},
+
+ /**
+ * urlSpaceRegex, but coerced into a regexp.
+ *
+ * @type {RegExp}
+ */
+ _urlSpaceRegExp: {computed: '_makeRegExp(urlSpaceRegex)'},
+
+ _lastChangedAt: {type: Number},
+
+ _initialized: {type: Boolean, value: false}
+ },
+
+ hostAttributes: {hidden: true},
+
+ observers: ['_updateUrl(path, query, hash)'],
+
+ created: function() {
+ this.__location = window.location;
+ },
+
+ attached: function() {
+ this.listen(window, 'hashchange', '_hashChanged');
+ this.listen(window, 'location-changed', '_urlChanged');
+ this.listen(window, 'popstate', '_urlChanged');
+ this.listen(
+ /** @type {!HTMLBodyElement} */ (document.body),
+ 'click',
+ '_globalOnClick');
+ // Give a 200ms grace period to make initial redirects without any
+ // additions to the user's history.
+ this._lastChangedAt = window.performance.now() - (this.dwellTime - 200);
+ this._initialized = true;
+
+ this._urlChanged();
+ },
+
+ detached: function() {
+ this.unlisten(window, 'hashchange', '_hashChanged');
+ this.unlisten(window, 'location-changed', '_urlChanged');
+ this.unlisten(window, 'popstate', '_urlChanged');
+ this.unlisten(
+ /** @type {!HTMLBodyElement} */ (document.body),
+ 'click',
+ '_globalOnClick');
+ this._initialized = false;
+ },
+
+ _hashChanged: function() {
+ this.hash = window.decodeURIComponent(this.__location.hash.substring(1));
+ },
+
+ _urlChanged: function() {
+ // We want to extract all info out of the updated URL before we
+ // try to write anything back into it.
+ //
+ // i.e. without _dontUpdateUrl we'd overwrite the new path with the old
+ // one when we set this.hash. Likewise for query.
+ this._dontUpdateUrl = true;
+ this._hashChanged();
+ this.path = window.decodeURIComponent(this.__location.pathname);
+ this.query = this.__location.search.substring(1);
+ this._dontUpdateUrl = false;
+ this._updateUrl();
+ },
+
+ _getUrl: function() {
+ var partiallyEncodedPath =
+ window.encodeURI(this.path).replace(/\#/g, '%23').replace(/\?/g, '%3F');
+ var partiallyEncodedQuery = '';
+ if (this.query) {
+ partiallyEncodedQuery = '?' + this.query.replace(/\#/g, '%23');
+ if (this.encodeSpaceAsPlusInQuery) {
+ partiallyEncodedQuery = partiallyEncodedQuery.replace(/\+/g, '%2B')
+ .replace(/ /g, '+')
+ .replace(/%20/g, '+');
+ }
+ }
+ var partiallyEncodedHash = '';
+ if (this.hash) {
+ partiallyEncodedHash = '#' + window.encodeURI(this.hash);
+ }
+ return (
+ partiallyEncodedPath + partiallyEncodedQuery + partiallyEncodedHash);
+ },
+
+ _updateUrl: function() {
+ if (this._dontUpdateUrl || !this._initialized) {
+ return;
+ }
+
+ if (this.path === window.decodeURIComponent(this.__location.pathname) &&
+ this.query === this.__location.search.substring(1) &&
+ this.hash ===
+ window.decodeURIComponent(this.__location.hash.substring(1))) {
+ // Nothing to do, the current URL is a representation of our properties.
+ return;
+ }
+
+ var newUrl = this._getUrl();
+ // Need to use a full URL in case the containing page has a base URI.
+ var fullNewUrl =
+ resolveURL(
+ newUrl, this.__location.protocol + '//' + this.__location.host)
+ .href;
+ var now = window.performance.now();
+ var shouldReplace = this._lastChangedAt + this.dwellTime > now;
+ this._lastChangedAt = now;
+
+ if (shouldReplace) {
+ window.history.replaceState({}, '', fullNewUrl);
+ } else {
+ window.history.pushState({}, '', fullNewUrl);
+ }
+
+ this.fire('location-changed', {}, {node: window});
+ },
+
+ /**
+ * A necessary evil so that links work as expected. Does its best to
+ * bail out early if possible.
+ *
+ * @param {MouseEvent} event .
+ */
+ _globalOnClick: function(event) {
+ // If another event handler has stopped this event then there's nothing
+ // for us to do. This can happen e.g. when there are multiple
+ // iron-location elements in a page.
+ if (event.defaultPrevented) {
+ return;
+ }
+
+ var href = this._getSameOriginLinkHref(event);
+
+ if (!href) {
+ return;
+ }
+
+ event.preventDefault();
+
+ // If the navigation is to the current page we shouldn't add a history
+ // entry or fire a change event.
+ if (href === this.__location.href) {
+ return;
+ }
+
+ window.history.pushState({}, '', href);
+ this.fire('location-changed', {}, {node: window});
+ },
+
+ /**
+ * Returns the absolute URL of the link (if any) that this click event
+ * is clicking on, if we can and should override the resulting full
+ * page navigation. Returns null otherwise.
+ *
+ * @param {MouseEvent} event .
+ * @return {string?} .
+ */
+ _getSameOriginLinkHref: function(event) {
+ // We only care about left-clicks.
+ if (event.button !== 0) {
+ return null;
+ }
+
+ // We don't want modified clicks, where the intent is to open the page
+ // in a new tab.
+ if (event.metaKey || event.ctrlKey) {
+ return null;
+ }
+
+ var eventPath = Polymer.dom(event).path;
+ var anchor = null;
+
+ for (var i = 0; i < eventPath.length; i++) {
+ var element = eventPath[i];
+
+ if (element.tagName === 'A' && element.href) {
+ anchor = element;
+ break;
+ }
+ }
+
+ // If there's no link there's nothing to do.
+ if (!anchor) {
+ return null;
+ }
+
+ // Target blank is a new tab, don't intercept.
+ if (anchor.target === '_blank') {
+ return null;
+ }
+
+ // If the link is for an existing parent frame, don't intercept.
+ if ((anchor.target === '_top' || anchor.target === '_parent') &&
+ window.top !== window) {
+ return null;
+ }
+
+ // If the link is a download, don't intercept.
+ if (anchor.download) {
+ return null;
+ }
+
+ var href = anchor.href;
+
+ // It only makes sense for us to intercept same-origin navigations.
+ // pushState/replaceState don't work with cross-origin links.
+ var url;
+
+ if (document.baseURI != null) {
+ url = resolveURL(href, /** @type {string} */ (document.baseURI));
+ } else {
+ url = resolveURL(href);
+ }
+
+ var origin;
+
+ // IE Polyfill
+ if (this.__location.origin) {
+ origin = this.__location.origin;
+ } else {
+ origin = this.__location.protocol + '//' + this.__location.host;
+ }
+
+ var urlOrigin;
+
+ if (url.origin) {
+ urlOrigin = url.origin;
+ } else {
+ // IE always adds port number on HTTP and HTTPS on <a>.host but not on
+ // window.location.host
+ var urlHost = url.host;
+ var urlPort = url.port;
+ var urlProtocol = url.protocol;
+ var isExtraneousHTTPS = urlProtocol === 'https:' && urlPort === '443';
+ var isExtraneousHTTP = urlProtocol === 'http:' && urlPort === '80';
+
+ if (isExtraneousHTTPS || isExtraneousHTTP) {
+ urlHost = url.hostname;
+ }
+ urlOrigin = urlProtocol + '//' + urlHost;
+ }
+
+ if (urlOrigin !== origin) {
+ return null;
+ }
+
+ var normalizedHref = url.pathname + url.search + url.hash;
+
+ // pathname should start with '/', but may not if `new URL` is not supported
+ if (normalizedHref[0] !== '/') {
+ normalizedHref = '/' + normalizedHref;
+ }
+
+ // If we've been configured not to handle this url... don't handle it!
+ if (this._urlSpaceRegExp && !this._urlSpaceRegExp.test(normalizedHref)) {
+ return null;
+ }
+
+ // Need to use a full URL in case the containing page has a base URI.
+ var fullNormalizedHref =
+ resolveURL(normalizedHref, this.__location.href).href;
+ return fullNormalizedHref;
+ },
+
+ _makeRegExp: function(urlSpaceRegex) {
+ return RegExp(urlSpaceRegex);
+ }
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.d.ts
new file mode 100644
index 00000000000..dcffb3e9f2d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.d.ts
@@ -0,0 +1,26 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-query-params.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+interface IronQueryParamsElement extends Polymer.Element {
+ paramsString: string|null|undefined;
+ paramsObject: object|null|undefined;
+ _dontReact: boolean|null|undefined;
+ hostAttributes: object|null;
+ paramsStringChanged(): void;
+ paramsObjectChanged(): void;
+ _encodeParams(params: any): any;
+ _decodeParams(paramString: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-query-params": IronQueryParamsElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.html
new file mode 100644
index 00000000000..08e56451e4f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/iron-query-params.html
@@ -0,0 +1,89 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+
+@demo demo/iron-query-params.html
+-->
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ 'use strict';
+
+ Polymer({
+ is: 'iron-query-params',
+
+ properties: {
+ paramsString: {
+ type: String,
+ notify: true,
+ observer: 'paramsStringChanged',
+ },
+
+ paramsObject: {
+ type: Object,
+ notify: true
+ },
+
+ _dontReact: {type: Boolean, value: false}
+ },
+
+ hostAttributes: {hidden: true},
+
+ observers: ['paramsObjectChanged(paramsObject.*)'],
+
+ paramsStringChanged: function() {
+ this._dontReact = true;
+ this.paramsObject = this._decodeParams(this.paramsString);
+ this._dontReact = false;
+ },
+
+ paramsObjectChanged: function() {
+ if (this._dontReact) {
+ return;
+ }
+ this.paramsString = this._encodeParams(this.paramsObject)
+ .replace(/%3F/g, '?')
+ .replace(/%2F/g, '/')
+ .replace(/'/g, '%27');
+ },
+
+ _encodeParams: function(params) {
+ var encodedParams = [];
+
+ for (var key in params) {
+ var value = params[key];
+
+ if (value === '') {
+ encodedParams.push(encodeURIComponent(key));
+
+ } else if (value) {
+ encodedParams.push(
+ encodeURIComponent(key) + '=' +
+ encodeURIComponent(value.toString()));
+ }
+ }
+ return encodedParams.join('&');
+ },
+
+ _decodeParams: function(paramString) {
+ var params = {};
+ // Work around a bug in decodeURIComponent where + is not
+ // converted to spaces:
+ paramString = (paramString || '').replace(/\+/g, '%20');
+ var paramList = paramString.split('&');
+ for (var i = 0; i < paramList.length; i++) {
+ var param = paramList[i].split('=');
+ if (param[0]) {
+ params[decodeURIComponent(param[0])] =
+ decodeURIComponent(param[1] || '');
+ }
+ }
+ return params;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package-lock.json
new file mode 100644
index 00000000000..4a671d0d95d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-location",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.7.tgz",
+ "integrity": "sha512-5QC0YAHH7aXzrrbgQ+faSeBKbJwTaUyYuaywYzDTr1Myz5C0knx5FHOV5QyhBeE1x8n2xfkBUGE/C0X1paLp+Q==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package.json
new file mode 100644
index 00000000000..f65abb00ea4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-location/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-location",
+ "private": true,
+ "description": "Bidirectional data binding into the page's URL.",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-location.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.bower.json
new file mode 100644
index 00000000000..cf0f4de4a91
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.bower.json
@@ -0,0 +1,69 @@
+{
+ "name": "iron-menu-behavior",
+ "version": "2.1.1",
+ "description": "Provides accessible menu behavior",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior",
+ "menu"
+ ],
+ "main": [
+ "iron-menu-behavior.html",
+ "iron-menubar-behavior.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-menu-behavior"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-menu-behavior",
+ "ignore": [],
+ "dependencies": {
+ "iron-selector": "PolymerElements/iron-selector#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-selector": "PolymerElements/iron-selector#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "3f4817b8929fdc044432c2be6b713613267932d4"
+ },
+ "_source": "https://github.com/PolymerElements/iron-menu-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-menu-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..da2172d0163
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-menu-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.travis.yml
new file mode 100644
index 00000000000..b61496728fb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ CbYi/0VAtpLB+NDHdD/I9q2ldILrmyc3wxKdO5vEtMvRKYgsddQ/hXGovV3c6Hy9sAXD5sKtNi60BBG5E2XuydshjYAZiytfeNjFIvDu5627Xljjt90e/r1hg3tNHRRQihH73nPECfp/X+g+yBNCX3f0+2ExAh0DMs1DXt7Dl7Q=
+ - secure: >-
+ kLFlOTh9IjctY7DIJ3KEw5OPrqHNTzoArdabfAtisBMWahuJptKFmYCp/t+zPSL27IVqJakaqPrwGrBUi+4h3wVWredNhfl2lCpMfQfBMcHC5kBVkf2xjJyDa5Y3bP7jPq6YnWYAqEl6pBWYiHU6yWBc6BEdJ6FsTWFbLFTnY7w=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/README.md
new file mode 100644
index 00000000000..8e6392832ba
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/README.md
@@ -0,0 +1,18 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-menu-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-menu-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-menu-behavior)_
+
+
+## Polymer.IronMenuBehavior
+
+`Polymer.IronMenuBehavior` implements accessible menu behavior.
+
+## Polymer.IronMenubarBehavior
+
+`Polymer.IronMenubarBehavior` implements accessible menubar behavior.
+
+### Notable breaking changes between 1.x and 2.x (hybrid):
+
+IronSelectableBehavior and IronMultiSelectableBehavior, which are used by
+IronMenuBehavior and IronMenubarBehavior, introduce multiple breaking changes.
+Please see the README for those behaviors for more detail.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/bower.json
new file mode 100644
index 00000000000..971cdae1427
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/bower.json
@@ -0,0 +1,60 @@
+{
+ "name": "iron-menu-behavior",
+ "version": "2.1.1",
+ "description": "Provides accessible menu behavior",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior",
+ "menu"
+ ],
+ "main": [
+ "iron-menu-behavior.html",
+ "iron-menubar-behavior.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-menu-behavior"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-menu-behavior",
+ "ignore": [],
+ "dependencies": {
+ "iron-selector": "PolymerElements/iron-selector#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-selector": "PolymerElements/iron-selector#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/index.html
new file mode 100644
index 00000000000..7fe7ca4d36b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/index.html
@@ -0,0 +1,128 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>iron-menu-behavior demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="../../paper-styles/default-theme.html">
+ <link rel="import" href="simple-menu.html">
+ <link rel="import" href="simple-menubar.html">
+
+ <custom-style>
+ <style is="custom-style">
+ simple-menu,
+ simple-menubar {
+ display: inline-block;
+ width: 100%;
+ }
+
+ simple-menu a {
+ display: block;
+ }
+
+ simple-menubar a,
+ simple-menu a {
+ padding: 15px 20px;
+ color: var(--primary-text-color);
+ text-decoration: none;
+ }
+ simple-menubar a.iron-selected,
+ simple-menu a.iron-selected {
+ color: white;
+ }
+
+ simple-menu a[disabled],
+ simple-menubar a[disabled] {
+ color: var(--google-grey-300);
+ }
+
+ .horizontal-section {
+ padding: 0;
+ margin-bottom: 20px;
+ }
+
+ .row {
+ height: 120px;
+ }
+
+ [hidden] {
+ display: none;
+ }
+ </style>
+ </custom-style>
+</head>
+<body unresolved>
+
+ <div class="horizontal-section-container">
+ <div>
+ <h3>Simple menu</h3>
+ <div class="horizontal-section">
+ <simple-menu>
+ <a href="javascript:void(0)" role="menuitem">Item 0</a>
+ <a href="javascript:void(0)" role="menuitem">Item 1</a>
+ <a href="javascript:void(0)" role="menuitem" disabled>Item 2</a>
+ <a href="javascript:void(0)" role="menuitem" hidden>Ghost</a>
+ <a href="javascript:void(0)" role="menuitem">Item 3</a>
+ <a href="javascript:void(0)" role="menuitem" style="display:none">Another ghost</a>
+ </simple-menu>
+ </div>
+ </div>
+
+ <div>
+ <h3>Multi-select menu</h3>
+ <div class="horizontal-section">
+ <simple-menu multi>
+ <a href="javascript:void(0)" role="menuitem">Item 0</a>
+ <a href="javascript:void(0)" role="menuitem" disabled>Item 1</a>
+ <a href="javascript:void(0)" role="menuitem" hidden>Ghost</a>
+ <a href="javascript:void(0)" role="menuitem">Item 2</a>
+ <a href="javascript:void(0)" role="menuitem">Item 3</a>
+ <a href="javascript:void(0)" role="menuitem" style="display:none">Another ghost</a>
+ </simple-menu>
+ </div>
+ </div>
+
+ <div>
+ <div class="row">
+ <h3>Simple menubar</h3>
+ <div class="horizontal-section">
+ <simple-menubar>
+ <a href="javascript:void(0)" role="menuitem">Item 0</a>
+ <a href="javascript:void(0)" role="menuitem">Item 1</a>
+ <a href="javascript:void(0)" role="menuitem" disabled>Item 2</a>
+ <a href="javascript:void(0)" role="menuitem">Item 3</a>
+ </simple-menubar>
+ </div>
+ </div>
+ <div class="row">
+ <h3>Multi-select menubar</h3>
+ <div class="horizontal-section">
+ <simple-menubar multi>
+ <a href="javascript:void(0)" role="menuitem">Item 0</a>
+ <a href="javascript:void(0)" role="menuitem">Item 1</a>
+ <a href="javascript:void(0)" role="menuitem">Item 2</a>
+ <a href="javascript:void(0)" role="menuitem">Item 3</a>
+ </simple-menubar>
+ </div>
+ </div>
+ </div>
+
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menu.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menu.html
new file mode 100644
index 00000000000..97e0165dbd6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menu.html
@@ -0,0 +1,45 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-menu-behavior.html">
+<link rel="import" href="../../paper-styles/color.html">
+
+<dom-module id="simple-menu">
+ <template>
+ <style>
+ :host > ::slotted(*) {
+ display: block;
+ }
+
+ :host > ::slotted(.iron-selected) {
+ color: white;
+ background-color: var(--google-blue-500);
+ }
+ </style>
+
+ <slot></slot>
+
+ </template>
+
+</dom-module>
+
+<script>
+ (function() {
+
+ Polymer({
+
+ is: 'simple-menu',
+
+ behaviors: [Polymer.IronMenuBehavior]
+
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menubar.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menubar.html
new file mode 100644
index 00000000000..bfca5a17aa9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/demo/simple-menubar.html
@@ -0,0 +1,45 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-menubar-behavior.html">
+<link rel="import" href="../../paper-styles/color.html">
+
+<dom-module id="simple-menubar">
+ <template>
+ <style>
+ :host > ::slotted(*) {
+ display: inline-block;
+ }
+
+ :host > ::slotted(.iron-selected) {
+ color: white;
+ background-color: var(--google-red-500);
+ }
+ </style>
+
+ <slot></slot>
+
+ </template>
+
+</dom-module>
+
+<script>
+ (function() {
+
+ Polymer({
+
+ is: 'simple-menubar',
+
+ behaviors: [Polymer.IronMenubarBehavior]
+
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/index.html
new file mode 100644
index 00000000000..2c643c4a037
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-menu-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page src="iron-menubar-behavior.html"></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.d.ts
new file mode 100644
index 00000000000..676a9b09d2e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.d.ts
@@ -0,0 +1,169 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-menu-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-selector/iron-multi-selectable.d.ts" />
+/// <reference path="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.IronMenuBehavior` implements accessible menu behavior.
+ */
+ interface IronMenuBehavior extends Polymer.IronMultiSelectableBehavior, Polymer.IronA11yKeysBehavior {
+ keyBindings: object;
+
+ /**
+ * Returns the currently focused item.
+ */
+ readonly focusedItem: object|null;
+
+ /**
+ * The attribute to use on menu items to look up the item title. Typing the
+ * first letter of an item when the menu is open focuses that item. If
+ * unset, `textContent` will be used.
+ */
+ attrForItemTitle: string|null|undefined;
+ disabled: boolean;
+ hostAttributes: object|null;
+ attached(): void;
+
+ /**
+ * Selects the given value. If the `multi` property is true, then the selected
+ * state of the `value` will be toggled; otherwise the `value` will be
+ * selected.
+ *
+ * @param value the value to select.
+ */
+ select(value: string|number): void;
+
+ /**
+ * Mutates items in the menu based on provided selection details, so that
+ * all items correctly reflect selection state.
+ *
+ * @param item An item in the menu.
+ * @param isSelected True if the item should be shown in a
+ * selected state, otherwise false.
+ */
+ _applySelection(item: Element|null, isSelected: boolean): void;
+
+ /**
+ * override _activateHandler
+ */
+ _activateHandler(event: any): void;
+
+ /**
+ * Resets all tabindex attributes to the appropriate value based on the
+ * current selection state. The appropriate value is `0` (focusable) for
+ * the default selected item, and `-1` (not keyboard focusable) for all
+ * other items.
+ */
+ _resetTabindices(): void;
+
+ /**
+ * Sets appropriate ARIA based on whether or not the menu is meant to be
+ * multi-selectable.
+ *
+ * @param multi True if the menu should be multi-selectable.
+ */
+ _updateMultiselectable(multi: boolean): void;
+
+ /**
+ * Given a KeyboardEvent, this method will focus the appropriate item in the
+ * menu (if there is a relevant item, and it is possible to focus it).
+ *
+ * @param event A KeyboardEvent.
+ */
+ _focusWithKeyboardEvent(event: KeyboardEvent|null): void;
+ _clearSearchText(): void;
+
+ /**
+ * Focuses the previous item (relative to the currently focused item) in the
+ * menu, disabled items will be skipped.
+ * Loop until length + 1 to handle case of single item in menu.
+ */
+ _focusPrevious(): void;
+
+ /**
+ * Focuses the next item (relative to the currently focused item) in the
+ * menu, disabled items will be skipped.
+ * Loop until length + 1 to handle case of single item in menu.
+ */
+ _focusNext(): void;
+
+ /**
+ * Discretely updates tabindex values among menu items as the focused item
+ * changes.
+ *
+ * @param focusedItem The element that is currently focused.
+ * @param old The last element that was considered focused, if
+ * applicable.
+ */
+ _focusedItemChanged(focusedItem: Element|null, old: Element|null): void;
+
+ /**
+ * A handler that responds to mutation changes related to the list of items
+ * in the menu.
+ *
+ * @param event An event containing mutation records as its
+ * detail.
+ */
+ _onIronItemsChanged(event: CustomEvent|null): void;
+
+ /**
+ * Handler that is called when a shift+tab keypress is detected by the menu.
+ *
+ * @param event A key combination event.
+ */
+ _onShiftTabDown(event: CustomEvent|null): void;
+
+ /**
+ * Handler that is called when the menu receives focus.
+ *
+ * @param event A focus event.
+ */
+ _onFocus(event: FocusEvent|null): void;
+
+ /**
+ * Handler that is called when the up key is pressed.
+ *
+ * @param event A key combination event.
+ */
+ _onUpKey(event: CustomEvent|null): void;
+
+ /**
+ * Handler that is called when the down key is pressed.
+ *
+ * @param event A key combination event.
+ */
+ _onDownKey(event: CustomEvent|null): void;
+
+ /**
+ * Handler that is called when the esc key is pressed.
+ *
+ * @param event A key combination event.
+ */
+ _onEscKey(event: CustomEvent|null): void;
+
+ /**
+ * Handler that is called when a keydown event is detected.
+ *
+ * @param event A keyboard event.
+ */
+ _onKeydown(event: KeyboardEvent|null): void;
+
+ /**
+ * Updates this element's tab index when it's enabled/disabled.
+ */
+ _disabledChanged(disabled: boolean): void;
+ }
+
+ const IronMenuBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.html
new file mode 100644
index 00000000000..bfa040440db
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menu-behavior.html
@@ -0,0 +1,439 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-selector/iron-multi-selectable.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+
+<script>
+ /**
+ * `Polymer.IronMenuBehavior` implements accessible menu behavior.
+ *
+ * @demo demo/index.html
+ * @polymerBehavior Polymer.IronMenuBehavior
+ */
+ Polymer.IronMenuBehaviorImpl = {
+
+ properties: {
+
+ /**
+ * Returns the currently focused item.
+ * @type {?Object}
+ */
+ focusedItem:
+ {observer: '_focusedItemChanged', readOnly: true, type: Object},
+
+ /**
+ * The attribute to use on menu items to look up the item title. Typing the
+ * first letter of an item when the menu is open focuses that item. If
+ * unset, `textContent` will be used.
+ */
+ attrForItemTitle: {type: String},
+
+ /**
+ * @type {boolean}
+ */
+ disabled: {
+ type: Boolean,
+ value: false,
+ observer: '_disabledChanged',
+ },
+ },
+
+ /**
+ * The list of keys has been taken from
+ * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState
+ * @private
+ */
+ _MODIFIER_KEYS: [
+ 'Alt',
+ 'AltGraph',
+ 'CapsLock',
+ 'Control',
+ 'Fn',
+ 'FnLock',
+ 'Hyper',
+ 'Meta',
+ 'NumLock',
+ 'OS',
+ 'ScrollLock',
+ 'Shift',
+ 'Super',
+ 'Symbol',
+ 'SymbolLock'
+ ],
+
+ /** @private */
+ _SEARCH_RESET_TIMEOUT_MS: 1000,
+
+ /** @private */
+ _previousTabIndex: 0,
+
+ hostAttributes: {
+ 'role': 'menu',
+ },
+
+ observers: ['_updateMultiselectable(multi)'],
+
+ listeners: {
+ 'focus': '_onFocus',
+ 'keydown': '_onKeydown',
+ 'iron-items-changed': '_onIronItemsChanged'
+ },
+
+ /**
+ * @type {!Object}
+ */
+ keyBindings: {
+ 'up': '_onUpKey',
+ 'down': '_onDownKey',
+ 'esc': '_onEscKey',
+ 'shift+tab:keydown': '_onShiftTabDown'
+ },
+
+ attached: function() {
+ this._resetTabindices();
+ },
+
+ /**
+ * Selects the given value. If the `multi` property is true, then the selected
+ * state of the `value` will be toggled; otherwise the `value` will be
+ * selected.
+ *
+ * @param {string|number} value the value to select.
+ */
+ select: function(value) {
+ // Cancel automatically focusing a default item if the menu received focus
+ // through a user action selecting a particular item.
+ if (this._defaultFocusAsync) {
+ this.cancelAsync(this._defaultFocusAsync);
+ this._defaultFocusAsync = null;
+ }
+ var item = this._valueToItem(value);
+ if (item && item.hasAttribute('disabled'))
+ return;
+ this._setFocusedItem(item);
+ Polymer.IronMultiSelectableBehaviorImpl.select.apply(this, arguments);
+ },
+
+ /**
+ * Resets all tabindex attributes to the appropriate value based on the
+ * current selection state. The appropriate value is `0` (focusable) for
+ * the default selected item, and `-1` (not keyboard focusable) for all
+ * other items.
+ */
+ _resetTabindices: function() {
+ var selectedItem = this.multi ?
+ (this.selectedItems && this.selectedItems[0]) :
+ this.selectedItem;
+
+ this.items.forEach(function(item) {
+ item.setAttribute('tabindex', item === selectedItem ? '0' : '-1');
+ }, this);
+ },
+
+ /**
+ * Sets appropriate ARIA based on whether or not the menu is meant to be
+ * multi-selectable.
+ *
+ * @param {boolean} multi True if the menu should be multi-selectable.
+ */
+ _updateMultiselectable: function(multi) {
+ if (multi) {
+ this.setAttribute('aria-multiselectable', 'true');
+ } else {
+ this.removeAttribute('aria-multiselectable');
+ }
+ },
+
+ /**
+ * Given a KeyboardEvent, this method will focus the appropriate item in the
+ * menu (if there is a relevant item, and it is possible to focus it).
+ *
+ * @param {KeyboardEvent} event A KeyboardEvent.
+ */
+ _focusWithKeyboardEvent: function(event) {
+ // Make sure that the key pressed is not a modifier key.
+ // getModifierState is not being used, as it is not available in Safari
+ // earlier than 10.0.2 (https://trac.webkit.org/changeset/206725/webkit)
+ if (this._MODIFIER_KEYS.indexOf(event.key) !== -1)
+ return;
+
+ this.cancelDebouncer('_clearSearchText');
+
+ var searchText = this._searchText || '';
+ var key = event.key && event.key.length == 1 ?
+ event.key :
+ String.fromCharCode(event.keyCode);
+ searchText += key.toLocaleLowerCase();
+
+ var searchLength = searchText.length;
+
+ for (var i = 0, item; item = this.items[i]; i++) {
+ if (item.hasAttribute('disabled')) {
+ continue;
+ }
+
+ var attr = this.attrForItemTitle || 'textContent';
+ var title = (item[attr] || item.getAttribute(attr) || '').trim();
+
+ if (title.length < searchLength) {
+ continue;
+ }
+
+ if (title.slice(0, searchLength).toLocaleLowerCase() == searchText) {
+ this._setFocusedItem(item);
+ break;
+ }
+ }
+
+ this._searchText = searchText;
+ this.debounce(
+ '_clearSearchText',
+ this._clearSearchText,
+ this._SEARCH_RESET_TIMEOUT_MS);
+ },
+
+ _clearSearchText: function() {
+ this._searchText = '';
+ },
+
+ /**
+ * Focuses the previous item (relative to the currently focused item) in the
+ * menu, disabled items will be skipped.
+ * Loop until length + 1 to handle case of single item in menu.
+ */
+ _focusPrevious: function() {
+ var length = this.items.length;
+ var curFocusIndex = Number(this.indexOf(this.focusedItem));
+
+ for (var i = 1; i < length + 1; i++) {
+ var item = this.items[(curFocusIndex - i + length) % length];
+ if (!item.hasAttribute('disabled')) {
+ var owner = Polymer.dom(item).getOwnerRoot() || document;
+ this._setFocusedItem(item);
+
+ // Focus might not have worked, if the element was hidden or not
+ // focusable. In that case, try again.
+ if (Polymer.dom(owner).activeElement == item) {
+ return;
+ }
+ }
+ }
+ },
+
+ /**
+ * Focuses the next item (relative to the currently focused item) in the
+ * menu, disabled items will be skipped.
+ * Loop until length + 1 to handle case of single item in menu.
+ */
+ _focusNext: function() {
+ var length = this.items.length;
+ var curFocusIndex = Number(this.indexOf(this.focusedItem));
+
+ for (var i = 1; i < length + 1; i++) {
+ var item = this.items[(curFocusIndex + i) % length];
+ if (!item.hasAttribute('disabled')) {
+ var owner = Polymer.dom(item).getOwnerRoot() || document;
+ this._setFocusedItem(item);
+
+ // Focus might not have worked, if the element was hidden or not
+ // focusable. In that case, try again.
+ if (Polymer.dom(owner).activeElement == item) {
+ return;
+ }
+ }
+ }
+ },
+
+ /**
+ * Mutates items in the menu based on provided selection details, so that
+ * all items correctly reflect selection state.
+ *
+ * @param {Element} item An item in the menu.
+ * @param {boolean} isSelected True if the item should be shown in a
+ * selected state, otherwise false.
+ */
+ _applySelection: function(item, isSelected) {
+ if (isSelected) {
+ item.setAttribute('aria-selected', 'true');
+ } else {
+ item.removeAttribute('aria-selected');
+ }
+ Polymer.IronSelectableBehavior._applySelection.apply(this, arguments);
+ },
+
+ /**
+ * Discretely updates tabindex values among menu items as the focused item
+ * changes.
+ *
+ * @param {Element} focusedItem The element that is currently focused.
+ * @param {?Element} old The last element that was considered focused, if
+ * applicable.
+ */
+ _focusedItemChanged: function(focusedItem, old) {
+ old && old.setAttribute('tabindex', '-1');
+ if (focusedItem && !focusedItem.hasAttribute('disabled') &&
+ !this.disabled) {
+ focusedItem.setAttribute('tabindex', '0');
+ focusedItem.focus();
+ }
+ },
+
+ /**
+ * A handler that responds to mutation changes related to the list of items
+ * in the menu.
+ *
+ * @param {CustomEvent} event An event containing mutation records as its
+ * detail.
+ */
+ _onIronItemsChanged: function(event) {
+ if (event.detail.addedNodes.length) {
+ this._resetTabindices();
+ }
+ },
+
+ /**
+ * Handler that is called when a shift+tab keypress is detected by the menu.
+ *
+ * @param {CustomEvent} event A key combination event.
+ */
+ _onShiftTabDown: function(event) {
+ var oldTabIndex = this.getAttribute('tabindex');
+
+ Polymer.IronMenuBehaviorImpl._shiftTabPressed = true;
+
+ this._setFocusedItem(null);
+
+ this.setAttribute('tabindex', '-1');
+
+ this.async(function() {
+ this.setAttribute('tabindex', oldTabIndex);
+ Polymer.IronMenuBehaviorImpl._shiftTabPressed = false;
+ // NOTE(cdata): polymer/polymer#1305
+ }, 1);
+ },
+
+ /**
+ * Handler that is called when the menu receives focus.
+ *
+ * @param {FocusEvent} event A focus event.
+ */
+ _onFocus: function(event) {
+ if (Polymer.IronMenuBehaviorImpl._shiftTabPressed) {
+ // do not focus the menu itself
+ return;
+ }
+
+ // Do not focus the selected tab if the deepest target is part of the
+ // menu element's local DOM and is focusable.
+ var rootTarget =
+ /** @type {?HTMLElement} */ (Polymer.dom(event).rootTarget);
+ if (rootTarget !== this && typeof rootTarget.tabIndex !== 'undefined' &&
+ !this.isLightDescendant(rootTarget)) {
+ return;
+ }
+
+ // clear the cached focus item
+ this._defaultFocusAsync = this.async(function() {
+ // focus the selected item when the menu receives focus, or the first item
+ // if no item is selected
+ var selectedItem = this.multi ?
+ (this.selectedItems && this.selectedItems[0]) :
+ this.selectedItem;
+
+ this._setFocusedItem(null);
+
+ if (selectedItem) {
+ this._setFocusedItem(selectedItem);
+ } else if (this.items[0]) {
+ // We find the first none-disabled item (if one exists)
+ this._focusNext();
+ }
+ });
+ },
+
+ /**
+ * Handler that is called when the up key is pressed.
+ *
+ * @param {CustomEvent} event A key combination event.
+ */
+ _onUpKey: function(event) {
+ // up and down arrows moves the focus
+ this._focusPrevious();
+ event.detail.keyboardEvent.preventDefault();
+ },
+
+ /**
+ * Handler that is called when the down key is pressed.
+ *
+ * @param {CustomEvent} event A key combination event.
+ */
+ _onDownKey: function(event) {
+ this._focusNext();
+ event.detail.keyboardEvent.preventDefault();
+ },
+
+ /**
+ * Handler that is called when the esc key is pressed.
+ *
+ * @param {CustomEvent} event A key combination event.
+ */
+ _onEscKey: function(event) {
+ var focusedItem = this.focusedItem;
+ if (focusedItem) {
+ focusedItem.blur();
+ }
+ },
+
+ /**
+ * Handler that is called when a keydown event is detected.
+ *
+ * @param {KeyboardEvent} event A keyboard event.
+ */
+ _onKeydown: function(event) {
+ if (!this.keyboardEventMatchesKeys(event, 'up down esc')) {
+ // all other keys focus the menu item starting with that character
+ this._focusWithKeyboardEvent(event);
+ }
+ event.stopPropagation();
+ },
+
+ // override _activateHandler
+ _activateHandler: function(event) {
+ Polymer.IronSelectableBehavior._activateHandler.call(this, event);
+ event.stopPropagation();
+ },
+
+ /**
+ * Updates this element's tab index when it's enabled/disabled.
+ * @param {boolean} disabled
+ */
+ _disabledChanged: function(disabled) {
+ if (disabled) {
+ this._previousTabIndex =
+ this.hasAttribute('tabindex') ? this.tabIndex : 0;
+ this.removeAttribute(
+ 'tabindex'); // No tabindex means not tab-able or select-able.
+ } else if (!this.hasAttribute('tabindex')) {
+ this.setAttribute('tabindex', this._previousTabIndex);
+ }
+ }
+ };
+
+ Polymer.IronMenuBehaviorImpl._shiftTabPressed = false;
+
+ /** @polymerBehavior Polymer.IronMenuBehavior */
+ Polymer.IronMenuBehavior = [
+ Polymer.IronMultiSelectableBehavior,
+ Polymer.IronA11yKeysBehavior,
+ Polymer.IronMenuBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.d.ts
new file mode 100644
index 00000000000..83d9a097742
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.d.ts
@@ -0,0 +1,31 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-menubar-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="iron-menu-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.IronMenubarBehavior` implements accessible menubar behavior.
+ */
+ interface IronMenubarBehavior extends Polymer.IronMenuBehavior {
+ keyBindings: object;
+ hostAttributes: object|null;
+ readonly _isRTL: any;
+ _onUpKey(event: any): void;
+ _onDownKey(event: any): void;
+ _onKeydown(event: any): void;
+ _onLeftKey(event: any): void;
+ _onRightKey(event: any): void;
+ }
+
+ const IronMenubarBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.html
new file mode 100644
index 00000000000..dd3e799181c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/iron-menubar-behavior.html
@@ -0,0 +1,75 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="iron-menu-behavior.html">
+
+<script>
+ /**
+ * `Polymer.IronMenubarBehavior` implements accessible menubar behavior.
+ *
+ * @polymerBehavior Polymer.IronMenubarBehavior
+ */
+ Polymer.IronMenubarBehaviorImpl = {
+
+ hostAttributes: {'role': 'menubar'},
+
+ /**
+ * @type {!Object}
+ */
+ keyBindings: {'left': '_onLeftKey', 'right': '_onRightKey'},
+
+ _onUpKey: function(event) {
+ this.focusedItem.click();
+ event.detail.keyboardEvent.preventDefault();
+ },
+
+ _onDownKey: function(event) {
+ this.focusedItem.click();
+ event.detail.keyboardEvent.preventDefault();
+ },
+
+ get _isRTL() {
+ return window.getComputedStyle(this)['direction'] === 'rtl';
+ },
+
+ _onLeftKey: function(event) {
+ if (this._isRTL) {
+ this._focusNext();
+ } else {
+ this._focusPrevious();
+ }
+ event.detail.keyboardEvent.preventDefault();
+ },
+
+ _onRightKey: function(event) {
+ if (this._isRTL) {
+ this._focusPrevious();
+ } else {
+ this._focusNext();
+ }
+ event.detail.keyboardEvent.preventDefault();
+ },
+
+ _onKeydown: function(event) {
+ if (this.keyboardEventMatchesKeys(event, 'up down left right esc')) {
+ return;
+ }
+
+ // all other keys focus the menu item starting with that character
+ this._focusWithKeyboardEvent(event);
+ }
+
+ };
+
+ /** @polymerBehavior Polymer.IronMenubarBehavior */
+ Polymer.IronMenubarBehavior =
+ [Polymer.IronMenuBehavior, Polymer.IronMenubarBehaviorImpl];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package-lock.json
new file mode 100644
index 00000000000..791516edbd6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-menu-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.7.tgz",
+ "integrity": "sha512-5QC0YAHH7aXzrrbgQ+faSeBKbJwTaUyYuaywYzDTr1Myz5C0knx5FHOV5QyhBeE1x8n2xfkBUGE/C0X1paLp+Q==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package.json
new file mode 100644
index 00000000000..c04023325f1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-menu-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-menu-behavior",
+ "private": true,
+ "description": "Provides accessible menu behavior",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-menu-behavior"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.bower.json
new file mode 100644
index 00000000000..e5b40aa5172
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.bower.json
@@ -0,0 +1,58 @@
+{
+ "name": "iron-meta",
+ "version": "2.1.1",
+ "keywords": [
+ "web-components",
+ "polymer"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Useful for sharing information across a DOM tree",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-meta.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#^1.0.0",
+ "test-fixture": "polymerelements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "main": "iron-meta.html",
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-meta",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "d9cd307d9faf2acc9e8f79a31d852c7851c35620"
+ },
+ "_source": "https://github.com/PolymerElements/iron-meta.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-meta"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..2e81711396d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-meta/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.travis.yml
new file mode 100644
index 00000000000..3a78c402955
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ mjikUCoN+UpTbFHwbGXUoKp4vtZ2qNN1JYW79WcOik7fCFmvdFzfYQPDa6y9aJvU3kgkDndGdR/ynLG4kejZjmqTS5fYtdHEwpPVPapbVYnquJvCJKbMN4S2QpGCoq51pjKQ8U3Ys6G5HkmdcDfw3SKk1uMgVzKV7fEI+6WnZ/M=
+ - secure: >-
+ LHDnBtwK7yO2X4GNmIaAl7t85WWc1U189OiPqemD27+jTcKml0by1n9Mu/yrg94jYgeXab9mHgU3uMtIdQstNNwTDu8CgmmIP4H2EWopHrTi3KM7Z7aeofPgMJsVFXwg+WhNlcCfhEsygHZWTxjJXM4fcGOrFPDa4+BTgRa2hEE=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/README.md
new file mode 100644
index 00000000000..1eecb040743
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/README.md
@@ -0,0 +1,10 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-meta.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-meta)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/iron-meta)
+
+## &lt;iron-meta&gt;
+
+`iron-meta` is a generic element you can use for sharing information across the DOM tree.
+It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) such that any
+instance of iron-meta has access to the shared
+information. You can use `iron-meta` to share whatever you want (or create an extension
+[like x-meta] for enhancements).
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/bower.json
new file mode 100644
index 00000000000..9a11cc780c0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/bower.json
@@ -0,0 +1,48 @@
+{
+ "name": "iron-meta",
+ "version": "2.1.1",
+ "keywords": [
+ "web-components",
+ "polymer"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Useful for sharing information across a DOM tree",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-meta.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "paper-styles": "polymerelements/paper-styles#^1.0.0",
+ "test-fixture": "polymerelements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "main": "iron-meta.html",
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/demo/index.html
new file mode 100644
index 00000000000..dcd0d43fd66
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/demo/index.html
@@ -0,0 +1,75 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <title>iron-meta</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="../iron-meta.html">
+</head>
+<body>
+
+ <div class="vertical-section centered">
+ <h1>&lt;iron-meta&gt;</h1>
+ <h2>Key Query</h2>
+
+ <iron-meta key="info" value="foo/bar"></iron-meta>
+
+ The <code>value</code> stored at <code>key="info"</code> is <code><meta-test></meta-test></code>.
+ </div>
+
+ <div class="vertical-section centered">
+ <h2>Type Query</h2>
+
+ <iron-meta type="type1" key="a" value="Polymer"></iron-meta>
+ <iron-meta type="type1" key="b" value="is"></iron-meta>
+ <iron-meta type="type2" key="a" value="wonderful"></iron-meta>
+ <iron-meta type="type2" key="b" value="<3"></iron-meta>
+
+ The <code>value(s)</code> stored at <code>type="type1"</code> are:<br><code><type-one></type-one></code>.<br><br>The <code>value(s)</code> stored at <code>type="type2"</code> are:<br><code><type-two></type-two></code>.
+ </div>
+
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ Polymer({
+ is: 'meta-test',
+ ready: function() {
+ this.textContent = new Polymer.IronMeta({key: 'info'}).value;
+ }
+ });
+ });
+
+ Polymer({
+ is: 'type-one',
+
+ ready: function() {
+ var resultList = new Polymer.IronMeta({type: 'type1'}).list;
+ this.textContent = JSON.stringify(resultList);
+ }
+ });
+
+ Polymer({
+ is: 'type-two',
+
+ ready: function() {
+ var resultList = new Polymer.IronMeta({type: 'type2'}).list;
+ this.textContent = JSON.stringify(resultList);
+ }
+ });
+ </script>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/gen-tsd.json
new file mode 100644
index 00000000000..195c463fe8d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/gen-tsd.json
@@ -0,0 +1,7 @@
+{
+ "addReferences": {
+ "iron-meta.d.ts": [
+ "iron-meta-extra.d.ts"
+ ]
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/hero.svg
new file mode 100755
index 00000000000..ea8548dcecb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/hero.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <circle cx="22" cy="85" r="4"/>
+ <circle cx="88" cy="98" r="4"/>
+ <path d="M87.5,100c-3.8-0.3-5.5-2.8-7-5c-1.4-2.1-2.7-3.9-5.5-4.2c-2.8-0.3-4.4,1.3-6.2,3.1c-1.9,1.9-4,4-7.8,3.7
+ c-3.8-0.3-5.5-2.8-7-5c-1.4-2.1-2.7-3.9-5.5-4.2c-2.8-0.3-4.4,1.3-6.2,3.1c-1.9,1.9-4,4-7.8,3.7c-3.8-0.3-5.5-2.8-7-5
+ c-1.4-2.1-2.7-3.9-5.5-4.2l0.2-2c3.8,0.3,5.5,2.8,7,5c1.4,2.1,2.7,3.9,5.5,4.2c2.8,0.3,4.4-1.3,6.2-3.1c1.9-1.9,4-4,7.8-3.7
+ c3.8,0.3,5.5,2.8,7,5c1.4,2.1,2.7,3.9,5.5,4.2c2.8,0.3,4.4-1.3,6.2-3.1c1.9-1.9,4-4,7.8-3.7c3.8,0.3,5.5,2.8,7,5
+ c1.4,2.1,2.7,3.9,5.5,4.2L87.5,100z"/>
+ <circle cx="96" cy="86" r="4"/>
+ <circle cx="162" cy="98" r="4"/>
+ <rect x="95.5" y="91" transform="matrix(0.9839 0.1789 -0.1789 0.9839 18.5382 -21.5923)" width="67.1" height="2"/>
+ <g>
+ <path d="M27,41.5l4.5,13.4l4.9-13.4h5.4v32h-4.4V61l0.4-13.4l-5.4,14.5h-2L25.6,48L26,61v12.5h-4.4v-32H27z"/>
+ <path d="M67.5,58.7H53.4V70h16.4v3.5H49v-32h20.6V45H53.4v10.2h14.2V58.7z"/>
+ <path d="M98.5,45H88.3v28.5h-4.4V45H73.6v-3.5h24.9V45z"/>
+ <path d="M116.2,65.3H105l-2.6,8.2h-4.5l10.9-32h3.8l10.6,32h-4.5L116.2,65.3z M106.2,61.6h8.9l-4.4-14.2L106.2,61.6z"/>
+ </g>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/index.html
new file mode 100644
index 00000000000..dce836232ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>iron-meta</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta-extra.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta-extra.d.ts
new file mode 100644
index 00000000000..278a7c8fb1e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta-extra.d.ts
@@ -0,0 +1,18 @@
+declare namespace Polymer {
+
+ class IronMeta {
+ constructor(options?: {
+ type: string|null|undefined,
+ key: string|null|undefined,
+ value: any,
+ });
+
+ static types: {[type: string]: {[key: string]: any}};
+
+ value: any;
+
+ readonly list: any[]|undefined;
+
+ byKey(key: string): any;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.d.ts
new file mode 100644
index 00000000000..b4bc5bdd969
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.d.ts
@@ -0,0 +1,85 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-meta.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="iron-meta-extra.d.ts" />
+
+/**
+ * `iron-meta` is a generic element you can use for sharing information across the DOM tree.
+ * It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) such that any
+ * instance of iron-meta has access to the shared
+ * information. You can use `iron-meta` to share whatever you want (or create an extension
+ * [like x-meta] for enhancements).
+ *
+ * The `iron-meta` instances containing your actual data can be loaded in an import,
+ * or constructed in any way you see fit. The only requirement is that you create them
+ * before you try to access them.
+ *
+ * Examples:
+ *
+ * If I create an instance like this:
+ *
+ * <iron-meta key="info" value="foo/bar"></iron-meta>
+ *
+ * Note that value="foo/bar" is the metadata I've defined. I could define more
+ * attributes or use child nodes to define additional metadata.
+ *
+ * Now I can access that element (and it's metadata) from any iron-meta instance
+ * via the byKey method, e.g.
+ *
+ * meta.byKey('info');
+ *
+ * Pure imperative form would be like:
+ *
+ * document.createElement('iron-meta').byKey('info');
+ *
+ * Or, in a Polymer element, you can include a meta in your template:
+ *
+ * <iron-meta id="meta"></iron-meta>
+ * ...
+ * this.$.meta.byKey('info');
+ */
+interface IronMetaElement extends Polymer.Element {
+
+ /**
+ * The type of meta-data. All meta-data of the same type is stored
+ * together.
+ */
+ type: string;
+
+ /**
+ * The key used to store `value` under the `type` namespace.
+ */
+ key: string|null;
+
+ /**
+ * The meta-data to store or retrieve.
+ */
+ value: any;
+
+ /**
+ * If true, `value` is set to the iron-meta instance itself.
+ */
+ self: boolean|null|undefined;
+ hostAttributes: object|null;
+ readonly list: any;
+ _selfChanged(self: any): void;
+
+ /**
+ * Retrieves meta data value by key.
+ *
+ * @param key The key of the meta-data to be returned.
+ */
+ byKey(key: string): any;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-meta": IronMetaElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.html
new file mode 100644
index 00000000000..51f2f168932
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/iron-meta.html
@@ -0,0 +1,207 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!--
+`iron-meta` is a generic element you can use for sharing information across the DOM tree.
+It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) such that any
+instance of iron-meta has access to the shared
+information. You can use `iron-meta` to share whatever you want (or create an extension
+[like x-meta] for enhancements).
+
+The `iron-meta` instances containing your actual data can be loaded in an import,
+or constructed in any way you see fit. The only requirement is that you create them
+before you try to access them.
+
+Examples:
+
+If I create an instance like this:
+
+ <iron-meta key="info" value="foo/bar"></iron-meta>
+
+Note that value="foo/bar" is the metadata I've defined. I could define more
+attributes or use child nodes to define additional metadata.
+
+Now I can access that element (and it's metadata) from any iron-meta instance
+via the byKey method, e.g.
+
+ meta.byKey('info');
+
+Pure imperative form would be like:
+
+ document.createElement('iron-meta').byKey('info');
+
+Or, in a Polymer element, you can include a meta in your template:
+
+ <iron-meta id="meta"></iron-meta>
+ ...
+ this.$.meta.byKey('info');
+
+@group Iron Elements
+@demo demo/index.html
+@hero hero.svg
+@element iron-meta
+-->
+
+<script>
+ (function() {
+
+ /**
+ * @constructor
+ * @param {{
+ * type: (string|null|undefined),
+ * key: (string|null|undefined),
+ * value: *,
+ * }=} options
+ */
+ Polymer.IronMeta = function(options) {
+ Polymer.IronMeta[' '](options);
+
+ this.type = (options && options.type) || 'default';
+ this.key = options && options.key;
+ if (options && 'value' in options) {
+ this.value = options.value;
+ }
+ };
+
+ // This function is used to convince Closure not to remove constructor calls
+ // for instances that are not held anywhere. For example, when
+ // `new Polymer.IronMeta({...})` is used only for the side effect of adding
+ // a value.
+ Polymer.IronMeta[' '] = function() {};
+
+ Polymer.IronMeta.types = {};
+
+ Polymer.IronMeta.prototype = {
+ get value() {
+ var type = this.type;
+ var key = this.key;
+
+ if (type && key) {
+ return Polymer.IronMeta.types[type] && Polymer.IronMeta.types[type][key];
+ }
+ },
+
+ set value(value) {
+ var type = this.type;
+ var key = this.key;
+
+ if (type && key) {
+ type = Polymer.IronMeta.types[type] = Polymer.IronMeta.types[type] || {};
+ if (value == null) {
+ delete type[key];
+ } else {
+ type[key] = value;
+ }
+ }
+ },
+
+ get list() {
+ var type = this.type;
+
+ if (type) {
+ var items = Polymer.IronMeta.types[this.type];
+ if (!items) {
+ return [];
+ }
+
+ return Object.keys(items).map(function(key) {
+ return metaDatas[this.type][key];
+ }, this);
+ }
+ },
+
+ byKey: function(key) {
+ this.key = key;
+ return this.value;
+ }
+ };
+
+ var metaDatas = Polymer.IronMeta.types;
+
+ Polymer({
+
+ is: 'iron-meta',
+
+ properties: {
+
+ /**
+ * The type of meta-data. All meta-data of the same type is stored
+ * together.
+ * @type {string}
+ */
+ type: {
+ type: String,
+ value: 'default',
+ },
+
+ /**
+ * The key used to store `value` under the `type` namespace.
+ * @type {?string}
+ */
+ key: {
+ type: String,
+ },
+
+ /**
+ * The meta-data to store or retrieve.
+ * @type {*}
+ */
+ value: {
+ type: String,
+ notify: true,
+ },
+
+ /**
+ * If true, `value` is set to the iron-meta instance itself.
+ */
+ self: {type: Boolean, observer: '_selfChanged'},
+
+ __meta: {type: Boolean, computed: '__computeMeta(type, key, value)'}
+ },
+
+ hostAttributes: {hidden: true},
+
+ __computeMeta: function(type, key, value) {
+ var meta = new Polymer.IronMeta({type: type, key: key});
+
+ if (value !== undefined && value !== meta.value) {
+ meta.value = value;
+ } else if (this.value !== meta.value) {
+ this.value = meta.value;
+ }
+
+ return meta;
+ },
+
+ get list() {
+ return this.__meta && this.__meta.list;
+ },
+
+ _selfChanged: function(self) {
+ if (self) {
+ this.value = this;
+ }
+ },
+
+ /**
+ * Retrieves meta data value by key.
+ *
+ * @method byKey
+ * @param {string} key The key of the meta-data to be returned.
+ * @return {*}
+ */
+ byKey: function(key) {
+ return new Polymer.IronMeta({type: this.type, key: key}).value;
+ }
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package-lock.json
new file mode 100644
index 00000000000..a0eb2a2ed0f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-meta",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.7.tgz",
+ "integrity": "sha512-5QC0YAHH7aXzrrbgQ+faSeBKbJwTaUyYuaywYzDTr1Myz5C0knx5FHOV5QyhBeE1x8n2xfkBUGE/C0X1paLp+Q==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package.json
new file mode 100644
index 00000000000..981c4ba1b04
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-meta/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-meta",
+ "private": true,
+ "description": "Useful for sharing information across a DOM tree",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-meta.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.bower.json
new file mode 100644
index 00000000000..89e3bd01978
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.bower.json
@@ -0,0 +1,70 @@
+{
+ "name": "iron-overlay-behavior",
+ "version": "2.3.4",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Provides a behavior for making an element an overlay",
+ "private": true,
+ "main": "iron-overlay-behavior.html",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior",
+ "overlay"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-overlay-behavior.git"
+ },
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#1 - 2",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-overlay-behavior",
+ "_release": "2.3.4",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.3.4",
+ "commit": "a2158a41a035616764f9ac4780410ba1c22886de"
+ },
+ "_source": "https://github.com/PolymerElements/iron-overlay-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-overlay-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..9925d374459
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-overlay-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.travis.yml
new file mode 100644
index 00000000000..2e6aa26cdcf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Project has not been formatted. Please run "npm run
+ format" or update the formatconfig.json.' && false)
+env:
+ global:
+ - secure: >-
+ ZE4MrCc8vi6hb2WDctjBf9Y7wmYm0tbknPCX0TR+ks0eEXt2ZkWOvMGCw6sKvL1SsrUzhSOQiAc3IFCZBZ6vA1DUCo6S+4O8IvH+VawsK34arI7PIN7UhTDRmudzDwYKJHToRGVFffM1Y5vmNOBNj7hyiQp/UP0hz8vWLpQKyNw=
+ - secure: >-
+ IDwaZdFRon3lTOOZsoGXFUTJayvthgm5JTigYlOtVq6CVlJQBShveehe08fHAhb0XkpFyTFxBsricOUc2DOlyK9ds+DE9rRlIml+BuCrmvfCFvxX4loRg5tibKrRT9mrHNhJRwZiL4WbsGTskMpWGorgkO9qMJSJ9sAabjCJrmM=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/README.md
new file mode 100644
index 00000000000..979118cce65
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/README.md
@@ -0,0 +1,67 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-overlay-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-overlay-behavior)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/iron-overlay-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-overlay-behavior)_
+
+
+## Polymer.IronOverlayBehavior
+
+Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden or shown, and displays
+on top of other content. It includes an optional backdrop, and can be used to implement a variety
+of UI controls including dialogs and drop downs. Multiple overlays may be displayed at once.
+
+See the [demo source code](https://github.com/PolymerElements/iron-overlay-behavior/blob/master/demo/simple-overlay.html)
+for an example.
+
+### Changes in 2.0
+- Focus wrapping is not guaranteed to work for elements with `tabindex > 0`, see more details [here](https://github.com/PolymerElements/iron-overlay-behavior/pull/241).
+Consider overriding [`_focusableNodes`](http://jsbin.com/siwutox/1/edit) or using the [Blocking Elements polyfill](https://github.com/PolymerLabs/blockingElements).
+
+### Closing and canceling
+
+An overlay may be hidden by closing or canceling. The difference between close and cancel is user
+intent. Closing generally implies that the user acknowledged the content on the overlay. By default,
+it will cancel whenever the user taps outside it or presses the escape key. This behavior is
+configurable with the `no-cancel-on-esc-key` and the `no-cancel-on-outside-click` properties.
+`close()` should be called explicitly by the implementer when the user interacts with a control
+in the overlay element. When the dialog is canceled, the overlay fires an 'iron-overlay-canceled'
+event. Call `preventDefault` on this event to prevent the overlay from closing.
+
+### Positioning
+
+By default the element is sized and positioned to fit and centered inside the window. You can
+position and size it manually using CSS. See `Polymer.IronFitBehavior`.
+
+### Backdrop
+
+Set the `with-backdrop` attribute to display a backdrop behind the overlay. The backdrop is
+appended to `<body>` and is of type `<iron-overlay-backdrop>`. See its doc page for styling
+options.
+
+In addition, `with-backdrop` will wrap the focus within the content in the light DOM.
+Override the [`_focusableNodes` getter](#Polymer.IronOverlayBehavior:property-_focusableNodes)
+to achieve a different behavior.
+
+### Limitations
+
+The element is styled to appear on top of other content by setting its `z-index` property. You
+must ensure no element has a stacking context with a higher `z-index` than its parent stacking
+context. You should place this element as a child of `<body>` whenever possible.
+
+## &lt;iron-overlay-backdrop&gt;
+
+`iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It should be a
+singleton.
+
+### Styling
+
+The following custom properties and mixins are available for styling.
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--iron-overlay-backdrop-background-color` | Backdrop background color | #000 |
+| `--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6 |
+| `--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {} |
+| `--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {} |
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/bower.json
new file mode 100644
index 00000000000..26b654fc7da
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/bower.json
@@ -0,0 +1,60 @@
+{
+ "name": "iron-overlay-behavior",
+ "version": "2.3.4",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Provides a behavior for making an element an overlay",
+ "private": true,
+ "main": "iron-overlay-behavior.html",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior",
+ "overlay"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-overlay-behavior.git"
+ },
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#1 - 2",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.0.0",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/index.html
new file mode 100644
index 00000000000..61be62d0f62
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/index.html
@@ -0,0 +1,325 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+
+<head>
+
+ <title>simple-overlay demo</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="simple-overlay.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ demo-snippet {
+ --demo-snippet-code: {
+ max-height: 250px;
+ }
+ }
+ </style>
+ </custom-style>
+
+</head>
+
+<body unresolved class="centered">
+
+ <h3>An element with <code>IronOverlayBehavior</code> can be opened, closed, toggled.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="plain.open()">Plain overlay</button>
+ <simple-overlay id="plain" tabindex=-1>
+ <h2>Hello world!</h2>
+ <p>This can be closed by pressing the ESC key too.</p>
+ <button onclick="plain.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>with-backdrop</code> to add a backdrop to your overlay. Tabbing will be trapped within the overlay.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="backdrop.open()">Overlay with backdrop</button>
+ <simple-overlay id="backdrop" with-backdrop scroll-action="lock">
+ <p>Hello world!</p>
+ <button>Button</button>
+ <button onclick="backdrop.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>restore-focus-on-close</code> to return the focus to the element that opened the overlay when it gets closed.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="returnFocus.open()">Overlay that restores focus</button>
+ <simple-overlay id="returnFocus" restore-focus-on-close>
+ <p>Hello world!</p>
+ <button onclick="returnFocus.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>The child with <code>autofocus</code> gets focused when opening the overlay.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="withAutofocus.open()">Overlay with autofocus child</button>
+ <simple-overlay id="withAutofocus">
+ <p>Hello world!</p>
+ <button autofocus>autofocus</button>
+ <button onclick="withAutofocus.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>Multiple overlays can be opened.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="multiple.open()">Open first overlay</button>
+ <simple-overlay id="multiple" tabindex=-1 with-backdrop>
+ <p>click to open another overlay</p>
+ <button onclick="multiple2.open()">Open second overlay</button>
+ <button onclick="multiple.close()">Close this</button>
+ </simple-overlay>
+ <simple-overlay id="multiple2" tabindex=-1 with-backdrop>
+ <button onclick="multiple3.open()">Open third overlay</button>
+ <button onclick="multiple2.close()">Close</button>
+ </simple-overlay>
+ <simple-overlay id="multiple3" tabindex=-1>
+ <h2>Hello!</h2>
+ <button onclick="multiple3.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>always-on-top</code> to keep the overlay on top of others.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="onTop.open()">Open always-on-top</button>
+ <simple-overlay id="onTop" always-on-top tabindex=-1>
+ <h2>Always on top</h2>
+ <button onclick="backdrop2.open()">Open with backdrop</button>
+ <button onclick="onTop.close()">Close this</button>
+ </simple-overlay>
+ <simple-overlay id="backdrop2" with-backdrop tabindex=-1>
+ <h2>With backdrop</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <button onclick="backdrop2.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>An element with <code>IronOverlayBehavior</code> can be scrollable or contain scrollable content.</h3>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .with-margin {
+ margin: 24px 40px;
+ }
+
+ .scrollable {
+ border: 1px solid lightgray;
+ padding: 24px;
+ @apply --layout-scroll;
+ }
+ </style>
+ </custom-style>
+ <button onclick="scrolling.open()">Scrolling overlay</button>
+
+ <simple-overlay id="scrolling" class="with-margin scrollable" tabindex=-1 scroll-action="lock">
+ <h2>This overlay scrolls internally.</h2>
+ <p>
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
+ aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+ occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p>
+ <button onclick="scrolling.close()">Close</button>
+ </simple-overlay>
+
+ <button onclick="scrolling2.open()">Scrolling content</button>
+
+ <simple-overlay id="scrolling2" class="with-margin" tabindex=-1 scroll-action="lock">
+ <h2>This overlay has a scrolling child.</h2>
+ <p class="scrollable">
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
+ aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+ occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.<br> Lorem
+ ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
+ sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p>
+ <button onclick="scrolling2.close()">Close</button>
+ </simple-overlay>
+
+ <script>
+ // .scrollable is the element that determines the size of the overlay.
+ scrolling2.sizingTarget = scrolling2.querySelector('.scrollable');
+ </script>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>allow-click-through</code> to allow click events to be handled by overlays below the top overlay.</h3>
+ <demo-snippet>
+ <template>
+ <button onclick="plain.open();toast.open()">Overlay that allows click through</button>
+ <simple-overlay id="toast" allow-click-through no-cancel-on-outside-click horizontal-align="left" vertical-align="bottom" no-auto-focus>
+ <span>This overlay allows click-through which can close overlays below it.</span>
+ <button onclick="toast.close()">Close</button>
+ </simple-overlay>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>scroll-action</code> to lock, refit or cancel an overlay on scroll.</h3>
+ <demo-snippet>
+ <template>
+ <span>
+ <button onclick="lockOnScroll.open()">locks scroll</button>
+ <simple-overlay id="lockOnScroll" scroll-action="lock" no-overlap
+ vertical-align="bottom" horizontal-align="left" tabindex=-1>
+ <h2>Prevents scroll outside</h2>
+ <button onclick="lockOnScroll.close()">Close this</button>
+ </simple-overlay>
+ </span>
+ <span>
+ <button onclick="refitOnScroll.open()">refits on scroll</button>
+ <simple-overlay id="refitOnScroll" scroll-action="refit" no-overlap
+ vertical-align="bottom" horizontal-align="left" tabindex=-1>
+ <h2>Refits on scroll</h2>
+ <button onclick="refitOnScroll.close()">Close this</button>
+ </simple-overlay>
+ </span>
+ <span>
+ <button onclick="cancelOnScroll.open()">cancels on scroll</button>
+ <simple-overlay id="cancelOnScroll" scroll-action="cancel" no-overlap
+ vertical-align="bottom" horizontal-align="left" tabindex=-1>
+ <h2>Cancels on scroll</h2>
+ <button onclick="cancelOnScroll.close()">Close this</button>
+ </simple-overlay>
+ </span>
+ </template>
+ </demo-snippet>
+
+</body>
+
+</html> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/simple-overlay.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/simple-overlay.html
new file mode 100644
index 00000000000..b1449f8cdeb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/demo/simple-overlay.html
@@ -0,0 +1,40 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-overlay-behavior.html">
+
+<dom-module id="simple-overlay">
+ <template>
+ <style>
+ :host {
+ background: white;
+ color: black;
+ padding: 24px;
+ box-shadow: rgba(0, 0, 0, 0.24) -2px 5px 12px 0px, rgba(0, 0, 0, 0.12) 0px 0px 12px 0px;
+ }
+ </style>
+ <slot></slot>
+ </template>
+
+</dom-module>
+
+<script>
+ (function() {
+
+ Polymer({
+
+ is: 'simple-overlay',
+
+ behaviors: [Polymer.IronOverlayBehavior]
+
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/index.html
new file mode 100644
index 00000000000..d69e30442ea
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-overlay-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.d.ts
new file mode 100644
index 00000000000..d1a1d411069
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-focusables-helper.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.html
new file mode 100644
index 00000000000..ea4cd060e76
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-focusables-helper.html
@@ -0,0 +1,219 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ var p = Element.prototype;
+ var matches = p.matches || p.matchesSelector || p.mozMatchesSelector ||
+ p.msMatchesSelector || p.oMatchesSelector || p.webkitMatchesSelector;
+
+ Polymer.IronFocusablesHelper = {
+
+ /**
+ * Returns a sorted array of tabbable nodes, including the root node.
+ * It searches the tabbable nodes in the light and shadow dom of the chidren,
+ * sorting the result by tabindex.
+ * @param {!Node} node
+ * @return {!Array<!HTMLElement>}
+ */
+ getTabbableNodes: function(node) {
+ var result = [];
+ // If there is at least one element with tabindex > 0, we need to sort
+ // the final array by tabindex.
+ var needsSortByTabIndex = this._collectTabbableNodes(node, result);
+ if (needsSortByTabIndex) {
+ return this._sortByTabIndex(result);
+ }
+ return result;
+ },
+
+ /**
+ * Returns if a element is focusable.
+ * @param {!HTMLElement} element
+ * @return {boolean}
+ */
+ isFocusable: function(element) {
+ // From http://stackoverflow.com/a/1600194/4228703:
+ // There isn't a definite list, it's up to the browser. The only
+ // standard we have is DOM Level 2 HTML
+ // https://www.w3.org/TR/DOM-Level-2-HTML/html.html, according to which the
+ // only elements that have a focus() method are HTMLInputElement,
+ // HTMLSelectElement, HTMLTextAreaElement and HTMLAnchorElement. This
+ // notably omits HTMLButtonElement and HTMLAreaElement. Referring to these
+ // tests with tabbables in different browsers
+ // http://allyjs.io/data-tables/focusable.html
+
+ // Elements that cannot be focused if they have [disabled] attribute.
+ if (matches.call(element, 'input, select, textarea, button, object')) {
+ return matches.call(element, ':not([disabled])');
+ }
+ // Elements that can be focused even if they have [disabled] attribute.
+ return matches.call(
+ element, 'a[href], area[href], iframe, [tabindex], [contentEditable]');
+ },
+
+ /**
+ * Returns if a element is tabbable. To be tabbable, a element must be
+ * focusable, visible, and with a tabindex !== -1.
+ * @param {!HTMLElement} element
+ * @return {boolean}
+ */
+ isTabbable: function(element) {
+ return this.isFocusable(element) &&
+ matches.call(element, ':not([tabindex="-1"])') &&
+ this._isVisible(element);
+ },
+
+ /**
+ * Returns the normalized element tabindex. If not focusable, returns -1.
+ * It checks for the attribute "tabindex" instead of the element property
+ * `tabIndex` since browsers assign different values to it.
+ * e.g. in Firefox `<div contenteditable>` has `tabIndex = -1`
+ * @param {!HTMLElement} element
+ * @return {!number}
+ * @private
+ */
+ _normalizedTabIndex: function(element) {
+ if (this.isFocusable(element)) {
+ var tabIndex = element.getAttribute('tabindex') || 0;
+ return Number(tabIndex);
+ }
+ return -1;
+ },
+
+ /**
+ * Searches for nodes that are tabbable and adds them to the `result` array.
+ * Returns if the `result` array needs to be sorted by tabindex.
+ * @param {!Node} node The starting point for the search; added to `result`
+ * if tabbable.
+ * @param {!Array<!HTMLElement>} result
+ * @return {boolean}
+ * @private
+ */
+ _collectTabbableNodes: function(node, result) {
+ // If not an element or not visible, no need to explore children.
+ if (node.nodeType !== Node.ELEMENT_NODE || !this._isVisible(node)) {
+ return false;
+ }
+ var element = /** @type {!HTMLElement} */ (node);
+ var tabIndex = this._normalizedTabIndex(element);
+ var needsSort = tabIndex > 0;
+ if (tabIndex >= 0) {
+ result.push(element);
+ }
+
+ // In ShadowDOM v1, tab order is affected by the order of distrubution.
+ // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B];
+ // in ShadowDOM v0 tab order is not affected by the distrubution order,
+ // in fact getTabbableNodes(#root) returns [#B, #A].
+ // <div id="root">
+ // <!-- shadow -->
+ // <slot name="a">
+ // <slot name="b">
+ // <!-- /shadow -->
+ // <input id="A" slot="a">
+ // <input id="B" slot="b" tabindex="1">
+ // </div>
+ // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0.
+ var children;
+ if (element.localName === 'content' || element.localName === 'slot') {
+ children = Polymer.dom(element).getDistributedNodes();
+ } else {
+ // Use shadow root if possible, will check for distributed nodes.
+ children = Polymer.dom(element.root || element).children;
+ }
+ for (var i = 0; i < children.length; i++) {
+ // Ensure method is always invoked to collect tabbable children.
+ needsSort = this._collectTabbableNodes(children[i], result) || needsSort;
+ }
+ return needsSort;
+ },
+
+ /**
+ * Returns false if the element has `visibility: hidden` or `display: none`
+ * @param {!HTMLElement} element
+ * @return {boolean}
+ * @private
+ */
+ _isVisible: function(element) {
+ // Check inline style first to save a re-flow. If looks good, check also
+ // computed style.
+ var style = element.style;
+ if (style.visibility !== 'hidden' && style.display !== 'none') {
+ style = window.getComputedStyle(element);
+ return (style.visibility !== 'hidden' && style.display !== 'none');
+ }
+ return false;
+ },
+
+ /**
+ * Sorts an array of tabbable elements by tabindex. Returns a new array.
+ * @param {!Array<!HTMLElement>} tabbables
+ * @return {!Array<!HTMLElement>}
+ * @private
+ */
+ _sortByTabIndex: function(tabbables) {
+ // Implement a merge sort as Array.prototype.sort does a non-stable sort
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
+ var len = tabbables.length;
+ if (len < 2) {
+ return tabbables;
+ }
+ var pivot = Math.ceil(len / 2);
+ var left = this._sortByTabIndex(tabbables.slice(0, pivot));
+ var right = this._sortByTabIndex(tabbables.slice(pivot));
+ return this._mergeSortByTabIndex(left, right);
+ },
+
+ /**
+ * Merge sort iterator, merges the two arrays into one, sorted by tab index.
+ * @param {!Array<!HTMLElement>} left
+ * @param {!Array<!HTMLElement>} right
+ * @return {!Array<!HTMLElement>}
+ * @private
+ */
+ _mergeSortByTabIndex: function(left, right) {
+ var result = [];
+ while ((left.length > 0) && (right.length > 0)) {
+ if (this._hasLowerTabOrder(left[0], right[0])) {
+ result.push(right.shift());
+ } else {
+ result.push(left.shift());
+ }
+ }
+
+ return result.concat(left, right);
+ },
+
+ /**
+ * Returns if element `a` has lower tab order compared to element `b`
+ * (both elements are assumed to be focusable and tabbable).
+ * Elements with tabindex = 0 have lower tab order compared to elements
+ * with tabindex > 0.
+ * If both have same tabindex, it returns false.
+ * @param {!HTMLElement} a
+ * @param {!HTMLElement} b
+ * @return {boolean}
+ * @private
+ */
+ _hasLowerTabOrder: function(a, b) {
+ // Normalize tabIndexes
+ // e.g. in Firefox `<div contenteditable>` has `tabIndex = -1`
+ var ati = Math.max(a.tabIndex, 0);
+ var bti = Math.max(b.tabIndex, 0);
+ return (ati === 0 || bti === 0) ? bti > ati : ati > bti;
+ }
+ };
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.d.ts
new file mode 100644
index 00000000000..4a3dc89511d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.d.ts
@@ -0,0 +1,61 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-overlay-backdrop.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+/**
+ * `iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It should be a
+ * singleton.
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling.
+ *
+ * Custom property | Description | Default
+ * -------------------------------------------|------------------------|---------
+ * `--iron-overlay-backdrop-background-color` | Backdrop background color | #000
+ * `--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6
+ * `--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {}
+ * `--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {}
+ */
+interface IronOverlayBackdropElement extends Polymer.Element {
+
+ /**
+ * Returns true if the backdrop is opened.
+ */
+ opened: boolean|null|undefined;
+ created(): void;
+ attached(): void;
+
+ /**
+ * Appends the backdrop to document body if needed.
+ */
+ prepare(): void;
+
+ /**
+ * Shows the backdrop.
+ */
+ open(): void;
+
+ /**
+ * Hides the backdrop.
+ */
+ close(): void;
+
+ /**
+ * Removes the backdrop from document body if needed.
+ */
+ complete(): void;
+ _onTransitionend(event: any): void;
+}
+
+interface HTMLElementTagNameMap {
+ "iron-overlay-backdrop": IronOverlayBackdropElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.html
new file mode 100644
index 00000000000..b3a7a9ff984
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-backdrop.html
@@ -0,0 +1,160 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<!--
+`iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It should be a
+singleton.
+
+### Styling
+
+The following custom properties and mixins are available for styling.
+
+Custom property | Description | Default
+-------------------------------------------|------------------------|---------
+`--iron-overlay-backdrop-background-color` | Backdrop background color | #000
+`--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6
+`--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {}
+`--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {}
+-->
+
+<dom-module id="iron-overlay-backdrop">
+
+ <template>
+ <style>
+ :host {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: var(--iron-overlay-backdrop-background-color, #000);
+ opacity: 0;
+ transition: opacity 0.2s;
+ pointer-events: none;
+ @apply --iron-overlay-backdrop;
+ }
+
+ :host(.opened) {
+ opacity: var(--iron-overlay-backdrop-opacity, 0.6);
+ pointer-events: auto;
+ @apply --iron-overlay-backdrop-opened;
+ }
+ </style>
+
+ <slot></slot>
+ </template>
+
+</dom-module>
+
+<script>
+ Polymer({
+
+ is: 'iron-overlay-backdrop',
+
+ properties: {
+
+ /**
+ * Returns true if the backdrop is opened.
+ */
+ opened: {
+ reflectToAttribute: true,
+ type: Boolean,
+ value: false,
+ observer: '_openedChanged'
+ }
+
+ },
+
+ listeners: {'transitionend': '_onTransitionend'},
+
+ created: function() {
+ // Used to cancel previous requestAnimationFrame calls when opened changes.
+ this.__openedRaf = null;
+ },
+
+ attached: function() {
+ this.opened && this._openedChanged(this.opened);
+ },
+
+ /**
+ * Appends the backdrop to document body if needed.
+ */
+ prepare: function() {
+ if (this.opened && !this.parentNode) {
+ Polymer.dom(document.body).appendChild(this);
+ }
+ },
+
+ /**
+ * Shows the backdrop.
+ */
+ open: function() {
+ this.opened = true;
+ },
+
+ /**
+ * Hides the backdrop.
+ */
+ close: function() {
+ this.opened = false;
+ },
+
+ /**
+ * Removes the backdrop from document body if needed.
+ */
+ complete: function() {
+ if (!this.opened && this.parentNode === document.body) {
+ Polymer.dom(this.parentNode).removeChild(this);
+ }
+ },
+
+ _onTransitionend: function(event) {
+ if (event && event.target === this) {
+ this.complete();
+ }
+ },
+
+ /**
+ * @param {boolean} opened
+ * @private
+ */
+ _openedChanged: function(opened) {
+ if (opened) {
+ // Auto-attach.
+ this.prepare();
+ } else {
+ // Animation might be disabled via the mixin or opacity custom property.
+ // If it is disabled in other ways, it's up to the user to call complete.
+ var cs = window.getComputedStyle(this);
+ if (cs.transitionDuration === '0s' || cs.opacity == 0) {
+ this.complete();
+ }
+ }
+
+ if (!this.isAttached) {
+ return;
+ }
+
+ // Always cancel previous requestAnimationFrame.
+ if (this.__openedRaf) {
+ window.cancelAnimationFrame(this.__openedRaf);
+ this.__openedRaf = null;
+ }
+ // Force relayout to ensure proper transitions.
+ this.scrollTop = this.scrollTop;
+ this.__openedRaf = window.requestAnimationFrame(function() {
+ this.__openedRaf = null;
+ this.toggleClass('opened', this.opened);
+ }.bind(this));
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.d.ts
new file mode 100644
index 00000000000..6cd0bc818c9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.d.ts
@@ -0,0 +1,276 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-overlay-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-fit-behavior/iron-fit-behavior.d.ts" />
+/// <reference path="../iron-resizable-behavior/iron-resizable-behavior.d.ts" />
+/// <reference path="iron-overlay-manager.d.ts" />
+/// <reference path="iron-scroll-manager.d.ts" />
+/// <reference path="iron-focusables-helper.d.ts" />
+
+declare namespace Polymer {
+
+ interface IronOverlayBehaviorImpl {
+
+ /**
+ * True if the overlay is currently displayed.
+ */
+ opened: boolean|null|undefined;
+
+ /**
+ * True if the overlay was canceled when it was last closed.
+ */
+ readonly canceled: boolean|null|undefined;
+
+ /**
+ * Set to true to display a backdrop behind the overlay. It traps the focus
+ * within the light DOM of the overlay.
+ */
+ withBackdrop: boolean|null|undefined;
+
+ /**
+ * Set to true to disable auto-focusing the overlay or child nodes with
+ * the `autofocus` attribute` when the overlay is opened.
+ */
+ noAutoFocus: boolean|null|undefined;
+
+ /**
+ * Set to true to disable canceling the overlay with the ESC key.
+ */
+ noCancelOnEscKey: boolean|null|undefined;
+
+ /**
+ * Set to true to disable canceling the overlay by clicking outside it.
+ */
+ noCancelOnOutsideClick: boolean|null|undefined;
+
+ /**
+ * Contains the reason(s) this overlay was last closed (see
+ * `iron-overlay-closed`). `IronOverlayBehavior` provides the `canceled`
+ * reason; implementers of the behavior can provide other reasons in
+ * addition to `canceled`.
+ */
+ closingReason: object|null|undefined;
+
+ /**
+ * Set to true to enable restoring of focus when overlay is closed.
+ */
+ restoreFocusOnClose: boolean|null|undefined;
+
+ /**
+ * Set to true to allow clicks to go through overlays.
+ * When the user clicks outside this overlay, the click may
+ * close the overlay below.
+ */
+ allowClickThrough: boolean|null|undefined;
+
+ /**
+ * Set to true to keep overlay always on top.
+ */
+ alwaysOnTop: boolean|null|undefined;
+
+ /**
+ * Determines which action to perform when scroll outside an opened overlay
+ * happens. Possible values: lock - blocks scrolling from happening, refit -
+ * computes the new position on the overlay cancel - causes the overlay to
+ * close
+ */
+ scrollAction: string|null|undefined;
+
+ /**
+ * The node being focused.
+ */
+ _focusedChild: Node|null;
+
+ /**
+ * The backdrop element.
+ */
+ readonly backdropElement: Element;
+
+ /**
+ * Returns the node to give focus to.
+ */
+ readonly _focusNode: Node;
+
+ /**
+ * Array of nodes that can receive focus (overlay included), ordered by
+ * `tabindex`. This is used to retrieve which is the first and last focusable
+ * nodes in order to wrap the focus for overlays `with-backdrop`.
+ *
+ * If you know what is your content (specifically the first and last focusable
+ * children), you can override this method to return only `[firstFocusable,
+ * lastFocusable];`
+ */
+ readonly _focusableNodes: Node[];
+ ready(): void;
+ attached(): void;
+ detached(): void;
+
+ /**
+ * Toggle the opened state of the overlay.
+ */
+ toggle(): void;
+
+ /**
+ * Open the overlay.
+ */
+ open(): void;
+
+ /**
+ * Close the overlay.
+ */
+ close(): void;
+
+ /**
+ * Cancels the overlay.
+ *
+ * @param event The original event
+ */
+ cancel(event?: Event|null): void;
+
+ /**
+ * Invalidates the cached tabbable nodes. To be called when any of the
+ * focusable content changes (e.g. a button is disabled).
+ */
+ invalidateTabbables(): void;
+ _ensureSetup(): void;
+
+ /**
+ * Called when `opened` changes.
+ */
+ _openedChanged(opened?: boolean): void;
+ _canceledChanged(): void;
+ _withBackdropChanged(): void;
+
+ /**
+ * tasks which must occur before opening; e.g. making the element visible.
+ */
+ _prepareRenderOpened(): void;
+
+ /**
+ * Tasks which cause the overlay to actually open; typically play an
+ * animation.
+ */
+ _renderOpened(): void;
+
+ /**
+ * Tasks which cause the overlay to actually close; typically play an
+ * animation.
+ */
+ _renderClosed(): void;
+
+ /**
+ * Tasks to be performed at the end of open action. Will fire
+ * `iron-overlay-opened`.
+ */
+ _finishRenderOpened(): void;
+
+ /**
+ * Tasks to be performed at the end of close action. Will fire
+ * `iron-overlay-closed`.
+ */
+ _finishRenderClosed(): void;
+ _preparePositioning(): void;
+ _finishPositioning(): void;
+
+ /**
+ * Applies focus according to the opened state.
+ */
+ _applyFocus(): void;
+
+ /**
+ * Cancels (closes) the overlay. Call when click happens outside the overlay.
+ */
+ _onCaptureClick(event: Event): void;
+
+ /**
+ * Keeps track of the focused child. If withBackdrop, traps focus within
+ * overlay.
+ */
+ _onCaptureFocus(event: Event): void;
+
+ /**
+ * Handles the ESC key event and cancels (closes) the overlay.
+ */
+ _onCaptureEsc(event: Event): void;
+
+ /**
+ * Handles TAB key events to track focus changes.
+ * Will wrap focus for overlays withBackdrop.
+ */
+ _onCaptureTab(event: Event): void;
+
+ /**
+ * Refits if the overlay is opened and not animating.
+ */
+ _onIronResize(): void;
+
+ /**
+ * Will call notifyResize if overlay is opened.
+ * Can be overridden in order to avoid multiple observers on the same node.
+ */
+ _onNodesChange(): void;
+ }
+
+ const IronOverlayBehaviorImpl: object;
+
+ /**
+ * Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden or
+ * shown, and displays on top of other content. It includes an optional backdrop,
+ * and can be used to implement a variety of UI controls including dialogs and drop
+ * downs. Multiple overlays may be displayed at once.
+ *
+ * See the [demo source
+ * code](https://github.com/PolymerElements/iron-overlay-behavior/blob/master/demo/simple-overlay.html)
+ * for an example.
+ *
+ * ### Closing and canceling
+ *
+ * An overlay may be hidden by closing or canceling. The difference between close
+ * and cancel is user intent. Closing generally implies that the user acknowledged
+ * the content on the overlay. By default, it will cancel whenever the user taps
+ * outside it or presses the escape key. This behavior is configurable with the
+ * `no-cancel-on-esc-key` and the `no-cancel-on-outside-click` properties.
+ * `close()` should be called explicitly by the implementer when the user interacts
+ * with a control in the overlay element. When the dialog is canceled, the overlay
+ * fires an 'iron-overlay-canceled' event. Call `preventDefault` on this event to
+ * prevent the overlay from closing.
+ *
+ * ### Positioning
+ *
+ * By default the element is sized and positioned to fit and centered inside the
+ * window. You can position and size it manually using CSS. See
+ * `Polymer.IronFitBehavior`.
+ *
+ * ### Backdrop
+ *
+ * Set the `with-backdrop` attribute to display a backdrop behind the overlay. The
+ * backdrop is appended to `<body>` and is of type `<iron-overlay-backdrop>`. See
+ * its doc page for styling options.
+ *
+ * In addition, `with-backdrop` will wrap the focus within the content in the light
+ * DOM. Override the [`_focusableNodes`
+ * getter](#Polymer.IronOverlayBehavior:property-_focusableNodes) to achieve a
+ * different behavior.
+ *
+ * ### Limitations
+ *
+ * The element is styled to appear on top of other content by setting its `z-index`
+ * property. You must ensure no element has a stacking context with a higher
+ * `z-index` than its parent stacking context. You should place this element as a
+ * child of `<body>` whenever possible.
+ *
+ *
+ */
+ interface IronOverlayBehavior extends Polymer.IronFitBehavior, Polymer.IronResizableBehavior, Polymer.IronOverlayBehaviorImpl {
+ }
+
+ const IronOverlayBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.html
new file mode 100644
index 00000000000..8dacd2b1a6f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-behavior.html
@@ -0,0 +1,806 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-fit-behavior/iron-fit-behavior.html">
+<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
+<link rel="import" href="iron-overlay-manager.html">
+<link rel="import" href="iron-scroll-manager.html">
+<link rel="import" href="iron-focusables-helper.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ /** @polymerBehavior */
+ Polymer.IronOverlayBehaviorImpl = {
+
+ properties: {
+
+ /**
+ * True if the overlay is currently displayed.
+ */
+ opened:
+ {observer: '_openedChanged', type: Boolean, value: false, notify: true},
+
+ /**
+ * True if the overlay was canceled when it was last closed.
+ */
+ canceled: {
+ observer: '_canceledChanged',
+ readOnly: true,
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Set to true to display a backdrop behind the overlay. It traps the focus
+ * within the light DOM of the overlay.
+ */
+ withBackdrop: {observer: '_withBackdropChanged', type: Boolean},
+
+ /**
+ * Set to true to disable auto-focusing the overlay or child nodes with
+ * the `autofocus` attribute` when the overlay is opened.
+ */
+ noAutoFocus: {type: Boolean, value: false},
+
+ /**
+ * Set to true to disable canceling the overlay with the ESC key.
+ */
+ noCancelOnEscKey: {type: Boolean, value: false},
+
+ /**
+ * Set to true to disable canceling the overlay by clicking outside it.
+ */
+ noCancelOnOutsideClick: {type: Boolean, value: false},
+
+ /**
+ * Contains the reason(s) this overlay was last closed (see
+ * `iron-overlay-closed`). `IronOverlayBehavior` provides the `canceled`
+ * reason; implementers of the behavior can provide other reasons in
+ * addition to `canceled`.
+ */
+ closingReason: {
+ // was a getter before, but needs to be a property so other
+ // behaviors can override this.
+ type: Object
+ },
+
+ /**
+ * Set to true to enable restoring of focus when overlay is closed.
+ */
+ restoreFocusOnClose: {type: Boolean, value: false},
+
+ /**
+ * Set to true to allow clicks to go through overlays.
+ * When the user clicks outside this overlay, the click may
+ * close the overlay below.
+ */
+ allowClickThrough: {type: Boolean},
+
+ /**
+ * Set to true to keep overlay always on top.
+ */
+ alwaysOnTop: {type: Boolean},
+
+ /**
+ * Determines which action to perform when scroll outside an opened overlay
+ * happens. Possible values: lock - blocks scrolling from happening, refit -
+ * computes the new position on the overlay cancel - causes the overlay to
+ * close
+ */
+ scrollAction: {type: String},
+
+ /**
+ * Shortcut to access to the overlay manager.
+ * @private
+ * @type {!Polymer.IronOverlayManagerClass}
+ */
+ _manager: {type: Object, value: Polymer.IronOverlayManager},
+
+ /**
+ * The node being focused.
+ * @type {?Node}
+ */
+ _focusedChild: {type: Object}
+
+ },
+
+ listeners: {'iron-resize': '_onIronResize'},
+
+ observers: ['__updateScrollObservers(isAttached, opened, scrollAction)'],
+
+ /**
+ * The backdrop element.
+ * @return {!Element}
+ */
+ get backdropElement() {
+ return this._manager.backdropElement;
+ },
+
+ /**
+ * Returns the node to give focus to.
+ * @return {!Node}
+ */
+ get _focusNode() {
+ return this._focusedChild ||
+ Polymer.dom(this).querySelector('[autofocus]') || this;
+ },
+
+ /**
+ * Array of nodes that can receive focus (overlay included), ordered by
+ * `tabindex`. This is used to retrieve which is the first and last focusable
+ * nodes in order to wrap the focus for overlays `with-backdrop`.
+ *
+ * If you know what is your content (specifically the first and last focusable
+ * children), you can override this method to return only `[firstFocusable,
+ * lastFocusable];`
+ * @return {!Array<!Node>}
+ * @protected
+ */
+ get _focusableNodes() {
+ return Polymer.IronFocusablesHelper.getTabbableNodes(this);
+ },
+
+ /**
+ * @return {void}
+ */
+ ready: function() {
+ // Used to skip calls to notifyResize and refit while the overlay is
+ // animating.
+ this.__isAnimating = false;
+ // with-backdrop needs tabindex to be set in order to trap the focus.
+ // If it is not set, IronOverlayBehavior will set it, and remove it if
+ // with-backdrop = false.
+ this.__shouldRemoveTabIndex = false;
+ // Used for wrapping the focus on TAB / Shift+TAB.
+ this.__firstFocusableNode = this.__lastFocusableNode = null;
+ // Used by to keep track of the RAF callbacks.
+ this.__rafs = {};
+ // Focused node before overlay gets opened. Can be restored on close.
+ this.__restoreFocusNode = null;
+ // Scroll info to be restored.
+ this.__scrollTop = this.__scrollLeft = null;
+ this.__onCaptureScroll = this.__onCaptureScroll.bind(this);
+ // Root nodes hosting the overlay, used to listen for scroll events on them.
+ this.__rootNodes = null;
+ this._ensureSetup();
+ },
+
+ attached: function() {
+ // Call _openedChanged here so that position can be computed correctly.
+ if (this.opened) {
+ this._openedChanged(this.opened);
+ }
+ this._observer = Polymer.dom(this).observeNodes(this._onNodesChange);
+ },
+
+ detached: function() {
+ Polymer.dom(this).unobserveNodes(this._observer);
+ this._observer = null;
+ for (var cb in this.__rafs) {
+ if (this.__rafs[cb] !== null) {
+ cancelAnimationFrame(this.__rafs[cb]);
+ }
+ }
+ this.__rafs = {};
+ this._manager.removeOverlay(this);
+
+ // We got detached while animating, ensure we show/hide the overlay
+ // and fire iron-overlay-opened/closed event!
+ if (this.__isAnimating) {
+ if (this.opened) {
+ this._finishRenderOpened();
+ } else {
+ // Restore the focus if necessary.
+ this._applyFocus();
+ this._finishRenderClosed();
+ }
+ }
+ },
+
+ /**
+ * Toggle the opened state of the overlay.
+ */
+ toggle: function() {
+ this._setCanceled(false);
+ this.opened = !this.opened;
+ },
+
+ /**
+ * Open the overlay.
+ */
+ open: function() {
+ this._setCanceled(false);
+ this.opened = true;
+ },
+
+ /**
+ * Close the overlay.
+ */
+ close: function() {
+ this._setCanceled(false);
+ this.opened = false;
+ },
+
+ /**
+ * Cancels the overlay.
+ * @param {Event=} event The original event
+ */
+ cancel: function(event) {
+ var cancelEvent =
+ this.fire('iron-overlay-canceled', event, {cancelable: true});
+ if (cancelEvent.defaultPrevented) {
+ return;
+ }
+
+ this._setCanceled(true);
+ this.opened = false;
+ },
+
+ /**
+ * Invalidates the cached tabbable nodes. To be called when any of the
+ * focusable content changes (e.g. a button is disabled).
+ */
+ invalidateTabbables: function() {
+ this.__firstFocusableNode = this.__lastFocusableNode = null;
+ },
+
+ _ensureSetup: function() {
+ if (this._overlaySetup) {
+ return;
+ }
+ this._overlaySetup = true;
+ this.style.outline = 'none';
+ this.style.display = 'none';
+ },
+
+ /**
+ * Called when `opened` changes.
+ * @param {boolean=} opened
+ * @protected
+ */
+ _openedChanged: function(opened) {
+ if (opened) {
+ this.removeAttribute('aria-hidden');
+ } else {
+ this.setAttribute('aria-hidden', 'true');
+ }
+
+ // Defer any animation-related code on attached
+ // (_openedChanged gets called again on attached).
+ if (!this.isAttached) {
+ return;
+ }
+
+ this.__isAnimating = true;
+
+ // Deraf for non-blocking rendering.
+ this.__deraf('__openedChanged', this.__openedChanged);
+ },
+
+ _canceledChanged: function() {
+ this.closingReason = this.closingReason || {};
+ this.closingReason.canceled = this.canceled;
+ },
+
+ _withBackdropChanged: function() {
+ // If tabindex is already set, no need to override it.
+ if (this.withBackdrop && !this.hasAttribute('tabindex')) {
+ this.setAttribute('tabindex', '-1');
+ this.__shouldRemoveTabIndex = true;
+ } else if (this.__shouldRemoveTabIndex) {
+ this.removeAttribute('tabindex');
+ this.__shouldRemoveTabIndex = false;
+ }
+ if (this.opened && this.isAttached) {
+ this._manager.trackBackdrop();
+ }
+ },
+
+ /**
+ * tasks which must occur before opening; e.g. making the element visible.
+ * @protected
+ */
+ _prepareRenderOpened: function() {
+ // Store focused node.
+ this.__restoreFocusNode = this._manager.deepActiveElement;
+
+ // Needed to calculate the size of the overlay so that transitions on its
+ // size will have the correct starting points.
+ this._preparePositioning();
+ this.refit();
+ this._finishPositioning();
+
+ // Safari will apply the focus to the autofocus element when displayed
+ // for the first time, so we make sure to return the focus where it was.
+ if (this.noAutoFocus && document.activeElement === this._focusNode) {
+ this._focusNode.blur();
+ this.__restoreFocusNode.focus();
+ }
+ },
+
+ /**
+ * Tasks which cause the overlay to actually open; typically play an
+ * animation.
+ * @protected
+ */
+ _renderOpened: function() {
+ this._finishRenderOpened();
+ },
+
+ /**
+ * Tasks which cause the overlay to actually close; typically play an
+ * animation.
+ * @protected
+ */
+ _renderClosed: function() {
+ this._finishRenderClosed();
+ },
+
+ /**
+ * Tasks to be performed at the end of open action. Will fire
+ * `iron-overlay-opened`.
+ * @protected
+ */
+ _finishRenderOpened: function() {
+ this.notifyResize();
+ this.__isAnimating = false;
+
+ this.fire('iron-overlay-opened');
+ },
+
+ /**
+ * Tasks to be performed at the end of close action. Will fire
+ * `iron-overlay-closed`.
+ * @protected
+ */
+ _finishRenderClosed: function() {
+ // Hide the overlay.
+ this.style.display = 'none';
+ // Reset z-index only at the end of the animation.
+ this.style.zIndex = '';
+ this.notifyResize();
+ this.__isAnimating = false;
+ this.fire('iron-overlay-closed', this.closingReason);
+ },
+
+ _preparePositioning: function() {
+ this.style.transition = this.style.webkitTransition = 'none';
+ this.style.transform = this.style.webkitTransform = 'none';
+ this.style.display = '';
+ },
+
+ _finishPositioning: function() {
+ // First, make it invisible & reactivate animations.
+ this.style.display = 'none';
+ // Force reflow before re-enabling animations so that they don't start.
+ // Set scrollTop to itself so that Closure Compiler doesn't remove this.
+ this.scrollTop = this.scrollTop;
+ this.style.transition = this.style.webkitTransition = '';
+ this.style.transform = this.style.webkitTransform = '';
+ // Now that animations are enabled, make it visible again
+ this.style.display = '';
+ // Force reflow, so that following animations are properly started.
+ // Set scrollTop to itself so that Closure Compiler doesn't remove this.
+ this.scrollTop = this.scrollTop;
+ },
+
+ /**
+ * Applies focus according to the opened state.
+ * @protected
+ */
+ _applyFocus: function() {
+ if (this.opened) {
+ if (!this.noAutoFocus) {
+ this._focusNode.focus();
+ }
+ } else {
+ // Restore focus.
+ if (this.restoreFocusOnClose && this.__restoreFocusNode) {
+ // If the activeElement is `<body>` or inside the overlay,
+ // we are allowed to restore the focus. In all the other
+ // cases focus might have been moved elsewhere by another
+ // component or by an user interaction (e.g. click on a
+ // button outside the overlay).
+ var activeElement = this._manager.deepActiveElement;
+ if (activeElement === document.body ||
+ Polymer.dom(this).deepContains(activeElement)) {
+ this.__restoreFocusNode.focus();
+ }
+ }
+ this.__restoreFocusNode = null;
+ this._focusNode.blur();
+ this._focusedChild = null;
+ }
+ },
+
+ /**
+ * Cancels (closes) the overlay. Call when click happens outside the overlay.
+ * @param {!Event} event
+ * @protected
+ */
+ _onCaptureClick: function(event) {
+ if (!this.noCancelOnOutsideClick) {
+ this.cancel(event);
+ }
+ },
+
+ /**
+ * Keeps track of the focused child. If withBackdrop, traps focus within
+ * overlay.
+ * @param {!Event} event
+ * @protected
+ */
+ _onCaptureFocus: function(event) {
+ if (!this.withBackdrop) {
+ return;
+ }
+ var path = Polymer.dom(event).path;
+ if (path.indexOf(this) === -1) {
+ event.stopPropagation();
+ this._applyFocus();
+ } else {
+ this._focusedChild = path[0];
+ }
+ },
+
+ /**
+ * Handles the ESC key event and cancels (closes) the overlay.
+ * @param {!Event} event
+ * @protected
+ */
+ _onCaptureEsc: function(event) {
+ if (!this.noCancelOnEscKey) {
+ this.cancel(event);
+ }
+ },
+
+ /**
+ * Handles TAB key events to track focus changes.
+ * Will wrap focus for overlays withBackdrop.
+ * @param {!Event} event
+ * @protected
+ */
+ _onCaptureTab: function(event) {
+ if (!this.withBackdrop) {
+ return;
+ }
+ this.__ensureFirstLastFocusables();
+ // TAB wraps from last to first focusable.
+ // Shift + TAB wraps from first to last focusable.
+ var shift = event.shiftKey;
+ var nodeToCheck =
+ shift ? this.__firstFocusableNode : this.__lastFocusableNode;
+ var nodeToSet =
+ shift ? this.__lastFocusableNode : this.__firstFocusableNode;
+ var shouldWrap = false;
+ if (nodeToCheck === nodeToSet) {
+ // If nodeToCheck is the same as nodeToSet, it means we have an overlay
+ // with 0 or 1 focusables; in either case we still need to trap the
+ // focus within the overlay.
+ shouldWrap = true;
+ } else {
+ // In dom=shadow, the manager will receive focus changes on the main
+ // root but not the ones within other shadow roots, so we can't rely on
+ // _focusedChild, but we should check the deepest active element.
+ var focusedNode = this._manager.deepActiveElement;
+ // If the active element is not the nodeToCheck but the overlay itself,
+ // it means the focus is about to go outside the overlay, hence we
+ // should prevent that (e.g. user opens the overlay and hit Shift+TAB).
+ shouldWrap = (focusedNode === nodeToCheck || focusedNode === this);
+ }
+
+ if (shouldWrap) {
+ // When the overlay contains the last focusable element of the document
+ // and it's already focused, pressing TAB would move the focus outside
+ // the document (e.g. to the browser search bar). Similarly, when the
+ // overlay contains the first focusable element of the document and it's
+ // already focused, pressing Shift+TAB would move the focus outside the
+ // document (e.g. to the browser search bar).
+ // In both cases, we would not receive a focus event, but only a blur.
+ // In order to achieve focus wrapping, we prevent this TAB event and
+ // force the focus. This will also prevent the focus to temporarily move
+ // outside the overlay, which might cause scrolling.
+ event.preventDefault();
+ this._focusedChild = nodeToSet;
+ this._applyFocus();
+ }
+ },
+
+ /**
+ * Refits if the overlay is opened and not animating.
+ * @protected
+ */
+ _onIronResize: function() {
+ if (this.opened && !this.__isAnimating) {
+ this.__deraf('refit', this.refit);
+ }
+ },
+
+ /**
+ * Will call notifyResize if overlay is opened.
+ * Can be overridden in order to avoid multiple observers on the same node.
+ * @protected
+ */
+ _onNodesChange: function() {
+ if (this.opened && !this.__isAnimating) {
+ // It might have added focusable nodes, so invalidate cached values.
+ this.invalidateTabbables();
+ this.notifyResize();
+ }
+ },
+
+ /**
+ * Will set first and last focusable nodes if any of them is not set.
+ * @private
+ */
+ __ensureFirstLastFocusables: function() {
+ if (!this.__firstFocusableNode || !this.__lastFocusableNode) {
+ var focusableNodes = this._focusableNodes;
+ this.__firstFocusableNode = focusableNodes[0];
+ this.__lastFocusableNode = focusableNodes[focusableNodes.length - 1];
+ }
+ },
+
+ /**
+ * Tasks executed when opened changes: prepare for the opening, move the
+ * focus, update the manager, render opened/closed.
+ * @private
+ */
+ __openedChanged: function() {
+ if (this.opened) {
+ // Make overlay visible, then add it to the manager.
+ this._prepareRenderOpened();
+ this._manager.addOverlay(this);
+ // Move the focus to the child node with [autofocus].
+ this._applyFocus();
+
+ this._renderOpened();
+ } else {
+ // Remove overlay, then restore the focus before actually closing.
+ this._manager.removeOverlay(this);
+ this._applyFocus();
+
+ this._renderClosed();
+ }
+ },
+
+ /**
+ * Debounces the execution of a callback to the next animation frame.
+ * @param {!string} jobname
+ * @param {!Function} callback Always bound to `this`
+ * @private
+ */
+ __deraf: function(jobname, callback) {
+ var rafs = this.__rafs;
+ if (rafs[jobname] !== null) {
+ cancelAnimationFrame(rafs[jobname]);
+ }
+ rafs[jobname] = requestAnimationFrame(function nextAnimationFrame() {
+ rafs[jobname] = null;
+ callback.call(this);
+ }.bind(this));
+ },
+
+ /**
+ * @param {boolean} isAttached
+ * @param {boolean} opened
+ * @param {string=} scrollAction
+ * @private
+ */
+ __updateScrollObservers: function(isAttached, opened, scrollAction) {
+ if (!isAttached || !opened || !this.__isValidScrollAction(scrollAction)) {
+ Polymer.IronScrollManager.removeScrollLock(this);
+ this.__removeScrollListeners();
+ } else {
+ if (scrollAction === 'lock') {
+ this.__saveScrollPosition();
+ Polymer.IronScrollManager.pushScrollLock(this);
+ }
+ this.__addScrollListeners();
+ }
+ },
+
+ /**
+ * @private
+ */
+ __addScrollListeners: function() {
+ if (!this.__rootNodes) {
+ this.__rootNodes = [];
+ // Listen for scroll events in all shadowRoots hosting this overlay only
+ // when in native ShadowDOM.
+ if (Polymer.Settings.useShadow) {
+ var node = this;
+ while (node) {
+ if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && node.host) {
+ this.__rootNodes.push(node);
+ }
+ node = node.host || node.assignedSlot || node.parentNode;
+ }
+ }
+ this.__rootNodes.push(document);
+ }
+ this.__rootNodes.forEach(function(el) {
+ el.addEventListener('scroll', this.__onCaptureScroll, {
+ capture: true,
+ passive: true,
+ });
+ }, this);
+ },
+
+ /**
+ * @private
+ */
+ __removeScrollListeners: function() {
+ if (this.__rootNodes) {
+ this.__rootNodes.forEach(function(el) {
+ el.removeEventListener('scroll', this.__onCaptureScroll, {
+ capture: true,
+ passive: true,
+ });
+ }, this);
+ }
+ if (!this.isAttached) {
+ this.__rootNodes = null;
+ }
+ },
+
+ /**
+ * @param {string=} scrollAction
+ * @return {boolean}
+ * @private
+ */
+ __isValidScrollAction: function(scrollAction) {
+ return scrollAction === 'lock' || scrollAction === 'refit' ||
+ scrollAction === 'cancel';
+ },
+
+ /**
+ * @private
+ */
+ __onCaptureScroll: function(event) {
+ if (this.__isAnimating) {
+ return;
+ }
+ // Check if scroll outside the overlay.
+ if (Polymer.dom(event).path.indexOf(this) >= 0) {
+ return;
+ }
+ switch (this.scrollAction) {
+ case 'lock':
+ // NOTE: scrolling might happen if a scroll event is not cancellable, or
+ // if user pressed keys that cause scrolling (they're not prevented in
+ // order not to break a11y features like navigate with arrow keys).
+ this.__restoreScrollPosition();
+ break;
+ case 'refit':
+ this.__deraf('refit', this.refit);
+ break;
+ case 'cancel':
+ this.cancel(event);
+ break;
+ }
+ },
+
+ /**
+ * Memoizes the scroll position of the outside scrolling element.
+ * @private
+ */
+ __saveScrollPosition: function() {
+ if (document.scrollingElement) {
+ this.__scrollTop = document.scrollingElement.scrollTop;
+ this.__scrollLeft = document.scrollingElement.scrollLeft;
+ } else {
+ // Since we don't know if is the body or html, get max.
+ this.__scrollTop =
+ Math.max(document.documentElement.scrollTop, document.body.scrollTop);
+ this.__scrollLeft = Math.max(
+ document.documentElement.scrollLeft, document.body.scrollLeft);
+ }
+ },
+
+ /**
+ * Resets the scroll position of the outside scrolling element.
+ * @private
+ */
+ __restoreScrollPosition: function() {
+ if (document.scrollingElement) {
+ document.scrollingElement.scrollTop = this.__scrollTop;
+ document.scrollingElement.scrollLeft = this.__scrollLeft;
+ } else {
+ // Since we don't know if is the body or html, set both.
+ document.documentElement.scrollTop = document.body.scrollTop =
+ this.__scrollTop;
+ document.documentElement.scrollLeft = document.body.scrollLeft =
+ this.__scrollLeft;
+ }
+ },
+
+ };
+
+ /**
+ Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden or
+ shown, and displays on top of other content. It includes an optional backdrop,
+ and can be used to implement a variety of UI controls including dialogs and drop
+ downs. Multiple overlays may be displayed at once.
+
+ See the [demo source
+ code](https://github.com/PolymerElements/iron-overlay-behavior/blob/master/demo/simple-overlay.html)
+ for an example.
+
+ ### Closing and canceling
+
+ An overlay may be hidden by closing or canceling. The difference between close
+ and cancel is user intent. Closing generally implies that the user acknowledged
+ the content on the overlay. By default, it will cancel whenever the user taps
+ outside it or presses the escape key. This behavior is configurable with the
+ `no-cancel-on-esc-key` and the `no-cancel-on-outside-click` properties.
+ `close()` should be called explicitly by the implementer when the user interacts
+ with a control in the overlay element. When the dialog is canceled, the overlay
+ fires an 'iron-overlay-canceled' event. Call `preventDefault` on this event to
+ prevent the overlay from closing.
+
+ ### Positioning
+
+ By default the element is sized and positioned to fit and centered inside the
+ window. You can position and size it manually using CSS. See
+ `Polymer.IronFitBehavior`.
+
+ ### Backdrop
+
+ Set the `with-backdrop` attribute to display a backdrop behind the overlay. The
+ backdrop is appended to `<body>` and is of type `<iron-overlay-backdrop>`. See
+ its doc page for styling options.
+
+ In addition, `with-backdrop` will wrap the focus within the content in the light
+ DOM. Override the [`_focusableNodes`
+ getter](#Polymer.IronOverlayBehavior:property-_focusableNodes) to achieve a
+ different behavior.
+
+ ### Limitations
+
+ The element is styled to appear on top of other content by setting its `z-index`
+ property. You must ensure no element has a stacking context with a higher
+ `z-index` than its parent stacking context. You should place this element as a
+ child of `<body>` whenever possible.
+
+ @demo demo/index.html
+ @polymerBehavior
+ */
+ Polymer.IronOverlayBehavior = [
+ Polymer.IronFitBehavior,
+ Polymer.IronResizableBehavior,
+ Polymer.IronOverlayBehaviorImpl
+ ];
+
+ /**
+ * Fired after the overlay opens.
+ * @event iron-overlay-opened
+ */
+
+ /**
+ * Fired when the overlay is canceled, but before it is closed.
+ * @event iron-overlay-canceled
+ * @param {Event} event The closing of the overlay can be prevented
+ * by calling `event.preventDefault()`. The `event.detail` is the original event
+ * that originated the canceling (e.g. ESC keyboard event or click event outside
+ * the overlay).
+ */
+
+ /**
+ * Fired after the overlay closes.
+ * @event iron-overlay-closed
+ * @param {Event} event The `event.detail` is the `closingReason` property
+ * (contains `canceled`, whether the overlay was canceled).
+ */
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.d.ts
new file mode 100644
index 00000000000..1d140b203a3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.d.ts
@@ -0,0 +1,14 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-overlay-manager.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts" />
+/// <reference path="iron-overlay-backdrop.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.html
new file mode 100644
index 00000000000..352aa9a5724
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-overlay-manager.html
@@ -0,0 +1,389 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+<link rel="import" href="iron-overlay-backdrop.html">
+
+<script>
+ /**
+ * @struct
+ * @constructor
+ * @private
+ */
+ Polymer.IronOverlayManagerClass = function() {
+ /**
+ * Used to keep track of the opened overlays.
+ * @private {!Array<!Element>}
+ */
+ this._overlays = [];
+
+ /**
+ * iframes have a default z-index of 100,
+ * so this default should be at least that.
+ * @private {number}
+ */
+ this._minimumZ = 101;
+
+ /**
+ * Memoized backdrop element.
+ * @private {Element|null}
+ */
+ this._backdropElement = null;
+
+ // Enable document-wide tap recognizer.
+ // NOTE: Use useCapture=true to avoid accidentally prevention of the closing
+ // of an overlay via event.stopPropagation(). The only way to prevent
+ // closing of an overlay should be through its APIs.
+ // NOTE: enable tap on <html> to workaround Polymer/polymer#4459
+ // Pass no-op function because MSEdge 15 doesn't handle null as 2nd argument
+ // https://github.com/Microsoft/ChakraCore/issues/3863
+ Polymer.Gestures.add(document.documentElement, 'tap', function() {});
+ document.addEventListener('tap', this._onCaptureClick.bind(this), true);
+ document.addEventListener('focus', this._onCaptureFocus.bind(this), true);
+ document.addEventListener('keydown', this._onCaptureKeyDown.bind(this), true);
+ };
+
+ Polymer.IronOverlayManagerClass.prototype = {
+
+ constructor: Polymer.IronOverlayManagerClass,
+
+ /**
+ * The shared backdrop element.
+ * @return {!Element} backdropElement
+ */
+ get backdropElement() {
+ if (!this._backdropElement) {
+ this._backdropElement = document.createElement('iron-overlay-backdrop');
+ }
+ return this._backdropElement;
+ },
+
+ /**
+ * The deepest active element.
+ * @return {!Element} activeElement the active element
+ */
+ get deepActiveElement() {
+ var active = document.activeElement;
+ // document.activeElement can be null
+ // https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement
+ // In IE 11, it can also be an object when operating in iframes.
+ // In these cases, default it to document.body.
+ if (!active || active instanceof Element === false) {
+ active = document.body;
+ }
+ while (active.root && Polymer.dom(active.root).activeElement) {
+ active = Polymer.dom(active.root).activeElement;
+ }
+ return active;
+ },
+
+ /**
+ * Brings the overlay at the specified index to the front.
+ * @param {number} i
+ * @private
+ */
+ _bringOverlayAtIndexToFront: function(i) {
+ var overlay = this._overlays[i];
+ if (!overlay) {
+ return;
+ }
+ var lastI = this._overlays.length - 1;
+ var currentOverlay = this._overlays[lastI];
+ // Ensure always-on-top overlay stays on top.
+ if (currentOverlay &&
+ this._shouldBeBehindOverlay(overlay, currentOverlay)) {
+ lastI--;
+ }
+ // If already the top element, return.
+ if (i >= lastI) {
+ return;
+ }
+ // Update z-index to be on top.
+ var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ);
+ if (this._getZ(overlay) <= minimumZ) {
+ this._applyOverlayZ(overlay, minimumZ);
+ }
+
+ // Shift other overlays behind the new on top.
+ while (i < lastI) {
+ this._overlays[i] = this._overlays[i + 1];
+ i++;
+ }
+ this._overlays[lastI] = overlay;
+ },
+
+ /**
+ * Adds the overlay and updates its z-index if it's opened, or removes it if
+ * it's closed. Also updates the backdrop z-index.
+ * @param {!Element} overlay
+ */
+ addOrRemoveOverlay: function(overlay) {
+ if (overlay.opened) {
+ this.addOverlay(overlay);
+ } else {
+ this.removeOverlay(overlay);
+ }
+ },
+
+ /**
+ * Tracks overlays for z-index and focus management.
+ * Ensures the last added overlay with always-on-top remains on top.
+ * @param {!Element} overlay
+ */
+ addOverlay: function(overlay) {
+ var i = this._overlays.indexOf(overlay);
+ if (i >= 0) {
+ this._bringOverlayAtIndexToFront(i);
+ this.trackBackdrop();
+ return;
+ }
+ var insertionIndex = this._overlays.length;
+ var currentOverlay = this._overlays[insertionIndex - 1];
+ var minimumZ = Math.max(this._getZ(currentOverlay), this._minimumZ);
+ var newZ = this._getZ(overlay);
+
+ // Ensure always-on-top overlay stays on top.
+ if (currentOverlay &&
+ this._shouldBeBehindOverlay(overlay, currentOverlay)) {
+ // This bumps the z-index of +2.
+ this._applyOverlayZ(currentOverlay, minimumZ);
+ insertionIndex--;
+ // Update minimumZ to match previous overlay's z-index.
+ var previousOverlay = this._overlays[insertionIndex - 1];
+ minimumZ = Math.max(this._getZ(previousOverlay), this._minimumZ);
+ }
+
+ // Update z-index and insert overlay.
+ if (newZ <= minimumZ) {
+ this._applyOverlayZ(overlay, minimumZ);
+ }
+ this._overlays.splice(insertionIndex, 0, overlay);
+
+ this.trackBackdrop();
+ },
+
+ /**
+ * @param {!Element} overlay
+ */
+ removeOverlay: function(overlay) {
+ var i = this._overlays.indexOf(overlay);
+ if (i === -1) {
+ return;
+ }
+ this._overlays.splice(i, 1);
+
+ this.trackBackdrop();
+ },
+
+ /**
+ * Returns the current overlay.
+ * @return {!Element|undefined}
+ */
+ currentOverlay: function() {
+ var i = this._overlays.length - 1;
+ return this._overlays[i];
+ },
+
+ /**
+ * Returns the current overlay z-index.
+ * @return {number}
+ */
+ currentOverlayZ: function() {
+ return this._getZ(this.currentOverlay());
+ },
+
+ /**
+ * Ensures that the minimum z-index of new overlays is at least `minimumZ`.
+ * This does not effect the z-index of any existing overlays.
+ * @param {number} minimumZ
+ */
+ ensureMinimumZ: function(minimumZ) {
+ this._minimumZ = Math.max(this._minimumZ, minimumZ);
+ },
+
+ focusOverlay: function() {
+ var current = /** @type {?} */ (this.currentOverlay());
+ if (current) {
+ current._applyFocus();
+ }
+ },
+
+ /**
+ * Updates the backdrop z-index.
+ */
+ trackBackdrop: function() {
+ var overlay = this._overlayWithBackdrop();
+ // Avoid creating the backdrop if there is no overlay with backdrop.
+ if (!overlay && !this._backdropElement) {
+ return;
+ }
+ this.backdropElement.style.zIndex = this._getZ(overlay) - 1;
+ this.backdropElement.opened = !!overlay;
+ // Property observers are not fired until element is attached
+ // in Polymer 2.x, so we ensure element is attached if needed.
+ // https://github.com/Polymer/polymer/issues/4526
+ this.backdropElement.prepare();
+ },
+
+ /**
+ * @return {!Array<!Element>}
+ */
+ getBackdrops: function() {
+ var backdrops = [];
+ for (var i = 0; i < this._overlays.length; i++) {
+ if (this._overlays[i].withBackdrop) {
+ backdrops.push(this._overlays[i]);
+ }
+ }
+ return backdrops;
+ },
+
+ /**
+ * Returns the z-index for the backdrop.
+ * @return {number}
+ */
+ backdropZ: function() {
+ return this._getZ(this._overlayWithBackdrop()) - 1;
+ },
+
+ /**
+ * Returns the top opened overlay that has a backdrop.
+ * @return {!Element|undefined}
+ * @private
+ */
+ _overlayWithBackdrop: function() {
+ for (var i = this._overlays.length - 1; i >= 0; i--) {
+ if (this._overlays[i].withBackdrop) {
+ return this._overlays[i];
+ }
+ }
+ },
+
+ /**
+ * Calculates the minimum z-index for the overlay.
+ * @param {Element=} overlay
+ * @private
+ */
+ _getZ: function(overlay) {
+ var z = this._minimumZ;
+ if (overlay) {
+ var z1 = Number(
+ overlay.style.zIndex || window.getComputedStyle(overlay).zIndex);
+ // Check if is a number
+ // Number.isNaN not supported in IE 10+
+ if (z1 === z1) {
+ z = z1;
+ }
+ }
+ return z;
+ },
+
+ /**
+ * @param {!Element} element
+ * @param {number|string} z
+ * @private
+ */
+ _setZ: function(element, z) {
+ element.style.zIndex = z;
+ },
+
+ /**
+ * @param {!Element} overlay
+ * @param {number} aboveZ
+ * @private
+ */
+ _applyOverlayZ: function(overlay, aboveZ) {
+ this._setZ(overlay, aboveZ + 2);
+ },
+
+ /**
+ * Returns the deepest overlay in the path.
+ * @param {!Array<!Element>=} path
+ * @return {!Element|undefined}
+ * @suppress {missingProperties}
+ * @private
+ */
+ _overlayInPath: function(path) {
+ path = path || [];
+ for (var i = 0; i < path.length; i++) {
+ if (path[i]._manager === this) {
+ return path[i];
+ }
+ }
+ },
+
+ /**
+ * Ensures the click event is delegated to the right overlay.
+ * @param {!Event} event
+ * @private
+ */
+ _onCaptureClick: function(event) {
+ var i = this._overlays.length - 1;
+ if (i === -1)
+ return;
+ var path = /** @type {!Array<!EventTarget>} */ (Polymer.dom(event).path);
+ var overlay;
+ // Check if clicked outside of overlay.
+ while ((overlay = /** @type {?} */ (this._overlays[i])) &&
+ this._overlayInPath(path) !== overlay) {
+ overlay._onCaptureClick(event);
+ if (overlay.allowClickThrough) {
+ i--;
+ } else {
+ break;
+ }
+ }
+ },
+
+ /**
+ * Ensures the focus event is delegated to the right overlay.
+ * @param {!Event} event
+ * @private
+ */
+ _onCaptureFocus: function(event) {
+ var overlay = /** @type {?} */ (this.currentOverlay());
+ if (overlay) {
+ overlay._onCaptureFocus(event);
+ }
+ },
+
+ /**
+ * Ensures TAB and ESC keyboard events are delegated to the right overlay.
+ * @param {!Event} event
+ * @private
+ */
+ _onCaptureKeyDown: function(event) {
+ var overlay = /** @type {?} */ (this.currentOverlay());
+ if (overlay) {
+ if (Polymer.IronA11yKeysBehavior.keyboardEventMatchesKeys(event, 'esc')) {
+ overlay._onCaptureEsc(event);
+ } else if (Polymer.IronA11yKeysBehavior.keyboardEventMatchesKeys(
+ event, 'tab')) {
+ overlay._onCaptureTab(event);
+ }
+ }
+ },
+
+ /**
+ * Returns if the overlay1 should be behind overlay2.
+ * @param {!Element} overlay1
+ * @param {!Element} overlay2
+ * @return {boolean}
+ * @suppress {missingProperties}
+ * @private
+ */
+ _shouldBeBehindOverlay: function(overlay1, overlay2) {
+ return !overlay1.alwaysOnTop && overlay2.alwaysOnTop;
+ }
+ };
+
+ Polymer.IronOverlayManager = new Polymer.IronOverlayManagerClass();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.d.ts
new file mode 100644
index 00000000000..96bbf050caf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.d.ts
@@ -0,0 +1,49 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-scroll-manager.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * The IronScrollManager is intended to provide a central source
+ * of authority and control over which elements in a document are currently
+ * allowed to scroll.
+ */
+ namespace IronScrollManager {
+
+
+ /**
+ * Returns true if the provided element is "scroll locked", which is to
+ * say that it cannot be scrolled via pointer or keyboard interactions.
+ */
+ function elementIsScrollLocked(element: HTMLElement): any;
+
+
+ /**
+ * Push an element onto the current scroll lock stack. The most recently
+ * pushed element and its children will be considered scrollable. All
+ * other elements will not be scrollable.
+ *
+ * Scroll locking is implemented as a stack so that cases such as
+ * dropdowns within dropdowns are handled well.
+ */
+ function pushScrollLock(element: HTMLElement): void;
+
+
+ /**
+ * Remove an element from the scroll lock stack. The element being
+ * removed does not need to be the most recently pushed element. However,
+ * the scroll lock constraints only change when the most recently pushed
+ * element is removed.
+ */
+ function removeScrollLock(element: HTMLElement): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.html
new file mode 100644
index 00000000000..549b86933d4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/iron-scroll-manager.html
@@ -0,0 +1,391 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ (function() {
+ 'use strict';
+ /**
+ * Used to calculate the scroll direction during touch events.
+ * @type {!Object}
+ */
+ var lastTouchPosition = {pageX: 0, pageY: 0};
+ /**
+ * Used to avoid computing event.path and filter scrollable nodes (better perf).
+ * @type {?EventTarget}
+ */
+ var lastRootTarget = null;
+ /**
+ * @type {!Array<!Node>}
+ */
+ var lastScrollableNodes = [];
+ /**
+ * @type {!Array<string>}
+ */
+ var scrollEvents = [
+ // Modern `wheel` event for mouse wheel scrolling:
+ 'wheel',
+ // Older, non-standard `mousewheel` event for some FF:
+ 'mousewheel',
+ // IE:
+ 'DOMMouseScroll',
+ // Touch enabled devices
+ 'touchstart',
+ 'touchmove'
+ ];
+
+ /**
+ * The IronScrollManager is intended to provide a central source
+ * of authority and control over which elements in a document are currently
+ * allowed to scroll.
+ *
+ * @namespace
+ * @memberof Polymer
+ */
+ Polymer.IronScrollManager = {
+
+ /**
+ * The current element that defines the DOM boundaries of the
+ * scroll lock. This is always the most recently locking element.
+ *
+ * @return {!Node|undefined}
+ */
+ get currentLockingElement() {
+ return this._lockingElements[this._lockingElements.length - 1];
+ },
+
+ /**
+ * Returns true if the provided element is "scroll locked", which is to
+ * say that it cannot be scrolled via pointer or keyboard interactions.
+ *
+ * @memberof Polymer.IronScrollManager
+ * @param {!HTMLElement} element An HTML element instance which may or may
+ * not be scroll locked.
+ */
+ elementIsScrollLocked: function(element) {
+ var currentLockingElement = this.currentLockingElement;
+
+ if (currentLockingElement === undefined)
+ return false;
+
+ var scrollLocked;
+
+ if (this._hasCachedLockedElement(element)) {
+ return true;
+ }
+
+ if (this._hasCachedUnlockedElement(element)) {
+ return false;
+ }
+
+ scrollLocked = !!currentLockingElement &&
+ currentLockingElement !== element &&
+ !this._composedTreeContains(currentLockingElement, element);
+
+ if (scrollLocked) {
+ this._lockedElementCache.push(element);
+ } else {
+ this._unlockedElementCache.push(element);
+ }
+
+ return scrollLocked;
+ },
+
+ /**
+ * Push an element onto the current scroll lock stack. The most recently
+ * pushed element and its children will be considered scrollable. All
+ * other elements will not be scrollable.
+ *
+ * Scroll locking is implemented as a stack so that cases such as
+ * dropdowns within dropdowns are handled well.
+ *
+ * @memberof Polymer.IronScrollManager
+ * @param {!HTMLElement} element The element that should lock scroll.
+ */
+ pushScrollLock: function(element) {
+ // Prevent pushing the same element twice
+ if (this._lockingElements.indexOf(element) >= 0) {
+ return;
+ }
+
+ if (this._lockingElements.length === 0) {
+ this._lockScrollInteractions();
+ }
+
+ this._lockingElements.push(element);
+
+ this._lockedElementCache = [];
+ this._unlockedElementCache = [];
+ },
+
+ /**
+ * Remove an element from the scroll lock stack. The element being
+ * removed does not need to be the most recently pushed element. However,
+ * the scroll lock constraints only change when the most recently pushed
+ * element is removed.
+ *
+ * @memberof Polymer.IronScrollManager
+ * @param {!HTMLElement} element The element to remove from the scroll
+ * lock stack.
+ */
+ removeScrollLock: function(element) {
+ var index = this._lockingElements.indexOf(element);
+
+ if (index === -1) {
+ return;
+ }
+
+ this._lockingElements.splice(index, 1);
+
+ this._lockedElementCache = [];
+ this._unlockedElementCache = [];
+
+ if (this._lockingElements.length === 0) {
+ this._unlockScrollInteractions();
+ }
+ },
+
+ _lockingElements: [],
+
+ _lockedElementCache: null,
+
+ _unlockedElementCache: null,
+
+ _hasCachedLockedElement: function(element) {
+ return this._lockedElementCache.indexOf(element) > -1;
+ },
+
+ _hasCachedUnlockedElement: function(element) {
+ return this._unlockedElementCache.indexOf(element) > -1;
+ },
+
+ _composedTreeContains: function(element, child) {
+ // NOTE(cdata): This method iterates over content elements and their
+ // corresponding distributed nodes to implement a contains-like method
+ // that pierces through the composed tree of the ShadowDOM. Results of
+ // this operation are cached (elsewhere) on a per-scroll-lock basis, to
+ // guard against potentially expensive lookups happening repeatedly as
+ // a user scrolls / touchmoves.
+ var contentElements;
+ var distributedNodes;
+ var contentIndex;
+ var nodeIndex;
+
+ if (element.contains(child)) {
+ return true;
+ }
+
+ contentElements = Polymer.dom(element).querySelectorAll('content,slot');
+
+ for (contentIndex = 0; contentIndex < contentElements.length;
+ ++contentIndex) {
+ distributedNodes =
+ Polymer.dom(contentElements[contentIndex]).getDistributedNodes();
+
+ for (nodeIndex = 0; nodeIndex < distributedNodes.length; ++nodeIndex) {
+ // Polymer 2.x returns slot.assignedNodes which can contain text nodes.
+ if (distributedNodes[nodeIndex].nodeType !== Node.ELEMENT_NODE)
+ continue;
+
+ if (this._composedTreeContains(distributedNodes[nodeIndex], child)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ _scrollInteractionHandler: function(event) {
+ // Avoid canceling an event with cancelable=false, e.g. scrolling is in
+ // progress and cannot be interrupted.
+ if (event.cancelable && this._shouldPreventScrolling(event)) {
+ event.preventDefault();
+ }
+ // If event has targetTouches (touch event), update last touch position.
+ if (event.targetTouches) {
+ var touch = event.targetTouches[0];
+ lastTouchPosition.pageX = touch.pageX;
+ lastTouchPosition.pageY = touch.pageY;
+ }
+ },
+
+ /**
+ * @private
+ */
+ _boundScrollHandler: undefined,
+
+ _lockScrollInteractions: function() {
+ this._boundScrollHandler =
+ this._boundScrollHandler || this._scrollInteractionHandler.bind(this);
+ for (var i = 0, l = scrollEvents.length; i < l; i++) {
+ // NOTE: browsers that don't support objects as third arg will
+ // interpret it as boolean, hence useCapture = true in this case.
+ document.addEventListener(
+ scrollEvents[i],
+ this._boundScrollHandler,
+ {capture: true, passive: false});
+ }
+ },
+
+ _unlockScrollInteractions: function() {
+ for (var i = 0, l = scrollEvents.length; i < l; i++) {
+ // NOTE: browsers that don't support objects as third arg will
+ // interpret it as boolean, hence useCapture = true in this case.
+ document.removeEventListener(
+ scrollEvents[i],
+ this._boundScrollHandler,
+ {capture: true, passive: false});
+ }
+ },
+
+ /**
+ * Returns true if the event causes scroll outside the current locking
+ * element, e.g. pointer/keyboard interactions, or scroll "leaking"
+ * outside the locking element when it is already at its scroll boundaries.
+ * @param {!Event} event
+ * @return {boolean}
+ * @private
+ */
+ _shouldPreventScrolling: function(event) {
+ // Update if root target changed. For touch events, ensure we don't
+ // update during touchmove.
+ var target = Polymer.dom(event).rootTarget;
+ if (event.type !== 'touchmove' && lastRootTarget !== target) {
+ lastRootTarget = target;
+ lastScrollableNodes = this._getScrollableNodes(Polymer.dom(event).path);
+ }
+
+ // Prevent event if no scrollable nodes.
+ if (!lastScrollableNodes.length) {
+ return true;
+ }
+ // Don't prevent touchstart event inside the locking element when it has
+ // scrollable nodes.
+ if (event.type === 'touchstart') {
+ return false;
+ }
+ // Get deltaX/Y.
+ var info = this._getScrollInfo(event);
+ // Prevent if there is no child that can scroll.
+ return !this._getScrollingNode(
+ lastScrollableNodes, info.deltaX, info.deltaY);
+ },
+
+ /**
+ * Returns an array of scrollable nodes up to the current locking element,
+ * which is included too if scrollable.
+ * @param {!Array<!Node>} nodes
+ * @return {!Array<!Node>} scrollables
+ * @private
+ */
+ _getScrollableNodes: function(nodes) {
+ var scrollables = [];
+ var lockingIndex = nodes.indexOf(this.currentLockingElement);
+ // Loop from root target to locking element (included).
+ for (var i = 0; i <= lockingIndex; i++) {
+ // Skip non-Element nodes.
+ if (nodes[i].nodeType !== Node.ELEMENT_NODE) {
+ continue;
+ }
+ var node = /** @type {!Element} */ (nodes[i]);
+ // Check inline style before checking computed style.
+ var style = node.style;
+ if (style.overflow !== 'scroll' && style.overflow !== 'auto') {
+ style = window.getComputedStyle(node);
+ }
+ if (style.overflow === 'scroll' || style.overflow === 'auto') {
+ scrollables.push(node);
+ }
+ }
+ return scrollables;
+ },
+
+ /**
+ * Returns the node that is scrolling. If there is no scrolling,
+ * returns undefined.
+ * @param {!Array<!Node>} nodes
+ * @param {number} deltaX Scroll delta on the x-axis
+ * @param {number} deltaY Scroll delta on the y-axis
+ * @return {!Node|undefined}
+ * @private
+ */
+ _getScrollingNode: function(nodes, deltaX, deltaY) {
+ // No scroll.
+ if (!deltaX && !deltaY) {
+ return;
+ }
+ // Check only one axis according to where there is more scroll.
+ // Prefer vertical to horizontal.
+ var verticalScroll = Math.abs(deltaY) >= Math.abs(deltaX);
+ for (var i = 0; i < nodes.length; i++) {
+ var node = nodes[i];
+ var canScroll = false;
+ if (verticalScroll) {
+ // delta < 0 is scroll up, delta > 0 is scroll down.
+ canScroll = deltaY < 0 ?
+ node.scrollTop > 0 :
+ node.scrollTop < node.scrollHeight - node.clientHeight;
+ } else {
+ // delta < 0 is scroll left, delta > 0 is scroll right.
+ canScroll = deltaX < 0 ?
+ node.scrollLeft > 0 :
+ node.scrollLeft < node.scrollWidth - node.clientWidth;
+ }
+ if (canScroll) {
+ return node;
+ }
+ }
+ },
+
+ /**
+ * Returns scroll `deltaX` and `deltaY`.
+ * @param {!Event} event The scroll event
+ * @return {{deltaX: number, deltaY: number}} Object containing the
+ * x-axis scroll delta (positive: scroll right, negative: scroll left,
+ * 0: no scroll), and the y-axis scroll delta (positive: scroll down,
+ * negative: scroll up, 0: no scroll).
+ * @private
+ */
+ _getScrollInfo: function(event) {
+ var info = {deltaX: event.deltaX, deltaY: event.deltaY};
+ // Already available.
+ if ('deltaX' in event) {
+ // do nothing, values are already good.
+ }
+ // Safari has scroll info in `wheelDeltaX/Y`.
+ else if ('wheelDeltaX' in event && 'wheelDeltaY' in event) {
+ info.deltaX = -event.wheelDeltaX;
+ info.deltaY = -event.wheelDeltaY;
+ }
+ // IE10 has only vertical scroll info in `wheelDelta`.
+ else if ('wheelDelta' in event) {
+ info.deltaX = 0;
+ info.deltaY = -event.wheelDelta;
+ }
+ // Firefox has scroll info in `detail` and `axis`.
+ else if ('axis' in event) {
+ info.deltaX = event.axis === 1 ? event.detail : 0;
+ info.deltaY = event.axis === 2 ? event.detail : 0;
+ }
+ // On mobile devices, calculate scroll direction.
+ else if (event.targetTouches) {
+ var touch = event.targetTouches[0];
+ // Touch moves from right to left => scrolling goes right.
+ info.deltaX = lastTouchPosition.pageX - touch.pageX;
+ // Touch moves from down to up => scrolling goes down.
+ info.deltaY = lastTouchPosition.pageY - touch.pageY;
+ }
+ return info;
+ }
+ };
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package-lock.json
new file mode 100644
index 00000000000..a5360c6ac26
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package-lock.json
@@ -0,0 +1,2162 @@
+{
+ "name": "@polymer/iron-overlay-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package.json
new file mode 100644
index 00000000000..7a09c380626
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-overlay-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-overlay-behavior",
+ "private": true,
+ "description": "Provides a behavior for making an element an overlay",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-overlay-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.bower.json
new file mode 100644
index 00000000000..bc8fbd07b04
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.bower.json
@@ -0,0 +1,55 @@
+{
+ "name": "iron-range-behavior",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Provides a behavior for something with a minimum and maximum value",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior"
+ ],
+ "main": "iron-range-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-range-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-range-behavior",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "dcc636b9fd86c8eeeb1cbd4cade2f6d34ebcb168"
+ },
+ "_source": "https://github.com/PolymerElements/iron-range-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-range-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..0273927308e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-range-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.travis.yml
new file mode 100644
index 00000000000..6aa2f911f57
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ ioGoTHzroJHO2O9B8y/xB7dsnWY+dArvRF+Dem/0Z8yTJZ/QFCeqFctQXNdj7HIm/y7ZxetVFBnxr+0HbF62qdmVkvfBzD/TaQPeXOHSyrSbR2aAQLeSwRbcUyOmmtk/q0frf1o81i3inoLjrGKieCZq7U8VF/6YyfRDhouU5/Q=
+ - secure: >-
+ LxoITNXWo1Vh2dOlg0I/KI/wuEaiMpNPRcg8MN6TOwy6UIKPwlpA69YZ4eLNDnuCjndQHL7Cl/TA5njubss4UeXG+L3oQMGNBEcRSHGZGxEyTZpofJp5FFK3Ja9CpaBMB7IsWAwuGPJZXM/6aoyAVipJ1et2Gbbasd5EbQYjRwc=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/README.md
new file mode 100644
index 00000000000..c87d0e36d73
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/README.md
@@ -0,0 +1,8 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-range-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-range-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-range-behavior)_
+
+
+## Polymer.IronRangeBehavior
+
+`iron-range-behavior` provides the behavior for something with a minimum to maximum range.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/bower.json
new file mode 100644
index 00000000000..c0979afa40b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/bower.json
@@ -0,0 +1,45 @@
+{
+ "name": "iron-range-behavior",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Provides a behavior for something with a minimum and maximum value",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "behavior"
+ ],
+ "main": "iron-range-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-range-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/demo/index.html
new file mode 100644
index 00000000000..6e8548c8424
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/demo/index.html
@@ -0,0 +1,78 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<!doctype html>
+<html>
+ <head>
+ <title>iron-range-behavior demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../iron-range-behavior.html">
+
+ <style>
+
+ body {
+ font-family: sans-serif;
+ }
+
+ </style>
+ </head>
+
+ <body unresolved>
+
+ <dom-module id="x-progressbar">
+ <template>
+ <style>
+ :host {
+ display: block;
+ height: 40px;
+ background-color: #555;
+ border-radius: 4px;
+ padding: 8px;
+ box-shadow: inset 0px 2px 5px rgba(0, 0, 0, 0.5);
+ }
+
+ .progress {
+ background-color: #999;
+ height: 100%;
+ border-radius: 4px;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
+ }
+
+ .progress-value {
+ padding: 0 8px;
+ font-size: 18px;
+ color: #fff;
+ }
+ </style>
+
+ <div class="progress" horizontal center layout style$="{{_computeStyle(ratio)}}">
+ <div class="progress-value"><span>{{ratio}}</span>%</div>
+ </div>
+ </template>
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ Polymer({
+ is: 'x-progressbar',
+
+ behaviors: [Polymer.IronRangeBehavior],
+
+ _computeStyle: function(ratio) {
+ return 'width: ' + ratio + '%;';
+ }
+ });
+ });
+ </script>
+ </dom-module>
+
+ <x-progressbar min="0" max="200" value="120"></x-progressbar>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/index.html
new file mode 100644
index 00000000000..cc77788735d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.d.ts
new file mode 100644
index 00000000000..d8ed16ce7cf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.d.ts
@@ -0,0 +1,53 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-range-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `iron-range-behavior` provides the behavior for something with a minimum to
+ * maximum range.
+ */
+ interface IronRangeBehavior {
+
+ /**
+ * The number that represents the current value.
+ */
+ value: number|null|undefined;
+
+ /**
+ * The number that indicates the minimum value of the range.
+ */
+ min: number|null|undefined;
+
+ /**
+ * The number that indicates the maximum value of the range.
+ */
+ max: number|null|undefined;
+
+ /**
+ * Specifies the value granularity of the range's value.
+ */
+ step: number|null|undefined;
+
+ /**
+ * Returns the ratio of the value.
+ */
+ readonly ratio: number|null|undefined;
+ _calcRatio(value: any): any;
+ _clampValue(value: any): any;
+ _calcStep(value: any): any;
+ _validateValue(): any;
+ _update(): void;
+ }
+
+ const IronRangeBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.html
new file mode 100644
index 00000000000..92f4e559067
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/iron-range-behavior.html
@@ -0,0 +1,97 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ /**
+ * `iron-range-behavior` provides the behavior for something with a minimum to
+ * maximum range.
+ *
+ * @demo demo/index.html
+ * @polymerBehavior
+ */
+ Polymer.IronRangeBehavior = {
+
+ properties: {
+
+ /**
+ * The number that represents the current value.
+ */
+ value: {type: Number, value: 0, notify: true, reflectToAttribute: true},
+
+ /**
+ * The number that indicates the minimum value of the range.
+ */
+ min: {type: Number, value: 0, notify: true},
+
+ /**
+ * The number that indicates the maximum value of the range.
+ */
+ max: {type: Number, value: 100, notify: true},
+
+ /**
+ * Specifies the value granularity of the range's value.
+ */
+ step: {type: Number, value: 1, notify: true},
+
+ /**
+ * Returns the ratio of the value.
+ */
+ ratio: {type: Number, value: 0, readOnly: true, notify: true},
+ },
+
+ observers: ['_update(value, min, max, step)'],
+
+ _calcRatio: function(value) {
+ return (this._clampValue(value) - this.min) / (this.max - this.min);
+ },
+
+ _clampValue: function(value) {
+ return Math.min(this.max, Math.max(this.min, this._calcStep(value)));
+ },
+
+ _calcStep: function(value) {
+ // polymer/issues/2493
+ value = parseFloat(value);
+
+ if (!this.step) {
+ return value;
+ }
+
+ var numSteps = Math.round((value - this.min) / this.step);
+ if (this.step < 1) {
+ /**
+ * For small values of this.step, if we calculate the step using
+ * `Math.round(value / step) * step` we may hit a precision point issue
+ * eg. 0.1 * 0.2 = 0.020000000000000004
+ * http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
+ *
+ * as a work around we can divide by the reciprocal of `step`
+ */
+ return numSteps / (1 / this.step) + this.min;
+ } else {
+ return numSteps * this.step + this.min;
+ }
+ },
+
+ _validateValue: function() {
+ var v = this._clampValue(this.value);
+ this.value = this.oldValue = isNaN(v) ? this.oldValue : v;
+ return this.value !== v;
+ },
+
+ _update: function() {
+ this._validateValue();
+ this._setRatio(this._calcRatio(this.value) * 100);
+ }
+
+ };
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package-lock.json
new file mode 100644
index 00000000000..836f3e43d9d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/iron-range-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.7.tgz",
+ "integrity": "sha512-5QC0YAHH7aXzrrbgQ+faSeBKbJwTaUyYuaywYzDTr1Myz5C0knx5FHOV5QyhBeE1x8n2xfkBUGE/C0X1paLp+Q==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.10.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package.json
new file mode 100644
index 00000000000..7afb52a5591
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-range-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/iron-range-behavior",
+ "private": true,
+ "description": "Provides a behavior for something with a minimum and maximum value",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-range-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.bower.json
new file mode 100644
index 00000000000..0b2a011b8c1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.bower.json
@@ -0,0 +1,58 @@
+{
+ "name": "iron-resizable-behavior",
+ "version": "2.1.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Coordinates the flow of resizeable elements",
+ "private": true,
+ "main": "iron-resizable-behavior.html",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-resizable-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-resizable-behavior",
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "806e0807bd4253f446f8be624acf853069e36919"
+ },
+ "_source": "https://github.com/PolymerElements/iron-resizable-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-resizable-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..b890b594341
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-resizable-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.travis.yml
new file mode 100644
index 00000000000..c7d472cdb6b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ Bsp8pa19FCij3Eee0P5eOE8ZrbylrYL99R9EIxH6rcDH+rxMhK0BIfSiXTPSFRk2iqJp++RIZN8kUu5GddetiXreRZDtnhXBA2QoYteIAS8Hzy9u2EggqI0UdGqbCiFHDVD/rEQyhSPiIfWHGCg/Moeo9J2k/eC2w6I8I9C15Zw=
+ - secure: >-
+ j9xIW/banUkkNaLrWVGcTsasAp64zEmZJQO+eY8ExINx3uLbDh5h6Foc7xWhJ4Yu7aey3+nH5BWKYimtPTYoXUD2nIWU31yBNbqU/+G6vIppDbgPHMRcVnRiO7YZ0yW1JunvKs+1lOPhOw4ibztJjGkQ2ZK9q6ZSJvQKRbo6Au0=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/README.md
new file mode 100644
index 00000000000..7ff2e12a602
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/README.md
@@ -0,0 +1,22 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-resizable-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-resizable-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-resizable-behavior)_
+
+
+## Polymer.IronResizableBehavior
+
+`IronResizableBehavior` is a behavior that can be used in Polymer elements to
+coordinate the flow of resize events between "resizers" (elements that control the
+size or hidden state of their children) and "resizables" (elements that need to be
+notified when they are resized or un-hidden by their parents in order to take
+action on their new measurements).
+
+Elements that perform measurement should add the `IronResizableBehavior` behavior to
+their element definition and listen for the `iron-resize` event on themselves.
+This event will be fired when they become showing after having been hidden,
+when they are resized explicitly by another resizable, or when the window has been
+resized.
+
+Note, the `iron-resize` event is non-bubbling.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/bower.json
new file mode 100644
index 00000000000..845aeb98716
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/bower.json
@@ -0,0 +1,48 @@
+{
+ "name": "iron-resizable-behavior",
+ "version": "2.0.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Coordinates the flow of resizeable elements",
+ "private": true,
+ "main": "iron-resizable-behavior.html",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-resizable-behavior.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/index.html
new file mode 100644
index 00000000000..2896c50d256
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <title>iron-resizable-behavior demo</title>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="src/x-app.html">
+
+</head>
+<body>
+
+ <x-app></x-app>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/src/x-app.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/src/x-app.html
new file mode 100644
index 00000000000..c4bfa67ff16
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/demo/src/x-app.html
@@ -0,0 +1,105 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../iron-resizable-behavior.html">
+
+<dom-module id="x-puck">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ border: 3px solid lightblue;
+ }
+ </style>
+
+ <b>I'm a resize-aware, thirdifying puck at (<span>{{x}}</span> x <span>{{y}}</span>).</b>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'x-puck',
+
+ behaviors: [
+ Polymer.IronResizableBehavior
+ ],
+
+ properties: {
+ x: {
+ type: Number,
+ value: 0
+ },
+
+ y: {
+ type: Number,
+ value: 0
+ }
+ },
+
+ listeners: {
+ 'iron-resize': '_onIronResize'
+ },
+
+ attached: function() {
+ this.async(this.notifyResize, 1);
+ },
+
+ get parent() {
+ if (this.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+ return this.parentNode.host;
+ }
+
+ return this.parentNode;
+ },
+
+ _onIronResize: function() {
+ var x = this.x = Math.floor(this.parent.offsetWidth / 3);
+ var y = this.y = Math.floor(this.parent.offsetHeight / 3);
+
+ this.translate3d(x + 'px', y + 'px', 0);
+ }
+ });
+
+</script>
+
+<dom-module id="x-app">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ }
+ </style>
+ <x-puck></x-puck>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'x-app',
+
+ behaviors: [
+ Polymer.IronResizableBehavior
+ ]
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/index.html
new file mode 100644
index 00000000000..b9b8809560f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/index.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <title>iron-resizable-behavior</title>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.d.ts
new file mode 100644
index 00000000000..3c2128fb054
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.d.ts
@@ -0,0 +1,83 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-resizable-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `IronResizableBehavior` is a behavior that can be used in Polymer elements to
+ * coordinate the flow of resize events between "resizers" (elements that control the
+ * size or hidden state of their children) and "resizables" (elements that need to be
+ * notified when they are resized or un-hidden by their parents in order to take
+ * action on their new measurements).
+ *
+ * Elements that perform measurement should add the `IronResizableBehavior` behavior to
+ * their element definition and listen for the `iron-resize` event on themselves.
+ * This event will be fired when they become showing after having been hidden,
+ * when they are resized explicitly by another resizable, or when the window has been
+ * resized.
+ *
+ * Note, the `iron-resize` event is non-bubbling.
+ */
+ interface IronResizableBehavior {
+
+ /**
+ * The closest ancestor element that implements `IronResizableBehavior`.
+ */
+ _parentResizable: object|null|undefined;
+
+ /**
+ * True if this element is currently notifying its descendant elements of
+ * resize.
+ */
+ _notifyingDescendant: boolean|null|undefined;
+ created(): void;
+ attached(): void;
+ detached(): void;
+
+ /**
+ * Can be called to manually notify a resizable and its descendant
+ * resizables of a resize change.
+ */
+ notifyResize(): void;
+
+ /**
+ * Used to assign the closest resizable ancestor to this resizable
+ * if the ancestor detects a request for notifications.
+ */
+ assignParentResizable(parentResizable: any): void;
+
+ /**
+ * Used to remove a resizable descendant from the list of descendants
+ * that should be notified of a resize change.
+ */
+ stopResizeNotificationsFor(target: any): void;
+
+ /**
+ * This method can be overridden to filter nested elements that should or
+ * should not be notified by the current element. Return true if an element
+ * should be notified, or false if it should not be notified.
+ *
+ * @param element A candidate descendant element that
+ * implements `IronResizableBehavior`.
+ * @returns True if the `element` should be notified of resize.
+ */
+ resizerShouldNotify(element: HTMLElement|null): boolean;
+ _onDescendantIronResize(event: any): void;
+ _fireResize(): void;
+ _onIronRequestResizeNotifications(event: any): void;
+ _parentResizableChanged(parentResizable: any): void;
+ _notifyDescendant(descendant: any): void;
+ _requestResizeNotifications(): void;
+ }
+
+ const IronResizableBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.html
new file mode 100644
index 00000000000..d77dde9cb94
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/iron-resizable-behavior.html
@@ -0,0 +1,214 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+ /**
+ * `IronResizableBehavior` is a behavior that can be used in Polymer elements to
+ * coordinate the flow of resize events between "resizers" (elements that control the
+ * size or hidden state of their children) and "resizables" (elements that need to be
+ * notified when they are resized or un-hidden by their parents in order to take
+ * action on their new measurements).
+ *
+ * Elements that perform measurement should add the `IronResizableBehavior` behavior to
+ * their element definition and listen for the `iron-resize` event on themselves.
+ * This event will be fired when they become showing after having been hidden,
+ * when they are resized explicitly by another resizable, or when the window has been
+ * resized.
+ *
+ * Note, the `iron-resize` event is non-bubbling.
+ *
+ * @polymerBehavior Polymer.IronResizableBehavior
+ * @demo demo/index.html
+ **/
+ Polymer.IronResizableBehavior = {
+ properties: {
+ /**
+ * The closest ancestor element that implements `IronResizableBehavior`.
+ */
+ _parentResizable: {
+ type: Object,
+ observer: '_parentResizableChanged'
+ },
+
+ /**
+ * True if this element is currently notifying its descendant elements of
+ * resize.
+ */
+ _notifyingDescendant: {
+ type: Boolean,
+ value: false
+ }
+ },
+
+ listeners: {
+ 'iron-request-resize-notifications': '_onIronRequestResizeNotifications'
+ },
+
+ created: function() {
+ // We don't really need property effects on these, and also we want them
+ // to be created before the `_parentResizable` observer fires:
+ this._interestedResizables = [];
+ this._boundNotifyResize = this.notifyResize.bind(this);
+ },
+
+ attached: function() {
+ this._requestResizeNotifications();
+ },
+
+ detached: function() {
+ if (this._parentResizable) {
+ this._parentResizable.stopResizeNotificationsFor(this);
+ } else {
+ window.removeEventListener('resize', this._boundNotifyResize);
+ }
+
+ this._parentResizable = null;
+ },
+
+ /**
+ * Can be called to manually notify a resizable and its descendant
+ * resizables of a resize change.
+ */
+ notifyResize: function() {
+ if (!this.isAttached) {
+ return;
+ }
+
+ this._interestedResizables.forEach(function(resizable) {
+ if (this.resizerShouldNotify(resizable)) {
+ this._notifyDescendant(resizable);
+ }
+ }, this);
+
+ this._fireResize();
+ },
+
+ /**
+ * Used to assign the closest resizable ancestor to this resizable
+ * if the ancestor detects a request for notifications.
+ */
+ assignParentResizable: function(parentResizable) {
+ this._parentResizable = parentResizable;
+ },
+
+ /**
+ * Used to remove a resizable descendant from the list of descendants
+ * that should be notified of a resize change.
+ */
+ stopResizeNotificationsFor: function(target) {
+ var index = this._interestedResizables.indexOf(target);
+
+ if (index > -1) {
+ this._interestedResizables.splice(index, 1);
+ this.unlisten(target, 'iron-resize', '_onDescendantIronResize');
+ }
+ },
+
+ /**
+ * This method can be overridden to filter nested elements that should or
+ * should not be notified by the current element. Return true if an element
+ * should be notified, or false if it should not be notified.
+ *
+ * @param {HTMLElement} element A candidate descendant element that
+ * implements `IronResizableBehavior`.
+ * @return {boolean} True if the `element` should be notified of resize.
+ */
+ resizerShouldNotify: function(element) { return true; },
+
+ _onDescendantIronResize: function(event) {
+ if (this._notifyingDescendant) {
+ event.stopPropagation();
+ return;
+ }
+
+ // NOTE(cdata): In ShadowDOM, event retargeting makes echoing of the
+ // otherwise non-bubbling event "just work." We do it manually here for
+ // the case where Polymer is not using shadow roots for whatever reason:
+ if (!Polymer.Settings.useShadow) {
+ this._fireResize();
+ }
+ },
+
+ _fireResize: function() {
+ this.fire('iron-resize', null, {
+ node: this,
+ bubbles: false
+ });
+ },
+
+ _onIronRequestResizeNotifications: function(event) {
+ var target = /** @type {!EventTarget} */ (Polymer.dom(event).rootTarget);
+ if (target === this) {
+ return;
+ }
+
+ if (this._interestedResizables.indexOf(target) === -1) {
+ this._interestedResizables.push(target);
+ this.listen(target, 'iron-resize', '_onDescendantIronResize');
+ }
+
+ target.assignParentResizable(this);
+ this._notifyDescendant(target);
+
+ event.stopPropagation();
+ },
+
+ _parentResizableChanged: function(parentResizable) {
+ if (parentResizable) {
+ window.removeEventListener('resize', this._boundNotifyResize);
+ }
+ },
+
+ _notifyDescendant: function(descendant) {
+ // NOTE(cdata): In IE10, attached is fired on children first, so it's
+ // important not to notify them if the parent is not attached yet (or
+ // else they will get redundantly notified when the parent attaches).
+ if (!this.isAttached) {
+ return;
+ }
+
+ this._notifyingDescendant = true;
+ descendant.notifyResize();
+ this._notifyingDescendant = false;
+ },
+
+ _requestResizeNotifications: function() {
+ if (!this.isAttached)
+ return;
+
+ // NOTE(valdrin) In CustomElements v1 with native HTMLImports, the order
+ // of imports affects the order of `attached` callbacks (see webcomponents/custom-elements#15).
+ // This might cause a child to notify parents too early (as the parent
+ // still has to be upgraded), resulting in a parent not able to keep track
+ // of the `_interestedResizables`. To solve this, we wait for the document
+ // to be done loading before firing the event.
+ if (document.readyState === 'loading') {
+ var _requestResizeNotifications = this._requestResizeNotifications.bind(this);
+ document.addEventListener('readystatechange', function readystatechanged() {
+ document.removeEventListener('readystatechange', readystatechanged);
+ _requestResizeNotifications();
+ });
+ } else {
+ this.fire('iron-request-resize-notifications', null, {
+ node: this,
+ bubbles: true,
+ cancelable: true
+ });
+
+ if (!this._parentResizable) {
+ window.addEventListener('resize', this._boundNotifyResize);
+ this.notifyResize();
+ }
+ }
+ }
+ };
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package-lock.json
new file mode 100644
index 00000000000..e74ef2256fa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-resizable-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package.json
new file mode 100644
index 00000000000..5cbb08c424f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-resizable-behavior/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-resizable-behavior",
+ "private": true,
+ "description": "Coordinates the flow of resizeable elements",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-resizable-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.bower.json
new file mode 100644
index 00000000000..a60c0292e31
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.bower.json
@@ -0,0 +1,68 @@
+{
+ "name": "iron-selector",
+ "version": "2.1.0",
+ "description": "Manages a set of elements that can be selected",
+ "private": true,
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "main": [
+ "iron-selector.html",
+ "iron-multi-selectable.html",
+ "iron-selectable.html",
+ "iron-selection.html"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "selector"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-selector.git"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-selector",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.5",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.4",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "82e8bf6bd3c3bf5a3605271e8ef1ee2cb68f053c"
+ },
+ "_source": "https://github.com/PolymerElements/iron-selector.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-selector"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..07a3448a7ae
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-selector/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.travis.yml
new file mode 100644
index 00000000000..2d6d175f58e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ SFfLw5U6C/7UFRyt/ho5AXNnf8E1d7bY6V9lPT2UnHjkNl4NldWyJEkBeaFTERChKmrYBNk33g748OGohL8snCRXCPxM9A/OKRWEGSFIvPmgLs8mkpbNodUAcpL6dbDLlZgcVDHXCn1uvVQgOgzg64FWW5ozphxD4u/nl5nA7aY=
+ - secure: >-
+ a6YFcuIvE3PJ9C0F7cimJ/R8EGlKy2rlg7Re2ezpL85f4++cYnYBUrNnbwj+BNp5F9IXZxvD6T+kNr+1BJtqILFf54W5baBgB5PVCSt7dry+lrcRUf5yTIRl0yJ+73UJrEWR2UOXaXlGzbQ56k2TWAbnzVbq2jik1vdgSnxbjLE=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/README.md
new file mode 100755
index 00000000000..271a106c184
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/README.md
@@ -0,0 +1,102 @@
+[![Build status](https://travis-ci.org/PolymerElements/iron-selector.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-selector)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/iron-selector)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-selector)_
+
+
+## &lt;iron-selector&gt;
+
+ `iron-selector` is an element which can be used to manage a list of elements
+ that can be selected. Tapping on the item will make the item selected. The `selected` indicates
+ which item is being selected. The default is to use the index of the item.
+
+ Example:
+
+```html
+ <iron-selector selected="0">
+ <div>Item 1</div>
+ <div>Item 2</div>
+ <div>Item 3</div>
+ </iron-selector>
+```
+
+ If you want to use the attribute value of an element for `selected` instead of the index,
+ set `attrForSelected` to the name of the attribute. For example, if you want to select item by
+ `name`, set `attrForSelected` to `name`.
+
+ Example:
+
+```html
+ <iron-selector attr-for-selected="name" selected="foo">
+ <div name="foo">Foo</div>
+ <div name="bar">Bar</div>
+ <div name="zot">Zot</div>
+ </iron-selector>
+```
+
+ You can specify a default fallback with `fallbackSelection` in case the `selected` attribute does
+ not match the `attrForSelected` attribute of any elements.
+
+ Example:
+
+```html
+ <iron-selector attr-for-selected="name" selected="non-existing"
+ fallback-selection="default">
+ <div name="foo">Foo</div>
+ <div name="bar">Bar</div>
+ <div name="default">Default</div>
+ </iron-selector>
+```
+
+ Note: When the selector is multi, the selection will set to `fallbackSelection` iff
+ the number of matching elements is zero.
+
+ `iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element.
+
+ Example:
+
+```html
+ <style>
+ .iron-selected {
+ background: #eee;
+ }
+ </style>
+
+ ...
+
+ <iron-selector selected="0">
+ <div>Item 1</div>
+ <div>Item 2</div>
+ <div>Item 3</div>
+ </iron-selector>
+```
+
+### Notable breaking changes between 1.x and 2.x (hybrid):
+
+#### IronSelectableBehavior
+
+- IronSelectableBehavior no longer updates its list of items synchronously
+ when it is connected to avoid triggering a situation introduced in the
+ Custom Elements v1 spec that might cause custom element reactions to be
+ called later than expected.
+
+ If you are using an element with IronSelectableBehavior and ...
+ 1. are reading or writing properties of the element that depend on its
+ items (`items`, `selectedItems`, etc.)
+ 1. are performing these accesses after the element is created or connected
+ (attached) either **synchronously** or **after a timeout**
+
+ ... you should wait for the element to dispatch an `iron-items-changed`
+ event instead.
+- `Polymer.dom.flush()` no longer triggers the observer used by
+ IronSelectableBehavior to watch for changes to its items. You can call
+ `forceSynchronousItemUpdate` instead or, preferably, listen for the
+ `iron-items-changed` event.
+
+#### IronMultiSelectableBehavior
+
+- All breaking changes to IronSelectableBehavior listed above apply to
+ IronMultiSelectableBehavior.
+- `selectedValues` and `selectedItems` now have empty arrays as default
+ values. This may cause bindings or observers of these properties to
+ trigger at start up when they previously had not.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/bower.json
new file mode 100755
index 00000000000..7a233b076f4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/bower.json
@@ -0,0 +1,59 @@
+{
+ "name": "iron-selector",
+ "version": "2.0.1",
+ "description": "Manages a set of elements that can be selected",
+ "private": true,
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "main": [
+ "iron-selector.html",
+ "iron-multi-selectable.html",
+ "iron-selectable.html",
+ "iron-selection.html"
+ ],
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "selector"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-selector.git"
+ },
+ "homepage": "https://github.com/PolymerElements/iron-selector",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.2.5",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.4",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/demo/index.html
new file mode 100644
index 00000000000..b4b84dc2c15
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/demo/index.html
@@ -0,0 +1,104 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+ <head>
+
+ <title>iron-selector</title>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../iron-selector.html">
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ </head>
+ <body unresolved>
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ iron-selector > * {
+ padding: 8px;
+ }
+
+ .iron-selected {
+ background-color: var(--google-blue-500);
+ color: white;
+ }
+ </style>
+ </custom-style>
+
+ <div class="vertical-section-container centered">
+ <h3>Basic</h3>
+ <demo-snippet>
+ <template>
+ <iron-selector selected="3">
+ <div>Item 0</div>
+ <div>Item 1</div>
+ <div>Item 2</div>
+ <div>Item 3</div>
+ <div>Item 4</div>
+ </iron-selector>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>multi</code> to enable multiple selection.</h3>
+ <demo-snippet>
+ <template>
+ <iron-selector multi selected-values='[0,2]'>
+ <div>Item 0</div>
+ <div>Item 1</div>
+ <div>Item 2</div>
+ <div>Item 3</div>
+ <div>Item 4</div>
+ </iron-selector>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use <code>attr-for-selected</code> to specify the attribute of the
+ selectable elements containing the selection key.
+ </h3>
+ <demo-snippet>
+ <template>
+ <iron-selector selected="bar" attr-for-selected="name">
+ <div name="foo">Foo</div>
+ <div name="bar">Bar</div>
+ <div name="baz">Baz</div>
+ <div name="qux">Qux</div>
+ <div name="quux">Quux</div>
+ </iron-selector>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use <code>fallback-selection</code> to provide an option to be selected
+ when all options are deselected or all selected options are invalid.
+ </h3>
+ <demo-snippet>
+ <template>
+ <iron-selector multi selected="an-unknown-key" attr-for-selected="name" fallback-selection="default">
+ <div name="foo">Foo</div>
+ <div name="bar">Bar</div>
+ <div name="baz">Baz</div>
+ <div name="qux">Qux</div>
+ <div name="quux">Quux</div>
+ <div name="default">Default</div>
+ </iron-selector>
+ </template>
+ </demo-snippet>
+ </div>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/gen-tsd.json
new file mode 100644
index 00000000000..ff975995907
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/gen-tsd.json
@@ -0,0 +1,7 @@
+{
+ "addReferences": {
+ "iron-selection.d.ts": [
+ "iron-selection-extra.d.ts"
+ ]
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/index.html
new file mode 100755
index 00000000000..741693ce702
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <title>iron-selector</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.d.ts
new file mode 100644
index 00000000000..04f939c0903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.d.ts
@@ -0,0 +1,56 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-multi-selectable.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="iron-selectable.d.ts" />
+
+declare namespace Polymer {
+
+ interface IronMultiSelectableBehavior extends Polymer.IronSelectableBehavior {
+
+ /**
+ * UNUSED, FOR API COMPATIBILITY
+ */
+ readonly _shouldUpdateSelection: any;
+
+ /**
+ * If true, multiple selections are allowed.
+ */
+ multi: boolean|null|undefined;
+
+ /**
+ * Gets or sets the selected elements. This is used instead of `selected` when `multi`
+ * is true.
+ */
+ selectedValues: any[]|null|undefined;
+
+ /**
+ * Returns an array of currently selected items.
+ */
+ readonly selectedItems: any[]|null|undefined;
+
+ /**
+ * Selects the given value. If the `multi` property is true, then the selected state of the
+ * `value` will be toggled; otherwise the `value` will be selected.
+ *
+ * @param value the value to select.
+ */
+ select(value: string|number): void;
+ _updateAttrForSelected(): void;
+ _updateSelected(): void;
+ _selectionChange(): void;
+ multiChanged(multi: any): void;
+ _selectMulti(values: any): void;
+ _toggleSelected(value: any): void;
+ _valuesToItems(values: any): any;
+ }
+
+ const IronMultiSelectableBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.html
new file mode 100644
index 00000000000..96051d8b36d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-multi-selectable.html
@@ -0,0 +1,169 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="iron-selectable.html">
+
+<script>
+ /**
+ * @polymerBehavior Polymer.IronMultiSelectableBehavior
+ */
+ Polymer.IronMultiSelectableBehaviorImpl = {
+ properties: {
+
+ /**
+ * If true, multiple selections are allowed.
+ */
+ multi: {
+ type: Boolean,
+ value: false,
+ observer: 'multiChanged'
+ },
+
+ /**
+ * Gets or sets the selected elements. This is used instead of `selected` when `multi`
+ * is true.
+ */
+ selectedValues: {
+ type: Array,
+ notify: true,
+ value: function() {
+ return [];
+ }
+ },
+
+ /**
+ * Returns an array of currently selected items.
+ */
+ selectedItems: {
+ type: Array,
+ readOnly: true,
+ notify: true,
+ value: function() {
+ return [];
+ }
+ },
+
+ },
+
+ observers: [
+ '_updateSelected(selectedValues.splices)'
+ ],
+
+ /**
+ * Selects the given value. If the `multi` property is true, then the selected state of the
+ * `value` will be toggled; otherwise the `value` will be selected.
+ *
+ * @method select
+ * @param {string|number} value the value to select.
+ */
+ select: function(value) {
+ if (this.multi) {
+ this._toggleSelected(value);
+ } else {
+ this.selected = value;
+ }
+ },
+
+ multiChanged: function(multi) {
+ this._selection.multi = multi;
+ this._updateSelected();
+ },
+
+ // UNUSED, FOR API COMPATIBILITY
+ get _shouldUpdateSelection() {
+ return this.selected != null ||
+ (this.selectedValues != null && this.selectedValues.length);
+ },
+
+ _updateAttrForSelected: function() {
+ if (!this.multi) {
+ Polymer.IronSelectableBehavior._updateAttrForSelected.apply(this);
+ } else if (this.selectedItems && this.selectedItems.length > 0) {
+ this.selectedValues = this.selectedItems.map(function(selectedItem) {
+ return this._indexToValue(this.indexOf(selectedItem));
+ }, this).filter(function(unfilteredValue) {
+ return unfilteredValue != null;
+ }, this);
+ }
+ },
+
+ _updateSelected: function() {
+ if (this.multi) {
+ this._selectMulti(this.selectedValues);
+ } else {
+ this._selectSelected(this.selected);
+ }
+ },
+
+ _selectMulti: function(values) {
+ values = values || [];
+
+ var selectedItems = (this._valuesToItems(values) || []).filter(function(item) {
+ return item !== null && item !== undefined;
+ });
+
+ // clear all but the current selected items
+ this._selection.clear(selectedItems);
+
+ // select only those not selected yet
+ for (var i = 0; i < selectedItems.length; i++) {
+ this._selection.setItemSelected(selectedItems[i], true);
+ }
+
+ // Check for items, since this array is populated only when attached
+ if (this.fallbackSelection && !this._selection.get().length) {
+ var fallback = this._valueToItem(this.fallbackSelection);
+ if (fallback) {
+ this.select(this.fallbackSelection);
+ }
+ }
+ },
+
+ _selectionChange: function() {
+ var s = this._selection.get();
+ if (this.multi) {
+ this._setSelectedItems(s);
+ this._setSelectedItem(s.length ? s[0] : null);
+ } else {
+ if (s !== null && s !== undefined) {
+ this._setSelectedItems([s]);
+ this._setSelectedItem(s);
+ } else {
+ this._setSelectedItems([]);
+ this._setSelectedItem(null);
+ }
+ }
+ },
+
+ _toggleSelected: function(value) {
+ var i = this.selectedValues.indexOf(value);
+ var unselected = i < 0;
+ if (unselected) {
+ this.push('selectedValues',value);
+ } else {
+ this.splice('selectedValues',i,1);
+ }
+ },
+
+ _valuesToItems: function(values) {
+ return (values == null) ? null : values.map(function(value) {
+ return this._valueToItem(value);
+ }, this);
+ }
+ };
+
+ /** @polymerBehavior */
+ Polymer.IronMultiSelectableBehavior = [
+ Polymer.IronSelectableBehavior,
+ Polymer.IronMultiSelectableBehaviorImpl
+ ];
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.d.ts
new file mode 100644
index 00000000000..57833d82a83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.d.ts
@@ -0,0 +1,155 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-selectable.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="iron-selection.d.ts" />
+
+declare namespace Polymer {
+
+ interface IronSelectableBehavior {
+
+ /**
+ * If you want to use an attribute value or property of an element for
+ * `selected` instead of the index, set this to the name of the attribute
+ * or property. Hyphenated values are converted to camel case when used to
+ * look up the property of a selectable element. Camel cased values are
+ * *not* converted to hyphenated values for attribute lookup. It's
+ * recommended that you provide the hyphenated form of the name so that
+ * selection works in both cases. (Use `attr-or-property-name` instead of
+ * `attrOrPropertyName`.)
+ */
+ attrForSelected: string|null|undefined;
+
+ /**
+ * Gets or sets the selected element. The default is to use the index of the item.
+ */
+ selected: string|number;
+
+ /**
+ * Returns the currently selected item.
+ */
+ readonly selectedItem: object|null;
+
+ /**
+ * The event that fires from items when they are selected. Selectable
+ * will listen for this event from items and update the selection state.
+ * Set to empty string to listen to no events.
+ */
+ activateEvent: string|null|undefined;
+
+ /**
+ * This is a CSS selector string. If this is set, only items that match the CSS selector
+ * are selectable.
+ */
+ selectable: string|null|undefined;
+
+ /**
+ * The class to set on elements when selected.
+ */
+ selectedClass: string|null|undefined;
+
+ /**
+ * The attribute to set on elements when selected.
+ */
+ selectedAttribute: string|null|undefined;
+
+ /**
+ * Default fallback if the selection based on selected with `attrForSelected`
+ * is not found.
+ */
+ fallbackSelection: string|null|undefined;
+
+ /**
+ * The list of items from which a selection can be made.
+ */
+ readonly items: any[]|null|undefined;
+
+ /**
+ * The set of excluded elements where the key is the `localName`
+ * of the element that will be ignored from the item list.
+ */
+ _excludedLocalNames: object|null|undefined;
+
+ /**
+ * UNUSED, FOR API COMPATIBILITY
+ */
+ readonly _shouldUpdateSelection: any;
+ created(): void;
+ attached(): void;
+ detached(): void;
+
+ /**
+ * Returns the index of the given item.
+ *
+ * @returns Returns the index of the item
+ */
+ indexOf(item: object|null): any;
+
+ /**
+ * Selects the given value.
+ *
+ * @param value the value to select.
+ */
+ select(value: string|number): void;
+
+ /**
+ * Selects the previous item.
+ */
+ selectPrevious(): void;
+
+ /**
+ * Selects the next item.
+ */
+ selectNext(): void;
+
+ /**
+ * Selects the item at the given index.
+ */
+ selectIndex(index: any): void;
+
+ /**
+ * Force a synchronous update of the `items` property.
+ *
+ * NOTE: Consider listening for the `iron-items-changed` event to respond to
+ * updates to the set of selectable items after updates to the DOM list and
+ * selection state have been made.
+ *
+ * WARNING: If you are using this method, you should probably consider an
+ * alternate approach. Synchronously querying for items is potentially
+ * slow for many use cases. The `items` property will update asynchronously
+ * on its own to reflect selectable items in the DOM.
+ */
+ forceSynchronousItemUpdate(): void;
+ _checkFallback(): void;
+ _addListener(eventName: any): void;
+ _removeListener(eventName: any): void;
+ _activateEventChanged(eventName: any, old: any): void;
+ _updateItems(): void;
+ _updateAttrForSelected(): void;
+ _updateSelected(): void;
+ _selectSelected(selected: any): void;
+ _filterItem(node: any): any;
+ _valueToItem(value: any): any;
+ _valueToIndex(value: any): any;
+ _indexToValue(index: any): any;
+ _valueForItem(item: any): any;
+ _applySelection(item: any, isSelected: any): void;
+ _selectionChange(): void;
+
+ /**
+ * observe items change under the given node.
+ */
+ _observeItems(node: any): any;
+ _activateHandler(e: any): void;
+ _itemActivate(value: any, item: any): void;
+ }
+
+ const IronSelectableBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.html
new file mode 100644
index 00000000000..30cd1e7be9d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selectable.html
@@ -0,0 +1,410 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="iron-selection.html">
+
+<script>
+ /**
+ * @polymerBehavior Polymer.IronSelectableBehavior
+ */
+ Polymer.IronSelectableBehavior = {
+
+ /**
+ * Fired when iron-selector is activated (selected or deselected).
+ * It is fired before the selected items are changed.
+ * Cancel the event to abort selection.
+ *
+ * @event iron-activate
+ */
+
+ /**
+ * Fired when an item is selected
+ *
+ * @event iron-select
+ */
+
+ /**
+ * Fired when an item is deselected
+ *
+ * @event iron-deselect
+ */
+
+ /**
+ * Fired when the list of selectable items changes (e.g., items are
+ * added or removed). The detail of the event is a mutation record that
+ * describes what changed.
+ *
+ * @event iron-items-changed
+ */
+
+ properties: {
+
+ /**
+ * If you want to use an attribute value or property of an element for
+ * `selected` instead of the index, set this to the name of the attribute
+ * or property. Hyphenated values are converted to camel case when used to
+ * look up the property of a selectable element. Camel cased values are
+ * *not* converted to hyphenated values for attribute lookup. It's
+ * recommended that you provide the hyphenated form of the name so that
+ * selection works in both cases. (Use `attr-or-property-name` instead of
+ * `attrOrPropertyName`.)
+ */
+ attrForSelected: {
+ type: String,
+ value: null
+ },
+
+ /**
+ * Gets or sets the selected element. The default is to use the index of the item.
+ * @type {string|number}
+ */
+ selected: {
+ type: String,
+ notify: true
+ },
+
+ /**
+ * Returns the currently selected item.
+ *
+ * @type {?Object}
+ */
+ selectedItem: {
+ type: Object,
+ readOnly: true,
+ notify: true
+ },
+
+ /**
+ * The event that fires from items when they are selected. Selectable
+ * will listen for this event from items and update the selection state.
+ * Set to empty string to listen to no events.
+ */
+ activateEvent: {
+ type: String,
+ value: 'tap',
+ observer: '_activateEventChanged'
+ },
+
+ /**
+ * This is a CSS selector string. If this is set, only items that match the CSS selector
+ * are selectable.
+ */
+ selectable: String,
+
+ /**
+ * The class to set on elements when selected.
+ */
+ selectedClass: {
+ type: String,
+ value: 'iron-selected'
+ },
+
+ /**
+ * The attribute to set on elements when selected.
+ */
+ selectedAttribute: {
+ type: String,
+ value: null
+ },
+
+ /**
+ * Default fallback if the selection based on selected with `attrForSelected`
+ * is not found.
+ */
+ fallbackSelection: {
+ type: String,
+ value: null
+ },
+
+ /**
+ * The list of items from which a selection can be made.
+ */
+ items: {
+ type: Array,
+ readOnly: true,
+ notify: true,
+ value: function() {
+ return [];
+ }
+ },
+
+ /**
+ * The set of excluded elements where the key is the `localName`
+ * of the element that will be ignored from the item list.
+ *
+ * @default {template: 1}
+ */
+ _excludedLocalNames: {
+ type: Object,
+ value: function() {
+ return {
+ 'template': 1,
+ 'dom-bind': 1,
+ 'dom-if': 1,
+ 'dom-repeat': 1,
+ };
+ }
+ }
+ },
+
+ observers: [
+ '_updateAttrForSelected(attrForSelected)',
+ '_updateSelected(selected)',
+ '_checkFallback(fallbackSelection)'
+ ],
+
+ created: function() {
+ this._bindFilterItem = this._filterItem.bind(this);
+ this._selection = new Polymer.IronSelection(this._applySelection.bind(this));
+ },
+
+ attached: function() {
+ this._observer = this._observeItems(this);
+ this._addListener(this.activateEvent);
+ },
+
+ detached: function() {
+ if (this._observer) {
+ Polymer.dom(this).unobserveNodes(this._observer);
+ }
+ this._removeListener(this.activateEvent);
+ },
+
+ /**
+ * Returns the index of the given item.
+ *
+ * @method indexOf
+ * @param {Object} item
+ * @returns Returns the index of the item
+ */
+ indexOf: function(item) {
+ return this.items ? this.items.indexOf(item) : -1;
+ },
+
+ /**
+ * Selects the given value.
+ *
+ * @method select
+ * @param {string|number} value the value to select.
+ */
+ select: function(value) {
+ this.selected = value;
+ },
+
+ /**
+ * Selects the previous item.
+ *
+ * @method selectPrevious
+ */
+ selectPrevious: function() {
+ var length = this.items.length;
+ var index = (Number(this._valueToIndex(this.selected)) - 1 + length) % length;
+ this.selected = this._indexToValue(index);
+ },
+
+ /**
+ * Selects the next item.
+ *
+ * @method selectNext
+ */
+ selectNext: function() {
+ var index = (Number(this._valueToIndex(this.selected)) + 1) % this.items.length;
+ this.selected = this._indexToValue(index);
+ },
+
+ /**
+ * Selects the item at the given index.
+ *
+ * @method selectIndex
+ */
+ selectIndex: function(index) {
+ this.select(this._indexToValue(index));
+ },
+
+ /**
+ * Force a synchronous update of the `items` property.
+ *
+ * NOTE: Consider listening for the `iron-items-changed` event to respond to
+ * updates to the set of selectable items after updates to the DOM list and
+ * selection state have been made.
+ *
+ * WARNING: If you are using this method, you should probably consider an
+ * alternate approach. Synchronously querying for items is potentially
+ * slow for many use cases. The `items` property will update asynchronously
+ * on its own to reflect selectable items in the DOM.
+ */
+ forceSynchronousItemUpdate: function() {
+ if (this._observer && typeof this._observer.flush === "function") {
+ // NOTE(bicknellr): `Polymer.dom.flush` above is no longer sufficient to
+ // trigger `observeNodes` callbacks. Polymer 2.x returns an object from
+ // `observeNodes` with a `flush` that synchronously gives the callback
+ // any pending MutationRecords (retrieved with `takeRecords`). Any case
+ // where ShadyDOM flushes were expected to synchronously trigger item
+ // updates will now require calling `forceSynchronousItemUpdate`.
+ this._observer.flush();
+ } else {
+ this._updateItems();
+ }
+ },
+
+ // UNUSED, FOR API COMPATIBILITY
+ get _shouldUpdateSelection() {
+ return this.selected != null;
+ },
+
+ _checkFallback: function() {
+ this._updateSelected();
+ },
+
+ _addListener: function(eventName) {
+ this.listen(this, eventName, '_activateHandler');
+ },
+
+ _removeListener: function(eventName) {
+ this.unlisten(this, eventName, '_activateHandler');
+ },
+
+ _activateEventChanged: function(eventName, old) {
+ this._removeListener(old);
+ this._addListener(eventName);
+ },
+
+ _updateItems: function() {
+ var nodes = Polymer.dom(this).queryDistributedElements(this.selectable || '*');
+ nodes = Array.prototype.filter.call(nodes, this._bindFilterItem);
+ this._setItems(nodes);
+ },
+
+ _updateAttrForSelected: function() {
+ if (this.selectedItem) {
+ this.selected = this._valueForItem(this.selectedItem);
+ }
+ },
+
+ _updateSelected: function() {
+ this._selectSelected(this.selected);
+ },
+
+ _selectSelected: function(selected) {
+ if (!this.items) {
+ return;
+ }
+
+ var item = this._valueToItem(this.selected);
+ if (item) {
+ this._selection.select(item);
+ } else {
+ this._selection.clear();
+ }
+ // Check for items, since this array is populated only when attached
+ // Since Number(0) is falsy, explicitly check for undefined
+ if (this.fallbackSelection && this.items.length && (this._selection.get() === undefined)) {
+ this.selected = this.fallbackSelection;
+ }
+ },
+
+ _filterItem: function(node) {
+ return !this._excludedLocalNames[node.localName];
+ },
+
+ _valueToItem: function(value) {
+ return (value == null) ? null : this.items[this._valueToIndex(value)];
+ },
+
+ _valueToIndex: function(value) {
+ if (this.attrForSelected) {
+ for (var i = 0, item; item = this.items[i]; i++) {
+ if (this._valueForItem(item) == value) {
+ return i;
+ }
+ }
+ } else {
+ return Number(value);
+ }
+ },
+
+ _indexToValue: function(index) {
+ if (this.attrForSelected) {
+ var item = this.items[index];
+ if (item) {
+ return this._valueForItem(item);
+ }
+ } else {
+ return index;
+ }
+ },
+
+ _valueForItem: function(item) {
+ if (!item) {
+ return null;
+ }
+ if (!this.attrForSelected) {
+ var i = this.indexOf(item);
+ return i === -1 ? null : i;
+ }
+ var propValue = item[Polymer.CaseMap.dashToCamelCase(this.attrForSelected)];
+ return propValue != undefined ? propValue : item.getAttribute(this.attrForSelected);
+ },
+
+ _applySelection: function(item, isSelected) {
+ if (this.selectedClass) {
+ this.toggleClass(this.selectedClass, isSelected, item);
+ }
+ if (this.selectedAttribute) {
+ this.toggleAttribute(this.selectedAttribute, isSelected, item);
+ }
+ this._selectionChange();
+ this.fire('iron-' + (isSelected ? 'select' : 'deselect'), {item: item});
+ },
+
+ _selectionChange: function() {
+ this._setSelectedItem(this._selection.get());
+ },
+
+ // observe items change under the given node.
+ _observeItems: function(node) {
+ return Polymer.dom(node).observeNodes(function(mutation) {
+ this._updateItems();
+ this._updateSelected();
+
+ // Let other interested parties know about the change so that
+ // we don't have to recreate mutation observers everywhere.
+ this.fire('iron-items-changed', mutation, {
+ bubbles: false,
+ cancelable: false
+ });
+ });
+ },
+
+ _activateHandler: function(e) {
+ var t = e.target;
+ var items = this.items;
+ while (t && t != this) {
+ var i = items.indexOf(t);
+ if (i >= 0) {
+ var value = this._indexToValue(i);
+ this._itemActivate(value, t);
+ return;
+ }
+ t = t.parentNode;
+ }
+ },
+
+ _itemActivate: function(value, item) {
+ if (!this.fire('iron-activate',
+ {selected: value, item: item}, {cancelable: true}).defaultPrevented) {
+ this.select(value);
+ }
+ }
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection-extra.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection-extra.d.ts
new file mode 100644
index 00000000000..b29b6c5b718
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection-extra.d.ts
@@ -0,0 +1,60 @@
+declare namespace Polymer {
+
+ class IronSelection {
+ constructor(selectCallback: Function);
+
+ /**
+ * If true, multiple selections are allowed.
+ */
+ multi: boolean;
+
+ /**
+ * Retrieves the selected item(s).
+ *
+ * @returns Returns the selected item(s). If the multi property is true,
+ * `get` will return an array, otherwise it will return
+ * the selected item or undefined if there is no selection.
+ */
+ get(): any|any[]|undefined;
+
+ /**
+ * Clears all the selection except the ones indicated.
+ *
+ * @param excludes items to be excluded.
+ */
+ clear(excludes: any[]|null): void;
+
+ /**
+ * Indicates if a given item is selected.
+ *
+ * @param item The item whose selection state should be checked.
+ * @returns Returns true if `item` is selected.
+ */
+ isSelected(item: any): boolean;
+
+ /**
+ * Sets the selection state for a given item to either selected or
+ * deselected.
+ *
+ * @param item The item to select.
+ * @param isSelected True for selected, false for deselected.
+ */
+ setItemSelected(item: any, isSelected: boolean): void;
+
+ /**
+ * Sets the selection state for a given item. If the `multi` property
+ * is true, then the selected state of `item` will be toggled; otherwise
+ * the `item` will be selected.
+ *
+ * @param item The item to select.
+ */
+ select(item: any): void;
+
+ /**
+ * Toggles the selection state for `item`.
+ *
+ * @param item The item to toggle.
+ */
+ toggle(item: any): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.d.ts
new file mode 100644
index 00000000000..2209ec6834a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-selection.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="iron-selection-extra.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.html
new file mode 100644
index 00000000000..0bca07dabf1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selection.html
@@ -0,0 +1,120 @@
+
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+
+ /**
+ * @param {!Function} selectCallback
+ * @constructor
+ * @suppress {missingProvide}
+ */
+ Polymer.IronSelection = function(selectCallback) {
+ this.selection = [];
+ this.selectCallback = selectCallback;
+ };
+
+ Polymer.IronSelection.prototype = {
+
+ /**
+ * Retrieves the selected item(s).
+ *
+ * @method get
+ * @returns Returns the selected item(s). If the multi property is true,
+ * `get` will return an array, otherwise it will return
+ * the selected item or undefined if there is no selection.
+ */
+ get: function() {
+ return this.multi ? this.selection.slice() : this.selection[0];
+ },
+
+ /**
+ * Clears all the selection except the ones indicated.
+ *
+ * @method clear
+ * @param {Array} excludes items to be excluded.
+ */
+ clear: function(excludes) {
+ this.selection.slice().forEach(function(item) {
+ if (!excludes || excludes.indexOf(item) < 0) {
+ this.setItemSelected(item, false);
+ }
+ }, this);
+ },
+
+ /**
+ * Indicates if a given item is selected.
+ *
+ * @method isSelected
+ * @param {*} item The item whose selection state should be checked.
+ * @returns Returns true if `item` is selected.
+ */
+ isSelected: function(item) {
+ return this.selection.indexOf(item) >= 0;
+ },
+
+ /**
+ * Sets the selection state for a given item to either selected or deselected.
+ *
+ * @method setItemSelected
+ * @param {*} item The item to select.
+ * @param {boolean} isSelected True for selected, false for deselected.
+ */
+ setItemSelected: function(item, isSelected) {
+ if (item != null) {
+ if (isSelected !== this.isSelected(item)) {
+ // proceed to update selection only if requested state differs from current
+ if (isSelected) {
+ this.selection.push(item);
+ } else {
+ var i = this.selection.indexOf(item);
+ if (i >= 0) {
+ this.selection.splice(i, 1);
+ }
+ }
+ if (this.selectCallback) {
+ this.selectCallback(item, isSelected);
+ }
+ }
+ }
+ },
+
+ /**
+ * Sets the selection state for a given item. If the `multi` property
+ * is true, then the selected state of `item` will be toggled; otherwise
+ * the `item` will be selected.
+ *
+ * @method select
+ * @param {*} item The item to select.
+ */
+ select: function(item) {
+ if (this.multi) {
+ this.toggle(item);
+ } else if (this.get() !== item) {
+ this.setItemSelected(this.get(), false);
+ this.setItemSelected(item, true);
+ }
+ },
+
+ /**
+ * Toggles the selection state for `item`.
+ *
+ * @method toggle
+ * @param {*} item The item to toggle.
+ */
+ toggle: function(item) {
+ this.setItemSelected(item, !this.isSelected(item));
+ }
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.d.ts
new file mode 100644
index 00000000000..5c28458d5f9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.d.ts
@@ -0,0 +1,19 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-selector.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="iron-multi-selectable.d.ts" />
+
+interface IronSelectorElement extends Polymer.Element, Polymer.IronMultiSelectableBehavior {
+}
+
+interface HTMLElementTagNameMap {
+ "iron-selector": IronSelectorElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.html
new file mode 100644
index 00000000000..0ecc9fbcd19
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/iron-selector.html
@@ -0,0 +1,87 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="iron-multi-selectable.html">
+
+<script>
+ /**
+ `iron-selector` is an element which can be used to manage a list of elements
+ that can be selected. Tapping on the item will make the item selected. The `selected` indicates
+ which item is being selected. The default is to use the index of the item.
+
+ Example:
+
+ <iron-selector selected="0">
+ <div>Item 1</div>
+ <div>Item 2</div>
+ <div>Item 3</div>
+ </iron-selector>
+
+ If you want to use the attribute value of an element for `selected` instead of the index,
+ set `attrForSelected` to the name of the attribute. For example, if you want to select item by
+ `name`, set `attrForSelected` to `name`.
+
+ Example:
+
+ <iron-selector attr-for-selected="name" selected="foo">
+ <div name="foo">Foo</div>
+ <div name="bar">Bar</div>
+ <div name="zot">Zot</div>
+ </iron-selector>
+
+ You can specify a default fallback with `fallbackSelection` in case the `selected` attribute does
+ not match the `attrForSelected` attribute of any elements.
+
+ Example:
+
+ <iron-selector attr-for-selected="name" selected="non-existing"
+ fallback-selection="default">
+ <div name="foo">Foo</div>
+ <div name="bar">Bar</div>
+ <div name="default">Default</div>
+ </iron-selector>
+
+ Note: When the selector is multi, the selection will set to `fallbackSelection` iff
+ the number of matching elements is zero.
+
+ `iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element.
+
+ Example:
+
+ <style>
+ .iron-selected {
+ background: #eee;
+ }
+ </style>
+
+ ...
+
+ <iron-selector selected="0">
+ <div>Item 1</div>
+ <div>Item 2</div>
+ <div>Item 3</div>
+ </iron-selector>
+
+ @demo demo/index.html
+ */
+
+ Polymer({
+
+ is: 'iron-selector',
+
+ behaviors: [
+ Polymer.IronMultiSelectableBehavior
+ ]
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package-lock.json
new file mode 100644
index 00000000000..22a1350a4de
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-selector",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package.json
new file mode 100644
index 00000000000..a99bbc4e5c8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-selector/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-selector",
+ "private": true,
+ "description": "Manages a set of elements that can be selected",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-selector.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.bower.json
new file mode 100644
index 00000000000..7ba23462ccb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.bower.json
@@ -0,0 +1,66 @@
+{
+ "name": "iron-validatable-behavior",
+ "version": "2.1.0",
+ "description": "Provides a behavior for an element that validates user input",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "main": "iron-validatable-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-validatable-behavior.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-validatable-behavior",
+ "ignore": [],
+ "dependencies": {
+ "iron-meta": "PolymerElements/iron-meta#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-meta": "PolymerElements/iron-meta#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.4",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "4b6c1c53e44a3bbb31fcfd14ede2234645518c96"
+ },
+ "_source": "https://github.com/PolymerElements/iron-validatable-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/iron-validatable-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..a69a2fdc20e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/iron-validatable-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.travis.yml
new file mode 100644
index 00000000000..1a08797722a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ kwLs1FMf/hBnbxItbOJzbIdGtPDK2R2dngleJPgXLW9ExzpGHPgOmWsvxWL2BzlxlzZgzwpmUhnnJdxHlo8AZtQl1uq6NWl/e3oj9oeenFugF60eIcd01ak4QmhBsk3/20O426QQsz2WckGZRGcudBz5Zj2it3t5cbH3pAi90jo=
+ - secure: >-
+ hGl3bsjz9dbKTA/bAgfdrFMlT6VawxFljIPqX6zJD556jhpYxtkno278eIW8uLlIGC5nXRTWXQzWrRhN8i9osnqw1RFhW8C9lH+TLHEkYMvDnEOp9sZ8Amv6j8FdNibcDP8IPTo2PmIRwBK1nFp0VqhcQu/Eq7WUFolSns9E27k=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/README.md
new file mode 100644
index 00000000000..97032e894eb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/README.md
@@ -0,0 +1,46 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+iron-validatable-behavior.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/iron-validatable-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/iron-validatable-behavior)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/iron-validatable-behavior)_
+
+
+## Polymer.IronValidatableBehavior
+
+`Use Polymer.IronValidatableBehavior` to implement an element that validates user input.
+Use the related `Polymer.IronValidatorBehavior` to add custom validation logic to an iron-input.
+
+By default, an `<iron-form>` element validates its fields when the user presses the submit button.
+To validate a form imperatively, call the form's `validate()` method, which in turn will
+call `validate()` on all its children. By using `Polymer.IronValidatableBehavior`, your
+custom element will get a public `validate()`, which
+will return the validity of the element, and a corresponding `invalid` attribute,
+which can be used for styling.
+
+To implement the custom validation logic of your element, you must override
+the protected `_getValidity()` method of this behaviour, rather than `validate()`.
+See [this](https://github.com/PolymerElements/iron-form/blob/master/demo/simple-element.html)
+for an example.
+
+### Changes in 2.0
+- `validate()` no longer requires a `value` parameter to be passed, and will use the element's `value` property if it exists
+- `validatorType` and `validatorName` were unused and have been removed
+
+### Accessibility
+
+Changing the `invalid` property, either manually or by calling `validate()` will update the
+`aria-invalid` attribute.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/bower.json
new file mode 100644
index 00000000000..a2ae6cff3c0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/bower.json
@@ -0,0 +1,57 @@
+{
+ "name": "iron-validatable-behavior",
+ "version": "2.0.0",
+ "description": "Provides a behavior for an element that validates user input",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "main": "iron-validatable-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-validatable-behavior.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-validatable-behavior",
+ "ignore": [],
+ "dependencies": {
+ "iron-meta": "PolymerElements/iron-meta#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-meta": "PolymerElements/iron-meta#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.4",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/cats-only.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/cats-only.html
new file mode 100644
index 00000000000..83ef9ba617f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/cats-only.html
@@ -0,0 +1,46 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-validator-behavior/iron-validator-behavior.html">
+
+<script>
+
+ Polymer({
+
+ is: 'cats-only',
+
+ behaviors: [
+ Polymer.IronValidatorBehavior
+ ],
+
+ validateObject: function(obj) {
+ var valid = true;
+ for (key in obj) {
+ if (obj[key] !== 'cats') {
+ valid = false;
+ break;
+ }
+ }
+ return valid;
+ },
+
+ validate: function(values) {
+ if (typeof values === 'object') {
+ return this.validateObject(values);
+ } else {
+ var value = Array.isArray(values) ? values.join('') : values;
+ return value.match(/^(c|ca|cat|cats)?$/) !== null;
+ }
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/index.html
new file mode 100644
index 00000000000..3ea883a5eea
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/index.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>iron-validatable-behavior demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="cats-only.html">
+ <link rel="import" href="validatable-input.html">
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles"></style>
+ </custom-style>
+</head>
+<body>
+ <div class="vertical-section-container centered">
+ <h3>The <code>cats-only</code> validator only accepts the string "cats" and
+ its suffixes ("c", "ca", "cat").</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ validatable-input {
+ border: 1px solid var(--google-green-500);
+ color: var(--google-green-500);
+ }
+ validatable-input[invalid] {
+ border: 1px solid var(--google-red-500);
+ color: var(--google-red-500);
+ }
+ </style>
+ </custom-style>
+
+ <cats-only></cats-only>
+ <validatable-input validator="cats-only"></validatable-input>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/validatable-input.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/validatable-input.html
new file mode 100644
index 00000000000..82803f04c13
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/demo/validatable-input.html
@@ -0,0 +1,53 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../iron-validatable-behavior.html">
+
+<dom-module id="validatable-input">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ }
+ input {
+ padding: 0.4em;
+ font-size: 16px;
+ margin: 5px;
+ color: inherit;
+ }
+ </style>
+ <input id="input">
+ </template>
+ <script>
+ Polymer({
+ is: 'validatable-input',
+ properties: {
+ invalid: {
+ reflectToAttribute: true,
+ type: Boolean,
+ value: false
+ }
+ },
+
+ behaviors: [
+ Polymer.IronValidatableBehavior
+ ],
+
+ listeners: {
+ 'input': '_onInput'
+ },
+
+ _onInput: function() {
+ this.invalid = !this.validate(this.$.input.value);
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/index.html
new file mode 100644
index 00000000000..cfaa5b17598
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>iron-validatable-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.d.ts
new file mode 100644
index 00000000000..e29ab43b844
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.d.ts
@@ -0,0 +1,78 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * iron-validatable-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-meta/iron-meta.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Use Polymer.IronValidatableBehavior` to implement an element that validates user input.
+ * Use the related `Polymer.IronValidatorBehavior` to add custom validation logic to an iron-input.
+ *
+ * By default, an `<iron-form>` element validates its fields when the user presses the submit button.
+ * To validate a form imperatively, call the form's `validate()` method, which in turn will
+ * call `validate()` on all its children. By using `Polymer.IronValidatableBehavior`, your
+ * custom element will get a public `validate()`, which
+ * will return the validity of the element, and a corresponding `invalid` attribute,
+ * which can be used for styling.
+ *
+ * To implement the custom validation logic of your element, you must override
+ * the protected `_getValidity()` method of this behaviour, rather than `validate()`.
+ * See [this](https://github.com/PolymerElements/iron-form/blob/master/demo/simple-element.html)
+ * for an example.
+ *
+ * ### Accessibility
+ *
+ * Changing the `invalid` property, either manually or by calling `validate()` will update the
+ * `aria-invalid` attribute.
+ */
+ interface IronValidatableBehavior {
+
+ /**
+ * Name of the validator to use.
+ */
+ validator: string|null|undefined;
+
+ /**
+ * True if the last call to `validate` is invalid.
+ */
+ invalid: boolean|null|undefined;
+
+ /**
+ * Recompute this every time it's needed, because we don't know if the
+ * underlying IronValidatableBehaviorMeta has changed.
+ */
+ readonly _validator: any;
+ registered(): void;
+ _invalidChanged(): void;
+
+ /**
+ * @returns True if the validator `validator` exists.
+ */
+ hasValidator(): boolean;
+
+ /**
+ * Returns true if the `value` is valid, and updates `invalid`. If you want
+ * your element to have custom validation logic, do not override this method;
+ * override `_getValidity(value)` instead.
+ *
+ * @param value Deprecated: The value to be validated. By default,
+ * it is passed to the validator's `validate()` function, if a validator is set.
+ * If this argument is not specified, then the element's `value` property
+ * is used, if it exists.
+ * @returns True if `value` is valid.
+ */
+ validate(value: object|null): boolean;
+ _getValidity(value: any): any;
+ }
+
+ const IronValidatableBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.html
new file mode 100644
index 00000000000..646079ffae0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/iron-validatable-behavior.html
@@ -0,0 +1,131 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-meta/iron-meta.html">
+
+<script>
+ /**
+ * Singleton IronMeta instance.
+ */
+ Polymer.IronValidatableBehaviorMeta = null;
+
+ /**
+ * `Use Polymer.IronValidatableBehavior` to implement an element that validates user input.
+ * Use the related `Polymer.IronValidatorBehavior` to add custom validation logic to an iron-input.
+ *
+ * By default, an `<iron-form>` element validates its fields when the user presses the submit button.
+ * To validate a form imperatively, call the form's `validate()` method, which in turn will
+ * call `validate()` on all its children. By using `Polymer.IronValidatableBehavior`, your
+ * custom element will get a public `validate()`, which
+ * will return the validity of the element, and a corresponding `invalid` attribute,
+ * which can be used for styling.
+ *
+ * To implement the custom validation logic of your element, you must override
+ * the protected `_getValidity()` method of this behaviour, rather than `validate()`.
+ * See [this](https://github.com/PolymerElements/iron-form/blob/master/demo/simple-element.html)
+ * for an example.
+ *
+ * ### Accessibility
+ *
+ * Changing the `invalid` property, either manually or by calling `validate()` will update the
+ * `aria-invalid` attribute.
+ *
+ * @demo demo/index.html
+ * @polymerBehavior
+ */
+ Polymer.IronValidatableBehavior = {
+
+ properties: {
+ /**
+ * Name of the validator to use.
+ */
+ validator: {
+ type: String
+ },
+
+ /**
+ * True if the last call to `validate` is invalid.
+ */
+ invalid: {
+ notify: true,
+ reflectToAttribute: true,
+ type: Boolean,
+ value: false,
+ observer: '_invalidChanged'
+ },
+ },
+
+ registered: function() {
+ Polymer.IronValidatableBehaviorMeta = new Polymer.IronMeta({type: 'validator'});
+ },
+
+ _invalidChanged: function() {
+ if (this.invalid) {
+ this.setAttribute('aria-invalid', 'true');
+ } else {
+ this.removeAttribute('aria-invalid');
+ }
+ },
+
+ /* Recompute this every time it's needed, because we don't know if the
+ * underlying IronValidatableBehaviorMeta has changed. */
+ get _validator() {
+ return Polymer.IronValidatableBehaviorMeta &&
+ Polymer.IronValidatableBehaviorMeta.byKey(this.validator);
+ },
+
+ /**
+ * @return {boolean} True if the validator `validator` exists.
+ */
+ hasValidator: function() {
+ return this._validator != null;
+ },
+
+ /**
+ * Returns true if the `value` is valid, and updates `invalid`. If you want
+ * your element to have custom validation logic, do not override this method;
+ * override `_getValidity(value)` instead.
+
+ * @param {Object} value Deprecated: The value to be validated. By default,
+ * it is passed to the validator's `validate()` function, if a validator is set.
+ * If this argument is not specified, then the element's `value` property
+ * is used, if it exists.
+ * @return {boolean} True if `value` is valid.
+ */
+ validate: function(value) {
+ // If this is an element that also has a value property, and there was
+ // no explicit value argument passed, use the element's property instead.
+ if (value === undefined && this.value !== undefined)
+ this.invalid = !this._getValidity(this.value);
+ else
+ this.invalid = !this._getValidity(value);
+ return !this.invalid;
+ },
+
+ /**
+ * Returns true if `value` is valid. By default, it is passed
+ * to the validator's `validate()` function, if a validator is set. You
+ * should override this method if you want to implement custom validity
+ * logic for your element.
+ *
+ * @param {Object} value The value to be validated.
+ * @return {boolean} True if `value` is valid.
+ */
+
+ _getValidity: function(value) {
+ if (this.hasValidator()) {
+ return this._validator.validate(value);
+ }
+ return true;
+ }
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package-lock.json
new file mode 100644
index 00000000000..86e77929590
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/iron-validatable-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package.json
new file mode 100644
index 00000000000..2e01f44783c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/iron-validatable-behavior/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/iron-validatable-behavior",
+ "private": true,
+ "description": "Provides a behavior for an element that validates user input",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-validatable-behavior.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/.bower.json
new file mode 100644
index 00000000000..a8f9c4748b0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/.bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "lodash",
+ "main": "lodash.js",
+ "ignore": [
+ ".*",
+ "*.custom.*",
+ "*.log",
+ "*.map",
+ "*.md",
+ "lodash.src.js",
+ "component.json",
+ "package.json",
+ "doc",
+ "node_modules",
+ "perf",
+ "test",
+ "vendor"
+ ],
+ "homepage": "https://github.com/lodash/lodash",
+ "version": "3.10.1",
+ "_release": "3.10.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "3.10.1",
+ "commit": "ef20b4290cc4fe7551c82a552ea7ffa76548eec8"
+ },
+ "_source": "https://github.com/lodash/lodash.git",
+ "_target": "^3.7.0",
+ "_originalSource": "lodash"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/LICENSE
new file mode 100644
index 00000000000..9cd87e5dcef
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/bower.json
new file mode 100644
index 00000000000..23c390577d1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/bower.json
@@ -0,0 +1,19 @@
+{
+ "name": "lodash",
+ "main": "lodash.js",
+ "ignore": [
+ ".*",
+ "*.custom.*",
+ "*.log",
+ "*.map",
+ "*.md",
+ "lodash.src.js",
+ "component.json",
+ "package.json",
+ "doc",
+ "node_modules",
+ "perf",
+ "test",
+ "vendor"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.js
new file mode 100644
index 00000000000..d1f45b6ecd6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.js
@@ -0,0 +1,12352 @@
+/**
+ * @license
+ * lodash 3.10.1 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern -o ./lodash.js`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+;(function() {
+
+ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
+ var undefined;
+
+ /** Used as the semantic version number. */
+ var VERSION = '3.10.1';
+
+ /** Used to compose bitmasks for wrapper metadata. */
+ var BIND_FLAG = 1,
+ BIND_KEY_FLAG = 2,
+ CURRY_BOUND_FLAG = 4,
+ CURRY_FLAG = 8,
+ CURRY_RIGHT_FLAG = 16,
+ PARTIAL_FLAG = 32,
+ PARTIAL_RIGHT_FLAG = 64,
+ ARY_FLAG = 128,
+ REARG_FLAG = 256;
+
+ /** Used as default options for `_.trunc`. */
+ var DEFAULT_TRUNC_LENGTH = 30,
+ DEFAULT_TRUNC_OMISSION = '...';
+
+ /** Used to detect when a function becomes hot. */
+ var HOT_COUNT = 150,
+ HOT_SPAN = 16;
+
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /** Used to indicate the type of lazy iteratees. */
+ var LAZY_FILTER_FLAG = 1,
+ LAZY_MAP_FLAG = 2;
+
+ /** Used as the `TypeError` message for "Functions" methods. */
+ var FUNC_ERROR_TEXT = 'Expected a function';
+
+ /** Used as the internal argument placeholder. */
+ var PLACEHOLDER = '__lodash_placeholder__';
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ weakMapTag = '[object WeakMap]';
+
+ var arrayBufferTag = '[object ArrayBuffer]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+ /** Used to match empty string literals in compiled template source. */
+ var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+ /** Used to match HTML entities and HTML characters. */
+ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
+ reUnescapedHtml = /[&<>"'`]/g,
+ reHasEscapedHtml = RegExp(reEscapedHtml.source),
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+
+ /** Used to match template delimiters. */
+ var reEscape = /<%-([\s\S]+?)%>/g,
+ reEvaluate = /<%([\s\S]+?)%>/g,
+ reInterpolate = /<%=([\s\S]+?)%>/g;
+
+ /** Used to match property names within property paths. */
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/,
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
+
+ /**
+ * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)
+ * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).
+ */
+ var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,
+ reHasRegExpChars = RegExp(reRegExpChars.source);
+
+ /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */
+ var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g;
+
+ /** Used to match backslashes in property paths. */
+ var reEscapeChar = /\\(\\)?/g;
+
+ /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
+ var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+ /** Used to match `RegExp` flags from their coerced string values. */
+ var reFlags = /\w*$/;
+
+ /** Used to detect hexadecimal string values. */
+ var reHasHexPrefix = /^0[xX]/;
+
+ /** Used to detect host constructors (Safari > 5). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used to detect unsigned integer values. */
+ var reIsUint = /^\d+$/;
+
+ /** Used to match latin-1 supplementary letters (excluding mathematical operators). */
+ var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
+
+ /** Used to ensure capturing order of template delimiters. */
+ var reNoMatch = /($^)/;
+
+ /** Used to match unescaped characters in compiled string literals. */
+ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+
+ /** Used to match words to create compound words. */
+ var reWords = (function() {
+ var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
+ lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+';
+
+ return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');
+ }());
+
+ /** Used to assign default `context` object properties. */
+ var contextProps = [
+ 'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',
+ 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',
+ 'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',
+ 'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
+ 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
+ ];
+
+ /** Used to make template sourceURLs easier to identify. */
+ var templateCounter = -1;
+
+ /** Used to identify `toStringTag` values of typed arrays. */
+ var typedArrayTags = {};
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+ typedArrayTags[uint32Tag] = true;
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+ typedArrayTags[dateTag] = typedArrayTags[errorTag] =
+ typedArrayTags[funcTag] = typedArrayTags[mapTag] =
+ typedArrayTags[numberTag] = typedArrayTags[objectTag] =
+ typedArrayTags[regexpTag] = typedArrayTags[setTag] =
+ typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+
+ /** Used to identify `toStringTag` values supported by `_.clone`. */
+ var cloneableTags = {};
+ cloneableTags[argsTag] = cloneableTags[arrayTag] =
+ cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
+ cloneableTags[dateTag] = cloneableTags[float32Tag] =
+ cloneableTags[float64Tag] = cloneableTags[int8Tag] =
+ cloneableTags[int16Tag] = cloneableTags[int32Tag] =
+ cloneableTags[numberTag] = cloneableTags[objectTag] =
+ cloneableTags[regexpTag] = cloneableTags[stringTag] =
+ cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
+ cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+ cloneableTags[errorTag] = cloneableTags[funcTag] =
+ cloneableTags[mapTag] = cloneableTags[setTag] =
+ cloneableTags[weakMapTag] = false;
+
+ /** Used to map latin-1 supplementary letters to basic latin letters. */
+ var deburredLetters = {
+ '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
+ '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
+ '\xc7': 'C', '\xe7': 'c',
+ '\xd0': 'D', '\xf0': 'd',
+ '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
+ '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
+ '\xcC': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
+ '\xeC': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
+ '\xd1': 'N', '\xf1': 'n',
+ '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
+ '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
+ '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
+ '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
+ '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
+ '\xc6': 'Ae', '\xe6': 'ae',
+ '\xde': 'Th', '\xfe': 'th',
+ '\xdf': 'ss'
+ };
+
+ /** Used to map characters to HTML entities. */
+ var htmlEscapes = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#39;',
+ '`': '&#96;'
+ };
+
+ /** Used to map HTML entities to characters. */
+ var htmlUnescapes = {
+ '&amp;': '&',
+ '&lt;': '<',
+ '&gt;': '>',
+ '&quot;': '"',
+ '&#39;': "'",
+ '&#96;': '`'
+ };
+
+ /** Used to determine if values are of the language type `Object`. */
+ var objectTypes = {
+ 'function': true,
+ 'object': true
+ };
+
+ /** Used to escape characters for inclusion in compiled regexes. */
+ var regexpEscapes = {
+ '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',
+ '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',
+ 'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',
+ 'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',
+ 'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'
+ };
+
+ /** Used to escape characters for inclusion in compiled string literals. */
+ var stringEscapes = {
+ '\\': '\\',
+ "'": "'",
+ '\n': 'n',
+ '\r': 'r',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ /** Detect free variable `exports`. */
+ var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
+
+ /** Detect free variable `module`. */
+ var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
+
+ /** Detect free variable `global` from Node.js. */
+ var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
+
+ /** Detect free variable `self`. */
+ var freeSelf = objectTypes[typeof self] && self && self.Object && self;
+
+ /** Detect free variable `window`. */
+ var freeWindow = objectTypes[typeof window] && window && window.Object && window;
+
+ /** Detect the popular CommonJS extension `module.exports`. */
+ var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
+
+ /**
+ * Used as a reference to the global object.
+ *
+ * The `this` value is used if it's the global object to avoid Greasemonkey's
+ * restricted `window` object, otherwise the `window` object is used.
+ */
+ var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * The base implementation of `compareAscending` which compares values and
+ * sorts them in ascending order without guaranteeing a stable sort.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {number} Returns the sort order indicator for `value`.
+ */
+ function baseCompareAscending(value, other) {
+ if (value !== other) {
+ var valIsNull = value === null,
+ valIsUndef = value === undefined,
+ valIsReflexive = value === value;
+
+ var othIsNull = other === null,
+ othIsUndef = other === undefined,
+ othIsReflexive = other === other;
+
+ if ((value > other && !othIsNull) || !valIsReflexive ||
+ (valIsNull && !othIsUndef && othIsReflexive) ||
+ (valIsUndef && othIsReflexive)) {
+ return 1;
+ }
+ if ((value < other && !valIsNull) || !othIsReflexive ||
+ (othIsNull && !valIsUndef && valIsReflexive) ||
+ (othIsUndef && valIsReflexive)) {
+ return -1;
+ }
+ }
+ return 0;
+ }
+
+ /**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseFindIndex(array, predicate, fromRight) {
+ var length = array.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (predicate(array[index], index, array)) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * The base implementation of `_.indexOf` without support for binary searches.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function baseIndexOf(array, value, fromIndex) {
+ if (value !== value) {
+ return indexOfNaN(array, fromIndex);
+ }
+ var index = fromIndex - 1,
+ length = array.length;
+
+ while (++index < length) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * The base implementation of `_.isFunction` without support for environments
+ * with incorrect `typeof` results.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ */
+ function baseIsFunction(value) {
+ // Avoid a Chakra JIT bug in compatibility modes of IE 11.
+ // See https://github.com/jashkenas/underscore/issues/1621 for more details.
+ return typeof value == 'function' || false;
+ }
+
+ /**
+ * Converts `value` to a string if it's not one. An empty string is returned
+ * for `null` or `undefined` values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+ function baseToString(value) {
+ return value == null ? '' : (value + '');
+ }
+
+ /**
+ * Used by `_.trim` and `_.trimLeft` to get the index of the first character
+ * of `string` that is not found in `chars`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @param {string} chars The characters to find.
+ * @returns {number} Returns the index of the first character not found in `chars`.
+ */
+ function charsLeftIndex(string, chars) {
+ var index = -1,
+ length = string.length;
+
+ while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}
+ return index;
+ }
+
+ /**
+ * Used by `_.trim` and `_.trimRight` to get the index of the last character
+ * of `string` that is not found in `chars`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @param {string} chars The characters to find.
+ * @returns {number} Returns the index of the last character not found in `chars`.
+ */
+ function charsRightIndex(string, chars) {
+ var index = string.length;
+
+ while (index-- && chars.indexOf(string.charAt(index)) > -1) {}
+ return index;
+ }
+
+ /**
+ * Used by `_.sortBy` to compare transformed elements of a collection and stable
+ * sort them in ascending order.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */
+ function compareAscending(object, other) {
+ return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
+ }
+
+ /**
+ * Used by `_.sortByOrder` to compare multiple properties of a value to another
+ * and stable sort them.
+ *
+ * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
+ * a value is sorted in ascending order if its corresponding order is "asc", and
+ * descending if "desc".
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {boolean[]} orders The order to sort by for each property.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */
+ function compareMultiple(object, other, orders) {
+ var index = -1,
+ objCriteria = object.criteria,
+ othCriteria = other.criteria,
+ length = objCriteria.length,
+ ordersLength = orders.length;
+
+ while (++index < length) {
+ var result = baseCompareAscending(objCriteria[index], othCriteria[index]);
+ if (result) {
+ if (index >= ordersLength) {
+ return result;
+ }
+ var order = orders[index];
+ return result * ((order === 'asc' || order === true) ? 1 : -1);
+ }
+ }
+ // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+ // that causes it, under certain circumstances, to provide the same value for
+ // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+ // for more details.
+ //
+ // This also ensures a stable sort in V8 and other engines.
+ // See https://code.google.com/p/v8/issues/detail?id=90 for more details.
+ return object.index - other.index;
+ }
+
+ /**
+ * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.
+ *
+ * @private
+ * @param {string} letter The matched letter to deburr.
+ * @returns {string} Returns the deburred letter.
+ */
+ function deburrLetter(letter) {
+ return deburredLetters[letter];
+ }
+
+ /**
+ * Used by `_.escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+ function escapeHtmlChar(chr) {
+ return htmlEscapes[chr];
+ }
+
+ /**
+ * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @param {string} leadingChar The capture group for a leading character.
+ * @param {string} whitespaceChar The capture group for a whitespace character.
+ * @returns {string} Returns the escaped character.
+ */
+ function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
+ if (leadingChar) {
+ chr = regexpEscapes[chr];
+ } else if (whitespaceChar) {
+ chr = stringEscapes[chr];
+ }
+ return '\\' + chr;
+ }
+
+ /**
+ * Used by `_.template` to escape characters for inclusion in compiled string literals.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+ function escapeStringChar(chr) {
+ return '\\' + stringEscapes[chr];
+ }
+
+ /**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */
+ function indexOfNaN(array, fromIndex, fromRight) {
+ var length = array.length,
+ index = fromIndex + (fromRight ? 0 : -1);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var other = array[index];
+ if (other !== other) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+ function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+ }
+
+ /**
+ * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
+ * character code is whitespace.
+ *
+ * @private
+ * @param {number} charCode The character code to inspect.
+ * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.
+ */
+ function isSpace(charCode) {
+ return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||
+ (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));
+ }
+
+ /**
+ * Replaces all `placeholder` elements in `array` with an internal placeholder
+ * and returns an array of their indexes.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {*} placeholder The placeholder to replace.
+ * @returns {Array} Returns the new array of placeholder indexes.
+ */
+ function replaceHolders(array, placeholder) {
+ var index = -1,
+ length = array.length,
+ resIndex = -1,
+ result = [];
+
+ while (++index < length) {
+ if (array[index] === placeholder) {
+ array[index] = PLACEHOLDER;
+ result[++resIndex] = index;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * An implementation of `_.uniq` optimized for sorted arrays without support
+ * for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The function invoked per iteration.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+ function sortedUniq(array, iteratee) {
+ var seen,
+ index = -1,
+ length = array.length,
+ resIndex = -1,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value, index, array) : value;
+
+ if (!index || seen !== computed) {
+ seen = computed;
+ result[++resIndex] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the first non-whitespace character.
+ */
+ function trimmedLeftIndex(string) {
+ var index = -1,
+ length = string.length;
+
+ while (++index < length && isSpace(string.charCodeAt(index))) {}
+ return index;
+ }
+
+ /**
+ * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */
+ function trimmedRightIndex(string) {
+ var index = string.length;
+
+ while (index-- && isSpace(string.charCodeAt(index))) {}
+ return index;
+ }
+
+ /**
+ * Used by `_.unescape` to convert HTML entities to characters.
+ *
+ * @private
+ * @param {string} chr The matched character to unescape.
+ * @returns {string} Returns the unescaped character.
+ */
+ function unescapeHtmlChar(chr) {
+ return htmlUnescapes[chr];
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ /**
+ * Create a new pristine `lodash` function using the given `context` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} [context=root] The context object.
+ * @returns {Function} Returns a new `lodash` function.
+ * @example
+ *
+ * _.mixin({ 'foo': _.constant('foo') });
+ *
+ * var lodash = _.runInContext();
+ * lodash.mixin({ 'bar': lodash.constant('bar') });
+ *
+ * _.isFunction(_.foo);
+ * // => true
+ * _.isFunction(_.bar);
+ * // => false
+ *
+ * lodash.isFunction(lodash.foo);
+ * // => false
+ * lodash.isFunction(lodash.bar);
+ * // => true
+ *
+ * // using `context` to mock `Date#getTime` use in `_.now`
+ * var mock = _.runInContext({
+ * 'Date': function() {
+ * return { 'getTime': getTimeMock };
+ * }
+ * });
+ *
+ * // or creating a suped-up `defer` in Node.js
+ * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
+ */
+ function runInContext(context) {
+ // Avoid issues with some ES3 environments that attempt to use values, named
+ // after built-in constructors like `Object`, for the creation of literals.
+ // ES5 clears this up by stating that literals must use built-in constructors.
+ // See https://es5.github.io/#x11.1.5 for more details.
+ context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
+
+ /** Native constructor references. */
+ var Array = context.Array,
+ Date = context.Date,
+ Error = context.Error,
+ Function = context.Function,
+ Math = context.Math,
+ Number = context.Number,
+ Object = context.Object,
+ RegExp = context.RegExp,
+ String = context.String,
+ TypeError = context.TypeError;
+
+ /** Used for native method references. */
+ var arrayProto = Array.prototype,
+ objectProto = Object.prototype,
+ stringProto = String.prototype;
+
+ /** Used to resolve the decompiled source of functions. */
+ var fnToString = Function.prototype.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /** Used to generate unique IDs. */
+ var idCounter = 0;
+
+ /**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objToString = objectProto.toString;
+
+ /** Used to restore the original `_` reference in `_.noConflict`. */
+ var oldDash = root._;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /** Native method references. */
+ var ArrayBuffer = context.ArrayBuffer,
+ clearTimeout = context.clearTimeout,
+ parseFloat = context.parseFloat,
+ pow = Math.pow,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ Set = getNative(context, 'Set'),
+ setTimeout = context.setTimeout,
+ splice = arrayProto.splice,
+ Uint8Array = context.Uint8Array,
+ WeakMap = getNative(context, 'WeakMap');
+
+ /* Native method references for those with the same name as other `lodash` methods. */
+ var nativeCeil = Math.ceil,
+ nativeCreate = getNative(Object, 'create'),
+ nativeFloor = Math.floor,
+ nativeIsArray = getNative(Array, 'isArray'),
+ nativeIsFinite = context.isFinite,
+ nativeKeys = getNative(Object, 'keys'),
+ nativeMax = Math.max,
+ nativeMin = Math.min,
+ nativeNow = getNative(Date, 'now'),
+ nativeParseInt = context.parseInt,
+ nativeRandom = Math.random;
+
+ /** Used as references for `-Infinity` and `Infinity`. */
+ var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,
+ POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
+
+ /** Used as references for the maximum length and index of an array. */
+ var MAX_ARRAY_LENGTH = 4294967295,
+ MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
+ HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+
+ /**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /** Used to store function metadata. */
+ var metaMap = WeakMap && new WeakMap;
+
+ /** Used to lookup unminified function names. */
+ var realNames = {};
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` object which wraps `value` to enable implicit chaining.
+ * Methods that operate on and return arrays, collections, and functions can
+ * be chained together. Methods that retrieve a single value or may return a
+ * primitive value will automatically end the chain returning the unwrapped
+ * value. Explicit chaining may be enabled using `_.chain`. The execution of
+ * chained methods is lazy, that is, execution is deferred until `_#value`
+ * is implicitly or explicitly called.
+ *
+ * Lazy evaluation allows several methods to support shortcut fusion. Shortcut
+ * fusion is an optimization strategy which merge iteratee calls; this can help
+ * to avoid the creation of intermediate data structures and greatly reduce the
+ * number of iteratee executions.
+ *
+ * Chaining is supported in custom builds as long as the `_#value` method is
+ * directly or indirectly included in the build.
+ *
+ * In addition to lodash methods, wrappers have `Array` and `String` methods.
+ *
+ * The wrapper `Array` methods are:
+ * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,
+ * `splice`, and `unshift`
+ *
+ * The wrapper `String` methods are:
+ * `replace` and `split`
+ *
+ * The wrapper methods that support shortcut fusion are:
+ * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,
+ * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,
+ * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,
+ * and `where`
+ *
+ * The chainable wrapper methods are:
+ * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
+ * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
+ * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,
+ * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,
+ * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
+ * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
+ * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
+ * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
+ * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,
+ * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
+ * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
+ * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,
+ * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,
+ * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,
+ * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,
+ * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,
+ * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
+ *
+ * The wrapper methods that are **not** chainable by default are:
+ * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,
+ * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
+ * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
+ * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
+ * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
+ * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,
+ * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,
+ * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,
+ * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,
+ * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,
+ * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,
+ * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,
+ * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,
+ * `unescape`, `uniqueId`, `value`, and `words`
+ *
+ * The wrapper method `sample` will return a wrapped value when `n` is provided,
+ * otherwise an unwrapped value is returned.
+ *
+ * @name _
+ * @constructor
+ * @category Chain
+ * @param {*} value The value to wrap in a `lodash` instance.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var wrapped = _([1, 2, 3]);
+ *
+ * // returns an unwrapped value
+ * wrapped.reduce(function(total, n) {
+ * return total + n;
+ * });
+ * // => 6
+ *
+ * // returns a wrapped value
+ * var squares = wrapped.map(function(n) {
+ * return n * n;
+ * });
+ *
+ * _.isArray(squares);
+ * // => false
+ *
+ * _.isArray(squares.value());
+ * // => true
+ */
+ function lodash(value) {
+ if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
+ if (value instanceof LodashWrapper) {
+ return value;
+ }
+ if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {
+ return wrapperClone(value);
+ }
+ }
+ return new LodashWrapper(value);
+ }
+
+ /**
+ * The function whose prototype all chaining wrappers inherit from.
+ *
+ * @private
+ */
+ function baseLodash() {
+ // No operation performed.
+ }
+
+ /**
+ * The base constructor for creating `lodash` wrapper objects.
+ *
+ * @private
+ * @param {*} value The value to wrap.
+ * @param {boolean} [chainAll] Enable chaining for all wrapper methods.
+ * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.
+ */
+ function LodashWrapper(value, chainAll, actions) {
+ this.__wrapped__ = value;
+ this.__actions__ = actions || [];
+ this.__chain__ = !!chainAll;
+ }
+
+ /**
+ * An object environment feature flags.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+ var support = lodash.support = {};
+
+ /**
+ * By default, the template delimiters used by lodash are like those in
+ * embedded Ruby (ERB). Change the following template settings to use
+ * alternative delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+ lodash.templateSettings = {
+
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'escape': reEscape,
+
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'evaluate': reEvaluate,
+
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'interpolate': reInterpolate,
+
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type string
+ */
+ 'variable': '',
+
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type Object
+ */
+ 'imports': {
+
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type Function
+ */
+ '_': lodash
+ }
+ };
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
+ *
+ * @private
+ * @param {*} value The value to wrap.
+ */
+ function LazyWrapper(value) {
+ this.__wrapped__ = value;
+ this.__actions__ = [];
+ this.__dir__ = 1;
+ this.__filtered__ = false;
+ this.__iteratees__ = [];
+ this.__takeCount__ = POSITIVE_INFINITY;
+ this.__views__ = [];
+ }
+
+ /**
+ * Creates a clone of the lazy wrapper object.
+ *
+ * @private
+ * @name clone
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the cloned `LazyWrapper` object.
+ */
+ function lazyClone() {
+ var result = new LazyWrapper(this.__wrapped__);
+ result.__actions__ = arrayCopy(this.__actions__);
+ result.__dir__ = this.__dir__;
+ result.__filtered__ = this.__filtered__;
+ result.__iteratees__ = arrayCopy(this.__iteratees__);
+ result.__takeCount__ = this.__takeCount__;
+ result.__views__ = arrayCopy(this.__views__);
+ return result;
+ }
+
+ /**
+ * Reverses the direction of lazy iteration.
+ *
+ * @private
+ * @name reverse
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the new reversed `LazyWrapper` object.
+ */
+ function lazyReverse() {
+ if (this.__filtered__) {
+ var result = new LazyWrapper(this);
+ result.__dir__ = -1;
+ result.__filtered__ = true;
+ } else {
+ result = this.clone();
+ result.__dir__ *= -1;
+ }
+ return result;
+ }
+
+ /**
+ * Extracts the unwrapped value from its lazy wrapper.
+ *
+ * @private
+ * @name value
+ * @memberOf LazyWrapper
+ * @returns {*} Returns the unwrapped value.
+ */
+ function lazyValue() {
+ var array = this.__wrapped__.value(),
+ dir = this.__dir__,
+ isArr = isArray(array),
+ isRight = dir < 0,
+ arrLength = isArr ? array.length : 0,
+ view = getView(0, arrLength, this.__views__),
+ start = view.start,
+ end = view.end,
+ length = end - start,
+ index = isRight ? end : (start - 1),
+ iteratees = this.__iteratees__,
+ iterLength = iteratees.length,
+ resIndex = 0,
+ takeCount = nativeMin(length, this.__takeCount__);
+
+ if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {
+ return baseWrapperValue(array, this.__actions__);
+ }
+ var result = [];
+
+ outer:
+ while (length-- && resIndex < takeCount) {
+ index += dir;
+
+ var iterIndex = -1,
+ value = array[index];
+
+ while (++iterIndex < iterLength) {
+ var data = iteratees[iterIndex],
+ iteratee = data.iteratee,
+ type = data.type,
+ computed = iteratee(value);
+
+ if (type == LAZY_MAP_FLAG) {
+ value = computed;
+ } else if (!computed) {
+ if (type == LAZY_FILTER_FLAG) {
+ continue outer;
+ } else {
+ break outer;
+ }
+ }
+ }
+ result[resIndex++] = value;
+ }
+ return result;
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a cache object to store key/value pairs.
+ *
+ * @private
+ * @static
+ * @name Cache
+ * @memberOf _.memoize
+ */
+ function MapCache() {
+ this.__data__ = {};
+ }
+
+ /**
+ * Removes `key` and its value from the cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.
+ */
+ function mapDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+ }
+
+ /**
+ * Gets the cached value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the cached value.
+ */
+ function mapGet(key) {
+ return key == '__proto__' ? undefined : this.__data__[key];
+ }
+
+ /**
+ * Checks if a cached value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function mapHas(key) {
+ return key != '__proto__' && hasOwnProperty.call(this.__data__, key);
+ }
+
+ /**
+ * Sets `value` to `key` of the cache.
+ *
+ * @private
+ * @name set
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the value to cache.
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache object.
+ */
+ function mapSet(key, value) {
+ if (key != '__proto__') {
+ this.__data__[key] = value;
+ }
+ return this;
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ *
+ * Creates a cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */
+ function SetCache(values) {
+ var length = values ? values.length : 0;
+
+ this.data = { 'hash': nativeCreate(null), 'set': new Set };
+ while (length--) {
+ this.push(values[length]);
+ }
+ }
+
+ /**
+ * Checks if `value` is in `cache` mimicking the return signature of
+ * `_.indexOf` by returning `0` if the value is found, else `-1`.
+ *
+ * @private
+ * @param {Object} cache The cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `0` if `value` is found, else `-1`.
+ */
+ function cacheIndexOf(cache, value) {
+ var data = cache.data,
+ result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
+
+ return result ? 0 : -1;
+ }
+
+ /**
+ * Adds `value` to the cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */
+ function cachePush(value) {
+ var data = this.data;
+ if (typeof value == 'string' || isObject(value)) {
+ data.set.add(value);
+ } else {
+ data.hash[value] = true;
+ }
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a new array joining `array` with `other`.
+ *
+ * @private
+ * @param {Array} array The array to join.
+ * @param {Array} other The other array to join.
+ * @returns {Array} Returns the new concatenated array.
+ */
+ function arrayConcat(array, other) {
+ var index = -1,
+ length = array.length,
+ othIndex = -1,
+ othLength = other.length,
+ result = Array(length + othLength);
+
+ while (++index < length) {
+ result[index] = array[index];
+ }
+ while (++othIndex < othLength) {
+ result[index++] = other[othIndex];
+ }
+ return result;
+ }
+
+ /**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayCopy(source, array) {
+ var index = -1,
+ length = source.length;
+
+ array || (array = Array(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.forEach` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayEach(array, iteratee) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.forEachRight` for arrays without support for
+ * callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayEachRight(array, iteratee) {
+ var length = array.length;
+
+ while (length--) {
+ if (iteratee(array[length], length, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.every` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ */
+ function arrayEvery(array, predicate) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (!predicate(array[index], index, array)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * A specialized version of `baseExtremum` for arrays which invokes `iteratee`
+ * with one argument: (value).
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} comparator The function used to compare values.
+ * @param {*} exValue The initial extremum value.
+ * @returns {*} Returns the extremum value.
+ */
+ function arrayExtremum(array, iteratee, comparator, exValue) {
+ var index = -1,
+ length = array.length,
+ computed = exValue,
+ result = computed;
+
+ while (++index < length) {
+ var value = array[index],
+ current = +iteratee(value);
+
+ if (comparator(current, computed)) {
+ computed = current;
+ result = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * A specialized version of `_.filter` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+ function arrayFilter(array, predicate) {
+ var index = -1,
+ length = array.length,
+ resIndex = -1,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result[++resIndex] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * A specialized version of `_.map` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+ }
+
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.reduce` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initFromArray] Specify using the first element of `array`
+ * as the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+ function arrayReduce(array, iteratee, accumulator, initFromArray) {
+ var index = -1,
+ length = array.length;
+
+ if (initFromArray && length) {
+ accumulator = array[++index];
+ }
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * A specialized version of `_.reduceRight` for arrays without support for
+ * callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initFromArray] Specify using the last element of `array`
+ * as the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+ function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
+ var length = array.length;
+ if (initFromArray && length) {
+ accumulator = array[--length];
+ }
+ while (length--) {
+ accumulator = iteratee(accumulator, array[length], length, array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * A specialized version of `_.some` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+ function arraySome(array, predicate) {
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * A specialized version of `_.sum` for arrays without support for callback
+ * shorthands and `this` binding..
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ */
+ function arraySum(array, iteratee) {
+ var length = array.length,
+ result = 0;
+
+ while (length--) {
+ result += +iteratee(array[length]) || 0;
+ }
+ return result;
+ }
+
+ /**
+ * Used by `_.defaults` to customize its `_.assign` use.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @returns {*} Returns the value to assign to the destination object.
+ */
+ function assignDefaults(objectValue, sourceValue) {
+ return objectValue === undefined ? sourceValue : objectValue;
+ }
+
+ /**
+ * Used by `_.template` to customize its `_.assign` use.
+ *
+ * **Note:** This function is like `assignDefaults` except that it ignores
+ * inherited property values when checking if a property is `undefined`.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @param {string} key The key associated with the object and source values.
+ * @param {Object} object The destination object.
+ * @returns {*} Returns the value to assign to the destination object.
+ */
+ function assignOwnDefaults(objectValue, sourceValue, key, object) {
+ return (objectValue === undefined || !hasOwnProperty.call(object, key))
+ ? sourceValue
+ : objectValue;
+ }
+
+ /**
+ * A specialized version of `_.assign` for customizing assigned values without
+ * support for argument juggling, multiple sources, and `this` binding `customizer`
+ * functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ */
+ function assignWith(object, source, customizer) {
+ var index = -1,
+ props = keys(source),
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index],
+ value = object[key],
+ result = customizer(value, source[key], key, object, source);
+
+ if ((result === result ? (result !== value) : (value === value)) ||
+ (value === undefined && !(key in object))) {
+ object[key] = result;
+ }
+ }
+ return object;
+ }
+
+ /**
+ * The base implementation of `_.assign` without support for argument juggling,
+ * multiple sources, and `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssign(object, source) {
+ return source == null
+ ? object
+ : baseCopy(source, keys(source), object);
+ }
+
+ /**
+ * The base implementation of `_.at` without support for string collections
+ * and individual key arguments.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {number[]|string[]} props The property names or indexes of elements to pick.
+ * @returns {Array} Returns the new array of picked elements.
+ */
+ function baseAt(collection, props) {
+ var index = -1,
+ isNil = collection == null,
+ isArr = !isNil && isArrayLike(collection),
+ length = isArr ? collection.length : 0,
+ propsLength = props.length,
+ result = Array(propsLength);
+
+ while(++index < propsLength) {
+ var key = props[index];
+ if (isArr) {
+ result[index] = isIndex(key, length) ? collection[key] : undefined;
+ } else {
+ result[index] = isNil ? undefined : collection[key];
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+ function baseCopy(source, props, object) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+ object[key] = source[key];
+ }
+ return object;
+ }
+
+ /**
+ * The base implementation of `_.callback` which supports specifying the
+ * number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {*} [func=_.identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+ function baseCallback(func, thisArg, argCount) {
+ var type = typeof func;
+ if (type == 'function') {
+ return thisArg === undefined
+ ? func
+ : bindCallback(func, thisArg, argCount);
+ }
+ if (func == null) {
+ return identity;
+ }
+ if (type == 'object') {
+ return baseMatches(func);
+ }
+ return thisArg === undefined
+ ? property(func)
+ : baseMatchesProperty(func, thisArg);
+ }
+
+ /**
+ * The base implementation of `_.clone` without support for argument juggling
+ * and `this` binding `customizer` functions.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {Function} [customizer] The function to customize cloning values.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The object `value` belongs to.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates clones with source counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+ function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
+ var result;
+ if (customizer) {
+ result = object ? customizer(value, key, object) : customizer(value);
+ }
+ if (result !== undefined) {
+ return result;
+ }
+ if (!isObject(value)) {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isArr) {
+ result = initCloneArray(value);
+ if (!isDeep) {
+ return arrayCopy(value, result);
+ }
+ } else {
+ var tag = objToString.call(value),
+ isFunc = tag == funcTag;
+
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+ result = initCloneObject(isFunc ? {} : value);
+ if (!isDeep) {
+ return baseAssign(result, value);
+ }
+ } else {
+ return cloneableTags[tag]
+ ? initCloneByTag(value, tag, isDeep)
+ : (object ? value : {});
+ }
+ }
+ // Check for circular references and return its corresponding clone.
+ stackA || (stackA = []);
+ stackB || (stackB = []);
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == value) {
+ return stackB[length];
+ }
+ }
+ // Add the source value to the stack of traversed objects and associate it with its clone.
+ stackA.push(value);
+ stackB.push(result);
+
+ // Recursively populate clone (susceptible to call stack limits).
+ (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
+ result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+ var baseCreate = (function() {
+ function object() {}
+ return function(prototype) {
+ if (isObject(prototype)) {
+ object.prototype = prototype;
+ var result = new object;
+ object.prototype = undefined;
+ }
+ return result || {};
+ };
+ }());
+
+ /**
+ * The base implementation of `_.delay` and `_.defer` which accepts an index
+ * of where to slice the arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {Object} args The arguments provide to `func`.
+ * @returns {number} Returns the timer id.
+ */
+ function baseDelay(func, wait, args) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ return setTimeout(function() { func.apply(undefined, args); }, wait);
+ }
+
+ /**
+ * The base implementation of `_.difference` which accepts a single array
+ * of values to exclude.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ */
+ function baseDifference(array, values) {
+ var length = array ? array.length : 0,
+ result = [];
+
+ if (!length) {
+ return result;
+ }
+ var index = -1,
+ indexOf = getIndexOf(),
+ isCommon = indexOf === baseIndexOf,
+ cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
+ valuesLength = values.length;
+
+ if (cache) {
+ indexOf = cacheIndexOf;
+ isCommon = false;
+ values = cache;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index];
+
+ if (isCommon && value === value) {
+ var valuesIndex = valuesLength;
+ while (valuesIndex--) {
+ if (values[valuesIndex] === value) {
+ continue outer;
+ }
+ }
+ result.push(value);
+ }
+ else if (indexOf(values, value, 0) < 0) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.forEach` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object|string} Returns `collection`.
+ */
+ var baseEach = createBaseEach(baseForOwn);
+
+ /**
+ * The base implementation of `_.forEachRight` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object|string} Returns `collection`.
+ */
+ var baseEachRight = createBaseEach(baseForOwnRight, true);
+
+ /**
+ * The base implementation of `_.every` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`
+ */
+ function baseEvery(collection, predicate) {
+ var result = true;
+ baseEach(collection, function(value, index, collection) {
+ result = !!predicate(value, index, collection);
+ return result;
+ });
+ return result;
+ }
+
+ /**
+ * Gets the extremum value of `collection` invoking `iteratee` for each value
+ * in `collection` to generate the criterion by which the value is ranked.
+ * The `iteratee` is invoked with three arguments: (value, index|key, collection).
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} comparator The function used to compare values.
+ * @param {*} exValue The initial extremum value.
+ * @returns {*} Returns the extremum value.
+ */
+ function baseExtremum(collection, iteratee, comparator, exValue) {
+ var computed = exValue,
+ result = computed;
+
+ baseEach(collection, function(value, index, collection) {
+ var current = +iteratee(value, index, collection);
+ if (comparator(current, computed) || (current === exValue && current === result)) {
+ computed = current;
+ result = value;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.fill` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ */
+ function baseFill(array, value, start, end) {
+ var length = array.length;
+
+ start = start == null ? 0 : (+start || 0);
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = (end === undefined || end > length) ? length : (+end || 0);
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : (end >>> 0);
+ start >>>= 0;
+
+ while (start < length) {
+ array[start++] = value;
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.filter` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */
+ function baseFilter(collection, predicate) {
+ var result = [];
+ baseEach(collection, function(value, index, collection) {
+ if (predicate(value, index, collection)) {
+ result.push(value);
+ }
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,
+ * without support for callback shorthands and `this` binding, which iterates
+ * over `collection` using the provided `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @param {boolean} [retKey] Specify returning the key of the found element
+ * instead of the element itself.
+ * @returns {*} Returns the found element or its key, else `undefined`.
+ */
+ function baseFind(collection, predicate, eachFunc, retKey) {
+ var result;
+ eachFunc(collection, function(value, key, collection) {
+ if (predicate(value, key, collection)) {
+ result = retKey ? key : value;
+ return false;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.flatten` with added support for restricting
+ * flattening and specifying the start index.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isDeep] Specify a deep flatten.
+ * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+ function baseFlatten(array, isDeep, isStrict, result) {
+ result || (result = []);
+
+ var index = -1,
+ length = array.length;
+
+ while (++index < length) {
+ var value = array[index];
+ if (isObjectLike(value) && isArrayLike(value) &&
+ (isStrict || isArray(value) || isArguments(value))) {
+ if (isDeep) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, isDeep, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+ var baseFor = createBaseFor();
+
+ /**
+ * This function is like `baseFor` except that it iterates over properties
+ * in the opposite order.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+ var baseForRight = createBaseFor(true);
+
+ /**
+ * The base implementation of `_.forIn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForIn(object, iteratee) {
+ return baseFor(object, iteratee, keysIn);
+ }
+
+ /**
+ * The base implementation of `_.forOwn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForOwn(object, iteratee) {
+ return baseFor(object, iteratee, keys);
+ }
+
+ /**
+ * The base implementation of `_.forOwnRight` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+ function baseForOwnRight(object, iteratee) {
+ return baseForRight(object, iteratee, keys);
+ }
+
+ /**
+ * The base implementation of `_.functions` which creates an array of
+ * `object` function property names filtered from those provided.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} props The property names to filter.
+ * @returns {Array} Returns the new array of filtered property names.
+ */
+ function baseFunctions(object, props) {
+ var index = -1,
+ length = props.length,
+ resIndex = -1,
+ result = [];
+
+ while (++index < length) {
+ var key = props[index];
+ if (isFunction(object[key])) {
+ result[++resIndex] = key;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `get` without support for string paths
+ * and default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} path The path of the property to get.
+ * @param {string} [pathKey] The key representation of path.
+ * @returns {*} Returns the resolved value.
+ */
+ function baseGet(object, path, pathKey) {
+ if (object == null) {
+ return;
+ }
+ if (pathKey !== undefined && pathKey in toObject(object)) {
+ path = [pathKey];
+ }
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[path[index++]];
+ }
+ return (index && index == length) ? object : undefined;
+ }
+
+ /**
+ * The base implementation of `_.isEqual` without support for `this` binding
+ * `customizer` functions.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparing values.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+ function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
+ }
+
+ /**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing objects.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA=[]] Tracks traversed `value` objects.
+ * @param {Array} [stackB=[]] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = arrayTag,
+ othTag = arrayTag;
+
+ if (!objIsArr) {
+ objTag = objToString.call(object);
+ if (objTag == argsTag) {
+ objTag = objectTag;
+ } else if (objTag != objectTag) {
+ objIsArr = isTypedArray(object);
+ }
+ }
+ if (!othIsArr) {
+ othTag = objToString.call(other);
+ if (othTag == argsTag) {
+ othTag = objectTag;
+ } else if (othTag != objectTag) {
+ othIsArr = isTypedArray(other);
+ }
+ }
+ var objIsObj = objTag == objectTag,
+ othIsObj = othTag == objectTag,
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && !(objIsArr || objIsObj)) {
+ return equalByTag(object, other, objTag);
+ }
+ if (!isLoose) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ // For more information on detecting circular references see https://es5.github.io/#JO.
+ stackA || (stackA = []);
+ stackB || (stackB = []);
+
+ var length = stackA.length;
+ while (length--) {
+ if (stackA[length] == object) {
+ return stackB[length] == other;
+ }
+ }
+ // Add `object` and `other` to the stack of traversed objects.
+ stackA.push(object);
+ stackB.push(other);
+
+ var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
+
+ stackA.pop();
+ stackB.pop();
+
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.isMatch` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} matchData The propery names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparing objects.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+ function baseIsMatch(object, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+ object = toObject(object);
+ while (index--) {
+ var data = matchData[index];
+ if ((noCustomizer && data[2])
+ ? data[1] !== object[data[0]]
+ : !(data[0] in object)
+ ) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined && !(key in object)) {
+ return false;
+ }
+ } else {
+ var result = customizer ? customizer(objValue, srcValue, key) : undefined;
+ if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * The base implementation of `_.map` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+ function baseMap(collection, iteratee) {
+ var index = -1,
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+
+ baseEach(collection, function(value, key, collection) {
+ result[++index] = iteratee(value, key, collection);
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.matches` which does not clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new function.
+ */
+ function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ var key = matchData[0][0],
+ value = matchData[0][1];
+
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === value && (value !== undefined || (key in toObject(object)));
+ };
+ }
+ return function(object) {
+ return baseIsMatch(object, matchData);
+ };
+ }
+
+ /**
+ * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to compare.
+ * @returns {Function} Returns the new function.
+ */
+ function baseMatchesProperty(path, srcValue) {
+ var isArr = isArray(path),
+ isCommon = isKey(path) && isStrictComparable(srcValue),
+ pathKey = (path + '');
+
+ path = toPath(path);
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ var key = pathKey;
+ object = toObject(object);
+ if ((isArr || !isCommon) && !(key in object)) {
+ object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+ if (object == null) {
+ return false;
+ }
+ key = last(path);
+ object = toObject(object);
+ }
+ return object[key] === srcValue
+ ? (srcValue !== undefined || (key in object))
+ : baseIsEqual(srcValue, object[key], undefined, true);
+ };
+ }
+
+ /**
+ * The base implementation of `_.merge` without support for argument juggling,
+ * multiple sources, and `this` binding `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {Object} Returns `object`.
+ */
+ function baseMerge(object, source, customizer, stackA, stackB) {
+ if (!isObject(object)) {
+ return object;
+ }
+ var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
+ props = isSrcArr ? undefined : keys(source);
+
+ arrayEach(props || source, function(srcValue, key) {
+ if (props) {
+ key = srcValue;
+ srcValue = source[key];
+ }
+ if (isObjectLike(srcValue)) {
+ stackA || (stackA = []);
+ stackB || (stackB = []);
+ baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
+ }
+ else {
+ var value = object[key],
+ result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+ isCommon = result === undefined;
+
+ if (isCommon) {
+ result = srcValue;
+ }
+ if ((result !== undefined || (isSrcArr && !(key in object))) &&
+ (isCommon || (result === result ? (result !== value) : (value === value)))) {
+ object[key] = result;
+ }
+ }
+ });
+ return object;
+ }
+
+ /**
+ * A specialized version of `baseMerge` for arrays and objects which performs
+ * deep merges and tracks traversed objects enabling objects with circular
+ * references to be merged.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {string} key The key of the value to merge.
+ * @param {Function} mergeFunc The function to merge values.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
+ var length = stackA.length,
+ srcValue = source[key];
+
+ while (length--) {
+ if (stackA[length] == srcValue) {
+ object[key] = stackB[length];
+ return;
+ }
+ }
+ var value = object[key],
+ result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+ isCommon = result === undefined;
+
+ if (isCommon) {
+ result = srcValue;
+ if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
+ result = isArray(value)
+ ? value
+ : (isArrayLike(value) ? arrayCopy(value) : []);
+ }
+ else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+ result = isArguments(value)
+ ? toPlainObject(value)
+ : (isPlainObject(value) ? value : {});
+ }
+ else {
+ isCommon = false;
+ }
+ }
+ // Add the source value to the stack of traversed objects and associate
+ // it with its merged value.
+ stackA.push(srcValue);
+ stackB.push(result);
+
+ if (isCommon) {
+ // Recursively merge objects and arrays (susceptible to call stack limits).
+ object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
+ } else if (result === result ? (result !== value) : (value === value)) {
+ object[key] = result;
+ }
+ }
+
+ /**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+ function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+ }
+
+ /**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+ function basePropertyDeep(path) {
+ var pathKey = (path + '');
+ path = toPath(path);
+ return function(object) {
+ return baseGet(object, path, pathKey);
+ };
+ }
+
+ /**
+ * The base implementation of `_.pullAt` without support for individual
+ * index arguments and capturing the removed elements.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {number[]} indexes The indexes of elements to remove.
+ * @returns {Array} Returns `array`.
+ */
+ function basePullAt(array, indexes) {
+ var length = array ? indexes.length : 0;
+ while (length--) {
+ var index = indexes[length];
+ if (index != previous && isIndex(index)) {
+ var previous = index;
+ splice.call(array, index, 1);
+ }
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.random` without support for argument juggling
+ * and returning floating-point numbers.
+ *
+ * @private
+ * @param {number} min The minimum possible value.
+ * @param {number} max The maximum possible value.
+ * @returns {number} Returns the random number.
+ */
+ function baseRandom(min, max) {
+ return min + nativeFloor(nativeRandom() * (max - min + 1));
+ }
+
+ /**
+ * The base implementation of `_.reduce` and `_.reduceRight` without support
+ * for callback shorthands and `this` binding, which iterates over `collection`
+ * using the provided `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} accumulator The initial value.
+ * @param {boolean} initFromCollection Specify using the first or last element
+ * of `collection` as the initial value.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @returns {*} Returns the accumulated value.
+ */
+ function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
+ eachFunc(collection, function(value, index, collection) {
+ accumulator = initFromCollection
+ ? (initFromCollection = false, value)
+ : iteratee(accumulator, value, index, collection);
+ });
+ return accumulator;
+ }
+
+ /**
+ * The base implementation of `setData` without support for hot loop detection.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */
+ var baseSetData = !metaMap ? identity : function(func, data) {
+ metaMap.set(func, data);
+ return func;
+ };
+
+ /**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function baseSlice(array, start, end) {
+ var index = -1,
+ length = array.length;
+
+ start = start == null ? 0 : (+start || 0);
+ if (start < 0) {
+ start = -start > length ? 0 : (length + start);
+ }
+ end = (end === undefined || end > length) ? length : (+end || 0);
+ if (end < 0) {
+ end += length;
+ }
+ length = start > end ? 0 : ((end - start) >>> 0);
+ start >>>= 0;
+
+ var result = Array(length);
+ while (++index < length) {
+ result[index] = array[index + start];
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.some` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+ function baseSome(collection, predicate) {
+ var result;
+
+ baseEach(collection, function(value, index, collection) {
+ result = predicate(value, index, collection);
+ return !result;
+ });
+ return !!result;
+ }
+
+ /**
+ * The base implementation of `_.sortBy` which uses `comparer` to define
+ * the sort order of `array` and replaces criteria objects with their
+ * corresponding values.
+ *
+ * @private
+ * @param {Array} array The array to sort.
+ * @param {Function} comparer The function to define sort order.
+ * @returns {Array} Returns `array`.
+ */
+ function baseSortBy(array, comparer) {
+ var length = array.length;
+
+ array.sort(comparer);
+ while (length--) {
+ array[length] = array[length].value;
+ }
+ return array;
+ }
+
+ /**
+ * The base implementation of `_.sortByOrder` without param guards.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {boolean[]} orders The sort orders of `iteratees`.
+ * @returns {Array} Returns the new sorted array.
+ */
+ function baseSortByOrder(collection, iteratees, orders) {
+ var callback = getCallback(),
+ index = -1;
+
+ iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });
+
+ var result = baseMap(collection, function(value) {
+ var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });
+ return { 'criteria': criteria, 'index': ++index, 'value': value };
+ });
+
+ return baseSortBy(result, function(object, other) {
+ return compareMultiple(object, other, orders);
+ });
+ }
+
+ /**
+ * The base implementation of `_.sum` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ */
+ function baseSum(collection, iteratee) {
+ var result = 0;
+ baseEach(collection, function(value, index, collection) {
+ result += +iteratee(value, index, collection) || 0;
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.uniq` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The function invoked per iteration.
+ * @returns {Array} Returns the new duplicate free array.
+ */
+ function baseUniq(array, iteratee) {
+ var index = -1,
+ indexOf = getIndexOf(),
+ length = array.length,
+ isCommon = indexOf === baseIndexOf,
+ isLarge = isCommon && length >= LARGE_ARRAY_SIZE,
+ seen = isLarge ? createCache() : null,
+ result = [];
+
+ if (seen) {
+ indexOf = cacheIndexOf;
+ isCommon = false;
+ } else {
+ isLarge = false;
+ seen = iteratee ? [] : result;
+ }
+ outer:
+ while (++index < length) {
+ var value = array[index],
+ computed = iteratee ? iteratee(value, index, array) : value;
+
+ if (isCommon && value === value) {
+ var seenIndex = seen.length;
+ while (seenIndex--) {
+ if (seen[seenIndex] === computed) {
+ continue outer;
+ }
+ }
+ if (iteratee) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ else if (indexOf(seen, computed, 0) < 0) {
+ if (iteratee || isLarge) {
+ seen.push(computed);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.values` and `_.valuesIn` which creates an
+ * array of `object` property values corresponding to the property names
+ * of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the array of property values.
+ */
+ function baseValues(object, props) {
+ var index = -1,
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = object[props[index]];
+ }
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
+ * and `_.takeWhile` without support for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function baseWhile(array, predicate, isDrop, fromRight) {
+ var length = array.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
+ return isDrop
+ ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
+ : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
+ }
+
+ /**
+ * The base implementation of `wrapperValue` which returns the result of
+ * performing a sequence of actions on the unwrapped `value`, where each
+ * successive action is supplied the return value of the previous.
+ *
+ * @private
+ * @param {*} value The unwrapped value.
+ * @param {Array} actions Actions to peform to resolve the unwrapped value.
+ * @returns {*} Returns the resolved value.
+ */
+ function baseWrapperValue(value, actions) {
+ var result = value;
+ if (result instanceof LazyWrapper) {
+ result = result.value();
+ }
+ var index = -1,
+ length = actions.length;
+
+ while (++index < length) {
+ var action = actions[index];
+ result = action.func.apply(action.thisArg, arrayPush([result], action.args));
+ }
+ return result;
+ }
+
+ /**
+ * Performs a binary search of `array` to determine the index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */
+ function binaryIndex(array, value, retHighest) {
+ var low = 0,
+ high = array ? array.length : low;
+
+ if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+ while (low < high) {
+ var mid = (low + high) >>> 1,
+ computed = array[mid];
+
+ if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return high;
+ }
+ return binaryIndexBy(array, value, identity, retHighest);
+ }
+
+ /**
+ * This function is like `binaryIndex` except that it invokes `iteratee` for
+ * `value` and each element of `array` to compute their sort ranking. The
+ * iteratee is invoked with one argument; (value).
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */
+ function binaryIndexBy(array, value, iteratee, retHighest) {
+ value = iteratee(value);
+
+ var low = 0,
+ high = array ? array.length : 0,
+ valIsNaN = value !== value,
+ valIsNull = value === null,
+ valIsUndef = value === undefined;
+
+ while (low < high) {
+ var mid = nativeFloor((low + high) / 2),
+ computed = iteratee(array[mid]),
+ isDef = computed !== undefined,
+ isReflexive = computed === computed;
+
+ if (valIsNaN) {
+ var setLow = isReflexive || retHighest;
+ } else if (valIsNull) {
+ setLow = isReflexive && isDef && (retHighest || computed != null);
+ } else if (valIsUndef) {
+ setLow = isReflexive && (retHighest || isDef);
+ } else if (computed == null) {
+ setLow = false;
+ } else {
+ setLow = retHighest ? (computed <= value) : (computed < value);
+ }
+ if (setLow) {
+ low = mid + 1;
+ } else {
+ high = mid;
+ }
+ }
+ return nativeMin(high, MAX_ARRAY_INDEX);
+ }
+
+ /**
+ * A specialized version of `baseCallback` which only supports `this` binding
+ * and specifying the number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */
+ function bindCallback(func, thisArg, argCount) {
+ if (typeof func != 'function') {
+ return identity;
+ }
+ if (thisArg === undefined) {
+ return func;
+ }
+ switch (argCount) {
+ case 1: return function(value) {
+ return func.call(thisArg, value);
+ };
+ case 3: return function(value, index, collection) {
+ return func.call(thisArg, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(thisArg, accumulator, value, index, collection);
+ };
+ case 5: return function(value, other, key, object, source) {
+ return func.call(thisArg, value, other, key, object, source);
+ };
+ }
+ return function() {
+ return func.apply(thisArg, arguments);
+ };
+ }
+
+ /**
+ * Creates a clone of the given array buffer.
+ *
+ * @private
+ * @param {ArrayBuffer} buffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+ function bufferClone(buffer) {
+ var result = new ArrayBuffer(buffer.byteLength),
+ view = new Uint8Array(result);
+
+ view.set(new Uint8Array(buffer));
+ return result;
+ }
+
+ /**
+ * Creates an array that is the composition of partially applied arguments,
+ * placeholders, and provided arguments into a single array of arguments.
+ *
+ * @private
+ * @param {Array|Object} args The provided arguments.
+ * @param {Array} partials The arguments to prepend to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @returns {Array} Returns the new array of composed arguments.
+ */
+ function composeArgs(args, partials, holders) {
+ var holdersLength = holders.length,
+ argsIndex = -1,
+ argsLength = nativeMax(args.length - holdersLength, 0),
+ leftIndex = -1,
+ leftLength = partials.length,
+ result = Array(leftLength + argsLength);
+
+ while (++leftIndex < leftLength) {
+ result[leftIndex] = partials[leftIndex];
+ }
+ while (++argsIndex < holdersLength) {
+ result[holders[argsIndex]] = args[argsIndex];
+ }
+ while (argsLength--) {
+ result[leftIndex++] = args[argsIndex++];
+ }
+ return result;
+ }
+
+ /**
+ * This function is like `composeArgs` except that the arguments composition
+ * is tailored for `_.partialRight`.
+ *
+ * @private
+ * @param {Array|Object} args The provided arguments.
+ * @param {Array} partials The arguments to append to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @returns {Array} Returns the new array of composed arguments.
+ */
+ function composeArgsRight(args, partials, holders) {
+ var holdersIndex = -1,
+ holdersLength = holders.length,
+ argsIndex = -1,
+ argsLength = nativeMax(args.length - holdersLength, 0),
+ rightIndex = -1,
+ rightLength = partials.length,
+ result = Array(argsLength + rightLength);
+
+ while (++argsIndex < argsLength) {
+ result[argsIndex] = args[argsIndex];
+ }
+ var offset = argsIndex;
+ while (++rightIndex < rightLength) {
+ result[offset + rightIndex] = partials[rightIndex];
+ }
+ while (++holdersIndex < holdersLength) {
+ result[offset + holders[holdersIndex]] = args[argsIndex++];
+ }
+ return result;
+ }
+
+ /**
+ * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.
+ *
+ * @private
+ * @param {Function} setter The function to set keys and values of the accumulator object.
+ * @param {Function} [initializer] The function to initialize the accumulator object.
+ * @returns {Function} Returns the new aggregator function.
+ */
+ function createAggregator(setter, initializer) {
+ return function(collection, iteratee, thisArg) {
+ var result = initializer ? initializer() : {};
+ iteratee = getCallback(iteratee, thisArg, 3);
+
+ if (isArray(collection)) {
+ var index = -1,
+ length = collection.length;
+
+ while (++index < length) {
+ var value = collection[index];
+ setter(result, value, iteratee(value, index, collection), collection);
+ }
+ } else {
+ baseEach(collection, function(value, key, collection) {
+ setter(result, value, iteratee(value, key, collection), collection);
+ });
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+ function createAssigner(assigner) {
+ return restParam(function(object, sources) {
+ var index = -1,
+ length = object == null ? 0 : sources.length,
+ customizer = length > 2 ? sources[length - 2] : undefined,
+ guard = length > 2 ? sources[2] : undefined,
+ thisArg = length > 1 ? sources[length - 1] : undefined;
+
+ if (typeof customizer == 'function') {
+ customizer = bindCallback(customizer, thisArg, 5);
+ length -= 2;
+ } else {
+ customizer = typeof thisArg == 'function' ? thisArg : undefined;
+ length -= (customizer ? 1 : 0);
+ }
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ customizer = length < 3 ? undefined : customizer;
+ length = 1;
+ }
+ while (++index < length) {
+ var source = sources[index];
+ if (source) {
+ assigner(object, source, customizer);
+ }
+ }
+ return object;
+ });
+ }
+
+ /**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseEach(eachFunc, fromRight) {
+ return function(collection, iteratee) {
+ var length = collection ? getLength(collection) : 0;
+ if (!isLength(length)) {
+ return eachFunc(collection, iteratee);
+ }
+ var index = fromRight ? length : -1,
+ iterable = toObject(collection);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ if (iteratee(iterable[index], index, iterable) === false) {
+ break;
+ }
+ }
+ return collection;
+ };
+ }
+
+ /**
+ * Creates a base function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+ function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var iterable = toObject(object),
+ props = keysFunc(object),
+ length = props.length,
+ index = fromRight ? length : -1;
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var key = props[index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+ }
+
+ /**
+ * Creates a function that wraps `func` and invokes it with the `this`
+ * binding of `thisArg`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @returns {Function} Returns the new bound function.
+ */
+ function createBindWrapper(func, thisArg) {
+ var Ctor = createCtorWrapper(func);
+
+ function wrapper() {
+ var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+ return fn.apply(thisArg, arguments);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates a `Set` cache object to optimize linear searches of large arrays.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
+ */
+ function createCache(values) {
+ return (nativeCreate && Set) ? new SetCache(values) : null;
+ }
+
+ /**
+ * Creates a function that produces compound words out of the words in a
+ * given string.
+ *
+ * @private
+ * @param {Function} callback The function to combine each word.
+ * @returns {Function} Returns the new compounder function.
+ */
+ function createCompounder(callback) {
+ return function(string) {
+ var index = -1,
+ array = words(deburr(string)),
+ length = array.length,
+ result = '';
+
+ while (++index < length) {
+ result = callback(result, array[index], index);
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that produces an instance of `Ctor` regardless of
+ * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+ *
+ * @private
+ * @param {Function} Ctor The constructor to wrap.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createCtorWrapper(Ctor) {
+ return function() {
+ // Use a `switch` statement to work with class constructors.
+ // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+ // for more details.
+ var args = arguments;
+ switch (args.length) {
+ case 0: return new Ctor;
+ case 1: return new Ctor(args[0]);
+ case 2: return new Ctor(args[0], args[1]);
+ case 3: return new Ctor(args[0], args[1], args[2]);
+ case 4: return new Ctor(args[0], args[1], args[2], args[3]);
+ case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+ case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+ case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+ }
+ var thisBinding = baseCreate(Ctor.prototype),
+ result = Ctor.apply(thisBinding, args);
+
+ // Mimic the constructor's `return` behavior.
+ // See https://es5.github.io/#x13.2.2 for more details.
+ return isObject(result) ? result : thisBinding;
+ };
+ }
+
+ /**
+ * Creates a `_.curry` or `_.curryRight` function.
+ *
+ * @private
+ * @param {boolean} flag The curry bit flag.
+ * @returns {Function} Returns the new curry function.
+ */
+ function createCurry(flag) {
+ function curryFunc(func, arity, guard) {
+ if (guard && isIterateeCall(func, arity, guard)) {
+ arity = undefined;
+ }
+ var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
+ result.placeholder = curryFunc.placeholder;
+ return result;
+ }
+ return curryFunc;
+ }
+
+ /**
+ * Creates a `_.defaults` or `_.defaultsDeep` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Function} Returns the new defaults function.
+ */
+ function createDefaults(assigner, customizer) {
+ return restParam(function(args) {
+ var object = args[0];
+ if (object == null) {
+ return object;
+ }
+ args.push(customizer);
+ return assigner.apply(undefined, args);
+ });
+ }
+
+ /**
+ * Creates a `_.max` or `_.min` function.
+ *
+ * @private
+ * @param {Function} comparator The function used to compare values.
+ * @param {*} exValue The initial extremum value.
+ * @returns {Function} Returns the new extremum function.
+ */
+ function createExtremum(comparator, exValue) {
+ return function(collection, iteratee, thisArg) {
+ if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
+ iteratee = undefined;
+ }
+ iteratee = getCallback(iteratee, thisArg, 3);
+ if (iteratee.length == 1) {
+ collection = isArray(collection) ? collection : toIterable(collection);
+ var result = arrayExtremum(collection, iteratee, comparator, exValue);
+ if (!(collection.length && result === exValue)) {
+ return result;
+ }
+ }
+ return baseExtremum(collection, iteratee, comparator, exValue);
+ };
+ }
+
+ /**
+ * Creates a `_.find` or `_.findLast` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new find function.
+ */
+ function createFind(eachFunc, fromRight) {
+ return function(collection, predicate, thisArg) {
+ predicate = getCallback(predicate, thisArg, 3);
+ if (isArray(collection)) {
+ var index = baseFindIndex(collection, predicate, fromRight);
+ return index > -1 ? collection[index] : undefined;
+ }
+ return baseFind(collection, predicate, eachFunc);
+ };
+ }
+
+ /**
+ * Creates a `_.findIndex` or `_.findLastIndex` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new find function.
+ */
+ function createFindIndex(fromRight) {
+ return function(array, predicate, thisArg) {
+ if (!(array && array.length)) {
+ return -1;
+ }
+ predicate = getCallback(predicate, thisArg, 3);
+ return baseFindIndex(array, predicate, fromRight);
+ };
+ }
+
+ /**
+ * Creates a `_.findKey` or `_.findLastKey` function.
+ *
+ * @private
+ * @param {Function} objectFunc The function to iterate over an object.
+ * @returns {Function} Returns the new find function.
+ */
+ function createFindKey(objectFunc) {
+ return function(object, predicate, thisArg) {
+ predicate = getCallback(predicate, thisArg, 3);
+ return baseFind(object, predicate, objectFunc, true);
+ };
+ }
+
+ /**
+ * Creates a `_.flow` or `_.flowRight` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new flow function.
+ */
+ function createFlow(fromRight) {
+ return function() {
+ var wrapper,
+ length = arguments.length,
+ index = fromRight ? length : -1,
+ leftIndex = 0,
+ funcs = Array(length);
+
+ while ((fromRight ? index-- : ++index < length)) {
+ var func = funcs[leftIndex++] = arguments[index];
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {
+ wrapper = new LodashWrapper([], true);
+ }
+ }
+ index = wrapper ? -1 : length;
+ while (++index < length) {
+ func = funcs[index];
+
+ var funcName = getFuncName(func),
+ data = funcName == 'wrapper' ? getData(func) : undefined;
+
+ if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {
+ wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+ } else {
+ wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
+ }
+ }
+ return function() {
+ var args = arguments,
+ value = args[0];
+
+ if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
+ return wrapper.plant(value).value();
+ }
+ var index = 0,
+ result = length ? funcs[index].apply(this, args) : value;
+
+ while (++index < length) {
+ result = funcs[index].call(this, result);
+ }
+ return result;
+ };
+ };
+ }
+
+ /**
+ * Creates a function for `_.forEach` or `_.forEachRight`.
+ *
+ * @private
+ * @param {Function} arrayFunc The function to iterate over an array.
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @returns {Function} Returns the new each function.
+ */
+ function createForEach(arrayFunc, eachFunc) {
+ return function(collection, iteratee, thisArg) {
+ return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
+ ? arrayFunc(collection, iteratee)
+ : eachFunc(collection, bindCallback(iteratee, thisArg, 3));
+ };
+ }
+
+ /**
+ * Creates a function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {Function} objectFunc The function to iterate over an object.
+ * @returns {Function} Returns the new each function.
+ */
+ function createForIn(objectFunc) {
+ return function(object, iteratee, thisArg) {
+ if (typeof iteratee != 'function' || thisArg !== undefined) {
+ iteratee = bindCallback(iteratee, thisArg, 3);
+ }
+ return objectFunc(object, iteratee, keysIn);
+ };
+ }
+
+ /**
+ * Creates a function for `_.forOwn` or `_.forOwnRight`.
+ *
+ * @private
+ * @param {Function} objectFunc The function to iterate over an object.
+ * @returns {Function} Returns the new each function.
+ */
+ function createForOwn(objectFunc) {
+ return function(object, iteratee, thisArg) {
+ if (typeof iteratee != 'function' || thisArg !== undefined) {
+ iteratee = bindCallback(iteratee, thisArg, 3);
+ }
+ return objectFunc(object, iteratee);
+ };
+ }
+
+ /**
+ * Creates a function for `_.mapKeys` or `_.mapValues`.
+ *
+ * @private
+ * @param {boolean} [isMapKeys] Specify mapping keys instead of values.
+ * @returns {Function} Returns the new map function.
+ */
+ function createObjectMapper(isMapKeys) {
+ return function(object, iteratee, thisArg) {
+ var result = {};
+ iteratee = getCallback(iteratee, thisArg, 3);
+
+ baseForOwn(object, function(value, key, object) {
+ var mapped = iteratee(value, key, object);
+ key = isMapKeys ? mapped : key;
+ value = isMapKeys ? value : mapped;
+ result[key] = value;
+ });
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function for `_.padLeft` or `_.padRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify padding from the right.
+ * @returns {Function} Returns the new pad function.
+ */
+ function createPadDir(fromRight) {
+ return function(string, length, chars) {
+ string = baseToString(string);
+ return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
+ };
+ }
+
+ /**
+ * Creates a `_.partial` or `_.partialRight` function.
+ *
+ * @private
+ * @param {boolean} flag The partial bit flag.
+ * @returns {Function} Returns the new partial function.
+ */
+ function createPartial(flag) {
+ var partialFunc = restParam(function(func, partials) {
+ var holders = replaceHolders(partials, partialFunc.placeholder);
+ return createWrapper(func, flag, undefined, partials, holders);
+ });
+ return partialFunc;
+ }
+
+ /**
+ * Creates a function for `_.reduce` or `_.reduceRight`.
+ *
+ * @private
+ * @param {Function} arrayFunc The function to iterate over an array.
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @returns {Function} Returns the new each function.
+ */
+ function createReduce(arrayFunc, eachFunc) {
+ return function(collection, iteratee, accumulator, thisArg) {
+ var initFromArray = arguments.length < 3;
+ return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
+ ? arrayFunc(collection, iteratee, accumulator, initFromArray)
+ : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
+ };
+ }
+
+ /**
+ * Creates a function that wraps `func` and invokes it with optional `this`
+ * binding of, partial application, and currying.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to reference.
+ * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to prepend to those provided to the new function.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [partialsRight] The arguments to append to those provided to the new function.
+ * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
+ var isAry = bitmask & ARY_FLAG,
+ isBind = bitmask & BIND_FLAG,
+ isBindKey = bitmask & BIND_KEY_FLAG,
+ isCurry = bitmask & CURRY_FLAG,
+ isCurryBound = bitmask & CURRY_BOUND_FLAG,
+ isCurryRight = bitmask & CURRY_RIGHT_FLAG,
+ Ctor = isBindKey ? undefined : createCtorWrapper(func);
+
+ function wrapper() {
+ // Avoid `arguments` object use disqualifying optimizations by
+ // converting it to an array before providing it to other functions.
+ var length = arguments.length,
+ index = length,
+ args = Array(length);
+
+ while (index--) {
+ args[index] = arguments[index];
+ }
+ if (partials) {
+ args = composeArgs(args, partials, holders);
+ }
+ if (partialsRight) {
+ args = composeArgsRight(args, partialsRight, holdersRight);
+ }
+ if (isCurry || isCurryRight) {
+ var placeholder = wrapper.placeholder,
+ argsHolders = replaceHolders(args, placeholder);
+
+ length -= argsHolders.length;
+ if (length < arity) {
+ var newArgPos = argPos ? arrayCopy(argPos) : undefined,
+ newArity = nativeMax(arity - length, 0),
+ newsHolders = isCurry ? argsHolders : undefined,
+ newHoldersRight = isCurry ? undefined : argsHolders,
+ newPartials = isCurry ? args : undefined,
+ newPartialsRight = isCurry ? undefined : args;
+
+ bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
+ bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
+
+ if (!isCurryBound) {
+ bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
+ }
+ var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
+ result = createHybridWrapper.apply(undefined, newData);
+
+ if (isLaziable(func)) {
+ setData(result, newData);
+ }
+ result.placeholder = placeholder;
+ return result;
+ }
+ }
+ var thisBinding = isBind ? thisArg : this,
+ fn = isBindKey ? thisBinding[func] : func;
+
+ if (argPos) {
+ args = reorder(args, argPos);
+ }
+ if (isAry && ary < args.length) {
+ args.length = ary;
+ }
+ if (this && this !== root && this instanceof wrapper) {
+ fn = Ctor || createCtorWrapper(func);
+ }
+ return fn.apply(thisBinding, args);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates the padding required for `string` based on the given `length`.
+ * The `chars` string is truncated if the number of characters exceeds `length`.
+ *
+ * @private
+ * @param {string} string The string to create padding for.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the pad for `string`.
+ */
+ function createPadding(string, length, chars) {
+ var strLength = string.length;
+ length = +length;
+
+ if (strLength >= length || !nativeIsFinite(length)) {
+ return '';
+ }
+ var padLength = length - strLength;
+ chars = chars == null ? ' ' : (chars + '');
+ return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
+ }
+
+ /**
+ * Creates a function that wraps `func` and invokes it with the optional `this`
+ * binding of `thisArg` and the `partials` prepended to those provided to
+ * the wrapper.
+ *
+ * @private
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} partials The arguments to prepend to those provided to the new function.
+ * @returns {Function} Returns the new bound function.
+ */
+ function createPartialWrapper(func, bitmask, thisArg, partials) {
+ var isBind = bitmask & BIND_FLAG,
+ Ctor = createCtorWrapper(func);
+
+ function wrapper() {
+ // Avoid `arguments` object use disqualifying optimizations by
+ // converting it to an array before providing it `func`.
+ var argsIndex = -1,
+ argsLength = arguments.length,
+ leftIndex = -1,
+ leftLength = partials.length,
+ args = Array(leftLength + argsLength);
+
+ while (++leftIndex < leftLength) {
+ args[leftIndex] = partials[leftIndex];
+ }
+ while (argsLength--) {
+ args[leftIndex++] = arguments[++argsIndex];
+ }
+ var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+ return fn.apply(isBind ? thisArg : this, args);
+ }
+ return wrapper;
+ }
+
+ /**
+ * Creates a `_.ceil`, `_.floor`, or `_.round` function.
+ *
+ * @private
+ * @param {string} methodName The name of the `Math` method to use when rounding.
+ * @returns {Function} Returns the new round function.
+ */
+ function createRound(methodName) {
+ var func = Math[methodName];
+ return function(number, precision) {
+ precision = precision === undefined ? 0 : (+precision || 0);
+ if (precision) {
+ precision = pow(10, precision);
+ return func(number * precision) / precision;
+ }
+ return func(number);
+ };
+ }
+
+ /**
+ * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
+ *
+ * @private
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {Function} Returns the new index function.
+ */
+ function createSortedIndex(retHighest) {
+ return function(array, value, iteratee, thisArg) {
+ var callback = getCallback(iteratee);
+ return (iteratee == null && callback === baseCallback)
+ ? binaryIndex(array, value, retHighest)
+ : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);
+ };
+ }
+
+ /**
+ * Creates a function that either curries or invokes `func` with optional
+ * `this` binding and partially applied arguments.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to reference.
+ * @param {number} bitmask The bitmask of flags.
+ * The bitmask may be composed of the following flags:
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry` or `_.curryRight` of a bound function
+ * 8 - `_.curry`
+ * 16 - `_.curryRight`
+ * 32 - `_.partial`
+ * 64 - `_.partialRight`
+ * 128 - `_.rearg`
+ * 256 - `_.ary`
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to be partially applied.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */
+ function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
+ var isBindKey = bitmask & BIND_KEY_FLAG;
+ if (!isBindKey && typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var length = partials ? partials.length : 0;
+ if (!length) {
+ bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
+ partials = holders = undefined;
+ }
+ length -= (holders ? holders.length : 0);
+ if (bitmask & PARTIAL_RIGHT_FLAG) {
+ var partialsRight = partials,
+ holdersRight = holders;
+
+ partials = holders = undefined;
+ }
+ var data = isBindKey ? undefined : getData(func),
+ newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
+
+ if (data) {
+ mergeData(newData, data);
+ bitmask = newData[1];
+ arity = newData[9];
+ }
+ newData[9] = arity == null
+ ? (isBindKey ? 0 : func.length)
+ : (nativeMax(arity - length, 0) || 0);
+
+ if (bitmask == BIND_FLAG) {
+ var result = createBindWrapper(newData[0], newData[2]);
+ } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {
+ result = createPartialWrapper.apply(undefined, newData);
+ } else {
+ result = createHybridWrapper.apply(undefined, newData);
+ }
+ var setter = data ? baseSetData : setData;
+ return setter(result, newData);
+ }
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing arrays.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+ function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
+ var index = -1,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
+ return false;
+ }
+ // Ignore non-index properties.
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index],
+ result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
+
+ if (result !== undefined) {
+ if (result) {
+ continue;
+ }
+ return false;
+ }
+ // Recursively compare arrays (susceptible to call stack limits).
+ if (isLoose) {
+ if (!arraySome(other, function(othValue) {
+ return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
+ })) {
+ return false;
+ }
+ } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalByTag(object, other, tag) {
+ switch (tag) {
+ case boolTag:
+ case dateTag:
+ // Coerce dates and booleans to numbers, dates to milliseconds and booleans
+ // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
+ return +object == +other;
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case numberTag:
+ // Treat `NaN` vs. `NaN` as equal.
+ return (object != +object)
+ ? other != +other
+ : object == +other;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings primitives and string
+ // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
+ return object == (other + '');
+ }
+ return false;
+ }
+
+ /**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing values.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+ function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
+ var objProps = keys(object),
+ objLength = objProps.length,
+ othProps = keys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isLoose) {
+ return false;
+ }
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ }
+ var skipCtor = isLoose;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key],
+ result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
+
+ // Recursively compare objects (susceptible to call stack limits).
+ if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
+ return false;
+ }
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+ if (!skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor;
+
+ // Non `Object` object instances with different constructors are not equal.
+ if (objCtor != othCtor &&
+ ('constructor' in object && 'constructor' in other) &&
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Gets the appropriate "callback" function. If the `_.callback` method is
+ * customized this function returns the custom method, otherwise it returns
+ * the `baseCallback` function. If arguments are provided the chosen function
+ * is invoked with them and its result is returned.
+ *
+ * @private
+ * @returns {Function} Returns the chosen function or its result.
+ */
+ function getCallback(func, thisArg, argCount) {
+ var result = lodash.callback || callback;
+ result = result === callback ? baseCallback : result;
+ return argCount ? result(func, thisArg, argCount) : result;
+ }
+
+ /**
+ * Gets metadata for `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {*} Returns the metadata for `func`.
+ */
+ var getData = !metaMap ? noop : function(func) {
+ return metaMap.get(func);
+ };
+
+ /**
+ * Gets the name of `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {string} Returns the function name.
+ */
+ function getFuncName(func) {
+ var result = (func.name + ''),
+ array = realNames[result],
+ length = array ? array.length : 0;
+
+ while (length--) {
+ var data = array[length],
+ otherFunc = data.func;
+ if (otherFunc == null || otherFunc == func) {
+ return data.name;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
+ * customized this function returns the custom method, otherwise it returns
+ * the `baseIndexOf` function. If arguments are provided the chosen function
+ * is invoked with them and its result is returned.
+ *
+ * @private
+ * @returns {Function|number} Returns the chosen function or its result.
+ */
+ function getIndexOf(collection, target, fromIndex) {
+ var result = lodash.indexOf || indexOf;
+ result = result === indexOf ? baseIndexOf : result;
+ return collection ? result(collection, target, fromIndex) : result;
+ }
+
+ /**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+ var getLength = baseProperty('length');
+
+ /**
+ * Gets the propery names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */
+ function getMatchData(object) {
+ var result = pairs(object),
+ length = result.length;
+
+ while (length--) {
+ result[length][2] = isStrictComparable(result[length][1]);
+ }
+ return result;
+ }
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+ }
+
+ /**
+ * Gets the view, applying any `transforms` to the `start` and `end` positions.
+ *
+ * @private
+ * @param {number} start The start of the view.
+ * @param {number} end The end of the view.
+ * @param {Array} transforms The transformations to apply to the view.
+ * @returns {Object} Returns an object containing the `start` and `end`
+ * positions of the view.
+ */
+ function getView(start, end, transforms) {
+ var index = -1,
+ length = transforms.length;
+
+ while (++index < length) {
+ var data = transforms[index],
+ size = data.size;
+
+ switch (data.type) {
+ case 'drop': start += size; break;
+ case 'dropRight': end -= size; break;
+ case 'take': end = nativeMin(end, start + size); break;
+ case 'takeRight': start = nativeMax(start, end - size); break;
+ }
+ }
+ return { 'start': start, 'end': end };
+ }
+
+ /**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+ function initCloneArray(array) {
+ var length = array.length,
+ result = new array.constructor(length);
+
+ // Add array properties assigned by `RegExp#exec`.
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+ return result;
+ }
+
+ /**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneObject(object) {
+ var Ctor = object.constructor;
+ if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {
+ Ctor = Object;
+ }
+ return new Ctor;
+ }
+
+ /**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneByTag(object, tag, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag:
+ return bufferClone(object);
+
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+
+ case float32Tag: case float64Tag:
+ case int8Tag: case int16Tag: case int32Tag:
+ case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+ var buffer = object.buffer;
+ return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
+
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+
+ case regexpTag:
+ var result = new Ctor(object.source, reFlags.exec(object));
+ result.lastIndex = object.lastIndex;
+ }
+ return result;
+ }
+
+ /**
+ * Invokes the method at `path` on `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {Array} args The arguments to invoke the method with.
+ * @returns {*} Returns the result of the invoked method.
+ */
+ function invokePath(object, path, args) {
+ if (object != null && !isKey(path, object)) {
+ path = toPath(path);
+ object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+ path = last(path);
+ }
+ var func = object == null ? object : object[path];
+ return func == null ? undefined : func.apply(object, args);
+ }
+
+ /**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+ function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+ }
+
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+ function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+ }
+
+ /**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */
+ function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)) {
+ var other = object[index];
+ return value === value ? (value === other) : (other !== other);
+ }
+ return false;
+ }
+
+ /**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+ function isKey(value, object) {
+ var type = typeof value;
+ if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
+ return true;
+ }
+ if (isArray(value)) {
+ return false;
+ }
+ var result = !reIsDeepProp.test(value);
+ return result || (object != null && value in toObject(object));
+ }
+
+ /**
+ * Checks if `func` has a lazy counterpart.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
+ */
+ function isLaziable(func) {
+ var funcName = getFuncName(func),
+ other = lodash[funcName];
+
+ if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
+ return false;
+ }
+ if (func === other) {
+ return true;
+ }
+ var data = getData(other);
+ return !!data && func === data[0];
+ }
+
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+ function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+
+ /**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */
+ function isStrictComparable(value) {
+ return value === value && !isObject(value);
+ }
+
+ /**
+ * Merges the function metadata of `source` into `data`.
+ *
+ * Merging metadata reduces the number of wrappers required to invoke a function.
+ * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+ * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`
+ * augment function arguments, making the order in which they are executed important,
+ * preventing the merging of metadata. However, we make an exception for a safe
+ * common case where curried functions have `_.ary` and or `_.rearg` applied.
+ *
+ * @private
+ * @param {Array} data The destination metadata.
+ * @param {Array} source The source metadata.
+ * @returns {Array} Returns `data`.
+ */
+ function mergeData(data, source) {
+ var bitmask = data[1],
+ srcBitmask = source[1],
+ newBitmask = bitmask | srcBitmask,
+ isCommon = newBitmask < ARY_FLAG;
+
+ var isCombo =
+ (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
+ (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
+ (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
+
+ // Exit early if metadata can't be merged.
+ if (!(isCommon || isCombo)) {
+ return data;
+ }
+ // Use source `thisArg` if available.
+ if (srcBitmask & BIND_FLAG) {
+ data[2] = source[2];
+ // Set when currying a bound function.
+ newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;
+ }
+ // Compose partial arguments.
+ var value = source[3];
+ if (value) {
+ var partials = data[3];
+ data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);
+ data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);
+ }
+ // Compose partial right arguments.
+ value = source[5];
+ if (value) {
+ partials = data[5];
+ data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);
+ data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);
+ }
+ // Use source `argPos` if available.
+ value = source[7];
+ if (value) {
+ data[7] = arrayCopy(value);
+ }
+ // Use source `ary` if it's smaller.
+ if (srcBitmask & ARY_FLAG) {
+ data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+ }
+ // Use source `arity` if one is not provided.
+ if (data[9] == null) {
+ data[9] = source[9];
+ }
+ // Use source `func` and merge bitmasks.
+ data[0] = source[0];
+ data[1] = newBitmask;
+
+ return data;
+ }
+
+ /**
+ * Used by `_.defaultsDeep` to customize its `_.merge` use.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @returns {*} Returns the value to assign to the destination object.
+ */
+ function mergeDefaults(objectValue, sourceValue) {
+ return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
+ }
+
+ /**
+ * A specialized version of `_.pick` which picks `object` properties specified
+ * by `props`.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} props The property names to pick.
+ * @returns {Object} Returns the new object.
+ */
+ function pickByArray(object, props) {
+ object = toObject(object);
+
+ var index = -1,
+ length = props.length,
+ result = {};
+
+ while (++index < length) {
+ var key = props[index];
+ if (key in object) {
+ result[key] = object[key];
+ }
+ }
+ return result;
+ }
+
+ /**
+ * A specialized version of `_.pick` which picks `object` properties `predicate`
+ * returns truthy for.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Object} Returns the new object.
+ */
+ function pickByCallback(object, predicate) {
+ var result = {};
+ baseForIn(object, function(value, key, object) {
+ if (predicate(value, key, object)) {
+ result[key] = value;
+ }
+ });
+ return result;
+ }
+
+ /**
+ * Reorder `array` according to the specified indexes where the element at
+ * the first index is assigned as the first element, the element at
+ * the second index is assigned as the second element, and so on.
+ *
+ * @private
+ * @param {Array} array The array to reorder.
+ * @param {Array} indexes The arranged array indexes.
+ * @returns {Array} Returns `array`.
+ */
+ function reorder(array, indexes) {
+ var arrLength = array.length,
+ length = nativeMin(indexes.length, arrLength),
+ oldArray = arrayCopy(array);
+
+ while (length--) {
+ var index = indexes[length];
+ array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
+ }
+ return array;
+ }
+
+ /**
+ * Sets metadata for `func`.
+ *
+ * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+ * period of time, it will trip its breaker and transition to an identity function
+ * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)
+ * for more details.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */
+ var setData = (function() {
+ var count = 0,
+ lastCalled = 0;
+
+ return function(key, value) {
+ var stamp = now(),
+ remaining = HOT_SPAN - (stamp - lastCalled);
+
+ lastCalled = stamp;
+ if (remaining > 0) {
+ if (++count >= HOT_COUNT) {
+ return key;
+ }
+ } else {
+ count = 0;
+ }
+ return baseSetData(key, value);
+ };
+ }());
+
+ /**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function shimKeys(object) {
+ var props = keysIn(object),
+ propsLength = props.length,
+ length = propsLength && object.length;
+
+ var allowIndexes = !!length && isLength(length) &&
+ (isArray(object) || isArguments(object));
+
+ var index = -1,
+ result = [];
+
+ while (++index < propsLength) {
+ var key = props[index];
+ if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Converts `value` to an array-like object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Array|Object} Returns the array-like object.
+ */
+ function toIterable(value) {
+ if (value == null) {
+ return [];
+ }
+ if (!isArrayLike(value)) {
+ return values(value);
+ }
+ return isObject(value) ? value : Object(value);
+ }
+
+ /**
+ * Converts `value` to an object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Object} Returns the object.
+ */
+ function toObject(value) {
+ return isObject(value) ? value : Object(value);
+ }
+
+ /**
+ * Converts `value` to property path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Array} Returns the property path array.
+ */
+ function toPath(value) {
+ if (isArray(value)) {
+ return value;
+ }
+ var result = [];
+ baseToString(value).replace(rePropName, function(match, number, quote, string) {
+ result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+ }
+
+ /**
+ * Creates a clone of `wrapper`.
+ *
+ * @private
+ * @param {Object} wrapper The wrapper to clone.
+ * @returns {Object} Returns the cloned wrapper.
+ */
+ function wrapperClone(wrapper) {
+ return wrapper instanceof LazyWrapper
+ ? wrapper.clone()
+ : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of elements split into groups the length of `size`.
+ * If `collection` can't be split evenly, the final chunk will be the remaining
+ * elements.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to process.
+ * @param {number} [size=1] The length of each chunk.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the new array containing chunks.
+ * @example
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 2);
+ * // => [['a', 'b'], ['c', 'd']]
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 3);
+ * // => [['a', 'b', 'c'], ['d']]
+ */
+ function chunk(array, size, guard) {
+ if (guard ? isIterateeCall(array, size, guard) : size == null) {
+ size = 1;
+ } else {
+ size = nativeMax(nativeFloor(size) || 1, 1);
+ }
+ var index = 0,
+ length = array ? array.length : 0,
+ resIndex = -1,
+ result = Array(nativeCeil(length / size));
+
+ while (index < length) {
+ result[++resIndex] = baseSlice(array, index, (index += size));
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array with all falsey values removed. The values `false`, `null`,
+ * `0`, `""`, `undefined`, and `NaN` are falsey.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to compact.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.compact([0, 1, false, 2, '', 3]);
+ * // => [1, 2, 3]
+ */
+ function compact(array) {
+ var index = -1,
+ length = array ? array.length : 0,
+ resIndex = -1,
+ result = [];
+
+ while (++index < length) {
+ var value = array[index];
+ if (value) {
+ result[++resIndex] = value;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array of unique `array` values not included in the other
+ * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The arrays of values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.difference([1, 2, 3], [4, 2]);
+ * // => [1, 3]
+ */
+ var difference = restParam(function(array, values) {
+ return (isObjectLike(array) && isArrayLike(array))
+ ? baseDifference(array, baseFlatten(values, false, true))
+ : [];
+ });
+
+ /**
+ * Creates a slice of `array` with `n` elements dropped from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.drop([1, 2, 3]);
+ * // => [2, 3]
+ *
+ * _.drop([1, 2, 3], 2);
+ * // => [3]
+ *
+ * _.drop([1, 2, 3], 5);
+ * // => []
+ *
+ * _.drop([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */
+ function drop(array, n, guard) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (guard ? isIterateeCall(array, n, guard) : n == null) {
+ n = 1;
+ }
+ return baseSlice(array, n < 0 ? 0 : n);
+ }
+
+ /**
+ * Creates a slice of `array` with `n` elements dropped from the end.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropRight([1, 2, 3]);
+ * // => [1, 2]
+ *
+ * _.dropRight([1, 2, 3], 2);
+ * // => [1]
+ *
+ * _.dropRight([1, 2, 3], 5);
+ * // => []
+ *
+ * _.dropRight([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */
+ function dropRight(array, n, guard) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (guard ? isIterateeCall(array, n, guard) : n == null) {
+ n = 1;
+ }
+ n = length - (+n || 0);
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+
+ /**
+ * Creates a slice of `array` excluding elements dropped from the end.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that match the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropRightWhile([1, 2, 3], function(n) {
+ * return n > 1;
+ * });
+ * // => [1]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
+ * // => ['barney', 'fred']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.dropRightWhile(users, 'active', false), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.dropRightWhile(users, 'active'), 'user');
+ * // => ['barney', 'fred', 'pebbles']
+ */
+ function dropRightWhile(array, predicate, thisArg) {
+ return (array && array.length)
+ ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
+ : [];
+ }
+
+ /**
+ * Creates a slice of `array` excluding elements dropped from the beginning.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropWhile([1, 2, 3], function(n) {
+ * return n < 3;
+ * });
+ * // => [3]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
+ * // => ['fred', 'pebbles']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.dropWhile(users, 'active', false), 'user');
+ * // => ['pebbles']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.dropWhile(users, 'active'), 'user');
+ * // => ['barney', 'fred', 'pebbles']
+ */
+ function dropWhile(array, predicate, thisArg) {
+ return (array && array.length)
+ ? baseWhile(array, getCallback(predicate, thisArg, 3), true)
+ : [];
+ }
+
+ /**
+ * Fills elements of `array` with `value` from `start` up to, but not
+ * including, `end`.
+ *
+ * **Note:** This method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _.fill(array, 'a');
+ * console.log(array);
+ * // => ['a', 'a', 'a']
+ *
+ * _.fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * _.fill([4, 6, 8], '*', 1, 2);
+ * // => [4, '*', 8]
+ */
+ function fill(array, value, start, end) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
+ start = 0;
+ end = length;
+ }
+ return baseFill(array, value, start, end);
+ }
+
+ /**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(chr) {
+ * return chr.user == 'barney';
+ * });
+ * // => 0
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findIndex(users, 'active', false);
+ * // => 0
+ *
+ * // using the `_.property` callback shorthand
+ * _.findIndex(users, 'active');
+ * // => 2
+ */
+ var findIndex = createFindIndex();
+
+ /**
+ * This method is like `_.findIndex` except that it iterates over elements
+ * of `collection` from right to left.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.findLastIndex(users, function(chr) {
+ * return chr.user == 'pebbles';
+ * });
+ * // => 2
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findLastIndex(users, { 'user': 'barney', 'active': true });
+ * // => 0
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findLastIndex(users, 'active', false);
+ * // => 2
+ *
+ * // using the `_.property` callback shorthand
+ * _.findLastIndex(users, 'active');
+ * // => 0
+ */
+ var findLastIndex = createFindIndex(true);
+
+ /**
+ * Gets the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @alias head
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the first element of `array`.
+ * @example
+ *
+ * _.first([1, 2, 3]);
+ * // => 1
+ *
+ * _.first([]);
+ * // => undefined
+ */
+ function first(array) {
+ return array ? array[0] : undefined;
+ }
+
+ /**
+ * Flattens a nested array. If `isDeep` is `true` the array is recursively
+ * flattened, otherwise it's only flattened a single level.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isDeep] Specify a deep flatten.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flatten([1, [2, 3, [4]]]);
+ * // => [1, 2, 3, [4]]
+ *
+ * // using `isDeep`
+ * _.flatten([1, [2, 3, [4]]], true);
+ * // => [1, 2, 3, 4]
+ */
+ function flatten(array, isDeep, guard) {
+ var length = array ? array.length : 0;
+ if (guard && isIterateeCall(array, isDeep, guard)) {
+ isDeep = false;
+ }
+ return length ? baseFlatten(array, isDeep) : [];
+ }
+
+ /**
+ * Recursively flattens a nested array.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to recursively flatten.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flattenDeep([1, [2, 3, [4]]]);
+ * // => [1, 2, 3, 4]
+ */
+ function flattenDeep(array) {
+ var length = array ? array.length : 0;
+ return length ? baseFlatten(array, true) : [];
+ }
+
+ /**
+ * Gets the index at which the first occurrence of `value` is found in `array`
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons. If `fromIndex` is negative, it's used as the offset
+ * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
+ * performs a faster binary search.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {boolean|number} [fromIndex=0] The index to search from or `true`
+ * to perform a binary search on a sorted array.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.indexOf([1, 2, 1, 2], 2);
+ * // => 1
+ *
+ * // using `fromIndex`
+ * _.indexOf([1, 2, 1, 2], 2, 2);
+ * // => 3
+ *
+ * // performing a binary search
+ * _.indexOf([1, 1, 2, 2], 2, true);
+ * // => 2
+ */
+ function indexOf(array, value, fromIndex) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return -1;
+ }
+ if (typeof fromIndex == 'number') {
+ fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
+ } else if (fromIndex) {
+ var index = binaryIndex(array, value);
+ if (index < length &&
+ (value === value ? (value === array[index]) : (array[index] !== array[index]))) {
+ return index;
+ }
+ return -1;
+ }
+ return baseIndexOf(array, value, fromIndex || 0);
+ }
+
+ /**
+ * Gets all but the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.initial([1, 2, 3]);
+ * // => [1, 2]
+ */
+ function initial(array) {
+ return dropRight(array, 1);
+ }
+
+ /**
+ * Creates an array of unique values that are included in all of the provided
+ * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of shared values.
+ * @example
+ * _.intersection([1, 2], [4, 2], [2, 1]);
+ * // => [2]
+ */
+ var intersection = restParam(function(arrays) {
+ var othLength = arrays.length,
+ othIndex = othLength,
+ caches = Array(length),
+ indexOf = getIndexOf(),
+ isCommon = indexOf === baseIndexOf,
+ result = [];
+
+ while (othIndex--) {
+ var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];
+ caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;
+ }
+ var array = arrays[0],
+ index = -1,
+ length = array ? array.length : 0,
+ seen = caches[0];
+
+ outer:
+ while (++index < length) {
+ value = array[index];
+ if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
+ var othIndex = othLength;
+ while (--othIndex) {
+ var cache = caches[othIndex];
+ if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {
+ continue outer;
+ }
+ }
+ if (seen) {
+ seen.push(value);
+ }
+ result.push(value);
+ }
+ }
+ return result;
+ });
+
+ /**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */
+ function last(array) {
+ var length = array ? array.length : 0;
+ return length ? array[length - 1] : undefined;
+ }
+
+ /**
+ * This method is like `_.indexOf` except that it iterates over elements of
+ * `array` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {boolean|number} [fromIndex=array.length-1] The index to search from
+ * or `true` to perform a binary search on a sorted array.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.lastIndexOf([1, 2, 1, 2], 2);
+ * // => 3
+ *
+ * // using `fromIndex`
+ * _.lastIndexOf([1, 2, 1, 2], 2, 2);
+ * // => 1
+ *
+ * // performing a binary search
+ * _.lastIndexOf([1, 1, 2, 2], 2, true);
+ * // => 3
+ */
+ function lastIndexOf(array, value, fromIndex) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return -1;
+ }
+ var index = length;
+ if (typeof fromIndex == 'number') {
+ index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;
+ } else if (fromIndex) {
+ index = binaryIndex(array, value, true) - 1;
+ var other = array[index];
+ if (value === value ? (value === other) : (other !== other)) {
+ return index;
+ }
+ return -1;
+ }
+ if (value !== value) {
+ return indexOfNaN(array, index, true);
+ }
+ while (index--) {
+ if (array[index] === value) {
+ return index;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Removes all provided values from `array` using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...*} [values] The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * _.pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */
+ function pull() {
+ var args = arguments,
+ array = args[0];
+
+ if (!(array && array.length)) {
+ return array;
+ }
+ var index = 0,
+ indexOf = getIndexOf(),
+ length = args.length;
+
+ while (++index < length) {
+ var fromIndex = 0,
+ value = args[index];
+
+ while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
+ splice.call(array, fromIndex, 1);
+ }
+ }
+ return array;
+ }
+
+ /**
+ * Removes elements from `array` corresponding to the given indexes and returns
+ * an array of the removed elements. Indexes may be specified as an array of
+ * indexes or as individual arguments.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...(number|number[])} [indexes] The indexes of elements to remove,
+ * specified as individual indexes or arrays of indexes.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = [5, 10, 15, 20];
+ * var evens = _.pullAt(array, 1, 3);
+ *
+ * console.log(array);
+ * // => [5, 15]
+ *
+ * console.log(evens);
+ * // => [10, 20]
+ */
+ var pullAt = restParam(function(array, indexes) {
+ indexes = baseFlatten(indexes);
+
+ var result = baseAt(array, indexes);
+ basePullAt(array, indexes.sort(baseCompareAscending));
+ return result;
+ });
+
+ /**
+ * Removes all elements from `array` that `predicate` returns truthy for
+ * and returns an array of the removed elements. The predicate is bound to
+ * `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * **Note:** Unlike `_.filter`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = [1, 2, 3, 4];
+ * var evens = _.remove(array, function(n) {
+ * return n % 2 == 0;
+ * });
+ *
+ * console.log(array);
+ * // => [1, 3]
+ *
+ * console.log(evens);
+ * // => [2, 4]
+ */
+ function remove(array, predicate, thisArg) {
+ var result = [];
+ if (!(array && array.length)) {
+ return result;
+ }
+ var index = -1,
+ indexes = [],
+ length = array.length;
+
+ predicate = getCallback(predicate, thisArg, 3);
+ while (++index < length) {
+ var value = array[index];
+ if (predicate(value, index, array)) {
+ result.push(value);
+ indexes.push(index);
+ }
+ }
+ basePullAt(array, indexes);
+ return result;
+ }
+
+ /**
+ * Gets all but the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @alias tail
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.rest([1, 2, 3]);
+ * // => [2, 3]
+ */
+ function rest(array) {
+ return drop(array, 1);
+ }
+
+ /**
+ * Creates a slice of `array` from `start` up to, but not including, `end`.
+ *
+ * **Note:** This method is used instead of `Array#slice` to support node
+ * lists in IE < 9 and to ensure dense arrays are returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */
+ function slice(array, start, end) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
+ start = 0;
+ end = length;
+ }
+ return baseSlice(array, start, end);
+ }
+
+ /**
+ * Uses a binary search to determine the lowest index at which `value` should
+ * be inserted into `array` in order to maintain its sort order. If an iteratee
+ * function is provided it's invoked for `value` and each element of `array`
+ * to compute their sort ranking. The iteratee is bound to `thisArg` and
+ * invoked with one argument; (value).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedIndex([30, 50], 40);
+ * // => 1
+ *
+ * _.sortedIndex([4, 4, 5, 5], 5);
+ * // => 2
+ *
+ * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
+ *
+ * // using an iteratee function
+ * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
+ * return this.data[word];
+ * }, dict);
+ * // => 1
+ *
+ * // using the `_.property` callback shorthand
+ * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
+ * // => 1
+ */
+ var sortedIndex = createSortedIndex();
+
+ /**
+ * This method is like `_.sortedIndex` except that it returns the highest
+ * index at which `value` should be inserted into `array` in order to
+ * maintain its sort order.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedLastIndex([4, 4, 5, 5], 5);
+ * // => 4
+ */
+ var sortedLastIndex = createSortedIndex(true);
+
+ /**
+ * Creates a slice of `array` with `n` elements taken from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.take([1, 2, 3]);
+ * // => [1]
+ *
+ * _.take([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * _.take([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.take([1, 2, 3], 0);
+ * // => []
+ */
+ function take(array, n, guard) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (guard ? isIterateeCall(array, n, guard) : n == null) {
+ n = 1;
+ }
+ return baseSlice(array, 0, n < 0 ? 0 : n);
+ }
+
+ /**
+ * Creates a slice of `array` with `n` elements taken from the end.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeRight([1, 2, 3]);
+ * // => [3]
+ *
+ * _.takeRight([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * _.takeRight([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.takeRight([1, 2, 3], 0);
+ * // => []
+ */
+ function takeRight(array, n, guard) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (guard ? isIterateeCall(array, n, guard) : n == null) {
+ n = 1;
+ }
+ n = length - (+n || 0);
+ return baseSlice(array, n < 0 ? 0 : n);
+ }
+
+ /**
+ * Creates a slice of `array` with elements taken from the end. Elements are
+ * taken until `predicate` returns falsey. The predicate is bound to `thisArg`
+ * and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeRightWhile([1, 2, 3], function(n) {
+ * return n > 1;
+ * });
+ * // => [2, 3]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
+ * // => ['pebbles']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.takeRightWhile(users, 'active', false), 'user');
+ * // => ['fred', 'pebbles']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.takeRightWhile(users, 'active'), 'user');
+ * // => []
+ */
+ function takeRightWhile(array, predicate, thisArg) {
+ return (array && array.length)
+ ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
+ : [];
+ }
+
+ /**
+ * Creates a slice of `array` with elements taken from the beginning. Elements
+ * are taken until `predicate` returns falsey. The predicate is bound to
+ * `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeWhile([1, 2, 3], function(n) {
+ * return n < 3;
+ * });
+ * // => [1, 2]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false},
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.takeWhile(users, 'active', false), 'user');
+ * // => ['barney', 'fred']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.takeWhile(users, 'active'), 'user');
+ * // => []
+ */
+ function takeWhile(array, predicate, thisArg) {
+ return (array && array.length)
+ ? baseWhile(array, getCallback(predicate, thisArg, 3))
+ : [];
+ }
+
+ /**
+ * Creates an array of unique values, in order, from all of the provided arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.union([1, 2], [4, 2], [2, 1]);
+ * // => [1, 2, 4]
+ */
+ var union = restParam(function(arrays) {
+ return baseUniq(baseFlatten(arrays, false, true));
+ });
+
+ /**
+ * Creates a duplicate-free version of an array, using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons, in which only the first occurence of each element
+ * is kept. Providing `true` for `isSorted` performs a faster search algorithm
+ * for sorted arrays. If an iteratee function is provided it's invoked for
+ * each element in the array to generate the criterion by which uniqueness
+ * is computed. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index, array).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias unique
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {boolean} [isSorted] Specify the array is sorted.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new duplicate-value-free array.
+ * @example
+ *
+ * _.uniq([2, 1, 2]);
+ * // => [2, 1]
+ *
+ * // using `isSorted`
+ * _.uniq([1, 1, 2], true);
+ * // => [1, 2]
+ *
+ * // using an iteratee function
+ * _.uniq([1, 2.5, 1.5, 2], function(n) {
+ * return this.floor(n);
+ * }, Math);
+ * // => [1, 2.5]
+ *
+ * // using the `_.property` callback shorthand
+ * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */
+ function uniq(array, isSorted, iteratee, thisArg) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ if (isSorted != null && typeof isSorted != 'boolean') {
+ thisArg = iteratee;
+ iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
+ isSorted = false;
+ }
+ var callback = getCallback();
+ if (!(iteratee == null && callback === baseCallback)) {
+ iteratee = callback(iteratee, thisArg, 3);
+ }
+ return (isSorted && getIndexOf() === baseIndexOf)
+ ? sortedUniq(array, iteratee)
+ : baseUniq(array, iteratee);
+ }
+
+ /**
+ * This method is like `_.zip` except that it accepts an array of grouped
+ * elements and creates an array regrouping the elements to their pre-zip
+ * configuration.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);
+ * // => [['fred', 30, true], ['barney', 40, false]]
+ *
+ * _.unzip(zipped);
+ * // => [['fred', 'barney'], [30, 40], [true, false]]
+ */
+ function unzip(array) {
+ if (!(array && array.length)) {
+ return [];
+ }
+ var index = -1,
+ length = 0;
+
+ array = arrayFilter(array, function(group) {
+ if (isArrayLike(group)) {
+ length = nativeMax(group.length, length);
+ return true;
+ }
+ });
+ var result = Array(length);
+ while (++index < length) {
+ result[index] = arrayMap(array, baseProperty(index));
+ }
+ return result;
+ }
+
+ /**
+ * This method is like `_.unzip` except that it accepts an iteratee to specify
+ * how regrouped values should be combined. The `iteratee` is bound to `thisArg`
+ * and invoked with four arguments: (accumulator, value, index, group).
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @param {Function} [iteratee] The function to combine regrouped values.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
+ * // => [[1, 10, 100], [2, 20, 200]]
+ *
+ * _.unzipWith(zipped, _.add);
+ * // => [3, 30, 300]
+ */
+ function unzipWith(array, iteratee, thisArg) {
+ var length = array ? array.length : 0;
+ if (!length) {
+ return [];
+ }
+ var result = unzip(array);
+ if (iteratee == null) {
+ return result;
+ }
+ iteratee = bindCallback(iteratee, thisArg, 4);
+ return arrayMap(result, function(group) {
+ return arrayReduce(group, iteratee, undefined, true);
+ });
+ }
+
+ /**
+ * Creates an array excluding all provided values using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to filter.
+ * @param {...*} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.without([1, 2, 1, 3], 1, 2);
+ * // => [3]
+ */
+ var without = restParam(function(array, values) {
+ return isArrayLike(array)
+ ? baseDifference(array, values)
+ : [];
+ });
+
+ /**
+ * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
+ * of the provided arrays.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of values.
+ * @example
+ *
+ * _.xor([1, 2], [4, 2]);
+ * // => [1, 4]
+ */
+ function xor() {
+ var index = -1,
+ length = arguments.length;
+
+ while (++index < length) {
+ var array = arguments[index];
+ if (isArrayLike(array)) {
+ var result = result
+ ? arrayPush(baseDifference(result, array), baseDifference(array, result))
+ : array;
+ }
+ }
+ return result ? baseUniq(result) : [];
+ }
+
+ /**
+ * Creates an array of grouped elements, the first of which contains the first
+ * elements of the given arrays, the second of which contains the second elements
+ * of the given arrays, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zip(['fred', 'barney'], [30, 40], [true, false]);
+ * // => [['fred', 30, true], ['barney', 40, false]]
+ */
+ var zip = restParam(unzip);
+
+ /**
+ * The inverse of `_.pairs`; this method returns an object composed from arrays
+ * of property names and values. Provide either a single two dimensional array,
+ * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
+ * and one of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @alias object
+ * @category Array
+ * @param {Array} props The property names.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObject([['fred', 30], ['barney', 40]]);
+ * // => { 'fred': 30, 'barney': 40 }
+ *
+ * _.zipObject(['fred', 'barney'], [30, 40]);
+ * // => { 'fred': 30, 'barney': 40 }
+ */
+ function zipObject(props, values) {
+ var index = -1,
+ length = props ? props.length : 0,
+ result = {};
+
+ if (length && !values && !isArray(props[0])) {
+ values = [];
+ }
+ while (++index < length) {
+ var key = props[index];
+ if (values) {
+ result[key] = values[index];
+ } else if (key) {
+ result[key[0]] = key[1];
+ }
+ }
+ return result;
+ }
+
+ /**
+ * This method is like `_.zip` except that it accepts an iteratee to specify
+ * how grouped values should be combined. The `iteratee` is bound to `thisArg`
+ * and invoked with four arguments: (accumulator, value, index, group).
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @param {Function} [iteratee] The function to combine grouped values.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zipWith([1, 2], [10, 20], [100, 200], _.add);
+ * // => [111, 222]
+ */
+ var zipWith = restParam(function(arrays) {
+ var length = arrays.length,
+ iteratee = length > 2 ? arrays[length - 2] : undefined,
+ thisArg = length > 1 ? arrays[length - 1] : undefined;
+
+ if (length > 2 && typeof iteratee == 'function') {
+ length -= 2;
+ } else {
+ iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;
+ thisArg = undefined;
+ }
+ arrays.length = length;
+ return unzipWith(arrays, iteratee, thisArg);
+ });
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a `lodash` object that wraps `value` with explicit method
+ * chaining enabled.
+ *
+ * @static
+ * @memberOf _
+ * @category Chain
+ * @param {*} value The value to wrap.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'pebbles', 'age': 1 }
+ * ];
+ *
+ * var youngest = _.chain(users)
+ * .sortBy('age')
+ * .map(function(chr) {
+ * return chr.user + ' is ' + chr.age;
+ * })
+ * .first()
+ * .value();
+ * // => 'pebbles is 1'
+ */
+ function chain(value) {
+ var result = lodash(value);
+ result.__chain__ = true;
+ return result;
+ }
+
+ /**
+ * This method invokes `interceptor` and returns `value`. The interceptor is
+ * bound to `thisArg` and invoked with one argument; (value). The purpose of
+ * this method is to "tap into" a method chain in order to perform operations
+ * on intermediate results within the chain.
+ *
+ * @static
+ * @memberOf _
+ * @category Chain
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @param {*} [thisArg] The `this` binding of `interceptor`.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * _([1, 2, 3])
+ * .tap(function(array) {
+ * array.pop();
+ * })
+ * .reverse()
+ * .value();
+ * // => [2, 1]
+ */
+ function tap(value, interceptor, thisArg) {
+ interceptor.call(thisArg, value);
+ return value;
+ }
+
+ /**
+ * This method is like `_.tap` except that it returns the result of `interceptor`.
+ *
+ * @static
+ * @memberOf _
+ * @category Chain
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @param {*} [thisArg] The `this` binding of `interceptor`.
+ * @returns {*} Returns the result of `interceptor`.
+ * @example
+ *
+ * _(' abc ')
+ * .chain()
+ * .trim()
+ * .thru(function(value) {
+ * return [value];
+ * })
+ * .value();
+ * // => ['abc']
+ */
+ function thru(value, interceptor, thisArg) {
+ return interceptor.call(thisArg, value);
+ }
+
+ /**
+ * Enables explicit method chaining on the wrapper object.
+ *
+ * @name chain
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * // without explicit chaining
+ * _(users).first();
+ * // => { 'user': 'barney', 'age': 36 }
+ *
+ * // with explicit chaining
+ * _(users).chain()
+ * .first()
+ * .pick('user')
+ * .value();
+ * // => { 'user': 'barney' }
+ */
+ function wrapperChain() {
+ return chain(this);
+ }
+
+ /**
+ * Executes the chained sequence and returns the wrapped result.
+ *
+ * @name commit
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2];
+ * var wrapped = _(array).push(3);
+ *
+ * console.log(array);
+ * // => [1, 2]
+ *
+ * wrapped = wrapped.commit();
+ * console.log(array);
+ * // => [1, 2, 3]
+ *
+ * wrapped.last();
+ * // => 3
+ *
+ * console.log(array);
+ * // => [1, 2, 3]
+ */
+ function wrapperCommit() {
+ return new LodashWrapper(this.value(), this.__chain__);
+ }
+
+ /**
+ * Creates a new array joining a wrapped array with any additional arrays
+ * and/or values.
+ *
+ * @name concat
+ * @memberOf _
+ * @category Chain
+ * @param {...*} [values] The values to concatenate.
+ * @returns {Array} Returns the new concatenated array.
+ * @example
+ *
+ * var array = [1];
+ * var wrapped = _(array).concat(2, [3], [[4]]);
+ *
+ * console.log(wrapped.value());
+ * // => [1, 2, 3, [4]]
+ *
+ * console.log(array);
+ * // => [1]
+ */
+ var wrapperConcat = restParam(function(values) {
+ values = baseFlatten(values);
+ return this.thru(function(array) {
+ return arrayConcat(isArray(array) ? array : [toObject(array)], values);
+ });
+ });
+
+ /**
+ * Creates a clone of the chained sequence planting `value` as the wrapped value.
+ *
+ * @name plant
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2];
+ * var wrapped = _(array).map(function(value) {
+ * return Math.pow(value, 2);
+ * });
+ *
+ * var other = [3, 4];
+ * var otherWrapped = wrapped.plant(other);
+ *
+ * otherWrapped.value();
+ * // => [9, 16]
+ *
+ * wrapped.value();
+ * // => [1, 4]
+ */
+ function wrapperPlant(value) {
+ var result,
+ parent = this;
+
+ while (parent instanceof baseLodash) {
+ var clone = wrapperClone(parent);
+ if (result) {
+ previous.__wrapped__ = clone;
+ } else {
+ result = clone;
+ }
+ var previous = clone;
+ parent = parent.__wrapped__;
+ }
+ previous.__wrapped__ = value;
+ return result;
+ }
+
+ /**
+ * Reverses the wrapped array so the first element becomes the last, the
+ * second element becomes the second to last, and so on.
+ *
+ * **Note:** This method mutates the wrapped array.
+ *
+ * @name reverse
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new reversed `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _(array).reverse().value()
+ * // => [3, 2, 1]
+ *
+ * console.log(array);
+ * // => [3, 2, 1]
+ */
+ function wrapperReverse() {
+ var value = this.__wrapped__;
+
+ var interceptor = function(value) {
+ return value.reverse();
+ };
+ if (value instanceof LazyWrapper) {
+ var wrapped = value;
+ if (this.__actions__.length) {
+ wrapped = new LazyWrapper(this);
+ }
+ wrapped = wrapped.reverse();
+ wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
+ return new LodashWrapper(wrapped, this.__chain__);
+ }
+ return this.thru(interceptor);
+ }
+
+ /**
+ * Produces the result of coercing the unwrapped value to a string.
+ *
+ * @name toString
+ * @memberOf _
+ * @category Chain
+ * @returns {string} Returns the coerced string value.
+ * @example
+ *
+ * _([1, 2, 3]).toString();
+ * // => '1,2,3'
+ */
+ function wrapperToString() {
+ return (this.value() + '');
+ }
+
+ /**
+ * Executes the chained sequence to extract the unwrapped value.
+ *
+ * @name value
+ * @memberOf _
+ * @alias run, toJSON, valueOf
+ * @category Chain
+ * @returns {*} Returns the resolved unwrapped value.
+ * @example
+ *
+ * _([1, 2, 3]).value();
+ * // => [1, 2, 3]
+ */
+ function wrapperValue() {
+ return baseWrapperValue(this.__wrapped__, this.__actions__);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates an array of elements corresponding to the given keys, or indexes,
+ * of `collection`. Keys may be specified as individual arguments or as arrays
+ * of keys.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {...(number|number[]|string|string[])} [props] The property names
+ * or indexes of elements to pick, specified individually or in arrays.
+ * @returns {Array} Returns the new array of picked elements.
+ * @example
+ *
+ * _.at(['a', 'b', 'c'], [0, 2]);
+ * // => ['a', 'c']
+ *
+ * _.at(['barney', 'fred', 'pebbles'], 0, 2);
+ * // => ['barney', 'pebbles']
+ */
+ var at = restParam(function(collection, props) {
+ return baseAt(collection, baseFlatten(props));
+ });
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through `iteratee`. The corresponding value
+ * of each key is the number of times the key was returned by `iteratee`.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(n) {
+ * return Math.floor(n);
+ * });
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(n) {
+ * return this.floor(n);
+ * }, Math);
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy(['one', 'two', 'three'], 'length');
+ * // => { '3': 2, '5': 1 }
+ */
+ var countBy = createAggregator(function(result, value, key) {
+ hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
+ });
+
+ /**
+ * Checks if `predicate` returns truthy for **all** elements of `collection`.
+ * The predicate is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias all
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.every([true, 1, null, 'yes'], Boolean);
+ * // => false
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.every(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.every(users, 'active', false);
+ * // => true
+ *
+ * // using the `_.property` callback shorthand
+ * _.every(users, 'active');
+ * // => false
+ */
+ function every(collection, predicate, thisArg) {
+ var func = isArray(collection) ? arrayEvery : baseEvery;
+ if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
+ predicate = undefined;
+ }
+ if (typeof predicate != 'function' || thisArg !== undefined) {
+ predicate = getCallback(predicate, thisArg, 3);
+ }
+ return func(collection, predicate);
+ }
+
+ /**
+ * Iterates over elements of `collection`, returning an array of all elements
+ * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias select
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * _.filter([4, 5, 6], function(n) {
+ * return n % 2 == 0;
+ * });
+ * // => [4, 6]
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.filter(users, 'active', false), 'user');
+ * // => ['fred']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.filter(users, 'active'), 'user');
+ * // => ['barney']
+ */
+ function filter(collection, predicate, thisArg) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ predicate = getCallback(predicate, thisArg, 3);
+ return func(collection, predicate);
+ }
+
+ /**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias detect
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.result(_.find(users, function(chr) {
+ * return chr.age < 40;
+ * }), 'user');
+ * // => 'barney'
+ *
+ * // using the `_.matches` callback shorthand
+ * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
+ * // => 'pebbles'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.result(_.find(users, 'active', false), 'user');
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.result(_.find(users, 'active'), 'user');
+ * // => 'barney'
+ */
+ var find = createFind(baseEach);
+
+ /**
+ * This method is like `_.find` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * _.findLast([1, 2, 3, 4], function(n) {
+ * return n % 2 == 1;
+ * });
+ * // => 3
+ */
+ var findLast = createFind(baseEachRight, true);
+
+ /**
+ * Performs a deep comparison between each element in `collection` and the
+ * source object, returning the first element that has equivalent property
+ * values.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. For comparing a single
+ * own or inherited property value see `_.matchesProperty`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Object} source The object of property values to match.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');
+ * // => 'barney'
+ *
+ * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
+ * // => 'fred'
+ */
+ function findWhere(collection, source) {
+ return find(collection, baseMatches(source));
+ }
+
+ /**
+ * Iterates over elements of `collection` invoking `iteratee` for each element.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection). Iteratee functions may exit iteration early
+ * by explicitly returning `false`.
+ *
+ * **Note:** As with other "Collections" methods, objects with a "length" property
+ * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
+ * may be used for object iteration.
+ *
+ * @static
+ * @memberOf _
+ * @alias each
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array|Object|string} Returns `collection`.
+ * @example
+ *
+ * _([1, 2]).forEach(function(n) {
+ * console.log(n);
+ * }).value();
+ * // => logs each value from left to right and returns the array
+ *
+ * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
+ * console.log(n, key);
+ * });
+ * // => logs each value-key pair and returns the object (iteration order is not guaranteed)
+ */
+ var forEach = createForEach(arrayEach, baseEach);
+
+ /**
+ * This method is like `_.forEach` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias eachRight
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array|Object|string} Returns `collection`.
+ * @example
+ *
+ * _([1, 2]).forEachRight(function(n) {
+ * console.log(n);
+ * }).value();
+ * // => logs each value from right to left and returns the array
+ */
+ var forEachRight = createForEach(arrayEachRight, baseEachRight);
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through `iteratee`. The corresponding value
+ * of each key is an array of the elements responsible for generating the key.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(n) {
+ * return Math.floor(n);
+ * });
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(n) {
+ * return this.floor(n);
+ * }, Math);
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * // using the `_.property` callback shorthand
+ * _.groupBy(['one', 'two', 'three'], 'length');
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */
+ var groupBy = createAggregator(function(result, value, key) {
+ if (hasOwnProperty.call(result, key)) {
+ result[key].push(value);
+ } else {
+ result[key] = [value];
+ }
+ });
+
+ /**
+ * Checks if `target` is in `collection` using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons. If `fromIndex` is negative, it's used as the offset
+ * from the end of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @alias contains, include
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {*} target The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
+ * @returns {boolean} Returns `true` if a matching element is found, else `false`.
+ * @example
+ *
+ * _.includes([1, 2, 3], 1);
+ * // => true
+ *
+ * _.includes([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');
+ * // => true
+ *
+ * _.includes('pebbles', 'eb');
+ * // => true
+ */
+ function includes(collection, target, fromIndex, guard) {
+ var length = collection ? getLength(collection) : 0;
+ if (!isLength(length)) {
+ collection = values(collection);
+ length = collection.length;
+ }
+ if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
+ fromIndex = 0;
+ } else {
+ fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
+ }
+ return (typeof collection == 'string' || !isArray(collection) && isString(collection))
+ ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)
+ : (!!length && getIndexOf(collection, target, fromIndex) > -1);
+ }
+
+ /**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through `iteratee`. The corresponding value
+ * of each key is the last element responsible for generating the key. The
+ * iteratee function is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * var keyData = [
+ * { 'dir': 'left', 'code': 97 },
+ * { 'dir': 'right', 'code': 100 }
+ * ];
+ *
+ * _.indexBy(keyData, 'dir');
+ * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.indexBy(keyData, function(object) {
+ * return String.fromCharCode(object.code);
+ * });
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.indexBy(keyData, function(object) {
+ * return this.fromCharCode(object.code);
+ * }, String);
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ */
+ var indexBy = createAggregator(function(result, value, key) {
+ result[key] = value;
+ });
+
+ /**
+ * Invokes the method at `path` of each element in `collection`, returning
+ * an array of the results of each invoked method. Any additional arguments
+ * are provided to each invoked method. If `methodName` is a function it's
+ * invoked for, and `this` bound to, each element in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Array|Function|string} path The path of the method to invoke or
+ * the function invoked per iteration.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {Array} Returns the array of results.
+ * @example
+ *
+ * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * _.invoke([123, 456], String.prototype.split, '');
+ * // => [['1', '2', '3'], ['4', '5', '6']]
+ */
+ var invoke = restParam(function(collection, path, args) {
+ var index = -1,
+ isFunc = typeof path == 'function',
+ isProp = isKey(path),
+ result = isArrayLike(collection) ? Array(collection.length) : [];
+
+ baseEach(collection, function(value) {
+ var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
+ result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
+ });
+ return result;
+ });
+
+ /**
+ * Creates an array of values by running each element in `collection` through
+ * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+ *
+ * The guarded methods are:
+ * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,
+ * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,
+ * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,
+ * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,
+ * `sum`, `uniq`, and `words`
+ *
+ * @static
+ * @memberOf _
+ * @alias collect
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new mapped array.
+ * @example
+ *
+ * function timesThree(n) {
+ * return n * 3;
+ * }
+ *
+ * _.map([1, 2], timesThree);
+ * // => [3, 6]
+ *
+ * _.map({ 'a': 1, 'b': 2 }, timesThree);
+ * // => [3, 6] (iteration order is not guaranteed)
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * // using the `_.property` callback shorthand
+ * _.map(users, 'user');
+ * // => ['barney', 'fred']
+ */
+ function map(collection, iteratee, thisArg) {
+ var func = isArray(collection) ? arrayMap : baseMap;
+ iteratee = getCallback(iteratee, thisArg, 3);
+ return func(collection, iteratee);
+ }
+
+ /**
+ * Creates an array of elements split into two groups, the first of which
+ * contains elements `predicate` returns truthy for, while the second of which
+ * contains elements `predicate` returns falsey for. The predicate is bound
+ * to `thisArg` and invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the array of grouped elements.
+ * @example
+ *
+ * _.partition([1, 2, 3], function(n) {
+ * return n % 2;
+ * });
+ * // => [[1, 3], [2]]
+ *
+ * _.partition([1.2, 2.3, 3.4], function(n) {
+ * return this.floor(n) % 2;
+ * }, Math);
+ * // => [[1.2, 3.4], [2.3]]
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true },
+ * { 'user': 'pebbles', 'age': 1, 'active': false }
+ * ];
+ *
+ * var mapper = function(array) {
+ * return _.pluck(array, 'user');
+ * };
+ *
+ * // using the `_.matches` callback shorthand
+ * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);
+ * // => [['pebbles'], ['barney', 'fred']]
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.map(_.partition(users, 'active', false), mapper);
+ * // => [['barney', 'pebbles'], ['fred']]
+ *
+ * // using the `_.property` callback shorthand
+ * _.map(_.partition(users, 'active'), mapper);
+ * // => [['fred'], ['barney', 'pebbles']]
+ */
+ var partition = createAggregator(function(result, value, key) {
+ result[key ? 0 : 1].push(value);
+ }, function() { return [[], []]; });
+
+ /**
+ * Gets the property value of `path` from all elements in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Array|string} path The path of the property to pluck.
+ * @returns {Array} Returns the property values.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.pluck(users, 'user');
+ * // => ['barney', 'fred']
+ *
+ * var userIndex = _.indexBy(users, 'user');
+ * _.pluck(userIndex, 'age');
+ * // => [36, 40] (iteration order is not guaranteed)
+ */
+ function pluck(collection, path) {
+ return map(collection, property(path));
+ }
+
+ /**
+ * Reduces `collection` to a value which is the accumulated result of running
+ * each element in `collection` through `iteratee`, where each successive
+ * invocation is supplied the return value of the previous. If `accumulator`
+ * is not provided the first element of `collection` is used as the initial
+ * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
+ * (accumulator, value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.reduce`, `_.reduceRight`, and `_.transform`.
+ *
+ * The guarded methods are:
+ * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,
+ * and `sortByOrder`
+ *
+ * @static
+ * @memberOf _
+ * @alias foldl, inject
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * _.reduce([1, 2], function(total, n) {
+ * return total + n;
+ * });
+ * // => 3
+ *
+ * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
+ * result[key] = n * 3;
+ * return result;
+ * }, {});
+ * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
+ */
+ var reduce = createReduce(arrayReduce, baseEach);
+
+ /**
+ * This method is like `_.reduce` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias foldr
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * var array = [[0, 1], [2, 3], [4, 5]];
+ *
+ * _.reduceRight(array, function(flattened, other) {
+ * return flattened.concat(other);
+ * }, []);
+ * // => [4, 5, 2, 3, 0, 1]
+ */
+ var reduceRight = createReduce(arrayReduceRight, baseEachRight);
+
+ /**
+ * The opposite of `_.filter`; this method returns the elements of `collection`
+ * that `predicate` does **not** return truthy for.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * _.reject([1, 2, 3, 4], function(n) {
+ * return n % 2 == 0;
+ * });
+ * // => [1, 3]
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.reject(users, 'active', false), 'user');
+ * // => ['fred']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.reject(users, 'active'), 'user');
+ * // => ['barney']
+ */
+ function reject(collection, predicate, thisArg) {
+ var func = isArray(collection) ? arrayFilter : baseFilter;
+ predicate = getCallback(predicate, thisArg, 3);
+ return func(collection, function(value, index, collection) {
+ return !predicate(value, index, collection);
+ });
+ }
+
+ /**
+ * Gets a random element or `n` random elements from a collection.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to sample.
+ * @param {number} [n] The number of elements to sample.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {*} Returns the random sample(s).
+ * @example
+ *
+ * _.sample([1, 2, 3, 4]);
+ * // => 2
+ *
+ * _.sample([1, 2, 3, 4], 2);
+ * // => [3, 1]
+ */
+ function sample(collection, n, guard) {
+ if (guard ? isIterateeCall(collection, n, guard) : n == null) {
+ collection = toIterable(collection);
+ var length = collection.length;
+ return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
+ }
+ var index = -1,
+ result = toArray(collection),
+ length = result.length,
+ lastIndex = length - 1;
+
+ n = nativeMin(n < 0 ? 0 : (+n || 0), length);
+ while (++index < n) {
+ var rand = baseRandom(index, lastIndex),
+ value = result[rand];
+
+ result[rand] = result[index];
+ result[index] = value;
+ }
+ result.length = n;
+ return result;
+ }
+
+ /**
+ * Creates an array of shuffled values, using a version of the
+ * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ * @example
+ *
+ * _.shuffle([1, 2, 3, 4]);
+ * // => [4, 1, 3, 2]
+ */
+ function shuffle(collection) {
+ return sample(collection, POSITIVE_INFINITY);
+ }
+
+ /**
+ * Gets the size of `collection` by returning its length for array-like
+ * values or the number of own enumerable properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @returns {number} Returns the size of `collection`.
+ * @example
+ *
+ * _.size([1, 2, 3]);
+ * // => 3
+ *
+ * _.size({ 'a': 1, 'b': 2 });
+ * // => 2
+ *
+ * _.size('pebbles');
+ * // => 7
+ */
+ function size(collection) {
+ var length = collection ? getLength(collection) : 0;
+ return isLength(length) ? length : keys(collection).length;
+ }
+
+ /**
+ * Checks if `predicate` returns truthy for **any** element of `collection`.
+ * The function returns as soon as it finds a passing value and does not iterate
+ * over the entire collection. The predicate is bound to `thisArg` and invoked
+ * with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias any
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.some([null, 0, 'yes', false], Boolean);
+ * // => true
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.some(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.some(users, 'active', false);
+ * // => true
+ *
+ * // using the `_.property` callback shorthand
+ * _.some(users, 'active');
+ * // => true
+ */
+ function some(collection, predicate, thisArg) {
+ var func = isArray(collection) ? arraySome : baseSome;
+ if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
+ predicate = undefined;
+ }
+ if (typeof predicate != 'function' || thisArg !== undefined) {
+ predicate = getCallback(predicate, thisArg, 3);
+ }
+ return func(collection, predicate);
+ }
+
+ /**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection through `iteratee`. This method performs
+ * a stable sort, that is, it preserves the original sort order of equal elements.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * _.sortBy([1, 2, 3], function(n) {
+ * return Math.sin(n);
+ * });
+ * // => [3, 1, 2]
+ *
+ * _.sortBy([1, 2, 3], function(n) {
+ * return this.sin(n);
+ * }, Math);
+ * // => [3, 1, 2]
+ *
+ * var users = [
+ * { 'user': 'fred' },
+ * { 'user': 'pebbles' },
+ * { 'user': 'barney' }
+ * ];
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.sortBy(users, 'user'), 'user');
+ * // => ['barney', 'fred', 'pebbles']
+ */
+ function sortBy(collection, iteratee, thisArg) {
+ if (collection == null) {
+ return [];
+ }
+ if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
+ iteratee = undefined;
+ }
+ var index = -1;
+ iteratee = getCallback(iteratee, thisArg, 3);
+
+ var result = baseMap(collection, function(value, key, collection) {
+ return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };
+ });
+ return baseSortBy(result, compareAscending);
+ }
+
+ /**
+ * This method is like `_.sortBy` except that it can sort by multiple iteratees
+ * or property names.
+ *
+ * If a property name is provided for an iteratee the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If an object is provided for an iteratee the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees
+ * The iteratees to sort by, specified as individual values or arrays of values.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 42 },
+ * { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * _.map(_.sortByAll(users, ['user', 'age']), _.values);
+ * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
+ *
+ * _.map(_.sortByAll(users, 'user', function(chr) {
+ * return Math.floor(chr.age / 10);
+ * }), _.values);
+ * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+ */
+ var sortByAll = restParam(function(collection, iteratees) {
+ if (collection == null) {
+ return [];
+ }
+ var guard = iteratees[2];
+ if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {
+ iteratees.length = 1;
+ }
+ return baseSortByOrder(collection, baseFlatten(iteratees), []);
+ });
+
+ /**
+ * This method is like `_.sortByAll` except that it allows specifying the
+ * sort orders of the iteratees to sort by. If `orders` is unspecified, all
+ * values are sorted in ascending order. Otherwise, a value is sorted in
+ * ascending order if its corresponding order is "asc", and descending if "desc".
+ *
+ * If a property name is provided for an iteratee the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If an object is provided for an iteratee the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {boolean[]} [orders] The sort orders of `iteratees`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 34 },
+ * { 'user': 'fred', 'age': 42 },
+ * { 'user': 'barney', 'age': 36 }
+ * ];
+ *
+ * // sort by `user` in ascending order and by `age` in descending order
+ * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
+ * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+ */
+ function sortByOrder(collection, iteratees, orders, guard) {
+ if (collection == null) {
+ return [];
+ }
+ if (guard && isIterateeCall(iteratees, orders, guard)) {
+ orders = undefined;
+ }
+ if (!isArray(iteratees)) {
+ iteratees = iteratees == null ? [] : [iteratees];
+ }
+ if (!isArray(orders)) {
+ orders = orders == null ? [] : [orders];
+ }
+ return baseSortByOrder(collection, iteratees, orders);
+ }
+
+ /**
+ * Performs a deep comparison between each element in `collection` and the
+ * source object, returning an array of all elements that have equivalent
+ * property values.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. For comparing a single
+ * own or inherited property value see `_.matchesProperty`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Object} source The object of property values to match.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },
+ * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }
+ * ];
+ *
+ * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');
+ * // => ['barney']
+ *
+ * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');
+ * // => ['fred']
+ */
+ function where(collection, source) {
+ return filter(collection, baseMatches(source));
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Gets the number of milliseconds that have elapsed since the Unix epoch
+ * (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @category Date
+ * @example
+ *
+ * _.defer(function(stamp) {
+ * console.log(_.now() - stamp);
+ * }, _.now());
+ * // => logs the number of milliseconds it took for the deferred function to be invoked
+ */
+ var now = nativeNow || function() {
+ return new Date().getTime();
+ };
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * The opposite of `_.before`; this method creates a function that invokes
+ * `func` once it's called `n` or more times.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {number} n The number of calls before `func` is invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var saves = ['profile', 'settings'];
+ *
+ * var done = _.after(saves.length, function() {
+ * console.log('done saving!');
+ * });
+ *
+ * _.forEach(saves, function(type) {
+ * asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => logs 'done saving!' after the two async saves have completed
+ */
+ function after(n, func) {
+ if (typeof func != 'function') {
+ if (typeof n == 'function') {
+ var temp = n;
+ n = func;
+ func = temp;
+ } else {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ }
+ n = nativeIsFinite(n = +n) ? n : 0;
+ return function() {
+ if (--n < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+
+ /**
+ * Creates a function that accepts up to `n` arguments ignoring any
+ * additional arguments.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to cap arguments for.
+ * @param {number} [n=func.length] The arity cap.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * _.map(['6', '8', '10'], _.ary(parseInt, 1));
+ * // => [6, 8, 10]
+ */
+ function ary(func, n, guard) {
+ if (guard && isIterateeCall(func, n, guard)) {
+ n = undefined;
+ }
+ n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);
+ return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
+ }
+
+ /**
+ * Creates a function that invokes `func`, with the `this` binding and arguments
+ * of the created function, while it's called less than `n` times. Subsequent
+ * calls to the created function return the result of the last `func` invocation.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {number} n The number of calls at which `func` is no longer invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * jQuery('#add').on('click', _.before(5, addContactToList));
+ * // => allows adding up to 4 contacts to the list
+ */
+ function before(n, func) {
+ var result;
+ if (typeof func != 'function') {
+ if (typeof n == 'function') {
+ var temp = n;
+ n = func;
+ func = temp;
+ } else {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ }
+ return function() {
+ if (--n > 0) {
+ result = func.apply(this, arguments);
+ }
+ if (n <= 1) {
+ func = undefined;
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
+ * and prepends any additional `_.bind` arguments to those provided to the
+ * bound function.
+ *
+ * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** Unlike native `Function#bind` this method does not set the "length"
+ * property of bound functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var greet = function(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * };
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * var bound = _.bind(greet, object, 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * // using placeholders
+ * var bound = _.bind(greet, object, _, '!');
+ * bound('hi');
+ * // => 'hi fred!'
+ */
+ var bind = restParam(function(func, thisArg, partials) {
+ var bitmask = BIND_FLAG;
+ if (partials.length) {
+ var holders = replaceHolders(partials, bind.placeholder);
+ bitmask |= PARTIAL_FLAG;
+ }
+ return createWrapper(func, bitmask, thisArg, partials, holders);
+ });
+
+ /**
+ * Binds methods of an object to the object itself, overwriting the existing
+ * method. Method names may be specified as individual arguments or as arrays
+ * of method names. If no method names are provided all enumerable function
+ * properties, own and inherited, of `object` are bound.
+ *
+ * **Note:** This method does not set the "length" property of bound functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Object} object The object to bind and assign the bound methods to.
+ * @param {...(string|string[])} [methodNames] The object method names to bind,
+ * specified as individual method names or arrays of method names.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var view = {
+ * 'label': 'docs',
+ * 'onClick': function() {
+ * console.log('clicked ' + this.label);
+ * }
+ * };
+ *
+ * _.bindAll(view);
+ * jQuery('#docs').on('click', view.onClick);
+ * // => logs 'clicked docs' when the element is clicked
+ */
+ var bindAll = restParam(function(object, methodNames) {
+ methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
+
+ var index = -1,
+ length = methodNames.length;
+
+ while (++index < length) {
+ var key = methodNames[index];
+ object[key] = createWrapper(object[key], BIND_FLAG, object);
+ }
+ return object;
+ });
+
+ /**
+ * Creates a function that invokes the method at `object[key]` and prepends
+ * any additional `_.bindKey` arguments to those provided to the bound function.
+ *
+ * This method differs from `_.bind` by allowing bound functions to reference
+ * methods that may be redefined or don't yet exist.
+ * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
+ * for more details.
+ *
+ * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Object} object The object the method belongs to.
+ * @param {string} key The key of the method.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var object = {
+ * 'user': 'fred',
+ * 'greet': function(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * }
+ * };
+ *
+ * var bound = _.bindKey(object, 'greet', 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * object.greet = function(greeting, punctuation) {
+ * return greeting + 'ya ' + this.user + punctuation;
+ * };
+ *
+ * bound('!');
+ * // => 'hiya fred!'
+ *
+ * // using placeholders
+ * var bound = _.bindKey(object, 'greet', _, '!');
+ * bound('hi');
+ * // => 'hiya fred!'
+ */
+ var bindKey = restParam(function(object, key, partials) {
+ var bitmask = BIND_FLAG | BIND_KEY_FLAG;
+ if (partials.length) {
+ var holders = replaceHolders(partials, bindKey.placeholder);
+ bitmask |= PARTIAL_FLAG;
+ }
+ return createWrapper(key, bitmask, object, partials, holders);
+ });
+
+ /**
+ * Creates a function that accepts one or more arguments of `func` that when
+ * called either invokes `func` returning its result, if all `func` arguments
+ * have been provided, or returns a function that accepts one or more of the
+ * remaining `func` arguments, and so on. The arity of `func` may be specified
+ * if `func.length` is not sufficient.
+ *
+ * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method does not set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curry(abc);
+ *
+ * curried(1)(2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // using placeholders
+ * curried(1)(_, 3)(2);
+ * // => [1, 2, 3]
+ */
+ var curry = createCurry(CURRY_FLAG);
+
+ /**
+ * This method is like `_.curry` except that arguments are applied to `func`
+ * in the manner of `_.partialRight` instead of `_.partial`.
+ *
+ * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method does not set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curryRight(abc);
+ *
+ * curried(3)(2)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(2, 3)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // using placeholders
+ * curried(3)(1, _)(2);
+ * // => [1, 2, 3]
+ */
+ var curryRight = createCurry(CURRY_RIGHT_FLAG);
+
+ /**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed invocations. Provide an options object to indicate that `func`
+ * should be invoked on the leading and/or trailing edge of the `wait` timeout.
+ * Subsequent calls to the debounced function return the result of the last
+ * `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the debounced function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=false] Specify invoking on the leading
+ * edge of the timeout.
+ * @param {number} [options.maxWait] The maximum time `func` is allowed to be
+ * delayed before it's invoked.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ * edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // avoid costly calculations while the window size is in flux
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
+ * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
+ * 'leading': true,
+ * 'trailing': false
+ * }));
+ *
+ * // ensure `batchLog` is invoked once after 1 second of debounced calls
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', _.debounce(batchLog, 250, {
+ * 'maxWait': 1000
+ * }));
+ *
+ * // cancel a debounced call
+ * var todoChanges = _.debounce(batchLog, 1000);
+ * Object.observe(models.todo, todoChanges);
+ *
+ * Object.observe(models, function(changes) {
+ * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
+ * todoChanges.cancel();
+ * }
+ * }, ['delete']);
+ *
+ * // ...at some point `models.todo` is changed
+ * models.todo.completed = true;
+ *
+ * // ...before 1 second has passed `models.todo` is deleted
+ * // which cancels the debounced `todoChanges` call
+ * delete models.todo;
+ */
+ function debounce(func, wait, options) {
+ var args,
+ maxTimeoutId,
+ result,
+ stamp,
+ thisArg,
+ timeoutId,
+ trailingCall,
+ lastCalled = 0,
+ maxWait = false,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ wait = wait < 0 ? 0 : (+wait || 0);
+ if (options === true) {
+ var leading = true;
+ trailing = false;
+ } else if (isObject(options)) {
+ leading = !!options.leading;
+ maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+
+ function cancel() {
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+ if (maxTimeoutId) {
+ clearTimeout(maxTimeoutId);
+ }
+ lastCalled = 0;
+ maxTimeoutId = timeoutId = trailingCall = undefined;
+ }
+
+ function complete(isCalled, id) {
+ if (id) {
+ clearTimeout(id);
+ }
+ maxTimeoutId = timeoutId = trailingCall = undefined;
+ if (isCalled) {
+ lastCalled = now();
+ result = func.apply(thisArg, args);
+ if (!timeoutId && !maxTimeoutId) {
+ args = thisArg = undefined;
+ }
+ }
+ }
+
+ function delayed() {
+ var remaining = wait - (now() - stamp);
+ if (remaining <= 0 || remaining > wait) {
+ complete(trailingCall, maxTimeoutId);
+ } else {
+ timeoutId = setTimeout(delayed, remaining);
+ }
+ }
+
+ function maxDelayed() {
+ complete(trailing, timeoutId);
+ }
+
+ function debounced() {
+ args = arguments;
+ stamp = now();
+ thisArg = this;
+ trailingCall = trailing && (timeoutId || !leading);
+
+ if (maxWait === false) {
+ var leadingCall = leading && !timeoutId;
+ } else {
+ if (!maxTimeoutId && !leading) {
+ lastCalled = stamp;
+ }
+ var remaining = maxWait - (stamp - lastCalled),
+ isCalled = remaining <= 0 || remaining > maxWait;
+
+ if (isCalled) {
+ if (maxTimeoutId) {
+ maxTimeoutId = clearTimeout(maxTimeoutId);
+ }
+ lastCalled = stamp;
+ result = func.apply(thisArg, args);
+ }
+ else if (!maxTimeoutId) {
+ maxTimeoutId = setTimeout(maxDelayed, remaining);
+ }
+ }
+ if (isCalled && timeoutId) {
+ timeoutId = clearTimeout(timeoutId);
+ }
+ else if (!timeoutId && wait !== maxWait) {
+ timeoutId = setTimeout(delayed, wait);
+ }
+ if (leadingCall) {
+ isCalled = true;
+ result = func.apply(thisArg, args);
+ }
+ if (isCalled && !timeoutId && !maxTimeoutId) {
+ args = thisArg = undefined;
+ }
+ return result;
+ }
+ debounced.cancel = cancel;
+ return debounced;
+ }
+
+ /**
+ * Defers invoking the `func` until the current call stack has cleared. Any
+ * additional arguments are provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to defer.
+ * @param {...*} [args] The arguments to invoke the function with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.defer(function(text) {
+ * console.log(text);
+ * }, 'deferred');
+ * // logs 'deferred' after one or more milliseconds
+ */
+ var defer = restParam(function(func, args) {
+ return baseDelay(func, 1, args);
+ });
+
+ /**
+ * Invokes `func` after `wait` milliseconds. Any additional arguments are
+ * provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {...*} [args] The arguments to invoke the function with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.delay(function(text) {
+ * console.log(text);
+ * }, 1000, 'later');
+ * // => logs 'later' after one second
+ */
+ var delay = restParam(function(func, wait, args) {
+ return baseDelay(func, wait, args);
+ });
+
+ /**
+ * Creates a function that returns the result of invoking the provided
+ * functions with the `this` binding of the created function, where each
+ * successive invocation is supplied the return value of the previous.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {...Function} [funcs] Functions to invoke.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var addSquare = _.flow(_.add, square);
+ * addSquare(1, 2);
+ * // => 9
+ */
+ var flow = createFlow();
+
+ /**
+ * This method is like `_.flow` except that it creates a function that
+ * invokes the provided functions from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias backflow, compose
+ * @category Function
+ * @param {...Function} [funcs] Functions to invoke.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var addSquare = _.flowRight(square, _.add);
+ * addSquare(1, 2);
+ * // => 9
+ */
+ var flowRight = createFlow(true);
+
+ /**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is coerced to a string and used as the
+ * cache key. The `func` is invoked with the `this` binding of the memoized
+ * function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoizing function.
+ * @example
+ *
+ * var upperCase = _.memoize(function(string) {
+ * return string.toUpperCase();
+ * });
+ *
+ * upperCase('fred');
+ * // => 'FRED'
+ *
+ * // modifying the result cache
+ * upperCase.cache.set('fred', 'BARNEY');
+ * upperCase('fred');
+ * // => 'BARNEY'
+ *
+ * // replacing `_.memoize.Cache`
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'barney' };
+ * var identity = _.memoize(_.identity);
+ *
+ * identity(object);
+ * // => { 'user': 'fred' }
+ * identity(other);
+ * // => { 'user': 'fred' }
+ *
+ * _.memoize.Cache = WeakMap;
+ * var identity = _.memoize(_.identity);
+ *
+ * identity(object);
+ * // => { 'user': 'fred' }
+ * identity(other);
+ * // => { 'user': 'barney' }
+ */
+ function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result);
+ return result;
+ };
+ memoized.cache = new memoize.Cache;
+ return memoized;
+ }
+
+ /**
+ * Creates a function that runs each argument through a corresponding
+ * transform function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to wrap.
+ * @param {...(Function|Function[])} [transforms] The functions to transform
+ * arguments, specified as individual functions or arrays of functions.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function doubled(n) {
+ * return n * 2;
+ * }
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var modded = _.modArgs(function(x, y) {
+ * return [x, y];
+ * }, square, doubled);
+ *
+ * modded(1, 2);
+ * // => [1, 4]
+ *
+ * modded(5, 10);
+ * // => [25, 20]
+ */
+ var modArgs = restParam(function(func, transforms) {
+ transforms = baseFlatten(transforms);
+ if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var length = transforms.length;
+ return restParam(function(args) {
+ var index = nativeMin(args.length, length);
+ while (index--) {
+ args[index] = transforms[index](args[index]);
+ }
+ return func.apply(this, args);
+ });
+ });
+
+ /**
+ * Creates a function that negates the result of the predicate `func`. The
+ * `func` predicate is invoked with the `this` binding and arguments of the
+ * created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} predicate The predicate to negate.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function isEven(n) {
+ * return n % 2 == 0;
+ * }
+ *
+ * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
+ * // => [1, 3, 5]
+ */
+ function negate(predicate) {
+ if (typeof predicate != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+ }
+
+ /**
+ * Creates a function that is restricted to invoking `func` once. Repeat calls
+ * to the function return the value of the first call. The `func` is invoked
+ * with the `this` binding and arguments of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var initialize = _.once(createApplication);
+ * initialize();
+ * initialize();
+ * // `initialize` invokes `createApplication` once
+ */
+ function once(func) {
+ return before(2, func);
+ }
+
+ /**
+ * Creates a function that invokes `func` with `partial` arguments prepended
+ * to those provided to the new function. This method is like `_.bind` except
+ * it does **not** alter the `this` binding.
+ *
+ * The `_.partial.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method does not set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var greet = function(greeting, name) {
+ * return greeting + ' ' + name;
+ * };
+ *
+ * var sayHelloTo = _.partial(greet, 'hello');
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ *
+ * // using placeholders
+ * var greetFred = _.partial(greet, _, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ */
+ var partial = createPartial(PARTIAL_FLAG);
+
+ /**
+ * This method is like `_.partial` except that partially applied arguments
+ * are appended to those provided to the new function.
+ *
+ * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method does not set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var greet = function(greeting, name) {
+ * return greeting + ' ' + name;
+ * };
+ *
+ * var greetFred = _.partialRight(greet, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ *
+ * // using placeholders
+ * var sayHelloTo = _.partialRight(greet, 'hello', _);
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ */
+ var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
+
+ /**
+ * Creates a function that invokes `func` with arguments arranged according
+ * to the specified indexes where the argument value at the first index is
+ * provided as the first argument, the argument value at the second index is
+ * provided as the second argument, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to rearrange arguments for.
+ * @param {...(number|number[])} indexes The arranged argument indexes,
+ * specified as individual indexes or arrays of indexes.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var rearged = _.rearg(function(a, b, c) {
+ * return [a, b, c];
+ * }, 2, 0, 1);
+ *
+ * rearged('b', 'c', 'a')
+ * // => ['a', 'b', 'c']
+ *
+ * var map = _.rearg(_.map, [1, 0]);
+ * map(function(n) {
+ * return n * 3;
+ * }, [1, 2, 3]);
+ * // => [3, 6, 9]
+ */
+ var rearg = restParam(function(func, indexes) {
+ return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
+ });
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+ function restParam(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ rest = Array(length);
+
+ while (++index < length) {
+ rest[index] = args[start + index];
+ }
+ switch (start) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, args[0], rest);
+ case 2: return func.call(this, args[0], args[1], rest);
+ }
+ var otherArgs = Array(start + 1);
+ index = -1;
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = rest;
+ return func.apply(this, otherArgs);
+ };
+ }
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of the created
+ * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
+ *
+ * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Spread_operator).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to spread arguments over.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.spread(function(who, what) {
+ * return who + ' says ' + what;
+ * });
+ *
+ * say(['fred', 'hello']);
+ * // => 'fred says hello'
+ *
+ * // with a Promise
+ * var numbers = Promise.all([
+ * Promise.resolve(40),
+ * Promise.resolve(36)
+ * ]);
+ *
+ * numbers.then(_.spread(function(x, y) {
+ * return x + y;
+ * }));
+ * // => a Promise of 76
+ */
+ function spread(func) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ return function(array) {
+ return func.apply(this, array);
+ };
+ }
+
+ /**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed invocations. Provide an options object to indicate
+ * that `func` should be invoked on the leading and/or trailing edge of the
+ * `wait` timeout. Subsequent calls to the throttled function return the
+ * result of the last `func` call.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the throttled function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=true] Specify invoking on the leading
+ * edge of the timeout.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ * edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // avoid excessively updating the position while scrolling
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
+ * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
+ * 'trailing': false
+ * }));
+ *
+ * // cancel a trailing throttled call
+ * jQuery(window).on('popstate', throttled.cancel);
+ */
+ function throttle(func, wait, options) {
+ var leading = true,
+ trailing = true;
+
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ if (options === false) {
+ leading = false;
+ } else if (isObject(options)) {
+ leading = 'leading' in options ? !!options.leading : leading;
+ trailing = 'trailing' in options ? !!options.trailing : trailing;
+ }
+ return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
+ }
+
+ /**
+ * Creates a function that provides `value` to the wrapper function as its
+ * first argument. Any additional arguments provided to the function are
+ * appended to those provided to the wrapper function. The wrapper is invoked
+ * with the `this` binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {*} value The value to wrap.
+ * @param {Function} wrapper The wrapper function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var p = _.wrap(_.escape, function(func, text) {
+ * return '<p>' + func(text) + '</p>';
+ * });
+ *
+ * p('fred, barney, & pebbles');
+ * // => '<p>fred, barney, &amp; pebbles</p>'
+ */
+ function wrap(value, wrapper) {
+ wrapper = wrapper == null ? identity : wrapper;
+ return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,
+ * otherwise they are assigned by reference. If `customizer` is provided it's
+ * invoked to produce the cloned values. If `customizer` returns `undefined`
+ * cloning is handled by the method instead. The `customizer` is bound to
+ * `thisArg` and invoked with up to three argument; (value [, index|key, object]).
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
+ * The enumerable properties of `arguments` objects and objects created by
+ * constructors other than `Object` are cloned to plain `Object` objects. An
+ * empty object is returned for uncloneable values such as functions, DOM nodes,
+ * Maps, Sets, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {Function} [customizer] The function to customize cloning values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {*} Returns the cloned value.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * var shallow = _.clone(users);
+ * shallow[0] === users[0];
+ * // => true
+ *
+ * var deep = _.clone(users, true);
+ * deep[0] === users[0];
+ * // => false
+ *
+ * // using a customizer callback
+ * var el = _.clone(document.body, function(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(false);
+ * }
+ * });
+ *
+ * el === document.body
+ * // => false
+ * el.nodeName
+ * // => BODY
+ * el.childNodes.length;
+ * // => 0
+ */
+ function clone(value, isDeep, customizer, thisArg) {
+ if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {
+ isDeep = false;
+ }
+ else if (typeof isDeep == 'function') {
+ thisArg = customizer;
+ customizer = isDeep;
+ isDeep = false;
+ }
+ return typeof customizer == 'function'
+ ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 3))
+ : baseClone(value, isDeep);
+ }
+
+ /**
+ * Creates a deep clone of `value`. If `customizer` is provided it's invoked
+ * to produce the cloned values. If `customizer` returns `undefined` cloning
+ * is handled by the method instead. The `customizer` is bound to `thisArg`
+ * and invoked with up to three argument; (value [, index|key, object]).
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
+ * The enumerable properties of `arguments` objects and objects created by
+ * constructors other than `Object` are cloned to plain `Object` objects. An
+ * empty object is returned for uncloneable values such as functions, DOM nodes,
+ * Maps, Sets, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to deep clone.
+ * @param {Function} [customizer] The function to customize cloning values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {*} Returns the deep cloned value.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * var deep = _.cloneDeep(users);
+ * deep[0] === users[0];
+ * // => false
+ *
+ * // using a customizer callback
+ * var el = _.cloneDeep(document.body, function(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(true);
+ * }
+ * });
+ *
+ * el === document.body
+ * // => false
+ * el.nodeName
+ * // => BODY
+ * el.childNodes.length;
+ * // => 20
+ */
+ function cloneDeep(value, customizer, thisArg) {
+ return typeof customizer == 'function'
+ ? baseClone(value, true, bindCallback(customizer, thisArg, 3))
+ : baseClone(value, true);
+ }
+
+ /**
+ * Checks if `value` is greater than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.
+ * @example
+ *
+ * _.gt(3, 1);
+ * // => true
+ *
+ * _.gt(3, 3);
+ * // => false
+ *
+ * _.gt(1, 3);
+ * // => false
+ */
+ function gt(value, other) {
+ return value > other;
+ }
+
+ /**
+ * Checks if `value` is greater than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.
+ * @example
+ *
+ * _.gte(3, 1);
+ * // => true
+ *
+ * _.gte(3, 3);
+ * // => true
+ *
+ * _.gte(1, 3);
+ * // => false
+ */
+ function gte(value, other) {
+ return value >= other;
+ }
+
+ /**
+ * Checks if `value` is classified as an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ return isObjectLike(value) && isArrayLike(value) &&
+ hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+ }
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+ var isArray = nativeIsArray || function(value) {
+ return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+ };
+
+ /**
+ * Checks if `value` is classified as a boolean primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isBoolean(false);
+ * // => true
+ *
+ * _.isBoolean(null);
+ * // => false
+ */
+ function isBoolean(value) {
+ return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
+ }
+
+ /**
+ * Checks if `value` is classified as a `Date` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isDate(new Date);
+ * // => true
+ *
+ * _.isDate('Mon April 23 2012');
+ * // => false
+ */
+ function isDate(value) {
+ return isObjectLike(value) && objToString.call(value) == dateTag;
+ }
+
+ /**
+ * Checks if `value` is a DOM element.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+ * @example
+ *
+ * _.isElement(document.body);
+ * // => true
+ *
+ * _.isElement('<body>');
+ * // => false
+ */
+ function isElement(value) {
+ return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
+ }
+
+ /**
+ * Checks if `value` is empty. A value is considered empty unless it's an
+ * `arguments` object, array, string, or jQuery-like collection with a length
+ * greater than `0` or an object with own enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {Array|Object|string} value The value to inspect.
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty(null);
+ * // => true
+ *
+ * _.isEmpty(true);
+ * // => true
+ *
+ * _.isEmpty(1);
+ * // => true
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({ 'a': 1 });
+ * // => false
+ */
+ function isEmpty(value) {
+ if (value == null) {
+ return true;
+ }
+ if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||
+ (isObjectLike(value) && isFunction(value.splice)))) {
+ return !value.length;
+ }
+ return !keys(value).length;
+ }
+
+ /**
+ * Performs a deep comparison between two values to determine if they are
+ * equivalent. If `customizer` is provided it's invoked to compare values.
+ * If `customizer` returns `undefined` comparisons are handled by the method
+ * instead. The `customizer` is bound to `thisArg` and invoked with up to
+ * three arguments: (value, other [, index|key]).
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. Functions and DOM nodes
+ * are **not** supported. Provide a customizer function to extend support
+ * for comparing other values.
+ *
+ * @static
+ * @memberOf _
+ * @alias eq
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize value comparisons.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * object == other;
+ * // => false
+ *
+ * _.isEqual(object, other);
+ * // => true
+ *
+ * // using a customizer callback
+ * var array = ['hello', 'goodbye'];
+ * var other = ['hi', 'goodbye'];
+ *
+ * _.isEqual(array, other, function(value, other) {
+ * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {
+ * return true;
+ * }
+ * });
+ * // => true
+ */
+ function isEqual(value, other, customizer, thisArg) {
+ customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
+ var result = customizer ? customizer(value, other) : undefined;
+ return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
+ }
+
+ /**
+ * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
+ * `SyntaxError`, `TypeError`, or `URIError` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
+ * @example
+ *
+ * _.isError(new Error);
+ * // => true
+ *
+ * _.isError(Error);
+ * // => false
+ */
+ function isError(value) {
+ return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
+ }
+
+ /**
+ * Checks if `value` is a finite primitive number.
+ *
+ * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
+ * @example
+ *
+ * _.isFinite(10);
+ * // => true
+ *
+ * _.isFinite('10');
+ * // => false
+ *
+ * _.isFinite(true);
+ * // => false
+ *
+ * _.isFinite(Object(10));
+ * // => false
+ *
+ * _.isFinite(Infinity);
+ * // => false
+ */
+ function isFinite(value) {
+ return typeof value == 'number' && nativeIsFinite(value);
+ }
+
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+ function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 which returns 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+ }
+
+ /**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+ function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+ }
+
+ /**
+ * Performs a deep comparison between `object` and `source` to determine if
+ * `object` contains equivalent property values. If `customizer` is provided
+ * it's invoked to compare values. If `customizer` returns `undefined`
+ * comparisons are handled by the method instead. The `customizer` is bound
+ * to `thisArg` and invoked with three arguments: (value, other, index|key).
+ *
+ * **Note:** This method supports comparing properties of arrays, booleans,
+ * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
+ * and DOM nodes are **not** supported. Provide a customizer function to extend
+ * support for comparing other values.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Function} [customizer] The function to customize value comparisons.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.isMatch(object, { 'age': 40 });
+ * // => true
+ *
+ * _.isMatch(object, { 'age': 36 });
+ * // => false
+ *
+ * // using a customizer callback
+ * var object = { 'greeting': 'hello' };
+ * var source = { 'greeting': 'hi' };
+ *
+ * _.isMatch(object, source, function(value, other) {
+ * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;
+ * });
+ * // => true
+ */
+ function isMatch(object, source, customizer, thisArg) {
+ customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
+ return baseIsMatch(object, getMatchData(source), customizer);
+ }
+
+ /**
+ * Checks if `value` is `NaN`.
+ *
+ * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
+ * which returns `true` for `undefined` and other non-numeric values.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ * @example
+ *
+ * _.isNaN(NaN);
+ * // => true
+ *
+ * _.isNaN(new Number(NaN));
+ * // => true
+ *
+ * isNaN(undefined);
+ * // => true
+ *
+ * _.isNaN(undefined);
+ * // => false
+ */
+ function isNaN(value) {
+ // An `NaN` primitive is the only value that is not equal to itself.
+ // Perform the `toStringTag` check first to avoid errors with some host objects in IE.
+ return isNumber(value) && value != +value;
+ }
+
+ /**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+ function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+ }
+
+ /**
+ * Checks if `value` is `null`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
+ * @example
+ *
+ * _.isNull(null);
+ * // => true
+ *
+ * _.isNull(void 0);
+ * // => false
+ */
+ function isNull(value) {
+ return value === null;
+ }
+
+ /**
+ * Checks if `value` is classified as a `Number` primitive or object.
+ *
+ * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified
+ * as numbers, use the `_.isFinite` method.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isNumber(8.4);
+ * // => true
+ *
+ * _.isNumber(NaN);
+ * // => true
+ *
+ * _.isNumber('8.4');
+ * // => false
+ */
+ function isNumber(value) {
+ return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
+ }
+
+ /**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * **Note:** This method assumes objects created by the `Object` constructor
+ * have no inherited enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+ function isPlainObject(value) {
+ var Ctor;
+
+ // Exit early for non `Object` objects.
+ if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
+ (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
+ return false;
+ }
+ // IE < 9 iterates inherited properties before own properties. If the first
+ // iterated property is an object's own property then there are no inherited
+ // enumerable properties.
+ var result;
+ // In most environments an object's own properties are iterated before
+ // its inherited properties. If the last iterated property is an object's
+ // own property then there are no inherited enumerable properties.
+ baseForIn(value, function(subValue, key) {
+ result = key;
+ });
+ return result === undefined || hasOwnProperty.call(value, result);
+ }
+
+ /**
+ * Checks if `value` is classified as a `RegExp` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isRegExp(/abc/);
+ * // => true
+ *
+ * _.isRegExp('/abc/');
+ * // => false
+ */
+ function isRegExp(value) {
+ return isObject(value) && objToString.call(value) == regexpTag;
+ }
+
+ /**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+ function isString(value) {
+ return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
+ }
+
+ /**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+ function isTypedArray(value) {
+ return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
+ }
+
+ /**
+ * Checks if `value` is `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+ * @example
+ *
+ * _.isUndefined(void 0);
+ * // => true
+ *
+ * _.isUndefined(null);
+ * // => false
+ */
+ function isUndefined(value) {
+ return value === undefined;
+ }
+
+ /**
+ * Checks if `value` is less than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.
+ * @example
+ *
+ * _.lt(1, 3);
+ * // => true
+ *
+ * _.lt(3, 3);
+ * // => false
+ *
+ * _.lt(3, 1);
+ * // => false
+ */
+ function lt(value, other) {
+ return value < other;
+ }
+
+ /**
+ * Checks if `value` is less than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.
+ * @example
+ *
+ * _.lte(1, 3);
+ * // => true
+ *
+ * _.lte(3, 3);
+ * // => true
+ *
+ * _.lte(3, 1);
+ * // => false
+ */
+ function lte(value, other) {
+ return value <= other;
+ }
+
+ /**
+ * Converts `value` to an array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Array} Returns the converted array.
+ * @example
+ *
+ * (function() {
+ * return _.toArray(arguments).slice(1);
+ * }(1, 2, 3));
+ * // => [2, 3]
+ */
+ function toArray(value) {
+ var length = value ? getLength(value) : 0;
+ if (!isLength(length)) {
+ return values(value);
+ }
+ if (!length) {
+ return [];
+ }
+ return arrayCopy(value);
+ }
+
+ /**
+ * Converts `value` to a plain object flattening inherited enumerable
+ * properties of `value` to own properties of the plain object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Object} Returns the converted plain object.
+ * @example
+ *
+ * function Foo() {
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.assign({ 'a': 1 }, new Foo);
+ * // => { 'a': 1, 'b': 2 }
+ *
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
+ */
+ function toPlainObject(value) {
+ return baseCopy(value, keysIn(value));
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Recursively merges own enumerable properties of the source object(s), that
+ * don't resolve to `undefined` into the destination object. Subsequent sources
+ * overwrite property assignments of previous sources. If `customizer` is
+ * provided it's invoked to produce the merged values of the destination and
+ * source properties. If `customizer` returns `undefined` merging is handled
+ * by the method instead. The `customizer` is bound to `thisArg` and invoked
+ * with five arguments: (objectValue, sourceValue, key, object, source).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var users = {
+ * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
+ * };
+ *
+ * var ages = {
+ * 'data': [{ 'age': 36 }, { 'age': 40 }]
+ * };
+ *
+ * _.merge(users, ages);
+ * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
+ *
+ * // using a customizer callback
+ * var object = {
+ * 'fruits': ['apple'],
+ * 'vegetables': ['beet']
+ * };
+ *
+ * var other = {
+ * 'fruits': ['banana'],
+ * 'vegetables': ['carrot']
+ * };
+ *
+ * _.merge(object, other, function(a, b) {
+ * if (_.isArray(a)) {
+ * return a.concat(b);
+ * }
+ * });
+ * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
+ */
+ var merge = createAssigner(baseMerge);
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object. Subsequent sources overwrite property assignments of previous sources.
+ * If `customizer` is provided it's invoked to produce the assigned values.
+ * The `customizer` is bound to `thisArg` and invoked with five arguments:
+ * (objectValue, sourceValue, key, object, source).
+ *
+ * **Note:** This method mutates `object` and is based on
+ * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
+ *
+ * @static
+ * @memberOf _
+ * @alias extend
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
+ * // => { 'user': 'fred', 'age': 40 }
+ *
+ * // using a customizer callback
+ * var defaults = _.partialRight(_.assign, function(value, other) {
+ * return _.isUndefined(value) ? other : value;
+ * });
+ *
+ * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+ * // => { 'user': 'barney', 'age': 36 }
+ */
+ var assign = createAssigner(function(object, source, customizer) {
+ return customizer
+ ? assignWith(object, source, customizer)
+ : baseAssign(object, source);
+ });
+
+ /**
+ * Creates an object that inherits from the given `prototype` object. If a
+ * `properties` object is provided its own enumerable properties are assigned
+ * to the created object.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} prototype The object to inherit from.
+ * @param {Object} [properties] The properties to assign to the object.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * function Circle() {
+ * Shape.call(this);
+ * }
+ *
+ * Circle.prototype = _.create(Shape.prototype, {
+ * 'constructor': Circle
+ * });
+ *
+ * var circle = new Circle;
+ * circle instanceof Circle;
+ * // => true
+ *
+ * circle instanceof Shape;
+ * // => true
+ */
+ function create(prototype, properties, guard) {
+ var result = baseCreate(prototype);
+ if (guard && isIterateeCall(prototype, properties, guard)) {
+ properties = undefined;
+ }
+ return properties ? baseAssign(result, properties) : result;
+ }
+
+ /**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object for all destination properties that resolve to `undefined`. Once a
+ * property is set, additional values of the same property are ignored.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+ * // => { 'user': 'barney', 'age': 36 }
+ */
+ var defaults = createDefaults(assign, assignDefaults);
+
+ /**
+ * This method is like `_.defaults` except that it recursively assigns
+ * default properties.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
+ * // => { 'user': { 'name': 'barney', 'age': 36 } }
+ *
+ */
+ var defaultsDeep = createDefaults(merge, mergeDefaults);
+
+ /**
+ * This method is like `_.find` except that it returns the key of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findKey(users, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => 'barney' (iteration order is not guaranteed)
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findKey(users, { 'age': 1, 'active': true });
+ * // => 'pebbles'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findKey(users, 'active', false);
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.findKey(users, 'active');
+ * // => 'barney'
+ */
+ var findKey = createFindKey(baseForOwn);
+
+ /**
+ * This method is like `_.findKey` except that it iterates over elements of
+ * a collection in the opposite order.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findLastKey(users, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => returns `pebbles` assuming `_.findKey` returns `barney`
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findLastKey(users, { 'age': 36, 'active': true });
+ * // => 'barney'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findLastKey(users, 'active', false);
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.findLastKey(users, 'active');
+ * // => 'pebbles'
+ */
+ var findLastKey = createFindKey(baseForOwnRight);
+
+ /**
+ * Iterates over own and inherited enumerable properties of an object invoking
+ * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
+ * with three arguments: (value, key, object). Iteratee functions may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forIn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
+ */
+ var forIn = createForIn(baseFor);
+
+ /**
+ * This method is like `_.forIn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forInRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
+ */
+ var forInRight = createForIn(baseForRight);
+
+ /**
+ * Iterates over own enumerable properties of an object invoking `iteratee`
+ * for each property. The `iteratee` is bound to `thisArg` and invoked with
+ * three arguments: (value, key, object). Iteratee functions may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'a' and 'b' (iteration order is not guaranteed)
+ */
+ var forOwn = createForOwn(baseForOwn);
+
+ /**
+ * This method is like `_.forOwn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwnRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
+ */
+ var forOwnRight = createForOwn(baseForOwnRight);
+
+ /**
+ * Creates an array of function property names from all enumerable properties,
+ * own and inherited, of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @alias methods
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns the new array of property names.
+ * @example
+ *
+ * _.functions(_);
+ * // => ['after', 'ary', 'assign', ...]
+ */
+ function functions(object) {
+ return baseFunctions(object, keysIn(object));
+ }
+
+ /**
+ * Gets the property value at `path` of `object`. If the resolved value is
+ * `undefined` the `defaultValue` is used in its place.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+ function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, toPath(path), (path + ''));
+ return result === undefined ? defaultValue : result;
+ }
+
+ /**
+ * Checks if `path` is a direct property.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.
+ * @example
+ *
+ * var object = { 'a': { 'b': { 'c': 3 } } };
+ *
+ * _.has(object, 'a');
+ * // => true
+ *
+ * _.has(object, 'a.b.c');
+ * // => true
+ *
+ * _.has(object, ['a', 'b', 'c']);
+ * // => true
+ */
+ function has(object, path) {
+ if (object == null) {
+ return false;
+ }
+ var result = hasOwnProperty.call(object, path);
+ if (!result && !isKey(path)) {
+ path = toPath(path);
+ object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+ if (object == null) {
+ return false;
+ }
+ path = last(path);
+ result = hasOwnProperty.call(object, path);
+ }
+ return result || (isLength(object.length) && isIndex(path, object.length) &&
+ (isArray(object) || isArguments(object)));
+ }
+
+ /**
+ * Creates an object composed of the inverted keys and values of `object`.
+ * If `object` contains duplicate values, subsequent values overwrite property
+ * assignments of previous values unless `multiValue` is `true`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to invert.
+ * @param {boolean} [multiValue] Allow multiple values per key.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Object} Returns the new inverted object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2, 'c': 1 };
+ *
+ * _.invert(object);
+ * // => { '1': 'c', '2': 'b' }
+ *
+ * // with `multiValue`
+ * _.invert(object, true);
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ */
+ function invert(object, multiValue, guard) {
+ if (guard && isIterateeCall(object, multiValue, guard)) {
+ multiValue = undefined;
+ }
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = {};
+
+ while (++index < length) {
+ var key = props[index],
+ value = object[key];
+
+ if (multiValue) {
+ if (hasOwnProperty.call(result, value)) {
+ result[value].push(key);
+ } else {
+ result[value] = [key];
+ }
+ }
+ else {
+ result[value] = key;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+ var keys = !nativeKeys ? shimKeys : function(object) {
+ var Ctor = object == null ? undefined : object.constructor;
+ if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+ (typeof object != 'function' && isArrayLike(object))) {
+ return shimKeys(object);
+ }
+ return isObject(object) ? nativeKeys(object) : [];
+ };
+
+ /**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+ function keysIn(object) {
+ if (object == null) {
+ return [];
+ }
+ if (!isObject(object)) {
+ object = Object(object);
+ }
+ var length = object.length;
+ length = (length && isLength(length) &&
+ (isArray(object) || isArguments(object)) && length) || 0;
+
+ var Ctor = object.constructor,
+ index = -1,
+ isProto = typeof Ctor == 'function' && Ctor.prototype === object,
+ result = Array(length),
+ skipIndexes = length > 0;
+
+ while (++index < length) {
+ result[index] = (index + '');
+ }
+ for (var key in object) {
+ if (!(skipIndexes && isIndex(key, length)) &&
+ !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * The opposite of `_.mapValues`; this method creates an object with the
+ * same values as `object` and keys generated by running each own enumerable
+ * property of `object` through `iteratee`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the new mapped object.
+ * @example
+ *
+ * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
+ * return key + value;
+ * });
+ * // => { 'a1': 1, 'b2': 2 }
+ */
+ var mapKeys = createObjectMapper(true);
+
+ /**
+ * Creates an object with the same keys as `object` and values generated by
+ * running each own enumerable property of `object` through `iteratee`. The
+ * iteratee function is bound to `thisArg` and invoked with three arguments:
+ * (value, key, object).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the new mapped object.
+ * @example
+ *
+ * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {
+ * return n * 3;
+ * });
+ * // => { 'a': 3, 'b': 6 }
+ *
+ * var users = {
+ * 'fred': { 'user': 'fred', 'age': 40 },
+ * 'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ *
+ * // using the `_.property` callback shorthand
+ * _.mapValues(users, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ */
+ var mapValues = createObjectMapper();
+
+ /**
+ * The opposite of `_.pick`; this method creates an object composed of the
+ * own and inherited enumerable properties of `object` that are not omitted.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function|...(string|string[])} [predicate] The function invoked per
+ * iteration or property names to omit, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.omit(object, 'age');
+ * // => { 'user': 'fred' }
+ *
+ * _.omit(object, _.isNumber);
+ * // => { 'user': 'fred' }
+ */
+ var omit = restParam(function(object, props) {
+ if (object == null) {
+ return {};
+ }
+ if (typeof props[0] != 'function') {
+ var props = arrayMap(baseFlatten(props), String);
+ return pickByArray(object, baseDifference(keysIn(object), props));
+ }
+ var predicate = bindCallback(props[0], props[1], 3);
+ return pickByCallback(object, function(value, key, object) {
+ return !predicate(value, key, object);
+ });
+ });
+
+ /**
+ * Creates a two dimensional array of the key-value pairs for `object`,
+ * e.g. `[[key1, value1], [key2, value2]]`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the new array of key-value pairs.
+ * @example
+ *
+ * _.pairs({ 'barney': 36, 'fred': 40 });
+ * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
+ */
+ function pairs(object) {
+ object = toObject(object);
+
+ var index = -1,
+ props = keys(object),
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ var key = props[index];
+ result[index] = [key, object[key]];
+ }
+ return result;
+ }
+
+ /**
+ * Creates an object composed of the picked `object` properties. Property
+ * names may be specified as individual arguments or as arrays of property
+ * names. If `predicate` is provided it's invoked for each property of `object`
+ * picking the properties `predicate` returns truthy for. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function|...(string|string[])} [predicate] The function invoked per
+ * iteration or property names to pick, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.pick(object, 'user');
+ * // => { 'user': 'fred' }
+ *
+ * _.pick(object, _.isString);
+ * // => { 'user': 'fred' }
+ */
+ var pick = restParam(function(object, props) {
+ if (object == null) {
+ return {};
+ }
+ return typeof props[0] == 'function'
+ ? pickByCallback(object, bindCallback(props[0], props[1], 3))
+ : pickByArray(object, baseFlatten(props));
+ });
+
+ /**
+ * This method is like `_.get` except that if the resolved value is a function
+ * it's invoked with the `this` binding of its parent object and its result
+ * is returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to resolve.
+ * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
+ *
+ * _.result(object, 'a[0].b.c1');
+ * // => 3
+ *
+ * _.result(object, 'a[0].b.c2');
+ * // => 4
+ *
+ * _.result(object, 'a.b.c', 'default');
+ * // => 'default'
+ *
+ * _.result(object, 'a.b.c', _.constant('default'));
+ * // => 'default'
+ */
+ function result(object, path, defaultValue) {
+ var result = object == null ? undefined : object[path];
+ if (result === undefined) {
+ if (object != null && !isKey(path, object)) {
+ path = toPath(path);
+ object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+ result = object == null ? undefined : object[last(path)];
+ }
+ result = result === undefined ? defaultValue : result;
+ }
+ return isFunction(result) ? result.call(object) : result;
+ }
+
+ /**
+ * Sets the property value of `path` on `object`. If a portion of `path`
+ * does not exist it's created.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to augment.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.set(object, 'a[0].b.c', 4);
+ * console.log(object.a[0].b.c);
+ * // => 4
+ *
+ * _.set(object, 'x[0].y.z', 5);
+ * console.log(object.x[0].y.z);
+ * // => 5
+ */
+ function set(object, path, value) {
+ if (object == null) {
+ return object;
+ }
+ var pathKey = (path + '');
+ path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);
+
+ var index = -1,
+ length = path.length,
+ lastIndex = length - 1,
+ nested = object;
+
+ while (nested != null && ++index < length) {
+ var key = path[index];
+ if (isObject(nested)) {
+ if (index == lastIndex) {
+ nested[key] = value;
+ } else if (nested[key] == null) {
+ nested[key] = isIndex(path[index + 1]) ? [] : {};
+ }
+ }
+ nested = nested[key];
+ }
+ return object;
+ }
+
+ /**
+ * An alternative to `_.reduce`; this method transforms `object` to a new
+ * `accumulator` object which is the result of running each of its own enumerable
+ * properties through `iteratee`, with each invocation potentially mutating
+ * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
+ * with four arguments: (accumulator, value, key, object). Iteratee functions
+ * may exit iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Array|Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The custom accumulator value.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * _.transform([2, 3, 4], function(result, n) {
+ * result.push(n *= n);
+ * return n % 2 == 0;
+ * });
+ * // => [4, 9]
+ *
+ * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {
+ * result[key] = n * 3;
+ * });
+ * // => { 'a': 3, 'b': 6 }
+ */
+ function transform(object, iteratee, accumulator, thisArg) {
+ var isArr = isArray(object) || isTypedArray(object);
+ iteratee = getCallback(iteratee, thisArg, 4);
+
+ if (accumulator == null) {
+ if (isArr || isObject(object)) {
+ var Ctor = object.constructor;
+ if (isArr) {
+ accumulator = isArray(object) ? new Ctor : [];
+ } else {
+ accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
+ }
+ } else {
+ accumulator = {};
+ }
+ }
+ (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
+ return iteratee(accumulator, value, index, object);
+ });
+ return accumulator;
+ }
+
+ /**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.values(new Foo);
+ * // => [1, 2] (iteration order is not guaranteed)
+ *
+ * _.values('hi');
+ * // => ['h', 'i']
+ */
+ function values(object) {
+ return baseValues(object, keys(object));
+ }
+
+ /**
+ * Creates an array of the own and inherited enumerable property values
+ * of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.valuesIn(new Foo);
+ * // => [1, 2, 3] (iteration order is not guaranteed)
+ */
+ function valuesIn(object) {
+ return baseValues(object, keysIn(object));
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Checks if `n` is between `start` and up to but not including, `end`. If
+ * `end` is not specified it's set to `start` with `start` then set to `0`.
+ *
+ * @static
+ * @memberOf _
+ * @category Number
+ * @param {number} n The number to check.
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @returns {boolean} Returns `true` if `n` is in the range, else `false`.
+ * @example
+ *
+ * _.inRange(3, 2, 4);
+ * // => true
+ *
+ * _.inRange(4, 8);
+ * // => true
+ *
+ * _.inRange(4, 2);
+ * // => false
+ *
+ * _.inRange(2, 2);
+ * // => false
+ *
+ * _.inRange(1.2, 2);
+ * // => true
+ *
+ * _.inRange(5.2, 4);
+ * // => false
+ */
+ function inRange(value, start, end) {
+ start = +start || 0;
+ if (end === undefined) {
+ end = start;
+ start = 0;
+ } else {
+ end = +end || 0;
+ }
+ return value >= nativeMin(start, end) && value < nativeMax(start, end);
+ }
+
+ /**
+ * Produces a random number between `min` and `max` (inclusive). If only one
+ * argument is provided a number between `0` and the given number is returned.
+ * If `floating` is `true`, or either `min` or `max` are floats, a floating-point
+ * number is returned instead of an integer.
+ *
+ * @static
+ * @memberOf _
+ * @category Number
+ * @param {number} [min=0] The minimum possible value.
+ * @param {number} [max=1] The maximum possible value.
+ * @param {boolean} [floating] Specify returning a floating-point number.
+ * @returns {number} Returns the random number.
+ * @example
+ *
+ * _.random(0, 5);
+ * // => an integer between 0 and 5
+ *
+ * _.random(5);
+ * // => also an integer between 0 and 5
+ *
+ * _.random(5, true);
+ * // => a floating-point number between 0 and 5
+ *
+ * _.random(1.2, 5.2);
+ * // => a floating-point number between 1.2 and 5.2
+ */
+ function random(min, max, floating) {
+ if (floating && isIterateeCall(min, max, floating)) {
+ max = floating = undefined;
+ }
+ var noMin = min == null,
+ noMax = max == null;
+
+ if (floating == null) {
+ if (noMax && typeof min == 'boolean') {
+ floating = min;
+ min = 1;
+ }
+ else if (typeof max == 'boolean') {
+ floating = max;
+ noMax = true;
+ }
+ }
+ if (noMin && noMax) {
+ max = 1;
+ noMax = false;
+ }
+ min = +min || 0;
+ if (noMax) {
+ max = min;
+ min = 0;
+ } else {
+ max = +max || 0;
+ }
+ if (floating || min % 1 || max % 1) {
+ var rand = nativeRandom();
+ return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);
+ }
+ return baseRandom(min, max);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the camel cased string.
+ * @example
+ *
+ * _.camelCase('Foo Bar');
+ * // => 'fooBar'
+ *
+ * _.camelCase('--foo-bar');
+ * // => 'fooBar'
+ *
+ * _.camelCase('__foo_bar__');
+ * // => 'fooBar'
+ */
+ var camelCase = createCompounder(function(result, word, index) {
+ word = word.toLowerCase();
+ return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);
+ });
+
+ /**
+ * Capitalizes the first character of `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to capitalize.
+ * @returns {string} Returns the capitalized string.
+ * @example
+ *
+ * _.capitalize('fred');
+ * // => 'Fred'
+ */
+ function capitalize(string) {
+ string = baseToString(string);
+ return string && (string.charAt(0).toUpperCase() + string.slice(1));
+ }
+
+ /**
+ * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
+ * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to deburr.
+ * @returns {string} Returns the deburred string.
+ * @example
+ *
+ * _.deburr('déjà vu');
+ * // => 'deja vu'
+ */
+ function deburr(string) {
+ string = baseToString(string);
+ return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');
+ }
+
+ /**
+ * Checks if `string` ends with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to search.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=string.length] The position to search from.
+ * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.
+ * @example
+ *
+ * _.endsWith('abc', 'c');
+ * // => true
+ *
+ * _.endsWith('abc', 'b');
+ * // => false
+ *
+ * _.endsWith('abc', 'b', 2);
+ * // => true
+ */
+ function endsWith(string, target, position) {
+ string = baseToString(string);
+ target = (target + '');
+
+ var length = string.length;
+ position = position === undefined
+ ? length
+ : nativeMin(position < 0 ? 0 : (+position || 0), length);
+
+ position -= target.length;
+ return position >= 0 && string.indexOf(target, position) == position;
+ }
+
+ /**
+ * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to
+ * their corresponding HTML entities.
+ *
+ * **Note:** No other characters are escaped. To escape additional characters
+ * use a third-party library like [_he_](https://mths.be/he).
+ *
+ * Though the ">" character is escaped for symmetry, characters like
+ * ">" and "/" don't need escaping in HTML and have no special meaning
+ * unless they're part of a tag or unquoted attribute value.
+ * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+ * (under "semi-related fun fact") for more details.
+ *
+ * Backticks are escaped because in Internet Explorer < 9, they can break out
+ * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),
+ * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
+ * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)
+ * for more details.
+ *
+ * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
+ * to reduce XSS vectors.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('fred, barney, & pebbles');
+ * // => 'fred, barney, &amp; pebbles'
+ */
+ function escape(string) {
+ // Reset `lastIndex` because in IE < 9 `String#replace` does not.
+ string = baseToString(string);
+ return (string && reHasUnescapedHtml.test(string))
+ ? string.replace(reUnescapedHtml, escapeHtmlChar)
+ : string;
+ }
+
+ /**
+ * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
+ * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escapeRegExp('[lodash](https://lodash.com/)');
+ * // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
+ */
+ function escapeRegExp(string) {
+ string = baseToString(string);
+ return (string && reHasRegExpChars.test(string))
+ ? string.replace(reRegExpChars, escapeRegExpChar)
+ : (string || '(?:)');
+ }
+
+ /**
+ * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the kebab cased string.
+ * @example
+ *
+ * _.kebabCase('Foo Bar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('fooBar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('__foo_bar__');
+ * // => 'foo-bar'
+ */
+ var kebabCase = createCompounder(function(result, word, index) {
+ return result + (index ? '-' : '') + word.toLowerCase();
+ });
+
+ /**
+ * Pads `string` on the left and right sides if it's shorter than `length`.
+ * Padding characters are truncated if they can't be evenly divided by `length`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.pad('abc', 8);
+ * // => ' abc '
+ *
+ * _.pad('abc', 8, '_-');
+ * // => '_-abc_-_'
+ *
+ * _.pad('abc', 3);
+ * // => 'abc'
+ */
+ function pad(string, length, chars) {
+ string = baseToString(string);
+ length = +length;
+
+ var strLength = string.length;
+ if (strLength >= length || !nativeIsFinite(length)) {
+ return string;
+ }
+ var mid = (length - strLength) / 2,
+ leftLength = nativeFloor(mid),
+ rightLength = nativeCeil(mid);
+
+ chars = createPadding('', rightLength, chars);
+ return chars.slice(0, leftLength) + string + chars;
+ }
+
+ /**
+ * Pads `string` on the left side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padLeft('abc', 6);
+ * // => ' abc'
+ *
+ * _.padLeft('abc', 6, '_-');
+ * // => '_-_abc'
+ *
+ * _.padLeft('abc', 3);
+ * // => 'abc'
+ */
+ var padLeft = createPadDir();
+
+ /**
+ * Pads `string` on the right side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padRight('abc', 6);
+ * // => 'abc '
+ *
+ * _.padRight('abc', 6, '_-');
+ * // => 'abc_-_'
+ *
+ * _.padRight('abc', 3);
+ * // => 'abc'
+ */
+ var padRight = createPadDir(true);
+
+ /**
+ * Converts `string` to an integer of the specified radix. If `radix` is
+ * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
+ * in which case a `radix` of `16` is used.
+ *
+ * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
+ * of `parseInt`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} string The string to convert.
+ * @param {number} [radix] The radix to interpret `value` by.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.parseInt('08');
+ * // => 8
+ *
+ * _.map(['6', '08', '10'], _.parseInt);
+ * // => [6, 8, 10]
+ */
+ function parseInt(string, radix, guard) {
+ // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
+ // Chrome fails to trim leading <BOM> whitespace characters.
+ // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
+ if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
+ radix = 0;
+ } else if (radix) {
+ radix = +radix;
+ }
+ string = trim(string);
+ return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
+ }
+
+ /**
+ * Repeats the given string `n` times.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to repeat.
+ * @param {number} [n=0] The number of times to repeat the string.
+ * @returns {string} Returns the repeated string.
+ * @example
+ *
+ * _.repeat('*', 3);
+ * // => '***'
+ *
+ * _.repeat('abc', 2);
+ * // => 'abcabc'
+ *
+ * _.repeat('abc', 0);
+ * // => ''
+ */
+ function repeat(string, n) {
+ var result = '';
+ string = baseToString(string);
+ n = +n;
+ if (n < 1 || !string || !nativeIsFinite(n)) {
+ return result;
+ }
+ // Leverage the exponentiation by squaring algorithm for a faster repeat.
+ // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
+ do {
+ if (n % 2) {
+ result += string;
+ }
+ n = nativeFloor(n / 2);
+ string += string;
+ } while (n);
+
+ return result;
+ }
+
+ /**
+ * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the snake cased string.
+ * @example
+ *
+ * _.snakeCase('Foo Bar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('fooBar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('--foo-bar');
+ * // => 'foo_bar'
+ */
+ var snakeCase = createCompounder(function(result, word, index) {
+ return result + (index ? '_' : '') + word.toLowerCase();
+ });
+
+ /**
+ * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the start cased string.
+ * @example
+ *
+ * _.startCase('--foo-bar');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('fooBar');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('__foo_bar__');
+ * // => 'Foo Bar'
+ */
+ var startCase = createCompounder(function(result, word, index) {
+ return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));
+ });
+
+ /**
+ * Checks if `string` starts with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to search.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=0] The position to search from.
+ * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.
+ * @example
+ *
+ * _.startsWith('abc', 'a');
+ * // => true
+ *
+ * _.startsWith('abc', 'b');
+ * // => false
+ *
+ * _.startsWith('abc', 'b', 1);
+ * // => true
+ */
+ function startsWith(string, target, position) {
+ string = baseToString(string);
+ position = position == null
+ ? 0
+ : nativeMin(position < 0 ? 0 : (+position || 0), string.length);
+
+ return string.lastIndexOf(target, position) == position;
+ }
+
+ /**
+ * Creates a compiled template function that can interpolate data properties
+ * in "interpolate" delimiters, HTML-escape interpolated data properties in
+ * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
+ * properties may be accessed as free variables in the template. If a setting
+ * object is provided it takes precedence over `_.templateSettings` values.
+ *
+ * **Note:** In the development build `_.template` utilizes
+ * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
+ * for easier debugging.
+ *
+ * For more information on precompiling templates see
+ * [lodash's custom builds documentation](https://lodash.com/custom-builds).
+ *
+ * For more information on Chrome extension sandboxes see
+ * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The template string.
+ * @param {Object} [options] The options object.
+ * @param {RegExp} [options.escape] The HTML "escape" delimiter.
+ * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
+ * @param {Object} [options.imports] An object to import into the template as free variables.
+ * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
+ * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.
+ * @param {string} [options.variable] The data object variable name.
+ * @param- {Object} [otherOptions] Enables the legacy `options` param signature.
+ * @returns {Function} Returns the compiled template function.
+ * @example
+ *
+ * // using the "interpolate" delimiter to create a compiled template
+ * var compiled = _.template('hello <%= user %>!');
+ * compiled({ 'user': 'fred' });
+ * // => 'hello fred!'
+ *
+ * // using the HTML "escape" delimiter to escape data property values
+ * var compiled = _.template('<b><%- value %></b>');
+ * compiled({ 'value': '<script>' });
+ * // => '<b>&lt;script&gt;</b>'
+ *
+ * // using the "evaluate" delimiter to execute JavaScript and generate HTML
+ * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
+ * compiled({ 'users': ['fred', 'barney'] });
+ * // => '<li>fred</li><li>barney</li>'
+ *
+ * // using the internal `print` function in "evaluate" delimiters
+ * var compiled = _.template('<% print("hello " + user); %>!');
+ * compiled({ 'user': 'barney' });
+ * // => 'hello barney!'
+ *
+ * // using the ES delimiter as an alternative to the default "interpolate" delimiter
+ * var compiled = _.template('hello ${ user }!');
+ * compiled({ 'user': 'pebbles' });
+ * // => 'hello pebbles!'
+ *
+ * // using custom template delimiters
+ * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
+ * var compiled = _.template('hello {{ user }}!');
+ * compiled({ 'user': 'mustache' });
+ * // => 'hello mustache!'
+ *
+ * // using backslashes to treat delimiters as plain text
+ * var compiled = _.template('<%= "\\<%- value %\\>" %>');
+ * compiled({ 'value': 'ignored' });
+ * // => '<%- value %>'
+ *
+ * // using the `imports` option to import `jQuery` as `jq`
+ * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
+ * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
+ * compiled({ 'users': ['fred', 'barney'] });
+ * // => '<li>fred</li><li>barney</li>'
+ *
+ * // using the `sourceURL` option to specify a custom sourceURL for the template
+ * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
+ * compiled(data);
+ * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
+ *
+ * // using the `variable` option to ensure a with-statement isn't used in the compiled template
+ * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
+ * compiled.source;
+ * // => function(data) {
+ * // var __t, __p = '';
+ * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
+ * // return __p;
+ * // }
+ *
+ * // using the `source` property to inline compiled templates for meaningful
+ * // line numbers in error messages and a stack trace
+ * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
+ * var JST = {\
+ * "main": ' + _.template(mainText).source + '\
+ * };\
+ * ');
+ */
+ function template(string, options, otherOptions) {
+ // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)
+ // and Laura Doktorova's doT.js (https://github.com/olado/doT).
+ var settings = lodash.templateSettings;
+
+ if (otherOptions && isIterateeCall(string, options, otherOptions)) {
+ options = otherOptions = undefined;
+ }
+ string = baseToString(string);
+ options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);
+
+ var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),
+ importsKeys = keys(imports),
+ importsValues = baseValues(imports, importsKeys);
+
+ var isEscaping,
+ isEvaluating,
+ index = 0,
+ interpolate = options.interpolate || reNoMatch,
+ source = "__p += '";
+
+ // Compile the regexp to match each delimiter.
+ var reDelimiters = RegExp(
+ (options.escape || reNoMatch).source + '|' +
+ interpolate.source + '|' +
+ (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
+ (options.evaluate || reNoMatch).source + '|$'
+ , 'g');
+
+ // Use a sourceURL for easier debugging.
+ var sourceURL = '//# sourceURL=' +
+ ('sourceURL' in options
+ ? options.sourceURL
+ : ('lodash.templateSources[' + (++templateCounter) + ']')
+ ) + '\n';
+
+ string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
+ interpolateValue || (interpolateValue = esTemplateValue);
+
+ // Escape characters that can't be included in string literals.
+ source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
+
+ // Replace delimiters with snippets.
+ if (escapeValue) {
+ isEscaping = true;
+ source += "' +\n__e(" + escapeValue + ") +\n'";
+ }
+ if (evaluateValue) {
+ isEvaluating = true;
+ source += "';\n" + evaluateValue + ";\n__p += '";
+ }
+ if (interpolateValue) {
+ source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
+ }
+ index = offset + match.length;
+
+ // The JS engine embedded in Adobe products requires returning the `match`
+ // string in order to produce the correct `offset` value.
+ return match;
+ });
+
+ source += "';\n";
+
+ // If `variable` is not specified wrap a with-statement around the generated
+ // code to add the data object to the top of the scope chain.
+ var variable = options.variable;
+ if (!variable) {
+ source = 'with (obj) {\n' + source + '\n}\n';
+ }
+ // Cleanup code by stripping empty strings.
+ source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
+ .replace(reEmptyStringMiddle, '$1')
+ .replace(reEmptyStringTrailing, '$1;');
+
+ // Frame code as the function body.
+ source = 'function(' + (variable || 'obj') + ') {\n' +
+ (variable
+ ? ''
+ : 'obj || (obj = {});\n'
+ ) +
+ "var __t, __p = ''" +
+ (isEscaping
+ ? ', __e = _.escape'
+ : ''
+ ) +
+ (isEvaluating
+ ? ', __j = Array.prototype.join;\n' +
+ "function print() { __p += __j.call(arguments, '') }\n"
+ : ';\n'
+ ) +
+ source +
+ 'return __p\n}';
+
+ var result = attempt(function() {
+ return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);
+ });
+
+ // Provide the compiled function's source by its `toString` method or
+ // the `source` property as a convenience for inlining compiled templates.
+ result.source = source;
+ if (isError(result)) {
+ throw result;
+ }
+ return result;
+ }
+
+ /**
+ * Removes leading and trailing whitespace or specified characters from `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to trim.
+ * @param {string} [chars=whitespace] The characters to trim.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the trimmed string.
+ * @example
+ *
+ * _.trim(' abc ');
+ * // => 'abc'
+ *
+ * _.trim('-_-abc-_-', '_-');
+ * // => 'abc'
+ *
+ * _.map([' foo ', ' bar '], _.trim);
+ * // => ['foo', 'bar']
+ */
+ function trim(string, chars, guard) {
+ var value = string;
+ string = baseToString(string);
+ if (!string) {
+ return string;
+ }
+ if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
+ return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);
+ }
+ chars = (chars + '');
+ return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);
+ }
+
+ /**
+ * Removes leading whitespace or specified characters from `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to trim.
+ * @param {string} [chars=whitespace] The characters to trim.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the trimmed string.
+ * @example
+ *
+ * _.trimLeft(' abc ');
+ * // => 'abc '
+ *
+ * _.trimLeft('-_-abc-_-', '_-');
+ * // => 'abc-_-'
+ */
+ function trimLeft(string, chars, guard) {
+ var value = string;
+ string = baseToString(string);
+ if (!string) {
+ return string;
+ }
+ if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
+ return string.slice(trimmedLeftIndex(string));
+ }
+ return string.slice(charsLeftIndex(string, (chars + '')));
+ }
+
+ /**
+ * Removes trailing whitespace or specified characters from `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to trim.
+ * @param {string} [chars=whitespace] The characters to trim.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the trimmed string.
+ * @example
+ *
+ * _.trimRight(' abc ');
+ * // => ' abc'
+ *
+ * _.trimRight('-_-abc-_-', '_-');
+ * // => '-_-abc'
+ */
+ function trimRight(string, chars, guard) {
+ var value = string;
+ string = baseToString(string);
+ if (!string) {
+ return string;
+ }
+ if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
+ return string.slice(0, trimmedRightIndex(string) + 1);
+ }
+ return string.slice(0, charsRightIndex(string, (chars + '')) + 1);
+ }
+
+ /**
+ * Truncates `string` if it's longer than the given maximum string length.
+ * The last characters of the truncated string are replaced with the omission
+ * string which defaults to "...".
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to truncate.
+ * @param {Object|number} [options] The options object or maximum string length.
+ * @param {number} [options.length=30] The maximum string length.
+ * @param {string} [options.omission='...'] The string to indicate text is omitted.
+ * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the truncated string.
+ * @example
+ *
+ * _.trunc('hi-diddly-ho there, neighborino');
+ * // => 'hi-diddly-ho there, neighbo...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', 24);
+ * // => 'hi-diddly-ho there, n...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', {
+ * 'length': 24,
+ * 'separator': ' '
+ * });
+ * // => 'hi-diddly-ho there,...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', {
+ * 'length': 24,
+ * 'separator': /,? +/
+ * });
+ * // => 'hi-diddly-ho there...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', {
+ * 'omission': ' [...]'
+ * });
+ * // => 'hi-diddly-ho there, neig [...]'
+ */
+ function trunc(string, options, guard) {
+ if (guard && isIterateeCall(string, options, guard)) {
+ options = undefined;
+ }
+ var length = DEFAULT_TRUNC_LENGTH,
+ omission = DEFAULT_TRUNC_OMISSION;
+
+ if (options != null) {
+ if (isObject(options)) {
+ var separator = 'separator' in options ? options.separator : separator;
+ length = 'length' in options ? (+options.length || 0) : length;
+ omission = 'omission' in options ? baseToString(options.omission) : omission;
+ } else {
+ length = +options || 0;
+ }
+ }
+ string = baseToString(string);
+ if (length >= string.length) {
+ return string;
+ }
+ var end = length - omission.length;
+ if (end < 1) {
+ return omission;
+ }
+ var result = string.slice(0, end);
+ if (separator == null) {
+ return result + omission;
+ }
+ if (isRegExp(separator)) {
+ if (string.slice(end).search(separator)) {
+ var match,
+ newEnd,
+ substring = string.slice(0, end);
+
+ if (!separator.global) {
+ separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');
+ }
+ separator.lastIndex = 0;
+ while ((match = separator.exec(substring))) {
+ newEnd = match.index;
+ }
+ result = result.slice(0, newEnd == null ? end : newEnd);
+ }
+ } else if (string.indexOf(separator, end) != end) {
+ var index = result.lastIndexOf(separator);
+ if (index > -1) {
+ result = result.slice(0, index);
+ }
+ }
+ return result + omission;
+ }
+
+ /**
+ * The inverse of `_.escape`; this method converts the HTML entities
+ * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their
+ * corresponding characters.
+ *
+ * **Note:** No other HTML entities are unescaped. To unescape additional HTML
+ * entities use a third-party library like [_he_](https://mths.be/he).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to unescape.
+ * @returns {string} Returns the unescaped string.
+ * @example
+ *
+ * _.unescape('fred, barney, &amp; pebbles');
+ * // => 'fred, barney, & pebbles'
+ */
+ function unescape(string) {
+ string = baseToString(string);
+ return (string && reHasEscapedHtml.test(string))
+ ? string.replace(reEscapedHtml, unescapeHtmlChar)
+ : string;
+ }
+
+ /**
+ * Splits `string` into an array of its words.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to inspect.
+ * @param {RegExp|string} [pattern] The pattern to match words.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the words of `string`.
+ * @example
+ *
+ * _.words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ *
+ * _.words('fred, barney, & pebbles', /[^, ]+/g);
+ * // => ['fred', 'barney', '&', 'pebbles']
+ */
+ function words(string, pattern, guard) {
+ if (guard && isIterateeCall(string, pattern, guard)) {
+ pattern = undefined;
+ }
+ string = baseToString(string);
+ return string.match(pattern || reWords) || [];
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Attempts to invoke `func`, returning either the result or the caught error
+ * object. Any additional arguments are provided to `func` when it's invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Function} func The function to attempt.
+ * @returns {*} Returns the `func` result or error object.
+ * @example
+ *
+ * // avoid throwing errors for invalid selectors
+ * var elements = _.attempt(function(selector) {
+ * return document.querySelectorAll(selector);
+ * }, '>_>');
+ *
+ * if (_.isError(elements)) {
+ * elements = [];
+ * }
+ */
+ var attempt = restParam(function(func, args) {
+ try {
+ return func.apply(undefined, args);
+ } catch(e) {
+ return isError(e) ? e : new Error(e);
+ }
+ });
+
+ /**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
+ * and arguments of the created function. If `func` is a property name the
+ * created callback returns the property value for a given element. If `func`
+ * is an object the created callback returns `true` for elements that contain
+ * the equivalent object properties, otherwise it returns `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias iteratee
+ * @category Utility
+ * @param {*} [func=_.identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the callback.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * // wrap to create custom callback shorthands
+ * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {
+ * var match = /^(.+?)__([gl]t)(.+)$/.exec(func);
+ * if (!match) {
+ * return callback(func, thisArg);
+ * }
+ * return function(object) {
+ * return match[2] == 'gt'
+ * ? object[match[1]] > match[3]
+ * : object[match[1]] < match[3];
+ * };
+ * });
+ *
+ * _.filter(users, 'age__gt36');
+ * // => [{ 'user': 'fred', 'age': 40 }]
+ */
+ function callback(func, thisArg, guard) {
+ if (guard && isIterateeCall(func, thisArg, guard)) {
+ thisArg = undefined;
+ }
+ return isObjectLike(func)
+ ? matches(func)
+ : baseCallback(func, thisArg);
+ }
+
+ /**
+ * Creates a function that returns `value`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value The value to return from the new function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var getter = _.constant(object);
+ *
+ * getter() === object;
+ * // => true
+ */
+ function constant(value) {
+ return function() {
+ return value;
+ };
+ }
+
+ /**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */
+ function identity(value) {
+ return value;
+ }
+
+ /**
+ * Creates a function that performs a deep comparison between a given object
+ * and `source`, returning `true` if the given object has equivalent property
+ * values, else `false`.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. For comparing a single
+ * own or inherited property value see `_.matchesProperty`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.filter(users, _.matches({ 'age': 40, 'active': false }));
+ * // => [{ 'user': 'fred', 'age': 40, 'active': false }]
+ */
+ function matches(source) {
+ return baseMatches(baseClone(source, true));
+ }
+
+ /**
+ * Creates a function that compares the property value of `path` on a given
+ * object to `value`.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * _.find(users, _.matchesProperty('user', 'fred'));
+ * // => { 'user': 'fred' }
+ */
+ function matchesProperty(path, srcValue) {
+ return baseMatchesProperty(path, baseClone(srcValue, true));
+ }
+
+ /**
+ * Creates a function that invokes the method at `path` on a given object.
+ * Any additional arguments are provided to the invoked method.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': { 'c': _.constant(2) } } },
+ * { 'a': { 'b': { 'c': _.constant(1) } } }
+ * ];
+ *
+ * _.map(objects, _.method('a.b.c'));
+ * // => [2, 1]
+ *
+ * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');
+ * // => [1, 2]
+ */
+ var method = restParam(function(path, args) {
+ return function(object) {
+ return invokePath(object, path, args);
+ };
+ });
+
+ /**
+ * The opposite of `_.method`; this method creates a function that invokes
+ * the method at a given path on `object`. Any additional arguments are
+ * provided to the invoked method.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} object The object to query.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var array = _.times(3, _.constant),
+ * object = { 'a': array, 'b': array, 'c': array };
+ *
+ * _.map(['a[2]', 'c[0]'], _.methodOf(object));
+ * // => [2, 0]
+ *
+ * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
+ * // => [2, 0]
+ */
+ var methodOf = restParam(function(object, args) {
+ return function(path) {
+ return invokePath(object, path, args);
+ };
+ });
+
+ /**
+ * Adds all own enumerable function properties of a source object to the
+ * destination object. If `object` is a function then methods are added to
+ * its prototype as well.
+ *
+ * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
+ * avoid conflicts caused by modifying the original.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Function|Object} [object=lodash] The destination object.
+ * @param {Object} source The object of functions to add.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.chain=true] Specify whether the functions added
+ * are chainable.
+ * @returns {Function|Object} Returns `object`.
+ * @example
+ *
+ * function vowels(string) {
+ * return _.filter(string, function(v) {
+ * return /[aeiou]/i.test(v);
+ * });
+ * }
+ *
+ * _.mixin({ 'vowels': vowels });
+ * _.vowels('fred');
+ * // => ['e']
+ *
+ * _('fred').vowels().value();
+ * // => ['e']
+ *
+ * _.mixin({ 'vowels': vowels }, { 'chain': false });
+ * _('fred').vowels();
+ * // => ['e']
+ */
+ function mixin(object, source, options) {
+ if (options == null) {
+ var isObj = isObject(source),
+ props = isObj ? keys(source) : undefined,
+ methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;
+
+ if (!(methodNames ? methodNames.length : isObj)) {
+ methodNames = false;
+ options = source;
+ source = object;
+ object = this;
+ }
+ }
+ if (!methodNames) {
+ methodNames = baseFunctions(source, keys(source));
+ }
+ var chain = true,
+ index = -1,
+ isFunc = isFunction(object),
+ length = methodNames.length;
+
+ if (options === false) {
+ chain = false;
+ } else if (isObject(options) && 'chain' in options) {
+ chain = options.chain;
+ }
+ while (++index < length) {
+ var methodName = methodNames[index],
+ func = source[methodName];
+
+ object[methodName] = func;
+ if (isFunc) {
+ object.prototype[methodName] = (function(func) {
+ return function() {
+ var chainAll = this.__chain__;
+ if (chain || chainAll) {
+ var result = object(this.__wrapped__),
+ actions = result.__actions__ = arrayCopy(this.__actions__);
+
+ actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
+ result.__chain__ = chainAll;
+ return result;
+ }
+ return func.apply(object, arrayPush([this.value()], arguments));
+ };
+ }(func));
+ }
+ }
+ return object;
+ }
+
+ /**
+ * Reverts the `_` variable to its previous value and returns a reference to
+ * the `lodash` function.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @returns {Function} Returns the `lodash` function.
+ * @example
+ *
+ * var lodash = _.noConflict();
+ */
+ function noConflict() {
+ root._ = oldDash;
+ return this;
+ }
+
+ /**
+ * A no-operation function that returns `undefined` regardless of the
+ * arguments it receives.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.noop(object) === undefined;
+ * // => true
+ */
+ function noop() {
+ // No operation performed.
+ }
+
+ /**
+ * Creates a function that returns the property value at `path` on a
+ * given object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': { 'c': 2 } } },
+ * { 'a': { 'b': { 'c': 1 } } }
+ * ];
+ *
+ * _.map(objects, _.property('a.b.c'));
+ * // => [2, 1]
+ *
+ * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
+ * // => [1, 2]
+ */
+ function property(path) {
+ return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
+ }
+
+ /**
+ * The opposite of `_.property`; this method creates a function that returns
+ * the property value at a given path on `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} object The object to query.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var array = [0, 1, 2],
+ * object = { 'a': array, 'b': array, 'c': array };
+ *
+ * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
+ * // => [2, 0]
+ *
+ * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
+ * // => [2, 0]
+ */
+ function propertyOf(object) {
+ return function(path) {
+ return baseGet(object, toPath(path), (path + ''));
+ };
+ }
+
+ /**
+ * Creates an array of numbers (positive and/or negative) progressing from
+ * `start` up to, but not including, `end`. If `end` is not specified it's
+ * set to `start` with `start` then set to `0`. If `end` is less than `start`
+ * a zero-length range is created unless a negative `step` is specified.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @param {number} [step=1] The value to increment or decrement by.
+ * @returns {Array} Returns the new array of numbers.
+ * @example
+ *
+ * _.range(4);
+ * // => [0, 1, 2, 3]
+ *
+ * _.range(1, 5);
+ * // => [1, 2, 3, 4]
+ *
+ * _.range(0, 20, 5);
+ * // => [0, 5, 10, 15]
+ *
+ * _.range(0, -4, -1);
+ * // => [0, -1, -2, -3]
+ *
+ * _.range(1, 4, 0);
+ * // => [1, 1, 1]
+ *
+ * _.range(0);
+ * // => []
+ */
+ function range(start, end, step) {
+ if (step && isIterateeCall(start, end, step)) {
+ end = step = undefined;
+ }
+ start = +start || 0;
+ step = step == null ? 1 : (+step || 0);
+
+ if (end == null) {
+ end = start;
+ start = 0;
+ } else {
+ end = +end || 0;
+ }
+ // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.
+ // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.
+ var index = -1,
+ length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = start;
+ start += step;
+ }
+ return result;
+ }
+
+ /**
+ * Invokes the iteratee function `n` times, returning an array of the results
+ * of each invocation. The `iteratee` is bound to `thisArg` and invoked with
+ * one argument; (index).
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the array of results.
+ * @example
+ *
+ * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));
+ * // => [3, 6, 4]
+ *
+ * _.times(3, function(n) {
+ * mage.castSpell(n);
+ * });
+ * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`
+ *
+ * _.times(3, function(n) {
+ * this.cast(n);
+ * }, mage);
+ * // => also invokes `mage.castSpell(n)` three times
+ */
+ function times(n, iteratee, thisArg) {
+ n = nativeFloor(n);
+
+ // Exit early to avoid a JSC JIT bug in Safari 8
+ // where `Array(0)` is treated as `Array(1)`.
+ if (n < 1 || !nativeIsFinite(n)) {
+ return [];
+ }
+ var index = -1,
+ result = Array(nativeMin(n, MAX_ARRAY_LENGTH));
+
+ iteratee = bindCallback(iteratee, thisArg, 1);
+ while (++index < n) {
+ if (index < MAX_ARRAY_LENGTH) {
+ result[index] = iteratee(index);
+ } else {
+ iteratee(index);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Generates a unique ID. If `prefix` is provided the ID is appended to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {string} [prefix] The value to prefix the ID with.
+ * @returns {string} Returns the unique ID.
+ * @example
+ *
+ * _.uniqueId('contact_');
+ * // => 'contact_104'
+ *
+ * _.uniqueId();
+ * // => '105'
+ */
+ function uniqueId(prefix) {
+ var id = ++idCounter;
+ return baseToString(prefix) + id;
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * Adds two numbers.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} augend The first number to add.
+ * @param {number} addend The second number to add.
+ * @returns {number} Returns the sum.
+ * @example
+ *
+ * _.add(6, 4);
+ * // => 10
+ */
+ function add(augend, addend) {
+ return (+augend || 0) + (+addend || 0);
+ }
+
+ /**
+ * Calculates `n` rounded up to `precision`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} n The number to round up.
+ * @param {number} [precision=0] The precision to round up to.
+ * @returns {number} Returns the rounded up number.
+ * @example
+ *
+ * _.ceil(4.006);
+ * // => 5
+ *
+ * _.ceil(6.004, 2);
+ * // => 6.01
+ *
+ * _.ceil(6040, -2);
+ * // => 6100
+ */
+ var ceil = createRound('ceil');
+
+ /**
+ * Calculates `n` rounded down to `precision`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} n The number to round down.
+ * @param {number} [precision=0] The precision to round down to.
+ * @returns {number} Returns the rounded down number.
+ * @example
+ *
+ * _.floor(4.006);
+ * // => 4
+ *
+ * _.floor(0.046, 2);
+ * // => 0.04
+ *
+ * _.floor(4060, -2);
+ * // => 4000
+ */
+ var floor = createRound('floor');
+
+ /**
+ * Gets the maximum value of `collection`. If `collection` is empty or falsey
+ * `-Infinity` is returned. If an iteratee function is provided it's invoked
+ * for each value in `collection` to generate the criterion by which the value
+ * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the maximum value.
+ * @example
+ *
+ * _.max([4, 2, 8, 6]);
+ * // => 8
+ *
+ * _.max([]);
+ * // => -Infinity
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.max(users, function(chr) {
+ * return chr.age;
+ * });
+ * // => { 'user': 'fred', 'age': 40 }
+ *
+ * // using the `_.property` callback shorthand
+ * _.max(users, 'age');
+ * // => { 'user': 'fred', 'age': 40 }
+ */
+ var max = createExtremum(gt, NEGATIVE_INFINITY);
+
+ /**
+ * Gets the minimum value of `collection`. If `collection` is empty or falsey
+ * `Infinity` is returned. If an iteratee function is provided it's invoked
+ * for each value in `collection` to generate the criterion by which the value
+ * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the minimum value.
+ * @example
+ *
+ * _.min([4, 2, 8, 6]);
+ * // => 2
+ *
+ * _.min([]);
+ * // => Infinity
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.min(users, function(chr) {
+ * return chr.age;
+ * });
+ * // => { 'user': 'barney', 'age': 36 }
+ *
+ * // using the `_.property` callback shorthand
+ * _.min(users, 'age');
+ * // => { 'user': 'barney', 'age': 36 }
+ */
+ var min = createExtremum(lt, POSITIVE_INFINITY);
+
+ /**
+ * Calculates `n` rounded to `precision`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} n The number to round.
+ * @param {number} [precision=0] The precision to round to.
+ * @returns {number} Returns the rounded number.
+ * @example
+ *
+ * _.round(4.006);
+ * // => 4
+ *
+ * _.round(4.006, 2);
+ * // => 4.01
+ *
+ * _.round(4060, -2);
+ * // => 4100
+ */
+ var round = createRound('round');
+
+ /**
+ * Gets the sum of the values in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {number} Returns the sum.
+ * @example
+ *
+ * _.sum([4, 6]);
+ * // => 10
+ *
+ * _.sum({ 'a': 4, 'b': 6 });
+ * // => 10
+ *
+ * var objects = [
+ * { 'n': 4 },
+ * { 'n': 6 }
+ * ];
+ *
+ * _.sum(objects, function(object) {
+ * return object.n;
+ * });
+ * // => 10
+ *
+ * // using the `_.property` callback shorthand
+ * _.sum(objects, 'n');
+ * // => 10
+ */
+ function sum(collection, iteratee, thisArg) {
+ if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
+ iteratee = undefined;
+ }
+ iteratee = getCallback(iteratee, thisArg, 3);
+ return iteratee.length == 1
+ ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
+ : baseSum(collection, iteratee);
+ }
+
+ /*------------------------------------------------------------------------*/
+
+ // Ensure wrappers are instances of `baseLodash`.
+ lodash.prototype = baseLodash.prototype;
+
+ LodashWrapper.prototype = baseCreate(baseLodash.prototype);
+ LodashWrapper.prototype.constructor = LodashWrapper;
+
+ LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+ LazyWrapper.prototype.constructor = LazyWrapper;
+
+ // Add functions to the `Map` cache.
+ MapCache.prototype['delete'] = mapDelete;
+ MapCache.prototype.get = mapGet;
+ MapCache.prototype.has = mapHas;
+ MapCache.prototype.set = mapSet;
+
+ // Add functions to the `Set` cache.
+ SetCache.prototype.push = cachePush;
+
+ // Assign cache to `_.memoize`.
+ memoize.Cache = MapCache;
+
+ // Add functions that return wrapped values when chaining.
+ lodash.after = after;
+ lodash.ary = ary;
+ lodash.assign = assign;
+ lodash.at = at;
+ lodash.before = before;
+ lodash.bind = bind;
+ lodash.bindAll = bindAll;
+ lodash.bindKey = bindKey;
+ lodash.callback = callback;
+ lodash.chain = chain;
+ lodash.chunk = chunk;
+ lodash.compact = compact;
+ lodash.constant = constant;
+ lodash.countBy = countBy;
+ lodash.create = create;
+ lodash.curry = curry;
+ lodash.curryRight = curryRight;
+ lodash.debounce = debounce;
+ lodash.defaults = defaults;
+ lodash.defaultsDeep = defaultsDeep;
+ lodash.defer = defer;
+ lodash.delay = delay;
+ lodash.difference = difference;
+ lodash.drop = drop;
+ lodash.dropRight = dropRight;
+ lodash.dropRightWhile = dropRightWhile;
+ lodash.dropWhile = dropWhile;
+ lodash.fill = fill;
+ lodash.filter = filter;
+ lodash.flatten = flatten;
+ lodash.flattenDeep = flattenDeep;
+ lodash.flow = flow;
+ lodash.flowRight = flowRight;
+ lodash.forEach = forEach;
+ lodash.forEachRight = forEachRight;
+ lodash.forIn = forIn;
+ lodash.forInRight = forInRight;
+ lodash.forOwn = forOwn;
+ lodash.forOwnRight = forOwnRight;
+ lodash.functions = functions;
+ lodash.groupBy = groupBy;
+ lodash.indexBy = indexBy;
+ lodash.initial = initial;
+ lodash.intersection = intersection;
+ lodash.invert = invert;
+ lodash.invoke = invoke;
+ lodash.keys = keys;
+ lodash.keysIn = keysIn;
+ lodash.map = map;
+ lodash.mapKeys = mapKeys;
+ lodash.mapValues = mapValues;
+ lodash.matches = matches;
+ lodash.matchesProperty = matchesProperty;
+ lodash.memoize = memoize;
+ lodash.merge = merge;
+ lodash.method = method;
+ lodash.methodOf = methodOf;
+ lodash.mixin = mixin;
+ lodash.modArgs = modArgs;
+ lodash.negate = negate;
+ lodash.omit = omit;
+ lodash.once = once;
+ lodash.pairs = pairs;
+ lodash.partial = partial;
+ lodash.partialRight = partialRight;
+ lodash.partition = partition;
+ lodash.pick = pick;
+ lodash.pluck = pluck;
+ lodash.property = property;
+ lodash.propertyOf = propertyOf;
+ lodash.pull = pull;
+ lodash.pullAt = pullAt;
+ lodash.range = range;
+ lodash.rearg = rearg;
+ lodash.reject = reject;
+ lodash.remove = remove;
+ lodash.rest = rest;
+ lodash.restParam = restParam;
+ lodash.set = set;
+ lodash.shuffle = shuffle;
+ lodash.slice = slice;
+ lodash.sortBy = sortBy;
+ lodash.sortByAll = sortByAll;
+ lodash.sortByOrder = sortByOrder;
+ lodash.spread = spread;
+ lodash.take = take;
+ lodash.takeRight = takeRight;
+ lodash.takeRightWhile = takeRightWhile;
+ lodash.takeWhile = takeWhile;
+ lodash.tap = tap;
+ lodash.throttle = throttle;
+ lodash.thru = thru;
+ lodash.times = times;
+ lodash.toArray = toArray;
+ lodash.toPlainObject = toPlainObject;
+ lodash.transform = transform;
+ lodash.union = union;
+ lodash.uniq = uniq;
+ lodash.unzip = unzip;
+ lodash.unzipWith = unzipWith;
+ lodash.values = values;
+ lodash.valuesIn = valuesIn;
+ lodash.where = where;
+ lodash.without = without;
+ lodash.wrap = wrap;
+ lodash.xor = xor;
+ lodash.zip = zip;
+ lodash.zipObject = zipObject;
+ lodash.zipWith = zipWith;
+
+ // Add aliases.
+ lodash.backflow = flowRight;
+ lodash.collect = map;
+ lodash.compose = flowRight;
+ lodash.each = forEach;
+ lodash.eachRight = forEachRight;
+ lodash.extend = assign;
+ lodash.iteratee = callback;
+ lodash.methods = functions;
+ lodash.object = zipObject;
+ lodash.select = filter;
+ lodash.tail = rest;
+ lodash.unique = uniq;
+
+ // Add functions to `lodash.prototype`.
+ mixin(lodash, lodash);
+
+ /*------------------------------------------------------------------------*/
+
+ // Add functions that return unwrapped values when chaining.
+ lodash.add = add;
+ lodash.attempt = attempt;
+ lodash.camelCase = camelCase;
+ lodash.capitalize = capitalize;
+ lodash.ceil = ceil;
+ lodash.clone = clone;
+ lodash.cloneDeep = cloneDeep;
+ lodash.deburr = deburr;
+ lodash.endsWith = endsWith;
+ lodash.escape = escape;
+ lodash.escapeRegExp = escapeRegExp;
+ lodash.every = every;
+ lodash.find = find;
+ lodash.findIndex = findIndex;
+ lodash.findKey = findKey;
+ lodash.findLast = findLast;
+ lodash.findLastIndex = findLastIndex;
+ lodash.findLastKey = findLastKey;
+ lodash.findWhere = findWhere;
+ lodash.first = first;
+ lodash.floor = floor;
+ lodash.get = get;
+ lodash.gt = gt;
+ lodash.gte = gte;
+ lodash.has = has;
+ lodash.identity = identity;
+ lodash.includes = includes;
+ lodash.indexOf = indexOf;
+ lodash.inRange = inRange;
+ lodash.isArguments = isArguments;
+ lodash.isArray = isArray;
+ lodash.isBoolean = isBoolean;
+ lodash.isDate = isDate;
+ lodash.isElement = isElement;
+ lodash.isEmpty = isEmpty;
+ lodash.isEqual = isEqual;
+ lodash.isError = isError;
+ lodash.isFinite = isFinite;
+ lodash.isFunction = isFunction;
+ lodash.isMatch = isMatch;
+ lodash.isNaN = isNaN;
+ lodash.isNative = isNative;
+ lodash.isNull = isNull;
+ lodash.isNumber = isNumber;
+ lodash.isObject = isObject;
+ lodash.isPlainObject = isPlainObject;
+ lodash.isRegExp = isRegExp;
+ lodash.isString = isString;
+ lodash.isTypedArray = isTypedArray;
+ lodash.isUndefined = isUndefined;
+ lodash.kebabCase = kebabCase;
+ lodash.last = last;
+ lodash.lastIndexOf = lastIndexOf;
+ lodash.lt = lt;
+ lodash.lte = lte;
+ lodash.max = max;
+ lodash.min = min;
+ lodash.noConflict = noConflict;
+ lodash.noop = noop;
+ lodash.now = now;
+ lodash.pad = pad;
+ lodash.padLeft = padLeft;
+ lodash.padRight = padRight;
+ lodash.parseInt = parseInt;
+ lodash.random = random;
+ lodash.reduce = reduce;
+ lodash.reduceRight = reduceRight;
+ lodash.repeat = repeat;
+ lodash.result = result;
+ lodash.round = round;
+ lodash.runInContext = runInContext;
+ lodash.size = size;
+ lodash.snakeCase = snakeCase;
+ lodash.some = some;
+ lodash.sortedIndex = sortedIndex;
+ lodash.sortedLastIndex = sortedLastIndex;
+ lodash.startCase = startCase;
+ lodash.startsWith = startsWith;
+ lodash.sum = sum;
+ lodash.template = template;
+ lodash.trim = trim;
+ lodash.trimLeft = trimLeft;
+ lodash.trimRight = trimRight;
+ lodash.trunc = trunc;
+ lodash.unescape = unescape;
+ lodash.uniqueId = uniqueId;
+ lodash.words = words;
+
+ // Add aliases.
+ lodash.all = every;
+ lodash.any = some;
+ lodash.contains = includes;
+ lodash.eq = isEqual;
+ lodash.detect = find;
+ lodash.foldl = reduce;
+ lodash.foldr = reduceRight;
+ lodash.head = first;
+ lodash.include = includes;
+ lodash.inject = reduce;
+
+ mixin(lodash, (function() {
+ var source = {};
+ baseForOwn(lodash, function(func, methodName) {
+ if (!lodash.prototype[methodName]) {
+ source[methodName] = func;
+ }
+ });
+ return source;
+ }()), false);
+
+ /*------------------------------------------------------------------------*/
+
+ // Add functions capable of returning wrapped and unwrapped values when chaining.
+ lodash.sample = sample;
+
+ lodash.prototype.sample = function(n) {
+ if (!this.__chain__ && n == null) {
+ return sample(this.value());
+ }
+ return this.thru(function(value) {
+ return sample(value, n);
+ });
+ };
+
+ /*------------------------------------------------------------------------*/
+
+ /**
+ * The semantic version number.
+ *
+ * @static
+ * @memberOf _
+ * @type string
+ */
+ lodash.VERSION = VERSION;
+
+ // Assign default placeholders.
+ arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
+ lodash[methodName].placeholder = lodash;
+ });
+
+ // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
+ arrayEach(['drop', 'take'], function(methodName, index) {
+ LazyWrapper.prototype[methodName] = function(n) {
+ var filtered = this.__filtered__;
+ if (filtered && !index) {
+ return new LazyWrapper(this);
+ }
+ n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);
+
+ var result = this.clone();
+ if (filtered) {
+ result.__takeCount__ = nativeMin(result.__takeCount__, n);
+ } else {
+ result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });
+ }
+ return result;
+ };
+
+ LazyWrapper.prototype[methodName + 'Right'] = function(n) {
+ return this.reverse()[methodName](n).reverse();
+ };
+ });
+
+ // Add `LazyWrapper` methods that accept an `iteratee` value.
+ arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
+ var type = index + 1,
+ isFilter = type != LAZY_MAP_FLAG;
+
+ LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
+ var result = this.clone();
+ result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });
+ result.__filtered__ = result.__filtered__ || isFilter;
+ return result;
+ };
+ });
+
+ // Add `LazyWrapper` methods for `_.first` and `_.last`.
+ arrayEach(['first', 'last'], function(methodName, index) {
+ var takeName = 'take' + (index ? 'Right' : '');
+
+ LazyWrapper.prototype[methodName] = function() {
+ return this[takeName](1).value()[0];
+ };
+ });
+
+ // Add `LazyWrapper` methods for `_.initial` and `_.rest`.
+ arrayEach(['initial', 'rest'], function(methodName, index) {
+ var dropName = 'drop' + (index ? '' : 'Right');
+
+ LazyWrapper.prototype[methodName] = function() {
+ return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
+ };
+ });
+
+ // Add `LazyWrapper` methods for `_.pluck` and `_.where`.
+ arrayEach(['pluck', 'where'], function(methodName, index) {
+ var operationName = index ? 'filter' : 'map',
+ createCallback = index ? baseMatches : property;
+
+ LazyWrapper.prototype[methodName] = function(value) {
+ return this[operationName](createCallback(value));
+ };
+ });
+
+ LazyWrapper.prototype.compact = function() {
+ return this.filter(identity);
+ };
+
+ LazyWrapper.prototype.reject = function(predicate, thisArg) {
+ predicate = getCallback(predicate, thisArg, 1);
+ return this.filter(function(value) {
+ return !predicate(value);
+ });
+ };
+
+ LazyWrapper.prototype.slice = function(start, end) {
+ start = start == null ? 0 : (+start || 0);
+
+ var result = this;
+ if (result.__filtered__ && (start > 0 || end < 0)) {
+ return new LazyWrapper(result);
+ }
+ if (start < 0) {
+ result = result.takeRight(-start);
+ } else if (start) {
+ result = result.drop(start);
+ }
+ if (end !== undefined) {
+ end = (+end || 0);
+ result = end < 0 ? result.dropRight(-end) : result.take(end - start);
+ }
+ return result;
+ };
+
+ LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {
+ return this.reverse().takeWhile(predicate, thisArg).reverse();
+ };
+
+ LazyWrapper.prototype.toArray = function() {
+ return this.take(POSITIVE_INFINITY);
+ };
+
+ // Add `LazyWrapper` methods to `lodash.prototype`.
+ baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+ var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
+ retUnwrapped = /^(?:first|last)$/.test(methodName),
+ lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];
+
+ if (!lodashFunc) {
+ return;
+ }
+ lodash.prototype[methodName] = function() {
+ var args = retUnwrapped ? [1] : arguments,
+ chainAll = this.__chain__,
+ value = this.__wrapped__,
+ isHybrid = !!this.__actions__.length,
+ isLazy = value instanceof LazyWrapper,
+ iteratee = args[0],
+ useLazy = isLazy || isArray(value);
+
+ if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
+ // Avoid lazy use if the iteratee has a "length" value other than `1`.
+ isLazy = useLazy = false;
+ }
+ var interceptor = function(value) {
+ return (retUnwrapped && chainAll)
+ ? lodashFunc(value, 1)[0]
+ : lodashFunc.apply(undefined, arrayPush([value], args));
+ };
+
+ var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },
+ onlyLazy = isLazy && !isHybrid;
+
+ if (retUnwrapped && !chainAll) {
+ if (onlyLazy) {
+ value = value.clone();
+ value.__actions__.push(action);
+ return func.call(value);
+ }
+ return lodashFunc.call(undefined, this.value())[0];
+ }
+ if (!retUnwrapped && useLazy) {
+ value = onlyLazy ? value : new LazyWrapper(this);
+ var result = func.apply(value, args);
+ result.__actions__.push(action);
+ return new LodashWrapper(result, chainAll);
+ }
+ return this.thru(interceptor);
+ };
+ });
+
+ // Add `Array` and `String` methods to `lodash.prototype`.
+ arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {
+ var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],
+ chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
+ retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);
+
+ lodash.prototype[methodName] = function() {
+ var args = arguments;
+ if (retUnwrapped && !this.__chain__) {
+ return func.apply(this.value(), args);
+ }
+ return this[chainName](function(value) {
+ return func.apply(value, args);
+ });
+ };
+ });
+
+ // Map minified function names to their real names.
+ baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+ var lodashFunc = lodash[methodName];
+ if (lodashFunc) {
+ var key = (lodashFunc.name + ''),
+ names = realNames[key] || (realNames[key] = []);
+
+ names.push({ 'name': methodName, 'func': lodashFunc });
+ }
+ });
+
+ realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];
+
+ // Add functions to the lazy wrapper.
+ LazyWrapper.prototype.clone = lazyClone;
+ LazyWrapper.prototype.reverse = lazyReverse;
+ LazyWrapper.prototype.value = lazyValue;
+
+ // Add chaining functions to the `lodash` wrapper.
+ lodash.prototype.chain = wrapperChain;
+ lodash.prototype.commit = wrapperCommit;
+ lodash.prototype.concat = wrapperConcat;
+ lodash.prototype.plant = wrapperPlant;
+ lodash.prototype.reverse = wrapperReverse;
+ lodash.prototype.toString = wrapperToString;
+ lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
+
+ // Add function aliases to the `lodash` wrapper.
+ lodash.prototype.collect = lodash.prototype.map;
+ lodash.prototype.head = lodash.prototype.first;
+ lodash.prototype.select = lodash.prototype.filter;
+ lodash.prototype.tail = lodash.prototype.rest;
+
+ return lodash;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ // Export lodash.
+ var _ = runInContext();
+
+ // Some AMD build optimizers like r.js check for condition patterns like the following:
+ if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
+ // Expose lodash to the global object when an AMD loader is present to avoid
+ // errors in cases where lodash is loaded by a script tag and not intended
+ // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for
+ // more details.
+ root._ = _;
+
+ // Define as an anonymous module so, through path mapping, it can be
+ // referenced as the "underscore" module.
+ define(function() {
+ return _;
+ });
+ }
+ // Check for `exports` after `define` in case a build optimizer adds an `exports` object.
+ else if (freeExports && freeModule) {
+ // Export for Node.js or RingoJS.
+ if (moduleExports) {
+ (freeModule.exports = _)._ = _;
+ }
+ // Export for Rhino with CommonJS support.
+ else {
+ freeExports._ = _;
+ }
+ }
+ else {
+ // Export for a browser or Rhino.
+ root._ = _;
+ }
+}.call(this));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.min.js
new file mode 100644
index 00000000000..e6c9820b224
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/lodash/lodash.min.js
@@ -0,0 +1,98 @@
+/**
+ * @license
+ * lodash 3.10.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
+ * Build: `lodash modern -o ./lodash.js`
+ */
+;(function(){function n(n,t){if(n!==t){var r=null===n,e=n===w,u=n===n,o=null===t,i=t===w,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););
+return r}function i(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function f(t,r){return n(t.a,r.a)||t.b-r.b}function a(n){return Nn[n]}function c(n){return Tn[n]}function l(n,t,r){return t?n=Bn[n]:r&&(n=Dn[n]),"\\"+n}function s(n){return"\\"+Dn[n]}function p(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function h(n){return!!n&&typeof n=="object"}function _(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n);
+}function v(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=z,o[++u]=r);return o}function g(n){for(var t=-1,r=n.length;++t<r&&_(n.charCodeAt(t)););return t}function y(n){for(var t=n.length;t--&&_(n.charCodeAt(t)););return t}function d(n){return Ln[n]}function m(_){function Nn(n){if(h(n)&&!(Oo(n)||n instanceof zn)){if(n instanceof Ln)return n;if(nu.call(n,"__chain__")&&nu.call(n,"__wrapped__"))return Mr(n)}return new Ln(n)}function Tn(){}function Ln(n,t,r){this.__wrapped__=n,this.__actions__=r||[],
+this.__chain__=!!t}function zn(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Ru,this.__views__=[]}function Bn(){this.__data__={}}function Dn(n){var t=n?n.length:0;for(this.data={hash:gu(null),set:new lu};t--;)this.push(n[t])}function Mn(n,t){var r=n.data;return(typeof t=="string"||ge(t)?r.set.has(t):r.hash[t])?0:-1}function qn(n,t){var r=-1,e=n.length;for(t||(t=Be(e));++r<e;)t[r]=n[r];return t}function Pn(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););
+return n}function Kn(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Vn(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function Gn(n,t){for(var r=-1,e=n.length,u=Be(e);++r<e;)u[r]=t(n[r],r,n);return u}function Jn(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Xn(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function Hn(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;
+return false}function Qn(n,t,r,e){return n!==w&&nu.call(e,r)?n:t}function nt(n,t,r){for(var e=-1,u=zo(t),o=u.length;++e<o;){var i=u[e],f=n[i],a=r(f,t[i],i,n,t);(a===a?a===f:f!==f)&&(f!==w||i in n)||(n[i]=a)}return n}function tt(n,t){return null==t?n:et(t,zo(t),n)}function rt(n,t){for(var r=-1,e=null==n,u=!e&&Er(n),o=u?n.length:0,i=t.length,f=Be(i);++r<i;){var a=t[r];f[r]=u?Cr(a,o)?n[a]:w:e?w:n[a]}return f}function et(n,t,r){r||(r={});for(var e=-1,u=t.length;++e<u;){var o=t[e];r[o]=n[o]}return r}function ut(n,t,r){
+var e=typeof n;return"function"==e?t===w?n:Bt(n,t,r):null==n?Fe:"object"==e?bt(n):t===w?ze(n):xt(n,t)}function ot(n,t,r,e,u,o,i){var f;if(r&&(f=u?r(n,e,u):r(n)),f!==w)return f;if(!ge(n))return n;if(e=Oo(n)){if(f=kr(n),!t)return qn(n,f)}else{var a=ru.call(n),c=a==K;if(a!=Z&&a!=B&&(!c||u))return Fn[a]?Rr(n,a,t):u?n:{};if(f=Ir(c?{}:n),!t)return tt(f,n)}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(f),(e?Pn:_t)(n,function(e,u){f[u]=ot(e,t,r,u,n,o,i)}),f}function it(n,t,r){
+if(typeof n!="function")throw new Ge(L);return su(function(){n.apply(w,r)},t)}function ft(n,t){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=xr(),f=i===r,a=f&&t.length>=F&&gu&&lu?new Dn(t):null,c=t.length;a&&(i=Mn,f=false,t=a);n:for(;++o<e;)if(a=n[o],f&&a===a){for(var l=c;l--;)if(t[l]===a)continue n;u.push(a)}else 0>i(t,a,0)&&u.push(a);return u}function at(n,t){var r=true;return Su(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ct(n,t,r,e){var u=e,o=u;return Su(n,function(n,i,f){i=+t(n,i,f),(r(i,u)||i===e&&i===o)&&(u=i,
+o=n)}),o}function lt(n,t){var r=[];return Su(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function st(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function pt(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];h(i)&&Er(i)&&(r||Oo(i)||pe(i))?t?pt(i,t,r,e):Jn(e,i):r||(e[e.length]=i)}return e}function ht(n,t){Nu(n,t,Re)}function _t(n,t){return Nu(n,t,zo)}function vt(n,t){return Tu(n,t,zo)}function gt(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){var i=t[r];
+ve(n[i])&&(o[++u]=i)}return o}function yt(n,t,r){if(null!=n){r!==w&&r in Br(n)&&(t=[r]),r=0;for(var e=t.length;null!=n&&r<e;)n=n[t[r++]];return r&&r==e?n:w}}function dt(n,t,r,e,u,o){if(n===t)n=true;else if(null==n||null==t||!ge(n)&&!h(t))n=n!==n&&t!==t;else n:{var i=dt,f=Oo(n),a=Oo(t),c=D,l=D;f||(c=ru.call(n),c==B?c=Z:c!=Z&&(f=xe(n))),a||(l=ru.call(t),l==B?l=Z:l!=Z&&xe(t));var s=c==Z,a=l==Z,l=c==l;if(!l||f||s){if(!e&&(c=s&&nu.call(n,"__wrapped__"),a=a&&nu.call(t,"__wrapped__"),c||a)){n=i(c?n.value():n,a?t.value():t,r,e,u,o);
+break n}if(l){for(u||(u=[]),o||(o=[]),c=u.length;c--;)if(u[c]==n){n=o[c]==t;break n}u.push(n),o.push(t),n=(f?yr:mr)(n,t,i,r,e,u,o),u.pop(),o.pop()}else n=false}else n=dr(n,t,c)}return n}function mt(n,t,r){var e=t.length,u=e,o=!r;if(null==n)return!u;for(n=Br(n);e--;){var i=t[e];if(o&&i[2]?i[1]!==n[i[0]]:!(i[0]in n))return false}for(;++e<u;){var i=t[e],f=i[0],a=n[f],c=i[1];if(o&&i[2]){if(a===w&&!(f in n))return false}else if(i=r?r(a,c,f):w,i===w?!dt(c,a,r,true):!i)return false}return true}function wt(n,t){var r=-1,e=Er(n)?Be(n.length):[];
+return Su(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function bt(n){var t=Ar(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==w||r in Br(n))}}return function(n){return mt(n,t)}}function xt(n,t){var r=Oo(n),e=Wr(n)&&t===t&&!ge(t),u=n+"";return n=Dr(n),function(o){if(null==o)return false;var i=u;if(o=Br(o),!(!r&&e||i in o)){if(o=1==n.length?o:yt(o,Et(n,0,-1)),null==o)return false;i=Zr(n),o=Br(o)}return o[i]===t?t!==w||i in o:dt(t,o[i],w,true)}}function At(n,t,r,e,u){
+if(!ge(n))return n;var o=Er(t)&&(Oo(t)||xe(t)),i=o?w:zo(t);return Pn(i||t,function(f,a){if(i&&(a=f,f=t[a]),h(f)){e||(e=[]),u||(u=[]);n:{for(var c=a,l=e,s=u,p=l.length,_=t[c];p--;)if(l[p]==_){n[c]=s[p];break n}var p=n[c],v=r?r(p,_,c,n,t):w,g=v===w;g&&(v=_,Er(_)&&(Oo(_)||xe(_))?v=Oo(p)?p:Er(p)?qn(p):[]:me(_)||pe(_)?v=pe(p)?ke(p):me(p)?p:{}:g=false),l.push(_),s.push(v),g?n[c]=At(v,_,r,l,s):(v===v?v!==p:p===p)&&(n[c]=v)}}else c=n[a],l=r?r(c,f,a,n,t):w,(s=l===w)&&(l=f),l===w&&(!o||a in n)||!s&&(l===l?l===c:c!==c)||(n[a]=l);
+}),n}function jt(n){return function(t){return null==t?w:t[n]}}function kt(n){var t=n+"";return n=Dr(n),function(r){return yt(r,n,t)}}function It(n,t){for(var r=n?t.length:0;r--;){var e=t[r];if(e!=u&&Cr(e)){var u=e;pu.call(n,e,1)}}}function Rt(n,t){return n+yu(ku()*(t-n+1))}function Ot(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function Et(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=r===w||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Be(u);++e<u;)r[e]=n[e+t];
+return r}function Ct(n,t){var r;return Su(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Ut(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Wt(t,r,e){var u=wr(),o=-1;return r=Gn(r,function(n){return u(n)}),t=wt(t,function(n){return{a:Gn(r,function(t){return t(n)}),b:++o,c:n}}),Ut(t,function(t,r){var u;n:{for(var o=-1,i=t.a,f=r.a,a=i.length,c=e.length;++o<a;)if(u=n(i[o],f[o])){if(o>=c)break n;o=e[o],u*="asc"===o||true===o?1:-1;break n}u=t.b-r.b}return u})}function $t(n,t){
+var r=0;return Su(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function St(n,t){var e=-1,u=xr(),o=n.length,i=u===r,f=i&&o>=F,a=f&&gu&&lu?new Dn(void 0):null,c=[];a?(u=Mn,i=false):(f=false,a=t?[]:c);n:for(;++e<o;){var l=n[e],s=t?t(l,e,n):l;if(i&&l===l){for(var p=a.length;p--;)if(a[p]===s)continue n;t&&a.push(s),c.push(l)}else 0>u(a,s,0)&&((t||f)&&a.push(s),c.push(l))}return c}function Ft(n,t){for(var r=-1,e=t.length,u=Be(e);++r<e;)u[r]=n[t[r]];return u}function Nt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););
+return r?Et(n,e?0:o,e?o+1:u):Et(n,e?o+1:0,e?u:o)}function Tt(n,t){var r=n;r instanceof zn&&(r=r.value());for(var e=-1,u=t.length;++e<u;)var o=t[e],r=o.func.apply(o.thisArg,Jn([r],o.args));return r}function Lt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=Eu){for(;e<u;){var o=e+u>>>1,i=n[o];(r?i<=t:i<t)&&null!==i?e=o+1:u=o}return u}return zt(n,t,Fe,r)}function zt(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,a=t===w;u<o;){var c=yu((u+o)/2),l=r(n[c]),s=l!==w,p=l===l;
+(i?p||e:f?p&&s&&(e||null!=l):a?p&&(e||s):null==l?0:e?l<=t:l<t)?u=c+1:o=c}return xu(o,Ou)}function Bt(n,t,r){if(typeof n!="function")return Fe;if(t===w)return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)};case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Dt(n){var t=new ou(n.byteLength);return new hu(t).set(new hu(n)),
+t}function Mt(n,t,r){for(var e=r.length,u=-1,o=bu(n.length-e,0),i=-1,f=t.length,a=Be(f+o);++i<f;)a[i]=t[i];for(;++u<e;)a[r[u]]=n[u];for(;o--;)a[i++]=n[u++];return a}function qt(n,t,r){for(var e=-1,u=r.length,o=-1,i=bu(n.length-u,0),f=-1,a=t.length,c=Be(i+a);++o<i;)c[o]=n[o];for(i=o;++f<a;)c[i+f]=t[f];for(;++e<u;)c[i+r[e]]=n[o++];return c}function Pt(n,t){return function(r,e,u){var o=t?t():{};if(e=wr(e,u,3),Oo(r)){u=-1;for(var i=r.length;++u<i;){var f=r[u];n(o,f,e(f,u,r),r)}}else Su(r,function(t,r,u){
+n(o,t,e(t,r,u),u)});return o}}function Kt(n){return le(function(t,r){var e=-1,u=null==t?0:r.length,o=2<u?r[u-2]:w,i=2<u?r[2]:w,f=1<u?r[u-1]:w;for(typeof o=="function"?(o=Bt(o,f,5),u-=2):(o=typeof f=="function"?f:w,u-=o?1:0),i&&Ur(r[0],r[1],i)&&(o=3>u?w:o,u=1);++e<u;)(i=r[e])&&n(t,i,o);return t})}function Vt(n,t){return function(r,e){var u=r?Bu(r):0;if(!Sr(u))return n(r,e);for(var o=t?u:-1,i=Br(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function Zt(n){return function(t,r,e){var u=Br(t);e=e(t);for(var o=e.length,i=n?o:-1;n?i--:++i<o;){
+var f=e[i];if(false===r(u[f],f,u))break}return t}}function Yt(n,t){function r(){return(this&&this!==Zn&&this instanceof r?e:n).apply(t,arguments)}var e=Jt(n);return r}function Gt(n){return function(t){var r=-1;t=$e(Ce(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Jt(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:
+return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=$u(n.prototype),t=n.apply(r,t);return ge(t)?t:r}}function Xt(n){function t(r,e,u){return u&&Ur(r,e,u)&&(e=w),r=gr(r,n,w,w,w,w,w,e),r.placeholder=t.placeholder,r}return t}function Ht(n,t){return le(function(r){var e=r[0];return null==e?e:(r.push(t),n.apply(w,r))})}function Qt(n,t){return function(r,e,u){if(u&&Ur(r,e,u)&&(e=w),e=wr(e,u,3),1==e.length){
+u=r=Oo(r)?r:zr(r);for(var o=e,i=-1,f=u.length,a=t,c=a;++i<f;){var l=u[i],s=+o(l);n(s,a)&&(a=s,c=l)}if(u=c,!r.length||u!==t)return u}return ct(r,e,n,t)}}function nr(n,r){return function(e,u,o){return u=wr(u,o,3),Oo(e)?(u=t(e,u,r),-1<u?e[u]:w):st(e,u,n)}}function tr(n){return function(r,e,u){return r&&r.length?(e=wr(e,u,3),t(r,e,n)):-1}}function rr(n){return function(t,r,e){return r=wr(r,e,3),st(t,r,n,true)}}function er(n){return function(){for(var t,r=arguments.length,e=n?r:-1,u=0,o=Be(r);n?e--:++e<r;){
+var i=o[u++]=arguments[e];if(typeof i!="function")throw new Ge(L);!t&&Ln.prototype.thru&&"wrapper"==br(i)&&(t=new Ln([],true))}for(e=t?-1:r;++e<r;){var i=o[e],u=br(i),f="wrapper"==u?zu(i):w;t=f&&$r(f[0])&&f[1]==(E|k|R|C)&&!f[4].length&&1==f[9]?t[br(f[0])].apply(t,f[3]):1==i.length&&$r(i)?t[u]():t.thru(i)}return function(){var n=arguments,e=n[0];if(t&&1==n.length&&Oo(e)&&e.length>=F)return t.plant(e).value();for(var u=0,n=r?o[u].apply(this,n):e;++u<r;)n=o[u].call(this,n);return n}}}function ur(n,t){
+return function(r,e,u){return typeof e=="function"&&u===w&&Oo(r)?n(r,e):t(r,Bt(e,u,3))}}function or(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r,Re)}}function ir(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r)}}function fr(n){return function(t,r,e){var u={};return r=wr(r,e,3),_t(t,function(t,e,o){o=r(t,e,o),e=n?o:e,t=n?t:o,u[e]=t}),u}}function ar(n){return function(t,r,e){return t=u(t),(n?t:"")+pr(t,r,e)+(n?"":t)}}function cr(n){
+var t=le(function(r,e){var u=v(e,t.placeholder);return gr(r,n,w,e,u)});return t}function lr(n,t){return function(r,e,u,o){var i=3>arguments.length;return typeof e=="function"&&o===w&&Oo(r)?n(r,e,u,i):Ot(r,wr(e,o,4),u,i,t)}}function sr(n,t,r,e,u,o,i,f,a,c){function l(){for(var m=arguments.length,b=m,j=Be(m);b--;)j[b]=arguments[b];if(e&&(j=Mt(j,e,u)),o&&(j=qt(j,o,i)),_||y){var b=l.placeholder,k=v(j,b),m=m-k.length;if(m<c){var I=f?qn(f):w,m=bu(c-m,0),E=_?k:w,k=_?w:k,C=_?j:w,j=_?w:j;return t|=_?R:O,t&=~(_?O:R),
+g||(t&=~(x|A)),j=[n,t,r,C,E,j,k,I,a,m],I=sr.apply(w,j),$r(n)&&Du(I,j),I.placeholder=b,I}}if(b=p?r:this,I=h?b[n]:n,f)for(m=j.length,E=xu(f.length,m),k=qn(j);E--;)C=f[E],j[E]=Cr(C,m)?k[C]:w;return s&&a<j.length&&(j.length=a),this&&this!==Zn&&this instanceof l&&(I=d||Jt(n)),I.apply(b,j)}var s=t&E,p=t&x,h=t&A,_=t&k,g=t&j,y=t&I,d=h?w:Jt(n);return l}function pr(n,t,r){return n=n.length,t=+t,n<t&&mu(t)?(t-=n,r=null==r?" ":r+"",Ue(r,vu(t/r.length)).slice(0,t)):""}function hr(n,t,r,e){function u(){for(var t=-1,f=arguments.length,a=-1,c=e.length,l=Be(c+f);++a<c;)l[a]=e[a];
+for(;f--;)l[a++]=arguments[++t];return(this&&this!==Zn&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&x,i=Jt(n);return u}function _r(n){var t=Pe[n];return function(n,r){return(r=r===w?0:+r||0)?(r=au(10,r),t(n*r)/r):t(n)}}function vr(n){return function(t,r,e,u){var o=wr(e);return null==e&&o===ut?Lt(t,r,n):zt(t,r,o(e,u,1),n)}}function gr(n,t,r,e,u,o,i,f){var a=t&A;if(!a&&typeof n!="function")throw new Ge(L);var c=e?e.length:0;if(c||(t&=~(R|O),e=u=w),c-=u?u.length:0,t&O){var l=e,s=u;e=u=w}var p=a?w:zu(n);
+return r=[n,t,r,e,u,l,s,o,i,f],p&&(e=r[1],t=p[1],f=e|t,u=t==E&&e==k||t==E&&e==C&&r[7].length<=p[8]||t==(E|C)&&e==k,(f<E||u)&&(t&x&&(r[2]=p[2],f|=e&x?0:j),(e=p[3])&&(u=r[3],r[3]=u?Mt(u,e,p[4]):qn(e),r[4]=u?v(r[3],z):qn(p[4])),(e=p[5])&&(u=r[5],r[5]=u?qt(u,e,p[6]):qn(e),r[6]=u?v(r[5],z):qn(p[6])),(e=p[7])&&(r[7]=qn(e)),t&E&&(r[8]=null==r[8]?p[8]:xu(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),r[9]=null==f?a?0:n.length:bu(f-c,0)||0,(p?Lu:Du)(t==x?Yt(r[0],r[2]):t!=R&&t!=(x|R)||r[4].length?sr.apply(w,r):hr.apply(w,r),r);
+}function yr(n,t,r,e,u,o,i){var f=-1,a=n.length,c=t.length;if(a!=c&&(!u||c<=a))return false;for(;++f<a;){var l=n[f],c=t[f],s=e?e(u?c:l,u?l:c,f):w;if(s!==w){if(s)continue;return false}if(u){if(!Hn(t,function(n){return l===n||r(l,n,e,u,o,i)}))return false}else if(l!==c&&!r(l,c,e,u,o,i))return false}return true}function dr(n,t,r){switch(r){case M:case q:return+n==+t;case P:return n.name==t.name&&n.message==t.message;case V:return n!=+n?t!=+t:n==+t;case Y:case G:return n==t+""}return false}function mr(n,t,r,e,u,o,i){var f=zo(n),a=f.length,c=zo(t).length;
+if(a!=c&&!u)return false;for(c=a;c--;){var l=f[c];if(!(u?l in t:nu.call(t,l)))return false}for(var s=u;++c<a;){var l=f[c],p=n[l],h=t[l],_=e?e(u?h:p,u?p:h,l):w;if(_===w?!r(p,h,e,u,o,i):!_)return false;s||(s="constructor"==l)}return s||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false}function wr(n,t,r){var e=Nn.callback||Se,e=e===Se?ut:e;return r?e(n,t,r):e}function br(n){for(var t=n.name+"",r=Wu[t],e=r?r.length:0;e--;){
+var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function xr(n,t,e){var u=Nn.indexOf||Vr,u=u===Vr?r:u;return n?u(n,t,e):u}function Ar(n){n=Oe(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!ge(r)}return n}function jr(n,t){var r=null==n?w:n[t];return ye(r)?r:w}function kr(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&nu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ir(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=Ve),
+new n}function Rr(n,t,r){var e=n.constructor;switch(t){case J:return Dt(n);case M:case q:return new e(+n);case X:case H:case Q:case nn:case tn:case rn:case en:case un:case on:return t=n.buffer,new e(r?Dt(t):t,n.byteOffset,n.length);case V:case G:return new e(n);case Y:var u=new e(n.source,kn.exec(n));u.lastIndex=n.lastIndex}return u}function Or(n,t,r){return null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),t=Zr(t)),t=null==n?n:n[t],null==t?w:t.apply(n,r)}function Er(n){return null!=n&&Sr(Bu(n));
+}function Cr(n,t){return n=typeof n=="number"||On.test(n)?+n:-1,t=null==t?Cu:t,-1<n&&0==n%1&&n<t}function Ur(n,t,r){if(!ge(r))return false;var e=typeof t;return("number"==e?Er(r)&&Cr(t,r.length):"string"==e&&t in r)?(t=r[t],n===n?n===t:t!==t):false}function Wr(n,t){var r=typeof n;return"string"==r&&dn.test(n)||"number"==r?true:Oo(n)?false:!yn.test(n)||null!=t&&n in Br(t)}function $r(n){var t=br(n),r=Nn[t];return typeof r=="function"&&t in zn.prototype?n===r?true:(t=zu(r),!!t&&n===t[0]):false}function Sr(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=Cu;
+}function Fr(n,t){return n===w?t:Eo(n,t,Fr)}function Nr(n,t){n=Br(n);for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function Tr(n,t){var r={};return ht(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function Lr(n){for(var t=Re(n),r=t.length,e=r&&n.length,u=!!e&&Sr(e)&&(Oo(n)||pe(n)),o=-1,i=[];++o<r;){var f=t[o];(u&&Cr(f,e)||nu.call(n,f))&&i.push(f)}return i}function zr(n){return null==n?[]:Er(n)?ge(n)?n:Ve(n):Ee(n)}function Br(n){return ge(n)?n:Ve(n)}function Dr(n){if(Oo(n))return n;
+var t=[];return u(n).replace(mn,function(n,r,e,u){t.push(e?u.replace(An,"$1"):r||n)}),t}function Mr(n){return n instanceof zn?n.clone():new Ln(n.__wrapped__,n.__chain__,qn(n.__actions__))}function qr(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0>t?0:t)):[]}function Pr(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0,0>t?0:t)):[]}function Kr(n){return n?n[0]:w}function Vr(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?bu(u+e,0):e;else if(e)return e=Lt(n,t),
+e<u&&(t===t?t===n[e]:n[e]!==n[e])?e:-1;return r(n,t,e||0)}function Zr(n){var t=n?n.length:0;return t?n[t-1]:w}function Yr(n){return qr(n,1)}function Gr(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=Ur(n,t,u)?w:t,t=false);var o=wr();if((null!=e||o!==ut)&&(e=o(e,u,3)),t&&xr()===r){t=e;var i;e=-1,u=n.length;for(var o=-1,f=[];++e<u;){var a=n[e],c=t?t(a,e,n):a;e&&i===c||(i=c,f[++o]=a)}n=f}else n=St(n,e);return n}function Jr(n){if(!n||!n.length)return[];var t=-1,r=0;n=Vn(n,function(n){
+return Er(n)?(r=bu(n.length,r),true):void 0});for(var e=Be(r);++t<r;)e[t]=Gn(n,jt(t));return e}function Xr(n,t,r){return n&&n.length?(n=Jr(n),null==t?n:(t=Bt(t,r,4),Gn(n,function(n){return Xn(n,t,w,true)}))):[]}function Hr(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Oo(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1])}return u}function Qr(n){return n=Nn(n),n.__chain__=true,n}function ne(n,t,r){return t.call(r,n)}function te(n,t,r){var e=Oo(n)?Kn:at;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),
+e(n,t)}function re(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,t)}function ee(n,t,r,e){var u=n?Bu(n):0;return Sr(u)||(n=Ee(n),u=n.length),r=typeof r!="number"||e&&Ur(t,r,e)?0:0>r?bu(u+r,0):r||0,typeof n=="string"||!Oo(n)&&be(n)?r<=u&&-1<n.indexOf(t,r):!!u&&-1<xr(n,t,r)}function ue(n,t,r){var e=Oo(n)?Gn:wt;return t=wr(t,r,3),e(n,t)}function oe(n,t,r){if(r?Ur(n,t,r):null==t){n=zr(n);var e=n.length;return 0<e?n[Rt(0,e-1)]:w}r=-1,n=je(n);var e=n.length,u=e-1;for(t=xu(0>t?0:+t||0,e);++r<t;){var e=Rt(r,u),o=n[e];
+n[e]=n[r],n[r]=o}return n.length=t,n}function ie(n,t,r){var e=Oo(n)?Hn:Ct;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),e(n,t)}function fe(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var e=n;n=t,t=e}return function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=w),r}}function ae(n,t,r){function e(t,r){r&&iu(r),a=p=h=w,t&&(_=ho(),c=n.apply(s,f),p||a||(f=s=w))}function u(){var n=t-(ho()-l);0>=n||n>t?e(h,a):p=su(u,n)}function o(){e(g,p);
+}function i(){if(f=arguments,l=ho(),s=this,h=g&&(p||!y),false===v)var r=y&&!p;else{a||y||(_=l);var e=v-(l-_),i=0>=e||e>v;i?(a&&(a=iu(a)),_=l,c=n.apply(s,f)):a||(a=su(o,e))}return i&&p?p=iu(p):p||t===v||(p=su(u,t)),r&&(i=true,c=n.apply(s,f)),!i||p||a||(f=s=w),c}var f,a,c,l,s,p,h,_=0,v=false,g=true;if(typeof n!="function")throw new Ge(L);if(t=0>t?0:+t||0,true===r)var y=true,g=false;else ge(r)&&(y=!!r.leading,v="maxWait"in r&&bu(+r.maxWait||0,t),g="trailing"in r?!!r.trailing:g);return i.cancel=function(){p&&iu(p),a&&iu(a),
+_=0,a=p=h=w},i}function ce(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Ge(L);return r.cache=new ce.Cache,r}function le(n,t){if(typeof n!="function")throw new Ge(L);return t=bu(t===w?n.length-1:+t||0,0),function(){for(var r=arguments,e=-1,u=bu(r.length-t,0),o=Be(u);++e<u;)o[e]=r[t+e];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,r[0],o);
+case 2:return n.call(this,r[0],r[1],o)}for(u=Be(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function se(n,t){return n>t}function pe(n){return h(n)&&Er(n)&&nu.call(n,"callee")&&!cu.call(n,"callee")}function he(n,t,r,e){return e=(r=typeof r=="function"?Bt(r,e,3):w)?r(n,t):w,e===w?dt(n,t,r):!!e}function _e(n){return h(n)&&typeof n.message=="string"&&ru.call(n)==P}function ve(n){return ge(n)&&ru.call(n)==K}function ge(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ye(n){
+return null==n?false:ve(n)?uu.test(Qe.call(n)):h(n)&&Rn.test(n)}function de(n){return typeof n=="number"||h(n)&&ru.call(n)==V}function me(n){var t;if(!h(n)||ru.call(n)!=Z||pe(n)||!(nu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t)))return false;var r;return ht(n,function(n,t){r=t}),r===w||nu.call(n,r)}function we(n){return ge(n)&&ru.call(n)==Y}function be(n){return typeof n=="string"||h(n)&&ru.call(n)==G}function xe(n){return h(n)&&Sr(n.length)&&!!Sn[ru.call(n)]}function Ae(n,t){
+return n<t}function je(n){var t=n?Bu(n):0;return Sr(t)?t?qn(n):[]:Ee(n)}function ke(n){return et(n,Re(n))}function Ie(n){return gt(n,Re(n))}function Re(n){if(null==n)return[];ge(n)||(n=Ve(n));for(var t=n.length,t=t&&Sr(t)&&(Oo(n)||pe(n))&&t||0,r=n.constructor,e=-1,r=typeof r=="function"&&r.prototype===n,u=Be(t),o=0<t;++e<t;)u[e]=e+"";for(var i in n)o&&Cr(i,t)||"constructor"==i&&(r||!nu.call(n,i))||u.push(i);return u}function Oe(n){n=Br(n);for(var t=-1,r=zo(n),e=r.length,u=Be(e);++t<e;){var o=r[t];
+u[t]=[o,n[o]]}return u}function Ee(n){return Ft(n,zo(n))}function Ce(n){return(n=u(n))&&n.replace(En,a).replace(xn,"")}function Ue(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!mu(t))return r;do t%2&&(r+=n),t=yu(t/2),n+=n;while(t);return r}function We(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(g(n),y(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function $e(n,t,r){return r&&Ur(n,t,r)&&(t=w),n=u(n),n.match(t||Wn)||[]}function Se(n,t,r){return r&&Ur(n,t,r)&&(t=w),h(n)?Ne(n):ut(n,t)}function Fe(n){
+return n}function Ne(n){return bt(ot(n,true))}function Te(n,t,r){if(null==r){var e=ge(t),u=e?zo(t):w;((u=u&&u.length?gt(t,u):w)?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=gt(t,zo(t)));var o=true,e=-1,i=ve(n),f=u.length;false===r?o=false:ge(r)&&"chain"in r&&(o=r.chain);for(;++e<f;){r=u[e];var a=t[r];n[r]=a,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=qn(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return t.apply(n,Jn([this.value()],arguments));
+}}(a))}return n}function Le(){}function ze(n){return Wr(n)?jt(n):kt(n)}_=_?Yn.defaults(Zn.Object(),_,Yn.pick(Zn,$n)):Zn;var Be=_.Array,De=_.Date,Me=_.Error,qe=_.Function,Pe=_.Math,Ke=_.Number,Ve=_.Object,Ze=_.RegExp,Ye=_.String,Ge=_.TypeError,Je=Be.prototype,Xe=Ve.prototype,He=Ye.prototype,Qe=qe.prototype.toString,nu=Xe.hasOwnProperty,tu=0,ru=Xe.toString,eu=Zn._,uu=Ze("^"+Qe.call(nu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ou=_.ArrayBuffer,iu=_.clearTimeout,fu=_.parseFloat,au=Pe.pow,cu=Xe.propertyIsEnumerable,lu=jr(_,"Set"),su=_.setTimeout,pu=Je.splice,hu=_.Uint8Array,_u=jr(_,"WeakMap"),vu=Pe.ceil,gu=jr(Ve,"create"),yu=Pe.floor,du=jr(Be,"isArray"),mu=_.isFinite,wu=jr(Ve,"keys"),bu=Pe.max,xu=Pe.min,Au=jr(De,"now"),ju=_.parseInt,ku=Pe.random,Iu=Ke.NEGATIVE_INFINITY,Ru=Ke.POSITIVE_INFINITY,Ou=4294967294,Eu=2147483647,Cu=9007199254740991,Uu=_u&&new _u,Wu={};
+Nn.support={},Nn.templateSettings={escape:_n,evaluate:vn,interpolate:gn,variable:"",imports:{_:Nn}};var $u=function(){function n(){}return function(t){if(ge(t)){n.prototype=t;var r=new n;n.prototype=w}return r||{}}}(),Su=Vt(_t),Fu=Vt(vt,true),Nu=Zt(),Tu=Zt(true),Lu=Uu?function(n,t){return Uu.set(n,t),n}:Fe,zu=Uu?function(n){return Uu.get(n)}:Le,Bu=jt("length"),Du=function(){var n=0,t=0;return function(r,e){var u=ho(),o=S-(u-t);if(t=u,0<o){if(++n>=$)return r}else n=0;return Lu(r,e)}}(),Mu=le(function(n,t){
+return h(n)&&Er(n)?ft(n,pt(t,false,true)):[]}),qu=tr(),Pu=tr(true),Ku=le(function(n){for(var t=n.length,e=t,u=Be(l),o=xr(),i=o===r,f=[];e--;){var a=n[e]=Er(a=n[e])?a:[];u[e]=i&&120<=a.length&&gu&&lu?new Dn(e&&a):null}var i=n[0],c=-1,l=i?i.length:0,s=u[0];n:for(;++c<l;)if(a=i[c],0>(s?Mn(s,a):o(f,a,0))){for(e=t;--e;){var p=u[e];if(0>(p?Mn(p,a):o(n[e],a,0)))continue n}s&&s.push(a),f.push(a)}return f}),Vu=le(function(t,r){r=pt(r);var e=rt(t,r);return It(t,r.sort(n)),e}),Zu=vr(),Yu=vr(true),Gu=le(function(n){return St(pt(n,false,true));
+}),Ju=le(function(n,t){return Er(n)?ft(n,t):[]}),Xu=le(Jr),Hu=le(function(n){var t=n.length,r=2<t?n[t-2]:w,e=1<t?n[t-1]:w;return 2<t&&typeof r=="function"?t-=2:(r=1<t&&typeof e=="function"?(--t,e):w,e=w),n.length=t,Xr(n,r,e)}),Qu=le(function(n){return n=pt(n),this.thru(function(t){t=Oo(t)?t:[Br(t)];for(var r=n,e=-1,u=t.length,o=-1,i=r.length,f=Be(u+i);++e<u;)f[e]=t[e];for(;++o<i;)f[e++]=r[o];return f})}),no=le(function(n,t){return rt(n,pt(t))}),to=Pt(function(n,t,r){nu.call(n,r)?++n[r]:n[r]=1}),ro=nr(Su),eo=nr(Fu,true),uo=ur(Pn,Su),oo=ur(function(n,t){
+for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Fu),io=Pt(function(n,t,r){nu.call(n,r)?n[r].push(t):n[r]=[t]}),fo=Pt(function(n,t,r){n[r]=t}),ao=le(function(n,t,r){var e=-1,u=typeof t=="function",o=Wr(t),i=Er(n)?Be(n.length):[];return Su(n,function(n){var f=u?t:o&&null!=n?n[t]:w;i[++e]=f?f.apply(n,r):Or(n,t,r)}),i}),co=Pt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),lo=lr(Xn,Su),so=lr(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Fu),po=le(function(n,t){
+if(null==n)return[];var r=t[2];return r&&Ur(t[0],t[1],r)&&(t.length=1),Wt(n,pt(t),[])}),ho=Au||function(){return(new De).getTime()},_o=le(function(n,t,r){var e=x;if(r.length)var u=v(r,_o.placeholder),e=e|R;return gr(n,e,t,r,u)}),vo=le(function(n,t){t=t.length?pt(t):Ie(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=gr(n[u],x,n)}return n}),go=le(function(n,t,r){var e=x|A;if(r.length)var u=v(r,go.placeholder),e=e|R;return gr(t,e,n,r,u)}),yo=Xt(k),mo=Xt(I),wo=le(function(n,t){return it(n,1,t)}),bo=le(function(n,t,r){
+return it(n,t,r)}),xo=er(),Ao=er(true),jo=le(function(n,t){if(t=pt(t),typeof n!="function"||!Kn(t,e))throw new Ge(L);var r=t.length;return le(function(e){for(var u=xu(e.length,r);u--;)e[u]=t[u](e[u]);return n.apply(this,e)})}),ko=cr(R),Io=cr(O),Ro=le(function(n,t){return gr(n,C,w,w,w,pt(t))}),Oo=du||function(n){return h(n)&&Sr(n.length)&&ru.call(n)==D},Eo=Kt(At),Co=Kt(function(n,t,r){return r?nt(n,t,r):tt(n,t)}),Uo=Ht(Co,function(n,t){return n===w?t:n}),Wo=Ht(Eo,Fr),$o=rr(_t),So=rr(vt),Fo=or(Nu),No=or(Tu),To=ir(_t),Lo=ir(vt),zo=wu?function(n){
+var t=null==n?w:n.constructor;return typeof t=="function"&&t.prototype===n||typeof n!="function"&&Er(n)?Lr(n):ge(n)?wu(n):[]}:Lr,Bo=fr(true),Do=fr(),Mo=le(function(n,t){if(null==n)return{};if("function"!=typeof t[0])return t=Gn(pt(t),Ye),Nr(n,ft(Re(n),t));var r=Bt(t[0],t[1],3);return Tr(n,function(n,t,e){return!r(n,t,e)})}),qo=le(function(n,t){return null==n?{}:"function"==typeof t[0]?Tr(n,Bt(t[0],t[1],3)):Nr(n,pt(t))}),Po=Gt(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t);
+}),Ko=Gt(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vo=ar(),Zo=ar(true),Yo=Gt(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Go=Gt(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),Jo=le(function(n,t){try{return n.apply(w,t)}catch(r){return _e(r)?r:new Me(r)}}),Xo=le(function(n,t){return function(r){return Or(r,n,t)}}),Ho=le(function(n,t){return function(r){return Or(n,r,t)}}),Qo=_r("ceil"),ni=_r("floor"),ti=Qt(se,Iu),ri=Qt(Ae,Ru),ei=_r("round");return Nn.prototype=Tn.prototype,
+Ln.prototype=$u(Tn.prototype),Ln.prototype.constructor=Ln,zn.prototype=$u(Tn.prototype),zn.prototype.constructor=zn,Bn.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Bn.prototype.get=function(n){return"__proto__"==n?w:this.__data__[n]},Bn.prototype.has=function(n){return"__proto__"!=n&&nu.call(this.__data__,n)},Bn.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},Dn.prototype.push=function(n){var t=this.data;typeof n=="string"||ge(n)?t.set.add(n):t.hash[n]=true;
+},ce.Cache=Bn,Nn.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var r=n;n=t,t=r}return n=mu(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Nn.ary=function(n,t,r){return r&&Ur(n,t,r)&&(t=w),t=n&&null==t?n.length:bu(+t||0,0),gr(n,E,w,w,w,w,t)},Nn.assign=Co,Nn.at=no,Nn.before=fe,Nn.bind=_o,Nn.bindAll=vo,Nn.bindKey=go,Nn.callback=Se,Nn.chain=Qr,Nn.chunk=function(n,t,r){t=(r?Ur(n,t,r):null==t)?1:bu(yu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=Be(vu(e/t));r<e;)o[++u]=Et(n,r,r+=t);
+return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=to,Nn.create=function(n,t,r){var e=$u(n);return r&&Ur(n,t,r)&&(t=w),t?tt(e,t):e},Nn.curry=yo,Nn.curryRight=mo,Nn.debounce=ae,Nn.defaults=Uo,Nn.defaultsDeep=Wo,Nn.defer=wo,Nn.delay=bo,Nn.difference=Mu,Nn.drop=qr,Nn.dropRight=Pr,Nn.dropRightWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3),true,true):[]},Nn.dropWhile=function(n,t,r){
+return n&&n.length?Nt(n,wr(t,r,3),true):[]},Nn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Ur(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=e===w||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;return n},Nn.filter=re,Nn.flatten=function(n,t,r){var e=n?n.length:0;return r&&Ur(n,t,r)&&(t=false),e?pt(n,t):[]},Nn.flattenDeep=function(n){return n&&n.length?pt(n,true):[]},Nn.flow=xo,Nn.flowRight=Ao,Nn.forEach=uo,Nn.forEachRight=oo,Nn.forIn=Fo,
+Nn.forInRight=No,Nn.forOwn=To,Nn.forOwnRight=Lo,Nn.functions=Ie,Nn.groupBy=io,Nn.indexBy=fo,Nn.initial=function(n){return Pr(n,1)},Nn.intersection=Ku,Nn.invert=function(n,t,r){r&&Ur(n,t,r)&&(t=w),r=-1;for(var e=zo(n),u=e.length,o={};++r<u;){var i=e[r],f=n[i];t?nu.call(o,f)?o[f].push(i):o[f]=[i]:o[f]=i}return o},Nn.invoke=ao,Nn.keys=zo,Nn.keysIn=Re,Nn.map=ue,Nn.mapKeys=Bo,Nn.mapValues=Do,Nn.matches=Ne,Nn.matchesProperty=function(n,t){return xt(n,ot(t,true))},Nn.memoize=ce,Nn.merge=Eo,Nn.method=Xo,Nn.methodOf=Ho,
+Nn.mixin=Te,Nn.modArgs=jo,Nn.negate=function(n){if(typeof n!="function")throw new Ge(L);return function(){return!n.apply(this,arguments)}},Nn.omit=Mo,Nn.once=function(n){return fe(2,n)},Nn.pairs=Oe,Nn.partial=ko,Nn.partialRight=Io,Nn.partition=co,Nn.pick=qo,Nn.pluck=function(n,t){return ue(n,ze(t))},Nn.property=ze,Nn.propertyOf=function(n){return function(t){return yt(n,Dr(t),t+"")}},Nn.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=xr(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)pu.call(t,o,1);
+return t},Nn.pullAt=Vu,Nn.range=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=bu(vu((t-n)/(r||1)),0);for(var u=Be(t);++e<t;)u[e]=n,n+=r;return u},Nn.rearg=Ro,Nn.reject=function(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Nn.remove=function(n,t,r){var e=[];if(!n||!n.length)return e;var u=-1,o=[],i=n.length;for(t=wr(t,r,3);++u<i;)r=n[u],t(r,u,n)&&(e.push(r),o.push(u));return It(n,o),e},Nn.rest=Yr,Nn.restParam=le,
+Nn.set=function(n,t,r){if(null==n)return n;var e=t+"";t=null!=n[e]||Wr(t,n)?[e]:Dr(t);for(var e=-1,u=t.length,o=u-1,i=n;null!=i&&++e<u;){var f=t[e];ge(i)&&(e==o?i[f]=r:null==i[f]&&(i[f]=Cr(t[e+1])?[]:{})),i=i[f]}return n},Nn.shuffle=function(n){return oe(n,Ru)},Nn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Ur(n,t,r)&&(t=0,r=e),Et(n,t,r)):[]},Nn.sortBy=function(n,t,r){if(null==n)return[];r&&Ur(n,t,r)&&(t=w);var e=-1;return t=wr(t,r,3),n=wt(n,function(n,r,u){return{a:t(n,r,u),
+b:++e,c:n}}),Ut(n,f)},Nn.sortByAll=po,Nn.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&Ur(t,r,e)&&(r=w),Oo(t)||(t=null==t?[]:[t]),Oo(r)||(r=null==r?[]:[r]),Wt(n,t,r))},Nn.spread=function(n){if(typeof n!="function")throw new Ge(L);return function(t){return n.apply(this,t)}},Nn.take=function(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0,0>t?0:t)):[]},Nn.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0>t?0:t)):[]},Nn.takeRightWhile=function(n,t,r){
+return n&&n.length?Nt(n,wr(t,r,3),false,true):[]},Nn.takeWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3)):[]},Nn.tap=function(n,t,r){return t.call(r,n),n},Nn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Ge(L);return false===r?e=false:ge(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),ae(n,t,{leading:e,maxWait:+t,trailing:u})},Nn.thru=ne,Nn.times=function(n,t,r){if(n=yu(n),1>n||!mu(n))return[];var e=-1,u=Be(xu(n,4294967295));for(t=Bt(t,r,1);++e<n;)4294967295>e?u[e]=t(e):t(e);
+return u},Nn.toArray=je,Nn.toPlainObject=ke,Nn.transform=function(n,t,r,e){var u=Oo(n)||xe(n);return t=wr(t,e,4),null==r&&(u||ge(n)?(e=n.constructor,r=u?Oo(n)?new e:[]:$u(ve(e)?e.prototype:w)):r={}),(u?Pn:_t)(n,function(n,e,u){return t(r,n,e,u)}),r},Nn.union=Gu,Nn.uniq=Gr,Nn.unzip=Jr,Nn.unzipWith=Xr,Nn.values=Ee,Nn.valuesIn=function(n){return Ft(n,Re(n))},Nn.where=function(n,t){return re(n,bt(t))},Nn.without=Ju,Nn.wrap=function(n,t){return t=null==t?Fe:t,gr(t,R,w,[n],[])},Nn.xor=function(){for(var n=-1,t=arguments.length;++n<t;){
+var r=arguments[n];if(Er(r))var e=e?Jn(ft(e,r),ft(r,e)):r}return e?St(e):[]},Nn.zip=Xu,Nn.zipObject=Hr,Nn.zipWith=Hu,Nn.backflow=Ao,Nn.collect=ue,Nn.compose=Ao,Nn.each=uo,Nn.eachRight=oo,Nn.extend=Co,Nn.iteratee=Se,Nn.methods=Ie,Nn.object=Hr,Nn.select=re,Nn.tail=Yr,Nn.unique=Gr,Te(Nn,Nn),Nn.add=function(n,t){return(+n||0)+(+t||0)},Nn.attempt=Jo,Nn.camelCase=Po,Nn.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)},Nn.ceil=Qo,Nn.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&Ur(n,t,r)?t=false:typeof t=="function"&&(e=r,
+r=t,t=false),typeof r=="function"?ot(n,t,Bt(r,e,3)):ot(n,t)},Nn.cloneDeep=function(n,t,r){return typeof t=="function"?ot(n,true,Bt(t,r,3)):ot(n,true)},Nn.deburr=Ce,Nn.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=r===w?e:xu(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Nn.escape=function(n){return(n=u(n))&&hn.test(n)?n.replace(sn,c):n},Nn.escapeRegExp=function(n){return(n=u(n))&&bn.test(n)?n.replace(wn,l):n||"(?:)"},Nn.every=te,Nn.find=ro,Nn.findIndex=qu,Nn.findKey=$o,Nn.findLast=eo,
+Nn.findLastIndex=Pu,Nn.findLastKey=So,Nn.findWhere=function(n,t){return ro(n,bt(t))},Nn.first=Kr,Nn.floor=ni,Nn.get=function(n,t,r){return n=null==n?w:yt(n,Dr(t),t+""),n===w?r:n},Nn.gt=se,Nn.gte=function(n,t){return n>=t},Nn.has=function(n,t){if(null==n)return false;var r=nu.call(n,t);if(!r&&!Wr(t)){if(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),null==n)return false;t=Zr(t),r=nu.call(n,t)}return r||Sr(n.length)&&Cr(t,n.length)&&(Oo(n)||pe(n))},Nn.identity=Fe,Nn.includes=ee,Nn.indexOf=Vr,Nn.inRange=function(n,t,r){
+return t=+t||0,r===w?(r=t,t=0):r=+r||0,n>=xu(t,r)&&n<bu(t,r)},Nn.isArguments=pe,Nn.isArray=Oo,Nn.isBoolean=function(n){return true===n||false===n||h(n)&&ru.call(n)==M},Nn.isDate=function(n){return h(n)&&ru.call(n)==q},Nn.isElement=function(n){return!!n&&1===n.nodeType&&h(n)&&!me(n)},Nn.isEmpty=function(n){return null==n?true:Er(n)&&(Oo(n)||be(n)||pe(n)||h(n)&&ve(n.splice))?!n.length:!zo(n).length},Nn.isEqual=he,Nn.isError=_e,Nn.isFinite=function(n){return typeof n=="number"&&mu(n)},Nn.isFunction=ve,Nn.isMatch=function(n,t,r,e){
+return r=typeof r=="function"?Bt(r,e,3):w,mt(n,Ar(t),r)},Nn.isNaN=function(n){return de(n)&&n!=+n},Nn.isNative=ye,Nn.isNull=function(n){return null===n},Nn.isNumber=de,Nn.isObject=ge,Nn.isPlainObject=me,Nn.isRegExp=we,Nn.isString=be,Nn.isTypedArray=xe,Nn.isUndefined=function(n){return n===w},Nn.kebabCase=Ko,Nn.last=Zr,Nn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?bu(e+r,0):xu(r||0,e-1))+1;else if(r)return u=Lt(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;
+if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Nn.lt=Ae,Nn.lte=function(n,t){return n<=t},Nn.max=ti,Nn.min=ri,Nn.noConflict=function(){return Zn._=eu,this},Nn.noop=Le,Nn.now=ho,Nn.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&mu(t)?(e=(t-e)/2,t=yu(e),e=vu(e),r=pr("",e,r),r.slice(0,t)+n+r):n},Nn.padLeft=Vo,Nn.padRight=Zo,Nn.parseInt=function(n,t,r){return(r?Ur(n,t,r):null==t)?t=0:t&&(t=+t),n=We(n),ju(n,t||(In.test(n)?16:10))},Nn.random=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w);
+var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=ku(),xu(n+r*(t-n+fu("1e-"+((r+"").length-1))),t)):Rt(n,t)},Nn.reduce=lo,Nn.reduceRight=so,Nn.repeat=Ue,Nn.result=function(n,t,r){var e=null==n?w:n[t];return e===w&&(null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),e=null==n?w:n[Zr(t)]),e=e===w?r:e),ve(e)?e.call(n):e},Nn.round=ei,Nn.runInContext=m,Nn.size=function(n){var t=n?Bu(n):0;
+return Sr(t)?t:zo(n).length},Nn.snakeCase=Yo,Nn.some=ie,Nn.sortedIndex=Zu,Nn.sortedLastIndex=Yu,Nn.startCase=Go,Nn.startsWith=function(n,t,r){return n=u(n),r=null==r?0:xu(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Nn.sum=function(n,t,r){if(r&&Ur(n,t,r)&&(t=w),t=wr(t,r,3),1==t.length){n=Oo(n)?n:zr(n),r=n.length;for(var e=0;r--;)e+=+t(n[r])||0;n=e}else n=$t(n,t);return n},Nn.template=function(n,t,r){var e=Nn.templateSettings;r&&Ur(n,t,r)&&(t=r=w),n=u(n),t=nt(tt({},r||t),e,Qn),r=nt(tt({},t.imports),e.imports,Qn);
+var o,i,f=zo(r),a=Ft(r,f),c=0;r=t.interpolate||Cn;var l="__p+='";r=Ze((t.escape||Cn).source+"|"+r.source+"|"+(r===gn?jn:Cn).source+"|"+(t.evaluate||Cn).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,a){return e||(e=u),l+=n.slice(c,a).replace(Un,s),r&&(o=true,l+="'+__e("+r+")+'"),f&&(i=true,l+="';"+f+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=a+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(fn,""):l).replace(an,"$1").replace(cn,"$1;"),
+l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=Jo(function(){return qe(f,p+"return "+l).apply(w,a)}),t.source=l,_e(t))throw t;return t},Nn.trim=We,Nn.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?Ur(e,t,r):null==t)?g(n):o(n,t+"")):n},Nn.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,i(n,t+"")+1):n;
+},Nn.trunc=function(n,t,r){r&&Ur(n,t,r)&&(t=w);var e=U;if(r=W,null!=t)if(ge(t)){var o="separator"in t?t.separator:o,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,1>e)return r;if(t=n.slice(0,e),null==o)return t+r;if(we(o)){if(n.slice(e).search(o)){var i,f=n.slice(0,e);for(o.global||(o=Ze(o.source,(kn.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(f);)i=n.index;t=t.slice(0,null==i?e:i)}}else n.indexOf(o,e)!=e&&(o=t.lastIndexOf(o),
+-1<o&&(t=t.slice(0,o)));return t+r},Nn.unescape=function(n){return(n=u(n))&&pn.test(n)?n.replace(ln,d):n},Nn.uniqueId=function(n){var t=++tu;return u(n)+t},Nn.words=$e,Nn.all=te,Nn.any=ie,Nn.contains=ee,Nn.eq=he,Nn.detect=ro,Nn.foldl=lo,Nn.foldr=so,Nn.head=Kr,Nn.include=ee,Nn.inject=lo,Te(Nn,function(){var n={};return _t(Nn,function(t,r){Nn.prototype[r]||(n[r]=t)}),n}(),false),Nn.sample=oe,Nn.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return oe(t,n)}):oe(this.value());
+},Nn.VERSION=b,Pn("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Nn[n].placeholder=Nn}),Pn(["drop","take"],function(n,t){zn.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new zn(this);r=null==r?1:bu(yu(r)||0,0);var u=this.clone();return e?u.__takeCount__=xu(u.__takeCount__,r):u.__views__.push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},zn.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),Pn(["filter","map","takeWhile"],function(n,t){
+var r=t+1,e=r!=T;zn.prototype[n]=function(n,t){var u=this.clone();return u.__iteratees__.push({iteratee:wr(n,t,1),type:r}),u.__filtered__=u.__filtered__||e,u}}),Pn(["first","last"],function(n,t){var r="take"+(t?"Right":"");zn.prototype[n]=function(){return this[r](1).value()[0]}}),Pn(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");zn.prototype[n]=function(){return this.__filtered__?new zn(this):this[r](1)}}),Pn(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?bt:ze;zn.prototype[n]=function(n){
+return this[r](e(n))}}),zn.prototype.compact=function(){return this.filter(Fe)},zn.prototype.reject=function(n,t){return n=wr(n,t,1),this.filter(function(t){return!n(t)})},zn.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=this;return r.__filtered__&&(0<n||0>t)?new zn(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==w&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r)},zn.prototype.takeRightWhile=function(n,t){return this.reverse().takeWhile(n,t).reverse()},zn.prototype.toArray=function(){return this.take(Ru);
+},_t(zn.prototype,function(n,t){var r=/^(?:filter|map|reject)|While$/.test(t),e=/^(?:first|last)$/.test(t),u=Nn[e?"take"+("last"==t?"Right":""):t];u&&(Nn.prototype[t]=function(){function t(n){return e&&i?u(n,1)[0]:u.apply(w,Jn([n],o))}var o=e?[1]:arguments,i=this.__chain__,f=this.__wrapped__,a=!!this.__actions__.length,c=f instanceof zn,l=o[0],s=c||Oo(f);return s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false),l={func:ne,args:[t],thisArg:w},a=c&&!a,e&&!i?a?(f=f.clone(),f.__actions__.push(l),n.call(f)):u.call(w,this.value())[0]:!e&&s?(f=a?f:new zn(this),
+f=n.apply(f,o),f.__actions__.push(l),new Ln(f,i)):this.thru(t)})}),Pn("join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?He:Je)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n);Nn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),_t(zn.prototype,function(n,t){var r=Nn[t];if(r){var e=r.name+"";(Wu[e]||(Wu[e]=[])).push({
+name:t,func:r})}}),Wu[sr(w,A).name]=[{name:"wrapper",func:w}],zn.prototype.clone=function(){var n=new zn(this.__wrapped__);return n.__actions__=qn(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=qn(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=qn(this.__views__),n},zn.prototype.reverse=function(){if(this.__filtered__){var n=new zn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},zn.prototype.value=function(){
+var n,t=this.__wrapped__.value(),r=this.__dir__,e=Oo(t),u=0>r,o=e?t.length:0;n=o;for(var i=this.__views__,f=0,a=-1,c=i.length;++a<c;){var l=i[a],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=xu(n,f+s);break;case"takeRight":f=bu(f,n-s)}}if(n={start:f,end:n},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,a=0,c=xu(n,this.__takeCount__),!e||o<F||o==n&&c==n)return Tt(t,this.__actions__);e=[];n:for(;n--&&a<c;){for(u+=r,o=-1,l=t[u];++o<f;){var p=i[o],s=p.type,p=p.iteratee(l);
+if(s==T)l=p;else if(!p){if(s==N)continue n;break n}}e[a++]=l}return e},Nn.prototype.chain=function(){return Qr(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.concat=Qu,Nn.prototype.plant=function(n){for(var t,r=this;r instanceof Tn;){var e=Mr(r);t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Nn.prototype.reverse=function(){function n(n){return n.reverse()}var t=this.__wrapped__;return t instanceof zn?(this.__actions__.length&&(t=new zn(this)),
+t=t.reverse(),t.__actions__.push({func:ne,args:[n],thisArg:w}),new Ln(t,this.__chain__)):this.thru(n)},Nn.prototype.toString=function(){return this.value()+""},Nn.prototype.run=Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return Tt(this.__wrapped__,this.__actions__)},Nn.prototype.collect=Nn.prototype.map,Nn.prototype.head=Nn.prototype.first,Nn.prototype.select=Nn.prototype.filter,Nn.prototype.tail=Nn.prototype.rest,Nn}var w,b="3.10.1",x=1,A=2,j=4,k=8,I=16,R=32,O=64,E=128,C=256,U=30,W="...",$=150,S=16,F=200,N=1,T=2,L="Expected a function",z="__lodash_placeholder__",B="[object Arguments]",D="[object Array]",M="[object Boolean]",q="[object Date]",P="[object Error]",K="[object Function]",V="[object Number]",Z="[object Object]",Y="[object RegExp]",G="[object String]",J="[object ArrayBuffer]",X="[object Float32Array]",H="[object Float64Array]",Q="[object Int8Array]",nn="[object Int16Array]",tn="[object Int32Array]",rn="[object Uint8Array]",en="[object Uint8ClampedArray]",un="[object Uint16Array]",on="[object Uint32Array]",fn=/\b__p\+='';/g,an=/\b(__p\+=)''\+/g,cn=/(__e\(.*?\)|\b__t\))\+'';/g,ln=/&(?:amp|lt|gt|quot|#39|#96);/g,sn=/[&<>"'`]/g,pn=RegExp(ln.source),hn=RegExp(sn.source),_n=/<%-([\s\S]+?)%>/g,vn=/<%([\s\S]+?)%>/g,gn=/<%=([\s\S]+?)%>/g,yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,dn=/^\w*$/,mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wn=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,bn=RegExp(wn.source),xn=/[\u0300-\u036f\ufe20-\ufe23]/g,An=/\\(\\)?/g,jn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,kn=/\w*$/,In=/^0[xX]/,Rn=/^\[object .+?Constructor\]$/,On=/^\d+$/,En=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Cn=/($^)/,Un=/['\n\r\u2028\u2029\\]/g,Wn=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),$n="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Sn={};
+Sn[X]=Sn[H]=Sn[Q]=Sn[nn]=Sn[tn]=Sn[rn]=Sn[en]=Sn[un]=Sn[on]=true,Sn[B]=Sn[D]=Sn[J]=Sn[M]=Sn[q]=Sn[P]=Sn[K]=Sn["[object Map]"]=Sn[V]=Sn[Z]=Sn[Y]=Sn["[object Set]"]=Sn[G]=Sn["[object WeakMap]"]=false;var Fn={};Fn[B]=Fn[D]=Fn[J]=Fn[M]=Fn[q]=Fn[X]=Fn[H]=Fn[Q]=Fn[nn]=Fn[tn]=Fn[V]=Fn[Z]=Fn[Y]=Fn[G]=Fn[rn]=Fn[en]=Fn[un]=Fn[on]=true,Fn[P]=Fn[K]=Fn["[object Map]"]=Fn["[object Set]"]=Fn["[object WeakMap]"]=false;var Nn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a",
+"\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y",
+"\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Tn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},Ln={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},zn={"function":true,object:true},Bn={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Dn={"\\":"\\",
+"'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Mn=zn[typeof exports]&&exports&&!exports.nodeType&&exports,qn=zn[typeof module]&&module&&!module.nodeType&&module,Pn=zn[typeof self]&&self&&self.Object&&self,Kn=zn[typeof window]&&window&&window.Object&&window,Vn=qn&&qn.exports===Mn&&Mn,Zn=Mn&&qn&&typeof global=="object"&&global&&global.Object&&global||Kn!==(this&&this.window)&&Kn||Pn||this,Yn=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Zn._=Yn, define(function(){
+return Yn})):Mn&&qn?Vn?(qn.exports=Yn)._=Yn:Mn._=Yn:Zn._=Yn}).call(this); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/.bower.json
new file mode 100644
index 00000000000..6831d956474
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/.bower.json
@@ -0,0 +1,33 @@
+{
+ "name": "marked",
+ "homepage": "https://github.com/markedjs/marked",
+ "authors": [
+ "Christopher Jeffrey <chjjeffrey@gmail.com>"
+ ],
+ "description": "A markdown parser built for speed",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "main": "lib/marked.js",
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "app/bower_components",
+ "test",
+ "tests"
+ ],
+ "version": "0.4.0",
+ "_release": "0.4.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.4.0",
+ "commit": "78db8fb774afa651c87fdb09af2a0160e4f4619f"
+ },
+ "_source": "https://github.com/chjj/marked.git",
+ "_target": "^0.4.0",
+ "_originalSource": "marked"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/LICENSE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/LICENSE.md
new file mode 100644
index 00000000000..64b41a0e463
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/LICENSE.md
@@ -0,0 +1,43 @@
+# License information
+
+## Contribution License Agreement
+
+If you contribute code to this project, you are implicitly allowing your code
+to be distributed under the MIT license. You are also implicitly verifying that
+all code is your original work. `</legalese>`
+
+## Marked
+
+Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## Markdown
+
+Copyright © 2004, John Gruber
+http://daringfireball.net/
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/Makefile b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/Makefile
new file mode 100644
index 00000000000..7deead54c14
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/Makefile
@@ -0,0 +1,15 @@
+all:
+ @cp lib/marked.js marked.js
+ @uglifyjs --comments '/\*[^\0]+?Copyright[^\0]+?\*/' -o marked.min.js lib/marked.js
+
+clean:
+ @rm marked.js
+ @rm marked.min.js
+
+bench:
+ @node test --bench
+
+man/marked.1.txt:
+ groff -man -Tascii man/marked.1 | col -b > man/marked.1.txt
+
+.PHONY: clean all
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/README.md
new file mode 100644
index 00000000000..7d3af293786
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/README.md
@@ -0,0 +1,67 @@
+<a href="https://marked.js.org">
+ <img width="60px" height="60px" src="https://marked.js.org/img/logo-black.svg" align="right" />
+</a>
+
+# Marked
+
+[![npm](https://img.shields.io/npm/v/marked.svg)](https://www.npmjs.com/package/marked)
+[![gzip size](http://img.badgesize.io/https://cdn.jsdelivr.net/npm/marked@0.3.19/marked.min.js?compression=gzip)](https://cdn.jsdelivr.net/npm/marked@0.3.19/marked.min.js)
+[![install size](https://packagephobia.now.sh/badge?p=marked@0.3.19)](https://packagephobia.now.sh/result?p=marked@0.3.19)
+[![downloads](https://img.shields.io/npm/dt/marked.svg)](https://www.npmjs.com/package/marked)
+[![travis](https://travis-ci.org/markedjs/marked.svg?branch=master)](https://travis-ci.org/markedjs/marked)
+
+- ⚡ built for speed
+- ⬇️ low-level compiler for parsing markdown without caching or blocking for long periods of time
+- ⚖️ light-weight while implementing all markdown features from the supported flavors & specifications
+- 🌐 works in a browser, on a server, or from a command line interface (CLI)
+
+## Demo
+
+Checkout the [demo page](https://marked.js.org/demo/) to see marked in action ⛹️
+
+## Docs
+
+Our [documentation pages](https://marked.js.org) are also rendered using marked 💯
+
+## Installation
+
+**CLI:** `npm install -g marked`
+
+**In-browser:** `npm install marked --save`
+
+## Usage
+
+**CLI**
+
+``` bash
+$ marked -o hello.html
+hello world
+^D
+$ cat hello.html
+<p>hello world</p>
+```
+
+**Browser**
+
+```html
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title>Marked in the browser</title>
+</head>
+<body>
+ <div id="content"></div>
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
+ <script>
+ document.getElementById('content').innerHTML =
+ marked('# Marked in the browser\n\nRendered by **marked**.');
+ </script>
+</body>
+</html>
+```
+
+## License
+
+Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bin/marked b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bin/marked
new file mode 100755
index 00000000000..09e55943331
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bin/marked
@@ -0,0 +1,199 @@
+#!/usr/bin/env node
+
+/**
+ * Marked CLI
+ * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License)
+ */
+
+var fs = require('fs'),
+ path = require('path'),
+ marked = require('../');
+
+/**
+ * Man Page
+ */
+
+function help() {
+ var spawn = require('child_process').spawn;
+
+ var options = {
+ cwd: process.cwd(),
+ env: process.env,
+ setsid: false,
+ stdio: 'inherit'
+ };
+
+ spawn('man', [path.resolve(__dirname, '/../man/marked.1')], options)
+ .on('error', function() {
+ fs.readFile(path.resolve(__dirname, '/../man/marked.1.txt'), 'utf8', function(err, data) {
+ if (err) throw err;
+ console.log(data);
+ });
+ });
+}
+
+/**
+ * Main
+ */
+
+function main(argv, callback) {
+ var files = [],
+ options = {},
+ input,
+ output,
+ string,
+ arg,
+ tokens,
+ opt;
+
+ function getarg() {
+ var arg = argv.shift();
+
+ if (arg.indexOf('--') === 0) {
+ // e.g. --opt
+ arg = arg.split('=');
+ if (arg.length > 1) {
+ // e.g. --opt=val
+ argv.unshift(arg.slice(1).join('='));
+ }
+ arg = arg[0];
+ } else if (arg[0] === '-') {
+ if (arg.length > 2) {
+ // e.g. -abc
+ argv = arg.substring(1).split('').map(function(ch) {
+ return '-' + ch;
+ }).concat(argv);
+ arg = argv.shift();
+ } else {
+ // e.g. -a
+ }
+ } else {
+ // e.g. foo
+ }
+
+ return arg;
+ }
+
+ while (argv.length) {
+ arg = getarg();
+ switch (arg) {
+ case '--test':
+ return require('../test').main(process.argv.slice());
+ case '-o':
+ case '--output':
+ output = argv.shift();
+ break;
+ case '-i':
+ case '--input':
+ input = argv.shift();
+ break;
+ case '-s':
+ case '--string':
+ string = argv.shift();
+ break;
+ case '-t':
+ case '--tokens':
+ tokens = true;
+ break;
+ case '-h':
+ case '--help':
+ return help();
+ default:
+ if (arg.indexOf('--') === 0) {
+ opt = camelize(arg.replace(/^--(no-)?/, ''));
+ if (!marked.defaults.hasOwnProperty(opt)) {
+ continue;
+ }
+ if (arg.indexOf('--no-') === 0) {
+ options[opt] = typeof marked.defaults[opt] !== 'boolean'
+ ? null
+ : false;
+ } else {
+ options[opt] = typeof marked.defaults[opt] !== 'boolean'
+ ? argv.shift()
+ : true;
+ }
+ } else {
+ files.push(arg);
+ }
+ break;
+ }
+ }
+
+ function getData(callback) {
+ if (!input) {
+ if (files.length <= 2) {
+ if (string) {
+ return callback(null, string);
+ }
+ return getStdin(callback);
+ }
+ input = files.pop();
+ }
+ return fs.readFile(input, 'utf8', callback);
+ }
+
+ return getData(function(err, data) {
+ if (err) return callback(err);
+
+ data = tokens
+ ? JSON.stringify(marked.lexer(data, options), null, 2)
+ : marked(data, options);
+
+ if (!output) {
+ process.stdout.write(data + '\n');
+ return callback();
+ }
+
+ return fs.writeFile(output, data, callback);
+ });
+}
+
+/**
+ * Helpers
+ */
+
+function getStdin(callback) {
+ var stdin = process.stdin,
+ buff = '';
+
+ stdin.setEncoding('utf8');
+
+ stdin.on('data', function(data) {
+ buff += data;
+ });
+
+ stdin.on('error', function(err) {
+ return callback(err);
+ });
+
+ stdin.on('end', function() {
+ return callback(null, buff);
+ });
+
+ try {
+ stdin.resume();
+ } catch (e) {
+ callback(e);
+ }
+}
+
+function camelize(text) {
+ return text.replace(/(\w)-(\w)/g, function(_, a, b) {
+ return a + b.toUpperCase();
+ });
+}
+
+/**
+ * Expose / Entry Point
+ */
+
+if (!module.parent) {
+ process.title = 'marked';
+ main(process.argv.slice(), function(err, code) {
+ if (err) throw err;
+ return process.exit(code || 0);
+ });
+} else {
+ module.exports = main;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bower.json
new file mode 100644
index 00000000000..57c91f030fc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/bower.json
@@ -0,0 +1,23 @@
+{
+ "name": "marked",
+ "homepage": "https://github.com/markedjs/marked",
+ "authors": [
+ "Christopher Jeffrey <chjjeffrey@gmail.com>"
+ ],
+ "description": "A markdown parser built for speed",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "main": "lib/marked.js",
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "app/bower_components",
+ "test",
+ "tests"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/component.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/component.json
new file mode 100644
index 00000000000..7ebd0356cc1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/component.json
@@ -0,0 +1,10 @@
+{
+ "name": "marked",
+ "version": "0.3.4",
+ "repo": "markedjs/marked",
+ "description": "A markdown parser built for speed",
+ "keywords": ["markdown", "markup", "html"],
+ "scripts": ["lib/marked.js"],
+ "main": "lib/marked.js",
+ "license": "MIT"
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/AUTHORS.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/AUTHORS.md
new file mode 100644
index 00000000000..d44bf5f0ebd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/AUTHORS.md
@@ -0,0 +1,164 @@
+# Authors
+
+Marked takes an encompassing approach to its community. As such, you can think of these as [concentric circles](https://medium.com/the-node-js-collection/healthy-open-source-967fa8be7951), where each subsequent group is enveloped by the previous one.
+
+## Users
+
+Users are anyone using Marked in some fashion, without them, there's no reason for us to exist.
+
+|Individual or Organization |Website |Project |Submitted by |
+|:--------------------------|:-----------------------|:------------------------------------|:---------------------------------------------------|
+|MarkedJS |https://marked.js.org |https://github.com/markedjs/marked |The marked committers |
+
+To be listed: All fields are optional. Contact any of the committers or, more timely, submit a pull request with the following (using the first row as an example):
+
+- **Individual or Organization:** The name you would like associated with the record.
+- **Website:** A URL to a standalone website for the project.
+- **Project:** A URL for the repository of the project using marked.
+- **Submitted by:** The name and optional honorifics for the person adding the listing.
+
+To be removed: Same as above. Only instead of requesting addition request deletion or delete the row yourself.
+
+## Contributors
+
+Contributors are users who submit a [PR](https://github.com/markedjs/marked/pulls), [Issue](https://github.com/markedjs/marked/issues), or collaborate in making Marked a better product and experience for all the users.
+
+|Name |GitHub handle |Badge of honor |
+|:-------------------|:----------------|:---------------------------------------------|
+|Brandon der Blätter |@intcreator |Curious Contributor |
+|Carlos Valle |@carlosvalle |Maker of the Marked mark from 2018 to present |
+|Federico Soave |@Feder1co5oave |Regent of the Regex, Master of Marked |
+|Karen Yavine |@karenyavine |Snyk's Security Saint |
+|Костя Третяк |@KostyaTretyak |-- |
+|Tom Theisen |@tomtheisen |Defibrillator |
+
+To be listed: make a contribution and, if it has significant impact, the committers may be able to add you here.
+
+To be removed: please let us know or submit a PR.
+
+[Details on badges](#badges)
+
+## Committers
+
+Committers are contributors who also have the responsibility, privilege, some might even say burden of being able to review and merge contributions (just usually not their own).
+
+A note on "decision making authority". This is related to submitting PRs and the [advice process](http://www.reinventingorganizationswiki.com/Decision_Making). The person marked as having decision making authority over a certain area should be sought for advice in that area before committing to a course of action.
+
+|Name |GitHub handle |Decision making |Badges of honor (tag for questions) |
+|:--------------|:---------------|:----------------------------------------|:------------------------------------|
+|Jamie Davis |@davisjam |Seeker of Security | |
+|Tony Brix |@UziTech |Titan of the test harness and Dr. DevOps | |
+
+**Should not exceed 5:** For larger PRs affecting more of the codebase and, most likely, review by more people, we try to keep this pool small and responsive and let those with decision making authority have final say without negative repercussions from the other committers.
+
+To be listed: Committers are usually selected (or they volunteer, using the same process) from contributors who enter the discussions regarding the future direction of Marked (maybe even doing informal reviews of contributions despite not being able to merge them yourself).
+
+To be removed: You can remove yourself through the [GitHub UI](https://help.github.com/articles/removing-yourself-from-a-collaborator-s-repository/).
+
+A note on volunteering:
+
+1. Please do not volunteer unless you believe you can demonstrate to your peers you can do the work required.
+2. Please do not overcommit yourself; we count on those committed to the project to be responsive. Really consider, with all you have going on, wehther you able to really commit to it.
+3. Don't let the previous frighten you away, it can always be changed later by you or your peers.
+
+[Details on badges](#badges)
+
+## Admins
+
+Admins are committers who also have the responsibility, privilege, and burden of selecting committers and making sure the project itself runs smoothly, which includes community maintenance, governance, dispute resolution, and so on. (Letting the contributors easily enter into, and work within, the project to begin contributing, with as little friction as possible.)
+
+|Name |GitHub handle |Decision making |Badges of honor (tag for questions) |
+|:--------------|:---------------|:----------------------------------------|:------------------------------------|
+|Steven |@styfle |Open source, of course and GitHub Guru |Humaning Helper |
+
+**Should not exceed 3:** When there are too many people with the ability to reolves disputes, the dispute itself can quickly turn into a dispute amongst the admins themselves; therefore, we want this group to be small enough to commit to action and large enough to not put too much burden on one person. (Should ensure faster resolution and responsiveness.)
+
+To be listed: Admins are usually selected from the pool of committers (or they volunteer, using the same process) who demonstrate good understanding of the marked culture, operations, and do their best to help new contributors get up to speed on how to contribute effectively to the project.
+
+To be removed: You can remove yourself through the [GitHub UI](https://help.github.com/articles/removing-yourself-from-a-collaborator-s-repository/).
+
+[Details on badges](#badges)
+
+## Publishers
+
+Publishers are admins who also have the responsibility, privilege, and burden of publishing the new releases to NPM and performing outreach and external stakeholder communications. Further, when things go pear-shaped, they're the ones taking most of the heat. Finally, when things go well, they're the primary ones praising the contributors who made it possible.
+
+(In other words, while Admins are focused primarily on the internal workings of the project, Publishers are focused on internal *and* external concerns.)
+
+|Name |GitHub handle |Decision making |Badges of honor (tag for questions) |
+|:----------|:--------------|:------------------------|:-------------------------------------|
+|Josh Bruce |@joshbruce |Release Wrangler |Humaning Helper, Heckler of Hypertext |
+
+**Should not exceed 2:** Having more people with the authority to publish a release can quickly turn into a consensus seeking nightmare (design by committee). Having only one is preferred (Directly Responsible Individual); however, given the nature of the project and its history, having an immediate fallback, and a potential deep fallback (Original author) is probably a good idea.
+
+[Details on badges](#badges)
+
+## Original author
+
+The original author is the publisher who started it all.
+
+Christopher Jeffrey @chjj
+
+<h2 id="badges">Badges</h2>
+
+Badges? You don't *need* no stinkin' badges.
+
+Movie references aside. (It was either that or, "Let's play a game", but that would have been creepy&hellip;that's why it will most likely come later.)
+
+Badges? If you *want* 'em, we got 'em, and here's how you get 'em (and&hellip;dramatic pause&hellip;why not two dramatic pauses for emphasis?&hellip; how they can be taken away).
+
+- [ ] Add the appropriate badge to the desired contributor in the desired column of this page, even if they're not listed here yet.
+- [ ] Submit a PR (we're big on PRs around here, if you haven't noticed, help us help you).
+- [ ] Follow the instructions for submitting a badge PR. (There are more details to find within. Come on. Everybody likes surprises, right? No? Actually, we just try to put documentation where it belongs, closer to the code and part of the sequence of events.)
+
+### Badges at play:
+
+<dl>
+ <dt>Curious Contributor</dt>
+ <dd>A contributor with less than one year on this page who is actively engaged in submitting PRs, Issues, making recommendations, sharing thoughts&hellip;without being too annoying about it (let's be clear, submitting 100 Issues recommending the Marked Committers send everyone candy is trying for the badge, not honestly earning it).</dd>
+ <dt>Dr. DevOps</dt>
+ <dd>
+ <p>Someone who understands and contributes to improving the developer experience and flow of Marked into the world.</p>
+ <blockquote>
+ "The main characteristic of the DevOps movement is to strongly advocate automation and monitoring at all steps of software construction, from integration, testing, releasing to deployment and infrastructure management. DevOps aims at shorter development cycles, increased deployment frequency, more dependable releases, in close alignment with business objectives." ~ <a href="https://www.wikipedia.org/wiki/DevOps">Wikipedia</a>
+ </blockquote>
+ </dd>
+ <dt>Eye for the CLI</dt>
+ <dd>At this point? Pretty much anyone who can update that `man` file to the current Marked version without regression in the CLI tool itself.</dd>
+ <dt>GitHub Guru</dt>
+ <dd>Someone who always seems to be able to tell you easier ways to do things with GitHub.</dd>
+ <dt>Humaning Helper</dt>
+ <dd>Someone who goes out of their way to help contributors feel welcomed and valued. Further, someone who takes the extra steps(s) necessary to help new contributors get up to speed. Finally, they maintain composure even in times of disagreement and dispute resolution.</dd>
+ <dt>Heckler of Hypertext</dt>
+ <dd>Someone who demonstrates an esoteric level of knowledge when it comes to HTML. In other words, someone who says things like, "Did you know most Markdown flavors don't have a way to render a description list (`dl`)? All the more reason Markdown `!==` HTML."</dd>
+ <dt>Markdown Maestro</dt>
+ <dd>You know that person who knows about way too many different flavors of Markdown? The one who maybe seems a little too obsessed with the possibilities of Markdown beyond HTML? Come on. You know who they are. Or, at least you could, if you give them this badge.</dd>
+ <dt>Master of Marked</dt>
+ <dd>Someone who demonstrates they know the ins and outs of the codebase for Marked.</dd>
+ <dt>Open source, of course</dt>
+ <dd>Someone who advocates for and has a proven understanding of how to operate within open source communities.</dd>
+ <dt>Regent of the Regex</dt>
+ <dd><p>Can you demonstrate you understand the following without Google and Stackoverflow?</p>
+ <p><code>/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/</code></p>
+ <p>Because this author can't yet. That's who gets these.</p>
+ </dd>
+ <dt>Seeker of Security</dt>
+ <dd>Someone who has demonstrated a high degree of expertise or authority when it comes to software security.</dd>
+ <dt>Titan of the Test Harness</dt>
+ <dd>Someone who demonstrates high-levels of understanding regarding Marked's test harness.</dd>
+ <dt>Totally Tron</dt>
+ <dd>Someone who demonstrates they are willing and able to "fight for the users", both developers dependent on marked to do their jobs as well as end-users interacting with the output (particularly in the realm of those with the disabilities).</dd>
+</dl>
+
+### Special badges that come with the job:
+
+<dl>
+ <dt>Defibrillator</dt>
+ <dd>A contributor who stepped up to help bring Marked back to life by contriuting solutions to help Marked pass when compared against the CommonMark and GitHub Flavored Markdown specifications.</dd>
+ <dt>Maker of the Marked mark</dt>
+ <dd>This badge is given to the person or oganization credited with creating the logo (or logotype) used in Marked communications for a given period of time. **Maker of the Marked mark from 2017 to present**, for example.</dd>
+ <dt>Release Wrangler</dt>
+ <dd>This is a badge given to all Publishers.</dd>
+ <dt>Snyk's Security Saint</dt>
+ <dd>This is a badge given to whomever primarily reaches out from Snyk to let us know about security issues.</dd>
+</dl>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CNAME b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CNAME
new file mode 100644
index 00000000000..c92fdfcbd4a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CNAME
@@ -0,0 +1 @@
+marked.js.org
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CODE_OF_CONDUCT.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000000..5335399ba99
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CODE_OF_CONDUCT.md
@@ -0,0 +1,74 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+nationality, personal appearance, race, religion, or sexual identity and
+orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to block temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team by submitting a PR with changes to the [AUTHORS](#/AUTHORS.md) page (or emailing josh@8fold.com). All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version [1.4][version].
+
+[homepage]: https://www.contributor-covenant.org/
+[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CONTRIBUTING.md
new file mode 100644
index 00000000000..ce5f0c387e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/CONTRIBUTING.md
@@ -0,0 +1,95 @@
+# Contributing to Marked
+
+- [ ] Fork `markedjs/marked`.
+- [ ] Clone the library locally using GitHub Desktop or the command line.
+- [ ] Make sure you are on the `master` branch.
+- [ ] Be sure to run `npm install` or `npm update`.
+- [ ] Create a branch.
+- [ ] Make as small a change as possible.
+- [ ] Run `npm test`, fix any broken things (for linting, you can run `npm run lint` to have the linter fix them for you).
+- [ ] Submit a PR.
+
+## Design principles
+
+Marked tends to favor following the SOLID set of software design and development principles; mainly the [single responsibility](https://en.wikipedia.org/wiki/Single_responsibility_principle) and [open/closed principles](https://en.wikipedia.org/wiki/Open/closed_principle):
+
+- **Single responsibility:** Marked, and the components of Marked, have the single responsibility of converting Markdown strings into HTML.
+- **Open/closed:** Marked favors giving developers the means to easily extend the library and its components over changing Marked's behavior through configuration options.
+
+## Priorities
+
+We think we have our priorities sorted to build quality in.
+
+The following table lists the ticket type labels we use when there is work to be done on the code either through an Issue or a PR; in priority order.
+
+|Ticket type label |Description |
+|:----------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|L0 - security |A security vulnerability within the Marked library is discovered. |
+|L1 - broken |Valid usage results in incorrect output compared to [supported specifications](#/README.md#specifications) OR causes marked to crash AND there is no known workaround for the issue. |
+|L2 - annoying |Similar to L1 - broken only there is a known workaround avaialable for the issue. |
+|RR - refactor and re-engineer |Results in an improvement to developers using Marked (improved readability) or end-users (faster performance) or both. |
+|NFS - new feature (spec related) |A capability Marked does not currently provide but is in one of the [supported specifications](#/README.md#specifications) |
+|NFU - new feature (user requested) |A capability Marked does not currently provide but has been requested by users of Marked. |
+
+## Test early, often, and everything
+
+We try to write test cases to validate output (writing tests based on the [supported specifications](#/README.md#specifications)) and minimize regression (writing tests for issues fixed). Therefore, if you would like to contribute, some things you should know regarding the test harness.
+
+|Location |Description |
+|:-------------|:---------------------------------------------------|
+|/test/browser |For testing Marked in a client-side implementation. |
+|/test/new |Tests not related to the original `markdown.pl`. |
+|/test/original|Tests validating against the original `markdown.pl`.|
+
+If your test uses features or options, assuming `gfm` is set to `false`, for example, you can add [front-matter](https://www.npmjs.com/package/front-matter) to the top of
+your `.md` file
+
+``` yml
+---
+gfm: false
+---
+```
+
+## Submitting PRs and Issues
+
+Marked provides templates for submitting both pull requests and issues. When you begin creating a new PR or issue, you will see instructions on using the template.
+
+The PR templates include checklists for both the submitter and the reviewer, which, in most cases, will not be the same person.
+
+## Scripts
+
+When it comes to NPM commands, we try to use the native scripts provided by the NPM framework.
+
+To run the tests:
+
+``` bash
+npm test
+```
+
+To test whether you are using the standard syntax rules for the project:
+
+```bash
+npm run test:lint
+```
+
+To see time comparisons between Marked and other popular Markdown libraries:
+
+```bash
+npm run bench
+```
+
+To check for (and fix) standardized syntax (lint):
+
+```bash
+npm run lint
+```
+
+To build your own minified version of Marked:
+
+```bash
+npm run build
+```
+
+## Publishing
+
+Creating GitHub releases and publishing to NPM is limited to conributors and owners. If you would like more information, please see our [publishing documentation](#/PUBLISHING.md).
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/PUBLISHING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/PUBLISHING.md
new file mode 100644
index 00000000000..27937c2f2f2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/PUBLISHING.md
@@ -0,0 +1,24 @@
+# Releasing Marked
+
+- [ ] See [contributing](#/CONTRIBUTING.md)
+- [ ] Create release branch from `master` (`release-x.y.z`)
+- [ ] Submit PR with minimal name: Release x.y.z
+- [ ] Complete PR checklists
+
+## Overall strategy
+
+**Master is always shippable:** We try to merge PRs in such a way that `master` is the only branch to really be concerned about *and* `master` can always be released. This allows smoother flow between new fetures, bug fixes, and so on. (Almost a continuous deployment setup, without automation.)
+
+## Versioning
+
+We follow [semantic versioning](https://semver.org) where the following sequence is true `[major].[minor].[patch]`; therefore, consider the following implications of the release you are preparing:
+
+1. **Major:** There is at least one change not deemed backward compatible.
+2. **Minor:** There is at least one new feature added to the release.
+3. **Patch:** No breaking changes, no new features.
+
+What to expect while Marked is a zero-major (0.x.y):
+
+1. The major will remain at zero; thereby, alerting consumers to the potentially volatile nature of the package.
+2. The minor will tend to be more analagous to a `major` release.
+3. The patch will tend to be more analagous to a `minor` release or a collection of bug fixes (patches).
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/README.md
new file mode 100644
index 00000000000..6df149b8607
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/README.md
@@ -0,0 +1,112 @@
+<ul>
+ <li><a href="#marked">About</a></li>
+ <li><a href="#demo">Demo</a></li>
+ <li><a href="#installation">Installation</a></li>
+ <li><a href="#usage">Usage</a></li>
+ <li><a href="#specifications">Supported Markdown specifications</a></li>
+ <li><a href="#security">Security</a></li>
+ <li><a href="#contributing">Contributing</a></li>
+ <li><a href="#authors">Authors</a></li>
+ <li><a href="#license">License</a></li>
+</ul>
+
+<h2 id="marked">Marked</h2>
+
+Marked is
+
+1. built for speed.<sup>*</sup>
+2. a low-level markdown compiler for parsing markdown without caching or blocking for long periods of time.<sup>**</sup>
+3. light-weight while implementing all markdown features from the supported flavors & specifications.<sup>***</sup>
+4. available as a command line interface (CLI) and running in client- or server-side JavaScript projects.
+
+<p><small><sup>*</sup> Still working on metrics for comparative analysis and definition.</small><br>
+<small><sup>**</sup> As few dependencies as possible.</small><br>
+<small><sup>***</sup> Strict compliance could result in slower processing when running comparative benchmarking.</small></p>
+
+
+<h2 id="demo">Demo</h2>
+
+Checkout the [demo page](./demo/) to see marked in action ⛹️
+
+These documentation pages are also rendered using marked 💯
+
+
+<h2 id="installation">Installation</h2>
+
+**CLI:** `npm install -g marked`
+
+**In-browser:** `npm install marked --save`
+
+<h2 id="usage">Usage</h2>
+
+**CLI**
+
+``` bash
+$ marked -o hello.html
+hello world
+^D
+$ cat hello.html
+<p>hello world</p>
+```
+
+``` bash
+$ marked -s "*hello world*"
+<p><em>hello world</em></p>
+```
+
+**Browser**
+
+```html
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title>Marked in the browser</title>
+</head>
+<body>
+ <div id="content"></div>
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
+ <script>
+ document.getElementById('content').innerHTML =
+ marked('# Marked in browser\n\nRendered by **marked**.');
+ </script>
+</body>
+</html>
+```
+
+
+Marked offers [advanced configurations](#/USING_ADVANCED.md) and [extensibility](#/USING_PRO.md) as well.
+
+<h2 id="specifications">Supported Markdown specifications</h2>
+
+We actively support the features of the following [Markdown flavors](https://github.com/commonmark/CommonMark/wiki/Markdown-Flavors).
+
+|Flavor |Version |
+|:----------------------------------------------------------|:----------|
+|The original markdown.pl |-- |
+|[CommonMark](http://spec.commonmark.org/0.28/) |0.28 |
+|[GitHub Flavored Markdown](https://github.github.com/gfm/) |0.28 |
+
+By supporting the above Markdown flavors, it's possible that Marked can help you use other flavors as well; however, these are not actively supported by the community.
+
+<h2 id="security">Security</h2>
+
+The only completely secure system is the one that doesn't exist in the first place. Having said that, we take the security of Marked very seriously.
+
+Therefore, please disclose potential security issues by email to the project [committers](#/AUTHORS.md) as well as the [listed owners within NPM](https://docs.npmjs.com/cli/owner). We will provide an initial assessment of security reports within 48 hours and should apply patches within 2 weeks (also, feel free to contribute a fix for the issue).
+
+<h2 id="contributing">Contributing</h2>
+
+The marked community enjoys a spirit of collaboration and contribution from all comers. Whether you're just getting started with Markdown, JavaScript, and Marked or you're a veteran with it all figured out, we're here to help each other improve as professionals while helping Marked improve technically. Please see our [contributing documentation](#/CONTRIBUTING.md) for more details.
+
+For our Contribution License Agreement, see our [license](https://github.com/markedjs/marked/blob/master/LICENSE.md).
+
+<h2 id="authors">Authors</h2>
+
+For list of credited authors and contributors, please see our [authors page](#/AUTHORS.md).
+
+<h2 id="license">License</h2>
+
+Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)
+
+See [license](https://github.com/markedjs/marked/blob/master/LICENSE.md) for more details.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_ADVANCED.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_ADVANCED.md
new file mode 100644
index 00000000000..500eacc5337
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_ADVANCED.md
@@ -0,0 +1,78 @@
+## The `marked` function
+
+```js
+marked(markdownString [,options] [,callback])
+```
+
+|Argument |Type |Notes |
+|:---------------------|:------------|:----------------------------------------------------------------------------------------------------|
+|markdownString |`string` |String of markdown source to be compiled. |
+|<a href="#options">options</a>|`object`|Hash of options. Can also use `marked.setOptions`. |
+|callback |`function` |Called when `markdownString` has been parsed. Can be used as second argument if no `options` present.|
+
+### Alternative using reference
+
+```js
+// Create reference instance
+var myMarked = require('marked');
+
+// Set options
+// `highlight` example uses `highlight.js`
+myMarked.setOptions({
+ renderer: new myMarked.Renderer(),
+ highlight: function(code) {
+ return require('highlight.js').highlightAuto(code).value;
+ },
+ pedantic: false,
+ gfm: true,
+ tables: true,
+ breaks: false,
+ sanitize: false,
+ smartLists: true,
+ smartypants: false,
+ xhtml: false
+});
+
+// Compile
+console.log(myMarked('I am using __markdown__.'));
+```
+
+<h2 id="options">Options</h2>
+
+|Member |Type |Default |Since |Notes |
+|:-----------|:---------|:--------|:--------|:-------------|
+|baseUrl |`string` |`null` |??? |A prefix url for any relative link. |
+|breaks |`boolean` |`false` |??? |If true, use GFM [hard](https://github.github.com/gfm/#hard-line-breaks) and [soft](https://github.github.com/gfm/#soft-line-breaks) line breaks. Requires `gfm` be `true`.|
+|gfm |`boolean` |`true` |??? |If true, use approved [GitHub Flavored Markdown (GFM) specification](https://github.github.com/gfm/).|
+|headerIds |`boolean` |`true` |v0.4.0 |If true, include an `id` attribute when emitting headings (h1, h2, h3, etc).|
+|headerPrefix|`string` |`''` |??? |A string to prefix the `id` attribute when emitting headings (h1, h2, h3, etc).|
+|highlight |`function`|`null` |??? |A function to highlight code blocks, see <a href="#highlight">Asynchronous highlighting</a>.|
+|langPrefix |`string` |`'language-'`|??? |A string to prefix the className in a `<code>` block. Useful for syntax highlighting.|
+|mangle |`boolean` |`true` |??? |??? |
+|pedantic |`boolean` |`false` |??? |If true, conform to the original `markdown.pl` as much as possible. Don't fix original markdown bugs or behavior. Turns off and overrides `gfm`.|
+|renderer |`object` |`new Renderer()`|???|An object containing functions to render tokens to HTML. See [extensibility](USING_PRO.md) for more details.|
+|sanitize |`boolean` |`false` |??? |If true, sanitize the HTML passed into `markdownString` with the `sanitizer` function.|
+|sanitizer |`function`|`null` |??? |A function to sanitize the HTML passed into `markdownString`.|
+|silent |`boolean` |`false` |??? |??? |
+|smartlists |`boolean` |`false` |??? |If true, use smarter list behavior than those found in `markdown.pl`.|
+|smartypants |`boolean` |`false` |??? |If true, use "smart" typographic punctuation for things like quotes and dashes.|
+|tables |`boolean` |`true` |??? |If true and `gfm` is true, use [GFM Tables extension](https://github.github.com/gfm/#tables-extension-).|
+|xhtml |`boolean` |`false` |??? |If true, emit self-closing HTML tags for void elements (&lt;br/&gt;, &lt;img/&gt;, etc.) with a "/" as required by XHTML.|
+
+<h2 id="highlight">Asynchronous highlighting</h2>
+
+Unlike `highlight.js` the `pygmentize.js` library uses asynchronous highlighting. This example demonstrates that marked is agnostic when it comes to the highlighter you use.
+
+```js
+myMarked.setOptions({
+ highlight: function(code, lang, callback) {
+ require('pygmentize-bundled') ({ lang: lang, format: 'html' }, code, function (err, result) {
+ callback(err, result.toString());
+ });
+ }
+});
+
+console.log(myMarked(markdownString));
+```
+
+In both examples, `code` is a `string` representing the section of code to pass to the highlighter. In this example, `lang` is a `string` informing the highlighter what programming lnaguage to use for the `code` and `callback` is the `function` the asynchronous highlighter will call once complete.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_PRO.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_PRO.md
new file mode 100644
index 00000000000..e14658ad439
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/USING_PRO.md
@@ -0,0 +1,157 @@
+## Extending Marked
+
+To champion the single-reponsibility and open/closed prinicples, we have tried to make it relatively painless to extend marked. If you are looking to add custom functionality, this is the place to start.
+
+<ul>
+ <li><a href="#renderer">The renderer</a></li>
+ <li><a href="#lexer">The lexer</a></li>
+ <li><a href="#parser">The parser</a></li>
+</ul>
+
+<h2 id="renderer">The renderer</h2>
+
+The renderer is...
+
+**Example:** Overriding default heading token by adding an embedded anchor tag like on GitHub.
+
+```js
+// Create reference instance
+var myMarked = require('marked');
+
+// Get reference
+var renderer = new myMarked.Renderer();
+
+// Override function
+renderer.heading = function (text, level) {
+ var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
+
+ return `
+ <h${level}>
+ <a name="${escapedText}" class="anchor" href="#${escapedText}">
+ <span class="header-link"></span>
+ </a>
+ ${text}
+ </h${level}>`;
+};
+
+// Run marked
+console.log(myMarked('# heading+', { renderer: renderer }));
+```
+
+**Output:**
+
+```html
+<h1>
+ <a name="heading-" class="anchor" href="#heading-">
+ <span class="header-link"></span>
+ </a>
+ heading+
+</h1>
+```
+
+### Block level renderer methods
+
+- code(*string* code, *string* language)
+- blockquote(*string* quote)
+- html(*string* html)
+- heading(*string* text, *number* level)
+- hr()
+- list(*string* body, *boolean* ordered)
+- listitem(*string* text)
+- paragraph(*string* text)
+- table(*string* header, *string* body)
+- tablerow(*string* content)
+- tablecell(*string* content, *object* flags)
+
+`flags` has the following properties:
+
+```js
+{
+ header: true || false,
+ align: 'center' || 'left' || 'right'
+}
+```
+
+### Inline level renderer methods
+
+- strong(*string* text)
+- em(*string* text)
+- codespan(*string* code)
+- br()
+- del(*string* text)
+- link(*string* href, *string* title, *string* text)
+- image(*string* href, *string* title, *string* text)
+- text(*string* text)
+
+<h2 id="lexer">The lexer</h2>
+
+The lexer is...
+
+
+<h2 id="parser">The parser</h2>
+
+The parser is...
+
+***
+
+<h2 id="extend">Access to lexer and parser</h2>
+
+You also have direct access to the lexer and parser if you so desire.
+
+``` js
+var tokens = marked.lexer(text, options);
+console.log(marked.parser(tokens));
+```
+
+``` js
+var lexer = new marked.Lexer(options);
+var tokens = lexer.lex(text);
+console.log(tokens);
+console.log(lexer.rules);
+```
+
+``` bash
+$ node
+> require('marked').lexer('> i am using marked.')
+[ { type: 'blockquote_start' },
+ { type: 'paragraph',
+ text: 'i am using marked.' },
+ { type: 'blockquote_end' },
+ links: {} ]
+```
+
+The Lexers build an array of tokens, which will be passed to their respective
+Parsers. The Parsers process each token in the token arrays,
+which are removed from the array of tokens:
+
+``` js
+const marked = require('marked');
+
+const md = `
+ # heading
+
+ [link][1]
+
+ [1]: #heading "heading"
+`;
+
+const tokens = marked.lexer(md);
+console.log(tokens);
+
+const html = marked.parser(tokens);
+console.log(html);
+
+console.log(tokens);
+```
+
+``` bash
+[ { type: 'heading', depth: 1, text: 'heading' },
+ { type: 'paragraph', text: ' [link][1]' },
+ { type: 'space' },
+ links: { '1': { href: '#heading', title: 'heading' } } ]
+
+<h1 id="heading">heading</h1>
+<p> <a href="#heading" title="heading">link</a></p>
+
+[ links: { '1': { href: '#heading', title: 'heading' } } ]
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/broken.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/broken.md
new file mode 100644
index 00000000000..7bfa49e8a9a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/broken.md
@@ -0,0 +1,426 @@
+# Markdown is broken
+
+I have a lot of scraps of markdown engine oddities that I've collected over the
+years. What you see below is slightly messy, but it's what I've managed to
+cobble together to illustrate the differences between markdown engines, and
+why, if there ever is a markdown specification, it has to be absolutely
+thorough. There are a lot more of these little differences I have documented
+elsewhere. I know I will find them lingering on my disk one day, but until
+then, I'll continue to add whatever strange nonsensical things I find.
+
+Some of these examples may only mention a particular engine compared to marked.
+However, the examples with markdown.pl could easily be swapped out for
+discount, upskirt, or markdown.js, and you would very easily see even more
+inconsistencies.
+
+A lot of this was written when I was very unsatisfied with the inconsistencies
+between markdown engines. Please excuse the frustration noticeable in my
+writing.
+
+## Examples of markdown's "stupid" list parsing
+
+```
+$ markdown.pl
+
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+
+<ul>
+<li>item2</li>
+</ul>
+
+<p><p>text</p></li>
+</ul></p>
+```
+
+
+```
+$ marked
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+<ul>
+<li>item2</li>
+</ul>
+<p>text</p>
+</li>
+</ul>
+```
+
+Which looks correct to you?
+
+- - -
+
+```
+$ markdown.pl
+* hello
+ > world
+^D
+<p><ul>
+<li>hello</p>
+
+<blockquote>
+ <p>world</li>
+</ul></p>
+</blockquote>
+```
+
+```
+$ marked
+* hello
+ > world
+^D
+<ul>
+<li>hello<blockquote>
+<p>world</p>
+</blockquote>
+</li>
+</ul>
+```
+
+Again, which looks correct to you?
+
+- - -
+
+EXAMPLE:
+
+```
+$ markdown.pl
+* hello
+ * world
+ * hi
+ code
+^D
+<ul>
+<li>hello
+<ul>
+<li>world</li>
+<li>hi
+ code</li>
+</ul></li>
+</ul>
+```
+
+The code isn't a code block even though it's after the bullet margin. I know,
+lets give it two more spaces, effectively making it 8 spaces past the bullet.
+
+```
+$ markdown.pl
+* hello
+ * world
+ * hi
+ code
+^D
+<ul>
+<li>hello
+<ul>
+<li>world</li>
+<li>hi
+ code</li>
+</ul></li>
+</ul>
+```
+
+And, it's still not a code block. Did you also notice that the 3rd item isn't
+even its own list? Markdown screws that up too because of its indentation
+unaware parsing.
+
+- - -
+
+Let's look at some more examples of markdown's list parsing:
+
+```
+$ markdown.pl
+
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+
+<ul>
+<li>item2</li>
+</ul>
+
+<p><p>text</p></li>
+</ul></p>
+```
+
+Misnested tags.
+
+
+```
+$ marked
+ * item1
+
+ * item2
+
+ text
+^D
+<ul>
+<li><p>item1</p>
+<ul>
+<li>item2</li>
+</ul>
+<p>text</p>
+</li>
+</ul>
+```
+
+Which looks correct to you?
+
+- - -
+
+```
+$ markdown.pl
+* hello
+ > world
+^D
+<p><ul>
+<li>hello</p>
+
+<blockquote>
+ <p>world</li>
+</ul></p>
+</blockquote>
+```
+
+More misnested tags.
+
+
+```
+$ marked
+* hello
+ > world
+^D
+<ul>
+<li>hello<blockquote>
+<p>world</p>
+</blockquote>
+</li>
+</ul>
+```
+
+Again, which looks correct to you?
+
+- - -
+
+# Why quality matters - Part 2
+
+``` bash
+$ markdown.pl
+* hello
+ > world
+^D
+<p><ul>
+<li>hello</p>
+
+<blockquote>
+ <p>world</li>
+</ul></p>
+</blockquote>
+```
+
+``` bash
+$ sundown # upskirt
+* hello
+ > world
+^D
+<ul>
+<li>hello
+&gt; world</li>
+</ul>
+```
+
+``` bash
+$ marked
+* hello
+ > world
+^D
+<ul><li>hello <blockquote><p>world</p></blockquote></li></ul>
+```
+
+Which looks correct to you?
+
+- - -
+
+See: https://github.com/evilstreak/markdown-js/issues/23
+
+``` bash
+$ markdown.pl # upskirt/markdown.js/discount
+* hello
+ var a = 1;
+* world
+^D
+<ul>
+<li>hello
+var a = 1;</li>
+<li>world</li>
+</ul>
+```
+
+``` bash
+$ marked
+* hello
+ var a = 1;
+* world
+^D
+<ul><li>hello
+<pre>code>var a = 1;</code></pre></li>
+<li>world</li></ul>
+```
+
+Which looks more reasonable? Why shouldn't code blocks be able to appear in
+list items in a sane way?
+
+- - -
+
+``` bash
+$ markdown.js
+<div>hello</div>
+
+<span>hello</span>
+^D
+<p>&lt;div&gt;hello&lt;/div&gt;</p>
+
+<p>&lt;span&gt;hello&lt;/span&gt;</p>
+```
+
+``` bash
+$ marked
+<div>hello</div>
+
+<span>hello</span>
+^D
+<div>hello</div>
+
+
+<p><span>hello</span>
+</p>
+```
+
+- - -
+
+See: https://github.com/evilstreak/markdown-js/issues/27
+
+``` bash
+$ markdown.js
+[![an image](/image)](/link)
+^D
+<p><a href="/image)](/link">![an image</a></p>
+```
+
+``` bash
+$ marked
+[![an image](/image)](/link)
+^D
+<p><a href="/link"><img src="/image" alt="an image"></a>
+</p>
+```
+
+- - -
+
+See: https://github.com/evilstreak/markdown-js/issues/24
+
+``` bash
+$ markdown.js
+> a
+
+> b
+
+> c
+^D
+<blockquote><p>a</p><p>bundefined&gt; c</p></blockquote>
+```
+
+``` bash
+$ marked
+> a
+
+> b
+
+> c
+^D
+<blockquote><p>a
+
+</p></blockquote>
+<blockquote><p>b
+
+</p></blockquote>
+<blockquote><p>c
+</p></blockquote>
+```
+
+- - -
+
+``` bash
+$ markdown.pl
+* hello
+ * world
+ how
+
+ are
+ you
+
+ * today
+* hi
+^D
+<ul>
+<li><p>hello</p>
+
+<ul>
+<li>world
+how</li>
+</ul>
+
+<p>are
+you</p>
+
+<ul>
+<li>today</li>
+</ul></li>
+<li>hi</li>
+</ul>
+```
+
+``` bash
+$ marked
+* hello
+ * world
+ how
+
+ are
+ you
+
+ * today
+* hi
+^D
+<ul>
+<li><p>hello</p>
+<ul>
+<li><p>world
+how</p>
+<p>are
+you</p>
+</li>
+<li><p>today</p>
+</li>
+</ul>
+</li>
+<li>hi</li>
+</ul>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.css b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.css
new file mode 100644
index 00000000000..8e3e8fc5e82
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.css
@@ -0,0 +1,55 @@
+html, body {
+ margin: 0;
+ padding: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ color: #333;
+ background-color: #fbfbfb;
+ height: 100%;
+}
+
+textarea {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+ font-size: 12px;
+ resize: none;
+}
+
+header {
+ padding-top: 10px;
+ display: flex;
+ height: 58px;
+}
+
+header h1 {
+ margin: 0;
+}
+
+.github-ribbon {
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: 0;
+ z-index: 1000;
+}
+
+.containers {
+ display: flex;
+ height: calc(100vh - 68px);
+}
+
+.container {
+ flex-basis: 50%;
+ padding: 5px;
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ box-sizing: border-box;
+}
+
+.pane, #input {
+ margin-top: 5px;
+ padding: 0.6em;
+ border: 1px solid #ccc;
+ overflow: auto;
+ flex-grow: 1;
+ flex-shrink: 1;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.js
new file mode 100644
index 00000000000..8db8e7146b4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/demo.js
@@ -0,0 +1,175 @@
+/* globals marked, unfetch, ES6Promise */
+
+if (!window.Promise) {
+ window.Promise = ES6Promise;
+}
+if (!window.fetch) {
+ window.fetch = unfetch;
+}
+
+var $inputElem = document.querySelector('#input');
+var $outputTypeElem = document.querySelector('#outputType');
+var $previewElem = document.querySelector('#preview');
+var $permalinkElem = document.querySelector('#permalink');
+var $clearElem = document.querySelector('#clear');
+var $htmlElem = document.querySelector('#html');
+var $lexerElem = document.querySelector('#lexer');
+var $panes = document.querySelectorAll('.pane');
+var inputDirty = true;
+var $activeElem = null;
+var changeTimeout = null;
+var search = searchToObject();
+
+if ('text' in search) {
+ $inputElem.value = search.text;
+} else {
+ fetch('./initial.md')
+ .then(function (res) { return res.text(); })
+ .then(function (text) {
+ if ($inputElem.value === '') {
+ $inputElem.value = text;
+ inputDirty = true;
+ clearTimeout(changeTimeout);
+ checkForChanges();
+ setScrollPercent(0);
+ }
+ });
+}
+
+if (search.outputType) {
+ $outputTypeElem.value = search.outputType;
+}
+
+fetch('./quickref.md')
+ .then(function (res) { return res.text(); })
+ .then(function (text) {
+ document.querySelector('#quickref').value = text;
+ });
+
+function handleChange() {
+ for (var i = 0; i < $panes.length; i++) {
+ $panes[i].style.display = 'none';
+ }
+ $activeElem = document.querySelector('#' + $outputTypeElem.value);
+ $activeElem.style.display = 'block';
+
+ updateLink();
+};
+
+$outputTypeElem.addEventListener('change', handleChange, false);
+handleChange();
+
+function handleInput() {
+ inputDirty = true;
+};
+
+$inputElem.addEventListener('change', handleInput, false);
+$inputElem.addEventListener('keyup', handleInput, false);
+$inputElem.addEventListener('keypress', handleInput, false);
+$inputElem.addEventListener('keydown', handleInput, false);
+
+$clearElem.addEventListener('click', function () {
+ $inputElem.value = '';
+ handleInput();
+}, false);
+
+function searchToObject() {
+ // modified from https://stackoverflow.com/a/7090123/806777
+ var pairs = location.search.slice(1).split('&');
+ var obj = {};
+
+ for (var i = 0; i < pairs.length; i++) {
+ if (pairs[i] === '') {
+ continue;
+ }
+
+ var pair = pairs[i].split('=');
+
+ obj[decodeURIComponent(pair.shift())] = decodeURIComponent(pair.join('='));
+ }
+
+ return obj;
+}
+
+function jsonString(input) {
+ var output = (input + '')
+ .replace(/\n/g, '\\n')
+ .replace(/\r/g, '\\r')
+ .replace(/\t/g, '\\t')
+ .replace(/\f/g, '\\f')
+ .replace(/[\\"']/g, '\\$&')
+ .replace(/\u0000/g, '\\0');
+ return '"' + output + '"';
+};
+
+function getScrollSize() {
+ var e = $activeElem;
+
+ return e.scrollHeight - e.clientHeight;
+};
+function getScrollPercent() {
+ var size = getScrollSize();
+
+ if (size <= 0) {
+ return 1;
+ }
+
+ return $activeElem.scrollTop / size;
+};
+function setScrollPercent(percent) {
+ $activeElem.scrollTop = percent * getScrollSize();
+};
+
+function updateLink() {
+ var outputType = '';
+ if ($outputTypeElem.value !== 'preview') {
+ outputType = 'outputType=' + $outputTypeElem.value + '&';
+ }
+
+ $permalinkElem.href = '?' + outputType + 'text=' + encodeURIComponent($inputElem.value);
+ history.replaceState('', document.title, $permalinkElem.href);
+}
+
+var delayTime = 1;
+function checkForChanges() {
+ if (inputDirty) {
+ inputDirty = false;
+
+ updateLink();
+
+ var startTime = new Date();
+
+ var scrollPercent = getScrollPercent();
+
+ var lexed = marked.lexer($inputElem.value);
+
+ var lexedList = [];
+
+ for (var i = 0; i < lexed.length; i++) {
+ var lexedLine = [];
+ for (var j in lexed[i]) {
+ lexedLine.push(j + ':' + jsonString(lexed[i][j]));
+ }
+ lexedList.push('{' + lexedLine.join(', ') + '}');
+ }
+
+ var parsed = marked.parser(lexed);
+
+ $previewElem.innerHTML = (parsed);
+ $htmlElem.value = (parsed);
+ $lexerElem.value = (lexedList.join('\n'));
+
+ setScrollPercent(scrollPercent);
+
+ var endTime = new Date();
+ delayTime = endTime - startTime;
+ if (delayTime < 50) {
+ delayTime = 50;
+ } else if (delayTime > 500) {
+ delayTime = 1000;
+ }
+ }
+ changeTimeout = window.setTimeout(checkForChanges, delayTime);
+};
+checkForChanges();
+setScrollPercent(0);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/index.html
new file mode 100644
index 00000000000..cc2b378d651
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/index.html
@@ -0,0 +1,60 @@
+<!doctype html>
+<html lang="en">
+
+ <head>
+ <title>Marked Demo</title>
+ <link rel="stylesheet" href="./demo.css" type="text/css" />
+ </head>
+
+ <body>
+ <a href="https://github.com/markedjs/marked">
+ <img class="github-ribbon" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub">
+ </a>
+
+ <header>
+ <a href="../">
+ <img src="../img/logo-black.svg" height="64px" width="64px" />
+ </a>
+ <h1>Marked Demo</h1>
+ </header>
+
+ <div class="containers">
+ <div class="container">
+ <div class="label">
+ <span>Input</span> ·
+ <a id="permalink">Permalink</a> ·
+ <button id="clear">Clear</button>
+ </div>
+ <textarea id="input"></textarea>
+ </div>
+
+ <div class="container">
+ <div class="label">
+ <select id="outputType">
+ <option value="preview">Preview</option>
+ <option value="html">HTML Source</option>
+ <option value="lexer">Lexer Data</option>
+ <option value="quickref">Quick Reference</option>
+ </select>
+ </div>
+
+ <div id="preview" class="pane">
+ <noscript>
+ <h2>You'll need to enable Javascript to use this tool.</h2>
+ </noscript>
+ </div>
+
+ <textarea id="html" class="pane" readonly="readonly"></textarea>
+
+ <textarea id="lexer" class="pane" readonly="readonly"></textarea>
+
+ <textarea id="quickref" class="pane" readonly="readonly"></textarea>
+ </div>
+ </div>
+ <script src="https://cdn.jsdelivr.net/npm/marked/lib/marked.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/unfetch/dist/unfetch.umd.js"></script>
+ <script src="./demo.js"></script>
+ </body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/initial.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/initial.md
new file mode 100644
index 00000000000..2465aef0418
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/initial.md
@@ -0,0 +1,36 @@
+Marked - Markdown Parser
+========================
+
+[Marked] lets you convert [Markdown] into HTML. Markdown is a simple text format whose goal is to be very easy to read and write, even when not converted to HTML. This demo page will let you type anything you like and see how it gets converted. Live. No more waiting around.
+
+How To Use The Demo
+-------------------
+
+1. Type in stuff on the left.
+2. See the live updates on the right.
+
+That's it. Pretty simple. There's also a drop-down option in the upper right to switch between various views:
+
+- **Preview:** A live display of the generated HTML as it would render in a browser.
+- **HTML Source:** The generated HTML before your browser makes it pretty.
+- **Lexer Data:** What [marked] uses internally, in case you like gory stuff like this.
+- **Quick Reference:** A brief run-down of how to format things using markdown.
+
+Why Markdown?
+-------------
+
+It's easy. It's not overly bloated, unlike HTML. Also, as the creator of [markdown] says,
+
+> The overriding design goal for Markdown's
+> formatting syntax is to make it as readable
+> as possible. The idea is that a
+> Markdown-formatted document should be
+> publishable as-is, as plain text, without
+> looking like it's been marked up with tags
+> or formatting instructions.
+
+Ready to start writing? Either start changing stuff on the left or
+[clear everything](?text=) with a simple click.
+
+[Marked]: https://github.com/markedjs/marked/
+[Markdown]: http://daringfireball.net/projects/markdown/
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/quickref.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/quickref.md
new file mode 100644
index 00000000000..10f09bdacf8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/demo/quickref.md
@@ -0,0 +1,167 @@
+Markdown Quick Reference
+========================
+
+This guide is a very brief overview, with examples, of the syntax that [Markdown] supports. It is itself written in Markdown and you can copy the samples over to the left-hand pane for experimentation. It's shown as *text* and not *rendered HTML*.
+
+[Markdown]: http://daringfireball.net/projects/markdown/
+
+
+Simple Text Formatting
+======================
+
+First thing is first. You can use *stars* or _underscores_ for italics. **Double stars** and __double underscores__ do bold. ***Three together*** do ___both___.
+
+Paragraphs are pretty easy too. Just have a blank line between chunks of text.
+
+> This chunk of text is in a block quote. Its multiple lines will all be
+> indended a bit from the rest of the text.
+>
+> > Multiple levels of block quotes also work.
+
+Sometimes you want to include some code, such as when you are explaining how `<h1>` HTML tags work, or maybe you are a programmer and you are discussing `someMethod()`.
+
+If you want to include some code and have
+newlines preserved, indent the line with a tab
+or at least four spaces.
+ Extra spaces work here too.
+This is also called preformatted text and it is useful for showing examples.
+The text will stay as text, so any *markdown* or <u>HTML</u> you add will
+not show up formatted. This way you can show markdown examples in a
+markdown document.
+
+> You can also use preformatted text with your blockquotes
+> as long as you add at least five spaces.
+
+
+Headings
+========
+
+There are a couple of ways to make headings. Using three or more equals signs on a line under a heading makes it into an "h1" style. Three or more hyphens under a line makes it "h2" (slightly smaller). You can also use multiple pound symbols before and after a heading. Pounds after the title are ignored. Here's some examples:
+
+This is H1
+==========
+
+This is H2
+----------
+
+# This is H1
+## This is H2
+### This is H3 with some extra pounds ###
+#### You get the idea ####
+##### I don't need extra pounds at the end
+###### H6 is the max
+
+
+Links
+=====
+
+Let's link to a few sites. First, let's use the bare URL, like <http://www.github.com>. Great for text, but ugly for HTML.
+Next is an inline link to [Google](http://www.google.com). A little nicer.
+This is a reference-style link to [Wikipedia] [1].
+Lastly, here's a pretty link to [Yahoo]. The reference-style and pretty links both automatically use the links defined below, but they could be defined *anywhere* in the markdown and are removed from the HTML. The names are also case insensitive, so you can use [YaHoO] and have it link properly.
+
+[1]: http://www.wikipedia.org/
+[Yahoo]: http://www.yahoo.com/
+
+Title attributes may be added to links by adding text after a link.
+This is the [inline link](http://www.bing.com "Bing") with a "Bing" title.
+You can also go to [W3C] [2] and maybe visit a [friend].
+
+[2]: http://w3c.org (The W3C puts out specs for web-based things)
+[Friend]: http://facebook.com/ "Facebook!"
+
+Email addresses in plain text are not linked: test@example.com.
+Email addresses wrapped in angle brackets are linked: <test@example.com>.
+They are also obfuscated so that email harvesting spam robots hopefully won't get them.
+
+
+Lists
+=====
+
+* This is a bulleted list
+* Great for shopping lists
+- You can also use hyphens
++ Or plus symbols
+
+The above is an "unordered" list. Now, on for a bit of order.
+
+1. Numbered lists are also easy
+2. Just start with a number
+3738762. However, the actual number doesn't matter when converted to HTML.
+1. This will still show up as 4.
+
+You might want a few advanced lists:
+
+- This top-level list is wrapped in paragraph tags
+- This generates an extra space between each top-level item.
+
+- You do it by adding a blank line
+
+- This nested list also has blank lines between the list items.
+
+- How to create nested lists
+1. Start your regular list
+2. Indent nested lists with four spaces
+3. Further nesting means you should indent with four more spaces
+ * This line is indented with eight spaces.
+
+- List items can be quite lengthy. You can keep typing and either continue
+them on the next line with no indentation.
+
+- Alternately, if that looks ugly, you can also
+indent the next line a bit for a prettier look.
+
+- You can put large blocks of text in your list by just indenting with four spaces.
+
+This is formatted the same as code, but you can inspect the HTML
+and find that it's just wrapped in a `<p>` tag and *won't* be shown
+as preformatted text.
+
+You can keep adding more and more paragraphs to a single
+list item by adding the traditional blank line and then keep
+on indenting the paragraphs with four spaces. You really need
+to only indent the first line, but that looks ugly.
+
+- Lists support blockquotes
+
+> Just like this example here. By the way, you can
+> nest lists inside blockquotes!
+> - Fantastic!
+
+- Lists support preformatted text
+
+ You just need to indent eight spaces.
+
+
+Even More
+=========
+
+Horizontal Rule
+---------------
+
+If you need a horizontal rule you just need to put at least three hyphens, asterisks, or underscores on a line by themselves. You can also even put spaces between the characters.
+
+---
+****************************
+_ _ _ _ _ _ _
+
+Those three all produced horizontal lines. Keep in mind that three hyphens under any text turns that text into a heading, so add a blank like if you use hyphens.
+
+Images
+------
+
+Images work exactly like links, but they have exclamation points in front. They work with references and titles too.
+
+![Google Logo](http://www.google.com/images/errors/logo_sm.gif) and ![Happy].
+
+[Happy]: http://www.wpclipart.com/smiley/simple_smiley/smiley_face_simple_green_small.png ("Smiley face")
+
+
+Inline HTML
+-----------
+
+If markdown is too limiting, you can just insert your own <strike>crazy</strike> HTML. Span-level HTML <u>can *still* use markdown</u>. Block level elements must be separated from text by a blank line and must not have any spaces before the opening and closing HTML.
+
+<div style='font-family: "Comic Sans", sans-serif;'>
+It is a pity, but markdown does **not** work in here for most markdown parsers. [Marked] handles it pretty well.
+</div>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black-and-white.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black-and-white.svg
new file mode 100644
index 00000000000..5f6c0b781bf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black-and-white.svg
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="996px" height="439.589px" viewBox="0 0 996 439.589" enable-background="new 0 0 996 439.589" xml:space="preserve">
+<g>
+ <g id="Marked_Letters">
+ <path fill="#010101" d="M185.044,358.869h-9.961l-1.143-25.986l-14.092,25.986h-6.24l-6.709-26.807l-8.818,26.807h-10.225
+ l13.389-40.605h10.928l6.416,25.781l13.916-25.781h10.635L185.044,358.869z"/>
+ <path fill="#010101" d="M226.617,358.869h-10.811l-1.084-8.994H202.33l-4.102,8.994h-10.605l20.566-40.605h10.986L226.617,358.869
+ z M214.019,344.162l-1.934-15.527l-7.061,15.527H214.019z"/>
+ <path fill="#010101" d="M267.712,358.869h-11.338l-4.043-8.467c-1.191-2.559-2.227-4.478-3.105-5.757s-1.651-2.07-2.314-2.373
+ c-0.664-0.303-1.553-0.454-2.666-0.454h-1.553l-2.578,17.051h-10.283l5.889-40.605h15.85c5.761,0,9.672,1.27,11.733,3.809
+ c2.061,2.539,3.091,5.283,3.091,8.232c0,3.105-0.854,5.522-2.563,7.251c-1.709,1.729-4.097,2.798-7.163,3.208
+ c1.562,0.898,2.769,1.953,3.618,3.164s1.86,3.096,3.032,5.654L267.712,358.869z M255.525,330.012c0-1.562-0.571-2.925-1.714-4.087
+ s-3.453-1.743-6.929-1.743h-1.611l-1.699,11.719h4.102c2.89,0,4.922-0.61,6.094-1.831S255.525,331.496,255.525,330.012z"/>
+ <path fill="#010101" d="M313.705,318.264l-17.578,18.223l14.912,22.383h-11.807l-14.59-21.65l-3.282,21.65h-10.342l6.064-40.605
+ h10.401l-2.578,17.256l16.611-17.256H313.705z"/>
+ <path fill="#010101" d="M346.426,318.264L345.4,325.5h-16.436l-1.26,8.818h14.268l-1.025,7.266h-14.385l-1.377,10.02h19.98
+ l-1.025,7.266h-30.439l5.889-40.605H346.426z"/>
+ <path fill="#010101" d="M389.953,338.156c0,4.512-0.86,8.301-2.578,11.367c-1.719,3.066-4.273,5.391-7.662,6.973
+ s-7.583,2.373-12.582,2.373H348.41l5.83-40.605h14.941c3.534,0,6.625,0.527,9.271,1.582s4.82,2.51,6.52,4.365
+ s2.953,3.97,3.764,6.343S389.953,335.461,389.953,338.156z M379.377,338.303c0-2.031-0.387-4.004-1.158-5.918
+ s-2.192-3.54-4.262-4.878c-2.07-1.338-4.941-2.007-8.613-2.007h-1.67l-3.779,26.104h5.449c2.597,0,4.828-0.391,6.693-1.172
+ s3.33-1.821,4.395-3.12s1.821-2.71,2.271-4.233C379.152,341.555,379.377,339.963,379.377,338.303z"/>
+ </g>
+ <g>
+ <path fill="#010101" d="M406.922,307.149l-3.703,26.35c-0.609,4.324-2.72,6.486-6.33,6.486c-0.773,0-1.553-0.07-2.338-0.211
+ l-0.756-3.023c0.879,0.188,1.67,0.281,2.373,0.281c1.219,0,2.118-0.302,2.698-0.905s0.964-1.55,1.151-2.839l3.674-26.139H406.922z
+ "/>
+ <path fill="#010101" d="M423.027,307.8l-0.475,3.357c-1.312-0.867-2.748-1.301-4.307-1.301c-1.312,0-2.361,0.34-3.146,1.02
+ s-1.178,1.576-1.178,2.689c0,0.551,0.188,1.131,0.562,1.74s1.471,1.644,3.287,3.103s3.015,2.739,3.595,3.841
+ s0.87,2.203,0.87,3.305c0,1.758-0.662,3.275-1.986,4.553s-3.088,1.916-5.291,1.916c-1.957,0-3.938-0.586-5.941-1.758l0.51-3.604
+ c2.238,1.559,4.16,2.338,5.766,2.338c0.867,0,1.69-0.284,2.47-0.852c0.779-0.568,1.169-1.339,1.169-2.312
+ c0-0.62-0.197-1.265-0.59-1.933c-0.394-0.667-1.502-1.745-3.324-3.232c-1.824-1.486-3.014-2.778-3.568-3.874
+ c-0.555-1.097-0.832-2.185-0.832-3.263c0-1.899,0.785-3.491,2.355-4.775c1.57-1.283,3.422-1.926,5.555-1.926
+ C420.016,306.833,421.516,307.155,423.027,307.8z"/>
+ </g>
+ <g>
+ <g>
+ <path fill="#010101" d="M357,200v-92c0-8.284-6.716-15-15-15H172c-8.284,0-15,6.716-15,15v92H357z"/>
+ <path fill="#010101" d="M157,205v73c0,8.284,6.716,15,15,15h170c8.284,0,15-6.716,15-15v-73H157z"/>
+ </g>
+ <g>
+ <path fill="#FFFFFF" d="M208.737,180.15v-33.125l16.987,21.234l16.987-21.234v33.125h16.987v-57.756h-16.987l-16.987,21.234
+ l-16.987-21.234H191.75v57.756H208.737z"/>
+ <path fill="#FFFFFF" d="M322.55,151.272h-16.987v-28.878h-16.986v28.878h-16.987L297.069,181L322.55,151.272z"/>
+ </g>
+ <g>
+ <path fill="#FFFFFF" d="M217,241.154c0,2.124-1.722,3.846-3.845,3.846h-5.31c-2.124,0-3.845-1.722-3.845-3.846v-0.309
+ c0-2.124,1.722-3.846,3.845-3.846h5.31c2.124,0,3.845,1.722,3.845,3.846V241.154z"/>
+ <path fill="#FFFFFF" d="M207.859,256.5c0,1.933-1.1,3.5-2.457,3.5h-12.046c-1.357,0-2.457-1.567-2.457-3.5l0,0
+ c0-1.933,1.1-3.5,2.457-3.5h12.046C206.759,253,207.859,254.567,207.859,256.5L207.859,256.5z"/>
+ <path fill="#FFFFFF" d="M328.044,238.021c-1.058-3.094-2.692-5.85-4.907-8.269c-2.215-2.418-5.049-4.314-8.498-5.689
+ c-3.45-1.375-7.479-2.063-12.086-2.063h-19.477l-7.6,52.932h24.403c6.518,0,11.984-1.032,16.402-3.094
+ c4.416-2.062,7.746-5.092,9.986-9.09c2.24-3.996,3.361-8.936,3.361-14.817C329.629,244.418,329.1,241.115,328.044,238.021z
+ M314.964,254.347c-0.586,1.986-1.573,3.826-2.96,5.519c-1.389,1.694-3.297,3.049-5.729,4.067s-5.34,1.528-8.727,1.528h-7.103
+ l4.927-34.027h2.176c4.787,0,8.529,0.872,11.229,2.616c2.698,1.744,4.55,3.863,5.557,6.358c1.005,2.494,1.508,5.066,1.508,7.713
+ C315.842,250.286,315.549,252.361,314.964,254.347z"/>
+ <path fill="#FFFFFF" d="M246.148,241.043l1.373-9.61h21.424l1.336-9.434h-10.601h-24.38h-1.256c-2.125,0-3.846,1.877-3.846,4
+ s1.721,4,3.846,4h0.096h3.793c1.928,0,3.491,1.563,3.491,3.491c0,1.928-1.563,3.491-3.491,3.491h-4.806L233.126,237h-8.983
+ c-1.299,0-2.353,1.786-2.353,3.988c0,2.203,1.053,3.989,2.353,3.989h7.826L231.966,245h3.189c2.124,0,3.845,1.722,3.845,3.846
+ v0.309c0,2.124-1.722,3.846-3.845,3.846h-4.349h-0.96H216.2c-1.933,0-3.5,1.567-3.5,3.5s1.567,3.5,3.5,3.5h8.645h4.945h0.364
+ c2.124,0,3.845,1.722,3.845,3.846v0.309c0,2.124-1.722,3.846-3.845,3.846h-1.524h-3.785h-1.8c-2.125,0-3.846,1.377-3.846,3.5
+ s1.721,3.5,3.846,3.5h25.636c0.273,0,0.538-0.024,0.795-0.068h17.828l1.336-9.471h-26.045l1.795-13.062h18.751l1.336-9.471
+ h-18.598l0.029-0.205C246.055,242.213,246.144,241.647,246.148,241.043z"/>
+ </g>
+ </g>
+</g>
+<g>
+ <g id="Marked_Letters_1_">
+ <path fill="#010101" d="M619.045,356.869h-9.961l-1.143-25.986l-14.092,25.986h-6.24l-6.709-26.807l-8.818,26.807h-10.225
+ l13.389-40.605h10.928l6.416,25.781l13.916-25.781h10.635L619.045,356.869z"/>
+ <path fill="#010101" d="M660.617,356.869h-10.811l-1.084-8.994H636.33l-4.102,8.994h-10.605l20.566-40.605h10.986L660.617,356.869
+ z M648.02,342.162l-1.934-15.527l-7.061,15.527H648.02z"/>
+ <path fill="#010101" d="M701.713,356.869h-11.338l-4.043-8.467c-1.191-2.559-2.227-4.478-3.105-5.757s-1.651-2.07-2.314-2.373
+ c-0.664-0.303-1.553-0.454-2.666-0.454h-1.553l-2.578,17.051h-10.283l5.889-40.605h15.85c5.761,0,9.672,1.27,11.732,3.809
+ s3.092,5.283,3.092,8.232c0,3.105-0.855,5.522-2.564,7.251s-4.097,2.798-7.162,3.208c1.562,0.898,2.768,1.953,3.617,3.164
+ s1.861,3.096,3.033,5.654L701.713,356.869z M689.525,328.012c0-1.562-0.572-2.925-1.715-4.087s-3.452-1.743-6.928-1.743h-1.611
+ l-1.699,11.719h4.102c2.89,0,4.922-0.61,6.094-1.831S689.525,329.496,689.525,328.012z"/>
+ <path fill="#010101" d="M747.705,316.264l-17.578,18.223l14.912,22.383h-11.807l-14.59-21.65l-3.281,21.65H705.02l6.064-40.605
+ h10.4l-2.578,17.256l16.611-17.256H747.705z"/>
+ <path fill="#010101" d="M780.426,316.264L779.4,323.5h-16.436l-1.26,8.818h14.268l-1.025,7.266h-14.385l-1.377,10.02h19.98
+ l-1.025,7.266h-30.439l5.889-40.605H780.426z"/>
+ <path fill="#010101" d="M823.953,336.156c0,4.512-0.86,8.301-2.578,11.367c-1.719,3.066-4.273,5.391-7.662,6.973
+ s-7.583,2.373-12.582,2.373H782.41l5.83-40.605h14.941c3.534,0,6.625,0.527,9.271,1.582s4.82,2.51,6.52,4.365
+ s2.953,3.97,3.764,6.343S823.953,333.461,823.953,336.156z M813.377,336.303c0-2.031-0.387-4.004-1.158-5.918
+ s-2.192-3.54-4.262-4.878c-2.07-1.338-4.941-2.007-8.613-2.007h-1.67l-3.779,26.104h5.449c2.597,0,4.828-0.391,6.693-1.172
+ s3.33-1.821,4.395-3.12s1.821-2.71,2.271-4.233C813.152,339.555,813.377,337.963,813.377,336.303z"/>
+ </g>
+ <g>
+ <path fill="#010101" d="M840.922,305.149l-3.703,26.35c-0.609,4.324-2.72,6.486-6.33,6.486c-0.773,0-1.553-0.07-2.338-0.211
+ l-0.756-3.023c0.879,0.188,1.67,0.281,2.373,0.281c1.219,0,2.118-0.302,2.698-0.905s0.964-1.55,1.151-2.839l3.674-26.139H840.922z
+ "/>
+ <path fill="#010101" d="M857.027,305.8l-0.475,3.357c-1.312-0.867-2.748-1.301-4.307-1.301c-1.312,0-2.361,0.34-3.146,1.02
+ s-1.178,1.576-1.178,2.689c0,0.551,0.188,1.131,0.562,1.74s1.471,1.644,3.287,3.103s3.015,2.739,3.595,3.841
+ s0.87,2.203,0.87,3.305c0,1.758-0.662,3.275-1.986,4.553s-3.088,1.916-5.291,1.916c-1.957,0-3.938-0.586-5.941-1.758l0.51-3.604
+ c2.238,1.559,4.16,2.338,5.766,2.338c0.867,0,1.69-0.284,2.47-0.852c0.779-0.568,1.169-1.339,1.169-2.312
+ c0-0.62-0.197-1.265-0.59-1.933c-0.394-0.667-1.502-1.745-3.324-3.232c-1.824-1.486-3.014-2.778-3.568-3.874
+ c-0.555-1.097-0.832-2.185-0.832-3.263c0-1.899,0.785-3.491,2.355-4.775c1.57-1.283,3.422-1.926,5.555-1.926
+ C854.016,304.833,855.516,305.155,857.027,305.8z"/>
+ </g>
+ <g>
+ <g>
+ <path d="M641,234.154c0,2.124-1.722,3.846-3.846,3.846h-5.309c-2.124,0-3.846-1.722-3.846-3.846v-0.309
+ c0-2.124,1.722-3.846,3.846-3.846h5.309c2.124,0,3.846,1.722,3.846,3.846V234.154z"/>
+ <path d="M631.859,249.5c0,1.933-1.1,3.5-2.457,3.5h-12.046c-1.356,0-2.456-1.567-2.456-3.5l0,0c0-1.933,1.1-3.5,2.456-3.5h12.046
+ C630.76,246,631.859,247.567,631.859,249.5L631.859,249.5z"/>
+ <path d="M752.044,231.021c-1.058-3.094-2.692-5.85-4.907-8.269c-2.215-2.418-5.049-4.314-8.498-5.689
+ c-3.45-1.375-7.479-2.063-12.086-2.063h-19.477l-7.6,52.932h24.402c6.518,0,11.984-1.032,16.402-3.094
+ c4.416-2.062,7.746-5.092,9.986-9.09c2.24-3.996,3.361-8.936,3.361-14.817C753.629,237.418,753.1,234.115,752.044,231.021z
+ M738.964,247.347c-0.586,1.986-1.573,3.826-2.96,5.519c-1.389,1.694-3.297,3.049-5.729,4.067s-5.34,1.528-8.727,1.528h-7.103
+ l4.927-34.027h2.176c4.787,0,8.529,0.872,11.229,2.616c2.698,1.744,4.55,3.863,5.557,6.358c1.005,2.494,1.508,5.066,1.508,7.713
+ C739.842,243.286,739.549,245.361,738.964,247.347z"/>
+ <path d="M670.148,234.043l1.373-9.61h21.424l1.337-9.434h-10.601h-24.381h-1.256c-2.124,0-3.846,1.877-3.846,4s1.722,4,3.846,4
+ h0.096h3.793c1.929,0,3.492,1.563,3.492,3.491c0,1.928-1.563,3.491-3.492,3.491h-4.805L657.126,230h-8.983
+ c-1.299,0-2.352,1.786-2.352,3.988c0,2.203,1.053,3.989,2.352,3.989h7.826L655.966,238h3.188c2.124,0,3.846,1.722,3.846,3.846
+ v0.309c0,2.124-1.722,3.846-3.846,3.846h-4.349h-0.96H640.2c-1.933,0-3.5,1.567-3.5,3.5s1.567,3.5,3.5,3.5h8.646h4.945h0.363
+ c2.124,0,3.846,1.722,3.846,3.846v0.309c0,2.124-1.722,3.846-3.846,3.846h-1.523h-3.785h-1.801c-2.124,0-3.846,1.377-3.846,3.5
+ s1.722,3.5,3.846,3.5h25.637c0.272,0,0.537-0.024,0.795-0.068h17.827l1.337-9.471h-26.045l1.795-13.062h18.75l1.337-9.471
+ h-18.599l0.029-0.205C670.055,235.213,670.144,234.647,670.148,234.043z"/>
+ </g>
+ <g>
+ <path fill="#010101" d="M642.236,179.15v-33.125l16.988,21.234l16.986-21.234v33.125h16.987v-57.756h-16.987l-16.986,21.234
+ l-16.988-21.234H625.25v57.756H642.236z"/>
+ <path fill="#010101" d="M756.05,150.272h-16.987v-28.878h-16.986v28.878H705.09L730.569,180L756.05,150.272z"/>
+ </g>
+ <path fill="#010101" d="M776,90H606c-11.028,0-20,8.972-20,20v170c0,11.028,8.972,20,20,20h170c11.028,0,20-8.972,20-20V110
+ C796,98.972,787.028,90,776,90z M606,100h170c5.514,0,10,4.486,10,10v83H596v-83C596,104.486,600.486,100,606,100z M776,290H606
+ c-5.514,0-10-4.486-10-10v-82h190v82C786,285.514,781.514,290,776,290z"/>
+ </g>
+</g>
+</svg> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black.svg
new file mode 100644
index 00000000000..a67fb80e5f0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/img/logo-black.svg
@@ -0,0 +1,32 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="300px" height="439.589px" viewBox="100 100 400 400" xml:space="preserve">
+<g>
+ <g id="Marked_Letters">
+ <path fill="#010101" d="M185.044,358.869h-9.961l-1.143-25.986l-14.092,25.986h-6.24l-6.709-26.807l-8.818,26.807h-10.225 l13.389-40.605h10.928l6.416,25.781l13.916-25.781h10.635L185.044,358.869z"/>
+ <path fill="#010101" d="M226.617,358.869h-10.811l-1.084-8.994H202.33l-4.102,8.994h-10.605l20.566-40.605h10.986L226.617,358.869 z M214.019,344.162l-1.934-15.527l-7.061,15.527H214.019z"/>
+ <path fill="#010101" d="M267.712,358.869h-11.338l-4.043-8.467c-1.191-2.559-2.227-4.478-3.105-5.757s-1.651-2.07-2.314-2.373 c-0.664-0.303-1.553-0.454-2.666-0.454h-1.553l-2.578,17.051h-10.283l5.889-40.605h15.85c5.761,0,9.672,1.27,11.733,3.809 c2.061,2.539,3.091,5.283,3.091,8.232c0,3.105-0.854,5.522-2.563,7.251c-1.709,1.729-4.097,2.798-7.163,3.208 c1.562,0.898,2.769,1.953,3.618,3.164s1.86,3.096,3.032,5.654L267.712,358.869z M255.525,330.012c0-1.562-0.571-2.925-1.714-4.087 s-3.453-1.743-6.929-1.743h-1.611l-1.699,11.719h4.102c2.89,0,4.922-0.61,6.094-1.831S255.525,331.496,255.525,330.012z"/>
+ <path fill="#010101" d="M313.705,318.264l-17.578,18.223l14.912,22.383h-11.807l-14.59-21.65l-3.282,21.65h-10.342l6.064-40.605 h10.401l-2.578,17.256l16.611-17.256H313.705z"/>
+ <path fill="#010101" d="M346.426,318.264L345.4,325.5h-16.436l-1.26,8.818h14.268l-1.025,7.266h-14.385l-1.377,10.02h19.98 l-1.025,7.266h-30.439l5.889-40.605H346.426z"/>
+ <path fill="#010101" d="M389.953,338.156c0,4.512-0.86,8.301-2.578,11.367c-1.719,3.066-4.273,5.391-7.662,6.973 s-7.583,2.373-12.582,2.373H348.41l5.83-40.605h14.941c3.534,0,6.625,0.527,9.271,1.582s4.82,2.51,6.52,4.365 s2.953,3.97,3.764,6.343S389.953,335.461,389.953,338.156z M379.377,338.303c0-2.031-0.387-4.004-1.158-5.918 s-2.192-3.54-4.262-4.878c-2.07-1.338-4.941-2.007-8.613-2.007h-1.67l-3.779,26.104h5.449c2.597,0,4.828-0.391,6.693-1.172 s3.33-1.821,4.395-3.12s1.821-2.71,2.271-4.233C379.152,341.555,379.377,339.963,379.377,338.303z"/>
+ </g>
+ <g>
+ <path fill="#010101" d="M406.922,307.149l-3.703,26.35c-0.609,4.324-2.72,6.486-6.33,6.486c-0.773,0-1.553-0.07-2.338-0.211 l-0.756-3.023c0.879,0.188,1.67,0.281,2.373,0.281c1.219,0,2.118-0.302,2.698-0.905s0.964-1.55,1.151-2.839l3.674-26.139H406.922z "/>
+ <path fill="#010101" d="M423.027,307.8l-0.475,3.357c-1.312-0.867-2.748-1.301-4.307-1.301c-1.312,0-2.361,0.34-3.146,1.02 s-1.178,1.576-1.178,2.689c0,0.551,0.188,1.131,0.562,1.74s1.471,1.644,3.287,3.103s3.015,2.739,3.595,3.841 s0.87,2.203,0.87,3.305c0,1.758-0.662,3.275-1.986,4.553s-3.088,1.916-5.291,1.916c-1.957,0-3.938-0.586-5.941-1.758l0.51-3.604 c2.238,1.559,4.16,2.338,5.766,2.338c0.867,0,1.69-0.284,2.47-0.852c0.779-0.568,1.169-1.339,1.169-2.312 c0-0.62-0.197-1.265-0.59-1.933c-0.394-0.667-1.502-1.745-3.324-3.232c-1.824-1.486-3.014-2.778-3.568-3.874 c-0.555-1.097-0.832-2.185-0.832-3.263c0-1.899,0.785-3.491,2.355-4.775c1.57-1.283,3.422-1.926,5.555-1.926 C420.016,306.833,421.516,307.155,423.027,307.8z"/>
+ </g>
+ <g>
+ <g>
+ <path fill="#010101" d="M357,200v-92c0-8.284-6.716-15-15-15H172c-8.284,0-15,6.716-15,15v92H357z"/>
+ <path fill="#010101" d="M157,205v73c0,8.284,6.716,15,15,15h170c8.284,0,15-6.716,15-15v-73H157z"/>
+ </g>
+ <g>
+ <path fill="#FFFFFF" d="M208.737,180.15v-33.125l16.987,21.234l16.987-21.234v33.125h16.987v-57.756h-16.987l-16.987,21.234 l-16.987-21.234H191.75v57.756H208.737z"/>
+ <path fill="#FFFFFF" d="M322.55,151.272h-16.987v-28.878h-16.986v28.878h-16.987L297.069,181L322.55,151.272z"/>
+ </g>
+ <g>
+ <path fill="#FFFFFF" d="M217,241.154c0,2.124-1.722,3.846-3.845,3.846h-5.31c-2.124,0-3.845-1.722-3.845-3.846v-0.309 c0-2.124,1.722-3.846,3.845-3.846h5.31c2.124,0,3.845,1.722,3.845,3.846V241.154z"/>
+ <path fill="#FFFFFF" d="M207.859,256.5c0,1.933-1.1,3.5-2.457,3.5h-12.046c-1.357,0-2.457-1.567-2.457-3.5l0,0 c0-1.933,1.1-3.5,2.457-3.5h12.046C206.759,253,207.859,254.567,207.859,256.5L207.859,256.5z"/>
+ <path fill="#FFFFFF" d="M328.044,238.021c-1.058-3.094-2.692-5.85-4.907-8.269c-2.215-2.418-5.049-4.314-8.498-5.689 c-3.45-1.375-7.479-2.063-12.086-2.063h-19.477l-7.6,52.932h24.403c6.518,0,11.984-1.032,16.402-3.094 c4.416-2.062,7.746-5.092,9.986-9.09c2.24-3.996,3.361-8.936,3.361-14.817C329.629,244.418,329.1,241.115,328.044,238.021z M314.964,254.347c-0.586,1.986-1.573,3.826-2.96,5.519c-1.389,1.694-3.297,3.049-5.729,4.067s-5.34,1.528-8.727,1.528h-7.103 l4.927-34.027h2.176c4.787,0,8.529,0.872,11.229,2.616c2.698,1.744,4.55,3.863,5.557,6.358c1.005,2.494,1.508,5.066,1.508,7.713 C315.842,250.286,315.549,252.361,314.964,254.347z"/>
+ <path fill="#FFFFFF" d="M246.148,241.043l1.373-9.61h21.424l1.336-9.434h-10.601h-24.38h-1.256c-2.125,0-3.846,1.877-3.846,4 s1.721,4,3.846,4h0.096h3.793c1.928,0,3.491,1.563,3.491,3.491c0,1.928-1.563,3.491-3.491,3.491h-4.806L233.126,237h-8.983 c-1.299,0-2.353,1.786-2.353,3.988c0,2.203,1.053,3.989,2.353,3.989h7.826L231.966,245h3.189c2.124,0,3.845,1.722,3.845,3.846 v0.309c0,2.124-1.722,3.846-3.845,3.846h-4.349h-0.96H216.2c-1.933,0-3.5,1.567-3.5,3.5s1.567,3.5,3.5,3.5h8.645h4.945h0.364 c2.124,0,3.845,1.722,3.845,3.846v0.309c0,2.124-1.722,3.846-3.845,3.846h-1.524h-3.785h-1.8c-2.125,0-3.846,1.377-3.846,3.5 s1.721,3.5,3.846,3.5h25.636c0.273,0,0.538-0.024,0.795-0.068h17.828l1.336-9.471h-26.045l1.795-13.062h18.751l1.336-9.471 h-18.598l0.029-0.205C246.055,242.213,246.144,241.647,246.148,241.043z"/>
+ </g>
+ </g>
+</g>
+</svg> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/index.html
new file mode 100644
index 00000000000..a985d16f5e3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/docs/index.html
@@ -0,0 +1,171 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8"/>
+ <title>Marked.js Documentation</title>
+ <style>
+ body {
+ font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+ font-size: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+ }
+
+ #container {
+ position: relative;
+ max-width: 800px;
+ margin: auto;
+ padding: 10px;
+ border: 1px solid #ddd;
+ border-radius: 3px;
+ }
+
+ header { display: flex; }
+
+ header h1 { margin: 0; }
+
+ table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ border: 1px solid #ddd;
+ }
+
+ td, th {
+ border: 1px solid #ddd;
+ padding: 5px;
+ }
+
+ a {
+ color: #0366d6;
+ text-decoration: none;
+ }
+
+ a:hover {
+ text-decoration: underline;
+ }
+
+ pre {
+ font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
+ padding: 16px;
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ background-color: #f6f8fa;
+ border-radius: 3px;
+ }
+
+ code:not([class]) {
+ padding: 0.2em 0.4em;
+ margin: 0;
+ font-size: 85%;
+ background-color: rgba(27,31,35,0.05);
+ border-radius: 3px;
+ }
+
+ .github-ribbon {
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: 0;
+ }
+ </style>
+</head>
+<body>
+ <div id="container">
+ <header>
+ <a href="#/README.md">
+ <img src="img/logo-black.svg" height="64px" width="64px" />
+ </a>
+ <h1>Marked.js Documentation</h1>
+ </header>
+
+ <a href="https://github.com/markedjs/marked">
+ <img class="github-ribbon" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub">
+ </a>
+
+ <div id="content"></div>
+ </div>
+ <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/es6-promise/dist/es6-promise.js"></script>
+ <script src="https://cdn.jsdelivr.net/npm/unfetch/dist/unfetch.umd.js"></script>
+ <script>
+ if (!window.Promise) {
+ window.Promise = ES6Promise;
+ }
+ if (!window.fetch) {
+ window.fetch = unfetch;
+ }
+
+ var content = document.querySelector('#content');
+ var body = document.querySelector('html');
+ var currentPage = 'README.md';
+ var currentHash = '';
+ var renderedPage = '';
+
+ function hashChange() {
+ var hash = location.hash.slice(1);
+ if (!hash) {
+ hash = 'README.md';
+ }
+
+ var uri = hash.split('#');
+
+ if (uri[0].match(/^\//)) {
+ currentPage = uri[0].slice(1);
+ if (uri.length > 1) {
+ currentHash = uri[1];
+ } else {
+ currentHash = '';
+ }
+ } else {
+ currentHash = uri[0];
+ }
+
+ fetchPage(currentPage).then(function () {
+ fetchAnchor(currentHash)
+ });
+
+ history.replaceState('', document.title, '#/' + currentPage + (currentHash ? '#' + currentHash : ''));
+ }
+
+ function fetchAnchor(anchor) {
+ if (!anchor) {
+ return;
+ }
+
+ var hashElement = document.getElementById(anchor);
+ if (hashElement) {
+ hashElement.scrollIntoView();
+ }
+ }
+
+ function fetchPage(page) {
+ if (page === renderedPage) {
+ return Promise.resolve();
+ }
+ return fetch(page)
+ .then(function (res) {
+ if (!res.ok) {
+ throw new Error('Error ' + res.status + ': ' + res.statusText);
+ }
+ return res.text();
+ })
+ .then(function (text) {
+ renderedPage = page;
+ content.innerHTML = marked(text);
+ body.scrollTop = 0;
+ }).catch(function (e) {
+ content.innerHTML = '<p>Oops! There was a problem rendering the page.</p>'
+ + '<p>' + e.message + '</p>';
+ });
+ }
+
+ window.addEventListener('hashchange', function (e) {
+ e.preventDefault();
+ hashChange();
+ });
+
+ hashChange();
+ </script>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/index.js
new file mode 100644
index 00000000000..a12f90569fa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/index.js
@@ -0,0 +1 @@
+module.exports = require('./lib/marked');
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/jasmine.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/jasmine.json
new file mode 100644
index 00000000000..8d1be919d17
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/jasmine.json
@@ -0,0 +1,11 @@
+{
+ "spec_dir": "test",
+ "spec_files": [
+ "**/*-spec.js"
+ ],
+ "helpers": [
+ "helpers/**/*.js"
+ ],
+ "stopSpecOnExpectationFailure": false,
+ "random": true
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/lib/marked.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/lib/marked.js
new file mode 100644
index 00000000000..33c02d9cf41
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/lib/marked.js
@@ -0,0 +1,1514 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/markedjs/marked
+ */
+
+;(function(root) {
+'use strict';
+
+/**
+ * Block-Level Grammar
+ */
+
+var block = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: noop,
+ hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+ nptable: noop,
+ blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
+ list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: '^ {0,3}(?:' // optional indentation
+ + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
+ + '|comment[^\\n]*(\\n+|$)' // (2)
+ + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
+ + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
+ + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
+ + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
+ + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
+ + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
+ + ')',
+ def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
+ table: noop,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
+ text: /^[^\n]+/
+};
+
+block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
+block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
+block.def = edit(block.def)
+ .replace('label', block._label)
+ .replace('title', block._title)
+ .getRegex();
+
+block.bullet = /(?:[*+-]|\d+\.)/;
+block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
+block.item = edit(block.item, 'gm')
+ .replace(/bull/g, block.bullet)
+ .getRegex();
+
+block.list = edit(block.list)
+ .replace(/bull/g, block.bullet)
+ .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
+ .replace('def', '\\n+(?=' + block.def.source + ')')
+ .getRegex();
+
+block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
+ + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
+ + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
+ + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
+ + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
+ + '|track|ul';
+block._comment = /<!--(?!-?>)[\s\S]*?-->/;
+block.html = edit(block.html, 'i')
+ .replace('comment', block._comment)
+ .replace('tag', block._tag)
+ .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
+ .getRegex();
+
+block.paragraph = edit(block.paragraph)
+ .replace('hr', block.hr)
+ .replace('heading', block.heading)
+ .replace('lheading', block.lheading)
+ .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
+ .getRegex();
+
+block.blockquote = edit(block.blockquote)
+ .replace('paragraph', block.paragraph)
+ .getRegex();
+
+/**
+ * Normal Block Grammar
+ */
+
+block.normal = merge({}, block);
+
+/**
+ * GFM Block Grammar
+ */
+
+block.gfm = merge({}, block.normal, {
+ fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,
+ paragraph: /^/,
+ heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
+});
+
+block.gfm.paragraph = edit(block.paragraph)
+ .replace('(?!', '(?!'
+ + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+ + block.list.source.replace('\\1', '\\3') + '|')
+ .getRegex();
+
+/**
+ * GFM + Tables Block Grammar
+ */
+
+block.tables = merge({}, block.gfm, {
+ nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
+ table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
+});
+
+/**
+ * Pedantic grammar
+ */
+
+block.pedantic = merge({}, block.normal, {
+ html: edit(
+ '^ *(?:comment *(?:\\n|\\s*$)'
+ + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
+ + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
+ .replace('comment', block._comment)
+ .replace(/tag/g, '(?!(?:'
+ + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
+ + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
+ + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
+ .getRegex(),
+ def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
+});
+
+/**
+ * Block Lexer
+ */
+
+function Lexer(options) {
+ this.tokens = [];
+ this.tokens.links = {};
+ this.options = options || marked.defaults;
+ this.rules = block.normal;
+
+ if (this.options.pedantic) {
+ this.rules = block.pedantic;
+ } else if (this.options.gfm) {
+ if (this.options.tables) {
+ this.rules = block.tables;
+ } else {
+ this.rules = block.gfm;
+ }
+ }
+}
+
+/**
+ * Expose Block Rules
+ */
+
+Lexer.rules = block;
+
+/**
+ * Static Lex Method
+ */
+
+Lexer.lex = function(src, options) {
+ var lexer = new Lexer(options);
+ return lexer.lex(src);
+};
+
+/**
+ * Preprocessing
+ */
+
+Lexer.prototype.lex = function(src) {
+ src = src
+ .replace(/\r\n|\r/g, '\n')
+ .replace(/\t/g, ' ')
+ .replace(/\u00a0/g, ' ')
+ .replace(/\u2424/g, '\n');
+
+ return this.token(src, true);
+};
+
+/**
+ * Lexing
+ */
+
+Lexer.prototype.token = function(src, top) {
+ src = src.replace(/^ +$/gm, '');
+ var next,
+ loose,
+ cap,
+ bull,
+ b,
+ item,
+ space,
+ i,
+ tag,
+ l,
+ isordered,
+ istask,
+ ischecked;
+
+ while (src) {
+ // newline
+ if (cap = this.rules.newline.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[0].length > 1) {
+ this.tokens.push({
+ type: 'space'
+ });
+ }
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ cap = cap[0].replace(/^ {4}/gm, '');
+ this.tokens.push({
+ type: 'code',
+ text: !this.options.pedantic
+ ? cap.replace(/\n+$/, '')
+ : cap
+ });
+ continue;
+ }
+
+ // fences (gfm)
+ if (cap = this.rules.fences.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'code',
+ lang: cap[2],
+ text: cap[3] || ''
+ });
+ continue;
+ }
+
+ // heading
+ if (cap = this.rules.heading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[1].length,
+ text: cap[2]
+ });
+ continue;
+ }
+
+ // table no leading pipe (gfm)
+ if (top && (cap = this.rules.nptable.exec(src))) {
+ item = {
+ type: 'table',
+ header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
+ };
+
+ if (item.header.length === item.align.length) {
+ src = src.substring(cap[0].length);
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = splitCells(item.cells[i], item.header.length);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+ }
+
+ // hr
+ if (cap = this.rules.hr.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'hr'
+ });
+ continue;
+ }
+
+ // blockquote
+ if (cap = this.rules.blockquote.exec(src)) {
+ src = src.substring(cap[0].length);
+
+ this.tokens.push({
+ type: 'blockquote_start'
+ });
+
+ cap = cap[0].replace(/^ *> ?/gm, '');
+
+ // Pass `top` to keep the current
+ // "toplevel" state. This is exactly
+ // how markdown.pl works.
+ this.token(cap, top);
+
+ this.tokens.push({
+ type: 'blockquote_end'
+ });
+
+ continue;
+ }
+
+ // list
+ if (cap = this.rules.list.exec(src)) {
+ src = src.substring(cap[0].length);
+ bull = cap[2];
+ isordered = bull.length > 1;
+
+ this.tokens.push({
+ type: 'list_start',
+ ordered: isordered,
+ start: isordered ? +bull : ''
+ });
+
+ // Get each top-level item.
+ cap = cap[0].match(this.rules.item);
+
+ next = false;
+ l = cap.length;
+ i = 0;
+
+ for (; i < l; i++) {
+ item = cap[i];
+
+ // Remove the list item's bullet
+ // so it is seen as the next token.
+ space = item.length;
+ item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+ // Outdent whatever the
+ // list item contains. Hacky.
+ if (~item.indexOf('\n ')) {
+ space -= item.length;
+ item = !this.options.pedantic
+ ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+ : item.replace(/^ {1,4}/gm, '');
+ }
+
+ // Determine whether the next list item belongs here.
+ // Backpedal if it does not belong in this list.
+ if (this.options.smartLists && i !== l - 1) {
+ b = block.bullet.exec(cap[i + 1])[0];
+ if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+ src = cap.slice(i + 1).join('\n') + src;
+ i = l - 1;
+ }
+ }
+
+ // Determine whether item is loose or not.
+ // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+ // for discount behavior.
+ loose = next || /\n\n(?!\s*$)/.test(item);
+ if (i !== l - 1) {
+ next = item.charAt(item.length - 1) === '\n';
+ if (!loose) loose = next;
+ }
+
+ // Check for task list items
+ istask = /^\[[ xX]\] /.test(item);
+ ischecked = undefined;
+ if (istask) {
+ ischecked = item[1] !== ' ';
+ item = item.replace(/^\[[ xX]\] +/, '');
+ }
+
+ this.tokens.push({
+ type: loose
+ ? 'loose_item_start'
+ : 'list_item_start',
+ task: istask,
+ checked: ischecked
+ });
+
+ // Recurse.
+ this.token(item, false);
+
+ this.tokens.push({
+ type: 'list_item_end'
+ });
+ }
+
+ this.tokens.push({
+ type: 'list_end'
+ });
+
+ continue;
+ }
+
+ // html
+ if (cap = this.rules.html.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: this.options.sanitize
+ ? 'paragraph'
+ : 'html',
+ pre: !this.options.sanitizer
+ && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
+ text: cap[0]
+ });
+ continue;
+ }
+
+ // def
+ if (top && (cap = this.rules.def.exec(src))) {
+ src = src.substring(cap[0].length);
+ if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
+ tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
+ if (!this.tokens.links[tag]) {
+ this.tokens.links[tag] = {
+ href: cap[2],
+ title: cap[3]
+ };
+ }
+ continue;
+ }
+
+ // table (gfm)
+ if (top && (cap = this.rules.table.exec(src))) {
+ item = {
+ type: 'table',
+ header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : []
+ };
+
+ if (item.header.length === item.align.length) {
+ src = src.substring(cap[0].length);
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = splitCells(
+ item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
+ item.header.length);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+ }
+
+ // lheading
+ if (cap = this.rules.lheading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[2] === '=' ? 1 : 2,
+ text: cap[1]
+ });
+ continue;
+ }
+
+ // top-level paragraph
+ if (top && (cap = this.rules.paragraph.exec(src))) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'paragraph',
+ text: cap[1].charAt(cap[1].length - 1) === '\n'
+ ? cap[1].slice(0, -1)
+ : cap[1]
+ });
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ // Top-level should never reach here.
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'text',
+ text: cap[0]
+ });
+ continue;
+ }
+
+ if (src) {
+ throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return this.tokens;
+};
+
+/**
+ * Inline-Level Grammar
+ */
+
+var inline = {
+ escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
+ autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
+ url: noop,
+ tag: '^comment'
+ + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
+ + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
+ + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
+ + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
+ + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
+ link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
+ reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
+ nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
+ strong: /^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)|^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)/,
+ em: /^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*][\s\S]*?[^\s])\*(?!\*)|^_([^\s_])_(?!_)|^\*([^\s*])\*(?!\*)/,
+ code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
+ br: /^ {2,}\n(?!\s*$)/,
+ del: noop,
+ text: /^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
+};
+
+inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
+
+inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
+inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
+inline.autolink = edit(inline.autolink)
+ .replace('scheme', inline._scheme)
+ .replace('email', inline._email)
+ .getRegex();
+
+inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
+
+inline.tag = edit(inline.tag)
+ .replace('comment', block._comment)
+ .replace('attribute', inline._attribute)
+ .getRegex();
+
+inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/;
+inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f()\\]*\)|[^\s\x00-\x1f()\\])*?)/;
+inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
+
+inline.link = edit(inline.link)
+ .replace('label', inline._label)
+ .replace('href', inline._href)
+ .replace('title', inline._title)
+ .getRegex();
+
+inline.reflink = edit(inline.reflink)
+ .replace('label', inline._label)
+ .getRegex();
+
+/**
+ * Normal Inline Grammar
+ */
+
+inline.normal = merge({}, inline);
+
+/**
+ * Pedantic Inline Grammar
+ */
+
+inline.pedantic = merge({}, inline.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
+ link: edit(/^!?\[(label)\]\((.*?)\)/)
+ .replace('label', inline._label)
+ .getRegex(),
+ reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
+ .replace('label', inline._label)
+ .getRegex()
+});
+
+/**
+ * GFM Inline Grammar
+ */
+
+inline.gfm = merge({}, inline.normal, {
+ escape: edit(inline.escape).replace('])', '~|])').getRegex(),
+ url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/)
+ .replace('email', inline._email)
+ .getRegex(),
+ _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
+ del: /^~~(?=\S)([\s\S]*?\S)~~/,
+ text: edit(inline.text)
+ .replace(']|', '~]|')
+ .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|')
+ .getRegex()
+});
+
+/**
+ * GFM + Line Breaks Inline Grammar
+ */
+
+inline.breaks = merge({}, inline.gfm, {
+ br: edit(inline.br).replace('{2,}', '*').getRegex(),
+ text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()
+});
+
+/**
+ * Inline Lexer & Compiler
+ */
+
+function InlineLexer(links, options) {
+ this.options = options || marked.defaults;
+ this.links = links;
+ this.rules = inline.normal;
+ this.renderer = this.options.renderer || new Renderer();
+ this.renderer.options = this.options;
+
+ if (!this.links) {
+ throw new Error('Tokens array requires a `links` property.');
+ }
+
+ if (this.options.pedantic) {
+ this.rules = inline.pedantic;
+ } else if (this.options.gfm) {
+ if (this.options.breaks) {
+ this.rules = inline.breaks;
+ } else {
+ this.rules = inline.gfm;
+ }
+ }
+}
+
+/**
+ * Expose Inline Rules
+ */
+
+InlineLexer.rules = inline;
+
+/**
+ * Static Lexing/Compiling Method
+ */
+
+InlineLexer.output = function(src, links, options) {
+ var inline = new InlineLexer(links, options);
+ return inline.output(src);
+};
+
+/**
+ * Lexing/Compiling
+ */
+
+InlineLexer.prototype.output = function(src) {
+ var out = '',
+ link,
+ text,
+ href,
+ title,
+ cap;
+
+ while (src) {
+ // escape
+ if (cap = this.rules.escape.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += cap[1];
+ continue;
+ }
+
+ // autolink
+ if (cap = this.rules.autolink.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[2] === '@') {
+ text = escape(this.mangle(cap[1]));
+ href = 'mailto:' + text;
+ } else {
+ text = escape(cap[1]);
+ href = text;
+ }
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // url (gfm)
+ if (!this.inLink && (cap = this.rules.url.exec(src))) {
+ cap[0] = this.rules._backpedal.exec(cap[0])[0];
+ src = src.substring(cap[0].length);
+ if (cap[2] === '@') {
+ text = escape(cap[0]);
+ href = 'mailto:' + text;
+ } else {
+ text = escape(cap[0]);
+ if (cap[1] === 'www.') {
+ href = 'http://' + text;
+ } else {
+ href = text;
+ }
+ }
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // tag
+ if (cap = this.rules.tag.exec(src)) {
+ if (!this.inLink && /^<a /i.test(cap[0])) {
+ this.inLink = true;
+ } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
+ this.inLink = false;
+ }
+ src = src.substring(cap[0].length);
+ out += this.options.sanitize
+ ? this.options.sanitizer
+ ? this.options.sanitizer(cap[0])
+ : escape(cap[0])
+ : cap[0]
+ continue;
+ }
+
+ // link
+ if (cap = this.rules.link.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.inLink = true;
+ href = cap[2];
+ if (this.options.pedantic) {
+ link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
+
+ if (link) {
+ href = link[1];
+ title = link[3];
+ } else {
+ title = '';
+ }
+ } else {
+ title = cap[3] ? cap[3].slice(1, -1) : '';
+ }
+ href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
+ out += this.outputLink(cap, {
+ href: InlineLexer.escapes(href),
+ title: InlineLexer.escapes(title)
+ });
+ this.inLink = false;
+ continue;
+ }
+
+ // reflink, nolink
+ if ((cap = this.rules.reflink.exec(src))
+ || (cap = this.rules.nolink.exec(src))) {
+ src = src.substring(cap[0].length);
+ link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+ link = this.links[link.toLowerCase()];
+ if (!link || !link.href) {
+ out += cap[0].charAt(0);
+ src = cap[0].substring(1) + src;
+ continue;
+ }
+ this.inLink = true;
+ out += this.outputLink(cap, link);
+ this.inLink = false;
+ continue;
+ }
+
+ // strong
+ if (cap = this.rules.strong.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
+ continue;
+ }
+
+ // em
+ if (cap = this.rules.em.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
+ continue;
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.codespan(escape(cap[2].trim(), true));
+ continue;
+ }
+
+ // br
+ if (cap = this.rules.br.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.br();
+ continue;
+ }
+
+ // del (gfm)
+ if (cap = this.rules.del.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.del(this.output(cap[1]));
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.text(escape(this.smartypants(cap[0])));
+ continue;
+ }
+
+ if (src) {
+ throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return out;
+};
+
+InlineLexer.escapes = function(text) {
+ return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
+}
+
+/**
+ * Compile Link
+ */
+
+InlineLexer.prototype.outputLink = function(cap, link) {
+ var href = link.href,
+ title = link.title ? escape(link.title) : null;
+
+ return cap[0].charAt(0) !== '!'
+ ? this.renderer.link(href, title, this.output(cap[1]))
+ : this.renderer.image(href, title, escape(cap[1]));
+};
+
+/**
+ * Smartypants Transformations
+ */
+
+InlineLexer.prototype.smartypants = function(text) {
+ if (!this.options.smartypants) return text;
+ return text
+ // em-dashes
+ .replace(/---/g, '\u2014')
+ // en-dashes
+ .replace(/--/g, '\u2013')
+ // opening singles
+ .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+ // closing singles & apostrophes
+ .replace(/'/g, '\u2019')
+ // opening doubles
+ .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+ // closing doubles
+ .replace(/"/g, '\u201d')
+ // ellipses
+ .replace(/\.{3}/g, '\u2026');
+};
+
+/**
+ * Mangle Links
+ */
+
+InlineLexer.prototype.mangle = function(text) {
+ if (!this.options.mangle) return text;
+ var out = '',
+ l = text.length,
+ i = 0,
+ ch;
+
+ for (; i < l; i++) {
+ ch = text.charCodeAt(i);
+ if (Math.random() > 0.5) {
+ ch = 'x' + ch.toString(16);
+ }
+ out += '&#' + ch + ';';
+ }
+
+ return out;
+};
+
+/**
+ * Renderer
+ */
+
+function Renderer(options) {
+ this.options = options || marked.defaults;
+}
+
+Renderer.prototype.code = function(code, lang, escaped) {
+ if (this.options.highlight) {
+ var out = this.options.highlight(code, lang);
+ if (out != null && out !== code) {
+ escaped = true;
+ code = out;
+ }
+ }
+
+ if (!lang) {
+ return '<pre><code>'
+ + (escaped ? code : escape(code, true))
+ + '</code></pre>';
+ }
+
+ return '<pre><code class="'
+ + this.options.langPrefix
+ + escape(lang, true)
+ + '">'
+ + (escaped ? code : escape(code, true))
+ + '</code></pre>\n';
+};
+
+Renderer.prototype.blockquote = function(quote) {
+ return '<blockquote>\n' + quote + '</blockquote>\n';
+};
+
+Renderer.prototype.html = function(html) {
+ return html;
+};
+
+Renderer.prototype.heading = function(text, level, raw) {
+ if (this.options.headerIds) {
+ return '<h'
+ + level
+ + ' id="'
+ + this.options.headerPrefix
+ + raw.toLowerCase().replace(/[^\w]+/g, '-')
+ + '">'
+ + text
+ + '</h'
+ + level
+ + '>\n';
+ }
+ // ignore IDs
+ return '<h' + level + '>' + text + '</h' + level + '>\n';
+};
+
+Renderer.prototype.hr = function() {
+ return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
+};
+
+Renderer.prototype.list = function(body, ordered, start) {
+ var type = ordered ? 'ol' : 'ul',
+ startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
+ return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
+};
+
+Renderer.prototype.listitem = function(text) {
+ return '<li>' + text + '</li>\n';
+};
+
+Renderer.prototype.checkbox = function(checked) {
+ return '<input '
+ + (checked ? 'checked="" ' : '')
+ + 'disabled="" type="checkbox"'
+ + (this.options.xhtml ? ' /' : '')
+ + '> ';
+}
+
+Renderer.prototype.paragraph = function(text) {
+ return '<p>' + text + '</p>\n';
+};
+
+Renderer.prototype.table = function(header, body) {
+ if (body) body = '<tbody>' + body + '</tbody>';
+
+ return '<table>\n'
+ + '<thead>\n'
+ + header
+ + '</thead>\n'
+ + body
+ + '</table>\n';
+};
+
+Renderer.prototype.tablerow = function(content) {
+ return '<tr>\n' + content + '</tr>\n';
+};
+
+Renderer.prototype.tablecell = function(content, flags) {
+ var type = flags.header ? 'th' : 'td';
+ var tag = flags.align
+ ? '<' + type + ' align="' + flags.align + '">'
+ : '<' + type + '>';
+ return tag + content + '</' + type + '>\n';
+};
+
+// span level renderer
+Renderer.prototype.strong = function(text) {
+ return '<strong>' + text + '</strong>';
+};
+
+Renderer.prototype.em = function(text) {
+ return '<em>' + text + '</em>';
+};
+
+Renderer.prototype.codespan = function(text) {
+ return '<code>' + text + '</code>';
+};
+
+Renderer.prototype.br = function() {
+ return this.options.xhtml ? '<br/>' : '<br>';
+};
+
+Renderer.prototype.del = function(text) {
+ return '<del>' + text + '</del>';
+};
+
+Renderer.prototype.link = function(href, title, text) {
+ if (this.options.sanitize) {
+ try {
+ var prot = decodeURIComponent(unescape(href))
+ .replace(/[^\w:]/g, '')
+ .toLowerCase();
+ } catch (e) {
+ return text;
+ }
+ if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
+ return text;
+ }
+ }
+ if (this.options.baseUrl && !originIndependentUrl.test(href)) {
+ href = resolveUrl(this.options.baseUrl, href);
+ }
+ try {
+ href = encodeURI(href).replace(/%25/g, '%');
+ } catch (e) {
+ return text;
+ }
+ var out = '<a href="' + escape(href) + '"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += '>' + text + '</a>';
+ return out;
+};
+
+Renderer.prototype.image = function(href, title, text) {
+ if (this.options.baseUrl && !originIndependentUrl.test(href)) {
+ href = resolveUrl(this.options.baseUrl, href);
+ }
+ var out = '<img src="' + href + '" alt="' + text + '"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += this.options.xhtml ? '/>' : '>';
+ return out;
+};
+
+Renderer.prototype.text = function(text) {
+ return text;
+};
+
+/**
+ * TextRenderer
+ * returns only the textual part of the token
+ */
+
+function TextRenderer() {}
+
+// no need for block level renderers
+
+TextRenderer.prototype.strong =
+TextRenderer.prototype.em =
+TextRenderer.prototype.codespan =
+TextRenderer.prototype.del =
+TextRenderer.prototype.text = function (text) {
+ return text;
+}
+
+TextRenderer.prototype.link =
+TextRenderer.prototype.image = function(href, title, text) {
+ return '' + text;
+}
+
+TextRenderer.prototype.br = function() {
+ return '';
+}
+
+/**
+ * Parsing & Compiling
+ */
+
+function Parser(options) {
+ this.tokens = [];
+ this.token = null;
+ this.options = options || marked.defaults;
+ this.options.renderer = this.options.renderer || new Renderer();
+ this.renderer = this.options.renderer;
+ this.renderer.options = this.options;
+}
+
+/**
+ * Static Parse Method
+ */
+
+Parser.parse = function(src, options) {
+ var parser = new Parser(options);
+ return parser.parse(src);
+};
+
+/**
+ * Parse Loop
+ */
+
+Parser.prototype.parse = function(src) {
+ this.inline = new InlineLexer(src.links, this.options);
+ // use an InlineLexer with a TextRenderer to extract pure text
+ this.inlineText = new InlineLexer(
+ src.links,
+ merge({}, this.options, {renderer: new TextRenderer()})
+ );
+ this.tokens = src.reverse();
+
+ var out = '';
+ while (this.next()) {
+ out += this.tok();
+ }
+
+ return out;
+};
+
+/**
+ * Next Token
+ */
+
+Parser.prototype.next = function() {
+ return this.token = this.tokens.pop();
+};
+
+/**
+ * Preview Next Token
+ */
+
+Parser.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0;
+};
+
+/**
+ * Parse Text Tokens
+ */
+
+Parser.prototype.parseText = function() {
+ var body = this.token.text;
+
+ while (this.peek().type === 'text') {
+ body += '\n' + this.next().text;
+ }
+
+ return this.inline.output(body);
+};
+
+/**
+ * Parse Current Token
+ */
+
+Parser.prototype.tok = function() {
+ switch (this.token.type) {
+ case 'space': {
+ return '';
+ }
+ case 'hr': {
+ return this.renderer.hr();
+ }
+ case 'heading': {
+ return this.renderer.heading(
+ this.inline.output(this.token.text),
+ this.token.depth,
+ unescape(this.inlineText.output(this.token.text)));
+ }
+ case 'code': {
+ return this.renderer.code(this.token.text,
+ this.token.lang,
+ this.token.escaped);
+ }
+ case 'table': {
+ var header = '',
+ body = '',
+ i,
+ row,
+ cell,
+ j;
+
+ // header
+ cell = '';
+ for (i = 0; i < this.token.header.length; i++) {
+ cell += this.renderer.tablecell(
+ this.inline.output(this.token.header[i]),
+ { header: true, align: this.token.align[i] }
+ );
+ }
+ header += this.renderer.tablerow(cell);
+
+ for (i = 0; i < this.token.cells.length; i++) {
+ row = this.token.cells[i];
+
+ cell = '';
+ for (j = 0; j < row.length; j++) {
+ cell += this.renderer.tablecell(
+ this.inline.output(row[j]),
+ { header: false, align: this.token.align[j] }
+ );
+ }
+
+ body += this.renderer.tablerow(cell);
+ }
+ return this.renderer.table(header, body);
+ }
+ case 'blockquote_start': {
+ body = '';
+
+ while (this.next().type !== 'blockquote_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.blockquote(body);
+ }
+ case 'list_start': {
+ body = '';
+ var ordered = this.token.ordered,
+ start = this.token.start;
+
+ while (this.next().type !== 'list_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.list(body, ordered, start);
+ }
+ case 'list_item_start': {
+ body = '';
+
+ if (this.token.task) {
+ body += this.renderer.checkbox(this.token.checked);
+ }
+
+ while (this.next().type !== 'list_item_end') {
+ body += this.token.type === 'text'
+ ? this.parseText()
+ : this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'loose_item_start': {
+ body = '';
+
+ while (this.next().type !== 'list_item_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'html': {
+ // TODO parse inline content if parameter markdown=1
+ return this.renderer.html(this.token.text);
+ }
+ case 'paragraph': {
+ return this.renderer.paragraph(this.inline.output(this.token.text));
+ }
+ case 'text': {
+ return this.renderer.paragraph(this.parseText());
+ }
+ }
+};
+
+/**
+ * Helpers
+ */
+
+function escape(html, encode) {
+ return html
+ .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;')
+ .replace(/"/g, '&quot;')
+ .replace(/'/g, '&#39;');
+}
+
+function unescape(html) {
+ // explicitly match decimal, hex, and named HTML entities
+ return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) {
+ n = n.toLowerCase();
+ if (n === 'colon') return ':';
+ if (n.charAt(0) === '#') {
+ return n.charAt(1) === 'x'
+ ? String.fromCharCode(parseInt(n.substring(2), 16))
+ : String.fromCharCode(+n.substring(1));
+ }
+ return '';
+ });
+}
+
+function edit(regex, opt) {
+ regex = regex.source || regex;
+ opt = opt || '';
+ return {
+ replace: function(name, val) {
+ val = val.source || val;
+ val = val.replace(/(^|[^\[])\^/g, '$1');
+ regex = regex.replace(name, val);
+ return this;
+ },
+ getRegex: function() {
+ return new RegExp(regex, opt);
+ }
+ };
+}
+
+function resolveUrl(base, href) {
+ if (!baseUrls[' ' + base]) {
+ // we can ignore everything in base after the last slash of its path component,
+ // but we might need to add _that_
+ // https://tools.ietf.org/html/rfc3986#section-3
+ if (/^[^:]+:\/*[^/]*$/.test(base)) {
+ baseUrls[' ' + base] = base + '/';
+ } else {
+ baseUrls[' ' + base] = base.replace(/[^/]*$/, '');
+ }
+ }
+ base = baseUrls[' ' + base];
+
+ if (href.slice(0, 2) === '//') {
+ return base.replace(/:[\s\S]*/, ':') + href;
+ } else if (href.charAt(0) === '/') {
+ return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href;
+ } else {
+ return base + href;
+ }
+}
+var baseUrls = {};
+var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
+
+function noop() {}
+noop.exec = noop;
+
+function merge(obj) {
+ var i = 1,
+ target,
+ key;
+
+ for (; i < arguments.length; i++) {
+ target = arguments[i];
+ for (key in target) {
+ if (Object.prototype.hasOwnProperty.call(target, key)) {
+ obj[key] = target[key];
+ }
+ }
+ }
+
+ return obj;
+}
+
+function splitCells(tableRow, count) {
+ var cells = tableRow.replace(/([^\\])\|/g, '$1 |').split(/ +\| */),
+ i = 0;
+
+ if (cells.length > count) {
+ cells.splice(count);
+ } else {
+ while (cells.length < count) cells.push('');
+ }
+
+ for (; i < cells.length; i++) {
+ cells[i] = cells[i].replace(/\\\|/g, '|');
+ }
+ return cells;
+}
+
+/**
+ * Marked
+ */
+
+function marked(src, opt, callback) {
+ // throw error in case of non string input
+ if (typeof src === 'undefined' || src === null) {
+ throw new Error('marked(): input parameter is undefined or null');
+ }
+ if (typeof src !== 'string') {
+ throw new Error('marked(): input parameter is of type '
+ + Object.prototype.toString.call(src) + ', string expected');
+ }
+
+ if (callback || typeof opt === 'function') {
+ if (!callback) {
+ callback = opt;
+ opt = null;
+ }
+
+ opt = merge({}, marked.defaults, opt || {});
+
+ var highlight = opt.highlight,
+ tokens,
+ pending,
+ i = 0;
+
+ try {
+ tokens = Lexer.lex(src, opt)
+ } catch (e) {
+ return callback(e);
+ }
+
+ pending = tokens.length;
+
+ var done = function(err) {
+ if (err) {
+ opt.highlight = highlight;
+ return callback(err);
+ }
+
+ var out;
+
+ try {
+ out = Parser.parse(tokens, opt);
+ } catch (e) {
+ err = e;
+ }
+
+ opt.highlight = highlight;
+
+ return err
+ ? callback(err)
+ : callback(null, out);
+ };
+
+ if (!highlight || highlight.length < 3) {
+ return done();
+ }
+
+ delete opt.highlight;
+
+ if (!pending) return done();
+
+ for (; i < tokens.length; i++) {
+ (function(token) {
+ if (token.type !== 'code') {
+ return --pending || done();
+ }
+ return highlight(token.text, token.lang, function(err, code) {
+ if (err) return done(err);
+ if (code == null || code === token.text) {
+ return --pending || done();
+ }
+ token.text = code;
+ token.escaped = true;
+ --pending || done();
+ });
+ })(tokens[i]);
+ }
+
+ return;
+ }
+ try {
+ if (opt) opt = merge({}, marked.defaults, opt);
+ return Parser.parse(Lexer.lex(src, opt), opt);
+ } catch (e) {
+ e.message += '\nPlease report this to https://github.com/markedjs/marked.';
+ if ((opt || marked.defaults).silent) {
+ return '<p>An error occurred:</p><pre>'
+ + escape(e.message + '', true)
+ + '</pre>';
+ }
+ throw e;
+ }
+}
+
+/**
+ * Options
+ */
+
+marked.options =
+marked.setOptions = function(opt) {
+ merge(marked.defaults, opt);
+ return marked;
+};
+
+marked.getDefaults = function () {
+ return {
+ baseUrl: null,
+ breaks: false,
+ gfm: true,
+ headerIds: true,
+ headerPrefix: '',
+ highlight: null,
+ langPrefix: 'language-',
+ mangle: true,
+ pedantic: false,
+ renderer: new Renderer(),
+ sanitize: false,
+ sanitizer: null,
+ silent: false,
+ smartLists: false,
+ smartypants: false,
+ tables: true,
+ xhtml: false
+ };
+}
+
+marked.defaults = marked.getDefaults();
+
+/**
+ * Expose
+ */
+
+marked.Parser = Parser;
+marked.parser = Parser.parse;
+
+marked.Renderer = Renderer;
+marked.TextRenderer = TextRenderer;
+
+marked.Lexer = Lexer;
+marked.lexer = Lexer.lex;
+
+marked.InlineLexer = InlineLexer;
+marked.inlineLexer = InlineLexer.output;
+
+marked.parse = marked;
+
+if (typeof module !== 'undefined' && typeof exports === 'object') {
+ module.exports = marked;
+} else if (typeof define === 'function' && define.amd) {
+ define(function() { return marked; });
+} else {
+ root.marked = marked;
+}
+})(this || (typeof window !== 'undefined' ? window : global));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1 b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1
new file mode 100644
index 00000000000..a8e41b50311
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1
@@ -0,0 +1,91 @@
+.ds q \N'34'
+.TH marked 1 "2014-01-31" "v0.3.1" "marked.js"
+
+.SH NAME
+marked \- a javascript markdown parser
+
+.SH SYNOPSIS
+.B marked
+[\-o \fI<output>\fP] [\-i \fI<input>\fP] [\-\-help]
+[\-\-tokens] [\-\-pedantic] [\-\-gfm]
+[\-\-breaks] [\-\-tables] [\-\-sanitize]
+[\-\-smart\-lists] [\-\-lang\-prefix \fI<prefix>\fP]
+[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP]
+
+.SH DESCRIPTION
+.B marked
+is a full-featured javascript markdown parser, built for speed. It also includes
+multiple GFM features.
+
+.SH EXAMPLES
+.TP
+cat in.md | marked > out.html
+.TP
+echo "hello *world*" | marked
+.TP
+marked \-o out.html \-i in.md \-\-gfm
+.TP
+marked \-\-output="hello world.html" \-i in.md \-\-no-breaks
+
+.SH OPTIONS
+.TP
+.BI \-o,\ \-\-output\ [\fIoutput\fP]
+Specify file output. If none is specified, write to stdout.
+.TP
+.BI \-i,\ \-\-input\ [\fIinput\fP]
+Specify file input, otherwise use last argument as input file. If no input file
+is specified, read from stdin.
+.TP
+.BI \-t,\ \-\-tokens
+Output a token stream instead of html.
+.TP
+.BI \-\-pedantic
+Conform to obscure parts of markdown.pl as much as possible. Don't fix original
+markdown bugs.
+.TP
+.BI \-\-gfm
+Enable github flavored markdown.
+.TP
+.BI \-\-breaks
+Enable GFM line breaks. Only works with the gfm option.
+.TP
+.BI \-\-tables
+Enable GFM tables. Only works with the gfm option.
+.TP
+.BI \-\-sanitize
+Sanitize output. Ignore any HTML input.
+.TP
+.BI \-\-smart\-lists
+Use smarter list behavior than the original markdown.
+.TP
+.BI \-\-lang\-prefix\ [\fIprefix\fP]
+Set the prefix for code block classes.
+.TP
+.BI \-\-mangle
+Mangle email addresses.
+.TP
+.BI \-\-no\-sanitize,\ \-no-etc...
+The inverse of any of the marked options above.
+.TP
+.BI \-\-silent
+Silence error output.
+.TP
+.BI \-h,\ \-\-help
+Display help information.
+
+.SH CONFIGURATION
+For configuring and running programmatically.
+
+.B Example
+
+ require('marked')('*foo*', { gfm: true });
+
+.SH BUGS
+Please report any bugs to https://github.com/markedjs/marked.
+
+.SH LICENSE
+Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).
+
+.SH "SEE ALSO"
+.BR markdown(1),
+.BR node.js(1)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1.txt b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1.txt
new file mode 100644
index 00000000000..fd9b37ef334
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/man/marked.1.txt
@@ -0,0 +1,96 @@
+marked(1) marked.js marked(1)
+
+
+
+NAME
+ marked - a javascript markdown parser
+
+
+SYNOPSIS
+ marked [-o <output>] [-i <input>] [--help] [--tokens] [--pedantic]
+ [--gfm] [--breaks] [--tables] [--sanitize] [--smart-lists] [--lang-pre‐
+ fix <prefix>] [--no-etc...] [--silent] [filename]
+
+
+DESCRIPTION
+ marked is a full-featured javascript markdown parser, built for speed.
+ It also includes multiple GFM features.
+
+
+EXAMPLES
+ cat in.md | marked > out.html
+
+ echo "hello *world*" | marked
+
+ marked -o out.html -i in.md --gfm
+
+ marked --output="hello world.html" -i in.md --no-breaks
+
+
+OPTIONS
+ -o, --output [output]
+ Specify file output. If none is specified, write to stdout.
+
+ -i, --input [input]
+ Specify file input, otherwise use last argument as input file.
+ If no input file is specified, read from stdin.
+
+ -t, --tokens
+ Output a token stream instead of html.
+
+ --pedantic
+ Conform to obscure parts of markdown.pl as much as possible.
+ Don't fix original markdown bugs.
+
+ --gfm Enable github flavored markdown.
+
+ --breaks
+ Enable GFM line breaks. Only works with the gfm option.
+
+ --tables
+ Enable GFM tables. Only works with the gfm option.
+
+ --sanitize
+ Sanitize output. Ignore any HTML input.
+
+ --smart-lists
+ Use smarter list behavior than the original markdown.
+
+ --lang-prefix [prefix]
+ Set the prefix for code block classes.
+
+ --mangle
+ Mangle email addresses.
+
+ --no-sanitize, -no-etc...
+ The inverse of any of the marked options above.
+
+ --silent
+ Silence error output.
+
+ -h, --help
+ Display help information.
+
+
+CONFIGURATION
+ For configuring and running programmatically.
+
+ Example
+
+ require('marked')('*foo*', { gfm: true });
+
+
+BUGS
+ Please report any bugs to https://github.com/chjj/marked.
+
+
+LICENSE
+ Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).
+
+
+SEE ALSO
+ markdown(1), node.js(1)
+
+
+
+v0.3.1 2014-01-31 marked(1)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/marked.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/marked.min.js
new file mode 100644
index 00000000000..d6e5f23790a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/marked.min.js
@@ -0,0 +1,6 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/markedjs/marked
+ */
+!function(e){"use strict";var t={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:d,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:d,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:d,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function n(e){this.tokens=[],this.tokens.links={},this.options=e||m.defaults,this.rules=t.normal,this.options.pedantic?this.rules=t.pedantic:this.options.gfm&&(this.options.tables?this.rules=t.tables:this.rules=t.gfm)}t._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,t._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,t.def=p(t.def).replace("label",t._label).replace("title",t._title).getRegex(),t.bullet=/(?:[*+-]|\d+\.)/,t.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,t.item=p(t.item,"gm").replace(/bull/g,t.bullet).getRegex(),t.list=p(t.list).replace(/bull/g,t.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+t.def.source+")").getRegex(),t._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",t._comment=/<!--(?!-?>)[\s\S]*?-->/,t.html=p(t.html,"i").replace("comment",t._comment).replace("tag",t._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),t.paragraph=p(t.paragraph).replace("hr",t.hr).replace("heading",t.heading).replace("lheading",t.lheading).replace("tag",t._tag).getRegex(),t.blockquote=p(t.blockquote).replace("paragraph",t.paragraph).getRegex(),t.normal=f({},t),t.gfm=f({},t.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),t.gfm.paragraph=p(t.paragraph).replace("(?!","(?!"+t.gfm.fences.source.replace("\\1","\\2")+"|"+t.list.source.replace("\\1","\\3")+"|").getRegex(),t.tables=f({},t.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),t.pedantic=f({},t.normal,{html:p("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",t._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),n.rules=t,n.lex=function(e,t){return new n(t).lex(e)},n.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},n.prototype.token=function(e,n){var r,s,i,l,o,a,h,p,u,c,g,d,f;for(e=e.replace(/^ +$/gm,"");e;)if((i=this.rules.newline.exec(e))&&(e=e.substring(i[0].length),i[0].length>1&&this.tokens.push({type:"space"})),i=this.rules.code.exec(e))e=e.substring(i[0].length),i=i[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?i:i.replace(/\n+$/,"")});else if(i=this.rules.fences.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"code",lang:i[2],text:i[3]||""});else if(i=this.rules.heading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:i[1].length,text:i[2]});else if(n&&(i=this.rules.nptable.exec(e))&&(a={type:"table",header:b(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/\n$/,"").split("\n"):[]}).header.length===a.align.length){for(e=e.substring(i[0].length),p=0;p<a.align.length;p++)/^ *-+: *$/.test(a.align[p])?a.align[p]="right":/^ *:-+: *$/.test(a.align[p])?a.align[p]="center":/^ *:-+ *$/.test(a.align[p])?a.align[p]="left":a.align[p]=null;for(p=0;p<a.cells.length;p++)a.cells[p]=b(a.cells[p],a.header.length);this.tokens.push(a)}else if(i=this.rules.hr.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"hr"});else if(i=this.rules.blockquote.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"blockquote_start"}),i=i[0].replace(/^ *> ?/gm,""),this.token(i,n),this.tokens.push({type:"blockquote_end"});else if(i=this.rules.list.exec(e)){for(e=e.substring(i[0].length),g=(l=i[2]).length>1,this.tokens.push({type:"list_start",ordered:g,start:g?+l:""}),r=!1,c=(i=i[0].match(this.rules.item)).length,p=0;p<c;p++)h=(a=i[p]).length,~(a=a.replace(/^ *([*+-]|\d+\.) +/,"")).indexOf("\n ")&&(h-=a.length,a=this.options.pedantic?a.replace(/^ {1,4}/gm,""):a.replace(new RegExp("^ {1,"+h+"}","gm"),"")),this.options.smartLists&&p!==c-1&&(l===(o=t.bullet.exec(i[p+1])[0])||l.length>1&&o.length>1||(e=i.slice(p+1).join("\n")+e,p=c-1)),s=r||/\n\n(?!\s*$)/.test(a),p!==c-1&&(r="\n"===a.charAt(a.length-1),s||(s=r)),f=void 0,(d=/^\[[ xX]\] /.test(a))&&(f=" "!==a[1],a=a.replace(/^\[[ xX]\] +/,"")),this.tokens.push({type:s?"loose_item_start":"list_item_start",task:d,checked:f}),this.token(a,!1),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(i=this.rules.html.exec(e))e=e.substring(i[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===i[1]||"script"===i[1]||"style"===i[1]),text:i[0]});else if(n&&(i=this.rules.def.exec(e)))e=e.substring(i[0].length),i[3]&&(i[3]=i[3].substring(1,i[3].length-1)),u=i[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[u]||(this.tokens.links[u]={href:i[2],title:i[3]});else if(n&&(i=this.rules.table.exec(e))&&(a={type:"table",header:b(i[1].replace(/^ *| *\| *$/g,"")),align:i[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:i[3]?i[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]}).header.length===a.align.length){for(e=e.substring(i[0].length),p=0;p<a.align.length;p++)/^ *-+: *$/.test(a.align[p])?a.align[p]="right":/^ *:-+: *$/.test(a.align[p])?a.align[p]="center":/^ *:-+ *$/.test(a.align[p])?a.align[p]="left":a.align[p]=null;for(p=0;p<a.cells.length;p++)a.cells[p]=b(a.cells[p].replace(/^ *\| *| *\| *$/g,""),a.header.length);this.tokens.push(a)}else if(i=this.rules.lheading.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"heading",depth:"="===i[2]?1:2,text:i[1]});else if(n&&(i=this.rules.paragraph.exec(e)))e=e.substring(i[0].length),this.tokens.push({type:"paragraph",text:"\n"===i[1].charAt(i[1].length-1)?i[1].slice(0,-1):i[1]});else if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.tokens.push({type:"text",text:i[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var r={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:d,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)|^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)/,em:/^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*][\s\S]*?[^\s])\*(?!\*)|^_([^\s_])_(?!_)|^\*([^\s*])\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:d,text:/^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/};function s(e,t){if(this.options=t||m.defaults,this.links=e,this.rules=r.normal,this.renderer=this.options.renderer||new i,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=r.pedantic:this.options.gfm&&(this.options.breaks?this.rules=r.breaks:this.rules=r.gfm)}function i(e){this.options=e||m.defaults}function l(){}function o(e){this.tokens=[],this.token=null,this.options=e||m.defaults,this.options.renderer=this.options.renderer||new i,this.renderer=this.options.renderer,this.renderer.options=this.options}function a(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function h(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function p(e,t){return e=e.source||e,t=t||"",{replace:function(t,n){return n=(n=n.source||n).replace(/(^|[^\[])\^/g,"$1"),e=e.replace(t,n),this},getRegex:function(){return new RegExp(e,t)}}}function u(e,t){return c[" "+e]||(/^[^:]+:\/*[^/]*$/.test(e)?c[" "+e]=e+"/":c[" "+e]=e.replace(/[^/]*$/,"")),e=c[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^/]*)[\s\S]*/,"$1")+t:e+t}r._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,r._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,r._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,r.autolink=p(r.autolink).replace("scheme",r._scheme).replace("email",r._email).getRegex(),r._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,r.tag=p(r.tag).replace("comment",t._comment).replace("attribute",r._attribute).getRegex(),r._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,r._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f()\\]*\)|[^\s\x00-\x1f()\\])*?)/,r._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,r.link=p(r.link).replace("label",r._label).replace("href",r._href).replace("title",r._title).getRegex(),r.reflink=p(r.reflink).replace("label",r._label).getRegex(),r.normal=f({},r),r.pedantic=f({},r.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:p(/^!?\[(label)\]\((.*?)\)/).replace("label",r._label).getRegex(),reflink:p(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",r._label).getRegex()}),r.gfm=f({},r.normal,{escape:p(r.escape).replace("])","~|])").getRegex(),url:p(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("email",r._email).getRegex(),_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:p(r.text).replace("]|","~]|").replace("|","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|").getRegex()}),r.breaks=f({},r.gfm,{br:p(r.br).replace("{2,}","*").getRegex(),text:p(r.gfm.text).replace("{2,}","*").getRegex()}),s.rules=r,s.output=function(e,t,n){return new s(t,n).output(e)},s.prototype.output=function(e){for(var t,n,r,i,l,o="";e;)if(l=this.rules.escape.exec(e))e=e.substring(l[0].length),o+=l[1];else if(l=this.rules.autolink.exec(e))e=e.substring(l[0].length),r="@"===l[2]?"mailto:"+(n=a(this.mangle(l[1]))):n=a(l[1]),o+=this.renderer.link(r,null,n);else if(this.inLink||!(l=this.rules.url.exec(e))){if(l=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(l[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(l[0])&&(this.inLink=!1),e=e.substring(l[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(l[0]):a(l[0]):l[0];else if(l=this.rules.link.exec(e))e=e.substring(l[0].length),this.inLink=!0,r=l[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],i=t[3]):i="":i=l[3]?l[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),o+=this.outputLink(l,{href:s.escapes(r),title:s.escapes(i)}),this.inLink=!1;else if((l=this.rules.reflink.exec(e))||(l=this.rules.nolink.exec(e))){if(e=e.substring(l[0].length),t=(l[2]||l[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){o+=l[0].charAt(0),e=l[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(l,t),this.inLink=!1}else if(l=this.rules.strong.exec(e))e=e.substring(l[0].length),o+=this.renderer.strong(this.output(l[4]||l[3]||l[2]||l[1]));else if(l=this.rules.em.exec(e))e=e.substring(l[0].length),o+=this.renderer.em(this.output(l[6]||l[5]||l[4]||l[3]||l[2]||l[1]));else if(l=this.rules.code.exec(e))e=e.substring(l[0].length),o+=this.renderer.codespan(a(l[2].trim(),!0));else if(l=this.rules.br.exec(e))e=e.substring(l[0].length),o+=this.renderer.br();else if(l=this.rules.del.exec(e))e=e.substring(l[0].length),o+=this.renderer.del(this.output(l[1]));else if(l=this.rules.text.exec(e))e=e.substring(l[0].length),o+=this.renderer.text(a(this.smartypants(l[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else l[0]=this.rules._backpedal.exec(l[0])[0],e=e.substring(l[0].length),"@"===l[2]?r="mailto:"+(n=a(l[0])):(n=a(l[0]),r="www."===l[1]?"http://"+n:n),o+=this.renderer.link(r,null,n);return o},s.escapes=function(e){return e?e.replace(s.rules._escapes,"$1"):e},s.prototype.outputLink=function(e,t){var n=t.href,r=t.title?a(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,a(e[1]))},s.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},s.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,s=0;s<r;s++)t=e.charCodeAt(s),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},i.prototype.code=function(e,t,n){if(this.options.highlight){var r=this.options.highlight(e,t);null!=r&&r!==e&&(n=!0,e=r)}return t?'<pre><code class="'+this.options.langPrefix+a(t,!0)+'">'+(n?e:a(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:a(e,!0))+"</code></pre>"},i.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},i.prototype.html=function(e){return e},i.prototype.heading=function(e,t,n){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+n.toLowerCase().replace(/[^\w]+/g,"-")+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},i.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},i.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},i.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},i.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},i.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},i.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},i.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},i.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},i.prototype.strong=function(e){return"<strong>"+e+"</strong>"},i.prototype.em=function(e){return"<em>"+e+"</em>"},i.prototype.codespan=function(e){return"<code>"+e+"</code>"},i.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},i.prototype.del=function(e){return"<del>"+e+"</del>"},i.prototype.link=function(e,t,n){if(this.options.sanitize){try{var r=decodeURIComponent(h(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return n}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return n}this.options.baseUrl&&!g.test(e)&&(e=u(this.options.baseUrl,e));try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return n}var s='<a href="'+a(e)+'"';return t&&(s+=' title="'+t+'"'),s+=">"+n+"</a>"},i.prototype.image=function(e,t,n){this.options.baseUrl&&!g.test(e)&&(e=u(this.options.baseUrl,e));var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},i.prototype.text=function(e){return e},l.prototype.strong=l.prototype.em=l.prototype.codespan=l.prototype.del=l.prototype.text=function(e){return e},l.prototype.link=l.prototype.image=function(e,t,n){return""+n},l.prototype.br=function(){return""},o.parse=function(e,t){return new o(t).parse(e)},o.prototype.parse=function(e){this.inline=new s(e.links,this.options),this.inlineText=new s(e.links,f({},this.options,{renderer:new l})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},o.prototype.next=function(){return this.token=this.tokens.pop()},o.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},o.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},o.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,h(this.inlineText.output(this.token.text)));case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s="",i="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(s+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});i+=this.renderer.tablerow(n)}return this.renderer.table(s,i);case"blockquote_start":for(i="";"blockquote_end"!==this.next().type;)i+=this.tok();return this.renderer.blockquote(i);case"list_start":i="";for(var l=this.token.ordered,o=this.token.start;"list_end"!==this.next().type;)i+=this.tok();return this.renderer.list(i,l,o);case"list_item_start":for(i="",this.token.task&&(i+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)i+="text"===this.token.type?this.parseText():this.tok();return this.renderer.listitem(i);case"loose_item_start":for(i="";"list_item_end"!==this.next().type;)i+=this.tok();return this.renderer.listitem(i);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText())}};var c={},g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function d(){}function f(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function b(e,t){var n=e.replace(/([^\\])\|/g,"$1 |").split(/ +\| */),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].replace(/\\\|/g,"|");return n}function m(e,t,r){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof t){r||(r=t,t=null);var s,i,l=(t=f({},m.defaults,t||{})).highlight,h=0;try{s=n.lex(e,t)}catch(e){return r(e)}i=s.length;var p=function(e){if(e)return t.highlight=l,r(e);var n;try{n=o.parse(s,t)}catch(t){e=t}return t.highlight=l,e?r(e):r(null,n)};if(!l||l.length<3)return p();if(delete t.highlight,!i)return p();for(;h<s.length;h++)!function(e){"code"!==e.type?--i||p():l(e.text,e.lang,function(t,n){return t?p(t):null==n||n===e.text?--i||p():(e.text=n,e.escaped=!0,void(--i||p()))})}(s[h])}else try{return t&&(t=f({},m.defaults,t)),o.parse(n.lex(e,t),t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(t||m.defaults).silent)return"<p>An error occurred:</p><pre>"+a(e.message+"",!0)+"</pre>";throw e}}d.exec=d,m.options=m.setOptions=function(e){return f(m.defaults,e),m},m.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new i,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},m.defaults=m.getDefaults(),m.Parser=o,m.parser=o.parse,m.Renderer=i,m.TextRenderer=l,m.Lexer=n,m.lexer=n.lex,m.InlineLexer=s,m.inlineLexer=s.output,m.parse=m,"undefined"!=typeof module&&"object"==typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):e.marked=m}(this||("undefined"!=typeof window?window:global)); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package-lock.json
new file mode 100644
index 00000000000..1602f8d5510
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package-lock.json
@@ -0,0 +1,2501 @@
+{
+ "name": "marked",
+ "version": "0.4.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.5"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.5"
+ }
+ },
+ "@types/node": {
+ "version": "9.6.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.5.tgz",
+ "integrity": "sha512-NOLEgsT6UiDTjnWG5Hd2Mg25LRyz/oe8ql3wbjzgSFeRzRROhPmtlsvIrei4B46UjERF0td9SZ1ZXPLOdcrBHg==",
+ "dev": true
+ },
+ "@types/qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-mNhVdZHdtKHMMxbqzNK3RzkBcN1cux3AvuCYGTvjEIQT2uheH3eCAyYsbMbh2Bq8nXkeOWs1kyDiF7geWRFQ4Q==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
+ "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "coa": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-0.4.0.tgz",
+ "integrity": "sha1-JSvBvpdArxXYJuSQ6LE5PC/ioGI=",
+ "dev": true,
+ "requires": {
+ "q": "0.9.7"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.14.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz",
+ "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "contains-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+ "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "diff": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-1.0.8.tgz",
+ "integrity": "sha1-NDJ2MI7Jkbe8giZ+1VvBQR+XFmY=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz",
+ "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.1.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0",
+ "espree": "3.5.3",
+ "esquery": "1.0.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "11.3.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.1.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.5",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.5.0",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.3.3",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-standard": {
+ "version": "11.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0-beta.0.tgz",
+ "integrity": "sha512-f+vs5HAHQo7NRZ3hVe+UVdT5DbebMNaFTWFp95orJ0LUdYPoWdM8xw/bMeO/IZMvHOPmIteGKGc2QOhSXd5nRg==",
+ "dev": true
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "resolve": "1.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz",
+ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "pkg-dir": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz",
+ "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1",
+ "contains-path": "0.1.0",
+ "debug": "2.6.9",
+ "doctrine": "1.5.0",
+ "eslint-import-resolver-node": "0.3.2",
+ "eslint-module-utils": "2.1.1",
+ "has": "1.0.1",
+ "lodash.cond": "4.5.2",
+ "minimatch": "3.0.4",
+ "read-pkg-up": "2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ }
+ }
+ },
+ "eslint-plugin-node": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz",
+ "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==",
+ "dev": true,
+ "requires": {
+ "ignore": "3.3.7",
+ "minimatch": "3.0.4",
+ "resolve": "1.5.0",
+ "semver": "5.3.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-promise": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz",
+ "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==",
+ "dev": true
+ },
+ "eslint-plugin-standard": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz",
+ "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=",
+ "dev": true
+ },
+ "eslint-plugin-vuln-regex-detector": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vuln-regex-detector/-/eslint-plugin-vuln-regex-detector-1.0.4.tgz",
+ "integrity": "sha512-MlGNEvfk/lmHrbp6gIXKP2NPedA+wX2+KwezolXLE6t9q0pcmohkYm2EKmgL9z5n57CAIYFJ/I4SSI3ANWyl/A==",
+ "dev": true,
+ "requires": {
+ "requireindex": "1.1.0",
+ "vuln-regex-detector": "1.3.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz",
+ "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.4.1",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ }
+ }
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
+ }
+ },
+ "front-matter": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-2.3.0.tgz",
+ "integrity": "sha1-cgOviWzjV+4E4qpFFp6pHtf2dQQ=",
+ "dev": true,
+ "requires": {
+ "js-yaml": "3.10.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.3.3",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
+ "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==",
+ "dev": true
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.3.3",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
+ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "dev": true,
+ "requires": {
+ "function-bind": "1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "html-differ": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/html-differ/-/html-differ-1.3.4.tgz",
+ "integrity": "sha1-n0e66XV9JRPR7a2Cc8xeQ/wAbMY=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.0.0",
+ "coa": "0.4.0",
+ "diff": "1.0.8",
+ "lodash": "2.4.1",
+ "parse5": "1.1.3",
+ "vow": "0.4.3",
+ "vow-fs": "0.3.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz",
+ "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
+ "integrity": "sha1-s89O0P9Tl8mcdbj2edsvUoMfltw=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "1.0.3",
+ "strip-ansi": "2.0.1",
+ "supports-color": "1.3.1"
+ }
+ },
+ "has-ansi": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
+ "integrity": "sha1-wLWxYV2eOCsP9nFp2We0JeSMpTg=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "1.1.1",
+ "get-stdin": "4.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
+ "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "1.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz",
+ "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=",
+ "dev": true
+ }
+ }
+ },
+ "http-basic": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-7.0.0.tgz",
+ "integrity": "sha1-gvClBr6UJzLsje6+6A50bvVzbbo=",
+ "dev": true,
+ "requires": {
+ "@types/concat-stream": "1.6.0",
+ "@types/node": "9.6.5",
+ "caseless": "0.12.0",
+ "concat-stream": "1.6.0",
+ "http-response-object": "3.0.1",
+ "parse-cache-control": "1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.1.tgz",
+ "integrity": "sha512-6L0Fkd6TozA8kFSfh9Widst0wfza3U1Ex2RjJ6zNDK0vR1U1auUR6jY4Nn2Xl7CCy0ikFmxW1XcspVpb9RvwTg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.5"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.3.3",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.5",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "jasmine": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.1.0.tgz",
+ "integrity": "sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "jasmine-core": "3.1.0"
+ }
+ },
+ "jasmine-core": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.1.0.tgz",
+ "integrity": "sha1-pHheE11d9lAk38kiSVPfWFvSdmw=",
+ "dev": true
+ },
+ "jasmine2-custom-message": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/jasmine2-custom-message/-/jasmine2-custom-message-0.9.0.tgz",
+ "integrity": "sha512-HQMYCNaieAwVkt3KLNNcZz7ONpqMEJCtdAJFebTjD46GS20GZMppE7fYZY0qCd6fr0TjIFWtZcPz7vMc2VOtRg==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "linkify-it": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz",
+ "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
+ "dev": true,
+ "requires": {
+ "uc.micro": "1.0.3"
+ }
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
+ "integrity": "sha1-W3cjA03aTSYuWkb7LFjXzCL3FCA=",
+ "dev": true
+ },
+ "lodash.cond": {
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz",
+ "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "markdown": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz",
+ "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=",
+ "dev": true,
+ "requires": {
+ "nopt": "2.1.2"
+ }
+ },
+ "markdown-it": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz",
+ "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "entities": "1.1.1",
+ "linkify-it": "2.0.3",
+ "mdurl": "1.0.1",
+ "uc.micro": "1.0.3"
+ }
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+ "dev": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node-uuid": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz",
+ "integrity": "sha1-B/myM3Vy/2J1x3Xh1IUT86RdemU=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz",
+ "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "4.3.6",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz",
+ "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "requires": {
+ "p-limit": "1.1.0"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse5": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.1.3.tgz",
+ "integrity": "sha1-i6tY0GUl8A5ON9dVEW64LnJB8UI=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pkg-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "promise": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz",
+ "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=",
+ "dev": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "q": {
+ "version": "0.9.7",
+ "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz",
+ "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "dev": true,
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "requireindex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz",
+ "integrity": "sha1-5UBLgVV+91225JxacgBIk/4D4WI=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.3.3",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ }
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "showdown": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.3.tgz",
+ "integrity": "sha1-ZE3TyPlDLHdExJtF6aGYoBcZQ14=",
+ "dev": true,
+ "requires": {
+ "yargs": "10.0.3"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "yargs": {
+ "version": "10.0.3",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.0.3.tgz",
+ "integrity": "sha512-DqBpQ8NAUX4GyPP/ijDGHsJya4tYqLQrjPr95HNsr1YwL3+daCfvBwg7+gIC6IdJhR2kATh3hb61vjzMWEtjdw==",
+ "dev": true,
+ "requires": {
+ "cliui": "3.2.0",
+ "decamelize": "1.2.0",
+ "find-up": "2.1.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "8.0.0"
+ }
+ }
+ }
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "sync-request": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.0.0.tgz",
+ "integrity": "sha512-jGNIAlCi9iU4X3Dm4oQnNQshDD3h0/1A7r79LyqjbjUnj69sX6mShAXlhRXgImsfVKtTcnra1jfzabdZvp+Lmw==",
+ "dev": true,
+ "requires": {
+ "http-response-object": "3.0.1",
+ "sync-rpc": "1.3.3",
+ "then-request": "6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.3.tgz",
+ "integrity": "sha512-xtTZUAeFaescZALim6yqjMDsVQD7mKAkdZ0/FOvVjlrr4uQqrARlWxs4P7bKV2ZPnvOyTVyHyyxqztxtBF4iIw==",
+ "dev": true,
+ "requires": {
+ "get-port": "3.2.0"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.5",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "then-request": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.0.tgz",
+ "integrity": "sha512-xA+7uEMc+jsQIoyySJ93Ad08Kuqnik7u6jLS5hR91Z3smAoCfL3M8/MqMlobAa9gzBfO9pA88A/AntfepkkMJQ==",
+ "dev": true,
+ "requires": {
+ "@types/concat-stream": "1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "8.10.8",
+ "@types/qs": "6.5.1",
+ "caseless": "0.12.0",
+ "concat-stream": "1.6.0",
+ "form-data": "2.3.2",
+ "http-basic": "7.0.0",
+ "http-response-object": "3.0.1",
+ "promise": "8.0.1",
+ "qs": "6.5.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.8.tgz",
+ "integrity": "sha512-BvcUxNZe9JgiiUVivtiQt3NrPVu9OAQzkxR1Ko9ESftCYU7V6Np5kpDzQwxd+34lsop7SNRdL292Flv52OvCaw==",
+ "dev": true
+ }
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uc.micro": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz",
+ "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.10.tgz",
+ "integrity": "sha512-dNib7aUDNZFJNTXFyq0CDmLRVOsnY1F+IQgt2FAOdZFx2+LvKVLbbIb/fL+BYKCv3YH3bPCE/6M/JaxChtQLHQ==",
+ "dev": true,
+ "requires": {
+ "commander": "2.14.1",
+ "source-map": "0.6.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "vow": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.3.tgz",
+ "integrity": "sha1-1cOU1PHoRMmIEAtXtUCVbEoAW6Y=",
+ "dev": true
+ },
+ "vow-fs": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.1.tgz",
+ "integrity": "sha1-G3/GTXJzp8EmkAIWdMGpBM6rjK8=",
+ "dev": true,
+ "requires": {
+ "glob": "3.2.8",
+ "node-uuid": "1.4.0",
+ "vow-queue": "0.1.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.2.8",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.8.tgz",
+ "integrity": "sha1-VQb0MRchvMYYx9jboUQYh1AwcHM=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "minimatch": "0.2.14"
+ }
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "vow-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.1.0.tgz",
+ "integrity": "sha1-qbVhR3x+pdVjsMqqUuQOZo3gwjg=",
+ "dev": true
+ },
+ "vuln-regex-detector": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/vuln-regex-detector/-/vuln-regex-detector-1.3.0.tgz",
+ "integrity": "sha512-QWm8buVznZjdcfMuFHYsiNfHd0YQ7dO41G0iEGVPlUng5eZUo8uy+QsVCmbgVZ2b96xprY1Tz9dQD7QtvbFHXw==",
+ "dev": true,
+ "requires": {
+ "sync-request": "6.0.0"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs-parser": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.0.0.tgz",
+ "integrity": "sha1-IdR2Mw5agieaS4gTRb8GYQLiGcY=",
+ "dev": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package.json
new file mode 100644
index 00000000000..22d6779f38e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/marked/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "marked",
+ "description": "A markdown parser built for speed",
+ "author": "Christopher Jeffrey",
+ "version": "0.4.0",
+ "main": "./lib/marked.js",
+ "bin": "./bin/marked",
+ "man": "./man/marked.1",
+ "repository": "git://github.com/markedjs/marked.git",
+ "homepage": "https://marked.js.org",
+ "bugs": {
+ "url": "http://github.com/markedjs/marked/issues"
+ },
+ "license": "MIT",
+ "keywords": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "tags": [
+ "markdown",
+ "markup",
+ "html"
+ ],
+ "devDependencies": {
+ "eslint": "^4.15.0",
+ "eslint-config-standard": "^11.0.0-beta.0",
+ "eslint-plugin-import": "^2.8.0",
+ "eslint-plugin-node": "^5.2.1",
+ "eslint-plugin-promise": "^3.6.0",
+ "eslint-plugin-standard": "^3.0.1",
+ "eslint-plugin-vuln-regex-detector": "^1.0.4",
+ "front-matter": "^2.3.0",
+ "glob-to-regexp": "0.3.0",
+ "html-differ": "^1.3.4",
+ "jasmine": "^3.1.0",
+ "jasmine2-custom-message": "^0.9.0",
+ "markdown": "*",
+ "markdown-it": "*",
+ "showdown": "*",
+ "uglify-js": "^3.3.10"
+ },
+ "scripts": {
+ "test": "jasmine --config=jasmine.json",
+ "test:unit": "npm test -- test/unit/**/*-spec.js",
+ "test:specs": "npm test -- test/specs/**/*-spec.js",
+ "test:cm": "npm test -- test/specs/commonmark/**/*-spec.js",
+ "test:gfm": "npm test -- test/specs/gfm/**/*-spec.js",
+ "test:marked": "npm test -- test/specs/marked/**/*-spec.js",
+ "test:old": "node test",
+ "test:lint": "eslint bin/marked .",
+ "test:redos": "eslint --plugin vuln-regex-detector --rule '\"vuln-regex-detector/no-vuln-regex\": 2' lib/marked.js",
+ "bench": "node test --bench",
+ "lint": "eslint --fix bin/marked .",
+ "build": "uglifyjs lib/marked.js -cm --comments /Copyright/ -o marked.min.js",
+ "preversion": "npm run build && (git diff --quiet || git commit -am 'minify')"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/.bower.json
new file mode 100644
index 00000000000..cfa71a658ce
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/.bower.json
@@ -0,0 +1,48 @@
+{
+ "name": "mocha",
+ "homepage": "https://mochajs.org",
+ "description": "simple, flexible, fun test framework",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/mochajs/mocha.git"
+ },
+ "main": [
+ "mocha.js",
+ "mocha.css"
+ ],
+ "ignore": [
+ "bin",
+ "editors",
+ "images",
+ "lib",
+ "scripts",
+ "test",
+ "assets",
+ "media",
+ ".*",
+ "index.js",
+ "karma.conf.js",
+ "browser-entry.js",
+ "Makefile",
+ "package.json",
+ "appveyor.yml"
+ ],
+ "keywords": [
+ "mocha",
+ "test",
+ "bdd",
+ "tdd",
+ "tap"
+ ],
+ "license": "MIT",
+ "version": "3.5.3",
+ "_release": "3.5.3",
+ "_resolution": {
+ "type": "version",
+ "tag": "v3.5.3",
+ "commit": "1ff41a05a599e8bffe90b2b13597b01a2031b88f"
+ },
+ "_source": "https://github.com/mochajs/mocha.git",
+ "_target": "^3.1.2",
+ "_originalSource": "mocha"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/CHANGELOG.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/CHANGELOG.md
new file mode 100644
index 00000000000..96fc1c50b1b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/CHANGELOG.md
@@ -0,0 +1,1711 @@
+# 3.5.3 / 2017-09-11
+
+## :bug: Fixes
+
+- [#3003]: Fix invalid entities in xUnit reporter first appearing in v3.5.1 ([@jkrems])
+
+[#3003]: https://github.com/mochajs/mocha/pull/3003
+
+# 3.5.2 / 2017-09-10
+
+## :bug: Fixes
+
+- [#3001]: Fix AMD-related failures first appearing in v3.5.1 ([@boneskull])
+
+[#3001]: https://github.com/mochajs/mocha/pull/3001
+
+# 3.5.1 / 2017-09-09
+
+## :newspaper: News
+
+- :mega: Mocha is now sponsoring [PDXNode](http://pdxnode.org)! If you're in the [Portland](https://wikipedia.org/wiki/Portland,_Oregon) area, come check out the monthly talks and hack nights!
+
+## :bug: Fixes
+
+- [#2997]: Fix missing `xit` export for "require" interface ([@solodynamo])
+- [#2957]: Fix unicode character handling in XUnit reporter failures ([@jkrems])
+
+## :nut_and_bolt: Other
+
+- [#2986]: Add issue and PR templates ([@kungapal])
+- [#2918]: Drop bash dependency for glob-related tests ([@ScottFreeCode])
+- [#2922]: Improve `--compilers` coverage ([@ScottFreeCode])
+- [#2981]: Fix tpyos and spelling errors ([@jsoref])
+
+[#2997]: https://github.com/mochajs/mocha/pull/2997
+[#2957]: https://github.com/mochajs/mocha/pull/2957
+[#2918]: https://github.com/mochajs/mocha/pull/2918
+[#2986]: https://github.com/mochajs/mocha/pull/2986
+[#2922]: https://github.com/mochajs/mocha/pull/2922
+[#2981]: https://github.com/mochajs/mocha/pull/2981
+[@solodynamo]: https://github.com/solodynamo
+[@jkrems]: https://github.com/jkrems
+[@jsoref]: https://github.com/jsoref
+
+# 3.5.0 / 2017-07-31
+
+## :newspaper: News
+
+- Mocha now has a [code of conduct](https://github.com/mochajs/mocha/blob/master/.github/CODE_OF_CONDUCT.md) (thanks [@kungapal]!).
+- Old issues and PRs are now being marked "stale" by [Probot's "Stale" plugin](https://github.com/probot/stale). If an issue is marked as such, and you would like to see it remain open, simply add a new comment to the ticket or PR.
+- **WARNING**: Support for non-ES5-compliant environments will be dropped starting with version 4.0.0 of Mocha!
+
+## :lock: Security Fixes
+
+- [#2860]: Address [CVE-2015-8315](https://nodesecurity.io/advisories/46) via upgrade of [debug](https://npm.im/debug) ([@boneskull])
+
+## :tada: Enhancements
+
+- [#2696]: Add `--forbid-only` and `--forbid-pending` flags. Use these in CI or hooks to ensure tests aren't accidentally being skipped! ([@charlierudolph])
+- [#2813]: Support Node.js 8's `--napi-modules` flag ([@jupp0r])
+
+## :nut_and_bolt: Other
+
+- Various CI-and-test-related fixes and improvements ([@boneskull], [@dasilvacontin], [@PopradiArpad], [@Munter], [@ScottFreeCode])
+- "Officially" support Node.js 8 ([@elergy])
+
+[#2860]: https://github.com/mochajs/mocha/pulls/2860
+[#2696]: https://github.com/mochajs/mocha/pulls/2696
+[#2813]: https://github.com/mochajs/mocha/pulls/2813
+[@charlierudolph]: https://github.com/charlierudolph
+[@PopradiArpad]: https://github.com/PopradiArpad
+[@kungapal]: https://github.com/kungapal
+[@elergy]: https://github.com/elergy
+[@jupp0r]: https://github.com/jupp0r
+
+# 3.4.2 / 2017-05-24
+
+## :bug: Fixes
+
+- [#2802]: Remove call to deprecated `os.tmpDir` ([@makepanic])
+- [#2820]: Eagerly set `process.exitCode` ([@chrisleck])
+
+## :nut_and_bolt: Other
+
+- [#2778]: Move linting into an npm script ([@Munter])
+
+[@chrisleck]: https://github.com/chrisleck
+[@makepanic]: https://github.com/makepanic
+[@Munter]: https://github.com/Munter
+
+[#2778]: https://github.com/mochajs/mocha/pulls/2778
+[#2802]: https://github.com/mochajs/mocha/issues/2802
+[#2820]: https://github.com/mochajs/mocha/pull/2820
+
+# 3.4.1 / 2017-05-14
+
+Fixed a publishing mishap with git's autocrlf settings.
+
+# 3.4.0 / 2017-05-14
+
+Mocha is now moving to a quicker release schedule: when non-breaking changes are merged, a release should happen that week.
+
+This week's highlights:
+
+- `allowUncaught` added to commandline as `--allow-uncaught` (and bugfixed)
+- warning-related Node flags
+
+## :tada: Enhancements
+
+- [#2793], [#2697]: add --allowUncaught to Node.js ([@lrowe])
+- [#2733]: Add `--no-warnings` and `--trace-warnings` flags ([@sonicdoe])
+
+## :bug: Fixes
+
+- [#2793], [#2697]: fix broken allowUncaught ([@lrowe])
+
+## :nut_and_bolt: Other
+
+- [#2778]: Add license report and scan status ([@xizhao])
+- [#2794]: no special case for macOS running Karma locally ([@boneskull])
+- [#2795]: reverts use of semistandard directly ([#2648]) ([@boneskull])
+
+[@lrowe]: https://github.com/lrowe
+[@sonicdoe]: https://github.com/sonicdoe
+[@xizhao]: https://github.com/xizhao
+[@boneskull]: https://github.com/boneskull
+
+[#2795]: https://github.com/mochajs/mocha/pull/2795
+[#2733]: https://github.com/mochajs/mocha/pull/2733
+[#2793]: https://github.com/mochajs/mocha/pull/2793
+[#2697]: https://github.com/mochajs/mocha/pull/2697
+[#2778]: https://github.com/mochajs/mocha/pull/2778
+[#2794]: https://github.com/mochajs/mocha/pull/2794
+
+# 3.3.0 / 2017-04-24
+
+Thanks to all our contributors, maintainers, sponsors, and users! ❤️
+
+As highlights:
+
+- We've got coverage now!
+- Testing is looking less flaky \o/.
+- No more nitpicking about "mocha.js" build on PRs.
+
+## :tada: Enhancements
+
+- [#2659]: Adds support for loading reporter from an absolute or relative path ([@sul4bh])
+- [#2769]: Support `--inspect-brk` on command-line ([@igwejk])
+
+## :bug: Fixes
+
+- [#2662]: Replace unicode chars w/ hex codes in HTML reporter ([@rotemdan])
+
+## :mag: Coverage
+
+- [#2672]: Add coverage for node tests ([@c089], [@Munter])
+- [#2680]: Increase tests coverage for base reporter ([@epallerols])
+- [#2690]: Increase tests coverage for doc reporter ([@craigtaub])
+- [#2701]: Increase tests coverage for landing, min, tap and list reporters ([@craigtaub])
+- [#2691]: Increase tests coverage for spec + dot reporters ([@craigtaub])
+- [#2698]: Increase tests coverage for xunit reporter ([@craigtaub])
+- [#2699]: Increase tests coverage for json-stream, markdown and progress reporters ([@craigtaub])
+- [#2703]: Cover .some() function in utils.js with tests ([@seppevs])
+- [#2773]: Add tests for loading reporters w/ relative/absolute paths ([@sul4bh])
+
+## :nut_and_bolt: Other
+
+- Remove bin/.eslintrc; ensure execs are linted ([@boneskull])
+- [#2542]: Expand CONTRIBUTING.md ([@boneskull])
+- [#2660]: Double timeouts on integration tests ([@Munter])
+- [#2653]: Update copyright year ([@Scottkao85], [@Munter])
+- [#2621]: Update dependencies to enable Greenkeeper ([@boneskull], [@greenkeeper])
+- [#2625]: Use trusty container in travis-ci; use "artifacts" addon ([@boneskull])
+- [#2670]: doc(CONTRIBUTING): fix link to org members ([@coderbyheart])
+- Add Mocha propaganda to README.md ([@boneskull])
+- [#2470]: Avoid test flake in "delay" test ([@boneskull])
+- [#2675]: Limit browser concurrency on sauce ([@boneskull])
+- [#2669]: Use temporary test-only build of mocha.js for browsers tests ([@Munter])
+- Fix "projects" link in README.md ([@boneskull])
+- [#2678]: Chore(Saucelabs): test on IE9, IE10 and IE11 ([@coderbyheart])
+- [#2648]: Use `semistandard` directly ([@kt3k])
+- [#2727]: Make the build reproducible ([@lamby])
+
+[@boneskull]: https://github.com/boneskull
+[@c089]: https://github.com/c089
+[@coderbyheart]: https://github.com/coderbyheart
+[@craigtaub]: https://github.com/craigtaub
+[@epallerols]: https://github.com/epallerols
+[@greenkeeper]: https://github.com/greenkeeper
+[@igwejk]: https://github.com/igwejk
+[@kt3k]: https://github.com/kt3k
+[@lamby]: https://github.com/lamby
+[@Munter]: https://github.com/Munter
+[@rotemdan]: https://github.com/rotemdan
+[@seppevs]: https://github.com/seppevs
+[@sul4bh]: https://github.com/sul4bh
+
+[#2470]: https://github.com/mochajs/mocha/pull/2470
+[#2542]: https://github.com/mochajs/mocha/issues/2542
+[#2621]: https://github.com/mochajs/mocha/pull/2621
+[#2625]: https://github.com/mochajs/mocha/pull/2625
+[#2648]: https://github.com/mochajs/mocha/pull/2648
+[#2653]: https://github.com/mochajs/mocha/pull/2653
+[#2659]: https://github.com/mochajs/mocha/pull/2659
+[#2660]: https://github.com/mochajs/mocha/pull/2660
+[#2662]: https://github.com/mochajs/mocha/pull/2662
+[#2669]: https://github.com/mochajs/mocha/pull/2669
+[#2670]: https://github.com/mochajs/mocha/pull/2670
+[#2672]: https://github.com/mochajs/mocha/pull/2672
+[#2675]: https://github.com/mochajs/mocha/pull/2675
+[#2678]: https://github.com/mochajs/mocha/pull/2678
+[#2680]: https://github.com/mochajs/mocha/pull/2680
+[#2690]: https://github.com/mochajs/mocha/pull/2690
+[#2691]: https://github.com/mochajs/mocha/pull/2691
+[#2698]: https://github.com/mochajs/mocha/pull/2698
+[#2699]: https://github.com/mochajs/mocha/pull/2699
+[#2701]: https://github.com/mochajs/mocha/pull/2701
+[#2703]: https://github.com/mochajs/mocha/pull/2703
+[#2727]: https://github.com/mochajs/mocha/pull/2727
+[#2769]: https://github.com/mochajs/mocha/pull/2769
+[#2773]: https://github.com/mochajs/mocha/pull/2773
+
+# 3.2.0 / 2016-11-24
+
+## :newspaper: News
+
+### Mocha is now a JS Foundation Project!
+
+Mocha is proud to have joined the [JS Foundation](https://js.foundation). For more information, [read the announcement](https://js.foundation/announcements/2016/10/17/Linux-Foundation-Unites-JavaScript-Community-Open-Web-Development/).
+
+### Contributor License Agreement
+
+Under the foundation, all contributors to Mocha must sign the [JS Foundation CLA](https://js.foundation/CLA/) before their code can be merged. When sending a PR--if you have not already signed the CLA--a friendly bot will ask you to do so.
+
+Mocha remains licensed under the [MIT license](https://github.com/mochajs/mocha/blob/master/LICENSE).
+
+## :bug: Bug Fix
+
+- [#2535]: Fix crash when `--watch` encounters broken symlinks ([@villesau])
+- [#2593]: Fix (old) regression; incorrect symbol shown in `list` reporter ([@Aldaviva])
+- [#2584]: Fix potential error when running XUnit reporter ([@vobujs])
+
+## :tada: Enhancement
+
+- [#2294]: Improve timeout error messaging ([@jeversmann], [@boneskull])
+- [#2520]: Add info about `--inspect` flag to CLI help ([@ughitsaaron])
+
+## :nut_and_bolt: Other
+
+- [#2570]: Use [karma-mocha](https://npmjs.com/package/karma-mocha) proper ([@boneskull])
+- Licenses updated to reflect new copyright, add link to license and browser matrix to `README.md` ([@boneskull], [@ScottFreeCode], [@dasilvacontin])
+
+[#2294]: https://github.com/mochajs/mocha/issues/2294
+[#2535]: https://github.com/mochajs/mocha/issues/2535
+[#2520]: https://github.com/mochajs/mocha/pull/2520
+[#2593]: https://github.com/mochajs/mocha/pull/2593
+[#2584]: https://github.com/mochajs/mocha/issues/2584
+[#2570]: https://github.com/mochajs/mocha/issues/2570
+[@Aldaviva]: https://github.com/Aldaviva
+[@jeversmann]: https://github.com/jeversmann
+[@ughitsaaron]: https://github.com/ughitsaaron
+[@villesau]: https://github.com/villesau
+[@vobujs]: https://github.com/vobujs
+
+Thanks to all our contributors, sponsors and backers! Keep on the lookout for a public roadmap and new contribution guide coming soon.
+
+# 3.1.2 / 2016-10-10
+
+## :bug: Bug Fix
+
+- [#2528]: Recovery gracefully if an `Error`'s `stack` property isn't writable ([@boneskull])
+
+[#2528]: https://github.com/mochajs/mocha/issues/2528
+
+# 3.1.1 / 2016-10-09
+
+## :bug: Bug Fix
+
+- [#1417]: Don't report `done()` was called multiple times when it wasn't ([@frankleonrose])
+
+## :nut_and_bolt: Other
+
+- [#2490]: Lint with [semistandard](https://npmjs.com/package/semistandard) config ([@makepanic])
+- [#2525]: Lint all `.js` files ([@boneskull])
+- [#2524]: Provide workaround for developers unable to run browser tests on macOS Sierra ([@boneskull])
+
+[#1417]: https://github.com/mochajs/mocha/issues/1417
+[#2490]: https://github.com/mochajs/mocha/issues/2490
+[#2525]: https://github.com/mochajs/mocha/issues/2525
+[#2524]: https://github.com/mochajs/mocha/issues/2524
+[@makepanic]: https://github.com/makepanic
+[@frankleonrose]: https://github.com/frankleonrose
+
+# 3.1.0 / 2016-09-27
+
+## :tada: Enhancement
+
+- [#2357]: Support `--inspect` on command-line ([@simov])
+- [#2194]: Human-friendly error if no files are matched on command-line ([@Munter])
+- [#1744]: Human-friendly error if a Suite has no callback (BDD/TDD only) ([@anton])
+
+## :bug: Bug Fix
+
+- [#2488]: Fix case in which *variables beginning with lowercase "D"* may not have been reported properly as global leaks ([@JustATrick]) :laughing:
+- [#2465]: Always halt execution in async function when `this.skip()` is called ([@boneskull])
+- [#2445]: Exits with expected code 130 when `SIGINT` encountered; exit code can no longer rollover at 256 ([@Munter])
+- [#2315]: Fix uncaught TypeError thrown from callback stack ([@1999])
+- Fix broken `only()`/`skip()` in IE7/IE8 ([@boneskull])
+- [#2502]: Fix broken stack trace filter on Node.js under Windows ([@boneskull])
+- [#2496]: Fix diff output for objects instantiated with `String` constructor ([more](https://youtrack.jetbrains.com/issue/WEB-23383)) ([@boneskull])
+
+[#2496]: https://github.com/mochajs/mocha/issues/2496
+[#2502]: https://github.com/mochajs/mocha/issues/2502
+[#2315]: https://github.com/mochajs/mocha/issues/2315
+[#2445]: https://github.com/mochajs/mocha/pull/2445
+[#2465]: https://github.com/mochajs/mocha/issues/2465
+[#2488]: https://github.com/mochajs/mocha/issues/2488
+[#1744]: https://github.com/mochajs/mocha/issues/1744
+[#2194]: https://github.com/mochajs/mocha/issues/2194
+[#2357]: https://github.com/mochajs/mocha/issues/2357
+[@1999]: https://github.com/1999
+[@JustATrick]: https://github.com/JustATrick
+[@anton]: https://github.com/anton
+[@simov]: https://github.com/simov
+
+# 3.0.2 / 2016-08-08
+
+## :bug: Bug Fix
+
+- [#2424]: Fix error loading Mocha via Require.js ([@boneskull])
+- [#2417]: Fix execution of *deeply* nested `describe.only()` suites ([@not-an-aardvark])
+- Remove references to `json-cov` and `html-cov` reporters in CLI ([@boneskull])
+
+[#2417]: https://github.com/mochajs/mocha/issues/2417
+[#2424]: https://github.com/mochajs/mocha/issues/2424
+
+# 3.0.1 / 2016-08-03
+
+## :bug: Bug Fix
+
+- [#2406]: Restore execution of nested `describe.only()` suites ([@not-an-aardvark])
+
+[#2406]: https://github.com/mochajs/mocha/issues/2406
+[@not-an-aardvark]: https://github.com/not-an-aardvark
+
+# 3.0.0 / 2016-07-31
+
+## :boom: Breaking Changes
+
+- :warning: Due to the increasing difficulty of applying security patches made within its dependency tree, as well as looming incompatibilities with Node.js v7.0, **Mocha no longer supports Node.js v0.8**.
+- :warning: **Mocha may no longer be installed by versions of `npm` less than `1.4.0`.** Previously, this requirement only affected Mocha's development dependencies. In short, this allows Mocha to depend on packages which have dependencies fixed to major versions (`^`).
+- `.only()` is no longer "fuzzy", can be used multiple times, and generally just works like you think it should. :joy:
+- To avoid common bugs, when a test injects a callback function (suggesting asynchronous execution), calls it, *and* returns a `Promise`, Mocha will now throw an exception:
+
+ ```js
+ const assert = require('assert');
+
+ it('should complete this test', function (done) {
+ return new Promise(function (resolve) {
+ assert.ok(true);
+ resolve();
+ })
+ .then(done);
+ });
+ ```
+
+ The above test will fail with `Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.`.
+- When a test timeout value *greater than* `2147483648` is specified in any context (`--timeout`, `mocha.setup()`, per-suite, per-test, etc.), the timeout will be *disabled* and the test(s) will be allowed to run indefinitely. This is equivalent to specifying a timeout value of `0`. See [MDN](https://developer.mozilla.org/docs/Web/API/WindowTimers/setTimeout#Maximum_delay_value) for reasoning.
+- The `dot` reporter now uses more visually distinctive characters when indicating "pending" and "failed" tests.
+- Mocha no longer supports [component](https://www.npmjs.com/package/component).
+- The long-forsaken `HTMLCov` and `JSONCov` reporters--and any relationship to the "node-jscoverage" project--have been removed.
+- `spec` reporter now omits leading carriage returns (`\r`) in non-TTY environment.
+
+## :tada: Enhancements
+
+- [#808]: Allow regular-expression-like strings in `--grep` and browser's `grep` querystring; enables flags such as `i` for case-insensitive matches and `u` for unicode. ([@a8m])
+- [#2000]: Use distinctive characters in `dot` reporter; `,` will denote a "pending" test and `!` will denote a "failing" test. ([@elliottcable])
+- [#1632]: Throw a useful exception when a suite or test lacks a title. ([@a8m])
+- [#1481]: Better `.only()` behavior. ([@a8m])
+- [#2334]: Allow `this.skip()` in async tests and hooks. ([@boneskull])
+- [#1320]: Throw a useful exception when test resolution method is overspecified. ([@jugglinmike])
+- [#2364]: Support `--preserve-symlinks`. ([@rosswarren])
+
+## :bug: Bug Fixes
+
+- [#2259]: Restore ES3 compatibility. Specifically, support an environment lacking `Date.prototype.toISOString()`, `JSON`, or has a non-standard implementation of `JSON`. ([@ndhoule], [@boneskull])
+- [#2286]: Fix `after()` failing to execute if test skipped using `this.skip()` in `beforeEach()`; no longer marks the entire suite as "pending". ([@dasilvacontin], [@boneskull])
+- [#2208]: Fix function name display in `markdown` and `html` (browser) reporters. ([@ScottFreeCode])
+- [#2299]: Fix progress bar in `html` (browser) reporter. ([@AviVahl])
+- [#2307]: Fix `doc` reporter crashing when test fails. ([@jleyba])
+- [#2323]: Ensure browser entry point (`browser-entry.js`) is published to npm (for use with bundlers). ([@boneskull])
+- [#2310]: Ensure custom reporter with an absolute path works in Windows. ([@silentcloud])
+- [#2311]: Fix problem wherein calling `this.slow()` without a value would blast any previously set value. ([@boneskull])
+- [#1813]: Ensure Mocha's own test suite will run in Windows. ([@tswaters], [@TimothyGu], [@boneskull])
+- [#2317]: Ensure all interfaces are displayed in `--help` on CLI. ([@ScottFreeCode])
+- [#1644]: Don't exhibit undefined behavior when calling `this.timeout()` with very large values ([@callumacrae], [@boneskull])
+- [#2361]: Don't truncate name of thrown anonymous exception. ([@boneskull])
+- [#2367]: Fix invalid CSS. ([@bensontrent])
+- [#2401]: Remove carriage return before each test line in spec reporter. ([@Munter])
+
+## :nut_and_bolt: Other
+
+- Upgrade production dependencies to address security advisories (and because now we can): `glob`, `commander`, `escape-string-regexp`,
+and `supports-color`. ([@boneskull], [@RobLoach])
+- Add Windows to CI. ([@boneskull], [@TimothyGu])
+- Ensure appropriate `engines` field in `package.json`. ([@shinnn], [@boneskull])
+- [#2348]: Upgrade ESLint to v2 ([@anthony-redfox])
+
+We :heart: our [backers and sponsors](https://opencollective.com/mochajs)!
+
+:shipit:
+
+[#2401]: https://github.com/mochajs/mocha/pull/2401
+[#2348]: https://github.com/mochajs/mocha/issues/2348
+[#808]: https://github.com/mochajs/mocha/issues/808
+[#2361]: https://github.com/mochajs/mocha/pull/2361
+[#2367]: https://github.com/mochajs/mocha/pull/2367
+[#2364]: https://github.com/mochajs/mocha/pull/2364
+[#1320]: https://github.com/mochajs/mocha/pull/1320
+[#2307]: https://github.com/mochajs/mocha/pull/2307
+[#2259]: https://github.com/mochajs/mocha/pull/2259
+[#2208]: https://github.com/mochajs/mocha/pull/2208
+[#2299]: https://github.com/mochajs/mocha/pull/2299
+[#2286]: https://github.com/mochajs/mocha/issues/2286
+[#1644]: https://github.com/mochajs/mocha/issues/1644
+[#2310]: https://github.com/mochajs/mocha/issues/2310
+[#2311]: https://github.com/mochajs/mocha/issues/2311
+[#2323]: https://github.com/mochajs/mocha/issues/2323
+[#2000]: https://github.com/mochajs/mocha/pull/2000
+[#1632]: https://github.com/mochajs/mocha/issues/1632
+[#1813]: https://github.com/mochajs/mocha/issues/1813
+[#2334]: https://github.com/mochajs/mocha/issues/2334
+[#2317]: https://github.com/mochajs/mocha/issues/2317
+[#1481]: https://github.com/mochajs/mocha/issues/1481
+[@elliottcable]: https://github.com/elliottcable
+[@RobLoach]: https://github.com/robloach
+[@AviVahl]: https://github.com/avivahl
+[@silentcloud]: https://github.com/silentcloud
+[@tswaters]: https://github.com/tswaters
+[@jleyba]: https://github.com/jleyba
+[@TimothyGu]: https://github.com/timothygu
+[@callumacrae]: https://github.com/callumacrae
+[@shinnn]: https://github.com/shinnn
+[@bensontrent]: https://github.com/bensontrent
+[@jugglinmike]: https://github.com/jugglinmike
+[@rosswarren]: https://github.com/rosswarren
+[@anthony-redfox]: https://github.com/anthony-redfox
+[@Munter]: https://github.com/munter
+
+# 2.5.3 / 2016-05-25
+
+- [#2112] - Fix HTML reporter regression causing duplicate error output ([@danielstjules] via 6d24063)
+- [#2119] - Make HTML reporter failure/passed links preventDefault to avoid SPA's hash navigation ([@jimenglish81] via 9e93efc)
+
+[@danielstjules]: https://github.com/danielstjules
+[@jimenglish81]: https://github.com/jimenglish81
+[#2112]: https://github.com/mochajs/mocha/pull/2112
+[#2119]: https://github.com/mochajs/mocha/pull/2119
+
+# 2.5.2 / 2016-05-24
+
+- [#2178] - Avoid double and triple xUnit XML escaping ([@graingert] via 49b5ff1)
+
+[@graingert]: https://github.com/graingert
+[#2178]: https://github.com/mochajs/mocha/pull/2178
+
+# 2.5.1 / 2016-05-23
+
+- Fix [to-iso-string](https://npmjs.com/package/to-iso-string) dependency ([@boneskull] via bd9450b)
+
+Thanks @entertainyou, @SimenB, @just-paja for the heads-up.
+
+# 2.5.0 / 2016-05-23
+
+> This has been awhile coming! We needed to feel confident that the next release wouldn't break browser compatibility (e.g. the last few patch releases).
+>
+> ### Browser Tests in CI
+>
+> We now run unit tests against PhantomJS v1.x and an assortment of browsers on [SauceLabs](https://saucelabs.com), including:
+> - Internet Explorer v8.0
+> - Chrome (latest)
+> - Firefox (latest)
+> - Safari (latest)
+> - Microsoft Edge (latest)
+>
+> To accomplish this, we now run Mocha's unit tests (and a handful of integration tests) via [Karma](https://npmjs.com/package/karma) and a modified [karma-mocha](https://npmjs.com/package/karma-mocha). Along the way, we had to solve issue [#880] (apologies to @mderijcke and @sukima who had PRs addressing this), as well as replace most usages of [should](https://npmjs.com/package/should) with [expect.js](https://npmjs.com/package/expect.js) for IE8.
+>
+> Going forward, when sending PRs, your code will *only* run against PhantomJS v1.x (and not hit SauceLabs) [because security](https://docs.travis-ci.com/user/pull-requests/#Security-Restrictions-when-testing-Pull-Requests).
+>
+> ### Node.js 6.x
+> Node.js 6.x "just worked" before, but now it's in the CI matrix, so it's "officially" supported. Mocha *still retains support* for Node.js 0.8.x.
+>
+> ### "Minor" Release
+> You'll see mostly bug fixes below, but also a couple features--as such, it's a "minor" release.
+>
+> ### TYVM
+>
+> Thanks to everyone who contributed, and our fabulous [sponsors and backers](https://opencollective.com/mochajs)!
+
+- [#2079] - Add browser checks to CI; update [browserify](https://npmjs.com/package/browserify) to v13.0.0 ([@dasilvacontin], [@ScottFreeCode], [@boneskull] via c04c1d7, 0b1e9b3, 0dde0fa, f8a3d86, 9e8cbaa)
+- [#880] - Make Mocha browserifyable ([@boneskull] via 524862b)
+- [#2121] - Update [glob](https://npmjs.com/package/glob) to v3.2.11 ([@astorije] via 7920fc4)
+- [#2126] - Fix dupe error messages in stack trace filter ([@Turbo87] via 4301caa)
+- [#2109] - Fix certain diffs when objects cannot be coerced into primitives ([@joshlory] via 61fbb7f)
+- [#1827] - Fix TWBS/`mocha.css` collisions ([@irnc] via 0543798)
+- [#1760], [#1936] - Fix `this.skip()` in HTML reporter ([@mislav] via cb4248b)
+- [#2115] - Fix exceptions thrown from hooks in HTML reporter ([@danielstjules] via e290bc0)
+- [#2089] - Handle Symbol values in `util.stringify()` ([@ryym] via ea61d05)
+- [#2097] - Fix diff for objects overriding `Object.prototype.hasOwnProperty` ([@mantoni] via b20fdfe)
+- [#2101] - Properly handle non-string "messages" thrown from assertion libraries ([@jkimbo] via 9c41051)
+- [#2124] - Update [growl](https://npmjs.com/package/growl) ([@benjamine] via 9ae6a85)
+- [#2162], [#2205] - JSDoc fixes ([@OlegTsyba] via 8031f20, [@ScottFreeCode] via f83b1d9)
+- [#2132] - Remove Growl-related cruft ([@julienw] via 00d6469)
+- [#2172] - Add [OpenCollective](https://opencollective.com) badge, sponsors & backers ([@xdamman], [@boneskull] via caee94f)
+- [#1841] - Add new logo, banner assets ([@dasilvacontin] via 00fd0e1)
+- [#2214] - Update `README.md` header ([@dasilvacontin] via c0f9be2)
+- [#2236] - Better checks for Node.js v0.8 compatibility in CI ([@dasilvacontin] via ba5637d)
+- [#2239] - Add Node.js v6.x to CI matrix ([@boneskull] via 3904da4)
+
+[#880]: https://github.com/mochajs/mocha/issues/880
+[#1841]: https://github.com/mochajs/mocha/pull/1841
+[#2239]: https://github.com/mochajs/mocha/issues/2239
+[#2153]: https://github.com/mochajs/mocha/pull/2153
+[#2214]: https://github.com/mochajs/mocha/pull/2214
+[#2236]: https://github.com/mochajs/mocha/pull/2236
+[#2079]: https://github.com/mochajs/mocha/issues/2079
+[#2231]: https://github.com/mochajs/mocha/pull/2231
+[#2089]: https://github.com/mochajs/mocha/issues/2089
+[#2097]: https://github.com/mochajs/mocha/pull/2097
+[#1760]: https://github.com/mochajs/mocha/issues/1760
+[#1936]: https://github.com/mochajs/mocha/issues/1936
+[#2115]: https://github.com/mochajs/mocha/pull/2115
+[#1827]: https://github.com/mochajs/mocha/pull/1827
+[#2101]: https://github.com/mochajs/mocha/pull/2101
+[#2124]: https://github.com/mochajs/mocha/pull/2124
+[#2109]: https://github.com/mochajs/mocha/issues/2109
+[#2162]: https://github.com/mochajs/mocha/pull/2162
+[#2132]: https://github.com/mochajs/mocha/issues/2132
+[#2126]: https://github.com/mochajs/mocha/issues/2126
+[#2121]: https://github.com/mochajs/mocha/issues/2121
+[#2205]: https://github.com/mochajs/mocha/pull/2205
+[#2172]: https://github.com/mochajs/mocha/pull/2172
+[@xdamman]: https://github.com/xdamman
+[@Turbo87]: https://github.com/Turbo87
+[@OlegTsyba]: https://github.com/OlegTsyba
+[@ryym]: https://github.com/ryym
+[@mantoni]: https://github.com/mantoni
+[@mislav]: https://github.com/mislav
+[@irnc]: https://github.com/irnc
+[@jkimbo]: https://github.com/jkimbo
+[@benjamine]: https://github.com/benjamine
+[@joshlory]: https://github.com/joshlory
+[@julienw]: https://github.com/julienw
+[@ScottFreeCode]: https://github.com/ScottFreeCode
+[@astorije]: https://github.com/astorije
+[@dasilvacontin]: https://github.com/dasilvacontin
+
+2.4.5 / 2016-01-28
+==================
+
+* [#2080], [#2078], [#2072], [#2073], [#1200] - Revert changes to console colors in changeset [1192914](https://github.com/mochajs/mocha/commit/119291449cd03a11cdeda9e37cf718a69a012896) and subsequent related changes thereafter. Restores compatibility with IE8 & PhantomJS. See also [mantoni/mochify.js#129](https://github.com/mantoni/mochify.js/issues/129) and [openlayers/ol3#4746](https://github.com/openlayers/ol3/pull/4746) ([@boneskull])
+* [#2082] - Fix several test assertions ([@mislav])
+
+[#1200]: https://github.com/mochajs/mocha/issues/1200
+[#2082]: https://github.com/mochajs/mocha/pull/2082
+
+2.4.4 / 2016-01-27
+==================
+
+* [#2080] - Fix broken RequireJS compatibility ([@boneskull])
+
+[#2080]: https://github.com/mochajs/mocha/issues/2080
+
+2.4.3 / 2016-01-27
+==================
+
+* [#2078] - Fix broken IE8 ([@boneskull])
+
+[#2078]: https://github.com/mochajs/mocha/issues/2078
+
+2.4.2 / 2016-01-26
+==================
+
+* [#2053] - Fix web worker compatibility ([@mislav])
+* [#2072] - Fix Windows color output ([@thedark1337])
+* [#2073] - Fix colors in `progress` and `landing` reporters ([@gyandeeps])
+
+[#2053]: https://github.com/mochajs/mocha/pull/2053
+[#2072]: https://github.com/mochajs/mocha/pull/2072
+[#2073]: https://github.com/mochajs/mocha/pull/2073
+[@gyandeeps]: https://github.com/gyandeeps
+[@thedark1337]: https://github.com/thedark1337
+
+2.4.1 / 2016-01-26
+==================
+
+* [#2067] - Fix HTML/doc reporter regressions ([@danielstjules])
+
+[#2067]: https://github.com/mochajs/mocha/pull/2067
+
+2.4.0 / 2016-01-25
+==================
+
+* [#1945] - Correctly skip tests when skipping in suite's before() ([@ryanshawty])
+* [#2056] - chore(license): update license year to 2016 ([@pra85])
+* [#2048] - Fix `this.skip` from spec with HTML reporter ([@mislav])
+* [#2033] - Update tests for newer versions of should.js ([@tomhughes])
+* [#2037] - Fix for memory leak caused by referenced to deferred test ([@bd82])
+* [#2038] - Also run Travis-CI on node.js 4 & 5 ([@bd82])
+* [#2028] - Remove reference to test before afterAll hook runs ([@stonelgh])
+* Bump mkdirp to 0.5.1 to support strict mode ([@danielstjules])
+* [#1977] - safely stringify PhantomJS undefined value ([@ahamid])
+* Add the ability to retry tests ([@@longlho])
+* [#1982] - Enable --log-timer-events option [@Alaneor]
+* Fix #1980: Load mocha.opts from bin/mocha and bin/_mocha ([@danielstjules])
+* [#1976] - Simplify function call ([@iclanzan])
+* [#1963] - Add support --perf-basic-prof ([@robraux])
+* [#1981] - Fix HTML reporter handling of done and exceptions ([@Standard8])
+* [#1993] - propagate "file" property for "exports" interface ([@segrey])
+* [#1999] - Add support for strict mode ([@tmont])
+* [#2005] - XUnit Reporter Writes to stdout, falls back to console.log ([@jonnyreeves])
+* [#2021] - Fix non ES5 compliant regexp ([@zetaben])
+* [#1965] - Don't double install BDD UI ([@cowboyd])
+* [#1995] - Make sure the xunit output dir exists before writing to it ([@ianwremmel])
+* Use chalk for the base reporter colors; closes #1200 ([@boneskull])
+* Fix requiring custom interfaces ([@jgkim])
+* [#1967] Silence Bluebird js warnings ([@krisr])
+
+[#1945]: https://github.com/mochajs/mocha/pull/1945
+[#2056]: https://github.com/mochajs/mocha/pull/2056
+[#2048]: https://github.com/mochajs/mocha/pull/2048
+[#2033]: https://github.com/mochajs/mocha/pull/2033
+[#2037]: https://github.com/mochajs/mocha/pull/2037
+[#2038]: https://github.com/mochajs/mocha/pull/2038
+[#2028]: https://github.com/mochajs/mocha/pull/2028
+[#1977]: https://github.com/mochajs/mocha/pull/1977
+[#1982]: https://github.com/mochajs/mocha/pull/1982
+[#1976]: https://github.com/mochajs/mocha/pull/1976
+[#1963]: https://github.com/mochajs/mocha/pull/1963
+[#1981]: https://github.com/mochajs/mocha/pull/1981
+[#1993]: https://github.com/mochajs/mocha/pull/1993
+[#1999]: https://github.com/mochajs/mocha/pull/1999
+[#2005]: https://github.com/mochajs/mocha/pull/2005
+[#2021]: https://github.com/mochajs/mocha/pull/2021
+[1965#]: https://github.com/mochajs/mocha/pull/1965
+[#1995]: https://github.com/mochajs/mocha/pull/1995
+[#1967]: https://github.com/mochajs/mocha/pull/1967
+[@ryanshawty]: https://github.com/ryanshawty
+[@pra85]: https://github.com/pra85
+[@mislav]: https://github.com/mislav
+[@tomhughes]: https://github.com/tomhughes
+[@bd82]: https://github.com/bd82
+[@stonelgh]: https://github.com/stonelgh
+[@danielstjules]: https://github.com/danielstjules
+[@ahamid]: https://github.com/ahamid
+[@longlho]: https://github.com/longlho
+[@Alaneor]: https://github.com/Alaneor
+[@iclanzan]: https://github.com/iclanzan
+[@robraux]: https://github.com/robraux
+[@Standard8]: https://github.com/Standard8
+[@segrey]: https://github.com/segrey
+[@tmont]: https://github.com/tmont
+[@jonnyreeves]: https://github.com/jonnyreeves
+[@zetaben]: https://github.com/zetaben
+[@cowboyd]: https://github.com/cowboyd
+[@ianwremmel]: https://github.com/ianwremmel
+[@boneskull]: https://github.com/boneskull
+[@jgkim]: https://github.com/jgkim
+[@krisr]: https://github.com/krisr
+
+2.3.4 / 2015-11-15
+==================
+
+ * Update debug dependency to 2.2.0
+ * remove duplication of mocha.opts on process.argv
+ * Fix typo in test/reporters/nyan.js
+
+2.3.3 / 2015-09-19
+==================
+
+ * [#1875] - Fix Markdown reporter exceeds maximum call stack size ([@danielstjules])
+ * [#1864] - Fix xunit missing output with --reporter-options output ([@danielstjules])
+ * [#1846] - Support all harmony flags ([@danielstjules])
+ * Fix fragile xunit reporter spec ([@danielstjules])
+ * [#1669] - Fix catch uncaught errors outside test suite execution ([@danielstjules])
+ * [#1868] - Revert jade to support npm < v1.3.7 ([@danielstjules])
+ * [#1766] - Don't remove modules/components from stack trace in the browser ([@danielstjules])
+ * [#1798] - Fix correctly attribute mutiple done err with hooks ([@danielstjules])
+ * Fix use utils.reduce for IE8 compatibility ([@wsw0108])
+ * Some linting errors fixed by [@danielstjules]
+ * Call the inspect() function if message is not set ([@kevinburke])
+
+[#1875]: https://github.com/mochajs/mocha/issues/1875
+[#1864]: https://github.com/mochajs/mocha/issues/1864
+[#1846]: https://github.com/mochajs/mocha/issues/1846
+[#1669]: https://github.com/mochajs/mocha/issues/1669
+[#1868]: https://github.com/mochajs/mocha/issues/1868
+[#1766]: https://github.com/mochajs/mocha/issues/1766
+[#1798]: https://github.com/mochajs/mocha/issues/1798
+[@danielstjules]: https://github.com/danielstjules
+[@wsw0108]: https://github.com/wsw0108
+[@kevinburke]: https://github.com/kevinburke
+
+2.3.2 / 2015-09-07
+==================
+ * [#1868] - Fix compatibility with older versions of NPM ([@boneskull])
+
+ [#1868]: https://github.com/mochajs/mocha/issues/1868
+
+2.3.1 / 2015-09-06
+==================
+
+ * [#1812] - Fix: Bail flag causes before() hooks to be run even after a failure ([@aaroncrows])
+
+ [#1812]: https://github.com/mochajs/mocha/issues/1812
+ [aaroncrows]: https://github.com/aaroncrows
+
+2.3.0 / 2015-08-30
+==================
+
+ * [#553] - added --allowUncaught option ([@amsul])
+ * [#1490] - Allow --async-only to be satisfied by returning a promise ([@jlai])
+ * [#1829] - support --max-old-space-size ([@gigadude])
+ * [#1811] - upgrade Jade dependency ([@outsideris])
+ * [#1769] - Fix async hook error handling ([@ajaykodali])
+ * [#1230] - More descriptive beforeEach/afterEach messages ([@duncanbeevers])
+ * [#1787] - Scope loading behaviour instead of using early return ([@aryeguy])
+ * [#1789] - Fix: html-runner crashing ([@sunesimonsen])
+ * [#1749] - Fix maximum call stack error on large amount of tests ([@tinganho])
+ * [#1230] - Decorate failed hook titles with test title ([@duncanbeevers])
+ * [#1260] - Build using Browserify ([@ndhoule])
+ * [#1728] - Don't use `__proto__` ([@ndhoule])
+ * [#1781] - Fix hook error tests ([@glenjamin])
+ * [#1754] - Allow boolean --reporter-options ([@papandreou])
+ * [#1766] - Fix overly aggressive stack suppression ([@moll])
+ * [#1752] - Avoid potential infinite loop ([@gsilk])
+ * [#1761] - Fix problems running under PhantomJS ([@chromakode])
+ * [#1700] - Fix more problems running under PhantomJS ([@jbnicolai])
+ * [#1774] - Support escaped spaces in CLI options ([@adamgruber])
+ * [#1687] - Fix HTML reporter links with special chars ([@benvinegar])
+ * [#1359] - Adopt code style and enforce it using ESLint ([@ndhoule] w/ assist from [@jbnicolai] & [@boneskull])
+ * various refactors ([@jbnicolai])
+ * [#1758] - Add cross-frame compatible Error checking ([@outdooricon])
+ * [#1741] - Remove moot `version` property from bower.json ([@kkirsche])
+ * [#1739] - Improve `HISTORY.md` ([@rstacruz])
+ * [#1730] - Support more io.js flags ([@ryedog])
+ * [#1349] - Allow HTML in HTML reporter errors ([@papandreou] / [@sunesimonsen])
+ * [#1572] - Prevent default browser behavior for failure/pass links ([@jschilli])
+ * [#1630] - Support underscored harmony flags ([@dominicbarnes])
+ * [#1718] - Support more harmony flags ([@slyg])
+ * [#1689] - Add stack to JSON-stream reporter ([@jonathandelgado])
+ * [#1654] - Fix `ReferenceError` "location is not defined" ([@jakemmarsh])
+
+ [#553]: https://github.com/mochajs/mocha/issues/553
+ [#1490]: https://github.com/mochajs/mocha/issues/1490
+ [#1829]: https://github.com/mochajs/mocha/issues/1829
+ [#1811]: https://github.com/mochajs/mocha/issues/1811
+ [#1769]: https://github.com/mochajs/mocha/issues/1769
+ [#1230]: https://github.com/mochajs/mocha/issues/1230
+ [#1787]: https://github.com/mochajs/mocha/issues/1787
+ [#1789]: https://github.com/mochajs/mocha/issues/1789
+ [#1749]: https://github.com/mochajs/mocha/issues/1749
+ [#1230]: https://github.com/mochajs/mocha/issues/1230
+ [#1260]: https://github.com/mochajs/mocha/issues/1260
+ [#1728]: https://github.com/mochajs/mocha/issues/1728
+ [#1781]: https://github.com/mochajs/mocha/issues/1781
+ [#1754]: https://github.com/mochajs/mocha/issues/1754
+ [#1766]: https://github.com/mochajs/mocha/issues/1766
+ [#1752]: https://github.com/mochajs/mocha/issues/1752
+ [#1761]: https://github.com/mochajs/mocha/issues/1761
+ [#1700]: https://github.com/mochajs/mocha/issues/1700
+ [#1774]: https://github.com/mochajs/mocha/issues/1774
+ [#1687]: https://github.com/mochajs/mocha/issues/1687
+ [#1359]: https://github.com/mochajs/mocha/issues/1359
+ [#1758]: https://github.com/mochajs/mocha/issues/1758
+ [#1741]: https://github.com/mochajs/mocha/issues/1741
+ [#1739]: https://github.com/mochajs/mocha/issues/1739
+ [#1730]: https://github.com/mochajs/mocha/issues/1730
+ [#1349]: https://github.com/mochajs/mocha/issues/1349
+ [#1572]: https://github.com/mochajs/mocha/issues/1572
+ [#1630]: https://github.com/mochajs/mocha/issues/1630
+ [#1718]: https://github.com/mochajs/mocha/issues/1718
+ [#1689]: https://github.com/mochajs/mocha/issues/1689
+ [#1654]: https://github.com/mochajs/mocha/issues/1654
+ [@adamgruber]: https://github.com/adamgruber
+ [@ajaykodali]: https://github.com/ajaykodali
+ [@amsul]: https://github.com/amsul
+ [@aryeguy]: https://github.com/aryeguy
+ [@benvinegar]: https://github.com/benvinegar
+ [@boneskull]: https://github.com/boneskull
+ [@chromakode]: https://github.com/chromakode
+ [@dominicbarnes]: https://github.com/dominicbarnes
+ [@duncanbeevers]: https://github.com/duncanbeevers
+ [@gigadude]: https://github.com/gigadude
+ [@glenjamin]: https://github.com/glenjamin
+ [@gsilk]: https://github.com/gsilk
+ [@jakemmarsh]: https://github.com/jakemmarsh
+ [@jbnicolai]: https://github.com/jbnicolai
+ [@jlai]: https://github.com/jlai
+ [@jonathandelgado]: https://github.com/jonathandelgado
+ [@jschilli]: https://github.com/jschilli
+ [@kkirsche]: https://github.com/kkirsche
+ [@moll]: https://github.com/moll
+ [@ndhoule]: https://github.com/ndhoule
+ [@outdooricon]: https://github.com/outdooricon
+ [@outsideris]: https://github.com/outsideris
+ [@papandreou]: https://github.com/papandreou
+ [@rstacruz]: https://github.com/rstacruz
+ [@ryedog]: https://github.com/ryedog
+ [@slyg]: https://github.com/slyg
+ [@sunesimonsen]: https://github.com/sunesimonsen
+ [@tinganho]: https://github.com/tinganho
+
+2.2.5 / 2015-05-14
+==================
+
+ * [#1699] - Upgrade jsdiff to v1.4.0 ([@nylen])
+ * [#1648] - fix diff background colors in the console ([@nylen])
+ * [#1327] - fix tests running twice, a regression issue. ([#1686], [@danielstjules])
+ * [#1675] - add integration tests ([@danielstjules])
+ * [#1682] - use a valid SPDX license identifier in package.json ([@kemitchell])
+ * [#1660] - fix assertion of invalid dates ([#1661], [@a8m])
+ * [#1241] - fix issue with multiline diffs appearing as single line ([#1655], [@a8m])
+
+[#1699]: https://github.com/mochajs/mocha/issues/1699
+[#1648]: https://github.com/mochajs/mocha/issues/1648
+[#1327]: https://github.com/mochajs/mocha/issues/1327
+[#1686]: https://github.com/mochajs/mocha/issues/1686
+[#1675]: https://github.com/mochajs/mocha/issues/1675
+[#1682]: https://github.com/mochajs/mocha/issues/1682
+[#1660]: https://github.com/mochajs/mocha/issues/1660
+[#1661]: https://github.com/mochajs/mocha/issues/1661
+[#1241]: https://github.com/mochajs/mocha/issues/1241
+[#1655]: https://github.com/mochajs/mocha/issues/1655
+[@nylen]: https://github.com/nylen
+[@danielstjules]: https://github.com/danielstjules
+[@kemitchell]: https://github.com/kemitchell
+[@a8m]: https://github.com/a8m
+
+2.2.4 / 2015-04-08
+==================
+
+ * Load mocha.opts in _mocha for now (close #1645)
+
+2.2.3 / 2015-04-07
+==================
+
+ * fix(reporter/base): string diff - issue #1241
+ * fix(reporter/base): string diff - issue #1241
+ * fix(reporter/base): don't show diffs for errors without expectation
+ * fix(reporter/base): don't assume error message is first line of stack
+ * improve: dry up reporter/base test
+ * fix(reporter/base): explicitly ignore showDiff #1614
+ * Add iojs to travis build
+ * Pass `--allow-natives-syntax` flag to node.
+ * Support --harmony_classes flag for io.js
+ * Fix 1556: Update utils.clean to handle newlines in func declarations
+ * Fix 1606: fix err handling in IE <= 8 and non-ES5 browsers
+ * Fix 1585: make _mocha executable again
+ * chore(package.json): add a8m as a contributor
+ * Fixed broken link on html-cov reporter
+ * support --es_staging flag
+ * fix issue where menu overlaps content.
+ * update contributors in package.json
+ * Remove trailing whitespace from reporter output
+ * Remove contributors list from readme
+ * log third-party reporter errors
+ * [Fix] Exclude not own properties when looping on options
+ * fix: support node args in mocha.opts (close #1573)
+ * fix(reporter/base): string diff - issue #1241
+
+2.2.1 / 2015-03-09
+==================
+
+ * Fix passing of args intended for node/iojs.
+
+2.2.0 / 2015-03-06
+==================
+
+ * Update mocha.js
+ * Add --fgrep. Use grep for RegExp, fgrep for str
+ * Ignore async global errors after spec resolution
+ * Fixing errors that prevent mocha.js from loading in the browser - fixes #1558
+ * fix(utils): issue #1558 + make
+ * add ability to delay root suite; closes #362, closes #1124
+ * fix insanity in http tests
+ * update travis: add node 0.12, add gitter, remove slack
+ * building
+ * resolve #1548: ensure the environment's "node" executable is used
+ * reporters/base: use supports-color to detect colorable term
+ * travis: use docker containers
+ * small fix: commander option for --expose-gc
+ * Ignore asynchronous errors after global failure
+ * Improve error output when a test fails with a non-error
+ * updated travis badge, uses svg instead of img
+ * Allow skip from test context for #332
+ * [JSHINT] Unnecessary semicolon fixed in bin/_mocha
+ * Added a reminder about the done() callback to test timeout error messages
+ * fixes #1496, in Mocha.run(fn), check if fn exists before executing it, added tests too
+ * Add Harmony Proxy flag for iojs
+ * test(utils|ms|*): test existing units
+ * add support for some iojs flags
+ * fix(utils.stringify): issue #1229, diff viewer
+ * Remove slack link
+ * Prevent multiple 'grep=' querystring params in html reporter
+ * Use grep as regexp (close #1381)
+ * utils.stringify should handle objects without an Object prototype
+ * in runnable test, comparing to undefined error's message rather than a literal
+ * Fix test running output truncation on async STDIO
+ * amended for deprecated customFds option in child_process
+
+2.1.0 / 2014-12-23
+==================
+
+ * showDiff: don’t stringify strings
+ * Clean up unused module dependencies.
+ * Filter zero-length strings from mocha.opts
+ * only write to stdout in reporters
+ * Revert "only write to stdout in reporters"
+ * Print colored output only to a tty
+ * update summary in README.md
+ * rename Readme.md/History.md to README.md/HISTORY.md because neurotic
+ * add .mailmap to fix "git shortlog" or "git summary" output
+ * fixes #1461: nyan-reporter now respects Base.useColors, fixed bug where Base.color would not return a string when str wasn't a string.
+ * Use existing test URL builder in failed replay links
+ * modify .travis.yml: use travis_retry; closes #1449
+ * fix -t 0 behavior; closes #1446
+ * fix tests (whoops)
+ * improve diff behavior
+ * Preserve pathname when linking to individual tests
+ * Fix test
+ * Tiny typo in comments fixed
+ * after hooks now being called on failed tests when using bail, fixes #1093
+ * fix throwing undefined/null now makes tests fail, fixes #1395
+ * compiler extensions are added as watched extensions, removed non-standard extensions from watch regex, resolves #1221
+ * prefix/namespace for suite titles in markdown reporter, fixes #554
+ * fix more bad markdown in CONTRIBUTING.md
+ * fix bad markdown in CONTRIBUTING.md
+ * add setImmediate/clearImmediate to globals; closes #1435
+ * Fix buffer diffs (closes #1132, closes #1433)
+ * add a CONTRIBUTING.md. closes #882
+ * fix intermittent build failures (maybe). closes #1407
+ * add Slack notification to .travis.yml
+ * Fix slack link
+ * Add slack room to readme
+ * Update maintainers
+ * update maintainers and contributors
+ * resolves #1393: kill children with more effort on SIGINT
+ * xunit reporter support for optionally writing to a file
+ * if a reporter has a .done method, call it before exiting
+ * add support for reporter options
+ * only write to stdout in reporters
+
+2.0.0 / 2014-10-21
+==================
+
+ * remove: support for node 0.6.x, 0.4.x
+ * fix: landing reporter with non ansi characters (#211)
+ * fix: html reporter - preserve query params when navigating to suites/tests (#1358)
+ * fix: json stream reporter add error message to failed test
+ * fix: fixes for visionmedia -> mochajs
+ * fix: use stdio, fixes node deprecation warnings (#1391)
+
+1.21.5 / 2014-10-11
+==================
+
+ * fix: build for NodeJS v0.6.x
+ * fix: do not attempt to highlight syntax when non-HTML reporter is used
+ * update: escape-string-regexp to 1.0.2.
+ * fix: botched indentation in canonicalize()
+ * fix: .gitignore: ignore .patch and .diff files
+ * fix: changed 'Catched' to 'Caught' in uncaught exception error handler messages
+ * add: `pending` field for json reporter
+ * fix: Runner.prototype.uncaught: don't double-end runnables that already have a state.
+ * fix: --recursive, broken by f0facd2e
+ * update: replaces escapeRegexp with the escape-string-regexp package.
+ * update: commander to 2.3.0.
+ * update: diff to 1.0.8.
+ * fix: ability to disable syntax highlighting (#1329)
+ * fix: added empty object to errorJSON() call to catch when no error is present
+ * fix: never time out after calling enableTimeouts(false)
+ * fix: timeout(0) will work at suite level (#1300)
+ * Fix for --watch+only() issue (#888 )
+ * fix: respect err.showDiff, add Base reporter test (#810)
+
+1.22.1-3 / 2014-07-27
+==================
+
+ * fix: disabling timeouts with this.timeout(0) (#1301)
+
+1.22.1-3 / 2014-07-27
+==================
+
+ * fix: local uis and reporters (#1288)
+ * fix: building 1.21.0's changes in the browser (#1284)
+
+1.21.0 / 2014-07-23
+==================
+
+ * add: --no-timeouts option (#1262, #1268)
+ * add: --*- deprecation node flags (#1217)
+ * add: --watch-extensions argument (#1247)
+ * change: spec reporter is default (#1228)
+ * fix: diff output showing incorrect +/- (#1182)
+ * fix: diffs of circular structures (#1179)
+ * fix: re-render the progress bar when progress has changed only (#1151)
+ * fix support for environments with global and window (#1159)
+ * fix: reverting to previously defined onerror handler (#1178)
+ * fix: stringify non error objects passed to done() (#1270)
+ * fix: using local ui, reporters (#1267)
+ * fix: cleaning es6 arrows (#1176)
+ * fix: don't include attrs in failure tag for xunit (#1244)
+ * fix: fail tests that return a promise if promise is rejected w/o a reason (#1224)
+ * fix: showing failed tests in doc reporter (#1117)
+ * fix: dot reporter dots being off (#1204)
+ * fix: catch empty throws (#1219)
+ * fix: honoring timeout for sync operations (#1242)
+ * update: growl to 1.8.0
+
+1.20.1 / 2014-06-03
+==================
+
+ * update: should dev dependency to ~4.0.0 (#1231)
+
+1.20.0 / 2014-05-28
+==================
+
+ * add: filenames to suite objects (#1222)
+
+1.19.0 / 2014-05-17
+==================
+
+ * add: browser script option to package.json
+ * add: export file in Mocha.Test objects (#1174)
+ * add: add docs for wrapped node flags
+ * fix: mocha.run() to return error status in browser (#1216)
+ * fix: clean() to show failure details (#1205)
+ * fix: regex that generates html for new keyword (#1201)
+ * fix: sibling suites have inherited but separate contexts (#1164)
+
+
+1.18.2 / 2014-03-18
+==================
+
+ * fix: html runner was prevented from using #mocha as the default root el (#1162)
+
+1.18.1 / 2014-03-18
+==================
+
+ * fix: named before/after hooks in bdd, tdd, qunit interfaces (#1161)
+
+1.18.0 / 2014-03-13
+==================
+
+ * add: promise support (#329)
+ * add: named before/after hooks (#966)
+
+1.17.1 / 2014-01-22
+==================
+
+ * fix: expected messages in should.js (should.js#168)
+ * fix: expect errno global in node versions < v0.9.11 (#1111)
+ * fix: unreliable checkGlobals optimization (#1110)
+
+1.17.0 / 2014-01-09
+==================
+
+ * add: able to require globals (describe, it, etc.) through mocha (#1077)
+ * fix: abort previous run on --watch change (#1100)
+ * fix: reset context for each --watch triggered run (#1099)
+ * fix: error when cli can't resolve path or pattern (#799)
+ * fix: canonicalize objects before stringifying and diffing them (#1079)
+ * fix: make CR call behave like carriage return for non tty (#1087)
+
+
+1.16.2 / 2013-12-23
+==================
+
+ * fix: couple issues with ie 8 (#1082, #1081)
+ * fix: issue running the xunit reporter in browsers (#1068)
+ * fix: issue with firefox < 3.5 (#725)
+
+
+1.16.1 / 2013-12-19
+==================
+
+ * fix: recompiled for missed changes from the last release
+
+
+1.16.0 / 2013-12-19
+==================
+
+ * add: Runnable.globals(arr) for per test global whitelist (#1046)
+ * add: mocha.throwError(err) for assertion libs to call (#985)
+ * remove: --watch's spinner (#806)
+ * fix: duplicate test output for multi-line specs in spec reporter (#1006)
+ * fix: gracefully exit on SIGINT (#1063)
+ * fix expose the specified ui only in the browser (#984)
+ * fix: ensure process exit code is preserved when using --no-exit (#1059)
+ * fix: return true from window.onerror handler (#868)
+ * fix: xunit reporter to use process.stdout.write (#1068)
+ * fix: utils.clean(str) indentation (#761)
+ * fix: xunit reporter returning test duration a NaN (#1039)
+
+1.15.1 / 2013-12-03
+==================
+
+ * fix: recompiled for missed changes from the last release
+
+1.15.0 / 2013-12-02
+==================
+
+ * add: `--no-exit` to prevent `process.exit()` (#1018)
+ * fix: using inline diffs (#1044)
+ * fix: show pending test details in xunit reporter (#1051)
+ * fix: faster global leak detection (#1024)
+ * fix: yui compression (#1035)
+ * fix: wrapping long lines in test results (#1030, #1031)
+ * fix: handle errors in hooks (#1043)
+
+1.14.0 / 2013-11-02
+==================
+
+ * add: unified diff (#862)
+ * add: set MOCHA_COLORS env var to use colors (#965)
+ * add: able to override tests links in html reporters (#776)
+ * remove: teamcity reporter (#954)
+ * update: commander dependency to 2.0.0 (#1010)
+ * fix: mocha --ui will try to require the ui if not built in, as --reporter does (#1022)
+ * fix: send cursor commands only if isatty (#184, #1003)
+ * fix: include assertion message in base reporter (#993, #991)
+ * fix: consistent return of it, it.only, and describe, describe.only (#840)
+
+1.13.0 / 2013-09-15
+==================
+
+ * add: sort test files with --sort (#813)
+ * update: diff dependency to 1.0.7
+ * update: glob dependency to 3.2.3 (#927)
+ * fix: diffs show whitespace differences (#976)
+ * fix: improve global leaks (#783)
+ * fix: firefox window.getInterface leak
+ * fix: accessing iframe via window[iframeIndex] leak
+ * fix: faster global leak checking
+ * fix: reporter pending css selector (#970)
+
+1.12.1 / 2013-08-29
+==================
+
+ * remove test.js from .gitignore
+ * update included version of ms.js
+
+1.12.0 / 2013-07-01
+==================
+
+ * add: prevent diffs for differing types. Closes #900
+ * add `Mocha.process` hack for phantomjs
+ * fix: use compilers with requires
+ * fix regexps in diffs. Closes #890
+ * fix xunit NaN on failure. Closes #894
+ * fix: strip tab indentation in `clean` utility method
+ * fix: textmate bundle installation
+
+1.11.0 / 2013-06-12
+==================
+
+ * add --prof support
+ * add --harmony support
+ * add --harmony-generators support
+ * add "Uncaught " prefix to uncaught exceptions
+ * add web workers support
+ * add `suite.skip()`
+ * change to output # of pending / passing even on failures. Closes #872
+ * fix: prevent hooks from being called if we are bailing
+ * fix `this.timeout(0)`
+
+1.10.0 / 2013-05-21
+==================
+
+ * add add better globbing support for windows via `glob` module
+ * add support to pass through flags such as --debug-brk=1234. Closes #852
+ * add test.only, test.skip to qunit interface
+ * change to always use word-based diffs for now. Closes #733
+ * change `mocha init` tests.html to index.html
+ * fix `process` global leak in the browser
+ * fix: use resolve() instead of join() for --require
+ * fix: filterLeaks() condition to not consider indices in global object as leaks
+ * fix: restrict mocha.css styling to #mocha id
+ * fix: save timer references to avoid Sinon interfering in the browser build.
+
+1.9.0 / 2013-04-03
+==================
+
+ * add improved setImmediate implementation
+ * replace --ignore-leaks with --check-leaks
+ * change default of ignoreLeaks to true. Closes #791
+ * remove scrolling for HTML reporter
+ * fix retina support
+ * fix tmbundle, restrict to js scope
+
+1.8.2 / 2013-03-11
+==================
+
+ * add `setImmediate` support for 0.10.x
+ * fix mocha -w spinner on windows
+
+1.8.1 / 2013-01-09
+==================
+
+ * fix .bail() arity check causing it to default to true
+
+1.8.0 / 2013-01-08
+==================
+
+ * add Mocha() options bail support
+ * add `Mocha#bail()` method
+ * add instanceof check back for inheriting from Error
+ * add component.json
+ * add diff.js to browser build
+ * update growl
+ * fix TAP reporter failures comment :D
+
+1.7.4 / 2012-12-06
+==================
+
+ * add total number of passes and failures to TAP
+ * remove .bind() calls. re #680
+ * fix indexOf. Closes #680
+
+1.7.3 / 2012-11-30
+==================
+
+ * fix uncaught error support for the browser
+ * revert uncaught "fix" which breaks node
+
+1.7.2 / 2012-11-28
+==================
+
+ * fix uncaught errors to expose the original error message
+
+1.7.0 / 2012-11-07
+==================
+
+ * add `--async-only` support to prevent false positives for missing `done()`
+ * add sorting by filename in code coverage
+ * add HTML 5 doctype to browser template.
+ * add play button to html reporter to rerun a single test
+ * add `this.timeout(ms)` as Suite#timeout(ms). Closes #599
+ * update growl dependency to 1.6.x
+ * fix encoding of test-case ?grep. Closes #637
+ * fix unicode chars on windows
+ * fix dom globals in Opera/IE. Closes #243
+ * fix markdown reporter a tags
+ * fix `this.timeout("5s")` support
+
+1.6.0 / 2012-10-02
+==================
+
+ * add object diffs when `err.showDiff` is present
+ * add hiding of empty suites when pass/failures are toggled
+ * add faster `.length` checks to `checkGlobals()` before performing the filter
+
+1.5.0 / 2012-09-21
+==================
+
+ * add `ms()` to `.slow()` and `.timeout()`
+ * add `Mocha#checkLeaks()` to re-enable global leak checks
+ * add `this.slow()` option [aheckmann]
+ * add tab, CR, LF to error diffs for now
+ * add faster `.checkGlobals()` solution [guille]
+ * remove `fn.call()` from reduce util
+ * remove `fn.call()` from filter util
+ * fix forEach. Closes #582
+ * fix relaying of signals [TooTallNate]
+ * fix TAP reporter grep number
+
+1.4.2 / 2012-09-01
+==================
+
+ * add support to multiple `Mocha#globals()` calls, and strings
+ * add `mocha.reporter()` constructor support [jfirebaugh]
+ * add `mocha.timeout()`
+ * move query-string parser to utils.js
+ * move highlight code to utils.js
+ * fix third-party reporter support [exogen]
+ * fix client-side API to match node-side [jfirebaugh]
+ * fix mocha in iframe [joliss]
+
+1.4.1 / 2012-08-28
+==================
+
+ * add missing `Markdown` export
+ * fix `Mocha#grep()`, escape regexp strings
+ * fix reference error when `devicePixelRatio` is not defined. Closes #549
+
+1.4.0 / 2012-08-22
+==================
+
+ * add mkdir -p to `mocha init`. Closes #539
+ * add `.only()`. Closes #524
+ * add `.skip()`. Closes #524
+ * change str.trim() to use utils.trim(). Closes #533
+ * fix HTML progress indicator retina display
+ * fix url-encoding of click-to-grep HTML functionality
+
+1.3.2 / 2012-08-01
+==================
+
+ * fix exports double-execution regression. Closes #531
+
+1.3.1 / 2012-08-01
+==================
+
+ * add passes/failures toggling to HTML reporter
+ * add pending state to `xit()` and `xdescribe()` [Brian Moore]
+ * add the @charset "UTF-8"; to fix #522 with FireFox. [Jonathan Creamer]
+ * add border-bottom to #stats links
+ * add check for runnable in `Runner#uncaught()`. Closes #494
+ * add 0.4 and 0.6 back to travis.yml
+ * add `-E, --growl-errors` to growl on failures only
+ * add prefixes to debug() names. Closes #497
+ * add `Mocha#invert()` to js api
+ * change dot reporter to use sexy unicode dots
+ * fix error when clicking pending test in HTML reporter
+ * fix `make tm`
+
+1.3.0 / 2012-07-05
+==================
+
+ * add window scrolling to `HTML` reporter
+ * add v8 `--trace-*` option support
+ * add support for custom reports via `--reporter MODULE`
+ * add `--invert` switch to invert `--grep` matches
+ * fix export of `Nyan` reporter. Closes #495
+ * fix escaping of `HTML` suite titles. Closes #486
+ * fix `done()` called multiple times with an error test
+ * change `--grep` - regexp escape the input
+
+1.2.2 / 2012-06-28
+==================
+
+ * Added 0.8.0 support
+
+1.2.1 / 2012-06-25
+==================
+
+ * Added `this.test.error(err)` support to after each hooks. Closes #287
+ * Added: export top-level suite on global mocha object (mocha.suite). Closes #448
+ * Fixed `js` code block format error in markdown reporter
+ * Fixed deprecation warning when using `path.existsSync`
+ * Fixed --globals with wildcard
+ * Fixed chars in nyan when his head moves back
+ * Remove `--growl` from test/mocha.opts. Closes #289
+
+1.2.0 / 2012-06-17
+==================
+
+ * Added `nyan` reporter [Atsuya Takagi]
+ * Added `mocha init <path>` to copy client files
+ * Added "specify" synonym for "it" [domenic]
+ * Added global leak wildcard support [nathanbowser]
+ * Fixed runner emitter leak. closes #432
+ * Fixed omission of .js extension. Closes #454
+
+1.1.0 / 2012-05-30
+==================
+
+ * Added: check each `mocha(1)` arg for directories to walk
+ * Added `--recursive` [tricknotes]
+ * Added `context` for BDD [hokaccha]
+ * Added styling for new clickable titles
+ * Added clickable suite titles to HTML reporter
+ * Added warning when strings are thrown as errors
+ * Changed: green arrows again in HTML reporter styling
+ * Changed ul/li elements instead of divs for better copy-and-pasting [joliss]
+ * Fixed issue #325 - add better grep support to js api
+ * Fixed: save timer references to avoid Sinon interfering.
+
+1.0.3 / 2012-04-30
+==================
+
+ * Fixed string diff newlines
+ * Fixed: removed mocha.css target. Closes #401
+
+1.0.2 / 2012-04-25
+==================
+
+ * Added HTML reporter duration. Closes #47
+ * Fixed: one postMessage event listener [exogen]
+ * Fixed: allow --globals to be used multiple times. Closes #100 [brendannee]
+ * Fixed #158: removes jquery include from browser tests
+ * Fixed grep. Closes #372 [brendannee]
+ * Fixed #166 - When grepping don't display the empty suites
+ * Removed test/browser/style.css. Closes #385
+
+1.0.1 / 2012-04-04
+==================
+
+ * Fixed `.timeout()` in hooks
+ * Fixed: allow callback for `mocha.run()` in client version
+ * Fixed browser hook error display. Closes #361
+
+1.0.0 / 2012-03-24
+==================
+
+ * Added js API. Closes #265
+ * Added: initial run of tests with `--watch`. Closes #345
+ * Added: mark `location` as a global on the CS. Closes #311
+ * Added `markdown` reporter (github flavour)
+ * Added: scrolling menu to coverage.html. Closes #335
+ * Added source line to html report for Safari [Tyson Tate]
+ * Added "min" reporter, useful for `--watch` [Jakub Nešetřil]
+ * Added support for arbitrary compilers via . Closes #338 [Ian Young]
+ * Added Teamcity export to lib/reporters/index [Michael Riley]
+ * Fixed chopping of first char in error reporting. Closes #334 [reported by topfunky]
+ * Fixed terrible FF / Opera stack traces
+
+0.14.1 / 2012-03-06
+==================
+
+ * Added lib-cov to _.npmignore_
+ * Added reporter to `mocha.run([reporter])` as argument
+ * Added some margin-top to the HTML reporter
+ * Removed jQuery dependency
+ * Fixed `--watch`: purge require cache. Closes #266
+
+0.14.0 / 2012-03-01
+==================
+
+ * Added string diff support for terminal reporters
+
+0.13.0 / 2012-02-23
+==================
+
+ * Added preliminary test coverage support. Closes #5
+ * Added `HTMLCov` reporter
+ * Added `JSONCov` reporter [kunklejr]
+ * Added `xdescribe()` and `xit()` to the BDD interface. Closes #263 (docs * Changed: make json reporter output pretty json
+ * Fixed node-inspector support, swapped `--debug` for `debug` to match node.
+needed)
+Closes #247
+
+0.12.1 / 2012-02-14
+==================
+
+ * Added `npm docs mocha` support [TooTallNate]
+ * Added a `Context` object used for hook and test-case this. Closes #253
+ * Fixed `Suite#clone()` `.ctx` reference. Closes #262
+
+0.12.0 / 2012-02-02
+==================
+
+ * Added .coffee `--watch` support. Closes #242
+ * Added support to `--require` files relative to the CWD. Closes #241
+ * Added quick n dirty syntax highlighting. Closes #248
+ * Changed: made HTML progress indicator smaller
+ * Fixed xunit errors attribute [dhendo]
+
+0.10.2 / 2012-01-21
+==================
+
+ * Fixed suite count in reporter stats. Closes #222
+ * Fixed `done()` after timeout error reporting [Phil Sung]
+ * Changed the 0-based errors to 1
+
+0.10.1 / 2012-01-17
+==================
+
+ * Added support for node 0.7.x
+ * Fixed absolute path support. Closes #215 [kompiro]
+ * Fixed `--no-colors` option [Jussi Virtanen]
+ * Fixed Arial CSS typo in the correct file
+
+0.10.0 / 2012-01-13
+==================
+
+ * Added `-b, --bail` to exit on first exception [guillermo]
+ * Added support for `-gc` / `--expose-gc` [TooTallNate]
+ * Added `qunit`-inspired interface
+ * Added MIT LICENSE. Closes #194
+ * Added: `--watch` all .js in the CWD. Closes #139
+ * Fixed `self.test` reference in runner. Closes #189
+ * Fixed double reporting of uncaught exceptions after timeout. Closes #195
+
+0.8.2 / 2012-01-05
+==================
+
+ * Added test-case context support. Closes #113
+ * Fixed exit status. Closes #187
+ * Update commander. Closes #190
+
+0.8.1 / 2011-12-30
+==================
+
+ * Fixed reporting of uncaught exceptions. Closes #183
+ * Fixed error message defaulting [indutny]
+ * Changed mocha(1) from bash to node for windows [Nathan Rajlich]
+
+0.8.0 / 2011-12-28
+==================
+
+ * Added `XUnit` reporter [FeeFighters/visionmedia]
+ * Added `say(1)` notification support [Maciej Małecki]
+ * Changed: fail when done() is invoked with a non-Error. Closes #171
+ * Fixed `err.stack`, defaulting to message. Closes #180
+ * Fixed: `make tm` mkdir -p the dest. Closes #137
+ * Fixed mocha(1) --help bin name
+ * Fixed `-d` for `--debug` support
+
+0.7.1 / 2011-12-22
+==================
+
+ * Removed `mocha-debug(1)`, use `mocha --debug`
+ * Fixed CWD relative requires
+ * Fixed growl issue on windows [Raynos]
+ * Fixed: platform specific line endings [TooTallNate]
+ * Fixed: escape strings in HTML reporter. Closes #164
+
+0.7.0 / 2011-12-18
+==================
+
+ * Added support for IE{7,8} [guille]
+ * Changed: better browser nextTick implementation [guille]
+
+0.6.0 / 2011-12-18
+==================
+
+ * Added setZeroTimeout timeout for browser (nicer stack traces). Closes #153
+ * Added "view source" on hover for HTML reporter to make it obvious
+ * Changed: replace custom growl with growl lib
+ * Fixed duplicate reporting for HTML reporter. Closes #154
+ * Fixed silent hook errors in the HTML reporter. Closes #150
+
+0.5.0 / 2011-12-14
+==================
+
+ * Added: push node_modules directory onto module.paths for relative require Closes #93
+ * Added teamcity reporter [blindsey]
+ * Fixed: recover from uncaught exceptions for tests. Closes #94
+ * Fixed: only emit "test end" for uncaught within test, not hook
+
+0.4.0 / 2011-12-14
+==================
+
+ * Added support for test-specific timeouts via `this.timeout(0)`. Closes #134
+ * Added guillermo's client-side EventEmitter. Closes #132
+ * Added progress indicator to the HTML reporter
+ * Fixed slow browser tests. Closes #135
+ * Fixed "suite" color for light terminals
+ * Fixed `require()` leak spotted by [guillermo]
+
+0.3.6 / 2011-12-09
+==================
+
+ * Removed suite merging (for now)
+
+0.3.5 / 2011-12-08
+==================
+
+ * Added support for `window.onerror` [guillermo]
+ * Fixed: clear timeout on uncaught exceptions. Closes #131 [guillermo]
+ * Added `mocha.css` to PHONY list.
+ * Added `mocha.js` to PHONY list.
+
+0.3.4 / 2011-12-08
+==================
+
+ * Added: allow `done()` to be called with non-Error
+ * Added: return Runner from `mocha.run()`. Closes #126
+ * Fixed: run afterEach even on failures. Closes #125
+ * Fixed clobbering of current runnable. Closes #121
+
+0.3.3 / 2011-12-08
+==================
+
+ * Fixed hook timeouts. Closes #120
+ * Fixed uncaught exceptions in hooks
+
+0.3.2 / 2011-12-05
+==================
+
+ * Fixed weird reporting when `err.message` is not present
+
+0.3.1 / 2011-12-04
+==================
+
+ * Fixed hook event emitter leak. Closes #117
+ * Fixed: export `Spec` constructor. Closes #116
+
+0.3.0 / 2011-12-04
+==================
+
+ * Added `-w, --watch`. Closes #72
+ * Added `--ignore-leaks` to ignore global leak checking
+ * Added browser `?grep=pattern` support
+ * Added `--globals <names>` to specify accepted globals. Closes #99
+ * Fixed `mocha-debug(1)` on some systems. Closes #232
+ * Fixed growl total, use `runner.total`
+
+0.2.0 / 2011-11-30
+==================
+
+ * Added `--globals <names>` to specify accepted globals. Closes #99
+ * Fixed funky highlighting of messages. Closes #97
+ * Fixed `mocha-debug(1)`. Closes #232
+ * Fixed growl total, use runner.total
+
+0.1.0 / 2011-11-29
+==================
+
+ * Added `suiteSetup` and `suiteTeardown` to TDD interface [David Henderson]
+ * Added growl icons. Closes #84
+ * Fixed coffee-script support
+
+0.0.8 / 2011-11-25
+==================
+
+ * Fixed: use `Runner#total` for accurate reporting
+
+0.0.7 / 2011-11-25
+==================
+
+ * Added `Hook`
+ * Added `Runnable`
+ * Changed: `Test` is `Runnable`
+ * Fixed global leak reporting in hooks
+ * Fixed: > 2 calls to done() only report the error once
+ * Fixed: clear timer on failure. Closes #80
+
+0.0.6 / 2011-11-25
+==================
+
+ * Fixed return on immediate async error. Closes #80
+
+0.0.5 / 2011-11-24
+==================
+
+ * Fixed: make mocha.opts whitespace less picky [kkaefer]
+
+0.0.4 / 2011-11-24
+==================
+
+ * Added `--interfaces`
+ * Added `--reporters`
+ * Added `-c, --colors`. Closes #69
+ * Fixed hook timeouts
+
+0.0.3 / 2011-11-23
+==================
+
+ * Added `-C, --no-colors` to explicitly disable
+ * Added coffee-script support
+
+0.0.2 / 2011-11-22
+==================
+
+ * Fixed global leak detection due to Safari bind() change
+ * Fixed: escape html entities in Doc reporter
+ * Fixed: escape html entities in HTML reporter
+ * Fixed pending test support for HTML reporter. Closes #66
+
+0.0.1 / 2011-11-22
+==================
+
+ * Added `--timeout` second shorthand support, ex `--timeout 3s`.
+ * Fixed "test end" event for uncaughtExceptions. Closes #61
+
+0.0.1-alpha6 / 2011-11-19
+==================
+
+ * Added travis CI support (needs enabling when public)
+ * Added preliminary browser support
+ * Added `make mocha.css` target. Closes #45
+ * Added stack trace to TAP errors. Closes #52
+ * Renamed tearDown to teardown. Closes #49
+ * Fixed: cascading hooksc. Closes #30
+ * Fixed some colors for non-tty
+ * Fixed errors thrown in sync test-cases due to nextTick
+ * Fixed Base.window.width... again give precedence to 0.6.x
+
+0.0.1-alpha5 / 2011-11-17
+==================
+
+ * Added `doc` reporter. Closes #33
+ * Added suite merging. Closes #28
+ * Added TextMate bundle and `make tm`. Closes #20
+
+0.0.1-alpha4 / 2011-11-15
+==================
+
+ * Fixed getWindowSize() for 0.4.x
+
+0.0.1-alpha3 / 2011-11-15
+==================
+
+ * Added `-s, --slow <ms>` to specify "slow" test threshold
+ * Added `mocha-debug(1)`
+ * Added `mocha.opts` support. Closes #31
+ * Added: default [files] to _test/*.js_
+ * Added protection against multiple calls to `done()`. Closes #35
+ * Changed: bright yellow for slow Dot reporter tests
+
+0.0.1-alpha1 / 2011-11-08
+==================
+
+ * Missed this one :)
+
+0.0.1-alpha1 / 2011-11-08
+==================
+
+ * Initial release
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/LICENSE
new file mode 100644
index 00000000000..287db889936
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2011-2017 JS Foundation and contributors, https://js.foundation
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/README.md
new file mode 100644
index 00000000000..9e4d4dcbeac
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/README.md
@@ -0,0 +1,124 @@
+# Mocha needs YOU!
+
+*Did you know* Mocha [is a dependency of over 100,000 projects](https://libraries.io/npm/mocha) published to npm alone?
+
+**Despite this, we're currently unable to merge most pull requests due to lack of maintenance resources.**
+
+**Are you interested in triaging issues or reviewing open PRs? Have some time to hack on its codebase?** If you would like to help maintain Mocha, please contact `@boneskull` on [Gitter](https://gitter.im/mochajs/mocha).
+
+*Thank you* :kissing_heart: to all of you interested in helping. These are Mocha's immediate needs:
+
+1. Increase test coverage on Node.js and browser
+ - Increase integration coverage for all reporters
+ - `html` reporter must be tested in browser
+ - ~~Basic console reporters (*not* `nyan`, `landing`, etc.) must be tested in **both** browser and Node.js contexts; PhantomJS can consume all console reporters~~
+ - ~~Filesystem-based reporters must be tested in Node.js context~~
+ - **UPDATE - May 24 2017**: Thanks to [community contributions](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md#mag-coverage), the coverage on most reporters has increased dramatically! The `html` reporter is still in [dire need of coverage](https://coveralls.io/builds/11674428/source?filename=lib%2Freporters%2Fhtml.js).
+ - Increase coverage against all interfaces (`exports` in particular). Ideally this becomes a "matrix" where we repeat sets of integration tests across all interfaces.
+ - Refactor non-Node.js-specific tests to allow them to run in a browser context. Node.js-specific tests include those which *require* the CLI or filesystem. Most everything else is fair game.
+2. Review current open pull requests
+ - We need individuals familiar with Mocha's codebase. Got questions? Ask them in [our chat room](https://gitter.im/mochajs/mocha).
+ - Pull requests **must** have supporting tests. The only exceptions are pure cosmetic or non-functional changes.
+ - Pull request contributors must sign the CLA.
+3. Close old, inactive issues and pull requests
+ - ~~A bot should do this. We need a bot. Got a bot?~~ We now use GitHub's own [probot-stale](https://www.npmjs.com/package/probot-stale).
+4. Triage issues
+ - If we run into "critical" bugs, they need fixing.
+ - "Critical" means Mocha is broken w/o workarounds for a *large percentage* of users
+ - Otherwise: respond to issues, close new dupe issues, confirm bugs, ask for more info, etc.
+
+Once we gain ground on the above items, we can work together formalize our contribution guidelines and governance. For further info & ideas, please see our [projects](https://github.com/mochajs/mocha/projects/).
+
+*You needn't be a maintainer to submit a pull request for test coverage!*
+
+-- @boneskull, *Jan 17 2016*
+
+<br><br>
+<p align="center">
+ <img src="https://cldup.com/xFVFxOioAU.svg" alt="Mocha test framework"/>
+</p>
+
+[![Build Status](https://api.travis-ci.org/mochajs/mocha.svg?branch=master)](http://travis-ci.org/mochajs/mocha)
+[![Coverage Status](https://coveralls.io/repos/github/mochajs/mocha/badge.svg)](https://coveralls.io/github/mochajs/mocha)
+[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha?ref=badge_shield)
+[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/mochajs/mocha?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![OpenCollective](https://opencollective.com/mochajs/backers/badge.svg)](#backers)
+[![OpenCollective](https://opencollective.com/mochajs/sponsors/badge.svg)](#sponsors)
+<br><img alt="Mocha Browser Support h/t SauceLabs" src="https://saucelabs.com/browser-matrix/mochajs.svg" width="354">
+
+ Mocha is a simple, flexible, fun JavaScript test framework for node.js and the browser. For more information view the [documentation](http://mochajs.org).
+
+## Links
+
+ - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
+ - [Google Group](http://groups.google.com/group/mochajs)
+ - [Wiki](https://github.com/mochajs/mocha/wiki)
+ - Mocha [Extensions and reporters](https://github.com/mochajs/mocha/wiki)
+
+
+## Backers
+
+[Become a backer]((https://opencollective.com/mochajs#backer)) and show your support to our open source project.
+
+<a href="https://opencollective.com/mochajs/backer/0/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/0/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/1/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/1/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/2/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/2/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/3/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/3/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/4/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/4/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/5/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/5/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/6/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/6/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/7/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/7/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/8/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/8/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/9/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/9/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/10/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/10/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/11/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/11/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/12/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/12/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/13/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/13/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/14/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/14/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/15/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/15/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/16/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/16/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/17/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/17/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/18/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/18/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/19/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/19/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/20/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/20/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/21/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/21/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/22/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/22/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/23/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/23/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/24/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/24/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/25/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/25/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/26/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/26/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/27/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/27/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/28/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/28/avatar"></a>
+<a href="https://opencollective.com/mochajs/backer/29/website" target="_blank"><img src="https://opencollective.com/mochajs/backer/29/avatar"></a>
+
+
+## Sponsors
+
+Does your company use Mocha? Ask your manager or marketing team if your company would be interested in supporting our project. Support will allow the maintainers to dedicate more time for maintenance and new features for everyone. Also, your company's logo will show [on GitHub](https://github.com/mochajs/mocha#readme) and on [our site](https://mochajs.org)--who doesn't want a little extra exposure? [Here's the info](https://opencollective.com/mochajs#sponsor).
+
+<a href="https://opencollective.com/mochajs/sponsor/0/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/0/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/1/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/1/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/2/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/2/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/3/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/3/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/4/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/4/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/5/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/5/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/6/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/6/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/7/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/7/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/8/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/8/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/9/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/9/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/10/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/10/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/11/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/11/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/12/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/12/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/13/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/13/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/14/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/14/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/15/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/15/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/16/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/16/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/17/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/17/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/18/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/18/avatar"></a>
+<a href="https://opencollective.com/mochajs/sponsor/19/website" target="_blank"><img src="https://opencollective.com/mochajs/sponsor/19/avatar"></a>
+
+## License
+
+[MIT](LICENSE)
+
+[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fmochajs%2Fmocha?ref=badge_large)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/bower.json
new file mode 100644
index 00000000000..e96cc9526d2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/bower.json
@@ -0,0 +1,38 @@
+{
+ "name": "mocha",
+ "homepage": "https://mochajs.org",
+ "description": "simple, flexible, fun test framework",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/mochajs/mocha.git"
+ },
+ "main": [
+ "mocha.js",
+ "mocha.css"
+ ],
+ "ignore": [
+ "bin",
+ "editors",
+ "images",
+ "lib",
+ "scripts",
+ "test",
+ "assets",
+ "media",
+ ".*",
+ "index.js",
+ "karma.conf.js",
+ "browser-entry.js",
+ "Makefile",
+ "package.json",
+ "appveyor.yml"
+ ],
+ "keywords": [
+ "mocha",
+ "test",
+ "bdd",
+ "tdd",
+ "tap"
+ ],
+ "license": "MIT"
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.css b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.css
new file mode 100644
index 00000000000..ec96b003c98
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.css
@@ -0,0 +1,326 @@
+@charset "utf-8";
+
+body {
+ margin:0;
+}
+
+#mocha {
+ font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
+ margin: 60px 50px;
+}
+
+#mocha ul,
+#mocha li {
+ margin: 0;
+ padding: 0;
+}
+
+#mocha ul {
+ list-style: none;
+}
+
+#mocha h1,
+#mocha h2 {
+ margin: 0;
+}
+
+#mocha h1 {
+ margin-top: 15px;
+ font-size: 1em;
+ font-weight: 200;
+}
+
+#mocha h1 a {
+ text-decoration: none;
+ color: inherit;
+}
+
+#mocha h1 a:hover {
+ text-decoration: underline;
+}
+
+#mocha .suite .suite h1 {
+ margin-top: 0;
+ font-size: .8em;
+}
+
+#mocha .hidden {
+ display: none;
+}
+
+#mocha h2 {
+ font-size: 12px;
+ font-weight: normal;
+ cursor: pointer;
+}
+
+#mocha .suite {
+ margin-left: 15px;
+}
+
+#mocha .test {
+ margin-left: 15px;
+ overflow: hidden;
+}
+
+#mocha .test.pending:hover h2::after {
+ content: '(pending)';
+ font-family: arial, sans-serif;
+}
+
+#mocha .test.pass.medium .duration {
+ background: #c09853;
+}
+
+#mocha .test.pass.slow .duration {
+ background: #b94a48;
+}
+
+#mocha .test.pass::before {
+ content: '✓';
+ font-size: 12px;
+ display: block;
+ float: left;
+ margin-right: 5px;
+ color: #00d6b2;
+}
+
+#mocha .test.pass .duration {
+ font-size: 9px;
+ margin-left: 5px;
+ padding: 2px 5px;
+ color: #fff;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
+ -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.2);
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+}
+
+#mocha .test.pass.fast .duration {
+ display: none;
+}
+
+#mocha .test.pending {
+ color: #0b97c4;
+}
+
+#mocha .test.pending::before {
+ content: '◦';
+ color: #0b97c4;
+}
+
+#mocha .test.fail {
+ color: #c00;
+}
+
+#mocha .test.fail pre {
+ color: black;
+}
+
+#mocha .test.fail::before {
+ content: '✖';
+ font-size: 12px;
+ display: block;
+ float: left;
+ margin-right: 5px;
+ color: #c00;
+}
+
+#mocha .test pre.error {
+ color: #c00;
+ max-height: 300px;
+ overflow: auto;
+}
+
+#mocha .test .html-error {
+ overflow: auto;
+ color: black;
+ line-height: 1.5;
+ display: block;
+ float: left;
+ clear: left;
+ font: 12px/1.5 monaco, monospace;
+ margin: 5px;
+ padding: 15px;
+ border: 1px solid #eee;
+ max-width: 85%; /*(1)*/
+ max-width: -webkit-calc(100% - 42px);
+ max-width: -moz-calc(100% - 42px);
+ max-width: calc(100% - 42px); /*(2)*/
+ max-height: 300px;
+ word-wrap: break-word;
+ border-bottom-color: #ddd;
+ -webkit-box-shadow: 0 1px 3px #eee;
+ -moz-box-shadow: 0 1px 3px #eee;
+ box-shadow: 0 1px 3px #eee;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+#mocha .test .html-error pre.error {
+ border: none;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ -webkit-box-shadow: 0;
+ -moz-box-shadow: 0;
+ box-shadow: 0;
+ padding: 0;
+ margin: 0;
+ margin-top: 18px;
+ max-height: none;
+}
+
+/**
+ * (1): approximate for browsers not supporting calc
+ * (2): 42 = 2*15 + 2*10 + 2*1 (padding + margin + border)
+ * ^^ seriously
+ */
+#mocha .test pre {
+ display: block;
+ float: left;
+ clear: left;
+ font: 12px/1.5 monaco, monospace;
+ margin: 5px;
+ padding: 15px;
+ border: 1px solid #eee;
+ max-width: 85%; /*(1)*/
+ max-width: -webkit-calc(100% - 42px);
+ max-width: -moz-calc(100% - 42px);
+ max-width: calc(100% - 42px); /*(2)*/
+ word-wrap: break-word;
+ border-bottom-color: #ddd;
+ -webkit-box-shadow: 0 1px 3px #eee;
+ -moz-box-shadow: 0 1px 3px #eee;
+ box-shadow: 0 1px 3px #eee;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+#mocha .test h2 {
+ position: relative;
+}
+
+#mocha .test a.replay {
+ position: absolute;
+ top: 3px;
+ right: 0;
+ text-decoration: none;
+ vertical-align: middle;
+ display: block;
+ width: 15px;
+ height: 15px;
+ line-height: 15px;
+ text-align: center;
+ background: #eee;
+ font-size: 15px;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+ -webkit-transition:opacity 200ms;
+ -moz-transition:opacity 200ms;
+ -o-transition:opacity 200ms;
+ transition: opacity 200ms;
+ opacity: 0.3;
+ color: #888;
+}
+
+#mocha .test:hover a.replay {
+ opacity: 1;
+}
+
+#mocha-report.pass .test.fail {
+ display: none;
+}
+
+#mocha-report.fail .test.pass {
+ display: none;
+}
+
+#mocha-report.pending .test.pass,
+#mocha-report.pending .test.fail {
+ display: none;
+}
+#mocha-report.pending .test.pass.pending {
+ display: block;
+}
+
+#mocha-error {
+ color: #c00;
+ font-size: 1.5em;
+ font-weight: 100;
+ letter-spacing: 1px;
+}
+
+#mocha-stats {
+ position: fixed;
+ top: 15px;
+ right: 10px;
+ font-size: 12px;
+ margin: 0;
+ color: #888;
+ z-index: 1;
+}
+
+#mocha-stats .progress {
+ float: right;
+ padding-top: 0;
+
+ /**
+ * Set safe initial values, so mochas .progress does not inherit these
+ * properties from Bootstrap .progress (which causes .progress height to
+ * equal line height set in Bootstrap).
+ */
+ height: auto;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ background-color: initial;
+}
+
+#mocha-stats em {
+ color: black;
+}
+
+#mocha-stats a {
+ text-decoration: none;
+ color: inherit;
+}
+
+#mocha-stats a:hover {
+ border-bottom: 1px solid #eee;
+}
+
+#mocha-stats li {
+ display: inline-block;
+ margin: 0 5px;
+ list-style: none;
+ padding-top: 11px;
+}
+
+#mocha-stats canvas {
+ width: 40px;
+ height: 40px;
+}
+
+#mocha code .comment { color: #ddd; }
+#mocha code .init { color: #2f6fad; }
+#mocha code .string { color: #5890ad; }
+#mocha code .keyword { color: #8a6343; }
+#mocha code .number { color: #2f6fad; }
+
+@media screen and (max-device-width: 480px) {
+ #mocha {
+ margin: 60px 0px;
+ }
+
+ #mocha #stats {
+ position: absolute;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.js
new file mode 100644
index 00000000000..9a40e98a328
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/mocha/mocha.js
@@ -0,0 +1,16590 @@
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (process,global){
+'use strict';
+
+/* eslint no-unused-vars: off */
+/* eslint-env commonjs */
+
+/**
+ * Shim process.stdout.
+ */
+
+process.stdout = require('browser-stdout')();
+
+var Mocha = require('./lib/mocha');
+
+/**
+ * Create a Mocha instance.
+ *
+ * @return {undefined}
+ */
+
+var mocha = new Mocha({ reporter: 'html' });
+
+/**
+ * Save timer references to avoid Sinon interfering (see GH-237).
+ */
+
+var Date = global.Date;
+var setTimeout = global.setTimeout;
+var setInterval = global.setInterval;
+var clearTimeout = global.clearTimeout;
+var clearInterval = global.clearInterval;
+
+var uncaughtExceptionHandlers = [];
+
+var originalOnerrorHandler = global.onerror;
+
+/**
+ * Remove uncaughtException listener.
+ * Revert to original onerror handler if previously defined.
+ */
+
+process.removeListener = function (e, fn) {
+ if (e === 'uncaughtException') {
+ if (originalOnerrorHandler) {
+ global.onerror = originalOnerrorHandler;
+ } else {
+ global.onerror = function () {};
+ }
+ var i = Mocha.utils.indexOf(uncaughtExceptionHandlers, fn);
+ if (i !== -1) {
+ uncaughtExceptionHandlers.splice(i, 1);
+ }
+ }
+};
+
+/**
+ * Implements uncaughtException listener.
+ */
+
+process.on = function (e, fn) {
+ if (e === 'uncaughtException') {
+ global.onerror = function (err, url, line) {
+ fn(new Error(err + ' (' + url + ':' + line + ')'));
+ return !mocha.allowUncaught;
+ };
+ uncaughtExceptionHandlers.push(fn);
+ }
+};
+
+// The BDD UI is registered by default, but no UI will be functional in the
+// browser without an explicit call to the overridden `mocha.ui` (see below).
+// Ensure that this default UI does not expose its methods to the global scope.
+mocha.suite.removeAllListeners('pre-require');
+
+var immediateQueue = [];
+var immediateTimeout;
+
+function timeslice () {
+ var immediateStart = new Date().getTime();
+ while (immediateQueue.length && (new Date().getTime() - immediateStart) < 100) {
+ immediateQueue.shift()();
+ }
+ if (immediateQueue.length) {
+ immediateTimeout = setTimeout(timeslice, 0);
+ } else {
+ immediateTimeout = null;
+ }
+}
+
+/**
+ * High-performance override of Runner.immediately.
+ */
+
+Mocha.Runner.immediately = function (callback) {
+ immediateQueue.push(callback);
+ if (!immediateTimeout) {
+ immediateTimeout = setTimeout(timeslice, 0);
+ }
+};
+
+/**
+ * Function to allow assertion libraries to throw errors directly into mocha.
+ * This is useful when running tests in a browser because window.onerror will
+ * only receive the 'message' attribute of the Error.
+ */
+mocha.throwError = function (err) {
+ Mocha.utils.forEach(uncaughtExceptionHandlers, function (fn) {
+ fn(err);
+ });
+ throw err;
+};
+
+/**
+ * Override ui to ensure that the ui functions are initialized.
+ * Normally this would happen in Mocha.prototype.loadFiles.
+ */
+
+mocha.ui = function (ui) {
+ Mocha.prototype.ui.call(this, ui);
+ this.suite.emit('pre-require', global, null, this);
+ return this;
+};
+
+/**
+ * Setup mocha with the given setting options.
+ */
+
+mocha.setup = function (opts) {
+ if (typeof opts === 'string') {
+ opts = { ui: opts };
+ }
+ for (var opt in opts) {
+ if (opts.hasOwnProperty(opt)) {
+ this[opt](opts[opt]);
+ }
+ }
+ return this;
+};
+
+/**
+ * Run mocha, returning the Runner.
+ */
+
+mocha.run = function (fn) {
+ var options = mocha.options;
+ mocha.globals('location');
+
+ var query = Mocha.utils.parseQuery(global.location.search || '');
+ if (query.grep) {
+ mocha.grep(query.grep);
+ }
+ if (query.fgrep) {
+ mocha.fgrep(query.fgrep);
+ }
+ if (query.invert) {
+ mocha.invert();
+ }
+
+ return Mocha.prototype.run.call(mocha, function (err) {
+ // The DOM Document is not available in Web Workers.
+ var document = global.document;
+ if (document && document.getElementById('mocha') && options.noHighlighting !== true) {
+ Mocha.utils.highlightTags('code');
+ }
+ if (fn) {
+ fn(err);
+ }
+ });
+};
+
+/**
+ * Expose the process shim.
+ * https://github.com/mochajs/mocha/pull/916
+ */
+
+Mocha.process = process;
+
+/**
+ * Expose mocha.
+ */
+
+global.Mocha = Mocha;
+global.mocha = mocha;
+
+// this allows test/acceptance/required-tokens.js to pass; thus,
+// you can now do `const describe = require('mocha').describe` in a
+// browser context (assuming browserification). should fix #880
+module.exports = global;
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./lib/mocha":14,"_process":82,"browser-stdout":41}],2:[function(require,module,exports){
+'use strict';
+
+function noop () {}
+
+module.exports = function () {
+ return noop;
+};
+
+},{}],3:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module exports.
+ */
+
+exports.EventEmitter = EventEmitter;
+
+/**
+ * Object#toString reference.
+ */
+var objToString = Object.prototype.toString;
+
+/**
+ * Check if a value is an array.
+ *
+ * @api private
+ * @param {*} val The value to test.
+ * @return {boolean} true if the value is an array, otherwise false.
+ */
+function isArray (val) {
+ return objToString.call(val) === '[object Array]';
+}
+
+/**
+ * Event emitter constructor.
+ *
+ * @api public
+ */
+function EventEmitter () {}
+
+/**
+ * Add a listener.
+ *
+ * @api public
+ * @param {string} name Event name.
+ * @param {Function} fn Event handler.
+ * @return {EventEmitter} Emitter instance.
+ */
+EventEmitter.prototype.on = function (name, fn) {
+ if (!this.$events) {
+ this.$events = {};
+ }
+
+ if (!this.$events[name]) {
+ this.$events[name] = fn;
+ } else if (isArray(this.$events[name])) {
+ this.$events[name].push(fn);
+ } else {
+ this.$events[name] = [this.$events[name], fn];
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.addListener = EventEmitter.prototype.on;
+
+/**
+ * Adds a volatile listener.
+ *
+ * @api public
+ * @param {string} name Event name.
+ * @param {Function} fn Event handler.
+ * @return {EventEmitter} Emitter instance.
+ */
+EventEmitter.prototype.once = function (name, fn) {
+ var self = this;
+
+ function on () {
+ self.removeListener(name, on);
+ fn.apply(this, arguments);
+ }
+
+ on.listener = fn;
+ this.on(name, on);
+
+ return this;
+};
+
+/**
+ * Remove a listener.
+ *
+ * @api public
+ * @param {string} name Event name.
+ * @param {Function} fn Event handler.
+ * @return {EventEmitter} Emitter instance.
+ */
+EventEmitter.prototype.removeListener = function (name, fn) {
+ if (this.$events && this.$events[name]) {
+ var list = this.$events[name];
+
+ if (isArray(list)) {
+ var pos = -1;
+
+ for (var i = 0, l = list.length; i < l; i++) {
+ if (list[i] === fn || (list[i].listener && list[i].listener === fn)) {
+ pos = i;
+ break;
+ }
+ }
+
+ if (pos < 0) {
+ return this;
+ }
+
+ list.splice(pos, 1);
+
+ if (!list.length) {
+ delete this.$events[name];
+ }
+ } else if (list === fn || (list.listener && list.listener === fn)) {
+ delete this.$events[name];
+ }
+ }
+
+ return this;
+};
+
+/**
+ * Remove all listeners for an event.
+ *
+ * @api public
+ * @param {string} name Event name.
+ * @return {EventEmitter} Emitter instance.
+ */
+EventEmitter.prototype.removeAllListeners = function (name) {
+ if (name === undefined) {
+ this.$events = {};
+ return this;
+ }
+
+ if (this.$events && this.$events[name]) {
+ this.$events[name] = null;
+ }
+
+ return this;
+};
+
+/**
+ * Get all listeners for a given event.
+ *
+ * @api public
+ * @param {string} name Event name.
+ * @return {EventEmitter} Emitter instance.
+ */
+EventEmitter.prototype.listeners = function (name) {
+ if (!this.$events) {
+ this.$events = {};
+ }
+
+ if (!this.$events[name]) {
+ this.$events[name] = [];
+ }
+
+ if (!isArray(this.$events[name])) {
+ this.$events[name] = [this.$events[name]];
+ }
+
+ return this.$events[name];
+};
+
+/**
+ * Emit an event.
+ *
+ * @api public
+ * @param {string} name Event name.
+ * @return {boolean} true if at least one handler was invoked, else false.
+ */
+EventEmitter.prototype.emit = function (name) {
+ if (!this.$events) {
+ return false;
+ }
+
+ var handler = this.$events[name];
+
+ if (!handler) {
+ return false;
+ }
+
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ if (typeof handler === 'function') {
+ handler.apply(this, args);
+ } else if (isArray(handler)) {
+ var listeners = handler.slice();
+
+ for (var i = 0, l = listeners.length; i < l; i++) {
+ listeners[i].apply(this, args);
+ }
+ } else {
+ return false;
+ }
+
+ return true;
+};
+
+},{}],4:[function(require,module,exports){
+'use strict';
+
+/**
+ * Expose `Progress`.
+ */
+
+module.exports = Progress;
+
+/**
+ * Initialize a new `Progress` indicator.
+ */
+function Progress () {
+ this.percent = 0;
+ this.size(0);
+ this.fontSize(11);
+ this.font('helvetica, arial, sans-serif');
+}
+
+/**
+ * Set progress size to `size`.
+ *
+ * @api public
+ * @param {number} size
+ * @return {Progress} Progress instance.
+ */
+Progress.prototype.size = function (size) {
+ this._size = size;
+ return this;
+};
+
+/**
+ * Set text to `text`.
+ *
+ * @api public
+ * @param {string} text
+ * @return {Progress} Progress instance.
+ */
+Progress.prototype.text = function (text) {
+ this._text = text;
+ return this;
+};
+
+/**
+ * Set font size to `size`.
+ *
+ * @api public
+ * @param {number} size
+ * @return {Progress} Progress instance.
+ */
+Progress.prototype.fontSize = function (size) {
+ this._fontSize = size;
+ return this;
+};
+
+/**
+ * Set font to `family`.
+ *
+ * @param {string} family
+ * @return {Progress} Progress instance.
+ */
+Progress.prototype.font = function (family) {
+ this._font = family;
+ return this;
+};
+
+/**
+ * Update percentage to `n`.
+ *
+ * @param {number} n
+ * @return {Progress} Progress instance.
+ */
+Progress.prototype.update = function (n) {
+ this.percent = n;
+ return this;
+};
+
+/**
+ * Draw on `ctx`.
+ *
+ * @param {CanvasRenderingContext2d} ctx
+ * @return {Progress} Progress instance.
+ */
+Progress.prototype.draw = function (ctx) {
+ try {
+ var percent = Math.min(this.percent, 100);
+ var size = this._size;
+ var half = size / 2;
+ var x = half;
+ var y = half;
+ var rad = half - 1;
+ var fontSize = this._fontSize;
+
+ ctx.font = fontSize + 'px ' + this._font;
+
+ var angle = Math.PI * 2 * (percent / 100);
+ ctx.clearRect(0, 0, size, size);
+
+ // outer circle
+ ctx.strokeStyle = '#9f9f9f';
+ ctx.beginPath();
+ ctx.arc(x, y, rad, 0, angle, false);
+ ctx.stroke();
+
+ // inner circle
+ ctx.strokeStyle = '#eee';
+ ctx.beginPath();
+ ctx.arc(x, y, rad - 1, 0, angle, true);
+ ctx.stroke();
+
+ // text
+ var text = this._text || (percent | 0) + '%';
+ var w = ctx.measureText(text).width;
+
+ ctx.fillText(text, x - w / 2 + 1, y + fontSize / 2 - 1);
+ } catch (err) {
+ // don't fail if we can't render progress
+ }
+ return this;
+};
+
+},{}],5:[function(require,module,exports){
+(function (global){
+'use strict';
+
+exports.isatty = function isatty () {
+ return true;
+};
+
+exports.getWindowSize = function getWindowSize () {
+ if ('innerHeight' in global) {
+ return [global.innerHeight, global.innerWidth];
+ }
+ // In a Web Worker, the DOM Window is not available.
+ return [640, 480];
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],6:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var JSON = require('json3');
+
+/**
+ * Expose `Context`.
+ */
+
+module.exports = Context;
+
+/**
+ * Initialize a new `Context`.
+ *
+ * @api private
+ */
+function Context () {}
+
+/**
+ * Set or get the context `Runnable` to `runnable`.
+ *
+ * @api private
+ * @param {Runnable} runnable
+ * @return {Context}
+ */
+Context.prototype.runnable = function (runnable) {
+ if (!arguments.length) {
+ return this._runnable;
+ }
+ this.test = this._runnable = runnable;
+ return this;
+};
+
+/**
+ * Set test timeout `ms`.
+ *
+ * @api private
+ * @param {number} ms
+ * @return {Context} self
+ */
+Context.prototype.timeout = function (ms) {
+ if (!arguments.length) {
+ return this.runnable().timeout();
+ }
+ this.runnable().timeout(ms);
+ return this;
+};
+
+/**
+ * Set test timeout `enabled`.
+ *
+ * @api private
+ * @param {boolean} enabled
+ * @return {Context} self
+ */
+Context.prototype.enableTimeouts = function (enabled) {
+ this.runnable().enableTimeouts(enabled);
+ return this;
+};
+
+/**
+ * Set test slowness threshold `ms`.
+ *
+ * @api private
+ * @param {number} ms
+ * @return {Context} self
+ */
+Context.prototype.slow = function (ms) {
+ this.runnable().slow(ms);
+ return this;
+};
+
+/**
+ * Mark a test as skipped.
+ *
+ * @api private
+ * @return {Context} self
+ */
+Context.prototype.skip = function () {
+ this.runnable().skip();
+ return this;
+};
+
+/**
+ * Allow a number of retries on failed tests
+ *
+ * @api private
+ * @param {number} n
+ * @return {Context} self
+ */
+Context.prototype.retries = function (n) {
+ if (!arguments.length) {
+ return this.runnable().retries();
+ }
+ this.runnable().retries(n);
+ return this;
+};
+
+/**
+ * Inspect the context void of `._runnable`.
+ *
+ * @api private
+ * @return {string}
+ */
+Context.prototype.inspect = function () {
+ return JSON.stringify(this, function (key, val) {
+ return key === 'runnable' || key === 'test' ? undefined : val;
+ }, 2);
+};
+
+},{"json3":69}],7:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Runnable = require('./runnable');
+var inherits = require('./utils').inherits;
+
+/**
+ * Expose `Hook`.
+ */
+
+module.exports = Hook;
+
+/**
+ * Initialize a new `Hook` with the given `title` and callback `fn`.
+ *
+ * @param {String} title
+ * @param {Function} fn
+ * @api private
+ */
+function Hook (title, fn) {
+ Runnable.call(this, title, fn);
+ this.type = 'hook';
+}
+
+/**
+ * Inherit from `Runnable.prototype`.
+ */
+inherits(Hook, Runnable);
+
+/**
+ * Get or set the test `err`.
+ *
+ * @param {Error} err
+ * @return {Error}
+ * @api public
+ */
+Hook.prototype.error = function (err) {
+ if (!arguments.length) {
+ err = this._error;
+ this._error = null;
+ return err;
+ }
+
+ this._error = err;
+};
+
+},{"./runnable":33,"./utils":38}],8:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Test = require('../test');
+
+/**
+ * BDD-style interface:
+ *
+ * describe('Array', function() {
+ * describe('#indexOf()', function() {
+ * it('should return -1 when not present', function() {
+ * // ...
+ * });
+ *
+ * it('should return the index when present', function() {
+ * // ...
+ * });
+ * });
+ * });
+ *
+ * @param {Suite} suite Root suite.
+ */
+module.exports = function (suite) {
+ var suites = [suite];
+
+ suite.on('pre-require', function (context, file, mocha) {
+ var common = require('./common')(suites, context, mocha);
+
+ context.before = common.before;
+ context.after = common.after;
+ context.beforeEach = common.beforeEach;
+ context.afterEach = common.afterEach;
+ context.run = mocha.options.delay && common.runWithSuite(suite);
+ /**
+ * Describe a "suite" with the given `title`
+ * and callback `fn` containing nested suites
+ * and/or tests.
+ */
+
+ context.describe = context.context = function (title, fn) {
+ return common.suite.create({
+ title: title,
+ file: file,
+ fn: fn
+ });
+ };
+
+ /**
+ * Pending describe.
+ */
+
+ context.xdescribe = context.xcontext = context.describe.skip = function (title, fn) {
+ return common.suite.skip({
+ title: title,
+ file: file,
+ fn: fn
+ });
+ };
+
+ /**
+ * Exclusive suite.
+ */
+
+ context.describe.only = function (title, fn) {
+ return common.suite.only({
+ title: title,
+ file: file,
+ fn: fn
+ });
+ };
+
+ /**
+ * Describe a specification or test-case
+ * with the given `title` and callback `fn`
+ * acting as a thunk.
+ */
+
+ context.it = context.specify = function (title, fn) {
+ var suite = suites[0];
+ if (suite.isPending()) {
+ fn = null;
+ }
+ var test = new Test(title, fn);
+ test.file = file;
+ suite.addTest(test);
+ return test;
+ };
+
+ /**
+ * Exclusive test-case.
+ */
+
+ context.it.only = function (title, fn) {
+ return common.test.only(mocha, context.it(title, fn));
+ };
+
+ /**
+ * Pending test case.
+ */
+
+ context.xit = context.xspecify = context.it.skip = function (title) {
+ context.it(title);
+ };
+
+ /**
+ * Number of attempts to retry.
+ */
+ context.it.retries = function (n) {
+ context.retries(n);
+ };
+ });
+};
+
+},{"../test":36,"./common":9}],9:[function(require,module,exports){
+'use strict';
+
+var Suite = require('../suite');
+
+/**
+ * Functions common to more than one interface.
+ *
+ * @param {Suite[]} suites
+ * @param {Context} context
+ * @param {Mocha} mocha
+ * @return {Object} An object containing common functions.
+ */
+module.exports = function (suites, context, mocha) {
+ return {
+ /**
+ * This is only present if flag --delay is passed into Mocha. It triggers
+ * root suite execution.
+ *
+ * @param {Suite} suite The root suite.
+ * @return {Function} A function which runs the root suite
+ */
+ runWithSuite: function runWithSuite (suite) {
+ return function run () {
+ suite.run();
+ };
+ },
+
+ /**
+ * Execute before running tests.
+ *
+ * @param {string} name
+ * @param {Function} fn
+ */
+ before: function (name, fn) {
+ suites[0].beforeAll(name, fn);
+ },
+
+ /**
+ * Execute after running tests.
+ *
+ * @param {string} name
+ * @param {Function} fn
+ */
+ after: function (name, fn) {
+ suites[0].afterAll(name, fn);
+ },
+
+ /**
+ * Execute before each test case.
+ *
+ * @param {string} name
+ * @param {Function} fn
+ */
+ beforeEach: function (name, fn) {
+ suites[0].beforeEach(name, fn);
+ },
+
+ /**
+ * Execute after each test case.
+ *
+ * @param {string} name
+ * @param {Function} fn
+ */
+ afterEach: function (name, fn) {
+ suites[0].afterEach(name, fn);
+ },
+
+ suite: {
+ /**
+ * Create an exclusive Suite; convenience function
+ * See docstring for create() below.
+ *
+ * @param {Object} opts
+ * @returns {Suite}
+ */
+ only: function only (opts) {
+ mocha.options.hasOnly = true;
+ opts.isOnly = true;
+ return this.create(opts);
+ },
+
+ /**
+ * Create a Suite, but skip it; convenience function
+ * See docstring for create() below.
+ *
+ * @param {Object} opts
+ * @returns {Suite}
+ */
+ skip: function skip (opts) {
+ opts.pending = true;
+ return this.create(opts);
+ },
+
+ /**
+ * Creates a suite.
+ * @param {Object} opts Options
+ * @param {string} opts.title Title of Suite
+ * @param {Function} [opts.fn] Suite Function (not always applicable)
+ * @param {boolean} [opts.pending] Is Suite pending?
+ * @param {string} [opts.file] Filepath where this Suite resides
+ * @param {boolean} [opts.isOnly] Is Suite exclusive?
+ * @returns {Suite}
+ */
+ create: function create (opts) {
+ var suite = Suite.create(suites[0], opts.title);
+ suite.pending = Boolean(opts.pending);
+ suite.file = opts.file;
+ suites.unshift(suite);
+ if (opts.isOnly) {
+ suite.parent._onlySuites = suite.parent._onlySuites.concat(suite);
+ mocha.options.hasOnly = true;
+ }
+ if (typeof opts.fn === 'function') {
+ opts.fn.call(suite);
+ suites.shift();
+ } else if (typeof opts.fn === 'undefined' && !suite.pending) {
+ throw new Error('Suite "' + suite.fullTitle() + '" was defined but no callback was supplied. Supply a callback or explicitly skip the suite.');
+ }
+
+ return suite;
+ }
+ },
+
+ test: {
+
+ /**
+ * Exclusive test-case.
+ *
+ * @param {Object} mocha
+ * @param {Function} test
+ * @returns {*}
+ */
+ only: function (mocha, test) {
+ test.parent._onlyTests = test.parent._onlyTests.concat(test);
+ mocha.options.hasOnly = true;
+ return test;
+ },
+
+ /**
+ * Pending test case.
+ *
+ * @param {string} title
+ */
+ skip: function (title) {
+ context.test(title);
+ },
+
+ /**
+ * Number of retry attempts
+ *
+ * @param {number} n
+ */
+ retries: function (n) {
+ context.retries(n);
+ }
+ }
+ };
+};
+
+},{"../suite":35}],10:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Suite = require('../suite');
+var Test = require('../test');
+
+/**
+ * Exports-style (as Node.js module) interface:
+ *
+ * exports.Array = {
+ * '#indexOf()': {
+ * 'should return -1 when the value is not present': function() {
+ *
+ * },
+ *
+ * 'should return the correct index when the value is present': function() {
+ *
+ * }
+ * }
+ * };
+ *
+ * @param {Suite} suite Root suite.
+ */
+module.exports = function (suite) {
+ var suites = [suite];
+
+ suite.on('require', visit);
+
+ function visit (obj, file) {
+ var suite;
+ for (var key in obj) {
+ if (typeof obj[key] === 'function') {
+ var fn = obj[key];
+ switch (key) {
+ case 'before':
+ suites[0].beforeAll(fn);
+ break;
+ case 'after':
+ suites[0].afterAll(fn);
+ break;
+ case 'beforeEach':
+ suites[0].beforeEach(fn);
+ break;
+ case 'afterEach':
+ suites[0].afterEach(fn);
+ break;
+ default:
+ var test = new Test(key, fn);
+ test.file = file;
+ suites[0].addTest(test);
+ }
+ } else {
+ suite = Suite.create(suites[0], key);
+ suites.unshift(suite);
+ visit(obj[key], file);
+ suites.shift();
+ }
+ }
+ }
+};
+
+},{"../suite":35,"../test":36}],11:[function(require,module,exports){
+'use strict';
+
+exports.bdd = require('./bdd');
+exports.tdd = require('./tdd');
+exports.qunit = require('./qunit');
+exports.exports = require('./exports');
+
+},{"./bdd":8,"./exports":10,"./qunit":12,"./tdd":13}],12:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Test = require('../test');
+
+/**
+ * QUnit-style interface:
+ *
+ * suite('Array');
+ *
+ * test('#length', function() {
+ * var arr = [1,2,3];
+ * ok(arr.length == 3);
+ * });
+ *
+ * test('#indexOf()', function() {
+ * var arr = [1,2,3];
+ * ok(arr.indexOf(1) == 0);
+ * ok(arr.indexOf(2) == 1);
+ * ok(arr.indexOf(3) == 2);
+ * });
+ *
+ * suite('String');
+ *
+ * test('#length', function() {
+ * ok('foo'.length == 3);
+ * });
+ *
+ * @param {Suite} suite Root suite.
+ */
+module.exports = function (suite) {
+ var suites = [suite];
+
+ suite.on('pre-require', function (context, file, mocha) {
+ var common = require('./common')(suites, context, mocha);
+
+ context.before = common.before;
+ context.after = common.after;
+ context.beforeEach = common.beforeEach;
+ context.afterEach = common.afterEach;
+ context.run = mocha.options.delay && common.runWithSuite(suite);
+ /**
+ * Describe a "suite" with the given `title`.
+ */
+
+ context.suite = function (title) {
+ if (suites.length > 1) {
+ suites.shift();
+ }
+ return common.suite.create({
+ title: title,
+ file: file,
+ fn: false
+ });
+ };
+
+ /**
+ * Exclusive Suite.
+ */
+
+ context.suite.only = function (title) {
+ if (suites.length > 1) {
+ suites.shift();
+ }
+ return common.suite.only({
+ title: title,
+ file: file,
+ fn: false
+ });
+ };
+
+ /**
+ * Describe a specification or test-case
+ * with the given `title` and callback `fn`
+ * acting as a thunk.
+ */
+
+ context.test = function (title, fn) {
+ var test = new Test(title, fn);
+ test.file = file;
+ suites[0].addTest(test);
+ return test;
+ };
+
+ /**
+ * Exclusive test-case.
+ */
+
+ context.test.only = function (title, fn) {
+ return common.test.only(mocha, context.test(title, fn));
+ };
+
+ context.test.skip = common.test.skip;
+ context.test.retries = common.test.retries;
+ });
+};
+
+},{"../test":36,"./common":9}],13:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Test = require('../test');
+
+/**
+ * TDD-style interface:
+ *
+ * suite('Array', function() {
+ * suite('#indexOf()', function() {
+ * suiteSetup(function() {
+ *
+ * });
+ *
+ * test('should return -1 when not present', function() {
+ *
+ * });
+ *
+ * test('should return the index when present', function() {
+ *
+ * });
+ *
+ * suiteTeardown(function() {
+ *
+ * });
+ * });
+ * });
+ *
+ * @param {Suite} suite Root suite.
+ */
+module.exports = function (suite) {
+ var suites = [suite];
+
+ suite.on('pre-require', function (context, file, mocha) {
+ var common = require('./common')(suites, context, mocha);
+
+ context.setup = common.beforeEach;
+ context.teardown = common.afterEach;
+ context.suiteSetup = common.before;
+ context.suiteTeardown = common.after;
+ context.run = mocha.options.delay && common.runWithSuite(suite);
+
+ /**
+ * Describe a "suite" with the given `title` and callback `fn` containing
+ * nested suites and/or tests.
+ */
+ context.suite = function (title, fn) {
+ return common.suite.create({
+ title: title,
+ file: file,
+ fn: fn
+ });
+ };
+
+ /**
+ * Pending suite.
+ */
+ context.suite.skip = function (title, fn) {
+ return common.suite.skip({
+ title: title,
+ file: file,
+ fn: fn
+ });
+ };
+
+ /**
+ * Exclusive test-case.
+ */
+ context.suite.only = function (title, fn) {
+ return common.suite.only({
+ title: title,
+ file: file,
+ fn: fn
+ });
+ };
+
+ /**
+ * Describe a specification or test-case with the given `title` and
+ * callback `fn` acting as a thunk.
+ */
+ context.test = function (title, fn) {
+ var suite = suites[0];
+ if (suite.isPending()) {
+ fn = null;
+ }
+ var test = new Test(title, fn);
+ test.file = file;
+ suite.addTest(test);
+ return test;
+ };
+
+ /**
+ * Exclusive test-case.
+ */
+
+ context.test.only = function (title, fn) {
+ return common.test.only(mocha, context.test(title, fn));
+ };
+
+ context.test.skip = common.test.skip;
+ context.test.retries = common.test.retries;
+ });
+};
+
+},{"../test":36,"./common":9}],14:[function(require,module,exports){
+(function (process,global,__dirname){
+'use strict';
+
+/*!
+ * mocha
+ * Copyright(c) 2011 TJ Holowaychuk <tj@vision-media.ca>
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var escapeRe = require('escape-string-regexp');
+var path = require('path');
+var reporters = require('./reporters');
+var utils = require('./utils');
+
+/**
+ * Expose `Mocha`.
+ */
+
+exports = module.exports = Mocha;
+
+/**
+ * To require local UIs and reporters when running in node.
+ */
+
+if (!process.browser) {
+ var cwd = process.cwd();
+ module.paths.push(cwd, path.join(cwd, 'node_modules'));
+}
+
+/**
+ * Expose internals.
+ */
+
+exports.utils = utils;
+exports.interfaces = require('./interfaces');
+exports.reporters = reporters;
+exports.Runnable = require('./runnable');
+exports.Context = require('./context');
+exports.Runner = require('./runner');
+exports.Suite = require('./suite');
+exports.Hook = require('./hook');
+exports.Test = require('./test');
+
+/**
+ * Return image `name` path.
+ *
+ * @api private
+ * @param {string} name
+ * @return {string}
+ */
+function image (name) {
+ return path.join(__dirname, '../images', name + '.png');
+}
+
+/**
+ * Set up mocha with `options`.
+ *
+ * Options:
+ *
+ * - `ui` name "bdd", "tdd", "exports" etc
+ * - `reporter` reporter instance, defaults to `mocha.reporters.spec`
+ * - `globals` array of accepted globals
+ * - `timeout` timeout in milliseconds
+ * - `retries` number of times to retry failed tests
+ * - `bail` bail on the first test failure
+ * - `slow` milliseconds to wait before considering a test slow
+ * - `ignoreLeaks` ignore global leaks
+ * - `fullTrace` display the full stack-trace on failing
+ * - `grep` string or regexp to filter tests with
+ *
+ * @param {Object} options
+ * @api public
+ */
+function Mocha (options) {
+ options = options || {};
+ this.files = [];
+ this.options = options;
+ if (options.grep) {
+ this.grep(new RegExp(options.grep));
+ }
+ if (options.fgrep) {
+ this.fgrep(options.fgrep);
+ }
+ this.suite = new exports.Suite('', new exports.Context());
+ this.ui(options.ui);
+ this.bail(options.bail);
+ this.reporter(options.reporter, options.reporterOptions);
+ if (typeof options.timeout !== 'undefined' && options.timeout !== null) {
+ this.timeout(options.timeout);
+ }
+ if (typeof options.retries !== 'undefined' && options.retries !== null) {
+ this.retries(options.retries);
+ }
+ this.useColors(options.useColors);
+ if (options.enableTimeouts !== null) {
+ this.enableTimeouts(options.enableTimeouts);
+ }
+ if (options.slow) {
+ this.slow(options.slow);
+ }
+}
+
+/**
+ * Enable or disable bailing on the first failure.
+ *
+ * @api public
+ * @param {boolean} [bail]
+ */
+Mocha.prototype.bail = function (bail) {
+ if (!arguments.length) {
+ bail = true;
+ }
+ this.suite.bail(bail);
+ return this;
+};
+
+/**
+ * Add test `file`.
+ *
+ * @api public
+ * @param {string} file
+ */
+Mocha.prototype.addFile = function (file) {
+ this.files.push(file);
+ return this;
+};
+
+/**
+ * Set reporter to `reporter`, defaults to "spec".
+ *
+ * @param {String|Function} reporter name or constructor
+ * @param {Object} reporterOptions optional options
+ * @api public
+ * @param {string|Function} reporter name or constructor
+ * @param {Object} reporterOptions optional options
+ */
+Mocha.prototype.reporter = function (reporter, reporterOptions) {
+ if (typeof reporter === 'function') {
+ this._reporter = reporter;
+ } else {
+ reporter = reporter || 'spec';
+ var _reporter;
+ // Try to load a built-in reporter.
+ if (reporters[reporter]) {
+ _reporter = reporters[reporter];
+ }
+ // Try to load reporters from process.cwd() and node_modules
+ if (!_reporter) {
+ try {
+ _reporter = require(reporter);
+ } catch (err) {
+ if (err.message.indexOf('Cannot find module') !== -1) {
+ // Try to load reporters from a path (absolute or relative)
+ try {
+ _reporter = require(path.resolve(process.cwd(), reporter));
+ } catch (_err) {
+ err.message.indexOf('Cannot find module') !== -1 ? console.warn('"' + reporter + '" reporter not found')
+ : console.warn('"' + reporter + '" reporter blew up with error:\n' + err.stack);
+ }
+ } else {
+ console.warn('"' + reporter + '" reporter blew up with error:\n' + err.stack);
+ }
+ }
+ }
+ if (!_reporter && reporter === 'teamcity') {
+ console.warn('The Teamcity reporter was moved to a package named ' +
+ 'mocha-teamcity-reporter ' +
+ '(https://npmjs.org/package/mocha-teamcity-reporter).');
+ }
+ if (!_reporter) {
+ throw new Error('invalid reporter "' + reporter + '"');
+ }
+ this._reporter = _reporter;
+ }
+ this.options.reporterOptions = reporterOptions;
+ return this;
+};
+
+/**
+ * Set test UI `name`, defaults to "bdd".
+ *
+ * @api public
+ * @param {string} bdd
+ */
+Mocha.prototype.ui = function (name) {
+ name = name || 'bdd';
+ this._ui = exports.interfaces[name];
+ if (!this._ui) {
+ try {
+ this._ui = require(name);
+ } catch (err) {
+ throw new Error('invalid interface "' + name + '"');
+ }
+ }
+ this._ui = this._ui(this.suite);
+
+ this.suite.on('pre-require', function (context) {
+ exports.afterEach = context.afterEach || context.teardown;
+ exports.after = context.after || context.suiteTeardown;
+ exports.beforeEach = context.beforeEach || context.setup;
+ exports.before = context.before || context.suiteSetup;
+ exports.describe = context.describe || context.suite;
+ exports.it = context.it || context.test;
+ exports.xit = context.xit || context.test.skip;
+ exports.setup = context.setup || context.beforeEach;
+ exports.suiteSetup = context.suiteSetup || context.before;
+ exports.suiteTeardown = context.suiteTeardown || context.after;
+ exports.suite = context.suite || context.describe;
+ exports.teardown = context.teardown || context.afterEach;
+ exports.test = context.test || context.it;
+ exports.run = context.run;
+ });
+
+ return this;
+};
+
+/**
+ * Load registered files.
+ *
+ * @api private
+ */
+Mocha.prototype.loadFiles = function (fn) {
+ var self = this;
+ var suite = this.suite;
+ this.files.forEach(function (file) {
+ file = path.resolve(file);
+ suite.emit('pre-require', global, file, self);
+ suite.emit('require', require(file), file, self);
+ suite.emit('post-require', global, file, self);
+ });
+ fn && fn();
+};
+
+/**
+ * Enable growl support.
+ *
+ * @api private
+ */
+Mocha.prototype._growl = function (runner, reporter) {
+ var notify = require('growl');
+
+ runner.on('end', function () {
+ var stats = reporter.stats;
+ if (stats.failures) {
+ var msg = stats.failures + ' of ' + runner.total + ' tests failed';
+ notify(msg, { name: 'mocha', title: 'Failed', image: image('error') });
+ } else {
+ notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', {
+ name: 'mocha',
+ title: 'Passed',
+ image: image('ok')
+ });
+ }
+ });
+};
+
+/**
+ * Escape string and add it to grep as a regexp.
+ *
+ * @api public
+ * @param str
+ * @returns {Mocha}
+ */
+Mocha.prototype.fgrep = function (str) {
+ return this.grep(new RegExp(escapeRe(str)));
+};
+
+/**
+ * Add regexp to grep, if `re` is a string it is escaped.
+ *
+ * @param {RegExp|String} re
+ * @return {Mocha}
+ * @api public
+ * @param {RegExp|string} re
+ * @return {Mocha}
+ */
+Mocha.prototype.grep = function (re) {
+ if (utils.isString(re)) {
+ // extract args if it's regex-like, i.e: [string, pattern, flag]
+ var arg = re.match(/^\/(.*)\/(g|i|)$|.*/);
+ this.options.grep = new RegExp(arg[1] || arg[0], arg[2]);
+ } else {
+ this.options.grep = re;
+ }
+ return this;
+};
+/**
+ * Invert `.grep()` matches.
+ *
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.invert = function () {
+ this.options.invert = true;
+ return this;
+};
+
+/**
+ * Ignore global leaks.
+ *
+ * @param {Boolean} ignore
+ * @return {Mocha}
+ * @api public
+ * @param {boolean} ignore
+ * @return {Mocha}
+ */
+Mocha.prototype.ignoreLeaks = function (ignore) {
+ this.options.ignoreLeaks = Boolean(ignore);
+ return this;
+};
+
+/**
+ * Enable global leak checking.
+ *
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.checkLeaks = function () {
+ this.options.ignoreLeaks = false;
+ return this;
+};
+
+/**
+ * Display long stack-trace on failing
+ *
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.fullTrace = function () {
+ this.options.fullStackTrace = true;
+ return this;
+};
+
+/**
+ * Enable growl support.
+ *
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.growl = function () {
+ this.options.growl = true;
+ return this;
+};
+
+/**
+ * Ignore `globals` array or string.
+ *
+ * @param {Array|String} globals
+ * @return {Mocha}
+ * @api public
+ * @param {Array|string} globals
+ * @return {Mocha}
+ */
+Mocha.prototype.globals = function (globals) {
+ this.options.globals = (this.options.globals || []).concat(globals);
+ return this;
+};
+
+/**
+ * Emit color output.
+ *
+ * @param {Boolean} colors
+ * @return {Mocha}
+ * @api public
+ * @param {boolean} colors
+ * @return {Mocha}
+ */
+Mocha.prototype.useColors = function (colors) {
+ if (colors !== undefined) {
+ this.options.useColors = colors;
+ }
+ return this;
+};
+
+/**
+ * Use inline diffs rather than +/-.
+ *
+ * @param {Boolean} inlineDiffs
+ * @return {Mocha}
+ * @api public
+ * @param {boolean} inlineDiffs
+ * @return {Mocha}
+ */
+Mocha.prototype.useInlineDiffs = function (inlineDiffs) {
+ this.options.useInlineDiffs = inlineDiffs !== undefined && inlineDiffs;
+ return this;
+};
+
+/**
+ * Set the timeout in milliseconds.
+ *
+ * @param {Number} timeout
+ * @return {Mocha}
+ * @api public
+ * @param {number} timeout
+ * @return {Mocha}
+ */
+Mocha.prototype.timeout = function (timeout) {
+ this.suite.timeout(timeout);
+ return this;
+};
+
+/**
+ * Set the number of times to retry failed tests.
+ *
+ * @param {Number} retry times
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.retries = function (n) {
+ this.suite.retries(n);
+ return this;
+};
+
+/**
+ * Set slowness threshold in milliseconds.
+ *
+ * @param {Number} slow
+ * @return {Mocha}
+ * @api public
+ * @param {number} slow
+ * @return {Mocha}
+ */
+Mocha.prototype.slow = function (slow) {
+ this.suite.slow(slow);
+ return this;
+};
+
+/**
+ * Enable timeouts.
+ *
+ * @param {Boolean} enabled
+ * @return {Mocha}
+ * @api public
+ * @param {boolean} enabled
+ * @return {Mocha}
+ */
+Mocha.prototype.enableTimeouts = function (enabled) {
+ this.suite.enableTimeouts(arguments.length && enabled !== undefined ? enabled : true);
+ return this;
+};
+
+/**
+ * Makes all tests async (accepting a callback)
+ *
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.asyncOnly = function () {
+ this.options.asyncOnly = true;
+ return this;
+};
+
+/**
+ * Disable syntax highlighting (in browser).
+ *
+ * @api public
+ */
+Mocha.prototype.noHighlighting = function () {
+ this.options.noHighlighting = true;
+ return this;
+};
+
+/**
+ * Enable uncaught errors to propagate (in browser).
+ *
+ * @return {Mocha}
+ * @api public
+ */
+Mocha.prototype.allowUncaught = function () {
+ this.options.allowUncaught = true;
+ return this;
+};
+
+/**
+ * Delay root suite execution.
+ * @returns {Mocha}
+ */
+Mocha.prototype.delay = function delay () {
+ this.options.delay = true;
+ return this;
+};
+
+/**
+ * Tests marked only fail the suite
+ * @returns {Mocha}
+ */
+Mocha.prototype.forbidOnly = function () {
+ this.options.forbidOnly = true;
+ return this;
+};
+
+/**
+ * Pending tests and tests marked skip fail the suite
+ * @returns {Mocha}
+ */
+Mocha.prototype.forbidPending = function () {
+ this.options.forbidPending = true;
+ return this;
+};
+
+/**
+ * Run tests and invoke `fn()` when complete.
+ *
+ * @api public
+ * @param {Function} fn
+ * @return {Runner}
+ */
+Mocha.prototype.run = function (fn) {
+ if (this.files.length) {
+ this.loadFiles();
+ }
+ var suite = this.suite;
+ var options = this.options;
+ options.files = this.files;
+ var runner = new exports.Runner(suite, options.delay);
+ var reporter = new this._reporter(runner, options);
+ runner.ignoreLeaks = options.ignoreLeaks !== false;
+ runner.fullStackTrace = options.fullStackTrace;
+ runner.hasOnly = options.hasOnly;
+ runner.asyncOnly = options.asyncOnly;
+ runner.allowUncaught = options.allowUncaught;
+ runner.forbidOnly = options.forbidOnly;
+ runner.forbidPending = options.forbidPending;
+ if (options.grep) {
+ runner.grep(options.grep, options.invert);
+ }
+ if (options.globals) {
+ runner.globals(options.globals);
+ }
+ if (options.growl) {
+ this._growl(runner, reporter);
+ }
+ if (options.useColors !== undefined) {
+ exports.reporters.Base.useColors = options.useColors;
+ }
+ exports.reporters.Base.inlineDiffs = options.useInlineDiffs;
+
+ function done (failures) {
+ if (reporter.done) {
+ reporter.done(failures, fn);
+ } else {
+ fn && fn(failures);
+ }
+ }
+
+ return runner.run(done);
+};
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},"/lib")
+},{"./context":6,"./hook":7,"./interfaces":11,"./reporters":21,"./runnable":33,"./runner":34,"./suite":35,"./test":36,"./utils":38,"_process":82,"escape-string-regexp":61,"growl":63,"path":42}],15:[function(require,module,exports){
+'use strict';
+
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ * - `long` verbose formatting [false]
+ *
+ * @api public
+ * @param {string|number} val
+ * @param {Object} options
+ * @return {string|number}
+ */
+module.exports = function (val, options) {
+ options = options || {};
+ if (typeof val === 'string') {
+ return parse(val);
+ }
+ // https://github.com/mochajs/mocha/pull/1035
+ return options['long'] ? longFormat(val) : shortFormat(val);
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @api private
+ * @param {string} str
+ * @return {number}
+ */
+function parse (str) {
+ var match = (/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i).exec(str);
+ if (!match) {
+ return;
+ }
+ var n = parseFloat(match[1]);
+ var type = (match[2] || 'ms').toLowerCase();
+ switch (type) {
+ case 'years':
+ case 'year':
+ case 'y':
+ return n * y;
+ case 'days':
+ case 'day':
+ case 'd':
+ return n * d;
+ case 'hours':
+ case 'hour':
+ case 'h':
+ return n * h;
+ case 'minutes':
+ case 'minute':
+ case 'm':
+ return n * m;
+ case 'seconds':
+ case 'second':
+ case 's':
+ return n * s;
+ case 'ms':
+ return n;
+ default:
+ // No default case
+ }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @api private
+ * @param {number} ms
+ * @return {string}
+ */
+function shortFormat (ms) {
+ if (ms >= d) {
+ return Math.round(ms / d) + 'd';
+ }
+ if (ms >= h) {
+ return Math.round(ms / h) + 'h';
+ }
+ if (ms >= m) {
+ return Math.round(ms / m) + 'm';
+ }
+ if (ms >= s) {
+ return Math.round(ms / s) + 's';
+ }
+ return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @api private
+ * @param {number} ms
+ * @return {string}
+ */
+function longFormat (ms) {
+ return plural(ms, d, 'day') ||
+ plural(ms, h, 'hour') ||
+ plural(ms, m, 'minute') ||
+ plural(ms, s, 'second') ||
+ ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ *
+ * @api private
+ * @param {number} ms
+ * @param {number} n
+ * @param {string} name
+ */
+function plural (ms, n, name) {
+ if (ms < n) {
+ return;
+ }
+ if (ms < n * 1.5) {
+ return Math.floor(ms / n) + ' ' + name;
+ }
+ return Math.ceil(ms / n) + ' ' + name + 's';
+}
+
+},{}],16:[function(require,module,exports){
+'use strict';
+
+/**
+ * Expose `Pending`.
+ */
+
+module.exports = Pending;
+
+/**
+ * Initialize a new `Pending` error with the given message.
+ *
+ * @param {string} message
+ */
+function Pending (message) {
+ this.message = message;
+}
+
+},{}],17:[function(require,module,exports){
+(function (process,global){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+var diff = require('diff');
+var ms = require('../ms');
+var utils = require('../utils');
+var supportsColor = process.browser ? null : require('supports-color');
+
+/**
+ * Expose `Base`.
+ */
+
+exports = module.exports = Base;
+
+/**
+ * Save timer references to avoid Sinon interfering.
+ * See: https://github.com/mochajs/mocha/issues/237
+ */
+
+/* eslint-disable no-unused-vars, no-native-reassign */
+var Date = global.Date;
+var setTimeout = global.setTimeout;
+var setInterval = global.setInterval;
+var clearTimeout = global.clearTimeout;
+var clearInterval = global.clearInterval;
+/* eslint-enable no-unused-vars, no-native-reassign */
+
+/**
+ * Check if both stdio streams are associated with a tty.
+ */
+
+var isatty = tty.isatty(1) && tty.isatty(2);
+
+/**
+ * Enable coloring by default, except in the browser interface.
+ */
+
+exports.useColors = !process.browser && (supportsColor || (process.env.MOCHA_COLORS !== undefined));
+
+/**
+ * Inline diffs instead of +/-
+ */
+
+exports.inlineDiffs = false;
+
+/**
+ * Default color map.
+ */
+
+exports.colors = {
+ pass: 90,
+ fail: 31,
+ 'bright pass': 92,
+ 'bright fail': 91,
+ 'bright yellow': 93,
+ pending: 36,
+ suite: 0,
+ 'error title': 0,
+ 'error message': 31,
+ 'error stack': 90,
+ checkmark: 32,
+ fast: 90,
+ medium: 33,
+ slow: 31,
+ green: 32,
+ light: 90,
+ 'diff gutter': 90,
+ 'diff added': 32,
+ 'diff removed': 31
+};
+
+/**
+ * Default symbol map.
+ */
+
+exports.symbols = {
+ ok: '✓',
+ err: '✖',
+ dot: '․',
+ comma: ',',
+ bang: '!'
+};
+
+// With node.js on Windows: use symbols available in terminal default fonts
+if (process.platform === 'win32') {
+ exports.symbols.ok = '\u221A';
+ exports.symbols.err = '\u00D7';
+ exports.symbols.dot = '.';
+}
+
+/**
+ * Color `str` with the given `type`,
+ * allowing colors to be disabled,
+ * as well as user-defined color
+ * schemes.
+ *
+ * @param {string} type
+ * @param {string} str
+ * @return {string}
+ * @api private
+ */
+var color = exports.color = function (type, str) {
+ if (!exports.useColors) {
+ return String(str);
+ }
+ return '\u001b[' + exports.colors[type] + 'm' + str + '\u001b[0m';
+};
+
+/**
+ * Expose term window size, with some defaults for when stderr is not a tty.
+ */
+
+exports.window = {
+ width: 75
+};
+
+if (isatty) {
+ exports.window.width = process.stdout.getWindowSize
+ ? process.stdout.getWindowSize(1)[0]
+ : tty.getWindowSize()[1];
+}
+
+/**
+ * Expose some basic cursor interactions that are common among reporters.
+ */
+
+exports.cursor = {
+ hide: function () {
+ isatty && process.stdout.write('\u001b[?25l');
+ },
+
+ show: function () {
+ isatty && process.stdout.write('\u001b[?25h');
+ },
+
+ deleteLine: function () {
+ isatty && process.stdout.write('\u001b[2K');
+ },
+
+ beginningOfLine: function () {
+ isatty && process.stdout.write('\u001b[0G');
+ },
+
+ CR: function () {
+ if (isatty) {
+ exports.cursor.deleteLine();
+ exports.cursor.beginningOfLine();
+ } else {
+ process.stdout.write('\r');
+ }
+ }
+};
+
+/**
+ * Output the given `failures` as a list.
+ *
+ * @param {Array} failures
+ * @api public
+ */
+
+exports.list = function (failures) {
+ console.log();
+ failures.forEach(function (test, i) {
+ // format
+ var fmt = color('error title', ' %s) %s:\n') +
+ color('error message', ' %s') +
+ color('error stack', '\n%s\n');
+
+ // msg
+ var msg;
+ var err = test.err;
+ var message;
+ if (err.message && typeof err.message.toString === 'function') {
+ message = err.message + '';
+ } else if (typeof err.inspect === 'function') {
+ message = err.inspect() + '';
+ } else {
+ message = '';
+ }
+ var stack = err.stack || message;
+ var index = message ? stack.indexOf(message) : -1;
+ var actual = err.actual;
+ var expected = err.expected;
+ var escape = true;
+
+ if (index === -1) {
+ msg = message;
+ } else {
+ index += message.length;
+ msg = stack.slice(0, index);
+ // remove msg from stack
+ stack = stack.slice(index + 1);
+ }
+
+ // uncaught
+ if (err.uncaught) {
+ msg = 'Uncaught ' + msg;
+ }
+ // explicitly show diff
+ if (err.showDiff !== false && sameType(actual, expected) && expected !== undefined) {
+ escape = false;
+ if (!(utils.isString(actual) && utils.isString(expected))) {
+ err.actual = actual = utils.stringify(actual);
+ err.expected = expected = utils.stringify(expected);
+ }
+
+ fmt = color('error title', ' %s) %s:\n%s') + color('error stack', '\n%s\n');
+ var match = message.match(/^([^:]+): expected/);
+ msg = '\n ' + color('error message', match ? match[1] : msg);
+
+ if (exports.inlineDiffs) {
+ msg += inlineDiff(err, escape);
+ } else {
+ msg += unifiedDiff(err, escape);
+ }
+ }
+
+ // indent stack trace
+ stack = stack.replace(/^/gm, ' ');
+
+ console.log(fmt, (i + 1), test.fullTitle(), msg, stack);
+ });
+};
+
+/**
+ * Initialize a new `Base` reporter.
+ *
+ * All other reporters generally
+ * inherit from this reporter, providing
+ * stats such as test duration, number
+ * of tests passed / failed etc.
+ *
+ * @param {Runner} runner
+ * @api public
+ */
+
+function Base (runner) {
+ var stats = this.stats = { suites: 0, tests: 0, passes: 0, pending: 0, failures: 0 };
+ var failures = this.failures = [];
+
+ if (!runner) {
+ return;
+ }
+ this.runner = runner;
+
+ runner.stats = stats;
+
+ runner.on('start', function () {
+ stats.start = new Date();
+ });
+
+ runner.on('suite', function (suite) {
+ stats.suites = stats.suites || 0;
+ suite.root || stats.suites++;
+ });
+
+ runner.on('test end', function () {
+ stats.tests = stats.tests || 0;
+ stats.tests++;
+ });
+
+ runner.on('pass', function (test) {
+ stats.passes = stats.passes || 0;
+
+ if (test.duration > test.slow()) {
+ test.speed = 'slow';
+ } else if (test.duration > test.slow() / 2) {
+ test.speed = 'medium';
+ } else {
+ test.speed = 'fast';
+ }
+
+ stats.passes++;
+ });
+
+ runner.on('fail', function (test, err) {
+ stats.failures = stats.failures || 0;
+ stats.failures++;
+ test.err = err;
+ failures.push(test);
+ });
+
+ runner.on('end', function () {
+ stats.end = new Date();
+ stats.duration = new Date() - stats.start;
+ });
+
+ runner.on('pending', function () {
+ stats.pending++;
+ });
+}
+
+/**
+ * Output common epilogue used by many of
+ * the bundled reporters.
+ *
+ * @api public
+ */
+Base.prototype.epilogue = function () {
+ var stats = this.stats;
+ var fmt;
+
+ console.log();
+
+ // passes
+ fmt = color('bright pass', ' ') +
+ color('green', ' %d passing') +
+ color('light', ' (%s)');
+
+ console.log(fmt,
+ stats.passes || 0,
+ ms(stats.duration));
+
+ // pending
+ if (stats.pending) {
+ fmt = color('pending', ' ') +
+ color('pending', ' %d pending');
+
+ console.log(fmt, stats.pending);
+ }
+
+ // failures
+ if (stats.failures) {
+ fmt = color('fail', ' %d failing');
+
+ console.log(fmt, stats.failures);
+
+ Base.list(this.failures);
+ console.log();
+ }
+
+ console.log();
+};
+
+/**
+ * Pad the given `str` to `len`.
+ *
+ * @api private
+ * @param {string} str
+ * @param {string} len
+ * @return {string}
+ */
+function pad (str, len) {
+ str = String(str);
+ return Array(len - str.length + 1).join(' ') + str;
+}
+
+/**
+ * Returns an inline diff between 2 strings with coloured ANSI output
+ *
+ * @api private
+ * @param {Error} err with actual/expected
+ * @param {boolean} escape
+ * @return {string} Diff
+ */
+function inlineDiff (err, escape) {
+ var msg = errorDiff(err, 'WordsWithSpace', escape);
+
+ // linenos
+ var lines = msg.split('\n');
+ if (lines.length > 4) {
+ var width = String(lines.length).length;
+ msg = lines.map(function (str, i) {
+ return pad(++i, width) + ' |' + ' ' + str;
+ }).join('\n');
+ }
+
+ // legend
+ msg = '\n' +
+ color('diff removed', 'actual') +
+ ' ' +
+ color('diff added', 'expected') +
+ '\n\n' +
+ msg +
+ '\n';
+
+ // indent
+ msg = msg.replace(/^/gm, ' ');
+ return msg;
+}
+
+/**
+ * Returns a unified diff between two strings.
+ *
+ * @api private
+ * @param {Error} err with actual/expected
+ * @param {boolean} escape
+ * @return {string} The diff.
+ */
+function unifiedDiff (err, escape) {
+ var indent = ' ';
+ function cleanUp (line) {
+ if (escape) {
+ line = escapeInvisibles(line);
+ }
+ if (line[0] === '+') {
+ return indent + colorLines('diff added', line);
+ }
+ if (line[0] === '-') {
+ return indent + colorLines('diff removed', line);
+ }
+ if (line.match(/@@/)) {
+ return null;
+ }
+ if (line.match(/\\ No newline/)) {
+ return null;
+ }
+ return indent + line;
+ }
+ function notBlank (line) {
+ return typeof line !== 'undefined' && line !== null;
+ }
+ var msg = diff.createPatch('string', err.actual, err.expected);
+ var lines = msg.split('\n').splice(4);
+ return '\n ' +
+ colorLines('diff added', '+ expected') + ' ' +
+ colorLines('diff removed', '- actual') +
+ '\n\n' +
+ lines.map(cleanUp).filter(notBlank).join('\n');
+}
+
+/**
+ * Return a character diff for `err`.
+ *
+ * @api private
+ * @param {Error} err
+ * @param {string} type
+ * @param {boolean} escape
+ * @return {string}
+ */
+function errorDiff (err, type, escape) {
+ var actual = escape ? escapeInvisibles(err.actual) : err.actual;
+ var expected = escape ? escapeInvisibles(err.expected) : err.expected;
+ return diff['diff' + type](actual, expected).map(function (str) {
+ if (str.added) {
+ return colorLines('diff added', str.value);
+ }
+ if (str.removed) {
+ return colorLines('diff removed', str.value);
+ }
+ return str.value;
+ }).join('');
+}
+
+/**
+ * Returns a string with all invisible characters in plain text
+ *
+ * @api private
+ * @param {string} line
+ * @return {string}
+ */
+function escapeInvisibles (line) {
+ return line.replace(/\t/g, '<tab>')
+ .replace(/\r/g, '<CR>')
+ .replace(/\n/g, '<LF>\n');
+}
+
+/**
+ * Color lines for `str`, using the color `name`.
+ *
+ * @api private
+ * @param {string} name
+ * @param {string} str
+ * @return {string}
+ */
+function colorLines (name, str) {
+ return str.split('\n').map(function (str) {
+ return color(name, str);
+ }).join('\n');
+}
+
+/**
+ * Object#toString reference.
+ */
+var objToString = Object.prototype.toString;
+
+/**
+ * Check that a / b have the same type.
+ *
+ * @api private
+ * @param {Object} a
+ * @param {Object} b
+ * @return {boolean}
+ */
+function sameType (a, b) {
+ return objToString.call(a) === objToString.call(b);
+}
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"../ms":15,"../utils":38,"_process":82,"diff":55,"supports-color":42,"tty":5}],18:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var utils = require('../utils');
+
+/**
+ * Expose `Doc`.
+ */
+
+exports = module.exports = Doc;
+
+/**
+ * Initialize a new `Doc` reporter.
+ *
+ * @param {Runner} runner
+ * @api public
+ */
+function Doc (runner) {
+ Base.call(this, runner);
+
+ var indents = 2;
+
+ function indent () {
+ return Array(indents).join(' ');
+ }
+
+ runner.on('suite', function (suite) {
+ if (suite.root) {
+ return;
+ }
+ ++indents;
+ console.log('%s<section class="suite">', indent());
+ ++indents;
+ console.log('%s<h1>%s</h1>', indent(), utils.escape(suite.title));
+ console.log('%s<dl>', indent());
+ });
+
+ runner.on('suite end', function (suite) {
+ if (suite.root) {
+ return;
+ }
+ console.log('%s</dl>', indent());
+ --indents;
+ console.log('%s</section>', indent());
+ --indents;
+ });
+
+ runner.on('pass', function (test) {
+ console.log('%s <dt>%s</dt>', indent(), utils.escape(test.title));
+ var code = utils.escape(utils.clean(test.body));
+ console.log('%s <dd><pre><code>%s</code></pre></dd>', indent(), code);
+ });
+
+ runner.on('fail', function (test, err) {
+ console.log('%s <dt class="error">%s</dt>', indent(), utils.escape(test.title));
+ var code = utils.escape(utils.clean(test.body));
+ console.log('%s <dd class="error"><pre><code>%s</code></pre></dd>', indent(), code);
+ console.log('%s <dd class="error">%s</dd>', indent(), utils.escape(err));
+ });
+}
+
+},{"../utils":38,"./base":17}],19:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+var color = Base.color;
+
+/**
+ * Expose `Dot`.
+ */
+
+exports = module.exports = Dot;
+
+/**
+ * Initialize a new `Dot` matrix test reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function Dot (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var width = Base.window.width * 0.75 | 0;
+ var n = -1;
+
+ runner.on('start', function () {
+ process.stdout.write('\n');
+ });
+
+ runner.on('pending', function () {
+ if (++n % width === 0) {
+ process.stdout.write('\n ');
+ }
+ process.stdout.write(color('pending', Base.symbols.comma));
+ });
+
+ runner.on('pass', function (test) {
+ if (++n % width === 0) {
+ process.stdout.write('\n ');
+ }
+ if (test.speed === 'slow') {
+ process.stdout.write(color('bright yellow', Base.symbols.dot));
+ } else {
+ process.stdout.write(color(test.speed, Base.symbols.dot));
+ }
+ });
+
+ runner.on('fail', function () {
+ if (++n % width === 0) {
+ process.stdout.write('\n ');
+ }
+ process.stdout.write(color('fail', Base.symbols.bang));
+ });
+
+ runner.on('end', function () {
+ console.log();
+ self.epilogue();
+ });
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(Dot, Base);
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],20:[function(require,module,exports){
+(function (global){
+'use strict';
+
+/* eslint-env browser */
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var utils = require('../utils');
+var Progress = require('../browser/progress');
+var escapeRe = require('escape-string-regexp');
+var escape = utils.escape;
+
+/**
+ * Save timer references to avoid Sinon interfering (see GH-237).
+ */
+
+/* eslint-disable no-unused-vars, no-native-reassign */
+var Date = global.Date;
+var setTimeout = global.setTimeout;
+var setInterval = global.setInterval;
+var clearTimeout = global.clearTimeout;
+var clearInterval = global.clearInterval;
+/* eslint-enable no-unused-vars, no-native-reassign */
+
+/**
+ * Expose `HTML`.
+ */
+
+exports = module.exports = HTML;
+
+/**
+ * Stats template.
+ */
+
+var statsTemplate = '<ul id="mocha-stats">' +
+ '<li class="progress"><canvas width="40" height="40"></canvas></li>' +
+ '<li class="passes"><a href="javascript:void(0);">passes:</a> <em>0</em></li>' +
+ '<li class="failures"><a href="javascript:void(0);">failures:</a> <em>0</em></li>' +
+ '<li class="duration">duration: <em>0</em>s</li>' +
+ '</ul>';
+
+var playIcon = '&#x2023;';
+
+/**
+ * Initialize a new `HTML` reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function HTML (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var stats = this.stats;
+ var stat = fragment(statsTemplate);
+ var items = stat.getElementsByTagName('li');
+ var passes = items[1].getElementsByTagName('em')[0];
+ var passesLink = items[1].getElementsByTagName('a')[0];
+ var failures = items[2].getElementsByTagName('em')[0];
+ var failuresLink = items[2].getElementsByTagName('a')[0];
+ var duration = items[3].getElementsByTagName('em')[0];
+ var canvas = stat.getElementsByTagName('canvas')[0];
+ var report = fragment('<ul id="mocha-report"></ul>');
+ var stack = [report];
+ var progress;
+ var ctx;
+ var root = document.getElementById('mocha');
+
+ if (canvas.getContext) {
+ var ratio = window.devicePixelRatio || 1;
+ canvas.style.width = canvas.width;
+ canvas.style.height = canvas.height;
+ canvas.width *= ratio;
+ canvas.height *= ratio;
+ ctx = canvas.getContext('2d');
+ ctx.scale(ratio, ratio);
+ progress = new Progress();
+ }
+
+ if (!root) {
+ return error('#mocha div missing, add it to your document');
+ }
+
+ // pass toggle
+ on(passesLink, 'click', function (evt) {
+ evt.preventDefault();
+ unhide();
+ var name = (/pass/).test(report.className) ? '' : ' pass';
+ report.className = report.className.replace(/fail|pass/g, '') + name;
+ if (report.className.trim()) {
+ hideSuitesWithout('test pass');
+ }
+ });
+
+ // failure toggle
+ on(failuresLink, 'click', function (evt) {
+ evt.preventDefault();
+ unhide();
+ var name = (/fail/).test(report.className) ? '' : ' fail';
+ report.className = report.className.replace(/fail|pass/g, '') + name;
+ if (report.className.trim()) {
+ hideSuitesWithout('test fail');
+ }
+ });
+
+ root.appendChild(stat);
+ root.appendChild(report);
+
+ if (progress) {
+ progress.size(40);
+ }
+
+ runner.on('suite', function (suite) {
+ if (suite.root) {
+ return;
+ }
+
+ // suite
+ var url = self.suiteURL(suite);
+ var el = fragment('<li class="suite"><h1><a href="%s">%s</a></h1></li>', url, escape(suite.title));
+
+ // container
+ stack[0].appendChild(el);
+ stack.unshift(document.createElement('ul'));
+ el.appendChild(stack[0]);
+ });
+
+ runner.on('suite end', function (suite) {
+ if (suite.root) {
+ updateStats();
+ return;
+ }
+ stack.shift();
+ });
+
+ runner.on('pass', function (test) {
+ var url = self.testURL(test);
+ var markup = '<li class="test pass %e"><h2>%e<span class="duration">%ems</span> ' +
+ '<a href="%s" class="replay">' + playIcon + '</a></h2></li>';
+ var el = fragment(markup, test.speed, test.title, test.duration, url);
+ self.addCodeToggle(el, test.body);
+ appendToStack(el);
+ updateStats();
+ });
+
+ runner.on('fail', function (test) {
+ var el = fragment('<li class="test fail"><h2>%e <a href="%e" class="replay">' + playIcon + '</a></h2></li>',
+ test.title, self.testURL(test));
+ var stackString; // Note: Includes leading newline
+ var message = test.err.toString();
+
+ // <=IE7 stringifies to [Object Error]. Since it can be overloaded, we
+ // check for the result of the stringifying.
+ if (message === '[object Error]') {
+ message = test.err.message;
+ }
+
+ if (test.err.stack) {
+ var indexOfMessage = test.err.stack.indexOf(test.err.message);
+ if (indexOfMessage === -1) {
+ stackString = test.err.stack;
+ } else {
+ stackString = test.err.stack.substr(test.err.message.length + indexOfMessage);
+ }
+ } else if (test.err.sourceURL && test.err.line !== undefined) {
+ // Safari doesn't give you a stack. Let's at least provide a source line.
+ stackString = '\n(' + test.err.sourceURL + ':' + test.err.line + ')';
+ }
+
+ stackString = stackString || '';
+
+ if (test.err.htmlMessage && stackString) {
+ el.appendChild(fragment('<div class="html-error">%s\n<pre class="error">%e</pre></div>',
+ test.err.htmlMessage, stackString));
+ } else if (test.err.htmlMessage) {
+ el.appendChild(fragment('<div class="html-error">%s</div>', test.err.htmlMessage));
+ } else {
+ el.appendChild(fragment('<pre class="error">%e%e</pre>', message, stackString));
+ }
+
+ self.addCodeToggle(el, test.body);
+ appendToStack(el);
+ updateStats();
+ });
+
+ runner.on('pending', function (test) {
+ var el = fragment('<li class="test pass pending"><h2>%e</h2></li>', test.title);
+ appendToStack(el);
+ updateStats();
+ });
+
+ function appendToStack (el) {
+ // Don't call .appendChild if #mocha-report was already .shift()'ed off the stack.
+ if (stack[0]) {
+ stack[0].appendChild(el);
+ }
+ }
+
+ function updateStats () {
+ // TODO: add to stats
+ var percent = stats.tests / runner.total * 100 | 0;
+ if (progress) {
+ progress.update(percent).draw(ctx);
+ }
+
+ // update stats
+ var ms = new Date() - stats.start;
+ text(passes, stats.passes);
+ text(failures, stats.failures);
+ text(duration, (ms / 1000).toFixed(2));
+ }
+}
+
+/**
+ * Makes a URL, preserving querystring ("search") parameters.
+ *
+ * @param {string} s
+ * @return {string} A new URL.
+ */
+function makeUrl (s) {
+ var search = window.location.search;
+
+ // Remove previous grep query parameter if present
+ if (search) {
+ search = search.replace(/[?&]grep=[^&\s]*/g, '').replace(/^&/, '?');
+ }
+
+ return window.location.pathname + (search ? search + '&' : '?') + 'grep=' + encodeURIComponent(escapeRe(s));
+}
+
+/**
+ * Provide suite URL.
+ *
+ * @param {Object} [suite]
+ */
+HTML.prototype.suiteURL = function (suite) {
+ return makeUrl(suite.fullTitle());
+};
+
+/**
+ * Provide test URL.
+ *
+ * @param {Object} [test]
+ */
+HTML.prototype.testURL = function (test) {
+ return makeUrl(test.fullTitle());
+};
+
+/**
+ * Adds code toggle functionality for the provided test's list element.
+ *
+ * @param {HTMLLIElement} el
+ * @param {string} contents
+ */
+HTML.prototype.addCodeToggle = function (el, contents) {
+ var h2 = el.getElementsByTagName('h2')[0];
+
+ on(h2, 'click', function () {
+ pre.style.display = pre.style.display === 'none' ? 'block' : 'none';
+ });
+
+ var pre = fragment('<pre><code>%e</code></pre>', utils.clean(contents));
+ el.appendChild(pre);
+ pre.style.display = 'none';
+};
+
+/**
+ * Display error `msg`.
+ *
+ * @param {string} msg
+ */
+function error (msg) {
+ document.body.appendChild(fragment('<div id="mocha-error">%s</div>', msg));
+}
+
+/**
+ * Return a DOM fragment from `html`.
+ *
+ * @param {string} html
+ */
+function fragment (html) {
+ var args = arguments;
+ var div = document.createElement('div');
+ var i = 1;
+
+ div.innerHTML = html.replace(/%([se])/g, function (_, type) {
+ switch (type) {
+ case 's': return String(args[i++]);
+ case 'e': return escape(args[i++]);
+ // no default
+ }
+ });
+
+ return div.firstChild;
+}
+
+/**
+ * Check for suites that do not have elements
+ * with `classname`, and hide them.
+ *
+ * @param {text} classname
+ */
+function hideSuitesWithout (classname) {
+ var suites = document.getElementsByClassName('suite');
+ for (var i = 0; i < suites.length; i++) {
+ var els = suites[i].getElementsByClassName(classname);
+ if (!els.length) {
+ suites[i].className += ' hidden';
+ }
+ }
+}
+
+/**
+ * Unhide .hidden suites.
+ */
+function unhide () {
+ var els = document.getElementsByClassName('suite hidden');
+ for (var i = 0; i < els.length; ++i) {
+ els[i].className = els[i].className.replace('suite hidden', 'suite');
+ }
+}
+
+/**
+ * Set an element's text contents.
+ *
+ * @param {HTMLElement} el
+ * @param {string} contents
+ */
+function text (el, contents) {
+ if (el.textContent) {
+ el.textContent = contents;
+ } else {
+ el.innerText = contents;
+ }
+}
+
+/**
+ * Listen on `event` with callback `fn`.
+ */
+function on (el, event, fn) {
+ if (el.addEventListener) {
+ el.addEventListener(event, fn, false);
+ } else {
+ el.attachEvent('on' + event, fn);
+ }
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"../browser/progress":4,"../utils":38,"./base":17,"escape-string-regexp":61}],21:[function(require,module,exports){
+'use strict';
+
+// Alias exports to a their normalized format Mocha#reporter to prevent a need
+// for dynamic (try/catch) requires, which Browserify doesn't handle.
+exports.Base = exports.base = require('./base');
+exports.Dot = exports.dot = require('./dot');
+exports.Doc = exports.doc = require('./doc');
+exports.TAP = exports.tap = require('./tap');
+exports.JSON = exports.json = require('./json');
+exports.HTML = exports.html = require('./html');
+exports.List = exports.list = require('./list');
+exports.Min = exports.min = require('./min');
+exports.Spec = exports.spec = require('./spec');
+exports.Nyan = exports.nyan = require('./nyan');
+exports.XUnit = exports.xunit = require('./xunit');
+exports.Markdown = exports.markdown = require('./markdown');
+exports.Progress = exports.progress = require('./progress');
+exports.Landing = exports.landing = require('./landing');
+exports.JSONStream = exports['json-stream'] = require('./json-stream');
+
+},{"./base":17,"./doc":18,"./dot":19,"./html":20,"./json":23,"./json-stream":22,"./landing":24,"./list":25,"./markdown":26,"./min":27,"./nyan":28,"./progress":29,"./spec":30,"./tap":31,"./xunit":32}],22:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var JSON = require('json3');
+
+/**
+ * Expose `List`.
+ */
+
+exports = module.exports = List;
+
+/**
+ * Initialize a new `List` test reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function List (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var total = runner.total;
+
+ runner.on('start', function () {
+ console.log(JSON.stringify(['start', { total: total }]));
+ });
+
+ runner.on('pass', function (test) {
+ console.log(JSON.stringify(['pass', clean(test)]));
+ });
+
+ runner.on('fail', function (test, err) {
+ test = clean(test);
+ test.err = err.message;
+ test.stack = err.stack || null;
+ console.log(JSON.stringify(['fail', test]));
+ });
+
+ runner.on('end', function () {
+ process.stdout.write(JSON.stringify(['end', self.stats]));
+ });
+}
+
+/**
+ * Return a plain-object representation of `test`
+ * free of cyclic properties etc.
+ *
+ * @api private
+ * @param {Object} test
+ * @return {Object}
+ */
+function clean (test) {
+ return {
+ title: test.title,
+ fullTitle: test.fullTitle(),
+ duration: test.duration,
+ currentRetry: test.currentRetry()
+ };
+}
+
+}).call(this,require('_process'))
+},{"./base":17,"_process":82,"json3":69}],23:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+
+/**
+ * Expose `JSON`.
+ */
+
+exports = module.exports = JSONReporter;
+
+/**
+ * Initialize a new `JSON` reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function JSONReporter (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var tests = [];
+ var pending = [];
+ var failures = [];
+ var passes = [];
+
+ runner.on('test end', function (test) {
+ tests.push(test);
+ });
+
+ runner.on('pass', function (test) {
+ passes.push(test);
+ });
+
+ runner.on('fail', function (test) {
+ failures.push(test);
+ });
+
+ runner.on('pending', function (test) {
+ pending.push(test);
+ });
+
+ runner.on('end', function () {
+ var obj = {
+ stats: self.stats,
+ tests: tests.map(clean),
+ pending: pending.map(clean),
+ failures: failures.map(clean),
+ passes: passes.map(clean)
+ };
+
+ runner.testResults = obj;
+
+ process.stdout.write(JSON.stringify(obj, null, 2));
+ });
+}
+
+/**
+ * Return a plain-object representation of `test`
+ * free of cyclic properties etc.
+ *
+ * @api private
+ * @param {Object} test
+ * @return {Object}
+ */
+function clean (test) {
+ return {
+ title: test.title,
+ fullTitle: test.fullTitle(),
+ duration: test.duration,
+ currentRetry: test.currentRetry(),
+ err: errorJSON(test.err || {})
+ };
+}
+
+/**
+ * Transform `error` into a JSON object.
+ *
+ * @api private
+ * @param {Error} err
+ * @return {Object}
+ */
+function errorJSON (err) {
+ var res = {};
+ Object.getOwnPropertyNames(err).forEach(function (key) {
+ res[key] = err[key];
+ }, err);
+ return res;
+}
+
+}).call(this,require('_process'))
+},{"./base":17,"_process":82}],24:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+var cursor = Base.cursor;
+var color = Base.color;
+
+/**
+ * Expose `Landing`.
+ */
+
+exports = module.exports = Landing;
+
+/**
+ * Airplane color.
+ */
+
+Base.colors.plane = 0;
+
+/**
+ * Airplane crash color.
+ */
+
+Base.colors['plane crash'] = 31;
+
+/**
+ * Runway color.
+ */
+
+Base.colors.runway = 90;
+
+/**
+ * Initialize a new `Landing` reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function Landing (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var width = Base.window.width * 0.75 | 0;
+ var total = runner.total;
+ var stream = process.stdout;
+ var plane = color('plane', '✈');
+ var crashed = -1;
+ var n = 0;
+
+ function runway () {
+ var buf = Array(width).join('-');
+ return ' ' + color('runway', buf);
+ }
+
+ runner.on('start', function () {
+ stream.write('\n\n\n ');
+ cursor.hide();
+ });
+
+ runner.on('test end', function (test) {
+ // check if the plane crashed
+ var col = crashed === -1 ? width * ++n / total | 0 : crashed;
+
+ // show the crash
+ if (test.state === 'failed') {
+ plane = color('plane crash', '✈');
+ crashed = col;
+ }
+
+ // render landing strip
+ stream.write('\u001b[' + (width + 1) + 'D\u001b[2A');
+ stream.write(runway());
+ stream.write('\n ');
+ stream.write(color('runway', Array(col).join('⋅')));
+ stream.write(plane);
+ stream.write(color('runway', Array(width - col).join('⋅') + '\n'));
+ stream.write(runway());
+ stream.write('\u001b[0m');
+ });
+
+ runner.on('end', function () {
+ cursor.show();
+ console.log();
+ self.epilogue();
+ });
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(Landing, Base);
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],25:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+var color = Base.color;
+var cursor = Base.cursor;
+
+/**
+ * Expose `List`.
+ */
+
+exports = module.exports = List;
+
+/**
+ * Initialize a new `List` test reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function List (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var n = 0;
+
+ runner.on('start', function () {
+ console.log();
+ });
+
+ runner.on('test', function (test) {
+ process.stdout.write(color('pass', ' ' + test.fullTitle() + ': '));
+ });
+
+ runner.on('pending', function (test) {
+ var fmt = color('checkmark', ' -') +
+ color('pending', ' %s');
+ console.log(fmt, test.fullTitle());
+ });
+
+ runner.on('pass', function (test) {
+ var fmt = color('checkmark', ' ' + Base.symbols.ok) +
+ color('pass', ' %s: ') +
+ color(test.speed, '%dms');
+ cursor.CR();
+ console.log(fmt, test.fullTitle(), test.duration);
+ });
+
+ runner.on('fail', function (test) {
+ cursor.CR();
+ console.log(color('fail', ' %d) %s'), ++n, test.fullTitle());
+ });
+
+ runner.on('end', self.epilogue.bind(self));
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(List, Base);
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],26:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var utils = require('../utils');
+
+/**
+ * Constants
+ */
+
+var SUITE_PREFIX = '$';
+
+/**
+ * Expose `Markdown`.
+ */
+
+exports = module.exports = Markdown;
+
+/**
+ * Initialize a new `Markdown` reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function Markdown (runner) {
+ Base.call(this, runner);
+
+ var level = 0;
+ var buf = '';
+
+ function title (str) {
+ return Array(level).join('#') + ' ' + str;
+ }
+
+ function mapTOC (suite, obj) {
+ var ret = obj;
+ var key = SUITE_PREFIX + suite.title;
+
+ obj = obj[key] = obj[key] || { suite: suite };
+ suite.suites.forEach(function (suite) {
+ mapTOC(suite, obj);
+ });
+
+ return ret;
+ }
+
+ function stringifyTOC (obj, level) {
+ ++level;
+ var buf = '';
+ var link;
+ for (var key in obj) {
+ if (key === 'suite') {
+ continue;
+ }
+ if (key !== SUITE_PREFIX) {
+ link = ' - [' + key.substring(1) + ']';
+ link += '(#' + utils.slug(obj[key].suite.fullTitle()) + ')\n';
+ buf += Array(level).join(' ') + link;
+ }
+ buf += stringifyTOC(obj[key], level);
+ }
+ return buf;
+ }
+
+ function generateTOC (suite) {
+ var obj = mapTOC(suite, {});
+ return stringifyTOC(obj, 0);
+ }
+
+ generateTOC(runner.suite);
+
+ runner.on('suite', function (suite) {
+ ++level;
+ var slug = utils.slug(suite.fullTitle());
+ buf += '<a name="' + slug + '"></a>' + '\n';
+ buf += title(suite.title) + '\n';
+ });
+
+ runner.on('suite end', function () {
+ --level;
+ });
+
+ runner.on('pass', function (test) {
+ var code = utils.clean(test.body);
+ buf += test.title + '.\n';
+ buf += '\n```js\n';
+ buf += code + '\n';
+ buf += '```\n\n';
+ });
+
+ runner.on('end', function () {
+ process.stdout.write('# TOC\n');
+ process.stdout.write(generateTOC(runner.suite));
+ process.stdout.write(buf);
+ });
+}
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],27:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+
+/**
+ * Expose `Min`.
+ */
+
+exports = module.exports = Min;
+
+/**
+ * Initialize a new `Min` minimal test reporter (best used with --watch).
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function Min (runner) {
+ Base.call(this, runner);
+
+ runner.on('start', function () {
+ // clear screen
+ process.stdout.write('\u001b[2J');
+ // set cursor position
+ process.stdout.write('\u001b[1;3H');
+ });
+
+ runner.on('end', this.epilogue.bind(this));
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(Min, Base);
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],28:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+
+/**
+ * Expose `Dot`.
+ */
+
+exports = module.exports = NyanCat;
+
+/**
+ * Initialize a new `Dot` matrix test reporter.
+ *
+ * @param {Runner} runner
+ * @api public
+ */
+
+function NyanCat (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var width = Base.window.width * 0.75 | 0;
+ var nyanCatWidth = this.nyanCatWidth = 11;
+
+ this.colorIndex = 0;
+ this.numberOfLines = 4;
+ this.rainbowColors = self.generateColors();
+ this.scoreboardWidth = 5;
+ this.tick = 0;
+ this.trajectories = [[], [], [], []];
+ this.trajectoryWidthMax = (width - nyanCatWidth);
+
+ runner.on('start', function () {
+ Base.cursor.hide();
+ self.draw();
+ });
+
+ runner.on('pending', function () {
+ self.draw();
+ });
+
+ runner.on('pass', function () {
+ self.draw();
+ });
+
+ runner.on('fail', function () {
+ self.draw();
+ });
+
+ runner.on('end', function () {
+ Base.cursor.show();
+ for (var i = 0; i < self.numberOfLines; i++) {
+ write('\n');
+ }
+ self.epilogue();
+ });
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(NyanCat, Base);
+
+/**
+ * Draw the nyan cat
+ *
+ * @api private
+ */
+
+NyanCat.prototype.draw = function () {
+ this.appendRainbow();
+ this.drawScoreboard();
+ this.drawRainbow();
+ this.drawNyanCat();
+ this.tick = !this.tick;
+};
+
+/**
+ * Draw the "scoreboard" showing the number
+ * of passes, failures and pending tests.
+ *
+ * @api private
+ */
+
+NyanCat.prototype.drawScoreboard = function () {
+ var stats = this.stats;
+
+ function draw (type, n) {
+ write(' ');
+ write(Base.color(type, n));
+ write('\n');
+ }
+
+ draw('green', stats.passes);
+ draw('fail', stats.failures);
+ draw('pending', stats.pending);
+ write('\n');
+
+ this.cursorUp(this.numberOfLines);
+};
+
+/**
+ * Append the rainbow.
+ *
+ * @api private
+ */
+
+NyanCat.prototype.appendRainbow = function () {
+ var segment = this.tick ? '_' : '-';
+ var rainbowified = this.rainbowify(segment);
+
+ for (var index = 0; index < this.numberOfLines; index++) {
+ var trajectory = this.trajectories[index];
+ if (trajectory.length >= this.trajectoryWidthMax) {
+ trajectory.shift();
+ }
+ trajectory.push(rainbowified);
+ }
+};
+
+/**
+ * Draw the rainbow.
+ *
+ * @api private
+ */
+
+NyanCat.prototype.drawRainbow = function () {
+ var self = this;
+
+ this.trajectories.forEach(function (line) {
+ write('\u001b[' + self.scoreboardWidth + 'C');
+ write(line.join(''));
+ write('\n');
+ });
+
+ this.cursorUp(this.numberOfLines);
+};
+
+/**
+ * Draw the nyan cat
+ *
+ * @api private
+ */
+NyanCat.prototype.drawNyanCat = function () {
+ var self = this;
+ var startWidth = this.scoreboardWidth + this.trajectories[0].length;
+ var dist = '\u001b[' + startWidth + 'C';
+ var padding = '';
+
+ write(dist);
+ write('_,------,');
+ write('\n');
+
+ write(dist);
+ padding = self.tick ? ' ' : ' ';
+ write('_|' + padding + '/\\_/\\ ');
+ write('\n');
+
+ write(dist);
+ padding = self.tick ? '_' : '__';
+ var tail = self.tick ? '~' : '^';
+ write(tail + '|' + padding + this.face() + ' ');
+ write('\n');
+
+ write(dist);
+ padding = self.tick ? ' ' : ' ';
+ write(padding + '"" "" ');
+ write('\n');
+
+ this.cursorUp(this.numberOfLines);
+};
+
+/**
+ * Draw nyan cat face.
+ *
+ * @api private
+ * @return {string}
+ */
+
+NyanCat.prototype.face = function () {
+ var stats = this.stats;
+ if (stats.failures) {
+ return '( x .x)';
+ } else if (stats.pending) {
+ return '( o .o)';
+ } else if (stats.passes) {
+ return '( ^ .^)';
+ }
+ return '( - .-)';
+};
+
+/**
+ * Move cursor up `n`.
+ *
+ * @api private
+ * @param {number} n
+ */
+
+NyanCat.prototype.cursorUp = function (n) {
+ write('\u001b[' + n + 'A');
+};
+
+/**
+ * Move cursor down `n`.
+ *
+ * @api private
+ * @param {number} n
+ */
+
+NyanCat.prototype.cursorDown = function (n) {
+ write('\u001b[' + n + 'B');
+};
+
+/**
+ * Generate rainbow colors.
+ *
+ * @api private
+ * @return {Array}
+ */
+NyanCat.prototype.generateColors = function () {
+ var colors = [];
+
+ for (var i = 0; i < (6 * 7); i++) {
+ var pi3 = Math.floor(Math.PI / 3);
+ var n = (i * (1.0 / 6));
+ var r = Math.floor(3 * Math.sin(n) + 3);
+ var g = Math.floor(3 * Math.sin(n + 2 * pi3) + 3);
+ var b = Math.floor(3 * Math.sin(n + 4 * pi3) + 3);
+ colors.push(36 * r + 6 * g + b + 16);
+ }
+
+ return colors;
+};
+
+/**
+ * Apply rainbow to the given `str`.
+ *
+ * @api private
+ * @param {string} str
+ * @return {string}
+ */
+NyanCat.prototype.rainbowify = function (str) {
+ if (!Base.useColors) {
+ return str;
+ }
+ var color = this.rainbowColors[this.colorIndex % this.rainbowColors.length];
+ this.colorIndex += 1;
+ return '\u001b[38;5;' + color + 'm' + str + '\u001b[0m';
+};
+
+/**
+ * Stdout helper.
+ *
+ * @param {string} string A message to write to stdout.
+ */
+function write (string) {
+ process.stdout.write(string);
+}
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],29:[function(require,module,exports){
+(function (process){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+var color = Base.color;
+var cursor = Base.cursor;
+
+/**
+ * Expose `Progress`.
+ */
+
+exports = module.exports = Progress;
+
+/**
+ * General progress bar color.
+ */
+
+Base.colors.progress = 90;
+
+/**
+ * Initialize a new `Progress` bar test reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ * @param {Object} options
+ */
+function Progress (runner, options) {
+ Base.call(this, runner);
+
+ var self = this;
+ var width = Base.window.width * 0.50 | 0;
+ var total = runner.total;
+ var complete = 0;
+ var lastN = -1;
+
+ // default chars
+ options = options || {};
+ options.open = options.open || '[';
+ options.complete = options.complete || '▬';
+ options.incomplete = options.incomplete || Base.symbols.dot;
+ options.close = options.close || ']';
+ options.verbose = false;
+
+ // tests started
+ runner.on('start', function () {
+ console.log();
+ cursor.hide();
+ });
+
+ // tests complete
+ runner.on('test end', function () {
+ complete++;
+
+ var percent = complete / total;
+ var n = width * percent | 0;
+ var i = width - n;
+
+ if (n === lastN && !options.verbose) {
+ // Don't re-render the line if it hasn't changed
+ return;
+ }
+ lastN = n;
+
+ cursor.CR();
+ process.stdout.write('\u001b[J');
+ process.stdout.write(color('progress', ' ' + options.open));
+ process.stdout.write(Array(n).join(options.complete));
+ process.stdout.write(Array(i).join(options.incomplete));
+ process.stdout.write(color('progress', options.close));
+ if (options.verbose) {
+ process.stdout.write(color('progress', ' ' + complete + ' of ' + total));
+ }
+ });
+
+ // tests are complete, output some stats
+ // and the failures if any
+ runner.on('end', function () {
+ cursor.show();
+ console.log();
+ self.epilogue();
+ });
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(Progress, Base);
+
+}).call(this,require('_process'))
+},{"../utils":38,"./base":17,"_process":82}],30:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var inherits = require('../utils').inherits;
+var color = Base.color;
+
+/**
+ * Expose `Spec`.
+ */
+
+exports = module.exports = Spec;
+
+/**
+ * Initialize a new `Spec` test reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function Spec (runner) {
+ Base.call(this, runner);
+
+ var self = this;
+ var indents = 0;
+ var n = 0;
+
+ function indent () {
+ return Array(indents).join(' ');
+ }
+
+ runner.on('start', function () {
+ console.log();
+ });
+
+ runner.on('suite', function (suite) {
+ ++indents;
+ console.log(color('suite', '%s%s'), indent(), suite.title);
+ });
+
+ runner.on('suite end', function () {
+ --indents;
+ if (indents === 1) {
+ console.log();
+ }
+ });
+
+ runner.on('pending', function (test) {
+ var fmt = indent() + color('pending', ' - %s');
+ console.log(fmt, test.title);
+ });
+
+ runner.on('pass', function (test) {
+ var fmt;
+ if (test.speed === 'fast') {
+ fmt = indent() +
+ color('checkmark', ' ' + Base.symbols.ok) +
+ color('pass', ' %s');
+ console.log(fmt, test.title);
+ } else {
+ fmt = indent() +
+ color('checkmark', ' ' + Base.symbols.ok) +
+ color('pass', ' %s') +
+ color(test.speed, ' (%dms)');
+ console.log(fmt, test.title, test.duration);
+ }
+ });
+
+ runner.on('fail', function (test) {
+ console.log(indent() + color('fail', ' %d) %s'), ++n, test.title);
+ });
+
+ runner.on('end', self.epilogue.bind(self));
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(Spec, Base);
+
+},{"../utils":38,"./base":17}],31:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+
+/**
+ * Expose `TAP`.
+ */
+
+exports = module.exports = TAP;
+
+/**
+ * Initialize a new `TAP` reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function TAP (runner) {
+ Base.call(this, runner);
+
+ var n = 1;
+ var passes = 0;
+ var failures = 0;
+
+ runner.on('start', function () {
+ var total = runner.grepTotal(runner.suite);
+ console.log('%d..%d', 1, total);
+ });
+
+ runner.on('test end', function () {
+ ++n;
+ });
+
+ runner.on('pending', function (test) {
+ console.log('ok %d %s # SKIP -', n, title(test));
+ });
+
+ runner.on('pass', function (test) {
+ passes++;
+ console.log('ok %d %s', n, title(test));
+ });
+
+ runner.on('fail', function (test, err) {
+ failures++;
+ console.log('not ok %d %s', n, title(test));
+ if (err.stack) {
+ console.log(err.stack.replace(/^/gm, ' '));
+ }
+ });
+
+ runner.on('end', function () {
+ console.log('# tests ' + (passes + failures));
+ console.log('# pass ' + passes);
+ console.log('# fail ' + failures);
+ });
+}
+
+/**
+ * Return a TAP-safe title of `test`
+ *
+ * @api private
+ * @param {Object} test
+ * @return {String}
+ */
+function title (test) {
+ return test.fullTitle().replace(/#/g, '');
+}
+
+},{"./base":17}],32:[function(require,module,exports){
+(function (process,global){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Base = require('./base');
+var utils = require('../utils');
+var inherits = utils.inherits;
+var fs = require('fs');
+var escape = utils.escape;
+var mkdirp = require('mkdirp');
+var path = require('path');
+
+/**
+ * Save timer references to avoid Sinon interfering (see GH-237).
+ */
+
+/* eslint-disable no-unused-vars, no-native-reassign */
+var Date = global.Date;
+var setTimeout = global.setTimeout;
+var setInterval = global.setInterval;
+var clearTimeout = global.clearTimeout;
+var clearInterval = global.clearInterval;
+/* eslint-enable no-unused-vars, no-native-reassign */
+
+/**
+ * Expose `XUnit`.
+ */
+
+exports = module.exports = XUnit;
+
+/**
+ * Initialize a new `XUnit` reporter.
+ *
+ * @api public
+ * @param {Runner} runner
+ */
+function XUnit (runner, options) {
+ Base.call(this, runner);
+
+ var stats = this.stats;
+ var tests = [];
+ var self = this;
+
+ if (options && options.reporterOptions && options.reporterOptions.output) {
+ if (!fs.createWriteStream) {
+ throw new Error('file output not supported in browser');
+ }
+ mkdirp.sync(path.dirname(options.reporterOptions.output));
+ self.fileStream = fs.createWriteStream(options.reporterOptions.output);
+ }
+
+ runner.on('pending', function (test) {
+ tests.push(test);
+ });
+
+ runner.on('pass', function (test) {
+ tests.push(test);
+ });
+
+ runner.on('fail', function (test) {
+ tests.push(test);
+ });
+
+ runner.on('end', function () {
+ self.write(tag('testsuite', {
+ name: 'Mocha Tests',
+ tests: stats.tests,
+ failures: stats.failures,
+ errors: stats.failures,
+ skipped: stats.tests - stats.failures - stats.passes,
+ timestamp: (new Date()).toUTCString(),
+ time: (stats.duration / 1000) || 0
+ }, false));
+
+ tests.forEach(function (t) {
+ self.test(t);
+ });
+
+ self.write('</testsuite>');
+ });
+}
+
+/**
+ * Inherit from `Base.prototype`.
+ */
+inherits(XUnit, Base);
+
+/**
+ * Override done to close the stream (if it's a file).
+ *
+ * @param failures
+ * @param {Function} fn
+ */
+XUnit.prototype.done = function (failures, fn) {
+ if (this.fileStream) {
+ this.fileStream.end(function () {
+ fn(failures);
+ });
+ } else {
+ fn(failures);
+ }
+};
+
+/**
+ * Write out the given line.
+ *
+ * @param {string} line
+ */
+XUnit.prototype.write = function (line) {
+ if (this.fileStream) {
+ this.fileStream.write(line + '\n');
+ } else if (typeof process === 'object' && process.stdout) {
+ process.stdout.write(line + '\n');
+ } else {
+ console.log(line);
+ }
+};
+
+/**
+ * Output tag for the given `test.`
+ *
+ * @param {Test} test
+ */
+XUnit.prototype.test = function (test) {
+ var attrs = {
+ classname: test.parent.fullTitle(),
+ name: test.title,
+ time: (test.duration / 1000) || 0
+ };
+
+ if (test.state === 'failed') {
+ var err = test.err;
+ this.write(tag('testcase', attrs, false, tag('failure', {}, false, escape(err.message) + '\n' + escape(err.stack))));
+ } else if (test.isPending()) {
+ this.write(tag('testcase', attrs, false, tag('skipped', {}, true)));
+ } else {
+ this.write(tag('testcase', attrs, true));
+ }
+};
+
+/**
+ * HTML tag helper.
+ *
+ * @param name
+ * @param attrs
+ * @param close
+ * @param content
+ * @return {string}
+ */
+function tag (name, attrs, close, content) {
+ var end = close ? '/>' : '>';
+ var pairs = [];
+ var tag;
+
+ for (var key in attrs) {
+ if (Object.prototype.hasOwnProperty.call(attrs, key)) {
+ pairs.push(key + '="' + escape(attrs[key]) + '"');
+ }
+ }
+
+ tag = '<' + name + (pairs.length ? ' ' + pairs.join(' ') : '') + end;
+ if (content) {
+ tag += content + '</' + name + end;
+ }
+ return tag;
+}
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"../utils":38,"./base":17,"_process":82,"fs":42,"mkdirp":79,"path":42}],33:[function(require,module,exports){
+(function (global){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var EventEmitter = require('events').EventEmitter;
+var JSON = require('json3');
+var Pending = require('./pending');
+var debug = require('debug')('mocha:runnable');
+var milliseconds = require('./ms');
+var utils = require('./utils');
+var create = require('lodash.create');
+
+/**
+ * Save timer references to avoid Sinon interfering (see GH-237).
+ */
+
+/* eslint-disable no-unused-vars, no-native-reassign */
+var Date = global.Date;
+var setTimeout = global.setTimeout;
+var setInterval = global.setInterval;
+var clearTimeout = global.clearTimeout;
+var clearInterval = global.clearInterval;
+/* eslint-enable no-unused-vars, no-native-reassign */
+
+/**
+ * Object#toString().
+ */
+
+var toString = Object.prototype.toString;
+
+/**
+ * Expose `Runnable`.
+ */
+
+module.exports = Runnable;
+
+/**
+ * Initialize a new `Runnable` with the given `title` and callback `fn`.
+ *
+ * @param {String} title
+ * @param {Function} fn
+ * @api private
+ * @param {string} title
+ * @param {Function} fn
+ */
+function Runnable (title, fn) {
+ this.title = title;
+ this.fn = fn;
+ this.body = (fn || '').toString();
+ this.async = fn && fn.length;
+ this.sync = !this.async;
+ this._timeout = 2000;
+ this._slow = 75;
+ this._enableTimeouts = true;
+ this.timedOut = false;
+ this._trace = new Error('done() called multiple times');
+ this._retries = -1;
+ this._currentRetry = 0;
+ this.pending = false;
+}
+
+/**
+ * Inherit from `EventEmitter.prototype`.
+ */
+Runnable.prototype = create(EventEmitter.prototype, {
+ constructor: Runnable
+});
+
+/**
+ * Set & get timeout `ms`.
+ *
+ * @api private
+ * @param {number|string} ms
+ * @return {Runnable|number} ms or Runnable instance.
+ */
+Runnable.prototype.timeout = function (ms) {
+ if (!arguments.length) {
+ return this._timeout;
+ }
+ // see #1652 for reasoning
+ if (ms === 0 || ms > Math.pow(2, 31)) {
+ this._enableTimeouts = false;
+ }
+ if (typeof ms === 'string') {
+ ms = milliseconds(ms);
+ }
+ debug('timeout %d', ms);
+ this._timeout = ms;
+ if (this.timer) {
+ this.resetTimeout();
+ }
+ return this;
+};
+
+/**
+ * Set & get slow `ms`.
+ *
+ * @api private
+ * @param {number|string} ms
+ * @return {Runnable|number} ms or Runnable instance.
+ */
+Runnable.prototype.slow = function (ms) {
+ if (typeof ms === 'undefined') {
+ return this._slow;
+ }
+ if (typeof ms === 'string') {
+ ms = milliseconds(ms);
+ }
+ debug('timeout %d', ms);
+ this._slow = ms;
+ return this;
+};
+
+/**
+ * Set and get whether timeout is `enabled`.
+ *
+ * @api private
+ * @param {boolean} enabled
+ * @return {Runnable|boolean} enabled or Runnable instance.
+ */
+Runnable.prototype.enableTimeouts = function (enabled) {
+ if (!arguments.length) {
+ return this._enableTimeouts;
+ }
+ debug('enableTimeouts %s', enabled);
+ this._enableTimeouts = enabled;
+ return this;
+};
+
+/**
+ * Halt and mark as pending.
+ *
+ * @api public
+ */
+Runnable.prototype.skip = function () {
+ throw new Pending('sync skip');
+};
+
+/**
+ * Check if this runnable or its parent suite is marked as pending.
+ *
+ * @api private
+ */
+Runnable.prototype.isPending = function () {
+ return this.pending || (this.parent && this.parent.isPending());
+};
+
+/**
+ * Set number of retries.
+ *
+ * @api private
+ */
+Runnable.prototype.retries = function (n) {
+ if (!arguments.length) {
+ return this._retries;
+ }
+ this._retries = n;
+};
+
+/**
+ * Get current retry
+ *
+ * @api private
+ */
+Runnable.prototype.currentRetry = function (n) {
+ if (!arguments.length) {
+ return this._currentRetry;
+ }
+ this._currentRetry = n;
+};
+
+/**
+ * Return the full title generated by recursively concatenating the parent's
+ * full title.
+ *
+ * @api public
+ * @return {string}
+ */
+Runnable.prototype.fullTitle = function () {
+ return this.parent.fullTitle() + ' ' + this.title;
+};
+
+/**
+ * Clear the timeout.
+ *
+ * @api private
+ */
+Runnable.prototype.clearTimeout = function () {
+ clearTimeout(this.timer);
+};
+
+/**
+ * Inspect the runnable void of private properties.
+ *
+ * @api private
+ * @return {string}
+ */
+Runnable.prototype.inspect = function () {
+ return JSON.stringify(this, function (key, val) {
+ if (key[0] === '_') {
+ return;
+ }
+ if (key === 'parent') {
+ return '#<Suite>';
+ }
+ if (key === 'ctx') {
+ return '#<Context>';
+ }
+ return val;
+ }, 2);
+};
+
+/**
+ * Reset the timeout.
+ *
+ * @api private
+ */
+Runnable.prototype.resetTimeout = function () {
+ var self = this;
+ var ms = this.timeout() || 1e9;
+
+ if (!this._enableTimeouts) {
+ return;
+ }
+ this.clearTimeout();
+ this.timer = setTimeout(function () {
+ if (!self._enableTimeouts) {
+ return;
+ }
+ self.callback(new Error('Timeout of ' + ms +
+ 'ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.'));
+ self.timedOut = true;
+ }, ms);
+};
+
+/**
+ * Whitelist a list of globals for this test run.
+ *
+ * @api private
+ * @param {string[]} globals
+ */
+Runnable.prototype.globals = function (globals) {
+ if (!arguments.length) {
+ return this._allowedGlobals;
+ }
+ this._allowedGlobals = globals;
+};
+
+/**
+ * Run the test and invoke `fn(err)`.
+ *
+ * @param {Function} fn
+ * @api private
+ */
+Runnable.prototype.run = function (fn) {
+ var self = this;
+ var start = new Date();
+ var ctx = this.ctx;
+ var finished;
+ var emitted;
+
+ // Sometimes the ctx exists, but it is not runnable
+ if (ctx && ctx.runnable) {
+ ctx.runnable(this);
+ }
+
+ // called multiple times
+ function multiple (err) {
+ if (emitted) {
+ return;
+ }
+ emitted = true;
+ self.emit('error', err || new Error('done() called multiple times; stacktrace may be inaccurate'));
+ }
+
+ // finished
+ function done (err) {
+ var ms = self.timeout();
+ if (self.timedOut) {
+ return;
+ }
+ if (finished) {
+ return multiple(err || self._trace);
+ }
+
+ self.clearTimeout();
+ self.duration = new Date() - start;
+ finished = true;
+ if (!err && self.duration > ms && self._enableTimeouts) {
+ err = new Error('Timeout of ' + ms +
+ 'ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.');
+ }
+ fn(err);
+ }
+
+ // for .resetTimeout()
+ this.callback = done;
+
+ // explicit async with `done` argument
+ if (this.async) {
+ this.resetTimeout();
+
+ // allows skip() to be used in an explicit async context
+ this.skip = function asyncSkip () {
+ done(new Pending('async skip call'));
+ // halt execution. the Runnable will be marked pending
+ // by the previous call, and the uncaught handler will ignore
+ // the failure.
+ throw new Pending('async skip; aborting execution');
+ };
+
+ if (this.allowUncaught) {
+ return callFnAsync(this.fn);
+ }
+ try {
+ callFnAsync(this.fn);
+ } catch (err) {
+ emitted = true;
+ done(utils.getError(err));
+ }
+ return;
+ }
+
+ if (this.allowUncaught) {
+ if (this.isPending()) {
+ done();
+ } else {
+ callFn(this.fn);
+ }
+ return;
+ }
+
+ // sync or promise-returning
+ try {
+ if (this.isPending()) {
+ done();
+ } else {
+ callFn(this.fn);
+ }
+ } catch (err) {
+ emitted = true;
+ done(utils.getError(err));
+ }
+
+ function callFn (fn) {
+ var result = fn.call(ctx);
+ if (result && typeof result.then === 'function') {
+ self.resetTimeout();
+ result
+ .then(function () {
+ done();
+ // Return null so libraries like bluebird do not warn about
+ // subsequently constructed Promises.
+ return null;
+ },
+ function (reason) {
+ done(reason || new Error('Promise rejected with no or falsy reason'));
+ });
+ } else {
+ if (self.asyncOnly) {
+ return done(new Error('--async-only option in use without declaring `done()` or returning a promise'));
+ }
+
+ done();
+ }
+ }
+
+ function callFnAsync (fn) {
+ var result = fn.call(ctx, function (err) {
+ if (err instanceof Error || toString.call(err) === '[object Error]') {
+ return done(err);
+ }
+ if (err) {
+ if (Object.prototype.toString.call(err) === '[object Object]') {
+ return done(new Error('done() invoked with non-Error: ' +
+ JSON.stringify(err)));
+ }
+ return done(new Error('done() invoked with non-Error: ' + err));
+ }
+ if (result && utils.isPromise(result)) {
+ return done(new Error('Resolution method is overspecified. Specify a callback *or* return a Promise; not both.'));
+ }
+
+ done();
+ });
+ }
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./ms":15,"./pending":16,"./utils":38,"debug":2,"events":3,"json3":69,"lodash.create":75}],34:[function(require,module,exports){
+(function (process,global){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var EventEmitter = require('events').EventEmitter;
+var Pending = require('./pending');
+var utils = require('./utils');
+var inherits = utils.inherits;
+var debug = require('debug')('mocha:runner');
+var Runnable = require('./runnable');
+var filter = utils.filter;
+var indexOf = utils.indexOf;
+var some = utils.some;
+var keys = utils.keys;
+var stackFilter = utils.stackTraceFilter();
+var stringify = utils.stringify;
+var type = utils.type;
+var undefinedError = utils.undefinedError;
+var isArray = utils.isArray;
+
+/**
+ * Non-enumerable globals.
+ */
+
+var globals = [
+ 'setTimeout',
+ 'clearTimeout',
+ 'setInterval',
+ 'clearInterval',
+ 'XMLHttpRequest',
+ 'Date',
+ 'setImmediate',
+ 'clearImmediate'
+];
+
+/**
+ * Expose `Runner`.
+ */
+
+module.exports = Runner;
+
+/**
+ * Initialize a `Runner` for the given `suite`.
+ *
+ * Events:
+ *
+ * - `start` execution started
+ * - `end` execution complete
+ * - `suite` (suite) test suite execution started
+ * - `suite end` (suite) all tests (and sub-suites) have finished
+ * - `test` (test) test execution started
+ * - `test end` (test) test completed
+ * - `hook` (hook) hook execution started
+ * - `hook end` (hook) hook complete
+ * - `pass` (test) test passed
+ * - `fail` (test, err) test failed
+ * - `pending` (test) test pending
+ *
+ * @api public
+ * @param {Suite} suite Root suite
+ * @param {boolean} [delay] Whether or not to delay execution of root suite
+ * until ready.
+ */
+function Runner (suite, delay) {
+ var self = this;
+ this._globals = [];
+ this._abort = false;
+ this._delay = delay;
+ this.suite = suite;
+ this.started = false;
+ this.total = suite.total();
+ this.failures = 0;
+ this.on('test end', function (test) {
+ self.checkGlobals(test);
+ });
+ this.on('hook end', function (hook) {
+ self.checkGlobals(hook);
+ });
+ this._defaultGrep = /.*/;
+ this.grep(this._defaultGrep);
+ this.globals(this.globalProps().concat(extraGlobals()));
+}
+
+/**
+ * Wrapper for setImmediate, process.nextTick, or browser polyfill.
+ *
+ * @param {Function} fn
+ * @api private
+ */
+Runner.immediately = global.setImmediate || process.nextTick;
+
+/**
+ * Inherit from `EventEmitter.prototype`.
+ */
+inherits(Runner, EventEmitter);
+
+/**
+ * Run tests with full titles matching `re`. Updates runner.total
+ * with number of tests matched.
+ *
+ * @param {RegExp} re
+ * @param {Boolean} invert
+ * @return {Runner} for chaining
+ * @api public
+ * @param {RegExp} re
+ * @param {boolean} invert
+ * @return {Runner} Runner instance.
+ */
+Runner.prototype.grep = function (re, invert) {
+ debug('grep %s', re);
+ this._grep = re;
+ this._invert = invert;
+ this.total = this.grepTotal(this.suite);
+ return this;
+};
+
+/**
+ * Returns the number of tests matching the grep search for the
+ * given suite.
+ *
+ * @param {Suite} suite
+ * @return {Number}
+ * @api public
+ * @param {Suite} suite
+ * @return {number}
+ */
+Runner.prototype.grepTotal = function (suite) {
+ var self = this;
+ var total = 0;
+
+ suite.eachTest(function (test) {
+ var match = self._grep.test(test.fullTitle());
+ if (self._invert) {
+ match = !match;
+ }
+ if (match) {
+ total++;
+ }
+ });
+
+ return total;
+};
+
+/**
+ * Return a list of global properties.
+ *
+ * @return {Array}
+ * @api private
+ */
+Runner.prototype.globalProps = function () {
+ var props = keys(global);
+
+ // non-enumerables
+ for (var i = 0; i < globals.length; ++i) {
+ if (~indexOf(props, globals[i])) {
+ continue;
+ }
+ props.push(globals[i]);
+ }
+
+ return props;
+};
+
+/**
+ * Allow the given `arr` of globals.
+ *
+ * @param {Array} arr
+ * @return {Runner} for chaining
+ * @api public
+ * @param {Array} arr
+ * @return {Runner} Runner instance.
+ */
+Runner.prototype.globals = function (arr) {
+ if (!arguments.length) {
+ return this._globals;
+ }
+ debug('globals %j', arr);
+ this._globals = this._globals.concat(arr);
+ return this;
+};
+
+/**
+ * Check for global variable leaks.
+ *
+ * @api private
+ */
+Runner.prototype.checkGlobals = function (test) {
+ if (this.ignoreLeaks) {
+ return;
+ }
+ var ok = this._globals;
+
+ var globals = this.globalProps();
+ var leaks;
+
+ if (test) {
+ ok = ok.concat(test._allowedGlobals || []);
+ }
+
+ if (this.prevGlobalsLength === globals.length) {
+ return;
+ }
+ this.prevGlobalsLength = globals.length;
+
+ leaks = filterLeaks(ok, globals);
+ this._globals = this._globals.concat(leaks);
+
+ if (leaks.length > 1) {
+ this.fail(test, new Error('global leaks detected: ' + leaks.join(', ') + ''));
+ } else if (leaks.length) {
+ this.fail(test, new Error('global leak detected: ' + leaks[0]));
+ }
+};
+
+/**
+ * Fail the given `test`.
+ *
+ * @api private
+ * @param {Test} test
+ * @param {Error} err
+ */
+Runner.prototype.fail = function (test, err) {
+ if (test.isPending()) {
+ return;
+ }
+
+ ++this.failures;
+ test.state = 'failed';
+
+ if (!(err instanceof Error || err && typeof err.message === 'string')) {
+ err = new Error('the ' + type(err) + ' ' + stringify(err) + ' was thrown, throw an Error :)');
+ }
+
+ try {
+ err.stack = (this.fullStackTrace || !err.stack)
+ ? err.stack
+ : stackFilter(err.stack);
+ } catch (ignored) {
+ // some environments do not take kindly to monkeying with the stack
+ }
+
+ this.emit('fail', test, err);
+};
+
+/**
+ * Fail the given `hook` with `err`.
+ *
+ * Hook failures work in the following pattern:
+ * - If bail, then exit
+ * - Failed `before` hook skips all tests in a suite and subsuites,
+ * but jumps to corresponding `after` hook
+ * - Failed `before each` hook skips remaining tests in a
+ * suite and jumps to corresponding `after each` hook,
+ * which is run only once
+ * - Failed `after` hook does not alter
+ * execution order
+ * - Failed `after each` hook skips remaining tests in a
+ * suite and subsuites, but executes other `after each`
+ * hooks
+ *
+ * @api private
+ * @param {Hook} hook
+ * @param {Error} err
+ */
+Runner.prototype.failHook = function (hook, err) {
+ if (hook.ctx && hook.ctx.currentTest) {
+ hook.originalTitle = hook.originalTitle || hook.title;
+ hook.title = hook.originalTitle + ' for "' + hook.ctx.currentTest.title + '"';
+ }
+
+ this.fail(hook, err);
+ if (this.suite.bail()) {
+ this.emit('end');
+ }
+};
+
+/**
+ * Run hook `name` callbacks and then invoke `fn()`.
+ *
+ * @api private
+ * @param {string} name
+ * @param {Function} fn
+ */
+
+Runner.prototype.hook = function (name, fn) {
+ var suite = this.suite;
+ var hooks = suite['_' + name];
+ var self = this;
+
+ function next (i) {
+ var hook = hooks[i];
+ if (!hook) {
+ return fn();
+ }
+ self.currentRunnable = hook;
+
+ hook.ctx.currentTest = self.test;
+
+ self.emit('hook', hook);
+
+ if (!hook.listeners('error').length) {
+ hook.on('error', function (err) {
+ self.failHook(hook, err);
+ });
+ }
+
+ hook.run(function (err) {
+ var testError = hook.error();
+ if (testError) {
+ self.fail(self.test, testError);
+ }
+ if (err) {
+ if (err instanceof Pending) {
+ if (name === 'beforeEach' || name === 'afterEach') {
+ self.test.pending = true;
+ } else {
+ utils.forEach(suite.tests, function (test) {
+ test.pending = true;
+ });
+ // a pending hook won't be executed twice.
+ hook.pending = true;
+ }
+ } else {
+ self.failHook(hook, err);
+
+ // stop executing hooks, notify callee of hook err
+ return fn(err);
+ }
+ }
+ self.emit('hook end', hook);
+ delete hook.ctx.currentTest;
+ next(++i);
+ });
+ }
+
+ Runner.immediately(function () {
+ next(0);
+ });
+};
+
+/**
+ * Run hook `name` for the given array of `suites`
+ * in order, and callback `fn(err, errSuite)`.
+ *
+ * @api private
+ * @param {string} name
+ * @param {Array} suites
+ * @param {Function} fn
+ */
+Runner.prototype.hooks = function (name, suites, fn) {
+ var self = this;
+ var orig = this.suite;
+
+ function next (suite) {
+ self.suite = suite;
+
+ if (!suite) {
+ self.suite = orig;
+ return fn();
+ }
+
+ self.hook(name, function (err) {
+ if (err) {
+ var errSuite = self.suite;
+ self.suite = orig;
+ return fn(err, errSuite);
+ }
+
+ next(suites.pop());
+ });
+ }
+
+ next(suites.pop());
+};
+
+/**
+ * Run hooks from the top level down.
+ *
+ * @param {String} name
+ * @param {Function} fn
+ * @api private
+ */
+Runner.prototype.hookUp = function (name, fn) {
+ var suites = [this.suite].concat(this.parents()).reverse();
+ this.hooks(name, suites, fn);
+};
+
+/**
+ * Run hooks from the bottom up.
+ *
+ * @param {String} name
+ * @param {Function} fn
+ * @api private
+ */
+Runner.prototype.hookDown = function (name, fn) {
+ var suites = [this.suite].concat(this.parents());
+ this.hooks(name, suites, fn);
+};
+
+/**
+ * Return an array of parent Suites from
+ * closest to furthest.
+ *
+ * @return {Array}
+ * @api private
+ */
+Runner.prototype.parents = function () {
+ var suite = this.suite;
+ var suites = [];
+ while (suite.parent) {
+ suite = suite.parent;
+ suites.push(suite);
+ }
+ return suites;
+};
+
+/**
+ * Run the current test and callback `fn(err)`.
+ *
+ * @param {Function} fn
+ * @api private
+ */
+Runner.prototype.runTest = function (fn) {
+ var self = this;
+ var test = this.test;
+
+ if (!test) {
+ return;
+ }
+ if (this.asyncOnly) {
+ test.asyncOnly = true;
+ }
+ test.on('error', function (err) {
+ self.fail(test, err);
+ });
+ if (this.allowUncaught) {
+ test.allowUncaught = true;
+ return test.run(fn);
+ }
+ try {
+ test.run(fn);
+ } catch (err) {
+ fn(err);
+ }
+};
+
+/**
+ * Run tests in the given `suite` and invoke the callback `fn()` when complete.
+ *
+ * @api private
+ * @param {Suite} suite
+ * @param {Function} fn
+ */
+Runner.prototype.runTests = function (suite, fn) {
+ var self = this;
+ var tests = suite.tests.slice();
+ var test;
+
+ function hookErr (_, errSuite, after) {
+ // before/after Each hook for errSuite failed:
+ var orig = self.suite;
+
+ // for failed 'after each' hook start from errSuite parent,
+ // otherwise start from errSuite itself
+ self.suite = after ? errSuite.parent : errSuite;
+
+ if (self.suite) {
+ // call hookUp afterEach
+ self.hookUp('afterEach', function (err2, errSuite2) {
+ self.suite = orig;
+ // some hooks may fail even now
+ if (err2) {
+ return hookErr(err2, errSuite2, true);
+ }
+ // report error suite
+ fn(errSuite);
+ });
+ } else {
+ // there is no need calling other 'after each' hooks
+ self.suite = orig;
+ fn(errSuite);
+ }
+ }
+
+ function next (err, errSuite) {
+ // if we bail after first err
+ if (self.failures && suite._bail) {
+ return fn();
+ }
+
+ if (self._abort) {
+ return fn();
+ }
+
+ if (err) {
+ return hookErr(err, errSuite, true);
+ }
+
+ // next test
+ test = tests.shift();
+
+ // all done
+ if (!test) {
+ return fn();
+ }
+
+ // grep
+ var match = self._grep.test(test.fullTitle());
+ if (self._invert) {
+ match = !match;
+ }
+ if (!match) {
+ // Run immediately only if we have defined a grep. When we
+ // define a grep — It can cause maximum callstack error if
+ // the grep is doing a large recursive loop by neglecting
+ // all tests. The run immediately function also comes with
+ // a performance cost. So we don't want to run immediately
+ // if we run the whole test suite, because running the whole
+ // test suite don't do any immediate recursive loops. Thus,
+ // allowing a JS runtime to breathe.
+ if (self._grep !== self._defaultGrep) {
+ Runner.immediately(next);
+ } else {
+ next();
+ }
+ return;
+ }
+
+ if (test.isPending()) {
+ self.emit('pending', test);
+ self.emit('test end', test);
+ return next();
+ }
+
+ // execute test and hook(s)
+ self.emit('test', self.test = test);
+ self.hookDown('beforeEach', function (err, errSuite) {
+ if (test.isPending()) {
+ self.emit('pending', test);
+ self.emit('test end', test);
+ return next();
+ }
+ if (err) {
+ return hookErr(err, errSuite, false);
+ }
+ self.currentRunnable = self.test;
+ self.runTest(function (err) {
+ test = self.test;
+ if (err) {
+ var retry = test.currentRetry();
+ if (err instanceof Pending) {
+ test.pending = true;
+ self.emit('pending', test);
+ } else if (retry < test.retries()) {
+ var clonedTest = test.clone();
+ clonedTest.currentRetry(retry + 1);
+ tests.unshift(clonedTest);
+
+ // Early return + hook trigger so that it doesn't
+ // increment the count wrong
+ return self.hookUp('afterEach', next);
+ } else {
+ self.fail(test, err);
+ }
+ self.emit('test end', test);
+
+ if (err instanceof Pending) {
+ return next();
+ }
+
+ return self.hookUp('afterEach', next);
+ }
+
+ test.state = 'passed';
+ self.emit('pass', test);
+ self.emit('test end', test);
+ self.hookUp('afterEach', next);
+ });
+ });
+ }
+
+ this.next = next;
+ this.hookErr = hookErr;
+ next();
+};
+
+/**
+ * Run the given `suite` and invoke the callback `fn()` when complete.
+ *
+ * @api private
+ * @param {Suite} suite
+ * @param {Function} fn
+ */
+Runner.prototype.runSuite = function (suite, fn) {
+ var i = 0;
+ var self = this;
+ var total = this.grepTotal(suite);
+ var afterAllHookCalled = false;
+
+ debug('run suite %s', suite.fullTitle());
+
+ if (!total || (self.failures && suite._bail)) {
+ return fn();
+ }
+
+ this.emit('suite', this.suite = suite);
+
+ function next (errSuite) {
+ if (errSuite) {
+ // current suite failed on a hook from errSuite
+ if (errSuite === suite) {
+ // if errSuite is current suite
+ // continue to the next sibling suite
+ return done();
+ }
+ // errSuite is among the parents of current suite
+ // stop execution of errSuite and all sub-suites
+ return done(errSuite);
+ }
+
+ if (self._abort) {
+ return done();
+ }
+
+ var curr = suite.suites[i++];
+ if (!curr) {
+ return done();
+ }
+
+ // Avoid grep neglecting large number of tests causing a
+ // huge recursive loop and thus a maximum call stack error.
+ // See comment in `this.runTests()` for more information.
+ if (self._grep !== self._defaultGrep) {
+ Runner.immediately(function () {
+ self.runSuite(curr, next);
+ });
+ } else {
+ self.runSuite(curr, next);
+ }
+ }
+
+ function done (errSuite) {
+ self.suite = suite;
+ self.nextSuite = next;
+
+ if (afterAllHookCalled) {
+ fn(errSuite);
+ } else {
+ // mark that the afterAll block has been called once
+ // and so can be skipped if there is an error in it.
+ afterAllHookCalled = true;
+
+ // remove reference to test
+ delete self.test;
+
+ self.hook('afterAll', function () {
+ self.emit('suite end', suite);
+ fn(errSuite);
+ });
+ }
+ }
+
+ this.nextSuite = next;
+
+ this.hook('beforeAll', function (err) {
+ if (err) {
+ return done();
+ }
+ self.runTests(suite, next);
+ });
+};
+
+/**
+ * Handle uncaught exceptions.
+ *
+ * @param {Error} err
+ * @api private
+ */
+Runner.prototype.uncaught = function (err) {
+ if (err) {
+ debug('uncaught exception %s', err === (function () {
+ return this;
+ }.call(err)) ? (err.message || err) : err);
+ } else {
+ debug('uncaught undefined exception');
+ err = undefinedError();
+ }
+ err.uncaught = true;
+
+ var runnable = this.currentRunnable;
+
+ if (!runnable) {
+ runnable = new Runnable('Uncaught error outside test suite');
+ runnable.parent = this.suite;
+
+ if (this.started) {
+ this.fail(runnable, err);
+ } else {
+ // Can't recover from this failure
+ this.emit('start');
+ this.fail(runnable, err);
+ this.emit('end');
+ }
+
+ return;
+ }
+
+ runnable.clearTimeout();
+
+ // Ignore errors if complete or pending
+ if (runnable.state || runnable.isPending()) {
+ return;
+ }
+ this.fail(runnable, err);
+
+ // recover from test
+ if (runnable.type === 'test') {
+ this.emit('test end', runnable);
+ this.hookUp('afterEach', this.next);
+ return;
+ }
+
+ // recover from hooks
+ if (runnable.type === 'hook') {
+ var errSuite = this.suite;
+ // if hook failure is in afterEach block
+ if (runnable.fullTitle().indexOf('after each') > -1) {
+ return this.hookErr(err, errSuite, true);
+ }
+ // if hook failure is in beforeEach block
+ if (runnable.fullTitle().indexOf('before each') > -1) {
+ return this.hookErr(err, errSuite, false);
+ }
+ // if hook failure is in after or before blocks
+ return this.nextSuite(errSuite);
+ }
+
+ // bail
+ this.emit('end');
+};
+
+/**
+ * Cleans up the references to all the deferred functions
+ * (before/after/beforeEach/afterEach) and tests of a Suite.
+ * These must be deleted otherwise a memory leak can happen,
+ * as those functions may reference variables from closures,
+ * thus those variables can never be garbage collected as long
+ * as the deferred functions exist.
+ *
+ * @param {Suite} suite
+ */
+function cleanSuiteReferences (suite) {
+ function cleanArrReferences (arr) {
+ for (var i = 0; i < arr.length; i++) {
+ delete arr[i].fn;
+ }
+ }
+
+ if (isArray(suite._beforeAll)) {
+ cleanArrReferences(suite._beforeAll);
+ }
+
+ if (isArray(suite._beforeEach)) {
+ cleanArrReferences(suite._beforeEach);
+ }
+
+ if (isArray(suite._afterAll)) {
+ cleanArrReferences(suite._afterAll);
+ }
+
+ if (isArray(suite._afterEach)) {
+ cleanArrReferences(suite._afterEach);
+ }
+
+ for (var i = 0; i < suite.tests.length; i++) {
+ delete suite.tests[i].fn;
+ }
+}
+
+/**
+ * Run the root suite and invoke `fn(failures)`
+ * on completion.
+ *
+ * @param {Function} fn
+ * @return {Runner} for chaining
+ * @api public
+ * @param {Function} fn
+ * @return {Runner} Runner instance.
+ */
+Runner.prototype.run = function (fn) {
+ var self = this;
+ var rootSuite = this.suite;
+
+ // If there is an `only` filter
+ if (this.hasOnly) {
+ filterOnly(rootSuite);
+ }
+
+ fn = fn || function () {};
+
+ function uncaught (err) {
+ self.uncaught(err);
+ }
+
+ function start () {
+ self.started = true;
+ self.emit('start');
+ self.runSuite(rootSuite, function () {
+ debug('finished running');
+ self.emit('end');
+ });
+ }
+
+ debug('start');
+
+ // references cleanup to avoid memory leaks
+ this.on('suite end', cleanSuiteReferences);
+
+ // callback
+ this.on('end', function () {
+ if (self.forbidOnly && self.hasOnly) {
+ self.failures += self.stats.tests;
+ }
+ if (self.forbidPending) {
+ self.failures += self.stats.pending;
+ }
+ debug('end');
+ process.removeListener('uncaughtException', uncaught);
+ fn(self.failures);
+ });
+
+ // uncaught exception
+ process.on('uncaughtException', uncaught);
+
+ if (this._delay) {
+ // for reporters, I guess.
+ // might be nice to debounce some dots while we wait.
+ this.emit('waiting', rootSuite);
+ rootSuite.once('run', start);
+ } else {
+ start();
+ }
+
+ return this;
+};
+
+/**
+ * Cleanly abort execution.
+ *
+ * @api public
+ * @return {Runner} Runner instance.
+ */
+Runner.prototype.abort = function () {
+ debug('aborting');
+ this._abort = true;
+
+ return this;
+};
+
+/**
+ * Filter suites based on `isOnly` logic.
+ *
+ * @param {Array} suite
+ * @returns {Boolean}
+ * @api private
+ */
+function filterOnly (suite) {
+ if (suite._onlyTests.length) {
+ // If the suite contains `only` tests, run those and ignore any nested suites.
+ suite.tests = suite._onlyTests;
+ suite.suites = [];
+ } else {
+ // Otherwise, do not run any of the tests in this suite.
+ suite.tests = [];
+ utils.forEach(suite._onlySuites, function (onlySuite) {
+ // If there are other `only` tests/suites nested in the current `only` suite, then filter that `only` suite.
+ // Otherwise, all of the tests on this `only` suite should be run, so don't filter it.
+ if (hasOnly(onlySuite)) {
+ filterOnly(onlySuite);
+ }
+ });
+ // Run the `only` suites, as well as any other suites that have `only` tests/suites as descendants.
+ suite.suites = filter(suite.suites, function (childSuite) {
+ return indexOf(suite._onlySuites, childSuite) !== -1 || filterOnly(childSuite);
+ });
+ }
+ // Keep the suite only if there is something to run
+ return suite.tests.length || suite.suites.length;
+}
+
+/**
+ * Determines whether a suite has an `only` test or suite as a descendant.
+ *
+ * @param {Array} suite
+ * @returns {Boolean}
+ * @api private
+ */
+function hasOnly (suite) {
+ return suite._onlyTests.length || suite._onlySuites.length || some(suite.suites, hasOnly);
+}
+
+/**
+ * Filter leaks with the given globals flagged as `ok`.
+ *
+ * @api private
+ * @param {Array} ok
+ * @param {Array} globals
+ * @return {Array}
+ */
+function filterLeaks (ok, globals) {
+ return filter(globals, function (key) {
+ // Firefox and Chrome exposes iframes as index inside the window object
+ if (/^\d+/.test(key)) {
+ return false;
+ }
+
+ // in firefox
+ // if runner runs in an iframe, this iframe's window.getInterface method
+ // not init at first it is assigned in some seconds
+ if (global.navigator && (/^getInterface/).test(key)) {
+ return false;
+ }
+
+ // an iframe could be approached by window[iframeIndex]
+ // in ie6,7,8 and opera, iframeIndex is enumerable, this could cause leak
+ if (global.navigator && (/^\d+/).test(key)) {
+ return false;
+ }
+
+ // Opera and IE expose global variables for HTML element IDs (issue #243)
+ if (/^mocha-/.test(key)) {
+ return false;
+ }
+
+ var matched = filter(ok, function (ok) {
+ if (~ok.indexOf('*')) {
+ return key.indexOf(ok.split('*')[0]) === 0;
+ }
+ return key === ok;
+ });
+ return !matched.length && (!global.navigator || key !== 'onerror');
+ });
+}
+
+/**
+ * Array of globals dependent on the environment.
+ *
+ * @return {Array}
+ * @api private
+ */
+function extraGlobals () {
+ if (typeof process === 'object' && typeof process.version === 'string') {
+ var parts = process.version.split('.');
+ var nodeVersion = utils.reduce(parts, function (a, v) {
+ return a << 8 | v;
+ });
+
+ // 'errno' was renamed to process._errno in v0.9.11.
+
+ if (nodeVersion < 0x00090B) {
+ return ['errno'];
+ }
+ }
+
+ return [];
+}
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./pending":16,"./runnable":33,"./utils":38,"_process":82,"debug":2,"events":3}],35:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var EventEmitter = require('events').EventEmitter;
+var Hook = require('./hook');
+var utils = require('./utils');
+var inherits = utils.inherits;
+var debug = require('debug')('mocha:suite');
+var milliseconds = require('./ms');
+
+/**
+ * Expose `Suite`.
+ */
+
+exports = module.exports = Suite;
+
+/**
+ * Create a new `Suite` with the given `title` and parent `Suite`. When a suite
+ * with the same title is already present, that suite is returned to provide
+ * nicer reporter and more flexible meta-testing.
+ *
+ * @api public
+ * @param {Suite} parent
+ * @param {string} title
+ * @return {Suite}
+ */
+exports.create = function (parent, title) {
+ var suite = new Suite(title, parent.ctx);
+ suite.parent = parent;
+ title = suite.fullTitle();
+ parent.addSuite(suite);
+ return suite;
+};
+
+/**
+ * Initialize a new `Suite` with the given `title` and `ctx`.
+ *
+ * @api private
+ * @param {string} title
+ * @param {Context} parentContext
+ */
+function Suite (title, parentContext) {
+ if (!utils.isString(title)) {
+ throw new Error('Suite `title` should be a "string" but "' + typeof title + '" was given instead.');
+ }
+ this.title = title;
+ function Context () {}
+ Context.prototype = parentContext;
+ this.ctx = new Context();
+ this.suites = [];
+ this.tests = [];
+ this.pending = false;
+ this._beforeEach = [];
+ this._beforeAll = [];
+ this._afterEach = [];
+ this._afterAll = [];
+ this.root = !title;
+ this._timeout = 2000;
+ this._enableTimeouts = true;
+ this._slow = 75;
+ this._bail = false;
+ this._retries = -1;
+ this._onlyTests = [];
+ this._onlySuites = [];
+ this.delayed = false;
+}
+
+/**
+ * Inherit from `EventEmitter.prototype`.
+ */
+inherits(Suite, EventEmitter);
+
+/**
+ * Return a clone of this `Suite`.
+ *
+ * @api private
+ * @return {Suite}
+ */
+Suite.prototype.clone = function () {
+ var suite = new Suite(this.title);
+ debug('clone');
+ suite.ctx = this.ctx;
+ suite.timeout(this.timeout());
+ suite.retries(this.retries());
+ suite.enableTimeouts(this.enableTimeouts());
+ suite.slow(this.slow());
+ suite.bail(this.bail());
+ return suite;
+};
+
+/**
+ * Set timeout `ms` or short-hand such as "2s".
+ *
+ * @api private
+ * @param {number|string} ms
+ * @return {Suite|number} for chaining
+ */
+Suite.prototype.timeout = function (ms) {
+ if (!arguments.length) {
+ return this._timeout;
+ }
+ if (ms.toString() === '0') {
+ this._enableTimeouts = false;
+ }
+ if (typeof ms === 'string') {
+ ms = milliseconds(ms);
+ }
+ debug('timeout %d', ms);
+ this._timeout = parseInt(ms, 10);
+ return this;
+};
+
+/**
+ * Set number of times to retry a failed test.
+ *
+ * @api private
+ * @param {number|string} n
+ * @return {Suite|number} for chaining
+ */
+Suite.prototype.retries = function (n) {
+ if (!arguments.length) {
+ return this._retries;
+ }
+ debug('retries %d', n);
+ this._retries = parseInt(n, 10) || 0;
+ return this;
+};
+
+/**
+ * Set timeout to `enabled`.
+ *
+ * @api private
+ * @param {boolean} enabled
+ * @return {Suite|boolean} self or enabled
+ */
+Suite.prototype.enableTimeouts = function (enabled) {
+ if (!arguments.length) {
+ return this._enableTimeouts;
+ }
+ debug('enableTimeouts %s', enabled);
+ this._enableTimeouts = enabled;
+ return this;
+};
+
+/**
+ * Set slow `ms` or short-hand such as "2s".
+ *
+ * @api private
+ * @param {number|string} ms
+ * @return {Suite|number} for chaining
+ */
+Suite.prototype.slow = function (ms) {
+ if (!arguments.length) {
+ return this._slow;
+ }
+ if (typeof ms === 'string') {
+ ms = milliseconds(ms);
+ }
+ debug('slow %d', ms);
+ this._slow = ms;
+ return this;
+};
+
+/**
+ * Sets whether to bail after first error.
+ *
+ * @api private
+ * @param {boolean} bail
+ * @return {Suite|number} for chaining
+ */
+Suite.prototype.bail = function (bail) {
+ if (!arguments.length) {
+ return this._bail;
+ }
+ debug('bail %s', bail);
+ this._bail = bail;
+ return this;
+};
+
+/**
+ * Check if this suite or its parent suite is marked as pending.
+ *
+ * @api private
+ */
+Suite.prototype.isPending = function () {
+ return this.pending || (this.parent && this.parent.isPending());
+};
+
+/**
+ * Run `fn(test[, done])` before running tests.
+ *
+ * @api private
+ * @param {string} title
+ * @param {Function} fn
+ * @return {Suite} for chaining
+ */
+Suite.prototype.beforeAll = function (title, fn) {
+ if (this.isPending()) {
+ return this;
+ }
+ if (typeof title === 'function') {
+ fn = title;
+ title = fn.name;
+ }
+ title = '"before all" hook' + (title ? ': ' + title : '');
+
+ var hook = new Hook(title, fn);
+ hook.parent = this;
+ hook.timeout(this.timeout());
+ hook.retries(this.retries());
+ hook.enableTimeouts(this.enableTimeouts());
+ hook.slow(this.slow());
+ hook.ctx = this.ctx;
+ this._beforeAll.push(hook);
+ this.emit('beforeAll', hook);
+ return this;
+};
+
+/**
+ * Run `fn(test[, done])` after running tests.
+ *
+ * @api private
+ * @param {string} title
+ * @param {Function} fn
+ * @return {Suite} for chaining
+ */
+Suite.prototype.afterAll = function (title, fn) {
+ if (this.isPending()) {
+ return this;
+ }
+ if (typeof title === 'function') {
+ fn = title;
+ title = fn.name;
+ }
+ title = '"after all" hook' + (title ? ': ' + title : '');
+
+ var hook = new Hook(title, fn);
+ hook.parent = this;
+ hook.timeout(this.timeout());
+ hook.retries(this.retries());
+ hook.enableTimeouts(this.enableTimeouts());
+ hook.slow(this.slow());
+ hook.ctx = this.ctx;
+ this._afterAll.push(hook);
+ this.emit('afterAll', hook);
+ return this;
+};
+
+/**
+ * Run `fn(test[, done])` before each test case.
+ *
+ * @api private
+ * @param {string} title
+ * @param {Function} fn
+ * @return {Suite} for chaining
+ */
+Suite.prototype.beforeEach = function (title, fn) {
+ if (this.isPending()) {
+ return this;
+ }
+ if (typeof title === 'function') {
+ fn = title;
+ title = fn.name;
+ }
+ title = '"before each" hook' + (title ? ': ' + title : '');
+
+ var hook = new Hook(title, fn);
+ hook.parent = this;
+ hook.timeout(this.timeout());
+ hook.retries(this.retries());
+ hook.enableTimeouts(this.enableTimeouts());
+ hook.slow(this.slow());
+ hook.ctx = this.ctx;
+ this._beforeEach.push(hook);
+ this.emit('beforeEach', hook);
+ return this;
+};
+
+/**
+ * Run `fn(test[, done])` after each test case.
+ *
+ * @api private
+ * @param {string} title
+ * @param {Function} fn
+ * @return {Suite} for chaining
+ */
+Suite.prototype.afterEach = function (title, fn) {
+ if (this.isPending()) {
+ return this;
+ }
+ if (typeof title === 'function') {
+ fn = title;
+ title = fn.name;
+ }
+ title = '"after each" hook' + (title ? ': ' + title : '');
+
+ var hook = new Hook(title, fn);
+ hook.parent = this;
+ hook.timeout(this.timeout());
+ hook.retries(this.retries());
+ hook.enableTimeouts(this.enableTimeouts());
+ hook.slow(this.slow());
+ hook.ctx = this.ctx;
+ this._afterEach.push(hook);
+ this.emit('afterEach', hook);
+ return this;
+};
+
+/**
+ * Add a test `suite`.
+ *
+ * @api private
+ * @param {Suite} suite
+ * @return {Suite} for chaining
+ */
+Suite.prototype.addSuite = function (suite) {
+ suite.parent = this;
+ suite.timeout(this.timeout());
+ suite.retries(this.retries());
+ suite.enableTimeouts(this.enableTimeouts());
+ suite.slow(this.slow());
+ suite.bail(this.bail());
+ this.suites.push(suite);
+ this.emit('suite', suite);
+ return this;
+};
+
+/**
+ * Add a `test` to this suite.
+ *
+ * @api private
+ * @param {Test} test
+ * @return {Suite} for chaining
+ */
+Suite.prototype.addTest = function (test) {
+ test.parent = this;
+ test.timeout(this.timeout());
+ test.retries(this.retries());
+ test.enableTimeouts(this.enableTimeouts());
+ test.slow(this.slow());
+ test.ctx = this.ctx;
+ this.tests.push(test);
+ this.emit('test', test);
+ return this;
+};
+
+/**
+ * Return the full title generated by recursively concatenating the parent's
+ * full title.
+ *
+ * @api public
+ * @return {string}
+ */
+Suite.prototype.fullTitle = function () {
+ if (this.parent) {
+ var full = this.parent.fullTitle();
+ if (full) {
+ return full + ' ' + this.title;
+ }
+ }
+ return this.title;
+};
+
+/**
+ * Return the total number of tests.
+ *
+ * @api public
+ * @return {number}
+ */
+Suite.prototype.total = function () {
+ return utils.reduce(this.suites, function (sum, suite) {
+ return sum + suite.total();
+ }, 0) + this.tests.length;
+};
+
+/**
+ * Iterates through each suite recursively to find all tests. Applies a
+ * function in the format `fn(test)`.
+ *
+ * @api private
+ * @param {Function} fn
+ * @return {Suite}
+ */
+Suite.prototype.eachTest = function (fn) {
+ utils.forEach(this.tests, fn);
+ utils.forEach(this.suites, function (suite) {
+ suite.eachTest(fn);
+ });
+ return this;
+};
+
+/**
+ * This will run the root suite if we happen to be running in delayed mode.
+ */
+Suite.prototype.run = function run () {
+ if (this.root) {
+ this.emit('run');
+ }
+};
+
+},{"./hook":7,"./ms":15,"./utils":38,"debug":2,"events":3}],36:[function(require,module,exports){
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var Runnable = require('./runnable');
+var create = require('lodash.create');
+var isString = require('./utils').isString;
+
+/**
+ * Expose `Test`.
+ */
+
+module.exports = Test;
+
+/**
+ * Initialize a new `Test` with the given `title` and callback `fn`.
+ *
+ * @api private
+ * @param {String} title
+ * @param {Function} fn
+ */
+function Test (title, fn) {
+ if (!isString(title)) {
+ throw new Error('Test `title` should be a "string" but "' + typeof title + '" was given instead.');
+ }
+ Runnable.call(this, title, fn);
+ this.pending = !fn;
+ this.type = 'test';
+}
+
+/**
+ * Inherit from `Runnable.prototype`.
+ */
+Test.prototype = create(Runnable.prototype, {
+ constructor: Test
+});
+
+Test.prototype.clone = function () {
+ var test = new Test(this.title, this.fn);
+ test.timeout(this.timeout());
+ test.slow(this.slow());
+ test.enableTimeouts(this.enableTimeouts());
+ test.retries(this.retries());
+ test.currentRetry(this.currentRetry());
+ test.globals(this.globals());
+ test.parent = this.parent;
+ test.file = this.file;
+ test.ctx = this.ctx;
+ return test;
+};
+
+},{"./runnable":33,"./utils":38,"lodash.create":75}],37:[function(require,module,exports){
+'use strict';
+
+/**
+ * Pad a `number` with a ten's place zero.
+ *
+ * @param {number} number
+ * @return {string}
+ */
+function pad(number) {
+ var n = number.toString();
+ return n.length === 1 ? '0' + n : n;
+}
+
+/**
+ * Turn a `date` into an ISO string.
+ *
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
+ *
+ * @param {Date} date
+ * @return {string}
+ */
+function toISOString(date) {
+ return date.getUTCFullYear()
+ + '-' + pad(date.getUTCMonth() + 1)
+ + '-' + pad(date.getUTCDate())
+ + 'T' + pad(date.getUTCHours())
+ + ':' + pad(date.getUTCMinutes())
+ + ':' + pad(date.getUTCSeconds())
+ + '.' + String((date.getUTCMilliseconds()/1000).toFixed(3)).slice(2, 5)
+ + 'Z';
+}
+
+/*
+ * Exports.
+ */
+
+module.exports = toISOString;
+
+},{}],38:[function(require,module,exports){
+(function (process,Buffer){
+'use strict';
+
+/* eslint-env browser */
+
+/**
+ * Module dependencies.
+ */
+
+var JSON = require('json3');
+var basename = require('path').basename;
+var debug = require('debug')('mocha:watch');
+var exists = require('fs').existsSync || require('path').existsSync;
+var glob = require('glob');
+var path = require('path');
+var join = path.join;
+var readdirSync = require('fs').readdirSync;
+var statSync = require('fs').statSync;
+var watchFile = require('fs').watchFile;
+var lstatSync = require('fs').lstatSync;
+var toISOString = require('./to-iso-string');
+var he = require('he');
+
+/**
+ * Ignored directories.
+ */
+
+var ignore = ['node_modules', '.git'];
+
+exports.inherits = require('util').inherits;
+
+/**
+ * Escape special characters in the given string of html.
+ *
+ * @api private
+ * @param {string} html
+ * @return {string}
+ */
+exports.escape = function (html) {
+ return he.encode(String(html), { useNamedReferences: false });
+};
+
+/**
+ * Array#forEach (<=IE8)
+ *
+ * @api private
+ * @param {Array} arr
+ * @param {Function} fn
+ * @param {Object} scope
+ */
+exports.forEach = function (arr, fn, scope) {
+ for (var i = 0, l = arr.length; i < l; i++) {
+ fn.call(scope, arr[i], i);
+ }
+};
+
+/**
+ * Test if the given obj is type of string.
+ *
+ * @api private
+ * @param {Object} obj
+ * @return {boolean}
+ */
+exports.isString = function (obj) {
+ return typeof obj === 'string';
+};
+
+/**
+ * Array#map (<=IE8)
+ *
+ * @api private
+ * @param {Array} arr
+ * @param {Function} fn
+ * @param {Object} scope
+ * @return {Array}
+ */
+exports.map = function (arr, fn, scope) {
+ var result = [];
+ for (var i = 0, l = arr.length; i < l; i++) {
+ result.push(fn.call(scope, arr[i], i, arr));
+ }
+ return result;
+};
+
+/**
+ * Array#indexOf (<=IE8)
+ *
+ * @api private
+ * @param {Array} arr
+ * @param {Object} obj to find index of
+ * @param {number} start
+ * @return {number}
+ */
+var indexOf = exports.indexOf = function (arr, obj, start) {
+ for (var i = start || 0, l = arr.length; i < l; i++) {
+ if (arr[i] === obj) {
+ return i;
+ }
+ }
+ return -1;
+};
+
+/**
+ * Array#reduce (<=IE8)
+ *
+ * @api private
+ * @param {Array} arr
+ * @param {Function} fn
+ * @param {Object} val Initial value.
+ * @return {*}
+ */
+var reduce = exports.reduce = function (arr, fn, val) {
+ var rval = val;
+
+ for (var i = 0, l = arr.length; i < l; i++) {
+ rval = fn(rval, arr[i], i, arr);
+ }
+
+ return rval;
+};
+
+/**
+ * Array#filter (<=IE8)
+ *
+ * @api private
+ * @param {Array} arr
+ * @param {Function} fn
+ * @return {Array}
+ */
+exports.filter = function (arr, fn) {
+ var ret = [];
+
+ for (var i = 0, l = arr.length; i < l; i++) {
+ var val = arr[i];
+ if (fn(val, i, arr)) {
+ ret.push(val);
+ }
+ }
+
+ return ret;
+};
+
+/**
+ * Array#some (<=IE8)
+ *
+ * @api private
+ * @param {Array} arr
+ * @param {Function} fn
+ * @return {Array}
+ */
+exports.some = function (arr, fn) {
+ for (var i = 0, l = arr.length; i < l; i++) {
+ if (fn(arr[i])) {
+ return true;
+ }
+ }
+ return false;
+};
+
+/**
+ * Object.keys (<=IE8)
+ *
+ * @api private
+ * @param {Object} obj
+ * @return {Array} keys
+ */
+exports.keys = typeof Object.keys === 'function' ? Object.keys : function (obj) {
+ var keys = [];
+ var has = Object.prototype.hasOwnProperty; // for `window` on <=IE8
+
+ for (var key in obj) {
+ if (has.call(obj, key)) {
+ keys.push(key);
+ }
+ }
+
+ return keys;
+};
+
+/**
+ * Watch the given `files` for changes
+ * and invoke `fn(file)` on modification.
+ *
+ * @api private
+ * @param {Array} files
+ * @param {Function} fn
+ */
+exports.watch = function (files, fn) {
+ var options = { interval: 100 };
+ files.forEach(function (file) {
+ debug('file %s', file);
+ watchFile(file, options, function (curr, prev) {
+ if (prev.mtime < curr.mtime) {
+ fn(file);
+ }
+ });
+ });
+};
+
+/**
+ * Array.isArray (<=IE8)
+ *
+ * @api private
+ * @param {Object} obj
+ * @return {Boolean}
+ */
+var isArray = typeof Array.isArray === 'function' ? Array.isArray : function (obj) {
+ return Object.prototype.toString.call(obj) === '[object Array]';
+};
+
+exports.isArray = isArray;
+
+/**
+ * Buffer.prototype.toJSON polyfill.
+ *
+ * @type {Function}
+ */
+if (typeof Buffer !== 'undefined' && Buffer.prototype) {
+ Buffer.prototype.toJSON = Buffer.prototype.toJSON || function () {
+ return Array.prototype.slice.call(this, 0);
+ };
+}
+
+/**
+ * Ignored files.
+ *
+ * @api private
+ * @param {string} path
+ * @return {boolean}
+ */
+function ignored (path) {
+ return !~ignore.indexOf(path);
+}
+
+/**
+ * Lookup files in the given `dir`.
+ *
+ * @api private
+ * @param {string} dir
+ * @param {string[]} [ext=['.js']]
+ * @param {Array} [ret=[]]
+ * @return {Array}
+ */
+exports.files = function (dir, ext, ret) {
+ ret = ret || [];
+ ext = ext || ['js'];
+
+ var re = new RegExp('\\.(' + ext.join('|') + ')$');
+
+ readdirSync(dir)
+ .filter(ignored)
+ .forEach(function (path) {
+ path = join(dir, path);
+ if (lstatSync(path).isDirectory()) {
+ exports.files(path, ext, ret);
+ } else if (path.match(re)) {
+ ret.push(path);
+ }
+ });
+
+ return ret;
+};
+
+/**
+ * Compute a slug from the given `str`.
+ *
+ * @api private
+ * @param {string} str
+ * @return {string}
+ */
+exports.slug = function (str) {
+ return str
+ .toLowerCase()
+ .replace(/ +/g, '-')
+ .replace(/[^-\w]/g, '');
+};
+
+/**
+ * Strip the function definition from `str`, and re-indent for pre whitespace.
+ *
+ * @param {string} str
+ * @return {string}
+ */
+exports.clean = function (str) {
+ str = str
+ .replace(/\r\n?|[\n\u2028\u2029]/g, '\n').replace(/^\uFEFF/, '')
+ // (traditional)-> space/name parameters body (lambda)-> parameters body multi-statement/single keep body content
+ .replace(/^function(?:\s*|\s+[^(]*)\([^)]*\)\s*\{((?:.|\n)*?)\s*\}$|^\([^)]*\)\s*=>\s*(?:\{((?:.|\n)*?)\s*\}|((?:.|\n)*))$/, '$1$2$3');
+
+ var spaces = str.match(/^\n?( *)/)[1].length;
+ var tabs = str.match(/^\n?(\t*)/)[1].length;
+ var re = new RegExp('^\n?' + (tabs ? '\t' : ' ') + '{' + (tabs || spaces) + '}', 'gm');
+
+ str = str.replace(re, '');
+
+ return exports.trim(str);
+};
+
+/**
+ * Trim the given `str`.
+ *
+ * @api private
+ * @param {string} str
+ * @return {string}
+ */
+exports.trim = function (str) {
+ return str.replace(/^\s+|\s+$/g, '');
+};
+
+/**
+ * Parse the given `qs`.
+ *
+ * @api private
+ * @param {string} qs
+ * @return {Object}
+ */
+exports.parseQuery = function (qs) {
+ return reduce(qs.replace('?', '').split('&'), function (obj, pair) {
+ var i = pair.indexOf('=');
+ var key = pair.slice(0, i);
+ var val = pair.slice(++i);
+
+ // Due to how the URLSearchParams API treats spaces
+ obj[key] = decodeURIComponent(val.replace(/\+/g, '%20'));
+
+ return obj;
+ }, {});
+};
+
+/**
+ * Highlight the given string of `js`.
+ *
+ * @api private
+ * @param {string} js
+ * @return {string}
+ */
+function highlight (js) {
+ return js
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;')
+ .replace(/\/\/(.*)/gm, '<span class="comment">//$1</span>')
+ .replace(/('.*?')/gm, '<span class="string">$1</span>')
+ .replace(/(\d+\.\d+)/gm, '<span class="number">$1</span>')
+ .replace(/(\d+)/gm, '<span class="number">$1</span>')
+ .replace(/\bnew[ \t]+(\w+)/gm, '<span class="keyword">new</span> <span class="init">$1</span>')
+ .replace(/\b(function|new|throw|return|var|if|else)\b/gm, '<span class="keyword">$1</span>');
+}
+
+/**
+ * Highlight the contents of tag `name`.
+ *
+ * @api private
+ * @param {string} name
+ */
+exports.highlightTags = function (name) {
+ var code = document.getElementById('mocha').getElementsByTagName(name);
+ for (var i = 0, len = code.length; i < len; ++i) {
+ code[i].innerHTML = highlight(code[i].innerHTML);
+ }
+};
+
+/**
+ * If a value could have properties, and has none, this function is called,
+ * which returns a string representation of the empty value.
+ *
+ * Functions w/ no properties return `'[Function]'`
+ * Arrays w/ length === 0 return `'[]'`
+ * Objects w/ no properties return `'{}'`
+ * All else: return result of `value.toString()`
+ *
+ * @api private
+ * @param {*} value The value to inspect.
+ * @param {string} typeHint The type of the value
+ * @returns {string}
+ */
+function emptyRepresentation (value, typeHint) {
+ switch (typeHint) {
+ case 'function':
+ return '[Function]';
+ case 'object':
+ return '{}';
+ case 'array':
+ return '[]';
+ default:
+ return value.toString();
+ }
+}
+
+/**
+ * Takes some variable and asks `Object.prototype.toString()` what it thinks it
+ * is.
+ *
+ * @api private
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
+ * @param {*} value The value to test.
+ * @returns {string} Computed type
+ * @example
+ * type({}) // 'object'
+ * type([]) // 'array'
+ * type(1) // 'number'
+ * type(false) // 'boolean'
+ * type(Infinity) // 'number'
+ * type(null) // 'null'
+ * type(new Date()) // 'date'
+ * type(/foo/) // 'regexp'
+ * type('type') // 'string'
+ * type(global) // 'global'
+ * type(new String('foo') // 'object'
+ */
+var type = exports.type = function type (value) {
+ if (value === undefined) {
+ return 'undefined';
+ } else if (value === null) {
+ return 'null';
+ } else if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {
+ return 'buffer';
+ }
+ return Object.prototype.toString.call(value)
+ .replace(/^\[.+\s(.+?)]$/, '$1')
+ .toLowerCase();
+};
+
+/**
+ * Stringify `value`. Different behavior depending on type of value:
+ *
+ * - If `value` is undefined or null, return `'[undefined]'` or `'[null]'`, respectively.
+ * - If `value` is not an object, function or array, return result of `value.toString()` wrapped in double-quotes.
+ * - If `value` is an *empty* object, function, or array, return result of function
+ * {@link emptyRepresentation}.
+ * - If `value` has properties, call {@link exports.canonicalize} on it, then return result of
+ * JSON.stringify().
+ *
+ * @api private
+ * @see exports.type
+ * @param {*} value
+ * @return {string}
+ */
+exports.stringify = function (value) {
+ var typeHint = type(value);
+
+ if (!~indexOf(['object', 'array', 'function'], typeHint)) {
+ if (typeHint === 'buffer') {
+ var json = value.toJSON();
+ // Based on the toJSON result
+ return jsonStringify(json.data && json.type ? json.data : json, 2)
+ .replace(/,(\n|$)/g, '$1');
+ }
+
+ // IE7/IE8 has a bizarre String constructor; needs to be coerced
+ // into an array and back to obj.
+ if (typeHint === 'string' && typeof value === 'object') {
+ value = reduce(value.split(''), function (acc, char, idx) {
+ acc[idx] = char;
+ return acc;
+ }, {});
+ typeHint = 'object';
+ } else {
+ return jsonStringify(value);
+ }
+ }
+
+ for (var prop in value) {
+ if (Object.prototype.hasOwnProperty.call(value, prop)) {
+ return jsonStringify(exports.canonicalize(value, null, typeHint), 2).replace(/,(\n|$)/g, '$1');
+ }
+ }
+
+ return emptyRepresentation(value, typeHint);
+};
+
+/**
+ * like JSON.stringify but more sense.
+ *
+ * @api private
+ * @param {Object} object
+ * @param {number=} spaces
+ * @param {number=} depth
+ * @returns {*}
+ */
+function jsonStringify (object, spaces, depth) {
+ if (typeof spaces === 'undefined') {
+ // primitive types
+ return _stringify(object);
+ }
+
+ depth = depth || 1;
+ var space = spaces * depth;
+ var str = isArray(object) ? '[' : '{';
+ var end = isArray(object) ? ']' : '}';
+ var length = typeof object.length === 'number' ? object.length : exports.keys(object).length;
+ // `.repeat()` polyfill
+ function repeat (s, n) {
+ return new Array(n).join(s);
+ }
+
+ function _stringify (val) {
+ switch (type(val)) {
+ case 'null':
+ case 'undefined':
+ val = '[' + val + ']';
+ break;
+ case 'array':
+ case 'object':
+ val = jsonStringify(val, spaces, depth + 1);
+ break;
+ case 'boolean':
+ case 'regexp':
+ case 'symbol':
+ case 'number':
+ val = val === 0 && (1 / val) === -Infinity // `-0`
+ ? '-0'
+ : val.toString();
+ break;
+ case 'date':
+ var sDate;
+ if (isNaN(val.getTime())) { // Invalid date
+ sDate = val.toString();
+ } else {
+ sDate = val.toISOString ? val.toISOString() : toISOString(val);
+ }
+ val = '[Date: ' + sDate + ']';
+ break;
+ case 'buffer':
+ var json = val.toJSON();
+ // Based on the toJSON result
+ json = json.data && json.type ? json.data : json;
+ val = '[Buffer: ' + jsonStringify(json, 2, depth + 1) + ']';
+ break;
+ default:
+ val = (val === '[Function]' || val === '[Circular]')
+ ? val
+ : JSON.stringify(val); // string
+ }
+ return val;
+ }
+
+ for (var i in object) {
+ if (!Object.prototype.hasOwnProperty.call(object, i)) {
+ continue; // not my business
+ }
+ --length;
+ str += '\n ' + repeat(' ', space) +
+ (isArray(object) ? '' : '"' + i + '": ') + // key
+ _stringify(object[i]) + // value
+ (length ? ',' : ''); // comma
+ }
+
+ return str +
+ // [], {}
+ (str.length !== 1 ? '\n' + repeat(' ', --space) + end : end);
+}
+
+/**
+ * Test if a value is a buffer.
+ *
+ * @api private
+ * @param {*} value The value to test.
+ * @return {boolean} True if `value` is a buffer, otherwise false
+ */
+exports.isBuffer = function (value) {
+ return typeof Buffer !== 'undefined' && Buffer.isBuffer(value);
+};
+
+/**
+ * Return a new Thing that has the keys in sorted order. Recursive.
+ *
+ * If the Thing...
+ * - has already been seen, return string `'[Circular]'`
+ * - is `undefined`, return string `'[undefined]'`
+ * - is `null`, return value `null`
+ * - is some other primitive, return the value
+ * - is not a primitive or an `Array`, `Object`, or `Function`, return the value of the Thing's `toString()` method
+ * - is a non-empty `Array`, `Object`, or `Function`, return the result of calling this function again.
+ * - is an empty `Array`, `Object`, or `Function`, return the result of calling `emptyRepresentation()`
+ *
+ * @api private
+ * @see {@link exports.stringify}
+ * @param {*} value Thing to inspect. May or may not have properties.
+ * @param {Array} [stack=[]] Stack of seen values
+ * @param {string} [typeHint] Type hint
+ * @return {(Object|Array|Function|string|undefined)}
+ */
+exports.canonicalize = function canonicalize (value, stack, typeHint) {
+ var canonicalizedObj;
+ /* eslint-disable no-unused-vars */
+ var prop;
+ /* eslint-enable no-unused-vars */
+ typeHint = typeHint || type(value);
+ function withStack (value, fn) {
+ stack.push(value);
+ fn();
+ stack.pop();
+ }
+
+ stack = stack || [];
+
+ if (indexOf(stack, value) !== -1) {
+ return '[Circular]';
+ }
+
+ switch (typeHint) {
+ case 'undefined':
+ case 'buffer':
+ case 'null':
+ canonicalizedObj = value;
+ break;
+ case 'array':
+ withStack(value, function () {
+ canonicalizedObj = exports.map(value, function (item) {
+ return exports.canonicalize(item, stack);
+ });
+ });
+ break;
+ case 'function':
+ /* eslint-disable guard-for-in */
+ for (prop in value) {
+ canonicalizedObj = {};
+ break;
+ }
+ /* eslint-enable guard-for-in */
+ if (!canonicalizedObj) {
+ canonicalizedObj = emptyRepresentation(value, typeHint);
+ break;
+ }
+ /* falls through */
+ case 'object':
+ canonicalizedObj = canonicalizedObj || {};
+ withStack(value, function () {
+ exports.forEach(exports.keys(value).sort(), function (key) {
+ canonicalizedObj[key] = exports.canonicalize(value[key], stack);
+ });
+ });
+ break;
+ case 'date':
+ case 'number':
+ case 'regexp':
+ case 'boolean':
+ case 'symbol':
+ canonicalizedObj = value;
+ break;
+ default:
+ canonicalizedObj = value + '';
+ }
+
+ return canonicalizedObj;
+};
+
+/**
+ * Lookup file names at the given `path`.
+ *
+ * @api public
+ * @param {string} path Base path to start searching from.
+ * @param {string[]} extensions File extensions to look for.
+ * @param {boolean} recursive Whether or not to recurse into subdirectories.
+ * @return {string[]} An array of paths.
+ */
+exports.lookupFiles = function lookupFiles (path, extensions, recursive) {
+ var files = [];
+ var re = new RegExp('\\.(' + extensions.join('|') + ')$');
+
+ if (!exists(path)) {
+ if (exists(path + '.js')) {
+ path += '.js';
+ } else {
+ files = glob.sync(path);
+ if (!files.length) {
+ throw new Error("cannot resolve path (or pattern) '" + path + "'");
+ }
+ return files;
+ }
+ }
+
+ try {
+ var stat = statSync(path);
+ if (stat.isFile()) {
+ return path;
+ }
+ } catch (err) {
+ // ignore error
+ return;
+ }
+
+ readdirSync(path).forEach(function (file) {
+ file = join(path, file);
+ try {
+ var stat = statSync(file);
+ if (stat.isDirectory()) {
+ if (recursive) {
+ files = files.concat(lookupFiles(file, extensions, recursive));
+ }
+ return;
+ }
+ } catch (err) {
+ // ignore error
+ return;
+ }
+ if (!stat.isFile() || !re.test(file) || basename(file)[0] === '.') {
+ return;
+ }
+ files.push(file);
+ });
+
+ return files;
+};
+
+/**
+ * Generate an undefined error with a message warning the user.
+ *
+ * @return {Error}
+ */
+
+exports.undefinedError = function () {
+ return new Error('Caught undefined error, did you throw without specifying what?');
+};
+
+/**
+ * Generate an undefined error if `err` is not defined.
+ *
+ * @param {Error} err
+ * @return {Error}
+ */
+
+exports.getError = function (err) {
+ return err || exports.undefinedError();
+};
+
+/**
+ * @summary
+ * This Filter based on `mocha-clean` module.(see: `github.com/rstacruz/mocha-clean`)
+ * @description
+ * When invoking this function you get a filter function that get the Error.stack as an input,
+ * and return a prettify output.
+ * (i.e: strip Mocha and internal node functions from stack trace).
+ * @returns {Function}
+ */
+exports.stackTraceFilter = function () {
+ // TODO: Replace with `process.browser`
+ var is = typeof document === 'undefined' ? { node: true } : { browser: true };
+ var slash = path.sep;
+ var cwd;
+ if (is.node) {
+ cwd = process.cwd() + slash;
+ } else {
+ cwd = (typeof location === 'undefined'
+ ? window.location
+ : location).href.replace(/\/[^/]*$/, '/');
+ slash = '/';
+ }
+
+ function isMochaInternal (line) {
+ return (~line.indexOf('node_modules' + slash + 'mocha' + slash)) ||
+ (~line.indexOf('node_modules' + slash + 'mocha.js')) ||
+ (~line.indexOf('bower_components' + slash + 'mocha.js')) ||
+ (~line.indexOf(slash + 'mocha.js'));
+ }
+
+ function isNodeInternal (line) {
+ return (~line.indexOf('(timers.js:')) ||
+ (~line.indexOf('(events.js:')) ||
+ (~line.indexOf('(node.js:')) ||
+ (~line.indexOf('(module.js:')) ||
+ (~line.indexOf('GeneratorFunctionPrototype.next (native)')) ||
+ false;
+ }
+
+ return function (stack) {
+ stack = stack.split('\n');
+
+ stack = reduce(stack, function (list, line) {
+ if (isMochaInternal(line)) {
+ return list;
+ }
+
+ if (is.node && isNodeInternal(line)) {
+ return list;
+ }
+
+ // Clean up cwd(absolute)
+ if (/\(?.+:\d+:\d+\)?$/.test(line)) {
+ line = line.replace(cwd, '');
+ }
+
+ list.push(line);
+ return list;
+ }, []);
+
+ return stack.join('\n');
+ };
+};
+
+/**
+ * Crude, but effective.
+ * @api
+ * @param {*} value
+ * @returns {boolean} Whether or not `value` is a Promise
+ */
+exports.isPromise = function isPromise (value) {
+ return typeof value === 'object' && typeof value.then === 'function';
+};
+
+/**
+ * It's a noop.
+ * @api
+ */
+exports.noop = function () {};
+
+}).call(this,require('_process'),require("buffer").Buffer)
+},{"./to-iso-string":37,"_process":82,"buffer":43,"debug":2,"fs":42,"glob":42,"he":64,"json3":69,"path":42,"util":102}],39:[function(require,module,exports){
+'use strict'
+
+exports.byteLength = byteLength
+exports.toByteArray = toByteArray
+exports.fromByteArray = fromByteArray
+
+var lookup = []
+var revLookup = []
+var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
+
+var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
+for (var i = 0, len = code.length; i < len; ++i) {
+ lookup[i] = code[i]
+ revLookup[code.charCodeAt(i)] = i
+}
+
+revLookup['-'.charCodeAt(0)] = 62
+revLookup['_'.charCodeAt(0)] = 63
+
+function placeHoldersCount (b64) {
+ var len = b64.length
+ if (len % 4 > 0) {
+ throw new Error('Invalid string. Length must be a multiple of 4')
+ }
+
+ // the number of equal signs (place holders)
+ // if there are two placeholders, than the two characters before it
+ // represent one byte
+ // if there is only one, then the three characters before it represent 2 bytes
+ // this is just a cheap hack to not do indexOf twice
+ return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
+}
+
+function byteLength (b64) {
+ // base64 is 4/3 + up to two characters of the original data
+ return (b64.length * 3 / 4) - placeHoldersCount(b64)
+}
+
+function toByteArray (b64) {
+ var i, l, tmp, placeHolders, arr
+ var len = b64.length
+ placeHolders = placeHoldersCount(b64)
+
+ arr = new Arr((len * 3 / 4) - placeHolders)
+
+ // if there are placeholders, only get up to the last complete 4 chars
+ l = placeHolders > 0 ? len - 4 : len
+
+ var L = 0
+
+ for (i = 0; i < l; i += 4) {
+ tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
+ arr[L++] = (tmp >> 16) & 0xFF
+ arr[L++] = (tmp >> 8) & 0xFF
+ arr[L++] = tmp & 0xFF
+ }
+
+ if (placeHolders === 2) {
+ tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
+ arr[L++] = tmp & 0xFF
+ } else if (placeHolders === 1) {
+ tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
+ arr[L++] = (tmp >> 8) & 0xFF
+ arr[L++] = tmp & 0xFF
+ }
+
+ return arr
+}
+
+function tripletToBase64 (num) {
+ return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
+}
+
+function encodeChunk (uint8, start, end) {
+ var tmp
+ var output = []
+ for (var i = start; i < end; i += 3) {
+ tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
+ output.push(tripletToBase64(tmp))
+ }
+ return output.join('')
+}
+
+function fromByteArray (uint8) {
+ var tmp
+ var len = uint8.length
+ var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
+ var output = ''
+ var parts = []
+ var maxChunkLength = 16383 // must be multiple of 3
+
+ // go through the array every three bytes, we'll deal with trailing stuff later
+ for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
+ parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
+ }
+
+ // pad the end with zeros, but make sure to not forget the extra bytes
+ if (extraBytes === 1) {
+ tmp = uint8[len - 1]
+ output += lookup[tmp >> 2]
+ output += lookup[(tmp << 4) & 0x3F]
+ output += '=='
+ } else if (extraBytes === 2) {
+ tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
+ output += lookup[tmp >> 10]
+ output += lookup[(tmp >> 4) & 0x3F]
+ output += lookup[(tmp << 2) & 0x3F]
+ output += '='
+ }
+
+ parts.push(output)
+
+ return parts.join('')
+}
+
+},{}],40:[function(require,module,exports){
+
+},{}],41:[function(require,module,exports){
+(function (process){
+var WritableStream = require('stream').Writable
+var inherits = require('util').inherits
+
+module.exports = BrowserStdout
+
+
+inherits(BrowserStdout, WritableStream)
+
+function BrowserStdout(opts) {
+ if (!(this instanceof BrowserStdout)) return new BrowserStdout(opts)
+
+ opts = opts || {}
+ WritableStream.call(this, opts)
+ this.label = (opts.label !== undefined) ? opts.label : 'stdout'
+}
+
+BrowserStdout.prototype._write = function(chunks, encoding, cb) {
+ var output = chunks.toString ? chunks.toString() : chunks
+ if (this.label === false) {
+ console.log(output)
+ } else {
+ console.log(this.label+':', output)
+ }
+ process.nextTick(cb)
+}
+
+}).call(this,require('_process'))
+},{"_process":82,"stream":96,"util":102}],42:[function(require,module,exports){
+arguments[4][40][0].apply(exports,arguments)
+},{"dup":40}],43:[function(require,module,exports){
+(function (global){
+/*!
+ * The buffer module from node.js, for the browser.
+ *
+ * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license MIT
+ */
+/* eslint-disable no-proto */
+
+'use strict'
+
+var base64 = require('base64-js')
+var ieee754 = require('ieee754')
+var isArray = require('isarray')
+
+exports.Buffer = Buffer
+exports.SlowBuffer = SlowBuffer
+exports.INSPECT_MAX_BYTES = 50
+
+/**
+ * If `Buffer.TYPED_ARRAY_SUPPORT`:
+ * === true Use Uint8Array implementation (fastest)
+ * === false Use Object implementation (most compatible, even IE6)
+ *
+ * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+ * Opera 11.6+, iOS 4.2+.
+ *
+ * Due to various browser bugs, sometimes the Object implementation will be used even
+ * when the browser supports typed arrays.
+ *
+ * Note:
+ *
+ * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+ * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+ *
+ * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+ *
+ * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+ * incorrect length in some situations.
+
+ * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+ * get the Object implementation, which is slower but behaves correctly.
+ */
+Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+ ? global.TYPED_ARRAY_SUPPORT
+ : typedArraySupport()
+
+/*
+ * Export kMaxLength after typed array support is determined.
+ */
+exports.kMaxLength = kMaxLength()
+
+function typedArraySupport () {
+ try {
+ var arr = new Uint8Array(1)
+ arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
+ return arr.foo() === 42 && // typed array instances can be augmented
+ typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+ arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+ } catch (e) {
+ return false
+ }
+}
+
+function kMaxLength () {
+ return Buffer.TYPED_ARRAY_SUPPORT
+ ? 0x7fffffff
+ : 0x3fffffff
+}
+
+function createBuffer (that, length) {
+ if (kMaxLength() < length) {
+ throw new RangeError('Invalid typed array length')
+ }
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = new Uint8Array(length)
+ that.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ if (that === null) {
+ that = new Buffer(length)
+ }
+ that.length = length
+ }
+
+ return that
+}
+
+/**
+ * The Buffer constructor returns instances of `Uint8Array` that have their
+ * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
+ * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
+ * and the `Uint8Array` methods. Square bracket notation works as expected -- it
+ * returns a single octet.
+ *
+ * The `Uint8Array` prototype remains unmodified.
+ */
+
+function Buffer (arg, encodingOrOffset, length) {
+ if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
+ return new Buffer(arg, encodingOrOffset, length)
+ }
+
+ // Common case.
+ if (typeof arg === 'number') {
+ if (typeof encodingOrOffset === 'string') {
+ throw new Error(
+ 'If encoding is specified then the first argument must be a string'
+ )
+ }
+ return allocUnsafe(this, arg)
+ }
+ return from(this, arg, encodingOrOffset, length)
+}
+
+Buffer.poolSize = 8192 // not used by this implementation
+
+// TODO: Legacy, not needed anymore. Remove in next major version.
+Buffer._augment = function (arr) {
+ arr.__proto__ = Buffer.prototype
+ return arr
+}
+
+function from (that, value, encodingOrOffset, length) {
+ if (typeof value === 'number') {
+ throw new TypeError('"value" argument must not be a number')
+ }
+
+ if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+ return fromArrayBuffer(that, value, encodingOrOffset, length)
+ }
+
+ if (typeof value === 'string') {
+ return fromString(that, value, encodingOrOffset)
+ }
+
+ return fromObject(that, value)
+}
+
+/**
+ * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
+ * if value is a number.
+ * Buffer.from(str[, encoding])
+ * Buffer.from(array)
+ * Buffer.from(buffer)
+ * Buffer.from(arrayBuffer[, byteOffset[, length]])
+ **/
+Buffer.from = function (value, encodingOrOffset, length) {
+ return from(null, value, encodingOrOffset, length)
+}
+
+if (Buffer.TYPED_ARRAY_SUPPORT) {
+ Buffer.prototype.__proto__ = Uint8Array.prototype
+ Buffer.__proto__ = Uint8Array
+ if (typeof Symbol !== 'undefined' && Symbol.species &&
+ Buffer[Symbol.species] === Buffer) {
+ // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
+ Object.defineProperty(Buffer, Symbol.species, {
+ value: null,
+ configurable: true
+ })
+ }
+}
+
+function assertSize (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('"size" argument must be a number')
+ } else if (size < 0) {
+ throw new RangeError('"size" argument must not be negative')
+ }
+}
+
+function alloc (that, size, fill, encoding) {
+ assertSize(size)
+ if (size <= 0) {
+ return createBuffer(that, size)
+ }
+ if (fill !== undefined) {
+ // Only pay attention to encoding if it's a string. This
+ // prevents accidentally sending in a number that would
+ // be interpretted as a start offset.
+ return typeof encoding === 'string'
+ ? createBuffer(that, size).fill(fill, encoding)
+ : createBuffer(that, size).fill(fill)
+ }
+ return createBuffer(that, size)
+}
+
+/**
+ * Creates a new filled Buffer instance.
+ * alloc(size[, fill[, encoding]])
+ **/
+Buffer.alloc = function (size, fill, encoding) {
+ return alloc(null, size, fill, encoding)
+}
+
+function allocUnsafe (that, size) {
+ assertSize(size)
+ that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) {
+ for (var i = 0; i < size; ++i) {
+ that[i] = 0
+ }
+ }
+ return that
+}
+
+/**
+ * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
+ * */
+Buffer.allocUnsafe = function (size) {
+ return allocUnsafe(null, size)
+}
+/**
+ * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
+ */
+Buffer.allocUnsafeSlow = function (size) {
+ return allocUnsafe(null, size)
+}
+
+function fromString (that, string, encoding) {
+ if (typeof encoding !== 'string' || encoding === '') {
+ encoding = 'utf8'
+ }
+
+ if (!Buffer.isEncoding(encoding)) {
+ throw new TypeError('"encoding" must be a valid string encoding')
+ }
+
+ var length = byteLength(string, encoding) | 0
+ that = createBuffer(that, length)
+
+ var actual = that.write(string, encoding)
+
+ if (actual !== length) {
+ // Writing a hex string, for example, that contains invalid characters will
+ // cause everything after the first invalid character to be ignored. (e.g.
+ // 'abxxcd' will be treated as 'ab')
+ that = that.slice(0, actual)
+ }
+
+ return that
+}
+
+function fromArrayLike (that, array) {
+ var length = array.length < 0 ? 0 : checked(array.length) | 0
+ that = createBuffer(that, length)
+ for (var i = 0; i < length; i += 1) {
+ that[i] = array[i] & 255
+ }
+ return that
+}
+
+function fromArrayBuffer (that, array, byteOffset, length) {
+ array.byteLength // this throws if `array` is not a valid ArrayBuffer
+
+ if (byteOffset < 0 || array.byteLength < byteOffset) {
+ throw new RangeError('\'offset\' is out of bounds')
+ }
+
+ if (array.byteLength < byteOffset + (length || 0)) {
+ throw new RangeError('\'length\' is out of bounds')
+ }
+
+ if (byteOffset === undefined && length === undefined) {
+ array = new Uint8Array(array)
+ } else if (length === undefined) {
+ array = new Uint8Array(array, byteOffset)
+ } else {
+ array = new Uint8Array(array, byteOffset, length)
+ }
+
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ // Return an augmented `Uint8Array` instance, for best performance
+ that = array
+ that.__proto__ = Buffer.prototype
+ } else {
+ // Fallback: Return an object instance of the Buffer class
+ that = fromArrayLike(that, array)
+ }
+ return that
+}
+
+function fromObject (that, obj) {
+ if (Buffer.isBuffer(obj)) {
+ var len = checked(obj.length) | 0
+ that = createBuffer(that, len)
+
+ if (that.length === 0) {
+ return that
+ }
+
+ obj.copy(that, 0, 0, len)
+ return that
+ }
+
+ if (obj) {
+ if ((typeof ArrayBuffer !== 'undefined' &&
+ obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
+ if (typeof obj.length !== 'number' || isnan(obj.length)) {
+ return createBuffer(that, 0)
+ }
+ return fromArrayLike(that, obj)
+ }
+
+ if (obj.type === 'Buffer' && isArray(obj.data)) {
+ return fromArrayLike(that, obj.data)
+ }
+ }
+
+ throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
+}
+
+function checked (length) {
+ // Note: cannot use `length < kMaxLength()` here because that fails when
+ // length is NaN (which is otherwise coerced to zero.)
+ if (length >= kMaxLength()) {
+ throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+ 'size: 0x' + kMaxLength().toString(16) + ' bytes')
+ }
+ return length | 0
+}
+
+function SlowBuffer (length) {
+ if (+length != length) { // eslint-disable-line eqeqeq
+ length = 0
+ }
+ return Buffer.alloc(+length)
+}
+
+Buffer.isBuffer = function isBuffer (b) {
+ return !!(b != null && b._isBuffer)
+}
+
+Buffer.compare = function compare (a, b) {
+ if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+ throw new TypeError('Arguments must be Buffers')
+ }
+
+ if (a === b) return 0
+
+ var x = a.length
+ var y = b.length
+
+ for (var i = 0, len = Math.min(x, y); i < len; ++i) {
+ if (a[i] !== b[i]) {
+ x = a[i]
+ y = b[i]
+ break
+ }
+ }
+
+ if (x < y) return -1
+ if (y < x) return 1
+ return 0
+}
+
+Buffer.isEncoding = function isEncoding (encoding) {
+ switch (String(encoding).toLowerCase()) {
+ case 'hex':
+ case 'utf8':
+ case 'utf-8':
+ case 'ascii':
+ case 'latin1':
+ case 'binary':
+ case 'base64':
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return true
+ default:
+ return false
+ }
+}
+
+Buffer.concat = function concat (list, length) {
+ if (!isArray(list)) {
+ throw new TypeError('"list" argument must be an Array of Buffers')
+ }
+
+ if (list.length === 0) {
+ return Buffer.alloc(0)
+ }
+
+ var i
+ if (length === undefined) {
+ length = 0
+ for (i = 0; i < list.length; ++i) {
+ length += list[i].length
+ }
+ }
+
+ var buffer = Buffer.allocUnsafe(length)
+ var pos = 0
+ for (i = 0; i < list.length; ++i) {
+ var buf = list[i]
+ if (!Buffer.isBuffer(buf)) {
+ throw new TypeError('"list" argument must be an Array of Buffers')
+ }
+ buf.copy(buffer, pos)
+ pos += buf.length
+ }
+ return buffer
+}
+
+function byteLength (string, encoding) {
+ if (Buffer.isBuffer(string)) {
+ return string.length
+ }
+ if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
+ (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
+ return string.byteLength
+ }
+ if (typeof string !== 'string') {
+ string = '' + string
+ }
+
+ var len = string.length
+ if (len === 0) return 0
+
+ // Use a for loop to avoid recursion
+ var loweredCase = false
+ for (;;) {
+ switch (encoding) {
+ case 'ascii':
+ case 'latin1':
+ case 'binary':
+ return len
+ case 'utf8':
+ case 'utf-8':
+ case undefined:
+ return utf8ToBytes(string).length
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return len * 2
+ case 'hex':
+ return len >>> 1
+ case 'base64':
+ return base64ToBytes(string).length
+ default:
+ if (loweredCase) return utf8ToBytes(string).length // assume utf8
+ encoding = ('' + encoding).toLowerCase()
+ loweredCase = true
+ }
+ }
+}
+Buffer.byteLength = byteLength
+
+function slowToString (encoding, start, end) {
+ var loweredCase = false
+
+ // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
+ // property of a typed array.
+
+ // This behaves neither like String nor Uint8Array in that we set start/end
+ // to their upper/lower bounds if the value passed is out of range.
+ // undefined is handled specially as per ECMA-262 6th Edition,
+ // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
+ if (start === undefined || start < 0) {
+ start = 0
+ }
+ // Return early if start > this.length. Done here to prevent potential uint32
+ // coercion fail below.
+ if (start > this.length) {
+ return ''
+ }
+
+ if (end === undefined || end > this.length) {
+ end = this.length
+ }
+
+ if (end <= 0) {
+ return ''
+ }
+
+ // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
+ end >>>= 0
+ start >>>= 0
+
+ if (end <= start) {
+ return ''
+ }
+
+ if (!encoding) encoding = 'utf8'
+
+ while (true) {
+ switch (encoding) {
+ case 'hex':
+ return hexSlice(this, start, end)
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8Slice(this, start, end)
+
+ case 'ascii':
+ return asciiSlice(this, start, end)
+
+ case 'latin1':
+ case 'binary':
+ return latin1Slice(this, start, end)
+
+ case 'base64':
+ return base64Slice(this, start, end)
+
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return utf16leSlice(this, start, end)
+
+ default:
+ if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ encoding = (encoding + '').toLowerCase()
+ loweredCase = true
+ }
+ }
+}
+
+// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
+// Buffer instances.
+Buffer.prototype._isBuffer = true
+
+function swap (b, n, m) {
+ var i = b[n]
+ b[n] = b[m]
+ b[m] = i
+}
+
+Buffer.prototype.swap16 = function swap16 () {
+ var len = this.length
+ if (len % 2 !== 0) {
+ throw new RangeError('Buffer size must be a multiple of 16-bits')
+ }
+ for (var i = 0; i < len; i += 2) {
+ swap(this, i, i + 1)
+ }
+ return this
+}
+
+Buffer.prototype.swap32 = function swap32 () {
+ var len = this.length
+ if (len % 4 !== 0) {
+ throw new RangeError('Buffer size must be a multiple of 32-bits')
+ }
+ for (var i = 0; i < len; i += 4) {
+ swap(this, i, i + 3)
+ swap(this, i + 1, i + 2)
+ }
+ return this
+}
+
+Buffer.prototype.swap64 = function swap64 () {
+ var len = this.length
+ if (len % 8 !== 0) {
+ throw new RangeError('Buffer size must be a multiple of 64-bits')
+ }
+ for (var i = 0; i < len; i += 8) {
+ swap(this, i, i + 7)
+ swap(this, i + 1, i + 6)
+ swap(this, i + 2, i + 5)
+ swap(this, i + 3, i + 4)
+ }
+ return this
+}
+
+Buffer.prototype.toString = function toString () {
+ var length = this.length | 0
+ if (length === 0) return ''
+ if (arguments.length === 0) return utf8Slice(this, 0, length)
+ return slowToString.apply(this, arguments)
+}
+
+Buffer.prototype.equals = function equals (b) {
+ if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+ if (this === b) return true
+ return Buffer.compare(this, b) === 0
+}
+
+Buffer.prototype.inspect = function inspect () {
+ var str = ''
+ var max = exports.INSPECT_MAX_BYTES
+ if (this.length > 0) {
+ str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+ if (this.length > max) str += ' ... '
+ }
+ return '<Buffer ' + str + '>'
+}
+
+Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
+ if (!Buffer.isBuffer(target)) {
+ throw new TypeError('Argument must be a Buffer')
+ }
+
+ if (start === undefined) {
+ start = 0
+ }
+ if (end === undefined) {
+ end = target ? target.length : 0
+ }
+ if (thisStart === undefined) {
+ thisStart = 0
+ }
+ if (thisEnd === undefined) {
+ thisEnd = this.length
+ }
+
+ if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
+ throw new RangeError('out of range index')
+ }
+
+ if (thisStart >= thisEnd && start >= end) {
+ return 0
+ }
+ if (thisStart >= thisEnd) {
+ return -1
+ }
+ if (start >= end) {
+ return 1
+ }
+
+ start >>>= 0
+ end >>>= 0
+ thisStart >>>= 0
+ thisEnd >>>= 0
+
+ if (this === target) return 0
+
+ var x = thisEnd - thisStart
+ var y = end - start
+ var len = Math.min(x, y)
+
+ var thisCopy = this.slice(thisStart, thisEnd)
+ var targetCopy = target.slice(start, end)
+
+ for (var i = 0; i < len; ++i) {
+ if (thisCopy[i] !== targetCopy[i]) {
+ x = thisCopy[i]
+ y = targetCopy[i]
+ break
+ }
+ }
+
+ if (x < y) return -1
+ if (y < x) return 1
+ return 0
+}
+
+// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
+// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
+//
+// Arguments:
+// - buffer - a Buffer to search
+// - val - a string, Buffer, or number
+// - byteOffset - an index into `buffer`; will be clamped to an int32
+// - encoding - an optional encoding, relevant is val is a string
+// - dir - true for indexOf, false for lastIndexOf
+function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
+ // Empty buffer means no match
+ if (buffer.length === 0) return -1
+
+ // Normalize byteOffset
+ if (typeof byteOffset === 'string') {
+ encoding = byteOffset
+ byteOffset = 0
+ } else if (byteOffset > 0x7fffffff) {
+ byteOffset = 0x7fffffff
+ } else if (byteOffset < -0x80000000) {
+ byteOffset = -0x80000000
+ }
+ byteOffset = +byteOffset // Coerce to Number.
+ if (isNaN(byteOffset)) {
+ // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
+ byteOffset = dir ? 0 : (buffer.length - 1)
+ }
+
+ // Normalize byteOffset: negative offsets start from the end of the buffer
+ if (byteOffset < 0) byteOffset = buffer.length + byteOffset
+ if (byteOffset >= buffer.length) {
+ if (dir) return -1
+ else byteOffset = buffer.length - 1
+ } else if (byteOffset < 0) {
+ if (dir) byteOffset = 0
+ else return -1
+ }
+
+ // Normalize val
+ if (typeof val === 'string') {
+ val = Buffer.from(val, encoding)
+ }
+
+ // Finally, search either indexOf (if dir is true) or lastIndexOf
+ if (Buffer.isBuffer(val)) {
+ // Special case: looking for empty string/buffer always fails
+ if (val.length === 0) {
+ return -1
+ }
+ return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
+ } else if (typeof val === 'number') {
+ val = val & 0xFF // Search for a byte value [0-255]
+ if (Buffer.TYPED_ARRAY_SUPPORT &&
+ typeof Uint8Array.prototype.indexOf === 'function') {
+ if (dir) {
+ return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
+ } else {
+ return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
+ }
+ }
+ return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
+ }
+
+ throw new TypeError('val must be string, number or Buffer')
+}
+
+function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
+ var indexSize = 1
+ var arrLength = arr.length
+ var valLength = val.length
+
+ if (encoding !== undefined) {
+ encoding = String(encoding).toLowerCase()
+ if (encoding === 'ucs2' || encoding === 'ucs-2' ||
+ encoding === 'utf16le' || encoding === 'utf-16le') {
+ if (arr.length < 2 || val.length < 2) {
+ return -1
+ }
+ indexSize = 2
+ arrLength /= 2
+ valLength /= 2
+ byteOffset /= 2
+ }
+ }
+
+ function read (buf, i) {
+ if (indexSize === 1) {
+ return buf[i]
+ } else {
+ return buf.readUInt16BE(i * indexSize)
+ }
+ }
+
+ var i
+ if (dir) {
+ var foundIndex = -1
+ for (i = byteOffset; i < arrLength; i++) {
+ if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
+ if (foundIndex === -1) foundIndex = i
+ if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
+ } else {
+ if (foundIndex !== -1) i -= i - foundIndex
+ foundIndex = -1
+ }
+ }
+ } else {
+ if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
+ for (i = byteOffset; i >= 0; i--) {
+ var found = true
+ for (var j = 0; j < valLength; j++) {
+ if (read(arr, i + j) !== read(val, j)) {
+ found = false
+ break
+ }
+ }
+ if (found) return i
+ }
+ }
+
+ return -1
+}
+
+Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
+ return this.indexOf(val, byteOffset, encoding) !== -1
+}
+
+Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
+ return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
+}
+
+Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
+ return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
+}
+
+function hexWrite (buf, string, offset, length) {
+ offset = Number(offset) || 0
+ var remaining = buf.length - offset
+ if (!length) {
+ length = remaining
+ } else {
+ length = Number(length)
+ if (length > remaining) {
+ length = remaining
+ }
+ }
+
+ // must be an even number of digits
+ var strLen = string.length
+ if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
+
+ if (length > strLen / 2) {
+ length = strLen / 2
+ }
+ for (var i = 0; i < length; ++i) {
+ var parsed = parseInt(string.substr(i * 2, 2), 16)
+ if (isNaN(parsed)) return i
+ buf[offset + i] = parsed
+ }
+ return i
+}
+
+function utf8Write (buf, string, offset, length) {
+ return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+function asciiWrite (buf, string, offset, length) {
+ return blitBuffer(asciiToBytes(string), buf, offset, length)
+}
+
+function latin1Write (buf, string, offset, length) {
+ return asciiWrite(buf, string, offset, length)
+}
+
+function base64Write (buf, string, offset, length) {
+ return blitBuffer(base64ToBytes(string), buf, offset, length)
+}
+
+function ucs2Write (buf, string, offset, length) {
+ return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+}
+
+Buffer.prototype.write = function write (string, offset, length, encoding) {
+ // Buffer#write(string)
+ if (offset === undefined) {
+ encoding = 'utf8'
+ length = this.length
+ offset = 0
+ // Buffer#write(string, encoding)
+ } else if (length === undefined && typeof offset === 'string') {
+ encoding = offset
+ length = this.length
+ offset = 0
+ // Buffer#write(string, offset[, length][, encoding])
+ } else if (isFinite(offset)) {
+ offset = offset | 0
+ if (isFinite(length)) {
+ length = length | 0
+ if (encoding === undefined) encoding = 'utf8'
+ } else {
+ encoding = length
+ length = undefined
+ }
+ // legacy write(string, encoding, offset, length) - remove in v0.13
+ } else {
+ throw new Error(
+ 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
+ )
+ }
+
+ var remaining = this.length - offset
+ if (length === undefined || length > remaining) length = remaining
+
+ if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+ throw new RangeError('Attempt to write outside buffer bounds')
+ }
+
+ if (!encoding) encoding = 'utf8'
+
+ var loweredCase = false
+ for (;;) {
+ switch (encoding) {
+ case 'hex':
+ return hexWrite(this, string, offset, length)
+
+ case 'utf8':
+ case 'utf-8':
+ return utf8Write(this, string, offset, length)
+
+ case 'ascii':
+ return asciiWrite(this, string, offset, length)
+
+ case 'latin1':
+ case 'binary':
+ return latin1Write(this, string, offset, length)
+
+ case 'base64':
+ // Warning: maxLength not taken into account in base64Write
+ return base64Write(this, string, offset, length)
+
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return ucs2Write(this, string, offset, length)
+
+ default:
+ if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+ encoding = ('' + encoding).toLowerCase()
+ loweredCase = true
+ }
+ }
+}
+
+Buffer.prototype.toJSON = function toJSON () {
+ return {
+ type: 'Buffer',
+ data: Array.prototype.slice.call(this._arr || this, 0)
+ }
+}
+
+function base64Slice (buf, start, end) {
+ if (start === 0 && end === buf.length) {
+ return base64.fromByteArray(buf)
+ } else {
+ return base64.fromByteArray(buf.slice(start, end))
+ }
+}
+
+function utf8Slice (buf, start, end) {
+ end = Math.min(buf.length, end)
+ var res = []
+
+ var i = start
+ while (i < end) {
+ var firstByte = buf[i]
+ var codePoint = null
+ var bytesPerSequence = (firstByte > 0xEF) ? 4
+ : (firstByte > 0xDF) ? 3
+ : (firstByte > 0xBF) ? 2
+ : 1
+
+ if (i + bytesPerSequence <= end) {
+ var secondByte, thirdByte, fourthByte, tempCodePoint
+
+ switch (bytesPerSequence) {
+ case 1:
+ if (firstByte < 0x80) {
+ codePoint = firstByte
+ }
+ break
+ case 2:
+ secondByte = buf[i + 1]
+ if ((secondByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+ if (tempCodePoint > 0x7F) {
+ codePoint = tempCodePoint
+ }
+ }
+ break
+ case 3:
+ secondByte = buf[i + 1]
+ thirdByte = buf[i + 2]
+ if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+ if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+ codePoint = tempCodePoint
+ }
+ }
+ break
+ case 4:
+ secondByte = buf[i + 1]
+ thirdByte = buf[i + 2]
+ fourthByte = buf[i + 3]
+ if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+ tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+ if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+ codePoint = tempCodePoint
+ }
+ }
+ }
+ }
+
+ if (codePoint === null) {
+ // we did not generate a valid codePoint so insert a
+ // replacement char (U+FFFD) and advance only 1 byte
+ codePoint = 0xFFFD
+ bytesPerSequence = 1
+ } else if (codePoint > 0xFFFF) {
+ // encode to utf16 (surrogate pair dance)
+ codePoint -= 0x10000
+ res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+ codePoint = 0xDC00 | codePoint & 0x3FF
+ }
+
+ res.push(codePoint)
+ i += bytesPerSequence
+ }
+
+ return decodeCodePointsArray(res)
+}
+
+// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+// the lowest limit is Chrome, with 0x10000 args.
+// We go 1 magnitude less, for safety
+var MAX_ARGUMENTS_LENGTH = 0x1000
+
+function decodeCodePointsArray (codePoints) {
+ var len = codePoints.length
+ if (len <= MAX_ARGUMENTS_LENGTH) {
+ return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
+ }
+
+ // Decode in chunks to avoid "call stack size exceeded".
+ var res = ''
+ var i = 0
+ while (i < len) {
+ res += String.fromCharCode.apply(
+ String,
+ codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+ )
+ }
+ return res
+}
+
+function asciiSlice (buf, start, end) {
+ var ret = ''
+ end = Math.min(buf.length, end)
+
+ for (var i = start; i < end; ++i) {
+ ret += String.fromCharCode(buf[i] & 0x7F)
+ }
+ return ret
+}
+
+function latin1Slice (buf, start, end) {
+ var ret = ''
+ end = Math.min(buf.length, end)
+
+ for (var i = start; i < end; ++i) {
+ ret += String.fromCharCode(buf[i])
+ }
+ return ret
+}
+
+function hexSlice (buf, start, end) {
+ var len = buf.length
+
+ if (!start || start < 0) start = 0
+ if (!end || end < 0 || end > len) end = len
+
+ var out = ''
+ for (var i = start; i < end; ++i) {
+ out += toHex(buf[i])
+ }
+ return out
+}
+
+function utf16leSlice (buf, start, end) {
+ var bytes = buf.slice(start, end)
+ var res = ''
+ for (var i = 0; i < bytes.length; i += 2) {
+ res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+ }
+ return res
+}
+
+Buffer.prototype.slice = function slice (start, end) {
+ var len = this.length
+ start = ~~start
+ end = end === undefined ? len : ~~end
+
+ if (start < 0) {
+ start += len
+ if (start < 0) start = 0
+ } else if (start > len) {
+ start = len
+ }
+
+ if (end < 0) {
+ end += len
+ if (end < 0) end = 0
+ } else if (end > len) {
+ end = len
+ }
+
+ if (end < start) end = start
+
+ var newBuf
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ newBuf = this.subarray(start, end)
+ newBuf.__proto__ = Buffer.prototype
+ } else {
+ var sliceLen = end - start
+ newBuf = new Buffer(sliceLen, undefined)
+ for (var i = 0; i < sliceLen; ++i) {
+ newBuf[i] = this[i + start]
+ }
+ }
+
+ return newBuf
+}
+
+/*
+ * Need to make sure that buffer isn't trying to write out of bounds.
+ */
+function checkOffset (offset, ext, length) {
+ if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+ if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+}
+
+Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var val = this[offset]
+ var mul = 1
+ var i = 0
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul
+ }
+
+ return val
+}
+
+Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ checkOffset(offset, byteLength, this.length)
+ }
+
+ var val = this[offset + --byteLength]
+ var mul = 1
+ while (byteLength > 0 && (mul *= 0x100)) {
+ val += this[offset + --byteLength] * mul
+ }
+
+ return val
+}
+
+Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 1, this.length)
+ return this[offset]
+}
+
+Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ return this[offset] | (this[offset + 1] << 8)
+}
+
+Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ return (this[offset] << 8) | this[offset + 1]
+}
+
+Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return ((this[offset]) |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16)) +
+ (this[offset + 3] * 0x1000000)
+}
+
+Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset] * 0x1000000) +
+ ((this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ this[offset + 3])
+}
+
+Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var val = this[offset]
+ var mul = 1
+ var i = 0
+ while (++i < byteLength && (mul *= 0x100)) {
+ val += this[offset + i] * mul
+ }
+ mul *= 0x80
+
+ if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+ return val
+}
+
+Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+ var i = byteLength
+ var mul = 1
+ var val = this[offset + --i]
+ while (i > 0 && (mul *= 0x100)) {
+ val += this[offset + --i] * mul
+ }
+ mul *= 0x80
+
+ if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+ return val
+}
+
+Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 1, this.length)
+ if (!(this[offset] & 0x80)) return (this[offset])
+ return ((0xff - this[offset] + 1) * -1)
+}
+
+Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ var val = this[offset] | (this[offset + 1] << 8)
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 2, this.length)
+ var val = this[offset + 1] | (this[offset] << 8)
+ return (val & 0x8000) ? val | 0xFFFF0000 : val
+}
+
+Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset]) |
+ (this[offset + 1] << 8) |
+ (this[offset + 2] << 16) |
+ (this[offset + 3] << 24)
+}
+
+Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+
+ return (this[offset] << 24) |
+ (this[offset + 1] << 16) |
+ (this[offset + 2] << 8) |
+ (this[offset + 3])
+}
+
+Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+ return ieee754.read(this, offset, true, 23, 4)
+}
+
+Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 4, this.length)
+ return ieee754.read(this, offset, false, 23, 4)
+}
+
+Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 8, this.length)
+ return ieee754.read(this, offset, true, 52, 8)
+}
+
+Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+ if (!noAssert) checkOffset(offset, 8, this.length)
+ return ieee754.read(this, offset, false, 52, 8)
+}
+
+function checkInt (buf, value, offset, ext, max, min) {
+ if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
+ if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
+ if (offset + ext > buf.length) throw new RangeError('Index out of range')
+}
+
+Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ var maxBytes = Math.pow(2, 8 * byteLength) - 1
+ checkInt(this, value, offset, byteLength, maxBytes, 0)
+ }
+
+ var mul = 1
+ var i = 0
+ this[offset] = value & 0xFF
+ while (++i < byteLength && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ byteLength = byteLength | 0
+ if (!noAssert) {
+ var maxBytes = Math.pow(2, 8 * byteLength) - 1
+ checkInt(this, value, offset, byteLength, maxBytes, 0)
+ }
+
+ var i = byteLength - 1
+ var mul = 1
+ this[offset + i] = value & 0xFF
+ while (--i >= 0 && (mul *= 0x100)) {
+ this[offset + i] = (value / mul) & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+ this[offset] = (value & 0xff)
+ return offset + 1
+}
+
+function objectWriteUInt16 (buf, value, offset, littleEndian) {
+ if (value < 0) value = 0xffff + value + 1
+ for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
+ buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+ (littleEndian ? i : 1 - i) * 8
+ }
+}
+
+Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ } else {
+ objectWriteUInt16(this, value, offset, true)
+ }
+ return offset + 2
+}
+
+Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 8)
+ this[offset + 1] = (value & 0xff)
+ } else {
+ objectWriteUInt16(this, value, offset, false)
+ }
+ return offset + 2
+}
+
+function objectWriteUInt32 (buf, value, offset, littleEndian) {
+ if (value < 0) value = 0xffffffff + value + 1
+ for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
+ buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+ }
+}
+
+Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset + 3] = (value >>> 24)
+ this[offset + 2] = (value >>> 16)
+ this[offset + 1] = (value >>> 8)
+ this[offset] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, true)
+ }
+ return offset + 4
+}
+
+Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 24)
+ this[offset + 1] = (value >>> 16)
+ this[offset + 2] = (value >>> 8)
+ this[offset + 3] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, false)
+ }
+ return offset + 4
+}
+
+Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) {
+ var limit = Math.pow(2, 8 * byteLength - 1)
+
+ checkInt(this, value, offset, byteLength, limit - 1, -limit)
+ }
+
+ var i = 0
+ var mul = 1
+ var sub = 0
+ this[offset] = value & 0xFF
+ while (++i < byteLength && (mul *= 0x100)) {
+ if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
+ sub = 1
+ }
+ this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) {
+ var limit = Math.pow(2, 8 * byteLength - 1)
+
+ checkInt(this, value, offset, byteLength, limit - 1, -limit)
+ }
+
+ var i = byteLength - 1
+ var mul = 1
+ var sub = 0
+ this[offset + i] = value & 0xFF
+ while (--i >= 0 && (mul *= 0x100)) {
+ if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
+ sub = 1
+ }
+ this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+ }
+
+ return offset + byteLength
+}
+
+Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+ if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+ if (value < 0) value = 0xff + value + 1
+ this[offset] = (value & 0xff)
+ return offset + 1
+}
+
+Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ } else {
+ objectWriteUInt16(this, value, offset, true)
+ }
+ return offset + 2
+}
+
+Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 8)
+ this[offset + 1] = (value & 0xff)
+ } else {
+ objectWriteUInt16(this, value, offset, false)
+ }
+ return offset + 2
+}
+
+Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value & 0xff)
+ this[offset + 1] = (value >>> 8)
+ this[offset + 2] = (value >>> 16)
+ this[offset + 3] = (value >>> 24)
+ } else {
+ objectWriteUInt32(this, value, offset, true)
+ }
+ return offset + 4
+}
+
+Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+ value = +value
+ offset = offset | 0
+ if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+ if (value < 0) value = 0xffffffff + value + 1
+ if (Buffer.TYPED_ARRAY_SUPPORT) {
+ this[offset] = (value >>> 24)
+ this[offset + 1] = (value >>> 16)
+ this[offset + 2] = (value >>> 8)
+ this[offset + 3] = (value & 0xff)
+ } else {
+ objectWriteUInt32(this, value, offset, false)
+ }
+ return offset + 4
+}
+
+function checkIEEE754 (buf, value, offset, ext, max, min) {
+ if (offset + ext > buf.length) throw new RangeError('Index out of range')
+ if (offset < 0) throw new RangeError('Index out of range')
+}
+
+function writeFloat (buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+ }
+ ieee754.write(buf, value, offset, littleEndian, 23, 4)
+ return offset + 4
+}
+
+Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+ return writeFloat(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+ return writeFloat(this, value, offset, false, noAssert)
+}
+
+function writeDouble (buf, value, offset, littleEndian, noAssert) {
+ if (!noAssert) {
+ checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+ }
+ ieee754.write(buf, value, offset, littleEndian, 52, 8)
+ return offset + 8
+}
+
+Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+ return writeDouble(this, value, offset, true, noAssert)
+}
+
+Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+ return writeDouble(this, value, offset, false, noAssert)
+}
+
+// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+ if (!start) start = 0
+ if (!end && end !== 0) end = this.length
+ if (targetStart >= target.length) targetStart = target.length
+ if (!targetStart) targetStart = 0
+ if (end > 0 && end < start) end = start
+
+ // Copy 0 bytes; we're done
+ if (end === start) return 0
+ if (target.length === 0 || this.length === 0) return 0
+
+ // Fatal error conditions
+ if (targetStart < 0) {
+ throw new RangeError('targetStart out of bounds')
+ }
+ if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+ if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+ // Are we oob?
+ if (end > this.length) end = this.length
+ if (target.length - targetStart < end - start) {
+ end = target.length - targetStart + start
+ }
+
+ var len = end - start
+ var i
+
+ if (this === target && start < targetStart && targetStart < end) {
+ // descending copy from end
+ for (i = len - 1; i >= 0; --i) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+ // ascending copy from start
+ for (i = 0; i < len; ++i) {
+ target[i + targetStart] = this[i + start]
+ }
+ } else {
+ Uint8Array.prototype.set.call(
+ target,
+ this.subarray(start, start + len),
+ targetStart
+ )
+ }
+
+ return len
+}
+
+// Usage:
+// buffer.fill(number[, offset[, end]])
+// buffer.fill(buffer[, offset[, end]])
+// buffer.fill(string[, offset[, end]][, encoding])
+Buffer.prototype.fill = function fill (val, start, end, encoding) {
+ // Handle string cases:
+ if (typeof val === 'string') {
+ if (typeof start === 'string') {
+ encoding = start
+ start = 0
+ end = this.length
+ } else if (typeof end === 'string') {
+ encoding = end
+ end = this.length
+ }
+ if (val.length === 1) {
+ var code = val.charCodeAt(0)
+ if (code < 256) {
+ val = code
+ }
+ }
+ if (encoding !== undefined && typeof encoding !== 'string') {
+ throw new TypeError('encoding must be a string')
+ }
+ if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
+ throw new TypeError('Unknown encoding: ' + encoding)
+ }
+ } else if (typeof val === 'number') {
+ val = val & 255
+ }
+
+ // Invalid ranges are not set to a default, so can range check early.
+ if (start < 0 || this.length < start || this.length < end) {
+ throw new RangeError('Out of range index')
+ }
+
+ if (end <= start) {
+ return this
+ }
+
+ start = start >>> 0
+ end = end === undefined ? this.length : end >>> 0
+
+ if (!val) val = 0
+
+ var i
+ if (typeof val === 'number') {
+ for (i = start; i < end; ++i) {
+ this[i] = val
+ }
+ } else {
+ var bytes = Buffer.isBuffer(val)
+ ? val
+ : utf8ToBytes(new Buffer(val, encoding).toString())
+ var len = bytes.length
+ for (i = 0; i < end - start; ++i) {
+ this[i + start] = bytes[i % len]
+ }
+ }
+
+ return this
+}
+
+// HELPER FUNCTIONS
+// ================
+
+var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+
+function base64clean (str) {
+ // Node strips out invalid characters like \n and \t from the string, base64-js does not
+ str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+ // Node converts strings with length < 2 to ''
+ if (str.length < 2) return ''
+ // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+ while (str.length % 4 !== 0) {
+ str = str + '='
+ }
+ return str
+}
+
+function stringtrim (str) {
+ if (str.trim) return str.trim()
+ return str.replace(/^\s+|\s+$/g, '')
+}
+
+function toHex (n) {
+ if (n < 16) return '0' + n.toString(16)
+ return n.toString(16)
+}
+
+function utf8ToBytes (string, units) {
+ units = units || Infinity
+ var codePoint
+ var length = string.length
+ var leadSurrogate = null
+ var bytes = []
+
+ for (var i = 0; i < length; ++i) {
+ codePoint = string.charCodeAt(i)
+
+ // is surrogate component
+ if (codePoint > 0xD7FF && codePoint < 0xE000) {
+ // last char was a lead
+ if (!leadSurrogate) {
+ // no lead yet
+ if (codePoint > 0xDBFF) {
+ // unexpected trail
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ } else if (i + 1 === length) {
+ // unpaired lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ continue
+ }
+
+ // valid lead
+ leadSurrogate = codePoint
+
+ continue
+ }
+
+ // 2 leads in a row
+ if (codePoint < 0xDC00) {
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ leadSurrogate = codePoint
+ continue
+ }
+
+ // valid surrogate pair
+ codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
+ } else if (leadSurrogate) {
+ // valid bmp char, but last char was a lead
+ if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+ }
+
+ leadSurrogate = null
+
+ // encode utf8
+ if (codePoint < 0x80) {
+ if ((units -= 1) < 0) break
+ bytes.push(codePoint)
+ } else if (codePoint < 0x800) {
+ if ((units -= 2) < 0) break
+ bytes.push(
+ codePoint >> 0x6 | 0xC0,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x10000) {
+ if ((units -= 3) < 0) break
+ bytes.push(
+ codePoint >> 0xC | 0xE0,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else if (codePoint < 0x110000) {
+ if ((units -= 4) < 0) break
+ bytes.push(
+ codePoint >> 0x12 | 0xF0,
+ codePoint >> 0xC & 0x3F | 0x80,
+ codePoint >> 0x6 & 0x3F | 0x80,
+ codePoint & 0x3F | 0x80
+ )
+ } else {
+ throw new Error('Invalid code point')
+ }
+ }
+
+ return bytes
+}
+
+function asciiToBytes (str) {
+ var byteArray = []
+ for (var i = 0; i < str.length; ++i) {
+ // Node's code seems to be doing this and not & 0x7F..
+ byteArray.push(str.charCodeAt(i) & 0xFF)
+ }
+ return byteArray
+}
+
+function utf16leToBytes (str, units) {
+ var c, hi, lo
+ var byteArray = []
+ for (var i = 0; i < str.length; ++i) {
+ if ((units -= 2) < 0) break
+
+ c = str.charCodeAt(i)
+ hi = c >> 8
+ lo = c % 256
+ byteArray.push(lo)
+ byteArray.push(hi)
+ }
+
+ return byteArray
+}
+
+function base64ToBytes (str) {
+ return base64.toByteArray(base64clean(str))
+}
+
+function blitBuffer (src, dst, offset, length) {
+ for (var i = 0; i < length; ++i) {
+ if ((i + offset >= dst.length) || (i >= src.length)) break
+ dst[i + offset] = src[i]
+ }
+ return i
+}
+
+function isnan (val) {
+ return val !== val // eslint-disable-line no-self-compare
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"base64-js":39,"ieee754":65,"isarray":68}],44:[function(require,module,exports){
+(function (Buffer){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+exports.isBuffer = Buffer.isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
+},{"../../is-buffer/index.js":67}],45:[function(require,module,exports){
+/*istanbul ignore start*/"use strict";
+
+exports.__esModule = true;
+exports. /*istanbul ignore end*/convertChangesToDMP = convertChangesToDMP;
+// See: http://code.google.com/p/google-diff-match-patch/wiki/API
+function convertChangesToDMP(changes) {
+ var ret = [],
+ change = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
+ operation = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
+ for (var i = 0; i < changes.length; i++) {
+ change = changes[i];
+ if (change.added) {
+ operation = 1;
+ } else if (change.removed) {
+ operation = -1;
+ } else {
+ operation = 0;
+ }
+
+ ret.push([operation, change.value]);
+ }
+ return ret;
+}
+
+
+},{}],46:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports. /*istanbul ignore end*/convertChangesToXML = convertChangesToXML;
+function convertChangesToXML(changes) {
+ var ret = [];
+ for (var i = 0; i < changes.length; i++) {
+ var change = changes[i];
+ if (change.added) {
+ ret.push('<ins>');
+ } else if (change.removed) {
+ ret.push('<del>');
+ }
+
+ ret.push(escapeHTML(change.value));
+
+ if (change.added) {
+ ret.push('</ins>');
+ } else if (change.removed) {
+ ret.push('</del>');
+ }
+ }
+ return ret.join('');
+}
+
+function escapeHTML(s) {
+ var n = s;
+ n = n.replace(/&/g, '&amp;');
+ n = n.replace(/</g, '&lt;');
+ n = n.replace(/>/g, '&gt;');
+ n = n.replace(/"/g, '&quot;');
+
+ return n;
+}
+
+
+},{}],47:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.arrayDiff = undefined;
+exports. /*istanbul ignore end*/diffArrays = diffArrays;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/var arrayDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/arrayDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+arrayDiff.tokenize = arrayDiff.join = function (value) {
+ return value.slice();
+};
+
+function diffArrays(oldArr, newArr, callback) {
+ return arrayDiff.diff(oldArr, newArr, callback);
+}
+
+
+},{"./base":48}],48:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports['default'] = /*istanbul ignore end*/Diff;
+function Diff() {}
+
+Diff.prototype = { /*istanbul ignore start*/
+ /*istanbul ignore end*/diff: function diff(oldString, newString) {
+ /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+ var callback = options.callback;
+ if (typeof options === 'function') {
+ callback = options;
+ options = {};
+ }
+ this.options = options;
+
+ var self = this;
+
+ function done(value) {
+ if (callback) {
+ setTimeout(function () {
+ callback(undefined, value);
+ }, 0);
+ return true;
+ } else {
+ return value;
+ }
+ }
+
+ // Allow subclasses to massage the input prior to running
+ oldString = this.castInput(oldString);
+ newString = this.castInput(newString);
+
+ oldString = this.removeEmpty(this.tokenize(oldString));
+ newString = this.removeEmpty(this.tokenize(newString));
+
+ var newLen = newString.length,
+ oldLen = oldString.length;
+ var editLength = 1;
+ var maxEditLength = newLen + oldLen;
+ var bestPath = [{ newPos: -1, components: [] }];
+
+ // Seed editLength = 0, i.e. the content starts with the same values
+ var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
+ if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
+ // Identity per the equality and tokenizer
+ return done([{ value: this.join(newString), count: newString.length }]);
+ }
+
+ // Main worker method. checks all permutations of a given edit length for acceptance.
+ function execEditLength() {
+ for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
+ var basePath = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
+ var addPath = bestPath[diagonalPath - 1],
+ removePath = bestPath[diagonalPath + 1],
+ _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
+ if (addPath) {
+ // No one else is going to attempt to use this value, clear it
+ bestPath[diagonalPath - 1] = undefined;
+ }
+
+ var canAdd = addPath && addPath.newPos + 1 < newLen,
+ canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
+ if (!canAdd && !canRemove) {
+ // If this path is a terminal then prune
+ bestPath[diagonalPath] = undefined;
+ continue;
+ }
+
+ // Select the diagonal that we want to branch from. We select the prior
+ // path whose position in the new string is the farthest from the origin
+ // and does not pass the bounds of the diff graph
+ if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
+ basePath = clonePath(removePath);
+ self.pushComponent(basePath.components, undefined, true);
+ } else {
+ basePath = addPath; // No need to clone, we've pulled it from the list
+ basePath.newPos++;
+ self.pushComponent(basePath.components, true, undefined);
+ }
+
+ _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
+
+ // If we have hit the end of both strings, then we are done
+ if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
+ return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
+ } else {
+ // Otherwise track this path as a potential candidate and continue.
+ bestPath[diagonalPath] = basePath;
+ }
+ }
+
+ editLength++;
+ }
+
+ // Performs the length of edit iteration. Is a bit fugly as this has to support the
+ // sync and async mode which is never fun. Loops over execEditLength until a value
+ // is produced.
+ if (callback) {
+ (function exec() {
+ setTimeout(function () {
+ // This should not happen, but we want to be safe.
+ /* istanbul ignore next */
+ if (editLength > maxEditLength) {
+ return callback();
+ }
+
+ if (!execEditLength()) {
+ exec();
+ }
+ }, 0);
+ })();
+ } else {
+ while (editLength <= maxEditLength) {
+ var ret = execEditLength();
+ if (ret) {
+ return ret;
+ }
+ }
+ }
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/pushComponent: function pushComponent(components, added, removed) {
+ var last = components[components.length - 1];
+ if (last && last.added === added && last.removed === removed) {
+ // We need to clone here as the component clone operation is just
+ // as shallow array clone
+ components[components.length - 1] = { count: last.count + 1, added: added, removed: removed };
+ } else {
+ components.push({ count: 1, added: added, removed: removed });
+ }
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
+ var newLen = newString.length,
+ oldLen = oldString.length,
+ newPos = basePath.newPos,
+ oldPos = newPos - diagonalPath,
+ commonCount = 0;
+ while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
+ newPos++;
+ oldPos++;
+ commonCount++;
+ }
+
+ if (commonCount) {
+ basePath.components.push({ count: commonCount });
+ }
+
+ basePath.newPos = newPos;
+ return oldPos;
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/equals: function equals(left, right) {
+ return left === right;
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/removeEmpty: function removeEmpty(array) {
+ var ret = [];
+ for (var i = 0; i < array.length; i++) {
+ if (array[i]) {
+ ret.push(array[i]);
+ }
+ }
+ return ret;
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/castInput: function castInput(value) {
+ return value;
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/tokenize: function tokenize(value) {
+ return value.split('');
+ },
+ /*istanbul ignore start*/ /*istanbul ignore end*/join: function join(chars) {
+ return chars.join('');
+ }
+};
+
+function buildValues(diff, components, newString, oldString, useLongestToken) {
+ var componentPos = 0,
+ componentLen = components.length,
+ newPos = 0,
+ oldPos = 0;
+
+ for (; componentPos < componentLen; componentPos++) {
+ var component = components[componentPos];
+ if (!component.removed) {
+ if (!component.added && useLongestToken) {
+ var value = newString.slice(newPos, newPos + component.count);
+ value = value.map(function (value, i) {
+ var oldValue = oldString[oldPos + i];
+ return oldValue.length > value.length ? oldValue : value;
+ });
+
+ component.value = diff.join(value);
+ } else {
+ component.value = diff.join(newString.slice(newPos, newPos + component.count));
+ }
+ newPos += component.count;
+
+ // Common case
+ if (!component.added) {
+ oldPos += component.count;
+ }
+ } else {
+ component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
+ oldPos += component.count;
+
+ // Reverse add and remove so removes are output first to match common convention
+ // The diffing algorithm is tied to add then remove output and this is the simplest
+ // route to get the desired output with minimal overhead.
+ if (componentPos && components[componentPos - 1].added) {
+ var tmp = components[componentPos - 1];
+ components[componentPos - 1] = components[componentPos];
+ components[componentPos] = tmp;
+ }
+ }
+ }
+
+ // Special case handle for when one terminal is ignored. For this case we merge the
+ // terminal into the prior string and drop the change.
+ var lastComponent = components[componentLen - 1];
+ if (componentLen > 1 && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
+ components[componentLen - 2].value += lastComponent.value;
+ components.pop();
+ }
+
+ return components;
+}
+
+function clonePath(path) {
+ return { newPos: path.newPos, components: path.components.slice(0) };
+}
+
+
+},{}],49:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.characterDiff = undefined;
+exports. /*istanbul ignore end*/diffChars = diffChars;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/var characterDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/characterDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+function diffChars(oldStr, newStr, callback) {
+ return characterDiff.diff(oldStr, newStr, callback);
+}
+
+
+},{"./base":48}],50:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.cssDiff = undefined;
+exports. /*istanbul ignore end*/diffCss = diffCss;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/var cssDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/cssDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+cssDiff.tokenize = function (value) {
+ return value.split(/([{}:;,]|\s+)/);
+};
+
+function diffCss(oldStr, newStr, callback) {
+ return cssDiff.diff(oldStr, newStr, callback);
+}
+
+
+},{"./base":48}],51:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.jsonDiff = undefined;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+exports. /*istanbul ignore end*/diffJson = diffJson;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = canonicalize;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+/*istanbul ignore end*/
+var /*istanbul ignore start*/_line = require('./line') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/
+
+var objectPrototypeToString = Object.prototype.toString;
+
+var jsonDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/jsonDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+// Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
+// dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
+jsonDiff.useLongestToken = true;
+
+jsonDiff.tokenize = /*istanbul ignore start*/_line.lineDiff. /*istanbul ignore end*/tokenize;
+jsonDiff.castInput = function (value) {
+ /*istanbul ignore start*/var /*istanbul ignore end*/undefinedReplacement = this.options.undefinedReplacement;
+
+
+ return typeof value === 'string' ? value : JSON.stringify(canonicalize(value), function (k, v) {
+ if (typeof v === 'undefined') {
+ return undefinedReplacement;
+ }
+
+ return v;
+ }, ' ');
+};
+jsonDiff.equals = function (left, right) {
+ return (/*istanbul ignore start*/_base2['default']. /*istanbul ignore end*/prototype.equals(left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'))
+ );
+};
+
+function diffJson(oldObj, newObj, options) {
+ return jsonDiff.diff(oldObj, newObj, options);
+}
+
+// This function handles the presence of circular references by bailing out when encountering an
+// object that is already on the "stack" of items being processed.
+function canonicalize(obj, stack, replacementStack) {
+ stack = stack || [];
+ replacementStack = replacementStack || [];
+
+ var i = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
+
+ for (i = 0; i < stack.length; i += 1) {
+ if (stack[i] === obj) {
+ return replacementStack[i];
+ }
+ }
+
+ var canonicalizedObj = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
+
+ if ('[object Array]' === objectPrototypeToString.call(obj)) {
+ stack.push(obj);
+ canonicalizedObj = new Array(obj.length);
+ replacementStack.push(canonicalizedObj);
+ for (i = 0; i < obj.length; i += 1) {
+ canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack);
+ }
+ stack.pop();
+ replacementStack.pop();
+ return canonicalizedObj;
+ }
+
+ if (obj && obj.toJSON) {
+ obj = obj.toJSON();
+ }
+
+ if ( /*istanbul ignore start*/(typeof /*istanbul ignore end*/obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {
+ stack.push(obj);
+ canonicalizedObj = {};
+ replacementStack.push(canonicalizedObj);
+ var sortedKeys = [],
+ key = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
+ for (key in obj) {
+ /* istanbul ignore else */
+ if (obj.hasOwnProperty(key)) {
+ sortedKeys.push(key);
+ }
+ }
+ sortedKeys.sort();
+ for (i = 0; i < sortedKeys.length; i += 1) {
+ key = sortedKeys[i];
+ canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack);
+ }
+ stack.pop();
+ replacementStack.pop();
+ } else {
+ canonicalizedObj = obj;
+ }
+ return canonicalizedObj;
+}
+
+
+},{"./base":48,"./line":52}],52:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.lineDiff = undefined;
+exports. /*istanbul ignore end*/diffLines = diffLines;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = diffTrimmedLines;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+/*istanbul ignore end*/
+var /*istanbul ignore start*/_params = require('../util/params') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/var lineDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/lineDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+lineDiff.tokenize = function (value) {
+ var retLines = [],
+ linesAndNewlines = value.split(/(\n|\r\n)/);
+
+ // Ignore the final empty token that occurs if the string ends with a new line
+ if (!linesAndNewlines[linesAndNewlines.length - 1]) {
+ linesAndNewlines.pop();
+ }
+
+ // Merge the content and line separators into single tokens
+ for (var i = 0; i < linesAndNewlines.length; i++) {
+ var line = linesAndNewlines[i];
+
+ if (i % 2 && !this.options.newlineIsToken) {
+ retLines[retLines.length - 1] += line;
+ } else {
+ if (this.options.ignoreWhitespace) {
+ line = line.trim();
+ }
+ retLines.push(line);
+ }
+ }
+
+ return retLines;
+};
+
+function diffLines(oldStr, newStr, callback) {
+ return lineDiff.diff(oldStr, newStr, callback);
+}
+function diffTrimmedLines(oldStr, newStr, callback) {
+ var options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(callback, { ignoreWhitespace: true });
+ return lineDiff.diff(oldStr, newStr, options);
+}
+
+
+},{"../util/params":60,"./base":48}],53:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.sentenceDiff = undefined;
+exports. /*istanbul ignore end*/diffSentences = diffSentences;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/var sentenceDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/sentenceDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+sentenceDiff.tokenize = function (value) {
+ return value.split(/(\S.+?[.!?])(?=\s+|$)/);
+};
+
+function diffSentences(oldStr, newStr, callback) {
+ return sentenceDiff.diff(oldStr, newStr, callback);
+}
+
+
+},{"./base":48}],54:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.wordDiff = undefined;
+exports. /*istanbul ignore end*/diffWords = diffWords;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = diffWordsWithSpace;
+
+var /*istanbul ignore start*/_base = require('./base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+/*istanbul ignore end*/
+var /*istanbul ignore start*/_params = require('../util/params') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/
+
+// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode
+//
+// Ranges and exceptions:
+// Latin-1 Supplement, 0080–00FF
+// - U+00D7 × Multiplication sign
+// - U+00F7 ÷ Division sign
+// Latin Extended-A, 0100–017F
+// Latin Extended-B, 0180–024F
+// IPA Extensions, 0250–02AF
+// Spacing Modifier Letters, 02B0–02FF
+// - U+02C7 ˇ &#711; Caron
+// - U+02D8 ˘ &#728; Breve
+// - U+02D9 ˙ &#729; Dot Above
+// - U+02DA ˚ &#730; Ring Above
+// - U+02DB ˛ &#731; Ogonek
+// - U+02DC ˜ &#732; Small Tilde
+// - U+02DD ˝ &#733; Double Acute Accent
+// Latin Extended Additional, 1E00–1EFF
+var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
+
+var reWhitespace = /\S/;
+
+var wordDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/wordDiff = new /*istanbul ignore start*/_base2['default']() /*istanbul ignore end*/;
+wordDiff.equals = function (left, right) {
+ return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
+};
+wordDiff.tokenize = function (value) {
+ var tokens = value.split(/(\s+|\b)/);
+
+ // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
+ for (var i = 0; i < tokens.length - 1; i++) {
+ // If we have an empty string in the next field and we have only word chars before and after, merge
+ if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
+ tokens[i] += tokens[i + 2];
+ tokens.splice(i + 1, 2);
+ i--;
+ }
+ }
+
+ return tokens;
+};
+
+function diffWords(oldStr, newStr, callback) {
+ var options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(callback, { ignoreWhitespace: true });
+ return wordDiff.diff(oldStr, newStr, options);
+}
+function diffWordsWithSpace(oldStr, newStr, callback) {
+ return wordDiff.diff(oldStr, newStr, callback);
+}
+
+
+},{"../util/params":60,"./base":48}],55:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports.canonicalize = exports.convertChangesToXML = exports.convertChangesToDMP = exports.parsePatch = exports.applyPatches = exports.applyPatch = exports.createPatch = exports.createTwoFilesPatch = exports.structuredPatch = exports.diffArrays = exports.diffJson = exports.diffCss = exports.diffSentences = exports.diffTrimmedLines = exports.diffLines = exports.diffWordsWithSpace = exports.diffWords = exports.diffChars = exports.Diff = undefined;
+/*istanbul ignore end*/
+var /*istanbul ignore start*/_base = require('./diff/base') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _base2 = _interopRequireDefault(_base);
+
+/*istanbul ignore end*/
+var /*istanbul ignore start*/_character = require('./diff/character') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_word = require('./diff/word') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_line = require('./diff/line') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_sentence = require('./diff/sentence') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_css = require('./diff/css') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_json = require('./diff/json') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_array = require('./diff/array') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_apply = require('./patch/apply') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_parse = require('./patch/parse') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_create = require('./patch/create') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_dmp = require('./convert/dmp') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_xml = require('./convert/xml') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+exports. /*istanbul ignore end*/Diff = _base2['default'];
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffChars = _character.diffChars;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffWords = _word.diffWords;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = _word.diffWordsWithSpace;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffLines = _line.diffLines;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = _line.diffTrimmedLines;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffSentences = _sentence.diffSentences;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffCss = _css.diffCss;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffJson = _json.diffJson;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/diffArrays = _array.diffArrays;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/structuredPatch = _create.structuredPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = _create.createTwoFilesPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = _create.createPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatch = _apply.applyPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = _apply.applyPatches;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/parsePatch = _parse.parsePatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToDMP = _dmp.convertChangesToDMP;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToXML = _xml.convertChangesToXML;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = _json.canonicalize; /* See LICENSE file for terms of use */
+
+/*
+ * Text diff implementation.
+ *
+ * This library supports the following APIS:
+ * JsDiff.diffChars: Character by character diff
+ * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace
+ * JsDiff.diffLines: Line based diff
+ *
+ * JsDiff.diffCss: Diff targeted at CSS content
+ *
+ * These methods are based on the implementation proposed in
+ * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
+ * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927
+ */
+
+
+},{"./convert/dmp":45,"./convert/xml":46,"./diff/array":47,"./diff/base":48,"./diff/character":49,"./diff/css":50,"./diff/json":51,"./diff/line":52,"./diff/sentence":53,"./diff/word":54,"./patch/apply":56,"./patch/create":57,"./patch/parse":58}],56:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports. /*istanbul ignore end*/applyPatch = applyPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = applyPatches;
+
+var /*istanbul ignore start*/_parse = require('./parse') /*istanbul ignore end*/;
+
+var /*istanbul ignore start*/_distanceIterator = require('../util/distance-iterator') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+var _distanceIterator2 = _interopRequireDefault(_distanceIterator);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/*istanbul ignore end*/function applyPatch(source, uniDiff) {
+ /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
+
+ if (typeof uniDiff === 'string') {
+ uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
+ }
+
+ if (Array.isArray(uniDiff)) {
+ if (uniDiff.length > 1) {
+ throw new Error('applyPatch only works with a single input.');
+ }
+
+ uniDiff = uniDiff[0];
+ }
+
+ // Apply the diff to the input
+ var lines = source.split(/\r\n|[\n\v\f\r\x85]/),
+ delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [],
+ hunks = uniDiff.hunks,
+ compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) /*istanbul ignore start*/{
+ return (/*istanbul ignore end*/line === patchContent
+ );
+ },
+ errorCount = 0,
+ fuzzFactor = options.fuzzFactor || 0,
+ minLine = 0,
+ offset = 0,
+ removeEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
+ addEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
+
+ /**
+ * Checks if the hunk exactly fits on the provided location
+ */
+ function hunkFits(hunk, toPos) {
+ for (var j = 0; j < hunk.lines.length; j++) {
+ var line = hunk.lines[j],
+ operation = line[0],
+ content = line.substr(1);
+
+ if (operation === ' ' || operation === '-') {
+ // Context sanity check
+ if (!compareLine(toPos + 1, lines[toPos], operation, content)) {
+ errorCount++;
+
+ if (errorCount > fuzzFactor) {
+ return false;
+ }
+ }
+ toPos++;
+ }
+ }
+
+ return true;
+ }
+
+ // Search best fit offsets for each hunk based on the previous ones
+ for (var i = 0; i < hunks.length; i++) {
+ var hunk = hunks[i],
+ maxLine = lines.length - hunk.oldLines,
+ localOffset = 0,
+ toPos = offset + hunk.oldStart - 1;
+
+ var iterator = /*istanbul ignore start*/(0, _distanceIterator2['default']) /*istanbul ignore end*/(toPos, minLine, maxLine);
+
+ for (; localOffset !== undefined; localOffset = iterator()) {
+ if (hunkFits(hunk, toPos + localOffset)) {
+ hunk.offset = offset += localOffset;
+ break;
+ }
+ }
+
+ if (localOffset === undefined) {
+ return false;
+ }
+
+ // Set lower text limit to end of the current hunk, so next ones don't try
+ // to fit over already patched text
+ minLine = hunk.offset + hunk.oldStart + hunk.oldLines;
+ }
+
+ // Apply patch hunks
+ for (var _i = 0; _i < hunks.length; _i++) {
+ var _hunk = hunks[_i],
+ _toPos = _hunk.offset + _hunk.newStart - 1;
+ if (_hunk.newLines == 0) {
+ _toPos++;
+ }
+
+ for (var j = 0; j < _hunk.lines.length; j++) {
+ var line = _hunk.lines[j],
+ operation = line[0],
+ content = line.substr(1),
+ delimiter = _hunk.linedelimiters[j];
+
+ if (operation === ' ') {
+ _toPos++;
+ } else if (operation === '-') {
+ lines.splice(_toPos, 1);
+ delimiters.splice(_toPos, 1);
+ /* istanbul ignore else */
+ } else if (operation === '+') {
+ lines.splice(_toPos, 0, content);
+ delimiters.splice(_toPos, 0, delimiter);
+ _toPos++;
+ } else if (operation === '\\') {
+ var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;
+ if (previousOperation === '+') {
+ removeEOFNL = true;
+ } else if (previousOperation === '-') {
+ addEOFNL = true;
+ }
+ }
+ }
+ }
+
+ // Handle EOFNL insertion/removal
+ if (removeEOFNL) {
+ while (!lines[lines.length - 1]) {
+ lines.pop();
+ delimiters.pop();
+ }
+ } else if (addEOFNL) {
+ lines.push('');
+ delimiters.push('\n');
+ }
+ for (var _k = 0; _k < lines.length - 1; _k++) {
+ lines[_k] = lines[_k] + delimiters[_k];
+ }
+ return lines.join('');
+}
+
+// Wrapper that supports multiple file patches via callbacks.
+function applyPatches(uniDiff, options) {
+ if (typeof uniDiff === 'string') {
+ uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
+ }
+
+ var currentIndex = 0;
+ function processIndex() {
+ var index = uniDiff[currentIndex++];
+ if (!index) {
+ return options.complete();
+ }
+
+ options.loadFile(index, function (err, data) {
+ if (err) {
+ return options.complete(err);
+ }
+
+ var updatedContent = applyPatch(data, index, options);
+ options.patched(index, updatedContent, function (err) {
+ if (err) {
+ return options.complete(err);
+ }
+
+ processIndex();
+ });
+ });
+ }
+ processIndex();
+}
+
+
+},{"../util/distance-iterator":59,"./parse":58}],57:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports. /*istanbul ignore end*/structuredPatch = structuredPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = createTwoFilesPatch;
+/*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = createPatch;
+
+var /*istanbul ignore start*/_line = require('../diff/line') /*istanbul ignore end*/;
+
+/*istanbul ignore start*/
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+/*istanbul ignore end*/function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
+ if (!options) {
+ options = {};
+ }
+ if (typeof options.context === 'undefined') {
+ options.context = 4;
+ }
+
+ var diff = /*istanbul ignore start*/(0, _line.diffLines) /*istanbul ignore end*/(oldStr, newStr, options);
+ diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier
+
+ function contextLines(lines) {
+ return lines.map(function (entry) {
+ return ' ' + entry;
+ });
+ }
+
+ var hunks = [];
+ var oldRangeStart = 0,
+ newRangeStart = 0,
+ curRange = [],
+ oldLine = 1,
+ newLine = 1;
+ /*istanbul ignore start*/
+ var _loop = function _loop( /*istanbul ignore end*/i) {
+ var current = diff[i],
+ lines = current.lines || current.value.replace(/\n$/, '').split('\n');
+ current.lines = lines;
+
+ if (current.added || current.removed) {
+ /*istanbul ignore start*/
+ var _curRange;
+
+ /*istanbul ignore end*/
+ // If we have previous context, start with that
+ if (!oldRangeStart) {
+ var prev = diff[i - 1];
+ oldRangeStart = oldLine;
+ newRangeStart = newLine;
+
+ if (prev) {
+ curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
+ oldRangeStart -= curRange.length;
+ newRangeStart -= curRange.length;
+ }
+ }
+
+ // Output our changes
+ /*istanbul ignore start*/(_curRange = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/lines.map(function (entry) {
+ return (current.added ? '+' : '-') + entry;
+ })));
+
+ // Track the updated file position
+ if (current.added) {
+ newLine += lines.length;
+ } else {
+ oldLine += lines.length;
+ }
+ } else {
+ // Identical context lines. Track line changes
+ if (oldRangeStart) {
+ // Close out any changes that have been output (or join overlapping)
+ if (lines.length <= options.context * 2 && i < diff.length - 2) {
+ /*istanbul ignore start*/
+ var _curRange2;
+
+ /*istanbul ignore end*/
+ // Overlapping
+ /*istanbul ignore start*/(_curRange2 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines)));
+ } else {
+ /*istanbul ignore start*/
+ var _curRange3;
+
+ /*istanbul ignore end*/
+ // end the range and output
+ var contextSize = Math.min(lines.length, options.context);
+ /*istanbul ignore start*/(_curRange3 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines.slice(0, contextSize))));
+
+ var hunk = {
+ oldStart: oldRangeStart,
+ oldLines: oldLine - oldRangeStart + contextSize,
+ newStart: newRangeStart,
+ newLines: newLine - newRangeStart + contextSize,
+ lines: curRange
+ };
+ if (i >= diff.length - 2 && lines.length <= options.context) {
+ // EOF is inside this hunk
+ var oldEOFNewline = /\n$/.test(oldStr);
+ var newEOFNewline = /\n$/.test(newStr);
+ if (lines.length == 0 && !oldEOFNewline) {
+ // special case: old has no eol and no trailing context; no-nl can end up before adds
+ curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
+ } else if (!oldEOFNewline || !newEOFNewline) {
+ curRange.push('\\ No newline at end of file');
+ }
+ }
+ hunks.push(hunk);
+
+ oldRangeStart = 0;
+ newRangeStart = 0;
+ curRange = [];
+ }
+ }
+ oldLine += lines.length;
+ newLine += lines.length;
+ }
+ };
+
+ for (var i = 0; i < diff.length; i++) {
+ /*istanbul ignore start*/
+ _loop( /*istanbul ignore end*/i);
+ }
+
+ return {
+ oldFileName: oldFileName, newFileName: newFileName,
+ oldHeader: oldHeader, newHeader: newHeader,
+ hunks: hunks
+ };
+}
+
+function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
+ var diff = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);
+
+ var ret = [];
+ if (oldFileName == newFileName) {
+ ret.push('Index: ' + oldFileName);
+ }
+ ret.push('===================================================================');
+ ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
+ ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
+
+ for (var i = 0; i < diff.hunks.length; i++) {
+ var hunk = diff.hunks[i];
+ ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
+ ret.push.apply(ret, hunk.lines);
+ }
+
+ return ret.join('\n') + '\n';
+}
+
+function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
+ return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
+}
+
+
+},{"../diff/line":52}],58:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports. /*istanbul ignore end*/parsePatch = parsePatch;
+function parsePatch(uniDiff) {
+ /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+ var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/),
+ delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [],
+ list = [],
+ i = 0;
+
+ function parseIndex() {
+ var index = {};
+ list.push(index);
+
+ // Parse diff metadata
+ while (i < diffstr.length) {
+ var line = diffstr[i];
+
+ // File header found, end parsing diff metadata
+ if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) {
+ break;
+ }
+
+ // Diff index
+ var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
+ if (header) {
+ index.index = header[1];
+ }
+
+ i++;
+ }
+
+ // Parse file headers if they are defined. Unified diff requires them, but
+ // there's no technical issues to have an isolated hunk without file header
+ parseFileHeader(index);
+ parseFileHeader(index);
+
+ // Parse hunks
+ index.hunks = [];
+
+ while (i < diffstr.length) {
+ var _line = diffstr[i];
+
+ if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) {
+ break;
+ } else if (/^@@/.test(_line)) {
+ index.hunks.push(parseHunk());
+ } else if (_line && options.strict) {
+ // Ignore unexpected content unless in strict mode
+ throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));
+ } else {
+ i++;
+ }
+ }
+ }
+
+ // Parses the --- and +++ headers, if none are found, no lines
+ // are consumed.
+ function parseFileHeader(index) {
+ var headerPattern = /^(---|\+\+\+)\s+([\S ]*)(?:\t(.*?)\s*)?$/;
+ var fileHeader = headerPattern.exec(diffstr[i]);
+ if (fileHeader) {
+ var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';
+ index[keyPrefix + 'FileName'] = fileHeader[2];
+ index[keyPrefix + 'Header'] = fileHeader[3];
+
+ i++;
+ }
+ }
+
+ // Parses a hunk
+ // This assumes that we are at the start of a hunk.
+ function parseHunk() {
+ var chunkHeaderIndex = i,
+ chunkHeaderLine = diffstr[i++],
+ chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
+
+ var hunk = {
+ oldStart: +chunkHeader[1],
+ oldLines: +chunkHeader[2] || 1,
+ newStart: +chunkHeader[3],
+ newLines: +chunkHeader[4] || 1,
+ lines: [],
+ linedelimiters: []
+ };
+
+ var addCount = 0,
+ removeCount = 0;
+ for (; i < diffstr.length; i++) {
+ // Lines starting with '---' could be mistaken for the "remove line" operation
+ // But they could be the header for the next file. Therefore prune such cases out.
+ if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {
+ break;
+ }
+ var operation = diffstr[i][0];
+
+ if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') {
+ hunk.lines.push(diffstr[i]);
+ hunk.linedelimiters.push(delimiters[i] || '\n');
+
+ if (operation === '+') {
+ addCount++;
+ } else if (operation === '-') {
+ removeCount++;
+ } else if (operation === ' ') {
+ addCount++;
+ removeCount++;
+ }
+ } else {
+ break;
+ }
+ }
+
+ // Handle the empty block count case
+ if (!addCount && hunk.newLines === 1) {
+ hunk.newLines = 0;
+ }
+ if (!removeCount && hunk.oldLines === 1) {
+ hunk.oldLines = 0;
+ }
+
+ // Perform optional sanity checking
+ if (options.strict) {
+ if (addCount !== hunk.newLines) {
+ throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
+ }
+ if (removeCount !== hunk.oldLines) {
+ throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
+ }
+ }
+
+ return hunk;
+ }
+
+ while (i < diffstr.length) {
+ parseIndex();
+ }
+
+ return list;
+}
+
+
+},{}],59:[function(require,module,exports){
+/*istanbul ignore start*/"use strict";
+
+exports.__esModule = true;
+
+exports["default"] = /*istanbul ignore end*/function (start, minLine, maxLine) {
+ var wantForward = true,
+ backwardExhausted = false,
+ forwardExhausted = false,
+ localOffset = 1;
+
+ return function iterator() {
+ if (wantForward && !forwardExhausted) {
+ if (backwardExhausted) {
+ localOffset++;
+ } else {
+ wantForward = false;
+ }
+
+ // Check if trying to fit beyond text length, and if not, check it fits
+ // after offset location (or desired location on first iteration)
+ if (start + localOffset <= maxLine) {
+ return localOffset;
+ }
+
+ forwardExhausted = true;
+ }
+
+ if (!backwardExhausted) {
+ if (!forwardExhausted) {
+ wantForward = true;
+ }
+
+ // Check if trying to fit before text beginning, and if not, check it fits
+ // before offset location
+ if (minLine <= start - localOffset) {
+ return -localOffset++;
+ }
+
+ backwardExhausted = true;
+ return iterator();
+ }
+
+ // We tried to fit hunk before text beginning and beyond text lenght, then
+ // hunk can't fit on the text. Return undefined
+ };
+};
+
+
+},{}],60:[function(require,module,exports){
+/*istanbul ignore start*/'use strict';
+
+exports.__esModule = true;
+exports. /*istanbul ignore end*/generateOptions = generateOptions;
+function generateOptions(options, defaults) {
+ if (typeof options === 'function') {
+ defaults.callback = options;
+ } else if (options) {
+ for (var name in options) {
+ /* istanbul ignore else */
+ if (options.hasOwnProperty(name)) {
+ defaults[name] = options[name];
+ }
+ }
+ }
+ return defaults;
+}
+
+
+},{}],61:[function(require,module,exports){
+'use strict';
+
+var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
+
+module.exports = function (str) {
+ if (typeof str !== 'string') {
+ throw new TypeError('Expected a string');
+ }
+
+ return str.replace(matchOperatorsRe, '\\$&');
+};
+
+},{}],62:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+function EventEmitter() {
+ this._events = this._events || {};
+ this._maxListeners = this._maxListeners || undefined;
+}
+module.exports = EventEmitter;
+
+// Backwards-compat with node 0.10.x
+EventEmitter.EventEmitter = EventEmitter;
+
+EventEmitter.prototype._events = undefined;
+EventEmitter.prototype._maxListeners = undefined;
+
+// By default EventEmitters will print a warning if more than 10 listeners are
+// added to it. This is a useful default which helps finding memory leaks.
+EventEmitter.defaultMaxListeners = 10;
+
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+EventEmitter.prototype.setMaxListeners = function(n) {
+ if (!isNumber(n) || n < 0 || isNaN(n))
+ throw TypeError('n must be a positive number');
+ this._maxListeners = n;
+ return this;
+};
+
+EventEmitter.prototype.emit = function(type) {
+ var er, handler, len, args, i, listeners;
+
+ if (!this._events)
+ this._events = {};
+
+ // If there is no 'error' event listener then throw.
+ if (type === 'error') {
+ if (!this._events.error ||
+ (isObject(this._events.error) && !this._events.error.length)) {
+ er = arguments[1];
+ if (er instanceof Error) {
+ throw er; // Unhandled 'error' event
+ } else {
+ // At least give some kind of context to the user
+ var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
+ err.context = er;
+ throw err;
+ }
+ }
+ }
+
+ handler = this._events[type];
+
+ if (isUndefined(handler))
+ return false;
+
+ if (isFunction(handler)) {
+ switch (arguments.length) {
+ // fast cases
+ case 1:
+ handler.call(this);
+ break;
+ case 2:
+ handler.call(this, arguments[1]);
+ break;
+ case 3:
+ handler.call(this, arguments[1], arguments[2]);
+ break;
+ // slower
+ default:
+ args = Array.prototype.slice.call(arguments, 1);
+ handler.apply(this, args);
+ }
+ } else if (isObject(handler)) {
+ args = Array.prototype.slice.call(arguments, 1);
+ listeners = handler.slice();
+ len = listeners.length;
+ for (i = 0; i < len; i++)
+ listeners[i].apply(this, args);
+ }
+
+ return true;
+};
+
+EventEmitter.prototype.addListener = function(type, listener) {
+ var m;
+
+ if (!isFunction(listener))
+ throw TypeError('listener must be a function');
+
+ if (!this._events)
+ this._events = {};
+
+ // To avoid recursion in the case that type === "newListener"! Before
+ // adding it to the listeners, first emit "newListener".
+ if (this._events.newListener)
+ this.emit('newListener', type,
+ isFunction(listener.listener) ?
+ listener.listener : listener);
+
+ if (!this._events[type])
+ // Optimize the case of one listener. Don't need the extra array object.
+ this._events[type] = listener;
+ else if (isObject(this._events[type]))
+ // If we've already got an array, just append.
+ this._events[type].push(listener);
+ else
+ // Adding the second element, need to change to array.
+ this._events[type] = [this._events[type], listener];
+
+ // Check for listener leak
+ if (isObject(this._events[type]) && !this._events[type].warned) {
+ if (!isUndefined(this._maxListeners)) {
+ m = this._maxListeners;
+ } else {
+ m = EventEmitter.defaultMaxListeners;
+ }
+
+ if (m && m > 0 && this._events[type].length > m) {
+ this._events[type].warned = true;
+ console.error('(node) warning: possible EventEmitter memory ' +
+ 'leak detected. %d listeners added. ' +
+ 'Use emitter.setMaxListeners() to increase limit.',
+ this._events[type].length);
+ if (typeof console.trace === 'function') {
+ // not supported in IE 10
+ console.trace();
+ }
+ }
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+EventEmitter.prototype.once = function(type, listener) {
+ if (!isFunction(listener))
+ throw TypeError('listener must be a function');
+
+ var fired = false;
+
+ function g() {
+ this.removeListener(type, g);
+
+ if (!fired) {
+ fired = true;
+ listener.apply(this, arguments);
+ }
+ }
+
+ g.listener = listener;
+ this.on(type, g);
+
+ return this;
+};
+
+// emits a 'removeListener' event iff the listener was removed
+EventEmitter.prototype.removeListener = function(type, listener) {
+ var list, position, length, i;
+
+ if (!isFunction(listener))
+ throw TypeError('listener must be a function');
+
+ if (!this._events || !this._events[type])
+ return this;
+
+ list = this._events[type];
+ length = list.length;
+ position = -1;
+
+ if (list === listener ||
+ (isFunction(list.listener) && list.listener === listener)) {
+ delete this._events[type];
+ if (this._events.removeListener)
+ this.emit('removeListener', type, listener);
+
+ } else if (isObject(list)) {
+ for (i = length; i-- > 0;) {
+ if (list[i] === listener ||
+ (list[i].listener && list[i].listener === listener)) {
+ position = i;
+ break;
+ }
+ }
+
+ if (position < 0)
+ return this;
+
+ if (list.length === 1) {
+ list.length = 0;
+ delete this._events[type];
+ } else {
+ list.splice(position, 1);
+ }
+
+ if (this._events.removeListener)
+ this.emit('removeListener', type, listener);
+ }
+
+ return this;
+};
+
+EventEmitter.prototype.removeAllListeners = function(type) {
+ var key, listeners;
+
+ if (!this._events)
+ return this;
+
+ // not listening for removeListener, no need to emit
+ if (!this._events.removeListener) {
+ if (arguments.length === 0)
+ this._events = {};
+ else if (this._events[type])
+ delete this._events[type];
+ return this;
+ }
+
+ // emit removeListener for all listeners on all events
+ if (arguments.length === 0) {
+ for (key in this._events) {
+ if (key === 'removeListener') continue;
+ this.removeAllListeners(key);
+ }
+ this.removeAllListeners('removeListener');
+ this._events = {};
+ return this;
+ }
+
+ listeners = this._events[type];
+
+ if (isFunction(listeners)) {
+ this.removeListener(type, listeners);
+ } else if (listeners) {
+ // LIFO order
+ while (listeners.length)
+ this.removeListener(type, listeners[listeners.length - 1]);
+ }
+ delete this._events[type];
+
+ return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+ var ret;
+ if (!this._events || !this._events[type])
+ ret = [];
+ else if (isFunction(this._events[type]))
+ ret = [this._events[type]];
+ else
+ ret = this._events[type].slice();
+ return ret;
+};
+
+EventEmitter.prototype.listenerCount = function(type) {
+ if (this._events) {
+ var evlistener = this._events[type];
+
+ if (isFunction(evlistener))
+ return 1;
+ else if (evlistener)
+ return evlistener.length;
+ }
+ return 0;
+};
+
+EventEmitter.listenerCount = function(emitter, type) {
+ return emitter.listenerCount(type);
+};
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+
+},{}],63:[function(require,module,exports){
+(function (process){
+// Growl - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
+
+/**
+ * Module dependencies.
+ */
+
+var exec = require('child_process').exec
+ , fs = require('fs')
+ , path = require('path')
+ , exists = fs.existsSync || path.existsSync
+ , os = require('os')
+ , quote = JSON.stringify
+ , cmd;
+
+function which(name) {
+ var paths = process.env.PATH.split(':');
+ var loc;
+
+ for (var i = 0, len = paths.length; i < len; ++i) {
+ loc = path.join(paths[i], name);
+ if (exists(loc)) return loc;
+ }
+}
+
+switch(os.type()) {
+ case 'Darwin':
+ if (which('terminal-notifier')) {
+ cmd = {
+ type: "Darwin-NotificationCenter"
+ , pkg: "terminal-notifier"
+ , msg: '-message'
+ , title: '-title'
+ , subtitle: '-subtitle'
+ , icon: '-appIcon'
+ , sound: '-sound'
+ , url: '-open'
+ , priority: {
+ cmd: '-execute'
+ , range: []
+ }
+ };
+ } else {
+ cmd = {
+ type: "Darwin-Growl"
+ , pkg: "growlnotify"
+ , msg: '-m'
+ , sticky: '--sticky'
+ , priority: {
+ cmd: '--priority'
+ , range: [
+ -2
+ , -1
+ , 0
+ , 1
+ , 2
+ , "Very Low"
+ , "Moderate"
+ , "Normal"
+ , "High"
+ , "Emergency"
+ ]
+ }
+ };
+ }
+ break;
+ case 'Linux':
+ if (which('growl')) {
+ cmd = {
+ type: "Linux-Growl"
+ , pkg: "growl"
+ , msg: '-m'
+ , title: '-title'
+ , subtitle: '-subtitle'
+ , host: {
+ cmd: '-H'
+ , hostname: '192.168.33.1'
+ }
+ };
+ } else {
+ cmd = {
+ type: "Linux"
+ , pkg: "notify-send"
+ , msg: ''
+ , sticky: '-t 0'
+ , icon: '-i'
+ , priority: {
+ cmd: '-u'
+ , range: [
+ "low"
+ , "normal"
+ , "critical"
+ ]
+ }
+ };
+ }
+ break;
+ case 'Windows_NT':
+ cmd = {
+ type: "Windows"
+ , pkg: "growlnotify"
+ , msg: ''
+ , sticky: '/s:true'
+ , title: '/t:'
+ , icon: '/i:'
+ , url: '/cu:'
+ , priority: {
+ cmd: '/p:'
+ , range: [
+ -2
+ , -1
+ , 0
+ , 1
+ , 2
+ ]
+ }
+ };
+ break;
+}
+
+/**
+ * Expose `growl`.
+ */
+
+exports = module.exports = growl;
+
+/**
+ * Node-growl version.
+ */
+
+exports.version = '1.4.1'
+
+/**
+ * Send growl notification _msg_ with _options_.
+ *
+ * Options:
+ *
+ * - title Notification title
+ * - sticky Make the notification stick (defaults to false)
+ * - priority Specify an int or named key (default is 0)
+ * - name Application name (defaults to growlnotify)
+ * - sound Sound efect ( in OSx defined in preferences -> sound -> effects) * works only in OSX > 10.8x
+ * - image
+ * - path to an icon sets --iconpath
+ * - path to an image sets --image
+ * - capitalized word sets --appIcon
+ * - filename uses extname as --icon
+ * - otherwise treated as --icon
+ *
+ * Examples:
+ *
+ * growl('New email')
+ * growl('5 new emails', { title: 'Thunderbird' })
+ * growl('5 new emails', { title: 'Thunderbird', sound: 'Purr' })
+ * growl('Email sent', function(){
+ * // ... notification sent
+ * })
+ *
+ * @param {string} msg
+ * @param {object} options
+ * @param {function} fn
+ * @api public
+ */
+
+function growl(msg, options, fn) {
+ var image
+ , args
+ , options = options || {}
+ , fn = fn || function(){};
+
+ if (options.exec) {
+ cmd = {
+ type: "Custom"
+ , pkg: options.exec
+ , range: []
+ };
+ }
+
+ // noop
+ if (!cmd) return fn(new Error('growl not supported on this platform'));
+ args = [cmd.pkg];
+
+ // image
+ if (image = options.image) {
+ switch(cmd.type) {
+ case 'Darwin-Growl':
+ var flag, ext = path.extname(image).substr(1)
+ flag = flag || ext == 'icns' && 'iconpath'
+ flag = flag || /^[A-Z]/.test(image) && 'appIcon'
+ flag = flag || /^png|gif|jpe?g$/.test(ext) && 'image'
+ flag = flag || ext && (image = ext) && 'icon'
+ flag = flag || 'icon'
+ args.push('--' + flag, quote(image))
+ break;
+ case 'Darwin-NotificationCenter':
+ args.push(cmd.icon, quote(image));
+ break;
+ case 'Linux':
+ args.push(cmd.icon, quote(image));
+ // libnotify defaults to sticky, set a hint for transient notifications
+ if (!options.sticky) args.push('--hint=int:transient:1');
+ break;
+ case 'Windows':
+ args.push(cmd.icon + quote(image));
+ break;
+ }
+ }
+
+ // sticky
+ if (options.sticky) args.push(cmd.sticky);
+
+ // priority
+ if (options.priority) {
+ var priority = options.priority + '';
+ var checkindexOf = cmd.priority.range.indexOf(priority);
+ if (~cmd.priority.range.indexOf(priority)) {
+ args.push(cmd.priority, options.priority);
+ }
+ }
+
+ //sound
+ if(options.sound && cmd.type === 'Darwin-NotificationCenter'){
+ args.push(cmd.sound, options.sound)
+ }
+
+ // name
+ if (options.name && cmd.type === "Darwin-Growl") {
+ args.push('--name', options.name);
+ }
+
+ switch(cmd.type) {
+ case 'Darwin-Growl':
+ args.push(cmd.msg);
+ args.push(quote(msg).replace(/\\n/g, '\n'));
+ if (options.title) args.push(quote(options.title));
+ break;
+ case 'Darwin-NotificationCenter':
+ args.push(cmd.msg);
+ var stringifiedMsg = quote(msg);
+ var escapedMsg = stringifiedMsg.replace(/\\n/g, '\n');
+ args.push(escapedMsg);
+ if (options.title) {
+ args.push(cmd.title);
+ args.push(quote(options.title));
+ }
+ if (options.subtitle) {
+ args.push(cmd.subtitle);
+ args.push(quote(options.subtitle));
+ }
+ if (options.url) {
+ args.push(cmd.url);
+ args.push(quote(options.url));
+ }
+ break;
+ case 'Linux-Growl':
+ args.push(cmd.msg);
+ args.push(quote(msg).replace(/\\n/g, '\n'));
+ if (options.title) args.push(quote(options.title));
+ if (cmd.host) {
+ args.push(cmd.host.cmd, cmd.host.hostname)
+ }
+ break;
+ case 'Linux':
+ if (options.title) {
+ args.push(quote(options.title));
+ args.push(cmd.msg);
+ args.push(quote(msg).replace(/\\n/g, '\n'));
+ } else {
+ args.push(quote(msg).replace(/\\n/g, '\n'));
+ }
+ break;
+ case 'Windows':
+ args.push(quote(msg).replace(/\\n/g, '\n'));
+ if (options.title) args.push(cmd.title + quote(options.title));
+ if (options.url) args.push(cmd.url + quote(options.url));
+ break;
+ case 'Custom':
+ args[0] = (function(origCommand) {
+ var message = options.title
+ ? options.title + ': ' + msg
+ : msg;
+ var command = origCommand.replace(/(^|[^%])%s/g, '$1' + quote(message));
+ if (command === origCommand) args.push(quote(message));
+ return command;
+ })(args[0]);
+ break;
+ }
+
+ // execute
+ exec(args.join(' '), fn);
+};
+
+}).call(this,require('_process'))
+},{"_process":82,"child_process":42,"fs":42,"os":80,"path":42}],64:[function(require,module,exports){
+(function (global){
+/*! https://mths.be/he v1.1.1 by @mathias | MIT license */
+;(function(root) {
+
+ // Detect free variables `exports`.
+ var freeExports = typeof exports == 'object' && exports;
+
+ // Detect free variable `module`.
+ var freeModule = typeof module == 'object' && module &&
+ module.exports == freeExports && module;
+
+ // Detect free variable `global`, from Node.js or Browserified code,
+ // and use it as `root`.
+ var freeGlobal = typeof global == 'object' && global;
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+ root = freeGlobal;
+ }
+
+ /*--------------------------------------------------------------------------*/
+
+ // All astral symbols.
+ var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+ // All ASCII symbols (not just printable ASCII) except those listed in the
+ // first column of the overrides table.
+ // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
+ var regexAsciiWhitelist = /[\x01-\x7F]/g;
+ // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
+ // code points listed in the first column of the overrides table on
+ // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
+ var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
+
+ var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
+ var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};
+
+ var regexEscape = /["&'<>`]/g;
+ var escapeMap = {
+ '"': '&quot;',
+ '&': '&amp;',
+ '\'': '&#x27;',
+ '<': '&lt;',
+ // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
+ // following is not strictly necessary unless it’s part of a tag or an
+ // unquoted attribute value. We’re only escaping it to support those
+ // situations, and for XML support.
+ '>': '&gt;',
+ // In Internet Explorer ≤ 8, the backtick character can be used
+ // to break out of (un)quoted attribute values or HTML comments.
+ // See http://html5sec.org/#102, http://html5sec.org/#108, and
+ // http://html5sec.org/#133.
+ '`': '&#x60;'
+ };
+
+ var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
+ var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
+ var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g;
+ var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
+ var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
+ var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
+ var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
+
+ /*--------------------------------------------------------------------------*/
+
+ var stringFromCharCode = String.fromCharCode;
+
+ var object = {};
+ var hasOwnProperty = object.hasOwnProperty;
+ var has = function(object, propertyName) {
+ return hasOwnProperty.call(object, propertyName);
+ };
+
+ var contains = function(array, value) {
+ var index = -1;
+ var length = array.length;
+ while (++index < length) {
+ if (array[index] == value) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ var merge = function(options, defaults) {
+ if (!options) {
+ return defaults;
+ }
+ var result = {};
+ var key;
+ for (key in defaults) {
+ // A `hasOwnProperty` check is not needed here, since only recognized
+ // option names are used anyway. Any others are ignored.
+ result[key] = has(options, key) ? options[key] : defaults[key];
+ }
+ return result;
+ };
+
+ // Modified version of `ucs2encode`; see https://mths.be/punycode.
+ var codePointToSymbol = function(codePoint, strict) {
+ var output = '';
+ if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
+ // See issue #4:
+ // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
+ // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
+ // REPLACEMENT CHARACTER.”
+ if (strict) {
+ parseError('character reference outside the permissible Unicode range');
+ }
+ return '\uFFFD';
+ }
+ if (has(decodeMapNumeric, codePoint)) {
+ if (strict) {
+ parseError('disallowed character reference');
+ }
+ return decodeMapNumeric[codePoint];
+ }
+ if (strict && contains(invalidReferenceCodePoints, codePoint)) {
+ parseError('disallowed character reference');
+ }
+ if (codePoint > 0xFFFF) {
+ codePoint -= 0x10000;
+ output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
+ codePoint = 0xDC00 | codePoint & 0x3FF;
+ }
+ output += stringFromCharCode(codePoint);
+ return output;
+ };
+
+ var hexEscape = function(codePoint) {
+ return '&#x' + codePoint.toString(16).toUpperCase() + ';';
+ };
+
+ var decEscape = function(codePoint) {
+ return '&#' + codePoint + ';';
+ };
+
+ var parseError = function(message) {
+ throw Error('Parse error: ' + message);
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ var encode = function(string, options) {
+ options = merge(options, encode.options);
+ var strict = options.strict;
+ if (strict && regexInvalidRawCodePoint.test(string)) {
+ parseError('forbidden code point');
+ }
+ var encodeEverything = options.encodeEverything;
+ var useNamedReferences = options.useNamedReferences;
+ var allowUnsafeSymbols = options.allowUnsafeSymbols;
+ var escapeCodePoint = options.decimal ? decEscape : hexEscape;
+
+ var escapeBmpSymbol = function(symbol) {
+ return escapeCodePoint(symbol.charCodeAt(0));
+ };
+
+ if (encodeEverything) {
+ // Encode ASCII symbols.
+ string = string.replace(regexAsciiWhitelist, function(symbol) {
+ // Use named references if requested & possible.
+ if (useNamedReferences && has(encodeMap, symbol)) {
+ return '&' + encodeMap[symbol] + ';';
+ }
+ return escapeBmpSymbol(symbol);
+ });
+ // Shorten a few escapes that represent two symbols, of which at least one
+ // is within the ASCII range.
+ if (useNamedReferences) {
+ string = string
+ .replace(/&gt;\u20D2/g, '&nvgt;')
+ .replace(/&lt;\u20D2/g, '&nvlt;')
+ .replace(/&#x66;&#x6A;/g, '&fjlig;');
+ }
+ // Encode non-ASCII symbols.
+ if (useNamedReferences) {
+ // Encode non-ASCII symbols that can be replaced with a named reference.
+ string = string.replace(regexEncodeNonAscii, function(string) {
+ // Note: there is no need to check `has(encodeMap, string)` here.
+ return '&' + encodeMap[string] + ';';
+ });
+ }
+ // Note: any remaining non-ASCII symbols are handled outside of the `if`.
+ } else if (useNamedReferences) {
+ // Apply named character references.
+ // Encode `<>"'&` using named character references.
+ if (!allowUnsafeSymbols) {
+ string = string.replace(regexEscape, function(string) {
+ return '&' + encodeMap[string] + ';'; // no need to check `has()` here
+ });
+ }
+ // Shorten escapes that represent two symbols, of which at least one is
+ // `<>"'&`.
+ string = string
+ .replace(/&gt;\u20D2/g, '&nvgt;')
+ .replace(/&lt;\u20D2/g, '&nvlt;');
+ // Encode non-ASCII symbols that can be replaced with a named reference.
+ string = string.replace(regexEncodeNonAscii, function(string) {
+ // Note: there is no need to check `has(encodeMap, string)` here.
+ return '&' + encodeMap[string] + ';';
+ });
+ } else if (!allowUnsafeSymbols) {
+ // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
+ // using named character references.
+ string = string.replace(regexEscape, escapeBmpSymbol);
+ }
+ return string
+ // Encode astral symbols.
+ .replace(regexAstralSymbols, function($0) {
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ var high = $0.charCodeAt(0);
+ var low = $0.charCodeAt(1);
+ var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
+ return escapeCodePoint(codePoint);
+ })
+ // Encode any remaining BMP symbols that are not printable ASCII symbols
+ // using a hexadecimal escape.
+ .replace(regexBmpWhitelist, escapeBmpSymbol);
+ };
+ // Expose default options (so they can be overridden globally).
+ encode.options = {
+ 'allowUnsafeSymbols': false,
+ 'encodeEverything': false,
+ 'strict': false,
+ 'useNamedReferences': false,
+ 'decimal' : false
+ };
+
+ var decode = function(html, options) {
+ options = merge(options, decode.options);
+ var strict = options.strict;
+ if (strict && regexInvalidEntity.test(html)) {
+ parseError('malformed character reference');
+ }
+ return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
+ var codePoint;
+ var semicolon;
+ var decDigits;
+ var hexDigits;
+ var reference;
+ var next;
+ if ($1) {
+ // Decode decimal escapes, e.g. `&#119558;`.
+ decDigits = $1;
+ semicolon = $2;
+ if (strict && !semicolon) {
+ parseError('character reference was not terminated by a semicolon');
+ }
+ codePoint = parseInt(decDigits, 10);
+ return codePointToSymbol(codePoint, strict);
+ }
+ if ($3) {
+ // Decode hexadecimal escapes, e.g. `&#x1D306;`.
+ hexDigits = $3;
+ semicolon = $4;
+ if (strict && !semicolon) {
+ parseError('character reference was not terminated by a semicolon');
+ }
+ codePoint = parseInt(hexDigits, 16);
+ return codePointToSymbol(codePoint, strict);
+ }
+ if ($5) {
+ // Decode named character references with trailing `;`, e.g. `&copy;`.
+ reference = $5;
+ if (has(decodeMap, reference)) {
+ return decodeMap[reference];
+ } else {
+ // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
+ if (strict) {
+ parseError(
+ 'named character reference was not terminated by a semicolon'
+ );
+ }
+ return $0;
+ }
+ }
+ // If we’re still here, it’s a legacy reference for sure. No need for an
+ // extra `if` check.
+ // Decode named character references without trailing `;`, e.g. `&amp`
+ // This is only a parse error if it gets converted to `&`, or if it is
+ // followed by `=` in an attribute context.
+ reference = $6;
+ next = $7;
+ if (next && options.isAttributeValue) {
+ if (strict && next == '=') {
+ parseError('`&` did not start a character reference');
+ }
+ return $0;
+ } else {
+ if (strict) {
+ parseError(
+ 'named character reference was not terminated by a semicolon'
+ );
+ }
+ // Note: there is no need to check `has(decodeMapLegacy, reference)`.
+ return decodeMapLegacy[reference] + (next || '');
+ }
+ });
+ };
+ // Expose default options (so they can be overridden globally).
+ decode.options = {
+ 'isAttributeValue': false,
+ 'strict': false
+ };
+
+ var escape = function(string) {
+ return string.replace(regexEscape, function($0) {
+ // Note: there is no need to check `has(escapeMap, $0)` here.
+ return escapeMap[$0];
+ });
+ };
+
+ /*--------------------------------------------------------------------------*/
+
+ var he = {
+ 'version': '1.1.1',
+ 'encode': encode,
+ 'decode': decode,
+ 'escape': escape,
+ 'unescape': decode
+ };
+
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
+ // like the following:
+ if (
+ false
+ ) {
+ define(function() {
+ return he;
+ });
+ } else if (freeExports && !freeExports.nodeType) {
+ if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
+ freeModule.exports = he;
+ } else { // in Narwhal or RingoJS v0.7.0-
+ for (var key in he) {
+ has(he, key) && (freeExports[key] = he[key]);
+ }
+ }
+ } else { // in Rhino or a web browser
+ root.he = he;
+ }
+
+}(this));
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],65:[function(require,module,exports){
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+ var e, m
+ var eLen = nBytes * 8 - mLen - 1
+ var eMax = (1 << eLen) - 1
+ var eBias = eMax >> 1
+ var nBits = -7
+ var i = isLE ? (nBytes - 1) : 0
+ var d = isLE ? -1 : 1
+ var s = buffer[offset + i]
+
+ i += d
+
+ e = s & ((1 << (-nBits)) - 1)
+ s >>= (-nBits)
+ nBits += eLen
+ for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+ m = e & ((1 << (-nBits)) - 1)
+ e >>= (-nBits)
+ nBits += mLen
+ for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+ if (e === 0) {
+ e = 1 - eBias
+ } else if (e === eMax) {
+ return m ? NaN : ((s ? -1 : 1) * Infinity)
+ } else {
+ m = m + Math.pow(2, mLen)
+ e = e - eBias
+ }
+ return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
+
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+ var e, m, c
+ var eLen = nBytes * 8 - mLen - 1
+ var eMax = (1 << eLen) - 1
+ var eBias = eMax >> 1
+ var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+ var i = isLE ? 0 : (nBytes - 1)
+ var d = isLE ? 1 : -1
+ var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+
+ value = Math.abs(value)
+
+ if (isNaN(value) || value === Infinity) {
+ m = isNaN(value) ? 1 : 0
+ e = eMax
+ } else {
+ e = Math.floor(Math.log(value) / Math.LN2)
+ if (value * (c = Math.pow(2, -e)) < 1) {
+ e--
+ c *= 2
+ }
+ if (e + eBias >= 1) {
+ value += rt / c
+ } else {
+ value += rt * Math.pow(2, 1 - eBias)
+ }
+ if (value * c >= 2) {
+ e++
+ c /= 2
+ }
+
+ if (e + eBias >= eMax) {
+ m = 0
+ e = eMax
+ } else if (e + eBias >= 1) {
+ m = (value * c - 1) * Math.pow(2, mLen)
+ e = e + eBias
+ } else {
+ m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+ e = 0
+ }
+ }
+
+ for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+
+ e = (e << mLen) | m
+ eLen += mLen
+ for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+
+ buffer[offset + i - d] |= s * 128
+}
+
+},{}],66:[function(require,module,exports){
+if (typeof Object.create === 'function') {
+ // implementation from standard node.js 'util' module
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ ctor.prototype = Object.create(superCtor.prototype, {
+ constructor: {
+ value: ctor,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ };
+} else {
+ // old school shim for old browsers
+ module.exports = function inherits(ctor, superCtor) {
+ ctor.super_ = superCtor
+ var TempCtor = function () {}
+ TempCtor.prototype = superCtor.prototype
+ ctor.prototype = new TempCtor()
+ ctor.prototype.constructor = ctor
+ }
+}
+
+},{}],67:[function(require,module,exports){
+/*!
+ * Determine if an object is a Buffer
+ *
+ * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license MIT
+ */
+
+// The _isBuffer check is for Safari 5-7 support, because it's missing
+// Object.prototype.constructor. Remove this eventually
+module.exports = function (obj) {
+ return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
+}
+
+function isBuffer (obj) {
+ return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
+}
+
+// For Node v0.10 support. Remove this eventually.
+function isSlowBuffer (obj) {
+ return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
+}
+
+},{}],68:[function(require,module,exports){
+var toString = {}.toString;
+
+module.exports = Array.isArray || function (arr) {
+ return toString.call(arr) == '[object Array]';
+};
+
+},{}],69:[function(require,module,exports){
+(function (global){
+/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
+;(function () {
+ // Detect the `define` function exposed by asynchronous module loaders. The
+ // strict `define` check is necessary for compatibility with `r.js`.
+ var isLoader = false;
+
+ // A set of types used to distinguish objects from primitives.
+ var objectTypes = {
+ "function": true,
+ "object": true
+ };
+
+ // Detect the `exports` object exposed by CommonJS implementations.
+ var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
+
+ // Use the `global` object exposed by Node (including Browserify via
+ // `insert-module-globals`), Narwhal, and Ringo as the default context,
+ // and the `window` object in browsers. Rhino exports a `global` function
+ // instead.
+ var root = objectTypes[typeof window] && window || this,
+ freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global;
+
+ if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) {
+ root = freeGlobal;
+ }
+
+ // Public: Initializes JSON 3 using the given `context` object, attaching the
+ // `stringify` and `parse` functions to the specified `exports` object.
+ function runInContext(context, exports) {
+ context || (context = root["Object"]());
+ exports || (exports = root["Object"]());
+
+ // Native constructor aliases.
+ var Number = context["Number"] || root["Number"],
+ String = context["String"] || root["String"],
+ Object = context["Object"] || root["Object"],
+ Date = context["Date"] || root["Date"],
+ SyntaxError = context["SyntaxError"] || root["SyntaxError"],
+ TypeError = context["TypeError"] || root["TypeError"],
+ Math = context["Math"] || root["Math"],
+ nativeJSON = context["JSON"] || root["JSON"];
+
+ // Delegate to the native `stringify` and `parse` implementations.
+ if (typeof nativeJSON == "object" && nativeJSON) {
+ exports.stringify = nativeJSON.stringify;
+ exports.parse = nativeJSON.parse;
+ }
+
+ // Convenience aliases.
+ var objectProto = Object.prototype,
+ getClass = objectProto.toString,
+ isProperty, forEach, undef;
+
+ // Test the `Date#getUTC*` methods. Based on work by @Yaffle.
+ var isExtended = new Date(-3509827334573292);
+ try {
+ // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
+ // results for certain dates in Opera >= 10.53.
+ isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&
+ // Safari < 2.0.2 stores the internal millisecond time value correctly,
+ // but clips the values returned by the date methods to the range of
+ // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
+ isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;
+ } catch (exception) {}
+
+ // Internal: Determines whether the native `JSON.stringify` and `parse`
+ // implementations are spec-compliant. Based on work by Ken Snyder.
+ function has(name) {
+ if (has[name] !== undef) {
+ // Return cached feature test result.
+ return has[name];
+ }
+ var isSupported;
+ if (name == "bug-string-char-index") {
+ // IE <= 7 doesn't support accessing string characters using square
+ // bracket notation. IE 8 only supports this for primitives.
+ isSupported = "a"[0] != "a";
+ } else if (name == "json") {
+ // Indicates whether both `JSON.stringify` and `JSON.parse` are
+ // supported.
+ isSupported = has("json-stringify") && has("json-parse");
+ } else {
+ var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
+ // Test `JSON.stringify`.
+ if (name == "json-stringify") {
+ var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended;
+ if (stringifySupported) {
+ // A test function object with a custom `toJSON` method.
+ (value = function () {
+ return 1;
+ }).toJSON = value;
+ try {
+ stringifySupported =
+ // Firefox 3.1b1 and b2 serialize string, number, and boolean
+ // primitives as object literals.
+ stringify(0) === "0" &&
+ // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
+ // literals.
+ stringify(new Number()) === "0" &&
+ stringify(new String()) == '""' &&
+ // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
+ // does not define a canonical JSON representation (this applies to
+ // objects with `toJSON` properties as well, *unless* they are nested
+ // within an object or array).
+ stringify(getClass) === undef &&
+ // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
+ // FF 3.1b3 pass this test.
+ stringify(undef) === undef &&
+ // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
+ // respectively, if the value is omitted entirely.
+ stringify() === undef &&
+ // FF 3.1b1, 2 throw an error if the given value is not a number,
+ // string, array, object, Boolean, or `null` literal. This applies to
+ // objects with custom `toJSON` methods as well, unless they are nested
+ // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
+ // methods entirely.
+ stringify(value) === "1" &&
+ stringify([value]) == "[1]" &&
+ // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
+ // `"[null]"`.
+ stringify([undef]) == "[null]" &&
+ // YUI 3.0.0b1 fails to serialize `null` literals.
+ stringify(null) == "null" &&
+ // FF 3.1b1, 2 halts serialization if an array contains a function:
+ // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3
+ // elides non-JSON values from objects and arrays, unless they
+ // define custom `toJSON` methods.
+ stringify([undef, getClass, null]) == "[null,null,null]" &&
+ // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
+ // where character escape codes are expected (e.g., `\b` => `\u0008`).
+ stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized &&
+ // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
+ stringify(null, value) === "1" &&
+ stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" &&
+ // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
+ // serialize extended years.
+ stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' &&
+ // The milliseconds are optional in ES 5, but required in 5.1.
+ stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' &&
+ // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
+ // four-digit years instead of six-digit years. Credits: @Yaffle.
+ stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' &&
+ // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
+ // values less than 1000. Credits: @Yaffle.
+ stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"';
+ } catch (exception) {
+ stringifySupported = false;
+ }
+ }
+ isSupported = stringifySupported;
+ }
+ // Test `JSON.parse`.
+ if (name == "json-parse") {
+ var parse = exports.parse;
+ if (typeof parse == "function") {
+ try {
+ // FF 3.1b1, b2 will throw an exception if a bare literal is provided.
+ // Conforming implementations should also coerce the initial argument to
+ // a string prior to parsing.
+ if (parse("0") === 0 && !parse(false)) {
+ // Simple parsing test.
+ value = parse(serialized);
+ var parseSupported = value["a"].length == 5 && value["a"][0] === 1;
+ if (parseSupported) {
+ try {
+ // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.
+ parseSupported = !parse('"\t"');
+ } catch (exception) {}
+ if (parseSupported) {
+ try {
+ // FF 4.0 and 4.0.1 allow leading `+` signs and leading
+ // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow
+ // certain octal literals.
+ parseSupported = parse("01") !== 1;
+ } catch (exception) {}
+ }
+ if (parseSupported) {
+ try {
+ // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal
+ // points. These environments, along with FF 3.1b1 and 2,
+ // also allow trailing commas in JSON objects and arrays.
+ parseSupported = parse("1.") !== 1;
+ } catch (exception) {}
+ }
+ }
+ }
+ } catch (exception) {
+ parseSupported = false;
+ }
+ }
+ isSupported = parseSupported;
+ }
+ }
+ return has[name] = !!isSupported;
+ }
+
+ if (!has("json")) {
+ // Common `[[Class]]` name aliases.
+ var functionClass = "[object Function]",
+ dateClass = "[object Date]",
+ numberClass = "[object Number]",
+ stringClass = "[object String]",
+ arrayClass = "[object Array]",
+ booleanClass = "[object Boolean]";
+
+ // Detect incomplete support for accessing string characters by index.
+ var charIndexBuggy = has("bug-string-char-index");
+
+ // Define additional utility methods if the `Date` methods are buggy.
+ if (!isExtended) {
+ var floor = Math.floor;
+ // A mapping between the months of the year and the number of days between
+ // January 1st and the first of the respective month.
+ var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
+ // Internal: Calculates the number of days between the Unix epoch and the
+ // first day of the given month.
+ var getDay = function (year, month) {
+ return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);
+ };
+ }
+
+ // Internal: Determines if a property is a direct property of the given
+ // object. Delegates to the native `Object#hasOwnProperty` method.
+ if (!(isProperty = objectProto.hasOwnProperty)) {
+ isProperty = function (property) {
+ var members = {}, constructor;
+ if ((members.__proto__ = null, members.__proto__ = {
+ // The *proto* property cannot be set multiple times in recent
+ // versions of Firefox and SeaMonkey.
+ "toString": 1
+ }, members).toString != getClass) {
+ // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but
+ // supports the mutable *proto* property.
+ isProperty = function (property) {
+ // Capture and break the object's prototype chain (see section 8.6.2
+ // of the ES 5.1 spec). The parenthesized expression prevents an
+ // unsafe transformation by the Closure Compiler.
+ var original = this.__proto__, result = property in (this.__proto__ = null, this);
+ // Restore the original prototype chain.
+ this.__proto__ = original;
+ return result;
+ };
+ } else {
+ // Capture a reference to the top-level `Object` constructor.
+ constructor = members.constructor;
+ // Use the `constructor` property to simulate `Object#hasOwnProperty` in
+ // other environments.
+ isProperty = function (property) {
+ var parent = (this.constructor || constructor).prototype;
+ return property in this && !(property in parent && this[property] === parent[property]);
+ };
+ }
+ members = null;
+ return isProperty.call(this, property);
+ };
+ }
+
+ // Internal: Normalizes the `for...in` iteration algorithm across
+ // environments. Each enumerated key is yielded to a `callback` function.
+ forEach = function (object, callback) {
+ var size = 0, Properties, members, property;
+
+ // Tests for bugs in the current environment's `for...in` algorithm. The
+ // `valueOf` property inherits the non-enumerable flag from
+ // `Object.prototype` in older versions of IE, Netscape, and Mozilla.
+ (Properties = function () {
+ this.valueOf = 0;
+ }).prototype.valueOf = 0;
+
+ // Iterate over a new instance of the `Properties` class.
+ members = new Properties();
+ for (property in members) {
+ // Ignore all properties inherited from `Object.prototype`.
+ if (isProperty.call(members, property)) {
+ size++;
+ }
+ }
+ Properties = members = null;
+
+ // Normalize the iteration algorithm.
+ if (!size) {
+ // A list of non-enumerable properties inherited from `Object.prototype`.
+ members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"];
+ // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable
+ // properties.
+ forEach = function (object, callback) {
+ var isFunction = getClass.call(object) == functionClass, property, length;
+ var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;
+ for (property in object) {
+ // Gecko <= 1.0 enumerates the `prototype` property of functions under
+ // certain conditions; IE does not.
+ if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) {
+ callback(property);
+ }
+ }
+ // Manually invoke the callback for each non-enumerable property.
+ for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));
+ };
+ } else if (size == 2) {
+ // Safari <= 2.0.4 enumerates shadowed properties twice.
+ forEach = function (object, callback) {
+ // Create a set of iterated properties.
+ var members = {}, isFunction = getClass.call(object) == functionClass, property;
+ for (property in object) {
+ // Store each property name to prevent double enumeration. The
+ // `prototype` property of functions is not enumerated due to cross-
+ // environment inconsistencies.
+ if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {
+ callback(property);
+ }
+ }
+ };
+ } else {
+ // No bugs detected; use the standard `for...in` algorithm.
+ forEach = function (object, callback) {
+ var isFunction = getClass.call(object) == functionClass, property, isConstructor;
+ for (property in object) {
+ if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) {
+ callback(property);
+ }
+ }
+ // Manually invoke the callback for the `constructor` property due to
+ // cross-environment inconsistencies.
+ if (isConstructor || isProperty.call(object, (property = "constructor"))) {
+ callback(property);
+ }
+ };
+ }
+ return forEach(object, callback);
+ };
+
+ // Public: Serializes a JavaScript `value` as a JSON string. The optional
+ // `filter` argument may specify either a function that alters how object and
+ // array members are serialized, or an array of strings and numbers that
+ // indicates which properties should be serialized. The optional `width`
+ // argument may be either a string or number that specifies the indentation
+ // level of the output.
+ if (!has("json-stringify")) {
+ // Internal: A map of control characters and their escaped equivalents.
+ var Escapes = {
+ 92: "\\\\",
+ 34: '\\"',
+ 8: "\\b",
+ 12: "\\f",
+ 10: "\\n",
+ 13: "\\r",
+ 9: "\\t"
+ };
+
+ // Internal: Converts `value` into a zero-padded string such that its
+ // length is at least equal to `width`. The `width` must be <= 6.
+ var leadingZeroes = "000000";
+ var toPaddedString = function (width, value) {
+ // The `|| 0` expression is necessary to work around a bug in
+ // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`.
+ return (leadingZeroes + (value || 0)).slice(-width);
+ };
+
+ // Internal: Double-quotes a string `value`, replacing all ASCII control
+ // characters (characters with code unit values between 0 and 31) with
+ // their escaped equivalents. This is an implementation of the
+ // `Quote(value)` operation defined in ES 5.1 section 15.12.3.
+ var unicodePrefix = "\\u00";
+ var quote = function (value) {
+ var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;
+ var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value);
+ for (; index < length; index++) {
+ var charCode = value.charCodeAt(index);
+ // If the character is a control character, append its Unicode or
+ // shorthand escape sequence; otherwise, append the character as-is.
+ switch (charCode) {
+ case 8: case 9: case 10: case 12: case 13: case 34: case 92:
+ result += Escapes[charCode];
+ break;
+ default:
+ if (charCode < 32) {
+ result += unicodePrefix + toPaddedString(2, charCode.toString(16));
+ break;
+ }
+ result += useCharIndex ? symbols[index] : value.charAt(index);
+ }
+ }
+ return result + '"';
+ };
+
+ // Internal: Recursively serializes an object. Implements the
+ // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.
+ var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {
+ var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;
+ try {
+ // Necessary for host object support.
+ value = object[property];
+ } catch (exception) {}
+ if (typeof value == "object" && value) {
+ className = getClass.call(value);
+ if (className == dateClass && !isProperty.call(value, "toJSON")) {
+ if (value > -1 / 0 && value < 1 / 0) {
+ // Dates are serialized according to the `Date#toJSON` method
+ // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15
+ // for the ISO 8601 date time string format.
+ if (getDay) {
+ // Manually compute the year, month, date, hours, minutes,
+ // seconds, and milliseconds if the `getUTC*` methods are
+ // buggy. Adapted from @Yaffle's `date-shim` project.
+ date = floor(value / 864e5);
+ for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);
+ for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);
+ date = 1 + date - getDay(year, month);
+ // The `time` value specifies the time within the day (see ES
+ // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used
+ // to compute `A modulo B`, as the `%` operator does not
+ // correspond to the `modulo` operation for negative numbers.
+ time = (value % 864e5 + 864e5) % 864e5;
+ // The hours, minutes, seconds, and milliseconds are obtained by
+ // decomposing the time within the day. See section 15.9.1.10.
+ hours = floor(time / 36e5) % 24;
+ minutes = floor(time / 6e4) % 60;
+ seconds = floor(time / 1e3) % 60;
+ milliseconds = time % 1e3;
+ } else {
+ year = value.getUTCFullYear();
+ month = value.getUTCMonth();
+ date = value.getUTCDate();
+ hours = value.getUTCHours();
+ minutes = value.getUTCMinutes();
+ seconds = value.getUTCSeconds();
+ milliseconds = value.getUTCMilliseconds();
+ }
+ // Serialize extended years correctly.
+ value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +
+ "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) +
+ // Months, dates, hours, minutes, and seconds should have two
+ // digits; milliseconds should have three.
+ "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) +
+ // Milliseconds are optional in ES 5.0, but required in 5.1.
+ "." + toPaddedString(3, milliseconds) + "Z";
+ } else {
+ value = null;
+ }
+ } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) {
+ // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the
+ // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3
+ // ignores all `toJSON` methods on these objects unless they are
+ // defined directly on an instance.
+ value = value.toJSON(property);
+ }
+ }
+ if (callback) {
+ // If a replacement function was provided, call it to obtain the value
+ // for serialization.
+ value = callback.call(object, property, value);
+ }
+ if (value === null) {
+ return "null";
+ }
+ className = getClass.call(value);
+ if (className == booleanClass) {
+ // Booleans are represented literally.
+ return "" + value;
+ } else if (className == numberClass) {
+ // JSON numbers must be finite. `Infinity` and `NaN` are serialized as
+ // `"null"`.
+ return value > -1 / 0 && value < 1 / 0 ? "" + value : "null";
+ } else if (className == stringClass) {
+ // Strings are double-quoted and escaped.
+ return quote("" + value);
+ }
+ // Recursively serialize objects and arrays.
+ if (typeof value == "object") {
+ // Check for cyclic structures. This is a linear search; performance
+ // is inversely proportional to the number of unique nested objects.
+ for (length = stack.length; length--;) {
+ if (stack[length] === value) {
+ // Cyclic structures cannot be serialized by `JSON.stringify`.
+ throw TypeError();
+ }
+ }
+ // Add the object to the stack of traversed objects.
+ stack.push(value);
+ results = [];
+ // Save the current indentation level and indent one additional level.
+ prefix = indentation;
+ indentation += whitespace;
+ if (className == arrayClass) {
+ // Recursively serialize array elements.
+ for (index = 0, length = value.length; index < length; index++) {
+ element = serialize(index, value, callback, properties, whitespace, indentation, stack);
+ results.push(element === undef ? "null" : element);
+ }
+ result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]";
+ } else {
+ // Recursively serialize object members. Members are selected from
+ // either a user-specified list of property names, or the object
+ // itself.
+ forEach(properties || value, function (property) {
+ var element = serialize(property, value, callback, properties, whitespace, indentation, stack);
+ if (element !== undef) {
+ // According to ES 5.1 section 15.12.3: "If `gap` {whitespace}
+ // is not the empty string, let `member` {quote(property) + ":"}
+ // be the concatenation of `member` and the `space` character."
+ // The "`space` character" refers to the literal space
+ // character, not the `space` {width} argument provided to
+ // `JSON.stringify`.
+ results.push(quote(property) + ":" + (whitespace ? " " : "") + element);
+ }
+ });
+ result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}";
+ }
+ // Remove the object from the traversed object stack.
+ stack.pop();
+ return result;
+ }
+ };
+
+ // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.
+ exports.stringify = function (source, filter, width) {
+ var whitespace, callback, properties, className;
+ if (objectTypes[typeof filter] && filter) {
+ if ((className = getClass.call(filter)) == functionClass) {
+ callback = filter;
+ } else if (className == arrayClass) {
+ // Convert the property names array into a makeshift set.
+ properties = {};
+ for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));
+ }
+ }
+ if (width) {
+ if ((className = getClass.call(width)) == numberClass) {
+ // Convert the `width` to an integer and create a string containing
+ // `width` number of space characters.
+ if ((width -= width % 1) > 0) {
+ for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " ");
+ }
+ } else if (className == stringClass) {
+ whitespace = width.length <= 10 ? width : width.slice(0, 10);
+ }
+ }
+ // Opera <= 7.54u2 discards the values associated with empty string keys
+ // (`""`) only if they are used directly within an object member list
+ // (e.g., `!("" in { "": 1})`).
+ return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []);
+ };
+ }
+
+ // Public: Parses a JSON source string.
+ if (!has("json-parse")) {
+ var fromCharCode = String.fromCharCode;
+
+ // Internal: A map of escaped control characters and their unescaped
+ // equivalents.
+ var Unescapes = {
+ 92: "\\",
+ 34: '"',
+ 47: "/",
+ 98: "\b",
+ 116: "\t",
+ 110: "\n",
+ 102: "\f",
+ 114: "\r"
+ };
+
+ // Internal: Stores the parser state.
+ var Index, Source;
+
+ // Internal: Resets the parser state and throws a `SyntaxError`.
+ var abort = function () {
+ Index = Source = null;
+ throw SyntaxError();
+ };
+
+ // Internal: Returns the next token, or `"$"` if the parser has reached
+ // the end of the source string. A token may be a string, number, `null`
+ // literal, or Boolean literal.
+ var lex = function () {
+ var source = Source, length = source.length, value, begin, position, isSigned, charCode;
+ while (Index < length) {
+ charCode = source.charCodeAt(Index);
+ switch (charCode) {
+ case 9: case 10: case 13: case 32:
+ // Skip whitespace tokens, including tabs, carriage returns, line
+ // feeds, and space characters.
+ Index++;
+ break;
+ case 123: case 125: case 91: case 93: case 58: case 44:
+ // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at
+ // the current position.
+ value = charIndexBuggy ? source.charAt(Index) : source[Index];
+ Index++;
+ return value;
+ case 34:
+ // `"` delimits a JSON string; advance to the next character and
+ // begin parsing the string. String tokens are prefixed with the
+ // sentinel `@` character to distinguish them from punctuators and
+ // end-of-string tokens.
+ for (value = "@", Index++; Index < length;) {
+ charCode = source.charCodeAt(Index);
+ if (charCode < 32) {
+ // Unescaped ASCII control characters (those with a code unit
+ // less than the space character) are not permitted.
+ abort();
+ } else if (charCode == 92) {
+ // A reverse solidus (`\`) marks the beginning of an escaped
+ // control character (including `"`, `\`, and `/`) or Unicode
+ // escape sequence.
+ charCode = source.charCodeAt(++Index);
+ switch (charCode) {
+ case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:
+ // Revive escaped control characters.
+ value += Unescapes[charCode];
+ Index++;
+ break;
+ case 117:
+ // `\u` marks the beginning of a Unicode escape sequence.
+ // Advance to the first character and validate the
+ // four-digit code point.
+ begin = ++Index;
+ for (position = Index + 4; Index < position; Index++) {
+ charCode = source.charCodeAt(Index);
+ // A valid sequence comprises four hexdigits (case-
+ // insensitive) that form a single hexadecimal value.
+ if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {
+ // Invalid Unicode escape sequence.
+ abort();
+ }
+ }
+ // Revive the escaped character.
+ value += fromCharCode("0x" + source.slice(begin, Index));
+ break;
+ default:
+ // Invalid escape sequence.
+ abort();
+ }
+ } else {
+ if (charCode == 34) {
+ // An unescaped double-quote character marks the end of the
+ // string.
+ break;
+ }
+ charCode = source.charCodeAt(Index);
+ begin = Index;
+ // Optimize for the common case where a string is valid.
+ while (charCode >= 32 && charCode != 92 && charCode != 34) {
+ charCode = source.charCodeAt(++Index);
+ }
+ // Append the string as-is.
+ value += source.slice(begin, Index);
+ }
+ }
+ if (source.charCodeAt(Index) == 34) {
+ // Advance to the next character and return the revived string.
+ Index++;
+ return value;
+ }
+ // Unterminated string.
+ abort();
+ default:
+ // Parse numbers and literals.
+ begin = Index;
+ // Advance past the negative sign, if one is specified.
+ if (charCode == 45) {
+ isSigned = true;
+ charCode = source.charCodeAt(++Index);
+ }
+ // Parse an integer or floating-point value.
+ if (charCode >= 48 && charCode <= 57) {
+ // Leading zeroes are interpreted as octal literals.
+ if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {
+ // Illegal octal literal.
+ abort();
+ }
+ isSigned = false;
+ // Parse the integer component.
+ for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);
+ // Floats cannot contain a leading decimal point; however, this
+ // case is already accounted for by the parser.
+ if (source.charCodeAt(Index) == 46) {
+ position = ++Index;
+ // Parse the decimal component.
+ for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
+ if (position == Index) {
+ // Illegal trailing decimal.
+ abort();
+ }
+ Index = position;
+ }
+ // Parse exponents. The `e` denoting the exponent is
+ // case-insensitive.
+ charCode = source.charCodeAt(Index);
+ if (charCode == 101 || charCode == 69) {
+ charCode = source.charCodeAt(++Index);
+ // Skip past the sign following the exponent, if one is
+ // specified.
+ if (charCode == 43 || charCode == 45) {
+ Index++;
+ }
+ // Parse the exponential component.
+ for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
+ if (position == Index) {
+ // Illegal empty exponent.
+ abort();
+ }
+ Index = position;
+ }
+ // Coerce the parsed value to a JavaScript number.
+ return +source.slice(begin, Index);
+ }
+ // A negative sign may only precede numbers.
+ if (isSigned) {
+ abort();
+ }
+ // `true`, `false`, and `null` literals.
+ if (source.slice(Index, Index + 4) == "true") {
+ Index += 4;
+ return true;
+ } else if (source.slice(Index, Index + 5) == "false") {
+ Index += 5;
+ return false;
+ } else if (source.slice(Index, Index + 4) == "null") {
+ Index += 4;
+ return null;
+ }
+ // Unrecognized token.
+ abort();
+ }
+ }
+ // Return the sentinel `$` character if the parser has reached the end
+ // of the source string.
+ return "$";
+ };
+
+ // Internal: Parses a JSON `value` token.
+ var get = function (value) {
+ var results, hasMembers;
+ if (value == "$") {
+ // Unexpected end of input.
+ abort();
+ }
+ if (typeof value == "string") {
+ if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") {
+ // Remove the sentinel `@` character.
+ return value.slice(1);
+ }
+ // Parse object and array literals.
+ if (value == "[") {
+ // Parses a JSON array, returning a new JavaScript array.
+ results = [];
+ for (;; hasMembers || (hasMembers = true)) {
+ value = lex();
+ // A closing square bracket marks the end of the array literal.
+ if (value == "]") {
+ break;
+ }
+ // If the array literal contains elements, the current token
+ // should be a comma separating the previous element from the
+ // next.
+ if (hasMembers) {
+ if (value == ",") {
+ value = lex();
+ if (value == "]") {
+ // Unexpected trailing `,` in array literal.
+ abort();
+ }
+ } else {
+ // A `,` must separate each array element.
+ abort();
+ }
+ }
+ // Elisions and leading commas are not permitted.
+ if (value == ",") {
+ abort();
+ }
+ results.push(get(value));
+ }
+ return results;
+ } else if (value == "{") {
+ // Parses a JSON object, returning a new JavaScript object.
+ results = {};
+ for (;; hasMembers || (hasMembers = true)) {
+ value = lex();
+ // A closing curly brace marks the end of the object literal.
+ if (value == "}") {
+ break;
+ }
+ // If the object literal contains members, the current token
+ // should be a comma separator.
+ if (hasMembers) {
+ if (value == ",") {
+ value = lex();
+ if (value == "}") {
+ // Unexpected trailing `,` in object literal.
+ abort();
+ }
+ } else {
+ // A `,` must separate each object member.
+ abort();
+ }
+ }
+ // Leading commas are not permitted, object property names must be
+ // double-quoted strings, and a `:` must separate each property
+ // name and value.
+ if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") {
+ abort();
+ }
+ results[value.slice(1)] = get(lex());
+ }
+ return results;
+ }
+ // Unexpected token encountered.
+ abort();
+ }
+ return value;
+ };
+
+ // Internal: Updates a traversed object member.
+ var update = function (source, property, callback) {
+ var element = walk(source, property, callback);
+ if (element === undef) {
+ delete source[property];
+ } else {
+ source[property] = element;
+ }
+ };
+
+ // Internal: Recursively traverses a parsed JSON object, invoking the
+ // `callback` function for each value. This is an implementation of the
+ // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.
+ var walk = function (source, property, callback) {
+ var value = source[property], length;
+ if (typeof value == "object" && value) {
+ // `forEach` can't be used to traverse an array in Opera <= 8.54
+ // because its `Object#hasOwnProperty` implementation returns `false`
+ // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`).
+ if (getClass.call(value) == arrayClass) {
+ for (length = value.length; length--;) {
+ update(value, length, callback);
+ }
+ } else {
+ forEach(value, function (property) {
+ update(value, property, callback);
+ });
+ }
+ }
+ return callback.call(source, property, value);
+ };
+
+ // Public: `JSON.parse`. See ES 5.1 section 15.12.2.
+ exports.parse = function (source, callback) {
+ var result, value;
+ Index = 0;
+ Source = "" + source;
+ result = get(lex());
+ // If a JSON string contains multiple tokens, it is invalid.
+ if (lex() != "$") {
+ abort();
+ }
+ // Reset the parser state.
+ Index = Source = null;
+ return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result;
+ };
+ }
+ }
+
+ exports["runInContext"] = runInContext;
+ return exports;
+ }
+
+ if (freeExports && !isLoader) {
+ // Export for CommonJS environments.
+ runInContext(root, freeExports);
+ } else {
+ // Export for web browsers and JavaScript engines.
+ var nativeJSON = root.JSON,
+ previousJSON = root["JSON3"],
+ isRestored = false;
+
+ var JSON3 = runInContext(root, (root["JSON3"] = {
+ // Public: Restores the original value of the global `JSON` object and
+ // returns a reference to the `JSON3` object.
+ "noConflict": function () {
+ if (!isRestored) {
+ isRestored = true;
+ root.JSON = nativeJSON;
+ root["JSON3"] = previousJSON;
+ nativeJSON = previousJSON = null;
+ }
+ return JSON3;
+ }
+ }));
+
+ root.JSON = {
+ "parse": JSON3.parse,
+ "stringify": JSON3.stringify
+ };
+ }
+
+ // Export for asynchronous module loaders.
+ if (isLoader) {
+ define(function () {
+ return JSON3;
+ });
+ }
+}).call(this);
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],70:[function(require,module,exports){
+/**
+ * lodash 3.2.0 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+var baseCopy = require('lodash._basecopy'),
+ keys = require('lodash.keys');
+
+/**
+ * The base implementation of `_.assign` without support for argument juggling,
+ * multiple sources, and `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+function baseAssign(object, source) {
+ return source == null
+ ? object
+ : baseCopy(source, keys(source), object);
+}
+
+module.exports = baseAssign;
+
+},{"lodash._basecopy":71,"lodash.keys":78}],71:[function(require,module,exports){
+/**
+ * lodash 3.0.1 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+function baseCopy(source, props, object) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+ object[key] = source[key];
+ }
+ return object;
+}
+
+module.exports = baseCopy;
+
+},{}],72:[function(require,module,exports){
+/**
+ * lodash 3.0.3 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+
+/**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+var baseCreate = (function() {
+ function object() {}
+ return function(prototype) {
+ if (isObject(prototype)) {
+ object.prototype = prototype;
+ var result = new object;
+ object.prototype = undefined;
+ }
+ return result || {};
+ };
+}());
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = baseCreate;
+
+},{}],73:[function(require,module,exports){
+/**
+ * lodash 3.9.1 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]';
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var fnToString = Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 equivalents which return 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+}
+
+module.exports = getNative;
+
+},{}],74:[function(require,module,exports){
+/**
+ * lodash 3.0.9 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^\d+$/;
+
+/**
+ * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+var getLength = baseProperty('length');
+
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+}
+
+/**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */
+function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)) {
+ var other = object[index];
+ return value === value ? (value === other) : (other !== other);
+ }
+ return false;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = isIterateeCall;
+
+},{}],75:[function(require,module,exports){
+/**
+ * lodash 3.1.1 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+var baseAssign = require('lodash._baseassign'),
+ baseCreate = require('lodash._basecreate'),
+ isIterateeCall = require('lodash._isiterateecall');
+
+/**
+ * Creates an object that inherits from the given `prototype` object. If a
+ * `properties` object is provided its own enumerable properties are assigned
+ * to the created object.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} prototype The object to inherit from.
+ * @param {Object} [properties] The properties to assign to the object.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * function Circle() {
+ * Shape.call(this);
+ * }
+ *
+ * Circle.prototype = _.create(Shape.prototype, {
+ * 'constructor': Circle
+ * });
+ *
+ * var circle = new Circle;
+ * circle instanceof Circle;
+ * // => true
+ *
+ * circle instanceof Shape;
+ * // => true
+ */
+function create(prototype, properties, guard) {
+ var result = baseCreate(prototype);
+ if (guard && isIterateeCall(prototype, properties, guard)) {
+ properties = undefined;
+ }
+ return properties ? baseAssign(result, properties) : result;
+}
+
+module.exports = create;
+
+},{"lodash._baseassign":70,"lodash._basecreate":72,"lodash._isiterateecall":74}],76:[function(require,module,exports){
+/**
+ * lodash (Custom Build) <https://lodash.com/>
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
+ * Released under MIT license <https://lodash.com/license>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+module.exports = isArguments;
+
+},{}],77:[function(require,module,exports){
+/**
+ * lodash 3.0.4 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+
+/** `Object#toString` result references. */
+var arrayTag = '[object Array]',
+ funcTag = '[object Function]';
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var fnToString = Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsArray = getNative(Array, 'isArray');
+
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+var isArray = nativeIsArray || function(value) {
+ return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+};
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 equivalents which return 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+}
+
+module.exports = isArray;
+
+},{}],78:[function(require,module,exports){
+/**
+ * lodash 3.1.2 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+var getNative = require('lodash._getnative'),
+ isArguments = require('lodash.isarguments'),
+ isArray = require('lodash.isarray');
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^\d+$/;
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeKeys = getNative(Object, 'keys');
+
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+var getLength = baseProperty('length');
+
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function shimKeys(object) {
+ var props = keysIn(object),
+ propsLength = props.length,
+ length = propsLength && object.length;
+
+ var allowIndexes = !!length && isLength(length) &&
+ (isArray(object) || isArguments(object));
+
+ var index = -1,
+ result = [];
+
+ while (++index < propsLength) {
+ var key = props[index];
+ if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+var keys = !nativeKeys ? shimKeys : function(object) {
+ var Ctor = object == null ? undefined : object.constructor;
+ if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+ (typeof object != 'function' && isArrayLike(object))) {
+ return shimKeys(object);
+ }
+ return isObject(object) ? nativeKeys(object) : [];
+};
+
+/**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+function keysIn(object) {
+ if (object == null) {
+ return [];
+ }
+ if (!isObject(object)) {
+ object = Object(object);
+ }
+ var length = object.length;
+ length = (length && isLength(length) &&
+ (isArray(object) || isArguments(object)) && length) || 0;
+
+ var Ctor = object.constructor,
+ index = -1,
+ isProto = typeof Ctor == 'function' && Ctor.prototype === object,
+ result = Array(length),
+ skipIndexes = length > 0;
+
+ while (++index < length) {
+ result[index] = (index + '');
+ }
+ for (var key in object) {
+ if (!(skipIndexes && isIndex(key, length)) &&
+ !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+module.exports = keys;
+
+},{"lodash._getnative":73,"lodash.isarguments":76,"lodash.isarray":77}],79:[function(require,module,exports){
+(function (process){
+var path = require('path');
+var fs = require('fs');
+var _0777 = parseInt('0777', 8);
+
+module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
+
+function mkdirP (p, opts, f, made) {
+ if (typeof opts === 'function') {
+ f = opts;
+ opts = {};
+ }
+ else if (!opts || typeof opts !== 'object') {
+ opts = { mode: opts };
+ }
+
+ var mode = opts.mode;
+ var xfs = opts.fs || fs;
+
+ if (mode === undefined) {
+ mode = _0777 & (~process.umask());
+ }
+ if (!made) made = null;
+
+ var cb = f || function () {};
+ p = path.resolve(p);
+
+ xfs.mkdir(p, mode, function (er) {
+ if (!er) {
+ made = made || p;
+ return cb(null, made);
+ }
+ switch (er.code) {
+ case 'ENOENT':
+ mkdirP(path.dirname(p), opts, function (er, made) {
+ if (er) cb(er, made);
+ else mkdirP(p, opts, cb, made);
+ });
+ break;
+
+ // In the case of any other error, just see if there's a dir
+ // there already. If so, then hooray! If not, then something
+ // is borked.
+ default:
+ xfs.stat(p, function (er2, stat) {
+ // if the stat fails, then that's super weird.
+ // let the original error be the failure reason.
+ if (er2 || !stat.isDirectory()) cb(er, made)
+ else cb(null, made);
+ });
+ break;
+ }
+ });
+}
+
+mkdirP.sync = function sync (p, opts, made) {
+ if (!opts || typeof opts !== 'object') {
+ opts = { mode: opts };
+ }
+
+ var mode = opts.mode;
+ var xfs = opts.fs || fs;
+
+ if (mode === undefined) {
+ mode = _0777 & (~process.umask());
+ }
+ if (!made) made = null;
+
+ p = path.resolve(p);
+
+ try {
+ xfs.mkdirSync(p, mode);
+ made = made || p;
+ }
+ catch (err0) {
+ switch (err0.code) {
+ case 'ENOENT' :
+ made = sync(path.dirname(p), opts, made);
+ sync(p, opts, made);
+ break;
+
+ // In the case of any other error, just see if there's a dir
+ // there already. If so, then hooray! If not, then something
+ // is borked.
+ default:
+ var stat;
+ try {
+ stat = xfs.statSync(p);
+ }
+ catch (err1) {
+ throw err0;
+ }
+ if (!stat.isDirectory()) throw err0;
+ break;
+ }
+ }
+
+ return made;
+};
+
+}).call(this,require('_process'))
+},{"_process":82,"fs":42,"path":42}],80:[function(require,module,exports){
+exports.endianness = function () { return 'LE' };
+
+exports.hostname = function () {
+ if (typeof location !== 'undefined') {
+ return location.hostname
+ }
+ else return '';
+};
+
+exports.loadavg = function () { return [] };
+
+exports.uptime = function () { return 0 };
+
+exports.freemem = function () {
+ return Number.MAX_VALUE;
+};
+
+exports.totalmem = function () {
+ return Number.MAX_VALUE;
+};
+
+exports.cpus = function () { return [] };
+
+exports.type = function () { return 'Browser' };
+
+exports.release = function () {
+ if (typeof navigator !== 'undefined') {
+ return navigator.appVersion;
+ }
+ return '';
+};
+
+exports.networkInterfaces
+= exports.getNetworkInterfaces
+= function () { return {} };
+
+exports.arch = function () { return 'javascript' };
+
+exports.platform = function () { return 'browser' };
+
+exports.tmpdir = exports.tmpDir = function () {
+ return '/tmp';
+};
+
+exports.EOL = '\n';
+
+},{}],81:[function(require,module,exports){
+(function (process){
+'use strict';
+
+if (!process.version ||
+ process.version.indexOf('v0.') === 0 ||
+ process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
+ module.exports = nextTick;
+} else {
+ module.exports = process.nextTick;
+}
+
+function nextTick(fn, arg1, arg2, arg3) {
+ if (typeof fn !== 'function') {
+ throw new TypeError('"callback" argument must be a function');
+ }
+ var len = arguments.length;
+ var args, i;
+ switch (len) {
+ case 0:
+ case 1:
+ return process.nextTick(fn);
+ case 2:
+ return process.nextTick(function afterTickOne() {
+ fn.call(null, arg1);
+ });
+ case 3:
+ return process.nextTick(function afterTickTwo() {
+ fn.call(null, arg1, arg2);
+ });
+ case 4:
+ return process.nextTick(function afterTickThree() {
+ fn.call(null, arg1, arg2, arg3);
+ });
+ default:
+ args = new Array(len - 1);
+ i = 0;
+ while (i < args.length) {
+ args[i++] = arguments[i];
+ }
+ return process.nextTick(function afterTick() {
+ fn.apply(null, args);
+ });
+ }
+}
+
+}).call(this,require('_process'))
+},{"_process":82}],82:[function(require,module,exports){
+// shim for using process in browser
+var process = module.exports = {};
+
+// cached from whatever global is present so that test runners that stub it
+// don't break things. But we need to wrap it in a try catch in case it is
+// wrapped in strict mode code which doesn't define any globals. It's inside a
+// function because try/catches deoptimize in certain engines.
+
+var cachedSetTimeout;
+var cachedClearTimeout;
+
+function defaultSetTimout() {
+ throw new Error('setTimeout has not been defined');
+}
+function defaultClearTimeout () {
+ throw new Error('clearTimeout has not been defined');
+}
+(function () {
+ try {
+ if (typeof setTimeout === 'function') {
+ cachedSetTimeout = setTimeout;
+ } else {
+ cachedSetTimeout = defaultSetTimout;
+ }
+ } catch (e) {
+ cachedSetTimeout = defaultSetTimout;
+ }
+ try {
+ if (typeof clearTimeout === 'function') {
+ cachedClearTimeout = clearTimeout;
+ } else {
+ cachedClearTimeout = defaultClearTimeout;
+ }
+ } catch (e) {
+ cachedClearTimeout = defaultClearTimeout;
+ }
+} ())
+function runTimeout(fun) {
+ if (cachedSetTimeout === setTimeout) {
+ //normal enviroments in sane situations
+ return setTimeout(fun, 0);
+ }
+ // if setTimeout wasn't available but was latter defined
+ if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+ cachedSetTimeout = setTimeout;
+ return setTimeout(fun, 0);
+ }
+ try {
+ // when when somebody has screwed with setTimeout but no I.E. maddness
+ return cachedSetTimeout(fun, 0);
+ } catch(e){
+ try {
+ // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+ return cachedSetTimeout.call(null, fun, 0);
+ } catch(e){
+ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+ return cachedSetTimeout.call(this, fun, 0);
+ }
+ }
+
+
+}
+function runClearTimeout(marker) {
+ if (cachedClearTimeout === clearTimeout) {
+ //normal enviroments in sane situations
+ return clearTimeout(marker);
+ }
+ // if clearTimeout wasn't available but was latter defined
+ if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+ cachedClearTimeout = clearTimeout;
+ return clearTimeout(marker);
+ }
+ try {
+ // when when somebody has screwed with setTimeout but no I.E. maddness
+ return cachedClearTimeout(marker);
+ } catch (e){
+ try {
+ // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+ return cachedClearTimeout.call(null, marker);
+ } catch (e){
+ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+ // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+ return cachedClearTimeout.call(this, marker);
+ }
+ }
+
+
+
+}
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+ if (!draining || !currentQueue) {
+ return;
+ }
+ draining = false;
+ if (currentQueue.length) {
+ queue = currentQueue.concat(queue);
+ } else {
+ queueIndex = -1;
+ }
+ if (queue.length) {
+ drainQueue();
+ }
+}
+
+function drainQueue() {
+ if (draining) {
+ return;
+ }
+ var timeout = runTimeout(cleanUpNextTick);
+ draining = true;
+
+ var len = queue.length;
+ while(len) {
+ currentQueue = queue;
+ queue = [];
+ while (++queueIndex < len) {
+ if (currentQueue) {
+ currentQueue[queueIndex].run();
+ }
+ }
+ queueIndex = -1;
+ len = queue.length;
+ }
+ currentQueue = null;
+ draining = false;
+ runClearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+ var args = new Array(arguments.length - 1);
+ if (arguments.length > 1) {
+ for (var i = 1; i < arguments.length; i++) {
+ args[i - 1] = arguments[i];
+ }
+ }
+ queue.push(new Item(fun, args));
+ if (queue.length === 1 && !draining) {
+ runTimeout(drainQueue);
+ }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+ this.fun = fun;
+ this.array = array;
+}
+Item.prototype.run = function () {
+ this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+process.prependListener = noop;
+process.prependOnceListener = noop;
+
+process.listeners = function (name) { return [] }
+
+process.binding = function (name) {
+ throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+ throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],83:[function(require,module,exports){
+module.exports = require('./lib/_stream_duplex.js');
+
+},{"./lib/_stream_duplex.js":84}],84:[function(require,module,exports){
+// a duplex stream is just a stream that is both readable and writable.
+// Since JS doesn't have multiple prototypal inheritance, this class
+// prototypally inherits from Readable, and then parasitically from
+// Writable.
+
+'use strict';
+
+/*<replacement>*/
+
+var objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) {
+ keys.push(key);
+ }return keys;
+};
+/*</replacement>*/
+
+module.exports = Duplex;
+
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+var Readable = require('./_stream_readable');
+var Writable = require('./_stream_writable');
+
+util.inherits(Duplex, Readable);
+
+var keys = objectKeys(Writable.prototype);
+for (var v = 0; v < keys.length; v++) {
+ var method = keys[v];
+ if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+}
+
+function Duplex(options) {
+ if (!(this instanceof Duplex)) return new Duplex(options);
+
+ Readable.call(this, options);
+ Writable.call(this, options);
+
+ if (options && options.readable === false) this.readable = false;
+
+ if (options && options.writable === false) this.writable = false;
+
+ this.allowHalfOpen = true;
+ if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
+
+ this.once('end', onend);
+}
+
+// the no-half-open enforcer
+function onend() {
+ // if we allow half-open state, or if the writable side ended,
+ // then we're ok.
+ if (this.allowHalfOpen || this._writableState.ended) return;
+
+ // no more data can be written.
+ // But allow more writes to happen in this tick.
+ processNextTick(onEndNT, this);
+}
+
+function onEndNT(self) {
+ self.end();
+}
+
+function forEach(xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+}
+},{"./_stream_readable":86,"./_stream_writable":88,"core-util-is":44,"inherits":66,"process-nextick-args":81}],85:[function(require,module,exports){
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+'use strict';
+
+module.exports = PassThrough;
+
+var Transform = require('./_stream_transform');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(PassThrough, Transform);
+
+function PassThrough(options) {
+ if (!(this instanceof PassThrough)) return new PassThrough(options);
+
+ Transform.call(this, options);
+}
+
+PassThrough.prototype._transform = function (chunk, encoding, cb) {
+ cb(null, chunk);
+};
+},{"./_stream_transform":87,"core-util-is":44,"inherits":66}],86:[function(require,module,exports){
+(function (process){
+'use strict';
+
+module.exports = Readable;
+
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var isArray = require('isarray');
+/*</replacement>*/
+
+/*<replacement>*/
+var Duplex;
+/*</replacement>*/
+
+Readable.ReadableState = ReadableState;
+
+/*<replacement>*/
+var EE = require('events').EventEmitter;
+
+var EElistenerCount = function (emitter, type) {
+ return emitter.listeners(type).length;
+};
+/*</replacement>*/
+
+/*<replacement>*/
+var Stream = require('./internal/streams/stream');
+/*</replacement>*/
+
+/*<replacement>*/
+var Buffer = require('safe-buffer').Buffer;
+/*</replacement>*/
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+/*<replacement>*/
+var debugUtil = require('util');
+var debug = void 0;
+if (debugUtil && debugUtil.debuglog) {
+ debug = debugUtil.debuglog('stream');
+} else {
+ debug = function () {};
+}
+/*</replacement>*/
+
+var BufferList = require('./internal/streams/BufferList');
+var StringDecoder;
+
+util.inherits(Readable, Stream);
+
+var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+
+function prependListener(emitter, event, fn) {
+ // Sadly this is not cacheable as some libraries bundle their own
+ // event emitter implementation with them.
+ if (typeof emitter.prependListener === 'function') {
+ return emitter.prependListener(event, fn);
+ } else {
+ // This is a hack to make sure that our error handler is attached before any
+ // userland ones. NEVER DO THIS. This is here only because this code needs
+ // to continue to work with older versions of Node.js that do not include
+ // the prependListener() method. The goal is to eventually remove this hack.
+ if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+ }
+}
+
+function ReadableState(options, stream) {
+ Duplex = Duplex || require('./_stream_duplex');
+
+ options = options || {};
+
+ // object stream flag. Used to make read(n) ignore n and to
+ // make all the buffer merging and length checks go away
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // the point at which it stops calling _read() to fill the buffer
+ // Note: 0 is a valid value, means "don't call _read preemptively ever"
+ var hwm = options.highWaterMark;
+ var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ // A linked list is used to store data chunks instead of an array because the
+ // linked list can remove elements from the beginning faster than
+ // array.shift()
+ this.buffer = new BufferList();
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = false;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // whenever we return null, then we set a flag to say
+ // that we're awaiting a 'readable' event emission.
+ this.needReadable = false;
+ this.emittedReadable = false;
+ this.readableListening = false;
+ this.resumeScheduled = false;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // when piping, we only care about 'readable' events that happen
+ // after read()ing all the bytes and not getting any pushback.
+ this.ranOut = false;
+
+ // the number of writers that are awaiting a drain event in .pipe()s
+ this.awaitDrain = 0;
+
+ // if true, a maybeReadMore has been scheduled
+ this.readingMore = false;
+
+ this.decoder = null;
+ this.encoding = null;
+ if (options.encoding) {
+ if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
+ this.decoder = new StringDecoder(options.encoding);
+ this.encoding = options.encoding;
+ }
+}
+
+function Readable(options) {
+ Duplex = Duplex || require('./_stream_duplex');
+
+ if (!(this instanceof Readable)) return new Readable(options);
+
+ this._readableState = new ReadableState(options, this);
+
+ // legacy
+ this.readable = true;
+
+ if (options && typeof options.read === 'function') this._read = options.read;
+
+ Stream.call(this);
+}
+
+// Manually shove something into the read() buffer.
+// This returns true if the highWaterMark has not been hit yet,
+// similar to how Writable.write() returns true if you should
+// write() some more.
+Readable.prototype.push = function (chunk, encoding) {
+ var state = this._readableState;
+
+ if (!state.objectMode && typeof chunk === 'string') {
+ encoding = encoding || state.defaultEncoding;
+ if (encoding !== state.encoding) {
+ chunk = Buffer.from(chunk, encoding);
+ encoding = '';
+ }
+ }
+
+ return readableAddChunk(this, state, chunk, encoding, false);
+};
+
+// Unshift should *always* be something directly out of read()
+Readable.prototype.unshift = function (chunk) {
+ var state = this._readableState;
+ return readableAddChunk(this, state, chunk, '', true);
+};
+
+Readable.prototype.isPaused = function () {
+ return this._readableState.flowing === false;
+};
+
+function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+ var er = chunkInvalid(state, chunk);
+ if (er) {
+ stream.emit('error', er);
+ } else if (chunk === null) {
+ state.reading = false;
+ onEofChunk(stream, state);
+ } else if (state.objectMode || chunk && chunk.length > 0) {
+ if (state.ended && !addToFront) {
+ var e = new Error('stream.push() after EOF');
+ stream.emit('error', e);
+ } else if (state.endEmitted && addToFront) {
+ var _e = new Error('stream.unshift() after end event');
+ stream.emit('error', _e);
+ } else {
+ var skipAdd;
+ if (state.decoder && !addToFront && !encoding) {
+ chunk = state.decoder.write(chunk);
+ skipAdd = !state.objectMode && chunk.length === 0;
+ }
+
+ if (!addToFront) state.reading = false;
+
+ // Don't add to the buffer if we've decoded to an empty string chunk and
+ // we're not in object mode
+ if (!skipAdd) {
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+
+ if (state.needReadable) emitReadable(stream);
+ }
+ }
+
+ maybeReadMore(stream, state);
+ }
+ } else if (!addToFront) {
+ state.reading = false;
+ }
+
+ return needMoreData(state);
+}
+
+// if it's past the high water mark, we can push in some more.
+// Also, if we have no data yet, we can stand some
+// more bytes. This is to work around cases where hwm=0,
+// such as the repl. Also, if the push() triggered a
+// readable event, and the user called read(largeNumber) such that
+// needReadable was set, then we ought to push more, so that another
+// 'readable' event will be triggered.
+function needMoreData(state) {
+ return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
+}
+
+// backwards compatibility.
+Readable.prototype.setEncoding = function (enc) {
+ if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
+ this._readableState.decoder = new StringDecoder(enc);
+ this._readableState.encoding = enc;
+ return this;
+};
+
+// Don't raise the hwm > 8MB
+var MAX_HWM = 0x800000;
+function computeNewHighWaterMark(n) {
+ if (n >= MAX_HWM) {
+ n = MAX_HWM;
+ } else {
+ // Get the next highest power of 2 to prevent increasing hwm excessively in
+ // tiny amounts
+ n--;
+ n |= n >>> 1;
+ n |= n >>> 2;
+ n |= n >>> 4;
+ n |= n >>> 8;
+ n |= n >>> 16;
+ n++;
+ }
+ return n;
+}
+
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function howMuchToRead(n, state) {
+ if (n <= 0 || state.length === 0 && state.ended) return 0;
+ if (state.objectMode) return 1;
+ if (n !== n) {
+ // Only flow one buffer at a time
+ if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
+ }
+ // If we're asking for more than the current hwm, then raise the hwm.
+ if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+ if (n <= state.length) return n;
+ // Don't have enough
+ if (!state.ended) {
+ state.needReadable = true;
+ return 0;
+ }
+ return state.length;
+}
+
+// you can override either this method, or the async _read(n) below.
+Readable.prototype.read = function (n) {
+ debug('read', n);
+ n = parseInt(n, 10);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (n !== 0) state.emittedReadable = false;
+
+ // if we're doing read(0) to trigger a readable event, but we
+ // already have a bunch of data in the buffer, then just trigger
+ // the 'readable' event and move on.
+ if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+ return null;
+ }
+
+ n = howMuchToRead(n, state);
+
+ // if we've ended, and we're now clear, then finish it up.
+ if (n === 0 && state.ended) {
+ if (state.length === 0) endReadable(this);
+ return null;
+ }
+
+ // All the actual chunk generation logic needs to be
+ // *below* the call to _read. The reason is that in certain
+ // synthetic stream cases, such as passthrough streams, _read
+ // may be a completely synchronous operation which may change
+ // the state of the read buffer, providing enough data when
+ // before there was *not* enough.
+ //
+ // So, the steps are:
+ // 1. Figure out what the state of things will be after we do
+ // a read from the buffer.
+ //
+ // 2. If that resulting state will trigger a _read, then call _read.
+ // Note that this may be asynchronous, or synchronous. Yes, it is
+ // deeply ugly to write APIs this way, but that still doesn't mean
+ // that the Readable class should behave improperly, as streams are
+ // designed to be sync/async agnostic.
+ // Take note if the _read call is sync or async (ie, if the read call
+ // has returned yet), so that we know whether or not it's safe to emit
+ // 'readable' etc.
+ //
+ // 3. Actually pull the requested chunks out of the buffer and return.
+
+ // if we need a readable event, then we need to do some reading.
+ var doRead = state.needReadable;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // however, if we've ended, then there's no point, and if we're already
+ // reading, then it's unnecessary.
+ if (state.ended || state.reading) {
+ doRead = false;
+ debug('reading or ended', doRead);
+ } else if (doRead) {
+ debug('do read');
+ state.reading = true;
+ state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0) state.needReadable = true;
+ // call internal read method
+ this._read(state.highWaterMark);
+ state.sync = false;
+ // If _read pushed data synchronously, then `reading` will be false,
+ // and we need to re-evaluate how much data we can return to the user.
+ if (!state.reading) n = howMuchToRead(nOrig, state);
+ }
+
+ var ret;
+ if (n > 0) ret = fromList(n, state);else ret = null;
+
+ if (ret === null) {
+ state.needReadable = true;
+ n = 0;
+ } else {
+ state.length -= n;
+ }
+
+ if (state.length === 0) {
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (!state.ended) state.needReadable = true;
+
+ // If we tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended) endReadable(this);
+ }
+
+ if (ret !== null) this.emit('data', ret);
+
+ return ret;
+};
+
+function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+}
+
+function onEofChunk(stream, state) {
+ if (state.ended) return;
+ if (state.decoder) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(stream);
+}
+
+// Don't emit readable right away in sync mode, because this can trigger
+// another read() call => stack overflow. This way, it might trigger
+// a nextTick recursion warning, but that's not so bad.
+function emitReadable(stream) {
+ var state = stream._readableState;
+ state.needReadable = false;
+ if (!state.emittedReadable) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
+ }
+}
+
+function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+}
+
+// at this point, the user has presumably seen the 'readable' event,
+// and called read() to consume some data. that may have triggered
+// in turn another _read(n) call, in which case reading = true if
+// it's in progress.
+// However, if we're not ended, or reading, and the length < hwm,
+// then go ahead and try to read some more preemptively.
+function maybeReadMore(stream, state) {
+ if (!state.readingMore) {
+ state.readingMore = true;
+ processNextTick(maybeReadMore_, stream, state);
+ }
+}
+
+function maybeReadMore_(stream, state) {
+ var len = state.length;
+ while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
+ debug('maybeReadMore read 0');
+ stream.read(0);
+ if (len === state.length)
+ // didn't get any data, stop spinning.
+ break;else len = state.length;
+ }
+ state.readingMore = false;
+}
+
+// abstract method. to be overridden in specific implementation classes.
+// call cb(er, data) where data is <= n in length.
+// for virtual (non-string, non-buffer) streams, "length" is somewhat
+// arbitrary, and perhaps not very meaningful.
+Readable.prototype._read = function (n) {
+ this.emit('error', new Error('_read() is not implemented'));
+};
+
+Readable.prototype.pipe = function (dest, pipeOpts) {
+ var src = this;
+ var state = this._readableState;
+
+ switch (state.pipesCount) {
+ case 0:
+ state.pipes = dest;
+ break;
+ case 1:
+ state.pipes = [state.pipes, dest];
+ break;
+ default:
+ state.pipes.push(dest);
+ break;
+ }
+ state.pipesCount += 1;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+
+ var endFn = doEnd ? onend : unpipe;
+ if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
+
+ dest.on('unpipe', onunpipe);
+ function onunpipe(readable) {
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
+ }
+
+ function onend() {
+ debug('onend');
+ dest.end();
+ }
+
+ // when the dest drains, it reduces the awaitDrain counter
+ // on the source. This would be more elegant with a .once()
+ // handler in flow(), but adding and removing repeatedly is
+ // too slow.
+ var ondrain = pipeOnDrain(src);
+ dest.on('drain', ondrain);
+
+ var cleanedUp = false;
+ function cleanup() {
+ debug('cleanup');
+ // cleanup event handlers once the pipe is broken
+ dest.removeListener('close', onclose);
+ dest.removeListener('finish', onfinish);
+ dest.removeListener('drain', ondrain);
+ dest.removeListener('error', onerror);
+ dest.removeListener('unpipe', onunpipe);
+ src.removeListener('end', onend);
+ src.removeListener('end', unpipe);
+ src.removeListener('data', ondata);
+
+ cleanedUp = true;
+
+ // if the reader is waiting for a drain event from this
+ // specific writer, then it would cause it to never start
+ // flowing again.
+ // So, if this is awaiting a drain, then we just call it now.
+ // If we don't know, then assume that we are waiting for one.
+ if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+ }
+
+ // If the user pushes more data while we're writing to dest then we'll end up
+ // in ondata again. However, we only want to increase awaitDrain once because
+ // dest will only emit one 'drain' event for the multiple writes.
+ // => Introduce a guard on increasing awaitDrain.
+ var increasedAwaitDrain = false;
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ increasedAwaitDrain = false;
+ var ret = dest.write(chunk);
+ if (false === ret && !increasedAwaitDrain) {
+ // If the user unpiped during `dest.write()`, it is possible
+ // to get stuck in a permanently paused state if that write
+ // also returned false.
+ // => Check whether `dest` is still a piping destination.
+ if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+ debug('false write response, pause', src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ increasedAwaitDrain = true;
+ }
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('onerror', er);
+ unpipe();
+ dest.removeListener('error', onerror);
+ if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
+ }
+
+ // Make sure our error handler is attached before userland ones.
+ prependListener(dest, 'error', onerror);
+
+ // Both close and finish should trigger unpipe, but only once.
+ function onclose() {
+ dest.removeListener('finish', onfinish);
+ unpipe();
+ }
+ dest.once('close', onclose);
+ function onfinish() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('unpipe');
+ src.unpipe(dest);
+ }
+
+ // tell the dest that it's being piped to
+ dest.emit('pipe', src);
+
+ // start the flow if it hasn't been started already.
+ if (!state.flowing) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+};
+
+function pipeOnDrain(src) {
+ return function () {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain) state.awaitDrain--;
+ if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+}
+
+Readable.prototype.unpipe = function (dest) {
+ var state = this._readableState;
+
+ // if we're not piping anywhere, then do nothing.
+ if (state.pipesCount === 0) return this;
+
+ // just one destination. most common case.
+ if (state.pipesCount === 1) {
+ // passed in one, but it's not the right one.
+ if (dest && dest !== state.pipes) return this;
+
+ if (!dest) dest = state.pipes;
+
+ // got a match.
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+ if (dest) dest.emit('unpipe', this);
+ return this;
+ }
+
+ // slow case. multiple pipe destinations.
+
+ if (!dest) {
+ // remove all.
+ var dests = state.pipes;
+ var len = state.pipesCount;
+ state.pipes = null;
+ state.pipesCount = 0;
+ state.flowing = false;
+
+ for (var i = 0; i < len; i++) {
+ dests[i].emit('unpipe', this);
+ }return this;
+ }
+
+ // try to find the right one.
+ var index = indexOf(state.pipes, dest);
+ if (index === -1) return this;
+
+ state.pipes.splice(index, 1);
+ state.pipesCount -= 1;
+ if (state.pipesCount === 1) state.pipes = state.pipes[0];
+
+ dest.emit('unpipe', this);
+
+ return this;
+};
+
+// set up data events if they are asked for
+// Ensure readable listeners eventually get something
+Readable.prototype.on = function (ev, fn) {
+ var res = Stream.prototype.on.call(this, ev, fn);
+
+ if (ev === 'data') {
+ // Start flowing on next tick if stream isn't explicitly paused
+ if (this._readableState.flowing !== false) this.resume();
+ } else if (ev === 'readable') {
+ var state = this._readableState;
+ if (!state.endEmitted && !state.readableListening) {
+ state.readableListening = state.needReadable = true;
+ state.emittedReadable = false;
+ if (!state.reading) {
+ processNextTick(nReadingNextTick, this);
+ } else if (state.length) {
+ emitReadable(this, state);
+ }
+ }
+ }
+
+ return res;
+};
+Readable.prototype.addListener = Readable.prototype.on;
+
+function nReadingNextTick(self) {
+ debug('readable nexttick read 0');
+ self.read(0);
+}
+
+// pause() and resume() are remnants of the legacy readable stream API
+// If the user uses them, then switch into old mode.
+Readable.prototype.resume = function () {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ resume(this, state);
+ }
+ return this;
+};
+
+function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ processNextTick(resume_, stream, state);
+ }
+}
+
+function resume_(stream, state) {
+ if (!state.reading) {
+ debug('resume read 0');
+ stream.read(0);
+ }
+
+ state.resumeScheduled = false;
+ state.awaitDrain = 0;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading) stream.read(0);
+}
+
+Readable.prototype.pause = function () {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+};
+
+function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ while (state.flowing && stream.read() !== null) {}
+}
+
+// wrap an old-style stream as the async data source.
+// This is *not* part of the readable stream interface.
+// It is an ugly unfortunate mess of history.
+Readable.prototype.wrap = function (stream) {
+ var state = this._readableState;
+ var paused = false;
+
+ var self = this;
+ stream.on('end', function () {
+ debug('wrapped end');
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) self.push(chunk);
+ }
+
+ self.push(null);
+ });
+
+ stream.on('data', function (chunk) {
+ debug('wrapped data');
+ if (state.decoder) chunk = state.decoder.write(chunk);
+
+ // don't skip over falsy values in objectMode
+ if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+
+ var ret = self.push(chunk);
+ if (!ret) {
+ paused = true;
+ stream.pause();
+ }
+ });
+
+ // proxy all the other methods.
+ // important when wrapping filters and duplexes.
+ for (var i in stream) {
+ if (this[i] === undefined && typeof stream[i] === 'function') {
+ this[i] = function (method) {
+ return function () {
+ return stream[method].apply(stream, arguments);
+ };
+ }(i);
+ }
+ }
+
+ // proxy certain important events.
+ for (var n = 0; n < kProxyEvents.length; n++) {
+ stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
+ }
+
+ // when we try to consume some more bytes, simply unpause the
+ // underlying stream.
+ self._read = function (n) {
+ debug('wrapped _read', n);
+ if (paused) {
+ paused = false;
+ stream.resume();
+ }
+ };
+
+ return self;
+};
+
+// exposed for testing purposes only.
+Readable._fromList = fromList;
+
+// Pluck off n bytes from an array of buffers.
+// Length is the combined lengths of all the buffers in the list.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function fromList(n, state) {
+ // nothing buffered
+ if (state.length === 0) return null;
+
+ var ret;
+ if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+ // read it all, truncate the list
+ if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
+ state.buffer.clear();
+ } else {
+ // read part of list
+ ret = fromListPartial(n, state.buffer, state.decoder);
+ }
+
+ return ret;
+}
+
+// Extracts only enough buffered data to satisfy the amount requested.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function fromListPartial(n, list, hasStrings) {
+ var ret;
+ if (n < list.head.data.length) {
+ // slice is the same for buffers and strings
+ ret = list.head.data.slice(0, n);
+ list.head.data = list.head.data.slice(n);
+ } else if (n === list.head.data.length) {
+ // first chunk is a perfect match
+ ret = list.shift();
+ } else {
+ // result spans more than one buffer
+ ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
+ }
+ return ret;
+}
+
+// Copies a specified amount of characters from the list of buffered data
+// chunks.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function copyFromBufferString(n, list) {
+ var p = list.head;
+ var c = 1;
+ var ret = p.data;
+ n -= ret.length;
+ while (p = p.next) {
+ var str = p.data;
+ var nb = n > str.length ? str.length : n;
+ if (nb === str.length) ret += str;else ret += str.slice(0, n);
+ n -= nb;
+ if (n === 0) {
+ if (nb === str.length) {
+ ++c;
+ if (p.next) list.head = p.next;else list.head = list.tail = null;
+ } else {
+ list.head = p;
+ p.data = str.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ list.length -= c;
+ return ret;
+}
+
+// Copies a specified amount of bytes from the list of buffered data chunks.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function copyFromBuffer(n, list) {
+ var ret = Buffer.allocUnsafe(n);
+ var p = list.head;
+ var c = 1;
+ p.data.copy(ret);
+ n -= p.data.length;
+ while (p = p.next) {
+ var buf = p.data;
+ var nb = n > buf.length ? buf.length : n;
+ buf.copy(ret, ret.length - n, 0, nb);
+ n -= nb;
+ if (n === 0) {
+ if (nb === buf.length) {
+ ++c;
+ if (p.next) list.head = p.next;else list.head = list.tail = null;
+ } else {
+ list.head = p;
+ p.data = buf.slice(nb);
+ }
+ break;
+ }
+ ++c;
+ }
+ list.length -= c;
+ return ret;
+}
+
+function endReadable(stream) {
+ var state = stream._readableState;
+
+ // If we get here before consuming all the bytes, then that is a
+ // bug in node. Should never happen.
+ if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
+
+ if (!state.endEmitted) {
+ state.ended = true;
+ processNextTick(endReadableNT, state, stream);
+ }
+}
+
+function endReadableNT(state, stream) {
+ // Check that we didn't get one last unshift.
+ if (!state.endEmitted && state.length === 0) {
+ state.endEmitted = true;
+ stream.readable = false;
+ stream.emit('end');
+ }
+}
+
+function forEach(xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+}
+
+function indexOf(xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+}
+}).call(this,require('_process'))
+},{"./_stream_duplex":84,"./internal/streams/BufferList":89,"./internal/streams/stream":90,"_process":82,"core-util-is":44,"events":62,"inherits":66,"isarray":68,"process-nextick-args":81,"safe-buffer":95,"string_decoder/":97,"util":40}],87:[function(require,module,exports){
+// a transform stream is a readable/writable stream where you do
+// something with the data. Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored. (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation. For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes. When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up. When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer. When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks. If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk. However,
+// a pathological inflate type of transform can cause excessive buffering
+// here. For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output. In this case, you could write a very small
+// amount of input, and end up with a very large amount of output. In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform. A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
+
+'use strict';
+
+module.exports = Transform;
+
+var Duplex = require('./_stream_duplex');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(Transform, Duplex);
+
+function TransformState(stream) {
+ this.afterTransform = function (er, data) {
+ return afterTransform(stream, er, data);
+ };
+
+ this.needTransform = false;
+ this.transforming = false;
+ this.writecb = null;
+ this.writechunk = null;
+ this.writeencoding = null;
+}
+
+function afterTransform(stream, er, data) {
+ var ts = stream._transformState;
+ ts.transforming = false;
+
+ var cb = ts.writecb;
+
+ if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
+
+ ts.writechunk = null;
+ ts.writecb = null;
+
+ if (data !== null && data !== undefined) stream.push(data);
+
+ cb(er);
+
+ var rs = stream._readableState;
+ rs.reading = false;
+ if (rs.needReadable || rs.length < rs.highWaterMark) {
+ stream._read(rs.highWaterMark);
+ }
+}
+
+function Transform(options) {
+ if (!(this instanceof Transform)) return new Transform(options);
+
+ Duplex.call(this, options);
+
+ this._transformState = new TransformState(this);
+
+ var stream = this;
+
+ // start out asking for a readable event once data is transformed.
+ this._readableState.needReadable = true;
+
+ // we have implemented the _read method, and done the other things
+ // that Readable wants before the first _read call, so unset the
+ // sync guard flag.
+ this._readableState.sync = false;
+
+ if (options) {
+ if (typeof options.transform === 'function') this._transform = options.transform;
+
+ if (typeof options.flush === 'function') this._flush = options.flush;
+ }
+
+ // When the writable side finishes, then flush out anything remaining.
+ this.once('prefinish', function () {
+ if (typeof this._flush === 'function') this._flush(function (er, data) {
+ done(stream, er, data);
+ });else done(stream);
+ });
+}
+
+Transform.prototype.push = function (chunk, encoding) {
+ this._transformState.needTransform = false;
+ return Duplex.prototype.push.call(this, chunk, encoding);
+};
+
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side. You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk. If you pass
+// an error, then that'll put the hurt on the whole operation. If you
+// never call cb(), then you'll never get another chunk.
+Transform.prototype._transform = function (chunk, encoding, cb) {
+ throw new Error('_transform() is not implemented');
+};
+
+Transform.prototype._write = function (chunk, encoding, cb) {
+ var ts = this._transformState;
+ ts.writecb = cb;
+ ts.writechunk = chunk;
+ ts.writeencoding = encoding;
+ if (!ts.transforming) {
+ var rs = this._readableState;
+ if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+ }
+};
+
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform.prototype._read = function (n) {
+ var ts = this._transformState;
+
+ if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+ ts.transforming = true;
+ this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+ } else {
+ // mark that we need a transform, so that any data that comes in
+ // will get processed, now that we've asked for it.
+ ts.needTransform = true;
+ }
+};
+
+function done(stream, er, data) {
+ if (er) return stream.emit('error', er);
+
+ if (data !== null && data !== undefined) stream.push(data);
+
+ // if there's nothing in the write buffer, then that means
+ // that nothing more will ever be provided
+ var ws = stream._writableState;
+ var ts = stream._transformState;
+
+ if (ws.length) throw new Error('Calling transform done when ws.length != 0');
+
+ if (ts.transforming) throw new Error('Calling transform done when still transforming');
+
+ return stream.push(null);
+}
+},{"./_stream_duplex":84,"core-util-is":44,"inherits":66}],88:[function(require,module,exports){
+(function (process){
+// A bit simpler than readable streams.
+// Implement an async ._write(chunk, encoding, cb), and it'll handle all
+// the drain event emission and buffering.
+
+'use strict';
+
+module.exports = Writable;
+
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
+/*</replacement>*/
+
+/*<replacement>*/
+var Duplex;
+/*</replacement>*/
+
+Writable.WritableState = WritableState;
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+/*<replacement>*/
+var internalUtil = {
+ deprecate: require('util-deprecate')
+};
+/*</replacement>*/
+
+/*<replacement>*/
+var Stream = require('./internal/streams/stream');
+/*</replacement>*/
+
+/*<replacement>*/
+var Buffer = require('safe-buffer').Buffer;
+/*</replacement>*/
+
+util.inherits(Writable, Stream);
+
+function nop() {}
+
+function WriteReq(chunk, encoding, cb) {
+ this.chunk = chunk;
+ this.encoding = encoding;
+ this.callback = cb;
+ this.next = null;
+}
+
+function WritableState(options, stream) {
+ Duplex = Duplex || require('./_stream_duplex');
+
+ options = options || {};
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // the point at which write() starts returning false
+ // Note: 0 is a valid value, means that we always return false if
+ // the entire buffer is not flushed immediately on write()
+ var hwm = options.highWaterMark;
+ var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ // drain event flag.
+ this.needDrain = false;
+ // at the start of calling end()
+ this.ending = false;
+ // when end() has been called, and returned
+ this.ended = false;
+ // when 'finish' is emitted
+ this.finished = false;
+
+ // should we decode strings into buffers before passing to _write?
+ // this is here so that some node-core streams can optimize string
+ // handling at a lower level.
+ var noDecode = options.decodeStrings === false;
+ this.decodeStrings = !noDecode;
+
+ // Crypto is kind of old and crusty. Historically, its default string
+ // encoding is 'binary' so we have to make this configurable.
+ // Everything else in the universe uses 'utf8', though.
+ this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+ // not an actual buffer we keep track of, but a measurement
+ // of how much we're waiting to get pushed to some underlying
+ // socket or file.
+ this.length = 0;
+
+ // a flag to see when we're in the middle of a write.
+ this.writing = false;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // a flag to be able to tell if the onwrite cb is called immediately,
+ // or on a later tick. We set this to true at first, because any
+ // actions that shouldn't happen until "later" should generally also
+ // not happen before the first write call.
+ this.sync = true;
+
+ // a flag to know if we're processing previously buffered items, which
+ // may call the _write() callback in the same tick, so that we don't
+ // end up in an overlapped onwrite situation.
+ this.bufferProcessing = false;
+
+ // the callback that's passed to _write(chunk,cb)
+ this.onwrite = function (er) {
+ onwrite(stream, er);
+ };
+
+ // the callback that the user supplies to write(chunk,encoding,cb)
+ this.writecb = null;
+
+ // the amount that is being written when _write is called.
+ this.writelen = 0;
+
+ this.bufferedRequest = null;
+ this.lastBufferedRequest = null;
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+
+ // count buffered requests
+ this.bufferedRequestCount = 0;
+
+ // allocate the first CorkedRequest, there is always
+ // one allocated and free to use, and we maintain at most two
+ this.corkedRequestsFree = new CorkedRequest(this);
+}
+
+WritableState.prototype.getBuffer = function getBuffer() {
+ var current = this.bufferedRequest;
+ var out = [];
+ while (current) {
+ out.push(current);
+ current = current.next;
+ }
+ return out;
+};
+
+(function () {
+ try {
+ Object.defineProperty(WritableState.prototype, 'buffer', {
+ get: internalUtil.deprecate(function () {
+ return this.getBuffer();
+ }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
+ });
+ } catch (_) {}
+})();
+
+// Test _writableState for inheritance to account for Duplex streams,
+// whose prototype chain only points to Readable.
+var realHasInstance;
+if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+ realHasInstance = Function.prototype[Symbol.hasInstance];
+ Object.defineProperty(Writable, Symbol.hasInstance, {
+ value: function (object) {
+ if (realHasInstance.call(this, object)) return true;
+
+ return object && object._writableState instanceof WritableState;
+ }
+ });
+} else {
+ realHasInstance = function (object) {
+ return object instanceof this;
+ };
+}
+
+function Writable(options) {
+ Duplex = Duplex || require('./_stream_duplex');
+
+ // Writable ctor is applied to Duplexes, too.
+ // `realHasInstance` is necessary because using plain `instanceof`
+ // would return false, as no `_writableState` property is attached.
+
+ // Trying to use the custom `instanceof` for Writable here will also break the
+ // Node.js LazyTransform implementation, which has a non-trivial getter for
+ // `_writableState` that would lead to infinite recursion.
+ if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
+ return new Writable(options);
+ }
+
+ this._writableState = new WritableState(options, this);
+
+ // legacy.
+ this.writable = true;
+
+ if (options) {
+ if (typeof options.write === 'function') this._write = options.write;
+
+ if (typeof options.writev === 'function') this._writev = options.writev;
+ }
+
+ Stream.call(this);
+}
+
+// Otherwise people can pipe Writable streams, which is just wrong.
+Writable.prototype.pipe = function () {
+ this.emit('error', new Error('Cannot pipe, not readable'));
+};
+
+function writeAfterEnd(stream, cb) {
+ var er = new Error('write after end');
+ // TODO: defer error events consistently everywhere, not just the cb
+ stream.emit('error', er);
+ processNextTick(cb, er);
+}
+
+// Checks that a user-supplied chunk is valid, especially for the particular
+// mode the stream is in. Currently this means that `null` is never accepted
+// and undefined/non-string values are only allowed in object mode.
+function validChunk(stream, state, chunk, cb) {
+ var valid = true;
+ var er = false;
+
+ if (chunk === null) {
+ er = new TypeError('May not write null values to stream');
+ } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ if (er) {
+ stream.emit('error', er);
+ processNextTick(cb, er);
+ valid = false;
+ }
+ return valid;
+}
+
+Writable.prototype.write = function (chunk, encoding, cb) {
+ var state = this._writableState;
+ var ret = false;
+ var isBuf = Buffer.isBuffer(chunk);
+
+ if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+
+ if (typeof cb !== 'function') cb = nop;
+
+ if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+ }
+
+ return ret;
+};
+
+Writable.prototype.cork = function () {
+ var state = this._writableState;
+
+ state.corked++;
+};
+
+Writable.prototype.uncork = function () {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+ }
+};
+
+Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+ // node::ParseEncoding() requires lower case.
+ if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+ if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
+ this._writableState.defaultEncoding = encoding;
+ return this;
+};
+
+function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+ chunk = Buffer.from(chunk, encoding);
+ }
+ return chunk;
+}
+
+// if we're already writing something, then just put this
+// in the queue, and wait our turn. Otherwise, call _write
+// If we return false, then we need a drain event, so set that flag.
+function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+ if (!isBuf) {
+ chunk = decodeChunk(state, chunk, encoding);
+ if (Buffer.isBuffer(chunk)) encoding = 'buffer';
+ }
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret) state.needDrain = true;
+
+ if (state.writing || state.corked) {
+ var last = state.lastBufferedRequest;
+ state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
+ if (last) {
+ last.next = state.lastBufferedRequest;
+ } else {
+ state.bufferedRequest = state.lastBufferedRequest;
+ }
+ state.bufferedRequestCount += 1;
+ } else {
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ }
+
+ return ret;
+}
+
+function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+}
+
+function onwriteError(stream, state, sync, er, cb) {
+ --state.pendingcb;
+ if (sync) processNextTick(cb, er);else cb(er);
+
+ stream._writableState.errorEmitted = true;
+ stream.emit('error', er);
+}
+
+function onwriteStateUpdate(state) {
+ state.writing = false;
+ state.writecb = null;
+ state.length -= state.writelen;
+ state.writelen = 0;
+}
+
+function onwrite(stream, er) {
+ var state = stream._writableState;
+ var sync = state.sync;
+ var cb = state.writecb;
+
+ onwriteStateUpdate(state);
+
+ if (er) onwriteError(stream, state, sync, er, cb);else {
+ // Check if we're actually ready to finish, but don't emit yet
+ var finished = needFinish(state);
+
+ if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+ clearBuffer(stream, state);
+ }
+
+ if (sync) {
+ /*<replacement>*/
+ asyncWrite(afterWrite, stream, state, finished, cb);
+ /*</replacement>*/
+ } else {
+ afterWrite(stream, state, finished, cb);
+ }
+ }
+}
+
+function afterWrite(stream, state, finished, cb) {
+ if (!finished) onwriteDrain(stream, state);
+ state.pendingcb--;
+ cb();
+ finishMaybe(stream, state);
+}
+
+// Must force callback to be called on nextTick, so that we don't
+// emit 'drain' before the write() consumer gets the 'false' return
+// value, and has a chance to attach a 'drain' listener.
+function onwriteDrain(stream, state) {
+ if (state.length === 0 && state.needDrain) {
+ state.needDrain = false;
+ stream.emit('drain');
+ }
+}
+
+// if there's something in the buffer waiting, then process it
+function clearBuffer(stream, state) {
+ state.bufferProcessing = true;
+ var entry = state.bufferedRequest;
+
+ if (stream._writev && entry && entry.next) {
+ // Fast case, write everything using _writev()
+ var l = state.bufferedRequestCount;
+ var buffer = new Array(l);
+ var holder = state.corkedRequestsFree;
+ holder.entry = entry;
+
+ var count = 0;
+ while (entry) {
+ buffer[count] = entry;
+ entry = entry.next;
+ count += 1;
+ }
+
+ doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+
+ // doWrite is almost always async, defer these to save a bit of time
+ // as the hot path ends with doWrite
+ state.pendingcb++;
+ state.lastBufferedRequest = null;
+ if (holder.next) {
+ state.corkedRequestsFree = holder.next;
+ holder.next = null;
+ } else {
+ state.corkedRequestsFree = new CorkedRequest(state);
+ }
+ } else {
+ // Slow case, write chunks one-by-one
+ while (entry) {
+ var chunk = entry.chunk;
+ var encoding = entry.encoding;
+ var cb = entry.callback;
+ var len = state.objectMode ? 1 : chunk.length;
+
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+ entry = entry.next;
+ // if we didn't call the onwrite immediately, then
+ // it means that we need to wait until it does.
+ // also, that means that the chunk and cb are currently
+ // being processed, so move the buffer counter past them.
+ if (state.writing) {
+ break;
+ }
+ }
+
+ if (entry === null) state.lastBufferedRequest = null;
+ }
+
+ state.bufferedRequestCount = 0;
+ state.bufferedRequest = entry;
+ state.bufferProcessing = false;
+}
+
+Writable.prototype._write = function (chunk, encoding, cb) {
+ cb(new Error('_write() is not implemented'));
+};
+
+Writable.prototype._writev = null;
+
+Writable.prototype.end = function (chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (typeof chunk === 'function') {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (typeof encoding === 'function') {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // ignore unnecessary end() calls.
+ if (!state.ending && !state.finished) endWritable(this, state, cb);
+};
+
+function needFinish(state) {
+ return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+}
+
+function prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+}
+
+function finishMaybe(stream, state) {
+ var need = needFinish(state);
+ if (need) {
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else {
+ prefinish(stream, state);
+ }
+ }
+ return need;
+}
+
+function endWritable(stream, state, cb) {
+ state.ending = true;
+ finishMaybe(stream, state);
+ if (cb) {
+ if (state.finished) processNextTick(cb);else stream.once('finish', cb);
+ }
+ state.ended = true;
+ stream.writable = false;
+}
+
+// It seems a linked list but it is not
+// there will be only 2 of these for each stream
+function CorkedRequest(state) {
+ var _this = this;
+
+ this.next = null;
+ this.entry = null;
+ this.finish = function (err) {
+ var entry = _this.entry;
+ _this.entry = null;
+ while (entry) {
+ var cb = entry.callback;
+ state.pendingcb--;
+ cb(err);
+ entry = entry.next;
+ }
+ if (state.corkedRequestsFree) {
+ state.corkedRequestsFree.next = _this;
+ } else {
+ state.corkedRequestsFree = _this;
+ }
+ };
+}
+}).call(this,require('_process'))
+},{"./_stream_duplex":84,"./internal/streams/stream":90,"_process":82,"core-util-is":44,"inherits":66,"process-nextick-args":81,"safe-buffer":95,"util-deprecate":99}],89:[function(require,module,exports){
+'use strict';
+
+/*<replacement>*/
+
+var Buffer = require('safe-buffer').Buffer;
+/*</replacement>*/
+
+module.exports = BufferList;
+
+function BufferList() {
+ this.head = null;
+ this.tail = null;
+ this.length = 0;
+}
+
+BufferList.prototype.push = function (v) {
+ var entry = { data: v, next: null };
+ if (this.length > 0) this.tail.next = entry;else this.head = entry;
+ this.tail = entry;
+ ++this.length;
+};
+
+BufferList.prototype.unshift = function (v) {
+ var entry = { data: v, next: this.head };
+ if (this.length === 0) this.tail = entry;
+ this.head = entry;
+ ++this.length;
+};
+
+BufferList.prototype.shift = function () {
+ if (this.length === 0) return;
+ var ret = this.head.data;
+ if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+ --this.length;
+ return ret;
+};
+
+BufferList.prototype.clear = function () {
+ this.head = this.tail = null;
+ this.length = 0;
+};
+
+BufferList.prototype.join = function (s) {
+ if (this.length === 0) return '';
+ var p = this.head;
+ var ret = '' + p.data;
+ while (p = p.next) {
+ ret += s + p.data;
+ }return ret;
+};
+
+BufferList.prototype.concat = function (n) {
+ if (this.length === 0) return Buffer.alloc(0);
+ if (this.length === 1) return this.head.data;
+ var ret = Buffer.allocUnsafe(n >>> 0);
+ var p = this.head;
+ var i = 0;
+ while (p) {
+ p.data.copy(ret, i);
+ i += p.data.length;
+ p = p.next;
+ }
+ return ret;
+};
+},{"safe-buffer":95}],90:[function(require,module,exports){
+module.exports = require('events').EventEmitter;
+
+},{"events":62}],91:[function(require,module,exports){
+module.exports = require('./readable').PassThrough
+
+},{"./readable":92}],92:[function(require,module,exports){
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = exports;
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
+
+},{"./lib/_stream_duplex.js":84,"./lib/_stream_passthrough.js":85,"./lib/_stream_readable.js":86,"./lib/_stream_transform.js":87,"./lib/_stream_writable.js":88}],93:[function(require,module,exports){
+module.exports = require('./readable').Transform
+
+},{"./readable":92}],94:[function(require,module,exports){
+module.exports = require('./lib/_stream_writable.js');
+
+},{"./lib/_stream_writable.js":88}],95:[function(require,module,exports){
+module.exports = require('buffer')
+
+},{"buffer":43}],96:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+module.exports = Stream;
+
+var EE = require('events').EventEmitter;
+var inherits = require('inherits');
+
+inherits(Stream, EE);
+Stream.Readable = require('readable-stream/readable.js');
+Stream.Writable = require('readable-stream/writable.js');
+Stream.Duplex = require('readable-stream/duplex.js');
+Stream.Transform = require('readable-stream/transform.js');
+Stream.PassThrough = require('readable-stream/passthrough.js');
+
+// Backwards-compat with node 0.4.x
+Stream.Stream = Stream;
+
+
+
+// old-style streams. Note that the pipe method (the only relevant
+// part of this class) is overridden in the Readable class.
+
+function Stream() {
+ EE.call(this);
+}
+
+Stream.prototype.pipe = function(dest, options) {
+ var source = this;
+
+ function ondata(chunk) {
+ if (dest.writable) {
+ if (false === dest.write(chunk) && source.pause) {
+ source.pause();
+ }
+ }
+ }
+
+ source.on('data', ondata);
+
+ function ondrain() {
+ if (source.readable && source.resume) {
+ source.resume();
+ }
+ }
+
+ dest.on('drain', ondrain);
+
+ // If the 'end' option is not supplied, dest.end() will be called when
+ // source gets the 'end' or 'close' events. Only dest.end() once.
+ if (!dest._isStdio && (!options || options.end !== false)) {
+ source.on('end', onend);
+ source.on('close', onclose);
+ }
+
+ var didOnEnd = false;
+ function onend() {
+ if (didOnEnd) return;
+ didOnEnd = true;
+
+ dest.end();
+ }
+
+
+ function onclose() {
+ if (didOnEnd) return;
+ didOnEnd = true;
+
+ if (typeof dest.destroy === 'function') dest.destroy();
+ }
+
+ // don't leave dangling pipes when there are errors.
+ function onerror(er) {
+ cleanup();
+ if (EE.listenerCount(this, 'error') === 0) {
+ throw er; // Unhandled stream error in pipe.
+ }
+ }
+
+ source.on('error', onerror);
+ dest.on('error', onerror);
+
+ // remove all the event listeners that were added.
+ function cleanup() {
+ source.removeListener('data', ondata);
+ dest.removeListener('drain', ondrain);
+
+ source.removeListener('end', onend);
+ source.removeListener('close', onclose);
+
+ source.removeListener('error', onerror);
+ dest.removeListener('error', onerror);
+
+ source.removeListener('end', cleanup);
+ source.removeListener('close', cleanup);
+
+ dest.removeListener('close', cleanup);
+ }
+
+ source.on('end', cleanup);
+ source.on('close', cleanup);
+
+ dest.on('close', cleanup);
+
+ dest.emit('pipe', source);
+
+ // Allow for unix-like usage: A.pipe(B).pipe(C)
+ return dest;
+};
+
+},{"events":62,"inherits":66,"readable-stream/duplex.js":83,"readable-stream/passthrough.js":91,"readable-stream/readable.js":92,"readable-stream/transform.js":93,"readable-stream/writable.js":94}],97:[function(require,module,exports){
+'use strict';
+
+var Buffer = require('safe-buffer').Buffer;
+
+var isEncoding = Buffer.isEncoding || function (encoding) {
+ encoding = '' + encoding;
+ switch (encoding && encoding.toLowerCase()) {
+ case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
+ return true;
+ default:
+ return false;
+ }
+};
+
+function _normalizeEncoding(enc) {
+ if (!enc) return 'utf8';
+ var retried;
+ while (true) {
+ switch (enc) {
+ case 'utf8':
+ case 'utf-8':
+ return 'utf8';
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return 'utf16le';
+ case 'latin1':
+ case 'binary':
+ return 'latin1';
+ case 'base64':
+ case 'ascii':
+ case 'hex':
+ return enc;
+ default:
+ if (retried) return; // undefined
+ enc = ('' + enc).toLowerCase();
+ retried = true;
+ }
+ }
+};
+
+// Do not cache `Buffer.isEncoding` when checking encoding names as some
+// modules monkey-patch it to support additional encodings
+function normalizeEncoding(enc) {
+ var nenc = _normalizeEncoding(enc);
+ if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+ return nenc || enc;
+}
+
+// StringDecoder provides an interface for efficiently splitting a series of
+// buffers into a series of JS strings without breaking apart multi-byte
+// characters.
+exports.StringDecoder = StringDecoder;
+function StringDecoder(encoding) {
+ this.encoding = normalizeEncoding(encoding);
+ var nb;
+ switch (this.encoding) {
+ case 'utf16le':
+ this.text = utf16Text;
+ this.end = utf16End;
+ nb = 4;
+ break;
+ case 'utf8':
+ this.fillLast = utf8FillLast;
+ nb = 4;
+ break;
+ case 'base64':
+ this.text = base64Text;
+ this.end = base64End;
+ nb = 3;
+ break;
+ default:
+ this.write = simpleWrite;
+ this.end = simpleEnd;
+ return;
+ }
+ this.lastNeed = 0;
+ this.lastTotal = 0;
+ this.lastChar = Buffer.allocUnsafe(nb);
+}
+
+StringDecoder.prototype.write = function (buf) {
+ if (buf.length === 0) return '';
+ var r;
+ var i;
+ if (this.lastNeed) {
+ r = this.fillLast(buf);
+ if (r === undefined) return '';
+ i = this.lastNeed;
+ this.lastNeed = 0;
+ } else {
+ i = 0;
+ }
+ if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+ return r || '';
+};
+
+StringDecoder.prototype.end = utf8End;
+
+// Returns only complete characters in a Buffer
+StringDecoder.prototype.text = utf8Text;
+
+// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+StringDecoder.prototype.fillLast = function (buf) {
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+ this.lastNeed -= buf.length;
+};
+
+// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+// continuation byte.
+function utf8CheckByte(byte) {
+ if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+ return -1;
+}
+
+// Checks at most 3 bytes at the end of a Buffer in order to detect an
+// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+// needed to complete the UTF-8 character (if applicable) are returned.
+function utf8CheckIncomplete(self, buf, i) {
+ var j = buf.length - 1;
+ if (j < i) return 0;
+ var nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 1;
+ return nb;
+ }
+ if (--j < i) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) self.lastNeed = nb - 2;
+ return nb;
+ }
+ if (--j < i) return 0;
+ nb = utf8CheckByte(buf[j]);
+ if (nb >= 0) {
+ if (nb > 0) {
+ if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+ }
+ return nb;
+ }
+ return 0;
+}
+
+// Validates as many continuation bytes for a multi-byte UTF-8 character as
+// needed or are available. If we see a non-continuation byte where we expect
+// one, we "replace" the validated continuation bytes we've seen so far with
+// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
+// behavior. The continuation byte check is included three times in the case
+// where all of the continuation bytes for a character exist in the same buffer.
+// It is also done this way as a slight performance increase instead of using a
+// loop.
+function utf8CheckExtraBytes(self, buf, p) {
+ if ((buf[0] & 0xC0) !== 0x80) {
+ self.lastNeed = 0;
+ return '\ufffd'.repeat(p);
+ }
+ if (self.lastNeed > 1 && buf.length > 1) {
+ if ((buf[1] & 0xC0) !== 0x80) {
+ self.lastNeed = 1;
+ return '\ufffd'.repeat(p + 1);
+ }
+ if (self.lastNeed > 2 && buf.length > 2) {
+ if ((buf[2] & 0xC0) !== 0x80) {
+ self.lastNeed = 2;
+ return '\ufffd'.repeat(p + 2);
+ }
+ }
+ }
+}
+
+// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+function utf8FillLast(buf) {
+ var p = this.lastTotal - this.lastNeed;
+ var r = utf8CheckExtraBytes(this, buf, p);
+ if (r !== undefined) return r;
+ if (this.lastNeed <= buf.length) {
+ buf.copy(this.lastChar, p, 0, this.lastNeed);
+ return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+ }
+ buf.copy(this.lastChar, p, 0, buf.length);
+ this.lastNeed -= buf.length;
+}
+
+// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+// partial character, the character's bytes are buffered until the required
+// number of bytes are available.
+function utf8Text(buf, i) {
+ var total = utf8CheckIncomplete(this, buf, i);
+ if (!this.lastNeed) return buf.toString('utf8', i);
+ this.lastTotal = total;
+ var end = buf.length - (total - this.lastNeed);
+ buf.copy(this.lastChar, 0, end);
+ return buf.toString('utf8', i, end);
+}
+
+// For UTF-8, a replacement character for each buffered byte of a (partial)
+// character needs to be added to the output.
+function utf8End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
+ return r;
+}
+
+// UTF-16LE typically needs two bytes per character, but even if we have an even
+// number of bytes available, we need to check if we end on a leading/high
+// surrogate. In that case, we need to wait for the next two bytes in order to
+// decode the last character properly.
+function utf16Text(buf, i) {
+ if ((buf.length - i) % 2 === 0) {
+ var r = buf.toString('utf16le', i);
+ if (r) {
+ var c = r.charCodeAt(r.length - 1);
+ if (c >= 0xD800 && c <= 0xDBFF) {
+ this.lastNeed = 2;
+ this.lastTotal = 4;
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ return r.slice(0, -1);
+ }
+ }
+ return r;
+ }
+ this.lastNeed = 1;
+ this.lastTotal = 2;
+ this.lastChar[0] = buf[buf.length - 1];
+ return buf.toString('utf16le', i, buf.length - 1);
+}
+
+// For UTF-16LE we do not explicitly append special replacement characters if we
+// end on a partial character, we simply let v8 handle that.
+function utf16End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) {
+ var end = this.lastTotal - this.lastNeed;
+ return r + this.lastChar.toString('utf16le', 0, end);
+ }
+ return r;
+}
+
+function base64Text(buf, i) {
+ var n = (buf.length - i) % 3;
+ if (n === 0) return buf.toString('base64', i);
+ this.lastNeed = 3 - n;
+ this.lastTotal = 3;
+ if (n === 1) {
+ this.lastChar[0] = buf[buf.length - 1];
+ } else {
+ this.lastChar[0] = buf[buf.length - 2];
+ this.lastChar[1] = buf[buf.length - 1];
+ }
+ return buf.toString('base64', i, buf.length - n);
+}
+
+function base64End(buf) {
+ var r = buf && buf.length ? this.write(buf) : '';
+ if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+ return r;
+}
+
+// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+function simpleWrite(buf) {
+ return buf.toString(this.encoding);
+}
+
+function simpleEnd(buf) {
+ return buf && buf.length ? this.write(buf) : '';
+}
+},{"safe-buffer":98}],98:[function(require,module,exports){
+/* eslint-disable node/no-deprecated-api */
+var buffer = require('buffer')
+var Buffer = buffer.Buffer
+
+// alternative to using Object.keys for old browsers
+function copyProps (src, dst) {
+ for (var key in src) {
+ dst[key] = src[key]
+ }
+}
+if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
+ module.exports = buffer
+} else {
+ // Copy properties from require('buffer')
+ copyProps(buffer, exports)
+ exports.Buffer = SafeBuffer
+}
+
+function SafeBuffer (arg, encodingOrOffset, length) {
+ return Buffer(arg, encodingOrOffset, length)
+}
+
+// Copy static methods from Buffer
+copyProps(Buffer, SafeBuffer)
+
+SafeBuffer.from = function (arg, encodingOrOffset, length) {
+ if (typeof arg === 'number') {
+ throw new TypeError('Argument must not be a number')
+ }
+ return Buffer(arg, encodingOrOffset, length)
+}
+
+SafeBuffer.alloc = function (size, fill, encoding) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ var buf = Buffer(size)
+ if (fill !== undefined) {
+ if (typeof encoding === 'string') {
+ buf.fill(fill, encoding)
+ } else {
+ buf.fill(fill)
+ }
+ } else {
+ buf.fill(0)
+ }
+ return buf
+}
+
+SafeBuffer.allocUnsafe = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return Buffer(size)
+}
+
+SafeBuffer.allocUnsafeSlow = function (size) {
+ if (typeof size !== 'number') {
+ throw new TypeError('Argument must be a number')
+ }
+ return buffer.SlowBuffer(size)
+}
+
+},{"buffer":43}],99:[function(require,module,exports){
+(function (global){
+
+/**
+ * Module exports.
+ */
+
+module.exports = deprecate;
+
+/**
+ * Mark that a method should not be used.
+ * Returns a modified function which warns once by default.
+ *
+ * If `localStorage.noDeprecation = true` is set, then it is a no-op.
+ *
+ * If `localStorage.throwDeprecation = true` is set, then deprecated functions
+ * will throw an Error when invoked.
+ *
+ * If `localStorage.traceDeprecation = true` is set, then deprecated functions
+ * will invoke `console.trace()` instead of `console.error()`.
+ *
+ * @param {Function} fn - the function to deprecate
+ * @param {String} msg - the string to print to the console when `fn` is invoked
+ * @returns {Function} a new "deprecated" version of `fn`
+ * @api public
+ */
+
+function deprecate (fn, msg) {
+ if (config('noDeprecation')) {
+ return fn;
+ }
+
+ var warned = false;
+ function deprecated() {
+ if (!warned) {
+ if (config('throwDeprecation')) {
+ throw new Error(msg);
+ } else if (config('traceDeprecation')) {
+ console.trace(msg);
+ } else {
+ console.warn(msg);
+ }
+ warned = true;
+ }
+ return fn.apply(this, arguments);
+ }
+
+ return deprecated;
+}
+
+/**
+ * Checks `localStorage` for boolean values for the given `name`.
+ *
+ * @param {String} name
+ * @returns {Boolean}
+ * @api private
+ */
+
+function config (name) {
+ // accessing global.localStorage can trigger a DOMException in sandboxed iframes
+ try {
+ if (!global.localStorage) return false;
+ } catch (_) {
+ return false;
+ }
+ var val = global.localStorage[name];
+ if (null == val) return false;
+ return String(val).toLowerCase() === 'true';
+}
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],100:[function(require,module,exports){
+arguments[4][66][0].apply(exports,arguments)
+},{"dup":66}],101:[function(require,module,exports){
+module.exports = function isBuffer(arg) {
+ return arg && typeof arg === 'object'
+ && typeof arg.copy === 'function'
+ && typeof arg.fill === 'function'
+ && typeof arg.readUInt8 === 'function';
+}
+},{}],102:[function(require,module,exports){
+(function (process,global){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var formatRegExp = /%[sdj%]/g;
+exports.format = function(f) {
+ if (!isString(f)) {
+ var objects = [];
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var len = args.length;
+ var str = String(f).replace(formatRegExp, function(x) {
+ if (x === '%%') return '%';
+ if (i >= len) return x;
+ switch (x) {
+ case '%s': return String(args[i++]);
+ case '%d': return Number(args[i++]);
+ case '%j':
+ try {
+ return JSON.stringify(args[i++]);
+ } catch (_) {
+ return '[Circular]';
+ }
+ default:
+ return x;
+ }
+ });
+ for (var x = args[i]; i < len; x = args[++i]) {
+ if (isNull(x) || !isObject(x)) {
+ str += ' ' + x;
+ } else {
+ str += ' ' + inspect(x);
+ }
+ }
+ return str;
+};
+
+
+// Mark that a method should not be used.
+// Returns a modified function which warns once by default.
+// If --no-deprecation is set, then it is a no-op.
+exports.deprecate = function(fn, msg) {
+ // Allow for deprecating things in the process of starting up.
+ if (isUndefined(global.process)) {
+ return function() {
+ return exports.deprecate(fn, msg).apply(this, arguments);
+ };
+ }
+
+ if (process.noDeprecation === true) {
+ return fn;
+ }
+
+ var warned = false;
+ function deprecated() {
+ if (!warned) {
+ if (process.throwDeprecation) {
+ throw new Error(msg);
+ } else if (process.traceDeprecation) {
+ console.trace(msg);
+ } else {
+ console.error(msg);
+ }
+ warned = true;
+ }
+ return fn.apply(this, arguments);
+ }
+
+ return deprecated;
+};
+
+
+var debugs = {};
+var debugEnviron;
+exports.debuglog = function(set) {
+ if (isUndefined(debugEnviron))
+ debugEnviron = process.env.NODE_DEBUG || '';
+ set = set.toUpperCase();
+ if (!debugs[set]) {
+ if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
+ var pid = process.pid;
+ debugs[set] = function() {
+ var msg = exports.format.apply(exports, arguments);
+ console.error('%s %d: %s', set, pid, msg);
+ };
+ } else {
+ debugs[set] = function() {};
+ }
+ }
+ return debugs[set];
+};
+
+
+/**
+ * Echos the value of a value. Trys to print the value out
+ * in the best way possible given the different types.
+ *
+ * @param {Object} obj The object to print out.
+ * @param {Object} opts Optional options object that alters the output.
+ */
+/* legacy: obj, showHidden, depth, colors*/
+function inspect(obj, opts) {
+ // default options
+ var ctx = {
+ seen: [],
+ stylize: stylizeNoColor
+ };
+ // legacy...
+ if (arguments.length >= 3) ctx.depth = arguments[2];
+ if (arguments.length >= 4) ctx.colors = arguments[3];
+ if (isBoolean(opts)) {
+ // legacy...
+ ctx.showHidden = opts;
+ } else if (opts) {
+ // got an "options" object
+ exports._extend(ctx, opts);
+ }
+ // set default options
+ if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
+ if (isUndefined(ctx.depth)) ctx.depth = 2;
+ if (isUndefined(ctx.colors)) ctx.colors = false;
+ if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
+ if (ctx.colors) ctx.stylize = stylizeWithColor;
+ return formatValue(ctx, obj, ctx.depth);
+}
+exports.inspect = inspect;
+
+
+// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+inspect.colors = {
+ 'bold' : [1, 22],
+ 'italic' : [3, 23],
+ 'underline' : [4, 24],
+ 'inverse' : [7, 27],
+ 'white' : [37, 39],
+ 'grey' : [90, 39],
+ 'black' : [30, 39],
+ 'blue' : [34, 39],
+ 'cyan' : [36, 39],
+ 'green' : [32, 39],
+ 'magenta' : [35, 39],
+ 'red' : [31, 39],
+ 'yellow' : [33, 39]
+};
+
+// Don't use 'blue' not visible on cmd.exe
+inspect.styles = {
+ 'special': 'cyan',
+ 'number': 'yellow',
+ 'boolean': 'yellow',
+ 'undefined': 'grey',
+ 'null': 'bold',
+ 'string': 'green',
+ 'date': 'magenta',
+ // "name": intentionally not styling
+ 'regexp': 'red'
+};
+
+
+function stylizeWithColor(str, styleType) {
+ var style = inspect.styles[styleType];
+
+ if (style) {
+ return '\u001b[' + inspect.colors[style][0] + 'm' + str +
+ '\u001b[' + inspect.colors[style][1] + 'm';
+ } else {
+ return str;
+ }
+}
+
+
+function stylizeNoColor(str, styleType) {
+ return str;
+}
+
+
+function arrayToHash(array) {
+ var hash = {};
+
+ array.forEach(function(val, idx) {
+ hash[val] = true;
+ });
+
+ return hash;
+}
+
+
+function formatValue(ctx, value, recurseTimes) {
+ // Provide a hook for user-specified inspect functions.
+ // Check that value is an object with an inspect function on it
+ if (ctx.customInspect &&
+ value &&
+ isFunction(value.inspect) &&
+ // Filter out the util module, it's inspect function is special
+ value.inspect !== exports.inspect &&
+ // Also filter out any prototype objects using the circular check.
+ !(value.constructor && value.constructor.prototype === value)) {
+ var ret = value.inspect(recurseTimes, ctx);
+ if (!isString(ret)) {
+ ret = formatValue(ctx, ret, recurseTimes);
+ }
+ return ret;
+ }
+
+ // Primitive types cannot have properties
+ var primitive = formatPrimitive(ctx, value);
+ if (primitive) {
+ return primitive;
+ }
+
+ // Look up the keys of the object.
+ var keys = Object.keys(value);
+ var visibleKeys = arrayToHash(keys);
+
+ if (ctx.showHidden) {
+ keys = Object.getOwnPropertyNames(value);
+ }
+
+ // IE doesn't make error fields non-enumerable
+ // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
+ if (isError(value)
+ && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
+ return formatError(value);
+ }
+
+ // Some type of object without properties can be shortcutted.
+ if (keys.length === 0) {
+ if (isFunction(value)) {
+ var name = value.name ? ': ' + value.name : '';
+ return ctx.stylize('[Function' + name + ']', 'special');
+ }
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ }
+ if (isDate(value)) {
+ return ctx.stylize(Date.prototype.toString.call(value), 'date');
+ }
+ if (isError(value)) {
+ return formatError(value);
+ }
+ }
+
+ var base = '', array = false, braces = ['{', '}'];
+
+ // Make Array say that they are Array
+ if (isArray(value)) {
+ array = true;
+ braces = ['[', ']'];
+ }
+
+ // Make functions say that they are functions
+ if (isFunction(value)) {
+ var n = value.name ? ': ' + value.name : '';
+ base = ' [Function' + n + ']';
+ }
+
+ // Make RegExps say that they are RegExps
+ if (isRegExp(value)) {
+ base = ' ' + RegExp.prototype.toString.call(value);
+ }
+
+ // Make dates with properties first say the date
+ if (isDate(value)) {
+ base = ' ' + Date.prototype.toUTCString.call(value);
+ }
+
+ // Make error with message first say the error
+ if (isError(value)) {
+ base = ' ' + formatError(value);
+ }
+
+ if (keys.length === 0 && (!array || value.length == 0)) {
+ return braces[0] + base + braces[1];
+ }
+
+ if (recurseTimes < 0) {
+ if (isRegExp(value)) {
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+ } else {
+ return ctx.stylize('[Object]', 'special');
+ }
+ }
+
+ ctx.seen.push(value);
+
+ var output;
+ if (array) {
+ output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+ } else {
+ output = keys.map(function(key) {
+ return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+ });
+ }
+
+ ctx.seen.pop();
+
+ return reduceToSingleString(output, base, braces);
+}
+
+
+function formatPrimitive(ctx, value) {
+ if (isUndefined(value))
+ return ctx.stylize('undefined', 'undefined');
+ if (isString(value)) {
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+ .replace(/'/g, "\\'")
+ .replace(/\\"/g, '"') + '\'';
+ return ctx.stylize(simple, 'string');
+ }
+ if (isNumber(value))
+ return ctx.stylize('' + value, 'number');
+ if (isBoolean(value))
+ return ctx.stylize('' + value, 'boolean');
+ // For some reason typeof null is "object", so special case here.
+ if (isNull(value))
+ return ctx.stylize('null', 'null');
+}
+
+
+function formatError(value) {
+ return '[' + Error.prototype.toString.call(value) + ']';
+}
+
+
+function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+ var output = [];
+ for (var i = 0, l = value.length; i < l; ++i) {
+ if (hasOwnProperty(value, String(i))) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ String(i), true));
+ } else {
+ output.push('');
+ }
+ }
+ keys.forEach(function(key) {
+ if (!key.match(/^\d+$/)) {
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+ key, true));
+ }
+ });
+ return output;
+}
+
+
+function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+ var name, str, desc;
+ desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
+ if (desc.get) {
+ if (desc.set) {
+ str = ctx.stylize('[Getter/Setter]', 'special');
+ } else {
+ str = ctx.stylize('[Getter]', 'special');
+ }
+ } else {
+ if (desc.set) {
+ str = ctx.stylize('[Setter]', 'special');
+ }
+ }
+ if (!hasOwnProperty(visibleKeys, key)) {
+ name = '[' + key + ']';
+ }
+ if (!str) {
+ if (ctx.seen.indexOf(desc.value) < 0) {
+ if (isNull(recurseTimes)) {
+ str = formatValue(ctx, desc.value, null);
+ } else {
+ str = formatValue(ctx, desc.value, recurseTimes - 1);
+ }
+ if (str.indexOf('\n') > -1) {
+ if (array) {
+ str = str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n').substr(2);
+ } else {
+ str = '\n' + str.split('\n').map(function(line) {
+ return ' ' + line;
+ }).join('\n');
+ }
+ }
+ } else {
+ str = ctx.stylize('[Circular]', 'special');
+ }
+ }
+ if (isUndefined(name)) {
+ if (array && key.match(/^\d+$/)) {
+ return str;
+ }
+ name = JSON.stringify('' + key);
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+ name = name.substr(1, name.length - 2);
+ name = ctx.stylize(name, 'name');
+ } else {
+ name = name.replace(/'/g, "\\'")
+ .replace(/\\"/g, '"')
+ .replace(/(^"|"$)/g, "'");
+ name = ctx.stylize(name, 'string');
+ }
+ }
+
+ return name + ': ' + str;
+}
+
+
+function reduceToSingleString(output, base, braces) {
+ var numLinesEst = 0;
+ var length = output.reduce(function(prev, cur) {
+ numLinesEst++;
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
+ return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
+ }, 0);
+
+ if (length > 60) {
+ return braces[0] +
+ (base === '' ? '' : base + '\n ') +
+ ' ' +
+ output.join(',\n ') +
+ ' ' +
+ braces[1];
+ }
+
+ return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+}
+
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+function isArray(ar) {
+ return Array.isArray(ar);
+}
+exports.isArray = isArray;
+
+function isBoolean(arg) {
+ return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
+
+function isNull(arg) {
+ return arg === null;
+}
+exports.isNull = isNull;
+
+function isNullOrUndefined(arg) {
+ return arg == null;
+}
+exports.isNullOrUndefined = isNullOrUndefined;
+
+function isNumber(arg) {
+ return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
+
+function isString(arg) {
+ return typeof arg === 'string';
+}
+exports.isString = isString;
+
+function isSymbol(arg) {
+ return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
+
+function isUndefined(arg) {
+ return arg === void 0;
+}
+exports.isUndefined = isUndefined;
+
+function isRegExp(re) {
+ return isObject(re) && objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return isObject(d) && objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return isObject(e) &&
+ (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
+
+function isFunction(arg) {
+ return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
+
+function isPrimitive(arg) {
+ return arg === null ||
+ typeof arg === 'boolean' ||
+ typeof arg === 'number' ||
+ typeof arg === 'string' ||
+ typeof arg === 'symbol' || // ES6 symbol
+ typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
+
+exports.isBuffer = require('./support/isBuffer');
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
+
+
+function pad(n) {
+ return n < 10 ? '0' + n.toString(10) : n.toString(10);
+}
+
+
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+ 'Oct', 'Nov', 'Dec'];
+
+// 26 Feb 16:19:34
+function timestamp() {
+ var d = new Date();
+ var time = [pad(d.getHours()),
+ pad(d.getMinutes()),
+ pad(d.getSeconds())].join(':');
+ return [d.getDate(), months[d.getMonth()], time].join(' ');
+}
+
+
+// log is just a thin wrapper to console.log that prepends a timestamp
+exports.log = function() {
+ console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
+};
+
+
+/**
+ * Inherit the prototype methods from one constructor into another.
+ *
+ * The Function.prototype.inherits from lang.js rewritten as a standalone
+ * function (not on Function.prototype). NOTE: If this file is to be loaded
+ * during bootstrapping this function needs to be rewritten using some native
+ * functions as prototype setup using normal JavaScript does not work as
+ * expected during bootstrapping (see mirror.js in r114903).
+ *
+ * @param {function} ctor Constructor function which needs to inherit the
+ * prototype.
+ * @param {function} superCtor Constructor function to inherit prototype from.
+ */
+exports.inherits = require('inherits');
+
+exports._extend = function(origin, add) {
+ // Don't do anything if add isn't an object
+ if (!add || !isObject(add)) return origin;
+
+ var keys = Object.keys(add);
+ var i = keys.length;
+ while (i--) {
+ origin[keys[i]] = add[keys[i]];
+ }
+ return origin;
+};
+
+function hasOwnProperty(obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+}
+
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./support/isBuffer":101,"_process":82,"inherits":100}]},{},[1]);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/.bower.json
new file mode 100644
index 00000000000..2dba1857e37
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/.bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "moment-timezone",
+ "description": "Parse and display moments in any timezone.",
+ "license": "MIT",
+ "main": "builds/moment-timezone-with-data-2012-2022.js",
+ "dependencies": {
+ "moment": ">= 2.9.0"
+ },
+ "ignore": [
+ "**/.*",
+ "tests",
+ "tasks",
+ "data/*/20*.json",
+ "contributing.md",
+ "Gruntfile.js",
+ "index.js",
+ "package.json"
+ ],
+ "homepage": "https://github.com/moment/moment-timezone",
+ "version": "0.5.17",
+ "_release": "0.5.17",
+ "_resolution": {
+ "type": "version",
+ "tag": "0.5.17",
+ "commit": "75f9e6e7bf95e363b97a4d4376325272bcf5946b"
+ },
+ "_source": "https://github.com/moment/moment-timezone.git",
+ "_target": "^0.5.10",
+ "_originalSource": "moment-timezone"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/LICENSE
new file mode 100644
index 00000000000..f0bb3b4bb46
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/README.md
new file mode 100644
index 00000000000..06b2681e228
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/README.md
@@ -0,0 +1,36 @@
+# [Moment Timezone](http://momentjs.com/timezone)
+
+[![Join the chat at https://gitter.im/moment/moment-timezone](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/moment/moment-timezone?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+[![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![MIT License][license-image]][license-url] [![Build Status][travis-image]][travis-url]
+
+IANA Time Zone Database + [Moment.js](http://momentjs.com).
+
+```js
+var june = moment("2014-06-01T12:00:00Z");
+june.tz('America/Los_Angeles').format('ha z'); // 5am PDT
+june.tz('America/New_York').format('ha z'); // 8am EDT
+june.tz('Asia/Tokyo').format('ha z'); // 9pm JST
+june.tz('Australia/Sydney').format('ha z'); // 10pm EST
+
+var dec = moment("2014-12-01T12:00:00Z");
+dec.tz('America/Los_Angeles').format('ha z'); // 4am PST
+dec.tz('America/New_York').format('ha z'); // 7am EST
+dec.tz('Asia/Tokyo').format('ha z'); // 9pm JST
+dec.tz('Australia/Sydney').format('ha z'); // 11pm EST
+```
+
+#### [Contribute code or compile time zone data](contributing.md)
+
+#### [Read the changelog](changelog.md)
+
+
+[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
+[license-url]: LICENSE
+
+[npm-url]: https://npmjs.org/package/moment-timezone
+[npm-version-image]: http://img.shields.io/npm/v/moment-timezone.svg?style=flat
+[npm-downloads-image]: http://img.shields.io/npm/dm/moment-timezone.svg?style=flat
+
+[travis-url]: http://travis-ci.org/moment/moment-timezone
+[travis-image]: http://img.shields.io/travis/moment/moment-timezone/develop.svg?style=flat
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/bower.json
new file mode 100644
index 00000000000..041bf7d092d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/bower.json
@@ -0,0 +1,19 @@
+{
+ "name": "moment-timezone",
+ "description" : "Parse and display moments in any timezone.",
+ "license" : "MIT",
+ "main": "builds/moment-timezone-with-data-2012-2022.js",
+ "dependencies" : {
+ "moment" : ">= 2.9.0"
+ },
+ "ignore": [
+ "**/.*",
+ "tests",
+ "tasks",
+ "data/*/20*.json",
+ "contributing.md",
+ "Gruntfile.js",
+ "index.js",
+ "package.json"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.js
new file mode 100644
index 00000000000..23071c125c6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.js
@@ -0,0 +1,1204 @@
+//! moment-timezone.js
+//! version : 0.5.17
+//! Copyright (c) JS Foundation and other contributors
+//! license : MIT
+//! github.com/moment/moment-timezone
+
+(function (root, factory) {
+ "use strict";
+
+ /*global define*/
+ if (typeof define === 'function' && define.amd) {
+ define(['moment'], factory); // AMD
+ } else if (typeof module === 'object' && module.exports) {
+ module.exports = factory(require('moment')); // Node
+ } else {
+ factory(root.moment); // Browser
+ }
+}(this, function (moment) {
+ "use strict";
+
+ // Do not load moment-timezone a second time.
+ // if (moment.tz !== undefined) {
+ // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
+ // return moment;
+ // }
+
+ var VERSION = "0.5.17",
+ zones = {},
+ links = {},
+ names = {},
+ guesses = {},
+ cachedGuess,
+
+ momentVersion = moment.version.split('.'),
+ major = +momentVersion[0],
+ minor = +momentVersion[1];
+
+ // Moment.js version check
+ if (major < 2 || (major === 2 && minor < 6)) {
+ logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
+ }
+
+ /************************************
+ Unpacking
+ ************************************/
+
+ function charCodeToInt(charCode) {
+ if (charCode > 96) {
+ return charCode - 87;
+ } else if (charCode > 64) {
+ return charCode - 29;
+ }
+ return charCode - 48;
+ }
+
+ function unpackBase60(string) {
+ var i = 0,
+ parts = string.split('.'),
+ whole = parts[0],
+ fractional = parts[1] || '',
+ multiplier = 1,
+ num,
+ out = 0,
+ sign = 1;
+
+ // handle negative numbers
+ if (string.charCodeAt(0) === 45) {
+ i = 1;
+ sign = -1;
+ }
+
+ // handle digits before the decimal
+ for (i; i < whole.length; i++) {
+ num = charCodeToInt(whole.charCodeAt(i));
+ out = 60 * out + num;
+ }
+
+ // handle digits after the decimal
+ for (i = 0; i < fractional.length; i++) {
+ multiplier = multiplier / 60;
+ num = charCodeToInt(fractional.charCodeAt(i));
+ out += num * multiplier;
+ }
+
+ return out * sign;
+ }
+
+ function arrayToInt (array) {
+ for (var i = 0; i < array.length; i++) {
+ array[i] = unpackBase60(array[i]);
+ }
+ }
+
+ function intToUntil (array, length) {
+ for (var i = 0; i < length; i++) {
+ array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
+ }
+
+ array[length - 1] = Infinity;
+ }
+
+ function mapIndices (source, indices) {
+ var out = [], i;
+
+ for (i = 0; i < indices.length; i++) {
+ out[i] = source[indices[i]];
+ }
+
+ return out;
+ }
+
+ function unpack (string) {
+ var data = string.split('|'),
+ offsets = data[2].split(' '),
+ indices = data[3].split(''),
+ untils = data[4].split(' ');
+
+ arrayToInt(offsets);
+ arrayToInt(indices);
+ arrayToInt(untils);
+
+ intToUntil(untils, indices.length);
+
+ return {
+ name : data[0],
+ abbrs : mapIndices(data[1].split(' '), indices),
+ offsets : mapIndices(offsets, indices),
+ untils : untils,
+ population : data[5] | 0
+ };
+ }
+
+ /************************************
+ Zone object
+ ************************************/
+
+ function Zone (packedString) {
+ if (packedString) {
+ this._set(unpack(packedString));
+ }
+ }
+
+ Zone.prototype = {
+ _set : function (unpacked) {
+ this.name = unpacked.name;
+ this.abbrs = unpacked.abbrs;
+ this.untils = unpacked.untils;
+ this.offsets = unpacked.offsets;
+ this.population = unpacked.population;
+ },
+
+ _index : function (timestamp) {
+ var target = +timestamp,
+ untils = this.untils,
+ i;
+
+ for (i = 0; i < untils.length; i++) {
+ if (target < untils[i]) {
+ return i;
+ }
+ }
+ },
+
+ parse : function (timestamp) {
+ var target = +timestamp,
+ offsets = this.offsets,
+ untils = this.untils,
+ max = untils.length - 1,
+ offset, offsetNext, offsetPrev, i;
+
+ for (i = 0; i < max; i++) {
+ offset = offsets[i];
+ offsetNext = offsets[i + 1];
+ offsetPrev = offsets[i ? i - 1 : i];
+
+ if (offset < offsetNext && tz.moveAmbiguousForward) {
+ offset = offsetNext;
+ } else if (offset > offsetPrev && tz.moveInvalidForward) {
+ offset = offsetPrev;
+ }
+
+ if (target < untils[i] - (offset * 60000)) {
+ return offsets[i];
+ }
+ }
+
+ return offsets[max];
+ },
+
+ abbr : function (mom) {
+ return this.abbrs[this._index(mom)];
+ },
+
+ offset : function (mom) {
+ logError("zone.offset has been deprecated in favor of zone.utcOffset");
+ return this.offsets[this._index(mom)];
+ },
+
+ utcOffset : function (mom) {
+ return this.offsets[this._index(mom)];
+ }
+ };
+
+ /************************************
+ Current Timezone
+ ************************************/
+
+ function OffsetAt(at) {
+ var timeString = at.toTimeString();
+ var abbr = timeString.match(/\([a-z ]+\)/i);
+ if (abbr && abbr[0]) {
+ // 17:56:31 GMT-0600 (CST)
+ // 17:56:31 GMT-0600 (Central Standard Time)
+ abbr = abbr[0].match(/[A-Z]/g);
+ abbr = abbr ? abbr.join('') : undefined;
+ } else {
+ // 17:56:31 CST
+ // 17:56:31 GMT+0800 (台北標準時間)
+ abbr = timeString.match(/[A-Z]{3,5}/g);
+ abbr = abbr ? abbr[0] : undefined;
+ }
+
+ if (abbr === 'GMT') {
+ abbr = undefined;
+ }
+
+ this.at = +at;
+ this.abbr = abbr;
+ this.offset = at.getTimezoneOffset();
+ }
+
+ function ZoneScore(zone) {
+ this.zone = zone;
+ this.offsetScore = 0;
+ this.abbrScore = 0;
+ }
+
+ ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
+ this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
+ if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
+ this.abbrScore++;
+ }
+ };
+
+ function findChange(low, high) {
+ var mid, diff;
+
+ while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
+ mid = new OffsetAt(new Date(low.at + diff));
+ if (mid.offset === low.offset) {
+ low = mid;
+ } else {
+ high = mid;
+ }
+ }
+
+ return low;
+ }
+
+ function userOffsets() {
+ var startYear = new Date().getFullYear() - 2,
+ last = new OffsetAt(new Date(startYear, 0, 1)),
+ offsets = [last],
+ change, next, i;
+
+ for (i = 1; i < 48; i++) {
+ next = new OffsetAt(new Date(startYear, i, 1));
+ if (next.offset !== last.offset) {
+ change = findChange(last, next);
+ offsets.push(change);
+ offsets.push(new OffsetAt(new Date(change.at + 6e4)));
+ }
+ last = next;
+ }
+
+ for (i = 0; i < 4; i++) {
+ offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
+ offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
+ }
+
+ return offsets;
+ }
+
+ function sortZoneScores (a, b) {
+ if (a.offsetScore !== b.offsetScore) {
+ return a.offsetScore - b.offsetScore;
+ }
+ if (a.abbrScore !== b.abbrScore) {
+ return a.abbrScore - b.abbrScore;
+ }
+ return b.zone.population - a.zone.population;
+ }
+
+ function addToGuesses (name, offsets) {
+ var i, offset;
+ arrayToInt(offsets);
+ for (i = 0; i < offsets.length; i++) {
+ offset = offsets[i];
+ guesses[offset] = guesses[offset] || {};
+ guesses[offset][name] = true;
+ }
+ }
+
+ function guessesForUserOffsets (offsets) {
+ var offsetsLength = offsets.length,
+ filteredGuesses = {},
+ out = [],
+ i, j, guessesOffset;
+
+ for (i = 0; i < offsetsLength; i++) {
+ guessesOffset = guesses[offsets[i].offset] || {};
+ for (j in guessesOffset) {
+ if (guessesOffset.hasOwnProperty(j)) {
+ filteredGuesses[j] = true;
+ }
+ }
+ }
+
+ for (i in filteredGuesses) {
+ if (filteredGuesses.hasOwnProperty(i)) {
+ out.push(names[i]);
+ }
+ }
+
+ return out;
+ }
+
+ function rebuildGuess () {
+
+ // use Intl API when available and returning valid time zone
+ try {
+ var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ if (intlName && intlName.length > 3) {
+ var name = names[normalizeName(intlName)];
+ if (name) {
+ return name;
+ }
+ logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
+ }
+ } catch (e) {
+ // Intl unavailable, fall back to manual guessing.
+ }
+
+ var offsets = userOffsets(),
+ offsetsLength = offsets.length,
+ guesses = guessesForUserOffsets(offsets),
+ zoneScores = [],
+ zoneScore, i, j;
+
+ for (i = 0; i < guesses.length; i++) {
+ zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
+ for (j = 0; j < offsetsLength; j++) {
+ zoneScore.scoreOffsetAt(offsets[j]);
+ }
+ zoneScores.push(zoneScore);
+ }
+
+ zoneScores.sort(sortZoneScores);
+
+ return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
+ }
+
+ function guess (ignoreCache) {
+ if (!cachedGuess || ignoreCache) {
+ cachedGuess = rebuildGuess();
+ }
+ return cachedGuess;
+ }
+
+ /************************************
+ Global Methods
+ ************************************/
+
+ function normalizeName (name) {
+ return (name || '').toLowerCase().replace(/\//g, '_');
+ }
+
+ function addZone (packed) {
+ var i, name, split, normalized;
+
+ if (typeof packed === "string") {
+ packed = [packed];
+ }
+
+ for (i = 0; i < packed.length; i++) {
+ split = packed[i].split('|');
+ name = split[0];
+ normalized = normalizeName(name);
+ zones[normalized] = packed[i];
+ names[normalized] = name;
+ addToGuesses(normalized, split[2].split(' '));
+ }
+ }
+
+ function getZone (name, caller) {
+ name = normalizeName(name);
+
+ var zone = zones[name];
+ var link;
+
+ if (zone instanceof Zone) {
+ return zone;
+ }
+
+ if (typeof zone === 'string') {
+ zone = new Zone(zone);
+ zones[name] = zone;
+ return zone;
+ }
+
+ // Pass getZone to prevent recursion more than 1 level deep
+ if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
+ zone = zones[name] = new Zone();
+ zone._set(link);
+ zone.name = names[name];
+ return zone;
+ }
+
+ return null;
+ }
+
+ function getNames () {
+ var i, out = [];
+
+ for (i in names) {
+ if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
+ out.push(names[i]);
+ }
+ }
+
+ return out.sort();
+ }
+
+ function addLink (aliases) {
+ var i, alias, normal0, normal1;
+
+ if (typeof aliases === "string") {
+ aliases = [aliases];
+ }
+
+ for (i = 0; i < aliases.length; i++) {
+ alias = aliases[i].split('|');
+
+ normal0 = normalizeName(alias[0]);
+ normal1 = normalizeName(alias[1]);
+
+ links[normal0] = normal1;
+ names[normal0] = alias[0];
+
+ links[normal1] = normal0;
+ names[normal1] = alias[1];
+ }
+ }
+
+ function loadData (data) {
+ addZone(data.zones);
+ addLink(data.links);
+ tz.dataVersion = data.version;
+ }
+
+ function zoneExists (name) {
+ if (!zoneExists.didShowError) {
+ zoneExists.didShowError = true;
+ logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
+ }
+ return !!getZone(name);
+ }
+
+ function needsOffset (m) {
+ var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
+ return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
+ }
+
+ function logError (message) {
+ if (typeof console !== 'undefined' && typeof console.error === 'function') {
+ console.error(message);
+ }
+ }
+
+ /************************************
+ moment.tz namespace
+ ************************************/
+
+ function tz (input) {
+ var args = Array.prototype.slice.call(arguments, 0, -1),
+ name = arguments[arguments.length - 1],
+ zone = getZone(name),
+ out = moment.utc.apply(null, args);
+
+ if (zone && !moment.isMoment(input) && needsOffset(out)) {
+ out.add(zone.parse(out), 'minutes');
+ }
+
+ out.tz(name);
+
+ return out;
+ }
+
+ tz.version = VERSION;
+ tz.dataVersion = '';
+ tz._zones = zones;
+ tz._links = links;
+ tz._names = names;
+ tz.add = addZone;
+ tz.link = addLink;
+ tz.load = loadData;
+ tz.zone = getZone;
+ tz.zoneExists = zoneExists; // deprecated in 0.1.0
+ tz.guess = guess;
+ tz.names = getNames;
+ tz.Zone = Zone;
+ tz.unpack = unpack;
+ tz.unpackBase60 = unpackBase60;
+ tz.needsOffset = needsOffset;
+ tz.moveInvalidForward = true;
+ tz.moveAmbiguousForward = false;
+
+ /************************************
+ Interface with Moment.js
+ ************************************/
+
+ var fn = moment.fn;
+
+ moment.tz = tz;
+
+ moment.defaultZone = null;
+
+ moment.updateOffset = function (mom, keepTime) {
+ var zone = moment.defaultZone,
+ offset;
+
+ if (mom._z === undefined) {
+ if (zone && needsOffset(mom) && !mom._isUTC) {
+ mom._d = moment.utc(mom._a)._d;
+ mom.utc().add(zone.parse(mom), 'minutes');
+ }
+ mom._z = zone;
+ }
+ if (mom._z) {
+ offset = mom._z.utcOffset(mom);
+ if (Math.abs(offset) < 16) {
+ offset = offset / 60;
+ }
+ if (mom.utcOffset !== undefined) {
+ mom.utcOffset(-offset, keepTime);
+ } else {
+ mom.zone(offset, keepTime);
+ }
+ }
+ };
+
+ fn.tz = function (name, keepTime) {
+ if (name) {
+ this._z = getZone(name);
+ if (this._z) {
+ moment.updateOffset(this, keepTime);
+ } else {
+ logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
+ }
+ return this;
+ }
+ if (this._z) { return this._z.name; }
+ };
+
+ function abbrWrap (old) {
+ return function () {
+ if (this._z) { return this._z.abbr(this); }
+ return old.call(this);
+ };
+ }
+
+ function resetZoneWrap (old) {
+ return function () {
+ this._z = null;
+ return old.apply(this, arguments);
+ };
+ }
+
+ fn.zoneName = abbrWrap(fn.zoneName);
+ fn.zoneAbbr = abbrWrap(fn.zoneAbbr);
+ fn.utc = resetZoneWrap(fn.utc);
+
+ moment.tz.setDefault = function(name) {
+ if (major < 2 || (major === 2 && minor < 9)) {
+ logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
+ }
+ moment.defaultZone = name ? getZone(name) : null;
+ return moment;
+ };
+
+ // Cloning a moment should include the _z property.
+ var momentProperties = moment.momentProperties;
+ if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
+ // moment 2.8.1+
+ momentProperties.push('_z');
+ momentProperties.push('_a');
+ } else if (momentProperties) {
+ // moment 2.7.0
+ momentProperties._z = null;
+ }
+
+ loadData({
+ "version": "2018e",
+ "zones": [
+ "Africa/Abidjan|GMT|0|0||48e5",
+ "Africa/Nairobi|EAT|-30|0||47e5",
+ "Africa/Algiers|CET|-10|0||26e5",
+ "Africa/Lagos|WAT|-10|0||17e6",
+ "Africa/Maputo|CAT|-20|0||26e5",
+ "Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6",
+ "Africa/Casablanca|WET WEST|0 -10|0101010101010101010101010101010101010101010|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00|32e5",
+ "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6",
+ "Africa/Johannesburg|SAST|-20|0||84e5",
+ "Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5",
+ "Africa/Sao_Tome|GMT WAT|0 -10|01|1UQN0",
+ "Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5",
+ "Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4",
+ "America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326",
+ "America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4",
+ "America/Santo_Domingo|AST|40|0||29e5",
+ "America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4",
+ "America/Fortaleza|-03|30|0||34e5",
+ "America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5",
+ "America/Panama|EST|50|0||15e5",
+ "America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6",
+ "America/Bahia|-02 -03|20 30|01|1GCq0|27e5",
+ "America/Managua|CST|60|0||22e5",
+ "America/La_Paz|-04|40|0||19e5",
+ "America/Lima|-05|50|0||11e6",
+ "America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5",
+ "America/Campo_Grande|-03 -04|30 40|01010101010101010101010|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0|77e4",
+ "America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4",
+ "America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5",
+ "America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5",
+ "America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4",
+ "America/Phoenix|MST|70|0||42e5",
+ "America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6",
+ "America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6",
+ "America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4",
+ "America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2",
+ "America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4",
+ "America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3",
+ "America/Grand_Turk|EST EDT AST|50 40 40|0101010121010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2",
+ "America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5",
+ "America/Metlakatla|PST AKST AKDT|80 90 80|0121212121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2",
+ "America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2",
+ "America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5",
+ "America/Noronha|-02|20|0||30e2",
+ "America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5",
+ "Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40",
+ "America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|62e5",
+ "America/Sao_Paulo|-02 -03|20 30|01010101010101010101010|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0|20e6",
+ "Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4",
+ "America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4",
+ "Antarctica/Casey|+11 +08|-b0 -80|0101|1GAF0 blz0 3m10|10",
+ "Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70",
+ "Pacific/Port_Moresby|+10|-a0|0||25e4",
+ "Pacific/Guadalcanal|+11|-b0|0||11e4",
+ "Asia/Tashkent|+05|-50|0||23e5",
+ "Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5",
+ "Asia/Baghdad|+03|-30|0||66e5",
+ "Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40",
+ "Asia/Dhaka|+06|-60|0||16e6",
+ "Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5",
+ "Asia/Kamchatka|+12|-c0|0||18e4",
+ "Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",
+ "Asia/Bangkok|+07|-70|0||15e6",
+ "Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0",
+ "Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5",
+ "Asia/Manila|+08|-80|0||24e6",
+ "Asia/Kolkata|IST|-5u|0||15e6",
+ "Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4",
+ "Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5",
+ "Asia/Shanghai|CST|-80|0||23e6",
+ "Asia/Colombo|+0530|-5u|0||22e5",
+ "Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5",
+ "Asia/Dili|+09|-90|0||19e4",
+ "Asia/Dubai|+04|-40|0||39e5",
+ "Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0",
+ "Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0|18e5",
+ "Asia/Hong_Kong|HKT|-80|0||73e5",
+ "Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3",
+ "Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4",
+ "Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6",
+ "Asia/Jakarta|WIB|-70|0||31e6",
+ "Asia/Jayapura|WIT|-90|0||26e4",
+ "Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4",
+ "Asia/Kabul|+0430|-4u|0||46e5",
+ "Asia/Karachi|PKT|-50|0||24e6",
+ "Asia/Kathmandu|+0545|-5J|0||12e5",
+ "Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4",
+ "Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5",
+ "Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3",
+ "Asia/Makassar|WITA|-80|0||15e5",
+ "Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5",
+ "Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5",
+ "Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5",
+ "Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BAu|29e5",
+ "Asia/Rangoon|+0630|-6u|0||48e5",
+ "Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4",
+ "Asia/Seoul|KST|-90|0||23e6",
+ "Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2",
+ "Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6",
+ "Asia/Tokyo|JST|-90|0||38e6",
+ "Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5",
+ "Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4",
+ "Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5",
+ "Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5",
+ "Atlantic/Cape_Verde|-01|10|0||50e4",
+ "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
+ "Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5",
+ "Australia/Brisbane|AEST|-a0|0||20e5",
+ "Australia/Darwin|ACST|-9u|0||12e4",
+ "Australia/Eucla|+0845|-8J|0||368",
+ "Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347",
+ "Australia/Perth|AWST|-80|0||18e5",
+ "Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|30e2",
+ "Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5",
+ "Etc/GMT-1|+01|-10|0|",
+ "Pacific/Fakaofo|+13|-d0|0||483",
+ "Pacific/Kiritimati|+14|-e0|0||51e2",
+ "Etc/GMT-2|+02|-20|0|",
+ "Pacific/Tahiti|-10|a0|0||18e4",
+ "Pacific/Niue|-11|b0|0||12e2",
+ "Etc/GMT+12|-12|c0|0|",
+ "Pacific/Galapagos|-06|60|0||25e3",
+ "Etc/GMT+7|-07|70|0|",
+ "Pacific/Pitcairn|-08|80|0||56",
+ "Pacific/Gambier|-09|90|0||125",
+ "Etc/UCT|UCT|0|0|",
+ "Etc/UTC|UTC|0|0|",
+ "Europe/Astrakhan|+04 +03|-40 -30|010|1N7y0 3rd0",
+ "Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6",
+ "Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4",
+ "Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4",
+ "Europe/Volgograd|+04 +03|-40 -30|01|1N7y0|10e5",
+ "Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6",
+ "Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810",
+ "Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4",
+ "Pacific/Honolulu|HST|a0|0||37e4",
+ "MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0",
+ "Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600",
+ "Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3",
+ "Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4",
+ "Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0|88e4",
+ "Pacific/Guam|ChST|-a0|0||17e4",
+ "Pacific/Marquesas|-0930|9u|0||86e2",
+ "Pacific/Pago_Pago|SST|b0|0||37e2",
+ "Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4",
+ "Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"
+ ],
+ "links": [
+ "Africa/Abidjan|Africa/Accra",
+ "Africa/Abidjan|Africa/Bamako",
+ "Africa/Abidjan|Africa/Banjul",
+ "Africa/Abidjan|Africa/Bissau",
+ "Africa/Abidjan|Africa/Conakry",
+ "Africa/Abidjan|Africa/Dakar",
+ "Africa/Abidjan|Africa/Freetown",
+ "Africa/Abidjan|Africa/Lome",
+ "Africa/Abidjan|Africa/Monrovia",
+ "Africa/Abidjan|Africa/Nouakchott",
+ "Africa/Abidjan|Africa/Ouagadougou",
+ "Africa/Abidjan|Africa/Timbuktu",
+ "Africa/Abidjan|America/Danmarkshavn",
+ "Africa/Abidjan|Atlantic/Reykjavik",
+ "Africa/Abidjan|Atlantic/St_Helena",
+ "Africa/Abidjan|Etc/GMT",
+ "Africa/Abidjan|Etc/GMT+0",
+ "Africa/Abidjan|Etc/GMT-0",
+ "Africa/Abidjan|Etc/GMT0",
+ "Africa/Abidjan|Etc/Greenwich",
+ "Africa/Abidjan|GMT",
+ "Africa/Abidjan|GMT+0",
+ "Africa/Abidjan|GMT-0",
+ "Africa/Abidjan|GMT0",
+ "Africa/Abidjan|Greenwich",
+ "Africa/Abidjan|Iceland",
+ "Africa/Algiers|Africa/Tunis",
+ "Africa/Cairo|Egypt",
+ "Africa/Casablanca|Africa/El_Aaiun",
+ "Africa/Johannesburg|Africa/Maseru",
+ "Africa/Johannesburg|Africa/Mbabane",
+ "Africa/Lagos|Africa/Bangui",
+ "Africa/Lagos|Africa/Brazzaville",
+ "Africa/Lagos|Africa/Douala",
+ "Africa/Lagos|Africa/Kinshasa",
+ "Africa/Lagos|Africa/Libreville",
+ "Africa/Lagos|Africa/Luanda",
+ "Africa/Lagos|Africa/Malabo",
+ "Africa/Lagos|Africa/Ndjamena",
+ "Africa/Lagos|Africa/Niamey",
+ "Africa/Lagos|Africa/Porto-Novo",
+ "Africa/Maputo|Africa/Blantyre",
+ "Africa/Maputo|Africa/Bujumbura",
+ "Africa/Maputo|Africa/Gaborone",
+ "Africa/Maputo|Africa/Harare",
+ "Africa/Maputo|Africa/Kigali",
+ "Africa/Maputo|Africa/Lubumbashi",
+ "Africa/Maputo|Africa/Lusaka",
+ "Africa/Nairobi|Africa/Addis_Ababa",
+ "Africa/Nairobi|Africa/Asmara",
+ "Africa/Nairobi|Africa/Asmera",
+ "Africa/Nairobi|Africa/Dar_es_Salaam",
+ "Africa/Nairobi|Africa/Djibouti",
+ "Africa/Nairobi|Africa/Juba",
+ "Africa/Nairobi|Africa/Kampala",
+ "Africa/Nairobi|Africa/Mogadishu",
+ "Africa/Nairobi|Indian/Antananarivo",
+ "Africa/Nairobi|Indian/Comoro",
+ "Africa/Nairobi|Indian/Mayotte",
+ "Africa/Tripoli|Libya",
+ "America/Adak|America/Atka",
+ "America/Adak|US/Aleutian",
+ "America/Anchorage|America/Juneau",
+ "America/Anchorage|America/Nome",
+ "America/Anchorage|America/Sitka",
+ "America/Anchorage|America/Yakutat",
+ "America/Anchorage|US/Alaska",
+ "America/Campo_Grande|America/Cuiaba",
+ "America/Chicago|America/Indiana/Knox",
+ "America/Chicago|America/Indiana/Tell_City",
+ "America/Chicago|America/Knox_IN",
+ "America/Chicago|America/Matamoros",
+ "America/Chicago|America/Menominee",
+ "America/Chicago|America/North_Dakota/Beulah",
+ "America/Chicago|America/North_Dakota/Center",
+ "America/Chicago|America/North_Dakota/New_Salem",
+ "America/Chicago|America/Rainy_River",
+ "America/Chicago|America/Rankin_Inlet",
+ "America/Chicago|America/Resolute",
+ "America/Chicago|America/Winnipeg",
+ "America/Chicago|CST6CDT",
+ "America/Chicago|Canada/Central",
+ "America/Chicago|US/Central",
+ "America/Chicago|US/Indiana-Starke",
+ "America/Chihuahua|America/Mazatlan",
+ "America/Chihuahua|Mexico/BajaSur",
+ "America/Denver|America/Boise",
+ "America/Denver|America/Cambridge_Bay",
+ "America/Denver|America/Edmonton",
+ "America/Denver|America/Inuvik",
+ "America/Denver|America/Ojinaga",
+ "America/Denver|America/Shiprock",
+ "America/Denver|America/Yellowknife",
+ "America/Denver|Canada/Mountain",
+ "America/Denver|MST7MDT",
+ "America/Denver|Navajo",
+ "America/Denver|US/Mountain",
+ "America/Fortaleza|America/Argentina/Buenos_Aires",
+ "America/Fortaleza|America/Argentina/Catamarca",
+ "America/Fortaleza|America/Argentina/ComodRivadavia",
+ "America/Fortaleza|America/Argentina/Cordoba",
+ "America/Fortaleza|America/Argentina/Jujuy",
+ "America/Fortaleza|America/Argentina/La_Rioja",
+ "America/Fortaleza|America/Argentina/Mendoza",
+ "America/Fortaleza|America/Argentina/Rio_Gallegos",
+ "America/Fortaleza|America/Argentina/Salta",
+ "America/Fortaleza|America/Argentina/San_Juan",
+ "America/Fortaleza|America/Argentina/San_Luis",
+ "America/Fortaleza|America/Argentina/Tucuman",
+ "America/Fortaleza|America/Argentina/Ushuaia",
+ "America/Fortaleza|America/Belem",
+ "America/Fortaleza|America/Buenos_Aires",
+ "America/Fortaleza|America/Catamarca",
+ "America/Fortaleza|America/Cayenne",
+ "America/Fortaleza|America/Cordoba",
+ "America/Fortaleza|America/Jujuy",
+ "America/Fortaleza|America/Maceio",
+ "America/Fortaleza|America/Mendoza",
+ "America/Fortaleza|America/Paramaribo",
+ "America/Fortaleza|America/Recife",
+ "America/Fortaleza|America/Rosario",
+ "America/Fortaleza|America/Santarem",
+ "America/Fortaleza|Antarctica/Rothera",
+ "America/Fortaleza|Atlantic/Stanley",
+ "America/Fortaleza|Etc/GMT+3",
+ "America/Halifax|America/Glace_Bay",
+ "America/Halifax|America/Goose_Bay",
+ "America/Halifax|America/Moncton",
+ "America/Halifax|America/Thule",
+ "America/Halifax|Atlantic/Bermuda",
+ "America/Halifax|Canada/Atlantic",
+ "America/Havana|Cuba",
+ "America/La_Paz|America/Boa_Vista",
+ "America/La_Paz|America/Guyana",
+ "America/La_Paz|America/Manaus",
+ "America/La_Paz|America/Porto_Velho",
+ "America/La_Paz|Brazil/West",
+ "America/La_Paz|Etc/GMT+4",
+ "America/Lima|America/Bogota",
+ "America/Lima|America/Guayaquil",
+ "America/Lima|Etc/GMT+5",
+ "America/Los_Angeles|America/Dawson",
+ "America/Los_Angeles|America/Ensenada",
+ "America/Los_Angeles|America/Santa_Isabel",
+ "America/Los_Angeles|America/Tijuana",
+ "America/Los_Angeles|America/Vancouver",
+ "America/Los_Angeles|America/Whitehorse",
+ "America/Los_Angeles|Canada/Pacific",
+ "America/Los_Angeles|Canada/Yukon",
+ "America/Los_Angeles|Mexico/BajaNorte",
+ "America/Los_Angeles|PST8PDT",
+ "America/Los_Angeles|US/Pacific",
+ "America/Los_Angeles|US/Pacific-New",
+ "America/Managua|America/Belize",
+ "America/Managua|America/Costa_Rica",
+ "America/Managua|America/El_Salvador",
+ "America/Managua|America/Guatemala",
+ "America/Managua|America/Regina",
+ "America/Managua|America/Swift_Current",
+ "America/Managua|America/Tegucigalpa",
+ "America/Managua|Canada/Saskatchewan",
+ "America/Mexico_City|America/Bahia_Banderas",
+ "America/Mexico_City|America/Merida",
+ "America/Mexico_City|America/Monterrey",
+ "America/Mexico_City|Mexico/General",
+ "America/New_York|America/Detroit",
+ "America/New_York|America/Fort_Wayne",
+ "America/New_York|America/Indiana/Indianapolis",
+ "America/New_York|America/Indiana/Marengo",
+ "America/New_York|America/Indiana/Petersburg",
+ "America/New_York|America/Indiana/Vevay",
+ "America/New_York|America/Indiana/Vincennes",
+ "America/New_York|America/Indiana/Winamac",
+ "America/New_York|America/Indianapolis",
+ "America/New_York|America/Iqaluit",
+ "America/New_York|America/Kentucky/Louisville",
+ "America/New_York|America/Kentucky/Monticello",
+ "America/New_York|America/Louisville",
+ "America/New_York|America/Montreal",
+ "America/New_York|America/Nassau",
+ "America/New_York|America/Nipigon",
+ "America/New_York|America/Pangnirtung",
+ "America/New_York|America/Thunder_Bay",
+ "America/New_York|America/Toronto",
+ "America/New_York|Canada/Eastern",
+ "America/New_York|EST5EDT",
+ "America/New_York|US/East-Indiana",
+ "America/New_York|US/Eastern",
+ "America/New_York|US/Michigan",
+ "America/Noronha|Atlantic/South_Georgia",
+ "America/Noronha|Brazil/DeNoronha",
+ "America/Noronha|Etc/GMT+2",
+ "America/Panama|America/Atikokan",
+ "America/Panama|America/Cayman",
+ "America/Panama|America/Coral_Harbour",
+ "America/Panama|America/Jamaica",
+ "America/Panama|EST",
+ "America/Panama|Jamaica",
+ "America/Phoenix|America/Creston",
+ "America/Phoenix|America/Dawson_Creek",
+ "America/Phoenix|America/Hermosillo",
+ "America/Phoenix|MST",
+ "America/Phoenix|US/Arizona",
+ "America/Rio_Branco|America/Eirunepe",
+ "America/Rio_Branco|America/Porto_Acre",
+ "America/Rio_Branco|Brazil/Acre",
+ "America/Santiago|Chile/Continental",
+ "America/Santo_Domingo|America/Anguilla",
+ "America/Santo_Domingo|America/Antigua",
+ "America/Santo_Domingo|America/Aruba",
+ "America/Santo_Domingo|America/Barbados",
+ "America/Santo_Domingo|America/Blanc-Sablon",
+ "America/Santo_Domingo|America/Curacao",
+ "America/Santo_Domingo|America/Dominica",
+ "America/Santo_Domingo|America/Grenada",
+ "America/Santo_Domingo|America/Guadeloupe",
+ "America/Santo_Domingo|America/Kralendijk",
+ "America/Santo_Domingo|America/Lower_Princes",
+ "America/Santo_Domingo|America/Marigot",
+ "America/Santo_Domingo|America/Martinique",
+ "America/Santo_Domingo|America/Montserrat",
+ "America/Santo_Domingo|America/Port_of_Spain",
+ "America/Santo_Domingo|America/Puerto_Rico",
+ "America/Santo_Domingo|America/St_Barthelemy",
+ "America/Santo_Domingo|America/St_Kitts",
+ "America/Santo_Domingo|America/St_Lucia",
+ "America/Santo_Domingo|America/St_Thomas",
+ "America/Santo_Domingo|America/St_Vincent",
+ "America/Santo_Domingo|America/Tortola",
+ "America/Santo_Domingo|America/Virgin",
+ "America/Sao_Paulo|Brazil/East",
+ "America/St_Johns|Canada/Newfoundland",
+ "Antarctica/Palmer|America/Punta_Arenas",
+ "Asia/Baghdad|Antarctica/Syowa",
+ "Asia/Baghdad|Asia/Aden",
+ "Asia/Baghdad|Asia/Bahrain",
+ "Asia/Baghdad|Asia/Kuwait",
+ "Asia/Baghdad|Asia/Qatar",
+ "Asia/Baghdad|Asia/Riyadh",
+ "Asia/Baghdad|Etc/GMT-3",
+ "Asia/Baghdad|Europe/Minsk",
+ "Asia/Bangkok|Asia/Ho_Chi_Minh",
+ "Asia/Bangkok|Asia/Novokuznetsk",
+ "Asia/Bangkok|Asia/Phnom_Penh",
+ "Asia/Bangkok|Asia/Saigon",
+ "Asia/Bangkok|Asia/Vientiane",
+ "Asia/Bangkok|Etc/GMT-7",
+ "Asia/Bangkok|Indian/Christmas",
+ "Asia/Dhaka|Antarctica/Vostok",
+ "Asia/Dhaka|Asia/Almaty",
+ "Asia/Dhaka|Asia/Bishkek",
+ "Asia/Dhaka|Asia/Dacca",
+ "Asia/Dhaka|Asia/Kashgar",
+ "Asia/Dhaka|Asia/Qyzylorda",
+ "Asia/Dhaka|Asia/Thimbu",
+ "Asia/Dhaka|Asia/Thimphu",
+ "Asia/Dhaka|Asia/Urumqi",
+ "Asia/Dhaka|Etc/GMT-6",
+ "Asia/Dhaka|Indian/Chagos",
+ "Asia/Dili|Etc/GMT-9",
+ "Asia/Dili|Pacific/Palau",
+ "Asia/Dubai|Asia/Muscat",
+ "Asia/Dubai|Asia/Tbilisi",
+ "Asia/Dubai|Asia/Yerevan",
+ "Asia/Dubai|Etc/GMT-4",
+ "Asia/Dubai|Europe/Samara",
+ "Asia/Dubai|Indian/Mahe",
+ "Asia/Dubai|Indian/Mauritius",
+ "Asia/Dubai|Indian/Reunion",
+ "Asia/Gaza|Asia/Hebron",
+ "Asia/Hong_Kong|Hongkong",
+ "Asia/Jakarta|Asia/Pontianak",
+ "Asia/Jerusalem|Asia/Tel_Aviv",
+ "Asia/Jerusalem|Israel",
+ "Asia/Kamchatka|Asia/Anadyr",
+ "Asia/Kamchatka|Etc/GMT-12",
+ "Asia/Kamchatka|Kwajalein",
+ "Asia/Kamchatka|Pacific/Funafuti",
+ "Asia/Kamchatka|Pacific/Kwajalein",
+ "Asia/Kamchatka|Pacific/Majuro",
+ "Asia/Kamchatka|Pacific/Nauru",
+ "Asia/Kamchatka|Pacific/Tarawa",
+ "Asia/Kamchatka|Pacific/Wake",
+ "Asia/Kamchatka|Pacific/Wallis",
+ "Asia/Kathmandu|Asia/Katmandu",
+ "Asia/Kolkata|Asia/Calcutta",
+ "Asia/Makassar|Asia/Ujung_Pandang",
+ "Asia/Manila|Asia/Brunei",
+ "Asia/Manila|Asia/Kuala_Lumpur",
+ "Asia/Manila|Asia/Kuching",
+ "Asia/Manila|Asia/Singapore",
+ "Asia/Manila|Etc/GMT-8",
+ "Asia/Manila|Singapore",
+ "Asia/Rangoon|Asia/Yangon",
+ "Asia/Rangoon|Indian/Cocos",
+ "Asia/Seoul|ROK",
+ "Asia/Shanghai|Asia/Chongqing",
+ "Asia/Shanghai|Asia/Chungking",
+ "Asia/Shanghai|Asia/Harbin",
+ "Asia/Shanghai|Asia/Macao",
+ "Asia/Shanghai|Asia/Macau",
+ "Asia/Shanghai|Asia/Taipei",
+ "Asia/Shanghai|PRC",
+ "Asia/Shanghai|ROC",
+ "Asia/Tashkent|Antarctica/Mawson",
+ "Asia/Tashkent|Asia/Aqtau",
+ "Asia/Tashkent|Asia/Aqtobe",
+ "Asia/Tashkent|Asia/Ashgabat",
+ "Asia/Tashkent|Asia/Ashkhabad",
+ "Asia/Tashkent|Asia/Atyrau",
+ "Asia/Tashkent|Asia/Dushanbe",
+ "Asia/Tashkent|Asia/Oral",
+ "Asia/Tashkent|Asia/Samarkand",
+ "Asia/Tashkent|Etc/GMT-5",
+ "Asia/Tashkent|Indian/Kerguelen",
+ "Asia/Tashkent|Indian/Maldives",
+ "Asia/Tehran|Iran",
+ "Asia/Tokyo|Japan",
+ "Asia/Ulaanbaatar|Asia/Choibalsan",
+ "Asia/Ulaanbaatar|Asia/Ulan_Bator",
+ "Asia/Vladivostok|Asia/Ust-Nera",
+ "Asia/Yakutsk|Asia/Khandyga",
+ "Atlantic/Azores|America/Scoresbysund",
+ "Atlantic/Cape_Verde|Etc/GMT+1",
+ "Australia/Adelaide|Australia/Broken_Hill",
+ "Australia/Adelaide|Australia/South",
+ "Australia/Adelaide|Australia/Yancowinna",
+ "Australia/Brisbane|Australia/Lindeman",
+ "Australia/Brisbane|Australia/Queensland",
+ "Australia/Darwin|Australia/North",
+ "Australia/Lord_Howe|Australia/LHI",
+ "Australia/Perth|Australia/West",
+ "Australia/Sydney|Australia/ACT",
+ "Australia/Sydney|Australia/Canberra",
+ "Australia/Sydney|Australia/Currie",
+ "Australia/Sydney|Australia/Hobart",
+ "Australia/Sydney|Australia/Melbourne",
+ "Australia/Sydney|Australia/NSW",
+ "Australia/Sydney|Australia/Tasmania",
+ "Australia/Sydney|Australia/Victoria",
+ "Etc/UCT|UCT",
+ "Etc/UTC|Etc/Universal",
+ "Etc/UTC|Etc/Zulu",
+ "Etc/UTC|UTC",
+ "Etc/UTC|Universal",
+ "Etc/UTC|Zulu",
+ "Europe/Astrakhan|Europe/Ulyanovsk",
+ "Europe/Athens|Asia/Nicosia",
+ "Europe/Athens|EET",
+ "Europe/Athens|Europe/Bucharest",
+ "Europe/Athens|Europe/Helsinki",
+ "Europe/Athens|Europe/Kiev",
+ "Europe/Athens|Europe/Mariehamn",
+ "Europe/Athens|Europe/Nicosia",
+ "Europe/Athens|Europe/Riga",
+ "Europe/Athens|Europe/Sofia",
+ "Europe/Athens|Europe/Tallinn",
+ "Europe/Athens|Europe/Uzhgorod",
+ "Europe/Athens|Europe/Vilnius",
+ "Europe/Athens|Europe/Zaporozhye",
+ "Europe/Chisinau|Europe/Tiraspol",
+ "Europe/Dublin|Eire",
+ "Europe/Istanbul|Asia/Istanbul",
+ "Europe/Istanbul|Turkey",
+ "Europe/Lisbon|Atlantic/Canary",
+ "Europe/Lisbon|Atlantic/Faeroe",
+ "Europe/Lisbon|Atlantic/Faroe",
+ "Europe/Lisbon|Atlantic/Madeira",
+ "Europe/Lisbon|Portugal",
+ "Europe/Lisbon|WET",
+ "Europe/London|Europe/Belfast",
+ "Europe/London|Europe/Guernsey",
+ "Europe/London|Europe/Isle_of_Man",
+ "Europe/London|Europe/Jersey",
+ "Europe/London|GB",
+ "Europe/London|GB-Eire",
+ "Europe/Moscow|W-SU",
+ "Europe/Paris|Africa/Ceuta",
+ "Europe/Paris|Arctic/Longyearbyen",
+ "Europe/Paris|Atlantic/Jan_Mayen",
+ "Europe/Paris|CET",
+ "Europe/Paris|Europe/Amsterdam",
+ "Europe/Paris|Europe/Andorra",
+ "Europe/Paris|Europe/Belgrade",
+ "Europe/Paris|Europe/Berlin",
+ "Europe/Paris|Europe/Bratislava",
+ "Europe/Paris|Europe/Brussels",
+ "Europe/Paris|Europe/Budapest",
+ "Europe/Paris|Europe/Busingen",
+ "Europe/Paris|Europe/Copenhagen",
+ "Europe/Paris|Europe/Gibraltar",
+ "Europe/Paris|Europe/Ljubljana",
+ "Europe/Paris|Europe/Luxembourg",
+ "Europe/Paris|Europe/Madrid",
+ "Europe/Paris|Europe/Malta",
+ "Europe/Paris|Europe/Monaco",
+ "Europe/Paris|Europe/Oslo",
+ "Europe/Paris|Europe/Podgorica",
+ "Europe/Paris|Europe/Prague",
+ "Europe/Paris|Europe/Rome",
+ "Europe/Paris|Europe/San_Marino",
+ "Europe/Paris|Europe/Sarajevo",
+ "Europe/Paris|Europe/Skopje",
+ "Europe/Paris|Europe/Stockholm",
+ "Europe/Paris|Europe/Tirane",
+ "Europe/Paris|Europe/Vaduz",
+ "Europe/Paris|Europe/Vatican",
+ "Europe/Paris|Europe/Vienna",
+ "Europe/Paris|Europe/Warsaw",
+ "Europe/Paris|Europe/Zagreb",
+ "Europe/Paris|Europe/Zurich",
+ "Europe/Paris|Poland",
+ "Europe/Volgograd|Europe/Kirov",
+ "Pacific/Auckland|Antarctica/McMurdo",
+ "Pacific/Auckland|Antarctica/South_Pole",
+ "Pacific/Auckland|NZ",
+ "Pacific/Chatham|NZ-CHAT",
+ "Pacific/Easter|Chile/EasterIsland",
+ "Pacific/Fakaofo|Etc/GMT-13",
+ "Pacific/Fakaofo|Pacific/Enderbury",
+ "Pacific/Galapagos|Etc/GMT+6",
+ "Pacific/Gambier|Etc/GMT+9",
+ "Pacific/Guadalcanal|Antarctica/Macquarie",
+ "Pacific/Guadalcanal|Etc/GMT-11",
+ "Pacific/Guadalcanal|Pacific/Efate",
+ "Pacific/Guadalcanal|Pacific/Kosrae",
+ "Pacific/Guadalcanal|Pacific/Noumea",
+ "Pacific/Guadalcanal|Pacific/Pohnpei",
+ "Pacific/Guadalcanal|Pacific/Ponape",
+ "Pacific/Guam|Pacific/Saipan",
+ "Pacific/Honolulu|HST",
+ "Pacific/Honolulu|Pacific/Johnston",
+ "Pacific/Honolulu|US/Hawaii",
+ "Pacific/Kiritimati|Etc/GMT-14",
+ "Pacific/Niue|Etc/GMT+11",
+ "Pacific/Pago_Pago|Pacific/Midway",
+ "Pacific/Pago_Pago|Pacific/Samoa",
+ "Pacific/Pago_Pago|US/Samoa",
+ "Pacific/Pitcairn|Etc/GMT+8",
+ "Pacific/Port_Moresby|Antarctica/DumontDUrville",
+ "Pacific/Port_Moresby|Etc/GMT-10",
+ "Pacific/Port_Moresby|Pacific/Chuuk",
+ "Pacific/Port_Moresby|Pacific/Truk",
+ "Pacific/Port_Moresby|Pacific/Yap",
+ "Pacific/Tahiti|Etc/GMT+10",
+ "Pacific/Tahiti|Pacific/Rarotonga"
+ ]
+ });
+
+
+ return moment;
+}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js
new file mode 100644
index 00000000000..1e827a7c842
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js
@@ -0,0 +1 @@
+!function(a,i){"use strict";"function"==typeof define&&define.amd?define(["moment"],i):"object"==typeof module&&module.exports?module.exports=i(require("moment")):i(a.moment)}(this,function(A){"use strict";var i,c={},n={},s={},u={},a=A.version.split("."),e=+a[0],r=+a[1];function t(a){return 96<a?a-87:64<a?a-29:a-48}function o(a){var i=0,e=a.split("."),r=e[0],o=e[1]||"",A=1,c=0,n=1;for(45===a.charCodeAt(0)&&(n=-(i=1));i<r.length;i++)c=60*c+t(r.charCodeAt(i));for(i=0;i<o.length;i++)A/=60,c+=t(o.charCodeAt(i))*A;return c*n}function m(a){for(var i=0;i<a.length;i++)a[i]=o(a[i])}function f(a,i){var e,r=[];for(e=0;e<i.length;e++)r[e]=a[i[e]];return r}function l(a){var i=a.split("|"),e=i[2].split(" "),r=i[3].split(""),o=i[4].split(" ");return m(e),m(r),m(o),function(a,i){for(var e=0;e<i;e++)a[e]=Math.round((a[e-1]||0)+6e4*a[e]);a[i-1]=1/0}(o,r.length),{name:i[0],abbrs:f(i[1].split(" "),r),offsets:f(e,r),untils:o,population:0|i[5]}}function p(a){a&&this._set(l(a))}function b(a){var i=a.toTimeString(),e=i.match(/\([a-z ]+\)/i);"GMT"===(e=e&&e[0]?(e=e[0].match(/[A-Z]/g))?e.join(""):void 0:(e=i.match(/[A-Z]{3,5}/g))?e[0]:void 0)&&(e=void 0),this.at=+a,this.abbr=e,this.offset=a.getTimezoneOffset()}function M(a){this.zone=a,this.offsetScore=0,this.abbrScore=0}function d(a,i){for(var e,r;r=6e4*((i.at-a.at)/12e4|0);)(e=new b(new Date(a.at+r))).offset===a.offset?a=e:i=e;return a}function h(a,i){return a.offsetScore!==i.offsetScore?a.offsetScore-i.offsetScore:a.abbrScore!==i.abbrScore?a.abbrScore-i.abbrScore:i.zone.population-a.zone.population}function z(a,i){var e,r;for(m(i),e=0;e<i.length;e++)r=i[e],u[r]=u[r]||{},u[r][a]=!0}function E(){try{var a=Intl.DateTimeFormat().resolvedOptions().timeZone;if(a&&3<a.length){var i=s[g(a)];if(i)return i;N("Moment Timezone found "+a+" from the Intl api, but did not have that data loaded.")}}catch(a){}var e,r,o,A=function(){var a,i,e,r=(new Date).getFullYear()-2,o=new b(new Date(r,0,1)),A=[o];for(e=1;e<48;e++)(i=new b(new Date(r,e,1))).offset!==o.offset&&(a=d(o,i),A.push(a),A.push(new b(new Date(a.at+6e4)))),o=i;for(e=0;e<4;e++)A.push(new b(new Date(r+e,0,1))),A.push(new b(new Date(r+e,6,1)));return A}(),c=A.length,n=function(a){var i,e,r,o=a.length,A={},c=[];for(i=0;i<o;i++)for(e in r=u[a[i].offset]||{})r.hasOwnProperty(e)&&(A[e]=!0);for(i in A)A.hasOwnProperty(i)&&c.push(s[i]);return c}(A),t=[];for(r=0;r<n.length;r++){for(e=new M(S(n[r]),c),o=0;o<c;o++)e.scoreOffsetAt(A[o]);t.push(e)}return t.sort(h),0<t.length?t[0].zone.name:void 0}function g(a){return(a||"").toLowerCase().replace(/\//g,"_")}function T(a){var i,e,r,o;for("string"==typeof a&&(a=[a]),i=0;i<a.length;i++)o=g(e=(r=a[i].split("|"))[0]),c[o]=a[i],s[o]=e,z(o,r[2].split(" "))}function S(a,i){a=g(a);var e,r=c[a];return r instanceof p?r:"string"==typeof r?(r=new p(r),c[a]=r):n[a]&&i!==S&&(e=S(n[a],S))?((r=c[a]=new p)._set(e),r.name=s[a],r):null}function P(a){var i,e,r,o;for("string"==typeof a&&(a=[a]),i=0;i<a.length;i++)r=g((e=a[i].split("|"))[0]),o=g(e[1]),n[r]=o,s[r]=e[0],n[o]=r,s[o]=e[1]}function _(a){T(a.zones),P(a.links),C.dataVersion=a.version}function k(a){var i="X"===a._f||"x"===a._f;return!(!a._a||void 0!==a._tzm||i)}function N(a){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(a)}function C(a){var i=Array.prototype.slice.call(arguments,0,-1),e=arguments[arguments.length-1],r=S(e),o=A.utc.apply(null,i);return r&&!A.isMoment(a)&&k(o)&&o.add(r.parse(o),"minutes"),o.tz(e),o}(e<2||2===e&&r<6)&&N("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+A.version+". See momentjs.com"),p.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var i,e=+a,r=this.untils;for(i=0;i<r.length;i++)if(e<r[i])return i},parse:function(a){var i,e,r,o,A=+a,c=this.offsets,n=this.untils,t=n.length-1;for(o=0;o<t;o++)if(i=c[o],e=c[o+1],r=c[o?o-1:o],i<e&&C.moveAmbiguousForward?i=e:r<i&&C.moveInvalidForward&&(i=r),A<n[o]-6e4*i)return c[o];return c[t]},abbr:function(a){return this.abbrs[this._index(a)]},offset:function(a){return N("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(a)]},utcOffset:function(a){return this.offsets[this._index(a)]}},M.prototype.scoreOffsetAt=function(a){this.offsetScore+=Math.abs(this.zone.utcOffset(a.at)-a.offset),this.zone.abbr(a.at).replace(/[^A-Z]/g,"")!==a.abbr&&this.abbrScore++},C.version="0.5.17",C.dataVersion="",C._zones=c,C._links=n,C._names=s,C.add=T,C.link=P,C.load=_,C.zone=S,C.zoneExists=function a(i){return a.didShowError||(a.didShowError=!0,N("moment.tz.zoneExists('"+i+"') has been deprecated in favor of !moment.tz.zone('"+i+"')")),!!S(i)},C.guess=function(a){return i&&!a||(i=E()),i},C.names=function(){var a,i=[];for(a in s)s.hasOwnProperty(a)&&(c[a]||c[n[a]])&&s[a]&&i.push(s[a]);return i.sort()},C.Zone=p,C.unpack=l,C.unpackBase60=o,C.needsOffset=k,C.moveInvalidForward=!0,C.moveAmbiguousForward=!1;var O,B=A.fn;function G(a){return function(){return this._z?this._z.abbr(this):a.call(this)}}A.tz=C,A.defaultZone=null,A.updateOffset=function(a,i){var e,r=A.defaultZone;void 0===a._z&&(r&&k(a)&&!a._isUTC&&(a._d=A.utc(a._a)._d,a.utc().add(r.parse(a),"minutes")),a._z=r),a._z&&(e=a._z.utcOffset(a),Math.abs(e)<16&&(e/=60),void 0!==a.utcOffset?a.utcOffset(-e,i):a.zone(e,i))},B.tz=function(a,i){return a?(this._z=S(a),this._z?A.updateOffset(this,i):N("Moment Timezone has no data for "+a+". See http://momentjs.com/timezone/docs/#/data-loading/."),this):this._z?this._z.name:void 0},B.zoneName=G(B.zoneName),B.zoneAbbr=G(B.zoneAbbr),B.utc=(O=B.utc,function(){return this._z=null,O.apply(this,arguments)}),A.tz.setDefault=function(a){return(e<2||2===e&&r<9)&&N("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+A.version+"."),A.defaultZone=a?S(a):null,A};var D=A.momentProperties;return"[object Array]"===Object.prototype.toString.call(D)?(D.push("_z"),D.push("_a")):D&&(D._z=null),_({version:"2018e",zones:["Africa/Abidjan|GMT|0|0||48e5","Africa/Nairobi|EAT|-30|0||47e5","Africa/Algiers|CET|-10|0||26e5","Africa/Lagos|WAT|-10|0||17e6","Africa/Maputo|CAT|-20|0||26e5","Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6","Africa/Casablanca|WET WEST|0 -10|0101010101010101010101010101010101010101010|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00|32e5","Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6","Africa/Johannesburg|SAST|-20|0||84e5","Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5","Africa/Sao_Tome|GMT WAT|0 -10|01|1UQN0","Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5","Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326","America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4","America/Santo_Domingo|AST|40|0||29e5","America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4","America/Fortaleza|-03|30|0||34e5","America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5","America/Panama|EST|50|0||15e5","America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Bahia|-02 -03|20 30|01|1GCq0|27e5","America/Managua|CST|60|0||22e5","America/La_Paz|-04|40|0||19e5","America/Lima|-05|50|0||11e6","America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5","America/Campo_Grande|-03 -04|30 40|01010101010101010101010|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0|77e4","America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5","America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5","America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Phoenix|MST|70|0||42e5","America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6","America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6","America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4","America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4","America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3","America/Grand_Turk|EST EDT AST|50 40 40|0101010121010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2","America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5","America/Metlakatla|PST AKST AKDT|80 90 80|0121212121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2","America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2","America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Noronha|-02|20|0||30e2","America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5","Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|62e5","America/Sao_Paulo|-02 -03|20 30|01010101010101010101010|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0|20e6","Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4","America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4","Antarctica/Casey|+11 +08|-b0 -80|0101|1GAF0 blz0 3m10|10","Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Guadalcanal|+11|-b0|0||11e4","Asia/Tashkent|+05|-50|0||23e5","Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Asia/Baghdad|+03|-30|0||66e5","Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40","Asia/Dhaka|+06|-60|0||16e6","Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5","Asia/Kamchatka|+12|-c0|0||18e4","Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|+07|-70|0||15e6","Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0","Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5","Asia/Manila|+08|-80|0||24e6","Asia/Kolkata|IST|-5u|0||15e6","Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4","Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|CST|-80|0||23e6","Asia/Colombo|+0530|-5u|0||22e5","Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|+09|-90|0||19e4","Asia/Dubai|+04|-40|0||39e5","Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0|18e5","Asia/Hong_Kong|HKT|-80|0||73e5","Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4","Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|WIB|-70|0||31e6","Asia/Jayapura|WIT|-90|0||26e4","Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4","Asia/Kabul|+0430|-4u|0||46e5","Asia/Karachi|PKT|-50|0||24e6","Asia/Kathmandu|+0545|-5J|0||12e5","Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4","Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5","Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3","Asia/Makassar|WITA|-80|0||15e5","Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5","Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5","Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5","Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BAu|29e5","Asia/Rangoon|+0630|-6u|0||48e5","Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4","Asia/Seoul|KST|-90|0||23e6","Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2","Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Tokyo|JST|-90|0||38e6","Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5","Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4","Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5","Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5","Atlantic/Cape_Verde|-01|10|0||50e4","Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST|-a0|0||20e5","Australia/Darwin|ACST|-9u|0||12e4","Australia/Eucla|+0845|-8J|0||368","Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Perth|AWST|-80|0||18e5","Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0|30e2","Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5","Etc/GMT-1|+01|-10|0|","Pacific/Fakaofo|+13|-d0|0||483","Pacific/Kiritimati|+14|-e0|0||51e2","Etc/GMT-2|+02|-20|0|","Pacific/Tahiti|-10|a0|0||18e4","Pacific/Niue|-11|b0|0||12e2","Etc/GMT+12|-12|c0|0|","Pacific/Galapagos|-06|60|0||25e3","Etc/GMT+7|-07|70|0|","Pacific/Pitcairn|-08|80|0||56","Pacific/Gambier|-09|90|0||125","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Astrakhan|+04 +03|-40 -30|010|1N7y0 3rd0","Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6","Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4","Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4","Europe/Volgograd|+04 +03|-40 -30|01|1N7y0|10e5","Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6","Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810","Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4","Pacific/Honolulu|HST|a0|0||37e4","MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0","Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4","Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0|88e4","Pacific/Guam|ChST|-a0|0||17e4","Pacific/Marquesas|-0930|9u|0||86e2","Pacific/Pago_Pago|SST|b0|0||37e2","Pacific/Norfolk|+1130 +11|-bu -b0|01|1PoCu|25e4","Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Bissau","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Monrovia","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|America/Danmarkshavn","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Etc/GMT","Africa/Abidjan|Etc/GMT+0","Africa/Abidjan|Etc/GMT-0","Africa/Abidjan|Etc/GMT0","Africa/Abidjan|Etc/Greenwich","Africa/Abidjan|GMT","Africa/Abidjan|GMT+0","Africa/Abidjan|GMT-0","Africa/Abidjan|GMT0","Africa/Abidjan|Greenwich","Africa/Abidjan|Iceland","Africa/Algiers|Africa/Tunis","Africa/Cairo|Egypt","Africa/Casablanca|Africa/El_Aaiun","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Ndjamena","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Juba","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|America/Juneau","America/Anchorage|America/Nome","America/Anchorage|America/Sitka","America/Anchorage|America/Yakutat","America/Anchorage|US/Alaska","America/Campo_Grande|America/Cuiaba","America/Chicago|America/Indiana/Knox","America/Chicago|America/Indiana/Tell_City","America/Chicago|America/Knox_IN","America/Chicago|America/Matamoros","America/Chicago|America/Menominee","America/Chicago|America/North_Dakota/Beulah","America/Chicago|America/North_Dakota/Center","America/Chicago|America/North_Dakota/New_Salem","America/Chicago|America/Rainy_River","America/Chicago|America/Rankin_Inlet","America/Chicago|America/Resolute","America/Chicago|America/Winnipeg","America/Chicago|CST6CDT","America/Chicago|Canada/Central","America/Chicago|US/Central","America/Chicago|US/Indiana-Starke","America/Chihuahua|America/Mazatlan","America/Chihuahua|Mexico/BajaSur","America/Denver|America/Boise","America/Denver|America/Cambridge_Bay","America/Denver|America/Edmonton","America/Denver|America/Inuvik","America/Denver|America/Ojinaga","America/Denver|America/Shiprock","America/Denver|America/Yellowknife","America/Denver|Canada/Mountain","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Fortaleza|America/Argentina/Buenos_Aires","America/Fortaleza|America/Argentina/Catamarca","America/Fortaleza|America/Argentina/ComodRivadavia","America/Fortaleza|America/Argentina/Cordoba","America/Fortaleza|America/Argentina/Jujuy","America/Fortaleza|America/Argentina/La_Rioja","America/Fortaleza|America/Argentina/Mendoza","America/Fortaleza|America/Argentina/Rio_Gallegos","America/Fortaleza|America/Argentina/Salta","America/Fortaleza|America/Argentina/San_Juan","America/Fortaleza|America/Argentina/San_Luis","America/Fortaleza|America/Argentina/Tucuman","America/Fortaleza|America/Argentina/Ushuaia","America/Fortaleza|America/Belem","America/Fortaleza|America/Buenos_Aires","America/Fortaleza|America/Catamarca","America/Fortaleza|America/Cayenne","America/Fortaleza|America/Cordoba","America/Fortaleza|America/Jujuy","America/Fortaleza|America/Maceio","America/Fortaleza|America/Mendoza","America/Fortaleza|America/Paramaribo","America/Fortaleza|America/Recife","America/Fortaleza|America/Rosario","America/Fortaleza|America/Santarem","America/Fortaleza|Antarctica/Rothera","America/Fortaleza|Atlantic/Stanley","America/Fortaleza|Etc/GMT+3","America/Halifax|America/Glace_Bay","America/Halifax|America/Goose_Bay","America/Halifax|America/Moncton","America/Halifax|America/Thule","America/Halifax|Atlantic/Bermuda","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/La_Paz|America/Boa_Vista","America/La_Paz|America/Guyana","America/La_Paz|America/Manaus","America/La_Paz|America/Porto_Velho","America/La_Paz|Brazil/West","America/La_Paz|Etc/GMT+4","America/Lima|America/Bogota","America/Lima|America/Guayaquil","America/Lima|Etc/GMT+5","America/Los_Angeles|America/Dawson","America/Los_Angeles|America/Ensenada","America/Los_Angeles|America/Santa_Isabel","America/Los_Angeles|America/Tijuana","America/Los_Angeles|America/Vancouver","America/Los_Angeles|America/Whitehorse","America/Los_Angeles|Canada/Pacific","America/Los_Angeles|Canada/Yukon","America/Los_Angeles|Mexico/BajaNorte","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Managua|America/Belize","America/Managua|America/Costa_Rica","America/Managua|America/El_Salvador","America/Managua|America/Guatemala","America/Managua|America/Regina","America/Managua|America/Swift_Current","America/Managua|America/Tegucigalpa","America/Managua|Canada/Saskatchewan","America/Mexico_City|America/Bahia_Banderas","America/Mexico_City|America/Merida","America/Mexico_City|America/Monterrey","America/Mexico_City|Mexico/General","America/New_York|America/Detroit","America/New_York|America/Fort_Wayne","America/New_York|America/Indiana/Indianapolis","America/New_York|America/Indiana/Marengo","America/New_York|America/Indiana/Petersburg","America/New_York|America/Indiana/Vevay","America/New_York|America/Indiana/Vincennes","America/New_York|America/Indiana/Winamac","America/New_York|America/Indianapolis","America/New_York|America/Iqaluit","America/New_York|America/Kentucky/Louisville","America/New_York|America/Kentucky/Monticello","America/New_York|America/Louisville","America/New_York|America/Montreal","America/New_York|America/Nassau","America/New_York|America/Nipigon","America/New_York|America/Pangnirtung","America/New_York|America/Thunder_Bay","America/New_York|America/Toronto","America/New_York|Canada/Eastern","America/New_York|EST5EDT","America/New_York|US/East-Indiana","America/New_York|US/Eastern","America/New_York|US/Michigan","America/Noronha|Atlantic/South_Georgia","America/Noronha|Brazil/DeNoronha","America/Noronha|Etc/GMT+2","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|America/Jamaica","America/Panama|EST","America/Panama|Jamaica","America/Phoenix|America/Creston","America/Phoenix|America/Dawson_Creek","America/Phoenix|America/Hermosillo","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Rio_Branco|America/Eirunepe","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Santo_Domingo|America/Anguilla","America/Santo_Domingo|America/Antigua","America/Santo_Domingo|America/Aruba","America/Santo_Domingo|America/Barbados","America/Santo_Domingo|America/Blanc-Sablon","America/Santo_Domingo|America/Curacao","America/Santo_Domingo|America/Dominica","America/Santo_Domingo|America/Grenada","America/Santo_Domingo|America/Guadeloupe","America/Santo_Domingo|America/Kralendijk","America/Santo_Domingo|America/Lower_Princes","America/Santo_Domingo|America/Marigot","America/Santo_Domingo|America/Martinique","America/Santo_Domingo|America/Montserrat","America/Santo_Domingo|America/Port_of_Spain","America/Santo_Domingo|America/Puerto_Rico","America/Santo_Domingo|America/St_Barthelemy","America/Santo_Domingo|America/St_Kitts","America/Santo_Domingo|America/St_Lucia","America/Santo_Domingo|America/St_Thomas","America/Santo_Domingo|America/St_Vincent","America/Santo_Domingo|America/Tortola","America/Santo_Domingo|America/Virgin","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","Antarctica/Palmer|America/Punta_Arenas","Asia/Baghdad|Antarctica/Syowa","Asia/Baghdad|Asia/Aden","Asia/Baghdad|Asia/Bahrain","Asia/Baghdad|Asia/Kuwait","Asia/Baghdad|Asia/Qatar","Asia/Baghdad|Asia/Riyadh","Asia/Baghdad|Etc/GMT-3","Asia/Baghdad|Europe/Minsk","Asia/Bangkok|Asia/Ho_Chi_Minh","Asia/Bangkok|Asia/Novokuznetsk","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Saigon","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Etc/GMT-7","Asia/Bangkok|Indian/Christmas","Asia/Dhaka|Antarctica/Vostok","Asia/Dhaka|Asia/Almaty","Asia/Dhaka|Asia/Bishkek","Asia/Dhaka|Asia/Dacca","Asia/Dhaka|Asia/Kashgar","Asia/Dhaka|Asia/Qyzylorda","Asia/Dhaka|Asia/Thimbu","Asia/Dhaka|Asia/Thimphu","Asia/Dhaka|Asia/Urumqi","Asia/Dhaka|Etc/GMT-6","Asia/Dhaka|Indian/Chagos","Asia/Dili|Etc/GMT-9","Asia/Dili|Pacific/Palau","Asia/Dubai|Asia/Muscat","Asia/Dubai|Asia/Tbilisi","Asia/Dubai|Asia/Yerevan","Asia/Dubai|Etc/GMT-4","Asia/Dubai|Europe/Samara","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Mauritius","Asia/Dubai|Indian/Reunion","Asia/Gaza|Asia/Hebron","Asia/Hong_Kong|Hongkong","Asia/Jakarta|Asia/Pontianak","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kamchatka|Asia/Anadyr","Asia/Kamchatka|Etc/GMT-12","Asia/Kamchatka|Kwajalein","Asia/Kamchatka|Pacific/Funafuti","Asia/Kamchatka|Pacific/Kwajalein","Asia/Kamchatka|Pacific/Majuro","Asia/Kamchatka|Pacific/Nauru","Asia/Kamchatka|Pacific/Tarawa","Asia/Kamchatka|Pacific/Wake","Asia/Kamchatka|Pacific/Wallis","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Makassar|Asia/Ujung_Pandang","Asia/Manila|Asia/Brunei","Asia/Manila|Asia/Kuala_Lumpur","Asia/Manila|Asia/Kuching","Asia/Manila|Asia/Singapore","Asia/Manila|Etc/GMT-8","Asia/Manila|Singapore","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|Asia/Macao","Asia/Shanghai|Asia/Macau","Asia/Shanghai|Asia/Taipei","Asia/Shanghai|PRC","Asia/Shanghai|ROC","Asia/Tashkent|Antarctica/Mawson","Asia/Tashkent|Asia/Aqtau","Asia/Tashkent|Asia/Aqtobe","Asia/Tashkent|Asia/Ashgabat","Asia/Tashkent|Asia/Ashkhabad","Asia/Tashkent|Asia/Atyrau","Asia/Tashkent|Asia/Dushanbe","Asia/Tashkent|Asia/Oral","Asia/Tashkent|Asia/Samarkand","Asia/Tashkent|Etc/GMT-5","Asia/Tashkent|Indian/Kerguelen","Asia/Tashkent|Indian/Maldives","Asia/Tehran|Iran","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Vladivostok|Asia/Ust-Nera","Asia/Yakutsk|Asia/Khandyga","Atlantic/Azores|America/Scoresbysund","Atlantic/Cape_Verde|Etc/GMT+1","Australia/Adelaide|Australia/Broken_Hill","Australia/Adelaide|Australia/South","Australia/Adelaide|Australia/Yancowinna","Australia/Brisbane|Australia/Lindeman","Australia/Brisbane|Australia/Queensland","Australia/Darwin|Australia/North","Australia/Lord_Howe|Australia/LHI","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/Currie","Australia/Sydney|Australia/Hobart","Australia/Sydney|Australia/Melbourne","Australia/Sydney|Australia/NSW","Australia/Sydney|Australia/Tasmania","Australia/Sydney|Australia/Victoria","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Astrakhan|Europe/Ulyanovsk","Europe/Athens|Asia/Nicosia","Europe/Athens|EET","Europe/Athens|Europe/Bucharest","Europe/Athens|Europe/Helsinki","Europe/Athens|Europe/Kiev","Europe/Athens|Europe/Mariehamn","Europe/Athens|Europe/Nicosia","Europe/Athens|Europe/Riga","Europe/Athens|Europe/Sofia","Europe/Athens|Europe/Tallinn","Europe/Athens|Europe/Uzhgorod","Europe/Athens|Europe/Vilnius","Europe/Athens|Europe/Zaporozhye","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Atlantic/Canary","Europe/Lisbon|Atlantic/Faeroe","Europe/Lisbon|Atlantic/Faroe","Europe/Lisbon|Atlantic/Madeira","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Africa/Ceuta","Europe/Paris|Arctic/Longyearbyen","Europe/Paris|Atlantic/Jan_Mayen","Europe/Paris|CET","Europe/Paris|Europe/Amsterdam","Europe/Paris|Europe/Andorra","Europe/Paris|Europe/Belgrade","Europe/Paris|Europe/Berlin","Europe/Paris|Europe/Bratislava","Europe/Paris|Europe/Brussels","Europe/Paris|Europe/Budapest","Europe/Paris|Europe/Busingen","Europe/Paris|Europe/Copenhagen","Europe/Paris|Europe/Gibraltar","Europe/Paris|Europe/Ljubljana","Europe/Paris|Europe/Luxembourg","Europe/Paris|Europe/Madrid","Europe/Paris|Europe/Malta","Europe/Paris|Europe/Monaco","Europe/Paris|Europe/Oslo","Europe/Paris|Europe/Podgorica","Europe/Paris|Europe/Prague","Europe/Paris|Europe/Rome","Europe/Paris|Europe/San_Marino","Europe/Paris|Europe/Sarajevo","Europe/Paris|Europe/Skopje","Europe/Paris|Europe/Stockholm","Europe/Paris|Europe/Tirane","Europe/Paris|Europe/Vaduz","Europe/Paris|Europe/Vatican","Europe/Paris|Europe/Vienna","Europe/Paris|Europe/Warsaw","Europe/Paris|Europe/Zagreb","Europe/Paris|Europe/Zurich","Europe/Paris|Poland","Europe/Volgograd|Europe/Kirov","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Fakaofo|Etc/GMT-13","Pacific/Fakaofo|Pacific/Enderbury","Pacific/Galapagos|Etc/GMT+6","Pacific/Gambier|Etc/GMT+9","Pacific/Guadalcanal|Antarctica/Macquarie","Pacific/Guadalcanal|Etc/GMT-11","Pacific/Guadalcanal|Pacific/Efate","Pacific/Guadalcanal|Pacific/Kosrae","Pacific/Guadalcanal|Pacific/Noumea","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kiritimati|Etc/GMT-14","Pacific/Niue|Etc/GMT+11","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Pitcairn|Etc/GMT+8","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tahiti|Etc/GMT+10","Pacific/Tahiti|Pacific/Rarotonga"]}),A}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.js
new file mode 100644
index 00000000000..23a50faa422
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.js
@@ -0,0 +1,1204 @@
+//! moment-timezone.js
+//! version : 0.5.17
+//! Copyright (c) JS Foundation and other contributors
+//! license : MIT
+//! github.com/moment/moment-timezone
+
+(function (root, factory) {
+ "use strict";
+
+ /*global define*/
+ if (typeof define === 'function' && define.amd) {
+ define(['moment'], factory); // AMD
+ } else if (typeof module === 'object' && module.exports) {
+ module.exports = factory(require('moment')); // Node
+ } else {
+ factory(root.moment); // Browser
+ }
+}(this, function (moment) {
+ "use strict";
+
+ // Do not load moment-timezone a second time.
+ // if (moment.tz !== undefined) {
+ // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
+ // return moment;
+ // }
+
+ var VERSION = "0.5.17",
+ zones = {},
+ links = {},
+ names = {},
+ guesses = {},
+ cachedGuess,
+
+ momentVersion = moment.version.split('.'),
+ major = +momentVersion[0],
+ minor = +momentVersion[1];
+
+ // Moment.js version check
+ if (major < 2 || (major === 2 && minor < 6)) {
+ logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
+ }
+
+ /************************************
+ Unpacking
+ ************************************/
+
+ function charCodeToInt(charCode) {
+ if (charCode > 96) {
+ return charCode - 87;
+ } else if (charCode > 64) {
+ return charCode - 29;
+ }
+ return charCode - 48;
+ }
+
+ function unpackBase60(string) {
+ var i = 0,
+ parts = string.split('.'),
+ whole = parts[0],
+ fractional = parts[1] || '',
+ multiplier = 1,
+ num,
+ out = 0,
+ sign = 1;
+
+ // handle negative numbers
+ if (string.charCodeAt(0) === 45) {
+ i = 1;
+ sign = -1;
+ }
+
+ // handle digits before the decimal
+ for (i; i < whole.length; i++) {
+ num = charCodeToInt(whole.charCodeAt(i));
+ out = 60 * out + num;
+ }
+
+ // handle digits after the decimal
+ for (i = 0; i < fractional.length; i++) {
+ multiplier = multiplier / 60;
+ num = charCodeToInt(fractional.charCodeAt(i));
+ out += num * multiplier;
+ }
+
+ return out * sign;
+ }
+
+ function arrayToInt (array) {
+ for (var i = 0; i < array.length; i++) {
+ array[i] = unpackBase60(array[i]);
+ }
+ }
+
+ function intToUntil (array, length) {
+ for (var i = 0; i < length; i++) {
+ array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
+ }
+
+ array[length - 1] = Infinity;
+ }
+
+ function mapIndices (source, indices) {
+ var out = [], i;
+
+ for (i = 0; i < indices.length; i++) {
+ out[i] = source[indices[i]];
+ }
+
+ return out;
+ }
+
+ function unpack (string) {
+ var data = string.split('|'),
+ offsets = data[2].split(' '),
+ indices = data[3].split(''),
+ untils = data[4].split(' ');
+
+ arrayToInt(offsets);
+ arrayToInt(indices);
+ arrayToInt(untils);
+
+ intToUntil(untils, indices.length);
+
+ return {
+ name : data[0],
+ abbrs : mapIndices(data[1].split(' '), indices),
+ offsets : mapIndices(offsets, indices),
+ untils : untils,
+ population : data[5] | 0
+ };
+ }
+
+ /************************************
+ Zone object
+ ************************************/
+
+ function Zone (packedString) {
+ if (packedString) {
+ this._set(unpack(packedString));
+ }
+ }
+
+ Zone.prototype = {
+ _set : function (unpacked) {
+ this.name = unpacked.name;
+ this.abbrs = unpacked.abbrs;
+ this.untils = unpacked.untils;
+ this.offsets = unpacked.offsets;
+ this.population = unpacked.population;
+ },
+
+ _index : function (timestamp) {
+ var target = +timestamp,
+ untils = this.untils,
+ i;
+
+ for (i = 0; i < untils.length; i++) {
+ if (target < untils[i]) {
+ return i;
+ }
+ }
+ },
+
+ parse : function (timestamp) {
+ var target = +timestamp,
+ offsets = this.offsets,
+ untils = this.untils,
+ max = untils.length - 1,
+ offset, offsetNext, offsetPrev, i;
+
+ for (i = 0; i < max; i++) {
+ offset = offsets[i];
+ offsetNext = offsets[i + 1];
+ offsetPrev = offsets[i ? i - 1 : i];
+
+ if (offset < offsetNext && tz.moveAmbiguousForward) {
+ offset = offsetNext;
+ } else if (offset > offsetPrev && tz.moveInvalidForward) {
+ offset = offsetPrev;
+ }
+
+ if (target < untils[i] - (offset * 60000)) {
+ return offsets[i];
+ }
+ }
+
+ return offsets[max];
+ },
+
+ abbr : function (mom) {
+ return this.abbrs[this._index(mom)];
+ },
+
+ offset : function (mom) {
+ logError("zone.offset has been deprecated in favor of zone.utcOffset");
+ return this.offsets[this._index(mom)];
+ },
+
+ utcOffset : function (mom) {
+ return this.offsets[this._index(mom)];
+ }
+ };
+
+ /************************************
+ Current Timezone
+ ************************************/
+
+ function OffsetAt(at) {
+ var timeString = at.toTimeString();
+ var abbr = timeString.match(/\([a-z ]+\)/i);
+ if (abbr && abbr[0]) {
+ // 17:56:31 GMT-0600 (CST)
+ // 17:56:31 GMT-0600 (Central Standard Time)
+ abbr = abbr[0].match(/[A-Z]/g);
+ abbr = abbr ? abbr.join('') : undefined;
+ } else {
+ // 17:56:31 CST
+ // 17:56:31 GMT+0800 (台北標準時間)
+ abbr = timeString.match(/[A-Z]{3,5}/g);
+ abbr = abbr ? abbr[0] : undefined;
+ }
+
+ if (abbr === 'GMT') {
+ abbr = undefined;
+ }
+
+ this.at = +at;
+ this.abbr = abbr;
+ this.offset = at.getTimezoneOffset();
+ }
+
+ function ZoneScore(zone) {
+ this.zone = zone;
+ this.offsetScore = 0;
+ this.abbrScore = 0;
+ }
+
+ ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
+ this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
+ if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
+ this.abbrScore++;
+ }
+ };
+
+ function findChange(low, high) {
+ var mid, diff;
+
+ while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
+ mid = new OffsetAt(new Date(low.at + diff));
+ if (mid.offset === low.offset) {
+ low = mid;
+ } else {
+ high = mid;
+ }
+ }
+
+ return low;
+ }
+
+ function userOffsets() {
+ var startYear = new Date().getFullYear() - 2,
+ last = new OffsetAt(new Date(startYear, 0, 1)),
+ offsets = [last],
+ change, next, i;
+
+ for (i = 1; i < 48; i++) {
+ next = new OffsetAt(new Date(startYear, i, 1));
+ if (next.offset !== last.offset) {
+ change = findChange(last, next);
+ offsets.push(change);
+ offsets.push(new OffsetAt(new Date(change.at + 6e4)));
+ }
+ last = next;
+ }
+
+ for (i = 0; i < 4; i++) {
+ offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
+ offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
+ }
+
+ return offsets;
+ }
+
+ function sortZoneScores (a, b) {
+ if (a.offsetScore !== b.offsetScore) {
+ return a.offsetScore - b.offsetScore;
+ }
+ if (a.abbrScore !== b.abbrScore) {
+ return a.abbrScore - b.abbrScore;
+ }
+ return b.zone.population - a.zone.population;
+ }
+
+ function addToGuesses (name, offsets) {
+ var i, offset;
+ arrayToInt(offsets);
+ for (i = 0; i < offsets.length; i++) {
+ offset = offsets[i];
+ guesses[offset] = guesses[offset] || {};
+ guesses[offset][name] = true;
+ }
+ }
+
+ function guessesForUserOffsets (offsets) {
+ var offsetsLength = offsets.length,
+ filteredGuesses = {},
+ out = [],
+ i, j, guessesOffset;
+
+ for (i = 0; i < offsetsLength; i++) {
+ guessesOffset = guesses[offsets[i].offset] || {};
+ for (j in guessesOffset) {
+ if (guessesOffset.hasOwnProperty(j)) {
+ filteredGuesses[j] = true;
+ }
+ }
+ }
+
+ for (i in filteredGuesses) {
+ if (filteredGuesses.hasOwnProperty(i)) {
+ out.push(names[i]);
+ }
+ }
+
+ return out;
+ }
+
+ function rebuildGuess () {
+
+ // use Intl API when available and returning valid time zone
+ try {
+ var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ if (intlName && intlName.length > 3) {
+ var name = names[normalizeName(intlName)];
+ if (name) {
+ return name;
+ }
+ logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
+ }
+ } catch (e) {
+ // Intl unavailable, fall back to manual guessing.
+ }
+
+ var offsets = userOffsets(),
+ offsetsLength = offsets.length,
+ guesses = guessesForUserOffsets(offsets),
+ zoneScores = [],
+ zoneScore, i, j;
+
+ for (i = 0; i < guesses.length; i++) {
+ zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
+ for (j = 0; j < offsetsLength; j++) {
+ zoneScore.scoreOffsetAt(offsets[j]);
+ }
+ zoneScores.push(zoneScore);
+ }
+
+ zoneScores.sort(sortZoneScores);
+
+ return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
+ }
+
+ function guess (ignoreCache) {
+ if (!cachedGuess || ignoreCache) {
+ cachedGuess = rebuildGuess();
+ }
+ return cachedGuess;
+ }
+
+ /************************************
+ Global Methods
+ ************************************/
+
+ function normalizeName (name) {
+ return (name || '').toLowerCase().replace(/\//g, '_');
+ }
+
+ function addZone (packed) {
+ var i, name, split, normalized;
+
+ if (typeof packed === "string") {
+ packed = [packed];
+ }
+
+ for (i = 0; i < packed.length; i++) {
+ split = packed[i].split('|');
+ name = split[0];
+ normalized = normalizeName(name);
+ zones[normalized] = packed[i];
+ names[normalized] = name;
+ addToGuesses(normalized, split[2].split(' '));
+ }
+ }
+
+ function getZone (name, caller) {
+ name = normalizeName(name);
+
+ var zone = zones[name];
+ var link;
+
+ if (zone instanceof Zone) {
+ return zone;
+ }
+
+ if (typeof zone === 'string') {
+ zone = new Zone(zone);
+ zones[name] = zone;
+ return zone;
+ }
+
+ // Pass getZone to prevent recursion more than 1 level deep
+ if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
+ zone = zones[name] = new Zone();
+ zone._set(link);
+ zone.name = names[name];
+ return zone;
+ }
+
+ return null;
+ }
+
+ function getNames () {
+ var i, out = [];
+
+ for (i in names) {
+ if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
+ out.push(names[i]);
+ }
+ }
+
+ return out.sort();
+ }
+
+ function addLink (aliases) {
+ var i, alias, normal0, normal1;
+
+ if (typeof aliases === "string") {
+ aliases = [aliases];
+ }
+
+ for (i = 0; i < aliases.length; i++) {
+ alias = aliases[i].split('|');
+
+ normal0 = normalizeName(alias[0]);
+ normal1 = normalizeName(alias[1]);
+
+ links[normal0] = normal1;
+ names[normal0] = alias[0];
+
+ links[normal1] = normal0;
+ names[normal1] = alias[1];
+ }
+ }
+
+ function loadData (data) {
+ addZone(data.zones);
+ addLink(data.links);
+ tz.dataVersion = data.version;
+ }
+
+ function zoneExists (name) {
+ if (!zoneExists.didShowError) {
+ zoneExists.didShowError = true;
+ logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
+ }
+ return !!getZone(name);
+ }
+
+ function needsOffset (m) {
+ var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
+ return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
+ }
+
+ function logError (message) {
+ if (typeof console !== 'undefined' && typeof console.error === 'function') {
+ console.error(message);
+ }
+ }
+
+ /************************************
+ moment.tz namespace
+ ************************************/
+
+ function tz (input) {
+ var args = Array.prototype.slice.call(arguments, 0, -1),
+ name = arguments[arguments.length - 1],
+ zone = getZone(name),
+ out = moment.utc.apply(null, args);
+
+ if (zone && !moment.isMoment(input) && needsOffset(out)) {
+ out.add(zone.parse(out), 'minutes');
+ }
+
+ out.tz(name);
+
+ return out;
+ }
+
+ tz.version = VERSION;
+ tz.dataVersion = '';
+ tz._zones = zones;
+ tz._links = links;
+ tz._names = names;
+ tz.add = addZone;
+ tz.link = addLink;
+ tz.load = loadData;
+ tz.zone = getZone;
+ tz.zoneExists = zoneExists; // deprecated in 0.1.0
+ tz.guess = guess;
+ tz.names = getNames;
+ tz.Zone = Zone;
+ tz.unpack = unpack;
+ tz.unpackBase60 = unpackBase60;
+ tz.needsOffset = needsOffset;
+ tz.moveInvalidForward = true;
+ tz.moveAmbiguousForward = false;
+
+ /************************************
+ Interface with Moment.js
+ ************************************/
+
+ var fn = moment.fn;
+
+ moment.tz = tz;
+
+ moment.defaultZone = null;
+
+ moment.updateOffset = function (mom, keepTime) {
+ var zone = moment.defaultZone,
+ offset;
+
+ if (mom._z === undefined) {
+ if (zone && needsOffset(mom) && !mom._isUTC) {
+ mom._d = moment.utc(mom._a)._d;
+ mom.utc().add(zone.parse(mom), 'minutes');
+ }
+ mom._z = zone;
+ }
+ if (mom._z) {
+ offset = mom._z.utcOffset(mom);
+ if (Math.abs(offset) < 16) {
+ offset = offset / 60;
+ }
+ if (mom.utcOffset !== undefined) {
+ mom.utcOffset(-offset, keepTime);
+ } else {
+ mom.zone(offset, keepTime);
+ }
+ }
+ };
+
+ fn.tz = function (name, keepTime) {
+ if (name) {
+ this._z = getZone(name);
+ if (this._z) {
+ moment.updateOffset(this, keepTime);
+ } else {
+ logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
+ }
+ return this;
+ }
+ if (this._z) { return this._z.name; }
+ };
+
+ function abbrWrap (old) {
+ return function () {
+ if (this._z) { return this._z.abbr(this); }
+ return old.call(this);
+ };
+ }
+
+ function resetZoneWrap (old) {
+ return function () {
+ this._z = null;
+ return old.apply(this, arguments);
+ };
+ }
+
+ fn.zoneName = abbrWrap(fn.zoneName);
+ fn.zoneAbbr = abbrWrap(fn.zoneAbbr);
+ fn.utc = resetZoneWrap(fn.utc);
+
+ moment.tz.setDefault = function(name) {
+ if (major < 2 || (major === 2 && minor < 9)) {
+ logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
+ }
+ moment.defaultZone = name ? getZone(name) : null;
+ return moment;
+ };
+
+ // Cloning a moment should include the _z property.
+ var momentProperties = moment.momentProperties;
+ if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
+ // moment 2.8.1+
+ momentProperties.push('_z');
+ momentProperties.push('_a');
+ } else if (momentProperties) {
+ // moment 2.7.0
+ momentProperties._z = null;
+ }
+
+ loadData({
+ "version": "2018e",
+ "zones": [
+ "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5",
+ "Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5",
+ "Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5",
+ "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5",
+ "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6",
+ "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4",
+ "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5",
+ "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6",
+ "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5",
+ "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3",
+ "Africa/El_Aaiun|LMT -01 WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4",
+ "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5",
+ "Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0",
+ "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5",
+ "Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5",
+ "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5",
+ "Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|012|-2le00 4i6N0",
+ "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5",
+ "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5",
+ "Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4",
+ "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326",
+ "America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4",
+ "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3",
+ "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4",
+ "America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0",
+ "America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+ "America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0",
+ "America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0",
+ "America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+ "America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0",
+ "America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+ "America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0",
+ "America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0",
+ "America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0",
+ "America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0",
+ "America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0",
+ "America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4",
+ "America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5",
+ "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2",
+ "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3",
+ "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5",
+ "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4",
+ "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5",
+ "America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3",
+ "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2",
+ "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2",
+ "America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5",
+ "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4",
+ "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2",
+ "America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|77e4",
+ "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4",
+ "America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5",
+ "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3",
+ "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5",
+ "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5",
+ "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4",
+ "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5",
+ "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2",
+ "America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|54e4",
+ "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8",
+ "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3",
+ "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2",
+ "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5",
+ "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|012342525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 XQp0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5",
+ "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5",
+ "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3",
+ "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5",
+ "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5",
+ "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2",
+ "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5",
+ "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",
+ "America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3",
+ "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2",
+ "America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|01212121212121212121212121212121212121212121212121212121212121212121212121232121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2",
+ "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5",
+ "America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5",
+ "America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4",
+ "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4",
+ "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5",
+ "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4",
+ "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2",
+ "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2",
+ "America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4",
+ "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3",
+ "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5",
+ "America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6",
+ "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6",
+ "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4",
+ "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5",
+ "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5",
+ "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4",
+ "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4",
+ "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4",
+ "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2",
+ "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5",
+ "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",
+ "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6",
+ "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2",
+ "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3",
+ "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5",
+ "America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5",
+ "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5",
+ "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4",
+ "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6",
+ "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2",
+ "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2",
+ "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2",
+ "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",
+ "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",
+ "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4",
+ "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5",
+ "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",
+ "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4",
+ "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4",
+ "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5",
+ "America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0",
+ "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842",
+ "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2",
+ "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5",
+ "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4",
+ "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229",
+ "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4",
+ "America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5",
+ "America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5",
+ "America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|20e6",
+ "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452",
+ "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2",
+ "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",
+ "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3",
+ "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5",
+ "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656",
+ "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",
+ "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",
+ "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",
+ "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4",
+ "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642",
+ "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",
+ "Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10",
+ "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70",
+ "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80",
+ "Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1",
+ "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60",
+ "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5",
+ "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40",
+ "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130",
+ "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20",
+ "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40",
+ "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25",
+ "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4",
+ "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5",
+ "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5",
+ "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5",
+ "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3",
+ "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4",
+ "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4",
+ "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4",
+ "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0",
+ "Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5",
+ "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4",
+ "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",
+ "Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6",
+ "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+ "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5",
+ "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4",
+ "Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4",
+ "Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6",
+ "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4",
+ "Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3",
+ "Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6",
+ "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5",
+ "Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6",
+ "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5",
+ "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4",
+ "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5",
+ "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4",
+ "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|18e5",
+ "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|25e4",
+ "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5",
+ "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5",
+ "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3",
+ "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",
+ "Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6",
+ "Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6",
+ "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4",
+ "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4",
+ "Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5",
+ "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4",
+ "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6",
+ "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5",
+ "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5",
+ "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2",
+ "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5",
+ "Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5",
+ "Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4",
+ "Asia/Macau|LMT CST CDT|-7y.k -80 -90|012121212121212121212121212121212121212121|-2le80 1XO3u 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0|57e4",
+ "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3",
+ "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5",
+ "Asia/Manila|+08 +09|-80 -90|010101010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6",
+ "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4",
+ "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4",
+ "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5",
+ "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5",
+ "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4",
+ "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4",
+ "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BAu|29e5",
+ "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4",
+ "Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5",
+ "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4",
+ "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4",
+ "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6",
+ "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2",
+ "Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5",
+ "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5",
+ "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5",
+ "Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6",
+ "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3",
+ "Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rb0 1ld0 14n0 1zd0 On0 1zd0 On0|38e6",
+ "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5",
+ "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5",
+ "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2",
+ "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",
+ "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4",
+ "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5",
+ "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5",
+ "Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4",
+ "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3",
+ "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4",
+ "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4",
+ "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3",
+ "Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4",
+ "Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4",
+ "Atlantic/South_Georgia|-02|20|0||30",
+ "Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2",
+ "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5",
+ "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5",
+ "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5",
+ "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3",
+ "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746",
+ "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4",
+ "Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368",
+ "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4",
+ "Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347",
+ "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10",
+ "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5",
+ "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5",
+ "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2",
+ "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "EST|EST|50|0|",
+ "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "Etc/GMT-0|GMT|0|0|",
+ "Etc/GMT-1|+01|-10|0|",
+ "Pacific/Port_Moresby|+10|-a0|0||25e4",
+ "Pacific/Pohnpei|+11|-b0|0||34e3",
+ "Pacific/Tarawa|+12|-c0|0||29e3",
+ "Etc/GMT-13|+13|-d0|0|",
+ "Etc/GMT-14|+14|-e0|0|",
+ "Etc/GMT-2|+02|-20|0|",
+ "Etc/GMT-3|+03|-30|0|",
+ "Etc/GMT-4|+04|-40|0|",
+ "Etc/GMT-5|+05|-50|0|",
+ "Etc/GMT-6|+06|-60|0|",
+ "Indian/Christmas|+07|-70|0||21e2",
+ "Etc/GMT-8|+08|-80|0|",
+ "Pacific/Palau|+09|-90|0||21e3",
+ "Etc/GMT+1|-01|10|0|",
+ "Etc/GMT+10|-10|a0|0|",
+ "Etc/GMT+11|-11|b0|0|",
+ "Etc/GMT+12|-12|c0|0|",
+ "Etc/GMT+3|-03|30|0|",
+ "Etc/GMT+4|-04|40|0|",
+ "Etc/GMT+5|-05|50|0|",
+ "Etc/GMT+6|-06|60|0|",
+ "Etc/GMT+7|-07|70|0|",
+ "Etc/GMT+8|-08|80|0|",
+ "Etc/GMT+9|-09|90|0|",
+ "Etc/UCT|UCT|0|0|",
+ "Etc/UTC|UTC|0|0|",
+ "Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5",
+ "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3",
+ "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+ "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5",
+ "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6",
+ "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5",
+ "Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5",
+ "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5",
+ "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5",
+ "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5",
+ "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4",
+ "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4",
+ "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3",
+ "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4",
+ "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5",
+ "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4",
+ "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5",
+ "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4",
+ "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5",
+ "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4",
+ "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5",
+ "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3",
+ "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6",
+ "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6",
+ "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4",
+ "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5",
+ "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5",
+ "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810",
+ "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4",
+ "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5",
+ "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4",
+ "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4",
+ "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+ "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4",
+ "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5",
+ "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4",
+ "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5",
+ "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5",
+ "Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4",
+ "HST|HST|a0|0|",
+ "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2",
+ "Indian/Cocos|+0630|-6u|0||596",
+ "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130",
+ "Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3",
+ "Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4",
+ "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4",
+ "Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4",
+ "Pacific/Kwajalein|+11 -12 +12|-b0 c0 -c0|012|-AX0 W9X0|14e3",
+ "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "MST|MST|70|0|",
+ "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600",
+ "Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3",
+ "Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4",
+ "Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3",
+ "Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1",
+ "Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483",
+ "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0|88e4",
+ "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3",
+ "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125",
+ "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4",
+ "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4",
+ "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4",
+ "Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2",
+ "Pacific/Kosrae|+11 +12|-b0 -c0|010|-AX0 1bdz0|66e2",
+ "Pacific/Majuro|+11 +12|-b0 -c0|01|-AX0|28e3",
+ "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2",
+ "Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2",
+ "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3",
+ "Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2",
+ "Pacific/Norfolk|+1112 +1130 +1230 +11|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4",
+ "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3",
+ "Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56",
+ "Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3",
+ "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4",
+ "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3",
+ "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00"
+ ],
+ "links": [
+ "Africa/Abidjan|Africa/Bamako",
+ "Africa/Abidjan|Africa/Banjul",
+ "Africa/Abidjan|Africa/Conakry",
+ "Africa/Abidjan|Africa/Dakar",
+ "Africa/Abidjan|Africa/Freetown",
+ "Africa/Abidjan|Africa/Lome",
+ "Africa/Abidjan|Africa/Nouakchott",
+ "Africa/Abidjan|Africa/Ouagadougou",
+ "Africa/Abidjan|Africa/Timbuktu",
+ "Africa/Abidjan|Atlantic/St_Helena",
+ "Africa/Cairo|Egypt",
+ "Africa/Johannesburg|Africa/Maseru",
+ "Africa/Johannesburg|Africa/Mbabane",
+ "Africa/Lagos|Africa/Bangui",
+ "Africa/Lagos|Africa/Brazzaville",
+ "Africa/Lagos|Africa/Douala",
+ "Africa/Lagos|Africa/Kinshasa",
+ "Africa/Lagos|Africa/Libreville",
+ "Africa/Lagos|Africa/Luanda",
+ "Africa/Lagos|Africa/Malabo",
+ "Africa/Lagos|Africa/Niamey",
+ "Africa/Lagos|Africa/Porto-Novo",
+ "Africa/Maputo|Africa/Blantyre",
+ "Africa/Maputo|Africa/Bujumbura",
+ "Africa/Maputo|Africa/Gaborone",
+ "Africa/Maputo|Africa/Harare",
+ "Africa/Maputo|Africa/Kigali",
+ "Africa/Maputo|Africa/Lubumbashi",
+ "Africa/Maputo|Africa/Lusaka",
+ "Africa/Nairobi|Africa/Addis_Ababa",
+ "Africa/Nairobi|Africa/Asmara",
+ "Africa/Nairobi|Africa/Asmera",
+ "Africa/Nairobi|Africa/Dar_es_Salaam",
+ "Africa/Nairobi|Africa/Djibouti",
+ "Africa/Nairobi|Africa/Kampala",
+ "Africa/Nairobi|Africa/Mogadishu",
+ "Africa/Nairobi|Indian/Antananarivo",
+ "Africa/Nairobi|Indian/Comoro",
+ "Africa/Nairobi|Indian/Mayotte",
+ "Africa/Tripoli|Libya",
+ "America/Adak|America/Atka",
+ "America/Adak|US/Aleutian",
+ "America/Anchorage|US/Alaska",
+ "America/Argentina/Buenos_Aires|America/Buenos_Aires",
+ "America/Argentina/Catamarca|America/Argentina/ComodRivadavia",
+ "America/Argentina/Catamarca|America/Catamarca",
+ "America/Argentina/Cordoba|America/Cordoba",
+ "America/Argentina/Cordoba|America/Rosario",
+ "America/Argentina/Jujuy|America/Jujuy",
+ "America/Argentina/Mendoza|America/Mendoza",
+ "America/Atikokan|America/Coral_Harbour",
+ "America/Chicago|US/Central",
+ "America/Curacao|America/Aruba",
+ "America/Curacao|America/Kralendijk",
+ "America/Curacao|America/Lower_Princes",
+ "America/Denver|America/Shiprock",
+ "America/Denver|Navajo",
+ "America/Denver|US/Mountain",
+ "America/Detroit|US/Michigan",
+ "America/Edmonton|Canada/Mountain",
+ "America/Fort_Wayne|America/Indiana/Indianapolis",
+ "America/Fort_Wayne|America/Indianapolis",
+ "America/Fort_Wayne|US/East-Indiana",
+ "America/Halifax|Canada/Atlantic",
+ "America/Havana|Cuba",
+ "America/Indiana/Knox|America/Knox_IN",
+ "America/Indiana/Knox|US/Indiana-Starke",
+ "America/Jamaica|Jamaica",
+ "America/Kentucky/Louisville|America/Louisville",
+ "America/Los_Angeles|US/Pacific",
+ "America/Los_Angeles|US/Pacific-New",
+ "America/Manaus|Brazil/West",
+ "America/Mazatlan|Mexico/BajaSur",
+ "America/Mexico_City|Mexico/General",
+ "America/New_York|US/Eastern",
+ "America/Noronha|Brazil/DeNoronha",
+ "America/Panama|America/Cayman",
+ "America/Phoenix|US/Arizona",
+ "America/Port_of_Spain|America/Anguilla",
+ "America/Port_of_Spain|America/Antigua",
+ "America/Port_of_Spain|America/Dominica",
+ "America/Port_of_Spain|America/Grenada",
+ "America/Port_of_Spain|America/Guadeloupe",
+ "America/Port_of_Spain|America/Marigot",
+ "America/Port_of_Spain|America/Montserrat",
+ "America/Port_of_Spain|America/St_Barthelemy",
+ "America/Port_of_Spain|America/St_Kitts",
+ "America/Port_of_Spain|America/St_Lucia",
+ "America/Port_of_Spain|America/St_Thomas",
+ "America/Port_of_Spain|America/St_Vincent",
+ "America/Port_of_Spain|America/Tortola",
+ "America/Port_of_Spain|America/Virgin",
+ "America/Regina|Canada/Saskatchewan",
+ "America/Rio_Branco|America/Porto_Acre",
+ "America/Rio_Branco|Brazil/Acre",
+ "America/Santiago|Chile/Continental",
+ "America/Sao_Paulo|Brazil/East",
+ "America/St_Johns|Canada/Newfoundland",
+ "America/Tijuana|America/Ensenada",
+ "America/Tijuana|America/Santa_Isabel",
+ "America/Tijuana|Mexico/BajaNorte",
+ "America/Toronto|America/Montreal",
+ "America/Toronto|Canada/Eastern",
+ "America/Vancouver|Canada/Pacific",
+ "America/Whitehorse|Canada/Yukon",
+ "America/Winnipeg|Canada/Central",
+ "Asia/Ashgabat|Asia/Ashkhabad",
+ "Asia/Bangkok|Asia/Phnom_Penh",
+ "Asia/Bangkok|Asia/Vientiane",
+ "Asia/Dhaka|Asia/Dacca",
+ "Asia/Dubai|Asia/Muscat",
+ "Asia/Ho_Chi_Minh|Asia/Saigon",
+ "Asia/Hong_Kong|Hongkong",
+ "Asia/Jerusalem|Asia/Tel_Aviv",
+ "Asia/Jerusalem|Israel",
+ "Asia/Kathmandu|Asia/Katmandu",
+ "Asia/Kolkata|Asia/Calcutta",
+ "Asia/Kuala_Lumpur|Asia/Singapore",
+ "Asia/Kuala_Lumpur|Singapore",
+ "Asia/Macau|Asia/Macao",
+ "Asia/Makassar|Asia/Ujung_Pandang",
+ "Asia/Nicosia|Europe/Nicosia",
+ "Asia/Qatar|Asia/Bahrain",
+ "Asia/Rangoon|Asia/Yangon",
+ "Asia/Riyadh|Asia/Aden",
+ "Asia/Riyadh|Asia/Kuwait",
+ "Asia/Seoul|ROK",
+ "Asia/Shanghai|Asia/Chongqing",
+ "Asia/Shanghai|Asia/Chungking",
+ "Asia/Shanghai|Asia/Harbin",
+ "Asia/Shanghai|PRC",
+ "Asia/Taipei|ROC",
+ "Asia/Tehran|Iran",
+ "Asia/Thimphu|Asia/Thimbu",
+ "Asia/Tokyo|Japan",
+ "Asia/Ulaanbaatar|Asia/Ulan_Bator",
+ "Asia/Urumqi|Asia/Kashgar",
+ "Atlantic/Faroe|Atlantic/Faeroe",
+ "Atlantic/Reykjavik|Iceland",
+ "Atlantic/South_Georgia|Etc/GMT+2",
+ "Australia/Adelaide|Australia/South",
+ "Australia/Brisbane|Australia/Queensland",
+ "Australia/Broken_Hill|Australia/Yancowinna",
+ "Australia/Darwin|Australia/North",
+ "Australia/Hobart|Australia/Tasmania",
+ "Australia/Lord_Howe|Australia/LHI",
+ "Australia/Melbourne|Australia/Victoria",
+ "Australia/Perth|Australia/West",
+ "Australia/Sydney|Australia/ACT",
+ "Australia/Sydney|Australia/Canberra",
+ "Australia/Sydney|Australia/NSW",
+ "Etc/GMT-0|Etc/GMT",
+ "Etc/GMT-0|Etc/GMT+0",
+ "Etc/GMT-0|Etc/GMT0",
+ "Etc/GMT-0|Etc/Greenwich",
+ "Etc/GMT-0|GMT",
+ "Etc/GMT-0|GMT+0",
+ "Etc/GMT-0|GMT-0",
+ "Etc/GMT-0|GMT0",
+ "Etc/GMT-0|Greenwich",
+ "Etc/UCT|UCT",
+ "Etc/UTC|Etc/Universal",
+ "Etc/UTC|Etc/Zulu",
+ "Etc/UTC|UTC",
+ "Etc/UTC|Universal",
+ "Etc/UTC|Zulu",
+ "Europe/Belgrade|Europe/Ljubljana",
+ "Europe/Belgrade|Europe/Podgorica",
+ "Europe/Belgrade|Europe/Sarajevo",
+ "Europe/Belgrade|Europe/Skopje",
+ "Europe/Belgrade|Europe/Zagreb",
+ "Europe/Chisinau|Europe/Tiraspol",
+ "Europe/Dublin|Eire",
+ "Europe/Helsinki|Europe/Mariehamn",
+ "Europe/Istanbul|Asia/Istanbul",
+ "Europe/Istanbul|Turkey",
+ "Europe/Lisbon|Portugal",
+ "Europe/London|Europe/Belfast",
+ "Europe/London|Europe/Guernsey",
+ "Europe/London|Europe/Isle_of_Man",
+ "Europe/London|Europe/Jersey",
+ "Europe/London|GB",
+ "Europe/London|GB-Eire",
+ "Europe/Moscow|W-SU",
+ "Europe/Oslo|Arctic/Longyearbyen",
+ "Europe/Oslo|Atlantic/Jan_Mayen",
+ "Europe/Prague|Europe/Bratislava",
+ "Europe/Rome|Europe/San_Marino",
+ "Europe/Rome|Europe/Vatican",
+ "Europe/Warsaw|Poland",
+ "Europe/Zurich|Europe/Busingen",
+ "Europe/Zurich|Europe/Vaduz",
+ "Indian/Christmas|Etc/GMT-7",
+ "Pacific/Auckland|Antarctica/McMurdo",
+ "Pacific/Auckland|Antarctica/South_Pole",
+ "Pacific/Auckland|NZ",
+ "Pacific/Chatham|NZ-CHAT",
+ "Pacific/Easter|Chile/EasterIsland",
+ "Pacific/Guam|Pacific/Saipan",
+ "Pacific/Honolulu|Pacific/Johnston",
+ "Pacific/Honolulu|US/Hawaii",
+ "Pacific/Kwajalein|Kwajalein",
+ "Pacific/Pago_Pago|Pacific/Midway",
+ "Pacific/Pago_Pago|Pacific/Samoa",
+ "Pacific/Pago_Pago|US/Samoa",
+ "Pacific/Palau|Etc/GMT-9",
+ "Pacific/Pohnpei|Etc/GMT-11",
+ "Pacific/Pohnpei|Pacific/Ponape",
+ "Pacific/Port_Moresby|Etc/GMT-10",
+ "Pacific/Port_Moresby|Pacific/Chuuk",
+ "Pacific/Port_Moresby|Pacific/Truk",
+ "Pacific/Port_Moresby|Pacific/Yap",
+ "Pacific/Tarawa|Etc/GMT-12",
+ "Pacific/Tarawa|Pacific/Funafuti",
+ "Pacific/Tarawa|Pacific/Wake",
+ "Pacific/Tarawa|Pacific/Wallis"
+ ]
+ });
+
+
+ return moment;
+}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.min.js
new file mode 100644
index 00000000000..1d3235d3ada
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone-with-data.min.js
@@ -0,0 +1 @@
+!function(c,M){"use strict";"function"==typeof define&&define.amd?define(["moment"],M):"object"==typeof module&&module.exports?module.exports=M(require("moment")):M(c.moment)}(this,function(o){"use strict";var M,p={},n={},L={},q={},c=o.version.split("."),z=+c[0],A=+c[1];function a(c){return 96<c?c-87:64<c?c-29:c-48}function b(c){var M=0,z=c.split("."),A=z[0],b=z[1]||"",o=1,p=0,n=1;for(45===c.charCodeAt(0)&&(n=-(M=1));M<A.length;M++)p=60*p+a(A.charCodeAt(M));for(M=0;M<b.length;M++)o/=60,p+=a(b.charCodeAt(M))*o;return p*n}function O(c){for(var M=0;M<c.length;M++)c[M]=b(c[M])}function N(c,M){var z,A=[];for(z=0;z<M.length;z++)A[z]=c[M[z]];return A}function i(c){var M=c.split("|"),z=M[2].split(" "),A=M[3].split(""),b=M[4].split(" ");return O(z),O(A),O(b),function(c,M){for(var z=0;z<M;z++)c[z]=Math.round((c[z-1]||0)+6e4*c[z]);c[M-1]=1/0}(b,A.length),{name:M[0],abbrs:N(M[1].split(" "),A),offsets:N(z,A),untils:b,population:0|M[5]}}function W(c){c&&this._set(i(c))}function d(c){var M=c.toTimeString(),z=M.match(/\([a-z ]+\)/i);"GMT"===(z=z&&z[0]?(z=z[0].match(/[A-Z]/g))?z.join(""):void 0:(z=M.match(/[A-Z]{3,5}/g))?z[0]:void 0)&&(z=void 0),this.at=+c,this.abbr=z,this.offset=c.getTimezoneOffset()}function e(c){this.zone=c,this.offsetScore=0,this.abbrScore=0}function X(c,M){for(var z,A;A=6e4*((M.at-c.at)/12e4|0);)(z=new d(new Date(c.at+A))).offset===c.offset?c=z:M=z;return c}function f(c,M){return c.offsetScore!==M.offsetScore?c.offsetScore-M.offsetScore:c.abbrScore!==M.abbrScore?c.abbrScore-M.abbrScore:M.zone.population-c.zone.population}function B(c,M){var z,A;for(O(M),z=0;z<M.length;z++)A=M[z],q[A]=q[A]||{},q[A][c]=!0}function r(){try{var c=Intl.DateTimeFormat().resolvedOptions().timeZone;if(c&&3<c.length){var M=L[T(c)];if(M)return M;C("Moment Timezone found "+c+" from the Intl api, but did not have that data loaded.")}}catch(c){}var z,A,b,o=function(){var c,M,z,A=(new Date).getFullYear()-2,b=new d(new Date(A,0,1)),o=[b];for(z=1;z<48;z++)(M=new d(new Date(A,z,1))).offset!==b.offset&&(c=X(b,M),o.push(c),o.push(new d(new Date(c.at+6e4)))),b=M;for(z=0;z<4;z++)o.push(new d(new Date(A+z,0,1))),o.push(new d(new Date(A+z,6,1)));return o}(),p=o.length,n=function(c){var M,z,A,b=c.length,o={},p=[];for(M=0;M<b;M++)for(z in A=q[c[M].offset]||{})A.hasOwnProperty(z)&&(o[z]=!0);for(M in o)o.hasOwnProperty(M)&&p.push(L[M]);return p}(o),a=[];for(A=0;A<n.length;A++){for(z=new e(u(n[A]),p),b=0;b<p;b++)z.scoreOffsetAt(o[b]);a.push(z)}return a.sort(f),0<a.length?a[0].zone.name:void 0}function T(c){return(c||"").toLowerCase().replace(/\//g,"_")}function l(c){var M,z,A,b;for("string"==typeof c&&(c=[c]),M=0;M<c.length;M++)b=T(z=(A=c[M].split("|"))[0]),p[b]=c[M],L[b]=z,B(b,A[2].split(" "))}function u(c,M){c=T(c);var z,A=p[c];return A instanceof W?A:"string"==typeof A?(A=new W(A),p[c]=A):n[c]&&M!==u&&(z=u(n[c],u))?((A=p[c]=new W)._set(z),A.name=L[c],A):null}function t(c){var M,z,A,b;for("string"==typeof c&&(c=[c]),M=0;M<c.length;M++)A=T((z=c[M].split("|"))[0]),b=T(z[1]),n[A]=b,L[A]=z[0],n[b]=A,L[b]=z[1]}function s(c){l(c.zones),t(c.links),R.dataVersion=c.version}function E(c){var M="X"===c._f||"x"===c._f;return!(!c._a||void 0!==c._tzm||M)}function C(c){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(c)}function R(c){var M=Array.prototype.slice.call(arguments,0,-1),z=arguments[arguments.length-1],A=u(z),b=o.utc.apply(null,M);return A&&!o.isMoment(c)&&E(b)&&b.add(A.parse(b),"minutes"),b.tz(z),b}(z<2||2===z&&A<6)&&C("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+o.version+". See momentjs.com"),W.prototype={_set:function(c){this.name=c.name,this.abbrs=c.abbrs,this.untils=c.untils,this.offsets=c.offsets,this.population=c.population},_index:function(c){var M,z=+c,A=this.untils;for(M=0;M<A.length;M++)if(z<A[M])return M},parse:function(c){var M,z,A,b,o=+c,p=this.offsets,n=this.untils,a=n.length-1;for(b=0;b<a;b++)if(M=p[b],z=p[b+1],A=p[b?b-1:b],M<z&&R.moveAmbiguousForward?M=z:A<M&&R.moveInvalidForward&&(M=A),o<n[b]-6e4*M)return p[b];return p[a]},abbr:function(c){return this.abbrs[this._index(c)]},offset:function(c){return C("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(c)]},utcOffset:function(c){return this.offsets[this._index(c)]}},e.prototype.scoreOffsetAt=function(c){this.offsetScore+=Math.abs(this.zone.utcOffset(c.at)-c.offset),this.zone.abbr(c.at).replace(/[^A-Z]/g,"")!==c.abbr&&this.abbrScore++},R.version="0.5.17",R.dataVersion="",R._zones=p,R._links=n,R._names=L,R.add=l,R.link=t,R.load=s,R.zone=u,R.zoneExists=function c(M){return c.didShowError||(c.didShowError=!0,C("moment.tz.zoneExists('"+M+"') has been deprecated in favor of !moment.tz.zone('"+M+"')")),!!u(M)},R.guess=function(c){return M&&!c||(M=r()),M},R.names=function(){var c,M=[];for(c in L)L.hasOwnProperty(c)&&(p[c]||p[n[c]])&&L[c]&&M.push(L[c]);return M.sort()},R.Zone=W,R.unpack=i,R.unpackBase60=b,R.needsOffset=E,R.moveInvalidForward=!0,R.moveAmbiguousForward=!1;var S,m=o.fn;function D(c){return function(){return this._z?this._z.abbr(this):c.call(this)}}o.tz=R,o.defaultZone=null,o.updateOffset=function(c,M){var z,A=o.defaultZone;void 0===c._z&&(A&&E(c)&&!c._isUTC&&(c._d=o.utc(c._a)._d,c.utc().add(A.parse(c),"minutes")),c._z=A),c._z&&(z=c._z.utcOffset(c),Math.abs(z)<16&&(z/=60),void 0!==c.utcOffset?c.utcOffset(-z,M):c.zone(z,M))},m.tz=function(c,M){return c?(this._z=u(c),this._z?o.updateOffset(this,M):C("Moment Timezone has no data for "+c+". See http://momentjs.com/timezone/docs/#/data-loading/."),this):this._z?this._z.name:void 0},m.zoneName=D(m.zoneName),m.zoneAbbr=D(m.zoneAbbr),m.utc=(S=m.utc,function(){return this._z=null,S.apply(this,arguments)}),o.tz.setDefault=function(c){return(z<2||2===z&&A<9)&&C("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+o.version+"."),o.defaultZone=c?u(c):null,o};var P=o.momentProperties;return"[object Array]"===Object.prototype.toString.call(P)?(P.push("_z"),P.push("_a")):P&&(P._z=null),s({version:"2018e",zones:["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5","Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5","Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5","Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4","Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|012|-2le00 4i6N0","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0","America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0","America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0","America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0","America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0","America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0","America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0","America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0","America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0","America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0","America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4","America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2","America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3","America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5","America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5","America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2","America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2","America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|012342525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 XQp0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|01212121212121212121212121212121212121212121212121212121212121212121212121232121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5","America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5","America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4","America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5","America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4","America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2","America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5","America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0","America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842","America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5","America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80","Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25","Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0","Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4","Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|18e5","Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5","Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4","Asia/Macau|LMT CST CDT|-7y.k -80 -90|012121212121212121212121212121212121212121|-2le80 1XO3u 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|+08 +09|-80 -90|010101010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BAu|29e5","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4","Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rb0 1ld0 14n0 1zd0 On0 1zd0 On0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4","Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4","Atlantic/South_Georgia|-02|20|0||30","Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746","Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4","Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0|","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Etc/GMT-0|GMT|0|0|","Etc/GMT-1|+01|-10|0|","Pacific/Port_Moresby|+10|-a0|0||25e4","Pacific/Pohnpei|+11|-b0|0||34e3","Pacific/Tarawa|+12|-c0|0||29e3","Etc/GMT-13|+13|-d0|0|","Etc/GMT-14|+14|-e0|0|","Etc/GMT-2|+02|-20|0|","Etc/GMT-3|+03|-30|0|","Etc/GMT-4|+04|-40|0|","Etc/GMT-5|+05|-50|0|","Etc/GMT-6|+06|-60|0|","Indian/Christmas|+07|-70|0||21e2","Etc/GMT-8|+08|-80|0|","Pacific/Palau|+09|-90|0||21e3","Etc/GMT+1|-01|10|0|","Etc/GMT+10|-10|a0|0|","Etc/GMT+11|-11|b0|0|","Etc/GMT+12|-12|c0|0|","Etc/GMT+3|-03|30|0|","Etc/GMT+4|-04|40|0|","Etc/GMT+5|-05|50|0|","Etc/GMT+6|-06|60|0|","Etc/GMT+7|-07|70|0|","Etc/GMT+8|-08|80|0|","Etc/GMT+9|-09|90|0|","Etc/UCT|UCT|0|0|","Etc/UTC|UTC|0|0|","Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5","Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5","Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5","Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5","Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5","Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3","Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4","Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810","Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5","Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0","Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4","Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4","HST|HST|a0|0|","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Cocos|+0630|-6u|0||596","Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130","Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3","Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4","Pacific/Kwajalein|+11 -12 +12|-b0 c0 -c0|012|-AX0 W9X0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00","MST|MST|70|0|","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1","Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0|88e4","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4","Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4","Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2","Pacific/Kosrae|+11 +12|-b0 -c0|010|-AX0 1bdz0|66e2","Pacific/Majuro|+11 +12|-b0 -c0|01|-AX0|28e3","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3","Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2","Pacific/Norfolk|+1112 +1130 +1230 +11|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56","Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00"],links:["Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/St_Helena","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Atikokan|America/Coral_Harbour","America/Chicago|US/Central","America/Curacao|America/Aruba","America/Curacao|America/Kralendijk","America/Curacao|America/Lower_Princes","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Cayman","America/Phoenix|US/Arizona","America/Port_of_Spain|America/Anguilla","America/Port_of_Spain|America/Antigua","America/Port_of_Spain|America/Dominica","America/Port_of_Spain|America/Grenada","America/Port_of_Spain|America/Guadeloupe","America/Port_of_Spain|America/Marigot","America/Port_of_Spain|America/Montserrat","America/Port_of_Spain|America/St_Barthelemy","America/Port_of_Spain|America/St_Kitts","America/Port_of_Spain|America/St_Lucia","America/Port_of_Spain|America/St_Thomas","America/Port_of_Spain|America/St_Vincent","America/Port_of_Spain|America/Tortola","America/Port_of_Spain|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Atlantic/Reykjavik|Iceland","Atlantic/South_Georgia|Etc/GMT+2","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UCT|UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Oslo|Arctic/Longyearbyen","Europe/Oslo|Atlantic/Jan_Mayen","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Christmas|Etc/GMT-7","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Palau|Etc/GMT-9","Pacific/Pohnpei|Etc/GMT-11","Pacific/Pohnpei|Pacific/Ponape","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Etc/GMT-12","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"]}),o}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone.min.js
new file mode 100644
index 00000000000..54a67a74c75
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/builds/moment-timezone.min.js
@@ -0,0 +1 @@
+!function(t,e){"use strict";"function"==typeof define&&define.amd?define(["moment"],e):"object"==typeof module&&module.exports?module.exports=e(require("moment")):e(t.moment)}(this,function(s){"use strict";var e,i={},f={},u={},c={},t=s.version.split("."),n=+t[0],o=+t[1];function a(t){return 96<t?t-87:64<t?t-29:t-48}function r(t){var e=0,n=t.split("."),o=n[0],r=n[1]||"",s=1,i=0,f=1;for(45===t.charCodeAt(0)&&(f=-(e=1));e<o.length;e++)i=60*i+a(o.charCodeAt(e));for(e=0;e<r.length;e++)s/=60,i+=a(r.charCodeAt(e))*s;return i*f}function h(t){for(var e=0;e<t.length;e++)t[e]=r(t[e])}function l(t,e){var n,o=[];for(n=0;n<e.length;n++)o[n]=t[e[n]];return o}function p(t){var e=t.split("|"),n=e[2].split(" "),o=e[3].split(""),r=e[4].split(" ");return h(n),h(o),h(r),function(t,e){for(var n=0;n<e;n++)t[n]=Math.round((t[n-1]||0)+6e4*t[n]);t[e-1]=1/0}(r,o.length),{name:e[0],abbrs:l(e[1].split(" "),o),offsets:l(n,o),untils:r,population:0|e[5]}}function d(t){t&&this._set(p(t))}function m(t){var e=t.toTimeString(),n=e.match(/\([a-z ]+\)/i);"GMT"===(n=n&&n[0]?(n=n[0].match(/[A-Z]/g))?n.join(""):void 0:(n=e.match(/[A-Z]{3,5}/g))?n[0]:void 0)&&(n=void 0),this.at=+t,this.abbr=n,this.offset=t.getTimezoneOffset()}function v(t){this.zone=t,this.offsetScore=0,this.abbrScore=0}function z(t,e){for(var n,o;o=6e4*((e.at-t.at)/12e4|0);)(n=new m(new Date(t.at+o))).offset===t.offset?t=n:e=n;return t}function b(t,e){return t.offsetScore!==e.offsetScore?t.offsetScore-e.offsetScore:t.abbrScore!==e.abbrScore?t.abbrScore-e.abbrScore:e.zone.population-t.zone.population}function g(t,e){var n,o;for(h(e),n=0;n<e.length;n++)o=e[n],c[o]=c[o]||{},c[o][t]=!0}function _(){try{var t=Intl.DateTimeFormat().resolvedOptions().timeZone;if(t&&3<t.length){var e=u[w(t)];if(e)return e;M("Moment Timezone found "+t+" from the Intl api, but did not have that data loaded.")}}catch(t){}var n,o,r,s=function(){var t,e,n,o=(new Date).getFullYear()-2,r=new m(new Date(o,0,1)),s=[r];for(n=1;n<48;n++)(e=new m(new Date(o,n,1))).offset!==r.offset&&(t=z(r,e),s.push(t),s.push(new m(new Date(t.at+6e4)))),r=e;for(n=0;n<4;n++)s.push(new m(new Date(o+n,0,1))),s.push(new m(new Date(o+n,6,1)));return s}(),i=s.length,f=function(t){var e,n,o,r=t.length,s={},i=[];for(e=0;e<r;e++)for(n in o=c[t[e].offset]||{})o.hasOwnProperty(n)&&(s[n]=!0);for(e in s)s.hasOwnProperty(e)&&i.push(u[e]);return i}(s),a=[];for(o=0;o<f.length;o++){for(n=new v(S(f[o]),i),r=0;r<i;r++)n.scoreOffsetAt(s[r]);a.push(n)}return a.sort(b),0<a.length?a[0].zone.name:void 0}function w(t){return(t||"").toLowerCase().replace(/\//g,"_")}function y(t){var e,n,o,r;for("string"==typeof t&&(t=[t]),e=0;e<t.length;e++)r=w(n=(o=t[e].split("|"))[0]),i[r]=t[e],u[r]=n,g(r,o[2].split(" "))}function S(t,e){t=w(t);var n,o=i[t];return o instanceof d?o:"string"==typeof o?(o=new d(o),i[t]=o):f[t]&&e!==S&&(n=S(f[t],S))?((o=i[t]=new d)._set(n),o.name=u[t],o):null}function O(t){var e,n,o,r;for("string"==typeof t&&(t=[t]),e=0;e<t.length;e++)o=w((n=t[e].split("|"))[0]),r=w(n[1]),f[o]=r,u[o]=n[0],f[r]=o,u[r]=n[1]}function A(t){var e="X"===t._f||"x"===t._f;return!(!t._a||void 0!==t._tzm||e)}function M(t){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(t)}function j(t){var e=Array.prototype.slice.call(arguments,0,-1),n=arguments[arguments.length-1],o=S(n),r=s.utc.apply(null,e);return o&&!s.isMoment(t)&&A(r)&&r.add(o.parse(r),"minutes"),r.tz(n),r}(n<2||2===n&&o<6)&&M("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+s.version+". See momentjs.com"),d.prototype={_set:function(t){this.name=t.name,this.abbrs=t.abbrs,this.untils=t.untils,this.offsets=t.offsets,this.population=t.population},_index:function(t){var e,n=+t,o=this.untils;for(e=0;e<o.length;e++)if(n<o[e])return e},parse:function(t){var e,n,o,r,s=+t,i=this.offsets,f=this.untils,a=f.length-1;for(r=0;r<a;r++)if(e=i[r],n=i[r+1],o=i[r?r-1:r],e<n&&j.moveAmbiguousForward?e=n:o<e&&j.moveInvalidForward&&(e=o),s<f[r]-6e4*e)return i[r];return i[a]},abbr:function(t){return this.abbrs[this._index(t)]},offset:function(t){return M("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(t)]},utcOffset:function(t){return this.offsets[this._index(t)]}},v.prototype.scoreOffsetAt=function(t){this.offsetScore+=Math.abs(this.zone.utcOffset(t.at)-t.offset),this.zone.abbr(t.at).replace(/[^A-Z]/g,"")!==t.abbr&&this.abbrScore++},j.version="0.5.17",j.dataVersion="",j._zones=i,j._links=f,j._names=u,j.add=y,j.link=O,j.load=function(t){y(t.zones),O(t.links),j.dataVersion=t.version},j.zone=S,j.zoneExists=function t(e){return t.didShowError||(t.didShowError=!0,M("moment.tz.zoneExists('"+e+"') has been deprecated in favor of !moment.tz.zone('"+e+"')")),!!S(e)},j.guess=function(t){return e&&!t||(e=_()),e},j.names=function(){var t,e=[];for(t in u)u.hasOwnProperty(t)&&(i[t]||i[f[t]])&&u[t]&&e.push(u[t]);return e.sort()},j.Zone=d,j.unpack=p,j.unpackBase60=r,j.needsOffset=A,j.moveInvalidForward=!0,j.moveAmbiguousForward=!1;var D,x=s.fn;function T(t){return function(){return this._z?this._z.abbr(this):t.call(this)}}s.tz=j,s.defaultZone=null,s.updateOffset=function(t,e){var n,o=s.defaultZone;void 0===t._z&&(o&&A(t)&&!t._isUTC&&(t._d=s.utc(t._a)._d,t.utc().add(o.parse(t),"minutes")),t._z=o),t._z&&(n=t._z.utcOffset(t),Math.abs(n)<16&&(n/=60),void 0!==t.utcOffset?t.utcOffset(-n,e):t.zone(n,e))},x.tz=function(t,e){return t?(this._z=S(t),this._z?s.updateOffset(this,e):M("Moment Timezone has no data for "+t+". See http://momentjs.com/timezone/docs/#/data-loading/."),this):this._z?this._z.name:void 0},x.zoneName=T(x.zoneName),x.zoneAbbr=T(x.zoneAbbr),x.utc=(D=x.utc,function(){return this._z=null,D.apply(this,arguments)}),s.tz.setDefault=function(t){return(n<2||2===n&&o<9)&&M("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+s.version+"."),s.defaultZone=t?S(t):null,s};var Z=s.momentProperties;return"[object Array]"===Object.prototype.toString.call(Z)?(Z.push("_z"),Z.push("_a")):Z&&(Z._z=null),s}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/changelog.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/changelog.md
new file mode 100644
index 00000000000..1cc50755489
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/changelog.md
@@ -0,0 +1,154 @@
+### `0.5.16` _2018-04-18_
+* Fixed Etc/UTC timezone recognition, updated tests. [#599](https://github.com/moment/moment-timezone/pull/599)
+* Updated minified files to contain IANA TZDB `2018d` data
+
+### `0.5.15` _2018-04-17_
+* Updated data to IANA TZDB `2018d`. [#596](https://github.com/moment/moment-timezone/pull/596)
+
+### `0.5.14` _2017-10-30_
+* Ensure Intl response is valid when guessing time zone. [#553](https://github.com/moment/moment-timezone/pull/553)
+* Updated data to IANA TZDB `2017c`. [#552](https://github.com/moment/moment-timezone/pull/552)
+* Convert to tz keeping wall time [#505](https://github.com/moment/moment-timezone/pull/505)
+* Make all time zones available for guessing. [#483](https://github.com/moment/moment-timezone/pull/483)
+* zone.offset has been deprecated in favor of zone.utcOffset [#398](https://github.com/moment/moment-timezone/pull/398)
+* Check for timestamp formats when parsing [#348](https://github.com/moment/moment-timezone/pull/348)
+
+### `0.5.13` _2017-04-04_
+* Bumped version to address Bower cache issues with last release. [#474](https://github.com/moment/moment-timezone/issues/474)
+* (No actual changes otherwise)
+
+### `0.5.12` _2017-04-02_
+* Updated data to IANA TZDB `2017b`. [#422](https://github.com/moment/moment-timezone/pull/460)
+* Build the truncated data file as 2012-2022 (+/- 5 years).
+
+### `0.5.11` _2016-12-23_
+* Remove log statement when data is loaded twice. [#352](https://github.com/moment/moment-timezone/pull/352)
+
+### `0.5.10` _2016-11-27_
+* Updated data to IANA TZDB `2016j`. [#422](https://github.com/moment/moment-timezone/pull/422)
+
+### `0.5.9` _2016-11-03_
+* Fixed the output of `moment.tz.version`. [#413](https://github.com/moment/moment-timezone/issues/413)
+
+### `0.5.8` _2016-11-03_
+* Updated data to IANA TZDB `2016i`. [#411](https://github.com/moment/moment-timezone/pull/411)
+
+### `0.5.7` _2016-10-21_
+* Updated data to IANA TZDB `2016h`. [#403](https://github.com/moment/moment-timezone/pull/403)
+
+### `0.5.6` _2016-10-08_
+* Updated data to IANA TZDB `2016g`. [#394](https://github.com/moment/moment-timezone/pull/394)
+
+### `0.5.5` _2016-07-24_
+* Updated data to IANA TZDB `2016f`. [#360](https://github.com/moment/moment-timezone/pull/360)
+
+### `0.5.4` _2016-05-03_
+* Updated data to IANA TZDB `2016d`. [#336](https://github.com/moment/moment-timezone/pull/336)
+* Ignore the results from `Intl.DateTimeFormat().resolvedOptions().timeZone` if it is undefined. [#322](https://github.com/moment/moment-timezone/pull/322)
+
+### `0.5.3` _2016-03-24_
+* Updated data to IANA TZDB `2016c`. [#321](https://github.com/moment/moment-timezone/pull/321)
+
+### `0.5.2` _2016-03-15_
+* Updated data to IANA TZDB `2016b`. [#315](https://github.com/moment/moment-timezone/pull/315)
+
+### `0.5.1` _2016-03-01_
+* Updated data to IANA TZDB `2016a`. [#299](https://github.com/moment/moment-timezone/pull/299)
+* Fixed bug when `Date#toTimeString` did not return a known format. [#302](https://github.com/moment/moment-timezone/pull/302) [#303](https://github.com/moment/moment-timezone/pull/303)
+* Added lookup on `Intl.DateTimeFormat().resolvedOptions().timeZone` to `moment.tz.guess()`. [#304](https://github.com/moment/moment-timezone/pull/304) [#291](https://github.com/moment/moment-timezone/pull/291)
+
+### `0.5.0` _2015-12-28_
+* Added support for guessing the user's timezone via `moment.tz.guess()`. [#285](https://github.com/moment/moment-timezone/pull/285)
+* Fixed UMD export issue when there was an html element with `id=exports`. [#275](https://github.com/moment/moment-timezone/pull/275)
+* Removed jspm specific dependencies from `package.json`. [#284](https://github.com/moment/moment-timezone/pull/284)
+
+### `0.4.1` _2015-10-07_
+* Updated data to IANA TZDB `2015e`. [#253](https://github.com/moment/moment-timezone/pull/253)
+* Updated data to IANA TZDB `2015f`. [#253](https://github.com/moment/moment-timezone/pull/253)
+* Updated data to IANA TZDB `2015g`. [#255](https://github.com/moment/moment-timezone/pull/255)
+* Added jspm dependencies for moment. [#234](https://github.com/moment/moment-timezone/pull/234)
+* Included builds directory in npm. [#237](https://github.com/moment/moment-timezone/pull/237)
+* Removed version field from bower.json. [#230](https://github.com/moment/moment-timezone/pull/230)
+
+### `0.4.0` _2015-05-30_
+* Updated data to IANA TZDB `2015b`. [#201](https://github.com/moment/moment-timezone/pull/201)
+* Updated data to IANA TZDB `2015c`. [#214](https://github.com/moment/moment-timezone/pull/214)
+* Updated data to IANA TZDB `2015d`. [#214](https://github.com/moment/moment-timezone/pull/214)
+* Updated zone getter to allow lazy unpacking to improve initial page load times. [#216](https://github.com/moment/moment-timezone/pull/216)
+* Added a `package.json` `jspm:main` entry point. [#194](https://github.com/moment/moment-timezone/pull/194)
+* Added `composer.json`. [#222](https://github.com/moment/moment-timezone/pull/222)
+* Added an error message when trying to load moment-timezone twice. [#212](https://github.com/moment/moment-timezone/pull/212)
+
+### `0.3.1` _2015-03-16_
+* Updated data to IANA TZDB `2015a`. [#183](https://github.com/moment/moment-timezone/pull/183)
+
+### `0.3.0` _2015-01-13_
+
+* *Breaking:* Added country data to the `meta/*.json` files. Restructured the data to support multiple countries per zone. [#162](https://github.com/moment/moment-timezone/pull/162)
+* Added the ability to set a default timezone for all new moments. [#152](https://github.com/moment/moment-timezone/pull/152)
+* Fixed a bug when passing a moment with an offset to `moment.tz`. [#169](https://github.com/moment/moment-timezone/pull/169)
+* Fixed a deprecation in moment core, changing `moment#zone` to `moment#utcOffset`. [#168](https://github.com/moment/moment-timezone/pull/168)
+
+### `0.2.5` _2014-11-12_
+* Updated data to IANA TZDB `2014j`. [#151](https://github.com/moment/moment-timezone/pull/151)
+
+### `0.2.4` _2014-10-20_
+* Updated data to IANA TZDB `2014i`. [#142](https://github.com/moment/moment-timezone/pull/142)
+
+### `0.2.3` _2014-10-20_
+* Updated data to IANA TZDB `2014h`. [#141](https://github.com/moment/moment-timezone/pull/141)
+
+### `0.2.2` _2014-09-04_
+* Updated data to IANA TZDB `2014g`. [#126](https://github.com/moment/moment-timezone/pull/126)
+* Added a warning when using `moment-timezone` with `moment<2.6.0`.
+
+### `0.2.1` _2014-08-02_
+* Fixed support for `moment@2.8.1+`.
+
+### `0.2.0` _2014-07-21_
+* Added the ability to configure whether ambiguous or invalid input is rolled forward or backward. [#101](https://github.com/moment/moment-timezone/pull/101)
+* Added `moment>=2.6.0` as a dependency in `bower.json`. [#107](https://github.com/moment/moment-timezone/issues/107)
+* Fixed getting the name of a zone that was added as a linked zone. [#104](https://github.com/moment/moment-timezone/pull/104)
+* Added an error message when a zone was not loaded. [#106](https://github.com/moment/moment-timezone/issues/106)
+
+### `0.1.0` _2014-06-23_
+* *Breaking:* Changed data format from Zones+Rules to just Zones. [#82](https://github.com/moment/moment-timezone/pull/82)
+* *Breaking:* Removed `moment.tz.{addRule,addZone,zoneExists,zones}` as they are no longer relevant with the new data format.
+* Made library 20x faster. [JSPerf results](http://jsperf.com/moment-timezone-0-1-0/2)
+* Completely rewrote internals to support new data format.
+* Updated the data collection process to get data directly from http://www.iana.org/time-zones.
+* Updated data to IANA TZDB `2014e`.
+* Updated `bower.json` to use a browser specific `main:` entry point.
+* Added built files with included data.
+* Added support for accurately parsing input around DST changes. [#93](https://github.com/moment/moment-timezone/pull/93)
+* Added comprehensive documentation at [momentjs.com/timezone/docs/](http://momentjs.com/timezone/docs/).
+* Added `moment.tz.link` for linking two identical zones.
+* Added `moment.tz.zone` for getting a loaded zone.
+* Added `moment.tz.load` for loading a bundled version of data from the IANA TZDB.
+* Added `moment.tz.names` for getting the names of all the loaded timezones.
+* Added `moment.tz.unpack` and `moment.tz.unpackBase60` for unpacking data.
+* Added `moment-timezone-utils.js` for working with the packed and unpacked data.
+* Fixed major memory leak. [#79](https://github.com/moment/moment-timezone/issues/79)
+* Fixed global export to allow use in web workers. [#78](https://github.com/moment/moment-timezone/pull/78)
+* Fixed global export in browser environments that define `window.module`. [#76](https://github.com/moment/moment-timezone/pull/76)
+
+### `0.0.6` _2014-04-20_
+* Fixed issue with preventing loading moment-timezone more than once. [#75](https://github.com/moment/moment-timezone/pull/75)
+
+### `0.0.5` _2014-04-17_
+* Improved performance with memoization. [#39](https://github.com/moment/moment-timezone/issues/39)
+* Published only necessary files to npm. [#46](https://github.com/moment/moment-timezone/issues/46)
+* Added better handling of timezones around DST. [#53](https://github.com/moment/moment-timezone/issues/53) [#61](https://github.com/moment/moment-timezone/issues/61) [#70](https://github.com/moment/moment-timezone/issues/70)
+* Added Browserify support. [#41](https://github.com/moment/moment-timezone/issues/41)
+* Added `moment.tz.zoneExists` [#73](https://github.com/moment/moment-timezone/issues/73)
+* Fixed cloning moments with a timezone. [#71](https://github.com/moment/moment-timezone/issues/71)
+* Prevent loading moment-timezone more than once. [#74](https://github.com/moment/moment-timezone/issues/74)
+
+### `0.0.3` _2013-10-10_
+* Added Bower support.
+* Added support for newer versions of moment.
+* Added support for constructing a moment with a string and zone.
+* Added more links and timezone names in moment-timezone.json
+
+### `0.0.1` _2013-07-17_
+* Initial version.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/composer.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/composer.json
new file mode 100644
index 00000000000..ae847d62bc4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/composer.json
@@ -0,0 +1,43 @@
+{
+ "name": "moment/moment-timezone",
+ "description": "Parse and display dates in any timezone",
+ "version": "0.5.17",
+ "keywords": [
+ "moment",
+ "date",
+ "time",
+ "timezone",
+ "olson",
+ "iana",
+ "zone",
+ "tz"
+ ],
+ "homepage": "http://momentjs.com/timezone/",
+ "license": "MIT",
+ "support": {
+ "issues": "https://github.com/moment/moment-timezone/issues",
+ "source": "https://github.com/moment/moment-timezone"
+ },
+ "authors": [
+ {
+ "name": "Tim Wood",
+ "email": "washwithcare@gmail.com",
+ "homepage": "http://timwoodcreates.com/"
+ }
+ ],
+ "type": "component",
+ "require": {
+ "robloach/component-installer": "*",
+ "moment/moment": ">=2.9.0"
+ },
+ "extra": {
+ "component": {
+ "scripts": [
+ "moment-timezone.js"
+ ],
+ "files": [
+ "builds/*.js"
+ ]
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/meta/latest.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/meta/latest.json
new file mode 100644
index 00000000000..d57ed80af97
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/meta/latest.json
@@ -0,0 +1,5118 @@
+{
+ "countries": {
+ "AD": {
+ "name": "Andorra",
+ "abbr": "AD",
+ "zones": [
+ "Europe/Andorra"
+ ]
+ },
+ "AE": {
+ "name": "United Arab Emirates",
+ "abbr": "AE",
+ "zones": [
+ "Asia/Dubai"
+ ]
+ },
+ "AF": {
+ "name": "Afghanistan",
+ "abbr": "AF",
+ "zones": [
+ "Asia/Kabul"
+ ]
+ },
+ "AG": {
+ "name": "Antigua & Barbuda",
+ "abbr": "AG",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "AI": {
+ "name": "Anguilla",
+ "abbr": "AI",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "AL": {
+ "name": "Albania",
+ "abbr": "AL",
+ "zones": [
+ "Europe/Tirane"
+ ]
+ },
+ "AM": {
+ "name": "Armenia",
+ "abbr": "AM",
+ "zones": [
+ "Asia/Yerevan"
+ ]
+ },
+ "AO": {
+ "name": "Angola",
+ "abbr": "AO",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "AQ": {
+ "name": "Antarctica",
+ "abbr": "AQ",
+ "zones": [
+ "Antarctica/Casey",
+ "Antarctica/Davis",
+ "Antarctica/DumontDUrville",
+ "Antarctica/Mawson",
+ "Antarctica/Palmer",
+ "Antarctica/Rothera",
+ "Antarctica/Syowa",
+ "Antarctica/Troll",
+ "Antarctica/Vostok",
+ "Pacific/Auckland"
+ ]
+ },
+ "AR": {
+ "name": "Argentina",
+ "abbr": "AR",
+ "zones": [
+ "America/Argentina/Buenos_Aires",
+ "America/Argentina/Cordoba",
+ "America/Argentina/Salta",
+ "America/Argentina/Jujuy",
+ "America/Argentina/Tucuman",
+ "America/Argentina/Catamarca",
+ "America/Argentina/La_Rioja",
+ "America/Argentina/San_Juan",
+ "America/Argentina/Mendoza",
+ "America/Argentina/San_Luis",
+ "America/Argentina/Rio_Gallegos",
+ "America/Argentina/Ushuaia"
+ ]
+ },
+ "AS": {
+ "name": "Samoa (American)",
+ "abbr": "AS",
+ "zones": [
+ "Pacific/Pago_Pago"
+ ]
+ },
+ "AT": {
+ "name": "Austria",
+ "abbr": "AT",
+ "zones": [
+ "Europe/Vienna"
+ ]
+ },
+ "AU": {
+ "name": "Australia",
+ "abbr": "AU",
+ "zones": [
+ "Australia/Lord_Howe",
+ "Antarctica/Macquarie",
+ "Australia/Hobart",
+ "Australia/Currie",
+ "Australia/Melbourne",
+ "Australia/Sydney",
+ "Australia/Broken_Hill",
+ "Australia/Brisbane",
+ "Australia/Lindeman",
+ "Australia/Adelaide",
+ "Australia/Darwin",
+ "Australia/Perth",
+ "Australia/Eucla"
+ ]
+ },
+ "AW": {
+ "name": "Aruba",
+ "abbr": "AW",
+ "zones": [
+ "America/Curacao"
+ ]
+ },
+ "AX": {
+ "name": "Åland Islands",
+ "abbr": "AX",
+ "zones": [
+ "Europe/Helsinki"
+ ]
+ },
+ "AZ": {
+ "name": "Azerbaijan",
+ "abbr": "AZ",
+ "zones": [
+ "Asia/Baku"
+ ]
+ },
+ "BA": {
+ "name": "Bosnia & Herzegovina",
+ "abbr": "BA",
+ "zones": [
+ "Europe/Belgrade"
+ ]
+ },
+ "BB": {
+ "name": "Barbados",
+ "abbr": "BB",
+ "zones": [
+ "America/Barbados"
+ ]
+ },
+ "BD": {
+ "name": "Bangladesh",
+ "abbr": "BD",
+ "zones": [
+ "Asia/Dhaka"
+ ]
+ },
+ "BE": {
+ "name": "Belgium",
+ "abbr": "BE",
+ "zones": [
+ "Europe/Brussels"
+ ]
+ },
+ "BF": {
+ "name": "Burkina Faso",
+ "abbr": "BF",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "BG": {
+ "name": "Bulgaria",
+ "abbr": "BG",
+ "zones": [
+ "Europe/Sofia"
+ ]
+ },
+ "BH": {
+ "name": "Bahrain",
+ "abbr": "BH",
+ "zones": [
+ "Asia/Qatar"
+ ]
+ },
+ "BI": {
+ "name": "Burundi",
+ "abbr": "BI",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ },
+ "BJ": {
+ "name": "Benin",
+ "abbr": "BJ",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "BL": {
+ "name": "St Barthelemy",
+ "abbr": "BL",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "BM": {
+ "name": "Bermuda",
+ "abbr": "BM",
+ "zones": [
+ "Atlantic/Bermuda"
+ ]
+ },
+ "BN": {
+ "name": "Brunei",
+ "abbr": "BN",
+ "zones": [
+ "Asia/Brunei"
+ ]
+ },
+ "BO": {
+ "name": "Bolivia",
+ "abbr": "BO",
+ "zones": [
+ "America/La_Paz"
+ ]
+ },
+ "BQ": {
+ "name": "Caribbean NL",
+ "abbr": "BQ",
+ "zones": [
+ "America/Curacao"
+ ]
+ },
+ "BR": {
+ "name": "Brazil",
+ "abbr": "BR",
+ "zones": [
+ "America/Noronha",
+ "America/Belem",
+ "America/Fortaleza",
+ "America/Recife",
+ "America/Araguaina",
+ "America/Maceio",
+ "America/Bahia",
+ "America/Sao_Paulo",
+ "America/Campo_Grande",
+ "America/Cuiaba",
+ "America/Santarem",
+ "America/Porto_Velho",
+ "America/Boa_Vista",
+ "America/Manaus",
+ "America/Eirunepe",
+ "America/Rio_Branco"
+ ]
+ },
+ "BS": {
+ "name": "Bahamas",
+ "abbr": "BS",
+ "zones": [
+ "America/Nassau"
+ ]
+ },
+ "BT": {
+ "name": "Bhutan",
+ "abbr": "BT",
+ "zones": [
+ "Asia/Thimphu"
+ ]
+ },
+ "BW": {
+ "name": "Botswana",
+ "abbr": "BW",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ },
+ "BY": {
+ "name": "Belarus",
+ "abbr": "BY",
+ "zones": [
+ "Europe/Minsk"
+ ]
+ },
+ "BZ": {
+ "name": "Belize",
+ "abbr": "BZ",
+ "zones": [
+ "America/Belize"
+ ]
+ },
+ "CA": {
+ "name": "Canada",
+ "abbr": "CA",
+ "zones": [
+ "America/St_Johns",
+ "America/Halifax",
+ "America/Glace_Bay",
+ "America/Moncton",
+ "America/Goose_Bay",
+ "America/Blanc-Sablon",
+ "America/Toronto",
+ "America/Nipigon",
+ "America/Thunder_Bay",
+ "America/Iqaluit",
+ "America/Pangnirtung",
+ "America/Atikokan",
+ "America/Winnipeg",
+ "America/Rainy_River",
+ "America/Resolute",
+ "America/Rankin_Inlet",
+ "America/Regina",
+ "America/Swift_Current",
+ "America/Edmonton",
+ "America/Cambridge_Bay",
+ "America/Yellowknife",
+ "America/Inuvik",
+ "America/Creston",
+ "America/Dawson_Creek",
+ "America/Fort_Nelson",
+ "America/Vancouver",
+ "America/Whitehorse",
+ "America/Dawson"
+ ]
+ },
+ "CC": {
+ "name": "Cocos (Keeling) Islands",
+ "abbr": "CC",
+ "zones": [
+ "Indian/Cocos"
+ ]
+ },
+ "CD": {
+ "name": "Congo (Dem. Rep.)",
+ "abbr": "CD",
+ "zones": [
+ "Africa/Maputo",
+ "Africa/Lagos"
+ ]
+ },
+ "CF": {
+ "name": "Central African Rep.",
+ "abbr": "CF",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "CG": {
+ "name": "Congo (Rep.)",
+ "abbr": "CG",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "CH": {
+ "name": "Switzerland",
+ "abbr": "CH",
+ "zones": [
+ "Europe/Zurich"
+ ]
+ },
+ "CI": {
+ "name": "Côte d'Ivoire",
+ "abbr": "CI",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "CK": {
+ "name": "Cook Islands",
+ "abbr": "CK",
+ "zones": [
+ "Pacific/Rarotonga"
+ ]
+ },
+ "CL": {
+ "name": "Chile",
+ "abbr": "CL",
+ "zones": [
+ "America/Santiago",
+ "America/Punta_Arenas",
+ "Pacific/Easter"
+ ]
+ },
+ "CM": {
+ "name": "Cameroon",
+ "abbr": "CM",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "CN": {
+ "name": "China",
+ "abbr": "CN",
+ "zones": [
+ "Asia/Shanghai",
+ "Asia/Urumqi"
+ ]
+ },
+ "CO": {
+ "name": "Colombia",
+ "abbr": "CO",
+ "zones": [
+ "America/Bogota"
+ ]
+ },
+ "CR": {
+ "name": "Costa Rica",
+ "abbr": "CR",
+ "zones": [
+ "America/Costa_Rica"
+ ]
+ },
+ "CU": {
+ "name": "Cuba",
+ "abbr": "CU",
+ "zones": [
+ "America/Havana"
+ ]
+ },
+ "CV": {
+ "name": "Cape Verde",
+ "abbr": "CV",
+ "zones": [
+ "Atlantic/Cape_Verde"
+ ]
+ },
+ "CW": {
+ "name": "Curaçao",
+ "abbr": "CW",
+ "zones": [
+ "America/Curacao"
+ ]
+ },
+ "CX": {
+ "name": "Christmas Island",
+ "abbr": "CX",
+ "zones": [
+ "Indian/Christmas"
+ ]
+ },
+ "CY": {
+ "name": "Cyprus",
+ "abbr": "CY",
+ "zones": [
+ "Asia/Nicosia",
+ "Asia/Famagusta"
+ ]
+ },
+ "CZ": {
+ "name": "Czech Republic",
+ "abbr": "CZ",
+ "zones": [
+ "Europe/Prague"
+ ]
+ },
+ "DE": {
+ "name": "Germany",
+ "abbr": "DE",
+ "zones": [
+ "Europe/Zurich",
+ "Europe/Berlin"
+ ]
+ },
+ "DJ": {
+ "name": "Djibouti",
+ "abbr": "DJ",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "DK": {
+ "name": "Denmark",
+ "abbr": "DK",
+ "zones": [
+ "Europe/Copenhagen"
+ ]
+ },
+ "DM": {
+ "name": "Dominica",
+ "abbr": "DM",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "DO": {
+ "name": "Dominican Republic",
+ "abbr": "DO",
+ "zones": [
+ "America/Santo_Domingo"
+ ]
+ },
+ "DZ": {
+ "name": "Algeria",
+ "abbr": "DZ",
+ "zones": [
+ "Africa/Algiers"
+ ]
+ },
+ "EC": {
+ "name": "Ecuador",
+ "abbr": "EC",
+ "zones": [
+ "America/Guayaquil",
+ "Pacific/Galapagos"
+ ]
+ },
+ "EE": {
+ "name": "Estonia",
+ "abbr": "EE",
+ "zones": [
+ "Europe/Tallinn"
+ ]
+ },
+ "EG": {
+ "name": "Egypt",
+ "abbr": "EG",
+ "zones": [
+ "Africa/Cairo"
+ ]
+ },
+ "EH": {
+ "name": "Western Sahara",
+ "abbr": "EH",
+ "zones": [
+ "Africa/El_Aaiun"
+ ]
+ },
+ "ER": {
+ "name": "Eritrea",
+ "abbr": "ER",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "ES": {
+ "name": "Spain",
+ "abbr": "ES",
+ "zones": [
+ "Europe/Madrid",
+ "Africa/Ceuta",
+ "Atlantic/Canary"
+ ]
+ },
+ "ET": {
+ "name": "Ethiopia",
+ "abbr": "ET",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "FI": {
+ "name": "Finland",
+ "abbr": "FI",
+ "zones": [
+ "Europe/Helsinki"
+ ]
+ },
+ "FJ": {
+ "name": "Fiji",
+ "abbr": "FJ",
+ "zones": [
+ "Pacific/Fiji"
+ ]
+ },
+ "FK": {
+ "name": "Falkland Islands",
+ "abbr": "FK",
+ "zones": [
+ "Atlantic/Stanley"
+ ]
+ },
+ "FM": {
+ "name": "Micronesia",
+ "abbr": "FM",
+ "zones": [
+ "Pacific/Chuuk",
+ "Pacific/Pohnpei",
+ "Pacific/Kosrae"
+ ]
+ },
+ "FO": {
+ "name": "Faroe Islands",
+ "abbr": "FO",
+ "zones": [
+ "Atlantic/Faroe"
+ ]
+ },
+ "FR": {
+ "name": "France",
+ "abbr": "FR",
+ "zones": [
+ "Europe/Paris"
+ ]
+ },
+ "GA": {
+ "name": "Gabon",
+ "abbr": "GA",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "GB": {
+ "name": "Britain (UK)",
+ "abbr": "GB",
+ "zones": [
+ "Europe/London"
+ ]
+ },
+ "GD": {
+ "name": "Grenada",
+ "abbr": "GD",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "GE": {
+ "name": "Georgia",
+ "abbr": "GE",
+ "zones": [
+ "Asia/Tbilisi"
+ ]
+ },
+ "GF": {
+ "name": "French Guiana",
+ "abbr": "GF",
+ "zones": [
+ "America/Cayenne"
+ ]
+ },
+ "GG": {
+ "name": "Guernsey",
+ "abbr": "GG",
+ "zones": [
+ "Europe/London"
+ ]
+ },
+ "GH": {
+ "name": "Ghana",
+ "abbr": "GH",
+ "zones": [
+ "Africa/Accra"
+ ]
+ },
+ "GI": {
+ "name": "Gibraltar",
+ "abbr": "GI",
+ "zones": [
+ "Europe/Gibraltar"
+ ]
+ },
+ "GL": {
+ "name": "Greenland",
+ "abbr": "GL",
+ "zones": [
+ "America/Godthab",
+ "America/Danmarkshavn",
+ "America/Scoresbysund",
+ "America/Thule"
+ ]
+ },
+ "GM": {
+ "name": "Gambia",
+ "abbr": "GM",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "GN": {
+ "name": "Guinea",
+ "abbr": "GN",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "GP": {
+ "name": "Guadeloupe",
+ "abbr": "GP",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "GQ": {
+ "name": "Equatorial Guinea",
+ "abbr": "GQ",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "GR": {
+ "name": "Greece",
+ "abbr": "GR",
+ "zones": [
+ "Europe/Athens"
+ ]
+ },
+ "GS": {
+ "name": "South Georgia & the South Sandwich Islands",
+ "abbr": "GS",
+ "zones": [
+ "Atlantic/South_Georgia"
+ ]
+ },
+ "GT": {
+ "name": "Guatemala",
+ "abbr": "GT",
+ "zones": [
+ "America/Guatemala"
+ ]
+ },
+ "GU": {
+ "name": "Guam",
+ "abbr": "GU",
+ "zones": [
+ "Pacific/Guam"
+ ]
+ },
+ "GW": {
+ "name": "Guinea-Bissau",
+ "abbr": "GW",
+ "zones": [
+ "Africa/Bissau"
+ ]
+ },
+ "GY": {
+ "name": "Guyana",
+ "abbr": "GY",
+ "zones": [
+ "America/Guyana"
+ ]
+ },
+ "HK": {
+ "name": "Hong Kong",
+ "abbr": "HK",
+ "zones": [
+ "Asia/Hong_Kong"
+ ]
+ },
+ "HN": {
+ "name": "Honduras",
+ "abbr": "HN",
+ "zones": [
+ "America/Tegucigalpa"
+ ]
+ },
+ "HR": {
+ "name": "Croatia",
+ "abbr": "HR",
+ "zones": [
+ "Europe/Belgrade"
+ ]
+ },
+ "HT": {
+ "name": "Haiti",
+ "abbr": "HT",
+ "zones": [
+ "America/Port-au-Prince"
+ ]
+ },
+ "HU": {
+ "name": "Hungary",
+ "abbr": "HU",
+ "zones": [
+ "Europe/Budapest"
+ ]
+ },
+ "ID": {
+ "name": "Indonesia",
+ "abbr": "ID",
+ "zones": [
+ "Asia/Jakarta",
+ "Asia/Pontianak",
+ "Asia/Makassar",
+ "Asia/Jayapura"
+ ]
+ },
+ "IE": {
+ "name": "Ireland",
+ "abbr": "IE",
+ "zones": [
+ "Europe/Dublin"
+ ]
+ },
+ "IL": {
+ "name": "Israel",
+ "abbr": "IL",
+ "zones": [
+ "Asia/Jerusalem"
+ ]
+ },
+ "IM": {
+ "name": "Isle of Man",
+ "abbr": "IM",
+ "zones": [
+ "Europe/London"
+ ]
+ },
+ "IN": {
+ "name": "India",
+ "abbr": "IN",
+ "zones": [
+ "Asia/Kolkata"
+ ]
+ },
+ "IO": {
+ "name": "British Indian Ocean Territory",
+ "abbr": "IO",
+ "zones": [
+ "Indian/Chagos"
+ ]
+ },
+ "IQ": {
+ "name": "Iraq",
+ "abbr": "IQ",
+ "zones": [
+ "Asia/Baghdad"
+ ]
+ },
+ "IR": {
+ "name": "Iran",
+ "abbr": "IR",
+ "zones": [
+ "Asia/Tehran"
+ ]
+ },
+ "IS": {
+ "name": "Iceland",
+ "abbr": "IS",
+ "zones": [
+ "Atlantic/Reykjavik"
+ ]
+ },
+ "IT": {
+ "name": "Italy",
+ "abbr": "IT",
+ "zones": [
+ "Europe/Rome"
+ ]
+ },
+ "JE": {
+ "name": "Jersey",
+ "abbr": "JE",
+ "zones": [
+ "Europe/London"
+ ]
+ },
+ "JM": {
+ "name": "Jamaica",
+ "abbr": "JM",
+ "zones": [
+ "America/Jamaica"
+ ]
+ },
+ "JO": {
+ "name": "Jordan",
+ "abbr": "JO",
+ "zones": [
+ "Asia/Amman"
+ ]
+ },
+ "JP": {
+ "name": "Japan",
+ "abbr": "JP",
+ "zones": [
+ "Asia/Tokyo"
+ ]
+ },
+ "KE": {
+ "name": "Kenya",
+ "abbr": "KE",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "KG": {
+ "name": "Kyrgyzstan",
+ "abbr": "KG",
+ "zones": [
+ "Asia/Bishkek"
+ ]
+ },
+ "KH": {
+ "name": "Cambodia",
+ "abbr": "KH",
+ "zones": [
+ "Asia/Bangkok"
+ ]
+ },
+ "KI": {
+ "name": "Kiribati",
+ "abbr": "KI",
+ "zones": [
+ "Pacific/Tarawa",
+ "Pacific/Enderbury",
+ "Pacific/Kiritimati"
+ ]
+ },
+ "KM": {
+ "name": "Comoros",
+ "abbr": "KM",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "KN": {
+ "name": "St Kitts & Nevis",
+ "abbr": "KN",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "KP": {
+ "name": "Korea (North)",
+ "abbr": "KP",
+ "zones": [
+ "Asia/Pyongyang"
+ ]
+ },
+ "KR": {
+ "name": "Korea (South)",
+ "abbr": "KR",
+ "zones": [
+ "Asia/Seoul"
+ ]
+ },
+ "KW": {
+ "name": "Kuwait",
+ "abbr": "KW",
+ "zones": [
+ "Asia/Riyadh"
+ ]
+ },
+ "KY": {
+ "name": "Cayman Islands",
+ "abbr": "KY",
+ "zones": [
+ "America/Panama"
+ ]
+ },
+ "KZ": {
+ "name": "Kazakhstan",
+ "abbr": "KZ",
+ "zones": [
+ "Asia/Almaty",
+ "Asia/Qyzylorda",
+ "Asia/Aqtobe",
+ "Asia/Aqtau",
+ "Asia/Atyrau",
+ "Asia/Oral"
+ ]
+ },
+ "LA": {
+ "name": "Laos",
+ "abbr": "LA",
+ "zones": [
+ "Asia/Bangkok"
+ ]
+ },
+ "LB": {
+ "name": "Lebanon",
+ "abbr": "LB",
+ "zones": [
+ "Asia/Beirut"
+ ]
+ },
+ "LC": {
+ "name": "St Lucia",
+ "abbr": "LC",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "LI": {
+ "name": "Liechtenstein",
+ "abbr": "LI",
+ "zones": [
+ "Europe/Zurich"
+ ]
+ },
+ "LK": {
+ "name": "Sri Lanka",
+ "abbr": "LK",
+ "zones": [
+ "Asia/Colombo"
+ ]
+ },
+ "LR": {
+ "name": "Liberia",
+ "abbr": "LR",
+ "zones": [
+ "Africa/Monrovia"
+ ]
+ },
+ "LS": {
+ "name": "Lesotho",
+ "abbr": "LS",
+ "zones": [
+ "Africa/Johannesburg"
+ ]
+ },
+ "LT": {
+ "name": "Lithuania",
+ "abbr": "LT",
+ "zones": [
+ "Europe/Vilnius"
+ ]
+ },
+ "LU": {
+ "name": "Luxembourg",
+ "abbr": "LU",
+ "zones": [
+ "Europe/Luxembourg"
+ ]
+ },
+ "LV": {
+ "name": "Latvia",
+ "abbr": "LV",
+ "zones": [
+ "Europe/Riga"
+ ]
+ },
+ "LY": {
+ "name": "Libya",
+ "abbr": "LY",
+ "zones": [
+ "Africa/Tripoli"
+ ]
+ },
+ "MA": {
+ "name": "Morocco",
+ "abbr": "MA",
+ "zones": [
+ "Africa/Casablanca"
+ ]
+ },
+ "MC": {
+ "name": "Monaco",
+ "abbr": "MC",
+ "zones": [
+ "Europe/Monaco"
+ ]
+ },
+ "MD": {
+ "name": "Moldova",
+ "abbr": "MD",
+ "zones": [
+ "Europe/Chisinau"
+ ]
+ },
+ "ME": {
+ "name": "Montenegro",
+ "abbr": "ME",
+ "zones": [
+ "Europe/Belgrade"
+ ]
+ },
+ "MF": {
+ "name": "St Martin (French)",
+ "abbr": "MF",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "MG": {
+ "name": "Madagascar",
+ "abbr": "MG",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "MH": {
+ "name": "Marshall Islands",
+ "abbr": "MH",
+ "zones": [
+ "Pacific/Majuro",
+ "Pacific/Kwajalein"
+ ]
+ },
+ "MK": {
+ "name": "Macedonia",
+ "abbr": "MK",
+ "zones": [
+ "Europe/Belgrade"
+ ]
+ },
+ "ML": {
+ "name": "Mali",
+ "abbr": "ML",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "MM": {
+ "name": "Myanmar (Burma)",
+ "abbr": "MM",
+ "zones": [
+ "Asia/Yangon"
+ ]
+ },
+ "MN": {
+ "name": "Mongolia",
+ "abbr": "MN",
+ "zones": [
+ "Asia/Ulaanbaatar",
+ "Asia/Hovd",
+ "Asia/Choibalsan"
+ ]
+ },
+ "MO": {
+ "name": "Macau",
+ "abbr": "MO",
+ "zones": [
+ "Asia/Macau"
+ ]
+ },
+ "MP": {
+ "name": "Northern Mariana Islands",
+ "abbr": "MP",
+ "zones": [
+ "Pacific/Guam"
+ ]
+ },
+ "MQ": {
+ "name": "Martinique",
+ "abbr": "MQ",
+ "zones": [
+ "America/Martinique"
+ ]
+ },
+ "MR": {
+ "name": "Mauritania",
+ "abbr": "MR",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "MS": {
+ "name": "Montserrat",
+ "abbr": "MS",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "MT": {
+ "name": "Malta",
+ "abbr": "MT",
+ "zones": [
+ "Europe/Malta"
+ ]
+ },
+ "MU": {
+ "name": "Mauritius",
+ "abbr": "MU",
+ "zones": [
+ "Indian/Mauritius"
+ ]
+ },
+ "MV": {
+ "name": "Maldives",
+ "abbr": "MV",
+ "zones": [
+ "Indian/Maldives"
+ ]
+ },
+ "MW": {
+ "name": "Malawi",
+ "abbr": "MW",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ },
+ "MX": {
+ "name": "Mexico",
+ "abbr": "MX",
+ "zones": [
+ "America/Mexico_City",
+ "America/Cancun",
+ "America/Merida",
+ "America/Monterrey",
+ "America/Matamoros",
+ "America/Mazatlan",
+ "America/Chihuahua",
+ "America/Ojinaga",
+ "America/Hermosillo",
+ "America/Tijuana",
+ "America/Bahia_Banderas"
+ ]
+ },
+ "MY": {
+ "name": "Malaysia",
+ "abbr": "MY",
+ "zones": [
+ "Asia/Kuala_Lumpur",
+ "Asia/Kuching"
+ ]
+ },
+ "MZ": {
+ "name": "Mozambique",
+ "abbr": "MZ",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ },
+ "NA": {
+ "name": "Namibia",
+ "abbr": "NA",
+ "zones": [
+ "Africa/Windhoek"
+ ]
+ },
+ "NC": {
+ "name": "New Caledonia",
+ "abbr": "NC",
+ "zones": [
+ "Pacific/Noumea"
+ ]
+ },
+ "NE": {
+ "name": "Niger",
+ "abbr": "NE",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "NF": {
+ "name": "Norfolk Island",
+ "abbr": "NF",
+ "zones": [
+ "Pacific/Norfolk"
+ ]
+ },
+ "NG": {
+ "name": "Nigeria",
+ "abbr": "NG",
+ "zones": [
+ "Africa/Lagos"
+ ]
+ },
+ "NI": {
+ "name": "Nicaragua",
+ "abbr": "NI",
+ "zones": [
+ "America/Managua"
+ ]
+ },
+ "NL": {
+ "name": "Netherlands",
+ "abbr": "NL",
+ "zones": [
+ "Europe/Amsterdam"
+ ]
+ },
+ "NO": {
+ "name": "Norway",
+ "abbr": "NO",
+ "zones": [
+ "Europe/Oslo"
+ ]
+ },
+ "NP": {
+ "name": "Nepal",
+ "abbr": "NP",
+ "zones": [
+ "Asia/Kathmandu"
+ ]
+ },
+ "NR": {
+ "name": "Nauru",
+ "abbr": "NR",
+ "zones": [
+ "Pacific/Nauru"
+ ]
+ },
+ "NU": {
+ "name": "Niue",
+ "abbr": "NU",
+ "zones": [
+ "Pacific/Niue"
+ ]
+ },
+ "NZ": {
+ "name": "New Zealand",
+ "abbr": "NZ",
+ "zones": [
+ "Pacific/Auckland",
+ "Pacific/Chatham"
+ ]
+ },
+ "OM": {
+ "name": "Oman",
+ "abbr": "OM",
+ "zones": [
+ "Asia/Dubai"
+ ]
+ },
+ "PA": {
+ "name": "Panama",
+ "abbr": "PA",
+ "zones": [
+ "America/Panama"
+ ]
+ },
+ "PE": {
+ "name": "Peru",
+ "abbr": "PE",
+ "zones": [
+ "America/Lima"
+ ]
+ },
+ "PF": {
+ "name": "French Polynesia",
+ "abbr": "PF",
+ "zones": [
+ "Pacific/Tahiti",
+ "Pacific/Marquesas",
+ "Pacific/Gambier"
+ ]
+ },
+ "PG": {
+ "name": "Papua New Guinea",
+ "abbr": "PG",
+ "zones": [
+ "Pacific/Port_Moresby",
+ "Pacific/Bougainville"
+ ]
+ },
+ "PH": {
+ "name": "Philippines",
+ "abbr": "PH",
+ "zones": [
+ "Asia/Manila"
+ ]
+ },
+ "PK": {
+ "name": "Pakistan",
+ "abbr": "PK",
+ "zones": [
+ "Asia/Karachi"
+ ]
+ },
+ "PL": {
+ "name": "Poland",
+ "abbr": "PL",
+ "zones": [
+ "Europe/Warsaw"
+ ]
+ },
+ "PM": {
+ "name": "St Pierre & Miquelon",
+ "abbr": "PM",
+ "zones": [
+ "America/Miquelon"
+ ]
+ },
+ "PN": {
+ "name": "Pitcairn",
+ "abbr": "PN",
+ "zones": [
+ "Pacific/Pitcairn"
+ ]
+ },
+ "PR": {
+ "name": "Puerto Rico",
+ "abbr": "PR",
+ "zones": [
+ "America/Puerto_Rico"
+ ]
+ },
+ "PS": {
+ "name": "Palestine",
+ "abbr": "PS",
+ "zones": [
+ "Asia/Gaza",
+ "Asia/Hebron"
+ ]
+ },
+ "PT": {
+ "name": "Portugal",
+ "abbr": "PT",
+ "zones": [
+ "Europe/Lisbon",
+ "Atlantic/Madeira",
+ "Atlantic/Azores"
+ ]
+ },
+ "PW": {
+ "name": "Palau",
+ "abbr": "PW",
+ "zones": [
+ "Pacific/Palau"
+ ]
+ },
+ "PY": {
+ "name": "Paraguay",
+ "abbr": "PY",
+ "zones": [
+ "America/Asuncion"
+ ]
+ },
+ "QA": {
+ "name": "Qatar",
+ "abbr": "QA",
+ "zones": [
+ "Asia/Qatar"
+ ]
+ },
+ "RE": {
+ "name": "Réunion",
+ "abbr": "RE",
+ "zones": [
+ "Indian/Reunion"
+ ]
+ },
+ "RO": {
+ "name": "Romania",
+ "abbr": "RO",
+ "zones": [
+ "Europe/Bucharest"
+ ]
+ },
+ "RS": {
+ "name": "Serbia",
+ "abbr": "RS",
+ "zones": [
+ "Europe/Belgrade"
+ ]
+ },
+ "RU": {
+ "name": "Russia",
+ "abbr": "RU",
+ "zones": [
+ "Europe/Kaliningrad",
+ "Europe/Moscow",
+ "Europe/Simferopol",
+ "Europe/Volgograd",
+ "Europe/Kirov",
+ "Europe/Astrakhan",
+ "Europe/Saratov",
+ "Europe/Ulyanovsk",
+ "Europe/Samara",
+ "Asia/Yekaterinburg",
+ "Asia/Omsk",
+ "Asia/Novosibirsk",
+ "Asia/Barnaul",
+ "Asia/Tomsk",
+ "Asia/Novokuznetsk",
+ "Asia/Krasnoyarsk",
+ "Asia/Irkutsk",
+ "Asia/Chita",
+ "Asia/Yakutsk",
+ "Asia/Khandyga",
+ "Asia/Vladivostok",
+ "Asia/Ust-Nera",
+ "Asia/Magadan",
+ "Asia/Sakhalin",
+ "Asia/Srednekolymsk",
+ "Asia/Kamchatka",
+ "Asia/Anadyr"
+ ]
+ },
+ "RW": {
+ "name": "Rwanda",
+ "abbr": "RW",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ },
+ "SA": {
+ "name": "Saudi Arabia",
+ "abbr": "SA",
+ "zones": [
+ "Asia/Riyadh"
+ ]
+ },
+ "SB": {
+ "name": "Solomon Islands",
+ "abbr": "SB",
+ "zones": [
+ "Pacific/Guadalcanal"
+ ]
+ },
+ "SC": {
+ "name": "Seychelles",
+ "abbr": "SC",
+ "zones": [
+ "Indian/Mahe"
+ ]
+ },
+ "SD": {
+ "name": "Sudan",
+ "abbr": "SD",
+ "zones": [
+ "Africa/Khartoum"
+ ]
+ },
+ "SE": {
+ "name": "Sweden",
+ "abbr": "SE",
+ "zones": [
+ "Europe/Stockholm"
+ ]
+ },
+ "SG": {
+ "name": "Singapore",
+ "abbr": "SG",
+ "zones": [
+ "Asia/Singapore"
+ ]
+ },
+ "SH": {
+ "name": "St Helena",
+ "abbr": "SH",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "SI": {
+ "name": "Slovenia",
+ "abbr": "SI",
+ "zones": [
+ "Europe/Belgrade"
+ ]
+ },
+ "SJ": {
+ "name": "Svalbard & Jan Mayen",
+ "abbr": "SJ",
+ "zones": [
+ "Europe/Oslo"
+ ]
+ },
+ "SK": {
+ "name": "Slovakia",
+ "abbr": "SK",
+ "zones": [
+ "Europe/Prague"
+ ]
+ },
+ "SL": {
+ "name": "Sierra Leone",
+ "abbr": "SL",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "SM": {
+ "name": "San Marino",
+ "abbr": "SM",
+ "zones": [
+ "Europe/Rome"
+ ]
+ },
+ "SN": {
+ "name": "Senegal",
+ "abbr": "SN",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "SO": {
+ "name": "Somalia",
+ "abbr": "SO",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "SR": {
+ "name": "Suriname",
+ "abbr": "SR",
+ "zones": [
+ "America/Paramaribo"
+ ]
+ },
+ "SS": {
+ "name": "South Sudan",
+ "abbr": "SS",
+ "zones": [
+ "Africa/Juba"
+ ]
+ },
+ "ST": {
+ "name": "Sao Tome & Principe",
+ "abbr": "ST",
+ "zones": [
+ "Africa/Sao_Tome"
+ ]
+ },
+ "SV": {
+ "name": "El Salvador",
+ "abbr": "SV",
+ "zones": [
+ "America/El_Salvador"
+ ]
+ },
+ "SX": {
+ "name": "St Maarten (Dutch)",
+ "abbr": "SX",
+ "zones": [
+ "America/Curacao"
+ ]
+ },
+ "SY": {
+ "name": "Syria",
+ "abbr": "SY",
+ "zones": [
+ "Asia/Damascus"
+ ]
+ },
+ "SZ": {
+ "name": "Swaziland",
+ "abbr": "SZ",
+ "zones": [
+ "Africa/Johannesburg"
+ ]
+ },
+ "TC": {
+ "name": "Turks & Caicos Is",
+ "abbr": "TC",
+ "zones": [
+ "America/Grand_Turk"
+ ]
+ },
+ "TD": {
+ "name": "Chad",
+ "abbr": "TD",
+ "zones": [
+ "Africa/Ndjamena"
+ ]
+ },
+ "TF": {
+ "name": "French Southern & Antarctic Lands",
+ "abbr": "TF",
+ "zones": [
+ "Indian/Reunion",
+ "Indian/Kerguelen"
+ ]
+ },
+ "TG": {
+ "name": "Togo",
+ "abbr": "TG",
+ "zones": [
+ "Africa/Abidjan"
+ ]
+ },
+ "TH": {
+ "name": "Thailand",
+ "abbr": "TH",
+ "zones": [
+ "Asia/Bangkok"
+ ]
+ },
+ "TJ": {
+ "name": "Tajikistan",
+ "abbr": "TJ",
+ "zones": [
+ "Asia/Dushanbe"
+ ]
+ },
+ "TK": {
+ "name": "Tokelau",
+ "abbr": "TK",
+ "zones": [
+ "Pacific/Fakaofo"
+ ]
+ },
+ "TL": {
+ "name": "East Timor",
+ "abbr": "TL",
+ "zones": [
+ "Asia/Dili"
+ ]
+ },
+ "TM": {
+ "name": "Turkmenistan",
+ "abbr": "TM",
+ "zones": [
+ "Asia/Ashgabat"
+ ]
+ },
+ "TN": {
+ "name": "Tunisia",
+ "abbr": "TN",
+ "zones": [
+ "Africa/Tunis"
+ ]
+ },
+ "TO": {
+ "name": "Tonga",
+ "abbr": "TO",
+ "zones": [
+ "Pacific/Tongatapu"
+ ]
+ },
+ "TR": {
+ "name": "Turkey",
+ "abbr": "TR",
+ "zones": [
+ "Europe/Istanbul"
+ ]
+ },
+ "TT": {
+ "name": "Trinidad & Tobago",
+ "abbr": "TT",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "TV": {
+ "name": "Tuvalu",
+ "abbr": "TV",
+ "zones": [
+ "Pacific/Funafuti"
+ ]
+ },
+ "TW": {
+ "name": "Taiwan",
+ "abbr": "TW",
+ "zones": [
+ "Asia/Taipei"
+ ]
+ },
+ "TZ": {
+ "name": "Tanzania",
+ "abbr": "TZ",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "UA": {
+ "name": "Ukraine",
+ "abbr": "UA",
+ "zones": [
+ "Europe/Kiev",
+ "Europe/Uzhgorod",
+ "Europe/Zaporozhye"
+ ]
+ },
+ "UG": {
+ "name": "Uganda",
+ "abbr": "UG",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "UM": {
+ "name": "US minor outlying islands",
+ "abbr": "UM",
+ "zones": [
+ "Pacific/Pago_Pago",
+ "Pacific/Wake",
+ "Pacific/Honolulu"
+ ]
+ },
+ "US": {
+ "name": "United States",
+ "abbr": "US",
+ "zones": [
+ "America/New_York",
+ "America/Detroit",
+ "America/Kentucky/Louisville",
+ "America/Kentucky/Monticello",
+ "America/Indiana/Indianapolis",
+ "America/Indiana/Vincennes",
+ "America/Indiana/Winamac",
+ "America/Indiana/Marengo",
+ "America/Indiana/Petersburg",
+ "America/Indiana/Vevay",
+ "America/Chicago",
+ "America/Indiana/Tell_City",
+ "America/Indiana/Knox",
+ "America/Menominee",
+ "America/North_Dakota/Center",
+ "America/North_Dakota/New_Salem",
+ "America/North_Dakota/Beulah",
+ "America/Denver",
+ "America/Boise",
+ "America/Phoenix",
+ "America/Los_Angeles",
+ "America/Anchorage",
+ "America/Juneau",
+ "America/Sitka",
+ "America/Metlakatla",
+ "America/Yakutat",
+ "America/Nome",
+ "America/Adak",
+ "Pacific/Honolulu"
+ ]
+ },
+ "UY": {
+ "name": "Uruguay",
+ "abbr": "UY",
+ "zones": [
+ "America/Montevideo"
+ ]
+ },
+ "UZ": {
+ "name": "Uzbekistan",
+ "abbr": "UZ",
+ "zones": [
+ "Asia/Samarkand",
+ "Asia/Tashkent"
+ ]
+ },
+ "VA": {
+ "name": "Vatican City",
+ "abbr": "VA",
+ "zones": [
+ "Europe/Rome"
+ ]
+ },
+ "VC": {
+ "name": "St Vincent",
+ "abbr": "VC",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "VE": {
+ "name": "Venezuela",
+ "abbr": "VE",
+ "zones": [
+ "America/Caracas"
+ ]
+ },
+ "VG": {
+ "name": "Virgin Islands (UK)",
+ "abbr": "VG",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "VI": {
+ "name": "Virgin Islands (US)",
+ "abbr": "VI",
+ "zones": [
+ "America/Port_of_Spain"
+ ]
+ },
+ "VN": {
+ "name": "Vietnam",
+ "abbr": "VN",
+ "zones": [
+ "Asia/Bangkok",
+ "Asia/Ho_Chi_Minh"
+ ]
+ },
+ "VU": {
+ "name": "Vanuatu",
+ "abbr": "VU",
+ "zones": [
+ "Pacific/Efate"
+ ]
+ },
+ "WF": {
+ "name": "Wallis & Futuna",
+ "abbr": "WF",
+ "zones": [
+ "Pacific/Wallis"
+ ]
+ },
+ "WS": {
+ "name": "Samoa (western)",
+ "abbr": "WS",
+ "zones": [
+ "Pacific/Apia"
+ ]
+ },
+ "YE": {
+ "name": "Yemen",
+ "abbr": "YE",
+ "zones": [
+ "Asia/Riyadh"
+ ]
+ },
+ "YT": {
+ "name": "Mayotte",
+ "abbr": "YT",
+ "zones": [
+ "Africa/Nairobi"
+ ]
+ },
+ "ZA": {
+ "name": "South Africa",
+ "abbr": "ZA",
+ "zones": [
+ "Africa/Johannesburg"
+ ]
+ },
+ "ZM": {
+ "name": "Zambia",
+ "abbr": "ZM",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ },
+ "ZW": {
+ "name": "Zimbabwe",
+ "abbr": "ZW",
+ "zones": [
+ "Africa/Maputo"
+ ]
+ }
+ },
+ "zones": {
+ "Europe/Andorra": {
+ "name": "Europe/Andorra",
+ "lat": 42.5,
+ "long": 1.5167,
+ "countries": [
+ "AD"
+ ],
+ "comments": ""
+ },
+ "Asia/Dubai": {
+ "name": "Asia/Dubai",
+ "lat": 25.3,
+ "long": 55.3,
+ "countries": [
+ "AE",
+ "OM"
+ ],
+ "comments": ""
+ },
+ "Asia/Kabul": {
+ "name": "Asia/Kabul",
+ "lat": 34.5167,
+ "long": 69.2,
+ "countries": [
+ "AF"
+ ],
+ "comments": ""
+ },
+ "Europe/Tirane": {
+ "name": "Europe/Tirane",
+ "lat": 41.3333,
+ "long": 19.8333,
+ "countries": [
+ "AL"
+ ],
+ "comments": ""
+ },
+ "Asia/Yerevan": {
+ "name": "Asia/Yerevan",
+ "lat": 40.1833,
+ "long": 44.5,
+ "countries": [
+ "AM"
+ ],
+ "comments": ""
+ },
+ "Antarctica/Casey": {
+ "name": "Antarctica/Casey",
+ "lat": -65.7167,
+ "long": 110.5167,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Casey"
+ },
+ "Antarctica/Davis": {
+ "name": "Antarctica/Davis",
+ "lat": -67.4167,
+ "long": 77.9667,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Davis"
+ },
+ "Antarctica/DumontDUrville": {
+ "name": "Antarctica/DumontDUrville",
+ "lat": -65.3333,
+ "long": 140.0167,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Dumont-d'Urville"
+ },
+ "Antarctica/Mawson": {
+ "name": "Antarctica/Mawson",
+ "lat": -66.4,
+ "long": 62.8833,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Mawson"
+ },
+ "Antarctica/Palmer": {
+ "name": "Antarctica/Palmer",
+ "lat": -63.2,
+ "long": -63.9,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Palmer"
+ },
+ "Antarctica/Rothera": {
+ "name": "Antarctica/Rothera",
+ "lat": -66.4333,
+ "long": -67.8667,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Rothera"
+ },
+ "Antarctica/Syowa": {
+ "name": "Antarctica/Syowa",
+ "lat": -68.9939,
+ "long": 39.59,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Syowa"
+ },
+ "Antarctica/Troll": {
+ "name": "Antarctica/Troll",
+ "lat": -71.9886,
+ "long": 2.535,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Troll"
+ },
+ "Antarctica/Vostok": {
+ "name": "Antarctica/Vostok",
+ "lat": -77.6,
+ "long": 106.9,
+ "countries": [
+ "AQ"
+ ],
+ "comments": "Vostok"
+ },
+ "America/Argentina/Buenos_Aires": {
+ "name": "America/Argentina/Buenos_Aires",
+ "lat": -33.4,
+ "long": -57.55,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Buenos Aires (BA, CF)"
+ },
+ "America/Argentina/Cordoba": {
+ "name": "America/Argentina/Cordoba",
+ "lat": -30.6,
+ "long": -63.8167,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)"
+ },
+ "America/Argentina/Salta": {
+ "name": "America/Argentina/Salta",
+ "lat": -23.2167,
+ "long": -64.5833,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Salta (SA, LP, NQ, RN)"
+ },
+ "America/Argentina/Jujuy": {
+ "name": "America/Argentina/Jujuy",
+ "lat": -23.8167,
+ "long": -64.7,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Jujuy (JY)"
+ },
+ "America/Argentina/Tucuman": {
+ "name": "America/Argentina/Tucuman",
+ "lat": -25.1833,
+ "long": -64.7833,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Tucumán (TM)"
+ },
+ "America/Argentina/Catamarca": {
+ "name": "America/Argentina/Catamarca",
+ "lat": -27.5333,
+ "long": -64.2167,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Catamarca (CT); Chubut (CH)"
+ },
+ "America/Argentina/La_Rioja": {
+ "name": "America/Argentina/La_Rioja",
+ "lat": -28.5667,
+ "long": -65.15,
+ "countries": [
+ "AR"
+ ],
+ "comments": "La Rioja (LR)"
+ },
+ "America/Argentina/San_Juan": {
+ "name": "America/Argentina/San_Juan",
+ "lat": -30.4667,
+ "long": -67.4833,
+ "countries": [
+ "AR"
+ ],
+ "comments": "San Juan (SJ)"
+ },
+ "America/Argentina/Mendoza": {
+ "name": "America/Argentina/Mendoza",
+ "lat": -31.1167,
+ "long": -67.1833,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Mendoza (MZ)"
+ },
+ "America/Argentina/San_Luis": {
+ "name": "America/Argentina/San_Luis",
+ "lat": -32.6833,
+ "long": -65.65,
+ "countries": [
+ "AR"
+ ],
+ "comments": "San Luis (SL)"
+ },
+ "America/Argentina/Rio_Gallegos": {
+ "name": "America/Argentina/Rio_Gallegos",
+ "lat": -50.3667,
+ "long": -68.7833,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Santa Cruz (SC)"
+ },
+ "America/Argentina/Ushuaia": {
+ "name": "America/Argentina/Ushuaia",
+ "lat": -53.2,
+ "long": -67.7,
+ "countries": [
+ "AR"
+ ],
+ "comments": "Tierra del Fuego (TF)"
+ },
+ "Pacific/Pago_Pago": {
+ "name": "Pacific/Pago_Pago",
+ "lat": -13.7333,
+ "long": -169.3,
+ "countries": [
+ "AS",
+ "UM"
+ ],
+ "comments": "Samoa, Midway"
+ },
+ "Europe/Vienna": {
+ "name": "Europe/Vienna",
+ "lat": 48.2167,
+ "long": 16.3333,
+ "countries": [
+ "AT"
+ ],
+ "comments": ""
+ },
+ "Australia/Lord_Howe": {
+ "name": "Australia/Lord_Howe",
+ "lat": -30.45,
+ "long": 159.0833,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Lord Howe Island"
+ },
+ "Antarctica/Macquarie": {
+ "name": "Antarctica/Macquarie",
+ "lat": -53.5,
+ "long": 158.95,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Macquarie Island"
+ },
+ "Australia/Hobart": {
+ "name": "Australia/Hobart",
+ "lat": -41.1167,
+ "long": 147.3167,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Tasmania (most areas)"
+ },
+ "Australia/Currie": {
+ "name": "Australia/Currie",
+ "lat": -38.0667,
+ "long": 143.8667,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Tasmania (King Island)"
+ },
+ "Australia/Melbourne": {
+ "name": "Australia/Melbourne",
+ "lat": -36.1833,
+ "long": 144.9667,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Victoria"
+ },
+ "Australia/Sydney": {
+ "name": "Australia/Sydney",
+ "lat": -32.1333,
+ "long": 151.2167,
+ "countries": [
+ "AU"
+ ],
+ "comments": "New South Wales (most areas)"
+ },
+ "Australia/Broken_Hill": {
+ "name": "Australia/Broken_Hill",
+ "lat": -30.05,
+ "long": 141.45,
+ "countries": [
+ "AU"
+ ],
+ "comments": "New South Wales (Yancowinna)"
+ },
+ "Australia/Brisbane": {
+ "name": "Australia/Brisbane",
+ "lat": -26.5333,
+ "long": 153.0333,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Queensland (most areas)"
+ },
+ "Australia/Lindeman": {
+ "name": "Australia/Lindeman",
+ "lat": -19.7333,
+ "long": 149,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Queensland (Whitsunday Islands)"
+ },
+ "Australia/Adelaide": {
+ "name": "Australia/Adelaide",
+ "lat": -33.0833,
+ "long": 138.5833,
+ "countries": [
+ "AU"
+ ],
+ "comments": "South Australia"
+ },
+ "Australia/Darwin": {
+ "name": "Australia/Darwin",
+ "lat": -11.5333,
+ "long": 130.8333,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Northern Territory"
+ },
+ "Australia/Perth": {
+ "name": "Australia/Perth",
+ "lat": -30.05,
+ "long": 115.85,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Western Australia (most areas)"
+ },
+ "Australia/Eucla": {
+ "name": "Australia/Eucla",
+ "lat": -30.2833,
+ "long": 128.8667,
+ "countries": [
+ "AU"
+ ],
+ "comments": "Western Australia (Eucla)"
+ },
+ "Asia/Baku": {
+ "name": "Asia/Baku",
+ "lat": 40.3833,
+ "long": 49.85,
+ "countries": [
+ "AZ"
+ ],
+ "comments": ""
+ },
+ "America/Barbados": {
+ "name": "America/Barbados",
+ "lat": 13.1,
+ "long": -58.3833,
+ "countries": [
+ "BB"
+ ],
+ "comments": ""
+ },
+ "Asia/Dhaka": {
+ "name": "Asia/Dhaka",
+ "lat": 23.7167,
+ "long": 90.4167,
+ "countries": [
+ "BD"
+ ],
+ "comments": ""
+ },
+ "Europe/Brussels": {
+ "name": "Europe/Brussels",
+ "lat": 50.8333,
+ "long": 4.3333,
+ "countries": [
+ "BE"
+ ],
+ "comments": ""
+ },
+ "Europe/Sofia": {
+ "name": "Europe/Sofia",
+ "lat": 42.6833,
+ "long": 23.3167,
+ "countries": [
+ "BG"
+ ],
+ "comments": ""
+ },
+ "Atlantic/Bermuda": {
+ "name": "Atlantic/Bermuda",
+ "lat": 32.2833,
+ "long": -63.2333,
+ "countries": [
+ "BM"
+ ],
+ "comments": ""
+ },
+ "Asia/Brunei": {
+ "name": "Asia/Brunei",
+ "lat": 4.9333,
+ "long": 114.9167,
+ "countries": [
+ "BN"
+ ],
+ "comments": ""
+ },
+ "America/La_Paz": {
+ "name": "America/La_Paz",
+ "lat": -15.5,
+ "long": -67.85,
+ "countries": [
+ "BO"
+ ],
+ "comments": ""
+ },
+ "America/Noronha": {
+ "name": "America/Noronha",
+ "lat": -2.15,
+ "long": -31.5833,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Atlantic islands"
+ },
+ "America/Belem": {
+ "name": "America/Belem",
+ "lat": -0.55,
+ "long": -47.5167,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Pará (east); Amapá"
+ },
+ "America/Fortaleza": {
+ "name": "America/Fortaleza",
+ "lat": -2.2833,
+ "long": -37.5,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Brazil (northeast: MA, PI, CE, RN, PB)"
+ },
+ "America/Recife": {
+ "name": "America/Recife",
+ "lat": -7.95,
+ "long": -33.1,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Pernambuco"
+ },
+ "America/Araguaina": {
+ "name": "America/Araguaina",
+ "lat": -6.8,
+ "long": -47.8,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Tocantins"
+ },
+ "America/Maceio": {
+ "name": "America/Maceio",
+ "lat": -8.3333,
+ "long": -34.2833,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Alagoas, Sergipe"
+ },
+ "America/Bahia": {
+ "name": "America/Bahia",
+ "lat": -11.0167,
+ "long": -37.4833,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Bahia"
+ },
+ "America/Sao_Paulo": {
+ "name": "America/Sao_Paulo",
+ "lat": -22.4667,
+ "long": -45.3833,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)"
+ },
+ "America/Campo_Grande": {
+ "name": "America/Campo_Grande",
+ "lat": -19.55,
+ "long": -53.3833,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Mato Grosso do Sul"
+ },
+ "America/Cuiaba": {
+ "name": "America/Cuiaba",
+ "lat": -14.4167,
+ "long": -55.9167,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Mato Grosso"
+ },
+ "America/Santarem": {
+ "name": "America/Santarem",
+ "lat": -1.5667,
+ "long": -53.1333,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Pará (west)"
+ },
+ "America/Porto_Velho": {
+ "name": "America/Porto_Velho",
+ "lat": -7.2333,
+ "long": -62.1,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Rondônia"
+ },
+ "America/Boa_Vista": {
+ "name": "America/Boa_Vista",
+ "lat": 2.8167,
+ "long": -59.3333,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Roraima"
+ },
+ "America/Manaus": {
+ "name": "America/Manaus",
+ "lat": -2.8667,
+ "long": -59.9833,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Amazonas (east)"
+ },
+ "America/Eirunepe": {
+ "name": "America/Eirunepe",
+ "lat": -5.3333,
+ "long": -68.1333,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Amazonas (west)"
+ },
+ "America/Rio_Branco": {
+ "name": "America/Rio_Branco",
+ "lat": -8.0333,
+ "long": -66.2,
+ "countries": [
+ "BR"
+ ],
+ "comments": "Acre"
+ },
+ "America/Nassau": {
+ "name": "America/Nassau",
+ "lat": 25.0833,
+ "long": -76.65,
+ "countries": [
+ "BS"
+ ],
+ "comments": ""
+ },
+ "Asia/Thimphu": {
+ "name": "Asia/Thimphu",
+ "lat": 27.4667,
+ "long": 89.65,
+ "countries": [
+ "BT"
+ ],
+ "comments": ""
+ },
+ "Europe/Minsk": {
+ "name": "Europe/Minsk",
+ "lat": 53.9,
+ "long": 27.5667,
+ "countries": [
+ "BY"
+ ],
+ "comments": ""
+ },
+ "America/Belize": {
+ "name": "America/Belize",
+ "lat": 17.5,
+ "long": -87.8,
+ "countries": [
+ "BZ"
+ ],
+ "comments": ""
+ },
+ "America/St_Johns": {
+ "name": "America/St_Johns",
+ "lat": 47.5667,
+ "long": -51.2833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Newfoundland; Labrador (southeast)"
+ },
+ "America/Halifax": {
+ "name": "America/Halifax",
+ "lat": 44.65,
+ "long": -62.4,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Atlantic - NS (most areas); PE"
+ },
+ "America/Glace_Bay": {
+ "name": "America/Glace_Bay",
+ "lat": 46.2,
+ "long": -58.05,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Atlantic - NS (Cape Breton)"
+ },
+ "America/Moncton": {
+ "name": "America/Moncton",
+ "lat": 46.1,
+ "long": -63.2167,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Atlantic - New Brunswick"
+ },
+ "America/Goose_Bay": {
+ "name": "America/Goose_Bay",
+ "lat": 53.3333,
+ "long": -59.5833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Atlantic - Labrador (most areas)"
+ },
+ "America/Blanc-Sablon": {
+ "name": "America/Blanc-Sablon",
+ "lat": 51.4167,
+ "long": -56.8833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "AST - QC (Lower North Shore)"
+ },
+ "America/Toronto": {
+ "name": "America/Toronto",
+ "lat": 43.65,
+ "long": -78.6167,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Eastern - ON, QC (most areas)"
+ },
+ "America/Nipigon": {
+ "name": "America/Nipigon",
+ "lat": 49.0167,
+ "long": -87.7333,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Eastern - ON, QC (no DST 1967-73)"
+ },
+ "America/Thunder_Bay": {
+ "name": "America/Thunder_Bay",
+ "lat": 48.3833,
+ "long": -88.75,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Eastern - ON (Thunder Bay)"
+ },
+ "America/Iqaluit": {
+ "name": "America/Iqaluit",
+ "lat": 63.7333,
+ "long": -67.5333,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Eastern - NU (most east areas)"
+ },
+ "America/Pangnirtung": {
+ "name": "America/Pangnirtung",
+ "lat": 66.1333,
+ "long": -64.2667,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Eastern - NU (Pangnirtung)"
+ },
+ "America/Atikokan": {
+ "name": "America/Atikokan",
+ "lat": 48.7586,
+ "long": -90.3783,
+ "countries": [
+ "CA"
+ ],
+ "comments": "EST - ON (Atikokan); NU (Coral H)"
+ },
+ "America/Winnipeg": {
+ "name": "America/Winnipeg",
+ "lat": 49.8833,
+ "long": -96.85,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Central - ON (west); Manitoba"
+ },
+ "America/Rainy_River": {
+ "name": "America/Rainy_River",
+ "lat": 48.7167,
+ "long": -93.4333,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Central - ON (Rainy R, Ft Frances)"
+ },
+ "America/Resolute": {
+ "name": "America/Resolute",
+ "lat": 74.6956,
+ "long": -93.1708,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Central - NU (Resolute)"
+ },
+ "America/Rankin_Inlet": {
+ "name": "America/Rankin_Inlet",
+ "lat": 62.8167,
+ "long": -91.9169,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Central - NU (central)"
+ },
+ "America/Regina": {
+ "name": "America/Regina",
+ "lat": 50.4,
+ "long": -103.35,
+ "countries": [
+ "CA"
+ ],
+ "comments": "CST - SK (most areas)"
+ },
+ "America/Swift_Current": {
+ "name": "America/Swift_Current",
+ "lat": 50.2833,
+ "long": -106.1667,
+ "countries": [
+ "CA"
+ ],
+ "comments": "CST - SK (midwest)"
+ },
+ "America/Edmonton": {
+ "name": "America/Edmonton",
+ "lat": 53.55,
+ "long": -112.5333,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Mountain - AB; BC (E); SK (W)"
+ },
+ "America/Cambridge_Bay": {
+ "name": "America/Cambridge_Bay",
+ "lat": 69.1139,
+ "long": -104.9472,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Mountain - NU (west)"
+ },
+ "America/Yellowknife": {
+ "name": "America/Yellowknife",
+ "lat": 62.45,
+ "long": -113.65,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Mountain - NT (central)"
+ },
+ "America/Inuvik": {
+ "name": "America/Inuvik",
+ "lat": 68.3497,
+ "long": -132.2833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Mountain - NT (west)"
+ },
+ "America/Creston": {
+ "name": "America/Creston",
+ "lat": 49.1,
+ "long": -115.4833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "MST - BC (Creston)"
+ },
+ "America/Dawson_Creek": {
+ "name": "America/Dawson_Creek",
+ "lat": 59.7667,
+ "long": -119.7667,
+ "countries": [
+ "CA"
+ ],
+ "comments": "MST - BC (Dawson Cr, Ft St John)"
+ },
+ "America/Fort_Nelson": {
+ "name": "America/Fort_Nelson",
+ "lat": 58.8,
+ "long": -121.3,
+ "countries": [
+ "CA"
+ ],
+ "comments": "MST - BC (Ft Nelson)"
+ },
+ "America/Vancouver": {
+ "name": "America/Vancouver",
+ "lat": 49.2667,
+ "long": -122.8833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Pacific - BC (most areas)"
+ },
+ "America/Whitehorse": {
+ "name": "America/Whitehorse",
+ "lat": 60.7167,
+ "long": -134.95,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Pacific - Yukon (south)"
+ },
+ "America/Dawson": {
+ "name": "America/Dawson",
+ "lat": 64.0667,
+ "long": -138.5833,
+ "countries": [
+ "CA"
+ ],
+ "comments": "Pacific - Yukon (north)"
+ },
+ "Indian/Cocos": {
+ "name": "Indian/Cocos",
+ "lat": -11.8333,
+ "long": 96.9167,
+ "countries": [
+ "CC"
+ ],
+ "comments": ""
+ },
+ "Europe/Zurich": {
+ "name": "Europe/Zurich",
+ "lat": 47.3833,
+ "long": 8.5333,
+ "countries": [
+ "CH",
+ "DE",
+ "LI"
+ ],
+ "comments": "Swiss time"
+ },
+ "Africa/Abidjan": {
+ "name": "Africa/Abidjan",
+ "lat": 5.3167,
+ "long": -3.9667,
+ "countries": [
+ "CI",
+ "BF",
+ "GM",
+ "GN",
+ "ML",
+ "MR",
+ "SH",
+ "SL",
+ "SN",
+ "TG"
+ ],
+ "comments": ""
+ },
+ "Pacific/Rarotonga": {
+ "name": "Pacific/Rarotonga",
+ "lat": -20.7667,
+ "long": -158.2333,
+ "countries": [
+ "CK"
+ ],
+ "comments": ""
+ },
+ "America/Santiago": {
+ "name": "America/Santiago",
+ "lat": -32.55,
+ "long": -69.3333,
+ "countries": [
+ "CL"
+ ],
+ "comments": "Chile (most areas)"
+ },
+ "America/Punta_Arenas": {
+ "name": "America/Punta_Arenas",
+ "lat": -52.85,
+ "long": -69.0833,
+ "countries": [
+ "CL"
+ ],
+ "comments": "Region of Magallanes"
+ },
+ "Pacific/Easter": {
+ "name": "Pacific/Easter",
+ "lat": -26.85,
+ "long": -108.5667,
+ "countries": [
+ "CL"
+ ],
+ "comments": "Easter Island"
+ },
+ "Asia/Shanghai": {
+ "name": "Asia/Shanghai",
+ "lat": 31.2333,
+ "long": 121.4667,
+ "countries": [
+ "CN"
+ ],
+ "comments": "Beijing Time"
+ },
+ "Asia/Urumqi": {
+ "name": "Asia/Urumqi",
+ "lat": 43.8,
+ "long": 87.5833,
+ "countries": [
+ "CN"
+ ],
+ "comments": "Xinjiang Time"
+ },
+ "America/Bogota": {
+ "name": "America/Bogota",
+ "lat": 4.6,
+ "long": -73.9167,
+ "countries": [
+ "CO"
+ ],
+ "comments": ""
+ },
+ "America/Costa_Rica": {
+ "name": "America/Costa_Rica",
+ "lat": 9.9333,
+ "long": -83.9167,
+ "countries": [
+ "CR"
+ ],
+ "comments": ""
+ },
+ "America/Havana": {
+ "name": "America/Havana",
+ "lat": 23.1333,
+ "long": -81.6333,
+ "countries": [
+ "CU"
+ ],
+ "comments": ""
+ },
+ "Atlantic/Cape_Verde": {
+ "name": "Atlantic/Cape_Verde",
+ "lat": 14.9167,
+ "long": -22.4833,
+ "countries": [
+ "CV"
+ ],
+ "comments": ""
+ },
+ "America/Curacao": {
+ "name": "America/Curacao",
+ "lat": 12.1833,
+ "long": -69,
+ "countries": [
+ "CW",
+ "AW",
+ "BQ",
+ "SX"
+ ],
+ "comments": ""
+ },
+ "Indian/Christmas": {
+ "name": "Indian/Christmas",
+ "lat": -9.5833,
+ "long": 105.7167,
+ "countries": [
+ "CX"
+ ],
+ "comments": ""
+ },
+ "Asia/Nicosia": {
+ "name": "Asia/Nicosia",
+ "lat": 35.1667,
+ "long": 33.3667,
+ "countries": [
+ "CY"
+ ],
+ "comments": "Cyprus (most areas)"
+ },
+ "Asia/Famagusta": {
+ "name": "Asia/Famagusta",
+ "lat": 35.1167,
+ "long": 33.95,
+ "countries": [
+ "CY"
+ ],
+ "comments": "Northern Cyprus"
+ },
+ "Europe/Prague": {
+ "name": "Europe/Prague",
+ "lat": 50.0833,
+ "long": 14.4333,
+ "countries": [
+ "CZ",
+ "SK"
+ ],
+ "comments": ""
+ },
+ "Europe/Berlin": {
+ "name": "Europe/Berlin",
+ "lat": 52.5,
+ "long": 13.3667,
+ "countries": [
+ "DE"
+ ],
+ "comments": "Germany (most areas)"
+ },
+ "Europe/Copenhagen": {
+ "name": "Europe/Copenhagen",
+ "lat": 55.6667,
+ "long": 12.5833,
+ "countries": [
+ "DK"
+ ],
+ "comments": ""
+ },
+ "America/Santo_Domingo": {
+ "name": "America/Santo_Domingo",
+ "lat": 18.4667,
+ "long": -68.1,
+ "countries": [
+ "DO"
+ ],
+ "comments": ""
+ },
+ "Africa/Algiers": {
+ "name": "Africa/Algiers",
+ "lat": 36.7833,
+ "long": 3.05,
+ "countries": [
+ "DZ"
+ ],
+ "comments": ""
+ },
+ "America/Guayaquil": {
+ "name": "America/Guayaquil",
+ "lat": -1.8333,
+ "long": -78.1667,
+ "countries": [
+ "EC"
+ ],
+ "comments": "Ecuador (mainland)"
+ },
+ "Pacific/Galapagos": {
+ "name": "Pacific/Galapagos",
+ "lat": 0.9,
+ "long": -88.4,
+ "countries": [
+ "EC"
+ ],
+ "comments": "Galápagos Islands"
+ },
+ "Europe/Tallinn": {
+ "name": "Europe/Tallinn",
+ "lat": 59.4167,
+ "long": 24.75,
+ "countries": [
+ "EE"
+ ],
+ "comments": ""
+ },
+ "Africa/Cairo": {
+ "name": "Africa/Cairo",
+ "lat": 30.05,
+ "long": 31.25,
+ "countries": [
+ "EG"
+ ],
+ "comments": ""
+ },
+ "Africa/El_Aaiun": {
+ "name": "Africa/El_Aaiun",
+ "lat": 27.15,
+ "long": -12.8,
+ "countries": [
+ "EH"
+ ],
+ "comments": ""
+ },
+ "Europe/Madrid": {
+ "name": "Europe/Madrid",
+ "lat": 40.4,
+ "long": -2.3167,
+ "countries": [
+ "ES"
+ ],
+ "comments": "Spain (mainland)"
+ },
+ "Africa/Ceuta": {
+ "name": "Africa/Ceuta",
+ "lat": 35.8833,
+ "long": -4.6833,
+ "countries": [
+ "ES"
+ ],
+ "comments": "Ceuta, Melilla"
+ },
+ "Atlantic/Canary": {
+ "name": "Atlantic/Canary",
+ "lat": 28.1,
+ "long": -14.6,
+ "countries": [
+ "ES"
+ ],
+ "comments": "Canary Islands"
+ },
+ "Europe/Helsinki": {
+ "name": "Europe/Helsinki",
+ "lat": 60.1667,
+ "long": 24.9667,
+ "countries": [
+ "FI",
+ "AX"
+ ],
+ "comments": ""
+ },
+ "Pacific/Fiji": {
+ "name": "Pacific/Fiji",
+ "lat": -17.8667,
+ "long": 178.4167,
+ "countries": [
+ "FJ"
+ ],
+ "comments": ""
+ },
+ "Atlantic/Stanley": {
+ "name": "Atlantic/Stanley",
+ "lat": -50.3,
+ "long": -56.15,
+ "countries": [
+ "FK"
+ ],
+ "comments": ""
+ },
+ "Pacific/Chuuk": {
+ "name": "Pacific/Chuuk",
+ "lat": 7.4167,
+ "long": 151.7833,
+ "countries": [
+ "FM"
+ ],
+ "comments": "Chuuk/Truk, Yap"
+ },
+ "Pacific/Pohnpei": {
+ "name": "Pacific/Pohnpei",
+ "lat": 6.9667,
+ "long": 158.2167,
+ "countries": [
+ "FM"
+ ],
+ "comments": "Pohnpei/Ponape"
+ },
+ "Pacific/Kosrae": {
+ "name": "Pacific/Kosrae",
+ "lat": 5.3167,
+ "long": 162.9833,
+ "countries": [
+ "FM"
+ ],
+ "comments": "Kosrae"
+ },
+ "Atlantic/Faroe": {
+ "name": "Atlantic/Faroe",
+ "lat": 62.0167,
+ "long": -5.2333,
+ "countries": [
+ "FO"
+ ],
+ "comments": ""
+ },
+ "Europe/Paris": {
+ "name": "Europe/Paris",
+ "lat": 48.8667,
+ "long": 2.3333,
+ "countries": [
+ "FR"
+ ],
+ "comments": ""
+ },
+ "Europe/London": {
+ "name": "Europe/London",
+ "lat": 51.5083,
+ "long": 0.1253,
+ "countries": [
+ "GB",
+ "GG",
+ "IM",
+ "JE"
+ ],
+ "comments": ""
+ },
+ "Asia/Tbilisi": {
+ "name": "Asia/Tbilisi",
+ "lat": 41.7167,
+ "long": 44.8167,
+ "countries": [
+ "GE"
+ ],
+ "comments": ""
+ },
+ "America/Cayenne": {
+ "name": "America/Cayenne",
+ "lat": 4.9333,
+ "long": -51.6667,
+ "countries": [
+ "GF"
+ ],
+ "comments": ""
+ },
+ "Africa/Accra": {
+ "name": "Africa/Accra",
+ "lat": 5.55,
+ "long": 0.2167,
+ "countries": [
+ "GH"
+ ],
+ "comments": ""
+ },
+ "Europe/Gibraltar": {
+ "name": "Europe/Gibraltar",
+ "lat": 36.1333,
+ "long": -4.65,
+ "countries": [
+ "GI"
+ ],
+ "comments": ""
+ },
+ "America/Godthab": {
+ "name": "America/Godthab",
+ "lat": 64.1833,
+ "long": -50.2667,
+ "countries": [
+ "GL"
+ ],
+ "comments": "Greenland (most areas)"
+ },
+ "America/Danmarkshavn": {
+ "name": "America/Danmarkshavn",
+ "lat": 76.7667,
+ "long": -17.3333,
+ "countries": [
+ "GL"
+ ],
+ "comments": "National Park (east coast)"
+ },
+ "America/Scoresbysund": {
+ "name": "America/Scoresbysund",
+ "lat": 70.4833,
+ "long": -20.0333,
+ "countries": [
+ "GL"
+ ],
+ "comments": "Scoresbysund/Ittoqqortoormiit"
+ },
+ "America/Thule": {
+ "name": "America/Thule",
+ "lat": 76.5667,
+ "long": -67.2167,
+ "countries": [
+ "GL"
+ ],
+ "comments": "Thule/Pituffik"
+ },
+ "Europe/Athens": {
+ "name": "Europe/Athens",
+ "lat": 37.9667,
+ "long": 23.7167,
+ "countries": [
+ "GR"
+ ],
+ "comments": ""
+ },
+ "Atlantic/South_Georgia": {
+ "name": "Atlantic/South_Georgia",
+ "lat": -53.7333,
+ "long": -35.4667,
+ "countries": [
+ "GS"
+ ],
+ "comments": ""
+ },
+ "America/Guatemala": {
+ "name": "America/Guatemala",
+ "lat": 14.6333,
+ "long": -89.4833,
+ "countries": [
+ "GT"
+ ],
+ "comments": ""
+ },
+ "Pacific/Guam": {
+ "name": "Pacific/Guam",
+ "lat": 13.4667,
+ "long": 144.75,
+ "countries": [
+ "GU",
+ "MP"
+ ],
+ "comments": ""
+ },
+ "Africa/Bissau": {
+ "name": "Africa/Bissau",
+ "lat": 11.85,
+ "long": -14.4167,
+ "countries": [
+ "GW"
+ ],
+ "comments": ""
+ },
+ "America/Guyana": {
+ "name": "America/Guyana",
+ "lat": 6.8,
+ "long": -57.8333,
+ "countries": [
+ "GY"
+ ],
+ "comments": ""
+ },
+ "Asia/Hong_Kong": {
+ "name": "Asia/Hong_Kong",
+ "lat": 22.2833,
+ "long": 114.15,
+ "countries": [
+ "HK"
+ ],
+ "comments": ""
+ },
+ "America/Tegucigalpa": {
+ "name": "America/Tegucigalpa",
+ "lat": 14.1,
+ "long": -86.7833,
+ "countries": [
+ "HN"
+ ],
+ "comments": ""
+ },
+ "America/Port-au-Prince": {
+ "name": "America/Port-au-Prince",
+ "lat": 18.5333,
+ "long": -71.6667,
+ "countries": [
+ "HT"
+ ],
+ "comments": ""
+ },
+ "Europe/Budapest": {
+ "name": "Europe/Budapest",
+ "lat": 47.5,
+ "long": 19.0833,
+ "countries": [
+ "HU"
+ ],
+ "comments": ""
+ },
+ "Asia/Jakarta": {
+ "name": "Asia/Jakarta",
+ "lat": -5.8333,
+ "long": 106.8,
+ "countries": [
+ "ID"
+ ],
+ "comments": "Java, Sumatra"
+ },
+ "Asia/Pontianak": {
+ "name": "Asia/Pontianak",
+ "lat": 0.0333,
+ "long": 109.3333,
+ "countries": [
+ "ID"
+ ],
+ "comments": "Borneo (west, central)"
+ },
+ "Asia/Makassar": {
+ "name": "Asia/Makassar",
+ "lat": -4.8833,
+ "long": 119.4,
+ "countries": [
+ "ID"
+ ],
+ "comments": "Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)"
+ },
+ "Asia/Jayapura": {
+ "name": "Asia/Jayapura",
+ "lat": -1.4667,
+ "long": 140.7,
+ "countries": [
+ "ID"
+ ],
+ "comments": "New Guinea (West Papua / Irian Jaya); Malukus/Moluccas"
+ },
+ "Europe/Dublin": {
+ "name": "Europe/Dublin",
+ "lat": 53.3333,
+ "long": -5.75,
+ "countries": [
+ "IE"
+ ],
+ "comments": ""
+ },
+ "Asia/Jerusalem": {
+ "name": "Asia/Jerusalem",
+ "lat": 31.7806,
+ "long": 35.2239,
+ "countries": [
+ "IL"
+ ],
+ "comments": ""
+ },
+ "Asia/Kolkata": {
+ "name": "Asia/Kolkata",
+ "lat": 22.5333,
+ "long": 88.3667,
+ "countries": [
+ "IN"
+ ],
+ "comments": ""
+ },
+ "Indian/Chagos": {
+ "name": "Indian/Chagos",
+ "lat": -6.6667,
+ "long": 72.4167,
+ "countries": [
+ "IO"
+ ],
+ "comments": ""
+ },
+ "Asia/Baghdad": {
+ "name": "Asia/Baghdad",
+ "lat": 33.35,
+ "long": 44.4167,
+ "countries": [
+ "IQ"
+ ],
+ "comments": ""
+ },
+ "Asia/Tehran": {
+ "name": "Asia/Tehran",
+ "lat": 35.6667,
+ "long": 51.4333,
+ "countries": [
+ "IR"
+ ],
+ "comments": ""
+ },
+ "Atlantic/Reykjavik": {
+ "name": "Atlantic/Reykjavik",
+ "lat": 64.15,
+ "long": -20.15,
+ "countries": [
+ "IS"
+ ],
+ "comments": ""
+ },
+ "Europe/Rome": {
+ "name": "Europe/Rome",
+ "lat": 41.9,
+ "long": 12.4833,
+ "countries": [
+ "IT",
+ "SM",
+ "VA"
+ ],
+ "comments": ""
+ },
+ "America/Jamaica": {
+ "name": "America/Jamaica",
+ "lat": 17.9681,
+ "long": -75.2067,
+ "countries": [
+ "JM"
+ ],
+ "comments": ""
+ },
+ "Asia/Amman": {
+ "name": "Asia/Amman",
+ "lat": 31.95,
+ "long": 35.9333,
+ "countries": [
+ "JO"
+ ],
+ "comments": ""
+ },
+ "Asia/Tokyo": {
+ "name": "Asia/Tokyo",
+ "lat": 35.6544,
+ "long": 139.7447,
+ "countries": [
+ "JP"
+ ],
+ "comments": ""
+ },
+ "Africa/Nairobi": {
+ "name": "Africa/Nairobi",
+ "lat": -0.7167,
+ "long": 36.8167,
+ "countries": [
+ "KE",
+ "DJ",
+ "ER",
+ "ET",
+ "KM",
+ "MG",
+ "SO",
+ "TZ",
+ "UG",
+ "YT"
+ ],
+ "comments": ""
+ },
+ "Asia/Bishkek": {
+ "name": "Asia/Bishkek",
+ "lat": 42.9,
+ "long": 74.6,
+ "countries": [
+ "KG"
+ ],
+ "comments": ""
+ },
+ "Pacific/Tarawa": {
+ "name": "Pacific/Tarawa",
+ "lat": 1.4167,
+ "long": 173,
+ "countries": [
+ "KI"
+ ],
+ "comments": "Gilbert Islands"
+ },
+ "Pacific/Enderbury": {
+ "name": "Pacific/Enderbury",
+ "lat": -2.8667,
+ "long": -170.9167,
+ "countries": [
+ "KI"
+ ],
+ "comments": "Phoenix Islands"
+ },
+ "Pacific/Kiritimati": {
+ "name": "Pacific/Kiritimati",
+ "lat": 1.8667,
+ "long": -156.6667,
+ "countries": [
+ "KI"
+ ],
+ "comments": "Line Islands"
+ },
+ "Asia/Pyongyang": {
+ "name": "Asia/Pyongyang",
+ "lat": 39.0167,
+ "long": 125.75,
+ "countries": [
+ "KP"
+ ],
+ "comments": ""
+ },
+ "Asia/Seoul": {
+ "name": "Asia/Seoul",
+ "lat": 37.55,
+ "long": 126.9667,
+ "countries": [
+ "KR"
+ ],
+ "comments": ""
+ },
+ "Asia/Almaty": {
+ "name": "Asia/Almaty",
+ "lat": 43.25,
+ "long": 76.95,
+ "countries": [
+ "KZ"
+ ],
+ "comments": "Kazakhstan (most areas)"
+ },
+ "Asia/Qyzylorda": {
+ "name": "Asia/Qyzylorda",
+ "lat": 44.8,
+ "long": 65.4667,
+ "countries": [
+ "KZ"
+ ],
+ "comments": "Qyzylorda/Kyzylorda/Kzyl-Orda"
+ },
+ "Asia/Aqtobe": {
+ "name": "Asia/Aqtobe",
+ "lat": 50.2833,
+ "long": 57.1667,
+ "countries": [
+ "KZ"
+ ],
+ "comments": "Aqtöbe/Aktobe"
+ },
+ "Asia/Aqtau": {
+ "name": "Asia/Aqtau",
+ "lat": 44.5167,
+ "long": 50.2667,
+ "countries": [
+ "KZ"
+ ],
+ "comments": "Mangghystaū/Mankistau"
+ },
+ "Asia/Atyrau": {
+ "name": "Asia/Atyrau",
+ "lat": 47.1167,
+ "long": 51.9333,
+ "countries": [
+ "KZ"
+ ],
+ "comments": "Atyraū/Atirau/Gur'yev"
+ },
+ "Asia/Oral": {
+ "name": "Asia/Oral",
+ "lat": 51.2167,
+ "long": 51.35,
+ "countries": [
+ "KZ"
+ ],
+ "comments": "West Kazakhstan"
+ },
+ "Asia/Beirut": {
+ "name": "Asia/Beirut",
+ "lat": 33.8833,
+ "long": 35.5,
+ "countries": [
+ "LB"
+ ],
+ "comments": ""
+ },
+ "Asia/Colombo": {
+ "name": "Asia/Colombo",
+ "lat": 6.9333,
+ "long": 79.85,
+ "countries": [
+ "LK"
+ ],
+ "comments": ""
+ },
+ "Africa/Monrovia": {
+ "name": "Africa/Monrovia",
+ "lat": 6.3,
+ "long": -9.2167,
+ "countries": [
+ "LR"
+ ],
+ "comments": ""
+ },
+ "Europe/Vilnius": {
+ "name": "Europe/Vilnius",
+ "lat": 54.6833,
+ "long": 25.3167,
+ "countries": [
+ "LT"
+ ],
+ "comments": ""
+ },
+ "Europe/Luxembourg": {
+ "name": "Europe/Luxembourg",
+ "lat": 49.6,
+ "long": 6.15,
+ "countries": [
+ "LU"
+ ],
+ "comments": ""
+ },
+ "Europe/Riga": {
+ "name": "Europe/Riga",
+ "lat": 56.95,
+ "long": 24.1,
+ "countries": [
+ "LV"
+ ],
+ "comments": ""
+ },
+ "Africa/Tripoli": {
+ "name": "Africa/Tripoli",
+ "lat": 32.9,
+ "long": 13.1833,
+ "countries": [
+ "LY"
+ ],
+ "comments": ""
+ },
+ "Africa/Casablanca": {
+ "name": "Africa/Casablanca",
+ "lat": 33.65,
+ "long": -6.4167,
+ "countries": [
+ "MA"
+ ],
+ "comments": ""
+ },
+ "Europe/Monaco": {
+ "name": "Europe/Monaco",
+ "lat": 43.7,
+ "long": 7.3833,
+ "countries": [
+ "MC"
+ ],
+ "comments": ""
+ },
+ "Europe/Chisinau": {
+ "name": "Europe/Chisinau",
+ "lat": 47,
+ "long": 28.8333,
+ "countries": [
+ "MD"
+ ],
+ "comments": ""
+ },
+ "Pacific/Majuro": {
+ "name": "Pacific/Majuro",
+ "lat": 7.15,
+ "long": 171.2,
+ "countries": [
+ "MH"
+ ],
+ "comments": "Marshall Islands (most areas)"
+ },
+ "Pacific/Kwajalein": {
+ "name": "Pacific/Kwajalein",
+ "lat": 9.0833,
+ "long": 167.3333,
+ "countries": [
+ "MH"
+ ],
+ "comments": "Kwajalein"
+ },
+ "Asia/Yangon": {
+ "name": "Asia/Yangon",
+ "lat": 16.7833,
+ "long": 96.1667,
+ "countries": [
+ "MM"
+ ],
+ "comments": ""
+ },
+ "Asia/Ulaanbaatar": {
+ "name": "Asia/Ulaanbaatar",
+ "lat": 47.9167,
+ "long": 106.8833,
+ "countries": [
+ "MN"
+ ],
+ "comments": "Mongolia (most areas)"
+ },
+ "Asia/Hovd": {
+ "name": "Asia/Hovd",
+ "lat": 48.0167,
+ "long": 91.65,
+ "countries": [
+ "MN"
+ ],
+ "comments": "Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan"
+ },
+ "Asia/Choibalsan": {
+ "name": "Asia/Choibalsan",
+ "lat": 48.0667,
+ "long": 114.5,
+ "countries": [
+ "MN"
+ ],
+ "comments": "Dornod, Sükhbaatar"
+ },
+ "Asia/Macau": {
+ "name": "Asia/Macau",
+ "lat": 22.2333,
+ "long": 113.5833,
+ "countries": [
+ "MO"
+ ],
+ "comments": ""
+ },
+ "America/Martinique": {
+ "name": "America/Martinique",
+ "lat": 14.6,
+ "long": -60.9167,
+ "countries": [
+ "MQ"
+ ],
+ "comments": ""
+ },
+ "Europe/Malta": {
+ "name": "Europe/Malta",
+ "lat": 35.9,
+ "long": 14.5167,
+ "countries": [
+ "MT"
+ ],
+ "comments": ""
+ },
+ "Indian/Mauritius": {
+ "name": "Indian/Mauritius",
+ "lat": -19.8333,
+ "long": 57.5,
+ "countries": [
+ "MU"
+ ],
+ "comments": ""
+ },
+ "Indian/Maldives": {
+ "name": "Indian/Maldives",
+ "lat": 4.1667,
+ "long": 73.5,
+ "countries": [
+ "MV"
+ ],
+ "comments": ""
+ },
+ "America/Mexico_City": {
+ "name": "America/Mexico_City",
+ "lat": 19.4,
+ "long": -98.85,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Central Time"
+ },
+ "America/Cancun": {
+ "name": "America/Cancun",
+ "lat": 21.0833,
+ "long": -85.2333,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Eastern Standard Time - Quintana Roo"
+ },
+ "America/Merida": {
+ "name": "America/Merida",
+ "lat": 20.9667,
+ "long": -88.3833,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Central Time - Campeche, Yucatán"
+ },
+ "America/Monterrey": {
+ "name": "America/Monterrey",
+ "lat": 25.6667,
+ "long": -99.6833,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Central Time - Durango; Coahuila, Nuevo León, Tamaulipas (most areas)"
+ },
+ "America/Matamoros": {
+ "name": "America/Matamoros",
+ "lat": 25.8333,
+ "long": -96.5,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Central Time US - Coahuila, Nuevo León, Tamaulipas (US border)"
+ },
+ "America/Mazatlan": {
+ "name": "America/Mazatlan",
+ "lat": 23.2167,
+ "long": -105.5833,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Mountain Time - Baja California Sur, Nayarit, Sinaloa"
+ },
+ "America/Chihuahua": {
+ "name": "America/Chihuahua",
+ "lat": 28.6333,
+ "long": -105.9167,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Mountain Time - Chihuahua (most areas)"
+ },
+ "America/Ojinaga": {
+ "name": "America/Ojinaga",
+ "lat": 29.5667,
+ "long": -103.5833,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Mountain Time US - Chihuahua (US border)"
+ },
+ "America/Hermosillo": {
+ "name": "America/Hermosillo",
+ "lat": 29.0667,
+ "long": -109.0333,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Mountain Standard Time - Sonora"
+ },
+ "America/Tijuana": {
+ "name": "America/Tijuana",
+ "lat": 32.5333,
+ "long": -116.9833,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Pacific Time US - Baja California"
+ },
+ "America/Bahia_Banderas": {
+ "name": "America/Bahia_Banderas",
+ "lat": 20.8,
+ "long": -104.75,
+ "countries": [
+ "MX"
+ ],
+ "comments": "Central Time - Bahía de Banderas"
+ },
+ "Asia/Kuala_Lumpur": {
+ "name": "Asia/Kuala_Lumpur",
+ "lat": 3.1667,
+ "long": 101.7,
+ "countries": [
+ "MY"
+ ],
+ "comments": "Malaysia (peninsula)"
+ },
+ "Asia/Kuching": {
+ "name": "Asia/Kuching",
+ "lat": 1.55,
+ "long": 110.3333,
+ "countries": [
+ "MY"
+ ],
+ "comments": "Sabah, Sarawak"
+ },
+ "Africa/Maputo": {
+ "name": "Africa/Maputo",
+ "lat": -24.0333,
+ "long": 32.5833,
+ "countries": [
+ "MZ",
+ "BI",
+ "BW",
+ "CD",
+ "MW",
+ "RW",
+ "ZM",
+ "ZW"
+ ],
+ "comments": "Central Africa Time"
+ },
+ "Africa/Windhoek": {
+ "name": "Africa/Windhoek",
+ "lat": -21.4333,
+ "long": 17.1,
+ "countries": [
+ "NA"
+ ],
+ "comments": ""
+ },
+ "Pacific/Noumea": {
+ "name": "Pacific/Noumea",
+ "lat": -21.7333,
+ "long": 166.45,
+ "countries": [
+ "NC"
+ ],
+ "comments": ""
+ },
+ "Pacific/Norfolk": {
+ "name": "Pacific/Norfolk",
+ "lat": -28.95,
+ "long": 167.9667,
+ "countries": [
+ "NF"
+ ],
+ "comments": ""
+ },
+ "Africa/Lagos": {
+ "name": "Africa/Lagos",
+ "lat": 6.45,
+ "long": 3.4,
+ "countries": [
+ "NG",
+ "AO",
+ "BJ",
+ "CD",
+ "CF",
+ "CG",
+ "CM",
+ "GA",
+ "GQ",
+ "NE"
+ ],
+ "comments": "West Africa Time"
+ },
+ "America/Managua": {
+ "name": "America/Managua",
+ "lat": 12.15,
+ "long": -85.7167,
+ "countries": [
+ "NI"
+ ],
+ "comments": ""
+ },
+ "Europe/Amsterdam": {
+ "name": "Europe/Amsterdam",
+ "lat": 52.3667,
+ "long": 4.9,
+ "countries": [
+ "NL"
+ ],
+ "comments": ""
+ },
+ "Europe/Oslo": {
+ "name": "Europe/Oslo",
+ "lat": 59.9167,
+ "long": 10.75,
+ "countries": [
+ "NO",
+ "SJ"
+ ],
+ "comments": ""
+ },
+ "Asia/Kathmandu": {
+ "name": "Asia/Kathmandu",
+ "lat": 27.7167,
+ "long": 85.3167,
+ "countries": [
+ "NP"
+ ],
+ "comments": ""
+ },
+ "Pacific/Nauru": {
+ "name": "Pacific/Nauru",
+ "lat": 0.5167,
+ "long": 166.9167,
+ "countries": [
+ "NR"
+ ],
+ "comments": ""
+ },
+ "Pacific/Niue": {
+ "name": "Pacific/Niue",
+ "lat": -18.9833,
+ "long": -168.0833,
+ "countries": [
+ "NU"
+ ],
+ "comments": ""
+ },
+ "Pacific/Auckland": {
+ "name": "Pacific/Auckland",
+ "lat": -35.1333,
+ "long": 174.7667,
+ "countries": [
+ "NZ",
+ "AQ"
+ ],
+ "comments": "New Zealand time"
+ },
+ "Pacific/Chatham": {
+ "name": "Pacific/Chatham",
+ "lat": -42.05,
+ "long": -175.45,
+ "countries": [
+ "NZ"
+ ],
+ "comments": "Chatham Islands"
+ },
+ "America/Panama": {
+ "name": "America/Panama",
+ "lat": 8.9667,
+ "long": -78.4667,
+ "countries": [
+ "PA",
+ "KY"
+ ],
+ "comments": ""
+ },
+ "America/Lima": {
+ "name": "America/Lima",
+ "lat": -11.95,
+ "long": -76.95,
+ "countries": [
+ "PE"
+ ],
+ "comments": ""
+ },
+ "Pacific/Tahiti": {
+ "name": "Pacific/Tahiti",
+ "lat": -16.4667,
+ "long": -148.4333,
+ "countries": [
+ "PF"
+ ],
+ "comments": "Society Islands"
+ },
+ "Pacific/Marquesas": {
+ "name": "Pacific/Marquesas",
+ "lat": -9,
+ "long": -138.5,
+ "countries": [
+ "PF"
+ ],
+ "comments": "Marquesas Islands"
+ },
+ "Pacific/Gambier": {
+ "name": "Pacific/Gambier",
+ "lat": -22.8667,
+ "long": -133.05,
+ "countries": [
+ "PF"
+ ],
+ "comments": "Gambier Islands"
+ },
+ "Pacific/Port_Moresby": {
+ "name": "Pacific/Port_Moresby",
+ "lat": -8.5,
+ "long": 147.1667,
+ "countries": [
+ "PG"
+ ],
+ "comments": "Papua New Guinea (most areas)"
+ },
+ "Pacific/Bougainville": {
+ "name": "Pacific/Bougainville",
+ "lat": -5.7833,
+ "long": 155.5667,
+ "countries": [
+ "PG"
+ ],
+ "comments": "Bougainville"
+ },
+ "Asia/Manila": {
+ "name": "Asia/Manila",
+ "lat": 14.5833,
+ "long": 121,
+ "countries": [
+ "PH"
+ ],
+ "comments": ""
+ },
+ "Asia/Karachi": {
+ "name": "Asia/Karachi",
+ "lat": 24.8667,
+ "long": 67.05,
+ "countries": [
+ "PK"
+ ],
+ "comments": ""
+ },
+ "Europe/Warsaw": {
+ "name": "Europe/Warsaw",
+ "lat": 52.25,
+ "long": 21,
+ "countries": [
+ "PL"
+ ],
+ "comments": ""
+ },
+ "America/Miquelon": {
+ "name": "America/Miquelon",
+ "lat": 47.05,
+ "long": -55.6667,
+ "countries": [
+ "PM"
+ ],
+ "comments": ""
+ },
+ "Pacific/Pitcairn": {
+ "name": "Pacific/Pitcairn",
+ "lat": -24.9333,
+ "long": -129.9167,
+ "countries": [
+ "PN"
+ ],
+ "comments": ""
+ },
+ "America/Puerto_Rico": {
+ "name": "America/Puerto_Rico",
+ "lat": 18.4683,
+ "long": -65.8939,
+ "countries": [
+ "PR"
+ ],
+ "comments": ""
+ },
+ "Asia/Gaza": {
+ "name": "Asia/Gaza",
+ "lat": 31.5,
+ "long": 34.4667,
+ "countries": [
+ "PS"
+ ],
+ "comments": "Gaza Strip"
+ },
+ "Asia/Hebron": {
+ "name": "Asia/Hebron",
+ "lat": 31.5333,
+ "long": 35.095,
+ "countries": [
+ "PS"
+ ],
+ "comments": "West Bank"
+ },
+ "Europe/Lisbon": {
+ "name": "Europe/Lisbon",
+ "lat": 38.7167,
+ "long": -8.8667,
+ "countries": [
+ "PT"
+ ],
+ "comments": "Portugal (mainland)"
+ },
+ "Atlantic/Madeira": {
+ "name": "Atlantic/Madeira",
+ "lat": 32.6333,
+ "long": -15.1,
+ "countries": [
+ "PT"
+ ],
+ "comments": "Madeira Islands"
+ },
+ "Atlantic/Azores": {
+ "name": "Atlantic/Azores",
+ "lat": 37.7333,
+ "long": -24.3333,
+ "countries": [
+ "PT"
+ ],
+ "comments": "Azores"
+ },
+ "Pacific/Palau": {
+ "name": "Pacific/Palau",
+ "lat": 7.3333,
+ "long": 134.4833,
+ "countries": [
+ "PW"
+ ],
+ "comments": ""
+ },
+ "America/Asuncion": {
+ "name": "America/Asuncion",
+ "lat": -24.7333,
+ "long": -56.3333,
+ "countries": [
+ "PY"
+ ],
+ "comments": ""
+ },
+ "Asia/Qatar": {
+ "name": "Asia/Qatar",
+ "lat": 25.2833,
+ "long": 51.5333,
+ "countries": [
+ "QA",
+ "BH"
+ ],
+ "comments": ""
+ },
+ "Indian/Reunion": {
+ "name": "Indian/Reunion",
+ "lat": -19.1333,
+ "long": 55.4667,
+ "countries": [
+ "RE",
+ "TF"
+ ],
+ "comments": "Réunion, Crozet, Scattered Islands"
+ },
+ "Europe/Bucharest": {
+ "name": "Europe/Bucharest",
+ "lat": 44.4333,
+ "long": 26.1,
+ "countries": [
+ "RO"
+ ],
+ "comments": ""
+ },
+ "Europe/Belgrade": {
+ "name": "Europe/Belgrade",
+ "lat": 44.8333,
+ "long": 20.5,
+ "countries": [
+ "RS",
+ "BA",
+ "HR",
+ "ME",
+ "MK",
+ "SI"
+ ],
+ "comments": ""
+ },
+ "Europe/Kaliningrad": {
+ "name": "Europe/Kaliningrad",
+ "lat": 54.7167,
+ "long": 20.5,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK-01 - Kaliningrad"
+ },
+ "Europe/Moscow": {
+ "name": "Europe/Moscow",
+ "lat": 55.7558,
+ "long": 37.6178,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+00 - Moscow area"
+ },
+ "Europe/Simferopol": {
+ "name": "Europe/Simferopol",
+ "lat": 44.95,
+ "long": 34.1,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+00 - Crimea"
+ },
+ "Europe/Volgograd": {
+ "name": "Europe/Volgograd",
+ "lat": 48.7333,
+ "long": 44.4167,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+00 - Volgograd"
+ },
+ "Europe/Kirov": {
+ "name": "Europe/Kirov",
+ "lat": 58.6,
+ "long": 49.65,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+00 - Kirov"
+ },
+ "Europe/Astrakhan": {
+ "name": "Europe/Astrakhan",
+ "lat": 46.35,
+ "long": 48.05,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+01 - Astrakhan"
+ },
+ "Europe/Saratov": {
+ "name": "Europe/Saratov",
+ "lat": 51.5667,
+ "long": 46.0333,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+01 - Saratov"
+ },
+ "Europe/Ulyanovsk": {
+ "name": "Europe/Ulyanovsk",
+ "lat": 54.3333,
+ "long": 48.4,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+01 - Ulyanovsk"
+ },
+ "Europe/Samara": {
+ "name": "Europe/Samara",
+ "lat": 53.2,
+ "long": 50.15,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+01 - Samara, Udmurtia"
+ },
+ "Asia/Yekaterinburg": {
+ "name": "Asia/Yekaterinburg",
+ "lat": 56.85,
+ "long": 60.6,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+02 - Urals"
+ },
+ "Asia/Omsk": {
+ "name": "Asia/Omsk",
+ "lat": 55,
+ "long": 73.4,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+03 - Omsk"
+ },
+ "Asia/Novosibirsk": {
+ "name": "Asia/Novosibirsk",
+ "lat": 55.0333,
+ "long": 82.9167,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+04 - Novosibirsk"
+ },
+ "Asia/Barnaul": {
+ "name": "Asia/Barnaul",
+ "lat": 53.3667,
+ "long": 83.75,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+04 - Altai"
+ },
+ "Asia/Tomsk": {
+ "name": "Asia/Tomsk",
+ "lat": 56.5,
+ "long": 84.9667,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+04 - Tomsk"
+ },
+ "Asia/Novokuznetsk": {
+ "name": "Asia/Novokuznetsk",
+ "lat": 53.75,
+ "long": 87.1167,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+04 - Kemerovo"
+ },
+ "Asia/Krasnoyarsk": {
+ "name": "Asia/Krasnoyarsk",
+ "lat": 56.0167,
+ "long": 92.8333,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+04 - Krasnoyarsk area"
+ },
+ "Asia/Irkutsk": {
+ "name": "Asia/Irkutsk",
+ "lat": 52.2667,
+ "long": 104.3333,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+05 - Irkutsk, Buryatia"
+ },
+ "Asia/Chita": {
+ "name": "Asia/Chita",
+ "lat": 52.05,
+ "long": 113.4667,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+06 - Zabaykalsky"
+ },
+ "Asia/Yakutsk": {
+ "name": "Asia/Yakutsk",
+ "lat": 62,
+ "long": 129.6667,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+06 - Lena River"
+ },
+ "Asia/Khandyga": {
+ "name": "Asia/Khandyga",
+ "lat": 62.6564,
+ "long": 135.5539,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+06 - Tomponsky, Ust-Maysky"
+ },
+ "Asia/Vladivostok": {
+ "name": "Asia/Vladivostok",
+ "lat": 43.1667,
+ "long": 131.9333,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+07 - Amur River"
+ },
+ "Asia/Ust-Nera": {
+ "name": "Asia/Ust-Nera",
+ "lat": 64.5603,
+ "long": 143.2267,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+07 - Oymyakonsky"
+ },
+ "Asia/Magadan": {
+ "name": "Asia/Magadan",
+ "lat": 59.5667,
+ "long": 150.8,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+08 - Magadan"
+ },
+ "Asia/Sakhalin": {
+ "name": "Asia/Sakhalin",
+ "lat": 46.9667,
+ "long": 142.7,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+08 - Sakhalin Island"
+ },
+ "Asia/Srednekolymsk": {
+ "name": "Asia/Srednekolymsk",
+ "lat": 67.4667,
+ "long": 153.7167,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+08 - Sakha (E); North Kuril Is"
+ },
+ "Asia/Kamchatka": {
+ "name": "Asia/Kamchatka",
+ "lat": 53.0167,
+ "long": 158.65,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+09 - Kamchatka"
+ },
+ "Asia/Anadyr": {
+ "name": "Asia/Anadyr",
+ "lat": 64.75,
+ "long": 177.4833,
+ "countries": [
+ "RU"
+ ],
+ "comments": "MSK+09 - Bering Sea"
+ },
+ "Asia/Riyadh": {
+ "name": "Asia/Riyadh",
+ "lat": 24.6333,
+ "long": 46.7167,
+ "countries": [
+ "SA",
+ "KW",
+ "YE"
+ ],
+ "comments": ""
+ },
+ "Pacific/Guadalcanal": {
+ "name": "Pacific/Guadalcanal",
+ "lat": -8.4667,
+ "long": 160.2,
+ "countries": [
+ "SB"
+ ],
+ "comments": ""
+ },
+ "Indian/Mahe": {
+ "name": "Indian/Mahe",
+ "lat": -3.3333,
+ "long": 55.4667,
+ "countries": [
+ "SC"
+ ],
+ "comments": ""
+ },
+ "Africa/Khartoum": {
+ "name": "Africa/Khartoum",
+ "lat": 15.6,
+ "long": 32.5333,
+ "countries": [
+ "SD"
+ ],
+ "comments": ""
+ },
+ "Europe/Stockholm": {
+ "name": "Europe/Stockholm",
+ "lat": 59.3333,
+ "long": 18.05,
+ "countries": [
+ "SE"
+ ],
+ "comments": ""
+ },
+ "Asia/Singapore": {
+ "name": "Asia/Singapore",
+ "lat": 1.2833,
+ "long": 103.85,
+ "countries": [
+ "SG"
+ ],
+ "comments": ""
+ },
+ "America/Paramaribo": {
+ "name": "America/Paramaribo",
+ "lat": 5.8333,
+ "long": -54.8333,
+ "countries": [
+ "SR"
+ ],
+ "comments": ""
+ },
+ "Africa/Juba": {
+ "name": "Africa/Juba",
+ "lat": 4.85,
+ "long": 31.6167,
+ "countries": [
+ "SS"
+ ],
+ "comments": ""
+ },
+ "Africa/Sao_Tome": {
+ "name": "Africa/Sao_Tome",
+ "lat": 0.3333,
+ "long": 6.7333,
+ "countries": [
+ "ST"
+ ],
+ "comments": ""
+ },
+ "America/El_Salvador": {
+ "name": "America/El_Salvador",
+ "lat": 13.7,
+ "long": -88.8,
+ "countries": [
+ "SV"
+ ],
+ "comments": ""
+ },
+ "Asia/Damascus": {
+ "name": "Asia/Damascus",
+ "lat": 33.5,
+ "long": 36.3,
+ "countries": [
+ "SY"
+ ],
+ "comments": ""
+ },
+ "America/Grand_Turk": {
+ "name": "America/Grand_Turk",
+ "lat": 21.4667,
+ "long": -70.8667,
+ "countries": [
+ "TC"
+ ],
+ "comments": ""
+ },
+ "Africa/Ndjamena": {
+ "name": "Africa/Ndjamena",
+ "lat": 12.1167,
+ "long": 15.05,
+ "countries": [
+ "TD"
+ ],
+ "comments": ""
+ },
+ "Indian/Kerguelen": {
+ "name": "Indian/Kerguelen",
+ "lat": -48.6472,
+ "long": 70.2175,
+ "countries": [
+ "TF"
+ ],
+ "comments": "Kerguelen, St Paul Island, Amsterdam Island"
+ },
+ "Asia/Bangkok": {
+ "name": "Asia/Bangkok",
+ "lat": 13.75,
+ "long": 100.5167,
+ "countries": [
+ "TH",
+ "KH",
+ "LA",
+ "VN"
+ ],
+ "comments": "Indochina (most areas)"
+ },
+ "Asia/Dushanbe": {
+ "name": "Asia/Dushanbe",
+ "lat": 38.5833,
+ "long": 68.8,
+ "countries": [
+ "TJ"
+ ],
+ "comments": ""
+ },
+ "Pacific/Fakaofo": {
+ "name": "Pacific/Fakaofo",
+ "lat": -8.6333,
+ "long": -170.7667,
+ "countries": [
+ "TK"
+ ],
+ "comments": ""
+ },
+ "Asia/Dili": {
+ "name": "Asia/Dili",
+ "lat": -7.45,
+ "long": 125.5833,
+ "countries": [
+ "TL"
+ ],
+ "comments": ""
+ },
+ "Asia/Ashgabat": {
+ "name": "Asia/Ashgabat",
+ "lat": 37.95,
+ "long": 58.3833,
+ "countries": [
+ "TM"
+ ],
+ "comments": ""
+ },
+ "Africa/Tunis": {
+ "name": "Africa/Tunis",
+ "lat": 36.8,
+ "long": 10.1833,
+ "countries": [
+ "TN"
+ ],
+ "comments": ""
+ },
+ "Pacific/Tongatapu": {
+ "name": "Pacific/Tongatapu",
+ "lat": -20.8333,
+ "long": -174.8333,
+ "countries": [
+ "TO"
+ ],
+ "comments": ""
+ },
+ "Europe/Istanbul": {
+ "name": "Europe/Istanbul",
+ "lat": 41.0167,
+ "long": 28.9667,
+ "countries": [
+ "TR"
+ ],
+ "comments": ""
+ },
+ "America/Port_of_Spain": {
+ "name": "America/Port_of_Spain",
+ "lat": 10.65,
+ "long": -60.4833,
+ "countries": [
+ "TT",
+ "AG",
+ "AI",
+ "BL",
+ "DM",
+ "GD",
+ "GP",
+ "KN",
+ "LC",
+ "MF",
+ "MS",
+ "VC",
+ "VG",
+ "VI"
+ ],
+ "comments": ""
+ },
+ "Pacific/Funafuti": {
+ "name": "Pacific/Funafuti",
+ "lat": -7.4833,
+ "long": 179.2167,
+ "countries": [
+ "TV"
+ ],
+ "comments": ""
+ },
+ "Asia/Taipei": {
+ "name": "Asia/Taipei",
+ "lat": 25.05,
+ "long": 121.5,
+ "countries": [
+ "TW"
+ ],
+ "comments": ""
+ },
+ "Europe/Kiev": {
+ "name": "Europe/Kiev",
+ "lat": 50.4333,
+ "long": 30.5167,
+ "countries": [
+ "UA"
+ ],
+ "comments": "Ukraine (most areas)"
+ },
+ "Europe/Uzhgorod": {
+ "name": "Europe/Uzhgorod",
+ "lat": 48.6167,
+ "long": 22.3,
+ "countries": [
+ "UA"
+ ],
+ "comments": "Ruthenia"
+ },
+ "Europe/Zaporozhye": {
+ "name": "Europe/Zaporozhye",
+ "lat": 47.8333,
+ "long": 35.1667,
+ "countries": [
+ "UA"
+ ],
+ "comments": "Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)"
+ },
+ "Pacific/Wake": {
+ "name": "Pacific/Wake",
+ "lat": 19.2833,
+ "long": 166.6167,
+ "countries": [
+ "UM"
+ ],
+ "comments": "Wake Island"
+ },
+ "America/New_York": {
+ "name": "America/New_York",
+ "lat": 40.7142,
+ "long": -73.9936,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern (most areas)"
+ },
+ "America/Detroit": {
+ "name": "America/Detroit",
+ "lat": 42.3314,
+ "long": -82.9542,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - MI (most areas)"
+ },
+ "America/Kentucky/Louisville": {
+ "name": "America/Kentucky/Louisville",
+ "lat": 38.2542,
+ "long": -84.2406,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - KY (Louisville area)"
+ },
+ "America/Kentucky/Monticello": {
+ "name": "America/Kentucky/Monticello",
+ "lat": 36.8297,
+ "long": -83.1508,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - KY (Wayne)"
+ },
+ "America/Indiana/Indianapolis": {
+ "name": "America/Indiana/Indianapolis",
+ "lat": 39.7683,
+ "long": -85.8419,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - IN (most areas)"
+ },
+ "America/Indiana/Vincennes": {
+ "name": "America/Indiana/Vincennes",
+ "lat": 38.6772,
+ "long": -86.4714,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - IN (Da, Du, K, Mn)"
+ },
+ "America/Indiana/Winamac": {
+ "name": "America/Indiana/Winamac",
+ "lat": 41.0514,
+ "long": -85.3969,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - IN (Pulaski)"
+ },
+ "America/Indiana/Marengo": {
+ "name": "America/Indiana/Marengo",
+ "lat": 38.3756,
+ "long": -85.6553,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - IN (Crawford)"
+ },
+ "America/Indiana/Petersburg": {
+ "name": "America/Indiana/Petersburg",
+ "lat": 38.4919,
+ "long": -86.7214,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - IN (Pike)"
+ },
+ "America/Indiana/Vevay": {
+ "name": "America/Indiana/Vevay",
+ "lat": 38.7478,
+ "long": -84.9328,
+ "countries": [
+ "US"
+ ],
+ "comments": "Eastern - IN (Switzerland)"
+ },
+ "America/Chicago": {
+ "name": "America/Chicago",
+ "lat": 41.85,
+ "long": -86.35,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central (most areas)"
+ },
+ "America/Indiana/Tell_City": {
+ "name": "America/Indiana/Tell_City",
+ "lat": 37.9531,
+ "long": -85.2386,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central - IN (Perry)"
+ },
+ "America/Indiana/Knox": {
+ "name": "America/Indiana/Knox",
+ "lat": 41.2958,
+ "long": -85.375,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central - IN (Starke)"
+ },
+ "America/Menominee": {
+ "name": "America/Menominee",
+ "lat": 45.1078,
+ "long": -86.3858,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central - MI (Wisconsin border)"
+ },
+ "America/North_Dakota/Center": {
+ "name": "America/North_Dakota/Center",
+ "lat": 47.1164,
+ "long": -100.7008,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central - ND (Oliver)"
+ },
+ "America/North_Dakota/New_Salem": {
+ "name": "America/North_Dakota/New_Salem",
+ "lat": 46.845,
+ "long": -100.5892,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central - ND (Morton rural)"
+ },
+ "America/North_Dakota/Beulah": {
+ "name": "America/North_Dakota/Beulah",
+ "lat": 47.2642,
+ "long": -100.2222,
+ "countries": [
+ "US"
+ ],
+ "comments": "Central - ND (Mercer)"
+ },
+ "America/Denver": {
+ "name": "America/Denver",
+ "lat": 39.7392,
+ "long": -103.0158,
+ "countries": [
+ "US"
+ ],
+ "comments": "Mountain (most areas)"
+ },
+ "America/Boise": {
+ "name": "America/Boise",
+ "lat": 43.6136,
+ "long": -115.7975,
+ "countries": [
+ "US"
+ ],
+ "comments": "Mountain - ID (south); OR (east)"
+ },
+ "America/Phoenix": {
+ "name": "America/Phoenix",
+ "lat": 33.4483,
+ "long": -111.9267,
+ "countries": [
+ "US"
+ ],
+ "comments": "MST - Arizona (except Navajo)"
+ },
+ "America/Los_Angeles": {
+ "name": "America/Los_Angeles",
+ "lat": 34.0522,
+ "long": -117.7572,
+ "countries": [
+ "US"
+ ],
+ "comments": "Pacific"
+ },
+ "America/Anchorage": {
+ "name": "America/Anchorage",
+ "lat": 61.2181,
+ "long": -148.0997,
+ "countries": [
+ "US"
+ ],
+ "comments": "Alaska (most areas)"
+ },
+ "America/Juneau": {
+ "name": "America/Juneau",
+ "lat": 58.3019,
+ "long": -133.5803,
+ "countries": [
+ "US"
+ ],
+ "comments": "Alaska - Juneau area"
+ },
+ "America/Sitka": {
+ "name": "America/Sitka",
+ "lat": 57.1764,
+ "long": -134.6981,
+ "countries": [
+ "US"
+ ],
+ "comments": "Alaska - Sitka area"
+ },
+ "America/Metlakatla": {
+ "name": "America/Metlakatla",
+ "lat": 55.1269,
+ "long": -130.4236,
+ "countries": [
+ "US"
+ ],
+ "comments": "Alaska - Annette Island"
+ },
+ "America/Yakutat": {
+ "name": "America/Yakutat",
+ "lat": 59.5469,
+ "long": -138.2728,
+ "countries": [
+ "US"
+ ],
+ "comments": "Alaska - Yakutat"
+ },
+ "America/Nome": {
+ "name": "America/Nome",
+ "lat": 64.5011,
+ "long": -164.5936,
+ "countries": [
+ "US"
+ ],
+ "comments": "Alaska (west)"
+ },
+ "America/Adak": {
+ "name": "America/Adak",
+ "lat": 51.88,
+ "long": -175.3419,
+ "countries": [
+ "US"
+ ],
+ "comments": "Aleutian Islands"
+ },
+ "Pacific/Honolulu": {
+ "name": "Pacific/Honolulu",
+ "lat": 21.3069,
+ "long": -156.1417,
+ "countries": [
+ "US",
+ "UM"
+ ],
+ "comments": "Hawaii"
+ },
+ "America/Montevideo": {
+ "name": "America/Montevideo",
+ "lat": -33.0908,
+ "long": -55.7875,
+ "countries": [
+ "UY"
+ ],
+ "comments": ""
+ },
+ "Asia/Samarkand": {
+ "name": "Asia/Samarkand",
+ "lat": 39.6667,
+ "long": 66.8,
+ "countries": [
+ "UZ"
+ ],
+ "comments": "Uzbekistan (west)"
+ },
+ "Asia/Tashkent": {
+ "name": "Asia/Tashkent",
+ "lat": 41.3333,
+ "long": 69.3,
+ "countries": [
+ "UZ"
+ ],
+ "comments": "Uzbekistan (east)"
+ },
+ "America/Caracas": {
+ "name": "America/Caracas",
+ "lat": 10.5,
+ "long": -65.0667,
+ "countries": [
+ "VE"
+ ],
+ "comments": ""
+ },
+ "Asia/Ho_Chi_Minh": {
+ "name": "Asia/Ho_Chi_Minh",
+ "lat": 10.75,
+ "long": 106.6667,
+ "countries": [
+ "VN"
+ ],
+ "comments": "Vietnam (south)"
+ },
+ "Pacific/Efate": {
+ "name": "Pacific/Efate",
+ "lat": -16.3333,
+ "long": 168.4167,
+ "countries": [
+ "VU"
+ ],
+ "comments": ""
+ },
+ "Pacific/Wallis": {
+ "name": "Pacific/Wallis",
+ "lat": -12.7,
+ "long": -175.8333,
+ "countries": [
+ "WF"
+ ],
+ "comments": ""
+ },
+ "Pacific/Apia": {
+ "name": "Pacific/Apia",
+ "lat": -12.1667,
+ "long": -170.2667,
+ "countries": [
+ "WS"
+ ],
+ "comments": ""
+ },
+ "Africa/Johannesburg": {
+ "name": "Africa/Johannesburg",
+ "lat": -25.75,
+ "long": 28,
+ "countries": [
+ "ZA",
+ "LS",
+ "SZ"
+ ],
+ "comments": ""
+ }
+ }
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/packed/latest.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/packed/latest.json
new file mode 100644
index 00000000000..2c7aed01678
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/packed/latest.json
@@ -0,0 +1,599 @@
+{
+ "version": "2018e",
+ "zones": [
+ "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5",
+ "Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5",
+ "Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5",
+ "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5",
+ "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6",
+ "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4",
+ "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5",
+ "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6",
+ "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5",
+ "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3",
+ "Africa/El_Aaiun|LMT -01 WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4",
+ "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5",
+ "Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0",
+ "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5",
+ "Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5",
+ "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5",
+ "Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|012|-2le00 4i6N0",
+ "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5",
+ "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5",
+ "Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4",
+ "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326",
+ "America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4",
+ "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3",
+ "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4",
+ "America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0",
+ "America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+ "America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0",
+ "America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0",
+ "America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+ "America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0",
+ "America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0",
+ "America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0",
+ "America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0",
+ "America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0",
+ "America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0",
+ "America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0",
+ "America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4",
+ "America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5",
+ "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2",
+ "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3",
+ "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5",
+ "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4",
+ "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5",
+ "America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3",
+ "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2",
+ "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2",
+ "America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5",
+ "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4",
+ "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2",
+ "America/Campo_Grande|LMT -04 -03|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|77e4",
+ "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4",
+ "America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5",
+ "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3",
+ "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5",
+ "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5",
+ "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4",
+ "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5",
+ "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2",
+ "America/Cuiaba|LMT -04 -03|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|54e4",
+ "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8",
+ "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3",
+ "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2",
+ "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5",
+ "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|012342525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 XQp0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5",
+ "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5",
+ "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3",
+ "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5",
+ "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5",
+ "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2",
+ "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5",
+ "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",
+ "America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3",
+ "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2",
+ "America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|01212121212121212121212121212121212121212121212121212121212121212121212121232121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2",
+ "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5",
+ "America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5",
+ "America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4",
+ "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4",
+ "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5",
+ "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4",
+ "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2",
+ "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2",
+ "America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4",
+ "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3",
+ "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5",
+ "America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6",
+ "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6",
+ "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4",
+ "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5",
+ "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5",
+ "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4",
+ "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4",
+ "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4",
+ "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2",
+ "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5",
+ "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",
+ "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6",
+ "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2",
+ "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3",
+ "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5",
+ "America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5",
+ "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5",
+ "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4",
+ "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6",
+ "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2",
+ "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2",
+ "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2",
+ "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",
+ "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2",
+ "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4",
+ "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5",
+ "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",
+ "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4",
+ "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4",
+ "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5",
+ "America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0",
+ "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842",
+ "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2",
+ "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5",
+ "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4",
+ "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229",
+ "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4",
+ "America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5",
+ "America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5",
+ "America/Sao_Paulo|LMT -03 -02|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0 1HB0 FX0 1HB0 IL0 1HB0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0 IL0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1HB0 FX0 1Kp0 FX0 1HB0 IL0 1EN0 FX0 1HB0 FX0 1HB0 IL0 1EN0|20e6",
+ "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452",
+ "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2",
+ "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",
+ "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3",
+ "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5",
+ "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656",
+ "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4",
+ "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5",
+ "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3",
+ "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4",
+ "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642",
+ "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3",
+ "Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10",
+ "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70",
+ "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80",
+ "Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1",
+ "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60",
+ "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5",
+ "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40",
+ "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130",
+ "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20",
+ "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40",
+ "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25",
+ "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4",
+ "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5",
+ "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5",
+ "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5",
+ "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3",
+ "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4",
+ "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4",
+ "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4",
+ "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0",
+ "Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5",
+ "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4",
+ "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5",
+ "Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6",
+ "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+ "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5",
+ "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4",
+ "Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4",
+ "Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6",
+ "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4",
+ "Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3",
+ "Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6",
+ "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5",
+ "Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6",
+ "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5",
+ "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4",
+ "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5",
+ "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4",
+ "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|18e5",
+ "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1qL0|25e4",
+ "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5",
+ "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5",
+ "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3",
+ "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",
+ "Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6",
+ "Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6",
+ "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4",
+ "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4",
+ "Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5",
+ "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4",
+ "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6",
+ "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5",
+ "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5",
+ "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2",
+ "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5",
+ "Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5",
+ "Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4",
+ "Asia/Macau|LMT CST CDT|-7y.k -80 -90|012121212121212121212121212121212121212121|-2le80 1XO3u 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0|57e4",
+ "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3",
+ "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5",
+ "Asia/Manila|+08 +09|-80 -90|010101010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6",
+ "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4",
+ "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4",
+ "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5",
+ "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5",
+ "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4",
+ "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4",
+ "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BAu|29e5",
+ "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4",
+ "Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5",
+ "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4",
+ "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4",
+ "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -9u -a0|0123141414141414135353|-2um8r.Q 97XV.Q 1m1zu kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6",
+ "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2",
+ "Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5",
+ "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5",
+ "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5",
+ "Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6",
+ "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3",
+ "Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rb0 1ld0 14n0 1zd0 On0 1zd0 On0|38e6",
+ "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5",
+ "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5",
+ "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2",
+ "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4",
+ "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4",
+ "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5",
+ "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5",
+ "Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4",
+ "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3",
+ "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4",
+ "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4",
+ "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3",
+ "Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4",
+ "Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4",
+ "Atlantic/South_Georgia|-02|20|0||30",
+ "Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2",
+ "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5",
+ "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5",
+ "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5",
+ "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3",
+ "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746",
+ "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4",
+ "Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368",
+ "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4",
+ "Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347",
+ "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10",
+ "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5",
+ "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5",
+ "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2",
+ "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "EST|EST|50|0|",
+ "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "Etc/GMT-0|GMT|0|0|",
+ "Etc/GMT-1|+01|-10|0|",
+ "Pacific/Port_Moresby|+10|-a0|0||25e4",
+ "Pacific/Pohnpei|+11|-b0|0||34e3",
+ "Pacific/Tarawa|+12|-c0|0||29e3",
+ "Etc/GMT-13|+13|-d0|0|",
+ "Etc/GMT-14|+14|-e0|0|",
+ "Etc/GMT-2|+02|-20|0|",
+ "Etc/GMT-3|+03|-30|0|",
+ "Etc/GMT-4|+04|-40|0|",
+ "Etc/GMT-5|+05|-50|0|",
+ "Etc/GMT-6|+06|-60|0|",
+ "Indian/Christmas|+07|-70|0||21e2",
+ "Etc/GMT-8|+08|-80|0|",
+ "Pacific/Palau|+09|-90|0||21e3",
+ "Etc/GMT+1|-01|10|0|",
+ "Etc/GMT+10|-10|a0|0|",
+ "Etc/GMT+11|-11|b0|0|",
+ "Etc/GMT+12|-12|c0|0|",
+ "Etc/GMT+3|-03|30|0|",
+ "Etc/GMT+4|-04|40|0|",
+ "Etc/GMT+5|-05|50|0|",
+ "Etc/GMT+6|-06|60|0|",
+ "Etc/GMT+7|-07|70|0|",
+ "Etc/GMT+8|-08|80|0|",
+ "Etc/GMT+9|-09|90|0|",
+ "Etc/UCT|UCT|0|0|",
+ "Etc/UTC|UTC|0|0|",
+ "Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5",
+ "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3",
+ "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+ "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5",
+ "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6",
+ "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5",
+ "Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5",
+ "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5",
+ "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5",
+ "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5",
+ "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4",
+ "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4",
+ "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3",
+ "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4",
+ "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5",
+ "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4",
+ "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5",
+ "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4",
+ "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5",
+ "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4",
+ "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5",
+ "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3",
+ "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6",
+ "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6",
+ "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4",
+ "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5",
+ "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5",
+ "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810",
+ "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4",
+ "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5",
+ "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5",
+ "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4",
+ "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4",
+ "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0",
+ "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4",
+ "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5",
+ "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4",
+ "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5",
+ "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5",
+ "Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4",
+ "HST|HST|a0|0|",
+ "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2",
+ "Indian/Cocos|+0630|-6u|0||596",
+ "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130",
+ "Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3",
+ "Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4",
+ "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4",
+ "Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4",
+ "Pacific/Kwajalein|+11 -12 +12|-b0 c0 -c0|012|-AX0 W9X0|14e3",
+ "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00",
+ "MST|MST|70|0|",
+ "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600",
+ "Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3",
+ "Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4",
+ "Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3",
+ "Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1",
+ "Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483",
+ "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0|88e4",
+ "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3",
+ "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125",
+ "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4",
+ "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4",
+ "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4",
+ "Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2",
+ "Pacific/Kosrae|+11 +12|-b0 -c0|010|-AX0 1bdz0|66e2",
+ "Pacific/Majuro|+11 +12|-b0 -c0|01|-AX0|28e3",
+ "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2",
+ "Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2",
+ "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3",
+ "Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2",
+ "Pacific/Norfolk|+1112 +1130 +1230 +11|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4",
+ "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3",
+ "Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56",
+ "Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3",
+ "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4",
+ "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3",
+ "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0",
+ "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00"
+ ],
+ "links": [
+ "Africa/Abidjan|Africa/Bamako",
+ "Africa/Abidjan|Africa/Banjul",
+ "Africa/Abidjan|Africa/Conakry",
+ "Africa/Abidjan|Africa/Dakar",
+ "Africa/Abidjan|Africa/Freetown",
+ "Africa/Abidjan|Africa/Lome",
+ "Africa/Abidjan|Africa/Nouakchott",
+ "Africa/Abidjan|Africa/Ouagadougou",
+ "Africa/Abidjan|Africa/Timbuktu",
+ "Africa/Abidjan|Atlantic/St_Helena",
+ "Africa/Cairo|Egypt",
+ "Africa/Johannesburg|Africa/Maseru",
+ "Africa/Johannesburg|Africa/Mbabane",
+ "Africa/Lagos|Africa/Bangui",
+ "Africa/Lagos|Africa/Brazzaville",
+ "Africa/Lagos|Africa/Douala",
+ "Africa/Lagos|Africa/Kinshasa",
+ "Africa/Lagos|Africa/Libreville",
+ "Africa/Lagos|Africa/Luanda",
+ "Africa/Lagos|Africa/Malabo",
+ "Africa/Lagos|Africa/Niamey",
+ "Africa/Lagos|Africa/Porto-Novo",
+ "Africa/Maputo|Africa/Blantyre",
+ "Africa/Maputo|Africa/Bujumbura",
+ "Africa/Maputo|Africa/Gaborone",
+ "Africa/Maputo|Africa/Harare",
+ "Africa/Maputo|Africa/Kigali",
+ "Africa/Maputo|Africa/Lubumbashi",
+ "Africa/Maputo|Africa/Lusaka",
+ "Africa/Nairobi|Africa/Addis_Ababa",
+ "Africa/Nairobi|Africa/Asmara",
+ "Africa/Nairobi|Africa/Asmera",
+ "Africa/Nairobi|Africa/Dar_es_Salaam",
+ "Africa/Nairobi|Africa/Djibouti",
+ "Africa/Nairobi|Africa/Kampala",
+ "Africa/Nairobi|Africa/Mogadishu",
+ "Africa/Nairobi|Indian/Antananarivo",
+ "Africa/Nairobi|Indian/Comoro",
+ "Africa/Nairobi|Indian/Mayotte",
+ "Africa/Tripoli|Libya",
+ "America/Adak|America/Atka",
+ "America/Adak|US/Aleutian",
+ "America/Anchorage|US/Alaska",
+ "America/Argentina/Buenos_Aires|America/Buenos_Aires",
+ "America/Argentina/Catamarca|America/Argentina/ComodRivadavia",
+ "America/Argentina/Catamarca|America/Catamarca",
+ "America/Argentina/Cordoba|America/Cordoba",
+ "America/Argentina/Cordoba|America/Rosario",
+ "America/Argentina/Jujuy|America/Jujuy",
+ "America/Argentina/Mendoza|America/Mendoza",
+ "America/Atikokan|America/Coral_Harbour",
+ "America/Chicago|US/Central",
+ "America/Curacao|America/Aruba",
+ "America/Curacao|America/Kralendijk",
+ "America/Curacao|America/Lower_Princes",
+ "America/Denver|America/Shiprock",
+ "America/Denver|Navajo",
+ "America/Denver|US/Mountain",
+ "America/Detroit|US/Michigan",
+ "America/Edmonton|Canada/Mountain",
+ "America/Fort_Wayne|America/Indiana/Indianapolis",
+ "America/Fort_Wayne|America/Indianapolis",
+ "America/Fort_Wayne|US/East-Indiana",
+ "America/Halifax|Canada/Atlantic",
+ "America/Havana|Cuba",
+ "America/Indiana/Knox|America/Knox_IN",
+ "America/Indiana/Knox|US/Indiana-Starke",
+ "America/Jamaica|Jamaica",
+ "America/Kentucky/Louisville|America/Louisville",
+ "America/Los_Angeles|US/Pacific",
+ "America/Los_Angeles|US/Pacific-New",
+ "America/Manaus|Brazil/West",
+ "America/Mazatlan|Mexico/BajaSur",
+ "America/Mexico_City|Mexico/General",
+ "America/New_York|US/Eastern",
+ "America/Noronha|Brazil/DeNoronha",
+ "America/Panama|America/Cayman",
+ "America/Phoenix|US/Arizona",
+ "America/Port_of_Spain|America/Anguilla",
+ "America/Port_of_Spain|America/Antigua",
+ "America/Port_of_Spain|America/Dominica",
+ "America/Port_of_Spain|America/Grenada",
+ "America/Port_of_Spain|America/Guadeloupe",
+ "America/Port_of_Spain|America/Marigot",
+ "America/Port_of_Spain|America/Montserrat",
+ "America/Port_of_Spain|America/St_Barthelemy",
+ "America/Port_of_Spain|America/St_Kitts",
+ "America/Port_of_Spain|America/St_Lucia",
+ "America/Port_of_Spain|America/St_Thomas",
+ "America/Port_of_Spain|America/St_Vincent",
+ "America/Port_of_Spain|America/Tortola",
+ "America/Port_of_Spain|America/Virgin",
+ "America/Regina|Canada/Saskatchewan",
+ "America/Rio_Branco|America/Porto_Acre",
+ "America/Rio_Branco|Brazil/Acre",
+ "America/Santiago|Chile/Continental",
+ "America/Sao_Paulo|Brazil/East",
+ "America/St_Johns|Canada/Newfoundland",
+ "America/Tijuana|America/Ensenada",
+ "America/Tijuana|America/Santa_Isabel",
+ "America/Tijuana|Mexico/BajaNorte",
+ "America/Toronto|America/Montreal",
+ "America/Toronto|Canada/Eastern",
+ "America/Vancouver|Canada/Pacific",
+ "America/Whitehorse|Canada/Yukon",
+ "America/Winnipeg|Canada/Central",
+ "Asia/Ashgabat|Asia/Ashkhabad",
+ "Asia/Bangkok|Asia/Phnom_Penh",
+ "Asia/Bangkok|Asia/Vientiane",
+ "Asia/Dhaka|Asia/Dacca",
+ "Asia/Dubai|Asia/Muscat",
+ "Asia/Ho_Chi_Minh|Asia/Saigon",
+ "Asia/Hong_Kong|Hongkong",
+ "Asia/Jerusalem|Asia/Tel_Aviv",
+ "Asia/Jerusalem|Israel",
+ "Asia/Kathmandu|Asia/Katmandu",
+ "Asia/Kolkata|Asia/Calcutta",
+ "Asia/Kuala_Lumpur|Asia/Singapore",
+ "Asia/Kuala_Lumpur|Singapore",
+ "Asia/Macau|Asia/Macao",
+ "Asia/Makassar|Asia/Ujung_Pandang",
+ "Asia/Nicosia|Europe/Nicosia",
+ "Asia/Qatar|Asia/Bahrain",
+ "Asia/Rangoon|Asia/Yangon",
+ "Asia/Riyadh|Asia/Aden",
+ "Asia/Riyadh|Asia/Kuwait",
+ "Asia/Seoul|ROK",
+ "Asia/Shanghai|Asia/Chongqing",
+ "Asia/Shanghai|Asia/Chungking",
+ "Asia/Shanghai|Asia/Harbin",
+ "Asia/Shanghai|PRC",
+ "Asia/Taipei|ROC",
+ "Asia/Tehran|Iran",
+ "Asia/Thimphu|Asia/Thimbu",
+ "Asia/Tokyo|Japan",
+ "Asia/Ulaanbaatar|Asia/Ulan_Bator",
+ "Asia/Urumqi|Asia/Kashgar",
+ "Atlantic/Faroe|Atlantic/Faeroe",
+ "Atlantic/Reykjavik|Iceland",
+ "Atlantic/South_Georgia|Etc/GMT+2",
+ "Australia/Adelaide|Australia/South",
+ "Australia/Brisbane|Australia/Queensland",
+ "Australia/Broken_Hill|Australia/Yancowinna",
+ "Australia/Darwin|Australia/North",
+ "Australia/Hobart|Australia/Tasmania",
+ "Australia/Lord_Howe|Australia/LHI",
+ "Australia/Melbourne|Australia/Victoria",
+ "Australia/Perth|Australia/West",
+ "Australia/Sydney|Australia/ACT",
+ "Australia/Sydney|Australia/Canberra",
+ "Australia/Sydney|Australia/NSW",
+ "Etc/GMT-0|Etc/GMT",
+ "Etc/GMT-0|Etc/GMT+0",
+ "Etc/GMT-0|Etc/GMT0",
+ "Etc/GMT-0|Etc/Greenwich",
+ "Etc/GMT-0|GMT",
+ "Etc/GMT-0|GMT+0",
+ "Etc/GMT-0|GMT-0",
+ "Etc/GMT-0|GMT0",
+ "Etc/GMT-0|Greenwich",
+ "Etc/UCT|UCT",
+ "Etc/UTC|Etc/Universal",
+ "Etc/UTC|Etc/Zulu",
+ "Etc/UTC|UTC",
+ "Etc/UTC|Universal",
+ "Etc/UTC|Zulu",
+ "Europe/Belgrade|Europe/Ljubljana",
+ "Europe/Belgrade|Europe/Podgorica",
+ "Europe/Belgrade|Europe/Sarajevo",
+ "Europe/Belgrade|Europe/Skopje",
+ "Europe/Belgrade|Europe/Zagreb",
+ "Europe/Chisinau|Europe/Tiraspol",
+ "Europe/Dublin|Eire",
+ "Europe/Helsinki|Europe/Mariehamn",
+ "Europe/Istanbul|Asia/Istanbul",
+ "Europe/Istanbul|Turkey",
+ "Europe/Lisbon|Portugal",
+ "Europe/London|Europe/Belfast",
+ "Europe/London|Europe/Guernsey",
+ "Europe/London|Europe/Isle_of_Man",
+ "Europe/London|Europe/Jersey",
+ "Europe/London|GB",
+ "Europe/London|GB-Eire",
+ "Europe/Moscow|W-SU",
+ "Europe/Oslo|Arctic/Longyearbyen",
+ "Europe/Oslo|Atlantic/Jan_Mayen",
+ "Europe/Prague|Europe/Bratislava",
+ "Europe/Rome|Europe/San_Marino",
+ "Europe/Rome|Europe/Vatican",
+ "Europe/Warsaw|Poland",
+ "Europe/Zurich|Europe/Busingen",
+ "Europe/Zurich|Europe/Vaduz",
+ "Indian/Christmas|Etc/GMT-7",
+ "Pacific/Auckland|Antarctica/McMurdo",
+ "Pacific/Auckland|Antarctica/South_Pole",
+ "Pacific/Auckland|NZ",
+ "Pacific/Chatham|NZ-CHAT",
+ "Pacific/Easter|Chile/EasterIsland",
+ "Pacific/Guam|Pacific/Saipan",
+ "Pacific/Honolulu|Pacific/Johnston",
+ "Pacific/Honolulu|US/Hawaii",
+ "Pacific/Kwajalein|Kwajalein",
+ "Pacific/Pago_Pago|Pacific/Midway",
+ "Pacific/Pago_Pago|Pacific/Samoa",
+ "Pacific/Pago_Pago|US/Samoa",
+ "Pacific/Palau|Etc/GMT-9",
+ "Pacific/Pohnpei|Etc/GMT-11",
+ "Pacific/Pohnpei|Pacific/Ponape",
+ "Pacific/Port_Moresby|Etc/GMT-10",
+ "Pacific/Port_Moresby|Pacific/Chuuk",
+ "Pacific/Port_Moresby|Pacific/Truk",
+ "Pacific/Port_Moresby|Pacific/Yap",
+ "Pacific/Tarawa|Etc/GMT-12",
+ "Pacific/Tarawa|Pacific/Funafuti",
+ "Pacific/Tarawa|Pacific/Wake",
+ "Pacific/Tarawa|Pacific/Wallis"
+ ]
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/unpacked/latest.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/unpacked/latest.json
new file mode 100644
index 00000000000..527a634a7b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/data/unpacked/latest.json
@@ -0,0 +1,125209 @@
+{
+ "version": "2018e",
+ "zones": [
+ {
+ "name": "Africa/Abidjan",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 4800000
+ },
+ {
+ "name": "Africa/Accra",
+ "abbrs": [
+ "LMT",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT",
+ "+0020",
+ "GMT"
+ ],
+ "untils": [
+ -1640995148000,
+ -1556841600000,
+ -1546388400000,
+ -1525305600000,
+ -1514852400000,
+ -1493769600000,
+ -1483316400000,
+ -1462233600000,
+ -1451780400000,
+ -1430611200000,
+ -1420158000000,
+ -1399075200000,
+ -1388622000000,
+ -1367539200000,
+ -1357086000000,
+ -1336003200000,
+ -1325550000000,
+ -1304380800000,
+ -1293927600000,
+ -1272844800000,
+ -1262391600000,
+ -1241308800000,
+ -1230855600000,
+ -1209772800000,
+ -1199319600000,
+ -1178150400000,
+ -1167697200000,
+ -1146614400000,
+ -1136161200000,
+ -1115078400000,
+ -1104625200000,
+ -1083542400000,
+ -1073089200000,
+ -1051920000000,
+ -1041466800000,
+ -1020384000000,
+ -1009930800000,
+ -988848000000,
+ -978394800000,
+ -957312000000,
+ -946858800000,
+ -925689600000,
+ -915236400000,
+ -894153600000,
+ -883700400000,
+ -862617600000,
+ -852164400000,
+ null
+ ],
+ "offsets": [
+ 0.8667,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0,
+ -20,
+ 0
+ ],
+ "population": 4145000
+ },
+ {
+ "name": "Africa/Addis_Ababa",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Algiers",
+ "abbrs": [
+ "PMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "WET",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "CET",
+ "CEST",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "CET"
+ ],
+ "untils": [
+ -1855958961000,
+ -1689814800000,
+ -1680397200000,
+ -1665363600000,
+ -1648342800000,
+ -1635123600000,
+ -1616893200000,
+ -1604278800000,
+ -1585443600000,
+ -1574038800000,
+ -1552266000000,
+ -1539997200000,
+ -1531443600000,
+ -956365200000,
+ -950486400000,
+ -942012000000,
+ -812502000000,
+ -796262400000,
+ -781052400000,
+ -766630800000,
+ -733280400000,
+ -439430400000,
+ -212029200000,
+ 41468400000,
+ 54774000000,
+ 231724800000,
+ 246236400000,
+ 259545600000,
+ 275274000000,
+ 309740400000,
+ 325468800000,
+ 341802000000,
+ 357523200000,
+ null
+ ],
+ "offsets": [
+ -9.35,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60
+ ],
+ "population": 2590000
+ },
+ {
+ "name": "Africa/Asmara",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Asmera",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Bamako",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Bangui",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Banjul",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Bissau",
+ "abbrs": [
+ "LMT",
+ "-01",
+ "GMT"
+ ],
+ "untils": [
+ -1830380400000,
+ 157770000000,
+ null
+ ],
+ "offsets": [
+ 62.3333,
+ 60,
+ 0
+ ],
+ "population": 387909
+ },
+ {
+ "name": "Africa/Blantyre",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Brazzaville",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Bujumbura",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Cairo",
+ "abbrs": [
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -929844000000,
+ -923108400000,
+ -906170400000,
+ -892868400000,
+ -875844000000,
+ -857790000000,
+ -844308000000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762663600000,
+ -399088800000,
+ -386650800000,
+ -368330400000,
+ -355114800000,
+ -336790800000,
+ -323654400000,
+ -305168400000,
+ -292032000000,
+ -273632400000,
+ -260496000000,
+ -242096400000,
+ -228960000000,
+ -210560400000,
+ -197424000000,
+ -178938000000,
+ -165801600000,
+ -147402000000,
+ -134265600000,
+ -115866000000,
+ -102643200000,
+ -84330000000,
+ -71107200000,
+ -52707600000,
+ -39484800000,
+ -21171600000,
+ -7948800000,
+ 10364400000,
+ 23587200000,
+ 41900400000,
+ 55123200000,
+ 73522800000,
+ 86745600000,
+ 105058800000,
+ 118281600000,
+ 136594800000,
+ 149817600000,
+ 168130800000,
+ 181353600000,
+ 199753200000,
+ 212976000000,
+ 231289200000,
+ 244512000000,
+ 262825200000,
+ 276048000000,
+ 294361200000,
+ 307584000000,
+ 325983600000,
+ 339206400000,
+ 357519600000,
+ 370742400000,
+ 396399600000,
+ 402278400000,
+ 426812400000,
+ 433814400000,
+ 452214000000,
+ 465436800000,
+ 483750000000,
+ 496972800000,
+ 515286000000,
+ 528508800000,
+ 546822000000,
+ 560044800000,
+ 578444400000,
+ 591667200000,
+ 610412400000,
+ 623203200000,
+ 641516400000,
+ 654739200000,
+ 673052400000,
+ 686275200000,
+ 704674800000,
+ 717897600000,
+ 736210800000,
+ 749433600000,
+ 767746800000,
+ 780969600000,
+ 799020000000,
+ 812322000000,
+ 830469600000,
+ 843771600000,
+ 861919200000,
+ 875221200000,
+ 893368800000,
+ 906670800000,
+ 925423200000,
+ 938725200000,
+ 956872800000,
+ 970174800000,
+ 988322400000,
+ 1001624400000,
+ 1019772000000,
+ 1033074000000,
+ 1051221600000,
+ 1064523600000,
+ 1083276000000,
+ 1096578000000,
+ 1114725600000,
+ 1128027600000,
+ 1146175200000,
+ 1158872400000,
+ 1177624800000,
+ 1189112400000,
+ 1209074400000,
+ 1219957200000,
+ 1240524000000,
+ 1250802000000,
+ 1272578400000,
+ 1281474000000,
+ 1284069600000,
+ 1285880400000,
+ 1400191200000,
+ 1403816400000,
+ 1406844000000,
+ 1411678800000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 15071000
+ },
+ {
+ "name": "Africa/Casablanca",
+ "abbrs": [
+ "LMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1773012580000,
+ -956361600000,
+ -950490000000,
+ -942019200000,
+ -761187600000,
+ -617241600000,
+ -605149200000,
+ -81432000000,
+ -71110800000,
+ 141264000000,
+ 147222000000,
+ 199756800000,
+ 207702000000,
+ 231292800000,
+ 244249200000,
+ 265507200000,
+ 271033200000,
+ 448243200000,
+ 504918000000,
+ 1212278400000,
+ 1220223600000,
+ 1243814400000,
+ 1250809200000,
+ 1272758400000,
+ 1281222000000,
+ 1301788800000,
+ 1312066800000,
+ 1335664800000,
+ 1342749600000,
+ 1345428000000,
+ 1348970400000,
+ 1367114400000,
+ 1373162400000,
+ 1376100000000,
+ 1382839200000,
+ 1396144800000,
+ 1403920800000,
+ 1406944800000,
+ 1414288800000,
+ 1427594400000,
+ 1434247200000,
+ 1437271200000,
+ 1445738400000,
+ 1459044000000,
+ 1465092000000,
+ 1468116000000,
+ 1477792800000,
+ 1490493600000,
+ 1495332000000,
+ 1498960800000,
+ 1509242400000,
+ 1521943200000,
+ 1526176800000,
+ 1529200800000,
+ 1540692000000,
+ 1553997600000,
+ 1557021600000,
+ 1560045600000,
+ 1572141600000,
+ 1585447200000,
+ 1587261600000,
+ 1590285600000,
+ 1603591200000,
+ 1616896800000,
+ 1618106400000,
+ 1621130400000,
+ 1635645600000,
+ 1651975200000,
+ 1667095200000,
+ 1682215200000,
+ 1698544800000,
+ 1713060000000,
+ 1729994400000,
+ 1743904800000,
+ 1761444000000,
+ 1774749600000,
+ 1792893600000,
+ 1806199200000,
+ 1824948000000,
+ 1837648800000,
+ 1856397600000,
+ 1869098400000,
+ 1887847200000,
+ 1901152800000,
+ 1919296800000,
+ 1932602400000,
+ 1950746400000,
+ 1964052000000,
+ 1982800800000,
+ 1995501600000,
+ 2014250400000,
+ 2026951200000,
+ 2045700000000,
+ 2058400800000,
+ 2077149600000,
+ 2090455200000,
+ 2107994400000,
+ 2121904800000,
+ 2138234400000,
+ null
+ ],
+ "offsets": [
+ 30.3333,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 3211000
+ },
+ {
+ "name": "Africa/Ceuta",
+ "abbrs": [
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1630112400000,
+ -1616810400000,
+ -1442451600000,
+ -1427673600000,
+ -1379293200000,
+ -1364774400000,
+ -1348448400000,
+ -1333324800000,
+ -1316390400000,
+ -1301270400000,
+ -81432000000,
+ -71110800000,
+ 141264000000,
+ 147222000000,
+ 199756800000,
+ 207702000000,
+ 231292800000,
+ 244249200000,
+ 265507200000,
+ 271033200000,
+ 448243200000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 84963
+ },
+ {
+ "name": "Africa/Conakry",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Dakar",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Dar_es_Salaam",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Djibouti",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Douala",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/El_Aaiun",
+ "abbrs": [
+ "LMT",
+ "-01",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1136070432000,
+ 198291600000,
+ 199756800000,
+ 207702000000,
+ 231292800000,
+ 244249200000,
+ 265507200000,
+ 271033200000,
+ 1212278400000,
+ 1220223600000,
+ 1243814400000,
+ 1250809200000,
+ 1272758400000,
+ 1281222000000,
+ 1301788800000,
+ 1312066800000,
+ 1335664800000,
+ 1342749600000,
+ 1345428000000,
+ 1348970400000,
+ 1367114400000,
+ 1373162400000,
+ 1376100000000,
+ 1382839200000,
+ 1396144800000,
+ 1403920800000,
+ 1406944800000,
+ 1414288800000,
+ 1427594400000,
+ 1434247200000,
+ 1437271200000,
+ 1445738400000,
+ 1459044000000,
+ 1465092000000,
+ 1468116000000,
+ 1477792800000,
+ 1490493600000,
+ 1495332000000,
+ 1498960800000,
+ 1509242400000,
+ 1521943200000,
+ 1526176800000,
+ 1529200800000,
+ 1540692000000,
+ 1553997600000,
+ 1557021600000,
+ 1560045600000,
+ 1572141600000,
+ 1585447200000,
+ 1587261600000,
+ 1590285600000,
+ 1603591200000,
+ 1616896800000,
+ 1618106400000,
+ 1621130400000,
+ 1635645600000,
+ 1651975200000,
+ 1667095200000,
+ 1682215200000,
+ 1698544800000,
+ 1713060000000,
+ 1729994400000,
+ 1743904800000,
+ 1761444000000,
+ 1774749600000,
+ 1792893600000,
+ 1806199200000,
+ 1824948000000,
+ 1837648800000,
+ 1856397600000,
+ 1869098400000,
+ 1887847200000,
+ 1901152800000,
+ 1919296800000,
+ 1932602400000,
+ 1950746400000,
+ 1964052000000,
+ 1982800800000,
+ 1995501600000,
+ 2014250400000,
+ 2026951200000,
+ 2045700000000,
+ 2058400800000,
+ 2077149600000,
+ 2090455200000,
+ 2107994400000,
+ 2121904800000,
+ 2138234400000,
+ null
+ ],
+ "offsets": [
+ 52.8,
+ 60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 196331
+ },
+ {
+ "name": "Africa/Freetown",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Gaborone",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Harare",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Johannesburg",
+ "abbrs": [
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST"
+ ],
+ "untils": [
+ -2109288600000,
+ -860976000000,
+ -845254800000,
+ -829526400000,
+ -813805200000,
+ null
+ ],
+ "offsets": [
+ -90,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 8432000
+ },
+ {
+ "name": "Africa/Juba",
+ "abbrs": [
+ "LMT",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "EAT"
+ ],
+ "untils": [
+ -1230775588000,
+ 10360800000,
+ 24786000000,
+ 41810400000,
+ 56322000000,
+ 73432800000,
+ 87944400000,
+ 104882400000,
+ 119480400000,
+ 136332000000,
+ 151016400000,
+ 167781600000,
+ 182552400000,
+ 199231200000,
+ 214174800000,
+ 230680800000,
+ 245710800000,
+ 262735200000,
+ 277246800000,
+ 294184800000,
+ 308782800000,
+ 325634400000,
+ 340405200000,
+ 357084000000,
+ 371941200000,
+ 388533600000,
+ 403477200000,
+ 419983200000,
+ 435013200000,
+ 452037600000,
+ 466635600000,
+ 483487200000,
+ 498171600000,
+ 947930400000,
+ null
+ ],
+ "offsets": [
+ -126.4667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Kampala",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Khartoum",
+ "abbrs": [
+ "LMT",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "CAST",
+ "CAT",
+ "EAT",
+ "CAT"
+ ],
+ "untils": [
+ -1230775808000,
+ 10360800000,
+ 24786000000,
+ 41810400000,
+ 56322000000,
+ 73432800000,
+ 87944400000,
+ 104882400000,
+ 119480400000,
+ 136332000000,
+ 151016400000,
+ 167781600000,
+ 182552400000,
+ 199231200000,
+ 214174800000,
+ 230680800000,
+ 245710800000,
+ 262735200000,
+ 277246800000,
+ 294184800000,
+ 308782800000,
+ 325634400000,
+ 340405200000,
+ 357084000000,
+ 371941200000,
+ 388533600000,
+ 403477200000,
+ 419983200000,
+ 435013200000,
+ 452037600000,
+ 466635600000,
+ 483487200000,
+ 498171600000,
+ 947930400000,
+ 1509483600000,
+ null
+ ],
+ "offsets": [
+ -130.1333,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 5125000
+ },
+ {
+ "name": "Africa/Kigali",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Kinshasa",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Lagos",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 17060307
+ },
+ {
+ "name": "Africa/Libreville",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Lome",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Luanda",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Lubumbashi",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Lusaka",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Malabo",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Maputo",
+ "abbrs": [
+ "LMT",
+ "CAT"
+ ],
+ "untils": [
+ -2109291020000,
+ null
+ ],
+ "offsets": [
+ -130.3333,
+ -120
+ ],
+ "population": 2615000
+ },
+ {
+ "name": "Africa/Maseru",
+ "abbrs": [
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST"
+ ],
+ "untils": [
+ -2109288600000,
+ -860976000000,
+ -845254800000,
+ -829526400000,
+ -813805200000,
+ null
+ ],
+ "offsets": [
+ -90,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Mbabane",
+ "abbrs": [
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST",
+ "SAST"
+ ],
+ "untils": [
+ -2109288600000,
+ -860976000000,
+ -845254800000,
+ -829526400000,
+ -813805200000,
+ null
+ ],
+ "offsets": [
+ -90,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Mogadishu",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Monrovia",
+ "abbrs": [
+ "MMT",
+ "MMT",
+ "GMT"
+ ],
+ "untils": [
+ -1604359012000,
+ 63593070000,
+ null
+ ],
+ "offsets": [
+ 43.1333,
+ 44.5,
+ 0
+ ],
+ "population": 1100000
+ },
+ {
+ "name": "Africa/Nairobi",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 4738000
+ },
+ {
+ "name": "Africa/Ndjamena",
+ "abbrs": [
+ "LMT",
+ "WAT",
+ "WAST",
+ "WAT"
+ ],
+ "untils": [
+ -1830387612000,
+ 308703600000,
+ 321314400000,
+ null
+ ],
+ "offsets": [
+ -60.2,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1260000
+ },
+ {
+ "name": "Africa/Niamey",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Nouakchott",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Ouagadougou",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Porto-Novo",
+ "abbrs": [
+ "LMT",
+ "WAT"
+ ],
+ "untils": [
+ -1588464816000,
+ null
+ ],
+ "offsets": [
+ -13.6,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Sao_Tome",
+ "abbrs": [
+ "LMT",
+ "GMT",
+ "WAT"
+ ],
+ "untils": [
+ -1830384000000,
+ 1514768400000,
+ null
+ ],
+ "offsets": [
+ 36.75,
+ 0,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Timbuktu",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Africa/Tripoli",
+ "abbrs": [
+ "LMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "EET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "EET",
+ "CET",
+ "CEST",
+ "EET",
+ "CET",
+ "CEST",
+ "EET"
+ ],
+ "untils": [
+ -1577926364000,
+ -574902000000,
+ -568087200000,
+ -512175600000,
+ -504928800000,
+ -449888400000,
+ -441856800000,
+ -347158800000,
+ 378684000000,
+ 386463600000,
+ 402271200000,
+ 417999600000,
+ 433807200000,
+ 449622000000,
+ 465429600000,
+ 481590000000,
+ 496965600000,
+ 512953200000,
+ 528674400000,
+ 544230000000,
+ 560037600000,
+ 575852400000,
+ 591660000000,
+ 607388400000,
+ 623196000000,
+ 641775600000,
+ 844034400000,
+ 860108400000,
+ 875916000000,
+ 1352505600000,
+ 1364515200000,
+ 1382659200000,
+ null
+ ],
+ "offsets": [
+ -52.7333,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -120,
+ -60,
+ -120,
+ -120
+ ],
+ "population": 1110000
+ },
+ {
+ "name": "Africa/Tunis",
+ "abbrs": [
+ "PMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1855958961000,
+ -969242400000,
+ -950493600000,
+ -941940000000,
+ -891136800000,
+ -877827600000,
+ -857257200000,
+ -844556400000,
+ -842918400000,
+ -842223600000,
+ -828230400000,
+ -812502000000,
+ -796269600000,
+ -781052400000,
+ -766634400000,
+ 231202800000,
+ 243903600000,
+ 262825200000,
+ 276044400000,
+ 581122800000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 641516400000,
+ 654649200000,
+ 1114902000000,
+ 1128038400000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ null
+ ],
+ "offsets": [
+ -9.35,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1990000
+ },
+ {
+ "name": "Africa/Windhoek",
+ "abbrs": [
+ "+0130",
+ "SAST",
+ "SAST",
+ "SAST",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT",
+ "WAT",
+ "CAT"
+ ],
+ "untils": [
+ -2109288600000,
+ -860976000000,
+ -845254800000,
+ 637970400000,
+ 764200800000,
+ 778640400000,
+ 796780800000,
+ 810090000000,
+ 828835200000,
+ 841539600000,
+ 860284800000,
+ 873594000000,
+ 891734400000,
+ 905043600000,
+ 923184000000,
+ 936493200000,
+ 954633600000,
+ 967942800000,
+ 986083200000,
+ 999392400000,
+ 1018137600000,
+ 1030842000000,
+ 1049587200000,
+ 1062896400000,
+ 1081036800000,
+ 1094346000000,
+ 1112486400000,
+ 1125795600000,
+ 1143936000000,
+ 1157245200000,
+ 1175385600000,
+ 1188694800000,
+ 1207440000000,
+ 1220749200000,
+ 1238889600000,
+ 1252198800000,
+ 1270339200000,
+ 1283648400000,
+ 1301788800000,
+ 1315098000000,
+ 1333238400000,
+ 1346547600000,
+ 1365292800000,
+ 1377997200000,
+ 1396742400000,
+ 1410051600000,
+ 1428192000000,
+ 1441501200000,
+ 1459641600000,
+ 1472950800000,
+ 1491091200000,
+ 1504400400000,
+ null
+ ],
+ "offsets": [
+ -90,
+ -120,
+ -180,
+ -120,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120
+ ],
+ "population": 322500
+ },
+ {
+ "name": "America/Adak",
+ "abbrs": [
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "AHST",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST"
+ ],
+ "untils": [
+ -880196400000,
+ -769395600000,
+ -765374400000,
+ -86878800000,
+ -21466800000,
+ -5745600000,
+ 9982800000,
+ 25704000000,
+ 41432400000,
+ 57758400000,
+ 73486800000,
+ 89208000000,
+ 104936400000,
+ 120657600000,
+ 126709200000,
+ 152107200000,
+ 162392400000,
+ 183556800000,
+ 199285200000,
+ 215611200000,
+ 230734800000,
+ 247060800000,
+ 262789200000,
+ 278510400000,
+ 294238800000,
+ 309960000000,
+ 325688400000,
+ 341409600000,
+ 357138000000,
+ 372859200000,
+ 388587600000,
+ 404913600000,
+ 420037200000,
+ 436363200000,
+ 439034400000,
+ 452088000000,
+ 467809200000,
+ 483537600000,
+ 499258800000,
+ 514987200000,
+ 530708400000,
+ 544622400000,
+ 562158000000,
+ 576072000000,
+ 594212400000,
+ 607521600000,
+ 625662000000,
+ 638971200000,
+ 657111600000,
+ 671025600000,
+ 688561200000,
+ 702475200000,
+ 720010800000,
+ 733924800000,
+ 752065200000,
+ 765374400000,
+ 783514800000,
+ 796824000000,
+ 814964400000,
+ 828878400000,
+ 846414000000,
+ 860328000000,
+ 877863600000,
+ 891777600000,
+ 909313200000,
+ 923227200000,
+ 941367600000,
+ 954676800000,
+ 972817200000,
+ 986126400000,
+ 1004266800000,
+ 1018180800000,
+ 1035716400000,
+ 1049630400000,
+ 1067166000000,
+ 1081080000000,
+ 1099220400000,
+ 1112529600000,
+ 1130670000000,
+ 1143979200000,
+ 1162119600000,
+ 1173614400000,
+ 1194174000000,
+ 1205064000000,
+ 1225623600000,
+ 1236513600000,
+ 1257073200000,
+ 1268568000000,
+ 1289127600000,
+ 1300017600000,
+ 1320577200000,
+ 1331467200000,
+ 1352026800000,
+ 1362916800000,
+ 1383476400000,
+ 1394366400000,
+ 1414926000000,
+ 1425816000000,
+ 1446375600000,
+ 1457870400000,
+ 1478430000000,
+ 1489320000000,
+ 1509879600000,
+ 1520769600000,
+ 1541329200000,
+ 1552219200000,
+ 1572778800000,
+ 1583668800000,
+ 1604228400000,
+ 1615723200000,
+ 1636282800000,
+ 1647172800000,
+ 1667732400000,
+ 1678622400000,
+ 1699182000000,
+ 1710072000000,
+ 1730631600000,
+ 1741521600000,
+ 1762081200000,
+ 1772971200000,
+ 1793530800000,
+ 1805025600000,
+ 1825585200000,
+ 1836475200000,
+ 1857034800000,
+ 1867924800000,
+ 1888484400000,
+ 1899374400000,
+ 1919934000000,
+ 1930824000000,
+ 1951383600000,
+ 1962878400000,
+ 1983438000000,
+ 1994328000000,
+ 2014887600000,
+ 2025777600000,
+ 2046337200000,
+ 2057227200000,
+ 2077786800000,
+ 2088676800000,
+ 2109236400000,
+ 2120126400000,
+ 2140686000000,
+ null
+ ],
+ "offsets": [
+ 660,
+ 600,
+ 600,
+ 660,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 600,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600
+ ],
+ "population": 326
+ },
+ {
+ "name": "America/Anchorage",
+ "abbrs": [
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "YST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880200000000,
+ -769395600000,
+ -765378000000,
+ -86882400000,
+ -21470400000,
+ -5749200000,
+ 9979200000,
+ 25700400000,
+ 41428800000,
+ 57754800000,
+ 73483200000,
+ 89204400000,
+ 104932800000,
+ 120654000000,
+ 126705600000,
+ 152103600000,
+ 162388800000,
+ 183553200000,
+ 199281600000,
+ 215607600000,
+ 230731200000,
+ 247057200000,
+ 262785600000,
+ 278506800000,
+ 294235200000,
+ 309956400000,
+ 325684800000,
+ 341406000000,
+ 357134400000,
+ 372855600000,
+ 388584000000,
+ 404910000000,
+ 420033600000,
+ 436359600000,
+ 439030800000,
+ 452084400000,
+ 467805600000,
+ 483534000000,
+ 499255200000,
+ 514983600000,
+ 530704800000,
+ 544618800000,
+ 562154400000,
+ 576068400000,
+ 594208800000,
+ 607518000000,
+ 625658400000,
+ 638967600000,
+ 657108000000,
+ 671022000000,
+ 688557600000,
+ 702471600000,
+ 720007200000,
+ 733921200000,
+ 752061600000,
+ 765370800000,
+ 783511200000,
+ 796820400000,
+ 814960800000,
+ 828874800000,
+ 846410400000,
+ 860324400000,
+ 877860000000,
+ 891774000000,
+ 909309600000,
+ 923223600000,
+ 941364000000,
+ 954673200000,
+ 972813600000,
+ 986122800000,
+ 1004263200000,
+ 1018177200000,
+ 1035712800000,
+ 1049626800000,
+ 1067162400000,
+ 1081076400000,
+ 1099216800000,
+ 1112526000000,
+ 1130666400000,
+ 1143975600000,
+ 1162116000000,
+ 1173610800000,
+ 1194170400000,
+ 1205060400000,
+ 1225620000000,
+ 1236510000000,
+ 1257069600000,
+ 1268564400000,
+ 1289124000000,
+ 1300014000000,
+ 1320573600000,
+ 1331463600000,
+ 1352023200000,
+ 1362913200000,
+ 1383472800000,
+ 1394362800000,
+ 1414922400000,
+ 1425812400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 600,
+ 540,
+ 540,
+ 600,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 540,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 300950
+ },
+ {
+ "name": "America/Anguilla",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Antigua",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Araguaina",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1767214032000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -191365200000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 813726000000,
+ 824004000000,
+ 844570800000,
+ 856058400000,
+ 876106800000,
+ 888717600000,
+ 908074800000,
+ 919562400000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 982461600000,
+ 1003028400000,
+ 1013911200000,
+ 1036292400000,
+ 1045360800000,
+ 1350788400000,
+ 1361066400000,
+ null
+ ],
+ "offsets": [
+ 192.8,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 142925
+ },
+ {
+ "name": "America/Argentina/Buenos_Aires",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687927600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ 1224385200000,
+ 1237082400000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Catamarca",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1086058800000,
+ 1087704000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/ComodRivadavia",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1086058800000,
+ 1087704000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Cordoba",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ 1224385200000,
+ 1237082400000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Jujuy",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 657086400000,
+ 669178800000,
+ 686721600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/La_Rioja",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667792800000,
+ 673588800000,
+ 687927600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1086058800000,
+ 1087704000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Mendoza",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 655963200000,
+ 667796400000,
+ 687499200000,
+ 699418800000,
+ 719380800000,
+ 731469600000,
+ 1085281200000,
+ 1096171200000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Rio_Gallegos",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687927600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1086058800000,
+ 1087704000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Salta",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/San_Juan",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667792800000,
+ 673588800000,
+ 687927600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1085972400000,
+ 1090728000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/San_Luis",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 637380000000,
+ 655963200000,
+ 667796400000,
+ 675748800000,
+ 1085972400000,
+ 1090728000000,
+ 1198983600000,
+ 1200880800000,
+ 1205031600000,
+ 1223784000000,
+ 1236481200000,
+ 1255233600000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Tucuman",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1086058800000,
+ 1087099200000,
+ 1198983600000,
+ 1205632800000,
+ 1224385200000,
+ 1237082400000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Argentina/Ushuaia",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687927600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1085886000000,
+ 1087704000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Aruba",
+ "abbrs": [
+ "LMT",
+ "-0430",
+ "AST"
+ ],
+ "untils": [
+ -1826738653000,
+ -157750200000,
+ null
+ ],
+ "offsets": [
+ 275.7833,
+ 270,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Asuncion",
+ "abbrs": [
+ "AMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1206389360000,
+ 86760000000,
+ 134017200000,
+ 181368000000,
+ 194497200000,
+ 212990400000,
+ 226033200000,
+ 244526400000,
+ 257569200000,
+ 276062400000,
+ 291783600000,
+ 307598400000,
+ 323406000000,
+ 339220800000,
+ 354942000000,
+ 370756800000,
+ 386478000000,
+ 402292800000,
+ 418014000000,
+ 433828800000,
+ 449636400000,
+ 465451200000,
+ 481172400000,
+ 496987200000,
+ 512708400000,
+ 528523200000,
+ 544244400000,
+ 560059200000,
+ 575866800000,
+ 591681600000,
+ 607402800000,
+ 625032000000,
+ 638938800000,
+ 654753600000,
+ 670474800000,
+ 686721600000,
+ 699418800000,
+ 718257600000,
+ 733546800000,
+ 749448000000,
+ 762318000000,
+ 780984000000,
+ 793767600000,
+ 812520000000,
+ 825649200000,
+ 844574400000,
+ 856666800000,
+ 876024000000,
+ 888721200000,
+ 907473600000,
+ 920775600000,
+ 938923200000,
+ 952225200000,
+ 970372800000,
+ 983674800000,
+ 1002427200000,
+ 1018148400000,
+ 1030852800000,
+ 1049598000000,
+ 1062907200000,
+ 1081047600000,
+ 1097985600000,
+ 1110682800000,
+ 1129435200000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192939200000,
+ 1205031600000,
+ 1224388800000,
+ 1236481200000,
+ 1255838400000,
+ 1270954800000,
+ 1286078400000,
+ 1302404400000,
+ 1317528000000,
+ 1333854000000,
+ 1349582400000,
+ 1364094000000,
+ 1381032000000,
+ 1395543600000,
+ 1412481600000,
+ 1426993200000,
+ 1443931200000,
+ 1459047600000,
+ 1475380800000,
+ 1490497200000,
+ 1506830400000,
+ 1521946800000,
+ 1538884800000,
+ 1553396400000,
+ 1570334400000,
+ 1584846000000,
+ 1601784000000,
+ 1616900400000,
+ 1633233600000,
+ 1648350000000,
+ 1664683200000,
+ 1679799600000,
+ 1696132800000,
+ 1711249200000,
+ 1728187200000,
+ 1742698800000,
+ 1759636800000,
+ 1774148400000,
+ 1791086400000,
+ 1806202800000,
+ 1822536000000,
+ 1837652400000,
+ 1853985600000,
+ 1869102000000,
+ 1886040000000,
+ 1900551600000,
+ 1917489600000,
+ 1932001200000,
+ 1948939200000,
+ 1964055600000,
+ 1980388800000,
+ 1995505200000,
+ 2011838400000,
+ 2026954800000,
+ 2043288000000,
+ 2058404400000,
+ 2075342400000,
+ 2089854000000,
+ 2106792000000,
+ 2121303600000,
+ 2138241600000,
+ null
+ ],
+ "offsets": [
+ 230.6667,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 2827000
+ },
+ {
+ "name": "America/Atikokan",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CWT",
+ "CPT",
+ "EST"
+ ],
+ "untils": [
+ -1632067200000,
+ -1615136400000,
+ -923248800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 300
+ ],
+ "population": 2787
+ },
+ {
+ "name": "America/Atka",
+ "abbrs": [
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "AHST",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST"
+ ],
+ "untils": [
+ -880196400000,
+ -769395600000,
+ -765374400000,
+ -86878800000,
+ -21466800000,
+ -5745600000,
+ 9982800000,
+ 25704000000,
+ 41432400000,
+ 57758400000,
+ 73486800000,
+ 89208000000,
+ 104936400000,
+ 120657600000,
+ 126709200000,
+ 152107200000,
+ 162392400000,
+ 183556800000,
+ 199285200000,
+ 215611200000,
+ 230734800000,
+ 247060800000,
+ 262789200000,
+ 278510400000,
+ 294238800000,
+ 309960000000,
+ 325688400000,
+ 341409600000,
+ 357138000000,
+ 372859200000,
+ 388587600000,
+ 404913600000,
+ 420037200000,
+ 436363200000,
+ 439034400000,
+ 452088000000,
+ 467809200000,
+ 483537600000,
+ 499258800000,
+ 514987200000,
+ 530708400000,
+ 544622400000,
+ 562158000000,
+ 576072000000,
+ 594212400000,
+ 607521600000,
+ 625662000000,
+ 638971200000,
+ 657111600000,
+ 671025600000,
+ 688561200000,
+ 702475200000,
+ 720010800000,
+ 733924800000,
+ 752065200000,
+ 765374400000,
+ 783514800000,
+ 796824000000,
+ 814964400000,
+ 828878400000,
+ 846414000000,
+ 860328000000,
+ 877863600000,
+ 891777600000,
+ 909313200000,
+ 923227200000,
+ 941367600000,
+ 954676800000,
+ 972817200000,
+ 986126400000,
+ 1004266800000,
+ 1018180800000,
+ 1035716400000,
+ 1049630400000,
+ 1067166000000,
+ 1081080000000,
+ 1099220400000,
+ 1112529600000,
+ 1130670000000,
+ 1143979200000,
+ 1162119600000,
+ 1173614400000,
+ 1194174000000,
+ 1205064000000,
+ 1225623600000,
+ 1236513600000,
+ 1257073200000,
+ 1268568000000,
+ 1289127600000,
+ 1300017600000,
+ 1320577200000,
+ 1331467200000,
+ 1352026800000,
+ 1362916800000,
+ 1383476400000,
+ 1394366400000,
+ 1414926000000,
+ 1425816000000,
+ 1446375600000,
+ 1457870400000,
+ 1478430000000,
+ 1489320000000,
+ 1509879600000,
+ 1520769600000,
+ 1541329200000,
+ 1552219200000,
+ 1572778800000,
+ 1583668800000,
+ 1604228400000,
+ 1615723200000,
+ 1636282800000,
+ 1647172800000,
+ 1667732400000,
+ 1678622400000,
+ 1699182000000,
+ 1710072000000,
+ 1730631600000,
+ 1741521600000,
+ 1762081200000,
+ 1772971200000,
+ 1793530800000,
+ 1805025600000,
+ 1825585200000,
+ 1836475200000,
+ 1857034800000,
+ 1867924800000,
+ 1888484400000,
+ 1899374400000,
+ 1919934000000,
+ 1930824000000,
+ 1951383600000,
+ 1962878400000,
+ 1983438000000,
+ 1994328000000,
+ 2014887600000,
+ 2025777600000,
+ 2046337200000,
+ 2057227200000,
+ 2077786800000,
+ 2088676800000,
+ 2109236400000,
+ 2120126400000,
+ 2140686000000,
+ null
+ ],
+ "offsets": [
+ 660,
+ 600,
+ 600,
+ 660,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 600,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Bahia_Banderas",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "PST",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ -873828000000,
+ -661539600000,
+ 28800000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 989139600000,
+ 1001836800000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1175418000000,
+ 1193558400000,
+ 1207472400000,
+ 1225008000000,
+ 1238922000000,
+ 1256457600000,
+ 1270371600000,
+ 1288508400000,
+ 1301817600000,
+ 1319958000000,
+ 1333267200000,
+ 1351407600000,
+ 1365321600000,
+ 1382857200000,
+ 1396771200000,
+ 1414306800000,
+ 1428220800000,
+ 1445756400000,
+ 1459670400000,
+ 1477810800000,
+ 1491120000000,
+ 1509260400000,
+ 1522569600000,
+ 1540710000000,
+ 1554624000000,
+ 1572159600000,
+ 1586073600000,
+ 1603609200000,
+ 1617523200000,
+ 1635663600000,
+ 1648972800000,
+ 1667113200000,
+ 1680422400000,
+ 1698562800000,
+ 1712476800000,
+ 1730012400000,
+ 1743926400000,
+ 1761462000000,
+ 1775376000000,
+ 1792911600000,
+ 1806825600000,
+ 1824966000000,
+ 1838275200000,
+ 1856415600000,
+ 1869724800000,
+ 1887865200000,
+ 1901779200000,
+ 1919314800000,
+ 1933228800000,
+ 1950764400000,
+ 1964678400000,
+ 1982818800000,
+ 1996128000000,
+ 2014268400000,
+ 2027577600000,
+ 2045718000000,
+ 2059027200000,
+ 2077167600000,
+ 2091081600000,
+ 2108617200000,
+ 2122531200000,
+ 2140066800000,
+ null
+ ],
+ "offsets": [
+ 421,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 480,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 83739
+ },
+ {
+ "name": "America/Bahia",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1767216356000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -191365200000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 656478000000,
+ 666756000000,
+ 687927600000,
+ 697600800000,
+ 719982000000,
+ 728445600000,
+ 750826800000,
+ 761709600000,
+ 782276400000,
+ 793159200000,
+ 813726000000,
+ 824004000000,
+ 844570800000,
+ 856058400000,
+ 876106800000,
+ 888717600000,
+ 908074800000,
+ 919562400000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 982461600000,
+ 1003028400000,
+ 1013911200000,
+ 1036292400000,
+ 1045360800000,
+ 1318734000000,
+ 1330221600000,
+ null
+ ],
+ "offsets": [
+ 154.0667,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 2675000
+ },
+ {
+ "name": "America/Barbados",
+ "abbrs": [
+ "LMT",
+ "BMT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -1451678491000,
+ -1199217691000,
+ 234943200000,
+ 244616400000,
+ 261554400000,
+ 276066000000,
+ 293004000000,
+ 307515600000,
+ 325058400000,
+ 338706000000,
+ null
+ ],
+ "offsets": [
+ 238.4833,
+ 238.4833,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 284644
+ },
+ {
+ "name": "America/Belem",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1767213964000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -191365200000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ null
+ ],
+ "offsets": [
+ 193.9333,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 1979000
+ },
+ {
+ "name": "America/Belize",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "-0530",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1822500432000,
+ -1616954400000,
+ -1606069800000,
+ -1585504800000,
+ -1574015400000,
+ -1554055200000,
+ -1542565800000,
+ -1522605600000,
+ -1511116200000,
+ -1490551200000,
+ -1479666600000,
+ -1459101600000,
+ -1448217000000,
+ -1427652000000,
+ -1416162600000,
+ -1396202400000,
+ -1384713000000,
+ -1364752800000,
+ -1353263400000,
+ -1333303200000,
+ -1321813800000,
+ -1301248800000,
+ -1290364200000,
+ -1269799200000,
+ -1258914600000,
+ -1238349600000,
+ -1226860200000,
+ -1206900000000,
+ -1195410600000,
+ -1175450400000,
+ -1163961000000,
+ -1143396000000,
+ -1132511400000,
+ -1111946400000,
+ -1101061800000,
+ -1080496800000,
+ -1069612200000,
+ -1049047200000,
+ -1037557800000,
+ -1017597600000,
+ -1006108200000,
+ -986148000000,
+ -974658600000,
+ -954093600000,
+ -943209000000,
+ -922644000000,
+ -911759400000,
+ -891194400000,
+ -879705000000,
+ -859744800000,
+ -848255400000,
+ 123919200000,
+ 129618000000,
+ 409039200000,
+ 413874000000,
+ null
+ ],
+ "offsets": [
+ 352.8,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 330,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 57169
+ },
+ {
+ "name": "America/Blanc-Sablon",
+ "abbrs": [
+ "AST",
+ "ADT",
+ "AST",
+ "AWT",
+ "APT",
+ "AST"
+ ],
+ "untils": [
+ -1632074400000,
+ -1615143600000,
+ -880221600000,
+ -769395600000,
+ -765399600000,
+ null
+ ],
+ "offsets": [
+ 240,
+ 180,
+ 240,
+ 180,
+ 180,
+ 240
+ ],
+ "population": 1118
+ },
+ {
+ "name": "America/Boa_Vista",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04"
+ ],
+ "untils": [
+ -1767211040000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ 938923200000,
+ 951620400000,
+ 970977600000,
+ 971578800000,
+ null
+ ],
+ "offsets": [
+ 242.6667,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 6233
+ },
+ {
+ "name": "America/Bogota",
+ "abbrs": [
+ "BMT",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1739041424000,
+ 704869200000,
+ 733896000000,
+ null
+ ],
+ "offsets": [
+ 296.2667,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 8991000
+ },
+ {
+ "name": "America/Boise",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633269600000,
+ -1615129200000,
+ -1601820000000,
+ -1583679600000,
+ -1471788000000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 129114000000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 214237
+ },
+ {
+ "name": "America/Buenos_Aires",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687927600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ 1224385200000,
+ 1237082400000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Cambridge_Bay",
+ "abbrs": [
+ "-00",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1577923200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -147891600000,
+ -131562000000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954662400000,
+ 972802800000,
+ 973400400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 420,
+ 360,
+ 360,
+ 420,
+ 300,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 300,
+ 300,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 1477
+ },
+ {
+ "name": "America/Campo_Grande",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1767212492000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ 592977600000,
+ 602046000000,
+ 624427200000,
+ 634705200000,
+ 656481600000,
+ 666759600000,
+ 687931200000,
+ 697604400000,
+ 719985600000,
+ 728449200000,
+ 750830400000,
+ 761713200000,
+ 782280000000,
+ 793162800000,
+ 813729600000,
+ 824007600000,
+ 844574400000,
+ 856062000000,
+ 876110400000,
+ 888721200000,
+ 908078400000,
+ 919566000000,
+ 938923200000,
+ 951620400000,
+ 970977600000,
+ 982465200000,
+ 1003032000000,
+ 1013914800000,
+ 1036296000000,
+ 1045364400000,
+ 1066536000000,
+ 1076814000000,
+ 1099368000000,
+ 1108868400000,
+ 1129435200000,
+ 1140318000000,
+ 1162699200000,
+ 1172372400000,
+ 1192334400000,
+ 1203217200000,
+ 1224388800000,
+ 1234666800000,
+ 1255838400000,
+ 1266721200000,
+ 1287288000000,
+ 1298170800000,
+ 1318737600000,
+ 1330225200000,
+ 1350792000000,
+ 1361070000000,
+ 1382241600000,
+ 1392519600000,
+ 1413691200000,
+ 1424574000000,
+ 1445140800000,
+ 1456023600000,
+ 1476590400000,
+ 1487473200000,
+ 1508040000000,
+ 1518922800000,
+ 1541304000000,
+ 1550372400000,
+ 1572753600000,
+ 1581822000000,
+ 1604203200000,
+ 1613876400000,
+ 1636257600000,
+ 1645326000000,
+ 1667707200000,
+ 1677380400000,
+ 1699156800000,
+ 1708225200000,
+ 1730606400000,
+ 1739674800000,
+ 1762056000000,
+ 1771729200000,
+ 1793505600000,
+ 1803178800000,
+ 1825560000000,
+ 1834628400000,
+ 1857009600000,
+ 1866078000000,
+ 1888459200000,
+ 1897527600000,
+ 1919908800000,
+ 1928977200000,
+ 1951358400000,
+ 1960426800000,
+ 1983412800000,
+ 1992481200000,
+ 2014862400000,
+ 2024535600000,
+ 2046312000000,
+ 2055380400000,
+ 2077761600000,
+ 2086830000000,
+ 2109211200000,
+ 2118884400000,
+ 2140660800000,
+ null
+ ],
+ "offsets": [
+ 218.4667,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 774202
+ },
+ {
+ "name": "America/Cancun",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST"
+ ],
+ "untils": [
+ -1514743200000,
+ 377935200000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 902037600000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 989136000000,
+ 1001833200000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1175414400000,
+ 1193554800000,
+ 1207468800000,
+ 1225004400000,
+ 1238918400000,
+ 1256454000000,
+ 1270368000000,
+ 1288508400000,
+ 1301817600000,
+ 1319958000000,
+ 1333267200000,
+ 1351407600000,
+ 1365321600000,
+ 1382857200000,
+ 1396771200000,
+ 1414306800000,
+ 1422777600000,
+ null
+ ],
+ "offsets": [
+ 347.0667,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300
+ ],
+ "population": 628306
+ },
+ {
+ "name": "America/Caracas",
+ "abbrs": [
+ "CMT",
+ "-0430",
+ "-04",
+ "-0430",
+ "-04"
+ ],
+ "untils": [
+ -1826739140000,
+ -157750200000,
+ 1197183600000,
+ 1462086000000,
+ null
+ ],
+ "offsets": [
+ 267.6667,
+ 270,
+ 240,
+ 270,
+ 240
+ ],
+ "population": 2861000
+ },
+ {
+ "name": "America/Catamarca",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1086058800000,
+ 1087704000000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Cayenne",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1846269040000,
+ -71092800000,
+ null
+ ],
+ "offsets": [
+ 209.3333,
+ 240,
+ 180
+ ],
+ "population": 58004
+ },
+ {
+ "name": "America/Cayman",
+ "abbrs": [
+ "CMT",
+ "EST"
+ ],
+ "untils": [
+ -1946918424000,
+ null
+ ],
+ "offsets": [
+ 319.6,
+ 300
+ ],
+ "population": 58435
+ },
+ {
+ "name": "America/Chicago",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -1563724800000,
+ -1551632400000,
+ -1538928000000,
+ -1520182800000,
+ -1504454400000,
+ -1491757200000,
+ -1473004800000,
+ -1459702800000,
+ -1441555200000,
+ -1428253200000,
+ -1410105600000,
+ -1396803600000,
+ -1378656000000,
+ -1365354000000,
+ -1347206400000,
+ -1333904400000,
+ -1315152000000,
+ -1301850000000,
+ -1283702400000,
+ -1270400400000,
+ -1252252800000,
+ -1238950800000,
+ -1220803200000,
+ -1207501200000,
+ -1189353600000,
+ -1176051600000,
+ -1157299200000,
+ -1144602000000,
+ -1125849600000,
+ -1112547600000,
+ -1094400000000,
+ -1081098000000,
+ -1067788800000,
+ -1045414800000,
+ -1031500800000,
+ -1018198800000,
+ -1000051200000,
+ -986749200000,
+ -967996800000,
+ -955299600000,
+ -936547200000,
+ -923245200000,
+ -905097600000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -447267600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -384368400000,
+ -368640000000,
+ -352918800000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -257965200000,
+ -242236800000,
+ -226515600000,
+ -210787200000,
+ -195066000000,
+ -179337600000,
+ -163616400000,
+ -147888000000,
+ -131562000000,
+ -116438400000,
+ -100112400000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 9156000
+ },
+ {
+ "name": "America/Chihuahua",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 989139600000,
+ 1001836800000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1175418000000,
+ 1193558400000,
+ 1207472400000,
+ 1225008000000,
+ 1238922000000,
+ 1256457600000,
+ 1270371600000,
+ 1288512000000,
+ 1301821200000,
+ 1319961600000,
+ 1333270800000,
+ 1351411200000,
+ 1365325200000,
+ 1382860800000,
+ 1396774800000,
+ 1414310400000,
+ 1428224400000,
+ 1445760000000,
+ 1459674000000,
+ 1477814400000,
+ 1491123600000,
+ 1509264000000,
+ 1522573200000,
+ 1540713600000,
+ 1554627600000,
+ 1572163200000,
+ 1586077200000,
+ 1603612800000,
+ 1617526800000,
+ 1635667200000,
+ 1648976400000,
+ 1667116800000,
+ 1680426000000,
+ 1698566400000,
+ 1712480400000,
+ 1730016000000,
+ 1743930000000,
+ 1761465600000,
+ 1775379600000,
+ 1792915200000,
+ 1806829200000,
+ 1824969600000,
+ 1838278800000,
+ 1856419200000,
+ 1869728400000,
+ 1887868800000,
+ 1901782800000,
+ 1919318400000,
+ 1933232400000,
+ 1950768000000,
+ 1964682000000,
+ 1982822400000,
+ 1996131600000,
+ 2014272000000,
+ 2027581200000,
+ 2045721600000,
+ 2059030800000,
+ 2077171200000,
+ 2091085200000,
+ 2108620800000,
+ 2122534800000,
+ 2140070400000,
+ null
+ ],
+ "offsets": [
+ 424.3333,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 809232
+ },
+ {
+ "name": "America/Coral_Harbour",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CWT",
+ "CPT",
+ "EST"
+ ],
+ "untils": [
+ -1632067200000,
+ -1615136400000,
+ -923248800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Cordoba",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ 1224385200000,
+ 1237082400000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Costa_Rica",
+ "abbrs": [
+ "SJMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1545071027000,
+ 288770400000,
+ 297234000000,
+ 320220000000,
+ 328683600000,
+ 664264800000,
+ 678344400000,
+ 695714400000,
+ 700635600000,
+ null
+ ],
+ "offsets": [
+ 336.2167,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 1170000
+ },
+ {
+ "name": "America/Creston",
+ "abbrs": [
+ "MST",
+ "PST",
+ "MST"
+ ],
+ "untils": [
+ -1680454800000,
+ -1627833600000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 480,
+ 420
+ ],
+ "population": 5306
+ },
+ {
+ "name": "America/Cuiaba",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1767212140000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ 592977600000,
+ 602046000000,
+ 624427200000,
+ 634705200000,
+ 656481600000,
+ 666759600000,
+ 687931200000,
+ 697604400000,
+ 719985600000,
+ 728449200000,
+ 750830400000,
+ 761713200000,
+ 782280000000,
+ 793162800000,
+ 813729600000,
+ 824007600000,
+ 844574400000,
+ 856062000000,
+ 876110400000,
+ 888721200000,
+ 908078400000,
+ 919566000000,
+ 938923200000,
+ 951620400000,
+ 970977600000,
+ 982465200000,
+ 1003032000000,
+ 1013914800000,
+ 1036296000000,
+ 1045364400000,
+ 1099368000000,
+ 1108868400000,
+ 1129435200000,
+ 1140318000000,
+ 1162699200000,
+ 1172372400000,
+ 1192334400000,
+ 1203217200000,
+ 1224388800000,
+ 1234666800000,
+ 1255838400000,
+ 1266721200000,
+ 1287288000000,
+ 1298170800000,
+ 1318737600000,
+ 1330225200000,
+ 1350792000000,
+ 1361070000000,
+ 1382241600000,
+ 1392519600000,
+ 1413691200000,
+ 1424574000000,
+ 1445140800000,
+ 1456023600000,
+ 1476590400000,
+ 1487473200000,
+ 1508040000000,
+ 1518922800000,
+ 1541304000000,
+ 1550372400000,
+ 1572753600000,
+ 1581822000000,
+ 1604203200000,
+ 1613876400000,
+ 1636257600000,
+ 1645326000000,
+ 1667707200000,
+ 1677380400000,
+ 1699156800000,
+ 1708225200000,
+ 1730606400000,
+ 1739674800000,
+ 1762056000000,
+ 1771729200000,
+ 1793505600000,
+ 1803178800000,
+ 1825560000000,
+ 1834628400000,
+ 1857009600000,
+ 1866078000000,
+ 1888459200000,
+ 1897527600000,
+ 1919908800000,
+ 1928977200000,
+ 1951358400000,
+ 1960426800000,
+ 1983412800000,
+ 1992481200000,
+ 2014862400000,
+ 2024535600000,
+ 2046312000000,
+ 2055380400000,
+ 2077761600000,
+ 2086830000000,
+ 2109211200000,
+ 2118884400000,
+ 2140660800000,
+ null
+ ],
+ "offsets": [
+ 224.3333,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 542861
+ },
+ {
+ "name": "America/Curacao",
+ "abbrs": [
+ "LMT",
+ "-0430",
+ "AST"
+ ],
+ "untils": [
+ -1826738653000,
+ -157750200000,
+ null
+ ],
+ "offsets": [
+ 275.7833,
+ 270,
+ 240
+ ],
+ "population": 153500
+ },
+ {
+ "name": "America/Danmarkshavn",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "GMT"
+ ],
+ "untils": [
+ -1686091520000,
+ 323845200000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 820465200000,
+ null
+ ],
+ "offsets": [
+ 74.6667,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 0
+ ],
+ "population": 8
+ },
+ {
+ "name": "America/Dawson_Creek",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "MST"
+ ],
+ "untils": [
+ -1632060000000,
+ -1615129200000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -715788000000,
+ -702486000000,
+ -684338400000,
+ -671036400000,
+ -652888800000,
+ -639586800000,
+ -620834400000,
+ -608137200000,
+ -589384800000,
+ -576082800000,
+ -557935200000,
+ -544633200000,
+ -526485600000,
+ -513183600000,
+ -495036000000,
+ -481734000000,
+ -463586400000,
+ -450284400000,
+ -431532000000,
+ -418230000000,
+ -400082400000,
+ -386780400000,
+ -368632800000,
+ -355330800000,
+ -337183200000,
+ -323881200000,
+ -305733600000,
+ -292431600000,
+ -273679200000,
+ -260982000000,
+ -242229600000,
+ -226508400000,
+ -210780000000,
+ -195058800000,
+ -179330400000,
+ -163609200000,
+ -147880800000,
+ -131554800000,
+ -116431200000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 84013200000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420
+ ],
+ "population": 11583
+ },
+ {
+ "name": "America/Dawson",
+ "abbrs": [
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YWT",
+ "YPT",
+ "YST",
+ "YDDT",
+ "YST",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1632056400000,
+ -1615125600000,
+ -1596978000000,
+ -1583164800000,
+ -880203600000,
+ -769395600000,
+ -765381600000,
+ -147884400000,
+ -131554800000,
+ 120646800000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 480,
+ 540,
+ 420,
+ 540,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 1319
+ },
+ {
+ "name": "America/Denver",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -1570374000000,
+ -1551628800000,
+ -1538924400000,
+ -1534089600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -147884400000,
+ -131558400000,
+ -116434800000,
+ -100108800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 2559000
+ },
+ {
+ "name": "America/Detroit",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "EST",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -2051202469000,
+ -1724083200000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -684349200000,
+ -671047200000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 332.1833,
+ 360,
+ 300,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 3672000
+ },
+ {
+ "name": "America/Dominica",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Edmonton",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1998663968000,
+ -1632063600000,
+ -1615132800000,
+ -1600614000000,
+ -1596816000000,
+ -1567954800000,
+ -1551628800000,
+ -1536505200000,
+ -1523203200000,
+ -1504450800000,
+ -1491753600000,
+ -1473001200000,
+ -1459699200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -715791600000,
+ -702489600000,
+ -84380400000,
+ -68659200000,
+ -21481200000,
+ -5760000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 136371600000,
+ 152092800000,
+ 167821200000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 453.8667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 1040000
+ },
+ {
+ "name": "America/Eirunepe",
+ "abbrs": [
+ "LMT",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1767208832000,
+ -1206950400000,
+ -1191355200000,
+ -1175367600000,
+ -1159819200000,
+ -633812400000,
+ -622062000000,
+ -602276400000,
+ -591825600000,
+ -570740400000,
+ -560203200000,
+ -539118000000,
+ -531345600000,
+ -191358000000,
+ -184190400000,
+ -155156400000,
+ -150062400000,
+ -128890800000,
+ -121118400000,
+ -99946800000,
+ -89582400000,
+ -68410800000,
+ -57960000000,
+ 499755600000,
+ 511243200000,
+ 530600400000,
+ 540273600000,
+ 562136400000,
+ 571204800000,
+ 750834000000,
+ 761716800000,
+ 1214283600000,
+ 1384056000000,
+ null
+ ],
+ "offsets": [
+ 279.4667,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 30901
+ },
+ {
+ "name": "America/El_Salvador",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1546279392000,
+ 547020000000,
+ 559717200000,
+ 578469600000,
+ 591166800000,
+ null
+ ],
+ "offsets": [
+ 356.8,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 1100000
+ },
+ {
+ "name": "America/Ensenada",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "PST",
+ "MST",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1514736000000,
+ -1451667600000,
+ -1343062800000,
+ -1234803600000,
+ -1222963200000,
+ -1207242000000,
+ -873820800000,
+ -769395600000,
+ -761677200000,
+ -686073600000,
+ -661539600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1175421600000,
+ 1193562000000,
+ 1207476000000,
+ 1225011600000,
+ 1238925600000,
+ 1256461200000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 468.0667,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Fort_Nelson",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "MST"
+ ],
+ "untils": [
+ -1632060000000,
+ -1615129200000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -715788000000,
+ -702486000000,
+ -684338400000,
+ -671036400000,
+ -652888800000,
+ -639586800000,
+ -620834400000,
+ -608137200000,
+ -589384800000,
+ -576082800000,
+ -557935200000,
+ -544633200000,
+ -526485600000,
+ -513183600000,
+ -495036000000,
+ -481734000000,
+ -463586400000,
+ -450284400000,
+ -431532000000,
+ -418230000000,
+ -400082400000,
+ -386780400000,
+ -368632800000,
+ -355330800000,
+ -337183200000,
+ -323881200000,
+ -305733600000,
+ -292431600000,
+ -273679200000,
+ -260982000000,
+ -242229600000,
+ -226508400000,
+ -210780000000,
+ -195058800000,
+ -179330400000,
+ -163609200000,
+ -147880800000,
+ -131554800000,
+ -116431200000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 136375200000,
+ 152096400000,
+ 167824800000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420
+ ],
+ "population": 3902
+ },
+ {
+ "name": "America/Fort_Wayne",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -900259200000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -386787600000,
+ -368640000000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Fortaleza",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1767216360000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -191365200000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 972180000000,
+ 1003028400000,
+ 1013911200000,
+ null
+ ],
+ "offsets": [
+ 154,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 3401000
+ },
+ {
+ "name": "America/Glace_Bay",
+ "abbrs": [
+ "LMT",
+ "AST",
+ "ADT",
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -2131646412000,
+ -1632074400000,
+ -1615143600000,
+ -880221600000,
+ -769395600000,
+ -765399600000,
+ -526500000000,
+ -513198000000,
+ 73461600000,
+ 89182800000,
+ 104911200000,
+ 120632400000,
+ 136360800000,
+ 152082000000,
+ 167810400000,
+ 183531600000,
+ 199260000000,
+ 215586000000,
+ 230709600000,
+ 247035600000,
+ 262764000000,
+ 278485200000,
+ 294213600000,
+ 309934800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544600800000,
+ 562136400000,
+ 576050400000,
+ 594190800000,
+ 607500000000,
+ 625640400000,
+ 638949600000,
+ 657090000000,
+ 671004000000,
+ 688539600000,
+ 702453600000,
+ 719989200000,
+ 733903200000,
+ 752043600000,
+ 765352800000,
+ 783493200000,
+ 796802400000,
+ 814942800000,
+ 828856800000,
+ 846392400000,
+ 860306400000,
+ 877842000000,
+ 891756000000,
+ 909291600000,
+ 923205600000,
+ 941346000000,
+ 954655200000,
+ 972795600000,
+ 986104800000,
+ 1004245200000,
+ 1018159200000,
+ 1035694800000,
+ 1049608800000,
+ 1067144400000,
+ 1081058400000,
+ 1099198800000,
+ 1112508000000,
+ 1130648400000,
+ 1143957600000,
+ 1162098000000,
+ 1173592800000,
+ 1194152400000,
+ 1205042400000,
+ 1225602000000,
+ 1236492000000,
+ 1257051600000,
+ 1268546400000,
+ 1289106000000,
+ 1299996000000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 239.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 19076
+ },
+ {
+ "name": "America/Godthab",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1686083584000,
+ 323845200000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 206.9333,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 16583
+ },
+ {
+ "name": "America/Goose_Bay",
+ "abbrs": [
+ "NST",
+ "NDT",
+ "NST",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADDT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -1632076148000,
+ -1615145348000,
+ -1096921748000,
+ -1061670600000,
+ -1048973400000,
+ -1030221000000,
+ -1017523800000,
+ -998771400000,
+ -986074200000,
+ -966717000000,
+ -954624600000,
+ -935267400000,
+ -922570200000,
+ -903817800000,
+ -891120600000,
+ -872368200000,
+ -769395600000,
+ -765401400000,
+ -746044200000,
+ -733347000000,
+ -714594600000,
+ -701897400000,
+ -683145000000,
+ -670447800000,
+ -651695400000,
+ -638998200000,
+ -619641000000,
+ -606943800000,
+ -589401000000,
+ -576099000000,
+ -557951400000,
+ -544649400000,
+ -526501800000,
+ -513199800000,
+ -495052200000,
+ -481750200000,
+ -463602600000,
+ -450300600000,
+ -431548200000,
+ -418246200000,
+ -400098600000,
+ -386796600000,
+ -368649000000,
+ -355347000000,
+ -337199400000,
+ -323897400000,
+ -305749800000,
+ -289423800000,
+ -273695400000,
+ -257974200000,
+ -242245800000,
+ -226524600000,
+ -210796200000,
+ -195075000000,
+ -179346600000,
+ -163625400000,
+ -147897000000,
+ -131571000000,
+ -119903400000,
+ -116445600000,
+ -100119600000,
+ -84391200000,
+ -68670000000,
+ -52941600000,
+ -37220400000,
+ -21492000000,
+ -5770800000,
+ 9957600000,
+ 25678800000,
+ 41407200000,
+ 57733200000,
+ 73461600000,
+ 89182800000,
+ 104911200000,
+ 120632400000,
+ 136360800000,
+ 152082000000,
+ 167810400000,
+ 183531600000,
+ 199260000000,
+ 215586000000,
+ 230709600000,
+ 247035600000,
+ 262764000000,
+ 278485200000,
+ 294213600000,
+ 309934800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544593660000,
+ 562129260000,
+ 576043260000,
+ 594180060000,
+ 607492860000,
+ 625633260000,
+ 638942460000,
+ 657082860000,
+ 670996860000,
+ 688532460000,
+ 702446460000,
+ 719982060000,
+ 733896060000,
+ 752036460000,
+ 765345660000,
+ 783486060000,
+ 796795260000,
+ 814935660000,
+ 828849660000,
+ 846385260000,
+ 860299260000,
+ 877834860000,
+ 891748860000,
+ 909284460000,
+ 923198460000,
+ 941338860000,
+ 954648060000,
+ 972788460000,
+ 986097660000,
+ 1004238060000,
+ 1018152060000,
+ 1035687660000,
+ 1049601660000,
+ 1067137260000,
+ 1081051260000,
+ 1099191660000,
+ 1112500860000,
+ 1130641260000,
+ 1143950460000,
+ 1162090860000,
+ 1173585660000,
+ 1194145260000,
+ 1205035260000,
+ 1225594860000,
+ 1236484860000,
+ 1257044460000,
+ 1268539260000,
+ 1289098860000,
+ 1299988860000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 120,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 7552
+ },
+ {
+ "name": "America/Grand_Turk",
+ "abbrs": [
+ "KMT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "AST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1827687170000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 307.1667,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 3720
+ },
+ {
+ "name": "America/Grenada",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Guadeloupe",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Guatemala",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1617040676000,
+ 123055200000,
+ 130914000000,
+ 422344800000,
+ 433054800000,
+ 669708000000,
+ 684219600000,
+ 1146376800000,
+ 1159678800000,
+ null
+ ],
+ "offsets": [
+ 362.0667,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 1289000
+ },
+ {
+ "name": "America/Guayaquil",
+ "abbrs": [
+ "QMT",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1230749160000,
+ 722926800000,
+ 728884800000,
+ null
+ ],
+ "offsets": [
+ 314,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 2700000
+ },
+ {
+ "name": "America/Guyana",
+ "abbrs": [
+ "LMT",
+ "-0345",
+ "-03",
+ "-04"
+ ],
+ "untils": [
+ -1730578040000,
+ 176010300000,
+ 662698800000,
+ null
+ ],
+ "offsets": [
+ 232.6667,
+ 225,
+ 180,
+ 240
+ ],
+ "population": 799613
+ },
+ {
+ "name": "America/Halifax",
+ "abbrs": [
+ "LMT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -2131645536000,
+ -1696276800000,
+ -1680469200000,
+ -1632074400000,
+ -1615143600000,
+ -1566763200000,
+ -1557090000000,
+ -1535486400000,
+ -1524949200000,
+ -1504468800000,
+ -1493413200000,
+ -1472414400000,
+ -1461963600000,
+ -1440964800000,
+ -1429390800000,
+ -1409515200000,
+ -1396731600000,
+ -1376856000000,
+ -1366491600000,
+ -1346616000000,
+ -1333832400000,
+ -1313956800000,
+ -1303678800000,
+ -1282507200000,
+ -1272661200000,
+ -1251057600000,
+ -1240088400000,
+ -1219608000000,
+ -1207429200000,
+ -1188763200000,
+ -1175979600000,
+ -1157313600000,
+ -1143925200000,
+ -1124049600000,
+ -1113771600000,
+ -1091390400000,
+ -1081026000000,
+ -1059854400000,
+ -1050786000000,
+ -1030910400000,
+ -1018126800000,
+ -999460800000,
+ -986677200000,
+ -965592000000,
+ -955227600000,
+ -935956800000,
+ -923173200000,
+ -904507200000,
+ -891723600000,
+ -880221600000,
+ -769395600000,
+ -765399600000,
+ -747252000000,
+ -733950000000,
+ -715802400000,
+ -702500400000,
+ -684352800000,
+ -671050800000,
+ -652903200000,
+ -639601200000,
+ -589399200000,
+ -576097200000,
+ -557949600000,
+ -544647600000,
+ -526500000000,
+ -513198000000,
+ -495050400000,
+ -481748400000,
+ -431546400000,
+ -418244400000,
+ -400096800000,
+ -386794800000,
+ -368647200000,
+ -355345200000,
+ -337197600000,
+ -323895600000,
+ -242244000000,
+ -226522800000,
+ -210794400000,
+ -195073200000,
+ -179344800000,
+ -163623600000,
+ -147895200000,
+ -131569200000,
+ -116445600000,
+ -100119600000,
+ -84391200000,
+ -68670000000,
+ -52941600000,
+ -37220400000,
+ -21492000000,
+ -5770800000,
+ 9957600000,
+ 25678800000,
+ 41407200000,
+ 57733200000,
+ 73461600000,
+ 89182800000,
+ 104911200000,
+ 120632400000,
+ 136360800000,
+ 152082000000,
+ 167810400000,
+ 183531600000,
+ 199260000000,
+ 215586000000,
+ 230709600000,
+ 247035600000,
+ 262764000000,
+ 278485200000,
+ 294213600000,
+ 309934800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544600800000,
+ 562136400000,
+ 576050400000,
+ 594190800000,
+ 607500000000,
+ 625640400000,
+ 638949600000,
+ 657090000000,
+ 671004000000,
+ 688539600000,
+ 702453600000,
+ 719989200000,
+ 733903200000,
+ 752043600000,
+ 765352800000,
+ 783493200000,
+ 796802400000,
+ 814942800000,
+ 828856800000,
+ 846392400000,
+ 860306400000,
+ 877842000000,
+ 891756000000,
+ 909291600000,
+ 923205600000,
+ 941346000000,
+ 954655200000,
+ 972795600000,
+ 986104800000,
+ 1004245200000,
+ 1018159200000,
+ 1035694800000,
+ 1049608800000,
+ 1067144400000,
+ 1081058400000,
+ 1099198800000,
+ 1112508000000,
+ 1130648400000,
+ 1143957600000,
+ 1162098000000,
+ 1173592800000,
+ 1194152400000,
+ 1205042400000,
+ 1225602000000,
+ 1236492000000,
+ 1257051600000,
+ 1268546400000,
+ 1289106000000,
+ 1299996000000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 254.4,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 390095
+ },
+ {
+ "name": "America/Havana",
+ "abbrs": [
+ "HMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1402813824000,
+ -1311534000000,
+ -1300996800000,
+ -933534000000,
+ -925675200000,
+ -902084400000,
+ -893620800000,
+ -870030000000,
+ -862171200000,
+ -775681200000,
+ -767822400000,
+ -744231600000,
+ -736372800000,
+ -144702000000,
+ -134251200000,
+ -113425200000,
+ -102542400000,
+ -86295600000,
+ -72907200000,
+ -54154800000,
+ -41457600000,
+ -21495600000,
+ -5774400000,
+ 9954000000,
+ 25675200000,
+ 41403600000,
+ 57729600000,
+ 73458000000,
+ 87364800000,
+ 104907600000,
+ 118900800000,
+ 136357200000,
+ 150436800000,
+ 167806800000,
+ 183528000000,
+ 199256400000,
+ 215582400000,
+ 230706000000,
+ 247032000000,
+ 263365200000,
+ 276667200000,
+ 290581200000,
+ 308721600000,
+ 322030800000,
+ 340171200000,
+ 358318800000,
+ 371620800000,
+ 389768400000,
+ 403070400000,
+ 421218000000,
+ 434520000000,
+ 452667600000,
+ 466574400000,
+ 484117200000,
+ 498024000000,
+ 511333200000,
+ 529473600000,
+ 542782800000,
+ 560923200000,
+ 574837200000,
+ 592372800000,
+ 606286800000,
+ 623822400000,
+ 638946000000,
+ 655876800000,
+ 671000400000,
+ 687330000000,
+ 702450000000,
+ 718779600000,
+ 733899600000,
+ 750229200000,
+ 765349200000,
+ 781678800000,
+ 796798800000,
+ 813128400000,
+ 828853200000,
+ 844578000000,
+ 860302800000,
+ 876632400000,
+ 891147600000,
+ 909291600000,
+ 922597200000,
+ 941346000000,
+ 954651600000,
+ 972795600000,
+ 986101200000,
+ 1004245200000,
+ 1018155600000,
+ 1035694800000,
+ 1049605200000,
+ 1067144400000,
+ 1080450000000,
+ 1162098000000,
+ 1173589200000,
+ 1193547600000,
+ 1205643600000,
+ 1224997200000,
+ 1236488400000,
+ 1256446800000,
+ 1268542800000,
+ 1288501200000,
+ 1300597200000,
+ 1321160400000,
+ 1333256400000,
+ 1352005200000,
+ 1362891600000,
+ 1383454800000,
+ 1394341200000,
+ 1414904400000,
+ 1425790800000,
+ 1446354000000,
+ 1457845200000,
+ 1478408400000,
+ 1489294800000,
+ 1509858000000,
+ 1520744400000,
+ 1541307600000,
+ 1552194000000,
+ 1572757200000,
+ 1583643600000,
+ 1604206800000,
+ 1615698000000,
+ 1636261200000,
+ 1647147600000,
+ 1667710800000,
+ 1678597200000,
+ 1699160400000,
+ 1710046800000,
+ 1730610000000,
+ 1741496400000,
+ 1762059600000,
+ 1772946000000,
+ 1793509200000,
+ 1805000400000,
+ 1825563600000,
+ 1836450000000,
+ 1857013200000,
+ 1867899600000,
+ 1888462800000,
+ 1899349200000,
+ 1919912400000,
+ 1930798800000,
+ 1951362000000,
+ 1962853200000,
+ 1983416400000,
+ 1994302800000,
+ 2014866000000,
+ 2025752400000,
+ 2046315600000,
+ 2057202000000,
+ 2077765200000,
+ 2088651600000,
+ 2109214800000,
+ 2120101200000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 329.6,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 2130000
+ },
+ {
+ "name": "America/Hermosillo",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "PST",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ -873828000000,
+ -661539600000,
+ 28800000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ null
+ ],
+ "offsets": [
+ 443.8667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 480,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 641791
+ },
+ {
+ "name": "America/Indiana/Indianapolis",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -900259200000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -386787600000,
+ -368640000000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Knox",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -447267600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -257965200000,
+ -242236800000,
+ -195066000000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Marengo",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -589392000000,
+ -576090000000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -450291600000,
+ -431539200000,
+ -418237200000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -323888400000,
+ -305740800000,
+ -292438800000,
+ -273686400000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152089200000,
+ 162370800000,
+ 183535200000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Petersburg",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -462996000000,
+ -450291600000,
+ -431539200000,
+ -418237200000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -323888400000,
+ -305740800000,
+ -292438800000,
+ -273686400000,
+ -257965200000,
+ -242236800000,
+ -226515600000,
+ -210787200000,
+ -195066000000,
+ -179337600000,
+ -163616400000,
+ -147888000000,
+ -100112400000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Tell_City",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -462996000000,
+ -450291600000,
+ -431539200000,
+ -418237200000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -323888400000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -260989200000,
+ -242236800000,
+ -226515600000,
+ -210787200000,
+ -195066000000,
+ -179337600000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Vevay",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -495043200000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Vincennes",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -462996000000,
+ -450291600000,
+ -431539200000,
+ -418237200000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -323888400000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -260989200000,
+ -242236800000,
+ -226515600000,
+ -210787200000,
+ -195066000000,
+ -179337600000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 300,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indiana/Winamac",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "CDT",
+ "CST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -447267600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -323888400000,
+ -305740800000,
+ -292438800000,
+ -273686400000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 300,
+ 360,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Indianapolis",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -900259200000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -386787600000,
+ -368640000000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Inuvik",
+ "abbrs": [
+ "-00",
+ "PST",
+ "PDDT",
+ "PST",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -536457600000,
+ -147888000000,
+ -131558400000,
+ 294228000000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 480,
+ 360,
+ 480,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 3463
+ },
+ {
+ "name": "America/Iqaluit",
+ "abbrs": [
+ "-00",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -865296000000,
+ -769395600000,
+ -765396000000,
+ -147898800000,
+ -131569200000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954662400000,
+ 972802800000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 240,
+ 240,
+ 300,
+ 180,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 6699
+ },
+ {
+ "name": "America/Jamaica",
+ "abbrs": [
+ "KMT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1827687170000,
+ 126687600000,
+ 152085600000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ null
+ ],
+ "offsets": [
+ 307.1667,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 937700
+ },
+ {
+ "name": "America/Jujuy",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 657086400000,
+ 669178800000,
+ 686721600000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Juneau",
+ "abbrs": [
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "YDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "YST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341402400000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 439030800000,
+ 452084400000,
+ 467805600000,
+ 483534000000,
+ 499255200000,
+ 514983600000,
+ 530704800000,
+ 544618800000,
+ 562154400000,
+ 576068400000,
+ 594208800000,
+ 607518000000,
+ 625658400000,
+ 638967600000,
+ 657108000000,
+ 671022000000,
+ 688557600000,
+ 702471600000,
+ 720007200000,
+ 733921200000,
+ 752061600000,
+ 765370800000,
+ 783511200000,
+ 796820400000,
+ 814960800000,
+ 828874800000,
+ 846410400000,
+ 860324400000,
+ 877860000000,
+ 891774000000,
+ 909309600000,
+ 923223600000,
+ 941364000000,
+ 954673200000,
+ 972813600000,
+ 986122800000,
+ 1004263200000,
+ 1018177200000,
+ 1035712800000,
+ 1049626800000,
+ 1067162400000,
+ 1081076400000,
+ 1099216800000,
+ 1112526000000,
+ 1130666400000,
+ 1143975600000,
+ 1162116000000,
+ 1173610800000,
+ 1194170400000,
+ 1205060400000,
+ 1225620000000,
+ 1236510000000,
+ 1257069600000,
+ 1268564400000,
+ 1289124000000,
+ 1300014000000,
+ 1320573600000,
+ 1331463600000,
+ 1352023200000,
+ 1362913200000,
+ 1383472800000,
+ 1394362800000,
+ 1414922400000,
+ 1425812400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 480,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 540,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 32660
+ },
+ {
+ "name": "America/Kentucky/Louisville",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -1535904000000,
+ -1525280400000,
+ -905097600000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -757360800000,
+ -744224400000,
+ -715795200000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -450291600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -384368400000,
+ -368640000000,
+ -352918800000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -266432400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152089200000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Kentucky/Monticello",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Knox_IN",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -447267600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -257965200000,
+ -242236800000,
+ -195066000000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Kralendijk",
+ "abbrs": [
+ "LMT",
+ "-0430",
+ "AST"
+ ],
+ "untils": [
+ -1826738653000,
+ -157750200000,
+ null
+ ],
+ "offsets": [
+ 275.7833,
+ 270,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/La_Paz",
+ "abbrs": [
+ "CMT",
+ "BST",
+ "-04"
+ ],
+ "untils": [
+ -1205954844000,
+ -1192307244000,
+ null
+ ],
+ "offsets": [
+ 272.6,
+ 212.6,
+ 240
+ ],
+ "population": 1907000
+ },
+ {
+ "name": "America/Lima",
+ "abbrs": [
+ "LMT",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1938538284000,
+ -1009825200000,
+ -1002052800000,
+ -986756400000,
+ -971035200000,
+ -955306800000,
+ -939585600000,
+ 504939600000,
+ 512712000000,
+ 536475600000,
+ 544248000000,
+ 631170000000,
+ 638942400000,
+ 757400400000,
+ 765172800000,
+ null
+ ],
+ "offsets": [
+ 308.6,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 10750000
+ },
+ {
+ "name": "America/Los_Angeles",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1633269600000,
+ -1615129200000,
+ -1601820000000,
+ -1583679600000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -687967140000,
+ -662655600000,
+ -620838000000,
+ -608137200000,
+ -589388400000,
+ -576082800000,
+ -557938800000,
+ -544633200000,
+ -526489200000,
+ -513183600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ -273682800000,
+ -260982000000,
+ -242233200000,
+ -226508400000,
+ -210783600000,
+ -195058800000,
+ -179334000000,
+ -163609200000,
+ -147884400000,
+ -131554800000,
+ -116434800000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 15058000
+ },
+ {
+ "name": "America/Louisville",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -1535904000000,
+ -1525280400000,
+ -905097600000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -757360800000,
+ -744224400000,
+ -715795200000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -450291600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -384368400000,
+ -368640000000,
+ -352918800000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -266432400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152089200000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Lower_Princes",
+ "abbrs": [
+ "LMT",
+ "-0430",
+ "AST"
+ ],
+ "untils": [
+ -1826738653000,
+ -157750200000,
+ null
+ ],
+ "offsets": [
+ 275.7833,
+ 270,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Maceio",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1767217028000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -191365200000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 813726000000,
+ 824004000000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 972180000000,
+ 1003028400000,
+ 1013911200000,
+ null
+ ],
+ "offsets": [
+ 142.8667,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 932078
+ },
+ {
+ "name": "America/Managua",
+ "abbrs": [
+ "MMT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1121105688000,
+ 105084000000,
+ 161758800000,
+ 290584800000,
+ 299134800000,
+ 322034400000,
+ 330584400000,
+ 694260000000,
+ 717310800000,
+ 725868000000,
+ 852094800000,
+ 1113112800000,
+ 1128229200000,
+ 1146384000000,
+ 1159682400000,
+ null
+ ],
+ "offsets": [
+ 345.2,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 2223000
+ },
+ {
+ "name": "America/Manaus",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04"
+ ],
+ "untils": [
+ -1767211196000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ 750830400000,
+ 761713200000,
+ null
+ ],
+ "offsets": [
+ 240.0667,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 1893000
+ },
+ {
+ "name": "America/Marigot",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Martinique",
+ "abbrs": [
+ "FFMT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -1851537340000,
+ 323841600000,
+ 338958000000,
+ null
+ ],
+ "offsets": [
+ 244.3333,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 386486
+ },
+ {
+ "name": "America/Matamoros",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1514743200000,
+ 576057600000,
+ 594198000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 989136000000,
+ 1001833200000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1175414400000,
+ 1193554800000,
+ 1207468800000,
+ 1225004400000,
+ 1238918400000,
+ 1256454000000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 400,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 449815
+ },
+ {
+ "name": "America/Mazatlan",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "PST",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ -873828000000,
+ -661539600000,
+ 28800000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 989139600000,
+ 1001836800000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1175418000000,
+ 1193558400000,
+ 1207472400000,
+ 1225008000000,
+ 1238922000000,
+ 1256457600000,
+ 1270371600000,
+ 1288512000000,
+ 1301821200000,
+ 1319961600000,
+ 1333270800000,
+ 1351411200000,
+ 1365325200000,
+ 1382860800000,
+ 1396774800000,
+ 1414310400000,
+ 1428224400000,
+ 1445760000000,
+ 1459674000000,
+ 1477814400000,
+ 1491123600000,
+ 1509264000000,
+ 1522573200000,
+ 1540713600000,
+ 1554627600000,
+ 1572163200000,
+ 1586077200000,
+ 1603612800000,
+ 1617526800000,
+ 1635667200000,
+ 1648976400000,
+ 1667116800000,
+ 1680426000000,
+ 1698566400000,
+ 1712480400000,
+ 1730016000000,
+ 1743930000000,
+ 1761465600000,
+ 1775379600000,
+ 1792915200000,
+ 1806829200000,
+ 1824969600000,
+ 1838278800000,
+ 1856419200000,
+ 1869728400000,
+ 1887868800000,
+ 1901782800000,
+ 1919318400000,
+ 1933232400000,
+ 1950768000000,
+ 1964682000000,
+ 1982822400000,
+ 1996131600000,
+ 2014272000000,
+ 2027581200000,
+ 2045721600000,
+ 2059030800000,
+ 2077171200000,
+ 2091085200000,
+ 2108620800000,
+ 2122534800000,
+ 2140070400000,
+ null
+ ],
+ "offsets": [
+ 425.6667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 480,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 438434
+ },
+ {
+ "name": "America/Mendoza",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 655963200000,
+ 667796400000,
+ 687499200000,
+ 699418800000,
+ 719380800000,
+ 731469600000,
+ 1085281200000,
+ 1096171200000,
+ 1198983600000,
+ 1205632800000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 120,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Menominee",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -116438400000,
+ -100112400000,
+ -21484800000,
+ 104914800000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 8494
+ },
+ {
+ "name": "America/Merida",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1514743200000,
+ 377935200000,
+ 407653200000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 989136000000,
+ 1001833200000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1175414400000,
+ 1193554800000,
+ 1207468800000,
+ 1225004400000,
+ 1238918400000,
+ 1256454000000,
+ 1270368000000,
+ 1288508400000,
+ 1301817600000,
+ 1319958000000,
+ 1333267200000,
+ 1351407600000,
+ 1365321600000,
+ 1382857200000,
+ 1396771200000,
+ 1414306800000,
+ 1428220800000,
+ 1445756400000,
+ 1459670400000,
+ 1477810800000,
+ 1491120000000,
+ 1509260400000,
+ 1522569600000,
+ 1540710000000,
+ 1554624000000,
+ 1572159600000,
+ 1586073600000,
+ 1603609200000,
+ 1617523200000,
+ 1635663600000,
+ 1648972800000,
+ 1667113200000,
+ 1680422400000,
+ 1698562800000,
+ 1712476800000,
+ 1730012400000,
+ 1743926400000,
+ 1761462000000,
+ 1775376000000,
+ 1792911600000,
+ 1806825600000,
+ 1824966000000,
+ 1838275200000,
+ 1856415600000,
+ 1869724800000,
+ 1887865200000,
+ 1901779200000,
+ 1919314800000,
+ 1933228800000,
+ 1950764400000,
+ 1964678400000,
+ 1982818800000,
+ 1996128000000,
+ 2014268400000,
+ 2027577600000,
+ 2045718000000,
+ 2059027200000,
+ 2077167600000,
+ 2091081600000,
+ 2108617200000,
+ 2122531200000,
+ 2140066800000,
+ null
+ ],
+ "offsets": [
+ 358.4667,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 1111000
+ },
+ {
+ "name": "America/Metlakatla",
+ "abbrs": [
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 1375
+ },
+ {
+ "name": "America/Mexico_City",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ -975261600000,
+ -963169200000,
+ -917114400000,
+ -907354800000,
+ -821901600000,
+ -810068400000,
+ -627501600000,
+ -612990000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 989136000000,
+ 1001833200000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1175414400000,
+ 1193554800000,
+ 1207468800000,
+ 1225004400000,
+ 1238918400000,
+ 1256454000000,
+ 1270368000000,
+ 1288508400000,
+ 1301817600000,
+ 1319958000000,
+ 1333267200000,
+ 1351407600000,
+ 1365321600000,
+ 1382857200000,
+ 1396771200000,
+ 1414306800000,
+ 1428220800000,
+ 1445756400000,
+ 1459670400000,
+ 1477810800000,
+ 1491120000000,
+ 1509260400000,
+ 1522569600000,
+ 1540710000000,
+ 1554624000000,
+ 1572159600000,
+ 1586073600000,
+ 1603609200000,
+ 1617523200000,
+ 1635663600000,
+ 1648972800000,
+ 1667113200000,
+ 1680422400000,
+ 1698562800000,
+ 1712476800000,
+ 1730012400000,
+ 1743926400000,
+ 1761462000000,
+ 1775376000000,
+ 1792911600000,
+ 1806825600000,
+ 1824966000000,
+ 1838275200000,
+ 1856415600000,
+ 1869724800000,
+ 1887865200000,
+ 1901779200000,
+ 1919314800000,
+ 1933228800000,
+ 1950764400000,
+ 1964678400000,
+ 1982818800000,
+ 1996128000000,
+ 2014268400000,
+ 2027577600000,
+ 2045718000000,
+ 2059027200000,
+ 2077167600000,
+ 2091081600000,
+ 2108617200000,
+ 2122531200000,
+ 2140066800000,
+ null
+ ],
+ "offsets": [
+ 396.6,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 20063000
+ },
+ {
+ "name": "America/Miquelon",
+ "abbrs": [
+ "LMT",
+ "AST",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1850328920000,
+ 326001600000,
+ 544597200000,
+ 562132800000,
+ 576046800000,
+ 594187200000,
+ 607496400000,
+ 625636800000,
+ 638946000000,
+ 657086400000,
+ 671000400000,
+ 688536000000,
+ 702450000000,
+ 719985600000,
+ 733899600000,
+ 752040000000,
+ 765349200000,
+ 783489600000,
+ 796798800000,
+ 814939200000,
+ 828853200000,
+ 846388800000,
+ 860302800000,
+ 877838400000,
+ 891752400000,
+ 909288000000,
+ 923202000000,
+ 941342400000,
+ 954651600000,
+ 972792000000,
+ 986101200000,
+ 1004241600000,
+ 1018155600000,
+ 1035691200000,
+ 1049605200000,
+ 1067140800000,
+ 1081054800000,
+ 1099195200000,
+ 1112504400000,
+ 1130644800000,
+ 1143954000000,
+ 1162094400000,
+ 1173589200000,
+ 1194148800000,
+ 1205038800000,
+ 1225598400000,
+ 1236488400000,
+ 1257048000000,
+ 1268542800000,
+ 1289102400000,
+ 1299992400000,
+ 1320552000000,
+ 1331442000000,
+ 1352001600000,
+ 1362891600000,
+ 1383451200000,
+ 1394341200000,
+ 1414900800000,
+ 1425790800000,
+ 1446350400000,
+ 1457845200000,
+ 1478404800000,
+ 1489294800000,
+ 1509854400000,
+ 1520744400000,
+ 1541304000000,
+ 1552194000000,
+ 1572753600000,
+ 1583643600000,
+ 1604203200000,
+ 1615698000000,
+ 1636257600000,
+ 1647147600000,
+ 1667707200000,
+ 1678597200000,
+ 1699156800000,
+ 1710046800000,
+ 1730606400000,
+ 1741496400000,
+ 1762056000000,
+ 1772946000000,
+ 1793505600000,
+ 1805000400000,
+ 1825560000000,
+ 1836450000000,
+ 1857009600000,
+ 1867899600000,
+ 1888459200000,
+ 1899349200000,
+ 1919908800000,
+ 1930798800000,
+ 1951358400000,
+ 1962853200000,
+ 1983412800000,
+ 1994302800000,
+ 2014862400000,
+ 2025752400000,
+ 2046312000000,
+ 2057202000000,
+ 2077761600000,
+ 2088651600000,
+ 2109211200000,
+ 2120101200000,
+ 2140660800000,
+ null
+ ],
+ "offsets": [
+ 224.6667,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 6080
+ },
+ {
+ "name": "America/Moncton",
+ "abbrs": [
+ "EST",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -2131642800000,
+ -1632074400000,
+ -1615143600000,
+ -1153681200000,
+ -1145822400000,
+ -1122231600000,
+ -1114372800000,
+ -1090782000000,
+ -1082923200000,
+ -1059332400000,
+ -1051473600000,
+ -1027882800000,
+ -1020024000000,
+ -996433200000,
+ -988574400000,
+ -965674800000,
+ -955396800000,
+ -934743600000,
+ -923947200000,
+ -904503600000,
+ -891892800000,
+ -880221600000,
+ -769395600000,
+ -765399600000,
+ -747252000000,
+ -733950000000,
+ -715802400000,
+ -702500400000,
+ -684352800000,
+ -671050800000,
+ -652903200000,
+ -639601200000,
+ -620848800000,
+ -608151600000,
+ -589399200000,
+ -576097200000,
+ -557949600000,
+ -544647600000,
+ -526500000000,
+ -513198000000,
+ -495050400000,
+ -481748400000,
+ -463600800000,
+ -450298800000,
+ -431546400000,
+ -418244400000,
+ -400096800000,
+ -384375600000,
+ -368647200000,
+ -352926000000,
+ -337197600000,
+ -321476400000,
+ -305748000000,
+ -289422000000,
+ -273693600000,
+ -257972400000,
+ -242244000000,
+ -226522800000,
+ -210794400000,
+ -195073200000,
+ -179344800000,
+ -163623600000,
+ -147895200000,
+ -131569200000,
+ -116445600000,
+ -100119600000,
+ -84391200000,
+ -68670000000,
+ -52941600000,
+ -37220400000,
+ -21492000000,
+ -5770800000,
+ 9957600000,
+ 25678800000,
+ 41407200000,
+ 57733200000,
+ 73461600000,
+ 89182800000,
+ 136360800000,
+ 152082000000,
+ 167810400000,
+ 183531600000,
+ 199260000000,
+ 215586000000,
+ 230709600000,
+ 247035600000,
+ 262764000000,
+ 278485200000,
+ 294213600000,
+ 309934800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544600800000,
+ 562136400000,
+ 576050400000,
+ 594190800000,
+ 607500000000,
+ 625640400000,
+ 638949600000,
+ 657090000000,
+ 671004000000,
+ 688539600000,
+ 702453600000,
+ 719989200000,
+ 733896060000,
+ 752036460000,
+ 765345660000,
+ 783486060000,
+ 796795260000,
+ 814935660000,
+ 828849660000,
+ 846385260000,
+ 860299260000,
+ 877834860000,
+ 891748860000,
+ 909284460000,
+ 923198460000,
+ 941338860000,
+ 954648060000,
+ 972788460000,
+ 986097660000,
+ 1004238060000,
+ 1018152060000,
+ 1035687660000,
+ 1049601660000,
+ 1067137260000,
+ 1081051260000,
+ 1099191660000,
+ 1112500860000,
+ 1130641260000,
+ 1143950460000,
+ 1162090860000,
+ 1173592800000,
+ 1194152400000,
+ 1205042400000,
+ 1225602000000,
+ 1236492000000,
+ 1257051600000,
+ 1268546400000,
+ 1289106000000,
+ 1299996000000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 64128
+ },
+ {
+ "name": "America/Monterrey",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1514743200000,
+ 576057600000,
+ 594198000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 989136000000,
+ 1001833200000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1175414400000,
+ 1193554800000,
+ 1207468800000,
+ 1225004400000,
+ 1238918400000,
+ 1256454000000,
+ 1270368000000,
+ 1288508400000,
+ 1301817600000,
+ 1319958000000,
+ 1333267200000,
+ 1351407600000,
+ 1365321600000,
+ 1382857200000,
+ 1396771200000,
+ 1414306800000,
+ 1428220800000,
+ 1445756400000,
+ 1459670400000,
+ 1477810800000,
+ 1491120000000,
+ 1509260400000,
+ 1522569600000,
+ 1540710000000,
+ 1554624000000,
+ 1572159600000,
+ 1586073600000,
+ 1603609200000,
+ 1617523200000,
+ 1635663600000,
+ 1648972800000,
+ 1667113200000,
+ 1680422400000,
+ 1698562800000,
+ 1712476800000,
+ 1730012400000,
+ 1743926400000,
+ 1761462000000,
+ 1775376000000,
+ 1792911600000,
+ 1806825600000,
+ 1824966000000,
+ 1838275200000,
+ 1856415600000,
+ 1869724800000,
+ 1887865200000,
+ 1901779200000,
+ 1919314800000,
+ 1933228800000,
+ 1950764400000,
+ 1964678400000,
+ 1982818800000,
+ 1996128000000,
+ 2014268400000,
+ 2027577600000,
+ 2045718000000,
+ 2059027200000,
+ 2077167600000,
+ 2091081600000,
+ 2108617200000,
+ 2122531200000,
+ 2140066800000,
+ null
+ ],
+ "offsets": [
+ 401.2667,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 4083000
+ },
+ {
+ "name": "America/Montevideo",
+ "abbrs": [
+ "LMT",
+ "MMT",
+ "-04",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0330",
+ "-03",
+ "-0230",
+ "-03",
+ "-0230",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-0230",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-0130",
+ "-0230",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1942690509000,
+ -1567455309000,
+ -1459627200000,
+ -1443819600000,
+ -1428006600000,
+ -1412283600000,
+ -1396470600000,
+ -1380747600000,
+ -1141590600000,
+ -1128286800000,
+ -1110141000000,
+ -1096837200000,
+ -1078691400000,
+ -1065387600000,
+ -1047241800000,
+ -1033938000000,
+ -1015187400000,
+ -1002488400000,
+ -983737800000,
+ -971038800000,
+ -954707400000,
+ -938984400000,
+ -920838600000,
+ -907534800000,
+ -896819400000,
+ -853621200000,
+ -845847000000,
+ -334789200000,
+ -319671000000,
+ -314226000000,
+ -309996000000,
+ -149720400000,
+ -134604000000,
+ -50446800000,
+ -34205400000,
+ 9860400000,
+ 14176800000,
+ 72846000000,
+ 80100000000,
+ 127278000000,
+ 132111000000,
+ 147234600000,
+ 156913200000,
+ 165376800000,
+ 219812400000,
+ 226461600000,
+ 250052400000,
+ 257911200000,
+ 282711600000,
+ 289360800000,
+ 294202800000,
+ 322020000000,
+ 566449200000,
+ 573012000000,
+ 597812400000,
+ 605066400000,
+ 625633200000,
+ 635911200000,
+ 656478000000,
+ 667965600000,
+ 688532400000,
+ 699415200000,
+ 719377200000,
+ 730864800000,
+ 1095562800000,
+ 1111896000000,
+ 1128834000000,
+ 1142136000000,
+ 1159678800000,
+ 1173585600000,
+ 1191733200000,
+ 1205035200000,
+ 1223182800000,
+ 1236484800000,
+ 1254632400000,
+ 1268539200000,
+ 1286082000000,
+ 1299988800000,
+ 1317531600000,
+ 1331438400000,
+ 1349586000000,
+ 1362888000000,
+ 1381035600000,
+ 1394337600000,
+ 1412485200000,
+ 1425787200000,
+ null
+ ],
+ "offsets": [
+ 224.85,
+ 224.85,
+ 240,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 210,
+ 180,
+ 150,
+ 180,
+ 150,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 150,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 90,
+ 150,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 1700000
+ },
+ {
+ "name": "America/Montreal",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1632070800000,
+ -1615140000000,
+ -1601753400000,
+ -1583697600000,
+ -1567357200000,
+ -1554667200000,
+ -1534698000000,
+ -1524074400000,
+ -1503248400000,
+ -1492365600000,
+ -1471798800000,
+ -1460916000000,
+ -1440954000000,
+ -1428861600000,
+ -1409504400000,
+ -1397412000000,
+ -1378054800000,
+ -1365962400000,
+ -1346605200000,
+ -1333908000000,
+ -1315155600000,
+ -1301853600000,
+ -1283706000000,
+ -1270404000000,
+ -1252256400000,
+ -1238954400000,
+ -1220806800000,
+ -1207504800000,
+ -1188752400000,
+ -1176055200000,
+ -1157302800000,
+ -1144000800000,
+ -1125853200000,
+ -1112551200000,
+ -1094403600000,
+ -1081101600000,
+ -1062954000000,
+ -1049652000000,
+ -1031504400000,
+ -1018202400000,
+ -1000054800000,
+ -986752800000,
+ -968000400000,
+ -955303200000,
+ -936550800000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -747248400000,
+ -733946400000,
+ -715806000000,
+ -702504000000,
+ -684356400000,
+ -671054400000,
+ -652906800000,
+ -634161600000,
+ -620845200000,
+ -602704800000,
+ -589395600000,
+ -576093600000,
+ -557946000000,
+ -544644000000,
+ -526496400000,
+ -513194400000,
+ -495046800000,
+ -481744800000,
+ -463597200000,
+ -450295200000,
+ -431542800000,
+ -418240800000,
+ -400093200000,
+ -384372000000,
+ -368643600000,
+ -352922400000,
+ -337194000000,
+ -321472800000,
+ -305744400000,
+ -289418400000,
+ -273690000000,
+ -257968800000,
+ -242240400000,
+ -226519200000,
+ -210790800000,
+ -195069600000,
+ -179341200000,
+ -163620000000,
+ -147891600000,
+ -131565600000,
+ -116442000000,
+ -100116000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 136364400000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Montserrat",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Nassau",
+ "abbrs": [
+ "LMT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1825095030000,
+ -179341200000,
+ -163620000000,
+ -147891600000,
+ -131565600000,
+ -116442000000,
+ -100116000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 136364400000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 309.5,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 244400
+ },
+ {
+ "name": "America/New_York",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633280400000,
+ -1615140000000,
+ -1601830800000,
+ -1583690400000,
+ -1570381200000,
+ -1551636000000,
+ -1536512400000,
+ -1523210400000,
+ -1504458000000,
+ -1491760800000,
+ -1473008400000,
+ -1459706400000,
+ -1441558800000,
+ -1428256800000,
+ -1410109200000,
+ -1396807200000,
+ -1378659600000,
+ -1365357600000,
+ -1347210000000,
+ -1333908000000,
+ -1315155600000,
+ -1301853600000,
+ -1283706000000,
+ -1270404000000,
+ -1252256400000,
+ -1238954400000,
+ -1220806800000,
+ -1207504800000,
+ -1189357200000,
+ -1176055200000,
+ -1157302800000,
+ -1144605600000,
+ -1125853200000,
+ -1112551200000,
+ -1094403600000,
+ -1081101600000,
+ -1062954000000,
+ -1049652000000,
+ -1031504400000,
+ -1018202400000,
+ -1000054800000,
+ -986752800000,
+ -968000400000,
+ -955303200000,
+ -936550800000,
+ -923248800000,
+ -905101200000,
+ -891799200000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -747248400000,
+ -733946400000,
+ -715798800000,
+ -702496800000,
+ -684349200000,
+ -671047200000,
+ -652899600000,
+ -639597600000,
+ -620845200000,
+ -608148000000,
+ -589395600000,
+ -576093600000,
+ -557946000000,
+ -544644000000,
+ -526496400000,
+ -513194400000,
+ -495046800000,
+ -481744800000,
+ -463597200000,
+ -447271200000,
+ -431542800000,
+ -415821600000,
+ -400093200000,
+ -384372000000,
+ -368643600000,
+ -352922400000,
+ -337194000000,
+ -321472800000,
+ -305744400000,
+ -289418400000,
+ -273690000000,
+ -257968800000,
+ -242240400000,
+ -226519200000,
+ -210790800000,
+ -195069600000,
+ -179341200000,
+ -163620000000,
+ -147891600000,
+ -131565600000,
+ -116442000000,
+ -100116000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152085600000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 20630000
+ },
+ {
+ "name": "America/Nipigon",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1632070800000,
+ -1615140000000,
+ -923252400000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ 136364400000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 1631
+ },
+ {
+ "name": "America/Nome",
+ "abbrs": [
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "YST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880196400000,
+ -769395600000,
+ -765374400000,
+ -86878800000,
+ -21466800000,
+ -5745600000,
+ 9982800000,
+ 25704000000,
+ 41432400000,
+ 57758400000,
+ 73486800000,
+ 89208000000,
+ 104936400000,
+ 120657600000,
+ 126709200000,
+ 152107200000,
+ 162392400000,
+ 183556800000,
+ 199285200000,
+ 215611200000,
+ 230734800000,
+ 247060800000,
+ 262789200000,
+ 278510400000,
+ 294238800000,
+ 309960000000,
+ 325688400000,
+ 341409600000,
+ 357138000000,
+ 372859200000,
+ 388587600000,
+ 404913600000,
+ 420037200000,
+ 436363200000,
+ 439030800000,
+ 452084400000,
+ 467805600000,
+ 483534000000,
+ 499255200000,
+ 514983600000,
+ 530704800000,
+ 544618800000,
+ 562154400000,
+ 576068400000,
+ 594208800000,
+ 607518000000,
+ 625658400000,
+ 638967600000,
+ 657108000000,
+ 671022000000,
+ 688557600000,
+ 702471600000,
+ 720007200000,
+ 733921200000,
+ 752061600000,
+ 765370800000,
+ 783511200000,
+ 796820400000,
+ 814960800000,
+ 828874800000,
+ 846410400000,
+ 860324400000,
+ 877860000000,
+ 891774000000,
+ 909309600000,
+ 923223600000,
+ 941364000000,
+ 954673200000,
+ 972813600000,
+ 986122800000,
+ 1004263200000,
+ 1018177200000,
+ 1035712800000,
+ 1049626800000,
+ 1067162400000,
+ 1081076400000,
+ 1099216800000,
+ 1112526000000,
+ 1130666400000,
+ 1143975600000,
+ 1162116000000,
+ 1173610800000,
+ 1194170400000,
+ 1205060400000,
+ 1225620000000,
+ 1236510000000,
+ 1257069600000,
+ 1268564400000,
+ 1289124000000,
+ 1300014000000,
+ 1320573600000,
+ 1331463600000,
+ 1352023200000,
+ 1362913200000,
+ 1383472800000,
+ 1394362800000,
+ 1414922400000,
+ 1425812400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 660,
+ 600,
+ 600,
+ 660,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 540,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 3797
+ },
+ {
+ "name": "America/Noronha",
+ "abbrs": [
+ "LMT",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02"
+ ],
+ "untils": [
+ -1767217820000,
+ -1206961200000,
+ -1191366000000,
+ -1175378400000,
+ -1159830000000,
+ -633823200000,
+ -622072800000,
+ -602287200000,
+ -591836400000,
+ -570751200000,
+ -560214000000,
+ -539128800000,
+ -531356400000,
+ -191368800000,
+ -184201200000,
+ -155167200000,
+ -150073200000,
+ -128901600000,
+ -121129200000,
+ -99957600000,
+ -89593200000,
+ -68421600000,
+ -57970800000,
+ 499744800000,
+ 511232400000,
+ 530589600000,
+ 540262800000,
+ 562125600000,
+ 571194000000,
+ 592970400000,
+ 602038800000,
+ 624420000000,
+ 634698000000,
+ 938916000000,
+ 951613200000,
+ 970970400000,
+ 971571600000,
+ 1003024800000,
+ 1013907600000,
+ null
+ ],
+ "offsets": [
+ 129.6667,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120
+ ],
+ "population": 3012
+ },
+ {
+ "name": "America/North_Dakota/Beulah",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/North_Dakota/Center",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/North_Dakota/New_Salem",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Ojinaga",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 989139600000,
+ 1001836800000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1175418000000,
+ 1193558400000,
+ 1207472400000,
+ 1225008000000,
+ 1238922000000,
+ 1256457600000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 417.6667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 22744
+ },
+ {
+ "name": "America/Panama",
+ "abbrs": [
+ "CMT",
+ "EST"
+ ],
+ "untils": [
+ -1946918424000,
+ null
+ ],
+ "offsets": [
+ 319.6,
+ 300
+ ],
+ "population": 1498000
+ },
+ {
+ "name": "America/Pangnirtung",
+ "abbrs": [
+ "-00",
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "ADDT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "CST",
+ "CDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1546300800000,
+ -880221600000,
+ -769395600000,
+ -765399600000,
+ -147902400000,
+ -131572800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544600800000,
+ 562136400000,
+ 576050400000,
+ 594190800000,
+ 607500000000,
+ 625640400000,
+ 638949600000,
+ 657090000000,
+ 671004000000,
+ 688539600000,
+ 702453600000,
+ 719989200000,
+ 733903200000,
+ 752043600000,
+ 765352800000,
+ 783493200000,
+ 796802400000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954662400000,
+ 972802800000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 240,
+ 180,
+ 180,
+ 240,
+ 120,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 360,
+ 300,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 1425
+ },
+ {
+ "name": "America/Paramaribo",
+ "abbrs": [
+ "LMT",
+ "PMT",
+ "PMT",
+ "-0330",
+ "-03"
+ ],
+ "untils": [
+ -1861906760000,
+ -1104524348000,
+ -765317964000,
+ 465449400000,
+ null
+ ],
+ "offsets": [
+ 220.6667,
+ 220.8667,
+ 220.6,
+ 210,
+ 180
+ ],
+ "population": 243556
+ },
+ {
+ "name": "America/Phoenix",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MST",
+ "MWT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -880210800000,
+ -820519140000,
+ -812653140000,
+ -796845540000,
+ -84380400000,
+ -68659200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 4194000
+ },
+ {
+ "name": "America/Port_of_Spain",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 43396
+ },
+ {
+ "name": "America/Port-au-Prince",
+ "abbrs": [
+ "PPMT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1670483460000,
+ 421218000000,
+ 436334400000,
+ 452062800000,
+ 467784000000,
+ 483512400000,
+ 499233600000,
+ 514962000000,
+ 530683200000,
+ 546411600000,
+ 562132800000,
+ 576050400000,
+ 594194400000,
+ 607500000000,
+ 625644000000,
+ 638949600000,
+ 657093600000,
+ 671004000000,
+ 688543200000,
+ 702453600000,
+ 719992800000,
+ 733903200000,
+ 752047200000,
+ 765352800000,
+ 783496800000,
+ 796802400000,
+ 814946400000,
+ 828856800000,
+ 846396000000,
+ 860306400000,
+ 877845600000,
+ 1112504400000,
+ 1130644800000,
+ 1143954000000,
+ 1162094400000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 289,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 2332000
+ },
+ {
+ "name": "America/Porto_Acre",
+ "abbrs": [
+ "LMT",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1767209328000,
+ -1206950400000,
+ -1191355200000,
+ -1175367600000,
+ -1159819200000,
+ -633812400000,
+ -622062000000,
+ -602276400000,
+ -591825600000,
+ -570740400000,
+ -560203200000,
+ -539118000000,
+ -531345600000,
+ -191358000000,
+ -184190400000,
+ -155156400000,
+ -150062400000,
+ -128890800000,
+ -121118400000,
+ -99946800000,
+ -89582400000,
+ -68410800000,
+ -57960000000,
+ 499755600000,
+ 511243200000,
+ 530600400000,
+ 540273600000,
+ 562136400000,
+ 571204800000,
+ 1214283600000,
+ 1384056000000,
+ null
+ ],
+ "offsets": [
+ 271.2,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Porto_Velho",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04"
+ ],
+ "untils": [
+ -1767210264000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ null
+ ],
+ "offsets": [
+ 255.6,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 369259
+ },
+ {
+ "name": "America/Puerto_Rico",
+ "abbrs": [
+ "AST",
+ "AWT",
+ "APT",
+ "AST"
+ ],
+ "untils": [
+ -873057600000,
+ -769395600000,
+ -765399600000,
+ null
+ ],
+ "offsets": [
+ 240,
+ 180,
+ 180,
+ 240
+ ],
+ "population": 2350126
+ },
+ {
+ "name": "America/Punta_Arenas",
+ "abbrs": [
+ "SMT",
+ "-05",
+ "SMT",
+ "-04",
+ "SMT",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1892661434000,
+ -1688410800000,
+ -1619205434000,
+ -1593806400000,
+ -1335986234000,
+ -1317585600000,
+ -1304362800000,
+ -1286049600000,
+ -1272826800000,
+ -1254513600000,
+ -1241290800000,
+ -1222977600000,
+ -1209754800000,
+ -1191355200000,
+ -1178132400000,
+ -870552000000,
+ -865278000000,
+ -718056000000,
+ -713649600000,
+ -36619200000,
+ -23922000000,
+ -3355200000,
+ 7527600000,
+ 24465600000,
+ 37767600000,
+ 55915200000,
+ 69217200000,
+ 87969600000,
+ 100666800000,
+ 118209600000,
+ 132116400000,
+ 150868800000,
+ 163566000000,
+ 182318400000,
+ 195620400000,
+ 213768000000,
+ 227070000000,
+ 245217600000,
+ 258519600000,
+ 277272000000,
+ 289969200000,
+ 308721600000,
+ 321418800000,
+ 340171200000,
+ 353473200000,
+ 371620800000,
+ 384922800000,
+ 403070400000,
+ 416372400000,
+ 434520000000,
+ 447822000000,
+ 466574400000,
+ 479271600000,
+ 498024000000,
+ 510721200000,
+ 529473600000,
+ 545194800000,
+ 560923200000,
+ 574225200000,
+ 592372800000,
+ 605674800000,
+ 624427200000,
+ 637124400000,
+ 653457600000,
+ 668574000000,
+ 687326400000,
+ 700628400000,
+ 718776000000,
+ 732078000000,
+ 750225600000,
+ 763527600000,
+ 781675200000,
+ 794977200000,
+ 813729600000,
+ 826426800000,
+ 845179200000,
+ 859690800000,
+ 876628800000,
+ 889930800000,
+ 906868800000,
+ 923194800000,
+ 939528000000,
+ 952830000000,
+ 971582400000,
+ 984279600000,
+ 1003032000000,
+ 1015729200000,
+ 1034481600000,
+ 1047178800000,
+ 1065931200000,
+ 1079233200000,
+ 1097380800000,
+ 1110682800000,
+ 1128830400000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192334400000,
+ 1206846000000,
+ 1223784000000,
+ 1237086000000,
+ 1255233600000,
+ 1270350000000,
+ 1286683200000,
+ 1304823600000,
+ 1313899200000,
+ 1335668400000,
+ 1346558400000,
+ 1367118000000,
+ 1378612800000,
+ 1398567600000,
+ 1410062400000,
+ 1463281200000,
+ 1471147200000,
+ null
+ ],
+ "offsets": [
+ 282.7667,
+ 300,
+ 282.7667,
+ 240,
+ 282.7667,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Rainy_River",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1632067200000,
+ -1615136400000,
+ -923248800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ 136368000000,
+ 152089200000,
+ 167817600000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 842
+ },
+ {
+ "name": "America/Rankin_Inlet",
+ "abbrs": [
+ "-00",
+ "CST",
+ "CDDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -410227200000,
+ -147895200000,
+ -131565600000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 360,
+ 240,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 2577
+ },
+ {
+ "name": "America/Recife",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1767217224000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -191365200000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 971575200000,
+ 1003028400000,
+ 1013911200000,
+ null
+ ],
+ "offsets": [
+ 139.6,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 3347000
+ },
+ {
+ "name": "America/Regina",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "CST"
+ ],
+ "untils": [
+ -2030202084000,
+ -1632063600000,
+ -1615132800000,
+ -1251651600000,
+ -1238349600000,
+ -1220202000000,
+ -1206900000000,
+ -1188752400000,
+ -1175450400000,
+ -1156698000000,
+ -1144000800000,
+ -1125248400000,
+ -1111946400000,
+ -1032714000000,
+ -1016992800000,
+ -1001264400000,
+ -986148000000,
+ -969814800000,
+ -954093600000,
+ -937760400000,
+ -922039200000,
+ -906310800000,
+ -890589600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -748450800000,
+ -732729600000,
+ -715791600000,
+ -702489600000,
+ -684342000000,
+ -671040000000,
+ -652892400000,
+ -639590400000,
+ -620838000000,
+ -608140800000,
+ -589388400000,
+ -576086400000,
+ -557938800000,
+ -544636800000,
+ -526489200000,
+ -513187200000,
+ -495039600000,
+ -481737600000,
+ -463590000000,
+ -450288000000,
+ -431535600000,
+ -418233600000,
+ -400086000000,
+ -386784000000,
+ -337186800000,
+ -321465600000,
+ -305737200000,
+ null
+ ],
+ "offsets": [
+ 418.6,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360
+ ],
+ "population": 193100
+ },
+ {
+ "name": "America/Resolute",
+ "abbrs": [
+ "-00",
+ "CST",
+ "CDDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -704937600000,
+ -147895200000,
+ -131565600000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 360,
+ 240,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 229
+ },
+ {
+ "name": "America/Rio_Branco",
+ "abbrs": [
+ "LMT",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1767209328000,
+ -1206950400000,
+ -1191355200000,
+ -1175367600000,
+ -1159819200000,
+ -633812400000,
+ -622062000000,
+ -602276400000,
+ -591825600000,
+ -570740400000,
+ -560203200000,
+ -539118000000,
+ -531345600000,
+ -191358000000,
+ -184190400000,
+ -155156400000,
+ -150062400000,
+ -128890800000,
+ -121118400000,
+ -99946800000,
+ -89582400000,
+ -68410800000,
+ -57960000000,
+ 499755600000,
+ 511243200000,
+ 530600400000,
+ 540273600000,
+ 562136400000,
+ 571204800000,
+ 1214283600000,
+ 1384056000000,
+ null
+ ],
+ "offsets": [
+ 271.2,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 308545
+ },
+ {
+ "name": "America/Rosario",
+ "abbrs": [
+ "CMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-04",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03"
+ ],
+ "untils": [
+ -1567453392000,
+ -1233432000000,
+ -1222981200000,
+ -1205956800000,
+ -1194037200000,
+ -1172865600000,
+ -1162501200000,
+ -1141329600000,
+ -1130965200000,
+ -1109793600000,
+ -1099429200000,
+ -1078257600000,
+ -1067806800000,
+ -1046635200000,
+ -1036270800000,
+ -1015099200000,
+ -1004734800000,
+ -983563200000,
+ -973198800000,
+ -952027200000,
+ -941576400000,
+ -931032000000,
+ -900882000000,
+ -890337600000,
+ -833749200000,
+ -827265600000,
+ -752274000000,
+ -733780800000,
+ -197326800000,
+ -190843200000,
+ -184194000000,
+ -164491200000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 596948400000,
+ 605066400000,
+ 624423600000,
+ 636516000000,
+ 656478000000,
+ 667965600000,
+ 687931200000,
+ 699415200000,
+ 719377200000,
+ 731469600000,
+ 1198983600000,
+ 1205632800000,
+ 1224385200000,
+ 1237082400000,
+ null
+ ],
+ "offsets": [
+ 256.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 240,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Santa_Isabel",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "PST",
+ "MST",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1514736000000,
+ -1451667600000,
+ -1343062800000,
+ -1234803600000,
+ -1222963200000,
+ -1207242000000,
+ -873820800000,
+ -769395600000,
+ -761677200000,
+ -686073600000,
+ -661539600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1175421600000,
+ 1193562000000,
+ 1207476000000,
+ 1225011600000,
+ 1238925600000,
+ 1256461200000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 468.0667,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 23389
+ },
+ {
+ "name": "America/Santarem",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1767212472000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ 1214280000000,
+ null
+ ],
+ "offsets": [
+ 218.8,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 205711
+ },
+ {
+ "name": "America/Santiago",
+ "abbrs": [
+ "SMT",
+ "-05",
+ "SMT",
+ "-04",
+ "SMT",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-03",
+ "-04",
+ "-05",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1892661434000,
+ -1688410800000,
+ -1619205434000,
+ -1593806400000,
+ -1335986234000,
+ -1317585600000,
+ -1304362800000,
+ -1286049600000,
+ -1272826800000,
+ -1254513600000,
+ -1241290800000,
+ -1222977600000,
+ -1209754800000,
+ -1191355200000,
+ -1178132400000,
+ -870552000000,
+ -865278000000,
+ -740520000000,
+ -736376400000,
+ -718056000000,
+ -713649600000,
+ -36619200000,
+ -23922000000,
+ -3355200000,
+ 7527600000,
+ 24465600000,
+ 37767600000,
+ 55915200000,
+ 69217200000,
+ 87969600000,
+ 100666800000,
+ 118209600000,
+ 132116400000,
+ 150868800000,
+ 163566000000,
+ 182318400000,
+ 195620400000,
+ 213768000000,
+ 227070000000,
+ 245217600000,
+ 258519600000,
+ 277272000000,
+ 289969200000,
+ 308721600000,
+ 321418800000,
+ 340171200000,
+ 353473200000,
+ 371620800000,
+ 384922800000,
+ 403070400000,
+ 416372400000,
+ 434520000000,
+ 447822000000,
+ 466574400000,
+ 479271600000,
+ 498024000000,
+ 510721200000,
+ 529473600000,
+ 545194800000,
+ 560923200000,
+ 574225200000,
+ 592372800000,
+ 605674800000,
+ 624427200000,
+ 637124400000,
+ 653457600000,
+ 668574000000,
+ 687326400000,
+ 700628400000,
+ 718776000000,
+ 732078000000,
+ 750225600000,
+ 763527600000,
+ 781675200000,
+ 794977200000,
+ 813729600000,
+ 826426800000,
+ 845179200000,
+ 859690800000,
+ 876628800000,
+ 889930800000,
+ 906868800000,
+ 923194800000,
+ 939528000000,
+ 952830000000,
+ 971582400000,
+ 984279600000,
+ 1003032000000,
+ 1015729200000,
+ 1034481600000,
+ 1047178800000,
+ 1065931200000,
+ 1079233200000,
+ 1097380800000,
+ 1110682800000,
+ 1128830400000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192334400000,
+ 1206846000000,
+ 1223784000000,
+ 1237086000000,
+ 1255233600000,
+ 1270350000000,
+ 1286683200000,
+ 1304823600000,
+ 1313899200000,
+ 1335668400000,
+ 1346558400000,
+ 1367118000000,
+ 1378612800000,
+ 1398567600000,
+ 1410062400000,
+ 1463281200000,
+ 1471147200000,
+ 1494730800000,
+ 1502596800000,
+ 1526180400000,
+ 1534046400000,
+ 1557630000000,
+ 1565496000000,
+ 1589079600000,
+ 1596945600000,
+ 1620529200000,
+ 1629000000000,
+ 1652583600000,
+ 1660449600000,
+ 1684033200000,
+ 1691899200000,
+ 1715482800000,
+ 1723348800000,
+ 1746932400000,
+ 1754798400000,
+ 1778382000000,
+ 1786248000000,
+ 1809831600000,
+ 1818302400000,
+ 1841886000000,
+ 1849752000000,
+ 1873335600000,
+ 1881201600000,
+ 1904785200000,
+ 1912651200000,
+ 1936234800000,
+ 1944100800000,
+ 1967684400000,
+ 1976155200000,
+ 1999738800000,
+ 2007604800000,
+ 2031188400000,
+ 2039054400000,
+ 2062638000000,
+ 2070504000000,
+ 2094087600000,
+ 2101953600000,
+ 2125537200000,
+ 2133403200000,
+ null
+ ],
+ "offsets": [
+ 282.7667,
+ 300,
+ 282.7667,
+ 240,
+ 282.7667,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 180,
+ 240,
+ 300,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 6225000
+ },
+ {
+ "name": "America/Santo_Domingo",
+ "abbrs": [
+ "SDMT",
+ "EST",
+ "EDT",
+ "EST",
+ "-0430",
+ "EST",
+ "-0430",
+ "EST",
+ "-0430",
+ "EST",
+ "-0430",
+ "EST",
+ "-0430",
+ "EST",
+ "AST",
+ "EST",
+ "AST"
+ ],
+ "untils": [
+ -1159773600000,
+ -100119600000,
+ -89668800000,
+ -5770800000,
+ 4422600000,
+ 25678800000,
+ 33193800000,
+ 57733200000,
+ 64816200000,
+ 89182800000,
+ 96438600000,
+ 120632400000,
+ 127974600000,
+ 152082000000,
+ 972799200000,
+ 975823200000,
+ null
+ ],
+ "offsets": [
+ 280,
+ 300,
+ 240,
+ 300,
+ 270,
+ 300,
+ 270,
+ 300,
+ 270,
+ 300,
+ 270,
+ 300,
+ 270,
+ 300,
+ 240,
+ 300,
+ 240
+ ],
+ "population": 2925000
+ },
+ {
+ "name": "America/Sao_Paulo",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02"
+ ],
+ "untils": [
+ -1767214412000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -195426000000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 656478000000,
+ 666756000000,
+ 687927600000,
+ 697600800000,
+ 719982000000,
+ 728445600000,
+ 750826800000,
+ 761709600000,
+ 782276400000,
+ 793159200000,
+ 813726000000,
+ 824004000000,
+ 844570800000,
+ 856058400000,
+ 876106800000,
+ 888717600000,
+ 908074800000,
+ 919562400000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 982461600000,
+ 1003028400000,
+ 1013911200000,
+ 1036292400000,
+ 1045360800000,
+ 1066532400000,
+ 1076810400000,
+ 1099364400000,
+ 1108864800000,
+ 1129431600000,
+ 1140314400000,
+ 1162695600000,
+ 1172368800000,
+ 1192330800000,
+ 1203213600000,
+ 1224385200000,
+ 1234663200000,
+ 1255834800000,
+ 1266717600000,
+ 1287284400000,
+ 1298167200000,
+ 1318734000000,
+ 1330221600000,
+ 1350788400000,
+ 1361066400000,
+ 1382238000000,
+ 1392516000000,
+ 1413687600000,
+ 1424570400000,
+ 1445137200000,
+ 1456020000000,
+ 1476586800000,
+ 1487469600000,
+ 1508036400000,
+ 1518919200000,
+ 1541300400000,
+ 1550368800000,
+ 1572750000000,
+ 1581818400000,
+ 1604199600000,
+ 1613872800000,
+ 1636254000000,
+ 1645322400000,
+ 1667703600000,
+ 1677376800000,
+ 1699153200000,
+ 1708221600000,
+ 1730602800000,
+ 1739671200000,
+ 1762052400000,
+ 1771725600000,
+ 1793502000000,
+ 1803175200000,
+ 1825556400000,
+ 1834624800000,
+ 1857006000000,
+ 1866074400000,
+ 1888455600000,
+ 1897524000000,
+ 1919905200000,
+ 1928973600000,
+ 1951354800000,
+ 1960423200000,
+ 1983409200000,
+ 1992477600000,
+ 2014858800000,
+ 2024532000000,
+ 2046308400000,
+ 2055376800000,
+ 2077758000000,
+ 2086826400000,
+ 2109207600000,
+ 2118880800000,
+ 2140657200000,
+ null
+ ],
+ "offsets": [
+ 186.4667,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120
+ ],
+ "population": 20365000
+ },
+ {
+ "name": "America/Scoresbysund",
+ "abbrs": [
+ "LMT",
+ "-02",
+ "-01",
+ "-02",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01"
+ ],
+ "untils": [
+ -1686090728000,
+ 323841600000,
+ 338961600000,
+ 354679200000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 87.8667,
+ 120,
+ 60,
+ 120,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60
+ ],
+ "population": 452
+ },
+ {
+ "name": "America/Shiprock",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -1570374000000,
+ -1551628800000,
+ -1538924400000,
+ -1534089600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -147884400000,
+ -131558400000,
+ -116434800000,
+ -100108800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Sitka",
+ "abbrs": [
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "YST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 439030800000,
+ 452084400000,
+ 467805600000,
+ 483534000000,
+ 499255200000,
+ 514983600000,
+ 530704800000,
+ 544618800000,
+ 562154400000,
+ 576068400000,
+ 594208800000,
+ 607518000000,
+ 625658400000,
+ 638967600000,
+ 657108000000,
+ 671022000000,
+ 688557600000,
+ 702471600000,
+ 720007200000,
+ 733921200000,
+ 752061600000,
+ 765370800000,
+ 783511200000,
+ 796820400000,
+ 814960800000,
+ 828874800000,
+ 846410400000,
+ 860324400000,
+ 877860000000,
+ 891774000000,
+ 909309600000,
+ 923223600000,
+ 941364000000,
+ 954673200000,
+ 972813600000,
+ 986122800000,
+ 1004263200000,
+ 1018177200000,
+ 1035712800000,
+ 1049626800000,
+ 1067162400000,
+ 1081076400000,
+ 1099216800000,
+ 1112526000000,
+ 1130666400000,
+ 1143975600000,
+ 1162116000000,
+ 1173610800000,
+ 1194170400000,
+ 1205060400000,
+ 1225620000000,
+ 1236510000000,
+ 1257069600000,
+ 1268564400000,
+ 1289124000000,
+ 1300014000000,
+ 1320573600000,
+ 1331463600000,
+ 1352023200000,
+ 1362913200000,
+ 1383472800000,
+ 1394362800000,
+ 1414922400000,
+ 1425812400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 540,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 9020
+ },
+ {
+ "name": "America/St_Barthelemy",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/St_Johns",
+ "abbrs": [
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST"
+ ],
+ "untils": [
+ -1664130548000,
+ -1650137348000,
+ -1632076148000,
+ -1615145348000,
+ -1598650148000,
+ -1590100148000,
+ -1567286948000,
+ -1551565748000,
+ -1535837348000,
+ -1520116148000,
+ -1503782948000,
+ -1488666548000,
+ -1472333348000,
+ -1457216948000,
+ -1440883748000,
+ -1425767348000,
+ -1409434148000,
+ -1394317748000,
+ -1377984548000,
+ -1362263348000,
+ -1346534948000,
+ -1330813748000,
+ -1314480548000,
+ -1299364148000,
+ -1283030948000,
+ -1267914548000,
+ -1251581348000,
+ -1236464948000,
+ -1220131748000,
+ -1205015348000,
+ -1188682148000,
+ -1172960948000,
+ -1156627748000,
+ -1141511348000,
+ -1125178148000,
+ -1110061748000,
+ -1096921748000,
+ -1093728600000,
+ -1078612200000,
+ -1061670600000,
+ -1048973400000,
+ -1030221000000,
+ -1017523800000,
+ -998771400000,
+ -986074200000,
+ -966717000000,
+ -954624600000,
+ -935267400000,
+ -922570200000,
+ -903817800000,
+ -891120600000,
+ -872368200000,
+ -769395600000,
+ -765401400000,
+ -746044200000,
+ -733347000000,
+ -714594600000,
+ -701897400000,
+ -683145000000,
+ -670447800000,
+ -651695400000,
+ -638998200000,
+ -619641000000,
+ -606943800000,
+ -589401000000,
+ -576099000000,
+ -557951400000,
+ -544649400000,
+ -526501800000,
+ -513199800000,
+ -495052200000,
+ -481750200000,
+ -463602600000,
+ -450300600000,
+ -431548200000,
+ -418246200000,
+ -400098600000,
+ -386796600000,
+ -368649000000,
+ -355347000000,
+ -337199400000,
+ -323897400000,
+ -305749800000,
+ -289423800000,
+ -273695400000,
+ -257974200000,
+ -242245800000,
+ -226524600000,
+ -210796200000,
+ -195075000000,
+ -179346600000,
+ -163625400000,
+ -147897000000,
+ -131571000000,
+ -116447400000,
+ -100121400000,
+ -84393000000,
+ -68671800000,
+ -52943400000,
+ -37222200000,
+ -21493800000,
+ -5772600000,
+ 9955800000,
+ 25677000000,
+ 41405400000,
+ 57731400000,
+ 73459800000,
+ 89181000000,
+ 104909400000,
+ 120630600000,
+ 136359000000,
+ 152080200000,
+ 167808600000,
+ 183529800000,
+ 199258200000,
+ 215584200000,
+ 230707800000,
+ 247033800000,
+ 262762200000,
+ 278483400000,
+ 294211800000,
+ 309933000000,
+ 325661400000,
+ 341382600000,
+ 357111000000,
+ 372832200000,
+ 388560600000,
+ 404886600000,
+ 420010200000,
+ 436336200000,
+ 452064600000,
+ 467785800000,
+ 483514200000,
+ 499235400000,
+ 514963800000,
+ 530685000000,
+ 544591860000,
+ 562127460000,
+ 576041460000,
+ 594178260000,
+ 607491060000,
+ 625631460000,
+ 638940660000,
+ 657081060000,
+ 670995060000,
+ 688530660000,
+ 702444660000,
+ 719980260000,
+ 733894260000,
+ 752034660000,
+ 765343860000,
+ 783484260000,
+ 796793460000,
+ 814933860000,
+ 828847860000,
+ 846383460000,
+ 860297460000,
+ 877833060000,
+ 891747060000,
+ 909282660000,
+ 923196660000,
+ 941337060000,
+ 954646260000,
+ 972786660000,
+ 986095860000,
+ 1004236260000,
+ 1018150260000,
+ 1035685860000,
+ 1049599860000,
+ 1067135460000,
+ 1081049460000,
+ 1099189860000,
+ 1112499060000,
+ 1130639460000,
+ 1143948660000,
+ 1162089060000,
+ 1173583860000,
+ 1194143460000,
+ 1205033460000,
+ 1225593060000,
+ 1236483060000,
+ 1257042660000,
+ 1268537460000,
+ 1289097060000,
+ 1299987060000,
+ 1320553800000,
+ 1331443800000,
+ 1352003400000,
+ 1362893400000,
+ 1383453000000,
+ 1394343000000,
+ 1414902600000,
+ 1425792600000,
+ 1446352200000,
+ 1457847000000,
+ 1478406600000,
+ 1489296600000,
+ 1509856200000,
+ 1520746200000,
+ 1541305800000,
+ 1552195800000,
+ 1572755400000,
+ 1583645400000,
+ 1604205000000,
+ 1615699800000,
+ 1636259400000,
+ 1647149400000,
+ 1667709000000,
+ 1678599000000,
+ 1699158600000,
+ 1710048600000,
+ 1730608200000,
+ 1741498200000,
+ 1762057800000,
+ 1772947800000,
+ 1793507400000,
+ 1805002200000,
+ 1825561800000,
+ 1836451800000,
+ 1857011400000,
+ 1867901400000,
+ 1888461000000,
+ 1899351000000,
+ 1919910600000,
+ 1930800600000,
+ 1951360200000,
+ 1962855000000,
+ 1983414600000,
+ 1994304600000,
+ 2014864200000,
+ 2025754200000,
+ 2046313800000,
+ 2057203800000,
+ 2077763400000,
+ 2088653400000,
+ 2109213000000,
+ 2120103000000,
+ 2140662600000,
+ null
+ ],
+ "offsets": [
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 90,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210
+ ],
+ "population": 106172
+ },
+ {
+ "name": "America/St_Kitts",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/St_Lucia",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/St_Thomas",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/St_Vincent",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Swift_Current",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "CST"
+ ],
+ "untils": [
+ -2030201320000,
+ -1632063600000,
+ -1615132800000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -747241200000,
+ -732729600000,
+ -715791600000,
+ -702489600000,
+ -684342000000,
+ -671040000000,
+ -652892400000,
+ -639590400000,
+ -400086000000,
+ -384364800000,
+ -337186800000,
+ -321465600000,
+ -305737200000,
+ -292435200000,
+ -273682800000,
+ -260985600000,
+ 73472400000,
+ null
+ ],
+ "offsets": [
+ 431.3333,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360
+ ],
+ "population": 15503
+ },
+ {
+ "name": "America/Tegucigalpa",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1538503868000,
+ 547020000000,
+ 559717200000,
+ 578469600000,
+ 591166800000,
+ 1146981600000,
+ 1154926800000,
+ null
+ ],
+ "offsets": [
+ 348.8667,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 1120000
+ },
+ {
+ "name": "America/Thule",
+ "abbrs": [
+ "LMT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -1686079492000,
+ 670399200000,
+ 686120400000,
+ 701848800000,
+ 717570000000,
+ 733903200000,
+ 752043600000,
+ 765352800000,
+ 783493200000,
+ 796802400000,
+ 814942800000,
+ 828856800000,
+ 846392400000,
+ 860306400000,
+ 877842000000,
+ 891756000000,
+ 909291600000,
+ 923205600000,
+ 941346000000,
+ 954655200000,
+ 972795600000,
+ 986104800000,
+ 1004245200000,
+ 1018159200000,
+ 1035694800000,
+ 1049608800000,
+ 1067144400000,
+ 1081058400000,
+ 1099198800000,
+ 1112508000000,
+ 1130648400000,
+ 1143957600000,
+ 1162098000000,
+ 1173592800000,
+ 1194152400000,
+ 1205042400000,
+ 1225602000000,
+ 1236492000000,
+ 1257051600000,
+ 1268546400000,
+ 1289106000000,
+ 1299996000000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 275.1333,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 656
+ },
+ {
+ "name": "America/Thunder_Bay",
+ "abbrs": [
+ "CST",
+ "EST",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1893434400000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 136364400000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 109140
+ },
+ {
+ "name": "America/Tijuana",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "PST",
+ "MST",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1514736000000,
+ -1451667600000,
+ -1343062800000,
+ -1234803600000,
+ -1222963200000,
+ -1207242000000,
+ -873820800000,
+ -769395600000,
+ -761677200000,
+ -686073600000,
+ -661539600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1175421600000,
+ 1193562000000,
+ 1207476000000,
+ 1225011600000,
+ 1238925600000,
+ 1256461200000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 468.0667,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 1968000
+ },
+ {
+ "name": "America/Toronto",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1632070800000,
+ -1615140000000,
+ -1601753400000,
+ -1583697600000,
+ -1567357200000,
+ -1554667200000,
+ -1534698000000,
+ -1524074400000,
+ -1503248400000,
+ -1492365600000,
+ -1471798800000,
+ -1460916000000,
+ -1440954000000,
+ -1428861600000,
+ -1409504400000,
+ -1397412000000,
+ -1378054800000,
+ -1365962400000,
+ -1346605200000,
+ -1333908000000,
+ -1315155600000,
+ -1301853600000,
+ -1283706000000,
+ -1270404000000,
+ -1252256400000,
+ -1238954400000,
+ -1220806800000,
+ -1207504800000,
+ -1188752400000,
+ -1176055200000,
+ -1157302800000,
+ -1144000800000,
+ -1125853200000,
+ -1112551200000,
+ -1094403600000,
+ -1081101600000,
+ -1062954000000,
+ -1049652000000,
+ -1031504400000,
+ -1018202400000,
+ -1000054800000,
+ -986752800000,
+ -968000400000,
+ -955303200000,
+ -936550800000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -747248400000,
+ -733946400000,
+ -715806000000,
+ -702504000000,
+ -684356400000,
+ -671054400000,
+ -652906800000,
+ -634161600000,
+ -620845200000,
+ -602704800000,
+ -589395600000,
+ -576093600000,
+ -557946000000,
+ -544644000000,
+ -526496400000,
+ -513194400000,
+ -495046800000,
+ -481744800000,
+ -463597200000,
+ -450295200000,
+ -431542800000,
+ -418240800000,
+ -400093200000,
+ -384372000000,
+ -368643600000,
+ -352922400000,
+ -337194000000,
+ -321472800000,
+ -305744400000,
+ -289418400000,
+ -273690000000,
+ -257968800000,
+ -242240400000,
+ -226519200000,
+ -210790800000,
+ -195069600000,
+ -179341200000,
+ -163620000000,
+ -147891600000,
+ -131565600000,
+ -116442000000,
+ -100116000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 136364400000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 6456000
+ },
+ {
+ "name": "America/Tortola",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Vancouver",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1632060000000,
+ -1615129200000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -747237600000,
+ -732726000000,
+ -715788000000,
+ -702486000000,
+ -684338400000,
+ -671036400000,
+ -652888800000,
+ -639586800000,
+ -620834400000,
+ -608137200000,
+ -589384800000,
+ -576082800000,
+ -557935200000,
+ -544633200000,
+ -526485600000,
+ -513183600000,
+ -495036000000,
+ -481734000000,
+ -463586400000,
+ -450284400000,
+ -431532000000,
+ -418230000000,
+ -400082400000,
+ -386780400000,
+ -368632800000,
+ -355330800000,
+ -337183200000,
+ -323881200000,
+ -305733600000,
+ -292431600000,
+ -273679200000,
+ -260982000000,
+ -242229600000,
+ -226508400000,
+ -210780000000,
+ -195058800000,
+ -179330400000,
+ -163609200000,
+ -147880800000,
+ -131554800000,
+ -116431200000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 136375200000,
+ 152096400000,
+ 167824800000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 2313000
+ },
+ {
+ "name": "America/Virgin",
+ "abbrs": [
+ "LMT",
+ "AST"
+ ],
+ "untils": [
+ -1825098836000,
+ null
+ ],
+ "offsets": [
+ 246.0667,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "America/Whitehorse",
+ "abbrs": [
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YWT",
+ "YPT",
+ "YST",
+ "YDDT",
+ "YST",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1632056400000,
+ -1615125600000,
+ -1596978000000,
+ -1583164800000,
+ -880203600000,
+ -769395600000,
+ -765381600000,
+ -147884400000,
+ -131554800000,
+ -81961200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 480,
+ 540,
+ 420,
+ 540,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 23276
+ },
+ {
+ "name": "America/Winnipeg",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1694368800000,
+ -1681671600000,
+ -1632067200000,
+ -1615136400000,
+ -1029686400000,
+ -1018198800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -746035200000,
+ -732733200000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620755200000,
+ -607626000000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -450291600000,
+ -431539200000,
+ -418237200000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -292438800000,
+ -210787200000,
+ -198090000000,
+ -116438400000,
+ -100108800000,
+ -84384000000,
+ -68659200000,
+ -52934400000,
+ -37209600000,
+ -21484800000,
+ -5760000000,
+ 9964800000,
+ 25689600000,
+ 41414400000,
+ 57744000000,
+ 73468800000,
+ 89193600000,
+ 104918400000,
+ 120643200000,
+ 136368000000,
+ 152092800000,
+ 167817600000,
+ 183542400000,
+ 199267200000,
+ 215596800000,
+ 230716800000,
+ 247046400000,
+ 262771200000,
+ 278496000000,
+ 294220800000,
+ 309945600000,
+ 325670400000,
+ 341395200000,
+ 357120000000,
+ 372844800000,
+ 388569600000,
+ 404899200000,
+ 420019200000,
+ 436348800000,
+ 452073600000,
+ 467798400000,
+ 483523200000,
+ 499248000000,
+ 514972800000,
+ 530697600000,
+ 544608000000,
+ 562147200000,
+ 576057600000,
+ 594201600000,
+ 607507200000,
+ 625651200000,
+ 638956800000,
+ 657100800000,
+ 671011200000,
+ 688550400000,
+ 702460800000,
+ 720000000000,
+ 733910400000,
+ 752054400000,
+ 765360000000,
+ 783504000000,
+ 796809600000,
+ 814953600000,
+ 828864000000,
+ 846403200000,
+ 860313600000,
+ 877852800000,
+ 891763200000,
+ 909302400000,
+ 923212800000,
+ 941356800000,
+ 954662400000,
+ 972806400000,
+ 986112000000,
+ 1004256000000,
+ 1018166400000,
+ 1035705600000,
+ 1049616000000,
+ 1067155200000,
+ 1081065600000,
+ 1099209600000,
+ 1112515200000,
+ 1130659200000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 663615
+ },
+ {
+ "name": "America/Yakutat",
+ "abbrs": [
+ "YST",
+ "YWT",
+ "YPT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880203600000,
+ -769395600000,
+ -765381600000,
+ -21474000000,
+ -5752800000,
+ 9975600000,
+ 25696800000,
+ 41425200000,
+ 57751200000,
+ 73479600000,
+ 89200800000,
+ 104929200000,
+ 120650400000,
+ 126702000000,
+ 152100000000,
+ 162385200000,
+ 183549600000,
+ 199278000000,
+ 215604000000,
+ 230727600000,
+ 247053600000,
+ 262782000000,
+ 278503200000,
+ 294231600000,
+ 309952800000,
+ 325681200000,
+ 341402400000,
+ 357130800000,
+ 372852000000,
+ 388580400000,
+ 404906400000,
+ 420030000000,
+ 436356000000,
+ 439030800000,
+ 452084400000,
+ 467805600000,
+ 483534000000,
+ 499255200000,
+ 514983600000,
+ 530704800000,
+ 544618800000,
+ 562154400000,
+ 576068400000,
+ 594208800000,
+ 607518000000,
+ 625658400000,
+ 638967600000,
+ 657108000000,
+ 671022000000,
+ 688557600000,
+ 702471600000,
+ 720007200000,
+ 733921200000,
+ 752061600000,
+ 765370800000,
+ 783511200000,
+ 796820400000,
+ 814960800000,
+ 828874800000,
+ 846410400000,
+ 860324400000,
+ 877860000000,
+ 891774000000,
+ 909309600000,
+ 923223600000,
+ 941364000000,
+ 954673200000,
+ 972813600000,
+ 986122800000,
+ 1004263200000,
+ 1018177200000,
+ 1035712800000,
+ 1049626800000,
+ 1067162400000,
+ 1081076400000,
+ 1099216800000,
+ 1112526000000,
+ 1130666400000,
+ 1143975600000,
+ 1162116000000,
+ 1173610800000,
+ 1194170400000,
+ 1205060400000,
+ 1225620000000,
+ 1236510000000,
+ 1257069600000,
+ 1268564400000,
+ 1289124000000,
+ 1300014000000,
+ 1320573600000,
+ 1331463600000,
+ 1352023200000,
+ 1362913200000,
+ 1383472800000,
+ 1394362800000,
+ 1414922400000,
+ 1425812400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 540,
+ 480,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 642
+ },
+ {
+ "name": "America/Yellowknife",
+ "abbrs": [
+ "-00",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1104537600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -147891600000,
+ -131562000000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 420,
+ 360,
+ 360,
+ 420,
+ 300,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 19234
+ },
+ {
+ "name": "Antarctica/Casey",
+ "abbrs": [
+ "-00",
+ "+08",
+ "+11",
+ "+08",
+ "+11",
+ "+08",
+ "+11",
+ "+08"
+ ],
+ "untils": [
+ -31536000000,
+ 1255802400000,
+ 1267714800000,
+ 1319738400000,
+ 1329843600000,
+ 1477065600000,
+ 1520701200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -480,
+ -660,
+ -480,
+ -660,
+ -480,
+ -660,
+ -480
+ ],
+ "population": 10
+ },
+ {
+ "name": "Antarctica/Davis",
+ "abbrs": [
+ "-00",
+ "+07",
+ "-00",
+ "+07",
+ "+05",
+ "+07",
+ "+05",
+ "+07"
+ ],
+ "untils": [
+ -409190400000,
+ -163062000000,
+ -28857600000,
+ 1255806000000,
+ 1268251200000,
+ 1319742000000,
+ 1329854400000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -420,
+ 0,
+ -420,
+ -300,
+ -420,
+ -300,
+ -420
+ ],
+ "population": 70
+ },
+ {
+ "name": "Antarctica/DumontDUrville",
+ "abbrs": [
+ "-00",
+ "+10",
+ "-00",
+ "+10"
+ ],
+ "untils": [
+ -725846400000,
+ -566992800000,
+ -415497600000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -600,
+ 0,
+ -600
+ ],
+ "population": 80
+ },
+ {
+ "name": "Antarctica/Macquarie",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "-00",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "+11"
+ ],
+ "untils": [
+ -1680508800000,
+ -1665392400000,
+ -1601719200000,
+ -687052800000,
+ -71136000000,
+ -55411200000,
+ -37267200000,
+ -25776000000,
+ -5817600000,
+ 5673600000,
+ 25632000000,
+ 37728000000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386092800000,
+ 404841600000,
+ 417542400000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 510076800000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 637689600000,
+ 657043200000,
+ 670348800000,
+ 686678400000,
+ 701798400000,
+ 718128000000,
+ 733248000000,
+ 749577600000,
+ 764697600000,
+ 781027200000,
+ 796147200000,
+ 812476800000,
+ 828201600000,
+ 844531200000,
+ 859651200000,
+ 875980800000,
+ 891100800000,
+ 907430400000,
+ 922550400000,
+ 938880000000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1002384000000,
+ 1017504000000,
+ 1033833600000,
+ 1048953600000,
+ 1065283200000,
+ 1080403200000,
+ 1096732800000,
+ 1111852800000,
+ 1128182400000,
+ 1143907200000,
+ 1159632000000,
+ 1174752000000,
+ 1191686400000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ 0,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -660
+ ],
+ "population": 1
+ },
+ {
+ "name": "Antarctica/Mawson",
+ "abbrs": [
+ "-00",
+ "+06",
+ "+05"
+ ],
+ "untils": [
+ -501206400000,
+ 1255809600000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -360,
+ -300
+ ],
+ "population": 60
+ },
+ {
+ "name": "Antarctica/McMurdo",
+ "abbrs": [
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT"
+ ],
+ "untils": [
+ -1330335000000,
+ -1320057000000,
+ -1300699800000,
+ -1287396000000,
+ -1269250200000,
+ -1255946400000,
+ -1237800600000,
+ -1224496800000,
+ -1206351000000,
+ -1192442400000,
+ -1174901400000,
+ -1160992800000,
+ -1143451800000,
+ -1125914400000,
+ -1112607000000,
+ -1094464800000,
+ -1081157400000,
+ -1063015200000,
+ -1049707800000,
+ -1031565600000,
+ -1018258200000,
+ -1000116000000,
+ -986808600000,
+ -968061600000,
+ -955359000000,
+ -936612000000,
+ -923304600000,
+ 152632800000,
+ 162309600000,
+ 183477600000,
+ 194968800000,
+ 215532000000,
+ 226418400000,
+ 246981600000,
+ 257868000000,
+ 278431200000,
+ 289317600000,
+ 309880800000,
+ 320767200000,
+ 341330400000,
+ 352216800000,
+ 372780000000,
+ 384271200000,
+ 404834400000,
+ 415720800000,
+ 436284000000,
+ 447170400000,
+ 467733600000,
+ 478620000000,
+ 499183200000,
+ 510069600000,
+ 530632800000,
+ 541519200000,
+ 562082400000,
+ 573573600000,
+ 594136800000,
+ 605023200000,
+ 623772000000,
+ 637682400000,
+ 655221600000,
+ 669132000000,
+ 686671200000,
+ 700581600000,
+ 718120800000,
+ 732636000000,
+ 749570400000,
+ 764085600000,
+ 781020000000,
+ 795535200000,
+ 812469600000,
+ 826984800000,
+ 844524000000,
+ 858434400000,
+ 875973600000,
+ 889884000000,
+ 907423200000,
+ 921938400000,
+ 938872800000,
+ 953388000000,
+ 970322400000,
+ 984837600000,
+ 1002376800000,
+ 1016287200000,
+ 1033826400000,
+ 1047736800000,
+ 1065276000000,
+ 1079791200000,
+ 1096725600000,
+ 1111240800000,
+ 1128175200000,
+ 1142690400000,
+ 1159624800000,
+ 1174140000000,
+ 1191074400000,
+ 1207404000000,
+ 1222524000000,
+ 1238853600000,
+ 1253973600000,
+ 1270303200000,
+ 1285423200000,
+ 1301752800000,
+ 1316872800000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ -690,
+ -750,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780
+ ],
+ "population": 0
+ },
+ {
+ "name": "Antarctica/Palmer",
+ "abbrs": [
+ "-00",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -157766400000,
+ -152658000000,
+ -132955200000,
+ -121122000000,
+ -101419200000,
+ -86821200000,
+ -71092800000,
+ -54766800000,
+ -39038400000,
+ -23317200000,
+ -7588800000,
+ 128142000000,
+ 136605600000,
+ 389070000000,
+ 403070400000,
+ 416372400000,
+ 434520000000,
+ 447822000000,
+ 466574400000,
+ 479271600000,
+ 498024000000,
+ 510721200000,
+ 529473600000,
+ 545194800000,
+ 560923200000,
+ 574225200000,
+ 592372800000,
+ 605674800000,
+ 624427200000,
+ 637124400000,
+ 653457600000,
+ 668574000000,
+ 687326400000,
+ 700628400000,
+ 718776000000,
+ 732078000000,
+ 750225600000,
+ 763527600000,
+ 781675200000,
+ 794977200000,
+ 813729600000,
+ 826426800000,
+ 845179200000,
+ 859690800000,
+ 876628800000,
+ 889930800000,
+ 906868800000,
+ 923194800000,
+ 939528000000,
+ 952830000000,
+ 971582400000,
+ 984279600000,
+ 1003032000000,
+ 1015729200000,
+ 1034481600000,
+ 1047178800000,
+ 1065931200000,
+ 1079233200000,
+ 1097380800000,
+ 1110682800000,
+ 1128830400000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192334400000,
+ 1206846000000,
+ 1223784000000,
+ 1237086000000,
+ 1255233600000,
+ 1270350000000,
+ 1286683200000,
+ 1304823600000,
+ 1313899200000,
+ 1335668400000,
+ 1346558400000,
+ 1367118000000,
+ 1378612800000,
+ 1398567600000,
+ 1410062400000,
+ 1463281200000,
+ 1471147200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 40
+ },
+ {
+ "name": "Antarctica/Rothera",
+ "abbrs": [
+ "-00",
+ "-03"
+ ],
+ "untils": [
+ 218246400000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 180
+ ],
+ "population": 130
+ },
+ {
+ "name": "Antarctica/South_Pole",
+ "abbrs": [
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT"
+ ],
+ "untils": [
+ -1330335000000,
+ -1320057000000,
+ -1300699800000,
+ -1287396000000,
+ -1269250200000,
+ -1255946400000,
+ -1237800600000,
+ -1224496800000,
+ -1206351000000,
+ -1192442400000,
+ -1174901400000,
+ -1160992800000,
+ -1143451800000,
+ -1125914400000,
+ -1112607000000,
+ -1094464800000,
+ -1081157400000,
+ -1063015200000,
+ -1049707800000,
+ -1031565600000,
+ -1018258200000,
+ -1000116000000,
+ -986808600000,
+ -968061600000,
+ -955359000000,
+ -936612000000,
+ -923304600000,
+ 152632800000,
+ 162309600000,
+ 183477600000,
+ 194968800000,
+ 215532000000,
+ 226418400000,
+ 246981600000,
+ 257868000000,
+ 278431200000,
+ 289317600000,
+ 309880800000,
+ 320767200000,
+ 341330400000,
+ 352216800000,
+ 372780000000,
+ 384271200000,
+ 404834400000,
+ 415720800000,
+ 436284000000,
+ 447170400000,
+ 467733600000,
+ 478620000000,
+ 499183200000,
+ 510069600000,
+ 530632800000,
+ 541519200000,
+ 562082400000,
+ 573573600000,
+ 594136800000,
+ 605023200000,
+ 623772000000,
+ 637682400000,
+ 655221600000,
+ 669132000000,
+ 686671200000,
+ 700581600000,
+ 718120800000,
+ 732636000000,
+ 749570400000,
+ 764085600000,
+ 781020000000,
+ 795535200000,
+ 812469600000,
+ 826984800000,
+ 844524000000,
+ 858434400000,
+ 875973600000,
+ 889884000000,
+ 907423200000,
+ 921938400000,
+ 938872800000,
+ 953388000000,
+ 970322400000,
+ 984837600000,
+ 1002376800000,
+ 1016287200000,
+ 1033826400000,
+ 1047736800000,
+ 1065276000000,
+ 1079791200000,
+ 1096725600000,
+ 1111240800000,
+ 1128175200000,
+ 1142690400000,
+ 1159624800000,
+ 1174140000000,
+ 1191074400000,
+ 1207404000000,
+ 1222524000000,
+ 1238853600000,
+ 1253973600000,
+ 1270303200000,
+ 1285423200000,
+ 1301752800000,
+ 1316872800000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ -690,
+ -750,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780
+ ],
+ "population": 0
+ },
+ {
+ "name": "Antarctica/Syowa",
+ "abbrs": [
+ "-00",
+ "+03"
+ ],
+ "untils": [
+ -407808000000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -180
+ ],
+ "population": 20
+ },
+ {
+ "name": "Antarctica/Troll",
+ "abbrs": [
+ "-00",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00",
+ "+02",
+ "+00"
+ ],
+ "untils": [
+ 1108166400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0,
+ -120,
+ 0
+ ],
+ "population": 40
+ },
+ {
+ "name": "Antarctica/Vostok",
+ "abbrs": [
+ "-00",
+ "+06"
+ ],
+ "untils": [
+ -380073600000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -360
+ ],
+ "population": 25
+ },
+ {
+ "name": "Arctic/Longyearbyen",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1691884800000,
+ -1680573600000,
+ -927511200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -765327600000,
+ -340844400000,
+ -324514800000,
+ -308790000000,
+ -293065200000,
+ -277340400000,
+ -261615600000,
+ -245890800000,
+ -230166000000,
+ -214441200000,
+ -198716400000,
+ -182991600000,
+ -166662000000,
+ -147913200000,
+ -135212400000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Aden",
+ "abbrs": [
+ "LMT",
+ "+03"
+ ],
+ "untils": [
+ -719636812000,
+ null
+ ],
+ "offsets": [
+ -186.8667,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Almaty",
+ "abbrs": [
+ "LMT",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06"
+ ],
+ "untils": [
+ -1441170468000,
+ -1247547600000,
+ 354909600000,
+ 370717200000,
+ 386445600000,
+ 402253200000,
+ 417981600000,
+ 433789200000,
+ 449604000000,
+ 465336000000,
+ 481060800000,
+ 496785600000,
+ 512510400000,
+ 528235200000,
+ 543960000000,
+ 559684800000,
+ 575409600000,
+ 591134400000,
+ 606859200000,
+ 622584000000,
+ 638308800000,
+ 654638400000,
+ 686091600000,
+ 695768400000,
+ 701812800000,
+ 717537600000,
+ 733262400000,
+ 748987200000,
+ 764712000000,
+ 780436800000,
+ 796161600000,
+ 811886400000,
+ 828216000000,
+ 846360000000,
+ 859665600000,
+ 877809600000,
+ 891115200000,
+ 909259200000,
+ 922564800000,
+ 941313600000,
+ 954014400000,
+ 972763200000,
+ 985464000000,
+ 1004212800000,
+ 1017518400000,
+ 1035662400000,
+ 1048968000000,
+ 1067112000000,
+ 1080417600000,
+ 1099166400000,
+ null
+ ],
+ "offsets": [
+ -307.8,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360
+ ],
+ "population": 1500000
+ },
+ {
+ "name": "Asia/Amman",
+ "abbrs": [
+ "LMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1230776624000,
+ 108165600000,
+ 118270800000,
+ 136591200000,
+ 149806800000,
+ 168127200000,
+ 181342800000,
+ 199749600000,
+ 215643600000,
+ 231285600000,
+ 244501200000,
+ 262735200000,
+ 275950800000,
+ 481154400000,
+ 496962000000,
+ 512949600000,
+ 528670800000,
+ 544399200000,
+ 560120400000,
+ 575848800000,
+ 592174800000,
+ 610581600000,
+ 623624400000,
+ 641167200000,
+ 655074000000,
+ 671839200000,
+ 685918800000,
+ 702856800000,
+ 717973200000,
+ 733701600000,
+ 749422800000,
+ 765151200000,
+ 779662800000,
+ 797205600000,
+ 811116000000,
+ 828655200000,
+ 843170400000,
+ 860104800000,
+ 874620000000,
+ 891554400000,
+ 906069600000,
+ 930780000000,
+ 938124000000,
+ 954367200000,
+ 970178400000,
+ 985816800000,
+ 1001628000000,
+ 1017352800000,
+ 1033077600000,
+ 1048802400000,
+ 1066946400000,
+ 1080252000000,
+ 1097791200000,
+ 1112306400000,
+ 1128031200000,
+ 1143756000000,
+ 1161900000000,
+ 1175205600000,
+ 1193349600000,
+ 1206655200000,
+ 1225404000000,
+ 1238104800000,
+ 1256853600000,
+ 1269554400000,
+ 1288303200000,
+ 1301608800000,
+ 1319752800000,
+ 1333058400000,
+ 1387486800000,
+ 1395957600000,
+ 1414706400000,
+ 1427407200000,
+ 1446156000000,
+ 1459461600000,
+ 1477605600000,
+ 1490911200000,
+ 1509055200000,
+ 1522360800000,
+ 1540504800000,
+ 1553810400000,
+ 1571954400000,
+ 1585260000000,
+ 1604008800000,
+ 1616709600000,
+ 1635458400000,
+ 1648764000000,
+ 1666908000000,
+ 1680213600000,
+ 1698357600000,
+ 1711663200000,
+ 1729807200000,
+ 1743112800000,
+ 1761861600000,
+ 1774562400000,
+ 1793311200000,
+ 1806012000000,
+ 1824760800000,
+ 1838066400000,
+ 1856210400000,
+ 1869516000000,
+ 1887660000000,
+ 1900965600000,
+ 1919109600000,
+ 1932415200000,
+ 1951164000000,
+ 1963864800000,
+ 1982613600000,
+ 1995919200000,
+ 2014063200000,
+ 2027368800000,
+ 2045512800000,
+ 2058818400000,
+ 2076962400000,
+ 2090268000000,
+ 2109016800000,
+ 2121717600000,
+ 2140466400000,
+ null
+ ],
+ "offsets": [
+ -143.7333,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 2468000
+ },
+ {
+ "name": "Asia/Anadyr",
+ "abbrs": [
+ "LMT",
+ "+12",
+ "+13",
+ "+14",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+11",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+11",
+ "+12"
+ ],
+ "untils": [
+ -1441194596000,
+ -1247572800000,
+ 354884400000,
+ 370692000000,
+ 402231600000,
+ 417960000000,
+ 433767600000,
+ 449582400000,
+ 465314400000,
+ 481039200000,
+ 496764000000,
+ 512488800000,
+ 528213600000,
+ 543938400000,
+ 559663200000,
+ 575388000000,
+ 591112800000,
+ 606837600000,
+ 622562400000,
+ 638287200000,
+ 654616800000,
+ 686070000000,
+ 695746800000,
+ 701791200000,
+ 717516000000,
+ 733240800000,
+ 748965600000,
+ 764690400000,
+ 780415200000,
+ 796140000000,
+ 811864800000,
+ 828194400000,
+ 846338400000,
+ 859644000000,
+ 877788000000,
+ 891093600000,
+ 909237600000,
+ 922543200000,
+ 941292000000,
+ 953992800000,
+ 972741600000,
+ 985442400000,
+ 1004191200000,
+ 1017496800000,
+ 1035640800000,
+ 1048946400000,
+ 1067090400000,
+ 1080396000000,
+ 1099144800000,
+ 1111845600000,
+ 1130594400000,
+ 1143295200000,
+ 1162044000000,
+ 1174744800000,
+ 1193493600000,
+ 1206799200000,
+ 1224943200000,
+ 1238248800000,
+ 1256392800000,
+ 1288450800000,
+ 1301151600000,
+ null
+ ],
+ "offsets": [
+ -709.9333,
+ -720,
+ -780,
+ -840,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -660,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -660,
+ -720
+ ],
+ "population": 13045
+ },
+ {
+ "name": "Asia/Aqtau",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05"
+ ],
+ "untils": [
+ -1441164064000,
+ -1247544000000,
+ 370724400000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 686095200000,
+ 695772000000,
+ 701816400000,
+ 717541200000,
+ 733266000000,
+ 748990800000,
+ 764715600000,
+ 780440400000,
+ 796168800000,
+ 811893600000,
+ 828223200000,
+ 846367200000,
+ 859672800000,
+ 877816800000,
+ 891122400000,
+ 909266400000,
+ 922572000000,
+ 941320800000,
+ 954021600000,
+ 972770400000,
+ 985471200000,
+ 1004220000000,
+ 1017525600000,
+ 1035669600000,
+ 1048975200000,
+ 1067119200000,
+ 1080424800000,
+ null
+ ],
+ "offsets": [
+ -201.0667,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300
+ ],
+ "population": 152227
+ },
+ {
+ "name": "Asia/Aqtobe",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05"
+ ],
+ "untils": [
+ -1441165720000,
+ -1247544000000,
+ 354913200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 686095200000,
+ 695772000000,
+ 701816400000,
+ 717541200000,
+ 733266000000,
+ 748990800000,
+ 764715600000,
+ 780440400000,
+ 796165200000,
+ 811890000000,
+ 828219600000,
+ 846363600000,
+ 859669200000,
+ 877813200000,
+ 891118800000,
+ 909262800000,
+ 922568400000,
+ 941317200000,
+ 954018000000,
+ 972766800000,
+ 985467600000,
+ 1004216400000,
+ 1017522000000,
+ 1035666000000,
+ 1048971600000,
+ 1067115600000,
+ 1080421200000,
+ 1099170000000,
+ null
+ ],
+ "offsets": [
+ -228.6667,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300
+ ],
+ "population": 273599
+ },
+ {
+ "name": "Asia/Ashgabat",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05"
+ ],
+ "untils": [
+ -1441166012000,
+ -1247544000000,
+ 354913200000,
+ 370720800000,
+ 386449200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 686095200000,
+ 695772000000,
+ null
+ ],
+ "offsets": [
+ -233.5333,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300
+ ],
+ "population": 407000
+ },
+ {
+ "name": "Asia/Ashkhabad",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05"
+ ],
+ "untils": [
+ -1441166012000,
+ -1247544000000,
+ 354913200000,
+ 370720800000,
+ 386449200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 686095200000,
+ 695772000000,
+ null
+ ],
+ "offsets": [
+ -233.5333,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Atyrau",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05"
+ ],
+ "untils": [
+ -1441164464000,
+ -1247540400000,
+ 370724400000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 686095200000,
+ 695772000000,
+ 701816400000,
+ 717541200000,
+ 733266000000,
+ 748990800000,
+ 764715600000,
+ 780440400000,
+ 796165200000,
+ 811890000000,
+ 828219600000,
+ 846363600000,
+ 859669200000,
+ 877813200000,
+ 891118800000,
+ 909262800000,
+ 941320800000,
+ 954021600000,
+ 972770400000,
+ 985471200000,
+ 1004220000000,
+ 1017525600000,
+ 1035669600000,
+ 1048975200000,
+ 1067119200000,
+ 1080424800000,
+ null
+ ],
+ "offsets": [
+ -207.7333,
+ -180,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Baghdad",
+ "abbrs": [
+ "BMT",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03"
+ ],
+ "untils": [
+ -1641005856000,
+ 389048400000,
+ 402264000000,
+ 417906000000,
+ 433800000000,
+ 449614800000,
+ 465422400000,
+ 481150800000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 606866400000,
+ 622591200000,
+ 638316000000,
+ 654645600000,
+ 670464000000,
+ 686275200000,
+ 702086400000,
+ 717897600000,
+ 733622400000,
+ 749433600000,
+ 765158400000,
+ 780969600000,
+ 796694400000,
+ 812505600000,
+ 828316800000,
+ 844128000000,
+ 859852800000,
+ 875664000000,
+ 891388800000,
+ 907200000000,
+ 922924800000,
+ 938736000000,
+ 954547200000,
+ 970358400000,
+ 986083200000,
+ 1001894400000,
+ 1017619200000,
+ 1033430400000,
+ 1049155200000,
+ 1064966400000,
+ 1080777600000,
+ 1096588800000,
+ 1112313600000,
+ 1128124800000,
+ 1143849600000,
+ 1159660800000,
+ 1175385600000,
+ 1191196800000,
+ null
+ ],
+ "offsets": [
+ -177.6,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180
+ ],
+ "population": 6625000
+ },
+ {
+ "name": "Asia/Bahrain",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+03"
+ ],
+ "untils": [
+ -1577935568000,
+ 76190400000,
+ null
+ ],
+ "offsets": [
+ -206.1333,
+ -240,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Baku",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04"
+ ],
+ "untils": [
+ -1441163964000,
+ -405140400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 606866400000,
+ 622591200000,
+ 638316000000,
+ 654645600000,
+ 686098800000,
+ 701823600000,
+ 828234000000,
+ 846378000000,
+ 859680000000,
+ 877824000000,
+ 891129600000,
+ 909273600000,
+ 922579200000,
+ 941328000000,
+ 954028800000,
+ 972777600000,
+ 985478400000,
+ 1004227200000,
+ 1017532800000,
+ 1035676800000,
+ 1048982400000,
+ 1067126400000,
+ 1080432000000,
+ 1099180800000,
+ 1111881600000,
+ 1130630400000,
+ 1143331200000,
+ 1162080000000,
+ 1174780800000,
+ 1193529600000,
+ 1206835200000,
+ 1224979200000,
+ 1238284800000,
+ 1256428800000,
+ 1269734400000,
+ 1288483200000,
+ 1301184000000,
+ 1319932800000,
+ 1332633600000,
+ 1351382400000,
+ 1364688000000,
+ 1382832000000,
+ 1396137600000,
+ 1414281600000,
+ 1427587200000,
+ 1445731200000,
+ null
+ ],
+ "offsets": [
+ -199.4,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240
+ ],
+ "population": 2661000
+ },
+ {
+ "name": "Asia/Bangkok",
+ "abbrs": [
+ "BMT",
+ "+07"
+ ],
+ "untils": [
+ -1570084924000,
+ null
+ ],
+ "offsets": [
+ -402.0667,
+ -420
+ ],
+ "population": 14998000
+ },
+ {
+ "name": "Asia/Barnaul",
+ "abbrs": [
+ "LMT",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07"
+ ],
+ "untils": [
+ -1579844100000,
+ -1247551200000,
+ 354906000000,
+ 370713600000,
+ 386442000000,
+ 402249600000,
+ 417978000000,
+ 433785600000,
+ 449600400000,
+ 465332400000,
+ 481057200000,
+ 496782000000,
+ 512506800000,
+ 528231600000,
+ 543956400000,
+ 559681200000,
+ 575406000000,
+ 591130800000,
+ 606855600000,
+ 622580400000,
+ 638305200000,
+ 654634800000,
+ 686088000000,
+ 695764800000,
+ 701809200000,
+ 717534000000,
+ 733258800000,
+ 748983600000,
+ 764708400000,
+ 780433200000,
+ 796158000000,
+ 801590400000,
+ 811886400000,
+ 828216000000,
+ 846360000000,
+ 859665600000,
+ 877809600000,
+ 891115200000,
+ 909259200000,
+ 922564800000,
+ 941313600000,
+ 954014400000,
+ 972763200000,
+ 985464000000,
+ 1004212800000,
+ 1017518400000,
+ 1035662400000,
+ 1048968000000,
+ 1067112000000,
+ 1080417600000,
+ 1099166400000,
+ 1111867200000,
+ 1130616000000,
+ 1143316800000,
+ 1162065600000,
+ 1174766400000,
+ 1193515200000,
+ 1206820800000,
+ 1224964800000,
+ 1238270400000,
+ 1256414400000,
+ 1269720000000,
+ 1288468800000,
+ 1301169600000,
+ 1414263600000,
+ 1459022400000,
+ null
+ ],
+ "offsets": [
+ -335,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Beirut",
+ "abbrs": [
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1570413600000,
+ -1552186800000,
+ -1538359200000,
+ -1522551600000,
+ -1507514400000,
+ -1490583600000,
+ -1473645600000,
+ -1460948400000,
+ -399866400000,
+ -386650800000,
+ -368330400000,
+ -355114800000,
+ -336794400000,
+ -323578800000,
+ -305172000000,
+ -291956400000,
+ -273636000000,
+ -260420400000,
+ 78012000000,
+ 86734800000,
+ 105055200000,
+ 118270800000,
+ 136591200000,
+ 149806800000,
+ 168127200000,
+ 181342800000,
+ 199749600000,
+ 212965200000,
+ 231285600000,
+ 244501200000,
+ 262735200000,
+ 275950800000,
+ 452210400000,
+ 466722000000,
+ 483746400000,
+ 498258000000,
+ 515282400000,
+ 529794000000,
+ 546818400000,
+ 561330000000,
+ 581119200000,
+ 592952400000,
+ 610754400000,
+ 624488400000,
+ 641512800000,
+ 656024400000,
+ 673048800000,
+ 687560400000,
+ 704671200000,
+ 718146000000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 843944400000,
+ 859672800000,
+ 875394000000,
+ 891122400000,
+ 906843600000,
+ 922572000000,
+ 941317200000,
+ 954021600000,
+ 972766800000,
+ 985471200000,
+ 1004216400000,
+ 1017525600000,
+ 1035666000000,
+ 1048975200000,
+ 1067115600000,
+ 1080424800000,
+ 1099170000000,
+ 1111874400000,
+ 1130619600000,
+ 1143324000000,
+ 1162069200000,
+ 1174773600000,
+ 1193518800000,
+ 1206828000000,
+ 1224968400000,
+ 1238277600000,
+ 1256418000000,
+ 1269727200000,
+ 1288472400000,
+ 1301176800000,
+ 1319922000000,
+ 1332626400000,
+ 1351371600000,
+ 1364680800000,
+ 1382821200000,
+ 1396130400000,
+ 1414270800000,
+ 1427580000000,
+ 1445720400000,
+ 1459029600000,
+ 1477774800000,
+ 1490479200000,
+ 1509224400000,
+ 1521928800000,
+ 1540674000000,
+ 1553983200000,
+ 1572123600000,
+ 1585432800000,
+ 1603573200000,
+ 1616882400000,
+ 1635627600000,
+ 1648332000000,
+ 1667077200000,
+ 1679781600000,
+ 1698526800000,
+ 1711836000000,
+ 1729976400000,
+ 1743285600000,
+ 1761426000000,
+ 1774735200000,
+ 1792875600000,
+ 1806184800000,
+ 1824930000000,
+ 1837634400000,
+ 1856379600000,
+ 1869084000000,
+ 1887829200000,
+ 1901138400000,
+ 1919278800000,
+ 1932588000000,
+ 1950728400000,
+ 1964037600000,
+ 1982782800000,
+ 1995487200000,
+ 2014232400000,
+ 2026936800000,
+ 2045682000000,
+ 2058386400000,
+ 2077131600000,
+ 2090440800000,
+ 2108581200000,
+ 2121890400000,
+ 2140030800000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 2200000
+ },
+ {
+ "name": "Asia/Bishkek",
+ "abbrs": [
+ "LMT",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06"
+ ],
+ "untils": [
+ -1441169904000,
+ -1247547600000,
+ 354909600000,
+ 370717200000,
+ 386445600000,
+ 402253200000,
+ 417981600000,
+ 433789200000,
+ 449604000000,
+ 465336000000,
+ 481060800000,
+ 496785600000,
+ 512510400000,
+ 528235200000,
+ 543960000000,
+ 559684800000,
+ 575409600000,
+ 591134400000,
+ 606859200000,
+ 622584000000,
+ 638308800000,
+ 654638400000,
+ 683582400000,
+ 703018800000,
+ 717530400000,
+ 734468400000,
+ 748980000000,
+ 765918000000,
+ 780429600000,
+ 797367600000,
+ 811879200000,
+ 828817200000,
+ 843933600000,
+ 859671000000,
+ 877811400000,
+ 891120600000,
+ 909261000000,
+ 922570200000,
+ 941315400000,
+ 954019800000,
+ 972765000000,
+ 985469400000,
+ 1004214600000,
+ 1017523800000,
+ 1035664200000,
+ 1048973400000,
+ 1067113800000,
+ 1080423000000,
+ 1099168200000,
+ 1111872600000,
+ null
+ ],
+ "offsets": [
+ -298.4,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360
+ ],
+ "population": 870663
+ },
+ {
+ "name": "Asia/Brunei",
+ "abbrs": [
+ "LMT",
+ "+0730",
+ "+08"
+ ],
+ "untils": [
+ -1383464380000,
+ -1167636600000,
+ null
+ ],
+ "offsets": [
+ -459.6667,
+ -450,
+ -480
+ ],
+ "population": 417784
+ },
+ {
+ "name": "Asia/Calcutta",
+ "abbrs": [
+ "MMT",
+ "IST",
+ "+0630",
+ "IST",
+ "+0630",
+ "IST"
+ ],
+ "untils": [
+ -2019705670000,
+ -891581400000,
+ -872058600000,
+ -862637400000,
+ -764145000000,
+ null
+ ],
+ "offsets": [
+ -321.1667,
+ -330,
+ -390,
+ -330,
+ -390,
+ -330
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Chita",
+ "abbrs": [
+ "LMT",
+ "+08",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+08",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+08",
+ "+09"
+ ],
+ "untils": [
+ -1579419232000,
+ -1247558400000,
+ 354898800000,
+ 370706400000,
+ 386434800000,
+ 402242400000,
+ 417970800000,
+ 433778400000,
+ 449593200000,
+ 465325200000,
+ 481050000000,
+ 496774800000,
+ 512499600000,
+ 528224400000,
+ 543949200000,
+ 559674000000,
+ 575398800000,
+ 591123600000,
+ 606848400000,
+ 622573200000,
+ 638298000000,
+ 654627600000,
+ 686080800000,
+ 695757600000,
+ 701802000000,
+ 717526800000,
+ 733251600000,
+ 748976400000,
+ 764701200000,
+ 780426000000,
+ 796150800000,
+ 811875600000,
+ 828205200000,
+ 846349200000,
+ 859654800000,
+ 877798800000,
+ 891104400000,
+ 909248400000,
+ 922554000000,
+ 941302800000,
+ 954003600000,
+ 972752400000,
+ 985453200000,
+ 1004202000000,
+ 1017507600000,
+ 1035651600000,
+ 1048957200000,
+ 1067101200000,
+ 1080406800000,
+ 1099155600000,
+ 1111856400000,
+ 1130605200000,
+ 1143306000000,
+ 1162054800000,
+ 1174755600000,
+ 1193504400000,
+ 1206810000000,
+ 1224954000000,
+ 1238259600000,
+ 1256403600000,
+ 1269709200000,
+ 1288458000000,
+ 1301158800000,
+ 1414252800000,
+ 1459015200000,
+ null
+ ],
+ "offsets": [
+ -453.8667,
+ -480,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -480,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -480,
+ -540
+ ],
+ "population": 329391
+ },
+ {
+ "name": "Asia/Choibalsan",
+ "abbrs": [
+ "LMT",
+ "+07",
+ "+08",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08"
+ ],
+ "untils": [
+ -2032933080000,
+ 252435600000,
+ 417974400000,
+ 433778400000,
+ 449593200000,
+ 465314400000,
+ 481042800000,
+ 496764000000,
+ 512492400000,
+ 528213600000,
+ 543942000000,
+ 559663200000,
+ 575391600000,
+ 591112800000,
+ 606841200000,
+ 622562400000,
+ 638290800000,
+ 654616800000,
+ 670345200000,
+ 686066400000,
+ 701794800000,
+ 717516000000,
+ 733244400000,
+ 748965600000,
+ 764694000000,
+ 780415200000,
+ 796143600000,
+ 811864800000,
+ 828198000000,
+ 843919200000,
+ 859647600000,
+ 875368800000,
+ 891097200000,
+ 906818400000,
+ 988390800000,
+ 1001692800000,
+ 1017421200000,
+ 1033142400000,
+ 1048870800000,
+ 1064592000000,
+ 1080320400000,
+ 1096041600000,
+ 1111770000000,
+ 1127491200000,
+ 1143219600000,
+ 1159545600000,
+ 1206889200000,
+ 1427479200000,
+ 1443193200000,
+ 1458928800000,
+ 1474642800000,
+ null
+ ],
+ "offsets": [
+ -458,
+ -420,
+ -480,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 38150
+ },
+ {
+ "name": "Asia/Chongqing",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -933494400000,
+ -923130000000,
+ -908784000000,
+ -891594000000,
+ 515520000000,
+ 527007600000,
+ 545155200000,
+ 558457200000,
+ 576604800000,
+ 589906800000,
+ 608659200000,
+ 621961200000,
+ 640108800000,
+ 653410800000,
+ 671558400000,
+ 684860400000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Chungking",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -933494400000,
+ -923130000000,
+ -908784000000,
+ -891594000000,
+ 515520000000,
+ 527007600000,
+ 545155200000,
+ 558457200000,
+ 576604800000,
+ 589906800000,
+ 608659200000,
+ 621961200000,
+ 640108800000,
+ 653410800000,
+ 671558400000,
+ 684860400000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Colombo",
+ "abbrs": [
+ "MMT",
+ "+0530",
+ "+06",
+ "+0630",
+ "+0530",
+ "+0630",
+ "+06",
+ "+0530"
+ ],
+ "untils": [
+ -2019705572000,
+ -883287000000,
+ -862639200000,
+ -764051400000,
+ 832962600000,
+ 846266400000,
+ 1145039400000,
+ null
+ ],
+ "offsets": [
+ -319.5333,
+ -330,
+ -360,
+ -390,
+ -330,
+ -390,
+ -360,
+ -330
+ ],
+ "population": 2180000
+ },
+ {
+ "name": "Asia/Dacca",
+ "abbrs": [
+ "HMT",
+ "+0630",
+ "+0530",
+ "+0630",
+ "+06",
+ "+07",
+ "+06"
+ ],
+ "untils": [
+ -891582800000,
+ -872058600000,
+ -862637400000,
+ -576138600000,
+ 1245430800000,
+ 1262278800000,
+ null
+ ],
+ "offsets": [
+ -353.3333,
+ -390,
+ -330,
+ -390,
+ -360,
+ -420,
+ -360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Damascus",
+ "abbrs": [
+ "LMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1577931912000,
+ -1568592000000,
+ -1554080400000,
+ -1537142400000,
+ -1522630800000,
+ -1505692800000,
+ -1491181200000,
+ -1474243200000,
+ -1459126800000,
+ -242265600000,
+ -228877200000,
+ -210556800000,
+ -197427600000,
+ -178934400000,
+ -165718800000,
+ -147398400000,
+ -134269200000,
+ -116467200000,
+ -102646800000,
+ -84326400000,
+ -71110800000,
+ -52704000000,
+ -39488400000,
+ -21168000000,
+ -7952400000,
+ 10368000000,
+ 23583600000,
+ 41904000000,
+ 55119600000,
+ 73526400000,
+ 86742000000,
+ 105062400000,
+ 118278000000,
+ 136598400000,
+ 149814000000,
+ 168134400000,
+ 181350000000,
+ 199756800000,
+ 212972400000,
+ 231292800000,
+ 241916400000,
+ 262828800000,
+ 273452400000,
+ 418694400000,
+ 433810800000,
+ 450316800000,
+ 465433200000,
+ 508896000000,
+ 529196400000,
+ 541555200000,
+ 562633200000,
+ 574387200000,
+ 594255600000,
+ 607305600000,
+ 623199600000,
+ 638928000000,
+ 654649200000,
+ 670456800000,
+ 686264400000,
+ 702684000000,
+ 717886800000,
+ 733096800000,
+ 748904400000,
+ 765151200000,
+ 780958800000,
+ 796687200000,
+ 812494800000,
+ 828309600000,
+ 844117200000,
+ 859759200000,
+ 875653200000,
+ 891208800000,
+ 907189200000,
+ 922917600000,
+ 938725200000,
+ 954540000000,
+ 970347600000,
+ 986076000000,
+ 1001883600000,
+ 1017612000000,
+ 1033419600000,
+ 1049148000000,
+ 1064955600000,
+ 1080770400000,
+ 1096578000000,
+ 1112306400000,
+ 1128114000000,
+ 1143842400000,
+ 1158872400000,
+ 1175205600000,
+ 1193950800000,
+ 1207260000000,
+ 1225486800000,
+ 1238104800000,
+ 1256850000000,
+ 1270159200000,
+ 1288299600000,
+ 1301608800000,
+ 1319749200000,
+ 1333058400000,
+ 1351198800000,
+ 1364508000000,
+ 1382648400000,
+ 1395957600000,
+ 1414702800000,
+ 1427407200000,
+ 1446152400000,
+ 1458856800000,
+ 1477602000000,
+ 1490911200000,
+ 1509051600000,
+ 1522360800000,
+ 1540501200000,
+ 1553810400000,
+ 1571950800000,
+ 1585260000000,
+ 1604005200000,
+ 1616709600000,
+ 1635454800000,
+ 1648159200000,
+ 1666904400000,
+ 1680213600000,
+ 1698354000000,
+ 1711663200000,
+ 1729803600000,
+ 1743112800000,
+ 1761858000000,
+ 1774562400000,
+ 1793307600000,
+ 1806012000000,
+ 1824757200000,
+ 1838066400000,
+ 1856206800000,
+ 1869516000000,
+ 1887656400000,
+ 1900965600000,
+ 1919106000000,
+ 1932415200000,
+ 1951160400000,
+ 1963864800000,
+ 1982610000000,
+ 1995314400000,
+ 2014059600000,
+ 2027368800000,
+ 2045509200000,
+ 2058818400000,
+ 2076958800000,
+ 2090268000000,
+ 2109013200000,
+ 2121717600000,
+ 2140462800000,
+ null
+ ],
+ "offsets": [
+ -145.2,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 2560000
+ },
+ {
+ "name": "Asia/Dhaka",
+ "abbrs": [
+ "HMT",
+ "+0630",
+ "+0530",
+ "+0630",
+ "+06",
+ "+07",
+ "+06"
+ ],
+ "untils": [
+ -891582800000,
+ -872058600000,
+ -862637400000,
+ -576138600000,
+ 1245430800000,
+ 1262278800000,
+ null
+ ],
+ "offsets": [
+ -353.3333,
+ -390,
+ -330,
+ -390,
+ -360,
+ -420,
+ -360
+ ],
+ "population": 15669000
+ },
+ {
+ "name": "Asia/Dili",
+ "abbrs": [
+ "LMT",
+ "+08",
+ "+09",
+ "+08",
+ "+09"
+ ],
+ "untils": [
+ -1830414140000,
+ -879152400000,
+ 199897200000,
+ 969120000000,
+ null
+ ],
+ "offsets": [
+ -502.3333,
+ -480,
+ -540,
+ -480,
+ -540
+ ],
+ "population": 193563
+ },
+ {
+ "name": "Asia/Dubai",
+ "abbrs": [
+ "LMT",
+ "+04"
+ ],
+ "untils": [
+ -1577936472000,
+ null
+ ],
+ "offsets": [
+ -221.2,
+ -240
+ ],
+ "population": 3933000
+ },
+ {
+ "name": "Asia/Dushanbe",
+ "abbrs": [
+ "LMT",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+05"
+ ],
+ "untils": [
+ -1441168512000,
+ -1247547600000,
+ 354909600000,
+ 370717200000,
+ 386445600000,
+ 402253200000,
+ 417981600000,
+ 433789200000,
+ 449604000000,
+ 465336000000,
+ 481060800000,
+ 496785600000,
+ 512510400000,
+ 528235200000,
+ 543960000000,
+ 559684800000,
+ 575409600000,
+ 591134400000,
+ 606859200000,
+ 622584000000,
+ 638308800000,
+ 654638400000,
+ 684363600000,
+ null
+ ],
+ "offsets": [
+ -275.2,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -300
+ ],
+ "population": 756143
+ },
+ {
+ "name": "Asia/Famagusta",
+ "abbrs": [
+ "LMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+03",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1518920148000,
+ 166572000000,
+ 182293200000,
+ 200959200000,
+ 213829200000,
+ 228866400000,
+ 243982800000,
+ 260316000000,
+ 276123600000,
+ 291765600000,
+ 307486800000,
+ 323820000000,
+ 338936400000,
+ 354664800000,
+ 370386000000,
+ 386114400000,
+ 401835600000,
+ 417564000000,
+ 433285200000,
+ 449013600000,
+ 465339600000,
+ 481068000000,
+ 496789200000,
+ 512517600000,
+ 528238800000,
+ 543967200000,
+ 559688400000,
+ 575416800000,
+ 591138000000,
+ 606866400000,
+ 622587600000,
+ 638316000000,
+ 654642000000,
+ 670370400000,
+ 686091600000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 843944400000,
+ 859672800000,
+ 875394000000,
+ 891122400000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1473282000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -135.8,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Gaza",
+ "abbrs": [
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -933645600000,
+ -857358000000,
+ -844300800000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762656400000,
+ -748310400000,
+ -731127600000,
+ -399088800000,
+ -386650800000,
+ -368330400000,
+ -355114800000,
+ -336790800000,
+ -323654400000,
+ -305168400000,
+ -292032000000,
+ -273632400000,
+ -260496000000,
+ -242096400000,
+ -228960000000,
+ -210560400000,
+ -197424000000,
+ -178938000000,
+ -165801600000,
+ -147402000000,
+ -134265600000,
+ -115866000000,
+ -102643200000,
+ -84330000000,
+ -81313200000,
+ 142380000000,
+ 150843600000,
+ 167176800000,
+ 178664400000,
+ 482277600000,
+ 495579600000,
+ 516751200000,
+ 526424400000,
+ 545436000000,
+ 558478800000,
+ 576626400000,
+ 589323600000,
+ 609890400000,
+ 620773200000,
+ 638316000000,
+ 651618000000,
+ 669765600000,
+ 683672400000,
+ 701820000000,
+ 715726800000,
+ 733701600000,
+ 747176400000,
+ 765151200000,
+ 778021200000,
+ 796600800000,
+ 810075600000,
+ 820447200000,
+ 828655200000,
+ 843170400000,
+ 860104800000,
+ 874620000000,
+ 891554400000,
+ 906069600000,
+ 924213600000,
+ 939934800000,
+ 956268000000,
+ 971989200000,
+ 987717600000,
+ 1003438800000,
+ 1019167200000,
+ 1034888400000,
+ 1050616800000,
+ 1066338000000,
+ 1082066400000,
+ 1096581600000,
+ 1113516000000,
+ 1128380400000,
+ 1143842400000,
+ 1158872400000,
+ 1175378400000,
+ 1189638000000,
+ 1206655200000,
+ 1219957200000,
+ 1238104800000,
+ 1252015200000,
+ 1269640860000,
+ 1281474000000,
+ 1301608860000,
+ 1312146000000,
+ 1333058400000,
+ 1348178400000,
+ 1364508000000,
+ 1380229200000,
+ 1395957600000,
+ 1414098000000,
+ 1427493600000,
+ 1445547600000,
+ 1458946800000,
+ 1477692000000,
+ 1490396400000,
+ 1509141600000,
+ 1521846000000,
+ 1540591200000,
+ 1553295600000,
+ 1572040800000,
+ 1585350000000,
+ 1604095200000,
+ 1616799600000,
+ 1635544800000,
+ 1648249200000,
+ 1666994400000,
+ 1679698800000,
+ 1698444000000,
+ 1711148400000,
+ 1729893600000,
+ 1742598000000,
+ 1761343200000,
+ 1774652400000,
+ 1793397600000,
+ 1806102000000,
+ 1824847200000,
+ 1837551600000,
+ 1856296800000,
+ 1869001200000,
+ 1887746400000,
+ 1900450800000,
+ 1919196000000,
+ 1931900400000,
+ 1950645600000,
+ 1963954800000,
+ 1982700000000,
+ 1995404400000,
+ 2014149600000,
+ 2026854000000,
+ 2045599200000,
+ 2058303600000,
+ 2077048800000,
+ 2089753200000,
+ 2108498400000,
+ 2121807600000,
+ 2140552800000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 1816000
+ },
+ {
+ "name": "Asia/Harbin",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -933494400000,
+ -923130000000,
+ -908784000000,
+ -891594000000,
+ 515520000000,
+ 527007600000,
+ 545155200000,
+ 558457200000,
+ 576604800000,
+ 589906800000,
+ 608659200000,
+ 621961200000,
+ 640108800000,
+ 653410800000,
+ 671558400000,
+ 684860400000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Hebron",
+ "abbrs": [
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -933645600000,
+ -857358000000,
+ -844300800000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762656400000,
+ -748310400000,
+ -731127600000,
+ -399088800000,
+ -386650800000,
+ -368330400000,
+ -355114800000,
+ -336790800000,
+ -323654400000,
+ -305168400000,
+ -292032000000,
+ -273632400000,
+ -260496000000,
+ -242096400000,
+ -228960000000,
+ -210560400000,
+ -197424000000,
+ -178938000000,
+ -165801600000,
+ -147402000000,
+ -134265600000,
+ -115866000000,
+ -102643200000,
+ -84330000000,
+ -81313200000,
+ 142380000000,
+ 150843600000,
+ 167176800000,
+ 178664400000,
+ 482277600000,
+ 495579600000,
+ 516751200000,
+ 526424400000,
+ 545436000000,
+ 558478800000,
+ 576626400000,
+ 589323600000,
+ 609890400000,
+ 620773200000,
+ 638316000000,
+ 651618000000,
+ 669765600000,
+ 683672400000,
+ 701820000000,
+ 715726800000,
+ 733701600000,
+ 747176400000,
+ 765151200000,
+ 778021200000,
+ 796600800000,
+ 810075600000,
+ 820447200000,
+ 828655200000,
+ 843170400000,
+ 860104800000,
+ 874620000000,
+ 891554400000,
+ 906069600000,
+ 924213600000,
+ 939934800000,
+ 956268000000,
+ 971989200000,
+ 987717600000,
+ 1003438800000,
+ 1019167200000,
+ 1034888400000,
+ 1050616800000,
+ 1066338000000,
+ 1082066400000,
+ 1096581600000,
+ 1113516000000,
+ 1128380400000,
+ 1143842400000,
+ 1158872400000,
+ 1175378400000,
+ 1189638000000,
+ 1206655200000,
+ 1220216400000,
+ 1238104800000,
+ 1252015200000,
+ 1269554400000,
+ 1281474000000,
+ 1301608860000,
+ 1312146000000,
+ 1314655200000,
+ 1317330000000,
+ 1333058400000,
+ 1348178400000,
+ 1364508000000,
+ 1380229200000,
+ 1395957600000,
+ 1414098000000,
+ 1427493600000,
+ 1445547600000,
+ 1458946800000,
+ 1477692000000,
+ 1490396400000,
+ 1509141600000,
+ 1521846000000,
+ 1540591200000,
+ 1553295600000,
+ 1572040800000,
+ 1585350000000,
+ 1604095200000,
+ 1616799600000,
+ 1635544800000,
+ 1648249200000,
+ 1666994400000,
+ 1679698800000,
+ 1698444000000,
+ 1711148400000,
+ 1729893600000,
+ 1742598000000,
+ 1761343200000,
+ 1774652400000,
+ 1793397600000,
+ 1806102000000,
+ 1824847200000,
+ 1837551600000,
+ 1856296800000,
+ 1869001200000,
+ 1887746400000,
+ 1900450800000,
+ 1919196000000,
+ 1931900400000,
+ 1950645600000,
+ 1963954800000,
+ 1982700000000,
+ 1995404400000,
+ 2014149600000,
+ 2026854000000,
+ 2045599200000,
+ 2058303600000,
+ 2077048800000,
+ 2089753200000,
+ 2108498400000,
+ 2121807600000,
+ 2140552800000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 250000
+ },
+ {
+ "name": "Asia/Ho_Chi_Minh",
+ "abbrs": [
+ "LMT",
+ "PLMT",
+ "+07",
+ "+08",
+ "+09",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07"
+ ],
+ "untils": [
+ -2004073600000,
+ -1851577590000,
+ -852105600000,
+ -782643600000,
+ -767869200000,
+ -718095600000,
+ -457776000000,
+ -315648000000,
+ 171820800000,
+ null
+ ],
+ "offsets": [
+ -426.6667,
+ -426.5,
+ -420,
+ -480,
+ -540,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420
+ ],
+ "population": 8957000
+ },
+ {
+ "name": "Asia/Hong_Kong",
+ "abbrs": [
+ "LMT",
+ "HKT",
+ "HKST",
+ "HKT",
+ "JST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT"
+ ],
+ "untils": [
+ -2056693002000,
+ -907389000000,
+ -891667800000,
+ -884246400000,
+ -766746000000,
+ -747981000000,
+ -728544600000,
+ -717049800000,
+ -694503000000,
+ -683785800000,
+ -668064600000,
+ -654755400000,
+ -636615000000,
+ -623305800000,
+ -605165400000,
+ -591856200000,
+ -573715800000,
+ -559801800000,
+ -542352600000,
+ -528352200000,
+ -510211800000,
+ -498112200000,
+ -478762200000,
+ -466662600000,
+ -446707800000,
+ -435213000000,
+ -415258200000,
+ -403158600000,
+ -383808600000,
+ -371709000000,
+ -352359000000,
+ -340259400000,
+ -320909400000,
+ -308809800000,
+ -288855000000,
+ -277360200000,
+ -257405400000,
+ -245910600000,
+ -225955800000,
+ -213856200000,
+ -194506200000,
+ -182406600000,
+ -163056600000,
+ -148537800000,
+ -132816600000,
+ -117088200000,
+ -101367000000,
+ -85638600000,
+ -69312600000,
+ -53584200000,
+ -37863000000,
+ -22134600000,
+ -6413400000,
+ 9315000000,
+ 25036200000,
+ 40764600000,
+ 56485800000,
+ 72214200000,
+ 88540200000,
+ 104268600000,
+ 119989800000,
+ 126041400000,
+ 151439400000,
+ 167167800000,
+ 182889000000,
+ 198617400000,
+ 214338600000,
+ 295385400000,
+ 309292200000,
+ null
+ ],
+ "offsets": [
+ -456.7,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 7275000
+ },
+ {
+ "name": "Asia/Hovd",
+ "abbrs": [
+ "LMT",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07"
+ ],
+ "untils": [
+ -2032927596000,
+ 252439200000,
+ 417978000000,
+ 433785600000,
+ 449600400000,
+ 465321600000,
+ 481050000000,
+ 496771200000,
+ 512499600000,
+ 528220800000,
+ 543949200000,
+ 559670400000,
+ 575398800000,
+ 591120000000,
+ 606848400000,
+ 622569600000,
+ 638298000000,
+ 654624000000,
+ 670352400000,
+ 686073600000,
+ 701802000000,
+ 717523200000,
+ 733251600000,
+ 748972800000,
+ 764701200000,
+ 780422400000,
+ 796150800000,
+ 811872000000,
+ 828205200000,
+ 843926400000,
+ 859654800000,
+ 875376000000,
+ 891104400000,
+ 906825600000,
+ 988398000000,
+ 1001700000000,
+ 1017428400000,
+ 1033149600000,
+ 1048878000000,
+ 1064599200000,
+ 1080327600000,
+ 1096048800000,
+ 1111777200000,
+ 1127498400000,
+ 1143226800000,
+ 1159552800000,
+ 1427482800000,
+ 1443196800000,
+ 1458932400000,
+ 1474646400000,
+ null
+ ],
+ "offsets": [
+ -366.6,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420
+ ],
+ "population": 81479
+ },
+ {
+ "name": "Asia/Irkutsk",
+ "abbrs": [
+ "IMT",
+ "+07",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+07",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08"
+ ],
+ "untils": [
+ -1575874625000,
+ -1247554800000,
+ 354902400000,
+ 370710000000,
+ 386438400000,
+ 402246000000,
+ 417974400000,
+ 433782000000,
+ 449596800000,
+ 465328800000,
+ 481053600000,
+ 496778400000,
+ 512503200000,
+ 528228000000,
+ 543952800000,
+ 559677600000,
+ 575402400000,
+ 591127200000,
+ 606852000000,
+ 622576800000,
+ 638301600000,
+ 654631200000,
+ 686084400000,
+ 695761200000,
+ 701805600000,
+ 717530400000,
+ 733255200000,
+ 748980000000,
+ 764704800000,
+ 780429600000,
+ 796154400000,
+ 811879200000,
+ 828208800000,
+ 846352800000,
+ 859658400000,
+ 877802400000,
+ 891108000000,
+ 909252000000,
+ 922557600000,
+ 941306400000,
+ 954007200000,
+ 972756000000,
+ 985456800000,
+ 1004205600000,
+ 1017511200000,
+ 1035655200000,
+ 1048960800000,
+ 1067104800000,
+ 1080410400000,
+ 1099159200000,
+ 1111860000000,
+ 1130608800000,
+ 1143309600000,
+ 1162058400000,
+ 1174759200000,
+ 1193508000000,
+ 1206813600000,
+ 1224957600000,
+ 1238263200000,
+ 1256407200000,
+ 1269712800000,
+ 1288461600000,
+ 1301162400000,
+ 1414256400000,
+ null
+ ],
+ "offsets": [
+ -417.0833,
+ -420,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -420,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 601993
+ },
+ {
+ "name": "Asia/Istanbul",
+ "abbrs": [
+ "IMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+03"
+ ],
+ "untils": [
+ -1869875816000,
+ -1693706400000,
+ -1680490800000,
+ -1570413600000,
+ -1552186800000,
+ -1538359200000,
+ -1522551600000,
+ -1507514400000,
+ -1490583600000,
+ -1440208800000,
+ -1428030000000,
+ -1409709600000,
+ -1396494000000,
+ -931140000000,
+ -922762800000,
+ -917834400000,
+ -892436400000,
+ -875844000000,
+ -857358000000,
+ -781063200000,
+ -764737200000,
+ -744343200000,
+ -733806000000,
+ -716436000000,
+ -701924400000,
+ -684986400000,
+ -670474800000,
+ -654141600000,
+ -639025200000,
+ -621828000000,
+ -606970800000,
+ -590032800000,
+ -575434800000,
+ -235620000000,
+ -228279600000,
+ -177732000000,
+ -165726000000,
+ 10533600000,
+ 23835600000,
+ 41983200000,
+ 55285200000,
+ 74037600000,
+ 87339600000,
+ 107910000000,
+ 121219200000,
+ 133920000000,
+ 152676000000,
+ 165362400000,
+ 183502800000,
+ 202428000000,
+ 215557200000,
+ 228866400000,
+ 245797200000,
+ 260316000000,
+ 277246800000,
+ 308779200000,
+ 323827200000,
+ 340228800000,
+ 354672000000,
+ 371678400000,
+ 386121600000,
+ 403128000000,
+ 428446800000,
+ 433886400000,
+ 482792400000,
+ 496702800000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 686098800000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764118000000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301274000000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396227600000,
+ 1414285200000,
+ 1427590800000,
+ 1446944400000,
+ 1459040400000,
+ 1473195600000,
+ null
+ ],
+ "offsets": [
+ -116.9333,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Jakarta",
+ "abbrs": [
+ "BMT",
+ "+0720",
+ "+0730",
+ "+09",
+ "+0730",
+ "+08",
+ "+0730",
+ "WIB"
+ ],
+ "untils": [
+ -1451719200000,
+ -1172906400000,
+ -876641400000,
+ -766054800000,
+ -683883000000,
+ -620812800000,
+ -189415800000,
+ null
+ ],
+ "offsets": [
+ -427.2,
+ -440,
+ -450,
+ -540,
+ -450,
+ -480,
+ -450,
+ -420
+ ],
+ "population": 30539000
+ },
+ {
+ "name": "Asia/Jayapura",
+ "abbrs": [
+ "LMT",
+ "+09",
+ "+0930",
+ "WIT"
+ ],
+ "untils": [
+ -1172913768000,
+ -799491600000,
+ -189423000000,
+ null
+ ],
+ "offsets": [
+ -562.8,
+ -540,
+ -570,
+ -540
+ ],
+ "population": 256705
+ },
+ {
+ "name": "Asia/Jerusalem",
+ "abbrs": [
+ "JMT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDDT",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST"
+ ],
+ "untils": [
+ -1641003640000,
+ -933645600000,
+ -857358000000,
+ -844300800000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762656400000,
+ -748310400000,
+ -731127600000,
+ -681962400000,
+ -673243200000,
+ -667962000000,
+ -652327200000,
+ -636426000000,
+ -622087200000,
+ -608947200000,
+ -591847200000,
+ -572486400000,
+ -558576000000,
+ -542851200000,
+ -527731200000,
+ -514425600000,
+ -490845600000,
+ -482986800000,
+ -459475200000,
+ -451537200000,
+ -428551200000,
+ -418262400000,
+ -400032000000,
+ -387428400000,
+ 142380000000,
+ 150843600000,
+ 167176800000,
+ 178664400000,
+ 482277600000,
+ 495579600000,
+ 516751200000,
+ 526424400000,
+ 545436000000,
+ 558478800000,
+ 576626400000,
+ 589323600000,
+ 609890400000,
+ 620773200000,
+ 638316000000,
+ 651618000000,
+ 669765600000,
+ 683672400000,
+ 701820000000,
+ 715726800000,
+ 733701600000,
+ 747176400000,
+ 765151200000,
+ 778021200000,
+ 796600800000,
+ 810075600000,
+ 826840800000,
+ 842821200000,
+ 858895200000,
+ 874184400000,
+ 890344800000,
+ 905029200000,
+ 923011200000,
+ 936313200000,
+ 955670400000,
+ 970783200000,
+ 986770800000,
+ 1001282400000,
+ 1017356400000,
+ 1033941600000,
+ 1048806000000,
+ 1065132000000,
+ 1081292400000,
+ 1095804000000,
+ 1112313600000,
+ 1128812400000,
+ 1143763200000,
+ 1159657200000,
+ 1175212800000,
+ 1189897200000,
+ 1206662400000,
+ 1223161200000,
+ 1238112000000,
+ 1254006000000,
+ 1269561600000,
+ 1284246000000,
+ 1301616000000,
+ 1317510000000,
+ 1333065600000,
+ 1348354800000,
+ 1364515200000,
+ 1382828400000,
+ 1395964800000,
+ 1414278000000,
+ 1427414400000,
+ 1445727600000,
+ 1458864000000,
+ 1477782000000,
+ 1490313600000,
+ 1509231600000,
+ 1521763200000,
+ 1540681200000,
+ 1553817600000,
+ 1572130800000,
+ 1585267200000,
+ 1603580400000,
+ 1616716800000,
+ 1635634800000,
+ 1648166400000,
+ 1667084400000,
+ 1679616000000,
+ 1698534000000,
+ 1711670400000,
+ 1729983600000,
+ 1743120000000,
+ 1761433200000,
+ 1774569600000,
+ 1792882800000,
+ 1806019200000,
+ 1824937200000,
+ 1837468800000,
+ 1856386800000,
+ 1868918400000,
+ 1887836400000,
+ 1900972800000,
+ 1919286000000,
+ 1932422400000,
+ 1950735600000,
+ 1963872000000,
+ 1982790000000,
+ 1995321600000,
+ 2014239600000,
+ 2026771200000,
+ 2045689200000,
+ 2058220800000,
+ 2077138800000,
+ 2090275200000,
+ 2108588400000,
+ 2121724800000,
+ 2140038000000,
+ null
+ ],
+ "offsets": [
+ -140.6667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 809112
+ },
+ {
+ "name": "Asia/Kabul",
+ "abbrs": [
+ "+04",
+ "+0430"
+ ],
+ "untils": [
+ -788932800000,
+ null
+ ],
+ "offsets": [
+ -240,
+ -270
+ ],
+ "population": 4635000
+ },
+ {
+ "name": "Asia/Kamchatka",
+ "abbrs": [
+ "LMT",
+ "+11",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+11",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+11",
+ "+12"
+ ],
+ "untils": [
+ -1487759676000,
+ -1247569200000,
+ 354888000000,
+ 370695600000,
+ 386424000000,
+ 402231600000,
+ 417960000000,
+ 433767600000,
+ 449582400000,
+ 465314400000,
+ 481039200000,
+ 496764000000,
+ 512488800000,
+ 528213600000,
+ 543938400000,
+ 559663200000,
+ 575388000000,
+ 591112800000,
+ 606837600000,
+ 622562400000,
+ 638287200000,
+ 654616800000,
+ 686070000000,
+ 695746800000,
+ 701791200000,
+ 717516000000,
+ 733240800000,
+ 748965600000,
+ 764690400000,
+ 780415200000,
+ 796140000000,
+ 811864800000,
+ 828194400000,
+ 846338400000,
+ 859644000000,
+ 877788000000,
+ 891093600000,
+ 909237600000,
+ 922543200000,
+ 941292000000,
+ 953992800000,
+ 972741600000,
+ 985442400000,
+ 1004191200000,
+ 1017496800000,
+ 1035640800000,
+ 1048946400000,
+ 1067090400000,
+ 1080396000000,
+ 1099144800000,
+ 1111845600000,
+ 1130594400000,
+ 1143295200000,
+ 1162044000000,
+ 1174744800000,
+ 1193493600000,
+ 1206799200000,
+ 1224943200000,
+ 1238248800000,
+ 1256392800000,
+ 1288450800000,
+ 1301151600000,
+ null
+ ],
+ "offsets": [
+ -634.6,
+ -660,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -660,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -660,
+ -720
+ ],
+ "population": 179526
+ },
+ {
+ "name": "Asia/Karachi",
+ "abbrs": [
+ "LMT",
+ "+0530",
+ "+0630",
+ "+0530",
+ "+05",
+ "PKT",
+ "PKST",
+ "PKT",
+ "PKST",
+ "PKT",
+ "PKST",
+ "PKT"
+ ],
+ "untils": [
+ -1988166492000,
+ -862637400000,
+ -764145000000,
+ -576135000000,
+ 38775600000,
+ 1018119600000,
+ 1033840800000,
+ 1212260400000,
+ 1225476000000,
+ 1239735600000,
+ 1257012000000,
+ null
+ ],
+ "offsets": [
+ -268.2,
+ -330,
+ -390,
+ -330,
+ -300,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300
+ ],
+ "population": 23500000
+ },
+ {
+ "name": "Asia/Kashgar",
+ "abbrs": [
+ "LMT",
+ "+06"
+ ],
+ "untils": [
+ -1325483420000,
+ null
+ ],
+ "offsets": [
+ -350.3333,
+ -360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Kathmandu",
+ "abbrs": [
+ "LMT",
+ "+0530",
+ "+0545"
+ ],
+ "untils": [
+ -1577943676000,
+ 504901800000,
+ null
+ ],
+ "offsets": [
+ -341.2667,
+ -330,
+ -345
+ ],
+ "population": 1180000
+ },
+ {
+ "name": "Asia/Katmandu",
+ "abbrs": [
+ "LMT",
+ "+0530",
+ "+0545"
+ ],
+ "untils": [
+ -1577943676000,
+ 504901800000,
+ null
+ ],
+ "offsets": [
+ -341.2667,
+ -330,
+ -345
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Khandyga",
+ "abbrs": [
+ "LMT",
+ "+08",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+08",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+09"
+ ],
+ "untils": [
+ -1579424533000,
+ -1247558400000,
+ 354898800000,
+ 370706400000,
+ 386434800000,
+ 402242400000,
+ 417970800000,
+ 433778400000,
+ 449593200000,
+ 465325200000,
+ 481050000000,
+ 496774800000,
+ 512499600000,
+ 528224400000,
+ 543949200000,
+ 559674000000,
+ 575398800000,
+ 591123600000,
+ 606848400000,
+ 622573200000,
+ 638298000000,
+ 654627600000,
+ 686080800000,
+ 695757600000,
+ 701802000000,
+ 717526800000,
+ 733251600000,
+ 748976400000,
+ 764701200000,
+ 780426000000,
+ 796150800000,
+ 811875600000,
+ 828205200000,
+ 846349200000,
+ 859654800000,
+ 877798800000,
+ 891104400000,
+ 909248400000,
+ 922554000000,
+ 941302800000,
+ 954003600000,
+ 972752400000,
+ 985453200000,
+ 1004202000000,
+ 1017507600000,
+ 1035651600000,
+ 1048957200000,
+ 1067101200000,
+ 1072882800000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143302400000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1206806400000,
+ 1224950400000,
+ 1238256000000,
+ 1256400000000,
+ 1269705600000,
+ 1288454400000,
+ 1301155200000,
+ 1315832400000,
+ 1414252800000,
+ null
+ ],
+ "offsets": [
+ -542.2167,
+ -480,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -480,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -540
+ ],
+ "population": 6638
+ },
+ {
+ "name": "Asia/Kolkata",
+ "abbrs": [
+ "MMT",
+ "IST",
+ "+0630",
+ "IST",
+ "+0630",
+ "IST"
+ ],
+ "untils": [
+ -2019705670000,
+ -891581400000,
+ -872058600000,
+ -862637400000,
+ -764145000000,
+ null
+ ],
+ "offsets": [
+ -321.1667,
+ -330,
+ -390,
+ -330,
+ -390,
+ -330
+ ],
+ "population": 14667000
+ },
+ {
+ "name": "Asia/Krasnoyarsk",
+ "abbrs": [
+ "LMT",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07"
+ ],
+ "untils": [
+ -1577513486000,
+ -1247551200000,
+ 354906000000,
+ 370713600000,
+ 386442000000,
+ 402249600000,
+ 417978000000,
+ 433785600000,
+ 449600400000,
+ 465332400000,
+ 481057200000,
+ 496782000000,
+ 512506800000,
+ 528231600000,
+ 543956400000,
+ 559681200000,
+ 575406000000,
+ 591130800000,
+ 606855600000,
+ 622580400000,
+ 638305200000,
+ 654634800000,
+ 686088000000,
+ 695764800000,
+ 701809200000,
+ 717534000000,
+ 733258800000,
+ 748983600000,
+ 764708400000,
+ 780433200000,
+ 796158000000,
+ 811882800000,
+ 828212400000,
+ 846356400000,
+ 859662000000,
+ 877806000000,
+ 891111600000,
+ 909255600000,
+ 922561200000,
+ 941310000000,
+ 954010800000,
+ 972759600000,
+ 985460400000,
+ 1004209200000,
+ 1017514800000,
+ 1035658800000,
+ 1048964400000,
+ 1067108400000,
+ 1080414000000,
+ 1099162800000,
+ 1111863600000,
+ 1130612400000,
+ 1143313200000,
+ 1162062000000,
+ 1174762800000,
+ 1193511600000,
+ 1206817200000,
+ 1224961200000,
+ 1238266800000,
+ 1256410800000,
+ 1269716400000,
+ 1288465200000,
+ 1301166000000,
+ 1414260000000,
+ null
+ ],
+ "offsets": [
+ -371.4333,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420
+ ],
+ "population": 1007000
+ },
+ {
+ "name": "Asia/Kuala_Lumpur",
+ "abbrs": [
+ "SMT",
+ "+07",
+ "+0720",
+ "+0730",
+ "+09",
+ "+0730",
+ "+08"
+ ],
+ "untils": [
+ -2038200925000,
+ -1167634800000,
+ -894180000000,
+ -879665400000,
+ -767005200000,
+ 378664200000,
+ null
+ ],
+ "offsets": [
+ -415.4167,
+ -420,
+ -440,
+ -450,
+ -540,
+ -450,
+ -480
+ ],
+ "population": 7088000
+ },
+ {
+ "name": "Asia/Kuching",
+ "abbrs": [
+ "LMT",
+ "+0730",
+ "+08",
+ "+0820",
+ "+08",
+ "+0820",
+ "+08",
+ "+0820",
+ "+08",
+ "+0820",
+ "+08",
+ "+0820",
+ "+08",
+ "+0820",
+ "+08",
+ "+0820",
+ "+08",
+ "+09",
+ "+08"
+ ],
+ "untils": [
+ -1383463280000,
+ -1167636600000,
+ -1082448000000,
+ -1074586800000,
+ -1050825600000,
+ -1042964400000,
+ -1019289600000,
+ -1011428400000,
+ -987753600000,
+ -979892400000,
+ -956217600000,
+ -948356400000,
+ -924595200000,
+ -916734000000,
+ -893059200000,
+ -885198000000,
+ -879667200000,
+ -767005200000,
+ null
+ ],
+ "offsets": [
+ -441.3333,
+ -450,
+ -480,
+ -500,
+ -480,
+ -500,
+ -480,
+ -500,
+ -480,
+ -500,
+ -480,
+ -500,
+ -480,
+ -500,
+ -480,
+ -500,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 134317
+ },
+ {
+ "name": "Asia/Kuwait",
+ "abbrs": [
+ "LMT",
+ "+03"
+ ],
+ "untils": [
+ -719636812000,
+ null
+ ],
+ "offsets": [
+ -186.8667,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Macao",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1830412800000,
+ -277360200000,
+ -257405400000,
+ -245910600000,
+ -225955800000,
+ -214473600000,
+ -194506200000,
+ -182406600000,
+ -163056600000,
+ -150969600000,
+ -131619600000,
+ -117088200000,
+ -101367000000,
+ -85638600000,
+ -69312600000,
+ -53584200000,
+ -37863000000,
+ -22134600000,
+ -6413400000,
+ 9315000000,
+ 25036200000,
+ 40764600000,
+ 56485800000,
+ 72201600000,
+ 87922800000,
+ 103651200000,
+ 119977200000,
+ 135705600000,
+ 151439400000,
+ 167167800000,
+ 182889000000,
+ 198617400000,
+ 214338600000,
+ 230067000000,
+ 245788200000,
+ 261504000000,
+ 277225200000,
+ 292953600000,
+ 309279600000,
+ 325008000000,
+ 340729200000,
+ null
+ ],
+ "offsets": [
+ -454.3333,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Macau",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1830412800000,
+ -277360200000,
+ -257405400000,
+ -245910600000,
+ -225955800000,
+ -214473600000,
+ -194506200000,
+ -182406600000,
+ -163056600000,
+ -150969600000,
+ -131619600000,
+ -117088200000,
+ -101367000000,
+ -85638600000,
+ -69312600000,
+ -53584200000,
+ -37863000000,
+ -22134600000,
+ -6413400000,
+ 9315000000,
+ 25036200000,
+ 40764600000,
+ 56485800000,
+ 72201600000,
+ 87922800000,
+ 103651200000,
+ 119977200000,
+ 135705600000,
+ 151439400000,
+ 167167800000,
+ 182889000000,
+ 198617400000,
+ 214338600000,
+ 230067000000,
+ 245788200000,
+ 261504000000,
+ 277225200000,
+ 292953600000,
+ 309279600000,
+ 325008000000,
+ 340729200000,
+ null
+ ],
+ "offsets": [
+ -454.3333,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 566375
+ },
+ {
+ "name": "Asia/Magadan",
+ "abbrs": [
+ "LMT",
+ "+10",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+10",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+10",
+ "+11"
+ ],
+ "untils": [
+ -1441188192000,
+ -1247565600000,
+ 354891600000,
+ 370699200000,
+ 386427600000,
+ 402235200000,
+ 417963600000,
+ 433771200000,
+ 449586000000,
+ 465318000000,
+ 481042800000,
+ 496767600000,
+ 512492400000,
+ 528217200000,
+ 543942000000,
+ 559666800000,
+ 575391600000,
+ 591116400000,
+ 606841200000,
+ 622566000000,
+ 638290800000,
+ 654620400000,
+ 686073600000,
+ 695750400000,
+ 701794800000,
+ 717519600000,
+ 733244400000,
+ 748969200000,
+ 764694000000,
+ 780418800000,
+ 796143600000,
+ 811868400000,
+ 828198000000,
+ 846342000000,
+ 859647600000,
+ 877791600000,
+ 891097200000,
+ 909241200000,
+ 922546800000,
+ 941295600000,
+ 953996400000,
+ 972745200000,
+ 985446000000,
+ 1004194800000,
+ 1017500400000,
+ 1035644400000,
+ 1048950000000,
+ 1067094000000,
+ 1080399600000,
+ 1099148400000,
+ 1111849200000,
+ 1130598000000,
+ 1143298800000,
+ 1162047600000,
+ 1174748400000,
+ 1193497200000,
+ 1206802800000,
+ 1224946800000,
+ 1238252400000,
+ 1256396400000,
+ 1269702000000,
+ 1288450800000,
+ 1301151600000,
+ 1414245600000,
+ 1461427200000,
+ null
+ ],
+ "offsets": [
+ -603.2,
+ -600,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -600,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -600,
+ -660
+ ],
+ "population": 95263
+ },
+ {
+ "name": "Asia/Makassar",
+ "abbrs": [
+ "LMT",
+ "MMT",
+ "+08",
+ "+09",
+ "WITA"
+ ],
+ "untils": [
+ -1577951856000,
+ -1172908656000,
+ -880272000000,
+ -766054800000,
+ null
+ ],
+ "offsets": [
+ -477.6,
+ -477.6,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 1484000
+ },
+ {
+ "name": "Asia/Manila",
+ "abbrs": [
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08"
+ ],
+ "untils": [
+ -1046678400000,
+ -1038733200000,
+ -873273600000,
+ -794221200000,
+ -496224000000,
+ -489315600000,
+ 259344000000,
+ 275151600000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 24123000
+ },
+ {
+ "name": "Asia/Muscat",
+ "abbrs": [
+ "LMT",
+ "+04"
+ ],
+ "untils": [
+ -1577936472000,
+ null
+ ],
+ "offsets": [
+ -221.2,
+ -240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Nicosia",
+ "abbrs": [
+ "LMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1518920008000,
+ 166572000000,
+ 182293200000,
+ 200959200000,
+ 213829200000,
+ 228866400000,
+ 243982800000,
+ 260316000000,
+ 276123600000,
+ 291765600000,
+ 307486800000,
+ 323820000000,
+ 338936400000,
+ 354664800000,
+ 370386000000,
+ 386114400000,
+ 401835600000,
+ 417564000000,
+ 433285200000,
+ 449013600000,
+ 465339600000,
+ 481068000000,
+ 496789200000,
+ 512517600000,
+ 528238800000,
+ 543967200000,
+ 559688400000,
+ 575416800000,
+ 591138000000,
+ 606866400000,
+ 622587600000,
+ 638316000000,
+ 654642000000,
+ 670370400000,
+ 686091600000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 843944400000,
+ 859672800000,
+ 875394000000,
+ 891122400000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -133.4667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 321816
+ },
+ {
+ "name": "Asia/Novokuznetsk",
+ "abbrs": [
+ "LMT",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07"
+ ],
+ "untils": [
+ -1441259328000,
+ -1247551200000,
+ 354906000000,
+ 370713600000,
+ 386442000000,
+ 402249600000,
+ 417978000000,
+ 433785600000,
+ 449600400000,
+ 465332400000,
+ 481057200000,
+ 496782000000,
+ 512506800000,
+ 528231600000,
+ 543956400000,
+ 559681200000,
+ 575406000000,
+ 591130800000,
+ 606855600000,
+ 622580400000,
+ 638305200000,
+ 654634800000,
+ 686088000000,
+ 695764800000,
+ 701809200000,
+ 717534000000,
+ 733258800000,
+ 748983600000,
+ 764708400000,
+ 780433200000,
+ 796158000000,
+ 811882800000,
+ 828212400000,
+ 846356400000,
+ 859662000000,
+ 877806000000,
+ 891111600000,
+ 909255600000,
+ 922561200000,
+ 941310000000,
+ 954010800000,
+ 972759600000,
+ 985460400000,
+ 1004209200000,
+ 1017514800000,
+ 1035658800000,
+ 1048964400000,
+ 1067108400000,
+ 1080414000000,
+ 1099162800000,
+ 1111863600000,
+ 1130612400000,
+ 1143313200000,
+ 1162062000000,
+ 1174762800000,
+ 1193511600000,
+ 1206817200000,
+ 1224961200000,
+ 1238266800000,
+ 1256410800000,
+ 1288468800000,
+ 1301169600000,
+ null
+ ],
+ "offsets": [
+ -348.8,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420
+ ],
+ "population": 549383
+ },
+ {
+ "name": "Asia/Novosibirsk",
+ "abbrs": [
+ "LMT",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07"
+ ],
+ "untils": [
+ -1579476700000,
+ -1247551200000,
+ 354906000000,
+ 370713600000,
+ 386442000000,
+ 402249600000,
+ 417978000000,
+ 433785600000,
+ 449600400000,
+ 465332400000,
+ 481057200000,
+ 496782000000,
+ 512506800000,
+ 528231600000,
+ 543956400000,
+ 559681200000,
+ 575406000000,
+ 591130800000,
+ 606855600000,
+ 622580400000,
+ 638305200000,
+ 654634800000,
+ 686088000000,
+ 695764800000,
+ 701809200000,
+ 717534000000,
+ 733258800000,
+ 738086400000,
+ 748987200000,
+ 764712000000,
+ 780436800000,
+ 796161600000,
+ 811886400000,
+ 828216000000,
+ 846360000000,
+ 859665600000,
+ 877809600000,
+ 891115200000,
+ 909259200000,
+ 922564800000,
+ 941313600000,
+ 954014400000,
+ 972763200000,
+ 985464000000,
+ 1004212800000,
+ 1017518400000,
+ 1035662400000,
+ 1048968000000,
+ 1067112000000,
+ 1080417600000,
+ 1099166400000,
+ 1111867200000,
+ 1130616000000,
+ 1143316800000,
+ 1162065600000,
+ 1174766400000,
+ 1193515200000,
+ 1206820800000,
+ 1224964800000,
+ 1238270400000,
+ 1256414400000,
+ 1269720000000,
+ 1288468800000,
+ 1301169600000,
+ 1414263600000,
+ 1469304000000,
+ null
+ ],
+ "offsets": [
+ -331.6667,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420
+ ],
+ "population": 1486000
+ },
+ {
+ "name": "Asia/Omsk",
+ "abbrs": [
+ "LMT",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06"
+ ],
+ "untils": [
+ -1582088010000,
+ -1247547600000,
+ 354909600000,
+ 370717200000,
+ 386445600000,
+ 402253200000,
+ 417981600000,
+ 433789200000,
+ 449604000000,
+ 465336000000,
+ 481060800000,
+ 496785600000,
+ 512510400000,
+ 528235200000,
+ 543960000000,
+ 559684800000,
+ 575409600000,
+ 591134400000,
+ 606859200000,
+ 622584000000,
+ 638308800000,
+ 654638400000,
+ 686091600000,
+ 695768400000,
+ 701812800000,
+ 717537600000,
+ 733262400000,
+ 748987200000,
+ 764712000000,
+ 780436800000,
+ 796161600000,
+ 811886400000,
+ 828216000000,
+ 846360000000,
+ 859665600000,
+ 877809600000,
+ 891115200000,
+ 909259200000,
+ 922564800000,
+ 941313600000,
+ 954014400000,
+ 972763200000,
+ 985464000000,
+ 1004212800000,
+ 1017518400000,
+ 1035662400000,
+ 1048968000000,
+ 1067112000000,
+ 1080417600000,
+ 1099166400000,
+ 1111867200000,
+ 1130616000000,
+ 1143316800000,
+ 1162065600000,
+ 1174766400000,
+ 1193515200000,
+ 1206820800000,
+ 1224964800000,
+ 1238270400000,
+ 1256414400000,
+ 1269720000000,
+ 1288468800000,
+ 1301169600000,
+ 1414263600000,
+ null
+ ],
+ "offsets": [
+ -293.5,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360
+ ],
+ "population": 1154000
+ },
+ {
+ "name": "Asia/Oral",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05"
+ ],
+ "untils": [
+ -1441164324000,
+ -1247540400000,
+ 354913200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 622591200000,
+ 638316000000,
+ 654645600000,
+ 670370400000,
+ 686095200000,
+ 695772000000,
+ 717544800000,
+ 733269600000,
+ 748994400000,
+ 764719200000,
+ 780444000000,
+ 796168800000,
+ 811893600000,
+ 828223200000,
+ 846367200000,
+ 859672800000,
+ 877816800000,
+ 891122400000,
+ 909266400000,
+ 922572000000,
+ 941320800000,
+ 954021600000,
+ 972770400000,
+ 985471200000,
+ 1004220000000,
+ 1017525600000,
+ 1035669600000,
+ 1048975200000,
+ 1067119200000,
+ 1080424800000,
+ null
+ ],
+ "offsets": [
+ -205.4,
+ -180,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300
+ ],
+ "population": 271900
+ },
+ {
+ "name": "Asia/Phnom_Penh",
+ "abbrs": [
+ "BMT",
+ "+07"
+ ],
+ "untils": [
+ -1570084924000,
+ null
+ ],
+ "offsets": [
+ -402.0667,
+ -420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Pontianak",
+ "abbrs": [
+ "LMT",
+ "PMT",
+ "+0730",
+ "+09",
+ "+0730",
+ "+08",
+ "+0730",
+ "WITA",
+ "WIB"
+ ],
+ "untils": [
+ -1946186240000,
+ -1172906240000,
+ -881220600000,
+ -766054800000,
+ -683883000000,
+ -620812800000,
+ -189415800000,
+ 567964800000,
+ null
+ ],
+ "offsets": [
+ -437.3333,
+ -437.3333,
+ -450,
+ -540,
+ -450,
+ -480,
+ -450,
+ -480,
+ -420
+ ],
+ "population": 234021
+ },
+ {
+ "name": "Asia/Pyongyang",
+ "abbrs": [
+ "LMT",
+ "KST",
+ "JST",
+ "KST",
+ "KST",
+ "KST"
+ ],
+ "untils": [
+ -1948782180000,
+ -1830414600000,
+ -768646800000,
+ 1439564400000,
+ 1525447800000,
+ null
+ ],
+ "offsets": [
+ -503,
+ -510,
+ -540,
+ -540,
+ -510,
+ -540
+ ],
+ "population": 2850000
+ },
+ {
+ "name": "Asia/Qatar",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+03"
+ ],
+ "untils": [
+ -1577935568000,
+ 76190400000,
+ null
+ ],
+ "offsets": [
+ -206.1333,
+ -240,
+ -180
+ ],
+ "population": 956460
+ },
+ {
+ "name": "Asia/Qyzylorda",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06"
+ ],
+ "untils": [
+ -1441167712000,
+ -1247544000000,
+ 354913200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 695768400000,
+ 717541200000,
+ 733266000000,
+ 748990800000,
+ 764715600000,
+ 780440400000,
+ 796165200000,
+ 811890000000,
+ 828219600000,
+ 846363600000,
+ 859669200000,
+ 877813200000,
+ 891118800000,
+ 909262800000,
+ 922568400000,
+ 941317200000,
+ 954018000000,
+ 972766800000,
+ 985467600000,
+ 1004216400000,
+ 1017522000000,
+ 1035666000000,
+ 1048971600000,
+ 1067115600000,
+ 1080421200000,
+ null
+ ],
+ "offsets": [
+ -261.8667,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360
+ ],
+ "population": 727990
+ },
+ {
+ "name": "Asia/Rangoon",
+ "abbrs": [
+ "RMT",
+ "+0630",
+ "+09",
+ "+0630"
+ ],
+ "untils": [
+ -1577946287000,
+ -873268200000,
+ -778410000000,
+ null
+ ],
+ "offsets": [
+ -384.7833,
+ -390,
+ -540,
+ -390
+ ],
+ "population": 4800000
+ },
+ {
+ "name": "Asia/Riyadh",
+ "abbrs": [
+ "LMT",
+ "+03"
+ ],
+ "untils": [
+ -719636812000,
+ null
+ ],
+ "offsets": [
+ -186.8667,
+ -180
+ ],
+ "population": 5666000
+ },
+ {
+ "name": "Asia/Saigon",
+ "abbrs": [
+ "LMT",
+ "PLMT",
+ "+07",
+ "+08",
+ "+09",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07"
+ ],
+ "untils": [
+ -2004073600000,
+ -1851577590000,
+ -852105600000,
+ -782643600000,
+ -767869200000,
+ -718095600000,
+ -457776000000,
+ -315648000000,
+ 171820800000,
+ null
+ ],
+ "offsets": [
+ -426.6667,
+ -426.5,
+ -420,
+ -480,
+ -540,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Sakhalin",
+ "abbrs": [
+ "LMT",
+ "+09",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+10",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11"
+ ],
+ "untils": [
+ -2031039048000,
+ -768560400000,
+ 354891600000,
+ 370699200000,
+ 386427600000,
+ 402235200000,
+ 417963600000,
+ 433771200000,
+ 449586000000,
+ 465318000000,
+ 481042800000,
+ 496767600000,
+ 512492400000,
+ 528217200000,
+ 543942000000,
+ 559666800000,
+ 575391600000,
+ 591116400000,
+ 606841200000,
+ 622566000000,
+ 638290800000,
+ 654620400000,
+ 686073600000,
+ 695750400000,
+ 701794800000,
+ 717519600000,
+ 733244400000,
+ 748969200000,
+ 764694000000,
+ 780418800000,
+ 796143600000,
+ 811868400000,
+ 828198000000,
+ 846342000000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 972748800000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143302400000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1206806400000,
+ 1224950400000,
+ 1238256000000,
+ 1256400000000,
+ 1269705600000,
+ 1288454400000,
+ 1301155200000,
+ 1414249200000,
+ 1459008000000,
+ null
+ ],
+ "offsets": [
+ -570.8,
+ -540,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -600,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 580000
+ },
+ {
+ "name": "Asia/Samarkand",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05"
+ ],
+ "untils": [
+ -1441168073000,
+ -1247544000000,
+ 354913200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 670366800000,
+ 686091600000,
+ null
+ ],
+ "offsets": [
+ -267.8833,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300
+ ],
+ "population": 361339
+ },
+ {
+ "name": "Asia/Seoul",
+ "abbrs": [
+ "LMT",
+ "KST",
+ "JST",
+ "KST",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST"
+ ],
+ "untils": [
+ -1948782472000,
+ -1830414600000,
+ -767350800000,
+ -498128400000,
+ -462702600000,
+ -451733400000,
+ -429784200000,
+ -418296600000,
+ -399544200000,
+ -387451800000,
+ -368094600000,
+ -356002200000,
+ -336645000000,
+ -324552600000,
+ -305195400000,
+ -293103000000,
+ -264933000000,
+ 547578000000,
+ 560883600000,
+ 579027600000,
+ 592333200000,
+ null
+ ],
+ "offsets": [
+ -507.8667,
+ -510,
+ -540,
+ -540,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540
+ ],
+ "population": 23480000
+ },
+ {
+ "name": "Asia/Shanghai",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -933494400000,
+ -923130000000,
+ -908784000000,
+ -891594000000,
+ 515520000000,
+ 527007600000,
+ 545155200000,
+ 558457200000,
+ 576604800000,
+ 589906800000,
+ 608659200000,
+ 621961200000,
+ 640108800000,
+ 653410800000,
+ 671558400000,
+ 684860400000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 23416000
+ },
+ {
+ "name": "Asia/Singapore",
+ "abbrs": [
+ "SMT",
+ "+07",
+ "+0720",
+ "+0730",
+ "+09",
+ "+0730",
+ "+08"
+ ],
+ "untils": [
+ -2038200925000,
+ -1167634800000,
+ -894180000000,
+ -879665400000,
+ -767005200000,
+ 378664200000,
+ null
+ ],
+ "offsets": [
+ -415.4167,
+ -420,
+ -440,
+ -450,
+ -540,
+ -450,
+ -480
+ ],
+ "population": 5624000
+ },
+ {
+ "name": "Asia/Srednekolymsk",
+ "abbrs": [
+ "LMT",
+ "+10",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+10",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11"
+ ],
+ "untils": [
+ -1441188892000,
+ -1247565600000,
+ 354891600000,
+ 370699200000,
+ 386427600000,
+ 402235200000,
+ 417963600000,
+ 433771200000,
+ 449586000000,
+ 465318000000,
+ 481042800000,
+ 496767600000,
+ 512492400000,
+ 528217200000,
+ 543942000000,
+ 559666800000,
+ 575391600000,
+ 591116400000,
+ 606841200000,
+ 622566000000,
+ 638290800000,
+ 654620400000,
+ 686073600000,
+ 695750400000,
+ 701794800000,
+ 717519600000,
+ 733244400000,
+ 748969200000,
+ 764694000000,
+ 780418800000,
+ 796143600000,
+ 811868400000,
+ 828198000000,
+ 846342000000,
+ 859647600000,
+ 877791600000,
+ 891097200000,
+ 909241200000,
+ 922546800000,
+ 941295600000,
+ 953996400000,
+ 972745200000,
+ 985446000000,
+ 1004194800000,
+ 1017500400000,
+ 1035644400000,
+ 1048950000000,
+ 1067094000000,
+ 1080399600000,
+ 1099148400000,
+ 1111849200000,
+ 1130598000000,
+ 1143298800000,
+ 1162047600000,
+ 1174748400000,
+ 1193497200000,
+ 1206802800000,
+ 1224946800000,
+ 1238252400000,
+ 1256396400000,
+ 1269702000000,
+ 1288450800000,
+ 1301151600000,
+ 1414245600000,
+ null
+ ],
+ "offsets": [
+ -614.8667,
+ -600,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -600,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660
+ ],
+ "population": 3525
+ },
+ {
+ "name": "Asia/Taipei",
+ "abbrs": [
+ "CST",
+ "JST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1017820800000,
+ -766224000000,
+ -745833600000,
+ -733827600000,
+ -716889600000,
+ -699613200000,
+ -683884800000,
+ -670669200000,
+ -652348800000,
+ -639133200000,
+ -620812800000,
+ -607597200000,
+ -589276800000,
+ -576061200000,
+ -562924800000,
+ -541760400000,
+ -528710400000,
+ -510224400000,
+ -497174400000,
+ -478688400000,
+ -465638400000,
+ -449830800000,
+ -434016000000,
+ -418208400000,
+ -402480000000,
+ -386672400000,
+ -370944000000,
+ -355136400000,
+ -339408000000,
+ -323600400000,
+ -302515200000,
+ -291978000000,
+ -270979200000,
+ -260442000000,
+ 133977600000,
+ 149785200000,
+ 165513600000,
+ 181321200000,
+ 299606400000,
+ 307551600000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 7438000
+ },
+ {
+ "name": "Asia/Tashkent",
+ "abbrs": [
+ "LMT",
+ "+05",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+05"
+ ],
+ "untils": [
+ -1441168631000,
+ -1247547600000,
+ 354909600000,
+ 370717200000,
+ 386445600000,
+ 402253200000,
+ 417981600000,
+ 433789200000,
+ 449604000000,
+ 465336000000,
+ 481060800000,
+ 496785600000,
+ 512510400000,
+ 528235200000,
+ 543960000000,
+ 559684800000,
+ 575409600000,
+ 591134400000,
+ 606859200000,
+ 622584000000,
+ 638308800000,
+ 654638400000,
+ 686091600000,
+ null
+ ],
+ "offsets": [
+ -277.1833,
+ -300,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -300
+ ],
+ "population": 2250000
+ },
+ {
+ "name": "Asia/Tbilisi",
+ "abbrs": [
+ "TBMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04"
+ ],
+ "untils": [
+ -1441162751000,
+ -405140400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 606866400000,
+ 622591200000,
+ 638316000000,
+ 654645600000,
+ 686098800000,
+ 701816400000,
+ 717537600000,
+ 733266000000,
+ 748987200000,
+ 764715600000,
+ 796161600000,
+ 811882800000,
+ 828216000000,
+ 877806000000,
+ 891115200000,
+ 909255600000,
+ 922564800000,
+ 941310000000,
+ 954014400000,
+ 972759600000,
+ 985464000000,
+ 1004209200000,
+ 1017518400000,
+ 1035658800000,
+ 1048968000000,
+ 1067108400000,
+ 1080417600000,
+ 1088276400000,
+ 1099177200000,
+ 1111878000000,
+ null
+ ],
+ "offsets": [
+ -179.1833,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240
+ ],
+ "population": 1125000
+ },
+ {
+ "name": "Asia/Tehran",
+ "abbrs": [
+ "LMT",
+ "TMT",
+ "+0330",
+ "+04",
+ "+05",
+ "+04",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330"
+ ],
+ "untils": [
+ -1704165944000,
+ -757394744000,
+ 247177800000,
+ 259272000000,
+ 277758000000,
+ 283982400000,
+ 290809800000,
+ 306531000000,
+ 322432200000,
+ 338499000000,
+ 673216200000,
+ 685481400000,
+ 701209800000,
+ 717103800000,
+ 732745800000,
+ 748639800000,
+ 764281800000,
+ 780175800000,
+ 795817800000,
+ 811711800000,
+ 827353800000,
+ 843247800000,
+ 858976200000,
+ 874870200000,
+ 890512200000,
+ 906406200000,
+ 922048200000,
+ 937942200000,
+ 953584200000,
+ 969478200000,
+ 985206600000,
+ 1001100600000,
+ 1016742600000,
+ 1032636600000,
+ 1048278600000,
+ 1064172600000,
+ 1079814600000,
+ 1095708600000,
+ 1111437000000,
+ 1127331000000,
+ 1206045000000,
+ 1221939000000,
+ 1237667400000,
+ 1253561400000,
+ 1269203400000,
+ 1285097400000,
+ 1300739400000,
+ 1316633400000,
+ 1332275400000,
+ 1348169400000,
+ 1363897800000,
+ 1379791800000,
+ 1395433800000,
+ 1411327800000,
+ 1426969800000,
+ 1442863800000,
+ 1458505800000,
+ 1474399800000,
+ 1490128200000,
+ 1506022200000,
+ 1521664200000,
+ 1537558200000,
+ 1553200200000,
+ 1569094200000,
+ 1584736200000,
+ 1600630200000,
+ 1616358600000,
+ 1632252600000,
+ 1647894600000,
+ 1663788600000,
+ 1679430600000,
+ 1695324600000,
+ 1710966600000,
+ 1726860600000,
+ 1742589000000,
+ 1758483000000,
+ 1774125000000,
+ 1790019000000,
+ 1805661000000,
+ 1821555000000,
+ 1837197000000,
+ 1853091000000,
+ 1868733000000,
+ 1884627000000,
+ 1900355400000,
+ 1916249400000,
+ 1931891400000,
+ 1947785400000,
+ 1963427400000,
+ 1979321400000,
+ 1994963400000,
+ 2010857400000,
+ 2026585800000,
+ 2042479800000,
+ 2058121800000,
+ 2074015800000,
+ 2089657800000,
+ 2105551800000,
+ 2121193800000,
+ 2137087800000,
+ null
+ ],
+ "offsets": [
+ -205.7333,
+ -205.7333,
+ -210,
+ -240,
+ -300,
+ -240,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210
+ ],
+ "population": 13532000
+ },
+ {
+ "name": "Asia/Tel_Aviv",
+ "abbrs": [
+ "JMT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDDT",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST"
+ ],
+ "untils": [
+ -1641003640000,
+ -933645600000,
+ -857358000000,
+ -844300800000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762656400000,
+ -748310400000,
+ -731127600000,
+ -681962400000,
+ -673243200000,
+ -667962000000,
+ -652327200000,
+ -636426000000,
+ -622087200000,
+ -608947200000,
+ -591847200000,
+ -572486400000,
+ -558576000000,
+ -542851200000,
+ -527731200000,
+ -514425600000,
+ -490845600000,
+ -482986800000,
+ -459475200000,
+ -451537200000,
+ -428551200000,
+ -418262400000,
+ -400032000000,
+ -387428400000,
+ 142380000000,
+ 150843600000,
+ 167176800000,
+ 178664400000,
+ 482277600000,
+ 495579600000,
+ 516751200000,
+ 526424400000,
+ 545436000000,
+ 558478800000,
+ 576626400000,
+ 589323600000,
+ 609890400000,
+ 620773200000,
+ 638316000000,
+ 651618000000,
+ 669765600000,
+ 683672400000,
+ 701820000000,
+ 715726800000,
+ 733701600000,
+ 747176400000,
+ 765151200000,
+ 778021200000,
+ 796600800000,
+ 810075600000,
+ 826840800000,
+ 842821200000,
+ 858895200000,
+ 874184400000,
+ 890344800000,
+ 905029200000,
+ 923011200000,
+ 936313200000,
+ 955670400000,
+ 970783200000,
+ 986770800000,
+ 1001282400000,
+ 1017356400000,
+ 1033941600000,
+ 1048806000000,
+ 1065132000000,
+ 1081292400000,
+ 1095804000000,
+ 1112313600000,
+ 1128812400000,
+ 1143763200000,
+ 1159657200000,
+ 1175212800000,
+ 1189897200000,
+ 1206662400000,
+ 1223161200000,
+ 1238112000000,
+ 1254006000000,
+ 1269561600000,
+ 1284246000000,
+ 1301616000000,
+ 1317510000000,
+ 1333065600000,
+ 1348354800000,
+ 1364515200000,
+ 1382828400000,
+ 1395964800000,
+ 1414278000000,
+ 1427414400000,
+ 1445727600000,
+ 1458864000000,
+ 1477782000000,
+ 1490313600000,
+ 1509231600000,
+ 1521763200000,
+ 1540681200000,
+ 1553817600000,
+ 1572130800000,
+ 1585267200000,
+ 1603580400000,
+ 1616716800000,
+ 1635634800000,
+ 1648166400000,
+ 1667084400000,
+ 1679616000000,
+ 1698534000000,
+ 1711670400000,
+ 1729983600000,
+ 1743120000000,
+ 1761433200000,
+ 1774569600000,
+ 1792882800000,
+ 1806019200000,
+ 1824937200000,
+ 1837468800000,
+ 1856386800000,
+ 1868918400000,
+ 1887836400000,
+ 1900972800000,
+ 1919286000000,
+ 1932422400000,
+ 1950735600000,
+ 1963872000000,
+ 1982790000000,
+ 1995321600000,
+ 2014239600000,
+ 2026771200000,
+ 2045689200000,
+ 2058220800000,
+ 2077138800000,
+ 2090275200000,
+ 2108588400000,
+ 2121724800000,
+ 2140038000000,
+ null
+ ],
+ "offsets": [
+ -140.6667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Thimbu",
+ "abbrs": [
+ "LMT",
+ "+0530",
+ "+06"
+ ],
+ "untils": [
+ -706341516000,
+ 560025000000,
+ null
+ ],
+ "offsets": [
+ -358.6,
+ -330,
+ -360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Thimphu",
+ "abbrs": [
+ "LMT",
+ "+0530",
+ "+06"
+ ],
+ "untils": [
+ -706341516000,
+ 560025000000,
+ null
+ ],
+ "offsets": [
+ -358.6,
+ -330,
+ -360
+ ],
+ "population": 79185
+ },
+ {
+ "name": "Asia/Tokyo",
+ "abbrs": [
+ "JST",
+ "JDT",
+ "JST",
+ "JDT",
+ "JST",
+ "JDT",
+ "JST",
+ "JDT",
+ "JST"
+ ],
+ "untils": [
+ -683802000000,
+ -672314400000,
+ -654771600000,
+ -640864800000,
+ -620298000000,
+ -609415200000,
+ -588848400000,
+ -577965600000,
+ null
+ ],
+ "offsets": [
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540
+ ],
+ "population": 37843000
+ },
+ {
+ "name": "Asia/Tomsk",
+ "abbrs": [
+ "LMT",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+08",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07",
+ "+06",
+ "+07"
+ ],
+ "untils": [
+ -1578807591000,
+ -1247551200000,
+ 354906000000,
+ 370713600000,
+ 386442000000,
+ 402249600000,
+ 417978000000,
+ 433785600000,
+ 449600400000,
+ 465332400000,
+ 481057200000,
+ 496782000000,
+ 512506800000,
+ 528231600000,
+ 543956400000,
+ 559681200000,
+ 575406000000,
+ 591130800000,
+ 606855600000,
+ 622580400000,
+ 638305200000,
+ 654634800000,
+ 686088000000,
+ 695764800000,
+ 701809200000,
+ 717534000000,
+ 733258800000,
+ 748983600000,
+ 764708400000,
+ 780433200000,
+ 796158000000,
+ 811882800000,
+ 828212400000,
+ 846356400000,
+ 859662000000,
+ 877806000000,
+ 891111600000,
+ 909255600000,
+ 922561200000,
+ 941310000000,
+ 954010800000,
+ 972759600000,
+ 985460400000,
+ 1004209200000,
+ 1017514800000,
+ 1020193200000,
+ 1035662400000,
+ 1048968000000,
+ 1067112000000,
+ 1080417600000,
+ 1099166400000,
+ 1111867200000,
+ 1130616000000,
+ 1143316800000,
+ 1162065600000,
+ 1174766400000,
+ 1193515200000,
+ 1206820800000,
+ 1224964800000,
+ 1238270400000,
+ 1256414400000,
+ 1269720000000,
+ 1288468800000,
+ 1301169600000,
+ 1414263600000,
+ 1464465600000,
+ null
+ ],
+ "offsets": [
+ -339.85,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -480,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420,
+ -360,
+ -420
+ ],
+ "population": 1047394
+ },
+ {
+ "name": "Asia/Ujung_Pandang",
+ "abbrs": [
+ "LMT",
+ "MMT",
+ "+08",
+ "+09",
+ "WITA"
+ ],
+ "untils": [
+ -1577951856000,
+ -1172908656000,
+ -880272000000,
+ -766054800000,
+ null
+ ],
+ "offsets": [
+ -477.6,
+ -477.6,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Ulaanbaatar",
+ "abbrs": [
+ "LMT",
+ "+07",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08"
+ ],
+ "untils": [
+ -2032931252000,
+ 252435600000,
+ 417974400000,
+ 433782000000,
+ 449596800000,
+ 465318000000,
+ 481046400000,
+ 496767600000,
+ 512496000000,
+ 528217200000,
+ 543945600000,
+ 559666800000,
+ 575395200000,
+ 591116400000,
+ 606844800000,
+ 622566000000,
+ 638294400000,
+ 654620400000,
+ 670348800000,
+ 686070000000,
+ 701798400000,
+ 717519600000,
+ 733248000000,
+ 748969200000,
+ 764697600000,
+ 780418800000,
+ 796147200000,
+ 811868400000,
+ 828201600000,
+ 843922800000,
+ 859651200000,
+ 875372400000,
+ 891100800000,
+ 906822000000,
+ 988394400000,
+ 1001696400000,
+ 1017424800000,
+ 1033146000000,
+ 1048874400000,
+ 1064595600000,
+ 1080324000000,
+ 1096045200000,
+ 1111773600000,
+ 1127494800000,
+ 1143223200000,
+ 1159549200000,
+ 1427479200000,
+ 1443193200000,
+ 1458928800000,
+ 1474642800000,
+ null
+ ],
+ "offsets": [
+ -427.5333,
+ -420,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 1237000
+ },
+ {
+ "name": "Asia/Ulan_Bator",
+ "abbrs": [
+ "LMT",
+ "+07",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08",
+ "+09",
+ "+08"
+ ],
+ "untils": [
+ -2032931252000,
+ 252435600000,
+ 417974400000,
+ 433782000000,
+ 449596800000,
+ 465318000000,
+ 481046400000,
+ 496767600000,
+ 512496000000,
+ 528217200000,
+ 543945600000,
+ 559666800000,
+ 575395200000,
+ 591116400000,
+ 606844800000,
+ 622566000000,
+ 638294400000,
+ 654620400000,
+ 670348800000,
+ 686070000000,
+ 701798400000,
+ 717519600000,
+ 733248000000,
+ 748969200000,
+ 764697600000,
+ 780418800000,
+ 796147200000,
+ 811868400000,
+ 828201600000,
+ 843922800000,
+ 859651200000,
+ 875372400000,
+ 891100800000,
+ 906822000000,
+ 988394400000,
+ 1001696400000,
+ 1017424800000,
+ 1033146000000,
+ 1048874400000,
+ 1064595600000,
+ 1080324000000,
+ 1096045200000,
+ 1111773600000,
+ 1127494800000,
+ 1143223200000,
+ 1159549200000,
+ 1427479200000,
+ 1443193200000,
+ 1458928800000,
+ 1474642800000,
+ null
+ ],
+ "offsets": [
+ -427.5333,
+ -420,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Urumqi",
+ "abbrs": [
+ "LMT",
+ "+06"
+ ],
+ "untils": [
+ -1325483420000,
+ null
+ ],
+ "offsets": [
+ -350.3333,
+ -360
+ ],
+ "population": 3184000
+ },
+ {
+ "name": "Asia/Ust-Nera",
+ "abbrs": [
+ "LMT",
+ "+08",
+ "+09",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+10",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+10"
+ ],
+ "untils": [
+ -1579426374000,
+ -1247558400000,
+ 354898800000,
+ 370699200000,
+ 386427600000,
+ 402235200000,
+ 417963600000,
+ 433771200000,
+ 449586000000,
+ 465318000000,
+ 481042800000,
+ 496767600000,
+ 512492400000,
+ 528217200000,
+ 543942000000,
+ 559666800000,
+ 575391600000,
+ 591116400000,
+ 606841200000,
+ 622566000000,
+ 638290800000,
+ 654620400000,
+ 686073600000,
+ 695750400000,
+ 701794800000,
+ 717519600000,
+ 733244400000,
+ 748969200000,
+ 764694000000,
+ 780418800000,
+ 796143600000,
+ 811868400000,
+ 828198000000,
+ 846342000000,
+ 859647600000,
+ 877791600000,
+ 891097200000,
+ 909241200000,
+ 922546800000,
+ 941295600000,
+ 953996400000,
+ 972745200000,
+ 985446000000,
+ 1004194800000,
+ 1017500400000,
+ 1035644400000,
+ 1048950000000,
+ 1067094000000,
+ 1080399600000,
+ 1099148400000,
+ 1111849200000,
+ 1130598000000,
+ 1143298800000,
+ 1162047600000,
+ 1174748400000,
+ 1193497200000,
+ 1206802800000,
+ 1224946800000,
+ 1238252400000,
+ 1256396400000,
+ 1269702000000,
+ 1288450800000,
+ 1301151600000,
+ 1315828800000,
+ 1414249200000,
+ null
+ ],
+ "offsets": [
+ -572.9,
+ -480,
+ -540,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -600,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -600
+ ],
+ "population": 6463
+ },
+ {
+ "name": "Asia/Vientiane",
+ "abbrs": [
+ "BMT",
+ "+07"
+ ],
+ "untils": [
+ -1570084924000,
+ null
+ ],
+ "offsets": [
+ -402.0667,
+ -420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Vladivostok",
+ "abbrs": [
+ "LMT",
+ "+09",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+09",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10",
+ "+11",
+ "+10"
+ ],
+ "untils": [
+ -1487321251000,
+ -1247562000000,
+ 354895200000,
+ 370702800000,
+ 386431200000,
+ 402238800000,
+ 417967200000,
+ 433774800000,
+ 449589600000,
+ 465321600000,
+ 481046400000,
+ 496771200000,
+ 512496000000,
+ 528220800000,
+ 543945600000,
+ 559670400000,
+ 575395200000,
+ 591120000000,
+ 606844800000,
+ 622569600000,
+ 638294400000,
+ 654624000000,
+ 686077200000,
+ 695754000000,
+ 701798400000,
+ 717523200000,
+ 733248000000,
+ 748972800000,
+ 764697600000,
+ 780422400000,
+ 796147200000,
+ 811872000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 972748800000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143302400000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1206806400000,
+ 1224950400000,
+ 1238256000000,
+ 1256400000000,
+ 1269705600000,
+ 1288454400000,
+ 1301155200000,
+ 1414249200000,
+ null
+ ],
+ "offsets": [
+ -527.5167,
+ -540,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -540,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600
+ ],
+ "population": 598927
+ },
+ {
+ "name": "Asia/Yakutsk",
+ "abbrs": [
+ "LMT",
+ "+08",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+08",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09",
+ "+10",
+ "+09"
+ ],
+ "untils": [
+ -1579423138000,
+ -1247558400000,
+ 354898800000,
+ 370706400000,
+ 386434800000,
+ 402242400000,
+ 417970800000,
+ 433778400000,
+ 449593200000,
+ 465325200000,
+ 481050000000,
+ 496774800000,
+ 512499600000,
+ 528224400000,
+ 543949200000,
+ 559674000000,
+ 575398800000,
+ 591123600000,
+ 606848400000,
+ 622573200000,
+ 638298000000,
+ 654627600000,
+ 686080800000,
+ 695757600000,
+ 701802000000,
+ 717526800000,
+ 733251600000,
+ 748976400000,
+ 764701200000,
+ 780426000000,
+ 796150800000,
+ 811875600000,
+ 828205200000,
+ 846349200000,
+ 859654800000,
+ 877798800000,
+ 891104400000,
+ 909248400000,
+ 922554000000,
+ 941302800000,
+ 954003600000,
+ 972752400000,
+ 985453200000,
+ 1004202000000,
+ 1017507600000,
+ 1035651600000,
+ 1048957200000,
+ 1067101200000,
+ 1080406800000,
+ 1099155600000,
+ 1111856400000,
+ 1130605200000,
+ 1143306000000,
+ 1162054800000,
+ 1174755600000,
+ 1193504400000,
+ 1206810000000,
+ 1224954000000,
+ 1238259600000,
+ 1256403600000,
+ 1269709200000,
+ 1288458000000,
+ 1301158800000,
+ 1414252800000,
+ null
+ ],
+ "offsets": [
+ -518.9667,
+ -480,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -480,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540
+ ],
+ "population": 282419
+ },
+ {
+ "name": "Asia/Yangon",
+ "abbrs": [
+ "RMT",
+ "+0630",
+ "+09",
+ "+0630"
+ ],
+ "untils": [
+ -1577946287000,
+ -873268200000,
+ -778410000000,
+ null
+ ],
+ "offsets": [
+ -384.7833,
+ -390,
+ -540,
+ -390
+ ],
+ "population": 0
+ },
+ {
+ "name": "Asia/Yekaterinburg",
+ "abbrs": [
+ "LMT",
+ "PMT",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+04",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05",
+ "+06",
+ "+05"
+ ],
+ "untils": [
+ -1688270553000,
+ -1592610305000,
+ -1247544000000,
+ 354913200000,
+ 370720800000,
+ 386449200000,
+ 402256800000,
+ 417985200000,
+ 433792800000,
+ 449607600000,
+ 465339600000,
+ 481064400000,
+ 496789200000,
+ 512514000000,
+ 528238800000,
+ 543963600000,
+ 559688400000,
+ 575413200000,
+ 591138000000,
+ 606862800000,
+ 622587600000,
+ 638312400000,
+ 654642000000,
+ 686095200000,
+ 695772000000,
+ 701816400000,
+ 717541200000,
+ 733266000000,
+ 748990800000,
+ 764715600000,
+ 780440400000,
+ 796165200000,
+ 811890000000,
+ 828219600000,
+ 846363600000,
+ 859669200000,
+ 877813200000,
+ 891118800000,
+ 909262800000,
+ 922568400000,
+ 941317200000,
+ 954018000000,
+ 972766800000,
+ 985467600000,
+ 1004216400000,
+ 1017522000000,
+ 1035666000000,
+ 1048971600000,
+ 1067115600000,
+ 1080421200000,
+ 1099170000000,
+ 1111870800000,
+ 1130619600000,
+ 1143320400000,
+ 1162069200000,
+ 1174770000000,
+ 1193518800000,
+ 1206824400000,
+ 1224968400000,
+ 1238274000000,
+ 1256418000000,
+ 1269723600000,
+ 1288472400000,
+ 1301173200000,
+ 1414267200000,
+ null
+ ],
+ "offsets": [
+ -242.55,
+ -225.0833,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -240,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300,
+ -360,
+ -300
+ ],
+ "population": 1361000
+ },
+ {
+ "name": "Asia/Yerevan",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04"
+ ],
+ "untils": [
+ -1441162680000,
+ -405140400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 606866400000,
+ 622591200000,
+ 638316000000,
+ 654645600000,
+ 686098800000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 859672800000,
+ 877816800000,
+ 891122400000,
+ 909266400000,
+ 922572000000,
+ 941320800000,
+ 954021600000,
+ 972770400000,
+ 985471200000,
+ 1004220000000,
+ 1017525600000,
+ 1035669600000,
+ 1048975200000,
+ 1067119200000,
+ 1080424800000,
+ 1099173600000,
+ 1111874400000,
+ 1130623200000,
+ 1143324000000,
+ 1162072800000,
+ 1174773600000,
+ 1193522400000,
+ 1206828000000,
+ 1224972000000,
+ 1238277600000,
+ 1256421600000,
+ 1269727200000,
+ 1288476000000,
+ 1301176800000,
+ 1319925600000,
+ null
+ ],
+ "offsets": [
+ -178,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240
+ ],
+ "population": 1274000
+ },
+ {
+ "name": "Atlantic/Azores",
+ "abbrs": [
+ "HMT",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "+00",
+ "-01",
+ "-02",
+ "-01",
+ "+00",
+ "-01",
+ "-02",
+ "-01",
+ "+00",
+ "-01",
+ "-02",
+ "-01",
+ "+00",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "WET",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01"
+ ],
+ "untils": [
+ -1830376800000,
+ -1689548400000,
+ -1677794400000,
+ -1667430000000,
+ -1647730800000,
+ -1635807600000,
+ -1616194800000,
+ -1604358000000,
+ -1584658800000,
+ -1572735600000,
+ -1553036400000,
+ -1541199600000,
+ -1521500400000,
+ -1442444400000,
+ -1426806000000,
+ -1379286000000,
+ -1364770800000,
+ -1348441200000,
+ -1333321200000,
+ -1316386800000,
+ -1301266800000,
+ -1284332400000,
+ -1269817200000,
+ -1221433200000,
+ -1206918000000,
+ -1191193200000,
+ -1175468400000,
+ -1127689200000,
+ -1111964400000,
+ -1096844400000,
+ -1080514800000,
+ -1063580400000,
+ -1049065200000,
+ -1033340400000,
+ -1017615600000,
+ -1002495600000,
+ -986166000000,
+ -969231600000,
+ -950482800000,
+ -942015600000,
+ -922662000000,
+ -906937200000,
+ -891126000000,
+ -877302000000,
+ -873676800000,
+ -864000000000,
+ -857948400000,
+ -845852400000,
+ -842832000000,
+ -831340800000,
+ -825894000000,
+ -814402800000,
+ -810777600000,
+ -799891200000,
+ -794444400000,
+ -782953200000,
+ -779328000000,
+ -768441600000,
+ -762994800000,
+ -749084400000,
+ -733359600000,
+ -717624000000,
+ -701899200000,
+ -686174400000,
+ -670449600000,
+ -654724800000,
+ -639000000000,
+ -591825600000,
+ -575496000000,
+ -559771200000,
+ -544046400000,
+ -528321600000,
+ -512596800000,
+ -496872000000,
+ -481147200000,
+ -465422400000,
+ -449697600000,
+ -433972800000,
+ -417643200000,
+ -401918400000,
+ -386193600000,
+ -370468800000,
+ -354744000000,
+ -339019200000,
+ -323294400000,
+ -307569600000,
+ -291844800000,
+ -276120000000,
+ -260395200000,
+ -244670400000,
+ -228340800000,
+ -212616000000,
+ -196891200000,
+ -181166400000,
+ -165441600000,
+ -149716800000,
+ -133992000000,
+ -118267200000,
+ 228272400000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307504800000,
+ 323226000000,
+ 338954400000,
+ 354679200000,
+ 370404000000,
+ 386128800000,
+ 401853600000,
+ 417582000000,
+ 433303200000,
+ 449028000000,
+ 465357600000,
+ 481082400000,
+ 496807200000,
+ 512532000000,
+ 528256800000,
+ 543981600000,
+ 559706400000,
+ 575431200000,
+ 591156000000,
+ 606880800000,
+ 622605600000,
+ 638330400000,
+ 654660000000,
+ 670384800000,
+ 686109600000,
+ 701834400000,
+ 717559200000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 114.5333,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 0,
+ 60,
+ 120,
+ 60,
+ 0,
+ 60,
+ 120,
+ 60,
+ 0,
+ 60,
+ 120,
+ 60,
+ 0,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 0,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60
+ ],
+ "population": 245746
+ },
+ {
+ "name": "Atlantic/Bermuda",
+ "abbrs": [
+ "LMT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -1262281242000,
+ 136360800000,
+ 152082000000,
+ 167810400000,
+ 183531600000,
+ 199260000000,
+ 215586000000,
+ 230709600000,
+ 247035600000,
+ 262764000000,
+ 278485200000,
+ 294213600000,
+ 309934800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544600800000,
+ 562136400000,
+ 576050400000,
+ 594190800000,
+ 607500000000,
+ 625640400000,
+ 638949600000,
+ 657090000000,
+ 671004000000,
+ 688539600000,
+ 702453600000,
+ 719989200000,
+ 733903200000,
+ 752043600000,
+ 765352800000,
+ 783493200000,
+ 796802400000,
+ 814942800000,
+ 828856800000,
+ 846392400000,
+ 860306400000,
+ 877842000000,
+ 891756000000,
+ 909291600000,
+ 923205600000,
+ 941346000000,
+ 954655200000,
+ 972795600000,
+ 986104800000,
+ 1004245200000,
+ 1018159200000,
+ 1035694800000,
+ 1049608800000,
+ 1067144400000,
+ 1081058400000,
+ 1099198800000,
+ 1112508000000,
+ 1130648400000,
+ 1143957600000,
+ 1162098000000,
+ 1173592800000,
+ 1194152400000,
+ 1205042400000,
+ 1225602000000,
+ 1236492000000,
+ 1257051600000,
+ 1268546400000,
+ 1289106000000,
+ 1299996000000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 259.3,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 65024
+ },
+ {
+ "name": "Atlantic/Canary",
+ "abbrs": [
+ "LMT",
+ "-01",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1509663504000,
+ -733874400000,
+ 323827200000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 61.6,
+ 60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 538000
+ },
+ {
+ "name": "Atlantic/Cape_Verde",
+ "abbrs": [
+ "LMT",
+ "-02",
+ "-01",
+ "-02",
+ "-01"
+ ],
+ "untils": [
+ -1830376800000,
+ -862610400000,
+ -764118000000,
+ 186120000000,
+ null
+ ],
+ "offsets": [
+ 94.0667,
+ 120,
+ 60,
+ 120,
+ 60
+ ],
+ "population": 498897
+ },
+ {
+ "name": "Atlantic/Faeroe",
+ "abbrs": [
+ "LMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1955748776000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 27.0667,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Atlantic/Faroe",
+ "abbrs": [
+ "LMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1955748776000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 27.0667,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 49469
+ },
+ {
+ "name": "Atlantic/Jan_Mayen",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1691884800000,
+ -1680573600000,
+ -927511200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -765327600000,
+ -340844400000,
+ -324514800000,
+ -308790000000,
+ -293065200000,
+ -277340400000,
+ -261615600000,
+ -245890800000,
+ -230166000000,
+ -214441200000,
+ -198716400000,
+ -182991600000,
+ -166662000000,
+ -147913200000,
+ -135212400000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Atlantic/Madeira",
+ "abbrs": [
+ "FMT",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "+01",
+ "+00",
+ "-01",
+ "+00",
+ "+01",
+ "+00",
+ "-01",
+ "+00",
+ "+01",
+ "+00",
+ "-01",
+ "+00",
+ "+01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1830380400000,
+ -1689552000000,
+ -1677798000000,
+ -1667433600000,
+ -1647734400000,
+ -1635811200000,
+ -1616198400000,
+ -1604361600000,
+ -1584662400000,
+ -1572739200000,
+ -1553040000000,
+ -1541203200000,
+ -1521504000000,
+ -1442448000000,
+ -1426809600000,
+ -1379289600000,
+ -1364774400000,
+ -1348444800000,
+ -1333324800000,
+ -1316390400000,
+ -1301270400000,
+ -1284336000000,
+ -1269820800000,
+ -1221436800000,
+ -1206921600000,
+ -1191196800000,
+ -1175472000000,
+ -1127692800000,
+ -1111968000000,
+ -1096848000000,
+ -1080518400000,
+ -1063584000000,
+ -1049068800000,
+ -1033344000000,
+ -1017619200000,
+ -1002499200000,
+ -986169600000,
+ -969235200000,
+ -950486400000,
+ -942019200000,
+ -922665600000,
+ -906940800000,
+ -891129600000,
+ -877305600000,
+ -873680400000,
+ -864003600000,
+ -857952000000,
+ -845856000000,
+ -842835600000,
+ -831344400000,
+ -825897600000,
+ -814406400000,
+ -810781200000,
+ -799894800000,
+ -794448000000,
+ -782956800000,
+ -779331600000,
+ -768445200000,
+ -762998400000,
+ -749088000000,
+ -733363200000,
+ -717627600000,
+ -701902800000,
+ -686178000000,
+ -670453200000,
+ -654728400000,
+ -639003600000,
+ -591829200000,
+ -575499600000,
+ -559774800000,
+ -544050000000,
+ -528325200000,
+ -512600400000,
+ -496875600000,
+ -481150800000,
+ -465426000000,
+ -449701200000,
+ -433976400000,
+ -417646800000,
+ -401922000000,
+ -386197200000,
+ -370472400000,
+ -354747600000,
+ -339022800000,
+ -323298000000,
+ -307573200000,
+ -291848400000,
+ -276123600000,
+ -260398800000,
+ -244674000000,
+ -228344400000,
+ -212619600000,
+ -196894800000,
+ -181170000000,
+ -165445200000,
+ -149720400000,
+ -133995600000,
+ -118270800000,
+ 228268800000,
+ 243993600000,
+ 260323200000,
+ 276048000000,
+ 291772800000,
+ 307501200000,
+ 323222400000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417578400000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 67.6,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ -60,
+ 0,
+ 60,
+ 0,
+ -60,
+ 0,
+ 60,
+ 0,
+ -60,
+ 0,
+ 60,
+ 0,
+ -60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 267785
+ },
+ {
+ "name": "Atlantic/Reykjavik",
+ "abbrs": [
+ "LMT",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "GMT"
+ ],
+ "untils": [
+ -1956609120000,
+ -1668211200000,
+ -1647212400000,
+ -1636675200000,
+ -1613430000000,
+ -1605139200000,
+ -1581894000000,
+ -1539561600000,
+ -1531350000000,
+ -968025600000,
+ -952293600000,
+ -942008400000,
+ -920239200000,
+ -909957600000,
+ -888789600000,
+ -877903200000,
+ -857944800000,
+ -846453600000,
+ -826495200000,
+ -815004000000,
+ -795045600000,
+ -783554400000,
+ -762991200000,
+ -752104800000,
+ -731541600000,
+ -717631200000,
+ -700092000000,
+ -686181600000,
+ -668642400000,
+ -654732000000,
+ -636588000000,
+ -623282400000,
+ -605743200000,
+ -591832800000,
+ -573688800000,
+ -559778400000,
+ -542239200000,
+ -528328800000,
+ -510789600000,
+ -496879200000,
+ -479340000000,
+ -465429600000,
+ -447890400000,
+ -433980000000,
+ -415836000000,
+ -401925600000,
+ -384386400000,
+ -370476000000,
+ -352936800000,
+ -339026400000,
+ -321487200000,
+ -307576800000,
+ -290037600000,
+ -276127200000,
+ -258588000000,
+ -244677600000,
+ -226533600000,
+ -212623200000,
+ -195084000000,
+ -181173600000,
+ -163634400000,
+ -149724000000,
+ -132184800000,
+ -118274400000,
+ -100735200000,
+ -86824800000,
+ -68680800000,
+ -54770400000,
+ null
+ ],
+ "offsets": [
+ 88,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0
+ ],
+ "population": 119289
+ },
+ {
+ "name": "Atlantic/South_Georgia",
+ "abbrs": [
+ "-02"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 120
+ ],
+ "population": 30
+ },
+ {
+ "name": "Atlantic/St_Helena",
+ "abbrs": [
+ "LMT",
+ "GMT"
+ ],
+ "untils": [
+ -1830383032000,
+ null
+ ],
+ "offsets": [
+ 16.1333,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Atlantic/Stanley",
+ "abbrs": [
+ "SMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1824235716000,
+ -1018209600000,
+ -1003093200000,
+ -986760000000,
+ -971643600000,
+ -954705600000,
+ -939589200000,
+ -923256000000,
+ -908139600000,
+ -891806400000,
+ -876690000000,
+ -860356800000,
+ -852066000000,
+ 420609600000,
+ 433306800000,
+ 452052000000,
+ 464151600000,
+ 483501600000,
+ 514350000000,
+ 527054400000,
+ 545799600000,
+ 558504000000,
+ 577249200000,
+ 589953600000,
+ 608698800000,
+ 621403200000,
+ 640753200000,
+ 652852800000,
+ 672202800000,
+ 684907200000,
+ 703652400000,
+ 716356800000,
+ 735102000000,
+ 747806400000,
+ 766551600000,
+ 779256000000,
+ 798001200000,
+ 810705600000,
+ 830055600000,
+ 842760000000,
+ 861505200000,
+ 874209600000,
+ 892954800000,
+ 905659200000,
+ 924404400000,
+ 937108800000,
+ 955854000000,
+ 968558400000,
+ 987310800000,
+ 999410400000,
+ 1019365200000,
+ 1030860000000,
+ 1050814800000,
+ 1062914400000,
+ 1082264400000,
+ 1094364000000,
+ 1113714000000,
+ 1125813600000,
+ 1145163600000,
+ 1157263200000,
+ 1176613200000,
+ 1188712800000,
+ 1208667600000,
+ 1220767200000,
+ 1240117200000,
+ 1252216800000,
+ 1271566800000,
+ 1283666400000,
+ null
+ ],
+ "offsets": [
+ 231.4,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 2121
+ },
+ {
+ "name": "Australia/ACT",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386697600000,
+ 404841600000,
+ 415728000000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 511286400000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ 783446400000,
+ 794332800000,
+ 814896000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143907200000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Adelaide",
+ "abbrs": [
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT"
+ ],
+ "untils": [
+ -1672565340000,
+ -1665390600000,
+ -883639800000,
+ -876126600000,
+ -860398200000,
+ -844677000000,
+ -828343800000,
+ -813227400000,
+ 57688200000,
+ 67969800000,
+ 89137800000,
+ 100024200000,
+ 120587400000,
+ 131473800000,
+ 152037000000,
+ 162923400000,
+ 183486600000,
+ 194977800000,
+ 215541000000,
+ 226427400000,
+ 246990600000,
+ 257877000000,
+ 278440200000,
+ 289326600000,
+ 309889800000,
+ 320776200000,
+ 341339400000,
+ 352225800000,
+ 372789000000,
+ 384280200000,
+ 404843400000,
+ 415729800000,
+ 436293000000,
+ 447179400000,
+ 467742600000,
+ 478629000000,
+ 499192200000,
+ 511288200000,
+ 530037000000,
+ 542737800000,
+ 562091400000,
+ 574792200000,
+ 594145800000,
+ 606241800000,
+ 625595400000,
+ 637691400000,
+ 657045000000,
+ 667931400000,
+ 688494600000,
+ 701195400000,
+ 719944200000,
+ 731435400000,
+ 751998600000,
+ 764094600000,
+ 783448200000,
+ 796149000000,
+ 814897800000,
+ 828203400000,
+ 846347400000,
+ 859653000000,
+ 877797000000,
+ 891102600000,
+ 909246600000,
+ 922552200000,
+ 941301000000,
+ 954001800000,
+ 972750600000,
+ 985451400000,
+ 1004200200000,
+ 1017505800000,
+ 1035649800000,
+ 1048955400000,
+ 1067099400000,
+ 1080405000000,
+ 1099153800000,
+ 1111854600000,
+ 1130603400000,
+ 1143909000000,
+ 1162053000000,
+ 1174753800000,
+ 1193502600000,
+ 1207413000000,
+ 1223137800000,
+ 1238862600000,
+ 1254587400000,
+ 1270312200000,
+ 1286037000000,
+ 1301761800000,
+ 1317486600000,
+ 1333211400000,
+ 1349541000000,
+ 1365265800000,
+ 1380990600000,
+ 1396715400000,
+ 1412440200000,
+ 1428165000000,
+ 1443889800000,
+ 1459614600000,
+ 1475339400000,
+ 1491064200000,
+ 1506789000000,
+ 1522513800000,
+ 1538843400000,
+ 1554568200000,
+ 1570293000000,
+ 1586017800000,
+ 1601742600000,
+ 1617467400000,
+ 1633192200000,
+ 1648917000000,
+ 1664641800000,
+ 1680366600000,
+ 1696091400000,
+ 1712421000000,
+ 1728145800000,
+ 1743870600000,
+ 1759595400000,
+ 1775320200000,
+ 1791045000000,
+ 1806769800000,
+ 1822494600000,
+ 1838219400000,
+ 1853944200000,
+ 1869669000000,
+ 1885998600000,
+ 1901723400000,
+ 1917448200000,
+ 1933173000000,
+ 1948897800000,
+ 1964622600000,
+ 1980347400000,
+ 1996072200000,
+ 2011797000000,
+ 2027521800000,
+ 2043246600000,
+ 2058971400000,
+ 2075301000000,
+ 2091025800000,
+ 2106750600000,
+ 2122475400000,
+ 2138200200000,
+ null
+ ],
+ "offsets": [
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630
+ ],
+ "population": 1140000
+ },
+ {
+ "name": "Australia/Brisbane",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600
+ ],
+ "population": 1999000
+ },
+ {
+ "name": "Australia/Broken_Hill",
+ "abbrs": [
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT"
+ ],
+ "untils": [
+ -1672565340000,
+ -1665390600000,
+ -883639800000,
+ -876126600000,
+ -860398200000,
+ -844677000000,
+ -828343800000,
+ -813227400000,
+ 57688200000,
+ 67969800000,
+ 89137800000,
+ 100024200000,
+ 120587400000,
+ 131473800000,
+ 152037000000,
+ 162923400000,
+ 183486600000,
+ 194977800000,
+ 215541000000,
+ 226427400000,
+ 246990600000,
+ 257877000000,
+ 278440200000,
+ 289326600000,
+ 309889800000,
+ 320776200000,
+ 341339400000,
+ 352225800000,
+ 372789000000,
+ 386699400000,
+ 404843400000,
+ 415729800000,
+ 436293000000,
+ 447179400000,
+ 467742600000,
+ 478629000000,
+ 499192200000,
+ 511288200000,
+ 530037000000,
+ 542737800000,
+ 562091400000,
+ 574792200000,
+ 594145800000,
+ 606241800000,
+ 625595400000,
+ 636481800000,
+ 657045000000,
+ 667931400000,
+ 688494600000,
+ 699381000000,
+ 719944200000,
+ 731435400000,
+ 751998600000,
+ 762885000000,
+ 783448200000,
+ 794334600000,
+ 814897800000,
+ 828203400000,
+ 846347400000,
+ 859653000000,
+ 877797000000,
+ 891102600000,
+ 909246600000,
+ 922552200000,
+ 941301000000,
+ 954001800000,
+ 972750600000,
+ 985451400000,
+ 1004200200000,
+ 1017505800000,
+ 1035649800000,
+ 1048955400000,
+ 1067099400000,
+ 1080405000000,
+ 1099153800000,
+ 1111854600000,
+ 1130603400000,
+ 1143909000000,
+ 1162053000000,
+ 1174753800000,
+ 1193502600000,
+ 1207413000000,
+ 1223137800000,
+ 1238862600000,
+ 1254587400000,
+ 1270312200000,
+ 1286037000000,
+ 1301761800000,
+ 1317486600000,
+ 1333211400000,
+ 1349541000000,
+ 1365265800000,
+ 1380990600000,
+ 1396715400000,
+ 1412440200000,
+ 1428165000000,
+ 1443889800000,
+ 1459614600000,
+ 1475339400000,
+ 1491064200000,
+ 1506789000000,
+ 1522513800000,
+ 1538843400000,
+ 1554568200000,
+ 1570293000000,
+ 1586017800000,
+ 1601742600000,
+ 1617467400000,
+ 1633192200000,
+ 1648917000000,
+ 1664641800000,
+ 1680366600000,
+ 1696091400000,
+ 1712421000000,
+ 1728145800000,
+ 1743870600000,
+ 1759595400000,
+ 1775320200000,
+ 1791045000000,
+ 1806769800000,
+ 1822494600000,
+ 1838219400000,
+ 1853944200000,
+ 1869669000000,
+ 1885998600000,
+ 1901723400000,
+ 1917448200000,
+ 1933173000000,
+ 1948897800000,
+ 1964622600000,
+ 1980347400000,
+ 1996072200000,
+ 2011797000000,
+ 2027521800000,
+ 2043246600000,
+ 2058971400000,
+ 2075301000000,
+ 2091025800000,
+ 2106750600000,
+ 2122475400000,
+ 2138200200000,
+ null
+ ],
+ "offsets": [
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630
+ ],
+ "population": 18430
+ },
+ {
+ "name": "Australia/Canberra",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386697600000,
+ 404841600000,
+ 415728000000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 511286400000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ 783446400000,
+ 794332800000,
+ 814896000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143907200000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Currie",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1680508800000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386092800000,
+ 404841600000,
+ 417542400000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 510076800000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 637689600000,
+ 657043200000,
+ 670348800000,
+ 686678400000,
+ 701798400000,
+ 718128000000,
+ 733248000000,
+ 749577600000,
+ 764697600000,
+ 781027200000,
+ 796147200000,
+ 812476800000,
+ 828201600000,
+ 844531200000,
+ 859651200000,
+ 875980800000,
+ 891100800000,
+ 907430400000,
+ 922550400000,
+ 938880000000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1002384000000,
+ 1017504000000,
+ 1033833600000,
+ 1048953600000,
+ 1065283200000,
+ 1080403200000,
+ 1096732800000,
+ 1111852800000,
+ 1128182400000,
+ 1143907200000,
+ 1159632000000,
+ 1174752000000,
+ 1191686400000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 746
+ },
+ {
+ "name": "Australia/Darwin",
+ "abbrs": [
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST"
+ ],
+ "untils": [
+ -1672565340000,
+ -1665390600000,
+ -883639800000,
+ -876126600000,
+ -860398200000,
+ -844677000000,
+ -828343800000,
+ -813227400000,
+ null
+ ],
+ "offsets": [
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570
+ ],
+ "population": 116215
+ },
+ {
+ "name": "Australia/Eucla",
+ "abbrs": [
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845",
+ "+0945",
+ "+0845"
+ ],
+ "untils": [
+ -1672562640000,
+ -1665387900000,
+ -883637100000,
+ -876123900000,
+ -860395500000,
+ -844674300000,
+ 152039700000,
+ 162926100000,
+ 436295700000,
+ 447182100000,
+ 690311700000,
+ 699383700000,
+ 1165079700000,
+ 1174756500000,
+ 1193505300000,
+ 1206810900000,
+ 1224954900000,
+ 1238260500000,
+ null
+ ],
+ "offsets": [
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525,
+ -585,
+ -525
+ ],
+ "population": 368
+ },
+ {
+ "name": "Australia/Hobart",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1680508800000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ -71136000000,
+ -55411200000,
+ -37267200000,
+ -25776000000,
+ -5817600000,
+ 5673600000,
+ 25632000000,
+ 37728000000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386092800000,
+ 404841600000,
+ 417542400000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 510076800000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 637689600000,
+ 657043200000,
+ 670348800000,
+ 686678400000,
+ 701798400000,
+ 718128000000,
+ 733248000000,
+ 749577600000,
+ 764697600000,
+ 781027200000,
+ 796147200000,
+ 812476800000,
+ 828201600000,
+ 844531200000,
+ 859651200000,
+ 875980800000,
+ 891100800000,
+ 907430400000,
+ 922550400000,
+ 938880000000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1002384000000,
+ 1017504000000,
+ 1033833600000,
+ 1048953600000,
+ 1065283200000,
+ 1080403200000,
+ 1096732800000,
+ 1111852800000,
+ 1128182400000,
+ 1143907200000,
+ 1159632000000,
+ 1174752000000,
+ 1191686400000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 205557
+ },
+ {
+ "name": "Australia/LHI",
+ "abbrs": [
+ "AEST",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11"
+ ],
+ "untils": [
+ 352216800000,
+ 372785400000,
+ 384273000000,
+ 404839800000,
+ 415722600000,
+ 436289400000,
+ 447172200000,
+ 467739000000,
+ 478621800000,
+ 499188600000,
+ 511282800000,
+ 530033400000,
+ 542732400000,
+ 562087800000,
+ 574786800000,
+ 594142200000,
+ 606236400000,
+ 625591800000,
+ 636476400000,
+ 657041400000,
+ 667926000000,
+ 688491000000,
+ 699375600000,
+ 719940600000,
+ 731430000000,
+ 751995000000,
+ 762879600000,
+ 783444600000,
+ 794329200000,
+ 814894200000,
+ 828198000000,
+ 846343800000,
+ 859647600000,
+ 877793400000,
+ 891097200000,
+ 909243000000,
+ 922546800000,
+ 941297400000,
+ 953996400000,
+ 967303800000,
+ 985446000000,
+ 1004196600000,
+ 1017500400000,
+ 1035646200000,
+ 1048950000000,
+ 1067095800000,
+ 1080399600000,
+ 1099150200000,
+ 1111849200000,
+ 1130599800000,
+ 1143903600000,
+ 1162049400000,
+ 1174748400000,
+ 1193499000000,
+ 1207407600000,
+ 1223134200000,
+ 1238857200000,
+ 1254583800000,
+ 1270306800000,
+ 1286033400000,
+ 1301756400000,
+ 1317483000000,
+ 1333206000000,
+ 1349537400000,
+ 1365260400000,
+ 1380987000000,
+ 1396710000000,
+ 1412436600000,
+ 1428159600000,
+ 1443886200000,
+ 1459609200000,
+ 1475335800000,
+ 1491058800000,
+ 1506785400000,
+ 1522508400000,
+ 1538839800000,
+ 1554562800000,
+ 1570289400000,
+ 1586012400000,
+ 1601739000000,
+ 1617462000000,
+ 1633188600000,
+ 1648911600000,
+ 1664638200000,
+ 1680361200000,
+ 1696087800000,
+ 1712415600000,
+ 1728142200000,
+ 1743865200000,
+ 1759591800000,
+ 1775314800000,
+ 1791041400000,
+ 1806764400000,
+ 1822491000000,
+ 1838214000000,
+ 1853940600000,
+ 1869663600000,
+ 1885995000000,
+ 1901718000000,
+ 1917444600000,
+ 1933167600000,
+ 1948894200000,
+ 1964617200000,
+ 1980343800000,
+ 1996066800000,
+ 2011793400000,
+ 2027516400000,
+ 2043243000000,
+ 2058966000000,
+ 2075297400000,
+ 2091020400000,
+ 2106747000000,
+ 2122470000000,
+ 2138196600000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -630,
+ -690,
+ -630,
+ -690,
+ -630,
+ -690,
+ -630,
+ -690,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Lindeman",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600
+ ],
+ "population": 10
+ },
+ {
+ "name": "Australia/Lord_Howe",
+ "abbrs": [
+ "AEST",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+1130",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11",
+ "+1030",
+ "+11"
+ ],
+ "untils": [
+ 352216800000,
+ 372785400000,
+ 384273000000,
+ 404839800000,
+ 415722600000,
+ 436289400000,
+ 447172200000,
+ 467739000000,
+ 478621800000,
+ 499188600000,
+ 511282800000,
+ 530033400000,
+ 542732400000,
+ 562087800000,
+ 574786800000,
+ 594142200000,
+ 606236400000,
+ 625591800000,
+ 636476400000,
+ 657041400000,
+ 667926000000,
+ 688491000000,
+ 699375600000,
+ 719940600000,
+ 731430000000,
+ 751995000000,
+ 762879600000,
+ 783444600000,
+ 794329200000,
+ 814894200000,
+ 828198000000,
+ 846343800000,
+ 859647600000,
+ 877793400000,
+ 891097200000,
+ 909243000000,
+ 922546800000,
+ 941297400000,
+ 953996400000,
+ 967303800000,
+ 985446000000,
+ 1004196600000,
+ 1017500400000,
+ 1035646200000,
+ 1048950000000,
+ 1067095800000,
+ 1080399600000,
+ 1099150200000,
+ 1111849200000,
+ 1130599800000,
+ 1143903600000,
+ 1162049400000,
+ 1174748400000,
+ 1193499000000,
+ 1207407600000,
+ 1223134200000,
+ 1238857200000,
+ 1254583800000,
+ 1270306800000,
+ 1286033400000,
+ 1301756400000,
+ 1317483000000,
+ 1333206000000,
+ 1349537400000,
+ 1365260400000,
+ 1380987000000,
+ 1396710000000,
+ 1412436600000,
+ 1428159600000,
+ 1443886200000,
+ 1459609200000,
+ 1475335800000,
+ 1491058800000,
+ 1506785400000,
+ 1522508400000,
+ 1538839800000,
+ 1554562800000,
+ 1570289400000,
+ 1586012400000,
+ 1601739000000,
+ 1617462000000,
+ 1633188600000,
+ 1648911600000,
+ 1664638200000,
+ 1680361200000,
+ 1696087800000,
+ 1712415600000,
+ 1728142200000,
+ 1743865200000,
+ 1759591800000,
+ 1775314800000,
+ 1791041400000,
+ 1806764400000,
+ 1822491000000,
+ 1838214000000,
+ 1853940600000,
+ 1869663600000,
+ 1885995000000,
+ 1901718000000,
+ 1917444600000,
+ 1933167600000,
+ 1948894200000,
+ 1964617200000,
+ 1980343800000,
+ 1996066800000,
+ 2011793400000,
+ 2027516400000,
+ 2043243000000,
+ 2058966000000,
+ 2075297400000,
+ 2091020400000,
+ 2106747000000,
+ 2122470000000,
+ 2138196600000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -630,
+ -690,
+ -630,
+ -690,
+ -630,
+ -690,
+ -630,
+ -690,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660,
+ -630,
+ -660
+ ],
+ "population": 347
+ },
+ {
+ "name": "Australia/Melbourne",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 384278400000,
+ 404841600000,
+ 415728000000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 511286400000,
+ 530035200000,
+ 542736000000,
+ 561484800000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 637689600000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ 783446400000,
+ 796147200000,
+ 814896000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143907200000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 3906000
+ },
+ {
+ "name": "Australia/North",
+ "abbrs": [
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST"
+ ],
+ "untils": [
+ -1672565340000,
+ -1665390600000,
+ -883639800000,
+ -876126600000,
+ -860398200000,
+ -844677000000,
+ -828343800000,
+ -813227400000,
+ null
+ ],
+ "offsets": [
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/NSW",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386697600000,
+ 404841600000,
+ 415728000000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 511286400000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ 783446400000,
+ 794332800000,
+ 814896000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143907200000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Perth",
+ "abbrs": [
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST"
+ ],
+ "untils": [
+ -1672559940000,
+ -1665385200000,
+ -883634400000,
+ -876121200000,
+ -860392800000,
+ -844671600000,
+ 152042400000,
+ 162928800000,
+ 436298400000,
+ 447184800000,
+ 690314400000,
+ 699386400000,
+ 1165082400000,
+ 1174759200000,
+ 1193508000000,
+ 1206813600000,
+ 1224957600000,
+ 1238263200000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 1751000
+ },
+ {
+ "name": "Australia/Queensland",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/South",
+ "abbrs": [
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT"
+ ],
+ "untils": [
+ -1672565340000,
+ -1665390600000,
+ -883639800000,
+ -876126600000,
+ -860398200000,
+ -844677000000,
+ -828343800000,
+ -813227400000,
+ 57688200000,
+ 67969800000,
+ 89137800000,
+ 100024200000,
+ 120587400000,
+ 131473800000,
+ 152037000000,
+ 162923400000,
+ 183486600000,
+ 194977800000,
+ 215541000000,
+ 226427400000,
+ 246990600000,
+ 257877000000,
+ 278440200000,
+ 289326600000,
+ 309889800000,
+ 320776200000,
+ 341339400000,
+ 352225800000,
+ 372789000000,
+ 384280200000,
+ 404843400000,
+ 415729800000,
+ 436293000000,
+ 447179400000,
+ 467742600000,
+ 478629000000,
+ 499192200000,
+ 511288200000,
+ 530037000000,
+ 542737800000,
+ 562091400000,
+ 574792200000,
+ 594145800000,
+ 606241800000,
+ 625595400000,
+ 637691400000,
+ 657045000000,
+ 667931400000,
+ 688494600000,
+ 701195400000,
+ 719944200000,
+ 731435400000,
+ 751998600000,
+ 764094600000,
+ 783448200000,
+ 796149000000,
+ 814897800000,
+ 828203400000,
+ 846347400000,
+ 859653000000,
+ 877797000000,
+ 891102600000,
+ 909246600000,
+ 922552200000,
+ 941301000000,
+ 954001800000,
+ 972750600000,
+ 985451400000,
+ 1004200200000,
+ 1017505800000,
+ 1035649800000,
+ 1048955400000,
+ 1067099400000,
+ 1080405000000,
+ 1099153800000,
+ 1111854600000,
+ 1130603400000,
+ 1143909000000,
+ 1162053000000,
+ 1174753800000,
+ 1193502600000,
+ 1207413000000,
+ 1223137800000,
+ 1238862600000,
+ 1254587400000,
+ 1270312200000,
+ 1286037000000,
+ 1301761800000,
+ 1317486600000,
+ 1333211400000,
+ 1349541000000,
+ 1365265800000,
+ 1380990600000,
+ 1396715400000,
+ 1412440200000,
+ 1428165000000,
+ 1443889800000,
+ 1459614600000,
+ 1475339400000,
+ 1491064200000,
+ 1506789000000,
+ 1522513800000,
+ 1538843400000,
+ 1554568200000,
+ 1570293000000,
+ 1586017800000,
+ 1601742600000,
+ 1617467400000,
+ 1633192200000,
+ 1648917000000,
+ 1664641800000,
+ 1680366600000,
+ 1696091400000,
+ 1712421000000,
+ 1728145800000,
+ 1743870600000,
+ 1759595400000,
+ 1775320200000,
+ 1791045000000,
+ 1806769800000,
+ 1822494600000,
+ 1838219400000,
+ 1853944200000,
+ 1869669000000,
+ 1885998600000,
+ 1901723400000,
+ 1917448200000,
+ 1933173000000,
+ 1948897800000,
+ 1964622600000,
+ 1980347400000,
+ 1996072200000,
+ 2011797000000,
+ 2027521800000,
+ 2043246600000,
+ 2058971400000,
+ 2075301000000,
+ 2091025800000,
+ 2106750600000,
+ 2122475400000,
+ 2138200200000,
+ null
+ ],
+ "offsets": [
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Sydney",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386697600000,
+ 404841600000,
+ 415728000000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 511286400000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 636480000000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ 783446400000,
+ 794332800000,
+ 814896000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143907200000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 4036000
+ },
+ {
+ "name": "Australia/Tasmania",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1680508800000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ -71136000000,
+ -55411200000,
+ -37267200000,
+ -25776000000,
+ -5817600000,
+ 5673600000,
+ 25632000000,
+ 37728000000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 386092800000,
+ 404841600000,
+ 417542400000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 510076800000,
+ 530035200000,
+ 542736000000,
+ 562089600000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 637689600000,
+ 657043200000,
+ 670348800000,
+ 686678400000,
+ 701798400000,
+ 718128000000,
+ 733248000000,
+ 749577600000,
+ 764697600000,
+ 781027200000,
+ 796147200000,
+ 812476800000,
+ 828201600000,
+ 844531200000,
+ 859651200000,
+ 875980800000,
+ 891100800000,
+ 907430400000,
+ 922550400000,
+ 938880000000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1002384000000,
+ 1017504000000,
+ 1033833600000,
+ 1048953600000,
+ 1065283200000,
+ 1080403200000,
+ 1096732800000,
+ 1111852800000,
+ 1128182400000,
+ 1143907200000,
+ 1159632000000,
+ 1174752000000,
+ 1191686400000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Victoria",
+ "abbrs": [
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT",
+ "AEST",
+ "AEDT"
+ ],
+ "untils": [
+ -1672567140000,
+ -1665392400000,
+ -883641600000,
+ -876128400000,
+ -860400000000,
+ -844678800000,
+ -828345600000,
+ -813229200000,
+ 57686400000,
+ 67968000000,
+ 89136000000,
+ 100022400000,
+ 120585600000,
+ 131472000000,
+ 152035200000,
+ 162921600000,
+ 183484800000,
+ 194976000000,
+ 215539200000,
+ 226425600000,
+ 246988800000,
+ 257875200000,
+ 278438400000,
+ 289324800000,
+ 309888000000,
+ 320774400000,
+ 341337600000,
+ 352224000000,
+ 372787200000,
+ 384278400000,
+ 404841600000,
+ 415728000000,
+ 436291200000,
+ 447177600000,
+ 467740800000,
+ 478627200000,
+ 499190400000,
+ 511286400000,
+ 530035200000,
+ 542736000000,
+ 561484800000,
+ 574790400000,
+ 594144000000,
+ 606240000000,
+ 625593600000,
+ 637689600000,
+ 657043200000,
+ 667929600000,
+ 688492800000,
+ 699379200000,
+ 719942400000,
+ 731433600000,
+ 751996800000,
+ 762883200000,
+ 783446400000,
+ 796147200000,
+ 814896000000,
+ 828201600000,
+ 846345600000,
+ 859651200000,
+ 877795200000,
+ 891100800000,
+ 909244800000,
+ 922550400000,
+ 941299200000,
+ 954000000000,
+ 967305600000,
+ 985449600000,
+ 1004198400000,
+ 1017504000000,
+ 1035648000000,
+ 1048953600000,
+ 1067097600000,
+ 1080403200000,
+ 1099152000000,
+ 1111852800000,
+ 1130601600000,
+ 1143907200000,
+ 1162051200000,
+ 1174752000000,
+ 1193500800000,
+ 1207411200000,
+ 1223136000000,
+ 1238860800000,
+ 1254585600000,
+ 1270310400000,
+ 1286035200000,
+ 1301760000000,
+ 1317484800000,
+ 1333209600000,
+ 1349539200000,
+ 1365264000000,
+ 1380988800000,
+ 1396713600000,
+ 1412438400000,
+ 1428163200000,
+ 1443888000000,
+ 1459612800000,
+ 1475337600000,
+ 1491062400000,
+ 1506787200000,
+ 1522512000000,
+ 1538841600000,
+ 1554566400000,
+ 1570291200000,
+ 1586016000000,
+ 1601740800000,
+ 1617465600000,
+ 1633190400000,
+ 1648915200000,
+ 1664640000000,
+ 1680364800000,
+ 1696089600000,
+ 1712419200000,
+ 1728144000000,
+ 1743868800000,
+ 1759593600000,
+ 1775318400000,
+ 1791043200000,
+ 1806768000000,
+ 1822492800000,
+ 1838217600000,
+ 1853942400000,
+ 1869667200000,
+ 1885996800000,
+ 1901721600000,
+ 1917446400000,
+ 1933171200000,
+ 1948896000000,
+ 1964620800000,
+ 1980345600000,
+ 1996070400000,
+ 2011795200000,
+ 2027520000000,
+ 2043244800000,
+ 2058969600000,
+ 2075299200000,
+ 2091024000000,
+ 2106748800000,
+ 2122473600000,
+ 2138198400000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660,
+ -600,
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/West",
+ "abbrs": [
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST",
+ "AWDT",
+ "AWST"
+ ],
+ "untils": [
+ -1672559940000,
+ -1665385200000,
+ -883634400000,
+ -876121200000,
+ -860392800000,
+ -844671600000,
+ 152042400000,
+ 162928800000,
+ 436298400000,
+ 447184800000,
+ 690314400000,
+ 699386400000,
+ 1165082400000,
+ 1174759200000,
+ 1193508000000,
+ 1206813600000,
+ 1224957600000,
+ 1238263200000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Australia/Yancowinna",
+ "abbrs": [
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT",
+ "ACST",
+ "ACDT"
+ ],
+ "untils": [
+ -1672565340000,
+ -1665390600000,
+ -883639800000,
+ -876126600000,
+ -860398200000,
+ -844677000000,
+ -828343800000,
+ -813227400000,
+ 57688200000,
+ 67969800000,
+ 89137800000,
+ 100024200000,
+ 120587400000,
+ 131473800000,
+ 152037000000,
+ 162923400000,
+ 183486600000,
+ 194977800000,
+ 215541000000,
+ 226427400000,
+ 246990600000,
+ 257877000000,
+ 278440200000,
+ 289326600000,
+ 309889800000,
+ 320776200000,
+ 341339400000,
+ 352225800000,
+ 372789000000,
+ 386699400000,
+ 404843400000,
+ 415729800000,
+ 436293000000,
+ 447179400000,
+ 467742600000,
+ 478629000000,
+ 499192200000,
+ 511288200000,
+ 530037000000,
+ 542737800000,
+ 562091400000,
+ 574792200000,
+ 594145800000,
+ 606241800000,
+ 625595400000,
+ 636481800000,
+ 657045000000,
+ 667931400000,
+ 688494600000,
+ 699381000000,
+ 719944200000,
+ 731435400000,
+ 751998600000,
+ 762885000000,
+ 783448200000,
+ 794334600000,
+ 814897800000,
+ 828203400000,
+ 846347400000,
+ 859653000000,
+ 877797000000,
+ 891102600000,
+ 909246600000,
+ 922552200000,
+ 941301000000,
+ 954001800000,
+ 972750600000,
+ 985451400000,
+ 1004200200000,
+ 1017505800000,
+ 1035649800000,
+ 1048955400000,
+ 1067099400000,
+ 1080405000000,
+ 1099153800000,
+ 1111854600000,
+ 1130603400000,
+ 1143909000000,
+ 1162053000000,
+ 1174753800000,
+ 1193502600000,
+ 1207413000000,
+ 1223137800000,
+ 1238862600000,
+ 1254587400000,
+ 1270312200000,
+ 1286037000000,
+ 1301761800000,
+ 1317486600000,
+ 1333211400000,
+ 1349541000000,
+ 1365265800000,
+ 1380990600000,
+ 1396715400000,
+ 1412440200000,
+ 1428165000000,
+ 1443889800000,
+ 1459614600000,
+ 1475339400000,
+ 1491064200000,
+ 1506789000000,
+ 1522513800000,
+ 1538843400000,
+ 1554568200000,
+ 1570293000000,
+ 1586017800000,
+ 1601742600000,
+ 1617467400000,
+ 1633192200000,
+ 1648917000000,
+ 1664641800000,
+ 1680366600000,
+ 1696091400000,
+ 1712421000000,
+ 1728145800000,
+ 1743870600000,
+ 1759595400000,
+ 1775320200000,
+ 1791045000000,
+ 1806769800000,
+ 1822494600000,
+ 1838219400000,
+ 1853944200000,
+ 1869669000000,
+ 1885998600000,
+ 1901723400000,
+ 1917448200000,
+ 1933173000000,
+ 1948897800000,
+ 1964622600000,
+ 1980347400000,
+ 1996072200000,
+ 2011797000000,
+ 2027521800000,
+ 2043246600000,
+ 2058971400000,
+ 2075301000000,
+ 2091025800000,
+ 2106750600000,
+ 2122475400000,
+ 2138200200000,
+ null
+ ],
+ "offsets": [
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630,
+ -570,
+ -630
+ ],
+ "population": 0
+ },
+ {
+ "name": "Brazil/Acre",
+ "abbrs": [
+ "LMT",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05"
+ ],
+ "untils": [
+ -1767209328000,
+ -1206950400000,
+ -1191355200000,
+ -1175367600000,
+ -1159819200000,
+ -633812400000,
+ -622062000000,
+ -602276400000,
+ -591825600000,
+ -570740400000,
+ -560203200000,
+ -539118000000,
+ -531345600000,
+ -191358000000,
+ -184190400000,
+ -155156400000,
+ -150062400000,
+ -128890800000,
+ -121118400000,
+ -99946800000,
+ -89582400000,
+ -68410800000,
+ -57960000000,
+ 499755600000,
+ 511243200000,
+ 530600400000,
+ 540273600000,
+ 562136400000,
+ 571204800000,
+ 1214283600000,
+ 1384056000000,
+ null
+ ],
+ "offsets": [
+ 271.2,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Brazil/DeNoronha",
+ "abbrs": [
+ "LMT",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02",
+ "-01",
+ "-02"
+ ],
+ "untils": [
+ -1767217820000,
+ -1206961200000,
+ -1191366000000,
+ -1175378400000,
+ -1159830000000,
+ -633823200000,
+ -622072800000,
+ -602287200000,
+ -591836400000,
+ -570751200000,
+ -560214000000,
+ -539128800000,
+ -531356400000,
+ -191368800000,
+ -184201200000,
+ -155167200000,
+ -150073200000,
+ -128901600000,
+ -121129200000,
+ -99957600000,
+ -89593200000,
+ -68421600000,
+ -57970800000,
+ 499744800000,
+ 511232400000,
+ 530589600000,
+ 540262800000,
+ 562125600000,
+ 571194000000,
+ 592970400000,
+ 602038800000,
+ 624420000000,
+ 634698000000,
+ 938916000000,
+ 951613200000,
+ 970970400000,
+ 971571600000,
+ 1003024800000,
+ 1013907600000,
+ null
+ ],
+ "offsets": [
+ 129.6667,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120,
+ 60,
+ 120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Brazil/East",
+ "abbrs": [
+ "LMT",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02",
+ "-03",
+ "-02"
+ ],
+ "untils": [
+ -1767214412000,
+ -1206957600000,
+ -1191362400000,
+ -1175374800000,
+ -1159826400000,
+ -633819600000,
+ -622069200000,
+ -602283600000,
+ -591832800000,
+ -570747600000,
+ -560210400000,
+ -539125200000,
+ -531352800000,
+ -195426000000,
+ -184197600000,
+ -155163600000,
+ -150069600000,
+ -128898000000,
+ -121125600000,
+ -99954000000,
+ -89589600000,
+ -68418000000,
+ -57967200000,
+ 499748400000,
+ 511236000000,
+ 530593200000,
+ 540266400000,
+ 562129200000,
+ 571197600000,
+ 592974000000,
+ 602042400000,
+ 624423600000,
+ 634701600000,
+ 656478000000,
+ 666756000000,
+ 687927600000,
+ 697600800000,
+ 719982000000,
+ 728445600000,
+ 750826800000,
+ 761709600000,
+ 782276400000,
+ 793159200000,
+ 813726000000,
+ 824004000000,
+ 844570800000,
+ 856058400000,
+ 876106800000,
+ 888717600000,
+ 908074800000,
+ 919562400000,
+ 938919600000,
+ 951616800000,
+ 970974000000,
+ 982461600000,
+ 1003028400000,
+ 1013911200000,
+ 1036292400000,
+ 1045360800000,
+ 1066532400000,
+ 1076810400000,
+ 1099364400000,
+ 1108864800000,
+ 1129431600000,
+ 1140314400000,
+ 1162695600000,
+ 1172368800000,
+ 1192330800000,
+ 1203213600000,
+ 1224385200000,
+ 1234663200000,
+ 1255834800000,
+ 1266717600000,
+ 1287284400000,
+ 1298167200000,
+ 1318734000000,
+ 1330221600000,
+ 1350788400000,
+ 1361066400000,
+ 1382238000000,
+ 1392516000000,
+ 1413687600000,
+ 1424570400000,
+ 1445137200000,
+ 1456020000000,
+ 1476586800000,
+ 1487469600000,
+ 1508036400000,
+ 1518919200000,
+ 1541300400000,
+ 1550368800000,
+ 1572750000000,
+ 1581818400000,
+ 1604199600000,
+ 1613872800000,
+ 1636254000000,
+ 1645322400000,
+ 1667703600000,
+ 1677376800000,
+ 1699153200000,
+ 1708221600000,
+ 1730602800000,
+ 1739671200000,
+ 1762052400000,
+ 1771725600000,
+ 1793502000000,
+ 1803175200000,
+ 1825556400000,
+ 1834624800000,
+ 1857006000000,
+ 1866074400000,
+ 1888455600000,
+ 1897524000000,
+ 1919905200000,
+ 1928973600000,
+ 1951354800000,
+ 1960423200000,
+ 1983409200000,
+ 1992477600000,
+ 2014858800000,
+ 2024532000000,
+ 2046308400000,
+ 2055376800000,
+ 2077758000000,
+ 2086826400000,
+ 2109207600000,
+ 2118880800000,
+ 2140657200000,
+ null
+ ],
+ "offsets": [
+ 186.4667,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120,
+ 180,
+ 120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Brazil/West",
+ "abbrs": [
+ "LMT",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04"
+ ],
+ "untils": [
+ -1767211196000,
+ -1206954000000,
+ -1191358800000,
+ -1175371200000,
+ -1159822800000,
+ -633816000000,
+ -622065600000,
+ -602280000000,
+ -591829200000,
+ -570744000000,
+ -560206800000,
+ -539121600000,
+ -531349200000,
+ -191361600000,
+ -184194000000,
+ -155160000000,
+ -150066000000,
+ -128894400000,
+ -121122000000,
+ -99950400000,
+ -89586000000,
+ -68414400000,
+ -57963600000,
+ 499752000000,
+ 511239600000,
+ 530596800000,
+ 540270000000,
+ 562132800000,
+ 571201200000,
+ 750830400000,
+ 761713200000,
+ null
+ ],
+ "offsets": [
+ 240.0667,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Atlantic",
+ "abbrs": [
+ "LMT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST",
+ "ADT",
+ "AST"
+ ],
+ "untils": [
+ -2131645536000,
+ -1696276800000,
+ -1680469200000,
+ -1632074400000,
+ -1615143600000,
+ -1566763200000,
+ -1557090000000,
+ -1535486400000,
+ -1524949200000,
+ -1504468800000,
+ -1493413200000,
+ -1472414400000,
+ -1461963600000,
+ -1440964800000,
+ -1429390800000,
+ -1409515200000,
+ -1396731600000,
+ -1376856000000,
+ -1366491600000,
+ -1346616000000,
+ -1333832400000,
+ -1313956800000,
+ -1303678800000,
+ -1282507200000,
+ -1272661200000,
+ -1251057600000,
+ -1240088400000,
+ -1219608000000,
+ -1207429200000,
+ -1188763200000,
+ -1175979600000,
+ -1157313600000,
+ -1143925200000,
+ -1124049600000,
+ -1113771600000,
+ -1091390400000,
+ -1081026000000,
+ -1059854400000,
+ -1050786000000,
+ -1030910400000,
+ -1018126800000,
+ -999460800000,
+ -986677200000,
+ -965592000000,
+ -955227600000,
+ -935956800000,
+ -923173200000,
+ -904507200000,
+ -891723600000,
+ -880221600000,
+ -769395600000,
+ -765399600000,
+ -747252000000,
+ -733950000000,
+ -715802400000,
+ -702500400000,
+ -684352800000,
+ -671050800000,
+ -652903200000,
+ -639601200000,
+ -589399200000,
+ -576097200000,
+ -557949600000,
+ -544647600000,
+ -526500000000,
+ -513198000000,
+ -495050400000,
+ -481748400000,
+ -431546400000,
+ -418244400000,
+ -400096800000,
+ -386794800000,
+ -368647200000,
+ -355345200000,
+ -337197600000,
+ -323895600000,
+ -242244000000,
+ -226522800000,
+ -210794400000,
+ -195073200000,
+ -179344800000,
+ -163623600000,
+ -147895200000,
+ -131569200000,
+ -116445600000,
+ -100119600000,
+ -84391200000,
+ -68670000000,
+ -52941600000,
+ -37220400000,
+ -21492000000,
+ -5770800000,
+ 9957600000,
+ 25678800000,
+ 41407200000,
+ 57733200000,
+ 73461600000,
+ 89182800000,
+ 104911200000,
+ 120632400000,
+ 136360800000,
+ 152082000000,
+ 167810400000,
+ 183531600000,
+ 199260000000,
+ 215586000000,
+ 230709600000,
+ 247035600000,
+ 262764000000,
+ 278485200000,
+ 294213600000,
+ 309934800000,
+ 325663200000,
+ 341384400000,
+ 357112800000,
+ 372834000000,
+ 388562400000,
+ 404888400000,
+ 420012000000,
+ 436338000000,
+ 452066400000,
+ 467787600000,
+ 483516000000,
+ 499237200000,
+ 514965600000,
+ 530686800000,
+ 544600800000,
+ 562136400000,
+ 576050400000,
+ 594190800000,
+ 607500000000,
+ 625640400000,
+ 638949600000,
+ 657090000000,
+ 671004000000,
+ 688539600000,
+ 702453600000,
+ 719989200000,
+ 733903200000,
+ 752043600000,
+ 765352800000,
+ 783493200000,
+ 796802400000,
+ 814942800000,
+ 828856800000,
+ 846392400000,
+ 860306400000,
+ 877842000000,
+ 891756000000,
+ 909291600000,
+ 923205600000,
+ 941346000000,
+ 954655200000,
+ 972795600000,
+ 986104800000,
+ 1004245200000,
+ 1018159200000,
+ 1035694800000,
+ 1049608800000,
+ 1067144400000,
+ 1081058400000,
+ 1099198800000,
+ 1112508000000,
+ 1130648400000,
+ 1143957600000,
+ 1162098000000,
+ 1173592800000,
+ 1194152400000,
+ 1205042400000,
+ 1225602000000,
+ 1236492000000,
+ 1257051600000,
+ 1268546400000,
+ 1289106000000,
+ 1299996000000,
+ 1320555600000,
+ 1331445600000,
+ 1352005200000,
+ 1362895200000,
+ 1383454800000,
+ 1394344800000,
+ 1414904400000,
+ 1425794400000,
+ 1446354000000,
+ 1457848800000,
+ 1478408400000,
+ 1489298400000,
+ 1509858000000,
+ 1520748000000,
+ 1541307600000,
+ 1552197600000,
+ 1572757200000,
+ 1583647200000,
+ 1604206800000,
+ 1615701600000,
+ 1636261200000,
+ 1647151200000,
+ 1667710800000,
+ 1678600800000,
+ 1699160400000,
+ 1710050400000,
+ 1730610000000,
+ 1741500000000,
+ 1762059600000,
+ 1772949600000,
+ 1793509200000,
+ 1805004000000,
+ 1825563600000,
+ 1836453600000,
+ 1857013200000,
+ 1867903200000,
+ 1888462800000,
+ 1899352800000,
+ 1919912400000,
+ 1930802400000,
+ 1951362000000,
+ 1962856800000,
+ 1983416400000,
+ 1994306400000,
+ 2014866000000,
+ 2025756000000,
+ 2046315600000,
+ 2057205600000,
+ 2077765200000,
+ 2088655200000,
+ 2109214800000,
+ 2120104800000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 254.4,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Central",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1694368800000,
+ -1681671600000,
+ -1632067200000,
+ -1615136400000,
+ -1029686400000,
+ -1018198800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -746035200000,
+ -732733200000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620755200000,
+ -607626000000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -450291600000,
+ -431539200000,
+ -418237200000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -292438800000,
+ -210787200000,
+ -198090000000,
+ -116438400000,
+ -100108800000,
+ -84384000000,
+ -68659200000,
+ -52934400000,
+ -37209600000,
+ -21484800000,
+ -5760000000,
+ 9964800000,
+ 25689600000,
+ 41414400000,
+ 57744000000,
+ 73468800000,
+ 89193600000,
+ 104918400000,
+ 120643200000,
+ 136368000000,
+ 152092800000,
+ 167817600000,
+ 183542400000,
+ 199267200000,
+ 215596800000,
+ 230716800000,
+ 247046400000,
+ 262771200000,
+ 278496000000,
+ 294220800000,
+ 309945600000,
+ 325670400000,
+ 341395200000,
+ 357120000000,
+ 372844800000,
+ 388569600000,
+ 404899200000,
+ 420019200000,
+ 436348800000,
+ 452073600000,
+ 467798400000,
+ 483523200000,
+ 499248000000,
+ 514972800000,
+ 530697600000,
+ 544608000000,
+ 562147200000,
+ 576057600000,
+ 594201600000,
+ 607507200000,
+ 625651200000,
+ 638956800000,
+ 657100800000,
+ 671011200000,
+ 688550400000,
+ 702460800000,
+ 720000000000,
+ 733910400000,
+ 752054400000,
+ 765360000000,
+ 783504000000,
+ 796809600000,
+ 814953600000,
+ 828864000000,
+ 846403200000,
+ 860313600000,
+ 877852800000,
+ 891763200000,
+ 909302400000,
+ 923212800000,
+ 941356800000,
+ 954662400000,
+ 972806400000,
+ 986112000000,
+ 1004256000000,
+ 1018166400000,
+ 1035705600000,
+ 1049616000000,
+ 1067155200000,
+ 1081065600000,
+ 1099209600000,
+ 1112515200000,
+ 1130659200000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Eastern",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1632070800000,
+ -1615140000000,
+ -1601753400000,
+ -1583697600000,
+ -1567357200000,
+ -1554667200000,
+ -1534698000000,
+ -1524074400000,
+ -1503248400000,
+ -1492365600000,
+ -1471798800000,
+ -1460916000000,
+ -1440954000000,
+ -1428861600000,
+ -1409504400000,
+ -1397412000000,
+ -1378054800000,
+ -1365962400000,
+ -1346605200000,
+ -1333908000000,
+ -1315155600000,
+ -1301853600000,
+ -1283706000000,
+ -1270404000000,
+ -1252256400000,
+ -1238954400000,
+ -1220806800000,
+ -1207504800000,
+ -1188752400000,
+ -1176055200000,
+ -1157302800000,
+ -1144000800000,
+ -1125853200000,
+ -1112551200000,
+ -1094403600000,
+ -1081101600000,
+ -1062954000000,
+ -1049652000000,
+ -1031504400000,
+ -1018202400000,
+ -1000054800000,
+ -986752800000,
+ -968000400000,
+ -955303200000,
+ -936550800000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -747248400000,
+ -733946400000,
+ -715806000000,
+ -702504000000,
+ -684356400000,
+ -671054400000,
+ -652906800000,
+ -634161600000,
+ -620845200000,
+ -602704800000,
+ -589395600000,
+ -576093600000,
+ -557946000000,
+ -544644000000,
+ -526496400000,
+ -513194400000,
+ -495046800000,
+ -481744800000,
+ -463597200000,
+ -450295200000,
+ -431542800000,
+ -418240800000,
+ -400093200000,
+ -384372000000,
+ -368643600000,
+ -352922400000,
+ -337194000000,
+ -321472800000,
+ -305744400000,
+ -289418400000,
+ -273690000000,
+ -257968800000,
+ -242240400000,
+ -226519200000,
+ -210790800000,
+ -195069600000,
+ -179341200000,
+ -163620000000,
+ -147891600000,
+ -131565600000,
+ -116442000000,
+ -100116000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 136364400000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Mountain",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1998663968000,
+ -1632063600000,
+ -1615132800000,
+ -1600614000000,
+ -1596816000000,
+ -1567954800000,
+ -1551628800000,
+ -1536505200000,
+ -1523203200000,
+ -1504450800000,
+ -1491753600000,
+ -1473001200000,
+ -1459699200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -715791600000,
+ -702489600000,
+ -84380400000,
+ -68659200000,
+ -21481200000,
+ -5760000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 136371600000,
+ 152092800000,
+ 167821200000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 453.8667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Newfoundland",
+ "abbrs": [
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST",
+ "NDT",
+ "NST"
+ ],
+ "untils": [
+ -1664130548000,
+ -1650137348000,
+ -1632076148000,
+ -1615145348000,
+ -1598650148000,
+ -1590100148000,
+ -1567286948000,
+ -1551565748000,
+ -1535837348000,
+ -1520116148000,
+ -1503782948000,
+ -1488666548000,
+ -1472333348000,
+ -1457216948000,
+ -1440883748000,
+ -1425767348000,
+ -1409434148000,
+ -1394317748000,
+ -1377984548000,
+ -1362263348000,
+ -1346534948000,
+ -1330813748000,
+ -1314480548000,
+ -1299364148000,
+ -1283030948000,
+ -1267914548000,
+ -1251581348000,
+ -1236464948000,
+ -1220131748000,
+ -1205015348000,
+ -1188682148000,
+ -1172960948000,
+ -1156627748000,
+ -1141511348000,
+ -1125178148000,
+ -1110061748000,
+ -1096921748000,
+ -1093728600000,
+ -1078612200000,
+ -1061670600000,
+ -1048973400000,
+ -1030221000000,
+ -1017523800000,
+ -998771400000,
+ -986074200000,
+ -966717000000,
+ -954624600000,
+ -935267400000,
+ -922570200000,
+ -903817800000,
+ -891120600000,
+ -872368200000,
+ -769395600000,
+ -765401400000,
+ -746044200000,
+ -733347000000,
+ -714594600000,
+ -701897400000,
+ -683145000000,
+ -670447800000,
+ -651695400000,
+ -638998200000,
+ -619641000000,
+ -606943800000,
+ -589401000000,
+ -576099000000,
+ -557951400000,
+ -544649400000,
+ -526501800000,
+ -513199800000,
+ -495052200000,
+ -481750200000,
+ -463602600000,
+ -450300600000,
+ -431548200000,
+ -418246200000,
+ -400098600000,
+ -386796600000,
+ -368649000000,
+ -355347000000,
+ -337199400000,
+ -323897400000,
+ -305749800000,
+ -289423800000,
+ -273695400000,
+ -257974200000,
+ -242245800000,
+ -226524600000,
+ -210796200000,
+ -195075000000,
+ -179346600000,
+ -163625400000,
+ -147897000000,
+ -131571000000,
+ -116447400000,
+ -100121400000,
+ -84393000000,
+ -68671800000,
+ -52943400000,
+ -37222200000,
+ -21493800000,
+ -5772600000,
+ 9955800000,
+ 25677000000,
+ 41405400000,
+ 57731400000,
+ 73459800000,
+ 89181000000,
+ 104909400000,
+ 120630600000,
+ 136359000000,
+ 152080200000,
+ 167808600000,
+ 183529800000,
+ 199258200000,
+ 215584200000,
+ 230707800000,
+ 247033800000,
+ 262762200000,
+ 278483400000,
+ 294211800000,
+ 309933000000,
+ 325661400000,
+ 341382600000,
+ 357111000000,
+ 372832200000,
+ 388560600000,
+ 404886600000,
+ 420010200000,
+ 436336200000,
+ 452064600000,
+ 467785800000,
+ 483514200000,
+ 499235400000,
+ 514963800000,
+ 530685000000,
+ 544591860000,
+ 562127460000,
+ 576041460000,
+ 594178260000,
+ 607491060000,
+ 625631460000,
+ 638940660000,
+ 657081060000,
+ 670995060000,
+ 688530660000,
+ 702444660000,
+ 719980260000,
+ 733894260000,
+ 752034660000,
+ 765343860000,
+ 783484260000,
+ 796793460000,
+ 814933860000,
+ 828847860000,
+ 846383460000,
+ 860297460000,
+ 877833060000,
+ 891747060000,
+ 909282660000,
+ 923196660000,
+ 941337060000,
+ 954646260000,
+ 972786660000,
+ 986095860000,
+ 1004236260000,
+ 1018150260000,
+ 1035685860000,
+ 1049599860000,
+ 1067135460000,
+ 1081049460000,
+ 1099189860000,
+ 1112499060000,
+ 1130639460000,
+ 1143948660000,
+ 1162089060000,
+ 1173583860000,
+ 1194143460000,
+ 1205033460000,
+ 1225593060000,
+ 1236483060000,
+ 1257042660000,
+ 1268537460000,
+ 1289097060000,
+ 1299987060000,
+ 1320553800000,
+ 1331443800000,
+ 1352003400000,
+ 1362893400000,
+ 1383453000000,
+ 1394343000000,
+ 1414902600000,
+ 1425792600000,
+ 1446352200000,
+ 1457847000000,
+ 1478406600000,
+ 1489296600000,
+ 1509856200000,
+ 1520746200000,
+ 1541305800000,
+ 1552195800000,
+ 1572755400000,
+ 1583645400000,
+ 1604205000000,
+ 1615699800000,
+ 1636259400000,
+ 1647149400000,
+ 1667709000000,
+ 1678599000000,
+ 1699158600000,
+ 1710048600000,
+ 1730608200000,
+ 1741498200000,
+ 1762057800000,
+ 1772947800000,
+ 1793507400000,
+ 1805002200000,
+ 1825561800000,
+ 1836451800000,
+ 1857011400000,
+ 1867901400000,
+ 1888461000000,
+ 1899351000000,
+ 1919910600000,
+ 1930800600000,
+ 1951360200000,
+ 1962855000000,
+ 1983414600000,
+ 1994304600000,
+ 2014864200000,
+ 2025754200000,
+ 2046313800000,
+ 2057203800000,
+ 2077763400000,
+ 2088653400000,
+ 2109213000000,
+ 2120103000000,
+ 2140662600000,
+ null
+ ],
+ "offsets": [
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 150.8667,
+ 210.8667,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 90,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210,
+ 150,
+ 210
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Pacific",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1632060000000,
+ -1615129200000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -747237600000,
+ -732726000000,
+ -715788000000,
+ -702486000000,
+ -684338400000,
+ -671036400000,
+ -652888800000,
+ -639586800000,
+ -620834400000,
+ -608137200000,
+ -589384800000,
+ -576082800000,
+ -557935200000,
+ -544633200000,
+ -526485600000,
+ -513183600000,
+ -495036000000,
+ -481734000000,
+ -463586400000,
+ -450284400000,
+ -431532000000,
+ -418230000000,
+ -400082400000,
+ -386780400000,
+ -368632800000,
+ -355330800000,
+ -337183200000,
+ -323881200000,
+ -305733600000,
+ -292431600000,
+ -273679200000,
+ -260982000000,
+ -242229600000,
+ -226508400000,
+ -210780000000,
+ -195058800000,
+ -179330400000,
+ -163609200000,
+ -147880800000,
+ -131554800000,
+ -116431200000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 136375200000,
+ 152096400000,
+ 167824800000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Saskatchewan",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "CST"
+ ],
+ "untils": [
+ -2030202084000,
+ -1632063600000,
+ -1615132800000,
+ -1251651600000,
+ -1238349600000,
+ -1220202000000,
+ -1206900000000,
+ -1188752400000,
+ -1175450400000,
+ -1156698000000,
+ -1144000800000,
+ -1125248400000,
+ -1111946400000,
+ -1032714000000,
+ -1016992800000,
+ -1001264400000,
+ -986148000000,
+ -969814800000,
+ -954093600000,
+ -937760400000,
+ -922039200000,
+ -906310800000,
+ -890589600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -748450800000,
+ -732729600000,
+ -715791600000,
+ -702489600000,
+ -684342000000,
+ -671040000000,
+ -652892400000,
+ -639590400000,
+ -620838000000,
+ -608140800000,
+ -589388400000,
+ -576086400000,
+ -557938800000,
+ -544636800000,
+ -526489200000,
+ -513187200000,
+ -495039600000,
+ -481737600000,
+ -463590000000,
+ -450288000000,
+ -431535600000,
+ -418233600000,
+ -400086000000,
+ -386784000000,
+ -337186800000,
+ -321465600000,
+ -305737200000,
+ null
+ ],
+ "offsets": [
+ 418.6,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Canada/Yukon",
+ "abbrs": [
+ "YST",
+ "YDT",
+ "YST",
+ "YDT",
+ "YST",
+ "YWT",
+ "YPT",
+ "YST",
+ "YDDT",
+ "YST",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1632056400000,
+ -1615125600000,
+ -1596978000000,
+ -1583164800000,
+ -880203600000,
+ -769395600000,
+ -765381600000,
+ -147884400000,
+ -131554800000,
+ -81961200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 480,
+ 540,
+ 420,
+ 540,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "CET",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -766623600000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Chile/Continental",
+ "abbrs": [
+ "SMT",
+ "-05",
+ "SMT",
+ "-04",
+ "SMT",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-05",
+ "-04",
+ "-03",
+ "-04",
+ "-05",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03",
+ "-04",
+ "-03"
+ ],
+ "untils": [
+ -1892661434000,
+ -1688410800000,
+ -1619205434000,
+ -1593806400000,
+ -1335986234000,
+ -1317585600000,
+ -1304362800000,
+ -1286049600000,
+ -1272826800000,
+ -1254513600000,
+ -1241290800000,
+ -1222977600000,
+ -1209754800000,
+ -1191355200000,
+ -1178132400000,
+ -870552000000,
+ -865278000000,
+ -740520000000,
+ -736376400000,
+ -718056000000,
+ -713649600000,
+ -36619200000,
+ -23922000000,
+ -3355200000,
+ 7527600000,
+ 24465600000,
+ 37767600000,
+ 55915200000,
+ 69217200000,
+ 87969600000,
+ 100666800000,
+ 118209600000,
+ 132116400000,
+ 150868800000,
+ 163566000000,
+ 182318400000,
+ 195620400000,
+ 213768000000,
+ 227070000000,
+ 245217600000,
+ 258519600000,
+ 277272000000,
+ 289969200000,
+ 308721600000,
+ 321418800000,
+ 340171200000,
+ 353473200000,
+ 371620800000,
+ 384922800000,
+ 403070400000,
+ 416372400000,
+ 434520000000,
+ 447822000000,
+ 466574400000,
+ 479271600000,
+ 498024000000,
+ 510721200000,
+ 529473600000,
+ 545194800000,
+ 560923200000,
+ 574225200000,
+ 592372800000,
+ 605674800000,
+ 624427200000,
+ 637124400000,
+ 653457600000,
+ 668574000000,
+ 687326400000,
+ 700628400000,
+ 718776000000,
+ 732078000000,
+ 750225600000,
+ 763527600000,
+ 781675200000,
+ 794977200000,
+ 813729600000,
+ 826426800000,
+ 845179200000,
+ 859690800000,
+ 876628800000,
+ 889930800000,
+ 906868800000,
+ 923194800000,
+ 939528000000,
+ 952830000000,
+ 971582400000,
+ 984279600000,
+ 1003032000000,
+ 1015729200000,
+ 1034481600000,
+ 1047178800000,
+ 1065931200000,
+ 1079233200000,
+ 1097380800000,
+ 1110682800000,
+ 1128830400000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192334400000,
+ 1206846000000,
+ 1223784000000,
+ 1237086000000,
+ 1255233600000,
+ 1270350000000,
+ 1286683200000,
+ 1304823600000,
+ 1313899200000,
+ 1335668400000,
+ 1346558400000,
+ 1367118000000,
+ 1378612800000,
+ 1398567600000,
+ 1410062400000,
+ 1463281200000,
+ 1471147200000,
+ 1494730800000,
+ 1502596800000,
+ 1526180400000,
+ 1534046400000,
+ 1557630000000,
+ 1565496000000,
+ 1589079600000,
+ 1596945600000,
+ 1620529200000,
+ 1629000000000,
+ 1652583600000,
+ 1660449600000,
+ 1684033200000,
+ 1691899200000,
+ 1715482800000,
+ 1723348800000,
+ 1746932400000,
+ 1754798400000,
+ 1778382000000,
+ 1786248000000,
+ 1809831600000,
+ 1818302400000,
+ 1841886000000,
+ 1849752000000,
+ 1873335600000,
+ 1881201600000,
+ 1904785200000,
+ 1912651200000,
+ 1936234800000,
+ 1944100800000,
+ 1967684400000,
+ 1976155200000,
+ 1999738800000,
+ 2007604800000,
+ 2031188400000,
+ 2039054400000,
+ 2062638000000,
+ 2070504000000,
+ 2094087600000,
+ 2101953600000,
+ 2125537200000,
+ 2133403200000,
+ null
+ ],
+ "offsets": [
+ 282.7667,
+ 300,
+ 282.7667,
+ 240,
+ 282.7667,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 180,
+ 240,
+ 300,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180,
+ 240,
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Chile/EasterIsland",
+ "abbrs": [
+ "EMT",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05"
+ ],
+ "untils": [
+ -1178124152000,
+ -36619200000,
+ -23922000000,
+ -3355200000,
+ 7527600000,
+ 24465600000,
+ 37767600000,
+ 55915200000,
+ 69217200000,
+ 87969600000,
+ 100666800000,
+ 118209600000,
+ 132116400000,
+ 150868800000,
+ 163566000000,
+ 182318400000,
+ 195620400000,
+ 213768000000,
+ 227070000000,
+ 245217600000,
+ 258519600000,
+ 277272000000,
+ 289969200000,
+ 308721600000,
+ 321418800000,
+ 340171200000,
+ 353473200000,
+ 371620800000,
+ 403070400000,
+ 416372400000,
+ 434520000000,
+ 447822000000,
+ 466574400000,
+ 479271600000,
+ 498024000000,
+ 510721200000,
+ 529473600000,
+ 545194800000,
+ 560923200000,
+ 574225200000,
+ 592372800000,
+ 605674800000,
+ 624427200000,
+ 637124400000,
+ 653457600000,
+ 668574000000,
+ 687326400000,
+ 700628400000,
+ 718776000000,
+ 732078000000,
+ 750225600000,
+ 763527600000,
+ 781675200000,
+ 794977200000,
+ 813729600000,
+ 826426800000,
+ 845179200000,
+ 859690800000,
+ 876628800000,
+ 889930800000,
+ 906868800000,
+ 923194800000,
+ 939528000000,
+ 952830000000,
+ 971582400000,
+ 984279600000,
+ 1003032000000,
+ 1015729200000,
+ 1034481600000,
+ 1047178800000,
+ 1065931200000,
+ 1079233200000,
+ 1097380800000,
+ 1110682800000,
+ 1128830400000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192334400000,
+ 1206846000000,
+ 1223784000000,
+ 1237086000000,
+ 1255233600000,
+ 1270350000000,
+ 1286683200000,
+ 1304823600000,
+ 1313899200000,
+ 1335668400000,
+ 1346558400000,
+ 1367118000000,
+ 1378612800000,
+ 1398567600000,
+ 1410062400000,
+ 1463281200000,
+ 1471147200000,
+ 1494730800000,
+ 1502596800000,
+ 1526180400000,
+ 1534046400000,
+ 1557630000000,
+ 1565496000000,
+ 1589079600000,
+ 1596945600000,
+ 1620529200000,
+ 1629000000000,
+ 1652583600000,
+ 1660449600000,
+ 1684033200000,
+ 1691899200000,
+ 1715482800000,
+ 1723348800000,
+ 1746932400000,
+ 1754798400000,
+ 1778382000000,
+ 1786248000000,
+ 1809831600000,
+ 1818302400000,
+ 1841886000000,
+ 1849752000000,
+ 1873335600000,
+ 1881201600000,
+ 1904785200000,
+ 1912651200000,
+ 1936234800000,
+ 1944100800000,
+ 1967684400000,
+ 1976155200000,
+ 1999738800000,
+ 2007604800000,
+ 2031188400000,
+ 2039054400000,
+ 2062638000000,
+ 2070504000000,
+ 2094087600000,
+ 2101953600000,
+ 2125537200000,
+ 2133403200000,
+ null
+ ],
+ "offsets": [
+ 437.4667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "CST6CDT",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Cuba",
+ "abbrs": [
+ "HMT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1402813824000,
+ -1311534000000,
+ -1300996800000,
+ -933534000000,
+ -925675200000,
+ -902084400000,
+ -893620800000,
+ -870030000000,
+ -862171200000,
+ -775681200000,
+ -767822400000,
+ -744231600000,
+ -736372800000,
+ -144702000000,
+ -134251200000,
+ -113425200000,
+ -102542400000,
+ -86295600000,
+ -72907200000,
+ -54154800000,
+ -41457600000,
+ -21495600000,
+ -5774400000,
+ 9954000000,
+ 25675200000,
+ 41403600000,
+ 57729600000,
+ 73458000000,
+ 87364800000,
+ 104907600000,
+ 118900800000,
+ 136357200000,
+ 150436800000,
+ 167806800000,
+ 183528000000,
+ 199256400000,
+ 215582400000,
+ 230706000000,
+ 247032000000,
+ 263365200000,
+ 276667200000,
+ 290581200000,
+ 308721600000,
+ 322030800000,
+ 340171200000,
+ 358318800000,
+ 371620800000,
+ 389768400000,
+ 403070400000,
+ 421218000000,
+ 434520000000,
+ 452667600000,
+ 466574400000,
+ 484117200000,
+ 498024000000,
+ 511333200000,
+ 529473600000,
+ 542782800000,
+ 560923200000,
+ 574837200000,
+ 592372800000,
+ 606286800000,
+ 623822400000,
+ 638946000000,
+ 655876800000,
+ 671000400000,
+ 687330000000,
+ 702450000000,
+ 718779600000,
+ 733899600000,
+ 750229200000,
+ 765349200000,
+ 781678800000,
+ 796798800000,
+ 813128400000,
+ 828853200000,
+ 844578000000,
+ 860302800000,
+ 876632400000,
+ 891147600000,
+ 909291600000,
+ 922597200000,
+ 941346000000,
+ 954651600000,
+ 972795600000,
+ 986101200000,
+ 1004245200000,
+ 1018155600000,
+ 1035694800000,
+ 1049605200000,
+ 1067144400000,
+ 1080450000000,
+ 1162098000000,
+ 1173589200000,
+ 1193547600000,
+ 1205643600000,
+ 1224997200000,
+ 1236488400000,
+ 1256446800000,
+ 1268542800000,
+ 1288501200000,
+ 1300597200000,
+ 1321160400000,
+ 1333256400000,
+ 1352005200000,
+ 1362891600000,
+ 1383454800000,
+ 1394341200000,
+ 1414904400000,
+ 1425790800000,
+ 1446354000000,
+ 1457845200000,
+ 1478408400000,
+ 1489294800000,
+ 1509858000000,
+ 1520744400000,
+ 1541307600000,
+ 1552194000000,
+ 1572757200000,
+ 1583643600000,
+ 1604206800000,
+ 1615698000000,
+ 1636261200000,
+ 1647147600000,
+ 1667710800000,
+ 1678597200000,
+ 1699160400000,
+ 1710046800000,
+ 1730610000000,
+ 1741496400000,
+ 1762059600000,
+ 1772946000000,
+ 1793509200000,
+ 1805000400000,
+ 1825563600000,
+ 1836450000000,
+ 1857013200000,
+ 1867899600000,
+ 1888462800000,
+ 1899349200000,
+ 1919912400000,
+ 1930798800000,
+ 1951362000000,
+ 1962853200000,
+ 1983416400000,
+ 1994302800000,
+ 2014866000000,
+ 2025752400000,
+ 2046315600000,
+ 2057202000000,
+ 2077765200000,
+ 2088651600000,
+ 2109214800000,
+ 2120101200000,
+ 2140664400000,
+ null
+ ],
+ "offsets": [
+ 329.6,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "EET",
+ "abbrs": [
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Egypt",
+ "abbrs": [
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -929844000000,
+ -923108400000,
+ -906170400000,
+ -892868400000,
+ -875844000000,
+ -857790000000,
+ -844308000000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762663600000,
+ -399088800000,
+ -386650800000,
+ -368330400000,
+ -355114800000,
+ -336790800000,
+ -323654400000,
+ -305168400000,
+ -292032000000,
+ -273632400000,
+ -260496000000,
+ -242096400000,
+ -228960000000,
+ -210560400000,
+ -197424000000,
+ -178938000000,
+ -165801600000,
+ -147402000000,
+ -134265600000,
+ -115866000000,
+ -102643200000,
+ -84330000000,
+ -71107200000,
+ -52707600000,
+ -39484800000,
+ -21171600000,
+ -7948800000,
+ 10364400000,
+ 23587200000,
+ 41900400000,
+ 55123200000,
+ 73522800000,
+ 86745600000,
+ 105058800000,
+ 118281600000,
+ 136594800000,
+ 149817600000,
+ 168130800000,
+ 181353600000,
+ 199753200000,
+ 212976000000,
+ 231289200000,
+ 244512000000,
+ 262825200000,
+ 276048000000,
+ 294361200000,
+ 307584000000,
+ 325983600000,
+ 339206400000,
+ 357519600000,
+ 370742400000,
+ 396399600000,
+ 402278400000,
+ 426812400000,
+ 433814400000,
+ 452214000000,
+ 465436800000,
+ 483750000000,
+ 496972800000,
+ 515286000000,
+ 528508800000,
+ 546822000000,
+ 560044800000,
+ 578444400000,
+ 591667200000,
+ 610412400000,
+ 623203200000,
+ 641516400000,
+ 654739200000,
+ 673052400000,
+ 686275200000,
+ 704674800000,
+ 717897600000,
+ 736210800000,
+ 749433600000,
+ 767746800000,
+ 780969600000,
+ 799020000000,
+ 812322000000,
+ 830469600000,
+ 843771600000,
+ 861919200000,
+ 875221200000,
+ 893368800000,
+ 906670800000,
+ 925423200000,
+ 938725200000,
+ 956872800000,
+ 970174800000,
+ 988322400000,
+ 1001624400000,
+ 1019772000000,
+ 1033074000000,
+ 1051221600000,
+ 1064523600000,
+ 1083276000000,
+ 1096578000000,
+ 1114725600000,
+ 1128027600000,
+ 1146175200000,
+ 1158872400000,
+ 1177624800000,
+ 1189112400000,
+ 1209074400000,
+ 1219957200000,
+ 1240524000000,
+ 1250802000000,
+ 1272578400000,
+ 1281474000000,
+ 1284069600000,
+ 1285880400000,
+ 1400191200000,
+ 1403816400000,
+ 1406844000000,
+ 1411678800000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Eire",
+ "abbrs": [
+ "DMT",
+ "IST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT"
+ ],
+ "untils": [
+ -1691962479000,
+ -1680471279000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -733356000000,
+ -719445600000,
+ -699487200000,
+ -684972000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 25.35,
+ -34.65,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "EST",
+ "abbrs": [
+ "EST"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "EST5EDT",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633280400000,
+ -1615140000000,
+ -1601830800000,
+ -1583690400000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152085600000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-0",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-1",
+ "abbrs": [
+ "+01"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-10",
+ "abbrs": [
+ "+10"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-11",
+ "abbrs": [
+ "+11"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-12",
+ "abbrs": [
+ "+12"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -720
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-13",
+ "abbrs": [
+ "+13"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -780
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-14",
+ "abbrs": [
+ "+14"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -840
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-2",
+ "abbrs": [
+ "+02"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-3",
+ "abbrs": [
+ "+03"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-4",
+ "abbrs": [
+ "+04"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-5",
+ "abbrs": [
+ "+05"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-6",
+ "abbrs": [
+ "+06"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-7",
+ "abbrs": [
+ "+07"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-8",
+ "abbrs": [
+ "+08"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT-9",
+ "abbrs": [
+ "+09"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -540
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+0",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+1",
+ "abbrs": [
+ "-01"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+10",
+ "abbrs": [
+ "-10"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+11",
+ "abbrs": [
+ "-11"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+12",
+ "abbrs": [
+ "-12"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 720
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+2",
+ "abbrs": [
+ "-02"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+3",
+ "abbrs": [
+ "-03"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+4",
+ "abbrs": [
+ "-04"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+5",
+ "abbrs": [
+ "-05"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+6",
+ "abbrs": [
+ "-06"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+7",
+ "abbrs": [
+ "-07"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+8",
+ "abbrs": [
+ "-08"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT+9",
+ "abbrs": [
+ "-09"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 540
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/GMT0",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/Greenwich",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/UCT",
+ "abbrs": [
+ "UCT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/Universal",
+ "abbrs": [
+ "UTC"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/UTC",
+ "abbrs": [
+ "UTC"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Etc/Zulu",
+ "abbrs": [
+ "UTC"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Amsterdam",
+ "abbrs": [
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "AMT",
+ "NST",
+ "+0120",
+ "+0020",
+ "+0120",
+ "+0020",
+ "+0120",
+ "+0020",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693700372000,
+ -1680484772000,
+ -1663453172000,
+ -1650147572000,
+ -1633213172000,
+ -1617488372000,
+ -1601158772000,
+ -1586038772000,
+ -1569709172000,
+ -1554589172000,
+ -1538259572000,
+ -1523139572000,
+ -1507501172000,
+ -1490566772000,
+ -1470176372000,
+ -1459117172000,
+ -1443997172000,
+ -1427667572000,
+ -1406672372000,
+ -1396217972000,
+ -1376950772000,
+ -1364768372000,
+ -1345414772000,
+ -1333318772000,
+ -1313792372000,
+ -1301264372000,
+ -1282256372000,
+ -1269814772000,
+ -1250720372000,
+ -1238365172000,
+ -1219184372000,
+ -1206915572000,
+ -1186957172000,
+ -1175465972000,
+ -1156025972000,
+ -1143411572000,
+ -1124489972000,
+ -1111961972000,
+ -1092953972000,
+ -1080512372000,
+ -1061331572000,
+ -1049062772000,
+ -1029190772000,
+ -1025745572000,
+ -1017613200000,
+ -998259600000,
+ -986163600000,
+ -966723600000,
+ -954109200000,
+ -935022000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -766623600000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -19.5333,
+ -79.5333,
+ -80,
+ -20,
+ -80,
+ -20,
+ -80,
+ -20,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1624000
+ },
+ {
+ "name": "Europe/Andorra",
+ "abbrs": [
+ "WET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -733881600000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 79218
+ },
+ {
+ "name": "Europe/Astrakhan",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04"
+ ],
+ "untils": [
+ -1441249932000,
+ -1247540400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ 1459033200000,
+ null
+ ],
+ "offsets": [
+ -192.2,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Athens",
+ "abbrs": [
+ "AMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1686101632000,
+ -1182996000000,
+ -1178161200000,
+ -906861600000,
+ -904878000000,
+ -857257200000,
+ -844477200000,
+ -828237600000,
+ -812422800000,
+ -552362400000,
+ -541652400000,
+ 166485600000,
+ 186184800000,
+ 198028800000,
+ 213753600000,
+ 228873600000,
+ 244080000000,
+ 260323200000,
+ 275446800000,
+ 291798000000,
+ 307407600000,
+ 323388000000,
+ 338936400000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -94.8667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 3484000
+ },
+ {
+ "name": "Europe/Belfast",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Belgrade",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -905824800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -777942000000,
+ -766623600000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1180000
+ },
+ {
+ "name": "Europe/Berlin",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CEMT",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CEMT",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -776563200000,
+ -765936000000,
+ -761180400000,
+ -748479600000,
+ -733273200000,
+ -717631200000,
+ -714610800000,
+ -710380800000,
+ -701910000000,
+ -684975600000,
+ -670460400000,
+ -654130800000,
+ -639010800000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 4069000
+ },
+ {
+ "name": "Europe/Bratislava",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "GMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -765327600000,
+ -746578800000,
+ -733359600000,
+ -728517600000,
+ -721260000000,
+ -716425200000,
+ -701910000000,
+ -684975600000,
+ -670460400000,
+ -654217200000,
+ -639010800000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Brussels",
+ "abbrs": [
+ "WET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1740355200000,
+ -1693702800000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -1613826000000,
+ -1604278800000,
+ -1585530000000,
+ -1574038800000,
+ -1552266000000,
+ -1539997200000,
+ -1520557200000,
+ -1507510800000,
+ -1490576400000,
+ -1473642000000,
+ -1459126800000,
+ -1444006800000,
+ -1427677200000,
+ -1411952400000,
+ -1396227600000,
+ -1379293200000,
+ -1364778000000,
+ -1348448400000,
+ -1333328400000,
+ -1316394000000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1191189600000,
+ -1175464800000,
+ -1160344800000,
+ -1143410400000,
+ -1127685600000,
+ -1111960800000,
+ -1096840800000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1033336800000,
+ -1017612000000,
+ -1002492000000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -934668000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -798073200000,
+ -781052400000,
+ -766623600000,
+ -745455600000,
+ -733273200000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 2089000
+ },
+ {
+ "name": "Europe/Bucharest",
+ "abbrs": [
+ "BMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1213148664000,
+ -1187056800000,
+ -1175479200000,
+ -1159754400000,
+ -1144029600000,
+ -1127700000000,
+ -1111975200000,
+ -1096250400000,
+ -1080525600000,
+ -1064800800000,
+ -1049076000000,
+ -1033351200000,
+ -1017626400000,
+ -1001901600000,
+ -986176800000,
+ -970452000000,
+ -954727200000,
+ 296604000000,
+ 307486800000,
+ 323816400000,
+ 338940000000,
+ 354672000000,
+ 370396800000,
+ 386121600000,
+ 401846400000,
+ 417571200000,
+ 433296000000,
+ 449020800000,
+ 465350400000,
+ 481075200000,
+ 496800000000,
+ 512524800000,
+ 528249600000,
+ 543974400000,
+ 559699200000,
+ 575424000000,
+ 591148800000,
+ 606873600000,
+ 622598400000,
+ 638323200000,
+ 654652800000,
+ 670370400000,
+ 686095200000,
+ 701820000000,
+ 717544800000,
+ 733269600000,
+ 748994400000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 846363600000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -104.4,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 1860000
+ },
+ {
+ "name": "Europe/Budapest",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1633212000000,
+ -1618700400000,
+ -1600466400000,
+ -1581202800000,
+ -906771600000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -778471200000,
+ -762660000000,
+ -749689200000,
+ -733359600000,
+ -717634800000,
+ -701910000000,
+ -686185200000,
+ -670460400000,
+ -654130800000,
+ -639010800000,
+ -621990000000,
+ -605660400000,
+ -492656400000,
+ -481168800000,
+ -461120400000,
+ -449632800000,
+ -428547600000,
+ -418269600000,
+ -397094400000,
+ -386809200000,
+ 323827200000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1710000
+ },
+ {
+ "name": "Europe/Busingen",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -904435200000,
+ -891129600000,
+ -872985600000,
+ -859680000000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Chisinau",
+ "abbrs": [
+ "CMT",
+ "BMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1637114100000,
+ -1213148664000,
+ -1187056800000,
+ -1175479200000,
+ -1159754400000,
+ -1144029600000,
+ -1127700000000,
+ -1111975200000,
+ -1096250400000,
+ -1080525600000,
+ -1064800800000,
+ -1049076000000,
+ -1033351200000,
+ -1017626400000,
+ -1001901600000,
+ -986176800000,
+ -970452000000,
+ -954727200000,
+ -927165600000,
+ -898138800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -800157600000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 641944800000,
+ 654652800000,
+ 670377600000,
+ 686102400000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 846363600000,
+ 859680000000,
+ 877824000000,
+ 891129600000,
+ 909273600000,
+ 922579200000,
+ 941328000000,
+ 954028800000,
+ 972777600000,
+ 985478400000,
+ 1004227200000,
+ 1017532800000,
+ 1035676800000,
+ 1048982400000,
+ 1067126400000,
+ 1080432000000,
+ 1099180800000,
+ 1111881600000,
+ 1130630400000,
+ 1143331200000,
+ 1162080000000,
+ 1174780800000,
+ 1193529600000,
+ 1206835200000,
+ 1224979200000,
+ 1238284800000,
+ 1256428800000,
+ 1269734400000,
+ 1288483200000,
+ 1301184000000,
+ 1319932800000,
+ 1332633600000,
+ 1351382400000,
+ 1364688000000,
+ 1382832000000,
+ 1396137600000,
+ 1414281600000,
+ 1427587200000,
+ 1445731200000,
+ 1459036800000,
+ 1477785600000,
+ 1490486400000,
+ 1509235200000,
+ 1521936000000,
+ 1540684800000,
+ 1553990400000,
+ 1572134400000,
+ 1585440000000,
+ 1603584000000,
+ 1616889600000,
+ 1635638400000,
+ 1648339200000,
+ 1667088000000,
+ 1679788800000,
+ 1698537600000,
+ 1711843200000,
+ 1729987200000,
+ 1743292800000,
+ 1761436800000,
+ 1774742400000,
+ 1792886400000,
+ 1806192000000,
+ 1824940800000,
+ 1837641600000,
+ 1856390400000,
+ 1869091200000,
+ 1887840000000,
+ 1901145600000,
+ 1919289600000,
+ 1932595200000,
+ 1950739200000,
+ 1964044800000,
+ 1982793600000,
+ 1995494400000,
+ 2014243200000,
+ 2026944000000,
+ 2045692800000,
+ 2058393600000,
+ 2077142400000,
+ 2090448000000,
+ 2108592000000,
+ 2121897600000,
+ 2140041600000,
+ null
+ ],
+ "offsets": [
+ -115,
+ -104.4,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 669694
+ },
+ {
+ "name": "Europe/Copenhagen",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1692496800000,
+ -1680490800000,
+ -935110800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -769388400000,
+ -747010800000,
+ -736383600000,
+ -715215600000,
+ -706748400000,
+ -683161200000,
+ -675298800000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1248000
+ },
+ {
+ "name": "Europe/Dublin",
+ "abbrs": [
+ "DMT",
+ "IST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT",
+ "IST",
+ "GMT"
+ ],
+ "untils": [
+ -1691962479000,
+ -1680471279000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -733356000000,
+ -719445600000,
+ -699487200000,
+ -684972000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 25.35,
+ -34.65,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 1160000
+ },
+ {
+ "name": "Europe/Gibraltar",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 30001
+ },
+ {
+ "name": "Europe/Guernsey",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Helsinki",
+ "abbrs": [
+ "HMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1535938789000,
+ -875671200000,
+ -859773600000,
+ 354672000000,
+ 370396800000,
+ 386121600000,
+ 401846400000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -99.8167,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 1208000
+ },
+ {
+ "name": "Europe/Isle_of_Man",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Istanbul",
+ "abbrs": [
+ "IMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+03"
+ ],
+ "untils": [
+ -1869875816000,
+ -1693706400000,
+ -1680490800000,
+ -1570413600000,
+ -1552186800000,
+ -1538359200000,
+ -1522551600000,
+ -1507514400000,
+ -1490583600000,
+ -1440208800000,
+ -1428030000000,
+ -1409709600000,
+ -1396494000000,
+ -931140000000,
+ -922762800000,
+ -917834400000,
+ -892436400000,
+ -875844000000,
+ -857358000000,
+ -781063200000,
+ -764737200000,
+ -744343200000,
+ -733806000000,
+ -716436000000,
+ -701924400000,
+ -684986400000,
+ -670474800000,
+ -654141600000,
+ -639025200000,
+ -621828000000,
+ -606970800000,
+ -590032800000,
+ -575434800000,
+ -235620000000,
+ -228279600000,
+ -177732000000,
+ -165726000000,
+ 10533600000,
+ 23835600000,
+ 41983200000,
+ 55285200000,
+ 74037600000,
+ 87339600000,
+ 107910000000,
+ 121219200000,
+ 133920000000,
+ 152676000000,
+ 165362400000,
+ 183502800000,
+ 202428000000,
+ 215557200000,
+ 228866400000,
+ 245797200000,
+ 260316000000,
+ 277246800000,
+ 308779200000,
+ 323827200000,
+ 340228800000,
+ 354672000000,
+ 371678400000,
+ 386121600000,
+ 403128000000,
+ 428446800000,
+ 433886400000,
+ 482792400000,
+ 496702800000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 686098800000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764118000000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301274000000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396227600000,
+ 1414285200000,
+ 1427590800000,
+ 1446944400000,
+ 1459040400000,
+ 1473195600000,
+ null
+ ],
+ "offsets": [
+ -116.9333,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -180
+ ],
+ "population": 13287000
+ },
+ {
+ "name": "Europe/Jersey",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Kaliningrad",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CET",
+ "CEST",
+ "CET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "+03",
+ "EET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -788922000000,
+ -778730400000,
+ -762663600000,
+ -757389600000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622598400000,
+ 638323200000,
+ 654652800000,
+ 670377600000,
+ 686102400000,
+ 701827200000,
+ 717552000000,
+ 733276800000,
+ 749001600000,
+ 764726400000,
+ 780451200000,
+ 796176000000,
+ 811900800000,
+ 828230400000,
+ 846374400000,
+ 859680000000,
+ 877824000000,
+ 891129600000,
+ 909273600000,
+ 922579200000,
+ 941328000000,
+ 954028800000,
+ 972777600000,
+ 985478400000,
+ 1004227200000,
+ 1017532800000,
+ 1035676800000,
+ 1048982400000,
+ 1067126400000,
+ 1080432000000,
+ 1099180800000,
+ 1111881600000,
+ 1130630400000,
+ 1143331200000,
+ 1162080000000,
+ 1174780800000,
+ 1193529600000,
+ 1206835200000,
+ 1224979200000,
+ 1238284800000,
+ 1256428800000,
+ 1269734400000,
+ 1288483200000,
+ 1301184000000,
+ 1414278000000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 437456
+ },
+ {
+ "name": "Europe/Kiev",
+ "abbrs": [
+ "KMT",
+ "EET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1441159324000,
+ -1247536800000,
+ -892522800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -825382800000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 646783200000,
+ 686102400000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -122.0667,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 3375000
+ },
+ {
+ "name": "Europe/Kirov",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03"
+ ],
+ "untils": [
+ -1593820800000,
+ -1247540400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ null
+ ],
+ "offsets": [
+ -198.8,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180
+ ],
+ "population": 480594
+ },
+ {
+ "name": "Europe/Lisbon",
+ "abbrs": [
+ "LMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1830384000000,
+ -1689555600000,
+ -1677801600000,
+ -1667437200000,
+ -1647738000000,
+ -1635814800000,
+ -1616202000000,
+ -1604365200000,
+ -1584666000000,
+ -1572742800000,
+ -1553043600000,
+ -1541206800000,
+ -1521507600000,
+ -1442451600000,
+ -1426813200000,
+ -1379293200000,
+ -1364778000000,
+ -1348448400000,
+ -1333328400000,
+ -1316394000000,
+ -1301274000000,
+ -1284339600000,
+ -1269824400000,
+ -1221440400000,
+ -1206925200000,
+ -1191200400000,
+ -1175475600000,
+ -1127696400000,
+ -1111971600000,
+ -1096851600000,
+ -1080522000000,
+ -1063587600000,
+ -1049072400000,
+ -1033347600000,
+ -1017622800000,
+ -1002502800000,
+ -986173200000,
+ -969238800000,
+ -950490000000,
+ -942022800000,
+ -922669200000,
+ -906944400000,
+ -891133200000,
+ -877309200000,
+ -873684000000,
+ -864007200000,
+ -857955600000,
+ -845859600000,
+ -842839200000,
+ -831348000000,
+ -825901200000,
+ -814410000000,
+ -810784800000,
+ -799898400000,
+ -794451600000,
+ -782960400000,
+ -779335200000,
+ -768448800000,
+ -763002000000,
+ -749091600000,
+ -733366800000,
+ -717631200000,
+ -701906400000,
+ -686181600000,
+ -670456800000,
+ -654732000000,
+ -639007200000,
+ -591832800000,
+ -575503200000,
+ -559778400000,
+ -544053600000,
+ -528328800000,
+ -512604000000,
+ -496879200000,
+ -481154400000,
+ -465429600000,
+ -449704800000,
+ -433980000000,
+ -417650400000,
+ -401925600000,
+ -386200800000,
+ -370476000000,
+ -354751200000,
+ -339026400000,
+ -323301600000,
+ -307576800000,
+ -291852000000,
+ -276127200000,
+ -260402400000,
+ -244677600000,
+ -228348000000,
+ -212623200000,
+ -196898400000,
+ -181173600000,
+ -165448800000,
+ -149724000000,
+ -133999200000,
+ -118274400000,
+ 212544000000,
+ 228268800000,
+ 243993600000,
+ 260323200000,
+ 276048000000,
+ 291772800000,
+ 307501200000,
+ 323222400000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417578400000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 36.75,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 2666000
+ },
+ {
+ "name": "Europe/Ljubljana",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -905824800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -777942000000,
+ -766623600000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/London",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 10236000
+ },
+ {
+ "name": "Europe/Luxembourg",
+ "abbrs": [
+ "LMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -2069713476000,
+ -1692496800000,
+ -1680483600000,
+ -1662343200000,
+ -1650157200000,
+ -1632006000000,
+ -1618700400000,
+ -1612659600000,
+ -1604278800000,
+ -1585519200000,
+ -1574038800000,
+ -1552258800000,
+ -1539997200000,
+ -1520550000000,
+ -1507510800000,
+ -1490572800000,
+ -1473642000000,
+ -1459119600000,
+ -1444006800000,
+ -1427673600000,
+ -1411866000000,
+ -1396224000000,
+ -1379293200000,
+ -1364774400000,
+ -1348448400000,
+ -1333324800000,
+ -1316394000000,
+ -1301270400000,
+ -1284339600000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1191189600000,
+ -1175464800000,
+ -1160344800000,
+ -1143410400000,
+ -1127685600000,
+ -1111960800000,
+ -1096840800000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1033336800000,
+ -1017612000000,
+ -1002492000000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -935186400000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -797986800000,
+ -781052400000,
+ -766623600000,
+ -745455600000,
+ -733273200000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -24.6,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 543202
+ },
+ {
+ "name": "Europe/Madrid",
+ "abbrs": [
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1631926800000,
+ -1616889600000,
+ -1601168400000,
+ -1585353600000,
+ -1442451600000,
+ -1427673600000,
+ -1379293200000,
+ -1364774400000,
+ -1348448400000,
+ -1333324800000,
+ -1316390400000,
+ -1301270400000,
+ -1284339600000,
+ -1269820800000,
+ -1026954000000,
+ -1017619200000,
+ -1001898000000,
+ -999482400000,
+ -986090400000,
+ -954115200000,
+ -940208400000,
+ -873079200000,
+ -862621200000,
+ -842839200000,
+ -828320400000,
+ -811389600000,
+ -796870800000,
+ -779940000000,
+ -765421200000,
+ -748490400000,
+ -733971600000,
+ -652327200000,
+ -639018000000,
+ 135122400000,
+ 150246000000,
+ 166572000000,
+ 181695600000,
+ 196812000000,
+ 212540400000,
+ 228866400000,
+ 243990000000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 6171000
+ },
+ {
+ "name": "Europe/Malta",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1690765200000,
+ -1680487200000,
+ -1664758800000,
+ -1648951200000,
+ -1635123600000,
+ -1616896800000,
+ -1604278800000,
+ -1585533600000,
+ -1571014800000,
+ -1555293600000,
+ -932432400000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -766717200000,
+ -750898800000,
+ -733359600000,
+ -719456400000,
+ -701917200000,
+ -689209200000,
+ -670460400000,
+ -114051600000,
+ -103168800000,
+ -81997200000,
+ -71715600000,
+ -50547600000,
+ -40266000000,
+ -18493200000,
+ -8211600000,
+ 12956400000,
+ 23238000000,
+ 43801200000,
+ 54687600000,
+ 75855600000,
+ 86742000000,
+ 102380400000,
+ 118105200000,
+ 135730800000,
+ 148518000000,
+ 167187600000,
+ 180489600000,
+ 198637200000,
+ 211939200000,
+ 230086800000,
+ 243388800000,
+ 261536400000,
+ 274838400000,
+ 292986000000,
+ 306288000000,
+ 323312400000,
+ 338342400000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 423282
+ },
+ {
+ "name": "Europe/Mariehamn",
+ "abbrs": [
+ "HMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1535938789000,
+ -875671200000,
+ -859773600000,
+ 354672000000,
+ 370396800000,
+ 386121600000,
+ 401846400000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -99.8167,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Minsk",
+ "abbrs": [
+ "MMT",
+ "EET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "+03"
+ ],
+ "untils": [
+ -1441158600000,
+ -1247536800000,
+ -899780400000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -804650400000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 670374000000,
+ 686102400000,
+ 701827200000,
+ 717552000000,
+ 733276800000,
+ 749001600000,
+ 764726400000,
+ 780451200000,
+ 796176000000,
+ 811900800000,
+ 828230400000,
+ 846374400000,
+ 859680000000,
+ 877824000000,
+ 891129600000,
+ 909273600000,
+ 922579200000,
+ 941328000000,
+ 954028800000,
+ 972777600000,
+ 985478400000,
+ 1004227200000,
+ 1017532800000,
+ 1035676800000,
+ 1048982400000,
+ 1067126400000,
+ 1080432000000,
+ 1099180800000,
+ 1111881600000,
+ 1130630400000,
+ 1143331200000,
+ 1162080000000,
+ 1174780800000,
+ 1193529600000,
+ 1206835200000,
+ 1224979200000,
+ 1238284800000,
+ 1256428800000,
+ 1269734400000,
+ 1288483200000,
+ 1301184000000,
+ null
+ ],
+ "offsets": [
+ -110,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180
+ ],
+ "population": 1910000
+ },
+ {
+ "name": "Europe/Monaco",
+ "abbrs": [
+ "PMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WEMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1855958961000,
+ -1689814800000,
+ -1680397200000,
+ -1665363600000,
+ -1648342800000,
+ -1635123600000,
+ -1616893200000,
+ -1604278800000,
+ -1585443600000,
+ -1574038800000,
+ -1552266000000,
+ -1539997200000,
+ -1520557200000,
+ -1507510800000,
+ -1490576400000,
+ -1470618000000,
+ -1459126800000,
+ -1444006800000,
+ -1427677200000,
+ -1411952400000,
+ -1396227600000,
+ -1379293200000,
+ -1364778000000,
+ -1348448400000,
+ -1333328400000,
+ -1316394000000,
+ -1301274000000,
+ -1284339600000,
+ -1269824400000,
+ -1253494800000,
+ -1238374800000,
+ -1221440400000,
+ -1206925200000,
+ -1191200400000,
+ -1175475600000,
+ -1160355600000,
+ -1143421200000,
+ -1127696400000,
+ -1111971600000,
+ -1096851600000,
+ -1080522000000,
+ -1063587600000,
+ -1049072400000,
+ -1033347600000,
+ -1017622800000,
+ -1002502800000,
+ -986173200000,
+ -969238800000,
+ -950490000000,
+ -942012000000,
+ -904438800000,
+ -891136800000,
+ -877827600000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796266000000,
+ -781052400000,
+ -766623600000,
+ 196819200000,
+ 212540400000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -9.35,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 37831
+ },
+ {
+ "name": "Europe/Moscow",
+ "abbrs": [
+ "MMT",
+ "MMT",
+ "MST",
+ "MMT",
+ "MDST",
+ "MST",
+ "MDST",
+ "MSD",
+ "MSK",
+ "MSD",
+ "+05",
+ "MSD",
+ "MSK",
+ "EET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSK",
+ "MSK"
+ ],
+ "untils": [
+ -1688265017000,
+ -1656819079000,
+ -1641353479000,
+ -1627965079000,
+ -1618716679000,
+ -1596429079000,
+ -1593820800000,
+ -1589860800000,
+ -1542427200000,
+ -1539493200000,
+ -1525323600000,
+ -1522728000000,
+ -1491188400000,
+ -1247536800000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 686102400000,
+ 695779200000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ null
+ ],
+ "offsets": [
+ -150.2833,
+ -151.3167,
+ -211.3167,
+ -151.3167,
+ -271.3167,
+ -211.3167,
+ -271.3167,
+ -240,
+ -180,
+ -240,
+ -300,
+ -240,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180
+ ],
+ "population": 16170000
+ },
+ {
+ "name": "Europe/Nicosia",
+ "abbrs": [
+ "LMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1518920008000,
+ 166572000000,
+ 182293200000,
+ 200959200000,
+ 213829200000,
+ 228866400000,
+ 243982800000,
+ 260316000000,
+ 276123600000,
+ 291765600000,
+ 307486800000,
+ 323820000000,
+ 338936400000,
+ 354664800000,
+ 370386000000,
+ 386114400000,
+ 401835600000,
+ 417564000000,
+ 433285200000,
+ 449013600000,
+ 465339600000,
+ 481068000000,
+ 496789200000,
+ 512517600000,
+ 528238800000,
+ 543967200000,
+ 559688400000,
+ 575416800000,
+ 591138000000,
+ 606866400000,
+ 622587600000,
+ 638316000000,
+ 654642000000,
+ 670370400000,
+ 686091600000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 843944400000,
+ 859672800000,
+ 875394000000,
+ 891122400000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -133.4667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Oslo",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1691884800000,
+ -1680573600000,
+ -927511200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -765327600000,
+ -340844400000,
+ -324514800000,
+ -308790000000,
+ -293065200000,
+ -277340400000,
+ -261615600000,
+ -245890800000,
+ -230166000000,
+ -214441200000,
+ -198716400000,
+ -182991600000,
+ -166662000000,
+ -147913200000,
+ -135212400000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 618683
+ },
+ {
+ "name": "Europe/Paris",
+ "abbrs": [
+ "PMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "WEMT",
+ "WEST",
+ "WEMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1855958901000,
+ -1689814800000,
+ -1680397200000,
+ -1665363600000,
+ -1648342800000,
+ -1635123600000,
+ -1616893200000,
+ -1604278800000,
+ -1585443600000,
+ -1574038800000,
+ -1552266000000,
+ -1539997200000,
+ -1520557200000,
+ -1507510800000,
+ -1490576400000,
+ -1470618000000,
+ -1459126800000,
+ -1444006800000,
+ -1427677200000,
+ -1411952400000,
+ -1396227600000,
+ -1379293200000,
+ -1364778000000,
+ -1348448400000,
+ -1333328400000,
+ -1316394000000,
+ -1301274000000,
+ -1284339600000,
+ -1269824400000,
+ -1253494800000,
+ -1238374800000,
+ -1221440400000,
+ -1206925200000,
+ -1191200400000,
+ -1175475600000,
+ -1160355600000,
+ -1143421200000,
+ -1127696400000,
+ -1111971600000,
+ -1096851600000,
+ -1080522000000,
+ -1063587600000,
+ -1049072400000,
+ -1033347600000,
+ -1017622800000,
+ -1002502800000,
+ -986173200000,
+ -969238800000,
+ -950490000000,
+ -942012000000,
+ -932436000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -800071200000,
+ -796266000000,
+ -781052400000,
+ -766623600000,
+ 196819200000,
+ 212540400000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -9.35,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 10858000
+ },
+ {
+ "name": "Europe/Podgorica",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -905824800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -777942000000,
+ -766623600000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Prague",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "GMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -765327600000,
+ -746578800000,
+ -733359600000,
+ -728517600000,
+ -721260000000,
+ -716425200000,
+ -701910000000,
+ -684975600000,
+ -670460400000,
+ -654217200000,
+ -639010800000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1310000
+ },
+ {
+ "name": "Europe/Riga",
+ "abbrs": [
+ "RMT",
+ "LST",
+ "RMT",
+ "LST",
+ "RMT",
+ "EET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1632008194000,
+ -1618702594000,
+ -1601681794000,
+ -1597275394000,
+ -1377308194000,
+ -928029600000,
+ -899521200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -795834000000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622598400000,
+ 638323200000,
+ 654652800000,
+ 670377600000,
+ 686102400000,
+ 701827200000,
+ 717552000000,
+ 733276800000,
+ 749001600000,
+ 764726400000,
+ 780451200000,
+ 796176000000,
+ 811900800000,
+ 828230400000,
+ 843955200000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -96.5667,
+ -156.5667,
+ -96.5667,
+ -156.5667,
+ -96.5667,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 643615
+ },
+ {
+ "name": "Europe/Rome",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1690765200000,
+ -1680487200000,
+ -1664758800000,
+ -1648951200000,
+ -1635123600000,
+ -1616896800000,
+ -1604278800000,
+ -1585533600000,
+ -1571014800000,
+ -1555293600000,
+ -932432400000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -798073200000,
+ -781052400000,
+ -766717200000,
+ -750898800000,
+ -733359600000,
+ -719456400000,
+ -701917200000,
+ -689209200000,
+ -670460400000,
+ -114051600000,
+ -103168800000,
+ -81997200000,
+ -71715600000,
+ -50547600000,
+ -40266000000,
+ -18493200000,
+ -8211600000,
+ 12956400000,
+ 23238000000,
+ 43801200000,
+ 54687600000,
+ 75855600000,
+ 86742000000,
+ 107910000000,
+ 118191600000,
+ 138754800000,
+ 149641200000,
+ 170809200000,
+ 181090800000,
+ 202258800000,
+ 212540400000,
+ 233103600000,
+ 243990000000,
+ 265158000000,
+ 276044400000,
+ 296607600000,
+ 307494000000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 3906000
+ },
+ {
+ "name": "Europe/Samara",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04"
+ ],
+ "untils": [
+ -1593820800000,
+ -1247540400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 687916800000,
+ 701820000000,
+ 717544800000,
+ 733269600000,
+ 748994400000,
+ 764719200000,
+ 780444000000,
+ 796168800000,
+ 811893600000,
+ 828223200000,
+ 846367200000,
+ 859672800000,
+ 877816800000,
+ 891122400000,
+ 909266400000,
+ 922572000000,
+ 941320800000,
+ 954021600000,
+ 972770400000,
+ 985471200000,
+ 1004220000000,
+ 1017525600000,
+ 1035669600000,
+ 1048975200000,
+ 1067119200000,
+ 1080424800000,
+ 1099173600000,
+ 1111874400000,
+ 1130623200000,
+ 1143324000000,
+ 1162072800000,
+ 1174773600000,
+ 1193522400000,
+ 1206828000000,
+ 1224972000000,
+ 1238277600000,
+ 1256421600000,
+ 1288479600000,
+ 1301180400000,
+ null
+ ],
+ "offsets": [
+ -200.3333,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240
+ ],
+ "population": 1162000
+ },
+ {
+ "name": "Europe/San_Marino",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1690765200000,
+ -1680487200000,
+ -1664758800000,
+ -1648951200000,
+ -1635123600000,
+ -1616896800000,
+ -1604278800000,
+ -1585533600000,
+ -1571014800000,
+ -1555293600000,
+ -932432400000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -798073200000,
+ -781052400000,
+ -766717200000,
+ -750898800000,
+ -733359600000,
+ -719456400000,
+ -701917200000,
+ -689209200000,
+ -670460400000,
+ -114051600000,
+ -103168800000,
+ -81997200000,
+ -71715600000,
+ -50547600000,
+ -40266000000,
+ -18493200000,
+ -8211600000,
+ 12956400000,
+ 23238000000,
+ 43801200000,
+ 54687600000,
+ 75855600000,
+ 86742000000,
+ 107910000000,
+ 118191600000,
+ 138754800000,
+ 149641200000,
+ 170809200000,
+ 181090800000,
+ 202258800000,
+ 212540400000,
+ 233103600000,
+ 243990000000,
+ 265158000000,
+ 276044400000,
+ 296607600000,
+ 307494000000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Sarajevo",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -905824800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -777942000000,
+ -766623600000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Saratov",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04"
+ ],
+ "untils": [
+ -1593820800000,
+ -1247540400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ 1480806000000,
+ null
+ ],
+ "offsets": [
+ -184.3,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Simferopol",
+ "abbrs": [
+ "SMT",
+ "EET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "MSK",
+ "MSK"
+ ],
+ "untils": [
+ -1441160160000,
+ -1247536800000,
+ -888894000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -811648800000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 646786800000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 767739600000,
+ 780436800000,
+ 796165200000,
+ 811886400000,
+ 828219600000,
+ 846374400000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396137600000,
+ 1414274400000,
+ null
+ ],
+ "offsets": [
+ -136,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -240,
+ -180
+ ],
+ "population": 331936
+ },
+ {
+ "name": "Europe/Skopje",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -905824800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -777942000000,
+ -766623600000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Sofia",
+ "abbrs": [
+ "EET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781048800000,
+ 291762000000,
+ 307576800000,
+ 323816400000,
+ 339026400000,
+ 355266000000,
+ 370393200000,
+ 386715600000,
+ 401846400000,
+ 417571200000,
+ 433296000000,
+ 449020800000,
+ 465350400000,
+ 481075200000,
+ 496800000000,
+ 512524800000,
+ 528249600000,
+ 543974400000,
+ 559699200000,
+ 575424000000,
+ 591148800000,
+ 606873600000,
+ 622598400000,
+ 638323200000,
+ 654652800000,
+ 670370400000,
+ 686091600000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 846363600000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 1195000
+ },
+ {
+ "name": "Europe/Stockholm",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1692496800000,
+ -1680483600000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1484000
+ },
+ {
+ "name": "Europe/Tallinn",
+ "abbrs": [
+ "TMT",
+ "CET",
+ "CEST",
+ "CET",
+ "TMT",
+ "EET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1638322740000,
+ -1632006000000,
+ -1618700400000,
+ -1593824400000,
+ -1535938740000,
+ -927943200000,
+ -892954800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -797652000000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622598400000,
+ 638323200000,
+ 654652800000,
+ 670377600000,
+ 686102400000,
+ 701827200000,
+ 717552000000,
+ 733276800000,
+ 749001600000,
+ 764726400000,
+ 780451200000,
+ 796176000000,
+ 811900800000,
+ 828230400000,
+ 846374400000,
+ 859680000000,
+ 877824000000,
+ 891129600000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -99,
+ -60,
+ -120,
+ -60,
+ -99,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 407947
+ },
+ {
+ "name": "Europe/Tirane",
+ "abbrs": [
+ "LMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1767230360000,
+ -932346000000,
+ -857257200000,
+ -844556400000,
+ -843519600000,
+ 136854000000,
+ 149896800000,
+ 168130800000,
+ 181432800000,
+ 199839600000,
+ 213141600000,
+ 231894000000,
+ 244591200000,
+ 263257200000,
+ 276040800000,
+ 294706800000,
+ 307490400000,
+ 326156400000,
+ 339458400000,
+ 357087600000,
+ 370389600000,
+ 389142000000,
+ 402444000000,
+ 419468400000,
+ 433807200000,
+ 449622000000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -79.3333,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 418495
+ },
+ {
+ "name": "Europe/Tiraspol",
+ "abbrs": [
+ "CMT",
+ "BMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1637114100000,
+ -1213148664000,
+ -1187056800000,
+ -1175479200000,
+ -1159754400000,
+ -1144029600000,
+ -1127700000000,
+ -1111975200000,
+ -1096250400000,
+ -1080525600000,
+ -1064800800000,
+ -1049076000000,
+ -1033351200000,
+ -1017626400000,
+ -1001901600000,
+ -986176800000,
+ -970452000000,
+ -954727200000,
+ -927165600000,
+ -898138800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -800157600000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 641944800000,
+ 654652800000,
+ 670377600000,
+ 686102400000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796168800000,
+ 811890000000,
+ 828223200000,
+ 846363600000,
+ 859680000000,
+ 877824000000,
+ 891129600000,
+ 909273600000,
+ 922579200000,
+ 941328000000,
+ 954028800000,
+ 972777600000,
+ 985478400000,
+ 1004227200000,
+ 1017532800000,
+ 1035676800000,
+ 1048982400000,
+ 1067126400000,
+ 1080432000000,
+ 1099180800000,
+ 1111881600000,
+ 1130630400000,
+ 1143331200000,
+ 1162080000000,
+ 1174780800000,
+ 1193529600000,
+ 1206835200000,
+ 1224979200000,
+ 1238284800000,
+ 1256428800000,
+ 1269734400000,
+ 1288483200000,
+ 1301184000000,
+ 1319932800000,
+ 1332633600000,
+ 1351382400000,
+ 1364688000000,
+ 1382832000000,
+ 1396137600000,
+ 1414281600000,
+ 1427587200000,
+ 1445731200000,
+ 1459036800000,
+ 1477785600000,
+ 1490486400000,
+ 1509235200000,
+ 1521936000000,
+ 1540684800000,
+ 1553990400000,
+ 1572134400000,
+ 1585440000000,
+ 1603584000000,
+ 1616889600000,
+ 1635638400000,
+ 1648339200000,
+ 1667088000000,
+ 1679788800000,
+ 1698537600000,
+ 1711843200000,
+ 1729987200000,
+ 1743292800000,
+ 1761436800000,
+ 1774742400000,
+ 1792886400000,
+ 1806192000000,
+ 1824940800000,
+ 1837641600000,
+ 1856390400000,
+ 1869091200000,
+ 1887840000000,
+ 1901145600000,
+ 1919289600000,
+ 1932595200000,
+ 1950739200000,
+ 1964044800000,
+ 1982793600000,
+ 1995494400000,
+ 2014243200000,
+ 2026944000000,
+ 2045692800000,
+ 2058393600000,
+ 2077142400000,
+ 2090448000000,
+ 2108592000000,
+ 2121897600000,
+ 2140041600000,
+ null
+ ],
+ "offsets": [
+ -115,
+ -104.4,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Ulyanovsk",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+02",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04"
+ ],
+ "untils": [
+ -1593820800000,
+ -1247540400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 575416800000,
+ 591141600000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 686102400000,
+ 695779200000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ 1459033200000,
+ null
+ ],
+ "offsets": [
+ -193.6,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Uzhgorod",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "CET",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -794714400000,
+ -773456400000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 646786800000,
+ 670384800000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -60,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 114789
+ },
+ {
+ "name": "Europe/Vaduz",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -904435200000,
+ -891129600000,
+ -872985600000,
+ -859680000000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Vatican",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1690765200000,
+ -1680487200000,
+ -1664758800000,
+ -1648951200000,
+ -1635123600000,
+ -1616896800000,
+ -1604278800000,
+ -1585533600000,
+ -1571014800000,
+ -1555293600000,
+ -932432400000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -798073200000,
+ -781052400000,
+ -766717200000,
+ -750898800000,
+ -733359600000,
+ -719456400000,
+ -701917200000,
+ -689209200000,
+ -670460400000,
+ -114051600000,
+ -103168800000,
+ -81997200000,
+ -71715600000,
+ -50547600000,
+ -40266000000,
+ -18493200000,
+ -8211600000,
+ 12956400000,
+ 23238000000,
+ 43801200000,
+ 54687600000,
+ 75855600000,
+ 86742000000,
+ 107910000000,
+ 118191600000,
+ 138754800000,
+ 149641200000,
+ 170809200000,
+ 181090800000,
+ 202258800000,
+ 212540400000,
+ 233103600000,
+ 243990000000,
+ 265158000000,
+ 276044400000,
+ 296607600000,
+ 307494000000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Vienna",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -1569711600000,
+ -1555801200000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -780188400000,
+ -748479600000,
+ -733359600000,
+ -717634800000,
+ -701910000000,
+ -684975600000,
+ -670460400000,
+ 323823600000,
+ 338940000000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1763000
+ },
+ {
+ "name": "Europe/Vilnius",
+ "abbrs": [
+ "WMT",
+ "KMT",
+ "CET",
+ "EET",
+ "CET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "CEST",
+ "CET",
+ "CEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1672536240000,
+ -1585100136000,
+ -1561251600000,
+ -1553565600000,
+ -928198800000,
+ -900126000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -802144800000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622598400000,
+ 638323200000,
+ 654652800000,
+ 670377600000,
+ 686102400000,
+ 701827200000,
+ 717552000000,
+ 733276800000,
+ 749001600000,
+ 764726400000,
+ 780451200000,
+ 796176000000,
+ 811900800000,
+ 828230400000,
+ 846374400000,
+ 859680000000,
+ 877824000000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -84,
+ -95.6,
+ -60,
+ -120,
+ -60,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -120,
+ -60,
+ -120,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 535216
+ },
+ {
+ "name": "Europe/Volgograd",
+ "abbrs": [
+ "LMT",
+ "+03",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03"
+ ],
+ "untils": [
+ -1577761060000,
+ -1247540400000,
+ 354916800000,
+ 370724400000,
+ 386452800000,
+ 402260400000,
+ 417988800000,
+ 433796400000,
+ 449611200000,
+ 465343200000,
+ 481068000000,
+ 496792800000,
+ 512517600000,
+ 528242400000,
+ 543967200000,
+ 559692000000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ null
+ ],
+ "offsets": [
+ -177.6667,
+ -180,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180
+ ],
+ "population": 1019000
+ },
+ {
+ "name": "Europe/Warsaw",
+ "abbrs": [
+ "WMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "EET",
+ "EEST",
+ "EET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1717032240000,
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -1600473600000,
+ -1587168000000,
+ -1501725600000,
+ -931734000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796608000000,
+ -778726800000,
+ -762660000000,
+ -748486800000,
+ -733273200000,
+ -715215600000,
+ -701910000000,
+ -684975600000,
+ -670460400000,
+ -654130800000,
+ -639010800000,
+ -397094400000,
+ -386812800000,
+ -371088000000,
+ -355363200000,
+ -334195200000,
+ -323308800000,
+ -307584000000,
+ -291859200000,
+ -271296000000,
+ -260409600000,
+ -239846400000,
+ -228960000000,
+ -208396800000,
+ -197510400000,
+ -176342400000,
+ -166060800000,
+ 228873600000,
+ 243993600000,
+ 260323200000,
+ 276048000000,
+ 291772800000,
+ 307497600000,
+ 323827200000,
+ 338947200000,
+ 354672000000,
+ 370396800000,
+ 386121600000,
+ 401846400000,
+ 417571200000,
+ 433296000000,
+ 449020800000,
+ 465350400000,
+ 481075200000,
+ 496800000000,
+ 512524800000,
+ 528249600000,
+ 543974400000,
+ 559699200000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -84,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 1720000
+ },
+ {
+ "name": "Europe/Zagreb",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -905824800000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -777942000000,
+ -766623600000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Europe/Zaporozhye",
+ "abbrs": [
+ "+0220",
+ "EET",
+ "MSK",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET"
+ ],
+ "untils": [
+ -1441160400000,
+ -1247536800000,
+ -894769200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -826419600000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 686091600000,
+ 701820000000,
+ 717541200000,
+ 733269600000,
+ 748990800000,
+ 764719200000,
+ 780440400000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -140,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 766736
+ },
+ {
+ "name": "Europe/Zurich",
+ "abbrs": [
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -904435200000,
+ -891129600000,
+ -872985600000,
+ -859680000000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 378884
+ },
+ {
+ "name": "GB-Eire",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "GB",
+ "abbrs": [
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "BDST",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT",
+ "BST",
+ "GMT"
+ ],
+ "untils": [
+ -1691964000000,
+ -1680472800000,
+ -1664143200000,
+ -1650146400000,
+ -1633903200000,
+ -1617487200000,
+ -1601848800000,
+ -1586037600000,
+ -1570399200000,
+ -1552168800000,
+ -1538344800000,
+ -1522533600000,
+ -1507500000000,
+ -1490565600000,
+ -1473631200000,
+ -1460930400000,
+ -1442786400000,
+ -1428876000000,
+ -1410732000000,
+ -1396216800000,
+ -1379282400000,
+ -1364767200000,
+ -1348437600000,
+ -1333317600000,
+ -1315778400000,
+ -1301263200000,
+ -1284328800000,
+ -1269813600000,
+ -1253484000000,
+ -1238364000000,
+ -1221429600000,
+ -1206914400000,
+ -1189980000000,
+ -1175464800000,
+ -1159135200000,
+ -1143410400000,
+ -1126476000000,
+ -1111960800000,
+ -1095631200000,
+ -1080511200000,
+ -1063576800000,
+ -1049061600000,
+ -1032127200000,
+ -1017612000000,
+ -1001282400000,
+ -986162400000,
+ -969228000000,
+ -950479200000,
+ -942012000000,
+ -904518000000,
+ -896050800000,
+ -875487600000,
+ -864601200000,
+ -844038000000,
+ -832546800000,
+ -812588400000,
+ -798073200000,
+ -781052400000,
+ -772066800000,
+ -764805600000,
+ -748476000000,
+ -733356000000,
+ -719445600000,
+ -717030000000,
+ -706748400000,
+ -699487200000,
+ -687996000000,
+ -668037600000,
+ -654732000000,
+ -636588000000,
+ -622072800000,
+ -605743200000,
+ -590623200000,
+ -574293600000,
+ -558568800000,
+ -542239200000,
+ -527119200000,
+ -512604000000,
+ -496274400000,
+ -481154400000,
+ -464220000000,
+ -449704800000,
+ -432165600000,
+ -417650400000,
+ -401320800000,
+ -386200800000,
+ -369266400000,
+ -354751200000,
+ -337816800000,
+ -323301600000,
+ -306972000000,
+ -291852000000,
+ -276732000000,
+ -257983200000,
+ -245282400000,
+ -226533600000,
+ -213228000000,
+ -195084000000,
+ -182383200000,
+ -163634400000,
+ -150933600000,
+ -132184800000,
+ -119484000000,
+ -100735200000,
+ -88034400000,
+ -68680800000,
+ -59004000000,
+ 57722400000,
+ 69818400000,
+ 89172000000,
+ 101268000000,
+ 120621600000,
+ 132717600000,
+ 152071200000,
+ 164167200000,
+ 183520800000,
+ 196221600000,
+ 214970400000,
+ 227671200000,
+ 246420000000,
+ 259120800000,
+ 278474400000,
+ 290570400000,
+ 309924000000,
+ 322020000000,
+ 341373600000,
+ 354675600000,
+ 372819600000,
+ 386125200000,
+ 404269200000,
+ 417574800000,
+ 435718800000,
+ 449024400000,
+ 467773200000,
+ 481078800000,
+ 499222800000,
+ 512528400000,
+ 530672400000,
+ 543978000000,
+ 562122000000,
+ 575427600000,
+ 593571600000,
+ 606877200000,
+ 625626000000,
+ 638326800000,
+ 657075600000,
+ 670381200000,
+ 688525200000,
+ 701830800000,
+ 719974800000,
+ 733280400000,
+ 751424400000,
+ 764730000000,
+ 782874000000,
+ 796179600000,
+ 814323600000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "GMT-0",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "GMT",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "GMT+0",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "GMT0",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Greenwich",
+ "abbrs": [
+ "GMT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Hongkong",
+ "abbrs": [
+ "LMT",
+ "HKT",
+ "HKST",
+ "HKT",
+ "JST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT",
+ "HKST",
+ "HKT"
+ ],
+ "untils": [
+ -2056693002000,
+ -907389000000,
+ -891667800000,
+ -884246400000,
+ -766746000000,
+ -747981000000,
+ -728544600000,
+ -717049800000,
+ -694503000000,
+ -683785800000,
+ -668064600000,
+ -654755400000,
+ -636615000000,
+ -623305800000,
+ -605165400000,
+ -591856200000,
+ -573715800000,
+ -559801800000,
+ -542352600000,
+ -528352200000,
+ -510211800000,
+ -498112200000,
+ -478762200000,
+ -466662600000,
+ -446707800000,
+ -435213000000,
+ -415258200000,
+ -403158600000,
+ -383808600000,
+ -371709000000,
+ -352359000000,
+ -340259400000,
+ -320909400000,
+ -308809800000,
+ -288855000000,
+ -277360200000,
+ -257405400000,
+ -245910600000,
+ -225955800000,
+ -213856200000,
+ -194506200000,
+ -182406600000,
+ -163056600000,
+ -148537800000,
+ -132816600000,
+ -117088200000,
+ -101367000000,
+ -85638600000,
+ -69312600000,
+ -53584200000,
+ -37863000000,
+ -22134600000,
+ -6413400000,
+ 9315000000,
+ 25036200000,
+ 40764600000,
+ 56485800000,
+ 72214200000,
+ 88540200000,
+ 104268600000,
+ 119989800000,
+ 126041400000,
+ 151439400000,
+ 167167800000,
+ 182889000000,
+ 198617400000,
+ 214338600000,
+ 295385400000,
+ 309292200000,
+ null
+ ],
+ "offsets": [
+ -456.7,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "HST",
+ "abbrs": [
+ "HST"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Iceland",
+ "abbrs": [
+ "LMT",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "+00",
+ "-01",
+ "GMT"
+ ],
+ "untils": [
+ -1956609120000,
+ -1668211200000,
+ -1647212400000,
+ -1636675200000,
+ -1613430000000,
+ -1605139200000,
+ -1581894000000,
+ -1539561600000,
+ -1531350000000,
+ -968025600000,
+ -952293600000,
+ -942008400000,
+ -920239200000,
+ -909957600000,
+ -888789600000,
+ -877903200000,
+ -857944800000,
+ -846453600000,
+ -826495200000,
+ -815004000000,
+ -795045600000,
+ -783554400000,
+ -762991200000,
+ -752104800000,
+ -731541600000,
+ -717631200000,
+ -700092000000,
+ -686181600000,
+ -668642400000,
+ -654732000000,
+ -636588000000,
+ -623282400000,
+ -605743200000,
+ -591832800000,
+ -573688800000,
+ -559778400000,
+ -542239200000,
+ -528328800000,
+ -510789600000,
+ -496879200000,
+ -479340000000,
+ -465429600000,
+ -447890400000,
+ -433980000000,
+ -415836000000,
+ -401925600000,
+ -384386400000,
+ -370476000000,
+ -352936800000,
+ -339026400000,
+ -321487200000,
+ -307576800000,
+ -290037600000,
+ -276127200000,
+ -258588000000,
+ -244677600000,
+ -226533600000,
+ -212623200000,
+ -195084000000,
+ -181173600000,
+ -163634400000,
+ -149724000000,
+ -132184800000,
+ -118274400000,
+ -100735200000,
+ -86824800000,
+ -68680800000,
+ -54770400000,
+ null
+ ],
+ "offsets": [
+ 88,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0,
+ 60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Indian/Antananarivo",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Indian/Chagos",
+ "abbrs": [
+ "LMT",
+ "+05",
+ "+06"
+ ],
+ "untils": [
+ -1988167780000,
+ 820436400000,
+ null
+ ],
+ "offsets": [
+ -289.6667,
+ -300,
+ -360
+ ],
+ "population": 3000
+ },
+ {
+ "name": "Indian/Christmas",
+ "abbrs": [
+ "+07"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -420
+ ],
+ "population": 2072
+ },
+ {
+ "name": "Indian/Cocos",
+ "abbrs": [
+ "+0630"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -390
+ ],
+ "population": 596
+ },
+ {
+ "name": "Indian/Comoro",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Indian/Kerguelen",
+ "abbrs": [
+ "-00",
+ "+05"
+ ],
+ "untils": [
+ -631152000000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -300
+ ],
+ "population": 130
+ },
+ {
+ "name": "Indian/Mahe",
+ "abbrs": [
+ "LMT",
+ "+04"
+ ],
+ "untils": [
+ -2006653308000,
+ null
+ ],
+ "offsets": [
+ -221.8,
+ -240
+ ],
+ "population": 78539
+ },
+ {
+ "name": "Indian/Maldives",
+ "abbrs": [
+ "MMT",
+ "+05"
+ ],
+ "untils": [
+ -315636840000,
+ null
+ ],
+ "offsets": [
+ -294,
+ -300
+ ],
+ "population": 345023
+ },
+ {
+ "name": "Indian/Mauritius",
+ "abbrs": [
+ "LMT",
+ "+04",
+ "+05",
+ "+04",
+ "+05",
+ "+04"
+ ],
+ "untils": [
+ -1988164200000,
+ 403041600000,
+ 417034800000,
+ 1224972000000,
+ 1238274000000,
+ null
+ ],
+ "offsets": [
+ -230,
+ -240,
+ -300,
+ -240,
+ -300,
+ -240
+ ],
+ "population": 148001
+ },
+ {
+ "name": "Indian/Mayotte",
+ "abbrs": [
+ "LMT",
+ "EAT",
+ "+0230",
+ "+0245",
+ "EAT"
+ ],
+ "untils": [
+ -1309746436000,
+ -1262314800000,
+ -946780200000,
+ -315629100000,
+ null
+ ],
+ "offsets": [
+ -147.2667,
+ -180,
+ -150,
+ -165,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "Indian/Reunion",
+ "abbrs": [
+ "LMT",
+ "+04"
+ ],
+ "untils": [
+ -1848886912000,
+ null
+ ],
+ "offsets": [
+ -221.8667,
+ -240
+ ],
+ "population": 843617
+ },
+ {
+ "name": "Iran",
+ "abbrs": [
+ "LMT",
+ "TMT",
+ "+0330",
+ "+04",
+ "+05",
+ "+04",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330",
+ "+0430",
+ "+0330"
+ ],
+ "untils": [
+ -1704165944000,
+ -757394744000,
+ 247177800000,
+ 259272000000,
+ 277758000000,
+ 283982400000,
+ 290809800000,
+ 306531000000,
+ 322432200000,
+ 338499000000,
+ 673216200000,
+ 685481400000,
+ 701209800000,
+ 717103800000,
+ 732745800000,
+ 748639800000,
+ 764281800000,
+ 780175800000,
+ 795817800000,
+ 811711800000,
+ 827353800000,
+ 843247800000,
+ 858976200000,
+ 874870200000,
+ 890512200000,
+ 906406200000,
+ 922048200000,
+ 937942200000,
+ 953584200000,
+ 969478200000,
+ 985206600000,
+ 1001100600000,
+ 1016742600000,
+ 1032636600000,
+ 1048278600000,
+ 1064172600000,
+ 1079814600000,
+ 1095708600000,
+ 1111437000000,
+ 1127331000000,
+ 1206045000000,
+ 1221939000000,
+ 1237667400000,
+ 1253561400000,
+ 1269203400000,
+ 1285097400000,
+ 1300739400000,
+ 1316633400000,
+ 1332275400000,
+ 1348169400000,
+ 1363897800000,
+ 1379791800000,
+ 1395433800000,
+ 1411327800000,
+ 1426969800000,
+ 1442863800000,
+ 1458505800000,
+ 1474399800000,
+ 1490128200000,
+ 1506022200000,
+ 1521664200000,
+ 1537558200000,
+ 1553200200000,
+ 1569094200000,
+ 1584736200000,
+ 1600630200000,
+ 1616358600000,
+ 1632252600000,
+ 1647894600000,
+ 1663788600000,
+ 1679430600000,
+ 1695324600000,
+ 1710966600000,
+ 1726860600000,
+ 1742589000000,
+ 1758483000000,
+ 1774125000000,
+ 1790019000000,
+ 1805661000000,
+ 1821555000000,
+ 1837197000000,
+ 1853091000000,
+ 1868733000000,
+ 1884627000000,
+ 1900355400000,
+ 1916249400000,
+ 1931891400000,
+ 1947785400000,
+ 1963427400000,
+ 1979321400000,
+ 1994963400000,
+ 2010857400000,
+ 2026585800000,
+ 2042479800000,
+ 2058121800000,
+ 2074015800000,
+ 2089657800000,
+ 2105551800000,
+ 2121193800000,
+ 2137087800000,
+ null
+ ],
+ "offsets": [
+ -205.7333,
+ -205.7333,
+ -210,
+ -240,
+ -300,
+ -240,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210,
+ -270,
+ -210
+ ],
+ "population": 0
+ },
+ {
+ "name": "Israel",
+ "abbrs": [
+ "JMT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDDT",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST",
+ "IDT",
+ "IST"
+ ],
+ "untils": [
+ -1641003640000,
+ -933645600000,
+ -857358000000,
+ -844300800000,
+ -825822000000,
+ -812685600000,
+ -794199600000,
+ -779853600000,
+ -762656400000,
+ -748310400000,
+ -731127600000,
+ -681962400000,
+ -673243200000,
+ -667962000000,
+ -652327200000,
+ -636426000000,
+ -622087200000,
+ -608947200000,
+ -591847200000,
+ -572486400000,
+ -558576000000,
+ -542851200000,
+ -527731200000,
+ -514425600000,
+ -490845600000,
+ -482986800000,
+ -459475200000,
+ -451537200000,
+ -428551200000,
+ -418262400000,
+ -400032000000,
+ -387428400000,
+ 142380000000,
+ 150843600000,
+ 167176800000,
+ 178664400000,
+ 482277600000,
+ 495579600000,
+ 516751200000,
+ 526424400000,
+ 545436000000,
+ 558478800000,
+ 576626400000,
+ 589323600000,
+ 609890400000,
+ 620773200000,
+ 638316000000,
+ 651618000000,
+ 669765600000,
+ 683672400000,
+ 701820000000,
+ 715726800000,
+ 733701600000,
+ 747176400000,
+ 765151200000,
+ 778021200000,
+ 796600800000,
+ 810075600000,
+ 826840800000,
+ 842821200000,
+ 858895200000,
+ 874184400000,
+ 890344800000,
+ 905029200000,
+ 923011200000,
+ 936313200000,
+ 955670400000,
+ 970783200000,
+ 986770800000,
+ 1001282400000,
+ 1017356400000,
+ 1033941600000,
+ 1048806000000,
+ 1065132000000,
+ 1081292400000,
+ 1095804000000,
+ 1112313600000,
+ 1128812400000,
+ 1143763200000,
+ 1159657200000,
+ 1175212800000,
+ 1189897200000,
+ 1206662400000,
+ 1223161200000,
+ 1238112000000,
+ 1254006000000,
+ 1269561600000,
+ 1284246000000,
+ 1301616000000,
+ 1317510000000,
+ 1333065600000,
+ 1348354800000,
+ 1364515200000,
+ 1382828400000,
+ 1395964800000,
+ 1414278000000,
+ 1427414400000,
+ 1445727600000,
+ 1458864000000,
+ 1477782000000,
+ 1490313600000,
+ 1509231600000,
+ 1521763200000,
+ 1540681200000,
+ 1553817600000,
+ 1572130800000,
+ 1585267200000,
+ 1603580400000,
+ 1616716800000,
+ 1635634800000,
+ 1648166400000,
+ 1667084400000,
+ 1679616000000,
+ 1698534000000,
+ 1711670400000,
+ 1729983600000,
+ 1743120000000,
+ 1761433200000,
+ 1774569600000,
+ 1792882800000,
+ 1806019200000,
+ 1824937200000,
+ 1837468800000,
+ 1856386800000,
+ 1868918400000,
+ 1887836400000,
+ 1900972800000,
+ 1919286000000,
+ 1932422400000,
+ 1950735600000,
+ 1963872000000,
+ 1982790000000,
+ 1995321600000,
+ 2014239600000,
+ 2026771200000,
+ 2045689200000,
+ 2058220800000,
+ 2077138800000,
+ 2090275200000,
+ 2108588400000,
+ 2121724800000,
+ 2140038000000,
+ null
+ ],
+ "offsets": [
+ -140.6667,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -240,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "Jamaica",
+ "abbrs": [
+ "KMT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1827687170000,
+ 126687600000,
+ 152085600000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ null
+ ],
+ "offsets": [
+ 307.1667,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "Japan",
+ "abbrs": [
+ "JST",
+ "JDT",
+ "JST",
+ "JDT",
+ "JST",
+ "JDT",
+ "JST",
+ "JDT",
+ "JST"
+ ],
+ "untils": [
+ -683802000000,
+ -672314400000,
+ -654771600000,
+ -640864800000,
+ -620298000000,
+ -609415200000,
+ -588848400000,
+ -577965600000,
+ null
+ ],
+ "offsets": [
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540
+ ],
+ "population": 0
+ },
+ {
+ "name": "Kwajalein",
+ "abbrs": [
+ "+11",
+ "-12",
+ "+12"
+ ],
+ "untils": [
+ -7988400000,
+ 745848000000,
+ null
+ ],
+ "offsets": [
+ -660,
+ 720,
+ -720
+ ],
+ "population": 0
+ },
+ {
+ "name": "Libya",
+ "abbrs": [
+ "LMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "EET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "EET",
+ "CET",
+ "CEST",
+ "EET",
+ "CET",
+ "CEST",
+ "EET"
+ ],
+ "untils": [
+ -1577926364000,
+ -574902000000,
+ -568087200000,
+ -512175600000,
+ -504928800000,
+ -449888400000,
+ -441856800000,
+ -347158800000,
+ 378684000000,
+ 386463600000,
+ 402271200000,
+ 417999600000,
+ 433807200000,
+ 449622000000,
+ 465429600000,
+ 481590000000,
+ 496965600000,
+ 512953200000,
+ 528674400000,
+ 544230000000,
+ 560037600000,
+ 575852400000,
+ 591660000000,
+ 607388400000,
+ 623196000000,
+ 641775600000,
+ 844034400000,
+ 860108400000,
+ 875916000000,
+ 1352505600000,
+ 1364515200000,
+ 1382659200000,
+ null
+ ],
+ "offsets": [
+ -52.7333,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -120,
+ -60,
+ -120,
+ -120
+ ],
+ "population": 0
+ },
+ {
+ "name": "MET",
+ "abbrs": [
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET",
+ "MEST",
+ "MET"
+ ],
+ "untils": [
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -938905200000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796777200000,
+ -781052400000,
+ -766623600000,
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Mexico/BajaNorte",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "PST",
+ "MST",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1514736000000,
+ -1451667600000,
+ -1343062800000,
+ -1234803600000,
+ -1222963200000,
+ -1207242000000,
+ -873820800000,
+ -769395600000,
+ -761677200000,
+ -686073600000,
+ -661539600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1175421600000,
+ 1193562000000,
+ 1207476000000,
+ 1225011600000,
+ 1238925600000,
+ 1256461200000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 468.0667,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Mexico/BajaSur",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "PST",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ -873828000000,
+ -661539600000,
+ 28800000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 989139600000,
+ 1001836800000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1175418000000,
+ 1193558400000,
+ 1207472400000,
+ 1225008000000,
+ 1238922000000,
+ 1256457600000,
+ 1270371600000,
+ 1288512000000,
+ 1301821200000,
+ 1319961600000,
+ 1333270800000,
+ 1351411200000,
+ 1365325200000,
+ 1382860800000,
+ 1396774800000,
+ 1414310400000,
+ 1428224400000,
+ 1445760000000,
+ 1459674000000,
+ 1477814400000,
+ 1491123600000,
+ 1509264000000,
+ 1522573200000,
+ 1540713600000,
+ 1554627600000,
+ 1572163200000,
+ 1586077200000,
+ 1603612800000,
+ 1617526800000,
+ 1635667200000,
+ 1648976400000,
+ 1667116800000,
+ 1680426000000,
+ 1698566400000,
+ 1712480400000,
+ 1730016000000,
+ 1743930000000,
+ 1761465600000,
+ 1775379600000,
+ 1792915200000,
+ 1806829200000,
+ 1824969600000,
+ 1838278800000,
+ 1856419200000,
+ 1869728400000,
+ 1887868800000,
+ 1901782800000,
+ 1919318400000,
+ 1933232400000,
+ 1950768000000,
+ 1964682000000,
+ 1982822400000,
+ 1996131600000,
+ 2014272000000,
+ 2027581200000,
+ 2045721600000,
+ 2059030800000,
+ 2077171200000,
+ 2091085200000,
+ 2108620800000,
+ 2122534800000,
+ 2140070400000,
+ null
+ ],
+ "offsets": [
+ 425.6667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 480,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Mexico/General",
+ "abbrs": [
+ "LMT",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "MST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1514739600000,
+ -1343066400000,
+ -1234807200000,
+ -1220292000000,
+ -1207159200000,
+ -1191344400000,
+ -975261600000,
+ -963169200000,
+ -917114400000,
+ -907354800000,
+ -821901600000,
+ -810068400000,
+ -627501600000,
+ -612990000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 989136000000,
+ 1001833200000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1175414400000,
+ 1193554800000,
+ 1207468800000,
+ 1225004400000,
+ 1238918400000,
+ 1256454000000,
+ 1270368000000,
+ 1288508400000,
+ 1301817600000,
+ 1319958000000,
+ 1333267200000,
+ 1351407600000,
+ 1365321600000,
+ 1382857200000,
+ 1396771200000,
+ 1414306800000,
+ 1428220800000,
+ 1445756400000,
+ 1459670400000,
+ 1477810800000,
+ 1491120000000,
+ 1509260400000,
+ 1522569600000,
+ 1540710000000,
+ 1554624000000,
+ 1572159600000,
+ 1586073600000,
+ 1603609200000,
+ 1617523200000,
+ 1635663600000,
+ 1648972800000,
+ 1667113200000,
+ 1680422400000,
+ 1698562800000,
+ 1712476800000,
+ 1730012400000,
+ 1743926400000,
+ 1761462000000,
+ 1775376000000,
+ 1792911600000,
+ 1806825600000,
+ 1824966000000,
+ 1838275200000,
+ 1856415600000,
+ 1869724800000,
+ 1887865200000,
+ 1901779200000,
+ 1919314800000,
+ 1933228800000,
+ 1950764400000,
+ 1964678400000,
+ 1982818800000,
+ 1996128000000,
+ 2014268400000,
+ 2027577600000,
+ 2045718000000,
+ 2059027200000,
+ 2077167600000,
+ 2091081600000,
+ 2108617200000,
+ 2122531200000,
+ 2140066800000,
+ null
+ ],
+ "offsets": [
+ 396.6,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "MST",
+ "abbrs": [
+ "MST"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "MST7MDT",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "Navajo",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -1570374000000,
+ -1551628800000,
+ -1538924400000,
+ -1534089600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -147884400000,
+ -131558400000,
+ -116434800000,
+ -100108800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "NZ-CHAT",
+ "abbrs": [
+ "+1215",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345"
+ ],
+ "untils": [
+ -757426500000,
+ 152632800000,
+ 162309600000,
+ 183477600000,
+ 194968800000,
+ 215532000000,
+ 226418400000,
+ 246981600000,
+ 257868000000,
+ 278431200000,
+ 289317600000,
+ 309880800000,
+ 320767200000,
+ 341330400000,
+ 352216800000,
+ 372780000000,
+ 384271200000,
+ 404834400000,
+ 415720800000,
+ 436284000000,
+ 447170400000,
+ 467733600000,
+ 478620000000,
+ 499183200000,
+ 510069600000,
+ 530632800000,
+ 541519200000,
+ 562082400000,
+ 573573600000,
+ 594136800000,
+ 605023200000,
+ 623772000000,
+ 637682400000,
+ 655221600000,
+ 669132000000,
+ 686671200000,
+ 700581600000,
+ 718120800000,
+ 732636000000,
+ 749570400000,
+ 764085600000,
+ 781020000000,
+ 795535200000,
+ 812469600000,
+ 826984800000,
+ 844524000000,
+ 858434400000,
+ 875973600000,
+ 889884000000,
+ 907423200000,
+ 921938400000,
+ 938872800000,
+ 953388000000,
+ 970322400000,
+ 984837600000,
+ 1002376800000,
+ 1016287200000,
+ 1033826400000,
+ 1047736800000,
+ 1065276000000,
+ 1079791200000,
+ 1096725600000,
+ 1111240800000,
+ 1128175200000,
+ 1142690400000,
+ 1159624800000,
+ 1174140000000,
+ 1191074400000,
+ 1207404000000,
+ 1222524000000,
+ 1238853600000,
+ 1253973600000,
+ 1270303200000,
+ 1285423200000,
+ 1301752800000,
+ 1316872800000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ -735,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825
+ ],
+ "population": 0
+ },
+ {
+ "name": "NZ",
+ "abbrs": [
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT"
+ ],
+ "untils": [
+ -1330335000000,
+ -1320057000000,
+ -1300699800000,
+ -1287396000000,
+ -1269250200000,
+ -1255946400000,
+ -1237800600000,
+ -1224496800000,
+ -1206351000000,
+ -1192442400000,
+ -1174901400000,
+ -1160992800000,
+ -1143451800000,
+ -1125914400000,
+ -1112607000000,
+ -1094464800000,
+ -1081157400000,
+ -1063015200000,
+ -1049707800000,
+ -1031565600000,
+ -1018258200000,
+ -1000116000000,
+ -986808600000,
+ -968061600000,
+ -955359000000,
+ -936612000000,
+ -923304600000,
+ 152632800000,
+ 162309600000,
+ 183477600000,
+ 194968800000,
+ 215532000000,
+ 226418400000,
+ 246981600000,
+ 257868000000,
+ 278431200000,
+ 289317600000,
+ 309880800000,
+ 320767200000,
+ 341330400000,
+ 352216800000,
+ 372780000000,
+ 384271200000,
+ 404834400000,
+ 415720800000,
+ 436284000000,
+ 447170400000,
+ 467733600000,
+ 478620000000,
+ 499183200000,
+ 510069600000,
+ 530632800000,
+ 541519200000,
+ 562082400000,
+ 573573600000,
+ 594136800000,
+ 605023200000,
+ 623772000000,
+ 637682400000,
+ 655221600000,
+ 669132000000,
+ 686671200000,
+ 700581600000,
+ 718120800000,
+ 732636000000,
+ 749570400000,
+ 764085600000,
+ 781020000000,
+ 795535200000,
+ 812469600000,
+ 826984800000,
+ 844524000000,
+ 858434400000,
+ 875973600000,
+ 889884000000,
+ 907423200000,
+ 921938400000,
+ 938872800000,
+ 953388000000,
+ 970322400000,
+ 984837600000,
+ 1002376800000,
+ 1016287200000,
+ 1033826400000,
+ 1047736800000,
+ 1065276000000,
+ 1079791200000,
+ 1096725600000,
+ 1111240800000,
+ 1128175200000,
+ 1142690400000,
+ 1159624800000,
+ 1174140000000,
+ 1191074400000,
+ 1207404000000,
+ 1222524000000,
+ 1238853600000,
+ 1253973600000,
+ 1270303200000,
+ 1285423200000,
+ 1301752800000,
+ 1316872800000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ -690,
+ -750,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Apia",
+ "abbrs": [
+ "LMT",
+ "-1130",
+ "-11",
+ "-10",
+ "-11",
+ "-10",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14"
+ ],
+ "untils": [
+ -1861878784000,
+ -631110600000,
+ 1285498800000,
+ 1301752800000,
+ 1316872800000,
+ 1325239200000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ 686.9333,
+ 690,
+ 660,
+ 600,
+ 660,
+ 600,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840
+ ],
+ "population": 36735
+ },
+ {
+ "name": "Pacific/Auckland",
+ "abbrs": [
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZMT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT",
+ "NZST",
+ "NZDT"
+ ],
+ "untils": [
+ -1330335000000,
+ -1320057000000,
+ -1300699800000,
+ -1287396000000,
+ -1269250200000,
+ -1255946400000,
+ -1237800600000,
+ -1224496800000,
+ -1206351000000,
+ -1192442400000,
+ -1174901400000,
+ -1160992800000,
+ -1143451800000,
+ -1125914400000,
+ -1112607000000,
+ -1094464800000,
+ -1081157400000,
+ -1063015200000,
+ -1049707800000,
+ -1031565600000,
+ -1018258200000,
+ -1000116000000,
+ -986808600000,
+ -968061600000,
+ -955359000000,
+ -936612000000,
+ -923304600000,
+ 152632800000,
+ 162309600000,
+ 183477600000,
+ 194968800000,
+ 215532000000,
+ 226418400000,
+ 246981600000,
+ 257868000000,
+ 278431200000,
+ 289317600000,
+ 309880800000,
+ 320767200000,
+ 341330400000,
+ 352216800000,
+ 372780000000,
+ 384271200000,
+ 404834400000,
+ 415720800000,
+ 436284000000,
+ 447170400000,
+ 467733600000,
+ 478620000000,
+ 499183200000,
+ 510069600000,
+ 530632800000,
+ 541519200000,
+ 562082400000,
+ 573573600000,
+ 594136800000,
+ 605023200000,
+ 623772000000,
+ 637682400000,
+ 655221600000,
+ 669132000000,
+ 686671200000,
+ 700581600000,
+ 718120800000,
+ 732636000000,
+ 749570400000,
+ 764085600000,
+ 781020000000,
+ 795535200000,
+ 812469600000,
+ 826984800000,
+ 844524000000,
+ 858434400000,
+ 875973600000,
+ 889884000000,
+ 907423200000,
+ 921938400000,
+ 938872800000,
+ 953388000000,
+ 970322400000,
+ 984837600000,
+ 1002376800000,
+ 1016287200000,
+ 1033826400000,
+ 1047736800000,
+ 1065276000000,
+ 1079791200000,
+ 1096725600000,
+ 1111240800000,
+ 1128175200000,
+ 1142690400000,
+ 1159624800000,
+ 1174140000000,
+ 1191074400000,
+ 1207404000000,
+ 1222524000000,
+ 1238853600000,
+ 1253973600000,
+ 1270303200000,
+ 1285423200000,
+ 1301752800000,
+ 1316872800000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ -690,
+ -750,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -690,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780
+ ],
+ "population": 1356000
+ },
+ {
+ "name": "Pacific/Bougainville",
+ "abbrs": [
+ "+10",
+ "+09",
+ "+10",
+ "+11"
+ ],
+ "untils": [
+ -868010400000,
+ -768906000000,
+ 1419696000000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -540,
+ -600,
+ -660
+ ],
+ "population": 175160
+ },
+ {
+ "name": "Pacific/Chatham",
+ "abbrs": [
+ "+1215",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345",
+ "+1245",
+ "+1345"
+ ],
+ "untils": [
+ -757426500000,
+ 152632800000,
+ 162309600000,
+ 183477600000,
+ 194968800000,
+ 215532000000,
+ 226418400000,
+ 246981600000,
+ 257868000000,
+ 278431200000,
+ 289317600000,
+ 309880800000,
+ 320767200000,
+ 341330400000,
+ 352216800000,
+ 372780000000,
+ 384271200000,
+ 404834400000,
+ 415720800000,
+ 436284000000,
+ 447170400000,
+ 467733600000,
+ 478620000000,
+ 499183200000,
+ 510069600000,
+ 530632800000,
+ 541519200000,
+ 562082400000,
+ 573573600000,
+ 594136800000,
+ 605023200000,
+ 623772000000,
+ 637682400000,
+ 655221600000,
+ 669132000000,
+ 686671200000,
+ 700581600000,
+ 718120800000,
+ 732636000000,
+ 749570400000,
+ 764085600000,
+ 781020000000,
+ 795535200000,
+ 812469600000,
+ 826984800000,
+ 844524000000,
+ 858434400000,
+ 875973600000,
+ 889884000000,
+ 907423200000,
+ 921938400000,
+ 938872800000,
+ 953388000000,
+ 970322400000,
+ 984837600000,
+ 1002376800000,
+ 1016287200000,
+ 1033826400000,
+ 1047736800000,
+ 1065276000000,
+ 1079791200000,
+ 1096725600000,
+ 1111240800000,
+ 1128175200000,
+ 1142690400000,
+ 1159624800000,
+ 1174140000000,
+ 1191074400000,
+ 1207404000000,
+ 1222524000000,
+ 1238853600000,
+ 1253973600000,
+ 1270303200000,
+ 1285423200000,
+ 1301752800000,
+ 1316872800000,
+ 1333202400000,
+ 1348927200000,
+ 1365256800000,
+ 1380376800000,
+ 1396706400000,
+ 1411826400000,
+ 1428156000000,
+ 1443276000000,
+ 1459605600000,
+ 1474725600000,
+ 1491055200000,
+ 1506175200000,
+ 1522504800000,
+ 1538229600000,
+ 1554559200000,
+ 1569679200000,
+ 1586008800000,
+ 1601128800000,
+ 1617458400000,
+ 1632578400000,
+ 1648908000000,
+ 1664028000000,
+ 1680357600000,
+ 1695477600000,
+ 1712412000000,
+ 1727532000000,
+ 1743861600000,
+ 1758981600000,
+ 1775311200000,
+ 1790431200000,
+ 1806760800000,
+ 1821880800000,
+ 1838210400000,
+ 1853330400000,
+ 1869660000000,
+ 1885384800000,
+ 1901714400000,
+ 1916834400000,
+ 1933164000000,
+ 1948284000000,
+ 1964613600000,
+ 1979733600000,
+ 1996063200000,
+ 2011183200000,
+ 2027512800000,
+ 2042632800000,
+ 2058962400000,
+ 2074687200000,
+ 2091016800000,
+ 2106136800000,
+ 2122466400000,
+ 2137586400000,
+ null
+ ],
+ "offsets": [
+ -735,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825,
+ -765,
+ -825
+ ],
+ "population": 600
+ },
+ {
+ "name": "Pacific/Chuuk",
+ "abbrs": [
+ "+10"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -600
+ ],
+ "population": 48654
+ },
+ {
+ "name": "Pacific/Easter",
+ "abbrs": [
+ "EMT",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-07",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05",
+ "-06",
+ "-05"
+ ],
+ "untils": [
+ -1178124152000,
+ -36619200000,
+ -23922000000,
+ -3355200000,
+ 7527600000,
+ 24465600000,
+ 37767600000,
+ 55915200000,
+ 69217200000,
+ 87969600000,
+ 100666800000,
+ 118209600000,
+ 132116400000,
+ 150868800000,
+ 163566000000,
+ 182318400000,
+ 195620400000,
+ 213768000000,
+ 227070000000,
+ 245217600000,
+ 258519600000,
+ 277272000000,
+ 289969200000,
+ 308721600000,
+ 321418800000,
+ 340171200000,
+ 353473200000,
+ 371620800000,
+ 403070400000,
+ 416372400000,
+ 434520000000,
+ 447822000000,
+ 466574400000,
+ 479271600000,
+ 498024000000,
+ 510721200000,
+ 529473600000,
+ 545194800000,
+ 560923200000,
+ 574225200000,
+ 592372800000,
+ 605674800000,
+ 624427200000,
+ 637124400000,
+ 653457600000,
+ 668574000000,
+ 687326400000,
+ 700628400000,
+ 718776000000,
+ 732078000000,
+ 750225600000,
+ 763527600000,
+ 781675200000,
+ 794977200000,
+ 813729600000,
+ 826426800000,
+ 845179200000,
+ 859690800000,
+ 876628800000,
+ 889930800000,
+ 906868800000,
+ 923194800000,
+ 939528000000,
+ 952830000000,
+ 971582400000,
+ 984279600000,
+ 1003032000000,
+ 1015729200000,
+ 1034481600000,
+ 1047178800000,
+ 1065931200000,
+ 1079233200000,
+ 1097380800000,
+ 1110682800000,
+ 1128830400000,
+ 1142132400000,
+ 1160884800000,
+ 1173582000000,
+ 1192334400000,
+ 1206846000000,
+ 1223784000000,
+ 1237086000000,
+ 1255233600000,
+ 1270350000000,
+ 1286683200000,
+ 1304823600000,
+ 1313899200000,
+ 1335668400000,
+ 1346558400000,
+ 1367118000000,
+ 1378612800000,
+ 1398567600000,
+ 1410062400000,
+ 1463281200000,
+ 1471147200000,
+ 1494730800000,
+ 1502596800000,
+ 1526180400000,
+ 1534046400000,
+ 1557630000000,
+ 1565496000000,
+ 1589079600000,
+ 1596945600000,
+ 1620529200000,
+ 1629000000000,
+ 1652583600000,
+ 1660449600000,
+ 1684033200000,
+ 1691899200000,
+ 1715482800000,
+ 1723348800000,
+ 1746932400000,
+ 1754798400000,
+ 1778382000000,
+ 1786248000000,
+ 1809831600000,
+ 1818302400000,
+ 1841886000000,
+ 1849752000000,
+ 1873335600000,
+ 1881201600000,
+ 1904785200000,
+ 1912651200000,
+ 1936234800000,
+ 1944100800000,
+ 1967684400000,
+ 1976155200000,
+ 1999738800000,
+ 2007604800000,
+ 2031188400000,
+ 2039054400000,
+ 2062638000000,
+ 2070504000000,
+ 2094087600000,
+ 2101953600000,
+ 2125537200000,
+ 2133403200000,
+ null
+ ],
+ "offsets": [
+ 437.4667,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300
+ ],
+ "population": 3000
+ },
+ {
+ "name": "Pacific/Efate",
+ "abbrs": [
+ "LMT",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11"
+ ],
+ "untils": [
+ -1829387596000,
+ 433256400000,
+ 448977600000,
+ 467298000000,
+ 480427200000,
+ 496760400000,
+ 511876800000,
+ 528210000000,
+ 543931200000,
+ 559659600000,
+ 575380800000,
+ 591109200000,
+ 606830400000,
+ 622558800000,
+ 638280000000,
+ 654008400000,
+ 669729600000,
+ 686062800000,
+ 696340800000,
+ 719931600000,
+ 727790400000,
+ null
+ ],
+ "offsets": [
+ -673.2667,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660
+ ],
+ "population": 65829
+ },
+ {
+ "name": "Pacific/Enderbury",
+ "abbrs": [
+ "-12",
+ "-11",
+ "+13"
+ ],
+ "untils": [
+ 307627200000,
+ 788871600000,
+ null
+ ],
+ "offsets": [
+ 720,
+ 660,
+ -780
+ ],
+ "population": 1
+ },
+ {
+ "name": "Pacific/Fakaofo",
+ "abbrs": [
+ "-11",
+ "+13"
+ ],
+ "untils": [
+ 1325242800000,
+ null
+ ],
+ "offsets": [
+ 660,
+ -780
+ ],
+ "population": 483
+ },
+ {
+ "name": "Pacific/Fiji",
+ "abbrs": [
+ "LMT",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12",
+ "+13",
+ "+12"
+ ],
+ "untils": [
+ -1709985344000,
+ 909842400000,
+ 920124000000,
+ 941896800000,
+ 951573600000,
+ 1259416800000,
+ 1269698400000,
+ 1287842400000,
+ 1299333600000,
+ 1319292000000,
+ 1327154400000,
+ 1350741600000,
+ 1358604000000,
+ 1382796000000,
+ 1390050000000,
+ 1414850400000,
+ 1421503200000,
+ 1446300000000,
+ 1452952800000,
+ 1478354400000,
+ 1484402400000,
+ 1509804000000,
+ 1515852000000,
+ 1541253600000,
+ 1547906400000,
+ 1572703200000,
+ 1579356000000,
+ 1604152800000,
+ 1610805600000,
+ 1636207200000,
+ 1642255200000,
+ 1667656800000,
+ 1673704800000,
+ 1699106400000,
+ 1705154400000,
+ 1730556000000,
+ 1737208800000,
+ 1762005600000,
+ 1768658400000,
+ 1793455200000,
+ 1800108000000,
+ 1825509600000,
+ 1831557600000,
+ 1856959200000,
+ 1863007200000,
+ 1888408800000,
+ 1895061600000,
+ 1919858400000,
+ 1926511200000,
+ 1951308000000,
+ 1957960800000,
+ 1983362400000,
+ 1989410400000,
+ 2014812000000,
+ 2020860000000,
+ 2046261600000,
+ 2052309600000,
+ 2077711200000,
+ 2084364000000,
+ 2109160800000,
+ 2115813600000,
+ 2140610400000,
+ 2147263200000,
+ null
+ ],
+ "offsets": [
+ -715.7333,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720,
+ -780,
+ -720
+ ],
+ "population": 881065
+ },
+ {
+ "name": "Pacific/Funafuti",
+ "abbrs": [
+ "+12"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -720
+ ],
+ "population": 4492
+ },
+ {
+ "name": "Pacific/Galapagos",
+ "abbrs": [
+ "LMT",
+ "-05",
+ "-06",
+ "-05",
+ "-06"
+ ],
+ "untils": [
+ -1230746496000,
+ 504939600000,
+ 722930400000,
+ 728888400000,
+ null
+ ],
+ "offsets": [
+ 358.4,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 25000
+ },
+ {
+ "name": "Pacific/Gambier",
+ "abbrs": [
+ "LMT",
+ "-09"
+ ],
+ "untils": [
+ -1806678012000,
+ null
+ ],
+ "offsets": [
+ 539.8,
+ 540
+ ],
+ "population": 125
+ },
+ {
+ "name": "Pacific/Guadalcanal",
+ "abbrs": [
+ "LMT",
+ "+11"
+ ],
+ "untils": [
+ -1806748788000,
+ null
+ ],
+ "offsets": [
+ -639.8,
+ -660
+ ],
+ "population": 109382
+ },
+ {
+ "name": "Pacific/Guam",
+ "abbrs": [
+ "GST",
+ "ChST"
+ ],
+ "untils": [
+ 977493600000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -600
+ ],
+ "population": 165124
+ },
+ {
+ "name": "Pacific/Honolulu",
+ "abbrs": [
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HST"
+ ],
+ "untils": [
+ -1157283000000,
+ -1155436200000,
+ -880198200000,
+ -765376200000,
+ -712150200000,
+ null
+ ],
+ "offsets": [
+ 630,
+ 570,
+ 630,
+ 570,
+ 630,
+ 600
+ ],
+ "population": 374658
+ },
+ {
+ "name": "Pacific/Johnston",
+ "abbrs": [
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HST"
+ ],
+ "untils": [
+ -1157283000000,
+ -1155436200000,
+ -880198200000,
+ -765376200000,
+ -712150200000,
+ null
+ ],
+ "offsets": [
+ 630,
+ 570,
+ 630,
+ 570,
+ 630,
+ 600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Kiritimati",
+ "abbrs": [
+ "-1040",
+ "-10",
+ "+14"
+ ],
+ "untils": [
+ 307622400000,
+ 788868000000,
+ null
+ ],
+ "offsets": [
+ 640,
+ 600,
+ -840
+ ],
+ "population": 5115
+ },
+ {
+ "name": "Pacific/Kosrae",
+ "abbrs": [
+ "+11",
+ "+12",
+ "+11"
+ ],
+ "untils": [
+ -7988400000,
+ 915105600000,
+ null
+ ],
+ "offsets": [
+ -660,
+ -720,
+ -660
+ ],
+ "population": 6616
+ },
+ {
+ "name": "Pacific/Kwajalein",
+ "abbrs": [
+ "+11",
+ "-12",
+ "+12"
+ ],
+ "untils": [
+ -7988400000,
+ 745848000000,
+ null
+ ],
+ "offsets": [
+ -660,
+ 720,
+ -720
+ ],
+ "population": 13500
+ },
+ {
+ "name": "Pacific/Majuro",
+ "abbrs": [
+ "+11",
+ "+12"
+ ],
+ "untils": [
+ -7988400000,
+ null
+ ],
+ "offsets": [
+ -660,
+ -720
+ ],
+ "population": 27797
+ },
+ {
+ "name": "Pacific/Marquesas",
+ "abbrs": [
+ "LMT",
+ "-0930"
+ ],
+ "untils": [
+ -1806676920000,
+ null
+ ],
+ "offsets": [
+ 558,
+ 570
+ ],
+ "population": 8632
+ },
+ {
+ "name": "Pacific/Midway",
+ "abbrs": [
+ "LMT",
+ "SST"
+ ],
+ "untils": [
+ -1861879032000,
+ null
+ ],
+ "offsets": [
+ 682.8,
+ 660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Nauru",
+ "abbrs": [
+ "LMT",
+ "+1130",
+ "+09",
+ "+1130",
+ "+12"
+ ],
+ "untils": [
+ -1545131260000,
+ -877347000000,
+ -800960400000,
+ 294323400000,
+ null
+ ],
+ "offsets": [
+ -667.6667,
+ -690,
+ -540,
+ -690,
+ -720
+ ],
+ "population": 10084
+ },
+ {
+ "name": "Pacific/Niue",
+ "abbrs": [
+ "-1120",
+ "-1130",
+ "-11"
+ ],
+ "untils": [
+ -599575200000,
+ 276089400000,
+ null
+ ],
+ "offsets": [
+ 680,
+ 690,
+ 660
+ ],
+ "population": 1190
+ },
+ {
+ "name": "Pacific/Norfolk",
+ "abbrs": [
+ "+1112",
+ "+1130",
+ "+1230",
+ "+1130",
+ "+11"
+ ],
+ "untils": [
+ -599656320000,
+ 152029800000,
+ 162912600000,
+ 1443882600000,
+ null
+ ],
+ "offsets": [
+ -672,
+ -690,
+ -750,
+ -690,
+ -660
+ ],
+ "population": 246139
+ },
+ {
+ "name": "Pacific/Noumea",
+ "abbrs": [
+ "LMT",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11",
+ "+12",
+ "+11"
+ ],
+ "untils": [
+ -1829387148000,
+ 250002000000,
+ 257342400000,
+ 281451600000,
+ 288878400000,
+ 849366000000,
+ 857228400000,
+ null
+ ],
+ "offsets": [
+ -665.8,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660,
+ -720,
+ -660
+ ],
+ "population": 97579
+ },
+ {
+ "name": "Pacific/Pago_Pago",
+ "abbrs": [
+ "LMT",
+ "SST"
+ ],
+ "untils": [
+ -1861879032000,
+ null
+ ],
+ "offsets": [
+ 682.8,
+ 660
+ ],
+ "population": 3656
+ },
+ {
+ "name": "Pacific/Palau",
+ "abbrs": [
+ "+09"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -540
+ ],
+ "population": 20918
+ },
+ {
+ "name": "Pacific/Pitcairn",
+ "abbrs": [
+ "-0830",
+ "-08"
+ ],
+ "untils": [
+ 893665800000,
+ null
+ ],
+ "offsets": [
+ 510,
+ 480
+ ],
+ "population": 56
+ },
+ {
+ "name": "Pacific/Pohnpei",
+ "abbrs": [
+ "+11"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -660
+ ],
+ "population": 34000
+ },
+ {
+ "name": "Pacific/Ponape",
+ "abbrs": [
+ "+11"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Port_Moresby",
+ "abbrs": [
+ "+10"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -600
+ ],
+ "population": 254158
+ },
+ {
+ "name": "Pacific/Rarotonga",
+ "abbrs": [
+ "-1030",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10",
+ "-0930",
+ "-10"
+ ],
+ "untils": [
+ 279714600000,
+ 289387800000,
+ 309952800000,
+ 320837400000,
+ 341402400000,
+ 352287000000,
+ 372852000000,
+ 384341400000,
+ 404906400000,
+ 415791000000,
+ 436356000000,
+ 447240600000,
+ 467805600000,
+ 478690200000,
+ 499255200000,
+ 510139800000,
+ 530704800000,
+ 541589400000,
+ 562154400000,
+ 573643800000,
+ 594208800000,
+ 605093400000,
+ 625658400000,
+ 636543000000,
+ 657108000000,
+ 667992600000,
+ null
+ ],
+ "offsets": [
+ 630,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600,
+ 570,
+ 600
+ ],
+ "population": 13095
+ },
+ {
+ "name": "Pacific/Saipan",
+ "abbrs": [
+ "GST",
+ "ChST"
+ ],
+ "untils": [
+ 977493600000,
+ null
+ ],
+ "offsets": [
+ -600,
+ -600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Samoa",
+ "abbrs": [
+ "LMT",
+ "SST"
+ ],
+ "untils": [
+ -1861879032000,
+ null
+ ],
+ "offsets": [
+ 682.8,
+ 660
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Tahiti",
+ "abbrs": [
+ "LMT",
+ "-10"
+ ],
+ "untils": [
+ -1806674504000,
+ null
+ ],
+ "offsets": [
+ 598.2667,
+ 600
+ ],
+ "population": 178133
+ },
+ {
+ "name": "Pacific/Tarawa",
+ "abbrs": [
+ "+12"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -720
+ ],
+ "population": 28802
+ },
+ {
+ "name": "Pacific/Tongatapu",
+ "abbrs": [
+ "+1220",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13",
+ "+14",
+ "+13"
+ ],
+ "untils": [
+ -915193200000,
+ 939214800000,
+ 953384400000,
+ 973342800000,
+ 980596800000,
+ 1004792400000,
+ 1012046400000,
+ 1478350800000,
+ 1484398800000,
+ null
+ ],
+ "offsets": [
+ -740,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780,
+ -840,
+ -780
+ ],
+ "population": 75416
+ },
+ {
+ "name": "Pacific/Truk",
+ "abbrs": [
+ "+10"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Pacific/Wake",
+ "abbrs": [
+ "+12"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -720
+ ],
+ "population": 15500
+ },
+ {
+ "name": "Pacific/Wallis",
+ "abbrs": [
+ "+12"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -720
+ ],
+ "population": 94
+ },
+ {
+ "name": "Pacific/Yap",
+ "abbrs": [
+ "+10"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ -600
+ ],
+ "population": 0
+ },
+ {
+ "name": "Poland",
+ "abbrs": [
+ "WMT",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "EET",
+ "EEST",
+ "EET",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET"
+ ],
+ "untils": [
+ -1717032240000,
+ -1693706400000,
+ -1680483600000,
+ -1663455600000,
+ -1650150000000,
+ -1632006000000,
+ -1618700400000,
+ -1600473600000,
+ -1587168000000,
+ -1501725600000,
+ -931734000000,
+ -857257200000,
+ -844556400000,
+ -828226800000,
+ -812502000000,
+ -796608000000,
+ -778726800000,
+ -762660000000,
+ -748486800000,
+ -733273200000,
+ -715215600000,
+ -701910000000,
+ -684975600000,
+ -670460400000,
+ -654130800000,
+ -639010800000,
+ -397094400000,
+ -386812800000,
+ -371088000000,
+ -355363200000,
+ -334195200000,
+ -323308800000,
+ -307584000000,
+ -291859200000,
+ -271296000000,
+ -260409600000,
+ -239846400000,
+ -228960000000,
+ -208396800000,
+ -197510400000,
+ -176342400000,
+ -166060800000,
+ 228873600000,
+ 243993600000,
+ 260323200000,
+ 276048000000,
+ 291772800000,
+ 307497600000,
+ 323827200000,
+ 338947200000,
+ 354672000000,
+ 370396800000,
+ 386121600000,
+ 401846400000,
+ 417571200000,
+ 433296000000,
+ 449020800000,
+ 465350400000,
+ 481075200000,
+ 496800000000,
+ 512524800000,
+ 528249600000,
+ 543974400000,
+ 559699200000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ -84,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -120,
+ -180,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60
+ ],
+ "population": 0
+ },
+ {
+ "name": "Portugal",
+ "abbrs": [
+ "LMT",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WEMT",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "CET",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "CEST",
+ "CET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ -1830384000000,
+ -1689555600000,
+ -1677801600000,
+ -1667437200000,
+ -1647738000000,
+ -1635814800000,
+ -1616202000000,
+ -1604365200000,
+ -1584666000000,
+ -1572742800000,
+ -1553043600000,
+ -1541206800000,
+ -1521507600000,
+ -1442451600000,
+ -1426813200000,
+ -1379293200000,
+ -1364778000000,
+ -1348448400000,
+ -1333328400000,
+ -1316394000000,
+ -1301274000000,
+ -1284339600000,
+ -1269824400000,
+ -1221440400000,
+ -1206925200000,
+ -1191200400000,
+ -1175475600000,
+ -1127696400000,
+ -1111971600000,
+ -1096851600000,
+ -1080522000000,
+ -1063587600000,
+ -1049072400000,
+ -1033347600000,
+ -1017622800000,
+ -1002502800000,
+ -986173200000,
+ -969238800000,
+ -950490000000,
+ -942022800000,
+ -922669200000,
+ -906944400000,
+ -891133200000,
+ -877309200000,
+ -873684000000,
+ -864007200000,
+ -857955600000,
+ -845859600000,
+ -842839200000,
+ -831348000000,
+ -825901200000,
+ -814410000000,
+ -810784800000,
+ -799898400000,
+ -794451600000,
+ -782960400000,
+ -779335200000,
+ -768448800000,
+ -763002000000,
+ -749091600000,
+ -733366800000,
+ -717631200000,
+ -701906400000,
+ -686181600000,
+ -670456800000,
+ -654732000000,
+ -639007200000,
+ -591832800000,
+ -575503200000,
+ -559778400000,
+ -544053600000,
+ -528328800000,
+ -512604000000,
+ -496879200000,
+ -481154400000,
+ -465429600000,
+ -449704800000,
+ -433980000000,
+ -417650400000,
+ -401925600000,
+ -386200800000,
+ -370476000000,
+ -354751200000,
+ -339026400000,
+ -323301600000,
+ -307576800000,
+ -291852000000,
+ -276127200000,
+ -260402400000,
+ -244677600000,
+ -228348000000,
+ -212623200000,
+ -196898400000,
+ -181173600000,
+ -165448800000,
+ -149724000000,
+ -133999200000,
+ -118274400000,
+ 212544000000,
+ 228268800000,
+ 243993600000,
+ 260323200000,
+ 276048000000,
+ 291772800000,
+ 307501200000,
+ 323222400000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417578400000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 36.75,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ -120,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -120,
+ -60,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "PRC",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -933494400000,
+ -923130000000,
+ -908784000000,
+ -891594000000,
+ 515520000000,
+ 527007600000,
+ 545155200000,
+ 558457200000,
+ 576604800000,
+ 589906800000,
+ 608659200000,
+ 621961200000,
+ 640108800000,
+ 653410800000,
+ 671558400000,
+ 684860400000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "PST8PDT",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1633269600000,
+ -1615129200000,
+ -1601820000000,
+ -1583679600000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "ROC",
+ "abbrs": [
+ "CST",
+ "JST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1017820800000,
+ -766224000000,
+ -745833600000,
+ -733827600000,
+ -716889600000,
+ -699613200000,
+ -683884800000,
+ -670669200000,
+ -652348800000,
+ -639133200000,
+ -620812800000,
+ -607597200000,
+ -589276800000,
+ -576061200000,
+ -562924800000,
+ -541760400000,
+ -528710400000,
+ -510224400000,
+ -497174400000,
+ -478688400000,
+ -465638400000,
+ -449830800000,
+ -434016000000,
+ -418208400000,
+ -402480000000,
+ -386672400000,
+ -370944000000,
+ -355136400000,
+ -339408000000,
+ -323600400000,
+ -302515200000,
+ -291978000000,
+ -270979200000,
+ -260442000000,
+ 133977600000,
+ 149785200000,
+ 165513600000,
+ 181321200000,
+ 299606400000,
+ 307551600000,
+ null
+ ],
+ "offsets": [
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480,
+ -540,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "ROK",
+ "abbrs": [
+ "LMT",
+ "KST",
+ "JST",
+ "KST",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST",
+ "KST",
+ "KDT",
+ "KST",
+ "KDT",
+ "KST"
+ ],
+ "untils": [
+ -1948782472000,
+ -1830414600000,
+ -767350800000,
+ -498128400000,
+ -462702600000,
+ -451733400000,
+ -429784200000,
+ -418296600000,
+ -399544200000,
+ -387451800000,
+ -368094600000,
+ -356002200000,
+ -336645000000,
+ -324552600000,
+ -305195400000,
+ -293103000000,
+ -264933000000,
+ 547578000000,
+ 560883600000,
+ 579027600000,
+ 592333200000,
+ null
+ ],
+ "offsets": [
+ -507.8667,
+ -510,
+ -540,
+ -540,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -570,
+ -510,
+ -540,
+ -600,
+ -540,
+ -600,
+ -540
+ ],
+ "population": 0
+ },
+ {
+ "name": "Singapore",
+ "abbrs": [
+ "SMT",
+ "+07",
+ "+0720",
+ "+0730",
+ "+09",
+ "+0730",
+ "+08"
+ ],
+ "untils": [
+ -2038200925000,
+ -1167634800000,
+ -894180000000,
+ -879665400000,
+ -767005200000,
+ 378664200000,
+ null
+ ],
+ "offsets": [
+ -415.4167,
+ -420,
+ -440,
+ -450,
+ -540,
+ -450,
+ -480
+ ],
+ "population": 0
+ },
+ {
+ "name": "Turkey",
+ "abbrs": [
+ "IMT",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "+04",
+ "+03",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "EET",
+ "EEST",
+ "+03"
+ ],
+ "untils": [
+ -1869875816000,
+ -1693706400000,
+ -1680490800000,
+ -1570413600000,
+ -1552186800000,
+ -1538359200000,
+ -1522551600000,
+ -1507514400000,
+ -1490583600000,
+ -1440208800000,
+ -1428030000000,
+ -1409709600000,
+ -1396494000000,
+ -931140000000,
+ -922762800000,
+ -917834400000,
+ -892436400000,
+ -875844000000,
+ -857358000000,
+ -781063200000,
+ -764737200000,
+ -744343200000,
+ -733806000000,
+ -716436000000,
+ -701924400000,
+ -684986400000,
+ -670474800000,
+ -654141600000,
+ -639025200000,
+ -621828000000,
+ -606970800000,
+ -590032800000,
+ -575434800000,
+ -235620000000,
+ -228279600000,
+ -177732000000,
+ -165726000000,
+ 10533600000,
+ 23835600000,
+ 41983200000,
+ 55285200000,
+ 74037600000,
+ 87339600000,
+ 107910000000,
+ 121219200000,
+ 133920000000,
+ 152676000000,
+ 165362400000,
+ 183502800000,
+ 202428000000,
+ 215557200000,
+ 228866400000,
+ 245797200000,
+ 260316000000,
+ 277246800000,
+ 308779200000,
+ 323827200000,
+ 340228800000,
+ 354672000000,
+ 371678400000,
+ 386121600000,
+ 403128000000,
+ 428446800000,
+ 433886400000,
+ 482792400000,
+ 496702800000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 686098800000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764118000000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301274000000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396227600000,
+ 1414285200000,
+ 1427590800000,
+ 1446944400000,
+ 1459040400000,
+ 1473195600000,
+ null
+ ],
+ "offsets": [
+ -116.9333,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -120,
+ -180,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "UCT",
+ "abbrs": [
+ "UCT"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Universal",
+ "abbrs": [
+ "UTC"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Alaska",
+ "abbrs": [
+ "AST",
+ "AWT",
+ "APT",
+ "AST",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "AHST",
+ "AHDT",
+ "YST",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST",
+ "AKDT",
+ "AKST"
+ ],
+ "untils": [
+ -880200000000,
+ -769395600000,
+ -765378000000,
+ -86882400000,
+ -21470400000,
+ -5749200000,
+ 9979200000,
+ 25700400000,
+ 41428800000,
+ 57754800000,
+ 73483200000,
+ 89204400000,
+ 104932800000,
+ 120654000000,
+ 126705600000,
+ 152103600000,
+ 162388800000,
+ 183553200000,
+ 199281600000,
+ 215607600000,
+ 230731200000,
+ 247057200000,
+ 262785600000,
+ 278506800000,
+ 294235200000,
+ 309956400000,
+ 325684800000,
+ 341406000000,
+ 357134400000,
+ 372855600000,
+ 388584000000,
+ 404910000000,
+ 420033600000,
+ 436359600000,
+ 439030800000,
+ 452084400000,
+ 467805600000,
+ 483534000000,
+ 499255200000,
+ 514983600000,
+ 530704800000,
+ 544618800000,
+ 562154400000,
+ 576068400000,
+ 594208800000,
+ 607518000000,
+ 625658400000,
+ 638967600000,
+ 657108000000,
+ 671022000000,
+ 688557600000,
+ 702471600000,
+ 720007200000,
+ 733921200000,
+ 752061600000,
+ 765370800000,
+ 783511200000,
+ 796820400000,
+ 814960800000,
+ 828874800000,
+ 846410400000,
+ 860324400000,
+ 877860000000,
+ 891774000000,
+ 909309600000,
+ 923223600000,
+ 941364000000,
+ 954673200000,
+ 972813600000,
+ 986122800000,
+ 1004263200000,
+ 1018177200000,
+ 1035712800000,
+ 1049626800000,
+ 1067162400000,
+ 1081076400000,
+ 1099216800000,
+ 1112526000000,
+ 1130666400000,
+ 1143975600000,
+ 1162116000000,
+ 1173610800000,
+ 1194170400000,
+ 1205060400000,
+ 1225620000000,
+ 1236510000000,
+ 1257069600000,
+ 1268564400000,
+ 1289124000000,
+ 1300014000000,
+ 1320573600000,
+ 1331463600000,
+ 1352023200000,
+ 1362913200000,
+ 1383472800000,
+ 1394362800000,
+ 1414922400000,
+ 1425812400000,
+ 1446372000000,
+ 1457866800000,
+ 1478426400000,
+ 1489316400000,
+ 1509876000000,
+ 1520766000000,
+ 1541325600000,
+ 1552215600000,
+ 1572775200000,
+ 1583665200000,
+ 1604224800000,
+ 1615719600000,
+ 1636279200000,
+ 1647169200000,
+ 1667728800000,
+ 1678618800000,
+ 1699178400000,
+ 1710068400000,
+ 1730628000000,
+ 1741518000000,
+ 1762077600000,
+ 1772967600000,
+ 1793527200000,
+ 1805022000000,
+ 1825581600000,
+ 1836471600000,
+ 1857031200000,
+ 1867921200000,
+ 1888480800000,
+ 1899370800000,
+ 1919930400000,
+ 1930820400000,
+ 1951380000000,
+ 1962874800000,
+ 1983434400000,
+ 1994324400000,
+ 2014884000000,
+ 2025774000000,
+ 2046333600000,
+ 2057223600000,
+ 2077783200000,
+ 2088673200000,
+ 2109232800000,
+ 2120122800000,
+ 2140682400000,
+ null
+ ],
+ "offsets": [
+ 600,
+ 540,
+ 540,
+ 600,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 540,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540,
+ 480,
+ 540
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Aleutian",
+ "abbrs": [
+ "NST",
+ "NWT",
+ "NPT",
+ "NST",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "BST",
+ "BDT",
+ "AHST",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST"
+ ],
+ "untils": [
+ -880196400000,
+ -769395600000,
+ -765374400000,
+ -86878800000,
+ -21466800000,
+ -5745600000,
+ 9982800000,
+ 25704000000,
+ 41432400000,
+ 57758400000,
+ 73486800000,
+ 89208000000,
+ 104936400000,
+ 120657600000,
+ 126709200000,
+ 152107200000,
+ 162392400000,
+ 183556800000,
+ 199285200000,
+ 215611200000,
+ 230734800000,
+ 247060800000,
+ 262789200000,
+ 278510400000,
+ 294238800000,
+ 309960000000,
+ 325688400000,
+ 341409600000,
+ 357138000000,
+ 372859200000,
+ 388587600000,
+ 404913600000,
+ 420037200000,
+ 436363200000,
+ 439034400000,
+ 452088000000,
+ 467809200000,
+ 483537600000,
+ 499258800000,
+ 514987200000,
+ 530708400000,
+ 544622400000,
+ 562158000000,
+ 576072000000,
+ 594212400000,
+ 607521600000,
+ 625662000000,
+ 638971200000,
+ 657111600000,
+ 671025600000,
+ 688561200000,
+ 702475200000,
+ 720010800000,
+ 733924800000,
+ 752065200000,
+ 765374400000,
+ 783514800000,
+ 796824000000,
+ 814964400000,
+ 828878400000,
+ 846414000000,
+ 860328000000,
+ 877863600000,
+ 891777600000,
+ 909313200000,
+ 923227200000,
+ 941367600000,
+ 954676800000,
+ 972817200000,
+ 986126400000,
+ 1004266800000,
+ 1018180800000,
+ 1035716400000,
+ 1049630400000,
+ 1067166000000,
+ 1081080000000,
+ 1099220400000,
+ 1112529600000,
+ 1130670000000,
+ 1143979200000,
+ 1162119600000,
+ 1173614400000,
+ 1194174000000,
+ 1205064000000,
+ 1225623600000,
+ 1236513600000,
+ 1257073200000,
+ 1268568000000,
+ 1289127600000,
+ 1300017600000,
+ 1320577200000,
+ 1331467200000,
+ 1352026800000,
+ 1362916800000,
+ 1383476400000,
+ 1394366400000,
+ 1414926000000,
+ 1425816000000,
+ 1446375600000,
+ 1457870400000,
+ 1478430000000,
+ 1489320000000,
+ 1509879600000,
+ 1520769600000,
+ 1541329200000,
+ 1552219200000,
+ 1572778800000,
+ 1583668800000,
+ 1604228400000,
+ 1615723200000,
+ 1636282800000,
+ 1647172800000,
+ 1667732400000,
+ 1678622400000,
+ 1699182000000,
+ 1710072000000,
+ 1730631600000,
+ 1741521600000,
+ 1762081200000,
+ 1772971200000,
+ 1793530800000,
+ 1805025600000,
+ 1825585200000,
+ 1836475200000,
+ 1857034800000,
+ 1867924800000,
+ 1888484400000,
+ 1899374400000,
+ 1919934000000,
+ 1930824000000,
+ 1951383600000,
+ 1962878400000,
+ 1983438000000,
+ 1994328000000,
+ 2014887600000,
+ 2025777600000,
+ 2046337200000,
+ 2057227200000,
+ 2077786800000,
+ 2088676800000,
+ 2109236400000,
+ 2120126400000,
+ 2140686000000,
+ null
+ ],
+ "offsets": [
+ 660,
+ 600,
+ 600,
+ 660,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 660,
+ 600,
+ 600,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600,
+ 540,
+ 600
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Arizona",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MST",
+ "MWT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -880210800000,
+ -820519140000,
+ -812653140000,
+ -796845540000,
+ -84380400000,
+ -68659200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Central",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -1563724800000,
+ -1551632400000,
+ -1538928000000,
+ -1520182800000,
+ -1504454400000,
+ -1491757200000,
+ -1473004800000,
+ -1459702800000,
+ -1441555200000,
+ -1428253200000,
+ -1410105600000,
+ -1396803600000,
+ -1378656000000,
+ -1365354000000,
+ -1347206400000,
+ -1333904400000,
+ -1315152000000,
+ -1301850000000,
+ -1283702400000,
+ -1270400400000,
+ -1252252800000,
+ -1238950800000,
+ -1220803200000,
+ -1207501200000,
+ -1189353600000,
+ -1176051600000,
+ -1157299200000,
+ -1144602000000,
+ -1125849600000,
+ -1112547600000,
+ -1094400000000,
+ -1081098000000,
+ -1067788800000,
+ -1045414800000,
+ -1031500800000,
+ -1018198800000,
+ -1000051200000,
+ -986749200000,
+ -967996800000,
+ -955299600000,
+ -936547200000,
+ -923245200000,
+ -905097600000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -447267600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -384368400000,
+ -368640000000,
+ -352918800000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -257965200000,
+ -242236800000,
+ -226515600000,
+ -210787200000,
+ -195066000000,
+ -179337600000,
+ -163616400000,
+ -147888000000,
+ -131562000000,
+ -116438400000,
+ -100112400000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 702460800000,
+ 719996400000,
+ 733910400000,
+ 752050800000,
+ 765360000000,
+ 783500400000,
+ 796809600000,
+ 814950000000,
+ 828864000000,
+ 846399600000,
+ 860313600000,
+ 877849200000,
+ 891763200000,
+ 909298800000,
+ 923212800000,
+ 941353200000,
+ 954662400000,
+ 972802800000,
+ 986112000000,
+ 1004252400000,
+ 1018166400000,
+ 1035702000000,
+ 1049616000000,
+ 1067151600000,
+ 1081065600000,
+ 1099206000000,
+ 1112515200000,
+ 1130655600000,
+ 1143964800000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/East-Indiana",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -900259200000,
+ -891795600000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -747244800000,
+ -733942800000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -386787600000,
+ -368640000000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Eastern",
+ "abbrs": [
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -1633280400000,
+ -1615140000000,
+ -1601830800000,
+ -1583690400000,
+ -1570381200000,
+ -1551636000000,
+ -1536512400000,
+ -1523210400000,
+ -1504458000000,
+ -1491760800000,
+ -1473008400000,
+ -1459706400000,
+ -1441558800000,
+ -1428256800000,
+ -1410109200000,
+ -1396807200000,
+ -1378659600000,
+ -1365357600000,
+ -1347210000000,
+ -1333908000000,
+ -1315155600000,
+ -1301853600000,
+ -1283706000000,
+ -1270404000000,
+ -1252256400000,
+ -1238954400000,
+ -1220806800000,
+ -1207504800000,
+ -1189357200000,
+ -1176055200000,
+ -1157302800000,
+ -1144605600000,
+ -1125853200000,
+ -1112551200000,
+ -1094403600000,
+ -1081101600000,
+ -1062954000000,
+ -1049652000000,
+ -1031504400000,
+ -1018202400000,
+ -1000054800000,
+ -986752800000,
+ -968000400000,
+ -955303200000,
+ -936550800000,
+ -923248800000,
+ -905101200000,
+ -891799200000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -747248400000,
+ -733946400000,
+ -715798800000,
+ -702496800000,
+ -684349200000,
+ -671047200000,
+ -652899600000,
+ -639597600000,
+ -620845200000,
+ -608148000000,
+ -589395600000,
+ -576093600000,
+ -557946000000,
+ -544644000000,
+ -526496400000,
+ -513194400000,
+ -495046800000,
+ -481744800000,
+ -463597200000,
+ -447271200000,
+ -431542800000,
+ -415821600000,
+ -400093200000,
+ -384372000000,
+ -368643600000,
+ -352922400000,
+ -337194000000,
+ -321472800000,
+ -305744400000,
+ -289418400000,
+ -273690000000,
+ -257968800000,
+ -242240400000,
+ -226519200000,
+ -210790800000,
+ -195069600000,
+ -179341200000,
+ -163620000000,
+ -147891600000,
+ -131565600000,
+ -116442000000,
+ -100116000000,
+ -84387600000,
+ -68666400000,
+ -52938000000,
+ -37216800000,
+ -21488400000,
+ -5767200000,
+ 9961200000,
+ 25682400000,
+ 41410800000,
+ 57736800000,
+ 73465200000,
+ 89186400000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152085600000,
+ 162370800000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Hawaii",
+ "abbrs": [
+ "HST",
+ "HDT",
+ "HST",
+ "HDT",
+ "HST",
+ "HST"
+ ],
+ "untils": [
+ -1157283000000,
+ -1155436200000,
+ -880198200000,
+ -765376200000,
+ -712150200000,
+ null
+ ],
+ "offsets": [
+ 630,
+ 570,
+ 630,
+ 570,
+ 630,
+ 600
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Indiana-Starke",
+ "abbrs": [
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CWT",
+ "CPT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "EST",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "EST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST",
+ "CDT",
+ "CST"
+ ],
+ "untils": [
+ -1633276800000,
+ -1615136400000,
+ -1601827200000,
+ -1583686800000,
+ -880214400000,
+ -769395600000,
+ -765392400000,
+ -715795200000,
+ -702493200000,
+ -684345600000,
+ -671043600000,
+ -652896000000,
+ -639594000000,
+ -620841600000,
+ -608144400000,
+ -589392000000,
+ -576090000000,
+ -557942400000,
+ -544640400000,
+ -526492800000,
+ -513190800000,
+ -495043200000,
+ -481741200000,
+ -463593600000,
+ -447267600000,
+ -431539200000,
+ -415818000000,
+ -400089600000,
+ -386787600000,
+ -368640000000,
+ -355338000000,
+ -337190400000,
+ -321469200000,
+ -305740800000,
+ -289414800000,
+ -273686400000,
+ -257965200000,
+ -242236800000,
+ -195066000000,
+ -84384000000,
+ -68662800000,
+ -52934400000,
+ -37213200000,
+ -21484800000,
+ -5763600000,
+ 9964800000,
+ 25686000000,
+ 41414400000,
+ 57740400000,
+ 73468800000,
+ 89190000000,
+ 104918400000,
+ 120639600000,
+ 126691200000,
+ 152089200000,
+ 162374400000,
+ 183538800000,
+ 199267200000,
+ 215593200000,
+ 230716800000,
+ 247042800000,
+ 262771200000,
+ 278492400000,
+ 294220800000,
+ 309942000000,
+ 325670400000,
+ 341391600000,
+ 357120000000,
+ 372841200000,
+ 388569600000,
+ 404895600000,
+ 420019200000,
+ 436345200000,
+ 452073600000,
+ 467794800000,
+ 483523200000,
+ 499244400000,
+ 514972800000,
+ 530694000000,
+ 544608000000,
+ 562143600000,
+ 576057600000,
+ 594198000000,
+ 607507200000,
+ 625647600000,
+ 638956800000,
+ 657097200000,
+ 671011200000,
+ 688546800000,
+ 1143961200000,
+ 1162105200000,
+ 1173600000000,
+ 1194159600000,
+ 1205049600000,
+ 1225609200000,
+ 1236499200000,
+ 1257058800000,
+ 1268553600000,
+ 1289113200000,
+ 1300003200000,
+ 1320562800000,
+ 1331452800000,
+ 1352012400000,
+ 1362902400000,
+ 1383462000000,
+ 1394352000000,
+ 1414911600000,
+ 1425801600000,
+ 1446361200000,
+ 1457856000000,
+ 1478415600000,
+ 1489305600000,
+ 1509865200000,
+ 1520755200000,
+ 1541314800000,
+ 1552204800000,
+ 1572764400000,
+ 1583654400000,
+ 1604214000000,
+ 1615708800000,
+ 1636268400000,
+ 1647158400000,
+ 1667718000000,
+ 1678608000000,
+ 1699167600000,
+ 1710057600000,
+ 1730617200000,
+ 1741507200000,
+ 1762066800000,
+ 1772956800000,
+ 1793516400000,
+ 1805011200000,
+ 1825570800000,
+ 1836460800000,
+ 1857020400000,
+ 1867910400000,
+ 1888470000000,
+ 1899360000000,
+ 1919919600000,
+ 1930809600000,
+ 1951369200000,
+ 1962864000000,
+ 1983423600000,
+ 1994313600000,
+ 2014873200000,
+ 2025763200000,
+ 2046322800000,
+ 2057212800000,
+ 2077772400000,
+ 2088662400000,
+ 2109222000000,
+ 2120112000000,
+ 2140671600000,
+ null
+ ],
+ "offsets": [
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 300,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360,
+ 300,
+ 360
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Michigan",
+ "abbrs": [
+ "LMT",
+ "CST",
+ "EST",
+ "EWT",
+ "EPT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST",
+ "EDT",
+ "EST"
+ ],
+ "untils": [
+ -2051202469000,
+ -1724083200000,
+ -880218000000,
+ -769395600000,
+ -765396000000,
+ -684349200000,
+ -671047200000,
+ 104914800000,
+ 120636000000,
+ 126687600000,
+ 152085600000,
+ 167814000000,
+ 183535200000,
+ 199263600000,
+ 215589600000,
+ 230713200000,
+ 247039200000,
+ 262767600000,
+ 278488800000,
+ 294217200000,
+ 309938400000,
+ 325666800000,
+ 341388000000,
+ 357116400000,
+ 372837600000,
+ 388566000000,
+ 404892000000,
+ 420015600000,
+ 436341600000,
+ 452070000000,
+ 467791200000,
+ 483519600000,
+ 499240800000,
+ 514969200000,
+ 530690400000,
+ 544604400000,
+ 562140000000,
+ 576054000000,
+ 594194400000,
+ 607503600000,
+ 625644000000,
+ 638953200000,
+ 657093600000,
+ 671007600000,
+ 688543200000,
+ 702457200000,
+ 719992800000,
+ 733906800000,
+ 752047200000,
+ 765356400000,
+ 783496800000,
+ 796806000000,
+ 814946400000,
+ 828860400000,
+ 846396000000,
+ 860310000000,
+ 877845600000,
+ 891759600000,
+ 909295200000,
+ 923209200000,
+ 941349600000,
+ 954658800000,
+ 972799200000,
+ 986108400000,
+ 1004248800000,
+ 1018162800000,
+ 1035698400000,
+ 1049612400000,
+ 1067148000000,
+ 1081062000000,
+ 1099202400000,
+ 1112511600000,
+ 1130652000000,
+ 1143961200000,
+ 1162101600000,
+ 1173596400000,
+ 1194156000000,
+ 1205046000000,
+ 1225605600000,
+ 1236495600000,
+ 1257055200000,
+ 1268550000000,
+ 1289109600000,
+ 1299999600000,
+ 1320559200000,
+ 1331449200000,
+ 1352008800000,
+ 1362898800000,
+ 1383458400000,
+ 1394348400000,
+ 1414908000000,
+ 1425798000000,
+ 1446357600000,
+ 1457852400000,
+ 1478412000000,
+ 1489302000000,
+ 1509861600000,
+ 1520751600000,
+ 1541311200000,
+ 1552201200000,
+ 1572760800000,
+ 1583650800000,
+ 1604210400000,
+ 1615705200000,
+ 1636264800000,
+ 1647154800000,
+ 1667714400000,
+ 1678604400000,
+ 1699164000000,
+ 1710054000000,
+ 1730613600000,
+ 1741503600000,
+ 1762063200000,
+ 1772953200000,
+ 1793512800000,
+ 1805007600000,
+ 1825567200000,
+ 1836457200000,
+ 1857016800000,
+ 1867906800000,
+ 1888466400000,
+ 1899356400000,
+ 1919916000000,
+ 1930806000000,
+ 1951365600000,
+ 1962860400000,
+ 1983420000000,
+ 1994310000000,
+ 2014869600000,
+ 2025759600000,
+ 2046319200000,
+ 2057209200000,
+ 2077768800000,
+ 2088658800000,
+ 2109218400000,
+ 2120108400000,
+ 2140668000000,
+ null
+ ],
+ "offsets": [
+ 332.1833,
+ 360,
+ 300,
+ 240,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300,
+ 240,
+ 300
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Mountain",
+ "abbrs": [
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MWT",
+ "MPT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST",
+ "MDT",
+ "MST"
+ ],
+ "untils": [
+ -1633273200000,
+ -1615132800000,
+ -1601823600000,
+ -1583683200000,
+ -1570374000000,
+ -1551628800000,
+ -1538924400000,
+ -1534089600000,
+ -880210800000,
+ -769395600000,
+ -765388800000,
+ -147884400000,
+ -131558400000,
+ -116434800000,
+ -100108800000,
+ -84380400000,
+ -68659200000,
+ -52930800000,
+ -37209600000,
+ -21481200000,
+ -5760000000,
+ 9968400000,
+ 25689600000,
+ 41418000000,
+ 57744000000,
+ 73472400000,
+ 89193600000,
+ 104922000000,
+ 120643200000,
+ 126694800000,
+ 152092800000,
+ 162378000000,
+ 183542400000,
+ 199270800000,
+ 215596800000,
+ 230720400000,
+ 247046400000,
+ 262774800000,
+ 278496000000,
+ 294224400000,
+ 309945600000,
+ 325674000000,
+ 341395200000,
+ 357123600000,
+ 372844800000,
+ 388573200000,
+ 404899200000,
+ 420022800000,
+ 436348800000,
+ 452077200000,
+ 467798400000,
+ 483526800000,
+ 499248000000,
+ 514976400000,
+ 530697600000,
+ 544611600000,
+ 562147200000,
+ 576061200000,
+ 594201600000,
+ 607510800000,
+ 625651200000,
+ 638960400000,
+ 657100800000,
+ 671014800000,
+ 688550400000,
+ 702464400000,
+ 720000000000,
+ 733914000000,
+ 752054400000,
+ 765363600000,
+ 783504000000,
+ 796813200000,
+ 814953600000,
+ 828867600000,
+ 846403200000,
+ 860317200000,
+ 877852800000,
+ 891766800000,
+ 909302400000,
+ 923216400000,
+ 941356800000,
+ 954666000000,
+ 972806400000,
+ 986115600000,
+ 1004256000000,
+ 1018170000000,
+ 1035705600000,
+ 1049619600000,
+ 1067155200000,
+ 1081069200000,
+ 1099209600000,
+ 1112518800000,
+ 1130659200000,
+ 1143968400000,
+ 1162108800000,
+ 1173603600000,
+ 1194163200000,
+ 1205053200000,
+ 1225612800000,
+ 1236502800000,
+ 1257062400000,
+ 1268557200000,
+ 1289116800000,
+ 1300006800000,
+ 1320566400000,
+ 1331456400000,
+ 1352016000000,
+ 1362906000000,
+ 1383465600000,
+ 1394355600000,
+ 1414915200000,
+ 1425805200000,
+ 1446364800000,
+ 1457859600000,
+ 1478419200000,
+ 1489309200000,
+ 1509868800000,
+ 1520758800000,
+ 1541318400000,
+ 1552208400000,
+ 1572768000000,
+ 1583658000000,
+ 1604217600000,
+ 1615712400000,
+ 1636272000000,
+ 1647162000000,
+ 1667721600000,
+ 1678611600000,
+ 1699171200000,
+ 1710061200000,
+ 1730620800000,
+ 1741510800000,
+ 1762070400000,
+ 1772960400000,
+ 1793520000000,
+ 1805014800000,
+ 1825574400000,
+ 1836464400000,
+ 1857024000000,
+ 1867914000000,
+ 1888473600000,
+ 1899363600000,
+ 1919923200000,
+ 1930813200000,
+ 1951372800000,
+ 1962867600000,
+ 1983427200000,
+ 1994317200000,
+ 2014876800000,
+ 2025766800000,
+ 2046326400000,
+ 2057216400000,
+ 2077776000000,
+ 2088666000000,
+ 2109225600000,
+ 2120115600000,
+ 2140675200000,
+ null
+ ],
+ "offsets": [
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420,
+ 360,
+ 420
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Pacific-New",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1633269600000,
+ -1615129200000,
+ -1601820000000,
+ -1583679600000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -687967140000,
+ -662655600000,
+ -620838000000,
+ -608137200000,
+ -589388400000,
+ -576082800000,
+ -557938800000,
+ -544633200000,
+ -526489200000,
+ -513183600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ -273682800000,
+ -260982000000,
+ -242233200000,
+ -226508400000,
+ -210783600000,
+ -195058800000,
+ -179334000000,
+ -163609200000,
+ -147884400000,
+ -131554800000,
+ -116434800000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Pacific",
+ "abbrs": [
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PWT",
+ "PPT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST",
+ "PDT",
+ "PST"
+ ],
+ "untils": [
+ -1633269600000,
+ -1615129200000,
+ -1601820000000,
+ -1583679600000,
+ -880207200000,
+ -769395600000,
+ -765385200000,
+ -687967140000,
+ -662655600000,
+ -620838000000,
+ -608137200000,
+ -589388400000,
+ -576082800000,
+ -557938800000,
+ -544633200000,
+ -526489200000,
+ -513183600000,
+ -495039600000,
+ -481734000000,
+ -463590000000,
+ -450284400000,
+ -431535600000,
+ -418230000000,
+ -400086000000,
+ -386780400000,
+ -368636400000,
+ -355330800000,
+ -337186800000,
+ -323881200000,
+ -305737200000,
+ -292431600000,
+ -273682800000,
+ -260982000000,
+ -242233200000,
+ -226508400000,
+ -210783600000,
+ -195058800000,
+ -179334000000,
+ -163609200000,
+ -147884400000,
+ -131554800000,
+ -116434800000,
+ -100105200000,
+ -84376800000,
+ -68655600000,
+ -52927200000,
+ -37206000000,
+ -21477600000,
+ -5756400000,
+ 9972000000,
+ 25693200000,
+ 41421600000,
+ 57747600000,
+ 73476000000,
+ 89197200000,
+ 104925600000,
+ 120646800000,
+ 126698400000,
+ 152096400000,
+ 162381600000,
+ 183546000000,
+ 199274400000,
+ 215600400000,
+ 230724000000,
+ 247050000000,
+ 262778400000,
+ 278499600000,
+ 294228000000,
+ 309949200000,
+ 325677600000,
+ 341398800000,
+ 357127200000,
+ 372848400000,
+ 388576800000,
+ 404902800000,
+ 420026400000,
+ 436352400000,
+ 452080800000,
+ 467802000000,
+ 483530400000,
+ 499251600000,
+ 514980000000,
+ 530701200000,
+ 544615200000,
+ 562150800000,
+ 576064800000,
+ 594205200000,
+ 607514400000,
+ 625654800000,
+ 638964000000,
+ 657104400000,
+ 671018400000,
+ 688554000000,
+ 702468000000,
+ 720003600000,
+ 733917600000,
+ 752058000000,
+ 765367200000,
+ 783507600000,
+ 796816800000,
+ 814957200000,
+ 828871200000,
+ 846406800000,
+ 860320800000,
+ 877856400000,
+ 891770400000,
+ 909306000000,
+ 923220000000,
+ 941360400000,
+ 954669600000,
+ 972810000000,
+ 986119200000,
+ 1004259600000,
+ 1018173600000,
+ 1035709200000,
+ 1049623200000,
+ 1067158800000,
+ 1081072800000,
+ 1099213200000,
+ 1112522400000,
+ 1130662800000,
+ 1143972000000,
+ 1162112400000,
+ 1173607200000,
+ 1194166800000,
+ 1205056800000,
+ 1225616400000,
+ 1236506400000,
+ 1257066000000,
+ 1268560800000,
+ 1289120400000,
+ 1300010400000,
+ 1320570000000,
+ 1331460000000,
+ 1352019600000,
+ 1362909600000,
+ 1383469200000,
+ 1394359200000,
+ 1414918800000,
+ 1425808800000,
+ 1446368400000,
+ 1457863200000,
+ 1478422800000,
+ 1489312800000,
+ 1509872400000,
+ 1520762400000,
+ 1541322000000,
+ 1552212000000,
+ 1572771600000,
+ 1583661600000,
+ 1604221200000,
+ 1615716000000,
+ 1636275600000,
+ 1647165600000,
+ 1667725200000,
+ 1678615200000,
+ 1699174800000,
+ 1710064800000,
+ 1730624400000,
+ 1741514400000,
+ 1762074000000,
+ 1772964000000,
+ 1793523600000,
+ 1805018400000,
+ 1825578000000,
+ 1836468000000,
+ 1857027600000,
+ 1867917600000,
+ 1888477200000,
+ 1899367200000,
+ 1919926800000,
+ 1930816800000,
+ 1951376400000,
+ 1962871200000,
+ 1983430800000,
+ 1994320800000,
+ 2014880400000,
+ 2025770400000,
+ 2046330000000,
+ 2057220000000,
+ 2077779600000,
+ 2088669600000,
+ 2109229200000,
+ 2120119200000,
+ 2140678800000,
+ null
+ ],
+ "offsets": [
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480,
+ 420,
+ 480
+ ],
+ "population": 0
+ },
+ {
+ "name": "US/Samoa",
+ "abbrs": [
+ "LMT",
+ "SST"
+ ],
+ "untils": [
+ -1861879032000,
+ null
+ ],
+ "offsets": [
+ 682.8,
+ 660
+ ],
+ "population": 0
+ },
+ {
+ "name": "UTC",
+ "abbrs": [
+ "UTC"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "W-SU",
+ "abbrs": [
+ "MMT",
+ "MMT",
+ "MST",
+ "MMT",
+ "MDST",
+ "MST",
+ "MDST",
+ "MSD",
+ "MSK",
+ "MSD",
+ "+05",
+ "MSD",
+ "MSK",
+ "EET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "EEST",
+ "EET",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSD",
+ "MSK",
+ "MSK",
+ "MSK"
+ ],
+ "untils": [
+ -1688265017000,
+ -1656819079000,
+ -1641353479000,
+ -1627965079000,
+ -1618716679000,
+ -1596429079000,
+ -1593820800000,
+ -1589860800000,
+ -1542427200000,
+ -1539493200000,
+ -1525323600000,
+ -1522728000000,
+ -1491188400000,
+ -1247536800000,
+ 354920400000,
+ 370728000000,
+ 386456400000,
+ 402264000000,
+ 417992400000,
+ 433800000000,
+ 449614800000,
+ 465346800000,
+ 481071600000,
+ 496796400000,
+ 512521200000,
+ 528246000000,
+ 543970800000,
+ 559695600000,
+ 575420400000,
+ 591145200000,
+ 606870000000,
+ 622594800000,
+ 638319600000,
+ 654649200000,
+ 670374000000,
+ 686102400000,
+ 695779200000,
+ 701823600000,
+ 717548400000,
+ 733273200000,
+ 748998000000,
+ 764722800000,
+ 780447600000,
+ 796172400000,
+ 811897200000,
+ 828226800000,
+ 846370800000,
+ 859676400000,
+ 877820400000,
+ 891126000000,
+ 909270000000,
+ 922575600000,
+ 941324400000,
+ 954025200000,
+ 972774000000,
+ 985474800000,
+ 1004223600000,
+ 1017529200000,
+ 1035673200000,
+ 1048978800000,
+ 1067122800000,
+ 1080428400000,
+ 1099177200000,
+ 1111878000000,
+ 1130626800000,
+ 1143327600000,
+ 1162076400000,
+ 1174777200000,
+ 1193526000000,
+ 1206831600000,
+ 1224975600000,
+ 1238281200000,
+ 1256425200000,
+ 1269730800000,
+ 1288479600000,
+ 1301180400000,
+ 1414274400000,
+ null
+ ],
+ "offsets": [
+ -150.2833,
+ -151.3167,
+ -211.3167,
+ -151.3167,
+ -271.3167,
+ -211.3167,
+ -271.3167,
+ -240,
+ -180,
+ -240,
+ -300,
+ -240,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -180,
+ -120,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180,
+ -240,
+ -180
+ ],
+ "population": 0
+ },
+ {
+ "name": "WET",
+ "abbrs": [
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET",
+ "WEST",
+ "WET"
+ ],
+ "untils": [
+ 228877200000,
+ 243997200000,
+ 260326800000,
+ 276051600000,
+ 291776400000,
+ 307501200000,
+ 323830800000,
+ 338950800000,
+ 354675600000,
+ 370400400000,
+ 386125200000,
+ 401850000000,
+ 417574800000,
+ 433299600000,
+ 449024400000,
+ 465354000000,
+ 481078800000,
+ 496803600000,
+ 512528400000,
+ 528253200000,
+ 543978000000,
+ 559702800000,
+ 575427600000,
+ 591152400000,
+ 606877200000,
+ 622602000000,
+ 638326800000,
+ 654656400000,
+ 670381200000,
+ 686106000000,
+ 701830800000,
+ 717555600000,
+ 733280400000,
+ 749005200000,
+ 764730000000,
+ 780454800000,
+ 796179600000,
+ 811904400000,
+ 828234000000,
+ 846378000000,
+ 859683600000,
+ 877827600000,
+ 891133200000,
+ 909277200000,
+ 922582800000,
+ 941331600000,
+ 954032400000,
+ 972781200000,
+ 985482000000,
+ 1004230800000,
+ 1017536400000,
+ 1035680400000,
+ 1048986000000,
+ 1067130000000,
+ 1080435600000,
+ 1099184400000,
+ 1111885200000,
+ 1130634000000,
+ 1143334800000,
+ 1162083600000,
+ 1174784400000,
+ 1193533200000,
+ 1206838800000,
+ 1224982800000,
+ 1238288400000,
+ 1256432400000,
+ 1269738000000,
+ 1288486800000,
+ 1301187600000,
+ 1319936400000,
+ 1332637200000,
+ 1351386000000,
+ 1364691600000,
+ 1382835600000,
+ 1396141200000,
+ 1414285200000,
+ 1427590800000,
+ 1445734800000,
+ 1459040400000,
+ 1477789200000,
+ 1490490000000,
+ 1509238800000,
+ 1521939600000,
+ 1540688400000,
+ 1553994000000,
+ 1572138000000,
+ 1585443600000,
+ 1603587600000,
+ 1616893200000,
+ 1635642000000,
+ 1648342800000,
+ 1667091600000,
+ 1679792400000,
+ 1698541200000,
+ 1711846800000,
+ 1729990800000,
+ 1743296400000,
+ 1761440400000,
+ 1774746000000,
+ 1792890000000,
+ 1806195600000,
+ 1824944400000,
+ 1837645200000,
+ 1856394000000,
+ 1869094800000,
+ 1887843600000,
+ 1901149200000,
+ 1919293200000,
+ 1932598800000,
+ 1950742800000,
+ 1964048400000,
+ 1982797200000,
+ 1995498000000,
+ 2014246800000,
+ 2026947600000,
+ 2045696400000,
+ 2058397200000,
+ 2077146000000,
+ 2090451600000,
+ 2108595600000,
+ 2121901200000,
+ 2140045200000,
+ null
+ ],
+ "offsets": [
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0,
+ -60,
+ 0
+ ],
+ "population": 0
+ },
+ {
+ "name": "Zulu",
+ "abbrs": [
+ "UTC"
+ ],
+ "untils": [
+ null
+ ],
+ "offsets": [
+ 0
+ ],
+ "population": 0
+ }
+ ],
+ "links": []
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone-utils.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone-utils.js
new file mode 100644
index 00000000000..7c10e395cf2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone-utils.js
@@ -0,0 +1,318 @@
+//! moment-timezone-utils.js
+//! version : 0.5.17
+//! Copyright (c) JS Foundation and other contributors
+//! license : MIT
+//! github.com/moment/moment-timezone
+
+(function (root, factory) {
+ "use strict";
+
+ /*global define*/
+ if (typeof define === 'function' && define.amd) {
+ define(['moment'], factory); // AMD
+ } else if (typeof module === 'object' && module.exports) {
+ module.exports = factory(require('./')); // Node
+ } else {
+ factory(root.moment); // Browser
+ }
+}(this, function (moment) {
+ "use strict";
+
+ if (!moment.tz) {
+ throw new Error("moment-timezone-utils.js must be loaded after moment-timezone.js");
+ }
+
+ /************************************
+ Pack Base 60
+ ************************************/
+
+ var BASE60 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX',
+ EPSILON = 0.000001; // Used to fix floating point rounding errors
+
+ function packBase60Fraction(fraction, precision) {
+ var buffer = '.',
+ output = '',
+ current;
+
+ while (precision > 0) {
+ precision -= 1;
+ fraction *= 60;
+ current = Math.floor(fraction + EPSILON);
+ buffer += BASE60[current];
+ fraction -= current;
+
+ // Only add buffer to output once we have a non-zero value.
+ // This makes '.000' output '', and '.100' output '.1'
+ if (current) {
+ output += buffer;
+ buffer = '';
+ }
+ }
+
+ return output;
+ }
+
+ function packBase60(number, precision) {
+ var output = '',
+ absolute = Math.abs(number),
+ whole = Math.floor(absolute),
+ fraction = packBase60Fraction(absolute - whole, Math.min(~~precision, 10));
+
+ while (whole > 0) {
+ output = BASE60[whole % 60] + output;
+ whole = Math.floor(whole / 60);
+ }
+
+ if (number < 0) {
+ output = '-' + output;
+ }
+
+ if (output && fraction) {
+ return output + fraction;
+ }
+
+ if (!fraction && output === '-') {
+ return '0';
+ }
+
+ return output || fraction || '0';
+ }
+
+ /************************************
+ Pack
+ ************************************/
+
+ function packUntils(untils) {
+ var out = [],
+ last = 0,
+ i;
+
+ for (i = 0; i < untils.length - 1; i++) {
+ out[i] = packBase60(Math.round((untils[i] - last) / 1000) / 60, 1);
+ last = untils[i];
+ }
+
+ return out.join(' ');
+ }
+
+ function packAbbrsAndOffsets(source) {
+ var index = 0,
+ abbrs = [],
+ offsets = [],
+ indices = [],
+ map = {},
+ i, key;
+
+ for (i = 0; i < source.abbrs.length; i++) {
+ key = source.abbrs[i] + '|' + source.offsets[i];
+ if (map[key] === undefined) {
+ map[key] = index;
+ abbrs[index] = source.abbrs[i];
+ offsets[index] = packBase60(Math.round(source.offsets[i] * 60) / 60, 1);
+ index++;
+ }
+ indices[i] = packBase60(map[key], 0);
+ }
+
+ return abbrs.join(' ') + '|' + offsets.join(' ') + '|' + indices.join('');
+ }
+
+ function packPopulation (number) {
+ if (!number) {
+ return '';
+ }
+ if (number < 1000) {
+ return '|' + number;
+ }
+ var exponent = String(number | 0).length - 2;
+ var precision = Math.round(number / Math.pow(10, exponent));
+ return '|' + precision + 'e' + exponent;
+ }
+
+ function validatePackData (source) {
+ if (!source.name) { throw new Error("Missing name"); }
+ if (!source.abbrs) { throw new Error("Missing abbrs"); }
+ if (!source.untils) { throw new Error("Missing untils"); }
+ if (!source.offsets) { throw new Error("Missing offsets"); }
+ if (
+ source.offsets.length !== source.untils.length ||
+ source.offsets.length !== source.abbrs.length
+ ) {
+ throw new Error("Mismatched array lengths");
+ }
+ }
+
+ function pack (source) {
+ validatePackData(source);
+ return [
+ source.name,
+ packAbbrsAndOffsets(source),
+ packUntils(source.untils) + packPopulation(source.population)
+ ].join('|');
+ }
+
+ /************************************
+ Create Links
+ ************************************/
+
+ function arraysAreEqual(a, b) {
+ var i;
+
+ if (a.length !== b.length) { return false; }
+
+ for (i = 0; i < a.length; i++) {
+ if (a[i] !== b[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function zonesAreEqual(a, b) {
+ return arraysAreEqual(a.offsets, b.offsets) && arraysAreEqual(a.abbrs, b.abbrs) && arraysAreEqual(a.untils, b.untils);
+ }
+
+ function findAndCreateLinks (input, output, links, groupLeaders) {
+ var i, j, a, b, group, foundGroup, groups = [];
+
+ for (i = 0; i < input.length; i++) {
+ foundGroup = false;
+ a = input[i];
+
+ for (j = 0; j < groups.length; j++) {
+ group = groups[j];
+ b = group[0];
+ if (zonesAreEqual(a, b)) {
+ if (a.population > b.population) {
+ group.unshift(a);
+ } else if (a.population === b.population && groupLeaders && groupLeaders[a.name]) {
+ group.unshift(a);
+ } else {
+ group.push(a);
+ }
+ foundGroup = true;
+ }
+ }
+
+ if (!foundGroup) {
+ groups.push([a]);
+ }
+ }
+
+ for (i = 0; i < groups.length; i++) {
+ group = groups[i];
+ output.push(group[0]);
+ for (j = 1; j < group.length; j++) {
+ links.push(group[0].name + '|' + group[j].name);
+ }
+ }
+ }
+
+ function createLinks (source, groupLeaders) {
+ var zones = [],
+ links = [];
+
+ if (source.links) {
+ links = source.links.slice();
+ }
+
+ findAndCreateLinks(source.zones, zones, links, groupLeaders);
+
+ return {
+ version : source.version,
+ zones : zones,
+ links : links.sort()
+ };
+ }
+
+ /************************************
+ Filter Years
+ ************************************/
+
+ function findStartAndEndIndex (untils, start, end) {
+ var startI = 0,
+ endI = untils.length + 1,
+ untilYear,
+ i;
+
+ if (!end) {
+ end = start;
+ }
+
+ if (start > end) {
+ i = start;
+ start = end;
+ end = i;
+ }
+
+ for (i = 0; i < untils.length; i++) {
+ if (untils[i] == null) {
+ continue;
+ }
+ untilYear = new Date(untils[i]).getUTCFullYear();
+ if (untilYear < start) {
+ startI = i + 1;
+ }
+ if (untilYear > end) {
+ endI = Math.min(endI, i + 1);
+ }
+ }
+
+ return [startI, endI];
+ }
+
+ function filterYears (source, start, end) {
+ var slice = Array.prototype.slice,
+ indices = findStartAndEndIndex(source.untils, start, end),
+ untils = slice.apply(source.untils, indices);
+
+ untils[untils.length - 1] = null;
+
+ return {
+ name : source.name,
+ abbrs : slice.apply(source.abbrs, indices),
+ untils : untils,
+ offsets : slice.apply(source.offsets, indices),
+ population : source.population
+ };
+ }
+
+ /************************************
+ Filter, Link, and Pack
+ ************************************/
+
+ function filterLinkPack (input, start, end, groupLeaders) {
+ var i,
+ inputZones = input.zones,
+ outputZones = [],
+ output;
+
+ for (i = 0; i < inputZones.length; i++) {
+ outputZones[i] = filterYears(inputZones[i], start, end);
+ }
+
+ output = createLinks({
+ zones : outputZones,
+ links : input.links.slice(),
+ version : input.version
+ }, groupLeaders);
+
+ for (i = 0; i < output.zones.length; i++) {
+ output.zones[i] = pack(output.zones[i]);
+ }
+
+ return output;
+ }
+
+ /************************************
+ Exports
+ ************************************/
+
+ moment.tz.pack = pack;
+ moment.tz.packBase60 = packBase60;
+ moment.tz.createLinks = createLinks;
+ moment.tz.filterYears = filterYears;
+ moment.tz.filterLinkPack = filterLinkPack;
+
+ return moment;
+}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone.js
new file mode 100644
index 00000000000..5079eb0d4ef
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment-timezone/moment-timezone.js
@@ -0,0 +1,605 @@
+//! moment-timezone.js
+//! version : 0.5.17
+//! Copyright (c) JS Foundation and other contributors
+//! license : MIT
+//! github.com/moment/moment-timezone
+
+(function (root, factory) {
+ "use strict";
+
+ /*global define*/
+ if (typeof define === 'function' && define.amd) {
+ define(['moment'], factory); // AMD
+ } else if (typeof module === 'object' && module.exports) {
+ module.exports = factory(require('moment')); // Node
+ } else {
+ factory(root.moment); // Browser
+ }
+}(this, function (moment) {
+ "use strict";
+
+ // Do not load moment-timezone a second time.
+ // if (moment.tz !== undefined) {
+ // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
+ // return moment;
+ // }
+
+ var VERSION = "0.5.17",
+ zones = {},
+ links = {},
+ names = {},
+ guesses = {},
+ cachedGuess,
+
+ momentVersion = moment.version.split('.'),
+ major = +momentVersion[0],
+ minor = +momentVersion[1];
+
+ // Moment.js version check
+ if (major < 2 || (major === 2 && minor < 6)) {
+ logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
+ }
+
+ /************************************
+ Unpacking
+ ************************************/
+
+ function charCodeToInt(charCode) {
+ if (charCode > 96) {
+ return charCode - 87;
+ } else if (charCode > 64) {
+ return charCode - 29;
+ }
+ return charCode - 48;
+ }
+
+ function unpackBase60(string) {
+ var i = 0,
+ parts = string.split('.'),
+ whole = parts[0],
+ fractional = parts[1] || '',
+ multiplier = 1,
+ num,
+ out = 0,
+ sign = 1;
+
+ // handle negative numbers
+ if (string.charCodeAt(0) === 45) {
+ i = 1;
+ sign = -1;
+ }
+
+ // handle digits before the decimal
+ for (i; i < whole.length; i++) {
+ num = charCodeToInt(whole.charCodeAt(i));
+ out = 60 * out + num;
+ }
+
+ // handle digits after the decimal
+ for (i = 0; i < fractional.length; i++) {
+ multiplier = multiplier / 60;
+ num = charCodeToInt(fractional.charCodeAt(i));
+ out += num * multiplier;
+ }
+
+ return out * sign;
+ }
+
+ function arrayToInt (array) {
+ for (var i = 0; i < array.length; i++) {
+ array[i] = unpackBase60(array[i]);
+ }
+ }
+
+ function intToUntil (array, length) {
+ for (var i = 0; i < length; i++) {
+ array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
+ }
+
+ array[length - 1] = Infinity;
+ }
+
+ function mapIndices (source, indices) {
+ var out = [], i;
+
+ for (i = 0; i < indices.length; i++) {
+ out[i] = source[indices[i]];
+ }
+
+ return out;
+ }
+
+ function unpack (string) {
+ var data = string.split('|'),
+ offsets = data[2].split(' '),
+ indices = data[3].split(''),
+ untils = data[4].split(' ');
+
+ arrayToInt(offsets);
+ arrayToInt(indices);
+ arrayToInt(untils);
+
+ intToUntil(untils, indices.length);
+
+ return {
+ name : data[0],
+ abbrs : mapIndices(data[1].split(' '), indices),
+ offsets : mapIndices(offsets, indices),
+ untils : untils,
+ population : data[5] | 0
+ };
+ }
+
+ /************************************
+ Zone object
+ ************************************/
+
+ function Zone (packedString) {
+ if (packedString) {
+ this._set(unpack(packedString));
+ }
+ }
+
+ Zone.prototype = {
+ _set : function (unpacked) {
+ this.name = unpacked.name;
+ this.abbrs = unpacked.abbrs;
+ this.untils = unpacked.untils;
+ this.offsets = unpacked.offsets;
+ this.population = unpacked.population;
+ },
+
+ _index : function (timestamp) {
+ var target = +timestamp,
+ untils = this.untils,
+ i;
+
+ for (i = 0; i < untils.length; i++) {
+ if (target < untils[i]) {
+ return i;
+ }
+ }
+ },
+
+ parse : function (timestamp) {
+ var target = +timestamp,
+ offsets = this.offsets,
+ untils = this.untils,
+ max = untils.length - 1,
+ offset, offsetNext, offsetPrev, i;
+
+ for (i = 0; i < max; i++) {
+ offset = offsets[i];
+ offsetNext = offsets[i + 1];
+ offsetPrev = offsets[i ? i - 1 : i];
+
+ if (offset < offsetNext && tz.moveAmbiguousForward) {
+ offset = offsetNext;
+ } else if (offset > offsetPrev && tz.moveInvalidForward) {
+ offset = offsetPrev;
+ }
+
+ if (target < untils[i] - (offset * 60000)) {
+ return offsets[i];
+ }
+ }
+
+ return offsets[max];
+ },
+
+ abbr : function (mom) {
+ return this.abbrs[this._index(mom)];
+ },
+
+ offset : function (mom) {
+ logError("zone.offset has been deprecated in favor of zone.utcOffset");
+ return this.offsets[this._index(mom)];
+ },
+
+ utcOffset : function (mom) {
+ return this.offsets[this._index(mom)];
+ }
+ };
+
+ /************************************
+ Current Timezone
+ ************************************/
+
+ function OffsetAt(at) {
+ var timeString = at.toTimeString();
+ var abbr = timeString.match(/\([a-z ]+\)/i);
+ if (abbr && abbr[0]) {
+ // 17:56:31 GMT-0600 (CST)
+ // 17:56:31 GMT-0600 (Central Standard Time)
+ abbr = abbr[0].match(/[A-Z]/g);
+ abbr = abbr ? abbr.join('') : undefined;
+ } else {
+ // 17:56:31 CST
+ // 17:56:31 GMT+0800 (台北標準時間)
+ abbr = timeString.match(/[A-Z]{3,5}/g);
+ abbr = abbr ? abbr[0] : undefined;
+ }
+
+ if (abbr === 'GMT') {
+ abbr = undefined;
+ }
+
+ this.at = +at;
+ this.abbr = abbr;
+ this.offset = at.getTimezoneOffset();
+ }
+
+ function ZoneScore(zone) {
+ this.zone = zone;
+ this.offsetScore = 0;
+ this.abbrScore = 0;
+ }
+
+ ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
+ this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
+ if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
+ this.abbrScore++;
+ }
+ };
+
+ function findChange(low, high) {
+ var mid, diff;
+
+ while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
+ mid = new OffsetAt(new Date(low.at + diff));
+ if (mid.offset === low.offset) {
+ low = mid;
+ } else {
+ high = mid;
+ }
+ }
+
+ return low;
+ }
+
+ function userOffsets() {
+ var startYear = new Date().getFullYear() - 2,
+ last = new OffsetAt(new Date(startYear, 0, 1)),
+ offsets = [last],
+ change, next, i;
+
+ for (i = 1; i < 48; i++) {
+ next = new OffsetAt(new Date(startYear, i, 1));
+ if (next.offset !== last.offset) {
+ change = findChange(last, next);
+ offsets.push(change);
+ offsets.push(new OffsetAt(new Date(change.at + 6e4)));
+ }
+ last = next;
+ }
+
+ for (i = 0; i < 4; i++) {
+ offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
+ offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
+ }
+
+ return offsets;
+ }
+
+ function sortZoneScores (a, b) {
+ if (a.offsetScore !== b.offsetScore) {
+ return a.offsetScore - b.offsetScore;
+ }
+ if (a.abbrScore !== b.abbrScore) {
+ return a.abbrScore - b.abbrScore;
+ }
+ return b.zone.population - a.zone.population;
+ }
+
+ function addToGuesses (name, offsets) {
+ var i, offset;
+ arrayToInt(offsets);
+ for (i = 0; i < offsets.length; i++) {
+ offset = offsets[i];
+ guesses[offset] = guesses[offset] || {};
+ guesses[offset][name] = true;
+ }
+ }
+
+ function guessesForUserOffsets (offsets) {
+ var offsetsLength = offsets.length,
+ filteredGuesses = {},
+ out = [],
+ i, j, guessesOffset;
+
+ for (i = 0; i < offsetsLength; i++) {
+ guessesOffset = guesses[offsets[i].offset] || {};
+ for (j in guessesOffset) {
+ if (guessesOffset.hasOwnProperty(j)) {
+ filteredGuesses[j] = true;
+ }
+ }
+ }
+
+ for (i in filteredGuesses) {
+ if (filteredGuesses.hasOwnProperty(i)) {
+ out.push(names[i]);
+ }
+ }
+
+ return out;
+ }
+
+ function rebuildGuess () {
+
+ // use Intl API when available and returning valid time zone
+ try {
+ var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ if (intlName && intlName.length > 3) {
+ var name = names[normalizeName(intlName)];
+ if (name) {
+ return name;
+ }
+ logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
+ }
+ } catch (e) {
+ // Intl unavailable, fall back to manual guessing.
+ }
+
+ var offsets = userOffsets(),
+ offsetsLength = offsets.length,
+ guesses = guessesForUserOffsets(offsets),
+ zoneScores = [],
+ zoneScore, i, j;
+
+ for (i = 0; i < guesses.length; i++) {
+ zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
+ for (j = 0; j < offsetsLength; j++) {
+ zoneScore.scoreOffsetAt(offsets[j]);
+ }
+ zoneScores.push(zoneScore);
+ }
+
+ zoneScores.sort(sortZoneScores);
+
+ return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
+ }
+
+ function guess (ignoreCache) {
+ if (!cachedGuess || ignoreCache) {
+ cachedGuess = rebuildGuess();
+ }
+ return cachedGuess;
+ }
+
+ /************************************
+ Global Methods
+ ************************************/
+
+ function normalizeName (name) {
+ return (name || '').toLowerCase().replace(/\//g, '_');
+ }
+
+ function addZone (packed) {
+ var i, name, split, normalized;
+
+ if (typeof packed === "string") {
+ packed = [packed];
+ }
+
+ for (i = 0; i < packed.length; i++) {
+ split = packed[i].split('|');
+ name = split[0];
+ normalized = normalizeName(name);
+ zones[normalized] = packed[i];
+ names[normalized] = name;
+ addToGuesses(normalized, split[2].split(' '));
+ }
+ }
+
+ function getZone (name, caller) {
+ name = normalizeName(name);
+
+ var zone = zones[name];
+ var link;
+
+ if (zone instanceof Zone) {
+ return zone;
+ }
+
+ if (typeof zone === 'string') {
+ zone = new Zone(zone);
+ zones[name] = zone;
+ return zone;
+ }
+
+ // Pass getZone to prevent recursion more than 1 level deep
+ if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
+ zone = zones[name] = new Zone();
+ zone._set(link);
+ zone.name = names[name];
+ return zone;
+ }
+
+ return null;
+ }
+
+ function getNames () {
+ var i, out = [];
+
+ for (i in names) {
+ if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
+ out.push(names[i]);
+ }
+ }
+
+ return out.sort();
+ }
+
+ function addLink (aliases) {
+ var i, alias, normal0, normal1;
+
+ if (typeof aliases === "string") {
+ aliases = [aliases];
+ }
+
+ for (i = 0; i < aliases.length; i++) {
+ alias = aliases[i].split('|');
+
+ normal0 = normalizeName(alias[0]);
+ normal1 = normalizeName(alias[1]);
+
+ links[normal0] = normal1;
+ names[normal0] = alias[0];
+
+ links[normal1] = normal0;
+ names[normal1] = alias[1];
+ }
+ }
+
+ function loadData (data) {
+ addZone(data.zones);
+ addLink(data.links);
+ tz.dataVersion = data.version;
+ }
+
+ function zoneExists (name) {
+ if (!zoneExists.didShowError) {
+ zoneExists.didShowError = true;
+ logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
+ }
+ return !!getZone(name);
+ }
+
+ function needsOffset (m) {
+ var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
+ return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
+ }
+
+ function logError (message) {
+ if (typeof console !== 'undefined' && typeof console.error === 'function') {
+ console.error(message);
+ }
+ }
+
+ /************************************
+ moment.tz namespace
+ ************************************/
+
+ function tz (input) {
+ var args = Array.prototype.slice.call(arguments, 0, -1),
+ name = arguments[arguments.length - 1],
+ zone = getZone(name),
+ out = moment.utc.apply(null, args);
+
+ if (zone && !moment.isMoment(input) && needsOffset(out)) {
+ out.add(zone.parse(out), 'minutes');
+ }
+
+ out.tz(name);
+
+ return out;
+ }
+
+ tz.version = VERSION;
+ tz.dataVersion = '';
+ tz._zones = zones;
+ tz._links = links;
+ tz._names = names;
+ tz.add = addZone;
+ tz.link = addLink;
+ tz.load = loadData;
+ tz.zone = getZone;
+ tz.zoneExists = zoneExists; // deprecated in 0.1.0
+ tz.guess = guess;
+ tz.names = getNames;
+ tz.Zone = Zone;
+ tz.unpack = unpack;
+ tz.unpackBase60 = unpackBase60;
+ tz.needsOffset = needsOffset;
+ tz.moveInvalidForward = true;
+ tz.moveAmbiguousForward = false;
+
+ /************************************
+ Interface with Moment.js
+ ************************************/
+
+ var fn = moment.fn;
+
+ moment.tz = tz;
+
+ moment.defaultZone = null;
+
+ moment.updateOffset = function (mom, keepTime) {
+ var zone = moment.defaultZone,
+ offset;
+
+ if (mom._z === undefined) {
+ if (zone && needsOffset(mom) && !mom._isUTC) {
+ mom._d = moment.utc(mom._a)._d;
+ mom.utc().add(zone.parse(mom), 'minutes');
+ }
+ mom._z = zone;
+ }
+ if (mom._z) {
+ offset = mom._z.utcOffset(mom);
+ if (Math.abs(offset) < 16) {
+ offset = offset / 60;
+ }
+ if (mom.utcOffset !== undefined) {
+ mom.utcOffset(-offset, keepTime);
+ } else {
+ mom.zone(offset, keepTime);
+ }
+ }
+ };
+
+ fn.tz = function (name, keepTime) {
+ if (name) {
+ this._z = getZone(name);
+ if (this._z) {
+ moment.updateOffset(this, keepTime);
+ } else {
+ logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
+ }
+ return this;
+ }
+ if (this._z) { return this._z.name; }
+ };
+
+ function abbrWrap (old) {
+ return function () {
+ if (this._z) { return this._z.abbr(this); }
+ return old.call(this);
+ };
+ }
+
+ function resetZoneWrap (old) {
+ return function () {
+ this._z = null;
+ return old.apply(this, arguments);
+ };
+ }
+
+ fn.zoneName = abbrWrap(fn.zoneName);
+ fn.zoneAbbr = abbrWrap(fn.zoneAbbr);
+ fn.utc = resetZoneWrap(fn.utc);
+
+ moment.tz.setDefault = function(name) {
+ if (major < 2 || (major === 2 && minor < 9)) {
+ logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
+ }
+ moment.defaultZone = name ? getZone(name) : null;
+ return moment;
+ };
+
+ // Cloning a moment should include the _z property.
+ var momentProperties = moment.momentProperties;
+ if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
+ // moment 2.8.1+
+ momentProperties.push('_z');
+ momentProperties.push('_a');
+ } else if (momentProperties) {
+ // moment 2.7.0
+ momentProperties._z = null;
+ }
+
+ // INJECT DATA
+
+ return moment;
+}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/.bower.json
new file mode 100644
index 00000000000..89344d3e756
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/.bower.json
@@ -0,0 +1,36 @@
+{
+ "name": "moment",
+ "license": "MIT",
+ "main": "moment.js",
+ "ignore": [
+ "**/.*",
+ "benchmarks",
+ "bower_components",
+ "meteor",
+ "node_modules",
+ "scripts",
+ "tasks",
+ "test",
+ "component.json",
+ "composer.json",
+ "CONTRIBUTING.md",
+ "ender.js",
+ "Gruntfile.js",
+ "Moment.js.nuspec",
+ "package.js",
+ "package.json",
+ "ISSUE_TEMPLATE.md",
+ "typing-tests"
+ ],
+ "homepage": "https://github.com/moment/moment",
+ "version": "2.17.1",
+ "_release": "2.17.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "2.17.1",
+ "commit": "c83c4058b4c88d0a2ab10aac28ac787e31993c39"
+ },
+ "_source": "https://github.com/moment/moment.git",
+ "_target": "2.17.1",
+ "_originalSource": "moment"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/CHANGELOG.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/CHANGELOG.md
new file mode 100644
index 00000000000..59ec40c335f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/CHANGELOG.md
@@ -0,0 +1,737 @@
+Changelog
+=========
+
+### 2.17.1 [Also available here](https://gist.github.com/ichernev/f38280b2b29c4932914a6d3a4e50bfb2)
+* Release Dec 03, 2016
+
+* [#3638](https://github.com/moment/moment/pull/3638) [misc] TS: Make typescript definitions work with 1.x
+* [#3628](https://github.com/moment/moment/pull/3628) [misc] Adds "sign CLA" link to `CONTRIBUTING.md`
+* [#3640](https://github.com/moment/moment/pull/3640) [misc] Fix locale issues
+
+### 2.17.0 [Also available here](https://gist.github.com/ichernev/ed58f76fb95205eeac653d719972b90c)
+* Release Nov 22, 2016
+
+* [#3435](https://github.com/moment/moment/pull/3435) [new locale] yo: Yoruba (Nigeria) locale
+* [#3595](https://github.com/moment/moment/pull/3595) [bugfix] Fix accidental reference to global "value" variable
+* [#3506](https://github.com/moment/moment/pull/3506) [bugfix] Fix invalid moments returning valid dates to method calls
+* [#3563](https://github.com/moment/moment/pull/3563) [locale] ca: Change future relative time
+* [#3504](https://github.com/moment/moment/pull/3504) [tests] Fixes [#3463](https://github.com/moment/moment/issues/3463), parseZone not handling Z correctly (tests only)
+* [#3591](https://github.com/moment/moment/pull/3591) [misc] typescript: update typescript to 2.0.8, add strictNullChecks=true
+* [#3597](https://github.com/moment/moment/pull/3597) [misc] Fixed capitalization in nuget spec
+
+### 2.16.0 [See full changelog](https://gist.github.com/ichernev/17bffc1005a032cb1a8ac4c1558b4994)
+* Release Nov 9, 2016
+
+## Features
+* [#3530](https://github.com/moment/moment/pull/3530) [feature] Check whether input is date before checking if format is array
+* [#3515](https://github.com/moment/moment/pull/3515) [feature] Fix [#2300](https://github.com/moment/moment/issues/2300): Default to current week.
+
+## Bugfixes
+* [#3546](https://github.com/moment/moment/pull/3546) [bugfix] Implement lazy-loading of child locales with missing prents
+* [#3523](https://github.com/moment/moment/pull/3523) [bugfix] parseZone should handle UTC
+* [#3502](https://github.com/moment/moment/pull/3502) [bugfix] Fix [#3500](https://github.com/moment/moment/issues/3500): ISO 8601 parsing should match the full string, not the beginning of the string.
+* [#3581](https://github.com/moment/moment/pull/3581) [bugfix] Fix parseZone, redo [#3504](https://github.com/moment/moment/issues/3504), fix [#3463](https://github.com/moment/moment/issues/3463)
+
+## New Locales
+* [#3416](https://github.com/moment/moment/pull/3416) [new locale] nl-be: Dutch (Belgium) locale
+* [#3393](https://github.com/moment/moment/pull/3393) [new locale] ar-dz: Arabic (Algeria) locale
+* [#3342](https://github.com/moment/moment/pull/3342) [new locale] tet: Tetun Dili (East Timor) locale
+
+And more locale, build and typescript improvements
+
+### 2.15.2
+* Release Oct 23, 2016
+* [#3525](https://github.com/moment/moment/pull/3525) Speedup month standalone/format regexes **(IMPORTANT)**
+* [#3466](https://github.com/moment/moment/pull/3466) Fix typo of Javanese
+
+### 2.15.1
+* Release Sept 20, 2016
+* [#3438](https://github.com/moment/moment/pull/3438) Fix locale autoload, revert [#3344](https://github.com/moment/moment/pull/3344)
+
+### 2.15.0 [See full changelog](https://gist.github.com/ichernev/10e1c5bf647545c72ca30e9628a09ed3)
+- Release Sept 12, 2016
+
+## New Locales
+* [#3255](https://github.com/moment/moment/pull/3255) [new locale] mi: Maori language
+* [#3267](https://github.com/moment/moment/pull/3267) [new locale] ar-ly: Arabic (Libya) locale
+* [#3333](https://github.com/moment/moment/pull/3333) [new locale] zh-hk: Chinese (Hong Kong) locale
+
+## Bugfixes
+* [#3276](https://github.com/moment/moment/pull/3276) [bugfix] duration: parser: Support ms durations in .NET syntax
+* [#3312](https://github.com/moment/moment/pull/3312) [bugfix] locales: Enable locale-data getters without moment (fixes [#3284](https://github.com/moment/moment/issues/3284))
+* [#3381](https://github.com/moment/moment/pull/3381) [bugfix] parsing: Fix parseZone without timezone in string, fixes [#3083](https://github.com/moment/moment/issues/3083)
+* [#3383](https://github.com/moment/moment/pull/3383) [bugfix] toJSON: Fix isValid so that toJSON works after a moment is frozen
+* [#3427](https://github.com/moment/moment/pull/3427) [bugfix] ie8: Fix IE8 (regression in 2.14.x)
+
+## Packaging
+* [#3299](https://github.com/moment/moment/pull/3299) [pkg] npm: Do not include .npmignore in npm package
+* [#3273](https://github.com/moment/moment/pull/3273) [pkg] jspm: Include moment.d.ts file in package
+* [#3344](https://github.com/moment/moment/pull/3344) [pkg] exports: use module.require for nodejs
+
+Also some locale and typescript improvements
+
+### 2.14.1
+- Release July 20, 2016
+* [#3280](https://github.com/moment/moment/pull/3280) Fix typescript definitions
+
+
+### 2.14.0 [See full changelog](https://gist.github.com/ichernev/812e79ac36a7829a22598fe964bfc18a)
+
+- Release July 20, 2016
+
+## New Features
+* [#3233](http://github.com/moment/moment/pull/3233) Introduce month.isFormat for format/standalone discovery
+* [#2848](http://github.com/moment/moment/pull/2848) Allow user to get/set the rounding method used when calculating relative time
+* [#3112](http://github.com/moment/moment/pull/3112) optimize configFromStringAndFormat
+* [#3147](http://github.com/moment/moment/pull/3147) Call calendar format function with moment context
+* [#3160](http://github.com/moment/moment/pull/3160) deprecate isDSTShifted
+* [#3175](http://github.com/moment/moment/pull/3175) make moment calendar extensible with ad-hoc options
+* [#3191](http://github.com/moment/moment/pull/3191) toDate returns a copy of the internal date object
+* [#3192](http://github.com/moment/moment/pull/3192) Adding support for rollup import.
+* [#3238](http://github.com/moment/moment/pull/3238) Handle empty object and empty array for creation as now
+* [#3082](http://github.com/moment/moment/pull/3082) Use relative AMD moment dependency
+
+## Bugfixes
+* [#3241](http://github.com/moment/moment/pull/3241) Escape all 24 mixed pieces, not only first 12 in computeMonthsParse
+* [#3008](http://github.com/moment/moment/pull/3008) Object setter orders sets based on size of unit
+* [#3177](http://github.com/moment/moment/pull/3177) Bug Fix [#2704](http://github.com/moment/moment/pull/2704) - isoWeekday(String) inconsistent with isoWeekday(Number)
+* [#3230](http://github.com/moment/moment/pull/3230) fix passing date with format string to ignore format string
+* [#3232](http://github.com/moment/moment/pull/3232) Fix negative 0 in certain diff cases
+* [#3235](http://github.com/moment/moment/pull/3235) Use proper locale inheritance for the base locale, fixes [#3137](http://github.com/moment/moment/pull/3137)
+
+Plus es-do locale and locale bugfixes
+
+### 2.13.0 [See full changelog](https://gist.github.com/ichernev/0132fcf5b61f7fc140b0bb0090480d49)
+- Release April 18, 2016
+## Enhancements:
+* [#2982](https://github.com/moment/moment/pull/2982) Add 'date' as alias to 'day' for startOf() and endOf().
+* [#2955](https://github.com/moment/moment/pull/2955) Add parsing negative components in durations when ISO 8601
+* [#2991](https://github.com/moment/moment/pull/2991) isBetween support for both open and closed intervals
+* [#3105](https://github.com/moment/moment/pull/3105) Add localeSorted argument to weekday listers
+* [#3102](https://github.com/moment/moment/pull/3102) Add k and kk formatting tokens
+
+## Bugfixes
+* [#3109](https://github.com/moment/moment/pull/3109) Fix [#1756](https://github.com/moment/moment/issues/1756) Resolved thread-safe issue on server side.
+* [#3078](https://github.com/moment/moment/pull/3078) Fix parsing for months/weekdays with weird characters
+* [#3098](https://github.com/moment/moment/pull/3098) Use Z suffix when in UTC mode ([#3020](https://github.com/moment/moment/issues/3020))
+* [#2995](https://github.com/moment/moment/pull/2995) Fix floating point rounding errors in durations
+* [#3059](https://github.com/moment/moment/pull/3059) fix bug where diff returns -0 in month-related diffs
+* [#3045](https://github.com/moment/moment/pull/3045) Fix mistaking any input for 'a' token
+* [#2877](https://github.com/moment/moment/pull/2877) Use explicit .valueOf() calls instead of coercion
+* [#3036](https://github.com/moment/moment/pull/3036) Year setter should keep time when DST changes
+
+Plus 3 new locales and locale fixes.
+
+### 2.12.0 [See full changelog](https://gist.github.com/ichernev/6e5bfdf8d6522fc4ac73)
+
+- Release March 7, 2016
+
+## Enhancements:
+* [#2932](https://github.com/moment/moment/pull/2932) List loaded locales
+* [#2818](https://github.com/moment/moment/pull/2818) Parse ISO-8061 duration containing both day and week values
+* [#2774](https://github.com/moment/moment/pull/2774) Implement locale inheritance and locale updating
+
+## Bugfixes:
+* [#2970](https://github.com/moment/moment/pull/2970) change add subtract to handle decimal values by rounding
+* [#2887](https://github.com/moment/moment/pull/2887) Fix toJSON casting of invalid moment
+* [#2897](https://github.com/moment/moment/pull/2897) parse string arguments for month() correctly, closes #2884
+* [#2946](https://github.com/moment/moment/pull/2946) Fix usage suggestions for min and max
+
+## New locales:
+* [#2917](https://github.com/moment/moment/pull/2917) Locale Punjabi(Gurmukhi) India format conversion
+
+And more
+
+### 2.11.2 (Fix ReDoS attack vector)
+
+- Release February 7, 2016
+
+* [#2939](https://github.com/moment/moment/pull/2939) use full-string match to speed up aspnet regex match
+
+### 2.11.1 [See full changelog](https://gist.github.com/ichernev/8ec3ee25b749b4cff3c2)
+
+- Release January 9, 2016
+
+## Bugfixes:
+* [#2881](https://github.com/moment/moment/pull/2881) Revert "Merge pull request #2746 from mbad0la:develop" Sep->Sept
+* [#2868](https://github.com/moment/moment/pull/2868) Add format and parse token Y, so it actually works
+* [#2865](https://github.com/moment/moment/pull/2865) Use typeof checks for undefined for global variables
+* [#2858](https://github.com/moment/moment/pull/2858) Fix Date mocking regression introduced in 2.11.0
+* [#2864](https://github.com/moment/moment/pull/2864) Include changelog in npm release
+* [#2830](https://github.com/moment/moment/pull/2830) dep: add grunt-cli
+* [#2869](https://github.com/moment/moment/pull/2869) Fix months parsing for some locales
+
+### 2.11.0 [See full changelog](https://gist.github.com/ichernev/6594bc29719dde6b2f66)
+
+- Release January 4, 2016
+
+* [#2624](https://github.com/moment/moment/pull/2624) Proper handling of invalid moments
+* [#2634](https://github.com/moment/moment/pull/2634) Fix strict month parsing issue in cs,ru,sk
+* [#2735](https://github.com/moment/moment/pull/2735) Reset the locale back to 'en' after defining all locales in min/locales.js
+* [#2702](https://github.com/moment/moment/pull/2702) Week rework
+* [#2746](https://github.com/moment/moment/pull/2746) Changed September Abbreviation to "Sept" in locale-specific english
+ files and default locale file
+* [#2646](https://github.com/moment/moment/pull/2646) Fix [#2645](https://github.com/moment/moment/pull/2645) - invalid dates pre-1970
+
+* [#2641](https://github.com/moment/moment/pull/2641) Implement basic format and comma as ms separator in ISO 8601
+* [#2665](https://github.com/moment/moment/pull/2665) Implement stricter weekday parsing
+* [#2700](https://github.com/moment/moment/pull/2700) Add [Hh]mm and [Hh]mmss formatting tokens, so you can parse 123 with
+ hmm for example
+* [#2565](https://github.com/moment/moment/pull/2565) [#2835](https://github.com/moment/moment/pull/2835) Expose arguments used for moment creation with creationData
+ (fix [#2443](https://github.com/moment/moment/pull/2443))
+* [#2648](https://github.com/moment/moment/pull/2648) fix issue [#2640](https://github.com/moment/moment/pull/2640): support instanceof operator
+* [#2709](https://github.com/moment/moment/pull/2709) Add isSameOrAfter and isSameOrBefore comparison methods
+* [#2721](https://github.com/moment/moment/pull/2721) Fix moment creation from object with strings values
+* [#2740](https://github.com/moment/moment/pull/2740) Enable 'd hh:mm:ss.sss' format for durations
+* [#2766](https://github.com/moment/moment/pull/2766) [#2833](https://github.com/moment/moment/pull/2833) Alternate Clock Source Support
+
+### 2.10.6
+
+- Release July 28, 2015
+
+[#2515](https://github.com/moment/moment/pull/2515) Fix regression introduced
+in `2.10.5` related to `moment.ISO_8601` parsing.
+
+### 2.10.5 [See full changelog](https://gist.github.com/ichernev/6ec13ac7efc396da44b2)
+
+- Release July 26, 2015
+
+Important changes:
+* [#2357](https://github.com/moment/moment/pull/2357) Improve unit bubbling for ISO dates
+ this fixes day to year conversions to work around end-of-year (~365 days). As
+ a side effect 365 days is 11 months and 30 days, and 366 days is one year.
+* [#2438](https://github.com/moment/moment/pull/2438) Fix inconsistent moment.min and moment.max results
+ Return invalid result if any of the inputs is invalid
+* [#2494](https://github.com/moment/moment/pull/2494) Fix two digit year parsing with YYYY format
+ This brings the benefits of YY to YYYY
+* [#2368](https://github.com/moment/moment/pull/2368) perf: use faster form of copying dates, across the board improvement
+
+
+### 2.10.3 [See full changelog](https://gist.github.com/ichernev/f264b9bed5b00f8b1b7f)
+
+- Release May 13, 2015
+
+* add `moment.fn.to` and `moment.fn.toNow` (similar to `from` and `fromNow`)
+* new locales (Sinhalese (si), Montenegrin (me), Javanese (ja))
+* performance improvements
+
+### 2.10.2
+
+- Release April 9, 2015
+
+* fixed moment-with-locales in browser env caused by esperanto change
+
+### 2.10.1
+
+* regression: Add moment.duration.fn back
+
+### 2.10.0
+
+Ported code to es6 modules.
+
+### 2.9.0 [See full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7)
+
+- Release January 8, 2015
+
+languages:
+* [2104](https://github.com/moment/moment/issues/2104) Frisian (fy) language file with unit test
+* [2097](https://github.com/moment/moment/issues/2097) add ar-tn locale
+
+deprecations:
+* [2074](https://github.com/moment/moment/issues/2074) Implement `moment.fn.utcOffset`, deprecate `moment.fn.zone`
+
+features:
+* [2088](https://github.com/moment/moment/issues/2088) add moment.fn.isBetween
+* [2054](https://github.com/moment/moment/issues/2054) Call updateOffset when creating moment (needed for default timezone in
+ moment-timezone)
+* [1893](https://github.com/moment/moment/issues/1893) Add moment.isDate method
+* [1825](https://github.com/moment/moment/issues/1825) Implement toJSON function on Duration
+* [1809](https://github.com/moment/moment/issues/1809) Allowing moment.set() to accept a hash of units
+* [2128](https://github.com/moment/moment/issues/2128) Add firstDayOfWeek, firstDayOfYear locale getters
+* [2131](https://github.com/moment/moment/issues/2131) Add quarter diff support
+
+Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/0c9a9b49951111a27ce7)
+
+### 2.8.4 [See full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996)
+
+- Release November 19, 2014
+
+Features:
+
+* [#2000](https://github.com/moment/moment/issues/2000) Add LTS localised format that includes seconds
+* [#1960](https://github.com/moment/moment/issues/1960) added formatToken 'x' for unix offset in milliseconds #1938
+* [#1965](https://github.com/moment/moment/issues/1965) Support 24:00:00.000 to mean next day, at midnight.
+* [#2002](https://github.com/moment/moment/issues/2002) Accept 'date' key when creating moment with object
+* [#2009](https://github.com/moment/moment/issues/2009) Use native toISOString when we can
+
+Some bugfixes and language improvements -- [full changelog](https://gist.github.com/ichernev/a4fcb0a46d74e4b9b996)
+
+### 2.8.3
+
+- Release September 5, 2014
+
+Bugfixes:
+
+* [#1801](https://github.com/moment/moment/issues/1801) proper pluralization for Arabic
+* [#1833](https://github.com/moment/moment/issues/1833) improve spm integration
+* [#1871](https://github.com/moment/moment/issues/1871) fix zone bug caused by Firefox 24
+* [#1882](https://github.com/moment/moment/issues/1882) Use hh:mm in Czech
+* [#1883](https://github.com/moment/moment/issues/1883) Fix 2.8.0 regression in duration as conversions
+* [#1890](https://github.com/moment/moment/issues/1890) Faster travis builds
+* [#1892](https://github.com/moment/moment/issues/1892) Faster isBefore/After/Same
+* [#1848](https://github.com/moment/moment/issues/1848) Fix flaky month diffs
+* [#1895](https://github.com/moment/moment/issues/1895) Fix 2.8.0 regression in moment.utc with format array
+* [#1896](https://github.com/moment/moment/issues/1896) Support setting invalid instance locale (noop)
+* [#1897](https://github.com/moment/moment/issues/1897) Support moment([str]) in addition to moment([int])
+
+### 2.8.2
+
+- Release August 22, 2014
+
+Minor bugfixes:
+
+* [#1874](https://github.com/moment/moment/issues/1874) use `Object.prototype.hasOwnProperty`
+ instead of `obj.hasOwnProperty` (ie8 bug)
+* [#1873](https://github.com/moment/moment/issues/1873) add `duration#toString()`
+* [#1859](https://github.com/moment/moment/issues/1859) better month/weekday names in norwegian
+* [#1812](https://github.com/moment/moment/issues/1812) meridiem parsing for greek
+* [#1804](https://github.com/moment/moment/issues/1804) spanish del -> de
+* [#1800](https://github.com/moment/moment/issues/1800) korean LT improvement
+
+### 2.8.1
+
+- Release August 1, 2014
+
+* bugfix [#1813](https://github.com/moment/moment/issues/1813): fix moment().lang([key]) incompatibility
+
+### 2.8.0 [See changelog](https://gist.github.com/ichernev/ac3899324a5fa6c8c9b4)
+
+- Release July 31, 2014
+
+* incompatible changes
+ * [#1761](https://github.com/moment/moment/issues/1761): moments created without a language are no longer following the global language, in case it changes. Only newly created moments take the global language by default. In case you're affected by this, wait, comment on [#1797](https://github.com/moment/moment/issues/1797) and wait for a proper reimplementation
+ * [#1642](https://github.com/moment/moment/issues/1642): 45 days is no longer "a month" according to humanize, cutoffs for month, and year have changed. Hopefully your code does not depend on a particular answer from humanize (which it shouldn't anyway)
+ * [#1784](https://github.com/moment/moment/issues/1784): if you use the human readable English datetime format in a weird way (like storing them in a database) that would break when the format changes you're at risk.
+
+* deprecations (old behavior will be dropped in 3.0)
+ * [#1761](https://github.com/moment/moment/issues/1761) `lang` is renamed to `locale`, `langData` -> `localeData`. Also there is now `defineLocale` that should be used when creating new locales
+ * [#1763](https://github.com/moment/moment/issues/1763) `add(unit, value)` and `subtract(unit, value)` are now deprecated. Use `add(value, unit)` and `subtract(value, unit)` instead.
+ * [#1759](https://github.com/moment/moment/issues/1759) rename `duration.toIsoString` to `duration.toISOString`. The js standard library and moment's `toISOString` follow that convention.
+
+* new locales
+ * [#1789](https://github.com/moment/moment/issues/1789) Tibetan (bo)
+ * [#1786](https://github.com/moment/moment/issues/1786) Africaans (af)
+ * [#1778](https://github.com/moment/moment/issues/1778) Burmese (my)
+ * [#1727](https://github.com/moment/moment/issues/1727) Belarusian (be)
+
+* bugfixes, locale bugfixes, performance improvements, features
+
+### 2.7.0 [See changelog](https://gist.github.com/ichernev/b0a3d456d5a84c9901d7)
+
+- Release June 12, 2014
+
+* new languages
+
+ * [#1678](https://github.com/moment/moment/issues/1678) Bengali (bn)
+ * [#1628](https://github.com/moment/moment/issues/1628) Azerbaijani (az)
+ * [#1633](https://github.com/moment/moment/issues/1633) Arabic, Saudi Arabia (ar-sa)
+ * [#1648](https://github.com/moment/moment/issues/1648) Austrian German (de-at)
+
+* features
+
+ * [#1663](https://github.com/moment/moment/issues/1663) configurable relative time thresholds
+ * [#1554](https://github.com/moment/moment/issues/1554) support anchor time in moment.calendar
+ * [#1693](https://github.com/moment/moment/issues/1693) support moment.ISO_8601 as parsing format
+ * [#1637](https://github.com/moment/moment/issues/1637) add moment.min and moment.max and deprecate min/max instance methods
+ * [#1704](https://github.com/moment/moment/issues/1704) support string value in add/subtract
+ * [#1647](https://github.com/moment/moment/issues/1647) add spm support (package manager)
+
+* bugfixes
+
+### 2.6.0 [See changelog](https://gist.github.com/ichernev/10544682)
+
+- Release April 12 , 2014
+
+* languages
+ * [#1529](https://github.com/moment/moment/issues/1529) Serbian-Cyrillic (sr-cyr)
+ * [#1544](https://github.com/moment/moment/issues/1544), [#1546](https://github.com/moment/moment/issues/1546) Khmer Cambodia (km)
+
+* features
+ * [#1419](https://github.com/moment/moment/issues/1419), [#1468](https://github.com/moment/moment/issues/1468), [#1467](https://github.com/moment/moment/issues/1467), [#1546](https://github.com/moment/moment/issues/1546) better handling of timezone-d moments around DST
+ * [#1462](https://github.com/moment/moment/issues/1462) add weeksInYear and isoWeeksInYear
+ * [#1475](https://github.com/moment/moment/issues/1475) support ordinal parsing
+ * [#1499](https://github.com/moment/moment/issues/1499) composer support
+ * [#1577](https://github.com/moment/moment/issues/1577), [#1604](https://github.com/moment/moment/issues/1604) put Date parsing in moment.createFromInputFallback so it can be properly deprecated and controlled in the future
+ * [#1545](https://github.com/moment/moment/issues/1545) extract two-digit year parsing in moment.parseTwoDigitYear, so it can be overwritten
+ * [#1590](https://github.com/moment/moment/issues/1590) (see [#1574](https://github.com/moment/moment/issues/1574)) set AMD global before module definition to better support non AMD module dependencies used in AMD environment
+ * [#1589](https://github.com/moment/moment/issues/1589) remove global in Node.JS environment (was not working before, nobody complained, was scheduled for removal anyway)
+ * [#1586](https://github.com/moment/moment/issues/1586) support quarter setting and parsing
+
+* 18 bugs fixed
+
+### 2.5.1
+
+- Release January 22, 2014
+
+* languages
+ * [#1392](https://github.com/moment/moment/issues/1392) Armenian (hy-am)
+
+* bugfixes
+ * [#1429](https://github.com/moment/moment/issues/1429) fixes [#1423](https://github.com/moment/moment/issues/1423) weird chrome-32 bug with js object creation
+ * [#1421](https://github.com/moment/moment/issues/1421) remove html entities from Welsh
+ * [#1418](https://github.com/moment/moment/issues/1418) fixes [#1401](https://github.com/moment/moment/issues/1401) improved non-padded tokens in strict matching
+ * [#1417](https://github.com/moment/moment/issues/1417) fixes [#1404](https://github.com/moment/moment/issues/1404) handle buggy moment object created by property cloning
+ * [#1398](https://github.com/moment/moment/issues/1398) fixes [#1397](https://github.com/moment/moment/issues/1397) fix Arabic-like week number parsing
+ * [#1396](https://github.com/moment/moment/issues/1396) add leftZeroFill(4) to GGGG and gggg formats
+ * [#1373](https://github.com/moment/moment/issues/1373) use lowercase for months and days in Catalan
+
+* testing
+ * [#1374](https://github.com/moment/moment/issues/1374) run tests on multiple browser/os combos via SauceLabs and Travis
+
+### 2.5.0 [See changelog](https://gist.github.com/ichernev/8104451)
+
+- Release Dec 24, 2013
+
+* New languages
+ * Luxemburish (lb) [1247](https://github.com/moment/moment/issues/1247)
+ * Serbian (rs) [1319](https://github.com/moment/moment/issues/1319)
+ * Tamil (ta) [1324](https://github.com/moment/moment/issues/1324)
+ * Macedonian (mk) [1337](https://github.com/moment/moment/issues/1337)
+
+* Features
+ * [1311](https://github.com/moment/moment/issues/1311) Add quarter getter and format token `Q`
+ * [1303](https://github.com/moment/moment/issues/1303) strict parsing now respects number of digits per token (fix [1196](https://github.com/moment/moment/issues/1196))
+ * 0d30bb7 add jspm support
+ * [1347](https://github.com/moment/moment/issues/1347) improve zone parsing
+ * [1362](https://github.com/moment/moment/issues/1362) support merideam parsing in Korean
+
+* 22 bugfixes
+
+### 2.4.0
+
+- Release Oct 27, 2013
+
+* **Deprecate** globally exported moment, will be removed in next major
+* New languages
+ * Farose (fo) [#1206](https://github.com/moment/moment/issues/1206)
+ * Tagalog/Filipino (tl-ph) [#1197](https://github.com/moment/moment/issues/1197)
+ * Welsh (cy) [#1215](https://github.com/moment/moment/issues/1215)
+* Bugfixes
+ * properly handle Z at the end of iso RegExp [#1187](https://github.com/moment/moment/issues/1187)
+ * chinese meridian time improvements [#1076](https://github.com/moment/moment/issues/1076)
+ * fix language tests [#1177](https://github.com/moment/moment/issues/1177)
+ * remove some failing tests (that should have never existed :))
+ [#1185](https://github.com/moment/moment/issues/1185)
+ [#1183](https://github.com/moment/moment/issues/1183)
+ * handle russian noun cases in weird cases [#1195](https://github.com/moment/moment/issues/1195)
+
+### 2.3.1
+
+- Release Oct 9, 2013
+
+Removed a trailing comma [1169] and fixed a bug with `months`, `weekdays` getters [#1171](https://github.com/moment/moment/issues/1171).
+
+### 2.3.0 [See changelog](https://gist.github.com/ichernev/6864354)
+
+- Release Oct 7, 2013
+
+Changed isValid, added strict parsing.
+Week tokens parsing.
+
+### 2.2.1
+
+- Release Sep 12, 2013
+
+Fixed bug in string prototype test.
+Updated authors and contributors.
+
+### 2.2.0 [See changelog](https://gist.github.com/ichernev/00f837a9baf46a3565e4)
+
+- Release Sep 11, 2013
+
+Added bower support.
+
+Language files now use UMD.
+
+Creating moment defaults to current date/month/year.
+
+Added a bundle of moment and all language files.
+
+### 2.1.0 [See changelog](https://gist.github.com/timrwood/b8c2d90d528eddb53ab5)
+
+- Release Jul 8, 2013
+
+Added better week support.
+
+Added ability to set offset with `moment#zone`.
+
+Added ability to set month or weekday from a string.
+
+Added `moment#min` and `moment#max`
+
+### 2.0.0 [See changelog](https://gist.github.com/timrwood/e72f2eef320ed9e37c51)
+
+- Release Feb 9, 2013
+
+Added short form localized tokens.
+
+Added ability to define language a string should be parsed in.
+
+Added support for reversed add/subtract arguments.
+
+Added support for `endOf('week')` and `startOf('week')`.
+
+Fixed the logic for `moment#diff(Moment, 'months')` and `moment#diff(Moment, 'years')`
+
+`moment#diff` now floors instead of rounds.
+
+Normalized `moment#toString`.
+
+Added `isSame`, `isAfter`, and `isBefore` methods.
+
+Added better week support.
+
+Added `moment#toJSON`
+
+Bugfix: Fixed parsing of first century dates
+
+Bugfix: Parsing 10Sep2001 should work as expected
+
+Bugfix: Fixed weirdness with `moment.utc()` parsing.
+
+Changed language ordinal method to return the number + ordinal instead of just the ordinal.
+
+Changed two digit year parsing cutoff to match strptime.
+
+Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.
+
+Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.
+
+Removed the lang data objects from the top level namespace.
+
+Duplicate `Date` passed to `moment()` instead of referencing it.
+
+### 1.7.2 [See discussion](https://github.com/timrwood/moment/issues/456)
+
+- Release Oct 2, 2012
+
+Bugfixes
+
+### 1.7.1 [See discussion](https://github.com/timrwood/moment/issues/384)
+
+- Release Oct 1, 2012
+
+Bugfixes
+
+### 1.7.0 [See discussion](https://github.com/timrwood/moment/issues/288)
+
+- Release Jul 26, 2012
+
+Added `moment.fn.endOf()` and `moment.fn.startOf()`.
+
+Added validation via `moment.fn.isValid()`.
+
+Made formatting method 3x faster. http://jsperf.com/momentjs-cached-format-functions
+
+Add support for month/weekday callbacks in `moment.fn.format()`
+
+Added instance specific languages.
+
+Added two letter weekday abbreviations with the formatting token `dd`.
+
+Various language updates.
+
+Various bugfixes.
+
+### 1.6.0 [See discussion](https://github.com/timrwood/moment/pull/268)
+
+- Release Apr 26, 2012
+
+Added Durations.
+
+Revamped parser to support parsing non-separated strings (YYYYMMDD vs YYYY-MM-DD).
+
+Added support for millisecond parsing and formatting tokens (S SS SSS)
+
+Added a getter for `moment.lang()`
+
+Various bugfixes.
+
+There are a few things deprecated in the 1.6.0 release.
+
+1. The format tokens `z` and `zz` (timezone abbreviations like EST CST MST etc) will no longer be supported. Due to inconsistent browser support, we are unable to consistently produce this value. See [this issue](https://github.com/timrwood/moment/issues/162) for more background.
+
+2. The method `moment.fn.native` is deprecated in favor of `moment.fn.toDate`. There continue to be issues with Google Closure Compiler throwing errors when using `native`, even in valid instances.
+
+3. The way to customize am/pm strings is being changed. This would only affect you if you created a custom language file. For more information, see [this issue](https://github.com/timrwood/moment/pull/222).
+
+### 1.5.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=10&page=1&state=closed)
+
+- Release Mar 20, 2012
+
+Added UTC mode.
+
+Added automatic ISO8601 parsing.
+
+Various bugfixes.
+
+### 1.4.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=8&state=closed)
+
+- Release Feb 4, 2012
+
+Added `moment.fn.toDate` as a replacement for `moment.fn.native`.
+
+Added `moment.fn.sod` and `moment.fn.eod` to get the start and end of day.
+
+Various bugfixes.
+
+### 1.3.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=7&state=closed)
+
+- Release Jan 5, 2012
+
+Added support for parsing month names in the current language.
+
+Added escape blocks for parsing tokens.
+
+Added `moment.fn.calendar` to format strings like 'Today 2:30 PM', 'Tomorrow 1:25 AM', and 'Last Sunday 4:30 AM'.
+
+Added `moment.fn.day` as a setter.
+
+Various bugfixes
+
+### 1.2.0 [See milestone](https://github.com/timrwood/moment/issues?milestone=4&state=closed)
+
+- Release Dec 7, 2011
+
+Added timezones to parser and formatter.
+
+Added `moment.fn.isDST`.
+
+Added `moment.fn.zone` to get the timezone offset in minutes.
+
+### 1.1.2 [See milestone](https://github.com/timrwood/moment/issues?milestone=6&state=closed)
+
+- Release Nov 18, 2011
+
+Various bugfixes
+
+### 1.1.1 [See milestone](https://github.com/timrwood/moment/issues?milestone=5&state=closed)
+
+- Release Nov 12, 2011
+
+Added time specific diffs (months, days, hours, etc)
+
+### 1.1.0
+
+- Release Oct 28, 2011
+
+Added `moment.fn.format` localized masks. 'L LL LLL LLLL' [issue 29](https://github.com/timrwood/moment/pull/29)
+
+Fixed [issue 31](https://github.com/timrwood/moment/pull/31).
+
+### 1.0.1
+
+- Release Oct 18, 2011
+
+Added `moment.version` to get the current version.
+
+Removed `window !== undefined` when checking if module exists to support browserify. [issue 25](https://github.com/timrwood/moment/pull/25)
+
+### 1.0.0
+
+- Release
+
+Added convenience methods for getting and setting date parts.
+
+Added better support for `moment.add()`.
+
+Added better lang support in NodeJS.
+
+Renamed library from underscore.date to Moment.js
+
+### 0.6.1
+
+- Release Oct 12, 2011
+
+Added Portuguese, Italian, and French language support
+
+### 0.6.0
+
+- Release Sep 21, 2011
+
+Added _date.lang() support.
+Added support for passing multiple formats to try to parse a date. _date("07-10-1986", ["MM-DD-YYYY", "YYYY-MM-DD"]);
+Made parse from string and single format 25% faster.
+
+### 0.5.2
+
+- Release Jul 11, 2011
+
+Bugfix for [issue 8](https://github.com/timrwood/underscore.date/pull/8) and [issue 9](https://github.com/timrwood/underscore.date/pull/9).
+
+### 0.5.1
+
+- Release Jun 17, 2011
+
+Bugfix for [issue 5](https://github.com/timrwood/underscore.date/pull/5).
+
+### 0.5.0
+
+- Release Jun 13, 2011
+
+Dropped the redundant `_date.date()` in favor of `_date()`.
+Removed `_date.now()`, as it is a duplicate of `_date()` with no parameters.
+Removed `_date.isLeapYear(yearNumber)`. Use `_date([yearNumber]).isLeapYear()` instead.
+Exposed customization options through the `_date.relativeTime`, `_date.weekdays`, `_date.weekdaysShort`, `_date.months`, `_date.monthsShort`, and `_date.ordinal` variables instead of the `_date.customize()` function.
+
+### 0.4.1
+
+- Release May 9, 2011
+
+Added date input formats for input strings.
+
+### 0.4.0
+
+- Release May 9, 2011
+
+Added underscore.date to npm. Removed dependencies on underscore.
+
+### 0.3.2
+
+- Release Apr 9, 2011
+
+Added `'z'` and `'zz'` to `_.date().format()`. Cleaned up some redundant code to trim off some bytes.
+
+### 0.3.1
+
+- Release Mar 25, 2011
+
+Cleaned up the namespace. Moved all date manipulation and display functions to the _.date() object.
+
+### 0.3.0
+
+- Release Mar 25, 2011
+
+Switched to the Underscore methodology of not mucking with the native objects' prototypes.
+Made chaining possible.
+
+### 0.2.1
+
+- Release
+
+Changed date names to be a more pseudo standardized 'dddd, MMMM Do YYYY, h:mm:ss a'.
+Added `Date.prototype` functions `add`, `subtract`, `isdst`, and `isleapyear`.
+
+### 0.2.0
+
+- Release
+
+Changed function names to be more concise.
+Changed date format from php date format to custom format.
+
+### 0.1.0
+
+- Release
+
+Initial release
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/LICENSE
new file mode 100644
index 00000000000..8618b7333d6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/README.md
new file mode 100644
index 00000000000..c45e9d62450
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/README.md
@@ -0,0 +1,58 @@
+[![Join the chat at https://gitter.im/moment/moment](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/moment/moment?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
+[![NPM version][npm-version-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![MIT License][license-image]][license-url] [![Build Status][travis-image]][travis-url]
+[![Coverage Status](https://coveralls.io/repos/moment/moment/badge.svg?branch=develop)](https://coveralls.io/r/moment/moment?branch=develop)
+
+A lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.
+
+**[Documentation](http://momentjs.com/docs/)**
+
+## Port to ECMAScript 6 (version 2.10.0)
+
+Moment 2.10.0 does not bring any new features, but the code is now written in
+ECMAScript 6 modules and placed inside `src/`. Previously `moment.js`, `locale/*.js` and
+`test/moment/*.js`, `test/locale/*.js` contained the source of the project. Now
+the source is in `src/`, temporary build (ECMAScript 5) files are placed under
+`build/umd/` (for running tests during development), and the `moment.js` and
+`locale/*.js` files are updated only on release.
+
+If you want to use a particular revision of the code, make sure to run
+`grunt transpile update-index`, so `moment.js` and `locales/*.js` are synced
+with `src/*`. We might place that in a commit hook in the future.
+
+## Upgrading to 2.0.0
+
+There are a number of small backwards incompatible changes with version 2.0.0. [See the full descriptions here](https://gist.github.com/timrwood/e72f2eef320ed9e37c51#backwards-incompatible-changes)
+
+ * Changed language ordinal method to return the number + ordinal instead of just the ordinal.
+
+ * Changed two digit year parsing cutoff to match strptime.
+
+ * Removed `moment#sod` and `moment#eod` in favor of `moment#startOf` and `moment#endOf`.
+
+ * Removed `moment.humanizeDuration()` in favor of `moment.duration().humanize()`.
+
+ * Removed the lang data objects from the top level namespace.
+
+ * Duplicate `Date` passed to `moment()` instead of referencing it.
+
+## [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
+
+## [Contributing](https://github.com/moment/moment/blob/develop/CONTRIBUTING.md)
+
+We're looking for co-maintainers! If you want to become a master of time please
+write to [ichernev](https://github.com/ichernev).
+
+## License
+
+Moment.js is freely distributable under the terms of the [MIT license](https://github.com/moment/moment/blob/develop/LICENSE).
+
+[license-image]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
+[license-url]: LICENSE
+
+[npm-url]: https://npmjs.org/package/moment
+[npm-version-image]: http://img.shields.io/npm/v/moment.svg?style=flat
+[npm-downloads-image]: http://img.shields.io/npm/dm/moment.svg?style=flat
+
+[travis-url]: http://travis-ci.org/moment/moment
+[travis-image]: http://img.shields.io/travis/moment/moment/develop.svg?style=flat
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/bower.json
new file mode 100644
index 00000000000..992086f26cd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/bower.json
@@ -0,0 +1,25 @@
+{
+ "name": "moment",
+ "license": "MIT",
+ "main": "moment.js",
+ "ignore": [
+ "**/.*",
+ "benchmarks",
+ "bower_components",
+ "meteor",
+ "node_modules",
+ "scripts",
+ "tasks",
+ "test",
+ "component.json",
+ "composer.json",
+ "CONTRIBUTING.md",
+ "ender.js",
+ "Gruntfile.js",
+ "Moment.js.nuspec",
+ "package.js",
+ "package.json",
+ "ISSUE_TEMPLATE.md",
+ "typing-tests"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/af.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/af.js
new file mode 100644
index 00000000000..08bb705022f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/af.js
@@ -0,0 +1,73 @@
+//! moment.js locale configuration
+//! locale : Afrikaans [af]
+//! author : Werner Mollentze : https://github.com/wernerm
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var af = moment.defineLocale('af', {
+ months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
+ weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+ weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+ meridiemParse: /vm|nm/i,
+ isPM : function (input) {
+ return /^nm$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'vm' : 'VM';
+ } else {
+ return isLower ? 'nm' : 'NM';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Vandag om] LT',
+ nextDay : '[Môre om] LT',
+ nextWeek : 'dddd [om] LT',
+ lastDay : '[Gister om] LT',
+ lastWeek : '[Laas] dddd [om] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'oor %s',
+ past : '%s gelede',
+ s : '\'n paar sekondes',
+ m : '\'n minuut',
+ mm : '%d minute',
+ h : '\'n uur',
+ hh : '%d ure',
+ d : '\'n dag',
+ dd : '%d dae',
+ M : '\'n maand',
+ MM : '%d maande',
+ y : '\'n jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
+ },
+ week : {
+ dow : 1, // Maandag is die eerste dag van die week.
+ doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ }
+});
+
+return af;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-dz.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-dz.js
new file mode 100644
index 00000000000..f3945944635
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-dz.js
@@ -0,0 +1,59 @@
+//! moment.js locale configuration
+//! locale : Arabic (Algeria) [ar-dz]
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var arDz = moment.defineLocale('ar-dz', {
+ months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return arDz;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ly.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ly.js
new file mode 100644
index 00000000000..7180ed4ed8f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ly.js
@@ -0,0 +1,126 @@
+//! moment.js locale configuration
+//! locale : Arabic (Lybia) [ar-ly]
+//! author : Ali Hmer: https://github.com/kikoanis
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '0': '0'
+};
+var pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+};
+var plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+};
+var pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm(number),
+ str = plurals[u][pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+};
+var months = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+];
+
+var arLy = moment.defineLocale('ar-ly', {
+ months : months,
+ monthsShort : months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize('s'),
+ m : pluralize('m'),
+ mm : pluralize('m'),
+ h : pluralize('h'),
+ hh : pluralize('h'),
+ d : pluralize('d'),
+ dd : pluralize('d'),
+ M : pluralize('M'),
+ MM : pluralize('M'),
+ y : pluralize('y'),
+ yy : pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return arLy;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ma.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ma.js
new file mode 100644
index 00000000000..cbd810ba79b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-ma.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : Arabic (Morocco) [ar-ma]
+//! author : ElFadili Yassine : https://github.com/ElFadiliY
+//! author : Abdel Said : https://github.com/abdelsaid
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var arMa = moment.defineLocale('ar-ma', {
+ months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return arMa;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-sa.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-sa.js
new file mode 100644
index 00000000000..dccd0d83309
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-sa.js
@@ -0,0 +1,105 @@
+//! moment.js locale configuration
+//! locale : Arabic (Saudi Arabia) [ar-sa]
+//! author : Suhail Alkowaileet : https://github.com/xsoh
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+};
+var numberMap = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+
+var arSa = moment.defineLocale('ar-sa', {
+ months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ preparse: function (string) {
+ return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return arSa;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-tn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-tn.js
new file mode 100644
index 00000000000..5f0d38bb06e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar-tn.js
@@ -0,0 +1,59 @@
+//! moment.js locale configuration
+//! locale : Arabic (Tunisia) [ar-tn]
+//! author : Nader Toukabri : https://github.com/naderio
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var arTn = moment.defineLocale('ar-tn', {
+ months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'في %s',
+ past: 'منذ %s',
+ s: 'ثوان',
+ m: 'دقيقة',
+ mm: '%d دقائق',
+ h: 'ساعة',
+ hh: '%d ساعات',
+ d: 'يوم',
+ dd: '%d أيام',
+ M: 'شهر',
+ MM: '%d أشهر',
+ y: 'سنة',
+ yy: '%d سنوات'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return arTn;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar.js
new file mode 100644
index 00000000000..d263e4c4f8d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ar.js
@@ -0,0 +1,142 @@
+//! moment.js locale configuration
+//! locale : Arabic [ar]
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+};
+var numberMap = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+var pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+};
+var plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+};
+var pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm(number),
+ str = plurals[u][pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+};
+var months = [
+ 'كانون الثاني يناير',
+ 'شباط فبراير',
+ 'آذار مارس',
+ 'نيسان أبريل',
+ 'أيار مايو',
+ 'حزيران يونيو',
+ 'تموز يوليو',
+ 'آب أغسطس',
+ 'أيلول سبتمبر',
+ 'تشرين الأول أكتوبر',
+ 'تشرين الثاني نوفمبر',
+ 'كانون الأول ديسمبر'
+];
+
+var ar = moment.defineLocale('ar', {
+ months : months,
+ monthsShort : months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize('s'),
+ m : pluralize('m'),
+ mm : pluralize('m'),
+ h : pluralize('h'),
+ hh : pluralize('h'),
+ d : pluralize('d'),
+ dd : pluralize('d'),
+ M : pluralize('M'),
+ MM : pluralize('M'),
+ y : pluralize('y'),
+ yy : pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ar;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/az.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/az.js
new file mode 100644
index 00000000000..054cb472427
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/az.js
@@ -0,0 +1,105 @@
+//! moment.js locale configuration
+//! locale : Azerbaijani [az]
+//! author : topchiyev : https://github.com/topchiyev
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var suffixes = {
+ 1: '-inci',
+ 5: '-inci',
+ 8: '-inci',
+ 70: '-inci',
+ 80: '-inci',
+ 2: '-nci',
+ 7: '-nci',
+ 20: '-nci',
+ 50: '-nci',
+ 3: '-üncü',
+ 4: '-üncü',
+ 100: '-üncü',
+ 6: '-ncı',
+ 9: '-uncu',
+ 10: '-uncu',
+ 30: '-uncu',
+ 60: '-ıncı',
+ 90: '-ıncı'
+};
+
+var az = moment.defineLocale('az', {
+ months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
+ monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+ weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
+ weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+ weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[sabah saat] LT',
+ nextWeek : '[gələn həftə] dddd [saat] LT',
+ lastDay : '[dünən] LT',
+ lastWeek : '[keçən həftə] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s əvvəl',
+ s : 'birneçə saniyyə',
+ m : 'bir dəqiqə',
+ mm : '%d dəqiqə',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir il',
+ yy : '%d il'
+ },
+ meridiemParse: /gecə|səhər|gündüz|axşam/,
+ isPM : function (input) {
+ return /^(gündüz|axşam)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'gecə';
+ } else if (hour < 12) {
+ return 'səhər';
+ } else if (hour < 17) {
+ return 'gündüz';
+ } else {
+ return 'axşam';
+ }
+ },
+ ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '-ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return az;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/be.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/be.js
new file mode 100644
index 00000000000..e8c269f5f8f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/be.js
@@ -0,0 +1,134 @@
+//! moment.js locale configuration
+//! locale : Belarusian [be]
+//! author : Dmitry Demidov : https://github.com/demidov91
+//! author: Praleska: http://praleska.pro/
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+ 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+ 'dd': 'дзень_дні_дзён',
+ 'MM': 'месяц_месяцы_месяцаў',
+ 'yy': 'год_гады_гадоў'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвіліна' : 'хвіліну';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'гадзіна' : 'гадзіну';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+
+var be = moment.defineLocale('be', {
+ months : {
+ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+ standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+ },
+ monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
+ weekdays : {
+ format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+ standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+ },
+ weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сёння ў] LT',
+ nextDay: '[Заўтра ў] LT',
+ lastDay: '[Учора ў] LT',
+ nextWeek: function () {
+ return '[У] dddd [ў] LT';
+ },
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'праз %s',
+ past : '%s таму',
+ s : 'некалькі секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : relativeTimeWithPlural,
+ hh : relativeTimeWithPlural,
+ d : 'дзень',
+ dd : relativeTimeWithPlural,
+ M : 'месяц',
+ MM : relativeTimeWithPlural,
+ y : 'год',
+ yy : relativeTimeWithPlural
+ },
+ meridiemParse: /ночы|раніцы|дня|вечара/,
+ isPM : function (input) {
+ return /^(дня|вечара)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночы';
+ } else if (hour < 12) {
+ return 'раніцы';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечара';
+ }
+ },
+ ordinalParse: /\d{1,2}-(і|ы|га)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+ case 'D':
+ return number + '-га';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return be;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bg.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bg.js
new file mode 100644
index 00000000000..663f5be8132
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bg.js
@@ -0,0 +1,90 @@
+//! moment.js locale configuration
+//! locale : Bulgarian [bg]
+//! author : Krasen Borisov : https://github.com/kraz
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var bg = moment.defineLocale('bg', {
+ months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Днес в] LT',
+ nextDay : '[Утре в] LT',
+ nextWeek : 'dddd [в] LT',
+ lastDay : '[Вчера в] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'след %s',
+ past : 'преди %s',
+ s : 'няколко секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дни',
+ M : 'месец',
+ MM : '%d месеца',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return bg;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bn.js
new file mode 100644
index 00000000000..b6f942a6dca
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bn.js
@@ -0,0 +1,119 @@
+//! moment.js locale configuration
+//! locale : Bengali [bn]
+//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '১',
+ '2': '২',
+ '3': '৩',
+ '4': '৪',
+ '5': '৫',
+ '6': '৬',
+ '7': '৭',
+ '8': '৮',
+ '9': '৯',
+ '0': '০'
+};
+var numberMap = {
+ '১': '1',
+ '২': '2',
+ '৩': '3',
+ '৪': '4',
+ '৫': '5',
+ '৬': '6',
+ '৭': '7',
+ '৮': '8',
+ '৯': '9',
+ '০': '0'
+};
+
+var bn = moment.defineLocale('bn', {
+ months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+ monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
+ weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
+ weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+ weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm সময়',
+ LTS : 'A h:mm:ss সময়',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm সময়',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
+ },
+ calendar : {
+ sameDay : '[আজ] LT',
+ nextDay : '[আগামীকাল] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[গতকাল] LT',
+ lastWeek : '[গত] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s পরে',
+ past : '%s আগে',
+ s : 'কয়েক সেকেন্ড',
+ m : 'এক মিনিট',
+ mm : '%d মিনিট',
+ h : 'এক ঘন্টা',
+ hh : '%d ঘন্টা',
+ d : 'এক দিন',
+ dd : '%d দিন',
+ M : 'এক মাস',
+ MM : '%d মাস',
+ y : 'এক বছর',
+ yy : '%d বছর'
+ },
+ preparse: function (string) {
+ return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'রাত' && hour >= 4) ||
+ (meridiem === 'দুপুর' && hour < 5) ||
+ meridiem === 'বিকাল') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'রাত';
+ } else if (hour < 10) {
+ return 'সকাল';
+ } else if (hour < 17) {
+ return 'দুপুর';
+ } else if (hour < 20) {
+ return 'বিকাল';
+ } else {
+ return 'রাত';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return bn;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bo.js
new file mode 100644
index 00000000000..eb6db476d8d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bo.js
@@ -0,0 +1,119 @@
+//! moment.js locale configuration
+//! locale : Tibetan [bo]
+//! author : Thupten N. Chakrishar : https://github.com/vajradog
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '༡',
+ '2': '༢',
+ '3': '༣',
+ '4': '༤',
+ '5': '༥',
+ '6': '༦',
+ '7': '༧',
+ '8': '༨',
+ '9': '༩',
+ '0': '༠'
+};
+var numberMap = {
+ '༡': '1',
+ '༢': '2',
+ '༣': '3',
+ '༤': '4',
+ '༥': '5',
+ '༦': '6',
+ '༧': '7',
+ '༨': '8',
+ '༩': '9',
+ '༠': '0'
+};
+
+var bo = moment.defineLocale('bo', {
+ months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
+ weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[དི་རིང] LT',
+ nextDay : '[སང་ཉིན] LT',
+ nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
+ lastDay : '[ཁ་སང] LT',
+ lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ལ་',
+ past : '%s སྔན་ལ',
+ s : 'ལམ་སང',
+ m : 'སྐར་མ་གཅིག',
+ mm : '%d སྐར་མ',
+ h : 'ཆུ་ཚོད་གཅིག',
+ hh : '%d ཆུ་ཚོད',
+ d : 'ཉིན་གཅིག',
+ dd : '%d ཉིན་',
+ M : 'ཟླ་བ་གཅིག',
+ MM : '%d ཟླ་བ',
+ y : 'ལོ་གཅིག',
+ yy : '%d ལོ'
+ },
+ preparse: function (string) {
+ return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
+ (meridiem === 'ཉིན་གུང' && hour < 5) ||
+ meridiem === 'དགོང་དག') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'མཚན་མོ';
+ } else if (hour < 10) {
+ return 'ཞོགས་ཀས';
+ } else if (hour < 17) {
+ return 'ཉིན་གུང';
+ } else if (hour < 20) {
+ return 'དགོང་དག';
+ } else {
+ return 'མཚན་མོ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return bo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/br.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/br.js
new file mode 100644
index 00000000000..4e1829962f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/br.js
@@ -0,0 +1,108 @@
+//! moment.js locale configuration
+//! locale : Breton [br]
+//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function relativeTimeWithMutation(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'munutenn',
+ 'MM': 'miz',
+ 'dd': 'devezh'
+ };
+ return number + ' ' + mutation(format[key], number);
+}
+function specialMutationForYears(number) {
+ switch (lastNumber(number)) {
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 9:
+ return number + ' bloaz';
+ default:
+ return number + ' vloaz';
+ }
+}
+function lastNumber(number) {
+ if (number > 9) {
+ return lastNumber(number % 10);
+ }
+ return number;
+}
+function mutation(text, number) {
+ if (number === 2) {
+ return softMutation(text);
+ }
+ return text;
+}
+function softMutation(text) {
+ var mutationTable = {
+ 'm': 'v',
+ 'b': 'v',
+ 'd': 'z'
+ };
+ if (mutationTable[text.charAt(0)] === undefined) {
+ return text;
+ }
+ return mutationTable[text.charAt(0)] + text.substring(1);
+}
+
+var br = moment.defineLocale('br', {
+ months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
+ monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+ weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
+ weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+ weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h[e]mm A',
+ LTS : 'h[e]mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [a viz] MMMM YYYY',
+ LLL : 'D [a viz] MMMM YYYY h[e]mm A',
+ LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
+ },
+ calendar : {
+ sameDay : '[Hiziv da] LT',
+ nextDay : '[Warc\'hoazh da] LT',
+ nextWeek : 'dddd [da] LT',
+ lastDay : '[Dec\'h da] LT',
+ lastWeek : 'dddd [paset da] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'a-benn %s',
+ past : '%s \'zo',
+ s : 'un nebeud segondennoù',
+ m : 'ur vunutenn',
+ mm : relativeTimeWithMutation,
+ h : 'un eur',
+ hh : '%d eur',
+ d : 'un devezh',
+ dd : relativeTimeWithMutation,
+ M : 'ur miz',
+ MM : relativeTimeWithMutation,
+ y : 'ur bloaz',
+ yy : specialMutationForYears
+ },
+ ordinalParse: /\d{1,2}(añ|vet)/,
+ ordinal : function (number) {
+ var output = (number === 1) ? 'añ' : 'vet';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return br;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bs.js
new file mode 100644
index 00000000000..f2b8725c531
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/bs.js
@@ -0,0 +1,143 @@
+//! moment.js locale configuration
+//! locale : Bosnian [bs]
+//! author : Nedim Cholich : https://github.com/frontyard
+//! based on (hr) translation by Bojan Marković
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+var bs = moment.defineLocale('bs', {
+ months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : 'dan',
+ dd : translate,
+ M : 'mjesec',
+ MM : translate,
+ y : 'godinu',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return bs;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ca.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ca.js
new file mode 100644
index 00000000000..3a4c62f1781
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ca.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Catalan [ca]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ca = moment.defineLocale('ca', {
+ months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
+ monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
+ weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+ weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextDay : function () {
+ return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastDay : function () {
+ return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'd\'aquí %s',
+ past : 'fa %s',
+ s : 'uns segons',
+ m : 'un minut',
+ mm : '%d minuts',
+ h : 'una hora',
+ hh : '%d hores',
+ d : 'un dia',
+ dd : '%d dies',
+ M : 'un mes',
+ MM : '%d mesos',
+ y : 'un any',
+ yy : '%d anys'
+ },
+ ordinalParse: /\d{1,2}(r|n|t|è|a)/,
+ ordinal : function (number, period) {
+ var output = (number === 1) ? 'r' :
+ (number === 2) ? 'n' :
+ (number === 3) ? 'r' :
+ (number === 4) ? 't' : 'è';
+ if (period === 'w' || period === 'W') {
+ output = 'a';
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return ca;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cs.js
new file mode 100644
index 00000000000..35a8a5a781e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cs.js
@@ -0,0 +1,172 @@
+//! moment.js locale configuration
+//! locale : Czech [cs]
+//! author : petrbela : https://github.com/petrbela
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');
+var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
+function plural(n) {
+ return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'minuty' : 'minut');
+ } else {
+ return result + 'minutami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'hodiny' : 'hodin');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'dny' : 'dní');
+ } else {
+ return result + 'dny';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'měsíce' : 'měsíců');
+ } else {
+ return result + 'měsíci';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'roky' : 'let');
+ } else {
+ return result + 'lety';
+ }
+ break;
+ }
+}
+
+var cs = moment.defineLocale('cs', {
+ months : months,
+ monthsShort : monthsShort,
+ monthsParse : (function (months, monthsShort) {
+ var i, _monthsParse = [];
+ for (i = 0; i < 12; i++) {
+ // use custom parser to solve problem with July (červenec)
+ _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+ }
+ return _monthsParse;
+ }(months, monthsShort)),
+ shortMonthsParse : (function (monthsShort) {
+ var i, _shortMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
+ }
+ return _shortMonthsParse;
+ }(monthsShort)),
+ longMonthsParse : (function (months) {
+ var i, _longMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
+ }
+ return _longMonthsParse;
+ }(months)),
+ weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+ weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
+ weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm',
+ l : 'D. M. YYYY'
+ },
+ calendar : {
+ sameDay: '[dnes v] LT',
+ nextDay: '[zítra v] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v neděli v] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [v] LT';
+ case 3:
+ return '[ve středu v] LT';
+ case 4:
+ return '[ve čtvrtek v] LT';
+ case 5:
+ return '[v pátek v] LT';
+ case 6:
+ return '[v sobotu v] LT';
+ }
+ },
+ lastDay: '[včera v] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulou neděli v] LT';
+ case 1:
+ case 2:
+ return '[minulé] dddd [v] LT';
+ case 3:
+ return '[minulou středu v] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [v] LT';
+ case 6:
+ return '[minulou sobotu v] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'před %s',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse : /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return cs;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cv.js
new file mode 100644
index 00000000000..59ad1445a56
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cv.js
@@ -0,0 +1,63 @@
+//! moment.js locale configuration
+//! locale : Chuvash [cv]
+//! author : Anatoly Mironov : https://github.com/mirontoli
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var cv = moment.defineLocale('cv', {
+ months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
+ monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
+ weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
+ weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
+ weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
+ LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+ LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
+ },
+ calendar : {
+ sameDay: '[Паян] LT [сехетре]',
+ nextDay: '[Ыран] LT [сехетре]',
+ lastDay: '[Ӗнер] LT [сехетре]',
+ nextWeek: '[Ҫитес] dddd LT [сехетре]',
+ lastWeek: '[Иртнӗ] dddd LT [сехетре]',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (output) {
+ var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
+ return output + affix;
+ },
+ past : '%s каялла',
+ s : 'пӗр-ик ҫеккунт',
+ m : 'пӗр минут',
+ mm : '%d минут',
+ h : 'пӗр сехет',
+ hh : '%d сехет',
+ d : 'пӗр кун',
+ dd : '%d кун',
+ M : 'пӗр уйӑх',
+ MM : '%d уйӑх',
+ y : 'пӗр ҫул',
+ yy : '%d ҫул'
+ },
+ ordinalParse: /\d{1,2}-мӗш/,
+ ordinal : '%d-мӗш',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return cv;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cy.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cy.js
new file mode 100644
index 00000000000..022b1062574
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/cy.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Welsh [cy]
+//! author : Robert Allen : https://github.com/robgallen
+//! author : https://github.com/ryangreaves
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var cy = moment.defineLocale('cy', {
+ months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
+ monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
+ weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
+ weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+ weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ // time formats are the same as en-gb
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[Heddiw am] LT',
+ nextDay: '[Yfory am] LT',
+ nextWeek: 'dddd [am] LT',
+ lastDay: '[Ddoe am] LT',
+ lastWeek: 'dddd [diwethaf am] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'mewn %s',
+ past: '%s yn ôl',
+ s: 'ychydig eiliadau',
+ m: 'munud',
+ mm: '%d munud',
+ h: 'awr',
+ hh: '%d awr',
+ d: 'diwrnod',
+ dd: '%d diwrnod',
+ M: 'mis',
+ MM: '%d mis',
+ y: 'blwyddyn',
+ yy: '%d flynedd'
+ },
+ ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+ // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+ ordinal: function (number) {
+ var b = number,
+ output = '',
+ lookup = [
+ '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
+ 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
+ ];
+ if (b > 20) {
+ if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+ output = 'fed'; // not 30ain, 70ain or 90ain
+ } else {
+ output = 'ain';
+ }
+ } else if (b > 0) {
+ output = lookup[b];
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return cy;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/da.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/da.js
new file mode 100644
index 00000000000..223c3d7e45a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/da.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : Danish [da]
+//! author : Ulrik Nielsen : https://github.com/mrbase
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var da = moment.defineLocale('da', {
+ months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[I dag kl.] LT',
+ nextDay : '[I morgen kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[I går kl.] LT',
+ lastWeek : '[sidste] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'få sekunder',
+ m : 'et minut',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dage',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'et år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return da;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de-at.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de-at.js
new file mode 100644
index 00000000000..e72c124dc50
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de-at.js
@@ -0,0 +1,79 @@
+//! moment.js locale configuration
+//! locale : German (Austria) [de-at]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Martin Groller : https://github.com/MadMG
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+var deAt = moment.defineLocale('de-at', {
+ months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime,
+ mm : '%d Minuten',
+ h : processRelativeTime,
+ hh : '%d Stunden',
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return deAt;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de.js
new file mode 100644
index 00000000000..bb7197e48bb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/de.js
@@ -0,0 +1,78 @@
+//! moment.js locale configuration
+//! locale : German [de]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+var de = moment.defineLocale('de', {
+ months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime,
+ mm : '%d Minuten',
+ h : processRelativeTime,
+ hh : '%d Stunden',
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return de;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/dv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/dv.js
new file mode 100644
index 00000000000..065df78c364
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/dv.js
@@ -0,0 +1,100 @@
+//! moment.js locale configuration
+//! locale : Maldivian [dv]
+//! author : Jawish Hameed : https://github.com/jawish
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var months = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+];
+var weekdays = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+];
+
+var dv = moment.defineLocale('dv', {
+ months : months,
+ monthsShort : months,
+ weekdays : weekdays,
+ weekdaysShort : weekdays,
+ weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+ longDateFormat : {
+
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/M/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /މކ|މފ/,
+ isPM : function (input) {
+ return 'މފ' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'މކ';
+ } else {
+ return 'މފ';
+ }
+ },
+ calendar : {
+ sameDay : '[މިއަދު] LT',
+ nextDay : '[މާދަމާ] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[އިއްޔެ] LT',
+ lastWeek : '[ފާއިތުވި] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ތެރޭގައި %s',
+ past : 'ކުރިން %s',
+ s : 'ސިކުންތުކޮޅެއް',
+ m : 'މިނިޓެއް',
+ mm : 'މިނިޓު %d',
+ h : 'ގަޑިއިރެއް',
+ hh : 'ގަޑިއިރު %d',
+ d : 'ދުވަހެއް',
+ dd : 'ދުވަސް %d',
+ M : 'މަހެއް',
+ MM : 'މަސް %d',
+ y : 'އަހަރެއް',
+ yy : 'އަހަރު %d'
+ },
+ preparse: function (string) {
+ return string.replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/,/g, '،');
+ },
+ week : {
+ dow : 7, // Sunday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return dv;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/el.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/el.js
new file mode 100644
index 00000000000..8396665ce76
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/el.js
@@ -0,0 +1,98 @@
+//! moment.js locale configuration
+//! locale : Greek [el]
+//! author : Aggelos Karalias : https://github.com/mehiel
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+}
+
+
+var el = moment.defineLocale('el', {
+ monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
+ monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
+ months : function (momentToFormat, format) {
+ if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
+ return this._monthsGenitiveEl[momentToFormat.month()];
+ } else {
+ return this._monthsNominativeEl[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+ weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
+ weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+ weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'μμ' : 'ΜΜ';
+ } else {
+ return isLower ? 'πμ' : 'ΠΜ';
+ }
+ },
+ isPM : function (input) {
+ return ((input + '').toLowerCase()[0] === 'μ');
+ },
+ meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendarEl : {
+ sameDay : '[Σήμερα {}] LT',
+ nextDay : '[Αύριο {}] LT',
+ nextWeek : 'dddd [{}] LT',
+ lastDay : '[Χθες {}] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 6:
+ return '[το προηγούμενο] dddd [{}] LT';
+ default:
+ return '[την προηγούμενη] dddd [{}] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ calendar : function (key, mom) {
+ var output = this._calendarEl[key],
+ hours = mom && mom.hours();
+ if (isFunction(output)) {
+ output = output.apply(mom);
+ }
+ return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
+ },
+ relativeTime : {
+ future : 'σε %s',
+ past : '%s πριν',
+ s : 'λίγα δευτερόλεπτα',
+ m : 'ένα λεπτό',
+ mm : '%d λεπτά',
+ h : 'μία ώρα',
+ hh : '%d ώρες',
+ d : 'μία μέρα',
+ dd : '%d μέρες',
+ M : 'ένας μήνας',
+ MM : '%d μήνες',
+ y : 'ένας χρόνος',
+ yy : '%d χρόνια'
+ },
+ ordinalParse: /\d{1,2}η/,
+ ordinal: '%dη',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4st is the first week of the year.
+ }
+});
+
+return el;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-au.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-au.js
new file mode 100644
index 00000000000..d13415796e2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-au.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : English (Australia) [en-au]
+//! author : Jared Morse : https://github.com/jarcoal
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var enAu = moment.defineLocale('en-au', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return enAu;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ca.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ca.js
new file mode 100644
index 00000000000..358b1837a2e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ca.js
@@ -0,0 +1,63 @@
+//! moment.js locale configuration
+//! locale : English (Canada) [en-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var enCa = moment.defineLocale('en-ca', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'YYYY-MM-DD',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
+
+return enCa;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-gb.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-gb.js
new file mode 100644
index 00000000000..ed382905f35
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-gb.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : English (United Kingdom) [en-gb]
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var enGb = moment.defineLocale('en-gb', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return enGb;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ie.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ie.js
new file mode 100644
index 00000000000..54c3065ebe7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-ie.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : English (Ireland) [en-ie]
+//! author : Chris Cartlidge : https://github.com/chriscartlidge
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var enIe = moment.defineLocale('en-ie', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return enIe;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-nz.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-nz.js
new file mode 100644
index 00000000000..c6c60302c65
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/en-nz.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : English (New Zealand) [en-nz]
+//! author : Luke McGregor : https://github.com/lukemcgregor
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var enNz = moment.defineLocale('en-nz', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return enNz;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eo.js
new file mode 100644
index 00000000000..75193181b91
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eo.js
@@ -0,0 +1,73 @@
+//! moment.js locale configuration
+//! locale : Esperanto [eo]
+//! author : Colin Dean : https://github.com/colindean
+//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var eo = moment.defineLocale('eo', {
+ months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
+ weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
+ weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D[-an de] MMMM, YYYY',
+ LLL : 'D[-an de] MMMM, YYYY HH:mm',
+ LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
+ },
+ meridiemParse: /[ap]\.t\.m/i,
+ isPM: function (input) {
+ return input.charAt(0).toLowerCase() === 'p';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'p.t.m.' : 'P.T.M.';
+ } else {
+ return isLower ? 'a.t.m.' : 'A.T.M.';
+ }
+ },
+ calendar : {
+ sameDay : '[Hodiaŭ je] LT',
+ nextDay : '[Morgaŭ je] LT',
+ nextWeek : 'dddd [je] LT',
+ lastDay : '[Hieraŭ je] LT',
+ lastWeek : '[pasinta] dddd [je] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'je %s',
+ past : 'antaŭ %s',
+ s : 'sekundoj',
+ m : 'minuto',
+ mm : '%d minutoj',
+ h : 'horo',
+ hh : '%d horoj',
+ d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
+ dd : '%d tagoj',
+ M : 'monato',
+ MM : '%d monatoj',
+ y : 'jaro',
+ yy : '%d jaroj'
+ },
+ ordinalParse: /\d{1,2}a/,
+ ordinal : '%da',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return eo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es-do.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es-do.js
new file mode 100644
index 00000000000..e86282ad0cd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es-do.js
@@ -0,0 +1,80 @@
+//! moment.js locale configuration
+//! locale : Spanish (Dominican Republic) [es-do]
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
+var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+var esDo = moment.defineLocale('es-do', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort[m.month()];
+ } else {
+ return monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY h:mm A',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return esDo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es.js
new file mode 100644
index 00000000000..eb9e0809dfe
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/es.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Spanish [es]
+//! author : Julio Napurí : https://github.com/julionc
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
+var monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+var es = moment.defineLocale('es', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort[m.month()];
+ } else {
+ return monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return es;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/et.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/et.js
new file mode 100644
index 00000000000..dc40ac5044a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/et.js
@@ -0,0 +1,80 @@
+//! moment.js locale configuration
+//! locale : Estonian [et]
+//! author : Henry Kehlmann : https://github.com/madhenry
+//! improvements : Illimar Tambek : https://github.com/ragulka
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+ 'm' : ['ühe minuti', 'üks minut'],
+ 'mm': [number + ' minuti', number + ' minutit'],
+ 'h' : ['ühe tunni', 'tund aega', 'üks tund'],
+ 'hh': [number + ' tunni', number + ' tundi'],
+ 'd' : ['ühe päeva', 'üks päev'],
+ 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
+ 'MM': [number + ' kuu', number + ' kuud'],
+ 'y' : ['ühe aasta', 'aasta', 'üks aasta'],
+ 'yy': [number + ' aasta', number + ' aastat']
+ };
+ if (withoutSuffix) {
+ return format[key][2] ? format[key][2] : format[key][1];
+ }
+ return isFuture ? format[key][0] : format[key][1];
+}
+
+var et = moment.defineLocale('et', {
+ months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
+ monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
+ weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
+ weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
+ weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Täna,] LT',
+ nextDay : '[Homme,] LT',
+ nextWeek : '[Järgmine] dddd LT',
+ lastDay : '[Eile,] LT',
+ lastWeek : '[Eelmine] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s pärast',
+ past : '%s tagasi',
+ s : processRelativeTime,
+ m : processRelativeTime,
+ mm : processRelativeTime,
+ h : processRelativeTime,
+ hh : processRelativeTime,
+ d : processRelativeTime,
+ dd : '%d päeva',
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return et;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eu.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eu.js
new file mode 100644
index 00000000000..7db2443b70a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/eu.js
@@ -0,0 +1,66 @@
+//! moment.js locale configuration
+//! locale : Basque [eu]
+//! author : Eneko Illarramendi : https://github.com/eillarra
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var eu = moment.defineLocale('eu', {
+ months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
+ monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
+ weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
+ weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY[ko] MMMM[ren] D[a]',
+ LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+ LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
+ l : 'YYYY-M-D',
+ ll : 'YYYY[ko] MMM D[a]',
+ lll : 'YYYY[ko] MMM D[a] HH:mm',
+ llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
+ },
+ calendar : {
+ sameDay : '[gaur] LT[etan]',
+ nextDay : '[bihar] LT[etan]',
+ nextWeek : 'dddd LT[etan]',
+ lastDay : '[atzo] LT[etan]',
+ lastWeek : '[aurreko] dddd LT[etan]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s barru',
+ past : 'duela %s',
+ s : 'segundo batzuk',
+ m : 'minutu bat',
+ mm : '%d minutu',
+ h : 'ordu bat',
+ hh : '%d ordu',
+ d : 'egun bat',
+ dd : '%d egun',
+ M : 'hilabete bat',
+ MM : '%d hilabete',
+ y : 'urte bat',
+ yy : '%d urte'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return eu;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fa.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fa.js
new file mode 100644
index 00000000000..7743b4f4f5a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fa.js
@@ -0,0 +1,107 @@
+//! moment.js locale configuration
+//! locale : Persian [fa]
+//! author : Ebrahim Byagowi : https://github.com/ebraminio
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '۱',
+ '2': '۲',
+ '3': '۳',
+ '4': '۴',
+ '5': '۵',
+ '6': '۶',
+ '7': '۷',
+ '8': '۸',
+ '9': '۹',
+ '0': '۰'
+};
+var numberMap = {
+ '۱': '1',
+ '۲': '2',
+ '۳': '3',
+ '۴': '4',
+ '۵': '5',
+ '۶': '6',
+ '۷': '7',
+ '۸': '8',
+ '۹': '9',
+ '۰': '0'
+};
+
+var fa = moment.defineLocale('fa', {
+ months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /قبل از ظهر|بعد از ظهر/,
+ isPM: function (input) {
+ return /بعد از ظهر/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'قبل از ظهر';
+ } else {
+ return 'بعد از ظهر';
+ }
+ },
+ calendar : {
+ sameDay : '[امروز ساعت] LT',
+ nextDay : '[فردا ساعت] LT',
+ nextWeek : 'dddd [ساعت] LT',
+ lastDay : '[دیروز ساعت] LT',
+ lastWeek : 'dddd [پیش] [ساعت] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'در %s',
+ past : '%s پیش',
+ s : 'چندین ثانیه',
+ m : 'یک دقیقه',
+ mm : '%d دقیقه',
+ h : 'یک ساعت',
+ hh : '%d ساعت',
+ d : 'یک روز',
+ dd : '%d روز',
+ M : 'یک ماه',
+ MM : '%d ماه',
+ y : 'یک سال',
+ yy : '%d سال'
+ },
+ preparse: function (string) {
+ return string.replace(/[۰-۹]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ ordinalParse: /\d{1,2}م/,
+ ordinal : '%dم',
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return fa;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fi.js
new file mode 100644
index 00000000000..4cbe4eec6d3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fi.js
@@ -0,0 +1,107 @@
+//! moment.js locale configuration
+//! locale : Finnish [fi]
+//! author : Tarmo Aidantausta : https://github.com/bleadof
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');
+var numbersFuture = [
+ 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
+ numbersPast[7], numbersPast[8], numbersPast[9]
+ ];
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = '';
+ switch (key) {
+ case 's':
+ return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+ case 'm':
+ return isFuture ? 'minuutin' : 'minuutti';
+ case 'mm':
+ result = isFuture ? 'minuutin' : 'minuuttia';
+ break;
+ case 'h':
+ return isFuture ? 'tunnin' : 'tunti';
+ case 'hh':
+ result = isFuture ? 'tunnin' : 'tuntia';
+ break;
+ case 'd':
+ return isFuture ? 'päivän' : 'päivä';
+ case 'dd':
+ result = isFuture ? 'päivän' : 'päivää';
+ break;
+ case 'M':
+ return isFuture ? 'kuukauden' : 'kuukausi';
+ case 'MM':
+ result = isFuture ? 'kuukauden' : 'kuukautta';
+ break;
+ case 'y':
+ return isFuture ? 'vuoden' : 'vuosi';
+ case 'yy':
+ result = isFuture ? 'vuoden' : 'vuotta';
+ break;
+ }
+ result = verbalNumber(number, isFuture) + ' ' + result;
+ return result;
+}
+function verbalNumber(number, isFuture) {
+ return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
+}
+
+var fi = moment.defineLocale('fi', {
+ months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
+ monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
+ weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
+ weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'Do MMMM[ta] YYYY',
+ LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
+ LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
+ l : 'D.M.YYYY',
+ ll : 'Do MMM YYYY',
+ lll : 'Do MMM YYYY, [klo] HH.mm',
+ llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
+ },
+ calendar : {
+ sameDay : '[tänään] [klo] LT',
+ nextDay : '[huomenna] [klo] LT',
+ nextWeek : 'dddd [klo] LT',
+ lastDay : '[eilen] [klo] LT',
+ lastWeek : '[viime] dddd[na] [klo] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s päästä',
+ past : '%s sitten',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return fi;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fo.js
new file mode 100644
index 00000000000..344ab5eed4d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fo.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : Faroese [fo]
+//! author : Ragnar Johannesen : https://github.com/ragnar123
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var fo = moment.defineLocale('fo', {
+ months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
+ weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+ weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D. MMMM, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Í dag kl.] LT',
+ nextDay : '[Í morgin kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[Í gjár kl.] LT',
+ lastWeek : '[síðstu] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'um %s',
+ past : '%s síðani',
+ s : 'fá sekund',
+ m : 'ein minutt',
+ mm : '%d minuttir',
+ h : 'ein tími',
+ hh : '%d tímar',
+ d : 'ein dagur',
+ dd : '%d dagar',
+ M : 'ein mánaði',
+ MM : '%d mánaðir',
+ y : 'eitt ár',
+ yy : '%d ár'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return fo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ca.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ca.js
new file mode 100644
index 00000000000..9aada335e3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ca.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : French (Canada) [fr-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var frCa = moment.defineLocale('fr-ca', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ }
+});
+
+return frCa;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ch.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ch.js
new file mode 100644
index 00000000000..aade5acbe91
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr-ch.js
@@ -0,0 +1,64 @@
+//! moment.js locale configuration
+//! locale : French (Switzerland) [fr-ch]
+//! author : Gaspard Bucher : https://github.com/gaspard
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var frCh = moment.defineLocale('fr-ch', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return frCh;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr.js
new file mode 100644
index 00000000000..8079ee755ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fr.js
@@ -0,0 +1,64 @@
+//! moment.js locale configuration
+//! locale : French [fr]
+//! author : John Fischer : https://github.com/jfroffice
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var fr = moment.defineLocale('fr', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : '');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return fr;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fy.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fy.js
new file mode 100644
index 00000000000..13a32d80eed
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/fy.js
@@ -0,0 +1,73 @@
+//! moment.js locale configuration
+//! locale : Frisian [fy]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');
+var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
+
+var fy = moment.defineLocale('fy', {
+ months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
+ weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
+ weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[hjoed om] LT',
+ nextDay: '[moarn om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[juster om] LT',
+ lastWeek: '[ôfrûne] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'oer %s',
+ past : '%s lyn',
+ s : 'in pear sekonden',
+ m : 'ien minút',
+ mm : '%d minuten',
+ h : 'ien oere',
+ hh : '%d oeren',
+ d : 'ien dei',
+ dd : '%d dagen',
+ M : 'ien moanne',
+ MM : '%d moannen',
+ y : 'ien jier',
+ yy : '%d jierren'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return fy;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gd.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gd.js
new file mode 100644
index 00000000000..542005e14b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gd.js
@@ -0,0 +1,76 @@
+//! moment.js locale configuration
+//! locale : Scottish Gaelic [gd]
+//! author : Jon Ashdown : https://github.com/jonashdown
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var months = [
+ 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
+];
+
+var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
+
+var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
+
+var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
+
+var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+var gd = moment.defineLocale('gd', {
+ months : months,
+ monthsShort : monthsShort,
+ monthsParseExact : true,
+ weekdays : weekdays,
+ weekdaysShort : weekdaysShort,
+ weekdaysMin : weekdaysMin,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[An-diugh aig] LT',
+ nextDay : '[A-màireach aig] LT',
+ nextWeek : 'dddd [aig] LT',
+ lastDay : '[An-dè aig] LT',
+ lastWeek : 'dddd [seo chaidh] [aig] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ann an %s',
+ past : 'bho chionn %s',
+ s : 'beagan diogan',
+ m : 'mionaid',
+ mm : '%d mionaidean',
+ h : 'uair',
+ hh : '%d uairean',
+ d : 'latha',
+ dd : '%d latha',
+ M : 'mìos',
+ MM : '%d mìosan',
+ y : 'bliadhna',
+ yy : '%d bliadhna'
+ },
+ ordinalParse : /\d{1,2}(d|na|mh)/,
+ ordinal : function (number) {
+ var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return gd;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gl.js
new file mode 100644
index 00000000000..205819eea18
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/gl.js
@@ -0,0 +1,77 @@
+//! moment.js locale configuration
+//! locale : Galician [gl]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var gl = moment.defineLocale('gl', {
+ months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
+ monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ lastDay : function () {
+ return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
+ },
+ lastWeek : function () {
+ return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (str) {
+ if (str.indexOf('un') === 0) {
+ return 'n' + str;
+ }
+ return 'en ' + str;
+ },
+ past : 'hai %s',
+ s : 'uns segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'unha hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un ano',
+ yy : '%d anos'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return gl;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/he.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/he.js
new file mode 100644
index 00000000000..e884381105b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/he.js
@@ -0,0 +1,99 @@
+//! moment.js locale configuration
+//! locale : Hebrew [he]
+//! author : Tomer Cohen : https://github.com/tomer
+//! author : Moshe Simantov : https://github.com/DevelopmentIL
+//! author : Tal Ater : https://github.com/TalAter
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var he = moment.defineLocale('he', {
+ months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
+ monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
+ weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+ weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+ weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [ב]MMMM YYYY',
+ LLL : 'D [ב]MMMM YYYY HH:mm',
+ LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
+ l : 'D/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[היום ב־]LT',
+ nextDay : '[מחר ב־]LT',
+ nextWeek : 'dddd [בשעה] LT',
+ lastDay : '[אתמול ב־]LT',
+ lastWeek : '[ביום] dddd [האחרון בשעה] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'בעוד %s',
+ past : 'לפני %s',
+ s : 'מספר שניות',
+ m : 'דקה',
+ mm : '%d דקות',
+ h : 'שעה',
+ hh : function (number) {
+ if (number === 2) {
+ return 'שעתיים';
+ }
+ return number + ' שעות';
+ },
+ d : 'יום',
+ dd : function (number) {
+ if (number === 2) {
+ return 'יומיים';
+ }
+ return number + ' ימים';
+ },
+ M : 'חודש',
+ MM : function (number) {
+ if (number === 2) {
+ return 'חודשיים';
+ }
+ return number + ' חודשים';
+ },
+ y : 'שנה',
+ yy : function (number) {
+ if (number === 2) {
+ return 'שנתיים';
+ } else if (number % 10 === 0 && number !== 10) {
+ return number + ' שנה';
+ }
+ return number + ' שנים';
+ }
+ },
+ meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+ isPM : function (input) {
+ return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 5) {
+ return 'לפנות בוקר';
+ } else if (hour < 10) {
+ return 'בבוקר';
+ } else if (hour < 12) {
+ return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+ } else if (hour < 18) {
+ return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+ } else {
+ return 'בערב';
+ }
+ }
+});
+
+return he;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hi.js
new file mode 100644
index 00000000000..58afc6b1dd0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hi.js
@@ -0,0 +1,124 @@
+//! moment.js locale configuration
+//! locale : Hindi [hi]
+//! author : Mayank Singhal : https://github.com/mayanksinghal
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+var hi = moment.defineLocale('hi', {
+ months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
+ monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm बजे',
+ LTS : 'A h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[कल] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[कल] LT',
+ lastWeek : '[पिछले] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s में',
+ past : '%s पहले',
+ s : 'कुछ ही क्षण',
+ m : 'एक मिनट',
+ mm : '%d मिनट',
+ h : 'एक घंटा',
+ hh : '%d घंटे',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महीने',
+ MM : '%d महीने',
+ y : 'एक वर्ष',
+ yy : '%d वर्ष'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+ meridiemParse: /रात|सुबह|दोपहर|शाम/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सुबह') {
+ return hour;
+ } else if (meridiem === 'दोपहर') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'शाम') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात';
+ } else if (hour < 10) {
+ return 'सुबह';
+ } else if (hour < 17) {
+ return 'दोपहर';
+ } else if (hour < 20) {
+ return 'शाम';
+ } else {
+ return 'रात';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return hi;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hr.js
new file mode 100644
index 00000000000..c2e04e61db8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hr.js
@@ -0,0 +1,145 @@
+//! moment.js locale configuration
+//! locale : Croatian [hr]
+//! author : Bojan Marković : https://github.com/bmarkovic
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+var hr = moment.defineLocale('hr', {
+ months : {
+ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
+ standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
+ },
+ monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : 'dan',
+ dd : translate,
+ M : 'mjesec',
+ MM : translate,
+ y : 'godinu',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return hr;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hu.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hu.js
new file mode 100644
index 00000000000..c81036b2a83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hu.js
@@ -0,0 +1,109 @@
+//! moment.js locale configuration
+//! locale : Hungarian [hu]
+//! author : Adam Brunner : https://github.com/adambrunner
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
+function translate(number, withoutSuffix, key, isFuture) {
+ var num = number,
+ suffix;
+ switch (key) {
+ case 's':
+ return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+ case 'm':
+ return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'mm':
+ return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'h':
+ return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'hh':
+ return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'd':
+ return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'dd':
+ return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'M':
+ return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'MM':
+ return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'y':
+ return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 'yy':
+ return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+ }
+ return '';
+}
+function week(isFuture) {
+ return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
+}
+
+var hu = moment.defineLocale('hu', {
+ months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
+ monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
+ weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+ weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+ weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY.MM.DD.',
+ LL : 'YYYY. MMMM D.',
+ LLL : 'YYYY. MMMM D. H:mm',
+ LLLL : 'YYYY. MMMM D., dddd H:mm'
+ },
+ meridiemParse: /de|du/i,
+ isPM: function (input) {
+ return input.charAt(1).toLowerCase() === 'u';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower === true ? 'de' : 'DE';
+ } else {
+ return isLower === true ? 'du' : 'DU';
+ }
+ },
+ calendar : {
+ sameDay : '[ma] LT[-kor]',
+ nextDay : '[holnap] LT[-kor]',
+ nextWeek : function () {
+ return week.call(this, true);
+ },
+ lastDay : '[tegnap] LT[-kor]',
+ lastWeek : function () {
+ return week.call(this, false);
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s múlva',
+ past : '%s',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return hu;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hy-am.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hy-am.js
new file mode 100644
index 00000000000..58045b7565b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/hy-am.js
@@ -0,0 +1,95 @@
+//! moment.js locale configuration
+//! locale : Armenian [hy-am]
+//! author : Armendarabyan : https://github.com/armendarabyan
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var hyAm = moment.defineLocale('hy-am', {
+ months : {
+ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+ standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
+ },
+ monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
+ weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY թ.',
+ LLL : 'D MMMM YYYY թ., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
+ },
+ calendar : {
+ sameDay: '[այսօր] LT',
+ nextDay: '[վաղը] LT',
+ lastDay: '[երեկ] LT',
+ nextWeek: function () {
+ return 'dddd [օրը ժամը] LT';
+ },
+ lastWeek: function () {
+ return '[անցած] dddd [օրը ժամը] LT';
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s հետո',
+ past : '%s առաջ',
+ s : 'մի քանի վայրկյան',
+ m : 'րոպե',
+ mm : '%d րոպե',
+ h : 'ժամ',
+ hh : '%d ժամ',
+ d : 'օր',
+ dd : '%d օր',
+ M : 'ամիս',
+ MM : '%d ամիս',
+ y : 'տարի',
+ yy : '%d տարի'
+ },
+ meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
+ isPM: function (input) {
+ return /^(ցերեկվա|երեկոյան)$/.test(input);
+ },
+ meridiem : function (hour) {
+ if (hour < 4) {
+ return 'գիշերվա';
+ } else if (hour < 12) {
+ return 'առավոտվա';
+ } else if (hour < 17) {
+ return 'ցերեկվա';
+ } else {
+ return 'երեկոյան';
+ }
+ },
+ ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'DDD':
+ case 'w':
+ case 'W':
+ case 'DDDo':
+ if (number === 1) {
+ return number + '-ին';
+ }
+ return number + '-րդ';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return hyAm;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/id.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/id.js
new file mode 100644
index 00000000000..a1cfb183459
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/id.js
@@ -0,0 +1,83 @@
+//! moment.js locale configuration
+//! locale : Indonesian [id]
+//! author : Mohammad Satrio Utomo : https://github.com/tyok
+//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var id = moment.defineLocale('id', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|siang|sore|malam/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'siang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sore' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'siang';
+ } else if (hours < 19) {
+ return 'sore';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Besok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kemarin pukul] LT',
+ lastWeek : 'dddd [lalu pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lalu',
+ s : 'beberapa detik',
+ m : 'semenit',
+ mm : '%d menit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return id;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/is.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/is.js
new file mode 100644
index 00000000000..9658aab2f9d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/is.js
@@ -0,0 +1,127 @@
+//! moment.js locale configuration
+//! locale : Icelandic [is]
+//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function plural(n) {
+ if (n % 100 === 11) {
+ return true;
+ } else if (n % 10 === 1) {
+ return false;
+ }
+ return true;
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+ case 'm':
+ return withoutSuffix ? 'mínúta' : 'mínútu';
+ case 'mm':
+ if (plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+ } else if (withoutSuffix) {
+ return result + 'mínúta';
+ }
+ return result + 'mínútu';
+ case 'hh':
+ if (plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+ }
+ return result + 'klukkustund';
+ case 'd':
+ if (withoutSuffix) {
+ return 'dagur';
+ }
+ return isFuture ? 'dag' : 'degi';
+ case 'dd':
+ if (plural(number)) {
+ if (withoutSuffix) {
+ return result + 'dagar';
+ }
+ return result + (isFuture ? 'daga' : 'dögum');
+ } else if (withoutSuffix) {
+ return result + 'dagur';
+ }
+ return result + (isFuture ? 'dag' : 'degi');
+ case 'M':
+ if (withoutSuffix) {
+ return 'mánuður';
+ }
+ return isFuture ? 'mánuð' : 'mánuði';
+ case 'MM':
+ if (plural(number)) {
+ if (withoutSuffix) {
+ return result + 'mánuðir';
+ }
+ return result + (isFuture ? 'mánuði' : 'mánuðum');
+ } else if (withoutSuffix) {
+ return result + 'mánuður';
+ }
+ return result + (isFuture ? 'mánuð' : 'mánuði');
+ case 'y':
+ return withoutSuffix || isFuture ? 'ár' : 'ári';
+ case 'yy':
+ if (plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+ }
+ return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+ }
+}
+
+var is = moment.defineLocale('is', {
+ months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+ weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
+ weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+ weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
+ },
+ calendar : {
+ sameDay : '[í dag kl.] LT',
+ nextDay : '[á morgun kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[í gær kl.] LT',
+ lastWeek : '[síðasta] dddd [kl.] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'eftir %s',
+ past : 'fyrir %s síðan',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : 'klukkustund',
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return is;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/it.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/it.js
new file mode 100644
index 00000000000..d5ddf18e83c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/it.js
@@ -0,0 +1,70 @@
+//! moment.js locale configuration
+//! locale : Italian [it]
+//! author : Lorenzo : https://github.com/aliem
+//! author: Mattia Larentis: https://github.com/nostalgiaz
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var it = moment.defineLocale('it', {
+ months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
+ monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+ weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
+ weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
+ weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Oggi alle] LT',
+ nextDay: '[Domani alle] LT',
+ nextWeek: 'dddd [alle] LT',
+ lastDay: '[Ieri alle] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[la scorsa] dddd [alle] LT';
+ default:
+ return '[lo scorso] dddd [alle] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
+ },
+ past : '%s fa',
+ s : 'alcuni secondi',
+ m : 'un minuto',
+ mm : '%d minuti',
+ h : 'un\'ora',
+ hh : '%d ore',
+ d : 'un giorno',
+ dd : '%d giorni',
+ M : 'un mese',
+ MM : '%d mesi',
+ y : 'un anno',
+ yy : '%d anni'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return it;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ja.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ja.js
new file mode 100644
index 00000000000..4df51ad03cf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ja.js
@@ -0,0 +1,76 @@
+//! moment.js locale configuration
+//! locale : Japanese [ja]
+//! author : LI Long : https://github.com/baryon
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ja = moment.defineLocale('ja', {
+ months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+ weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
+ weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
+ longDateFormat : {
+ LT : 'Ah時m分',
+ LTS : 'Ah時m分s秒',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY年M月D日',
+ LLL : 'YYYY年M月D日Ah時m分',
+ LLLL : 'YYYY年M月D日Ah時m分 dddd'
+ },
+ meridiemParse: /午前|午後/i,
+ isPM : function (input) {
+ return input === '午後';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return '午前';
+ } else {
+ return '午後';
+ }
+ },
+ calendar : {
+ sameDay : '[今日] LT',
+ nextDay : '[明日] LT',
+ nextWeek : '[来週]dddd LT',
+ lastDay : '[昨日] LT',
+ lastWeek : '[前週]dddd LT',
+ sameElse : 'L'
+ },
+ ordinalParse : /\d{1,2}日/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s後',
+ past : '%s前',
+ s : '数秒',
+ m : '1分',
+ mm : '%d分',
+ h : '1時間',
+ hh : '%d時間',
+ d : '1日',
+ dd : '%d日',
+ M : '1ヶ月',
+ MM : '%dヶ月',
+ y : '1年',
+ yy : '%d年'
+ }
+});
+
+return ja;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/jv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/jv.js
new file mode 100644
index 00000000000..5b939e0fcb1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/jv.js
@@ -0,0 +1,83 @@
+//! moment.js locale configuration
+//! locale : Javanese [jv]
+//! author : Rony Lantip : https://github.com/lantip
+//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var jv = moment.defineLocale('jv', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
+ weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /enjing|siyang|sonten|ndalu/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'enjing') {
+ return hour;
+ } else if (meridiem === 'siyang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'enjing';
+ } else if (hours < 15) {
+ return 'siyang';
+ } else if (hours < 19) {
+ return 'sonten';
+ } else {
+ return 'ndalu';
+ }
+ },
+ calendar : {
+ sameDay : '[Dinten puniko pukul] LT',
+ nextDay : '[Mbenjang pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kala wingi pukul] LT',
+ lastWeek : 'dddd [kepengker pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'wonten ing %s',
+ past : '%s ingkang kepengker',
+ s : 'sawetawis detik',
+ m : 'setunggal menit',
+ mm : '%d menit',
+ h : 'setunggal jam',
+ hh : '%d jam',
+ d : 'sedinten',
+ dd : '%d dinten',
+ M : 'sewulan',
+ MM : '%d wulan',
+ y : 'setaun',
+ yy : '%d taun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return jv;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ka.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ka.js
new file mode 100644
index 00000000000..be866c8b6c9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ka.js
@@ -0,0 +1,89 @@
+//! moment.js locale configuration
+//! locale : Georgian [ka]
+//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ka = moment.defineLocale('ka', {
+ months : {
+ standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+ format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+ },
+ monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+ weekdays : {
+ standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+ format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+ isFormat: /(წინა|შემდეგ)/
+ },
+ weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+ weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[დღეს] LT[-ზე]',
+ nextDay : '[ხვალ] LT[-ზე]',
+ lastDay : '[გუშინ] LT[-ზე]',
+ nextWeek : '[შემდეგ] dddd LT[-ზე]',
+ lastWeek : '[წინა] dddd LT-ზე',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
+ s.replace(/ი$/, 'ში') :
+ s + 'ში';
+ },
+ past : function (s) {
+ if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
+ return s.replace(/(ი|ე)$/, 'ის წინ');
+ }
+ if ((/წელი/).test(s)) {
+ return s.replace(/წელი$/, 'წლის წინ');
+ }
+ },
+ s : 'რამდენიმე წამი',
+ m : 'წუთი',
+ mm : '%d წუთი',
+ h : 'საათი',
+ hh : '%d საათი',
+ d : 'დღე',
+ dd : '%d დღე',
+ M : 'თვე',
+ MM : '%d თვე',
+ y : 'წელი',
+ yy : '%d წელი'
+ },
+ ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
+ ordinal : function (number) {
+ if (number === 0) {
+ return number;
+ }
+ if (number === 1) {
+ return number + '-ლი';
+ }
+ if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
+ return 'მე-' + number;
+ }
+ return number + '-ე';
+ },
+ week : {
+ dow : 1,
+ doy : 7
+ }
+});
+
+return ka;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/kk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/kk.js
new file mode 100644
index 00000000000..94a231258a6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/kk.js
@@ -0,0 +1,87 @@
+//! moment.js locale configuration
+//! locale : Kazakh [kk]
+//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var suffixes = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+};
+
+var kk = moment.defineLocale('kk', {
+ months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
+ monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+ weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
+ weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+ weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгін сағат] LT',
+ nextDay : '[Ертең сағат] LT',
+ nextWeek : 'dddd [сағат] LT',
+ lastDay : '[Кеше сағат] LT',
+ lastWeek : '[Өткен аптаның] dddd [сағат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ішінде',
+ past : '%s бұрын',
+ s : 'бірнеше секунд',
+ m : 'бір минут',
+ mm : '%d минут',
+ h : 'бір сағат',
+ hh : '%d сағат',
+ d : 'бір күн',
+ dd : '%d күн',
+ M : 'бір ай',
+ MM : '%d ай',
+ y : 'бір жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(ші|шы)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes[number] || suffixes[a] || suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return kk;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/km.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/km.js
new file mode 100644
index 00000000000..71482a7b52d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/km.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : Cambodian [km]
+//! author : Kruy Vanna : https://github.com/kruyvanna
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var km = moment.defineLocale('km', {
+ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
+ nextDay: '[ស្អែក ម៉ោង] LT',
+ nextWeek: 'dddd [ម៉ោង] LT',
+ lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+ lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: '%sទៀត',
+ past: '%sមុន',
+ s: 'ប៉ុន្មានវិនាទី',
+ m: 'មួយនាទី',
+ mm: '%d នាទី',
+ h: 'មួយម៉ោង',
+ hh: '%d ម៉ោង',
+ d: 'មួយថ្ងៃ',
+ dd: '%d ថ្ងៃ',
+ M: 'មួយខែ',
+ MM: '%d ខែ',
+ y: 'មួយឆ្នាំ',
+ yy: '%d ឆ្នាំ'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return km;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ko.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ko.js
new file mode 100644
index 00000000000..b736583e8cc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ko.js
@@ -0,0 +1,65 @@
+//! moment.js locale configuration
+//! locale : Korean [ko]
+//! author : Kyungwook, Park : https://github.com/kyungw00k
+//! author : Jeeeyul Lee <jeeeyul@gmail.com>
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ko = moment.defineLocale('ko', {
+ months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+ weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
+ weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
+ longDateFormat : {
+ LT : 'A h시 m분',
+ LTS : 'A h시 m분 s초',
+ L : 'YYYY.MM.DD',
+ LL : 'YYYY년 MMMM D일',
+ LLL : 'YYYY년 MMMM D일 A h시 m분',
+ LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
+ },
+ calendar : {
+ sameDay : '오늘 LT',
+ nextDay : '내일 LT',
+ nextWeek : 'dddd LT',
+ lastDay : '어제 LT',
+ lastWeek : '지난주 dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s 후',
+ past : '%s 전',
+ s : '몇 초',
+ ss : '%d초',
+ m : '일분',
+ mm : '%d분',
+ h : '한 시간',
+ hh : '%d시간',
+ d : '하루',
+ dd : '%d일',
+ M : '한 달',
+ MM : '%d달',
+ y : '일 년',
+ yy : '%d년'
+ },
+ ordinalParse : /\d{1,2}일/,
+ ordinal : '%d일',
+ meridiemParse : /오전|오후/,
+ isPM : function (token) {
+ return token === '오후';
+ },
+ meridiem : function (hour, minute, isUpper) {
+ return hour < 12 ? '오전' : '오후';
+ }
+});
+
+return ko;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ky.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ky.js
new file mode 100644
index 00000000000..baf241813e1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ky.js
@@ -0,0 +1,88 @@
+//! moment.js locale configuration
+//! locale : Kyrgyz [ky]
+//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+
+var suffixes = {
+ 0: '-чү',
+ 1: '-чи',
+ 2: '-чи',
+ 3: '-чү',
+ 4: '-чү',
+ 5: '-чи',
+ 6: '-чы',
+ 7: '-чи',
+ 8: '-чи',
+ 9: '-чу',
+ 10: '-чу',
+ 20: '-чы',
+ 30: '-чу',
+ 40: '-чы',
+ 50: '-чү',
+ 60: '-чы',
+ 70: '-чи',
+ 80: '-чи',
+ 90: '-чу',
+ 100: '-чү'
+};
+
+var ky = moment.defineLocale('ky', {
+ months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
+ weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+ weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгүн саат] LT',
+ nextDay : '[Эртең саат] LT',
+ nextWeek : 'dddd [саат] LT',
+ lastDay : '[Кече саат] LT',
+ lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ичинде',
+ past : '%s мурун',
+ s : 'бирнече секунд',
+ m : 'бир мүнөт',
+ mm : '%d мүнөт',
+ h : 'бир саат',
+ hh : '%d саат',
+ d : 'бир күн',
+ dd : '%d күн',
+ M : 'бир ай',
+ MM : '%d ай',
+ y : 'бир жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes[number] || suffixes[a] || suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ky;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lb.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lb.js
new file mode 100644
index 00000000000..e55d57bad1e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lb.js
@@ -0,0 +1,137 @@
+//! moment.js locale configuration
+//! locale : Luxembourgish [lb]
+//! author : mweimerskirch : https://github.com/mweimerskirch
+//! author : David Raison : https://github.com/kwisatz
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eng Minutt', 'enger Minutt'],
+ 'h': ['eng Stonn', 'enger Stonn'],
+ 'd': ['een Dag', 'engem Dag'],
+ 'M': ['ee Mount', 'engem Mount'],
+ 'y': ['ee Joer', 'engem Joer']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+function processFutureTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'a ' + string;
+ }
+ return 'an ' + string;
+}
+function processPastTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'viru ' + string;
+ }
+ return 'virun ' + string;
+}
+/**
+ * Returns true if the word before the given number loses the '-n' ending.
+ * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+ *
+ * @param number {integer}
+ * @returns {boolean}
+ */
+function eifelerRegelAppliesToNumber(number) {
+ number = parseInt(number, 10);
+ if (isNaN(number)) {
+ return false;
+ }
+ if (number < 0) {
+ // Negative Number --> always true
+ return true;
+ } else if (number < 10) {
+ // Only 1 digit
+ if (4 <= number && number <= 7) {
+ return true;
+ }
+ return false;
+ } else if (number < 100) {
+ // 2 digits
+ var lastDigit = number % 10, firstDigit = number / 10;
+ if (lastDigit === 0) {
+ return eifelerRegelAppliesToNumber(firstDigit);
+ }
+ return eifelerRegelAppliesToNumber(lastDigit);
+ } else if (number < 10000) {
+ // 3 or 4 digits --> recursively check first digit
+ while (number >= 10) {
+ number = number / 10;
+ }
+ return eifelerRegelAppliesToNumber(number);
+ } else {
+ // Anything larger than 4 digits: recursively check first n-3 digits
+ number = number / 1000;
+ return eifelerRegelAppliesToNumber(number);
+ }
+}
+
+var lb = moment.defineLocale('lb', {
+ months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
+ weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+ weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm [Auer]',
+ LTS: 'H:mm:ss [Auer]',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm [Auer]',
+ LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
+ },
+ calendar: {
+ sameDay: '[Haut um] LT',
+ sameElse: 'L',
+ nextDay: '[Muer um] LT',
+ nextWeek: 'dddd [um] LT',
+ lastDay: '[Gëschter um] LT',
+ lastWeek: function () {
+ // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+ switch (this.day()) {
+ case 2:
+ case 4:
+ return '[Leschten] dddd [um] LT';
+ default:
+ return '[Leschte] dddd [um] LT';
+ }
+ }
+ },
+ relativeTime : {
+ future : processFutureTime,
+ past : processPastTime,
+ s : 'e puer Sekonnen',
+ m : processRelativeTime,
+ mm : '%d Minutten',
+ h : processRelativeTime,
+ hh : '%d Stonnen',
+ d : processRelativeTime,
+ dd : '%d Deeg',
+ M : processRelativeTime,
+ MM : '%d Méint',
+ y : processRelativeTime,
+ yy : '%d Joer'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal: '%d.',
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return lb;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lo.js
new file mode 100644
index 00000000000..27065c97b92
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lo.js
@@ -0,0 +1,70 @@
+//! moment.js locale configuration
+//! locale : Lao [lo]
+//! author : Ryan Hart : https://github.com/ryanhart2
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var lo = moment.defineLocale('lo', {
+ months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+ isPM: function (input) {
+ return input === 'ຕອນແລງ';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ຕອນເຊົ້າ';
+ } else {
+ return 'ຕອນແລງ';
+ }
+ },
+ calendar : {
+ sameDay : '[ມື້ນີ້ເວລາ] LT',
+ nextDay : '[ມື້ອື່ນເວລາ] LT',
+ nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
+ lastDay : '[ມື້ວານນີ້ເວລາ] LT',
+ lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ອີກ %s',
+ past : '%sຜ່ານມາ',
+ s : 'ບໍ່ເທົ່າໃດວິນາທີ',
+ m : '1 ນາທີ',
+ mm : '%d ນາທີ',
+ h : '1 ຊົ່ວໂມງ',
+ hh : '%d ຊົ່ວໂມງ',
+ d : '1 ມື້',
+ dd : '%d ມື້',
+ M : '1 ເດືອນ',
+ MM : '%d ເດືອນ',
+ y : '1 ປີ',
+ yy : '%d ປີ'
+ },
+ ordinalParse: /(ທີ່)\d{1,2}/,
+ ordinal : function (number) {
+ return 'ທີ່' + number;
+ }
+});
+
+return lo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lt.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lt.js
new file mode 100644
index 00000000000..37990261af1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lt.js
@@ -0,0 +1,117 @@
+//! moment.js locale configuration
+//! locale : Lithuanian [lt]
+//! author : Mindaugas Mozūras : https://github.com/mmozuras
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var units = {
+ 'm' : 'minutė_minutės_minutę',
+ 'mm': 'minutės_minučių_minutes',
+ 'h' : 'valanda_valandos_valandą',
+ 'hh': 'valandos_valandų_valandas',
+ 'd' : 'diena_dienos_dieną',
+ 'dd': 'dienos_dienų_dienas',
+ 'M' : 'mėnuo_mėnesio_mėnesį',
+ 'MM': 'mėnesiai_mėnesių_mėnesius',
+ 'y' : 'metai_metų_metus',
+ 'yy': 'metai_metų_metus'
+};
+function translateSeconds(number, withoutSuffix, key, isFuture) {
+ if (withoutSuffix) {
+ return 'kelios sekundės';
+ } else {
+ return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+ }
+}
+function translateSingular(number, withoutSuffix, key, isFuture) {
+ return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
+}
+function special(number) {
+ return number % 10 === 0 || (number > 10 && number < 20);
+}
+function forms(key) {
+ return units[key].split('_');
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ if (number === 1) {
+ return result + translateSingular(number, withoutSuffix, key[0], isFuture);
+ } else if (withoutSuffix) {
+ return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+ } else {
+ if (isFuture) {
+ return result + forms(key)[1];
+ } else {
+ return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+ }
+ }
+}
+var lt = moment.defineLocale('lt', {
+ months : {
+ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
+ isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
+ },
+ monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+ weekdays : {
+ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
+ standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
+ isFormat: /dddd HH:mm/
+ },
+ weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+ weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY [m.] MMMM D [d.]',
+ LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY [m.] MMMM D [d.]',
+ lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
+ },
+ calendar : {
+ sameDay : '[Šiandien] LT',
+ nextDay : '[Rytoj] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[Vakar] LT',
+ lastWeek : '[Praėjusį] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'po %s',
+ past : 'prieš %s',
+ s : translateSeconds,
+ m : translateSingular,
+ mm : translate,
+ h : translateSingular,
+ hh : translate,
+ d : translateSingular,
+ dd : translate,
+ M : translateSingular,
+ MM : translate,
+ y : translateSingular,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}-oji/,
+ ordinal : function (number) {
+ return number + '-oji';
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return lt;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lv.js
new file mode 100644
index 00000000000..d9699119934
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/lv.js
@@ -0,0 +1,97 @@
+//! moment.js locale configuration
+//! locale : Latvian [lv]
+//! author : Kristaps Karlsons : https://github.com/skakri
+//! author : Jānis Elmeris : https://github.com/JanisE
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var units = {
+ 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'h': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'hh': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'dd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'y': 'gada_gadiem_gads_gadi'.split('_'),
+ 'yy': 'gada_gadiem_gads_gadi'.split('_')
+};
+/**
+ * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+ */
+function format(forms, number, withoutSuffix) {
+ if (withoutSuffix) {
+ // E.g. "21 minūte", "3 minūtes".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
+ } else {
+ // E.g. "21 minūtes" as in "pēc 21 minūtes".
+ // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
+ }
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ return number + ' ' + format(units[key], number, withoutSuffix);
+}
+function relativeTimeWithSingular(number, withoutSuffix, key) {
+ return format(units[key], number, withoutSuffix);
+}
+function relativeSeconds(number, withoutSuffix) {
+ return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
+}
+
+var lv = moment.defineLocale('lv', {
+ months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
+ weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY.',
+ LL : 'YYYY. [gada] D. MMMM',
+ LLL : 'YYYY. [gada] D. MMMM, HH:mm',
+ LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
+ },
+ calendar : {
+ sameDay : '[Šodien pulksten] LT',
+ nextDay : '[Rīt pulksten] LT',
+ nextWeek : 'dddd [pulksten] LT',
+ lastDay : '[Vakar pulksten] LT',
+ lastWeek : '[Pagājušā] dddd [pulksten] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'pēc %s',
+ past : 'pirms %s',
+ s : relativeSeconds,
+ m : relativeTimeWithSingular,
+ mm : relativeTimeWithPlural,
+ h : relativeTimeWithSingular,
+ hh : relativeTimeWithPlural,
+ d : relativeTimeWithSingular,
+ dd : relativeTimeWithPlural,
+ M : relativeTimeWithSingular,
+ MM : relativeTimeWithPlural,
+ y : relativeTimeWithSingular,
+ yy : relativeTimeWithPlural
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return lv;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/me.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/me.js
new file mode 100644
index 00000000000..292970e72d5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/me.js
@@ -0,0 +1,111 @@
+//! moment.js locale configuration
+//! locale : Montenegrin [me]
+//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jednog minuta'],
+ mm: ['minut', 'minuta', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mjesec', 'mjeseca', 'mjeseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+var me = moment.defineLocale('me', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sjutra u] LT',
+
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedjelje] [u] LT',
+ '[prošlog] [ponedjeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srijede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'nekoliko sekundi',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'dan',
+ dd : translator.translate,
+ M : 'mjesec',
+ MM : translator.translate,
+ y : 'godinu',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return me;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mi.js
new file mode 100644
index 00000000000..03b65a47e97
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mi.js
@@ -0,0 +1,64 @@
+//! moment.js locale configuration
+//! locale : Maori [mi]
+//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var mi = moment.defineLocale('mi', {
+ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
+ monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
+ monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+ weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+ weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY [i] HH:mm',
+ LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
+ },
+ calendar: {
+ sameDay: '[i teie mahana, i] LT',
+ nextDay: '[apopo i] LT',
+ nextWeek: 'dddd [i] LT',
+ lastDay: '[inanahi i] LT',
+ lastWeek: 'dddd [whakamutunga i] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'i roto i %s',
+ past: '%s i mua',
+ s: 'te hēkona ruarua',
+ m: 'he meneti',
+ mm: '%d meneti',
+ h: 'te haora',
+ hh: '%d haora',
+ d: 'he ra',
+ dd: '%d ra',
+ M: 'he marama',
+ MM: '%d marama',
+ y: 'he tau',
+ yy: '%d tau'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return mi;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mk.js
new file mode 100644
index 00000000000..52758d3e8aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mk.js
@@ -0,0 +1,90 @@
+//! moment.js locale configuration
+//! locale : Macedonian [mk]
+//! author : Borislav Mickov : https://github.com/B0k0
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var mk = moment.defineLocale('mk', {
+ months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+ weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Денес во] LT',
+ nextDay : '[Утре во] LT',
+ nextWeek : '[Во] dddd [во] LT',
+ lastDay : '[Вчера во] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'после %s',
+ past : 'пред %s',
+ s : 'неколку секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дена',
+ M : 'месец',
+ MM : '%d месеци',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return mk;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ml.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ml.js
new file mode 100644
index 00000000000..e5f52e9c9a9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ml.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Malayalam [ml]
+//! author : Floyd Pink : https://github.com/floydpink
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ml = moment.defineLocale('ml', {
+ months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
+ monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
+ weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+ weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm -നു',
+ LTS : 'A h:mm:ss -നു',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm -നു',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
+ },
+ calendar : {
+ sameDay : '[ഇന്ന്] LT',
+ nextDay : '[നാളെ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ഇന്നലെ] LT',
+ lastWeek : '[കഴിഞ്ഞ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s കഴിഞ്ഞ്',
+ past : '%s മുൻപ്',
+ s : 'അൽപ നിമിഷങ്ങൾ',
+ m : 'ഒരു മിനിറ്റ്',
+ mm : '%d മിനിറ്റ്',
+ h : 'ഒരു മണിക്കൂർ',
+ hh : '%d മണിക്കൂർ',
+ d : 'ഒരു ദിവസം',
+ dd : '%d ദിവസം',
+ M : 'ഒരു മാസം',
+ MM : '%d മാസം',
+ y : 'ഒരു വർഷം',
+ yy : '%d വർഷം'
+ },
+ meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'രാത്രി' && hour >= 4) ||
+ meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+ meridiem === 'വൈകുന്നേരം') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'രാത്രി';
+ } else if (hour < 12) {
+ return 'രാവിലെ';
+ } else if (hour < 17) {
+ return 'ഉച്ച കഴിഞ്ഞ്';
+ } else if (hour < 20) {
+ return 'വൈകുന്നേരം';
+ } else {
+ return 'രാത്രി';
+ }
+ }
+});
+
+return ml;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mr.js
new file mode 100644
index 00000000000..abe1024b131
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/mr.js
@@ -0,0 +1,159 @@
+//! moment.js locale configuration
+//! locale : Marathi [mr]
+//! author : Harshad Kale : https://github.com/kalehv
+//! author : Vivek Athalye : https://github.com/vnathalye
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+function relativeTimeMr(number, withoutSuffix, string, isFuture)
+{
+ var output = '';
+ if (withoutSuffix) {
+ switch (string) {
+ case 's': output = 'काही सेकंद'; break;
+ case 'm': output = 'एक मिनिट'; break;
+ case 'mm': output = '%d मिनिटे'; break;
+ case 'h': output = 'एक तास'; break;
+ case 'hh': output = '%d तास'; break;
+ case 'd': output = 'एक दिवस'; break;
+ case 'dd': output = '%d दिवस'; break;
+ case 'M': output = 'एक महिना'; break;
+ case 'MM': output = '%d महिने'; break;
+ case 'y': output = 'एक वर्ष'; break;
+ case 'yy': output = '%d वर्षे'; break;
+ }
+ }
+ else {
+ switch (string) {
+ case 's': output = 'काही सेकंदां'; break;
+ case 'm': output = 'एका मिनिटा'; break;
+ case 'mm': output = '%d मिनिटां'; break;
+ case 'h': output = 'एका तासा'; break;
+ case 'hh': output = '%d तासां'; break;
+ case 'd': output = 'एका दिवसा'; break;
+ case 'dd': output = '%d दिवसां'; break;
+ case 'M': output = 'एका महिन्या'; break;
+ case 'MM': output = '%d महिन्यां'; break;
+ case 'y': output = 'एका वर्षा'; break;
+ case 'yy': output = '%d वर्षां'; break;
+ }
+ }
+ return output.replace(/%d/i, number);
+}
+
+var mr = moment.defineLocale('mr', {
+ months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
+ monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm वाजता',
+ LTS : 'A h:mm:ss वाजता',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm वाजता',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[उद्या] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[काल] LT',
+ lastWeek: '[मागील] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future: '%sमध्ये',
+ past: '%sपूर्वी',
+ s: relativeTimeMr,
+ m: relativeTimeMr,
+ mm: relativeTimeMr,
+ h: relativeTimeMr,
+ hh: relativeTimeMr,
+ d: relativeTimeMr,
+ dd: relativeTimeMr,
+ M: relativeTimeMr,
+ MM: relativeTimeMr,
+ y: relativeTimeMr,
+ yy: relativeTimeMr
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात्री') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सकाळी') {
+ return hour;
+ } else if (meridiem === 'दुपारी') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'सायंकाळी') {
+ return hour + 12;
+ }
+ },
+ meridiem: function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात्री';
+ } else if (hour < 10) {
+ return 'सकाळी';
+ } else if (hour < 17) {
+ return 'दुपारी';
+ } else if (hour < 20) {
+ return 'सायंकाळी';
+ } else {
+ return 'रात्री';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return mr;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms-my.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms-my.js
new file mode 100644
index 00000000000..0cb403d347a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms-my.js
@@ -0,0 +1,83 @@
+//! moment.js locale configuration
+//! locale : Malay [ms-my]
+//! note : DEPRECATED, the correct one is [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var msMy = moment.defineLocale('ms-my', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return msMy;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms.js
new file mode 100644
index 00000000000..4d4afff5dfc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ms.js
@@ -0,0 +1,82 @@
+//! moment.js locale configuration
+//! locale : Malay [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ms = moment.defineLocale('ms', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ms;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/my.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/my.js
new file mode 100644
index 00000000000..32d67e2bae5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/my.js
@@ -0,0 +1,96 @@
+//! moment.js locale configuration
+//! locale : Burmese [my]
+//! author : Squar team, mysquar.com
+//! author : David Rossellat : https://github.com/gholadr
+//! author : Tin Aung Lin : https://github.com/thanyawzinmin
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '၁',
+ '2': '၂',
+ '3': '၃',
+ '4': '၄',
+ '5': '၅',
+ '6': '၆',
+ '7': '၇',
+ '8': '၈',
+ '9': '၉',
+ '0': '၀'
+};
+var numberMap = {
+ '၁': '1',
+ '၂': '2',
+ '၃': '3',
+ '၄': '4',
+ '၅': '5',
+ '၆': '6',
+ '၇': '7',
+ '၈': '8',
+ '၉': '9',
+ '၀': '0'
+};
+
+var my = moment.defineLocale('my', {
+ months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
+ monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+ weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
+ weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+ weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ယနေ.] LT [မှာ]',
+ nextDay: '[မနက်ဖြန်] LT [မှာ]',
+ nextWeek: 'dddd LT [မှာ]',
+ lastDay: '[မနေ.က] LT [မှာ]',
+ lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'လာမည့် %s မှာ',
+ past: 'လွန်ခဲ့သော %s က',
+ s: 'စက္ကန်.အနည်းငယ်',
+ m: 'တစ်မိနစ်',
+ mm: '%d မိနစ်',
+ h: 'တစ်နာရီ',
+ hh: '%d နာရီ',
+ d: 'တစ်ရက်',
+ dd: '%d ရက်',
+ M: 'တစ်လ',
+ MM: '%d လ',
+ y: 'တစ်နှစ်',
+ yy: '%d နှစ်'
+ },
+ preparse: function (string) {
+ return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return my;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nb.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nb.js
new file mode 100644
index 00000000000..b77e576dc6c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nb.js
@@ -0,0 +1,63 @@
+//! moment.js locale configuration
+//! locale : Norwegian Bokmål [nb]
+//! authors : Espen Hovlandsdal : https://github.com/rexxars
+//! Sigurd Gartmann : https://github.com/sigurdga
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var nb = moment.defineLocale('nb', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[i dag kl.] LT',
+ nextDay: '[i morgen kl.] LT',
+ nextWeek: 'dddd [kl.] LT',
+ lastDay: '[i går kl.] LT',
+ lastWeek: '[forrige] dddd [kl.] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'noen sekunder',
+ m : 'ett minutt',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dager',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return nb;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ne.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ne.js
new file mode 100644
index 00000000000..a35947a9e31
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ne.js
@@ -0,0 +1,123 @@
+//! moment.js locale configuration
+//! locale : Nepalese [ne]
+//! author : suvash : https://github.com/suvash
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+var ne = moment.defineLocale('ne', {
+ months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
+ monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
+ weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+ weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'Aको h:mm बजे',
+ LTS : 'Aको h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, Aको h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'राति') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'बिहान') {
+ return hour;
+ } else if (meridiem === 'दिउँसो') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'साँझ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 3) {
+ return 'राति';
+ } else if (hour < 12) {
+ return 'बिहान';
+ } else if (hour < 16) {
+ return 'दिउँसो';
+ } else if (hour < 20) {
+ return 'साँझ';
+ } else {
+ return 'राति';
+ }
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[भोलि] LT',
+ nextWeek : '[आउँदो] dddd[,] LT',
+ lastDay : '[हिजो] LT',
+ lastWeek : '[गएको] dddd[,] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sमा',
+ past : '%s अगाडि',
+ s : 'केही क्षण',
+ m : 'एक मिनेट',
+ mm : '%d मिनेट',
+ h : 'एक घण्टा',
+ hh : '%d घण्टा',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महिना',
+ MM : '%d महिना',
+ y : 'एक बर्ष',
+ yy : '%d बर्ष'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ne;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl-be.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl-be.js
new file mode 100644
index 00000000000..aaa5d74ac2b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl-be.js
@@ -0,0 +1,86 @@
+//! moment.js locale configuration
+//! locale : Dutch (Belgium) [nl-be]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
+var monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+var nlBe = moment.defineLocale('nl-be', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex,
+ monthsShortRegex: monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return nlBe;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl.js
new file mode 100644
index 00000000000..15beaef13cf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nl.js
@@ -0,0 +1,86 @@
+//! moment.js locale configuration
+//! locale : Dutch [nl]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
+var monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+var nl = moment.defineLocale('nl', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex,
+ monthsShortRegex: monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return nl;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nn.js
new file mode 100644
index 00000000000..cf39af5e7b9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/nn.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : Nynorsk [nn]
+//! author : https://github.com/mechuwind
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var nn = moment.defineLocale('nn', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+ weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
+ weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[I dag klokka] LT',
+ nextDay: '[I morgon klokka] LT',
+ nextWeek: 'dddd [klokka] LT',
+ lastDay: '[I går klokka] LT',
+ lastWeek: '[Føregåande] dddd [klokka] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s sidan',
+ s : 'nokre sekund',
+ m : 'eit minutt',
+ mm : '%d minutt',
+ h : 'ein time',
+ hh : '%d timar',
+ d : 'ein dag',
+ dd : '%d dagar',
+ M : 'ein månad',
+ MM : '%d månader',
+ y : 'eit år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return nn;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pa-in.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pa-in.js
new file mode 100644
index 00000000000..6dec8d17243
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pa-in.js
@@ -0,0 +1,124 @@
+//! moment.js locale configuration
+//! locale : Punjabi (India) [pa-in]
+//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '੧',
+ '2': '੨',
+ '3': '੩',
+ '4': '੪',
+ '5': '੫',
+ '6': '੬',
+ '7': '੭',
+ '8': '੮',
+ '9': '੯',
+ '0': '੦'
+};
+var numberMap = {
+ '੧': '1',
+ '੨': '2',
+ '੩': '3',
+ '੪': '4',
+ '੫': '5',
+ '੬': '6',
+ '੭': '7',
+ '੮': '8',
+ '੯': '9',
+ '੦': '0'
+};
+
+var paIn = moment.defineLocale('pa-in', {
+ // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+ months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
+ weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm ਵਜੇ',
+ LTS : 'A h:mm:ss ਵਜੇ',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
+ },
+ calendar : {
+ sameDay : '[ਅਜ] LT',
+ nextDay : '[ਕਲ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ਕਲ] LT',
+ lastWeek : '[ਪਿਛਲੇ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ਵਿੱਚ',
+ past : '%s ਪਿਛਲੇ',
+ s : 'ਕੁਝ ਸਕਿੰਟ',
+ m : 'ਇਕ ਮਿੰਟ',
+ mm : '%d ਮਿੰਟ',
+ h : 'ਇੱਕ ਘੰਟਾ',
+ hh : '%d ਘੰਟੇ',
+ d : 'ਇੱਕ ਦਿਨ',
+ dd : '%d ਦਿਨ',
+ M : 'ਇੱਕ ਮਹੀਨਾ',
+ MM : '%d ਮਹੀਨੇ',
+ y : 'ਇੱਕ ਸਾਲ',
+ yy : '%d ਸਾਲ'
+ },
+ preparse: function (string) {
+ return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+ meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ਰਾਤ') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ਸਵੇਰ') {
+ return hour;
+ } else if (meridiem === 'ਦੁਪਹਿਰ') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'ਸ਼ਾਮ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ਰਾਤ';
+ } else if (hour < 10) {
+ return 'ਸਵੇਰ';
+ } else if (hour < 17) {
+ return 'ਦੁਪਹਿਰ';
+ } else if (hour < 20) {
+ return 'ਸ਼ਾਮ';
+ } else {
+ return 'ਰਾਤ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return paIn;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pl.js
new file mode 100644
index 00000000000..aab946b0d7c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pl.js
@@ -0,0 +1,105 @@
+//! moment.js locale configuration
+//! locale : Polish [pl]
+//! author : Rafal Hirsz : https://github.com/evoL
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');
+var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
+function plural(n) {
+ return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
+}
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'minuta' : 'minutę';
+ case 'mm':
+ return result + (plural(number) ? 'minuty' : 'minut');
+ case 'h':
+ return withoutSuffix ? 'godzina' : 'godzinę';
+ case 'hh':
+ return result + (plural(number) ? 'godziny' : 'godzin');
+ case 'MM':
+ return result + (plural(number) ? 'miesiące' : 'miesięcy');
+ case 'yy':
+ return result + (plural(number) ? 'lata' : 'lat');
+ }
+}
+
+var pl = moment.defineLocale('pl', {
+ months : function (momentToFormat, format) {
+ if (format === '') {
+ // Hack: if format empty we know this is used to generate
+ // RegExp by moment. Give then back both valid forms of months
+ // in RegExp ready format.
+ return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
+ } else if (/D MMMM/.test(format)) {
+ return monthsSubjective[momentToFormat.month()];
+ } else {
+ return monthsNominative[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+ weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
+ weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
+ weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Dziś o] LT',
+ nextDay: '[Jutro o] LT',
+ nextWeek: '[W] dddd [o] LT',
+ lastDay: '[Wczoraj o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : '%s temu',
+ s : 'kilka sekund',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : '1 dzień',
+ dd : '%d dni',
+ M : 'miesiąc',
+ MM : translate,
+ y : 'rok',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return pl;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt-br.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt-br.js
new file mode 100644
index 00000000000..20897f78af8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt-br.js
@@ -0,0 +1,61 @@
+//! moment.js locale configuration
+//! locale : Portuguese (Brazil) [pt-br]
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var ptBr = moment.defineLocale('pt-br', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : '%s atrás',
+ s : 'poucos segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº'
+});
+
+return ptBr;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt.js
new file mode 100644
index 00000000000..7a852285698
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/pt.js
@@ -0,0 +1,65 @@
+//! moment.js locale configuration
+//! locale : Portuguese [pt]
+//! author : Jefferson : https://github.com/jalex79
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var pt = moment.defineLocale('pt', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : 'há %s',
+ s : 'segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return pt;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ro.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ro.js
new file mode 100644
index 00000000000..8a0cd7501ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ro.js
@@ -0,0 +1,75 @@
+//! moment.js locale configuration
+//! locale : Romanian [ro]
+//! author : Vlad Gurdiga : https://github.com/gurdiga
+//! author : Valentin Agachi : https://github.com/avaly
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'minute',
+ 'hh': 'ore',
+ 'dd': 'zile',
+ 'MM': 'luni',
+ 'yy': 'ani'
+ },
+ separator = ' ';
+ if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+ separator = ' de ';
+ }
+ return number + separator + format[key];
+}
+
+var ro = moment.defineLocale('ro', {
+ months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
+ monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+ weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+ weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[azi la] LT',
+ nextDay: '[mâine la] LT',
+ nextWeek: 'dddd [la] LT',
+ lastDay: '[ieri la] LT',
+ lastWeek: '[fosta] dddd [la] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'peste %s',
+ past : '%s în urmă',
+ s : 'câteva secunde',
+ m : 'un minut',
+ mm : relativeTimeWithPlural,
+ h : 'o oră',
+ hh : relativeTimeWithPlural,
+ d : 'o zi',
+ dd : relativeTimeWithPlural,
+ M : 'o lună',
+ MM : relativeTimeWithPlural,
+ y : 'un an',
+ yy : relativeTimeWithPlural
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ro;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ru.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ru.js
new file mode 100644
index 00000000000..35bba86a2ee
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ru.js
@@ -0,0 +1,183 @@
+//! moment.js locale configuration
+//! locale : Russian [ru]
+//! author : Viktorminator : https://github.com/Viktorminator
+//! Author : Menelion Elensúle : https://github.com/Oire
+//! author : Коренберг Марк : https://github.com/socketpair
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+ 'hh': 'час_часа_часов',
+ 'dd': 'день_дня_дней',
+ 'MM': 'месяц_месяца_месяцев',
+ 'yy': 'год_года_лет'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'минута' : 'минуту';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
+
+// http://new.gramota.ru/spravka/rules/139-prop : § 103
+// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+var ru = moment.defineLocale('ru', {
+ months : {
+ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
+ standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
+ },
+ monthsShort : {
+ // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+ format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
+ standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
+ },
+ weekdays : {
+ standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+ format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
+ },
+ weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+ monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // копия предыдущего
+ monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // полные названия с падежами
+ monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+ // Выражение, которое соотвествует только сокращённым формам
+ monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сегодня в] LT',
+ nextDay: '[Завтра в] LT',
+ lastDay: '[Вчера в] LT',
+ nextWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ lastWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'через %s',
+ past : '%s назад',
+ s : 'несколько секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : 'час',
+ hh : relativeTimeWithPlural,
+ d : 'день',
+ dd : relativeTimeWithPlural,
+ M : 'месяц',
+ MM : relativeTimeWithPlural,
+ y : 'год',
+ yy : relativeTimeWithPlural
+ },
+ meridiemParse: /ночи|утра|дня|вечера/i,
+ isPM : function (input) {
+ return /^(дня|вечера)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночи';
+ } else if (hour < 12) {
+ return 'утра';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечера';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го|я)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ case 'w':
+ case 'W':
+ return number + '-я';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ru;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/se.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/se.js
new file mode 100644
index 00000000000..ab52fdff2ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/se.js
@@ -0,0 +1,61 @@
+//! moment.js locale configuration
+//! locale : Northern Sami [se]
+//! authors : Bård Rolstad Henriksen : https://github.com/karamell
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+
+var se = moment.defineLocale('se', {
+ months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
+ monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
+ weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
+ weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+ weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'MMMM D. [b.] YYYY',
+ LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
+ LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[otne ti] LT',
+ nextDay: '[ihttin ti] LT',
+ nextWeek: 'dddd [ti] LT',
+ lastDay: '[ikte ti] LT',
+ lastWeek: '[ovddit] dddd [ti] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s geažes',
+ past : 'maŋit %s',
+ s : 'moadde sekunddat',
+ m : 'okta minuhta',
+ mm : '%d minuhtat',
+ h : 'okta diimmu',
+ hh : '%d diimmut',
+ d : 'okta beaivi',
+ dd : '%d beaivvit',
+ M : 'okta mánnu',
+ MM : '%d mánut',
+ y : 'okta jahki',
+ yy : '%d jagit'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return se;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/si.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/si.js
new file mode 100644
index 00000000000..47d435b8313
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/si.js
@@ -0,0 +1,71 @@
+//! moment.js locale configuration
+//! locale : Sinhalese [si]
+//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+/*jshint -W100*/
+var si = moment.defineLocale('si', {
+ months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
+ monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
+ weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
+ weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
+ weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'a h:mm',
+ LTS : 'a h:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY MMMM D',
+ LLL : 'YYYY MMMM D, a h:mm',
+ LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
+ },
+ calendar : {
+ sameDay : '[අද] LT[ට]',
+ nextDay : '[හෙට] LT[ට]',
+ nextWeek : 'dddd LT[ට]',
+ lastDay : '[ඊයේ] LT[ට]',
+ lastWeek : '[පසුගිය] dddd LT[ට]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sකින්',
+ past : '%sකට පෙර',
+ s : 'තත්පර කිහිපය',
+ m : 'මිනිත්තුව',
+ mm : 'මිනිත්තු %d',
+ h : 'පැය',
+ hh : 'පැය %d',
+ d : 'දිනය',
+ dd : 'දින %d',
+ M : 'මාසය',
+ MM : 'මාස %d',
+ y : 'වසර',
+ yy : 'වසර %d'
+ },
+ ordinalParse: /\d{1,2} වැනි/,
+ ordinal : function (number) {
+ return number + ' වැනි';
+ },
+ meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+ isPM : function (input) {
+ return input === 'ප.ව.' || input === 'පස් වරු';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'ප.ව.' : 'පස් වරු';
+ } else {
+ return isLower ? 'පෙ.ව.' : 'පෙර වරු';
+ }
+ }
+});
+
+return si;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sk.js
new file mode 100644
index 00000000000..f31291f4d13
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sk.js
@@ -0,0 +1,150 @@
+//! moment.js locale configuration
+//! locale : Slovak [sk]
+//! author : Martin Minka : https://github.com/k2s
+//! based on work of petrbela : https://github.com/petrbela
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');
+var monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+function plural(n) {
+ return (n > 1) && (n < 5);
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'minúty' : 'minút');
+ } else {
+ return result + 'minútami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'hodiny' : 'hodín');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'dni' : 'dní');
+ } else {
+ return result + 'dňami';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'mesiace' : 'mesiacov');
+ } else {
+ return result + 'mesiacmi';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'roky' : 'rokov');
+ } else {
+ return result + 'rokmi';
+ }
+ break;
+ }
+}
+
+var sk = moment.defineLocale('sk', {
+ months : months,
+ monthsShort : monthsShort,
+ weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+ weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
+ weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[dnes o] LT',
+ nextDay: '[zajtra o] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [o] LT';
+ case 3:
+ return '[v stredu o] LT';
+ case 4:
+ return '[vo štvrtok o] LT';
+ case 5:
+ return '[v piatok o] LT';
+ case 6:
+ return '[v sobotu o] LT';
+ }
+ },
+ lastDay: '[včera o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulú nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[minulý] dddd [o] LT';
+ case 3:
+ return '[minulú stredu o] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [o] LT';
+ case 6:
+ return '[minulú sobotu o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pred %s',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return sk;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sl.js
new file mode 100644
index 00000000000..d9b36245a74
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sl.js
@@ -0,0 +1,162 @@
+//! moment.js locale configuration
+//! locale : Slovenian [sl]
+//! author : Robert Sedovšek : https://github.com/sedovsek
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
+ case 'm':
+ return withoutSuffix ? 'ena minuta' : 'eno minuto';
+ case 'mm':
+ if (number === 1) {
+ result += withoutSuffix ? 'minuta' : 'minuto';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+ } else {
+ result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'ena ura' : 'eno uro';
+ case 'hh':
+ if (number === 1) {
+ result += withoutSuffix ? 'ura' : 'uro';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'uri' : 'urama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'ure' : 'urami';
+ } else {
+ result += withoutSuffix || isFuture ? 'ur' : 'urami';
+ }
+ return result;
+ case 'd':
+ return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+ case 'dd':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+ } else {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+ }
+ return result;
+ case 'M':
+ return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+ case 'MM':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+ } else {
+ result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+ }
+ return result;
+ case 'y':
+ return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+ case 'yy':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'leto' : 'letom';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'leta' : 'leti';
+ } else {
+ result += withoutSuffix || isFuture ? 'let' : 'leti';
+ }
+ return result;
+ }
+}
+
+var sl = moment.defineLocale('sl', {
+ months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+ weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+ weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danes ob] LT',
+ nextDay : '[jutri ob] LT',
+
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
+ }
+ },
+ lastDay : '[včeraj ob] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'čez %s',
+ past : 'pred %s',
+ s : processRelativeTime,
+ m : processRelativeTime,
+ mm : processRelativeTime,
+ h : processRelativeTime,
+ hh : processRelativeTime,
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return sl;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sq.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sq.js
new file mode 100644
index 00000000000..1ca3fdd821b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sq.js
@@ -0,0 +1,70 @@
+//! moment.js locale configuration
+//! locale : Albanian [sq]
+//! author : Flakërim Ismani : https://github.com/flakerimi
+//! author : Menelion Elensúle : https://github.com/Oire
+//! author : Oerd Cukalla : https://github.com/oerd
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var sq = moment.defineLocale('sq', {
+ months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
+ monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+ weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
+ weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+ weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /PD|MD/,
+ isPM: function (input) {
+ return input.charAt(0) === 'M';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ return hours < 12 ? 'PD' : 'MD';
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Sot në] LT',
+ nextDay : '[Nesër në] LT',
+ nextWeek : 'dddd [në] LT',
+ lastDay : '[Dje në] LT',
+ lastWeek : 'dddd [e kaluar në] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'në %s',
+ past : '%s më parë',
+ s : 'disa sekonda',
+ m : 'një minutë',
+ mm : '%d minuta',
+ h : 'një orë',
+ hh : '%d orë',
+ d : 'një ditë',
+ dd : '%d ditë',
+ M : 'një muaj',
+ MM : '%d muaj',
+ y : 'një vit',
+ yy : '%d vite'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return sq;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr-cyrl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr-cyrl.js
new file mode 100644
index 00000000000..caeef089e7c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr-cyrl.js
@@ -0,0 +1,110 @@
+//! moment.js locale configuration
+//! locale : Serbian Cyrillic [sr-cyrl]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['један минут', 'једне минуте'],
+ mm: ['минут', 'минуте', 'минута'],
+ h: ['један сат', 'једног сата'],
+ hh: ['сат', 'сата', 'сати'],
+ dd: ['дан', 'дана', 'дана'],
+ MM: ['месец', 'месеца', 'месеци'],
+ yy: ['година', 'године', 'година']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+var srCyrl = moment.defineLocale('sr-cyrl', {
+ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+ monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+ weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+ weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[данас у] LT',
+ nextDay: '[сутра у] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
+ }
+ },
+ lastDay : '[јуче у] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[прошле] [недеље] [у] LT',
+ '[прошлог] [понедељка] [у] LT',
+ '[прошлог] [уторка] [у] LT',
+ '[прошле] [среде] [у] LT',
+ '[прошлог] [четвртка] [у] LT',
+ '[прошлог] [петка] [у] LT',
+ '[прошле] [суботе] [у] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : 'пре %s',
+ s : 'неколико секунди',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'дан',
+ dd : translator.translate,
+ M : 'месец',
+ MM : translator.translate,
+ y : 'годину',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return srCyrl;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr.js
new file mode 100644
index 00000000000..9c254444ff3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sr.js
@@ -0,0 +1,110 @@
+//! moment.js locale configuration
+//! locale : Serbian [sr]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jedne minute'],
+ mm: ['minut', 'minute', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mesec', 'meseca', 'meseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+var sr = moment.defineLocale('sr', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sutra u] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedelje] [u] LT',
+ '[prošlog] [ponedeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pre %s',
+ s : 'nekoliko sekundi',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'dan',
+ dd : translator.translate,
+ M : 'mesec',
+ MM : translator.translate,
+ y : 'godinu',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return sr;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ss.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ss.js
new file mode 100644
index 00000000000..f2363573870
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ss.js
@@ -0,0 +1,89 @@
+//! moment.js locale configuration
+//! locale : siSwati [ss]
+//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+
+var ss = moment.defineLocale('ss', {
+ months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
+ monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+ weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
+ weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+ weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Namuhla nga] LT',
+ nextDay : '[Kusasa nga] LT',
+ nextWeek : 'dddd [nga] LT',
+ lastDay : '[Itolo nga] LT',
+ lastWeek : 'dddd [leliphelile] [nga] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'nga %s',
+ past : 'wenteka nga %s',
+ s : 'emizuzwana lomcane',
+ m : 'umzuzu',
+ mm : '%d emizuzu',
+ h : 'lihora',
+ hh : '%d emahora',
+ d : 'lilanga',
+ dd : '%d emalanga',
+ M : 'inyanga',
+ MM : '%d tinyanga',
+ y : 'umnyaka',
+ yy : '%d iminyaka'
+ },
+ meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'ekuseni';
+ } else if (hours < 15) {
+ return 'emini';
+ } else if (hours < 19) {
+ return 'entsambama';
+ } else {
+ return 'ebusuku';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ekuseni') {
+ return hour;
+ } else if (meridiem === 'emini') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+ if (hour === 0) {
+ return 0;
+ }
+ return hour + 12;
+ }
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : '%d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return ss;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sv.js
new file mode 100644
index 00000000000..77a3402b229
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sv.js
@@ -0,0 +1,69 @@
+//! moment.js locale configuration
+//! locale : Swedish [sv]
+//! author : Jens Alm : https://github.com/ulmus
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var sv = moment.defineLocale('sv', {
+ months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+ weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+ weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Idag] LT',
+ nextDay: '[Imorgon] LT',
+ lastDay: '[Igår] LT',
+ nextWeek: '[På] dddd LT',
+ lastWeek: '[I] dddd[s] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : 'för %s sedan',
+ s : 'några sekunder',
+ m : 'en minut',
+ mm : '%d minuter',
+ h : 'en timme',
+ hh : '%d timmar',
+ d : 'en dag',
+ dd : '%d dagar',
+ M : 'en månad',
+ MM : '%d månader',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}(e|a)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'e' :
+ (b === 1) ? 'a' :
+ (b === 2) ? 'a' :
+ (b === 3) ? 'e' : 'e';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return sv;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sw.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sw.js
new file mode 100644
index 00000000000..9ed314f5631
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/sw.js
@@ -0,0 +1,59 @@
+//! moment.js locale configuration
+//! locale : Swahili [sw]
+//! author : Fahad Kassim : https://github.com/fadsel
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var sw = moment.defineLocale('sw', {
+ months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
+ weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+ weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[leo saa] LT',
+ nextDay : '[kesho saa] LT',
+ nextWeek : '[wiki ijayo] dddd [saat] LT',
+ lastDay : '[jana] LT',
+ lastWeek : '[wiki iliyopita] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s baadaye',
+ past : 'tokea %s',
+ s : 'hivi punde',
+ m : 'dakika moja',
+ mm : 'dakika %d',
+ h : 'saa limoja',
+ hh : 'masaa %d',
+ d : 'siku moja',
+ dd : 'masiku %d',
+ M : 'mwezi mmoja',
+ MM : 'miezi %d',
+ y : 'mwaka mmoja',
+ yy : 'miaka %d'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return sw;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ta.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ta.js
new file mode 100644
index 00000000000..043ae6007ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/ta.js
@@ -0,0 +1,130 @@
+//! moment.js locale configuration
+//! locale : Tamil [ta]
+//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var symbolMap = {
+ '1': '௧',
+ '2': '௨',
+ '3': '௩',
+ '4': '௪',
+ '5': '௫',
+ '6': '௬',
+ '7': '௭',
+ '8': '௮',
+ '9': '௯',
+ '0': '௦'
+};
+var numberMap = {
+ '௧': '1',
+ '௨': '2',
+ '௩': '3',
+ '௪': '4',
+ '௫': '5',
+ '௬': '6',
+ '௭': '7',
+ '௮': '8',
+ '௯': '9',
+ '௦': '0'
+};
+
+var ta = moment.defineLocale('ta', {
+ months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
+ weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
+ weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, HH:mm',
+ LLLL : 'dddd, D MMMM YYYY, HH:mm'
+ },
+ calendar : {
+ sameDay : '[இன்று] LT',
+ nextDay : '[நாளை] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[நேற்று] LT',
+ lastWeek : '[கடந்த வாரம்] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s இல்',
+ past : '%s முன்',
+ s : 'ஒரு சில விநாடிகள்',
+ m : 'ஒரு நிமிடம்',
+ mm : '%d நிமிடங்கள்',
+ h : 'ஒரு மணி நேரம்',
+ hh : '%d மணி நேரம்',
+ d : 'ஒரு நாள்',
+ dd : '%d நாட்கள்',
+ M : 'ஒரு மாதம்',
+ MM : '%d மாதங்கள்',
+ y : 'ஒரு வருடம்',
+ yy : '%d ஆண்டுகள்'
+ },
+ ordinalParse: /\d{1,2}வது/,
+ ordinal : function (number) {
+ return number + 'வது';
+ },
+ preparse: function (string) {
+ return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ // refer http://ta.wikipedia.org/s/1er1
+ meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 2) {
+ return ' யாமம்';
+ } else if (hour < 6) {
+ return ' வைகறை'; // வைகறை
+ } else if (hour < 10) {
+ return ' காலை'; // காலை
+ } else if (hour < 14) {
+ return ' நண்பகல்'; // நண்பகல்
+ } else if (hour < 18) {
+ return ' எற்பாடு'; // எற்பாடு
+ } else if (hour < 22) {
+ return ' மாலை'; // மாலை
+ } else {
+ return ' யாமம்';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'யாமம்') {
+ return hour < 2 ? hour : hour + 12;
+ } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
+ return hour;
+ } else if (meridiem === 'நண்பகல்') {
+ return hour >= 10 ? hour : hour + 12;
+ } else {
+ return hour + 12;
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return ta;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/te.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/te.js
new file mode 100644
index 00000000000..ac6ef033752
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/te.js
@@ -0,0 +1,89 @@
+//! moment.js locale configuration
+//! locale : Telugu [te]
+//! author : Krishna Chaitanya Thota : https://github.com/kcthota
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var te = moment.defineLocale('te', {
+ months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
+ monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
+ weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+ weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[నేడు] LT',
+ nextDay : '[రేపు] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[నిన్న] LT',
+ lastWeek : '[గత] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s లో',
+ past : '%s క్రితం',
+ s : 'కొన్ని క్షణాలు',
+ m : 'ఒక నిమిషం',
+ mm : '%d నిమిషాలు',
+ h : 'ఒక గంట',
+ hh : '%d గంటలు',
+ d : 'ఒక రోజు',
+ dd : '%d రోజులు',
+ M : 'ఒక నెల',
+ MM : '%d నెలలు',
+ y : 'ఒక సంవత్సరం',
+ yy : '%d సంవత్సరాలు'
+ },
+ ordinalParse : /\d{1,2}వ/,
+ ordinal : '%dవ',
+ meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'రాత్రి') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ఉదయం') {
+ return hour;
+ } else if (meridiem === 'మధ్యాహ్నం') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'సాయంత్రం') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'రాత్రి';
+ } else if (hour < 10) {
+ return 'ఉదయం';
+ } else if (hour < 17) {
+ return 'మధ్యాహ్నం';
+ } else if (hour < 20) {
+ return 'సాయంత్రం';
+ } else {
+ return 'రాత్రి';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return te;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tet.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tet.js
new file mode 100644
index 00000000000..e419ef32339
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tet.js
@@ -0,0 +1,68 @@
+//! moment.js locale configuration
+//! locale : Tetun Dili (East Timor) [tet]
+//! author : Joshua Brooks : https://github.com/joshbrooks
+//! author : Onorio De J. Afonso : https://github.com/marobo
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var tet = moment.defineLocale('tet', {
+ months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),
+ weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Ohin iha] LT',
+ nextDay: '[Aban iha] LT',
+ nextWeek: 'dddd [iha] LT',
+ lastDay: '[Horiseik iha] LT',
+ lastWeek: 'dddd [semana kotuk] [iha] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'iha %s',
+ past : '%s liuba',
+ s : 'minutu balun',
+ m : 'minutu ida',
+ mm : 'minutus %d',
+ h : 'horas ida',
+ hh : 'horas %d',
+ d : 'loron ida',
+ dd : 'loron %d',
+ M : 'fulan ida',
+ MM : 'fulan %d',
+ y : 'tinan ida',
+ yy : 'tinan %d'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return tet;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/th.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/th.js
new file mode 100644
index 00000000000..22f6ab9a480
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/th.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : Thai [th]
+//! author : Kridsada Thanabulpong : https://github.com/sirn
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var th = moment.defineLocale('th', {
+ months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
+ monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+ weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+ weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY เวลา H:mm',
+ LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
+ },
+ meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
+ isPM: function (input) {
+ return input === 'หลังเที่ยง';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ก่อนเที่ยง';
+ } else {
+ return 'หลังเที่ยง';
+ }
+ },
+ calendar : {
+ sameDay : '[วันนี้ เวลา] LT',
+ nextDay : '[พรุ่งนี้ เวลา] LT',
+ nextWeek : 'dddd[หน้า เวลา] LT',
+ lastDay : '[เมื่อวานนี้ เวลา] LT',
+ lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'อีก %s',
+ past : '%sที่แล้ว',
+ s : 'ไม่กี่วินาที',
+ m : '1 นาที',
+ mm : '%d นาที',
+ h : '1 ชั่วโมง',
+ hh : '%d ชั่วโมง',
+ d : '1 วัน',
+ dd : '%d วัน',
+ M : '1 เดือน',
+ MM : '%d เดือน',
+ y : '1 ปี',
+ yy : '%d ปี'
+ }
+});
+
+return th;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tl-ph.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tl-ph.js
new file mode 100644
index 00000000000..a37b86e7131
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tl-ph.js
@@ -0,0 +1,62 @@
+//! moment.js locale configuration
+//! locale : Tagalog (Philippines) [tl-ph]
+//! author : Dan Hagman : https://github.com/hagmandan
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var tlPh = moment.defineLocale('tl-ph', {
+ months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
+ monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+ weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
+ weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+ weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'MM/D/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY HH:mm',
+ LLLL : 'dddd, MMMM DD, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: 'LT [ngayong araw]',
+ nextDay: '[Bukas ng] LT',
+ nextWeek: 'LT [sa susunod na] dddd',
+ lastDay: 'LT [kahapon]',
+ lastWeek: 'LT [noong nakaraang] dddd',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'sa loob ng %s',
+ past : '%s ang nakalipas',
+ s : 'ilang segundo',
+ m : 'isang minuto',
+ mm : '%d minuto',
+ h : 'isang oras',
+ hh : '%d oras',
+ d : 'isang araw',
+ dd : '%d araw',
+ M : 'isang buwan',
+ MM : '%d buwan',
+ y : 'isang taon',
+ yy : '%d taon'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return tlPh;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tlh.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tlh.js
new file mode 100644
index 00000000000..7eb7df9c520
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tlh.js
@@ -0,0 +1,120 @@
+//! moment.js locale configuration
+//! locale : Klingon [tlh]
+//! author : Dominika Kruk : https://github.com/amaranthrose
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+function translateFuture(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'leS' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'waQ' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'nem' :
+ time + ' pIq';
+ return time;
+}
+
+function translatePast(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'Hu’' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'wen' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'ben' :
+ time + ' ret';
+ return time;
+}
+
+function translate(number, withoutSuffix, string, isFuture) {
+ var numberNoun = numberAsNoun(number);
+ switch (string) {
+ case 'mm':
+ return numberNoun + ' tup';
+ case 'hh':
+ return numberNoun + ' rep';
+ case 'dd':
+ return numberNoun + ' jaj';
+ case 'MM':
+ return numberNoun + ' jar';
+ case 'yy':
+ return numberNoun + ' DIS';
+ }
+}
+
+function numberAsNoun(number) {
+ var hundred = Math.floor((number % 1000) / 100),
+ ten = Math.floor((number % 100) / 10),
+ one = number % 10,
+ word = '';
+ if (hundred > 0) {
+ word += numbersNouns[hundred] + 'vatlh';
+ }
+ if (ten > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
+ }
+ if (one > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[one];
+ }
+ return (word === '') ? 'pagh' : word;
+}
+
+var tlh = moment.defineLocale('tlh', {
+ months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
+ monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[DaHjaj] LT',
+ nextDay: '[wa’leS] LT',
+ nextWeek: 'LLL',
+ lastDay: '[wa’Hu’] LT',
+ lastWeek: 'LLL',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : translateFuture,
+ past : translatePast,
+ s : 'puS lup',
+ m : 'wa’ tup',
+ mm : translate,
+ h : 'wa’ rep',
+ hh : translate,
+ d : 'wa’ jaj',
+ dd : translate,
+ M : 'wa’ jar',
+ MM : translate,
+ y : 'wa’ DIS',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return tlh;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tr.js
new file mode 100644
index 00000000000..425386f369a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tr.js
@@ -0,0 +1,90 @@
+//! moment.js locale configuration
+//! locale : Turkish [tr]
+//! authors : Erhan Gundogan : https://github.com/erhangundogan,
+//! Burak Yiğit Kaya: https://github.com/BYK
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var suffixes = {
+ 1: '\'inci',
+ 5: '\'inci',
+ 8: '\'inci',
+ 70: '\'inci',
+ 80: '\'inci',
+ 2: '\'nci',
+ 7: '\'nci',
+ 20: '\'nci',
+ 50: '\'nci',
+ 3: '\'üncü',
+ 4: '\'üncü',
+ 100: '\'üncü',
+ 6: '\'ncı',
+ 9: '\'uncu',
+ 10: '\'uncu',
+ 30: '\'uncu',
+ 60: '\'ıncı',
+ 90: '\'ıncı'
+};
+
+var tr = moment.defineLocale('tr', {
+ months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
+ monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+ weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
+ weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+ weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[yarın saat] LT',
+ nextWeek : '[haftaya] dddd [saat] LT',
+ lastDay : '[dün] LT',
+ lastWeek : '[geçen hafta] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s önce',
+ s : 'birkaç saniye',
+ m : 'bir dakika',
+ mm : '%d dakika',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir yıl',
+ yy : '%d yıl'
+ },
+ ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '\'ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return tr;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzl.js
new file mode 100644
index 00000000000..bd7537c54cd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzl.js
@@ -0,0 +1,91 @@
+//! moment.js locale configuration
+//! locale : Talossan [tzl]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+//! author : Iustì Canun
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+// This is currently too difficult (maybe even impossible) to add.
+var tzl = moment.defineLocale('tzl', {
+ months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+ weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+ weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+ weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM [dallas] YYYY',
+ LLL : 'D. MMMM [dallas] YYYY HH.mm',
+ LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
+ },
+ meridiemParse: /d\'o|d\'a/i,
+ isPM : function (input) {
+ return 'd\'o' === input.toLowerCase();
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'd\'o' : 'D\'O';
+ } else {
+ return isLower ? 'd\'a' : 'D\'A';
+ }
+ },
+ calendar : {
+ sameDay : '[oxhi à] LT',
+ nextDay : '[demà à] LT',
+ nextWeek : 'dddd [à] LT',
+ lastDay : '[ieiri à] LT',
+ lastWeek : '[sür el] dddd [lasteu à] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'osprei %s',
+ past : 'ja%s',
+ s : processRelativeTime,
+ m : processRelativeTime,
+ mm : processRelativeTime,
+ h : processRelativeTime,
+ hh : processRelativeTime,
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's': ['viensas secunds', '\'iensas secunds'],
+ 'm': ['\'n míut', '\'iens míut'],
+ 'mm': [number + ' míuts', '' + number + ' míuts'],
+ 'h': ['\'n þora', '\'iensa þora'],
+ 'hh': [number + ' þoras', '' + number + ' þoras'],
+ 'd': ['\'n ziua', '\'iensa ziua'],
+ 'dd': [number + ' ziuas', '' + number + ' ziuas'],
+ 'M': ['\'n mes', '\'iens mes'],
+ 'MM': [number + ' mesen', '' + number + ' mesen'],
+ 'y': ['\'n ar', '\'iens ar'],
+ 'yy': [number + ' ars', '' + number + ' ars']
+ };
+ return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
+}
+
+return tzl;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm-latn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm-latn.js
new file mode 100644
index 00000000000..4d742c52fe8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm-latn.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight Latin [tzm-latn]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var tzmLatn = moment.defineLocale('tzm-latn', {
+ months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[asdkh g] LT',
+ nextDay: '[aska g] LT',
+ nextWeek: 'dddd [g] LT',
+ lastDay: '[assant g] LT',
+ lastWeek: 'dddd [g] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dadkh s yan %s',
+ past : 'yan %s',
+ s : 'imik',
+ m : 'minuḍ',
+ mm : '%d minuḍ',
+ h : 'saɛa',
+ hh : '%d tassaɛin',
+ d : 'ass',
+ dd : '%d ossan',
+ M : 'ayowr',
+ MM : '%d iyyirn',
+ y : 'asgas',
+ yy : '%d isgasn'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return tzmLatn;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm.js
new file mode 100644
index 00000000000..1d1c26006d3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/tzm.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight [tzm]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var tzm = moment.defineLocale('tzm', {
+ months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+ nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+ nextWeek: 'dddd [ⴴ] LT',
+ lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+ lastWeek: 'dddd [ⴴ] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+ past : 'ⵢⴰⵏ %s',
+ s : 'ⵉⵎⵉⴽ',
+ m : 'ⵎⵉⵏⵓⴺ',
+ mm : '%d ⵎⵉⵏⵓⴺ',
+ h : 'ⵙⴰⵄⴰ',
+ hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+ d : 'ⴰⵙⵙ',
+ dd : '%d oⵙⵙⴰⵏ',
+ M : 'ⴰⵢoⵓⵔ',
+ MM : '%d ⵉⵢⵢⵉⵔⵏ',
+ y : 'ⴰⵙⴳⴰⵙ',
+ yy : '%d ⵉⵙⴳⴰⵙⵏ'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return tzm;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uk.js
new file mode 100644
index 00000000000..af79fab5042
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uk.js
@@ -0,0 +1,146 @@
+//! moment.js locale configuration
+//! locale : Ukrainian [uk]
+//! author : zemlanin : https://github.com/zemlanin
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+ 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
+ 'dd': 'день_дні_днів',
+ 'MM': 'місяць_місяці_місяців',
+ 'yy': 'рік_роки_років'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвилина' : 'хвилину';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'година' : 'годину';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+function weekdaysCaseReplace(m, format) {
+ var weekdays = {
+ 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
+ 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
+ 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
+ },
+ nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
+ 'accusative' :
+ ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
+ 'genitive' :
+ 'nominative');
+ return weekdays[nounCase][m.day()];
+}
+function processHoursFunction(str) {
+ return function () {
+ return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+ };
+}
+
+var uk = moment.defineLocale('uk', {
+ months : {
+ 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+ 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+ },
+ monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
+ weekdays : weekdaysCaseReplace,
+ weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY р.',
+ LLL : 'D MMMM YYYY р., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY р., HH:mm'
+ },
+ calendar : {
+ sameDay: processHoursFunction('[Сьогодні '),
+ nextDay: processHoursFunction('[Завтра '),
+ lastDay: processHoursFunction('[Вчора '),
+ nextWeek: processHoursFunction('[У] dddd ['),
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return processHoursFunction('[Минулої] dddd [').call(this);
+ case 1:
+ case 2:
+ case 4:
+ return processHoursFunction('[Минулого] dddd [').call(this);
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : '%s тому',
+ s : 'декілька секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : 'годину',
+ hh : relativeTimeWithPlural,
+ d : 'день',
+ dd : relativeTimeWithPlural,
+ M : 'місяць',
+ MM : relativeTimeWithPlural,
+ y : 'рік',
+ yy : relativeTimeWithPlural
+ },
+ // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+ meridiemParse: /ночі|ранку|дня|вечора/,
+ isPM: function (input) {
+ return /^(дня|вечора)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночі';
+ } else if (hour < 12) {
+ return 'ранку';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечора';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+return uk;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uz.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uz.js
new file mode 100644
index 00000000000..378461eb003
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/uz.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : Uzbek [uz]
+//! author : Sardor Muminov : https://github.com/muminoff
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var uz = moment.defineLocale('uz', {
+ months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
+ monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+ weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+ weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'D MMMM YYYY, dddd HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бугун соат] LT [да]',
+ nextDay : '[Эртага] LT [да]',
+ nextWeek : 'dddd [куни соат] LT [да]',
+ lastDay : '[Кеча соат] LT [да]',
+ lastWeek : '[Утган] dddd [куни соат] LT [да]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'Якин %s ичида',
+ past : 'Бир неча %s олдин',
+ s : 'фурсат',
+ m : 'бир дакика',
+ mm : '%d дакика',
+ h : 'бир соат',
+ hh : '%d соат',
+ d : 'бир кун',
+ dd : '%d кун',
+ M : 'бир ой',
+ MM : '%d ой',
+ y : 'бир йил',
+ yy : '%d йил'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return uz;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/vi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/vi.js
new file mode 100644
index 00000000000..7af5cce188e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/vi.js
@@ -0,0 +1,79 @@
+//! moment.js locale configuration
+//! locale : Vietnamese [vi]
+//! author : Bang Nguyen : https://github.com/bangnk
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var vi = moment.defineLocale('vi', {
+ months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
+ monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
+ weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /sa|ch/i,
+ isPM : function (input) {
+ return /^ch$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'sa' : 'SA';
+ } else {
+ return isLower ? 'ch' : 'CH';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM [năm] YYYY',
+ LLL : 'D MMMM [năm] YYYY HH:mm',
+ LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
+ l : 'DD/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hôm nay lúc] LT',
+ nextDay: '[Ngày mai lúc] LT',
+ nextWeek: 'dddd [tuần tới lúc] LT',
+ lastDay: '[Hôm qua lúc] LT',
+ lastWeek: 'dddd [tuần rồi lúc] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s tới',
+ past : '%s trước',
+ s : 'vài giây',
+ m : 'một phút',
+ mm : '%d phút',
+ h : 'một giờ',
+ hh : '%d giờ',
+ d : 'một ngày',
+ dd : '%d ngày',
+ M : 'một tháng',
+ MM : '%d tháng',
+ y : 'một năm',
+ yy : '%d năm'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return vi;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/x-pseudo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/x-pseudo.js
new file mode 100644
index 00000000000..ee24b9f0951
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/x-pseudo.js
@@ -0,0 +1,68 @@
+//! moment.js locale configuration
+//! locale : Pseudo [x-pseudo]
+//! author : Andrew Hood : https://github.com/andrewhood125
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var xPseudo = moment.defineLocale('x-pseudo', {
+ months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
+ monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
+ weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+ weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[T~ódá~ý át] LT',
+ nextDay : '[T~ómó~rró~w át] LT',
+ nextWeek : 'dddd [át] LT',
+ lastDay : '[Ý~ést~érdá~ý át] LT',
+ lastWeek : '[L~ást] dddd [át] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'í~ñ %s',
+ past : '%s á~gó',
+ s : 'á ~féw ~sécó~ñds',
+ m : 'á ~míñ~úté',
+ mm : '%d m~íñú~tés',
+ h : 'á~ñ hó~úr',
+ hh : '%d h~óúrs',
+ d : 'á ~dáý',
+ dd : '%d d~áýs',
+ M : 'á ~móñ~th',
+ MM : '%d m~óñt~hs',
+ y : 'á ~ýéár',
+ yy : '%d ý~éárs'
+ },
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return xPseudo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/yo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/yo.js
new file mode 100644
index 00000000000..760ac96254c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/yo.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : Yoruba Nigeria [yo]
+//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var yo = moment.defineLocale('yo', {
+ months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
+ monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
+ weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
+ weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
+ weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Ònì ni] LT',
+ nextDay : '[Ọ̀la ni] LT',
+ nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
+ lastDay : '[Àna ni] LT',
+ lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ní %s',
+ past : '%s kọjá',
+ s : 'ìsẹjú aayá die',
+ m : 'ìsẹjú kan',
+ mm : 'ìsẹjú %d',
+ h : 'wákati kan',
+ hh : 'wákati %d',
+ d : 'ọjọ́ kan',
+ dd : 'ọjọ́ %d',
+ M : 'osù kan',
+ MM : 'osù %d',
+ y : 'ọdún kan',
+ yy : 'ọdún %d'
+ },
+ ordinalParse : /ọjọ́\s\d{1,2}/,
+ ordinal : 'ọjọ́ %d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return yo;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-cn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-cn.js
new file mode 100644
index 00000000000..df5d2039464
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-cn.js
@@ -0,0 +1,127 @@
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var zhCn = moment.defineLocale('zh-cn', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah点mm分',
+ LTS : 'Ah点m分s秒',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah点mm分',
+ LLLL : 'YYYY年MMMD日ddddAh点mm分',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah点mm分',
+ llll : 'YYYY年MMMD日ddddAh点mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' ||
+ meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ } else {
+ // '中午'
+ return hour >= 11 ? hour : hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : function () {
+ return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
+ },
+ nextDay : function () {
+ return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
+ },
+ lastDay : function () {
+ return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
+ },
+ nextWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = moment().startOf('week');
+ prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ lastWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = moment().startOf('week');
+ prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ sameElse : 'LL'
+ },
+ ordinalParse: /\d{1,2}(日|月|周)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ case 'M':
+ return number + '月';
+ case 'w':
+ case 'W':
+ return number + '周';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s内',
+ past : '%s前',
+ s : '几秒',
+ m : '1 分钟',
+ mm : '%d 分钟',
+ h : '1 小时',
+ hh : '%d 小时',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 个月',
+ MM : '%d 个月',
+ y : '1 年',
+ yy : '%d 年'
+ },
+ week : {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+return zhCn;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-hk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-hk.js
new file mode 100644
index 00000000000..f39fe3fbfc9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-hk.js
@@ -0,0 +1,105 @@
+//! moment.js locale configuration
+//! locale : Chinese (Hong Kong) [zh-hk]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+//! author : Konstantin : https://github.com/skfd
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var zhHk = moment.defineLocale('zh-hk', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
+
+return zhHk;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-tw.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-tw.js
new file mode 100644
index 00000000000..2e385fb2739
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/locale/zh-tw.js
@@ -0,0 +1,104 @@
+//! moment.js locale configuration
+//! locale : Chinese (Taiwan) [zh-tw]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+
+var zhTw = moment.defineLocale('zh-tw', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
+
+return zhTw;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.js
new file mode 100644
index 00000000000..a77817a8875
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.js
@@ -0,0 +1,8624 @@
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+//! moment.js locale configuration
+//! locale : Afrikaans [af]
+//! author : Werner Mollentze : https://github.com/wernerm
+
+moment.defineLocale('af', {
+ months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
+ weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+ weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+ meridiemParse: /vm|nm/i,
+ isPM : function (input) {
+ return /^nm$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'vm' : 'VM';
+ } else {
+ return isLower ? 'nm' : 'NM';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Vandag om] LT',
+ nextDay : '[Môre om] LT',
+ nextWeek : 'dddd [om] LT',
+ lastDay : '[Gister om] LT',
+ lastWeek : '[Laas] dddd [om] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'oor %s',
+ past : '%s gelede',
+ s : '\'n paar sekondes',
+ m : '\'n minuut',
+ mm : '%d minute',
+ h : '\'n uur',
+ hh : '%d ure',
+ d : '\'n dag',
+ dd : '%d dae',
+ M : '\'n maand',
+ MM : '%d maande',
+ y : '\'n jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
+ },
+ week : {
+ dow : 1, // Maandag is die eerste dag van die week.
+ doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Algeria) [ar-dz]
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+
+moment.defineLocale('ar-dz', {
+ months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Lybia) [ar-ly]
+//! author : Ali Hmer: https://github.com/kikoanis
+
+var symbolMap = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '0': '0'
+};
+var pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+};
+var plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+};
+var pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm(number),
+ str = plurals[u][pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+};
+var months = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+];
+
+moment.defineLocale('ar-ly', {
+ months : months,
+ monthsShort : months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize('s'),
+ m : pluralize('m'),
+ mm : pluralize('m'),
+ h : pluralize('h'),
+ hh : pluralize('h'),
+ d : pluralize('d'),
+ dd : pluralize('d'),
+ M : pluralize('M'),
+ MM : pluralize('M'),
+ y : pluralize('y'),
+ yy : pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Morocco) [ar-ma]
+//! author : ElFadili Yassine : https://github.com/ElFadiliY
+//! author : Abdel Said : https://github.com/abdelsaid
+
+moment.defineLocale('ar-ma', {
+ months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Saudi Arabia) [ar-sa]
+//! author : Suhail Alkowaileet : https://github.com/xsoh
+
+var symbolMap$1 = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+};
+var numberMap = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+
+moment.defineLocale('ar-sa', {
+ months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ preparse: function (string) {
+ return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$1[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Tunisia) [ar-tn]
+//! author : Nader Toukabri : https://github.com/naderio
+
+moment.defineLocale('ar-tn', {
+ months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'في %s',
+ past: 'منذ %s',
+ s: 'ثوان',
+ m: 'دقيقة',
+ mm: '%d دقائق',
+ h: 'ساعة',
+ hh: '%d ساعات',
+ d: 'يوم',
+ dd: '%d أيام',
+ M: 'شهر',
+ MM: '%d أشهر',
+ y: 'سنة',
+ yy: '%d سنوات'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic [ar]
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+
+var symbolMap$2 = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+};
+var numberMap$1 = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+var pluralForm$1 = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+};
+var plurals$1 = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+};
+var pluralize$1 = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm$1(number),
+ str = plurals$1[u][pluralForm$1(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+};
+var months$1 = [
+ 'كانون الثاني يناير',
+ 'شباط فبراير',
+ 'آذار مارس',
+ 'نيسان أبريل',
+ 'أيار مايو',
+ 'حزيران يونيو',
+ 'تموز يوليو',
+ 'آب أغسطس',
+ 'أيلول سبتمبر',
+ 'تشرين الأول أكتوبر',
+ 'تشرين الثاني نوفمبر',
+ 'كانون الأول ديسمبر'
+];
+
+moment.defineLocale('ar', {
+ months : months$1,
+ monthsShort : months$1,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize$1('s'),
+ m : pluralize$1('m'),
+ mm : pluralize$1('m'),
+ h : pluralize$1('h'),
+ hh : pluralize$1('h'),
+ d : pluralize$1('d'),
+ dd : pluralize$1('d'),
+ M : pluralize$1('M'),
+ MM : pluralize$1('M'),
+ y : pluralize$1('y'),
+ yy : pluralize$1('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap$1[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$2[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Azerbaijani [az]
+//! author : topchiyev : https://github.com/topchiyev
+
+var suffixes = {
+ 1: '-inci',
+ 5: '-inci',
+ 8: '-inci',
+ 70: '-inci',
+ 80: '-inci',
+ 2: '-nci',
+ 7: '-nci',
+ 20: '-nci',
+ 50: '-nci',
+ 3: '-üncü',
+ 4: '-üncü',
+ 100: '-üncü',
+ 6: '-ncı',
+ 9: '-uncu',
+ 10: '-uncu',
+ 30: '-uncu',
+ 60: '-ıncı',
+ 90: '-ıncı'
+};
+
+moment.defineLocale('az', {
+ months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
+ monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+ weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
+ weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+ weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[sabah saat] LT',
+ nextWeek : '[gələn həftə] dddd [saat] LT',
+ lastDay : '[dünən] LT',
+ lastWeek : '[keçən həftə] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s əvvəl',
+ s : 'birneçə saniyyə',
+ m : 'bir dəqiqə',
+ mm : '%d dəqiqə',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir il',
+ yy : '%d il'
+ },
+ meridiemParse: /gecə|səhər|gündüz|axşam/,
+ isPM : function (input) {
+ return /^(gündüz|axşam)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'gecə';
+ } else if (hour < 12) {
+ return 'səhər';
+ } else if (hour < 17) {
+ return 'gündüz';
+ } else {
+ return 'axşam';
+ }
+ },
+ ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '-ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Belarusian [be]
+//! author : Dmitry Demidov : https://github.com/demidov91
+//! author: Praleska: http://praleska.pro/
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+ 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+ 'dd': 'дзень_дні_дзён',
+ 'MM': 'месяц_месяцы_месяцаў',
+ 'yy': 'год_гады_гадоў'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвіліна' : 'хвіліну';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'гадзіна' : 'гадзіну';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+
+moment.defineLocale('be', {
+ months : {
+ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+ standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+ },
+ monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
+ weekdays : {
+ format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+ standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+ },
+ weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сёння ў] LT',
+ nextDay: '[Заўтра ў] LT',
+ lastDay: '[Учора ў] LT',
+ nextWeek: function () {
+ return '[У] dddd [ў] LT';
+ },
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'праз %s',
+ past : '%s таму',
+ s : 'некалькі секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : relativeTimeWithPlural,
+ hh : relativeTimeWithPlural,
+ d : 'дзень',
+ dd : relativeTimeWithPlural,
+ M : 'месяц',
+ MM : relativeTimeWithPlural,
+ y : 'год',
+ yy : relativeTimeWithPlural
+ },
+ meridiemParse: /ночы|раніцы|дня|вечара/,
+ isPM : function (input) {
+ return /^(дня|вечара)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночы';
+ } else if (hour < 12) {
+ return 'раніцы';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечара';
+ }
+ },
+ ordinalParse: /\d{1,2}-(і|ы|га)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+ case 'D':
+ return number + '-га';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Bulgarian [bg]
+//! author : Krasen Borisov : https://github.com/kraz
+
+moment.defineLocale('bg', {
+ months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Днес в] LT',
+ nextDay : '[Утре в] LT',
+ nextWeek : 'dddd [в] LT',
+ lastDay : '[Вчера в] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'след %s',
+ past : 'преди %s',
+ s : 'няколко секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дни',
+ M : 'месец',
+ MM : '%d месеца',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Bengali [bn]
+//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
+
+var symbolMap$3 = {
+ '1': '১',
+ '2': '২',
+ '3': '৩',
+ '4': '৪',
+ '5': '৫',
+ '6': '৬',
+ '7': '৭',
+ '8': '৮',
+ '9': '৯',
+ '0': '০'
+};
+var numberMap$2 = {
+ '১': '1',
+ '২': '2',
+ '৩': '3',
+ '৪': '4',
+ '৫': '5',
+ '৬': '6',
+ '৭': '7',
+ '৮': '8',
+ '৯': '9',
+ '০': '0'
+};
+
+moment.defineLocale('bn', {
+ months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+ monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
+ weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
+ weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+ weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm সময়',
+ LTS : 'A h:mm:ss সময়',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm সময়',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
+ },
+ calendar : {
+ sameDay : '[আজ] LT',
+ nextDay : '[আগামীকাল] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[গতকাল] LT',
+ lastWeek : '[গত] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s পরে',
+ past : '%s আগে',
+ s : 'কয়েক সেকেন্ড',
+ m : 'এক মিনিট',
+ mm : '%d মিনিট',
+ h : 'এক ঘন্টা',
+ hh : '%d ঘন্টা',
+ d : 'এক দিন',
+ dd : '%d দিন',
+ M : 'এক মাস',
+ MM : '%d মাস',
+ y : 'এক বছর',
+ yy : '%d বছর'
+ },
+ preparse: function (string) {
+ return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+ return numberMap$2[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$3[match];
+ });
+ },
+ meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'রাত' && hour >= 4) ||
+ (meridiem === 'দুপুর' && hour < 5) ||
+ meridiem === 'বিকাল') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'রাত';
+ } else if (hour < 10) {
+ return 'সকাল';
+ } else if (hour < 17) {
+ return 'দুপুর';
+ } else if (hour < 20) {
+ return 'বিকাল';
+ } else {
+ return 'রাত';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tibetan [bo]
+//! author : Thupten N. Chakrishar : https://github.com/vajradog
+
+var symbolMap$4 = {
+ '1': '༡',
+ '2': '༢',
+ '3': '༣',
+ '4': '༤',
+ '5': '༥',
+ '6': '༦',
+ '7': '༧',
+ '8': '༨',
+ '9': '༩',
+ '0': '༠'
+};
+var numberMap$3 = {
+ '༡': '1',
+ '༢': '2',
+ '༣': '3',
+ '༤': '4',
+ '༥': '5',
+ '༦': '6',
+ '༧': '7',
+ '༨': '8',
+ '༩': '9',
+ '༠': '0'
+};
+
+moment.defineLocale('bo', {
+ months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
+ weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[དི་རིང] LT',
+ nextDay : '[སང་ཉིན] LT',
+ nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
+ lastDay : '[ཁ་སང] LT',
+ lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ལ་',
+ past : '%s སྔན་ལ',
+ s : 'ལམ་སང',
+ m : 'སྐར་མ་གཅིག',
+ mm : '%d སྐར་མ',
+ h : 'ཆུ་ཚོད་གཅིག',
+ hh : '%d ཆུ་ཚོད',
+ d : 'ཉིན་གཅིག',
+ dd : '%d ཉིན་',
+ M : 'ཟླ་བ་གཅིག',
+ MM : '%d ཟླ་བ',
+ y : 'ལོ་གཅིག',
+ yy : '%d ལོ'
+ },
+ preparse: function (string) {
+ return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+ return numberMap$3[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$4[match];
+ });
+ },
+ meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
+ (meridiem === 'ཉིན་གུང' && hour < 5) ||
+ meridiem === 'དགོང་དག') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'མཚན་མོ';
+ } else if (hour < 10) {
+ return 'ཞོགས་ཀས';
+ } else if (hour < 17) {
+ return 'ཉིན་གུང';
+ } else if (hour < 20) {
+ return 'དགོང་དག';
+ } else {
+ return 'མཚན་མོ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Breton [br]
+//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+
+function relativeTimeWithMutation(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'munutenn',
+ 'MM': 'miz',
+ 'dd': 'devezh'
+ };
+ return number + ' ' + mutation(format[key], number);
+}
+function specialMutationForYears(number) {
+ switch (lastNumber(number)) {
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 9:
+ return number + ' bloaz';
+ default:
+ return number + ' vloaz';
+ }
+}
+function lastNumber(number) {
+ if (number > 9) {
+ return lastNumber(number % 10);
+ }
+ return number;
+}
+function mutation(text, number) {
+ if (number === 2) {
+ return softMutation(text);
+ }
+ return text;
+}
+function softMutation(text) {
+ var mutationTable = {
+ 'm': 'v',
+ 'b': 'v',
+ 'd': 'z'
+ };
+ if (mutationTable[text.charAt(0)] === undefined) {
+ return text;
+ }
+ return mutationTable[text.charAt(0)] + text.substring(1);
+}
+
+moment.defineLocale('br', {
+ months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
+ monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+ weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
+ weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+ weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h[e]mm A',
+ LTS : 'h[e]mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [a viz] MMMM YYYY',
+ LLL : 'D [a viz] MMMM YYYY h[e]mm A',
+ LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
+ },
+ calendar : {
+ sameDay : '[Hiziv da] LT',
+ nextDay : '[Warc\'hoazh da] LT',
+ nextWeek : 'dddd [da] LT',
+ lastDay : '[Dec\'h da] LT',
+ lastWeek : 'dddd [paset da] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'a-benn %s',
+ past : '%s \'zo',
+ s : 'un nebeud segondennoù',
+ m : 'ur vunutenn',
+ mm : relativeTimeWithMutation,
+ h : 'un eur',
+ hh : '%d eur',
+ d : 'un devezh',
+ dd : relativeTimeWithMutation,
+ M : 'ur miz',
+ MM : relativeTimeWithMutation,
+ y : 'ur bloaz',
+ yy : specialMutationForYears
+ },
+ ordinalParse: /\d{1,2}(añ|vet)/,
+ ordinal : function (number) {
+ var output = (number === 1) ? 'añ' : 'vet';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Bosnian [bs]
+//! author : Nedim Cholich : https://github.com/frontyard
+//! based on (hr) translation by Bojan Marković
+
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+moment.defineLocale('bs', {
+ months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : 'dan',
+ dd : translate,
+ M : 'mjesec',
+ MM : translate,
+ y : 'godinu',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Catalan [ca]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+moment.defineLocale('ca', {
+ months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
+ monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
+ weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+ weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextDay : function () {
+ return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastDay : function () {
+ return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'd\'aquí %s',
+ past : 'fa %s',
+ s : 'uns segons',
+ m : 'un minut',
+ mm : '%d minuts',
+ h : 'una hora',
+ hh : '%d hores',
+ d : 'un dia',
+ dd : '%d dies',
+ M : 'un mes',
+ MM : '%d mesos',
+ y : 'un any',
+ yy : '%d anys'
+ },
+ ordinalParse: /\d{1,2}(r|n|t|è|a)/,
+ ordinal : function (number, period) {
+ var output = (number === 1) ? 'r' :
+ (number === 2) ? 'n' :
+ (number === 3) ? 'r' :
+ (number === 4) ? 't' : 'è';
+ if (period === 'w' || period === 'W') {
+ output = 'a';
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Czech [cs]
+//! author : petrbela : https://github.com/petrbela
+
+var months$2 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');
+var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
+function plural$1(n) {
+ return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
+}
+function translate$1(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'minuty' : 'minut');
+ } else {
+ return result + 'minutami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'hodiny' : 'hodin');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'dny' : 'dní');
+ } else {
+ return result + 'dny';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'měsíce' : 'měsíců');
+ } else {
+ return result + 'měsíci';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'roky' : 'let');
+ } else {
+ return result + 'lety';
+ }
+ break;
+ }
+}
+
+moment.defineLocale('cs', {
+ months : months$2,
+ monthsShort : monthsShort,
+ monthsParse : (function (months, monthsShort) {
+ var i, _monthsParse = [];
+ for (i = 0; i < 12; i++) {
+ // use custom parser to solve problem with July (červenec)
+ _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+ }
+ return _monthsParse;
+ }(months$2, monthsShort)),
+ shortMonthsParse : (function (monthsShort) {
+ var i, _shortMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
+ }
+ return _shortMonthsParse;
+ }(monthsShort)),
+ longMonthsParse : (function (months) {
+ var i, _longMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
+ }
+ return _longMonthsParse;
+ }(months$2)),
+ weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+ weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
+ weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm',
+ l : 'D. M. YYYY'
+ },
+ calendar : {
+ sameDay: '[dnes v] LT',
+ nextDay: '[zítra v] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v neděli v] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [v] LT';
+ case 3:
+ return '[ve středu v] LT';
+ case 4:
+ return '[ve čtvrtek v] LT';
+ case 5:
+ return '[v pátek v] LT';
+ case 6:
+ return '[v sobotu v] LT';
+ }
+ },
+ lastDay: '[včera v] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulou neděli v] LT';
+ case 1:
+ case 2:
+ return '[minulé] dddd [v] LT';
+ case 3:
+ return '[minulou středu v] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [v] LT';
+ case 6:
+ return '[minulou sobotu v] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'před %s',
+ s : translate$1,
+ m : translate$1,
+ mm : translate$1,
+ h : translate$1,
+ hh : translate$1,
+ d : translate$1,
+ dd : translate$1,
+ M : translate$1,
+ MM : translate$1,
+ y : translate$1,
+ yy : translate$1
+ },
+ ordinalParse : /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chuvash [cv]
+//! author : Anatoly Mironov : https://github.com/mirontoli
+
+moment.defineLocale('cv', {
+ months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
+ monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
+ weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
+ weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
+ weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
+ LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+ LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
+ },
+ calendar : {
+ sameDay: '[Паян] LT [сехетре]',
+ nextDay: '[Ыран] LT [сехетре]',
+ lastDay: '[Ӗнер] LT [сехетре]',
+ nextWeek: '[Ҫитес] dddd LT [сехетре]',
+ lastWeek: '[Иртнӗ] dddd LT [сехетре]',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (output) {
+ var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
+ return output + affix;
+ },
+ past : '%s каялла',
+ s : 'пӗр-ик ҫеккунт',
+ m : 'пӗр минут',
+ mm : '%d минут',
+ h : 'пӗр сехет',
+ hh : '%d сехет',
+ d : 'пӗр кун',
+ dd : '%d кун',
+ M : 'пӗр уйӑх',
+ MM : '%d уйӑх',
+ y : 'пӗр ҫул',
+ yy : '%d ҫул'
+ },
+ ordinalParse: /\d{1,2}-мӗш/,
+ ordinal : '%d-мӗш',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Welsh [cy]
+//! author : Robert Allen : https://github.com/robgallen
+//! author : https://github.com/ryangreaves
+
+moment.defineLocale('cy', {
+ months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
+ monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
+ weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
+ weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+ weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ // time formats are the same as en-gb
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[Heddiw am] LT',
+ nextDay: '[Yfory am] LT',
+ nextWeek: 'dddd [am] LT',
+ lastDay: '[Ddoe am] LT',
+ lastWeek: 'dddd [diwethaf am] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'mewn %s',
+ past: '%s yn ôl',
+ s: 'ychydig eiliadau',
+ m: 'munud',
+ mm: '%d munud',
+ h: 'awr',
+ hh: '%d awr',
+ d: 'diwrnod',
+ dd: '%d diwrnod',
+ M: 'mis',
+ MM: '%d mis',
+ y: 'blwyddyn',
+ yy: '%d flynedd'
+ },
+ ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+ // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+ ordinal: function (number) {
+ var b = number,
+ output = '',
+ lookup = [
+ '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
+ 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
+ ];
+ if (b > 20) {
+ if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+ output = 'fed'; // not 30ain, 70ain or 90ain
+ } else {
+ output = 'ain';
+ }
+ } else if (b > 0) {
+ output = lookup[b];
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Danish [da]
+//! author : Ulrik Nielsen : https://github.com/mrbase
+
+moment.defineLocale('da', {
+ months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[I dag kl.] LT',
+ nextDay : '[I morgen kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[I går kl.] LT',
+ lastWeek : '[sidste] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'få sekunder',
+ m : 'et minut',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dage',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'et år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : German (Austria) [de-at]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Martin Groller : https://github.com/MadMG
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+moment.defineLocale('de-at', {
+ months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime,
+ mm : '%d Minuten',
+ h : processRelativeTime,
+ hh : '%d Stunden',
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : German [de]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+moment.defineLocale('de', {
+ months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime$1,
+ mm : '%d Minuten',
+ h : processRelativeTime$1,
+ hh : '%d Stunden',
+ d : processRelativeTime$1,
+ dd : processRelativeTime$1,
+ M : processRelativeTime$1,
+ MM : processRelativeTime$1,
+ y : processRelativeTime$1,
+ yy : processRelativeTime$1
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Maldivian [dv]
+//! author : Jawish Hameed : https://github.com/jawish
+
+var months$3 = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+];
+var weekdays = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+];
+
+moment.defineLocale('dv', {
+ months : months$3,
+ monthsShort : months$3,
+ weekdays : weekdays,
+ weekdaysShort : weekdays,
+ weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+ longDateFormat : {
+
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/M/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /މކ|މފ/,
+ isPM : function (input) {
+ return 'މފ' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'މކ';
+ } else {
+ return 'މފ';
+ }
+ },
+ calendar : {
+ sameDay : '[މިއަދު] LT',
+ nextDay : '[މާދަމާ] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[އިއްޔެ] LT',
+ lastWeek : '[ފާއިތުވި] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ތެރޭގައި %s',
+ past : 'ކުރިން %s',
+ s : 'ސިކުންތުކޮޅެއް',
+ m : 'މިނިޓެއް',
+ mm : 'މިނިޓު %d',
+ h : 'ގަޑިއިރެއް',
+ hh : 'ގަޑިއިރު %d',
+ d : 'ދުވަހެއް',
+ dd : 'ދުވަސް %d',
+ M : 'މަހެއް',
+ MM : 'މަސް %d',
+ y : 'އަހަރެއް',
+ yy : 'އަހަރު %d'
+ },
+ preparse: function (string) {
+ return string.replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/,/g, '،');
+ },
+ week : {
+ dow : 7, // Sunday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+}
+
+//! moment.js locale configuration
+//! locale : Greek [el]
+//! author : Aggelos Karalias : https://github.com/mehiel
+
+moment.defineLocale('el', {
+ monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
+ monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
+ months : function (momentToFormat, format) {
+ if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
+ return this._monthsGenitiveEl[momentToFormat.month()];
+ } else {
+ return this._monthsNominativeEl[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+ weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
+ weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+ weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'μμ' : 'ΜΜ';
+ } else {
+ return isLower ? 'πμ' : 'ΠΜ';
+ }
+ },
+ isPM : function (input) {
+ return ((input + '').toLowerCase()[0] === 'μ');
+ },
+ meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendarEl : {
+ sameDay : '[Σήμερα {}] LT',
+ nextDay : '[Αύριο {}] LT',
+ nextWeek : 'dddd [{}] LT',
+ lastDay : '[Χθες {}] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 6:
+ return '[το προηγούμενο] dddd [{}] LT';
+ default:
+ return '[την προηγούμενη] dddd [{}] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ calendar : function (key, mom) {
+ var output = this._calendarEl[key],
+ hours = mom && mom.hours();
+ if (isFunction(output)) {
+ output = output.apply(mom);
+ }
+ return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
+ },
+ relativeTime : {
+ future : 'σε %s',
+ past : '%s πριν',
+ s : 'λίγα δευτερόλεπτα',
+ m : 'ένα λεπτό',
+ mm : '%d λεπτά',
+ h : 'μία ώρα',
+ hh : '%d ώρες',
+ d : 'μία μέρα',
+ dd : '%d μέρες',
+ M : 'ένας μήνας',
+ MM : '%d μήνες',
+ y : 'ένας χρόνος',
+ yy : '%d χρόνια'
+ },
+ ordinalParse: /\d{1,2}η/,
+ ordinal: '%dη',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (Australia) [en-au]
+//! author : Jared Morse : https://github.com/jarcoal
+
+moment.defineLocale('en-au', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (Canada) [en-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+moment.defineLocale('en-ca', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'YYYY-MM-DD',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (United Kingdom) [en-gb]
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+
+moment.defineLocale('en-gb', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (Ireland) [en-ie]
+//! author : Chris Cartlidge : https://github.com/chriscartlidge
+
+moment.defineLocale('en-ie', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (New Zealand) [en-nz]
+//! author : Luke McGregor : https://github.com/lukemcgregor
+
+moment.defineLocale('en-nz', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Esperanto [eo]
+//! author : Colin Dean : https://github.com/colindean
+//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+
+moment.defineLocale('eo', {
+ months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
+ weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
+ weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D[-an de] MMMM, YYYY',
+ LLL : 'D[-an de] MMMM, YYYY HH:mm',
+ LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
+ },
+ meridiemParse: /[ap]\.t\.m/i,
+ isPM: function (input) {
+ return input.charAt(0).toLowerCase() === 'p';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'p.t.m.' : 'P.T.M.';
+ } else {
+ return isLower ? 'a.t.m.' : 'A.T.M.';
+ }
+ },
+ calendar : {
+ sameDay : '[Hodiaŭ je] LT',
+ nextDay : '[Morgaŭ je] LT',
+ nextWeek : 'dddd [je] LT',
+ lastDay : '[Hieraŭ je] LT',
+ lastWeek : '[pasinta] dddd [je] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'je %s',
+ past : 'antaŭ %s',
+ s : 'sekundoj',
+ m : 'minuto',
+ mm : '%d minutoj',
+ h : 'horo',
+ hh : '%d horoj',
+ d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
+ dd : '%d tagoj',
+ M : 'monato',
+ MM : '%d monatoj',
+ y : 'jaro',
+ yy : '%d jaroj'
+ },
+ ordinalParse: /\d{1,2}a/,
+ ordinal : '%da',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Spanish (Dominican Republic) [es-do]
+
+var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
+var monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+moment.defineLocale('es-do', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort$1[m.month()];
+ } else {
+ return monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY h:mm A',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Spanish [es]
+//! author : Julio Napurí : https://github.com/julionc
+
+var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
+var monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+moment.defineLocale('es', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort$2[m.month()];
+ } else {
+ return monthsShortDot$1[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Estonian [et]
+//! author : Henry Kehlmann : https://github.com/madhenry
+//! improvements : Illimar Tambek : https://github.com/ragulka
+
+function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+ 'm' : ['ühe minuti', 'üks minut'],
+ 'mm': [number + ' minuti', number + ' minutit'],
+ 'h' : ['ühe tunni', 'tund aega', 'üks tund'],
+ 'hh': [number + ' tunni', number + ' tundi'],
+ 'd' : ['ühe päeva', 'üks päev'],
+ 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
+ 'MM': [number + ' kuu', number + ' kuud'],
+ 'y' : ['ühe aasta', 'aasta', 'üks aasta'],
+ 'yy': [number + ' aasta', number + ' aastat']
+ };
+ if (withoutSuffix) {
+ return format[key][2] ? format[key][2] : format[key][1];
+ }
+ return isFuture ? format[key][0] : format[key][1];
+}
+
+moment.defineLocale('et', {
+ months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
+ monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
+ weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
+ weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
+ weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Täna,] LT',
+ nextDay : '[Homme,] LT',
+ nextWeek : '[Järgmine] dddd LT',
+ lastDay : '[Eile,] LT',
+ lastWeek : '[Eelmine] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s pärast',
+ past : '%s tagasi',
+ s : processRelativeTime$2,
+ m : processRelativeTime$2,
+ mm : processRelativeTime$2,
+ h : processRelativeTime$2,
+ hh : processRelativeTime$2,
+ d : processRelativeTime$2,
+ dd : '%d päeva',
+ M : processRelativeTime$2,
+ MM : processRelativeTime$2,
+ y : processRelativeTime$2,
+ yy : processRelativeTime$2
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Basque [eu]
+//! author : Eneko Illarramendi : https://github.com/eillarra
+
+moment.defineLocale('eu', {
+ months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
+ monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
+ weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
+ weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY[ko] MMMM[ren] D[a]',
+ LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+ LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
+ l : 'YYYY-M-D',
+ ll : 'YYYY[ko] MMM D[a]',
+ lll : 'YYYY[ko] MMM D[a] HH:mm',
+ llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
+ },
+ calendar : {
+ sameDay : '[gaur] LT[etan]',
+ nextDay : '[bihar] LT[etan]',
+ nextWeek : 'dddd LT[etan]',
+ lastDay : '[atzo] LT[etan]',
+ lastWeek : '[aurreko] dddd LT[etan]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s barru',
+ past : 'duela %s',
+ s : 'segundo batzuk',
+ m : 'minutu bat',
+ mm : '%d minutu',
+ h : 'ordu bat',
+ hh : '%d ordu',
+ d : 'egun bat',
+ dd : '%d egun',
+ M : 'hilabete bat',
+ MM : '%d hilabete',
+ y : 'urte bat',
+ yy : '%d urte'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Persian [fa]
+//! author : Ebrahim Byagowi : https://github.com/ebraminio
+
+var symbolMap$5 = {
+ '1': '۱',
+ '2': '۲',
+ '3': '۳',
+ '4': '۴',
+ '5': '۵',
+ '6': '۶',
+ '7': '۷',
+ '8': '۸',
+ '9': '۹',
+ '0': '۰'
+};
+var numberMap$4 = {
+ '۱': '1',
+ '۲': '2',
+ '۳': '3',
+ '۴': '4',
+ '۵': '5',
+ '۶': '6',
+ '۷': '7',
+ '۸': '8',
+ '۹': '9',
+ '۰': '0'
+};
+
+moment.defineLocale('fa', {
+ months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /قبل از ظهر|بعد از ظهر/,
+ isPM: function (input) {
+ return /بعد از ظهر/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'قبل از ظهر';
+ } else {
+ return 'بعد از ظهر';
+ }
+ },
+ calendar : {
+ sameDay : '[امروز ساعت] LT',
+ nextDay : '[فردا ساعت] LT',
+ nextWeek : 'dddd [ساعت] LT',
+ lastDay : '[دیروز ساعت] LT',
+ lastWeek : 'dddd [پیش] [ساعت] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'در %s',
+ past : '%s پیش',
+ s : 'چندین ثانیه',
+ m : 'یک دقیقه',
+ mm : '%d دقیقه',
+ h : 'یک ساعت',
+ hh : '%d ساعت',
+ d : 'یک روز',
+ dd : '%d روز',
+ M : 'یک ماه',
+ MM : '%d ماه',
+ y : 'یک سال',
+ yy : '%d سال'
+ },
+ preparse: function (string) {
+ return string.replace(/[۰-۹]/g, function (match) {
+ return numberMap$4[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$5[match];
+ }).replace(/,/g, '،');
+ },
+ ordinalParse: /\d{1,2}م/,
+ ordinal : '%dم',
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Finnish [fi]
+//! author : Tarmo Aidantausta : https://github.com/bleadof
+
+var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');
+var numbersFuture = [
+ 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
+ numbersPast[7], numbersPast[8], numbersPast[9]
+ ];
+function translate$2(number, withoutSuffix, key, isFuture) {
+ var result = '';
+ switch (key) {
+ case 's':
+ return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+ case 'm':
+ return isFuture ? 'minuutin' : 'minuutti';
+ case 'mm':
+ result = isFuture ? 'minuutin' : 'minuuttia';
+ break;
+ case 'h':
+ return isFuture ? 'tunnin' : 'tunti';
+ case 'hh':
+ result = isFuture ? 'tunnin' : 'tuntia';
+ break;
+ case 'd':
+ return isFuture ? 'päivän' : 'päivä';
+ case 'dd':
+ result = isFuture ? 'päivän' : 'päivää';
+ break;
+ case 'M':
+ return isFuture ? 'kuukauden' : 'kuukausi';
+ case 'MM':
+ result = isFuture ? 'kuukauden' : 'kuukautta';
+ break;
+ case 'y':
+ return isFuture ? 'vuoden' : 'vuosi';
+ case 'yy':
+ result = isFuture ? 'vuoden' : 'vuotta';
+ break;
+ }
+ result = verbalNumber(number, isFuture) + ' ' + result;
+ return result;
+}
+function verbalNumber(number, isFuture) {
+ return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
+}
+
+moment.defineLocale('fi', {
+ months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
+ monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
+ weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
+ weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'Do MMMM[ta] YYYY',
+ LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
+ LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
+ l : 'D.M.YYYY',
+ ll : 'Do MMM YYYY',
+ lll : 'Do MMM YYYY, [klo] HH.mm',
+ llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
+ },
+ calendar : {
+ sameDay : '[tänään] [klo] LT',
+ nextDay : '[huomenna] [klo] LT',
+ nextWeek : 'dddd [klo] LT',
+ lastDay : '[eilen] [klo] LT',
+ lastWeek : '[viime] dddd[na] [klo] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s päästä',
+ past : '%s sitten',
+ s : translate$2,
+ m : translate$2,
+ mm : translate$2,
+ h : translate$2,
+ hh : translate$2,
+ d : translate$2,
+ dd : translate$2,
+ M : translate$2,
+ MM : translate$2,
+ y : translate$2,
+ yy : translate$2
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Faroese [fo]
+//! author : Ragnar Johannesen : https://github.com/ragnar123
+
+moment.defineLocale('fo', {
+ months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
+ weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+ weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D. MMMM, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Í dag kl.] LT',
+ nextDay : '[Í morgin kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[Í gjár kl.] LT',
+ lastWeek : '[síðstu] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'um %s',
+ past : '%s síðani',
+ s : 'fá sekund',
+ m : 'ein minutt',
+ mm : '%d minuttir',
+ h : 'ein tími',
+ hh : '%d tímar',
+ d : 'ein dagur',
+ dd : '%d dagar',
+ M : 'ein mánaði',
+ MM : '%d mánaðir',
+ y : 'eitt ár',
+ yy : '%d ár'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : French (Canada) [fr-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+moment.defineLocale('fr-ca', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ }
+});
+
+//! moment.js locale configuration
+//! locale : French (Switzerland) [fr-ch]
+//! author : Gaspard Bucher : https://github.com/gaspard
+
+moment.defineLocale('fr-ch', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : French [fr]
+//! author : John Fischer : https://github.com/jfroffice
+
+moment.defineLocale('fr', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : '');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Frisian [fy]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');
+var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
+
+moment.defineLocale('fy', {
+ months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
+ weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
+ weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[hjoed om] LT',
+ nextDay: '[moarn om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[juster om] LT',
+ lastWeek: '[ôfrûne] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'oer %s',
+ past : '%s lyn',
+ s : 'in pear sekonden',
+ m : 'ien minút',
+ mm : '%d minuten',
+ h : 'ien oere',
+ hh : '%d oeren',
+ d : 'ien dei',
+ dd : '%d dagen',
+ M : 'ien moanne',
+ MM : '%d moannen',
+ y : 'ien jier',
+ yy : '%d jierren'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Scottish Gaelic [gd]
+//! author : Jon Ashdown : https://github.com/jonashdown
+
+var months$4 = [
+ 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
+];
+
+var monthsShort$3 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
+
+var weekdays$1 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
+
+var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
+
+var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+moment.defineLocale('gd', {
+ months : months$4,
+ monthsShort : monthsShort$3,
+ monthsParseExact : true,
+ weekdays : weekdays$1,
+ weekdaysShort : weekdaysShort,
+ weekdaysMin : weekdaysMin,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[An-diugh aig] LT',
+ nextDay : '[A-màireach aig] LT',
+ nextWeek : 'dddd [aig] LT',
+ lastDay : '[An-dè aig] LT',
+ lastWeek : 'dddd [seo chaidh] [aig] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ann an %s',
+ past : 'bho chionn %s',
+ s : 'beagan diogan',
+ m : 'mionaid',
+ mm : '%d mionaidean',
+ h : 'uair',
+ hh : '%d uairean',
+ d : 'latha',
+ dd : '%d latha',
+ M : 'mìos',
+ MM : '%d mìosan',
+ y : 'bliadhna',
+ yy : '%d bliadhna'
+ },
+ ordinalParse : /\d{1,2}(d|na|mh)/,
+ ordinal : function (number) {
+ var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Galician [gl]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+moment.defineLocale('gl', {
+ months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
+ monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ lastDay : function () {
+ return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
+ },
+ lastWeek : function () {
+ return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (str) {
+ if (str.indexOf('un') === 0) {
+ return 'n' + str;
+ }
+ return 'en ' + str;
+ },
+ past : 'hai %s',
+ s : 'uns segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'unha hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un ano',
+ yy : '%d anos'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Hebrew [he]
+//! author : Tomer Cohen : https://github.com/tomer
+//! author : Moshe Simantov : https://github.com/DevelopmentIL
+//! author : Tal Ater : https://github.com/TalAter
+
+moment.defineLocale('he', {
+ months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
+ monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
+ weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+ weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+ weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [ב]MMMM YYYY',
+ LLL : 'D [ב]MMMM YYYY HH:mm',
+ LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
+ l : 'D/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[היום ב־]LT',
+ nextDay : '[מחר ב־]LT',
+ nextWeek : 'dddd [בשעה] LT',
+ lastDay : '[אתמול ב־]LT',
+ lastWeek : '[ביום] dddd [האחרון בשעה] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'בעוד %s',
+ past : 'לפני %s',
+ s : 'מספר שניות',
+ m : 'דקה',
+ mm : '%d דקות',
+ h : 'שעה',
+ hh : function (number) {
+ if (number === 2) {
+ return 'שעתיים';
+ }
+ return number + ' שעות';
+ },
+ d : 'יום',
+ dd : function (number) {
+ if (number === 2) {
+ return 'יומיים';
+ }
+ return number + ' ימים';
+ },
+ M : 'חודש',
+ MM : function (number) {
+ if (number === 2) {
+ return 'חודשיים';
+ }
+ return number + ' חודשים';
+ },
+ y : 'שנה',
+ yy : function (number) {
+ if (number === 2) {
+ return 'שנתיים';
+ } else if (number % 10 === 0 && number !== 10) {
+ return number + ' שנה';
+ }
+ return number + ' שנים';
+ }
+ },
+ meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+ isPM : function (input) {
+ return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 5) {
+ return 'לפנות בוקר';
+ } else if (hour < 10) {
+ return 'בבוקר';
+ } else if (hour < 12) {
+ return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+ } else if (hour < 18) {
+ return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+ } else {
+ return 'בערב';
+ }
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Hindi [hi]
+//! author : Mayank Singhal : https://github.com/mayanksinghal
+
+var symbolMap$6 = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap$5 = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+moment.defineLocale('hi', {
+ months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
+ monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm बजे',
+ LTS : 'A h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[कल] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[कल] LT',
+ lastWeek : '[पिछले] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s में',
+ past : '%s पहले',
+ s : 'कुछ ही क्षण',
+ m : 'एक मिनट',
+ mm : '%d मिनट',
+ h : 'एक घंटा',
+ hh : '%d घंटे',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महीने',
+ MM : '%d महीने',
+ y : 'एक वर्ष',
+ yy : '%d वर्ष'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap$5[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$6[match];
+ });
+ },
+ // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+ meridiemParse: /रात|सुबह|दोपहर|शाम/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सुबह') {
+ return hour;
+ } else if (meridiem === 'दोपहर') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'शाम') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात';
+ } else if (hour < 10) {
+ return 'सुबह';
+ } else if (hour < 17) {
+ return 'दोपहर';
+ } else if (hour < 20) {
+ return 'शाम';
+ } else {
+ return 'रात';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Croatian [hr]
+//! author : Bojan Marković : https://github.com/bmarkovic
+
+function translate$3(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+moment.defineLocale('hr', {
+ months : {
+ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
+ standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
+ },
+ monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate$3,
+ mm : translate$3,
+ h : translate$3,
+ hh : translate$3,
+ d : 'dan',
+ dd : translate$3,
+ M : 'mjesec',
+ MM : translate$3,
+ y : 'godinu',
+ yy : translate$3
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Hungarian [hu]
+//! author : Adam Brunner : https://github.com/adambrunner
+
+var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
+function translate$4(number, withoutSuffix, key, isFuture) {
+ var num = number,
+ suffix;
+ switch (key) {
+ case 's':
+ return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+ case 'm':
+ return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'mm':
+ return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'h':
+ return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'hh':
+ return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'd':
+ return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'dd':
+ return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'M':
+ return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'MM':
+ return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'y':
+ return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 'yy':
+ return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+ }
+ return '';
+}
+function week(isFuture) {
+ return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
+}
+
+moment.defineLocale('hu', {
+ months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
+ monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
+ weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+ weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+ weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY.MM.DD.',
+ LL : 'YYYY. MMMM D.',
+ LLL : 'YYYY. MMMM D. H:mm',
+ LLLL : 'YYYY. MMMM D., dddd H:mm'
+ },
+ meridiemParse: /de|du/i,
+ isPM: function (input) {
+ return input.charAt(1).toLowerCase() === 'u';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower === true ? 'de' : 'DE';
+ } else {
+ return isLower === true ? 'du' : 'DU';
+ }
+ },
+ calendar : {
+ sameDay : '[ma] LT[-kor]',
+ nextDay : '[holnap] LT[-kor]',
+ nextWeek : function () {
+ return week.call(this, true);
+ },
+ lastDay : '[tegnap] LT[-kor]',
+ lastWeek : function () {
+ return week.call(this, false);
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s múlva',
+ past : '%s',
+ s : translate$4,
+ m : translate$4,
+ mm : translate$4,
+ h : translate$4,
+ hh : translate$4,
+ d : translate$4,
+ dd : translate$4,
+ M : translate$4,
+ MM : translate$4,
+ y : translate$4,
+ yy : translate$4
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Armenian [hy-am]
+//! author : Armendarabyan : https://github.com/armendarabyan
+
+moment.defineLocale('hy-am', {
+ months : {
+ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+ standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
+ },
+ monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
+ weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY թ.',
+ LLL : 'D MMMM YYYY թ., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
+ },
+ calendar : {
+ sameDay: '[այսօր] LT',
+ nextDay: '[վաղը] LT',
+ lastDay: '[երեկ] LT',
+ nextWeek: function () {
+ return 'dddd [օրը ժամը] LT';
+ },
+ lastWeek: function () {
+ return '[անցած] dddd [օրը ժամը] LT';
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s հետո',
+ past : '%s առաջ',
+ s : 'մի քանի վայրկյան',
+ m : 'րոպե',
+ mm : '%d րոպե',
+ h : 'ժամ',
+ hh : '%d ժամ',
+ d : 'օր',
+ dd : '%d օր',
+ M : 'ամիս',
+ MM : '%d ամիս',
+ y : 'տարի',
+ yy : '%d տարի'
+ },
+ meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
+ isPM: function (input) {
+ return /^(ցերեկվա|երեկոյան)$/.test(input);
+ },
+ meridiem : function (hour) {
+ if (hour < 4) {
+ return 'գիշերվա';
+ } else if (hour < 12) {
+ return 'առավոտվա';
+ } else if (hour < 17) {
+ return 'ցերեկվա';
+ } else {
+ return 'երեկոյան';
+ }
+ },
+ ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'DDD':
+ case 'w':
+ case 'W':
+ case 'DDDo':
+ if (number === 1) {
+ return number + '-ին';
+ }
+ return number + '-րդ';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Indonesian [id]
+//! author : Mohammad Satrio Utomo : https://github.com/tyok
+//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+
+moment.defineLocale('id', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|siang|sore|malam/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'siang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sore' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'siang';
+ } else if (hours < 19) {
+ return 'sore';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Besok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kemarin pukul] LT',
+ lastWeek : 'dddd [lalu pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lalu',
+ s : 'beberapa detik',
+ m : 'semenit',
+ mm : '%d menit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Icelandic [is]
+//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+
+function plural$2(n) {
+ if (n % 100 === 11) {
+ return true;
+ } else if (n % 10 === 1) {
+ return false;
+ }
+ return true;
+}
+function translate$5(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+ case 'm':
+ return withoutSuffix ? 'mínúta' : 'mínútu';
+ case 'mm':
+ if (plural$2(number)) {
+ return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+ } else if (withoutSuffix) {
+ return result + 'mínúta';
+ }
+ return result + 'mínútu';
+ case 'hh':
+ if (plural$2(number)) {
+ return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+ }
+ return result + 'klukkustund';
+ case 'd':
+ if (withoutSuffix) {
+ return 'dagur';
+ }
+ return isFuture ? 'dag' : 'degi';
+ case 'dd':
+ if (plural$2(number)) {
+ if (withoutSuffix) {
+ return result + 'dagar';
+ }
+ return result + (isFuture ? 'daga' : 'dögum');
+ } else if (withoutSuffix) {
+ return result + 'dagur';
+ }
+ return result + (isFuture ? 'dag' : 'degi');
+ case 'M':
+ if (withoutSuffix) {
+ return 'mánuður';
+ }
+ return isFuture ? 'mánuð' : 'mánuði';
+ case 'MM':
+ if (plural$2(number)) {
+ if (withoutSuffix) {
+ return result + 'mánuðir';
+ }
+ return result + (isFuture ? 'mánuði' : 'mánuðum');
+ } else if (withoutSuffix) {
+ return result + 'mánuður';
+ }
+ return result + (isFuture ? 'mánuð' : 'mánuði');
+ case 'y':
+ return withoutSuffix || isFuture ? 'ár' : 'ári';
+ case 'yy':
+ if (plural$2(number)) {
+ return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+ }
+ return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+ }
+}
+
+moment.defineLocale('is', {
+ months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+ weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
+ weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+ weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
+ },
+ calendar : {
+ sameDay : '[í dag kl.] LT',
+ nextDay : '[á morgun kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[í gær kl.] LT',
+ lastWeek : '[síðasta] dddd [kl.] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'eftir %s',
+ past : 'fyrir %s síðan',
+ s : translate$5,
+ m : translate$5,
+ mm : translate$5,
+ h : 'klukkustund',
+ hh : translate$5,
+ d : translate$5,
+ dd : translate$5,
+ M : translate$5,
+ MM : translate$5,
+ y : translate$5,
+ yy : translate$5
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Italian [it]
+//! author : Lorenzo : https://github.com/aliem
+//! author: Mattia Larentis: https://github.com/nostalgiaz
+
+moment.defineLocale('it', {
+ months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
+ monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+ weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
+ weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
+ weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Oggi alle] LT',
+ nextDay: '[Domani alle] LT',
+ nextWeek: 'dddd [alle] LT',
+ lastDay: '[Ieri alle] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[la scorsa] dddd [alle] LT';
+ default:
+ return '[lo scorso] dddd [alle] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
+ },
+ past : '%s fa',
+ s : 'alcuni secondi',
+ m : 'un minuto',
+ mm : '%d minuti',
+ h : 'un\'ora',
+ hh : '%d ore',
+ d : 'un giorno',
+ dd : '%d giorni',
+ M : 'un mese',
+ MM : '%d mesi',
+ y : 'un anno',
+ yy : '%d anni'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Japanese [ja]
+//! author : LI Long : https://github.com/baryon
+
+moment.defineLocale('ja', {
+ months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+ weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
+ weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
+ longDateFormat : {
+ LT : 'Ah時m分',
+ LTS : 'Ah時m分s秒',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY年M月D日',
+ LLL : 'YYYY年M月D日Ah時m分',
+ LLLL : 'YYYY年M月D日Ah時m分 dddd'
+ },
+ meridiemParse: /午前|午後/i,
+ isPM : function (input) {
+ return input === '午後';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return '午前';
+ } else {
+ return '午後';
+ }
+ },
+ calendar : {
+ sameDay : '[今日] LT',
+ nextDay : '[明日] LT',
+ nextWeek : '[来週]dddd LT',
+ lastDay : '[昨日] LT',
+ lastWeek : '[前週]dddd LT',
+ sameElse : 'L'
+ },
+ ordinalParse : /\d{1,2}日/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s後',
+ past : '%s前',
+ s : '数秒',
+ m : '1分',
+ mm : '%d分',
+ h : '1時間',
+ hh : '%d時間',
+ d : '1日',
+ dd : '%d日',
+ M : '1ヶ月',
+ MM : '%dヶ月',
+ y : '1年',
+ yy : '%d年'
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Javanese [jv]
+//! author : Rony Lantip : https://github.com/lantip
+//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
+
+moment.defineLocale('jv', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
+ weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /enjing|siyang|sonten|ndalu/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'enjing') {
+ return hour;
+ } else if (meridiem === 'siyang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'enjing';
+ } else if (hours < 15) {
+ return 'siyang';
+ } else if (hours < 19) {
+ return 'sonten';
+ } else {
+ return 'ndalu';
+ }
+ },
+ calendar : {
+ sameDay : '[Dinten puniko pukul] LT',
+ nextDay : '[Mbenjang pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kala wingi pukul] LT',
+ lastWeek : 'dddd [kepengker pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'wonten ing %s',
+ past : '%s ingkang kepengker',
+ s : 'sawetawis detik',
+ m : 'setunggal menit',
+ mm : '%d menit',
+ h : 'setunggal jam',
+ hh : '%d jam',
+ d : 'sedinten',
+ dd : '%d dinten',
+ M : 'sewulan',
+ MM : '%d wulan',
+ y : 'setaun',
+ yy : '%d taun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Georgian [ka]
+//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+
+moment.defineLocale('ka', {
+ months : {
+ standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+ format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+ },
+ monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+ weekdays : {
+ standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+ format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+ isFormat: /(წინა|შემდეგ)/
+ },
+ weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+ weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[დღეს] LT[-ზე]',
+ nextDay : '[ხვალ] LT[-ზე]',
+ lastDay : '[გუშინ] LT[-ზე]',
+ nextWeek : '[შემდეგ] dddd LT[-ზე]',
+ lastWeek : '[წინა] dddd LT-ზე',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
+ s.replace(/ი$/, 'ში') :
+ s + 'ში';
+ },
+ past : function (s) {
+ if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
+ return s.replace(/(ი|ე)$/, 'ის წინ');
+ }
+ if ((/წელი/).test(s)) {
+ return s.replace(/წელი$/, 'წლის წინ');
+ }
+ },
+ s : 'რამდენიმე წამი',
+ m : 'წუთი',
+ mm : '%d წუთი',
+ h : 'საათი',
+ hh : '%d საათი',
+ d : 'დღე',
+ dd : '%d დღე',
+ M : 'თვე',
+ MM : '%d თვე',
+ y : 'წელი',
+ yy : '%d წელი'
+ },
+ ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
+ ordinal : function (number) {
+ if (number === 0) {
+ return number;
+ }
+ if (number === 1) {
+ return number + '-ლი';
+ }
+ if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
+ return 'მე-' + number;
+ }
+ return number + '-ე';
+ },
+ week : {
+ dow : 1,
+ doy : 7
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Kazakh [kk]
+//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
+
+var suffixes$1 = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+};
+
+moment.defineLocale('kk', {
+ months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
+ monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+ weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
+ weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+ weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгін сағат] LT',
+ nextDay : '[Ертең сағат] LT',
+ nextWeek : 'dddd [сағат] LT',
+ lastDay : '[Кеше сағат] LT',
+ lastWeek : '[Өткен аптаның] dddd [сағат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ішінде',
+ past : '%s бұрын',
+ s : 'бірнеше секунд',
+ m : 'бір минут',
+ mm : '%d минут',
+ h : 'бір сағат',
+ hh : '%d сағат',
+ d : 'бір күн',
+ dd : '%d күн',
+ M : 'бір ай',
+ MM : '%d ай',
+ y : 'бір жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(ші|шы)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Cambodian [km]
+//! author : Kruy Vanna : https://github.com/kruyvanna
+
+moment.defineLocale('km', {
+ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
+ nextDay: '[ស្អែក ម៉ោង] LT',
+ nextWeek: 'dddd [ម៉ោង] LT',
+ lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+ lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: '%sទៀត',
+ past: '%sមុន',
+ s: 'ប៉ុន្មានវិនាទី',
+ m: 'មួយនាទី',
+ mm: '%d នាទី',
+ h: 'មួយម៉ោង',
+ hh: '%d ម៉ោង',
+ d: 'មួយថ្ងៃ',
+ dd: '%d ថ្ងៃ',
+ M: 'មួយខែ',
+ MM: '%d ខែ',
+ y: 'មួយឆ្នាំ',
+ yy: '%d ឆ្នាំ'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Korean [ko]
+//! author : Kyungwook, Park : https://github.com/kyungw00k
+//! author : Jeeeyul Lee <jeeeyul@gmail.com>
+
+moment.defineLocale('ko', {
+ months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+ weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
+ weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
+ longDateFormat : {
+ LT : 'A h시 m분',
+ LTS : 'A h시 m분 s초',
+ L : 'YYYY.MM.DD',
+ LL : 'YYYY년 MMMM D일',
+ LLL : 'YYYY년 MMMM D일 A h시 m분',
+ LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
+ },
+ calendar : {
+ sameDay : '오늘 LT',
+ nextDay : '내일 LT',
+ nextWeek : 'dddd LT',
+ lastDay : '어제 LT',
+ lastWeek : '지난주 dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s 후',
+ past : '%s 전',
+ s : '몇 초',
+ ss : '%d초',
+ m : '일분',
+ mm : '%d분',
+ h : '한 시간',
+ hh : '%d시간',
+ d : '하루',
+ dd : '%d일',
+ M : '한 달',
+ MM : '%d달',
+ y : '일 년',
+ yy : '%d년'
+ },
+ ordinalParse : /\d{1,2}일/,
+ ordinal : '%d일',
+ meridiemParse : /오전|오후/,
+ isPM : function (token) {
+ return token === '오후';
+ },
+ meridiem : function (hour, minute, isUpper) {
+ return hour < 12 ? '오전' : '오후';
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Kyrgyz [ky]
+//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
+
+
+var suffixes$2 = {
+ 0: '-чү',
+ 1: '-чи',
+ 2: '-чи',
+ 3: '-чү',
+ 4: '-чү',
+ 5: '-чи',
+ 6: '-чы',
+ 7: '-чи',
+ 8: '-чи',
+ 9: '-чу',
+ 10: '-чу',
+ 20: '-чы',
+ 30: '-чу',
+ 40: '-чы',
+ 50: '-чү',
+ 60: '-чы',
+ 70: '-чи',
+ 80: '-чи',
+ 90: '-чу',
+ 100: '-чү'
+};
+
+moment.defineLocale('ky', {
+ months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
+ weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+ weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгүн саат] LT',
+ nextDay : '[Эртең саат] LT',
+ nextWeek : 'dddd [саат] LT',
+ lastDay : '[Кече саат] LT',
+ lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ичинде',
+ past : '%s мурун',
+ s : 'бирнече секунд',
+ m : 'бир мүнөт',
+ mm : '%d мүнөт',
+ h : 'бир саат',
+ hh : '%d саат',
+ d : 'бир күн',
+ dd : '%d күн',
+ M : 'бир ай',
+ MM : '%d ай',
+ y : 'бир жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Luxembourgish [lb]
+//! author : mweimerskirch : https://github.com/mweimerskirch
+//! author : David Raison : https://github.com/kwisatz
+
+function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eng Minutt', 'enger Minutt'],
+ 'h': ['eng Stonn', 'enger Stonn'],
+ 'd': ['een Dag', 'engem Dag'],
+ 'M': ['ee Mount', 'engem Mount'],
+ 'y': ['ee Joer', 'engem Joer']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+function processFutureTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'a ' + string;
+ }
+ return 'an ' + string;
+}
+function processPastTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'viru ' + string;
+ }
+ return 'virun ' + string;
+}
+/**
+ * Returns true if the word before the given number loses the '-n' ending.
+ * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+ *
+ * @param number {integer}
+ * @returns {boolean}
+ */
+function eifelerRegelAppliesToNumber(number) {
+ number = parseInt(number, 10);
+ if (isNaN(number)) {
+ return false;
+ }
+ if (number < 0) {
+ // Negative Number --> always true
+ return true;
+ } else if (number < 10) {
+ // Only 1 digit
+ if (4 <= number && number <= 7) {
+ return true;
+ }
+ return false;
+ } else if (number < 100) {
+ // 2 digits
+ var lastDigit = number % 10, firstDigit = number / 10;
+ if (lastDigit === 0) {
+ return eifelerRegelAppliesToNumber(firstDigit);
+ }
+ return eifelerRegelAppliesToNumber(lastDigit);
+ } else if (number < 10000) {
+ // 3 or 4 digits --> recursively check first digit
+ while (number >= 10) {
+ number = number / 10;
+ }
+ return eifelerRegelAppliesToNumber(number);
+ } else {
+ // Anything larger than 4 digits: recursively check first n-3 digits
+ number = number / 1000;
+ return eifelerRegelAppliesToNumber(number);
+ }
+}
+
+moment.defineLocale('lb', {
+ months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
+ weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+ weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm [Auer]',
+ LTS: 'H:mm:ss [Auer]',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm [Auer]',
+ LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
+ },
+ calendar: {
+ sameDay: '[Haut um] LT',
+ sameElse: 'L',
+ nextDay: '[Muer um] LT',
+ nextWeek: 'dddd [um] LT',
+ lastDay: '[Gëschter um] LT',
+ lastWeek: function () {
+ // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+ switch (this.day()) {
+ case 2:
+ case 4:
+ return '[Leschten] dddd [um] LT';
+ default:
+ return '[Leschte] dddd [um] LT';
+ }
+ }
+ },
+ relativeTime : {
+ future : processFutureTime,
+ past : processPastTime,
+ s : 'e puer Sekonnen',
+ m : processRelativeTime$3,
+ mm : '%d Minutten',
+ h : processRelativeTime$3,
+ hh : '%d Stonnen',
+ d : processRelativeTime$3,
+ dd : '%d Deeg',
+ M : processRelativeTime$3,
+ MM : '%d Méint',
+ y : processRelativeTime$3,
+ yy : '%d Joer'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal: '%d.',
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Lao [lo]
+//! author : Ryan Hart : https://github.com/ryanhart2
+
+moment.defineLocale('lo', {
+ months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+ isPM: function (input) {
+ return input === 'ຕອນແລງ';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ຕອນເຊົ້າ';
+ } else {
+ return 'ຕອນແລງ';
+ }
+ },
+ calendar : {
+ sameDay : '[ມື້ນີ້ເວລາ] LT',
+ nextDay : '[ມື້ອື່ນເວລາ] LT',
+ nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
+ lastDay : '[ມື້ວານນີ້ເວລາ] LT',
+ lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ອີກ %s',
+ past : '%sຜ່ານມາ',
+ s : 'ບໍ່ເທົ່າໃດວິນາທີ',
+ m : '1 ນາທີ',
+ mm : '%d ນາທີ',
+ h : '1 ຊົ່ວໂມງ',
+ hh : '%d ຊົ່ວໂມງ',
+ d : '1 ມື້',
+ dd : '%d ມື້',
+ M : '1 ເດືອນ',
+ MM : '%d ເດືອນ',
+ y : '1 ປີ',
+ yy : '%d ປີ'
+ },
+ ordinalParse: /(ທີ່)\d{1,2}/,
+ ordinal : function (number) {
+ return 'ທີ່' + number;
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Lithuanian [lt]
+//! author : Mindaugas Mozūras : https://github.com/mmozuras
+
+var units = {
+ 'm' : 'minutė_minutės_minutę',
+ 'mm': 'minutės_minučių_minutes',
+ 'h' : 'valanda_valandos_valandą',
+ 'hh': 'valandos_valandų_valandas',
+ 'd' : 'diena_dienos_dieną',
+ 'dd': 'dienos_dienų_dienas',
+ 'M' : 'mėnuo_mėnesio_mėnesį',
+ 'MM': 'mėnesiai_mėnesių_mėnesius',
+ 'y' : 'metai_metų_metus',
+ 'yy': 'metai_metų_metus'
+};
+function translateSeconds(number, withoutSuffix, key, isFuture) {
+ if (withoutSuffix) {
+ return 'kelios sekundės';
+ } else {
+ return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+ }
+}
+function translateSingular(number, withoutSuffix, key, isFuture) {
+ return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
+}
+function special(number) {
+ return number % 10 === 0 || (number > 10 && number < 20);
+}
+function forms(key) {
+ return units[key].split('_');
+}
+function translate$6(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ if (number === 1) {
+ return result + translateSingular(number, withoutSuffix, key[0], isFuture);
+ } else if (withoutSuffix) {
+ return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+ } else {
+ if (isFuture) {
+ return result + forms(key)[1];
+ } else {
+ return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+ }
+ }
+}
+moment.defineLocale('lt', {
+ months : {
+ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
+ isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
+ },
+ monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+ weekdays : {
+ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
+ standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
+ isFormat: /dddd HH:mm/
+ },
+ weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+ weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY [m.] MMMM D [d.]',
+ LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY [m.] MMMM D [d.]',
+ lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
+ },
+ calendar : {
+ sameDay : '[Šiandien] LT',
+ nextDay : '[Rytoj] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[Vakar] LT',
+ lastWeek : '[Praėjusį] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'po %s',
+ past : 'prieš %s',
+ s : translateSeconds,
+ m : translateSingular,
+ mm : translate$6,
+ h : translateSingular,
+ hh : translate$6,
+ d : translateSingular,
+ dd : translate$6,
+ M : translateSingular,
+ MM : translate$6,
+ y : translateSingular,
+ yy : translate$6
+ },
+ ordinalParse: /\d{1,2}-oji/,
+ ordinal : function (number) {
+ return number + '-oji';
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Latvian [lv]
+//! author : Kristaps Karlsons : https://github.com/skakri
+//! author : Jānis Elmeris : https://github.com/JanisE
+
+var units$1 = {
+ 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'h': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'hh': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'dd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'y': 'gada_gadiem_gads_gadi'.split('_'),
+ 'yy': 'gada_gadiem_gads_gadi'.split('_')
+};
+/**
+ * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+ */
+function format(forms, number, withoutSuffix) {
+ if (withoutSuffix) {
+ // E.g. "21 minūte", "3 minūtes".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
+ } else {
+ // E.g. "21 minūtes" as in "pēc 21 minūtes".
+ // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
+ }
+}
+function relativeTimeWithPlural$1(number, withoutSuffix, key) {
+ return number + ' ' + format(units$1[key], number, withoutSuffix);
+}
+function relativeTimeWithSingular(number, withoutSuffix, key) {
+ return format(units$1[key], number, withoutSuffix);
+}
+function relativeSeconds(number, withoutSuffix) {
+ return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
+}
+
+moment.defineLocale('lv', {
+ months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
+ weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY.',
+ LL : 'YYYY. [gada] D. MMMM',
+ LLL : 'YYYY. [gada] D. MMMM, HH:mm',
+ LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
+ },
+ calendar : {
+ sameDay : '[Šodien pulksten] LT',
+ nextDay : '[Rīt pulksten] LT',
+ nextWeek : 'dddd [pulksten] LT',
+ lastDay : '[Vakar pulksten] LT',
+ lastWeek : '[Pagājušā] dddd [pulksten] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'pēc %s',
+ past : 'pirms %s',
+ s : relativeSeconds,
+ m : relativeTimeWithSingular,
+ mm : relativeTimeWithPlural$1,
+ h : relativeTimeWithSingular,
+ hh : relativeTimeWithPlural$1,
+ d : relativeTimeWithSingular,
+ dd : relativeTimeWithPlural$1,
+ M : relativeTimeWithSingular,
+ MM : relativeTimeWithPlural$1,
+ y : relativeTimeWithSingular,
+ yy : relativeTimeWithPlural$1
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Montenegrin [me]
+//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jednog minuta'],
+ mm: ['minut', 'minuta', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mjesec', 'mjeseca', 'mjeseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+moment.defineLocale('me', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sjutra u] LT',
+
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedjelje] [u] LT',
+ '[prošlog] [ponedjeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srijede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'nekoliko sekundi',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'dan',
+ dd : translator.translate,
+ M : 'mjesec',
+ MM : translator.translate,
+ y : 'godinu',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Maori [mi]
+//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
+
+moment.defineLocale('mi', {
+ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
+ monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
+ monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+ weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+ weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY [i] HH:mm',
+ LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
+ },
+ calendar: {
+ sameDay: '[i teie mahana, i] LT',
+ nextDay: '[apopo i] LT',
+ nextWeek: 'dddd [i] LT',
+ lastDay: '[inanahi i] LT',
+ lastWeek: 'dddd [whakamutunga i] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'i roto i %s',
+ past: '%s i mua',
+ s: 'te hēkona ruarua',
+ m: 'he meneti',
+ mm: '%d meneti',
+ h: 'te haora',
+ hh: '%d haora',
+ d: 'he ra',
+ dd: '%d ra',
+ M: 'he marama',
+ MM: '%d marama',
+ y: 'he tau',
+ yy: '%d tau'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Macedonian [mk]
+//! author : Borislav Mickov : https://github.com/B0k0
+
+moment.defineLocale('mk', {
+ months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+ weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Денес во] LT',
+ nextDay : '[Утре во] LT',
+ nextWeek : '[Во] dddd [во] LT',
+ lastDay : '[Вчера во] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'после %s',
+ past : 'пред %s',
+ s : 'неколку секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дена',
+ M : 'месец',
+ MM : '%d месеци',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Malayalam [ml]
+//! author : Floyd Pink : https://github.com/floydpink
+
+moment.defineLocale('ml', {
+ months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
+ monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
+ weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+ weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm -നു',
+ LTS : 'A h:mm:ss -നു',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm -നു',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
+ },
+ calendar : {
+ sameDay : '[ഇന്ന്] LT',
+ nextDay : '[നാളെ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ഇന്നലെ] LT',
+ lastWeek : '[കഴിഞ്ഞ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s കഴിഞ്ഞ്',
+ past : '%s മുൻപ്',
+ s : 'അൽപ നിമിഷങ്ങൾ',
+ m : 'ഒരു മിനിറ്റ്',
+ mm : '%d മിനിറ്റ്',
+ h : 'ഒരു മണിക്കൂർ',
+ hh : '%d മണിക്കൂർ',
+ d : 'ഒരു ദിവസം',
+ dd : '%d ദിവസം',
+ M : 'ഒരു മാസം',
+ MM : '%d മാസം',
+ y : 'ഒരു വർഷം',
+ yy : '%d വർഷം'
+ },
+ meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'രാത്രി' && hour >= 4) ||
+ meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+ meridiem === 'വൈകുന്നേരം') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'രാത്രി';
+ } else if (hour < 12) {
+ return 'രാവിലെ';
+ } else if (hour < 17) {
+ return 'ഉച്ച കഴിഞ്ഞ്';
+ } else if (hour < 20) {
+ return 'വൈകുന്നേരം';
+ } else {
+ return 'രാത്രി';
+ }
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Marathi [mr]
+//! author : Harshad Kale : https://github.com/kalehv
+//! author : Vivek Athalye : https://github.com/vnathalye
+
+var symbolMap$7 = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap$6 = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+function relativeTimeMr(number, withoutSuffix, string, isFuture)
+{
+ var output = '';
+ if (withoutSuffix) {
+ switch (string) {
+ case 's': output = 'काही सेकंद'; break;
+ case 'm': output = 'एक मिनिट'; break;
+ case 'mm': output = '%d मिनिटे'; break;
+ case 'h': output = 'एक तास'; break;
+ case 'hh': output = '%d तास'; break;
+ case 'd': output = 'एक दिवस'; break;
+ case 'dd': output = '%d दिवस'; break;
+ case 'M': output = 'एक महिना'; break;
+ case 'MM': output = '%d महिने'; break;
+ case 'y': output = 'एक वर्ष'; break;
+ case 'yy': output = '%d वर्षे'; break;
+ }
+ }
+ else {
+ switch (string) {
+ case 's': output = 'काही सेकंदां'; break;
+ case 'm': output = 'एका मिनिटा'; break;
+ case 'mm': output = '%d मिनिटां'; break;
+ case 'h': output = 'एका तासा'; break;
+ case 'hh': output = '%d तासां'; break;
+ case 'd': output = 'एका दिवसा'; break;
+ case 'dd': output = '%d दिवसां'; break;
+ case 'M': output = 'एका महिन्या'; break;
+ case 'MM': output = '%d महिन्यां'; break;
+ case 'y': output = 'एका वर्षा'; break;
+ case 'yy': output = '%d वर्षां'; break;
+ }
+ }
+ return output.replace(/%d/i, number);
+}
+
+moment.defineLocale('mr', {
+ months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
+ monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm वाजता',
+ LTS : 'A h:mm:ss वाजता',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm वाजता',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[उद्या] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[काल] LT',
+ lastWeek: '[मागील] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future: '%sमध्ये',
+ past: '%sपूर्वी',
+ s: relativeTimeMr,
+ m: relativeTimeMr,
+ mm: relativeTimeMr,
+ h: relativeTimeMr,
+ hh: relativeTimeMr,
+ d: relativeTimeMr,
+ dd: relativeTimeMr,
+ M: relativeTimeMr,
+ MM: relativeTimeMr,
+ y: relativeTimeMr,
+ yy: relativeTimeMr
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap$6[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$7[match];
+ });
+ },
+ meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात्री') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सकाळी') {
+ return hour;
+ } else if (meridiem === 'दुपारी') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'सायंकाळी') {
+ return hour + 12;
+ }
+ },
+ meridiem: function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात्री';
+ } else if (hour < 10) {
+ return 'सकाळी';
+ } else if (hour < 17) {
+ return 'दुपारी';
+ } else if (hour < 20) {
+ return 'सायंकाळी';
+ } else {
+ return 'रात्री';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Malay [ms-my]
+//! note : DEPRECATED, the correct one is [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+moment.defineLocale('ms-my', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Malay [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+moment.defineLocale('ms', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Burmese [my]
+//! author : Squar team, mysquar.com
+//! author : David Rossellat : https://github.com/gholadr
+//! author : Tin Aung Lin : https://github.com/thanyawzinmin
+
+var symbolMap$8 = {
+ '1': '၁',
+ '2': '၂',
+ '3': '၃',
+ '4': '၄',
+ '5': '၅',
+ '6': '၆',
+ '7': '၇',
+ '8': '၈',
+ '9': '၉',
+ '0': '၀'
+};
+var numberMap$7 = {
+ '၁': '1',
+ '၂': '2',
+ '၃': '3',
+ '၄': '4',
+ '၅': '5',
+ '၆': '6',
+ '၇': '7',
+ '၈': '8',
+ '၉': '9',
+ '၀': '0'
+};
+
+moment.defineLocale('my', {
+ months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
+ monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+ weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
+ weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+ weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ယနေ.] LT [မှာ]',
+ nextDay: '[မနက်ဖြန်] LT [မှာ]',
+ nextWeek: 'dddd LT [မှာ]',
+ lastDay: '[မနေ.က] LT [မှာ]',
+ lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'လာမည့် %s မှာ',
+ past: 'လွန်ခဲ့သော %s က',
+ s: 'စက္ကန်.အနည်းငယ်',
+ m: 'တစ်မိနစ်',
+ mm: '%d မိနစ်',
+ h: 'တစ်နာရီ',
+ hh: '%d နာရီ',
+ d: 'တစ်ရက်',
+ dd: '%d ရက်',
+ M: 'တစ်လ',
+ MM: '%d လ',
+ y: 'တစ်နှစ်',
+ yy: '%d နှစ်'
+ },
+ preparse: function (string) {
+ return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+ return numberMap$7[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$8[match];
+ });
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Norwegian Bokmål [nb]
+//! authors : Espen Hovlandsdal : https://github.com/rexxars
+//! Sigurd Gartmann : https://github.com/sigurdga
+
+moment.defineLocale('nb', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[i dag kl.] LT',
+ nextDay: '[i morgen kl.] LT',
+ nextWeek: 'dddd [kl.] LT',
+ lastDay: '[i går kl.] LT',
+ lastWeek: '[forrige] dddd [kl.] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'noen sekunder',
+ m : 'ett minutt',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dager',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Nepalese [ne]
+//! author : suvash : https://github.com/suvash
+
+var symbolMap$9 = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap$8 = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+moment.defineLocale('ne', {
+ months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
+ monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
+ weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+ weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'Aको h:mm बजे',
+ LTS : 'Aको h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, Aको h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap$8[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$9[match];
+ });
+ },
+ meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'राति') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'बिहान') {
+ return hour;
+ } else if (meridiem === 'दिउँसो') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'साँझ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 3) {
+ return 'राति';
+ } else if (hour < 12) {
+ return 'बिहान';
+ } else if (hour < 16) {
+ return 'दिउँसो';
+ } else if (hour < 20) {
+ return 'साँझ';
+ } else {
+ return 'राति';
+ }
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[भोलि] LT',
+ nextWeek : '[आउँदो] dddd[,] LT',
+ lastDay : '[हिजो] LT',
+ lastWeek : '[गएको] dddd[,] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sमा',
+ past : '%s अगाडि',
+ s : 'केही क्षण',
+ m : 'एक मिनेट',
+ mm : '%d मिनेट',
+ h : 'एक घण्टा',
+ hh : '%d घण्टा',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महिना',
+ MM : '%d महिना',
+ y : 'एक बर्ष',
+ yy : '%d बर्ष'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Dutch (Belgium) [nl-be]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
+var monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+moment.defineLocale('nl-be', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots$1[m.month()];
+ } else {
+ return monthsShortWithDots$1[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex,
+ monthsShortRegex: monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Dutch [nl]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
+var monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse$1 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex$1 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+moment.defineLocale('nl', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots$2[m.month()];
+ } else {
+ return monthsShortWithDots$2[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex$1,
+ monthsShortRegex: monthsRegex$1,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse$1,
+ longMonthsParse : monthsParse$1,
+ shortMonthsParse : monthsParse$1,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Nynorsk [nn]
+//! author : https://github.com/mechuwind
+
+moment.defineLocale('nn', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+ weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
+ weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[I dag klokka] LT',
+ nextDay: '[I morgon klokka] LT',
+ nextWeek: 'dddd [klokka] LT',
+ lastDay: '[I går klokka] LT',
+ lastWeek: '[Føregåande] dddd [klokka] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s sidan',
+ s : 'nokre sekund',
+ m : 'eit minutt',
+ mm : '%d minutt',
+ h : 'ein time',
+ hh : '%d timar',
+ d : 'ein dag',
+ dd : '%d dagar',
+ M : 'ein månad',
+ MM : '%d månader',
+ y : 'eit år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Punjabi (India) [pa-in]
+//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
+
+var symbolMap$10 = {
+ '1': '੧',
+ '2': '੨',
+ '3': '੩',
+ '4': '੪',
+ '5': '੫',
+ '6': '੬',
+ '7': '੭',
+ '8': '੮',
+ '9': '੯',
+ '0': '੦'
+};
+var numberMap$9 = {
+ '੧': '1',
+ '੨': '2',
+ '੩': '3',
+ '੪': '4',
+ '੫': '5',
+ '੬': '6',
+ '੭': '7',
+ '੮': '8',
+ '੯': '9',
+ '੦': '0'
+};
+
+moment.defineLocale('pa-in', {
+ // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+ months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
+ weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm ਵਜੇ',
+ LTS : 'A h:mm:ss ਵਜੇ',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
+ },
+ calendar : {
+ sameDay : '[ਅਜ] LT',
+ nextDay : '[ਕਲ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ਕਲ] LT',
+ lastWeek : '[ਪਿਛਲੇ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ਵਿੱਚ',
+ past : '%s ਪਿਛਲੇ',
+ s : 'ਕੁਝ ਸਕਿੰਟ',
+ m : 'ਇਕ ਮਿੰਟ',
+ mm : '%d ਮਿੰਟ',
+ h : 'ਇੱਕ ਘੰਟਾ',
+ hh : '%d ਘੰਟੇ',
+ d : 'ਇੱਕ ਦਿਨ',
+ dd : '%d ਦਿਨ',
+ M : 'ਇੱਕ ਮਹੀਨਾ',
+ MM : '%d ਮਹੀਨੇ',
+ y : 'ਇੱਕ ਸਾਲ',
+ yy : '%d ਸਾਲ'
+ },
+ preparse: function (string) {
+ return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+ return numberMap$9[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$10[match];
+ });
+ },
+ // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+ meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ਰਾਤ') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ਸਵੇਰ') {
+ return hour;
+ } else if (meridiem === 'ਦੁਪਹਿਰ') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'ਸ਼ਾਮ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ਰਾਤ';
+ } else if (hour < 10) {
+ return 'ਸਵੇਰ';
+ } else if (hour < 17) {
+ return 'ਦੁਪਹਿਰ';
+ } else if (hour < 20) {
+ return 'ਸ਼ਾਮ';
+ } else {
+ return 'ਰਾਤ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Polish [pl]
+//! author : Rafal Hirsz : https://github.com/evoL
+
+var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');
+var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
+function plural$3(n) {
+ return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
+}
+function translate$7(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'minuta' : 'minutę';
+ case 'mm':
+ return result + (plural$3(number) ? 'minuty' : 'minut');
+ case 'h':
+ return withoutSuffix ? 'godzina' : 'godzinę';
+ case 'hh':
+ return result + (plural$3(number) ? 'godziny' : 'godzin');
+ case 'MM':
+ return result + (plural$3(number) ? 'miesiące' : 'miesięcy');
+ case 'yy':
+ return result + (plural$3(number) ? 'lata' : 'lat');
+ }
+}
+
+moment.defineLocale('pl', {
+ months : function (momentToFormat, format) {
+ if (format === '') {
+ // Hack: if format empty we know this is used to generate
+ // RegExp by moment. Give then back both valid forms of months
+ // in RegExp ready format.
+ return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
+ } else if (/D MMMM/.test(format)) {
+ return monthsSubjective[momentToFormat.month()];
+ } else {
+ return monthsNominative[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+ weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
+ weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
+ weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Dziś o] LT',
+ nextDay: '[Jutro o] LT',
+ nextWeek: '[W] dddd [o] LT',
+ lastDay: '[Wczoraj o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : '%s temu',
+ s : 'kilka sekund',
+ m : translate$7,
+ mm : translate$7,
+ h : translate$7,
+ hh : translate$7,
+ d : '1 dzień',
+ dd : '%d dni',
+ M : 'miesiąc',
+ MM : translate$7,
+ y : 'rok',
+ yy : translate$7
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Portuguese (Brazil) [pt-br]
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+moment.defineLocale('pt-br', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : '%s atrás',
+ s : 'poucos segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº'
+});
+
+//! moment.js locale configuration
+//! locale : Portuguese [pt]
+//! author : Jefferson : https://github.com/jalex79
+
+moment.defineLocale('pt', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : 'há %s',
+ s : 'segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Romanian [ro]
+//! author : Vlad Gurdiga : https://github.com/gurdiga
+//! author : Valentin Agachi : https://github.com/avaly
+
+function relativeTimeWithPlural$2(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'minute',
+ 'hh': 'ore',
+ 'dd': 'zile',
+ 'MM': 'luni',
+ 'yy': 'ani'
+ },
+ separator = ' ';
+ if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+ separator = ' de ';
+ }
+ return number + separator + format[key];
+}
+
+moment.defineLocale('ro', {
+ months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
+ monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+ weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+ weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[azi la] LT',
+ nextDay: '[mâine la] LT',
+ nextWeek: 'dddd [la] LT',
+ lastDay: '[ieri la] LT',
+ lastWeek: '[fosta] dddd [la] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'peste %s',
+ past : '%s în urmă',
+ s : 'câteva secunde',
+ m : 'un minut',
+ mm : relativeTimeWithPlural$2,
+ h : 'o oră',
+ hh : relativeTimeWithPlural$2,
+ d : 'o zi',
+ dd : relativeTimeWithPlural$2,
+ M : 'o lună',
+ MM : relativeTimeWithPlural$2,
+ y : 'un an',
+ yy : relativeTimeWithPlural$2
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Russian [ru]
+//! author : Viktorminator : https://github.com/Viktorminator
+//! Author : Menelion Elensúle : https://github.com/Oire
+//! author : Коренберг Марк : https://github.com/socketpair
+
+function plural$4(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural$3(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+ 'hh': 'час_часа_часов',
+ 'dd': 'день_дня_дней',
+ 'MM': 'месяц_месяца_месяцев',
+ 'yy': 'год_года_лет'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'минута' : 'минуту';
+ }
+ else {
+ return number + ' ' + plural$4(format[key], +number);
+ }
+}
+var monthsParse$2 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
+
+// http://new.gramota.ru/spravka/rules/139-prop : § 103
+// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+moment.defineLocale('ru', {
+ months : {
+ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
+ standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
+ },
+ monthsShort : {
+ // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+ format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
+ standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
+ },
+ weekdays : {
+ standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+ format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
+ },
+ weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ monthsParse : monthsParse$2,
+ longMonthsParse : monthsParse$2,
+ shortMonthsParse : monthsParse$2,
+
+ // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+ monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // копия предыдущего
+ monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // полные названия с падежами
+ monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+ // Выражение, которое соотвествует только сокращённым формам
+ monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сегодня в] LT',
+ nextDay: '[Завтра в] LT',
+ lastDay: '[Вчера в] LT',
+ nextWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ lastWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'через %s',
+ past : '%s назад',
+ s : 'несколько секунд',
+ m : relativeTimeWithPlural$3,
+ mm : relativeTimeWithPlural$3,
+ h : 'час',
+ hh : relativeTimeWithPlural$3,
+ d : 'день',
+ dd : relativeTimeWithPlural$3,
+ M : 'месяц',
+ MM : relativeTimeWithPlural$3,
+ y : 'год',
+ yy : relativeTimeWithPlural$3
+ },
+ meridiemParse: /ночи|утра|дня|вечера/i,
+ isPM : function (input) {
+ return /^(дня|вечера)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночи';
+ } else if (hour < 12) {
+ return 'утра';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечера';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го|я)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ case 'w':
+ case 'W':
+ return number + '-я';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Northern Sami [se]
+//! authors : Bård Rolstad Henriksen : https://github.com/karamell
+
+
+moment.defineLocale('se', {
+ months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
+ monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
+ weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
+ weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+ weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'MMMM D. [b.] YYYY',
+ LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
+ LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[otne ti] LT',
+ nextDay: '[ihttin ti] LT',
+ nextWeek: 'dddd [ti] LT',
+ lastDay: '[ikte ti] LT',
+ lastWeek: '[ovddit] dddd [ti] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s geažes',
+ past : 'maŋit %s',
+ s : 'moadde sekunddat',
+ m : 'okta minuhta',
+ mm : '%d minuhtat',
+ h : 'okta diimmu',
+ hh : '%d diimmut',
+ d : 'okta beaivi',
+ dd : '%d beaivvit',
+ M : 'okta mánnu',
+ MM : '%d mánut',
+ y : 'okta jahki',
+ yy : '%d jagit'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Sinhalese [si]
+//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
+
+/*jshint -W100*/
+moment.defineLocale('si', {
+ months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
+ monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
+ weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
+ weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
+ weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'a h:mm',
+ LTS : 'a h:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY MMMM D',
+ LLL : 'YYYY MMMM D, a h:mm',
+ LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
+ },
+ calendar : {
+ sameDay : '[අද] LT[ට]',
+ nextDay : '[හෙට] LT[ට]',
+ nextWeek : 'dddd LT[ට]',
+ lastDay : '[ඊයේ] LT[ට]',
+ lastWeek : '[පසුගිය] dddd LT[ට]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sකින්',
+ past : '%sකට පෙර',
+ s : 'තත්පර කිහිපය',
+ m : 'මිනිත්තුව',
+ mm : 'මිනිත්තු %d',
+ h : 'පැය',
+ hh : 'පැය %d',
+ d : 'දිනය',
+ dd : 'දින %d',
+ M : 'මාසය',
+ MM : 'මාස %d',
+ y : 'වසර',
+ yy : 'වසර %d'
+ },
+ ordinalParse: /\d{1,2} වැනි/,
+ ordinal : function (number) {
+ return number + ' වැනි';
+ },
+ meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+ isPM : function (input) {
+ return input === 'ප.ව.' || input === 'පස් වරු';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'ප.ව.' : 'පස් වරු';
+ } else {
+ return isLower ? 'පෙ.ව.' : 'පෙර වරු';
+ }
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Slovak [sk]
+//! author : Martin Minka : https://github.com/k2s
+//! based on work of petrbela : https://github.com/petrbela
+
+var months$5 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');
+var monthsShort$4 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+function plural$5(n) {
+ return (n > 1) && (n < 5);
+}
+function translate$8(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'minúty' : 'minút');
+ } else {
+ return result + 'minútami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'hodiny' : 'hodín');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'dni' : 'dní');
+ } else {
+ return result + 'dňami';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
+ } else {
+ return result + 'mesiacmi';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'roky' : 'rokov');
+ } else {
+ return result + 'rokmi';
+ }
+ break;
+ }
+}
+
+moment.defineLocale('sk', {
+ months : months$5,
+ monthsShort : monthsShort$4,
+ weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+ weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
+ weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[dnes o] LT',
+ nextDay: '[zajtra o] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [o] LT';
+ case 3:
+ return '[v stredu o] LT';
+ case 4:
+ return '[vo štvrtok o] LT';
+ case 5:
+ return '[v piatok o] LT';
+ case 6:
+ return '[v sobotu o] LT';
+ }
+ },
+ lastDay: '[včera o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulú nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[minulý] dddd [o] LT';
+ case 3:
+ return '[minulú stredu o] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [o] LT';
+ case 6:
+ return '[minulú sobotu o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pred %s',
+ s : translate$8,
+ m : translate$8,
+ mm : translate$8,
+ h : translate$8,
+ hh : translate$8,
+ d : translate$8,
+ dd : translate$8,
+ M : translate$8,
+ MM : translate$8,
+ y : translate$8,
+ yy : translate$8
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Slovenian [sl]
+//! author : Robert Sedovšek : https://github.com/sedovsek
+
+function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
+ case 'm':
+ return withoutSuffix ? 'ena minuta' : 'eno minuto';
+ case 'mm':
+ if (number === 1) {
+ result += withoutSuffix ? 'minuta' : 'minuto';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+ } else {
+ result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'ena ura' : 'eno uro';
+ case 'hh':
+ if (number === 1) {
+ result += withoutSuffix ? 'ura' : 'uro';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'uri' : 'urama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'ure' : 'urami';
+ } else {
+ result += withoutSuffix || isFuture ? 'ur' : 'urami';
+ }
+ return result;
+ case 'd':
+ return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+ case 'dd':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+ } else {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+ }
+ return result;
+ case 'M':
+ return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+ case 'MM':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+ } else {
+ result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+ }
+ return result;
+ case 'y':
+ return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+ case 'yy':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'leto' : 'letom';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'leta' : 'leti';
+ } else {
+ result += withoutSuffix || isFuture ? 'let' : 'leti';
+ }
+ return result;
+ }
+}
+
+moment.defineLocale('sl', {
+ months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+ weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+ weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danes ob] LT',
+ nextDay : '[jutri ob] LT',
+
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
+ }
+ },
+ lastDay : '[včeraj ob] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'čez %s',
+ past : 'pred %s',
+ s : processRelativeTime$4,
+ m : processRelativeTime$4,
+ mm : processRelativeTime$4,
+ h : processRelativeTime$4,
+ hh : processRelativeTime$4,
+ d : processRelativeTime$4,
+ dd : processRelativeTime$4,
+ M : processRelativeTime$4,
+ MM : processRelativeTime$4,
+ y : processRelativeTime$4,
+ yy : processRelativeTime$4
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Albanian [sq]
+//! author : Flakërim Ismani : https://github.com/flakerimi
+//! author : Menelion Elensúle : https://github.com/Oire
+//! author : Oerd Cukalla : https://github.com/oerd
+
+moment.defineLocale('sq', {
+ months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
+ monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+ weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
+ weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+ weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /PD|MD/,
+ isPM: function (input) {
+ return input.charAt(0) === 'M';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ return hours < 12 ? 'PD' : 'MD';
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Sot në] LT',
+ nextDay : '[Nesër në] LT',
+ nextWeek : 'dddd [në] LT',
+ lastDay : '[Dje në] LT',
+ lastWeek : 'dddd [e kaluar në] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'në %s',
+ past : '%s më parë',
+ s : 'disa sekonda',
+ m : 'një minutë',
+ mm : '%d minuta',
+ h : 'një orë',
+ hh : '%d orë',
+ d : 'një ditë',
+ dd : '%d ditë',
+ M : 'një muaj',
+ MM : '%d muaj',
+ y : 'një vit',
+ yy : '%d vite'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Serbian Cyrillic [sr-cyrl]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+var translator$1 = {
+ words: { //Different grammatical cases
+ m: ['један минут', 'једне минуте'],
+ mm: ['минут', 'минуте', 'минута'],
+ h: ['један сат', 'једног сата'],
+ hh: ['сат', 'сата', 'сати'],
+ dd: ['дан', 'дана', 'дана'],
+ MM: ['месец', 'месеца', 'месеци'],
+ yy: ['година', 'године', 'година']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator$1.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+moment.defineLocale('sr-cyrl', {
+ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+ monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+ weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+ weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[данас у] LT',
+ nextDay: '[сутра у] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
+ }
+ },
+ lastDay : '[јуче у] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[прошле] [недеље] [у] LT',
+ '[прошлог] [понедељка] [у] LT',
+ '[прошлог] [уторка] [у] LT',
+ '[прошле] [среде] [у] LT',
+ '[прошлог] [четвртка] [у] LT',
+ '[прошлог] [петка] [у] LT',
+ '[прошле] [суботе] [у] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : 'пре %s',
+ s : 'неколико секунди',
+ m : translator$1.translate,
+ mm : translator$1.translate,
+ h : translator$1.translate,
+ hh : translator$1.translate,
+ d : 'дан',
+ dd : translator$1.translate,
+ M : 'месец',
+ MM : translator$1.translate,
+ y : 'годину',
+ yy : translator$1.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Serbian [sr]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+var translator$2 = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jedne minute'],
+ mm: ['minut', 'minute', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mesec', 'meseca', 'meseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator$2.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+moment.defineLocale('sr', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sutra u] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedelje] [u] LT',
+ '[prošlog] [ponedeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pre %s',
+ s : 'nekoliko sekundi',
+ m : translator$2.translate,
+ mm : translator$2.translate,
+ h : translator$2.translate,
+ hh : translator$2.translate,
+ d : 'dan',
+ dd : translator$2.translate,
+ M : 'mesec',
+ MM : translator$2.translate,
+ y : 'godinu',
+ yy : translator$2.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : siSwati [ss]
+//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
+
+
+moment.defineLocale('ss', {
+ months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
+ monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+ weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
+ weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+ weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Namuhla nga] LT',
+ nextDay : '[Kusasa nga] LT',
+ nextWeek : 'dddd [nga] LT',
+ lastDay : '[Itolo nga] LT',
+ lastWeek : 'dddd [leliphelile] [nga] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'nga %s',
+ past : 'wenteka nga %s',
+ s : 'emizuzwana lomcane',
+ m : 'umzuzu',
+ mm : '%d emizuzu',
+ h : 'lihora',
+ hh : '%d emahora',
+ d : 'lilanga',
+ dd : '%d emalanga',
+ M : 'inyanga',
+ MM : '%d tinyanga',
+ y : 'umnyaka',
+ yy : '%d iminyaka'
+ },
+ meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'ekuseni';
+ } else if (hours < 15) {
+ return 'emini';
+ } else if (hours < 19) {
+ return 'entsambama';
+ } else {
+ return 'ebusuku';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ekuseni') {
+ return hour;
+ } else if (meridiem === 'emini') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+ if (hour === 0) {
+ return 0;
+ }
+ return hour + 12;
+ }
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : '%d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Swedish [sv]
+//! author : Jens Alm : https://github.com/ulmus
+
+moment.defineLocale('sv', {
+ months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+ weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+ weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Idag] LT',
+ nextDay: '[Imorgon] LT',
+ lastDay: '[Igår] LT',
+ nextWeek: '[På] dddd LT',
+ lastWeek: '[I] dddd[s] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : 'för %s sedan',
+ s : 'några sekunder',
+ m : 'en minut',
+ mm : '%d minuter',
+ h : 'en timme',
+ hh : '%d timmar',
+ d : 'en dag',
+ dd : '%d dagar',
+ M : 'en månad',
+ MM : '%d månader',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}(e|a)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'e' :
+ (b === 1) ? 'a' :
+ (b === 2) ? 'a' :
+ (b === 3) ? 'e' : 'e';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Swahili [sw]
+//! author : Fahad Kassim : https://github.com/fadsel
+
+moment.defineLocale('sw', {
+ months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
+ weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+ weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[leo saa] LT',
+ nextDay : '[kesho saa] LT',
+ nextWeek : '[wiki ijayo] dddd [saat] LT',
+ lastDay : '[jana] LT',
+ lastWeek : '[wiki iliyopita] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s baadaye',
+ past : 'tokea %s',
+ s : 'hivi punde',
+ m : 'dakika moja',
+ mm : 'dakika %d',
+ h : 'saa limoja',
+ hh : 'masaa %d',
+ d : 'siku moja',
+ dd : 'masiku %d',
+ M : 'mwezi mmoja',
+ MM : 'miezi %d',
+ y : 'mwaka mmoja',
+ yy : 'miaka %d'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tamil [ta]
+//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+
+var symbolMap$11 = {
+ '1': '௧',
+ '2': '௨',
+ '3': '௩',
+ '4': '௪',
+ '5': '௫',
+ '6': '௬',
+ '7': '௭',
+ '8': '௮',
+ '9': '௯',
+ '0': '௦'
+};
+var numberMap$10 = {
+ '௧': '1',
+ '௨': '2',
+ '௩': '3',
+ '௪': '4',
+ '௫': '5',
+ '௬': '6',
+ '௭': '7',
+ '௮': '8',
+ '௯': '9',
+ '௦': '0'
+};
+
+moment.defineLocale('ta', {
+ months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
+ weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
+ weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, HH:mm',
+ LLLL : 'dddd, D MMMM YYYY, HH:mm'
+ },
+ calendar : {
+ sameDay : '[இன்று] LT',
+ nextDay : '[நாளை] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[நேற்று] LT',
+ lastWeek : '[கடந்த வாரம்] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s இல்',
+ past : '%s முன்',
+ s : 'ஒரு சில விநாடிகள்',
+ m : 'ஒரு நிமிடம்',
+ mm : '%d நிமிடங்கள்',
+ h : 'ஒரு மணி நேரம்',
+ hh : '%d மணி நேரம்',
+ d : 'ஒரு நாள்',
+ dd : '%d நாட்கள்',
+ M : 'ஒரு மாதம்',
+ MM : '%d மாதங்கள்',
+ y : 'ஒரு வருடம்',
+ yy : '%d ஆண்டுகள்'
+ },
+ ordinalParse: /\d{1,2}வது/,
+ ordinal : function (number) {
+ return number + 'வது';
+ },
+ preparse: function (string) {
+ return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+ return numberMap$10[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$11[match];
+ });
+ },
+ // refer http://ta.wikipedia.org/s/1er1
+ meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 2) {
+ return ' யாமம்';
+ } else if (hour < 6) {
+ return ' வைகறை'; // வைகறை
+ } else if (hour < 10) {
+ return ' காலை'; // காலை
+ } else if (hour < 14) {
+ return ' நண்பகல்'; // நண்பகல்
+ } else if (hour < 18) {
+ return ' எற்பாடு'; // எற்பாடு
+ } else if (hour < 22) {
+ return ' மாலை'; // மாலை
+ } else {
+ return ' யாமம்';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'யாமம்') {
+ return hour < 2 ? hour : hour + 12;
+ } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
+ return hour;
+ } else if (meridiem === 'நண்பகல்') {
+ return hour >= 10 ? hour : hour + 12;
+ } else {
+ return hour + 12;
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Telugu [te]
+//! author : Krishna Chaitanya Thota : https://github.com/kcthota
+
+moment.defineLocale('te', {
+ months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
+ monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
+ weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+ weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[నేడు] LT',
+ nextDay : '[రేపు] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[నిన్న] LT',
+ lastWeek : '[గత] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s లో',
+ past : '%s క్రితం',
+ s : 'కొన్ని క్షణాలు',
+ m : 'ఒక నిమిషం',
+ mm : '%d నిమిషాలు',
+ h : 'ఒక గంట',
+ hh : '%d గంటలు',
+ d : 'ఒక రోజు',
+ dd : '%d రోజులు',
+ M : 'ఒక నెల',
+ MM : '%d నెలలు',
+ y : 'ఒక సంవత్సరం',
+ yy : '%d సంవత్సరాలు'
+ },
+ ordinalParse : /\d{1,2}వ/,
+ ordinal : '%dవ',
+ meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'రాత్రి') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ఉదయం') {
+ return hour;
+ } else if (meridiem === 'మధ్యాహ్నం') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'సాయంత్రం') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'రాత్రి';
+ } else if (hour < 10) {
+ return 'ఉదయం';
+ } else if (hour < 17) {
+ return 'మధ్యాహ్నం';
+ } else if (hour < 20) {
+ return 'సాయంత్రం';
+ } else {
+ return 'రాత్రి';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tetun Dili (East Timor) [tet]
+//! author : Joshua Brooks : https://github.com/joshbrooks
+//! author : Onorio De J. Afonso : https://github.com/marobo
+
+moment.defineLocale('tet', {
+ months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),
+ weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Ohin iha] LT',
+ nextDay: '[Aban iha] LT',
+ nextWeek: 'dddd [iha] LT',
+ lastDay: '[Horiseik iha] LT',
+ lastWeek: 'dddd [semana kotuk] [iha] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'iha %s',
+ past : '%s liuba',
+ s : 'minutu balun',
+ m : 'minutu ida',
+ mm : 'minutus %d',
+ h : 'horas ida',
+ hh : 'horas %d',
+ d : 'loron ida',
+ dd : 'loron %d',
+ M : 'fulan ida',
+ MM : 'fulan %d',
+ y : 'tinan ida',
+ yy : 'tinan %d'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Thai [th]
+//! author : Kridsada Thanabulpong : https://github.com/sirn
+
+moment.defineLocale('th', {
+ months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
+ monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+ weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+ weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY เวลา H:mm',
+ LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
+ },
+ meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
+ isPM: function (input) {
+ return input === 'หลังเที่ยง';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ก่อนเที่ยง';
+ } else {
+ return 'หลังเที่ยง';
+ }
+ },
+ calendar : {
+ sameDay : '[วันนี้ เวลา] LT',
+ nextDay : '[พรุ่งนี้ เวลา] LT',
+ nextWeek : 'dddd[หน้า เวลา] LT',
+ lastDay : '[เมื่อวานนี้ เวลา] LT',
+ lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'อีก %s',
+ past : '%sที่แล้ว',
+ s : 'ไม่กี่วินาที',
+ m : '1 นาที',
+ mm : '%d นาที',
+ h : '1 ชั่วโมง',
+ hh : '%d ชั่วโมง',
+ d : '1 วัน',
+ dd : '%d วัน',
+ M : '1 เดือน',
+ MM : '%d เดือน',
+ y : '1 ปี',
+ yy : '%d ปี'
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tagalog (Philippines) [tl-ph]
+//! author : Dan Hagman : https://github.com/hagmandan
+
+moment.defineLocale('tl-ph', {
+ months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
+ monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+ weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
+ weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+ weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'MM/D/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY HH:mm',
+ LLLL : 'dddd, MMMM DD, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: 'LT [ngayong araw]',
+ nextDay: '[Bukas ng] LT',
+ nextWeek: 'LT [sa susunod na] dddd',
+ lastDay: 'LT [kahapon]',
+ lastWeek: 'LT [noong nakaraang] dddd',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'sa loob ng %s',
+ past : '%s ang nakalipas',
+ s : 'ilang segundo',
+ m : 'isang minuto',
+ mm : '%d minuto',
+ h : 'isang oras',
+ hh : '%d oras',
+ d : 'isang araw',
+ dd : '%d araw',
+ M : 'isang buwan',
+ MM : '%d buwan',
+ y : 'isang taon',
+ yy : '%d taon'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Klingon [tlh]
+//! author : Dominika Kruk : https://github.com/amaranthrose
+
+var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+function translateFuture(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'leS' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'waQ' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'nem' :
+ time + ' pIq';
+ return time;
+}
+
+function translatePast(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'Hu’' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'wen' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'ben' :
+ time + ' ret';
+ return time;
+}
+
+function translate$9(number, withoutSuffix, string, isFuture) {
+ var numberNoun = numberAsNoun(number);
+ switch (string) {
+ case 'mm':
+ return numberNoun + ' tup';
+ case 'hh':
+ return numberNoun + ' rep';
+ case 'dd':
+ return numberNoun + ' jaj';
+ case 'MM':
+ return numberNoun + ' jar';
+ case 'yy':
+ return numberNoun + ' DIS';
+ }
+}
+
+function numberAsNoun(number) {
+ var hundred = Math.floor((number % 1000) / 100),
+ ten = Math.floor((number % 100) / 10),
+ one = number % 10,
+ word = '';
+ if (hundred > 0) {
+ word += numbersNouns[hundred] + 'vatlh';
+ }
+ if (ten > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
+ }
+ if (one > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[one];
+ }
+ return (word === '') ? 'pagh' : word;
+}
+
+moment.defineLocale('tlh', {
+ months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
+ monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[DaHjaj] LT',
+ nextDay: '[wa’leS] LT',
+ nextWeek: 'LLL',
+ lastDay: '[wa’Hu’] LT',
+ lastWeek: 'LLL',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : translateFuture,
+ past : translatePast,
+ s : 'puS lup',
+ m : 'wa’ tup',
+ mm : translate$9,
+ h : 'wa’ rep',
+ hh : translate$9,
+ d : 'wa’ jaj',
+ dd : translate$9,
+ M : 'wa’ jar',
+ MM : translate$9,
+ y : 'wa’ DIS',
+ yy : translate$9
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Turkish [tr]
+//! authors : Erhan Gundogan : https://github.com/erhangundogan,
+//! Burak Yiğit Kaya: https://github.com/BYK
+
+var suffixes$3 = {
+ 1: '\'inci',
+ 5: '\'inci',
+ 8: '\'inci',
+ 70: '\'inci',
+ 80: '\'inci',
+ 2: '\'nci',
+ 7: '\'nci',
+ 20: '\'nci',
+ 50: '\'nci',
+ 3: '\'üncü',
+ 4: '\'üncü',
+ 100: '\'üncü',
+ 6: '\'ncı',
+ 9: '\'uncu',
+ 10: '\'uncu',
+ 30: '\'uncu',
+ 60: '\'ıncı',
+ 90: '\'ıncı'
+};
+
+moment.defineLocale('tr', {
+ months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
+ monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+ weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
+ weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+ weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[yarın saat] LT',
+ nextWeek : '[haftaya] dddd [saat] LT',
+ lastDay : '[dün] LT',
+ lastWeek : '[geçen hafta] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s önce',
+ s : 'birkaç saniye',
+ m : 'bir dakika',
+ mm : '%d dakika',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir yıl',
+ yy : '%d yıl'
+ },
+ ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '\'ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes$3[a] || suffixes$3[b] || suffixes$3[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Talossan [tzl]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+//! author : Iustì Canun
+
+// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+// This is currently too difficult (maybe even impossible) to add.
+moment.defineLocale('tzl', {
+ months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+ weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+ weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+ weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM [dallas] YYYY',
+ LLL : 'D. MMMM [dallas] YYYY HH.mm',
+ LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
+ },
+ meridiemParse: /d\'o|d\'a/i,
+ isPM : function (input) {
+ return 'd\'o' === input.toLowerCase();
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'd\'o' : 'D\'O';
+ } else {
+ return isLower ? 'd\'a' : 'D\'A';
+ }
+ },
+ calendar : {
+ sameDay : '[oxhi à] LT',
+ nextDay : '[demà à] LT',
+ nextWeek : 'dddd [à] LT',
+ lastDay : '[ieiri à] LT',
+ lastWeek : '[sür el] dddd [lasteu à] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'osprei %s',
+ past : 'ja%s',
+ s : processRelativeTime$5,
+ m : processRelativeTime$5,
+ mm : processRelativeTime$5,
+ h : processRelativeTime$5,
+ hh : processRelativeTime$5,
+ d : processRelativeTime$5,
+ dd : processRelativeTime$5,
+ M : processRelativeTime$5,
+ MM : processRelativeTime$5,
+ y : processRelativeTime$5,
+ yy : processRelativeTime$5
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's': ['viensas secunds', '\'iensas secunds'],
+ 'm': ['\'n míut', '\'iens míut'],
+ 'mm': [number + ' míuts', '' + number + ' míuts'],
+ 'h': ['\'n þora', '\'iensa þora'],
+ 'hh': [number + ' þoras', '' + number + ' þoras'],
+ 'd': ['\'n ziua', '\'iensa ziua'],
+ 'dd': [number + ' ziuas', '' + number + ' ziuas'],
+ 'M': ['\'n mes', '\'iens mes'],
+ 'MM': [number + ' mesen', '' + number + ' mesen'],
+ 'y': ['\'n ar', '\'iens ar'],
+ 'yy': [number + ' ars', '' + number + ' ars']
+ };
+ return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
+}
+
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight Latin [tzm-latn]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+moment.defineLocale('tzm-latn', {
+ months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[asdkh g] LT',
+ nextDay: '[aska g] LT',
+ nextWeek: 'dddd [g] LT',
+ lastDay: '[assant g] LT',
+ lastWeek: 'dddd [g] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dadkh s yan %s',
+ past : 'yan %s',
+ s : 'imik',
+ m : 'minuḍ',
+ mm : '%d minuḍ',
+ h : 'saɛa',
+ hh : '%d tassaɛin',
+ d : 'ass',
+ dd : '%d ossan',
+ M : 'ayowr',
+ MM : '%d iyyirn',
+ y : 'asgas',
+ yy : '%d isgasn'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight [tzm]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+moment.defineLocale('tzm', {
+ months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+ nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+ nextWeek: 'dddd [ⴴ] LT',
+ lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+ lastWeek: 'dddd [ⴴ] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+ past : 'ⵢⴰⵏ %s',
+ s : 'ⵉⵎⵉⴽ',
+ m : 'ⵎⵉⵏⵓⴺ',
+ mm : '%d ⵎⵉⵏⵓⴺ',
+ h : 'ⵙⴰⵄⴰ',
+ hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+ d : 'ⴰⵙⵙ',
+ dd : '%d oⵙⵙⴰⵏ',
+ M : 'ⴰⵢoⵓⵔ',
+ MM : '%d ⵉⵢⵢⵉⵔⵏ',
+ y : 'ⴰⵙⴳⴰⵙ',
+ yy : '%d ⵉⵙⴳⴰⵙⵏ'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Ukrainian [uk]
+//! author : zemlanin : https://github.com/zemlanin
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+function plural$6(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural$4(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+ 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
+ 'dd': 'день_дні_днів',
+ 'MM': 'місяць_місяці_місяців',
+ 'yy': 'рік_роки_років'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвилина' : 'хвилину';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'година' : 'годину';
+ }
+ else {
+ return number + ' ' + plural$6(format[key], +number);
+ }
+}
+function weekdaysCaseReplace(m, format) {
+ var weekdays = {
+ 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
+ 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
+ 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
+ },
+ nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
+ 'accusative' :
+ ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
+ 'genitive' :
+ 'nominative');
+ return weekdays[nounCase][m.day()];
+}
+function processHoursFunction(str) {
+ return function () {
+ return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+ };
+}
+
+moment.defineLocale('uk', {
+ months : {
+ 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+ 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+ },
+ monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
+ weekdays : weekdaysCaseReplace,
+ weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY р.',
+ LLL : 'D MMMM YYYY р., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY р., HH:mm'
+ },
+ calendar : {
+ sameDay: processHoursFunction('[Сьогодні '),
+ nextDay: processHoursFunction('[Завтра '),
+ lastDay: processHoursFunction('[Вчора '),
+ nextWeek: processHoursFunction('[У] dddd ['),
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return processHoursFunction('[Минулої] dddd [').call(this);
+ case 1:
+ case 2:
+ case 4:
+ return processHoursFunction('[Минулого] dddd [').call(this);
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : '%s тому',
+ s : 'декілька секунд',
+ m : relativeTimeWithPlural$4,
+ mm : relativeTimeWithPlural$4,
+ h : 'годину',
+ hh : relativeTimeWithPlural$4,
+ d : 'день',
+ dd : relativeTimeWithPlural$4,
+ M : 'місяць',
+ MM : relativeTimeWithPlural$4,
+ y : 'рік',
+ yy : relativeTimeWithPlural$4
+ },
+ // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+ meridiemParse: /ночі|ранку|дня|вечора/,
+ isPM: function (input) {
+ return /^(дня|вечора)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночі';
+ } else if (hour < 12) {
+ return 'ранку';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечора';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Uzbek [uz]
+//! author : Sardor Muminov : https://github.com/muminoff
+
+moment.defineLocale('uz', {
+ months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
+ monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+ weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+ weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'D MMMM YYYY, dddd HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бугун соат] LT [да]',
+ nextDay : '[Эртага] LT [да]',
+ nextWeek : 'dddd [куни соат] LT [да]',
+ lastDay : '[Кеча соат] LT [да]',
+ lastWeek : '[Утган] dddd [куни соат] LT [да]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'Якин %s ичида',
+ past : 'Бир неча %s олдин',
+ s : 'фурсат',
+ m : 'бир дакика',
+ mm : '%d дакика',
+ h : 'бир соат',
+ hh : '%d соат',
+ d : 'бир кун',
+ dd : '%d кун',
+ M : 'бир ой',
+ MM : '%d ой',
+ y : 'бир йил',
+ yy : '%d йил'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Vietnamese [vi]
+//! author : Bang Nguyen : https://github.com/bangnk
+
+moment.defineLocale('vi', {
+ months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
+ monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
+ weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /sa|ch/i,
+ isPM : function (input) {
+ return /^ch$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'sa' : 'SA';
+ } else {
+ return isLower ? 'ch' : 'CH';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM [năm] YYYY',
+ LLL : 'D MMMM [năm] YYYY HH:mm',
+ LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
+ l : 'DD/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hôm nay lúc] LT',
+ nextDay: '[Ngày mai lúc] LT',
+ nextWeek: 'dddd [tuần tới lúc] LT',
+ lastDay: '[Hôm qua lúc] LT',
+ lastWeek: 'dddd [tuần rồi lúc] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s tới',
+ past : '%s trước',
+ s : 'vài giây',
+ m : 'một phút',
+ mm : '%d phút',
+ h : 'một giờ',
+ hh : '%d giờ',
+ d : 'một ngày',
+ dd : '%d ngày',
+ M : 'một tháng',
+ MM : '%d tháng',
+ y : 'một năm',
+ yy : '%d năm'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Pseudo [x-pseudo]
+//! author : Andrew Hood : https://github.com/andrewhood125
+
+moment.defineLocale('x-pseudo', {
+ months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
+ monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
+ weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+ weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[T~ódá~ý át] LT',
+ nextDay : '[T~ómó~rró~w át] LT',
+ nextWeek : 'dddd [át] LT',
+ lastDay : '[Ý~ést~érdá~ý át] LT',
+ lastWeek : '[L~ást] dddd [át] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'í~ñ %s',
+ past : '%s á~gó',
+ s : 'á ~féw ~sécó~ñds',
+ m : 'á ~míñ~úté',
+ mm : '%d m~íñú~tés',
+ h : 'á~ñ hó~úr',
+ hh : '%d h~óúrs',
+ d : 'á ~dáý',
+ dd : '%d d~áýs',
+ M : 'á ~móñ~th',
+ MM : '%d m~óñt~hs',
+ y : 'á ~ýéár',
+ yy : '%d ý~éárs'
+ },
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Yoruba Nigeria [yo]
+//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
+
+moment.defineLocale('yo', {
+ months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
+ monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
+ weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
+ weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
+ weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Ònì ni] LT',
+ nextDay : '[Ọ̀la ni] LT',
+ nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
+ lastDay : '[Àna ni] LT',
+ lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ní %s',
+ past : '%s kọjá',
+ s : 'ìsẹjú aayá die',
+ m : 'ìsẹjú kan',
+ mm : 'ìsẹjú %d',
+ h : 'wákati kan',
+ hh : 'wákati %d',
+ d : 'ọjọ́ kan',
+ dd : 'ọjọ́ %d',
+ M : 'osù kan',
+ MM : 'osù %d',
+ y : 'ọdún kan',
+ yy : 'ọdún %d'
+ },
+ ordinalParse : /ọjọ́\s\d{1,2}/,
+ ordinal : 'ọjọ́ %d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+
+moment.defineLocale('zh-cn', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah点mm分',
+ LTS : 'Ah点m分s秒',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah点mm分',
+ LLLL : 'YYYY年MMMD日ddddAh点mm分',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah点mm分',
+ llll : 'YYYY年MMMD日ddddAh点mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' ||
+ meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ } else {
+ // '中午'
+ return hour >= 11 ? hour : hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : function () {
+ return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
+ },
+ nextDay : function () {
+ return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
+ },
+ lastDay : function () {
+ return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
+ },
+ nextWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = moment().startOf('week');
+ prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ lastWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = moment().startOf('week');
+ prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ sameElse : 'LL'
+ },
+ ordinalParse: /\d{1,2}(日|月|周)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ case 'M':
+ return number + '月';
+ case 'w':
+ case 'W':
+ return number + '周';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s内',
+ past : '%s前',
+ s : '几秒',
+ m : '1 分钟',
+ mm : '%d 分钟',
+ h : '1 小时',
+ hh : '%d 小时',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 个月',
+ MM : '%d 个月',
+ y : '1 年',
+ yy : '%d 年'
+ },
+ week : {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chinese (Hong Kong) [zh-hk]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+//! author : Konstantin : https://github.com/skfd
+
+moment.defineLocale('zh-hk', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chinese (Taiwan) [zh-tw]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+
+moment.defineLocale('zh-tw', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
+
+moment.locale('en');
+
+return moment;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.min.js
new file mode 100644
index 00000000000..f97270b250b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/locales.min.js
@@ -0,0 +1,663 @@
+!function(a,b){"object"==typeof exports&&"undefined"!=typeof module&&"function"==typeof require?b(require("../moment")):"function"==typeof define&&define.amd?define(["../moment"],b):b(a.moment)}(this,function(a){"use strict";
+//! moment.js locale configuration
+//! locale : Belarusian [be]
+//! author : Dmitry Demidov : https://github.com/demidov91
+//! author: Praleska: http://praleska.pro/
+//! Author : Menelion Elensúle : https://github.com/Oire
+function b(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function c(a,c,d){var e={mm:c?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:c?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===d?c?"хвіліна":"хвіліну":"h"===d?c?"гадзіна":"гадзіну":a+" "+b(e[d],+a)}
+//! moment.js locale configuration
+//! locale : Breton [br]
+//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+function d(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+g(d[c],a)}function e(a){switch(f(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function f(a){return a>9?f(a%10):a}function g(a,b){return 2===b?h(a):a}function h(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)}
+//! moment.js locale configuration
+//! locale : Bosnian [bs]
+//! author : Nedim Cholich : https://github.com/frontyard
+//! based on (hr) translation by Bojan Marković
+function i(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function j(a){return a>1&&a<5&&1!==~~(a/10)}function k(a,b,c,d){var e=a+" ";switch(c){case"s":// a few seconds / in a few seconds / a few seconds ago
+return b||d?"pár sekund":"pár sekundami";case"m":// a minute / in a minute / a minute ago
+return b?"minuta":d?"minutu":"minutou";case"mm":// 9 minutes / in 9 minutes / 9 minutes ago
+// 9 minutes / in 9 minutes / 9 minutes ago
+return b||d?e+(j(a)?"minuty":"minut"):e+"minutami";break;case"h":// an hour / in an hour / an hour ago
+return b?"hodina":d?"hodinu":"hodinou";case"hh":// 9 hours / in 9 hours / 9 hours ago
+// 9 hours / in 9 hours / 9 hours ago
+return b||d?e+(j(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":// a day / in a day / a day ago
+return b||d?"den":"dnem";case"dd":// 9 days / in 9 days / 9 days ago
+// 9 days / in 9 days / 9 days ago
+return b||d?e+(j(a)?"dny":"dní"):e+"dny";break;case"M":// a month / in a month / a month ago
+return b||d?"měsíc":"měsícem";case"MM":// 9 months / in 9 months / 9 months ago
+// 9 months / in 9 months / 9 months ago
+return b||d?e+(j(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":// a year / in a year / a year ago
+return b||d?"rok":"rokem";case"yy":// 9 years / in 9 years / 9 years ago
+// 9 years / in 9 years / 9 years ago
+return b||d?e+(j(a)?"roky":"let"):e+"lety"}}
+//! moment.js locale configuration
+//! locale : German (Austria) [de-at]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Martin Groller : https://github.com/MadMG
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+function l(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}
+//! moment.js locale configuration
+//! locale : German [de]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+function m(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}function n(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}
+//! moment.js locale configuration
+//! locale : Estonian [et]
+//! author : Henry Kehlmann : https://github.com/madhenry
+//! improvements : Illimar Tambek : https://github.com/ragulka
+function o(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function p(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=q(a,d)+" "+e}function q(a,b){return a<10?b?Ca[a]:Ba[a]:a}
+//! moment.js locale configuration
+//! locale : Croatian [hr]
+//! author : Bojan Marković : https://github.com/bmarkovic
+function r(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function s(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function t(a){return(a?"":"[múlt] ")+"["+Ma[this.day()]+"] LT[-kor]"}
+//! moment.js locale configuration
+//! locale : Icelandic [is]
+//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+function u(a){return a%100===11||a%10!==1}function v(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return u(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return u(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return u(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return u(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return u(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}}
+//! moment.js locale configuration
+//! locale : Luxembourgish [lb]
+//! author : mweimerskirch : https://github.com/mweimerskirch
+//! author : David Raison : https://github.com/kwisatz
+function w(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function x(a){var b=a.substr(0,a.indexOf(" "));return z(b)?"a "+a:"an "+a}function y(a){var b=a.substr(0,a.indexOf(" "));return z(b)?"viru "+a:"virun "+a}/**
+ * Returns true if the word before the given number loses the '-n' ending.
+ * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+ *
+ * @param number {integer}
+ * @returns {boolean}
+ */
+function z(a){if(a=parseInt(a,10),isNaN(a))return!1;if(a<0)
+// Negative Number --> always true
+return!0;if(a<10)
+// Only 1 digit
+return 4<=a&&a<=7;if(a<100){
+// 2 digits
+var b=a%10,c=a/10;return z(0===b?c:b)}if(a<1e4){
+// 3 or 4 digits --> recursively check first digit
+for(;a>=10;)a/=10;return z(a)}
+// Anything larger than 4 digits: recursively check first n-3 digits
+return a/=1e3,z(a)}function A(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function B(a,b,c,d){return b?D(c)[0]:d?D(c)[1]:D(c)[2]}function C(a){return a%10===0||a>10&&a<20}function D(a){return Pa[a].split("_")}function E(a,b,c,d){var e=a+" ";return 1===a?e+B(a,b,c[0],d):b?e+(C(a)?D(c)[1]:D(c)[0]):d?e+D(c)[1]:e+(C(a)?D(c)[1]:D(c)[2])}/**
+ * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+ */
+function F(a,b,c){return c?b%10===1&&b%100!==11?a[2]:a[3]:b%10===1&&b%100!==11?a[0]:a[1]}function G(a,b,c){return a+" "+F(Qa[c],a,b)}function H(a,b,c){return F(Qa[c],a,b)}function I(a,b){return b?"dažas sekundes":"dažām sekundēm"}function J(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function K(a){return a%10<5&&a%10>1&&~~(a/10)%10!==1}function L(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(K(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(K(a)?"godziny":"godzin");case"MM":return d+(K(a)?"miesiące":"miesięcy");case"yy":return d+(K(a)?"lata":"lat")}}
+//! moment.js locale configuration
+//! locale : Romanian [ro]
+//! author : Vlad Gurdiga : https://github.com/gurdiga
+//! author : Valentin Agachi : https://github.com/avaly
+function M(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}
+//! moment.js locale configuration
+//! locale : Russian [ru]
+//! author : Viktorminator : https://github.com/Viktorminator
+//! Author : Menelion Elensúle : https://github.com/Oire
+//! author : Коренберг Марк : https://github.com/socketpair
+function N(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function O(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+N(d[c],+a)}function P(a){return a>1&&a<5}function Q(a,b,c,d){var e=a+" ";switch(c){case"s":// a few seconds / in a few seconds / a few seconds ago
+return b||d?"pár sekúnd":"pár sekundami";case"m":// a minute / in a minute / a minute ago
+return b?"minúta":d?"minútu":"minútou";case"mm":// 9 minutes / in 9 minutes / 9 minutes ago
+// 9 minutes / in 9 minutes / 9 minutes ago
+return b||d?e+(P(a)?"minúty":"minút"):e+"minútami";break;case"h":// an hour / in an hour / an hour ago
+return b?"hodina":d?"hodinu":"hodinou";case"hh":// 9 hours / in 9 hours / 9 hours ago
+// 9 hours / in 9 hours / 9 hours ago
+return b||d?e+(P(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":// a day / in a day / a day ago
+return b||d?"deň":"dňom";case"dd":// 9 days / in 9 days / 9 days ago
+// 9 days / in 9 days / 9 days ago
+return b||d?e+(P(a)?"dni":"dní"):e+"dňami";break;case"M":// a month / in a month / a month ago
+return b||d?"mesiac":"mesiacom";case"MM":// 9 months / in 9 months / 9 months ago
+// 9 months / in 9 months / 9 months ago
+return b||d?e+(P(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":// a year / in a year / a year ago
+return b||d?"rok":"rokom";case"yy":// 9 years / in 9 years / 9 years ago
+// 9 years / in 9 years / 9 years ago
+return b||d?e+(P(a)?"roky":"rokov"):e+"rokmi"}}
+//! moment.js locale configuration
+//! locale : Slovenian [sl]
+//! author : Robert Sedovšek : https://github.com/sedovsek
+function R(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":a<5?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":a<5?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":a<5?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":a<5?b||d?"leta":"leti":b||d?"let":"leti"}}function S(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"leS":a.indexOf("jar")!==-1?b.slice(0,-3)+"waQ":a.indexOf("DIS")!==-1?b.slice(0,-3)+"nem":b+" pIq"}function T(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"Hu’":a.indexOf("jar")!==-1?b.slice(0,-3)+"wen":a.indexOf("DIS")!==-1?b.slice(0,-3)+"ben":b+" ret"}function U(a,b,c,d){var e=V(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function V(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=pb[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+pb[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+pb[d]),""===e?"pagh":e}function W(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]}
+//! moment.js locale configuration
+//! locale : Ukrainian [uk]
+//! author : zemlanin : https://github.com/zemlanin
+//! Author : Menelion Elensúle : https://github.com/Oire
+function X(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function Y(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+X(d[c],+a)}function Z(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function $(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}
+//! moment.js locale configuration
+//! locale : Afrikaans [af]
+//! author : Werner Mollentze : https://github.com/wernerm
+a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Maandag is die eerste dag van die week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Arabic (Algeria) [ar-dz]
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,// Sunday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Arabic (Lybia) [ar-ly]
+//! author : Ali Hmer: https://github.com/kikoanis
+var _={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},aa=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},ba={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},ca=function(a){return function(b,c,d,e){var f=aa(b),g=ba[a][aa(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},da=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];a.defineLocale("ar-ly",{months:da,monthsShort:da,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:ca("s"),m:ca("m"),mm:ca("m"),h:ca("h"),hh:ca("h"),d:ca("d"),dd:ca("d"),M:ca("M"),MM:ca("M"),y:ca("y"),yy:ca("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return _[a]}).replace(/,/g,"،")},week:{dow:6,// Saturday is the first day of the week.
+doy:12}}),
+//! moment.js locale configuration
+//! locale : Arabic (Morocco) [ar-ma]
+//! author : ElFadili Yassine : https://github.com/ElFadiliY
+//! author : Abdel Said : https://github.com/abdelsaid
+a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,// Saturday is the first day of the week.
+doy:12}});
+//! moment.js locale configuration
+//! locale : Arabic (Saudi Arabia) [ar-sa]
+//! author : Suhail Alkowaileet : https://github.com/xsoh
+var ea={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},fa={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return fa[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ea[a]}).replace(/,/g,"،")},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Arabic (Tunisia) [ar-tn]
+//! author : Nader Toukabri : https://github.com/naderio
+a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Arabic [ar]
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+var ga={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},ha={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},ia=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},ja={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},ka=function(a){return function(b,c,d,e){var f=ia(b),g=ja[a][ia(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},la=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];a.defineLocale("ar",{months:la,monthsShort:la,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:ka("s"),m:ka("m"),mm:ka("m"),h:ka("h"),hh:ka("h"),d:ka("d"),dd:ka("d"),M:ka("M"),MM:ka("M"),y:ka("y"),yy:ka("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return ha[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ga[a]}).replace(/,/g,"،")},week:{dow:6,// Saturday is the first day of the week.
+doy:12}});
+//! moment.js locale configuration
+//! locale : Azerbaijani [az]
+//! author : topchiyev : https://github.com/topchiyev
+var ma={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return a<4?"gecə":a<12?"səhər":a<17?"gündüz":"axşam"},ordinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)// special case for zero
+return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(ma[b]||ma[c]||ma[d])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:c,mm:c,h:c,hh:c,d:"дзень",dd:c,M:"месяц",MM:c,y:"год",yy:c},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночы":a<12?"раніцы":a<17?"дня":"вечара"},ordinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Bulgarian [bg]
+//! author : Krasen Borisov : https://github.com/kraz
+a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Bengali [bn]
+//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
+var na={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},oa={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};a.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return oa[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return na[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&a<5||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return a<4?"রাত":a<10?"সকাল":a<17?"দুপুর":a<20?"বিকাল":"রাত"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}});
+//! moment.js locale configuration
+//! locale : Tibetan [bo]
+//! author : Thupten N. Chakrishar : https://github.com/vajradog
+var pa={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},qa={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return qa[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return pa[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&a<5||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return a<4?"མཚན་མོ":a<10?"ཞོགས་ཀས":a<17?"ཉིན་གུང":a<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),a.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:d,h:"un eur",hh:"%d eur",d:"un devezh",dd:d,M:"ur miz",MM:d,y:"ur bloaz",yy:e},ordinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:i,mm:i,h:i,hh:i,d:"dan",dd:i,M:"mjesec",MM:i,y:"godinu",yy:i},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Catalan [ca]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+a.defineLocale("ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return"w"!==b&&"W"!==b||(c="a"),a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Czech [cs]
+//! author : petrbela : https://github.com/petrbela
+var ra="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),sa="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.defineLocale("cs",{months:ra,monthsShort:sa,monthsParse:function(a,b){var c,d=[];for(c=0;c<12;c++)
+// use custom parser to solve problem with July (červenec)
+d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(ra,sa),shortMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(sa),longMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(ra),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:k,m:k,mm:k,h:k,hh:k,d:k,dd:k,M:k,MM:k,y:k,yy:k},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Chuvash [cv]
+//! author : Anatoly Mironov : https://github.com/mirontoli
+a.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},ordinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Welsh [cy]
+//! author : Robert Allen : https://github.com/robgallen
+//! author : https://github.com/ryangreaves
+a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,
+// time formats are the same as en-gb
+longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+// traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed",// 1af to 10fed
+"eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Danish [da]
+//! author : Ulrik Nielsen : https://github.com/mrbase
+a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:l,mm:"%d Minuten",h:l,hh:"%d Stunden",d:l,dd:l,M:l,MM:l,y:l,yy:l},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:m,mm:"%d Minuten",h:m,hh:"%d Stunden",d:m,dd:m,M:m,MM:m,y:m,yy:m},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Maldivian [dv]
+//! author : Jawish Hameed : https://github.com/jawish
+var ta=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],ua=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];a.defineLocale("dv",{months:ta,monthsShort:ta,weekdays:ua,weekdaysShort:ua,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return a<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,// Sunday is the first day of the week.
+doy:12}}),
+//! moment.js locale configuration
+//! locale : Greek [el]
+//! author : Aggelos Karalias : https://github.com/mehiel
+a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return n(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (Australia) [en-au]
+//! author : Jared Morse : https://github.com/jarcoal
+a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (Canada) [en-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),
+//! moment.js locale configuration
+//! locale : English (United Kingdom) [en-gb]
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (Ireland) [en-ie]
+//! author : Chris Cartlidge : https://github.com/chriscartlidge
+a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (New Zealand) [en-nz]
+//! author : Luke McGregor : https://github.com/lukemcgregor
+a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Esperanto [eo]
+//! author : Colin Dean : https://github.com/colindean
+//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-an de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",//ne 'diurno', ĉar estas uzita por proksimumo
+dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Spanish (Dominican Republic) [es-do]
+var va="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),wa="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?wa[a.month()]:va[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Spanish [es]
+//! author : Julio Napurí : https://github.com/julionc
+var xa="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),ya="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?ya[a.month()]:xa[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:o,m:o,mm:o,h:o,hh:o,d:o,dd:"%d päeva",M:o,MM:o,y:o,yy:o},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Basque [eu]
+//! author : Eneko Illarramendi : https://github.com/eillarra
+a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Persian [fa]
+//! author : Ebrahim Byagowi : https://github.com/ebraminio
+var za={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},Aa={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return a<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return Aa[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return za[a]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,// Saturday is the first day of the week.
+doy:12}});
+//! moment.js locale configuration
+//! locale : Finnish [fi]
+//! author : Tarmo Aidantausta : https://github.com/bleadof
+var Ba="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),Ca=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",Ba[7],Ba[8],Ba[9]];a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:p,m:p,mm:p,h:p,hh:p,d:p,dd:p,M:p,MM:p,y:p,yy:p},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Faroese [fo]
+//! author : Ragnar Johannesen : https://github.com/ragnar123
+a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : French (Canada) [fr-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}}),
+//! moment.js locale configuration
+//! locale : French (Switzerland) [fr-ch]
+//! author : Gaspard Bucher : https://github.com/gaspard
+a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : French [fr]
+//! author : John Fischer : https://github.com/jfroffice
+a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Frisian [fy]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+var Da="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Ea="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");a.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Ea[a.month()]:Da[a.month()]},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Scottish Gaelic [gd]
+//! author : Jon Ashdown : https://github.com/jonashdown
+var Fa=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],Ga=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],Ha=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],Ia=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],Ja=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];a.defineLocale("gd",{months:Fa,monthsShort:Ga,monthsParseExact:!0,weekdays:Ha,weekdaysShort:Ia,weekdaysMin:Ja,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},ordinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Galician [gl]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return 0===a.indexOf("un")?"n"+a:"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Hebrew [he]
+//! author : Tomer Cohen : https://github.com/tomer
+//! author : Moshe Simantov : https://github.com/DevelopmentIL
+//! author : Tal Ater : https://github.com/TalAter
+a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return a<5?"לפנות בוקר":a<10?"בבוקר":a<12?c?'לפנה"צ':"לפני הצהריים":a<18?c?'אחה"צ':"אחרי הצהריים":"בערב"}});
+//! moment.js locale configuration
+//! locale : Hindi [hi]
+//! author : Mayank Singhal : https://github.com/mayanksinghal
+var Ka={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},La={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return La[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ka[a]})},
+// Hindi notation for meridiems are quite fuzzy in practice. While there exists
+// a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?a<4?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात":a<10?"सुबह":a<17?"दोपहर":a<20?"शाम":"रात"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:r,mm:r,h:r,hh:r,d:"dan",dd:r,M:"mjesec",MM:r,y:"godinu",yy:r},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Hungarian [hu]
+//! author : Adam Brunner : https://github.com/adambrunner
+var Ma="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return a<12?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return t.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return t.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Armenian [hy-am]
+//! author : Armendarabyan : https://github.com/armendarabyan
+a.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return a<4?"գիշերվա":a<12?"առավոտվա":a<17?"ցերեկվա":"երեկոյան"},ordinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Indonesian [id]
+//! author : Mohammad Satrio Utomo : https://github.com/tyok
+//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"siang":a<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:v,m:v,mm:v,h:"klukkustund",hh:v,d:v,dd:v,M:v,MM:v,y:v,yy:v},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Italian [it]
+//! author : Lorenzo : https://github.com/aliem
+//! author: Mattia Larentis: https://github.com/nostalgiaz
+a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Japanese [ja]
+//! author : LI Long : https://github.com/baryon
+a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah時m分",LLLL:"YYYY年M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return a<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},ordinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}),
+//! moment.js locale configuration
+//! locale : Javanese [jv]
+//! author : Rony Lantip : https://github.com/lantip
+//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
+a.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"enjing":a<15?"siyang":a<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Georgian [ka]
+//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+a.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":a<20||a<=100&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}});
+//! moment.js locale configuration
+//! locale : Kazakh [kk]
+//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
+var Na={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(Na[a]||Na[b]||Na[c])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Cambodian [km]
+//! author : Kruy Vanna : https://github.com/kruyvanna
+a.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Korean [ko]
+//! author : Kyungwook, Park : https://github.com/kyungw00k
+//! author : Jeeeyul Lee <jeeeyul@gmail.com>
+a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"일분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return a<12?"오전":"오후"}});
+//! moment.js locale configuration
+//! locale : Kyrgyz [ky]
+//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
+var Oa={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};a.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(Oa[a]||Oa[b]||Oa[c])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){
+// Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:x,past:y,s:"e puer Sekonnen",m:w,mm:"%d Minutten",h:w,hh:"%d Stonnen",d:w,dd:"%d Deeg",M:w,MM:"%d Méint",y:w,yy:"%d Joer"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Lao [lo]
+//! author : Ryan Hart : https://github.com/ryanhart2
+a.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return a<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},ordinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}});
+//! moment.js locale configuration
+//! locale : Lithuanian [lt]
+//! author : Mindaugas Mozūras : https://github.com/mmozuras
+var Pa={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:A,m:B,mm:E,h:B,hh:E,d:B,dd:E,M:B,MM:E,y:B,yy:E},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Latvian [lv]
+//! author : Kristaps Karlsons : https://github.com/skakri
+//! author : Jānis Elmeris : https://github.com/JanisE
+var Qa={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:I,m:H,mm:G,h:H,hh:G,d:H,dd:G,M:H,MM:G,y:H,yy:G},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Montenegrin [me]
+//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
+var Ra={words:{//Different grammatical cases
+m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Ra.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Ra.correctGrammaticalCase(a,d)}};a.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:Ra.translate,mm:Ra.translate,h:Ra.translate,hh:Ra.translate,d:"dan",dd:Ra.translate,M:"mjesec",MM:Ra.translate,y:"godinu",yy:Ra.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Maori [mi]
+//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
+a.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Macedonian [mk]
+//! author : Borislav Mickov : https://github.com/B0k0
+a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Malayalam [ml]
+//! author : Floyd Pink : https://github.com/floydpink
+a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return a<4?"രാത്രി":a<12?"രാവിലെ":a<17?"ഉച്ച കഴിഞ്ഞ്":a<20?"വൈകുന്നേരം":"രാത്രി"}});
+//! moment.js locale configuration
+//! locale : Marathi [mr]
+//! author : Harshad Kale : https://github.com/kalehv
+//! author : Vivek Athalye : https://github.com/vnathalye
+var Sa={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},Ta={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:J,m:J,mm:J,h:J,hh:J,d:J,dd:J,M:J,MM:J,y:J,yy:J},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Ta[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Sa[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?a<4?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात्री":a<10?"सकाळी":a<17?"दुपारी":a<20?"सायंकाळी":"रात्री"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Malay [ms-my]
+//! note : DEPRECATED, the correct one is [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Malay [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Burmese [my]
+//! author : Squar team, mysquar.com
+//! author : David Rossellat : https://github.com/gholadr
+//! author : Tin Aung Lin : https://github.com/thanyawzinmin
+var Ua={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},Va={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return Va[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Ua[a]})},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Norwegian Bokmål [nb]
+//! authors : Espen Hovlandsdal : https://github.com/rexxars
+//! Sigurd Gartmann : https://github.com/sigurdga
+a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Nepalese [ne]
+//! author : suvash : https://github.com/suvash
+var Wa={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},Xa={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return Xa[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Wa[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?a<4?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return a<3?"राति":a<12?"बिहान":a<16?"दिउँसो":a<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}});
+//! moment.js locale configuration
+//! locale : Dutch (Belgium) [nl-be]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+var Ya="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),Za="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),$a=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],_a=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Za[a.month()]:Ya[a.month()]},monthsRegex:_a,monthsShortRegex:_a,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:$a,longMonthsParse:$a,shortMonthsParse:$a,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Dutch [nl]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+var ab="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),bb="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),cb=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],db=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?bb[a.month()]:ab[a.month()]},monthsRegex:db,monthsShortRegex:db,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:cb,longMonthsParse:cb,shortMonthsParse:cb,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Nynorsk [nn]
+//! author : https://github.com/mechuwind
+a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Punjabi (India) [pa-in]
+//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
+var eb={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},fb={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};a.defineLocale("pa-in",{
+// There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return fb[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return eb[a]})},
+// Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+// a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?a<4?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ਰਾਤ":a<10?"ਸਵੇਰ":a<17?"ਦੁਪਹਿਰ":a<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}});
+//! moment.js locale configuration
+//! locale : Polish [pl]
+//! author : Rafal Hirsz : https://github.com/evoL
+var gb="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),hb="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.defineLocale("pl",{months:function(a,b){return""===b?"("+hb[a.month()]+"|"+gb[a.month()]+")":/D MMMM/.test(b)?hb[a.month()]:gb[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:L,mm:L,h:L,hh:L,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:L,y:"rok",yy:L},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Portuguese (Brazil) [pt-br]
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+a.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){// Saturday + Sunday
+return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"}),
+//! moment.js locale configuration
+//! locale : Portuguese [pt]
+//! author : Jefferson : https://github.com/jalex79
+a.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){// Saturday + Sunday
+return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:M,h:"o oră",hh:M,d:"o zi",dd:M,M:"o lună",MM:M,y:"un an",yy:M},week:{dow:1,// Monday is the first day of the week.
+doy:7}});var ib=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];
+// http://new.gramota.ru/spravka/rules/139-prop : § 103
+// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{
+// по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:ib,longMonthsParse:ib,shortMonthsParse:ib,
+// полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+// копия предыдущего
+monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+// полные названия с падежами
+monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+// Выражение, которое соотвествует только сокращённым формам
+monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:O,mm:O,h:"час",hh:O,d:"день",dd:O,M:"месяц",MM:O,y:"год",yy:O},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночи":a<12?"утра":a<17?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Northern Sami [se]
+//! authors : Bård Rolstad Henriksen : https://github.com/karamell
+a.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Sinhalese [si]
+//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
+/*jshint -W100*/
+a.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},ordinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}});
+//! moment.js locale configuration
+//! locale : Slovak [sk]
+//! author : Martin Minka : https://github.com/k2s
+//! based on work of petrbela : https://github.com/petrbela
+var jb="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),kb="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.defineLocale("sk",{months:jb,monthsShort:kb,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:Q,m:Q,mm:Q,h:Q,hh:Q,d:Q,dd:Q,M:Q,MM:Q,y:Q,yy:Q},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:R,m:R,mm:R,h:R,hh:R,d:R,dd:R,M:R,MM:R,y:R,yy:R},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Albanian [sq]
+//! author : Flakërim Ismani : https://github.com/flakerimi
+//! author : Menelion Elensúle : https://github.com/Oire
+//! author : Oerd Cukalla : https://github.com/oerd
+a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return a<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Serbian Cyrillic [sr-cyrl]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+var lb={words:{//Different grammatical cases
+m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=lb.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+lb.correctGrammaticalCase(a,d)}};a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:lb.translate,mm:lb.translate,h:lb.translate,hh:lb.translate,d:"дан",dd:lb.translate,M:"месец",MM:lb.translate,y:"годину",yy:lb.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Serbian [sr]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+var mb={words:{//Different grammatical cases
+m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=mb.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+mb.correctGrammaticalCase(a,d)}};a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:mb.translate,mm:mb.translate,h:mb.translate,hh:mb.translate,d:"dan",dd:mb.translate,M:"mesec",MM:mb.translate,y:"godinu",yy:mb.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : siSwati [ss]
+//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
+a.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(a,b,c){return a<11?"ekuseni":a<15?"emini":a<19?"entsambama":"ebusuku"},meridiemHour:function(a,b){return 12===a&&(a=0),"ekuseni"===b?a:"emini"===b?a>=11?a:a+12:"entsambama"===b||"ebusuku"===b?0===a?0:a+12:void 0},ordinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Swedish [sv]
+//! author : Jens Alm : https://github.com/ulmus
+a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Swahili [sw]
+//! author : Fahad Kassim : https://github.com/fadsel
+a.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Tamil [ta]
+//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+var nb={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},ob={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return ob[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return nb[a]})},
+// refer http://ta.wikipedia.org/s/1er1
+meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return a<2?" யாமம்":a<6?" வைகறை":a<10?" காலை":a<14?" நண்பகல்":a<18?" எற்பாடு":a<22?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?a<2?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Telugu [te]
+//! author : Krishna Chaitanya Thota : https://github.com/kcthota
+a.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},ordinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?a<4?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"రాత్రి":a<10?"ఉదయం":a<17?"మధ్యాహ్నం":a<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Tetun Dili (East Timor) [tet]
+//! author : Joshua Brooks : https://github.com/joshbrooks
+//! author : Onorio De J. Afonso : https://github.com/marobo
+a.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Thai [th]
+//! author : Kridsada Thanabulpong : https://github.com/sirn
+a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),// yes, three characters difference
+weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return a<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}),
+//! moment.js locale configuration
+//! locale : Tagalog (Philippines) [tl-ph]
+//! author : Dan Hagman : https://github.com/hagmandan
+a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Klingon [tlh]
+//! author : Dominika Kruk : https://github.com/amaranthrose
+var pb="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");a.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:S,past:T,s:"puS lup",m:"wa’ tup",mm:U,h:"wa’ rep",hh:U,d:"wa’ jaj",dd:U,M:"wa’ jar",MM:U,y:"wa’ DIS",yy:U},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Turkish [tr]
+//! authors : Erhan Gundogan : https://github.com/erhangundogan,
+//! Burak Yiğit Kaya: https://github.com/BYK
+var qb={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};
+//! moment.js locale configuration
+//! locale : Talossan [tzl]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+//! author : Iustì Canun
+// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+// This is currently too difficult (maybe even impossible) to add.
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight Latin [tzm-latn]
+//! author : Abdel Said : https://github.com/abdelsaid
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight [tzm]
+//! author : Abdel Said : https://github.com/abdelsaid
+//! moment.js locale configuration
+//! locale : Uzbek [uz]
+//! author : Sardor Muminov : https://github.com/muminoff
+//! moment.js locale configuration
+//! locale : Vietnamese [vi]
+//! author : Bang Nguyen : https://github.com/bangnk
+//! moment.js locale configuration
+//! locale : Pseudo [x-pseudo]
+//! author : Andrew Hood : https://github.com/andrewhood125
+//! moment.js locale configuration
+//! locale : Yoruba Nigeria [yo]
+//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+//! moment.js locale configuration
+//! locale : Chinese (Hong Kong) [zh-hk]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+//! author : Konstantin : https://github.com/skfd
+//! moment.js locale configuration
+//! locale : Chinese (Taiwan) [zh-tw]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+return a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)// special case for zero
+return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(qb[b]||qb[c]||qb[d])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:W,m:W,mm:W,h:W,hh:W,d:W,dd:W,M:W,MM:W,y:W,yy:W},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,// Saturday is the first day of the week.
+doy:12}}),a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,// Saturday is the first day of the week.
+doy:12}}),a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:Z,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:$("[Сьогодні "),nextDay:$("[Завтра "),lastDay:$("[Вчора "),nextWeek:$("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return $("[Минулої] dddd [").call(this);case 1:case 2:case 4:return $("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:Y,mm:Y,h:"годину",hh:Y,d:"день",dd:Y,M:"місяць",MM:Y,y:"рік",yy:Y},
+// M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночі":a<12?"ранку":a<17?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},ordinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah点mm分",llll:"YYYY年MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var b,c;return b=a().startOf("week"),c=this.diff(b,"days")>=7?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()<b.unix()?"[上]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},sameElse:"LL"},ordinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{
+// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah點mm分",LLLL:"YYYY年MMMD日ddddAh點mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah點mm分",llll:"YYYY年MMMD日ddddAh點mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah點mm分",LLLL:"YYYY年MMMD日ddddAh點mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah點mm分",llll:"YYYY年MMMD日ddddAh點mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.js
new file mode 100644
index 00000000000..b5b0668736a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.js
@@ -0,0 +1,12910 @@
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ global.moment = factory()
+}(this, (function () { 'use strict';
+
+var hookCallback;
+
+function hooks () {
+ return hookCallback.apply(null, arguments);
+}
+
+// This is done to register the method called with moment()
+// without creating circular dependencies.
+function setHookCallback (callback) {
+ hookCallback = callback;
+}
+
+function isArray(input) {
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+}
+
+function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return input != null && Object.prototype.toString.call(input) === '[object Object]';
+}
+
+function isObjectEmpty(obj) {
+ var k;
+ for (k in obj) {
+ // even if its not own property I'd still call it non-empty
+ return false;
+ }
+ return true;
+}
+
+function isNumber(input) {
+ return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+}
+
+function isDate(input) {
+ return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+}
+
+function map(arr, fn) {
+ var res = [], i;
+ for (i = 0; i < arr.length; ++i) {
+ res.push(fn(arr[i], i));
+ }
+ return res;
+}
+
+function hasOwnProp(a, b) {
+ return Object.prototype.hasOwnProperty.call(a, b);
+}
+
+function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
+
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
+
+ return a;
+}
+
+function createUTC (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, true).utc();
+}
+
+function defaultParsingFlags() {
+ // We need to deep clone this object.
+ return {
+ empty : false,
+ unusedTokens : [],
+ unusedInput : [],
+ overflow : -2,
+ charsLeftOver : 0,
+ nullInput : false,
+ invalidMonth : null,
+ invalidFormat : false,
+ userInvalidated : false,
+ iso : false,
+ parsedDateParts : [],
+ meridiem : null
+ };
+}
+
+function getParsingFlags(m) {
+ if (m._pf == null) {
+ m._pf = defaultParsingFlags();
+ }
+ return m._pf;
+}
+
+var some;
+if (Array.prototype.some) {
+ some = Array.prototype.some;
+} else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+}
+
+var some$1 = some;
+
+function isValid(m) {
+ if (m._isValid == null) {
+ var flags = getParsingFlags(m);
+ var parsedParts = some$1.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
+ var isNowValid = !isNaN(m._d.getTime()) &&
+ flags.overflow < 0 &&
+ !flags.empty &&
+ !flags.invalidMonth &&
+ !flags.invalidWeekday &&
+ !flags.nullInput &&
+ !flags.invalidFormat &&
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
+
+ if (m._strict) {
+ isNowValid = isNowValid &&
+ flags.charsLeftOver === 0 &&
+ flags.unusedTokens.length === 0 &&
+ flags.bigHour === undefined;
+ }
+
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ }
+ else {
+ return isNowValid;
+ }
+ }
+ return m._isValid;
+}
+
+function createInvalid (flags) {
+ var m = createUTC(NaN);
+ if (flags != null) {
+ extend(getParsingFlags(m), flags);
+ }
+ else {
+ getParsingFlags(m).userInvalidated = true;
+ }
+
+ return m;
+}
+
+function isUndefined(input) {
+ return input === void 0;
+}
+
+// Plugins that add properties should also add the key here (null value),
+// so we can properly clone ourselves.
+var momentProperties = hooks.momentProperties = [];
+
+function copyConfig(to, from) {
+ var i, prop, val;
+
+ if (!isUndefined(from._isAMomentObject)) {
+ to._isAMomentObject = from._isAMomentObject;
+ }
+ if (!isUndefined(from._i)) {
+ to._i = from._i;
+ }
+ if (!isUndefined(from._f)) {
+ to._f = from._f;
+ }
+ if (!isUndefined(from._l)) {
+ to._l = from._l;
+ }
+ if (!isUndefined(from._strict)) {
+ to._strict = from._strict;
+ }
+ if (!isUndefined(from._tzm)) {
+ to._tzm = from._tzm;
+ }
+ if (!isUndefined(from._isUTC)) {
+ to._isUTC = from._isUTC;
+ }
+ if (!isUndefined(from._offset)) {
+ to._offset = from._offset;
+ }
+ if (!isUndefined(from._pf)) {
+ to._pf = getParsingFlags(from);
+ }
+ if (!isUndefined(from._locale)) {
+ to._locale = from._locale;
+ }
+
+ if (momentProperties.length > 0) {
+ for (i in momentProperties) {
+ prop = momentProperties[i];
+ val = from[prop];
+ if (!isUndefined(val)) {
+ to[prop] = val;
+ }
+ }
+ }
+
+ return to;
+}
+
+var updateInProgress = false;
+
+// Moment prototype object
+function Moment(config) {
+ copyConfig(this, config);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+ if (!this.isValid()) {
+ this._d = new Date(NaN);
+ }
+ // Prevent infinite loop in case updateOffset creates new moment
+ // objects.
+ if (updateInProgress === false) {
+ updateInProgress = true;
+ hooks.updateOffset(this);
+ updateInProgress = false;
+ }
+}
+
+function isMoment (obj) {
+ return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+}
+
+function absFloor (number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+}
+
+function toInt(argumentForCoercion) {
+ var coercedNumber = +argumentForCoercion,
+ value = 0;
+
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+ value = absFloor(coercedNumber);
+ }
+
+ return value;
+}
+
+// compare two arrays, return the number of differences
+function compareArrays(array1, array2, dontConvert) {
+ var len = Math.min(array1.length, array2.length),
+ lengthDiff = Math.abs(array1.length - array2.length),
+ diffs = 0,
+ i;
+ for (i = 0; i < len; i++) {
+ if ((dontConvert && array1[i] !== array2[i]) ||
+ (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+ diffs++;
+ }
+ }
+ return diffs + lengthDiff;
+}
+
+function warn(msg) {
+ if (hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
+}
+
+function deprecate(msg, fn) {
+ var firstTime = true;
+
+ return extend(function () {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
+}
+
+var deprecations = {};
+
+function deprecateSimple(name, msg) {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
+ }
+}
+
+hooks.suppressDeprecationWarnings = false;
+hooks.deprecationHandler = null;
+
+function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+}
+
+function set (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
+ }
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+}
+
+function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig), prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
+ }
+ }
+ return res;
+}
+
+function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
+}
+
+var keys;
+
+if (Object.keys) {
+ keys = Object.keys;
+} else {
+ keys = function (obj) {
+ var i, res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ };
+}
+
+var keys$1 = keys;
+
+var defaultCalendar = {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+};
+
+function calendar (key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
+}
+
+var defaultLongDateFormat = {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+};
+
+function longDateFormat (key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
+
+ if (format || !formatUpper) {
+ return format;
+ }
+
+ this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
+
+ return this._longDateFormat[key];
+}
+
+var defaultInvalidDate = 'Invalid date';
+
+function invalidDate () {
+ return this._invalidDate;
+}
+
+var defaultOrdinal = '%d';
+var defaultOrdinalParse = /\d{1,2}/;
+
+function ordinal (number) {
+ return this._ordinal.replace('%d', number);
+}
+
+var defaultRelativeTime = {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+};
+
+function relativeTime (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (isFunction(output)) ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+}
+
+function pastFuture (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+}
+
+var aliases = {};
+
+function addUnitAlias (unit, shorthand) {
+ var lowerCase = unit.toLowerCase();
+ aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+}
+
+function normalizeUnits(units) {
+ return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+}
+
+function normalizeObjectUnits(inputObject) {
+ var normalizedInput = {},
+ normalizedProp,
+ prop;
+
+ for (prop in inputObject) {
+ if (hasOwnProp(inputObject, prop)) {
+ normalizedProp = normalizeUnits(prop);
+ if (normalizedProp) {
+ normalizedInput[normalizedProp] = inputObject[prop];
+ }
+ }
+ }
+
+ return normalizedInput;
+}
+
+var priorities = {};
+
+function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
+}
+
+function getPrioritizedUnits(unitsObj) {
+ var units = [];
+ for (var u in unitsObj) {
+ units.push({unit: u, priority: priorities[u]});
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+}
+
+function makeGetSet (unit, keepTime) {
+ return function (value) {
+ if (value != null) {
+ set$1(this, unit, value);
+ hooks.updateOffset(this, keepTime);
+ return this;
+ } else {
+ return get(this, unit);
+ }
+ };
+}
+
+function get (mom, unit) {
+ return mom.isValid() ?
+ mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+}
+
+function set$1 (mom, unit, value) {
+ if (mom.isValid()) {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
+}
+
+// MOMENTS
+
+function stringGet (units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+}
+
+
+function stringSet (units, value) {
+ if (typeof units === 'object') {
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units);
+ for (var i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
+ }
+ } else {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units](value);
+ }
+ }
+ return this;
+}
+
+function zeroFill(number, targetLength, forceSign) {
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
+ sign = number >= 0;
+ return (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+}
+
+var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+var formatFunctions = {};
+
+var formatTokenFunctions = {};
+
+// token: 'M'
+// padded: ['MM', 2]
+// ordinal: 'Mo'
+// callback: function () { this.month() + 1 }
+function addFormatToken (token, padded, ordinal, callback) {
+ var func = callback;
+ if (typeof callback === 'string') {
+ func = function () {
+ return this[callback]();
+ };
+ }
+ if (token) {
+ formatTokenFunctions[token] = func;
+ }
+ if (padded) {
+ formatTokenFunctions[padded[0]] = function () {
+ return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+ };
+ }
+ if (ordinal) {
+ formatTokenFunctions[ordinal] = function () {
+ return this.localeData().ordinal(func.apply(this, arguments), token);
+ };
+ }
+}
+
+function removeFormattingTokens(input) {
+ if (input.match(/\[[\s\S]/)) {
+ return input.replace(/^\[|\]$/g, '');
+ }
+ return input.replace(/\\/g, '');
+}
+
+function makeFormatFunction(format) {
+ var array = format.match(formattingTokens), i, length;
+
+ for (i = 0, length = array.length; i < length; i++) {
+ if (formatTokenFunctions[array[i]]) {
+ array[i] = formatTokenFunctions[array[i]];
+ } else {
+ array[i] = removeFormattingTokens(array[i]);
+ }
+ }
+
+ return function (mom) {
+ var output = '', i;
+ for (i = 0; i < length; i++) {
+ output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+ }
+ return output;
+ };
+}
+
+// format date using native date object
+function formatMoment(m, format) {
+ if (!m.isValid()) {
+ return m.localeData().invalidDate();
+ }
+
+ format = expandFormat(format, m.localeData());
+ formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+ return formatFunctions[format](m);
+}
+
+function expandFormat(format, locale) {
+ var i = 5;
+
+ function replaceLongDateFormatTokens(input) {
+ return locale.longDateFormat(input) || input;
+ }
+
+ localFormattingTokens.lastIndex = 0;
+ while (i >= 0 && localFormattingTokens.test(format)) {
+ format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+ localFormattingTokens.lastIndex = 0;
+ i -= 1;
+ }
+
+ return format;
+}
+
+var match1 = /\d/; // 0 - 9
+var match2 = /\d\d/; // 00 - 99
+var match3 = /\d{3}/; // 000 - 999
+var match4 = /\d{4}/; // 0000 - 9999
+var match6 = /[+-]?\d{6}/; // -999999 - 999999
+var match1to2 = /\d\d?/; // 0 - 99
+var match3to4 = /\d\d\d\d?/; // 999 - 9999
+var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
+var match1to3 = /\d{1,3}/; // 0 - 999
+var match1to4 = /\d{1,4}/; // 0 - 9999
+var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
+
+var matchUnsigned = /\d+/; // 0 - inf
+var matchSigned = /[+-]?\d+/; // -inf - inf
+
+var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+
+var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+// any word (or two) characters or numbers including two/three word month in arabic.
+// includes scottish gaelic two word and hyphenated months
+var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
+
+var regexes = {};
+
+function addRegexToken (token, regex, strictRegex) {
+ regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+ return (isStrict && strictRegex) ? strictRegex : regex;
+ };
+}
+
+function getParseRegexForToken (token, config) {
+ if (!hasOwnProp(regexes, token)) {
+ return new RegExp(unescapeFormat(token));
+ }
+
+ return regexes[token](config._strict, config._locale);
+}
+
+// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+function unescapeFormat(s) {
+ return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return p1 || p2 || p3 || p4;
+ }));
+}
+
+function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+}
+
+var tokens = {};
+
+function addParseToken (token, callback) {
+ var i, func = callback;
+ if (typeof token === 'string') {
+ token = [token];
+ }
+ if (isNumber(callback)) {
+ func = function (input, array) {
+ array[callback] = toInt(input);
+ };
+ }
+ for (i = 0; i < token.length; i++) {
+ tokens[token[i]] = func;
+ }
+}
+
+function addWeekParseToken (token, callback) {
+ addParseToken(token, function (input, array, config, token) {
+ config._w = config._w || {};
+ callback(input, config._w, config, token);
+ });
+}
+
+function addTimeToArrayFromToken(token, input, config) {
+ if (input != null && hasOwnProp(tokens, token)) {
+ tokens[token](input, config._a, config, token);
+ }
+}
+
+var YEAR = 0;
+var MONTH = 1;
+var DATE = 2;
+var HOUR = 3;
+var MINUTE = 4;
+var SECOND = 5;
+var MILLISECOND = 6;
+var WEEK = 7;
+var WEEKDAY = 8;
+
+var indexOf;
+
+if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+} else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+var indexOf$1 = indexOf;
+
+function daysInMonth(year, month) {
+ return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+}
+
+// FORMATTING
+
+addFormatToken('M', ['MM', 2], 'Mo', function () {
+ return this.month() + 1;
+});
+
+addFormatToken('MMM', 0, 0, function (format) {
+ return this.localeData().monthsShort(this, format);
+});
+
+addFormatToken('MMMM', 0, 0, function (format) {
+ return this.localeData().months(this, format);
+});
+
+// ALIASES
+
+addUnitAlias('month', 'M');
+
+// PRIORITY
+
+addUnitPriority('month', 8);
+
+// PARSING
+
+addRegexToken('M', match1to2);
+addRegexToken('MM', match1to2, match2);
+addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+});
+addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+});
+
+addParseToken(['M', 'MM'], function (input, array) {
+ array[MONTH] = toInt(input) - 1;
+});
+
+addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+ var month = config._locale.monthsParse(input, token, config._strict);
+ // if we didn't find a month name, mark the date as invalid.
+ if (month != null) {
+ array[MONTH] = month;
+ } else {
+ getParsingFlags(config).invalidMonth = input;
+ }
+});
+
+// LOCALES
+
+var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
+var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+function localeMonths (m, format) {
+ if (!m) {
+ return this._months;
+ }
+ return isArray(this._months) ? this._months[m.month()] :
+ this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+function localeMonthsShort (m, format) {
+ if (!m) {
+ return this._monthsShort;
+ }
+ return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+ this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+function handleStrictParse(monthName, format, strict) {
+ var i, ii, mom, llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf$1.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf$1.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+}
+
+function localeMonthsParse (monthName, format, strict) {
+ var i, mom, regex;
+
+ if (this._monthsParseExact) {
+ return handleStrictParse.call(this, monthName, format, strict);
+ }
+
+ if (!this._monthsParse) {
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ }
+
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+ this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+ }
+ if (!strict && !this._monthsParse[i]) {
+ regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+ this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
+ return i;
+ }
+ }
+}
+
+// MOMENTS
+
+function setMonth (mom, value) {
+ var dayOfMonth;
+
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
+
+ if (typeof value === 'string') {
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (!isNumber(value)) {
+ return mom;
+ }
+ }
+ }
+
+ dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+ return mom;
+}
+
+function getSetMonth (value) {
+ if (value != null) {
+ setMonth(this, value);
+ hooks.updateOffset(this, true);
+ return this;
+ } else {
+ return get(this, 'Month');
+ }
+}
+
+function getDaysInMonth () {
+ return daysInMonth(this.year(), this.month());
+}
+
+var defaultMonthsShortRegex = matchWord;
+function monthsShortRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict ?
+ this._monthsShortStrictRegex : this._monthsShortRegex;
+ }
+}
+
+var defaultMonthsRegex = matchWord;
+function monthsRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict ?
+ this._monthsStrictRegex : this._monthsRegex;
+ }
+}
+
+function computeMonthsParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ }
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+}
+
+// FORMATTING
+
+addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? '' + y : '+' + y;
+});
+
+addFormatToken(0, ['YY', 2], 0, function () {
+ return this.year() % 100;
+});
+
+addFormatToken(0, ['YYYY', 4], 0, 'year');
+addFormatToken(0, ['YYYYY', 5], 0, 'year');
+addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+// ALIASES
+
+addUnitAlias('year', 'y');
+
+// PRIORITIES
+
+addUnitPriority('year', 1);
+
+// PARSING
+
+addRegexToken('Y', matchSigned);
+addRegexToken('YY', match1to2, match2);
+addRegexToken('YYYY', match1to4, match4);
+addRegexToken('YYYYY', match1to6, match6);
+addRegexToken('YYYYYY', match1to6, match6);
+
+addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+addParseToken('YYYY', function (input, array) {
+ array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+});
+addParseToken('YY', function (input, array) {
+ array[YEAR] = hooks.parseTwoDigitYear(input);
+});
+addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+});
+
+// HELPERS
+
+function daysInYear(year) {
+ return isLeapYear(year) ? 366 : 365;
+}
+
+function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+}
+
+// HOOKS
+
+hooks.parseTwoDigitYear = function (input) {
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+};
+
+// MOMENTS
+
+var getSetYear = makeGetSet('FullYear', true);
+
+function getIsLeapYear () {
+ return isLeapYear(this.year());
+}
+
+function createDate (y, m, d, h, M, s, ms) {
+ //can't just apply() to create a date:
+ //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ //the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ return date;
+}
+
+function createUTCDate (y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+
+ //the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+}
+
+// start-of-first-week - start-of-year
+function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+ return -fwdlw + fwd - 1;
+}
+
+//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear, resDayOfYear;
+
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
+
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear
+ };
+}
+
+function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek, resYear;
+
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
+
+ return {
+ week: resWeek,
+ year: resYear
+ };
+}
+
+function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+}
+
+// FORMATTING
+
+addFormatToken('w', ['ww', 2], 'wo', 'week');
+addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+// ALIASES
+
+addUnitAlias('week', 'w');
+addUnitAlias('isoWeek', 'W');
+
+// PRIORITIES
+
+addUnitPriority('week', 5);
+addUnitPriority('isoWeek', 5);
+
+// PARSING
+
+addRegexToken('w', match1to2);
+addRegexToken('ww', match1to2, match2);
+addRegexToken('W', match1to2);
+addRegexToken('WW', match1to2, match2);
+
+addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+ week[token.substr(0, 1)] = toInt(input);
+});
+
+// HELPERS
+
+// LOCALES
+
+function localeWeek (mom) {
+ return weekOfYear(mom, this._week.dow, this._week.doy).week;
+}
+
+var defaultLocaleWeek = {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+};
+
+function localeFirstDayOfWeek () {
+ return this._week.dow;
+}
+
+function localeFirstDayOfYear () {
+ return this._week.doy;
+}
+
+// MOMENTS
+
+function getSetWeek (input) {
+ var week = this.localeData().week(this);
+ return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+function getSetISOWeek (input) {
+ var week = weekOfYear(this, 1, 4).week;
+ return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+// FORMATTING
+
+addFormatToken('d', 0, 'do', 'day');
+
+addFormatToken('dd', 0, 0, function (format) {
+ return this.localeData().weekdaysMin(this, format);
+});
+
+addFormatToken('ddd', 0, 0, function (format) {
+ return this.localeData().weekdaysShort(this, format);
+});
+
+addFormatToken('dddd', 0, 0, function (format) {
+ return this.localeData().weekdays(this, format);
+});
+
+addFormatToken('e', 0, 0, 'weekday');
+addFormatToken('E', 0, 0, 'isoWeekday');
+
+// ALIASES
+
+addUnitAlias('day', 'd');
+addUnitAlias('weekday', 'e');
+addUnitAlias('isoWeekday', 'E');
+
+// PRIORITY
+addUnitPriority('day', 11);
+addUnitPriority('weekday', 11);
+addUnitPriority('isoWeekday', 11);
+
+// PARSING
+
+addRegexToken('d', match1to2);
+addRegexToken('e', match1to2);
+addRegexToken('E', match1to2);
+addRegexToken('dd', function (isStrict, locale) {
+ return locale.weekdaysMinRegex(isStrict);
+});
+addRegexToken('ddd', function (isStrict, locale) {
+ return locale.weekdaysShortRegex(isStrict);
+});
+addRegexToken('dddd', function (isStrict, locale) {
+ return locale.weekdaysRegex(isStrict);
+});
+
+addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+ var weekday = config._locale.weekdaysParse(input, token, config._strict);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (weekday != null) {
+ week.d = weekday;
+ } else {
+ getParsingFlags(config).invalidWeekday = input;
+ }
+});
+
+addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+ week[token] = toInt(input);
+});
+
+// HELPERS
+
+function parseWeekday(input, locale) {
+ if (typeof input !== 'string') {
+ return input;
+ }
+
+ if (!isNaN(input)) {
+ return parseInt(input, 10);
+ }
+
+ input = locale.weekdaysParse(input);
+ if (typeof input === 'number') {
+ return input;
+ }
+
+ return null;
+}
+
+function parseIsoWeekday(input, locale) {
+ if (typeof input === 'string') {
+ return locale.weekdaysParse(input) % 7 || 7;
+ }
+ return isNaN(input) ? null : input;
+}
+
+// LOCALES
+
+var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+function localeWeekdays (m, format) {
+ if (!m) {
+ return this._weekdays;
+ }
+ return isArray(this._weekdays) ? this._weekdays[m.day()] :
+ this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+}
+
+var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+function localeWeekdaysShort (m) {
+ return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+}
+
+var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+function localeWeekdaysMin (m) {
+ return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+}
+
+function handleStrictParse$1(weekdayName, format, strict) {
+ var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
+
+ for (i = 0; i < 7; ++i) {
+ mom = createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+}
+
+function localeWeekdaysParse (weekdayName, format, strict) {
+ var i, mom, regex;
+
+ if (this._weekdaysParseExact) {
+ return handleStrictParse$1.call(this, weekdayName, format, strict);
+ }
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+
+ mom = createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+ this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+ this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+ }
+ if (!this._weekdaysParse[i]) {
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
+}
+
+// MOMENTS
+
+function getSetDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+}
+
+function getSetLocaleDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+}
+
+function getSetISODayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+}
+
+var defaultWeekdaysRegex = matchWord;
+function weekdaysRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict ?
+ this._weekdaysStrictRegex : this._weekdaysRegex;
+ }
+}
+
+var defaultWeekdaysShortRegex = matchWord;
+function weekdaysShortRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict ?
+ this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+ }
+}
+
+var defaultWeekdaysMinRegex = matchWord;
+function weekdaysMinRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict ?
+ this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+ }
+}
+
+
+function computeWeekdaysParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom, minp, shortp, longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, 1]).day(i);
+ minp = this.weekdaysMin(mom, '');
+ shortp = this.weekdaysShort(mom, '');
+ longp = this.weekdays(mom, '');
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 7; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
+
+ this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+}
+
+// FORMATTING
+
+function hFormat() {
+ return this.hours() % 12 || 12;
+}
+
+function kFormat() {
+ return this.hours() || 24;
+}
+
+addFormatToken('H', ['HH', 2], 0, 'hour');
+addFormatToken('h', ['hh', 2], 0, hFormat);
+addFormatToken('k', ['kk', 2], 0, kFormat);
+
+addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('hmmss', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+});
+
+addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('Hmmss', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+});
+
+function meridiem (token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+ });
+}
+
+meridiem('a', true);
+meridiem('A', false);
+
+// ALIASES
+
+addUnitAlias('hour', 'h');
+
+// PRIORITY
+addUnitPriority('hour', 13);
+
+// PARSING
+
+function matchMeridiem (isStrict, locale) {
+ return locale._meridiemParse;
+}
+
+addRegexToken('a', matchMeridiem);
+addRegexToken('A', matchMeridiem);
+addRegexToken('H', match1to2);
+addRegexToken('h', match1to2);
+addRegexToken('HH', match1to2, match2);
+addRegexToken('hh', match1to2, match2);
+
+addRegexToken('hmm', match3to4);
+addRegexToken('hmmss', match5to6);
+addRegexToken('Hmm', match3to4);
+addRegexToken('Hmmss', match5to6);
+
+addParseToken(['H', 'HH'], HOUR);
+addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+});
+addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+});
+addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+});
+
+// LOCALES
+
+function localeIsPM (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+}
+
+var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+function localeMeridiem (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+}
+
+
+// MOMENTS
+
+// Setting the hour should keep the time, because the user explicitly
+// specified which hour he wants. So trying to maintain the same hour (in
+// a new timezone) makes sense. Adding/subtracting hours does not follow
+// this rule.
+var getSetHour = makeGetSet('Hours', true);
+
+// months
+// week
+// weekdays
+// meridiem
+var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ ordinalParse: defaultOrdinalParse,
+ relativeTime: defaultRelativeTime,
+
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
+
+ week: defaultLocaleWeek,
+
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
+
+ meridiemParse: defaultLocaleMeridiemParse
+};
+
+// internal storage for locale config files
+var locales = {};
+var localeFamilies = {};
+var globalLocale;
+
+function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+}
+
+// pick the locale from the array
+// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return null;
+}
+
+function loadLocale(name) {
+ var oldLocale = null;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (!locales[name] && (typeof module !== 'undefined') &&
+ module && module.exports) {
+ try {
+ oldLocale = globalLocale._abbr;
+ require('./locale/' + name);
+ // because defineLocale currently also sets the global locale, we
+ // want to undo that for lazy loaded locales
+ getSetGlobalLocale(oldLocale);
+ } catch (e) { }
+ }
+ return locales[name];
+}
+
+// This function will load locale and then set the global locale. If
+// no arguments are passed in, it will simply return the current global
+// locale key.
+function getSetGlobalLocale (key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = getLocale(key);
+ }
+ else {
+ data = defineLocale(key, values);
+ }
+
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ }
+ }
+
+ return globalLocale._abbr;
+}
+
+function defineLocale (name, config) {
+ if (config !== null) {
+ var parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple('defineLocaleOverride',
+ 'use moment.updateLocale(localeName, config) to change ' +
+ 'an existing locale. moment.defineLocale(localeName, ' +
+ 'config) should only be used for creating a new locale ' +
+ 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ if (!localeFamilies[config.parentLocale]) {
+ localeFamilies[config.parentLocale] = [];
+ }
+ localeFamilies[config.parentLocale].push({
+ name: name,
+ config: config
+ });
+ return null;
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+ if (localeFamilies[name]) {
+ localeFamilies[name].forEach(function (x) {
+ defineLocale(x.name, x.config);
+ });
+ }
+
+ // backwards compat for now: also set the locale
+ // make sure we set the locale AFTER all child locales have been
+ // created, so we won't end up with the child locale set.
+ getSetGlobalLocale(name);
+
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+}
+
+function updateLocale(name, config) {
+ if (config != null) {
+ var locale, parentConfig = baseConfig;
+ // MERGE
+ if (locales[name] != null) {
+ parentConfig = locales[name]._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+
+ // backwards compat for now: also set the locale
+ getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+}
+
+// returns locale data
+function getLocale (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return globalLocale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
+}
+
+function listLocales() {
+ return keys$1(locales);
+}
+
+function checkOverflow (m) {
+ var overflow;
+ var a = m._a;
+
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
+ a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+ a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+ a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
+ a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
+ a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
+
+ getParsingFlags(m).overflow = overflow;
+ }
+
+ return m;
+}
+
+// iso 8601 regex
+// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+var isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ // YYYYMM is NOT allowed by the standard
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/]
+];
+
+// iso time formats and regexes
+var isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/]
+];
+
+var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+// date from iso format
+function configFromISO(config) {
+ var i, l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime, dateFormat, timeFormat, tzFormat;
+
+ if (match) {
+ getParsingFlags(config).iso = true;
+
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+}
+
+// date from iso format or fallback
+function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
+
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ hooks.createFromInputFallback(config);
+ }
+}
+
+hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non ISO date formats are ' +
+ 'discouraged and will be removed in an upcoming major release. Please refer to ' +
+ 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+);
+
+// Pick the first defined of two or three arguments.
+function defaults(a, b, c) {
+ if (a != null) {
+ return a;
+ }
+ if (b != null) {
+ return b;
+ }
+ return c;
+}
+
+function currentDateArray(config) {
+ // hooks is actually the exported moment object
+ var nowValue = new Date(hooks.now());
+ if (config._useUTC) {
+ return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+ }
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+}
+
+// convert an array to a date.
+// the array should mirror the parameters below
+// note: all values past the year are optional and will default to the lowest possible value.
+// [year, month, day , hour, minute, second, millisecond]
+function configFromArray (config) {
+ var i, date, input = [], currentDate, yearToUse;
+
+ if (config._d) {
+ return;
+ }
+
+ currentDate = currentDateArray(config);
+
+ //compute day of the year from weeks and weekdays
+ if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+ dayOfYearFromWeekInfo(config);
+ }
+
+ //if the day of the year is set, figure out what it is
+ if (config._dayOfYear) {
+ yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+ if (config._dayOfYear > daysInYear(yearToUse)) {
+ getParsingFlags(config)._overflowDayOfYear = true;
+ }
+
+ date = createUTCDate(yearToUse, 0, config._dayOfYear);
+ config._a[MONTH] = date.getUTCMonth();
+ config._a[DATE] = date.getUTCDate();
+ }
+
+ // Default to current date.
+ // * if no year, month, day of month are given, default to today
+ // * if day of month is given, default month and year
+ // * if month is given, default only year
+ // * if year is given, don't default anything
+ for (i = 0; i < 3 && config._a[i] == null; ++i) {
+ config._a[i] = input[i] = currentDate[i];
+ }
+
+ // Zero out whatever was not defaulted, including time
+ for (; i < 7; i++) {
+ config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+ }
+
+ // Check for 24:00:00.000
+ if (config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
+
+ config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+ // Apply timezone offset from input. The actual utcOffset can be changed
+ // with parseZone.
+ if (config._tzm != null) {
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+ }
+
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
+}
+
+function dayOfYearFromWeekInfo(config) {
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
+
+ w = config._w;
+ if (w.GG != null || w.W != null || w.E != null) {
+ dow = 1;
+ doy = 4;
+
+ // TODO: We need to take the current isoWeekYear, but that depends on
+ // how we interpret now (local, utc, fixed offset). So create
+ // a now version of current config (take local/utc/offset flags, and
+ // create now).
+ weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
+ week = defaults(w.W, 1);
+ weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
+ } else {
+ dow = config._locale._week.dow;
+ doy = config._locale._week.doy;
+
+ var curWeek = weekOfYear(createLocal(), dow, doy);
+
+ weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+ // Default to current week.
+ week = defaults(w.w, curWeek.week);
+
+ if (w.d != null) {
+ // weekday -- low day numbers are considered next week
+ weekday = w.d;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
+ }
+ } else if (w.e != null) {
+ // local weekday -- counting starts from begining of week
+ weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
+ } else {
+ // default to begining of week
+ weekday = dow;
+ }
+ }
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
+}
+
+// constant that refers to the ISO standard
+hooks.ISO_8601 = function () {};
+
+// date from string and format string
+function configFromStringAndFormat(config) {
+ // TODO: Move this to another part of the creation flow to prevent circular deps
+ if (config._f === hooks.ISO_8601) {
+ configFromISO(config);
+ return;
+ }
+
+ config._a = [];
+ getParsingFlags(config).empty = true;
+
+ // This array is used to make a Date, either with `new Date` or `Date.UTC`
+ var string = '' + config._i,
+ i, parsedInput, tokens, token, skipped,
+ stringLength = string.length,
+ totalParsedInputLength = 0;
+
+ tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ // console.log('token', token, 'parsedInput', parsedInput,
+ // 'regex', getParseRegexForToken(token, config));
+ if (parsedInput) {
+ skipped = string.substr(0, string.indexOf(parsedInput));
+ if (skipped.length > 0) {
+ getParsingFlags(config).unusedInput.push(skipped);
+ }
+ string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+ totalParsedInputLength += parsedInput.length;
+ }
+ // don't parse if it's not a known token
+ if (formatTokenFunctions[token]) {
+ if (parsedInput) {
+ getParsingFlags(config).empty = false;
+ }
+ else {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ addTimeToArrayFromToken(token, parsedInput, config);
+ }
+ else if (config._strict && !parsedInput) {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ }
+
+ // add remaining unparsed input length to the string
+ getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+ if (string.length > 0) {
+ getParsingFlags(config).unusedInput.push(string);
+ }
+
+ // clear _12h flag if hour is <= 12
+ if (config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0) {
+ getParsingFlags(config).bigHour = undefined;
+ }
+
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
+ // handle meridiem
+ config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+ configFromArray(config);
+ checkOverflow(config);
+}
+
+
+function meridiemFixWrap (locale, hour, meridiem) {
+ var isPm;
+
+ if (meridiem == null) {
+ // nothing to do
+ return hour;
+ }
+ if (locale.meridiemHour != null) {
+ return locale.meridiemHour(hour, meridiem);
+ } else if (locale.isPM != null) {
+ // Fallback
+ isPm = locale.isPM(meridiem);
+ if (isPm && hour < 12) {
+ hour += 12;
+ }
+ if (!isPm && hour === 12) {
+ hour = 0;
+ }
+ return hour;
+ } else {
+ // this is not supposed to happen
+ return hour;
+ }
+}
+
+// date from string and array of format strings
+function configFromStringAndArray(config) {
+ var tempConfig,
+ bestMoment,
+
+ scoreToBeat,
+ i,
+ currentScore;
+
+ if (config._f.length === 0) {
+ getParsingFlags(config).invalidFormat = true;
+ config._d = new Date(NaN);
+ return;
+ }
+
+ for (i = 0; i < config._f.length; i++) {
+ currentScore = 0;
+ tempConfig = copyConfig({}, config);
+ if (config._useUTC != null) {
+ tempConfig._useUTC = config._useUTC;
+ }
+ tempConfig._f = config._f[i];
+ configFromStringAndFormat(tempConfig);
+
+ if (!isValid(tempConfig)) {
+ continue;
+ }
+
+ // if there is any input that was not parsed add a penalty for that format
+ currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+ //or tokens
+ currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+ getParsingFlags(tempConfig).score = currentScore;
+
+ if (scoreToBeat == null || currentScore < scoreToBeat) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ }
+ }
+
+ extend(config, bestMoment || tempConfig);
+}
+
+function configFromObject(config) {
+ if (config._d) {
+ return;
+ }
+
+ var i = normalizeObjectUnits(config._i);
+ config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+ return obj && parseInt(obj, 10);
+ });
+
+ configFromArray(config);
+}
+
+function createFromConfig (config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+}
+
+function prepareConfig (config) {
+ var input = config._i,
+ format = config._f;
+
+ config._locale = config._locale || getLocale(config._l);
+
+ if (input === null || (format === undefined && input === '')) {
+ return createInvalid({nullInput: true});
+ }
+
+ if (typeof input === 'string') {
+ config._i = input = config._locale.preparse(input);
+ }
+
+ if (isMoment(input)) {
+ return new Moment(checkOverflow(input));
+ } else if (isDate(input)) {
+ config._d = input;
+ } else if (isArray(format)) {
+ configFromStringAndArray(config);
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
+ configFromInput(config);
+ }
+
+ if (!isValid(config)) {
+ config._d = null;
+ }
+
+ return config;
+}
+
+function configFromInput(config) {
+ var input = config._i;
+ if (input === undefined) {
+ config._d = new Date(hooks.now());
+ } else if (isDate(input)) {
+ config._d = new Date(input.valueOf());
+ } else if (typeof input === 'string') {
+ configFromString(config);
+ } else if (isArray(input)) {
+ config._a = map(input.slice(0), function (obj) {
+ return parseInt(obj, 10);
+ });
+ configFromArray(config);
+ } else if (typeof(input) === 'object') {
+ configFromObject(config);
+ } else if (isNumber(input)) {
+ // from milliseconds
+ config._d = new Date(input);
+ } else {
+ hooks.createFromInputFallback(config);
+ }
+}
+
+function createLocalOrUTC (input, format, locale, strict, isUTC) {
+ var c = {};
+
+ if (locale === true || locale === false) {
+ strict = locale;
+ locale = undefined;
+ }
+
+ if ((isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)) {
+ input = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c._isAMomentObject = true;
+ c._useUTC = c._isUTC = isUTC;
+ c._l = locale;
+ c._i = input;
+ c._f = format;
+ c._strict = strict;
+
+ return createFromConfig(c);
+}
+
+function createLocal (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, false);
+}
+
+var prototypeMin = deprecate(
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+);
+
+var prototypeMax = deprecate(
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+);
+
+// Pick a moment m from moments so that m[fn](other) is true for all
+// other. This relies on the function fn to be transitive.
+//
+// moments should either be an array of moment objects or an array, whose
+// first element is an array of moment objects.
+function pickBy(fn, moments) {
+ var res, i;
+ if (moments.length === 1 && isArray(moments[0])) {
+ moments = moments[0];
+ }
+ if (!moments.length) {
+ return createLocal();
+ }
+ res = moments[0];
+ for (i = 1; i < moments.length; ++i) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
+ res = moments[i];
+ }
+ }
+ return res;
+}
+
+// TODO: Use [].sort instead?
+function min () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isBefore', args);
+}
+
+function max () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isAfter', args);
+}
+
+var now = function () {
+ return Date.now ? Date.now() : +(new Date());
+};
+
+function Duration (duration) {
+ var normalizedInput = normalizeObjectUnits(duration),
+ years = normalizedInput.year || 0,
+ quarters = normalizedInput.quarter || 0,
+ months = normalizedInput.month || 0,
+ weeks = normalizedInput.week || 0,
+ days = normalizedInput.day || 0,
+ hours = normalizedInput.hour || 0,
+ minutes = normalizedInput.minute || 0,
+ seconds = normalizedInput.second || 0,
+ milliseconds = normalizedInput.millisecond || 0;
+
+ // representation for dateAddRemove
+ this._milliseconds = +milliseconds +
+ seconds * 1e3 + // 1000
+ minutes * 6e4 + // 1000 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+ // Because of dateAddRemove treats 24 hours as different from a
+ // day when working around DST, we need to store them separately
+ this._days = +days +
+ weeks * 7;
+ // It is impossible translate months into days without knowing
+ // which months you are are talking about, so we have to store
+ // it separately.
+ this._months = +months +
+ quarters * 3 +
+ years * 12;
+
+ this._data = {};
+
+ this._locale = getLocale();
+
+ this._bubble();
+}
+
+function isDuration (obj) {
+ return obj instanceof Duration;
+}
+
+function absRound (number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
+}
+
+// FORMATTING
+
+function offset (token, separator) {
+ addFormatToken(token, 0, 0, function () {
+ var offset = this.utcOffset();
+ var sign = '+';
+ if (offset < 0) {
+ offset = -offset;
+ sign = '-';
+ }
+ return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+ });
+}
+
+offset('Z', ':');
+offset('ZZ', '');
+
+// PARSING
+
+addRegexToken('Z', matchShortOffset);
+addRegexToken('ZZ', matchShortOffset);
+addParseToken(['Z', 'ZZ'], function (input, array, config) {
+ config._useUTC = true;
+ config._tzm = offsetFromString(matchShortOffset, input);
+});
+
+// HELPERS
+
+// timezone chunker
+// '+10:00' > ['10', '00']
+// '-1530' > ['-15', '30']
+var chunkOffset = /([\+\-]|\d\d)/gi;
+
+function offsetFromString(matcher, string) {
+ var matches = (string || '').match(matcher);
+
+ if (matches === null) {
+ return null;
+ }
+
+ var chunk = matches[matches.length - 1] || [];
+ var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+ var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+ return minutes === 0 ?
+ 0 :
+ parts[0] === '+' ? minutes : -minutes;
+}
+
+// Return a moment from input, that is local/utc/zone equivalent to model.
+function cloneWithOffset(input, model) {
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(res._d.valueOf() + diff);
+ hooks.updateOffset(res, false);
+ return res;
+ } else {
+ return createLocal(input).local();
+ }
+}
+
+function getDateOffset (m) {
+ // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+ // https://github.com/moment/moment/pull/1871
+ return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+}
+
+// HOOKS
+
+// This function will be called whenever a moment is mutated.
+// It is intended to keep the offset in sync with the timezone.
+hooks.updateOffset = function () {};
+
+// MOMENTS
+
+// keepLocalTime = true means only change the timezone, without
+// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+// +0200, so we adjust the time as needed, to be valid.
+//
+// Keeping the time actually adds/subtracts (one hour)
+// from the actual represented time. That is why we call updateOffset
+// a second time. In case it wants us to change the offset again
+// _changeInProgress == true case, then we have to adjust, because
+// there is no such time in the given timezone.
+function getSetOffset (input, keepLocalTime) {
+ var offset = this._offset || 0,
+ localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ if (input != null) {
+ if (typeof input === 'string') {
+ input = offsetFromString(matchShortOffset, input);
+ if (input === null) {
+ return this;
+ }
+ } else if (Math.abs(input) < 16) {
+ input = input * 60;
+ }
+ if (!this._isUTC && keepLocalTime) {
+ localAdjust = getDateOffset(this);
+ }
+ this._offset = input;
+ this._isUTC = true;
+ if (localAdjust != null) {
+ this.add(localAdjust, 'm');
+ }
+ if (offset !== input) {
+ if (!keepLocalTime || this._changeInProgress) {
+ addSubtract(this, createDuration(input - offset, 'm'), 1, false);
+ } else if (!this._changeInProgress) {
+ this._changeInProgress = true;
+ hooks.updateOffset(this, true);
+ this._changeInProgress = null;
+ }
+ }
+ return this;
+ } else {
+ return this._isUTC ? offset : getDateOffset(this);
+ }
+}
+
+function getSetZone (input, keepLocalTime) {
+ if (input != null) {
+ if (typeof input !== 'string') {
+ input = -input;
+ }
+
+ this.utcOffset(input, keepLocalTime);
+
+ return this;
+ } else {
+ return -this.utcOffset();
+ }
+}
+
+function setOffsetToUTC (keepLocalTime) {
+ return this.utcOffset(0, keepLocalTime);
+}
+
+function setOffsetToLocal (keepLocalTime) {
+ if (this._isUTC) {
+ this.utcOffset(0, keepLocalTime);
+ this._isUTC = false;
+
+ if (keepLocalTime) {
+ this.subtract(getDateOffset(this), 'm');
+ }
+ }
+ return this;
+}
+
+function setOffsetToParsedOffset () {
+ if (this._tzm != null) {
+ this.utcOffset(this._tzm);
+ } else if (typeof this._i === 'string') {
+ var tZone = offsetFromString(matchOffset, this._i);
+ if (tZone != null) {
+ this.utcOffset(tZone);
+ }
+ else {
+ this.utcOffset(0, true);
+ }
+ }
+ return this;
+}
+
+function hasAlignedHourOffset (input) {
+ if (!this.isValid()) {
+ return false;
+ }
+ input = input ? createLocal(input).utcOffset() : 0;
+
+ return (this.utcOffset() - input) % 60 === 0;
+}
+
+function isDaylightSavingTime () {
+ return (
+ this.utcOffset() > this.clone().month(0).utcOffset() ||
+ this.utcOffset() > this.clone().month(5).utcOffset()
+ );
+}
+
+function isDaylightSavingTimeShifted () {
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
+ }
+
+ var c = {};
+
+ copyConfig(c, this);
+ c = prepareConfig(c);
+
+ if (c._a) {
+ var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+ this._isDSTShifted = this.isValid() &&
+ compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
+
+ return this._isDSTShifted;
+}
+
+function isLocal () {
+ return this.isValid() ? !this._isUTC : false;
+}
+
+function isUtcOffset () {
+ return this.isValid() ? this._isUTC : false;
+}
+
+function isUtc () {
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
+}
+
+// ASP.NET json date format regex
+var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
+
+// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+// and further modified to allow for strings containing both week and day
+var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
+
+function createDuration (input, key) {
+ var duration = input,
+ // matching against regexp is expensive, do it on demand
+ match = null,
+ sign,
+ ret,
+ diffRes;
+
+ if (isDuration(input)) {
+ duration = {
+ ms : input._milliseconds,
+ d : input._days,
+ M : input._months
+ };
+ } else if (isNumber(input)) {
+ duration = {};
+ if (key) {
+ duration[key] = input;
+ } else {
+ duration.milliseconds = input;
+ }
+ } else if (!!(match = aspNetRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : 0,
+ d : toInt(match[DATE]) * sign,
+ h : toInt(match[HOUR]) * sign,
+ m : toInt(match[MINUTE]) * sign,
+ s : toInt(match[SECOND]) * sign,
+ ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
+ };
+ } else if (!!(match = isoRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : parseIso(match[2], sign),
+ M : parseIso(match[3], sign),
+ w : parseIso(match[4], sign),
+ d : parseIso(match[5], sign),
+ h : parseIso(match[6], sign),
+ m : parseIso(match[7], sign),
+ s : parseIso(match[8], sign)
+ };
+ } else if (duration == null) {// checks for null or undefined
+ duration = {};
+ } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+ diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
+
+ duration = {};
+ duration.ms = diffRes.milliseconds;
+ duration.M = diffRes.months;
+ }
+
+ ret = new Duration(duration);
+
+ if (isDuration(input) && hasOwnProp(input, '_locale')) {
+ ret._locale = input._locale;
+ }
+
+ return ret;
+}
+
+createDuration.fn = Duration.prototype;
+
+function parseIso (inp, sign) {
+ // We'd normally use ~~inp for this, but unfortunately it also
+ // converts floats to ints.
+ // inp may be undefined, so careful calling replace on it.
+ var res = inp && parseFloat(inp.replace(',', '.'));
+ // apply sign while we're at it
+ return (isNaN(res) ? 0 : res) * sign;
+}
+
+function positiveMomentsDifference(base, other) {
+ var res = {milliseconds: 0, months: 0};
+
+ res.months = other.month() - base.month() +
+ (other.year() - base.year()) * 12;
+ if (base.clone().add(res.months, 'M').isAfter(other)) {
+ --res.months;
+ }
+
+ res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+ return res;
+}
+
+function momentsDifference(base, other) {
+ var res;
+ if (!(base.isValid() && other.isValid())) {
+ return {milliseconds: 0, months: 0};
+ }
+
+ other = cloneWithOffset(other, base);
+ if (base.isBefore(other)) {
+ res = positiveMomentsDifference(base, other);
+ } else {
+ res = positiveMomentsDifference(other, base);
+ res.milliseconds = -res.milliseconds;
+ res.months = -res.months;
+ }
+
+ return res;
+}
+
+// TODO: remove 'name' arg after deprecation is removed
+function createAdder(direction, name) {
+ return function (val, period) {
+ var dur, tmp;
+ //invert the arguments, but complain about it
+ if (period !== null && !isNaN(+period)) {
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+ tmp = val; val = period; period = tmp;
+ }
+
+ val = typeof val === 'string' ? +val : val;
+ dur = createDuration(val, period);
+ addSubtract(this, dur, direction);
+ return this;
+ };
+}
+
+function addSubtract (mom, duration, isAdding, updateOffset) {
+ var milliseconds = duration._milliseconds,
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
+ }
+
+ updateOffset = updateOffset == null ? true : updateOffset;
+
+ if (milliseconds) {
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+ }
+ if (days) {
+ set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+ }
+ if (months) {
+ setMonth(mom, get(mom, 'Month') + months * isAdding);
+ }
+ if (updateOffset) {
+ hooks.updateOffset(mom, days || months);
+ }
+}
+
+var add = createAdder(1, 'add');
+var subtract = createAdder(-1, 'subtract');
+
+function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6 ? 'sameElse' :
+ diff < -1 ? 'lastWeek' :
+ diff < 0 ? 'lastDay' :
+ diff < 1 ? 'sameDay' :
+ diff < 2 ? 'nextDay' :
+ diff < 7 ? 'nextWeek' : 'sameElse';
+}
+
+function calendar$1 (time, formats) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = hooks.calendarFormat(this, sod) || 'sameElse';
+
+ var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+ return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
+}
+
+function clone () {
+ return new Moment(this);
+}
+
+function isAfter (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() > localInput.valueOf();
+ } else {
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
+ }
+}
+
+function isBefore (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() < localInput.valueOf();
+ } else {
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
+ }
+}
+
+function isBetween (from, to, units, inclusivity) {
+ inclusivity = inclusivity || '()';
+ return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+ (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
+}
+
+function isSame (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(units || 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() === localInput.valueOf();
+ } else {
+ inputMs = localInput.valueOf();
+ return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+ }
+}
+
+function isSameOrAfter (input, units) {
+ return this.isSame(input, units) || this.isAfter(input,units);
+}
+
+function isSameOrBefore (input, units) {
+ return this.isSame(input, units) || this.isBefore(input,units);
+}
+
+function diff (input, units, asFloat) {
+ var that,
+ zoneDelta,
+ delta, output;
+
+ if (!this.isValid()) {
+ return NaN;
+ }
+
+ that = cloneWithOffset(input, this);
+
+ if (!that.isValid()) {
+ return NaN;
+ }
+
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+ units = normalizeUnits(units);
+
+ if (units === 'year' || units === 'month' || units === 'quarter') {
+ output = monthDiff(this, that);
+ if (units === 'quarter') {
+ output = output / 3;
+ } else if (units === 'year') {
+ output = output / 12;
+ }
+ } else {
+ delta = this - that;
+ output = units === 'second' ? delta / 1e3 : // 1000
+ units === 'minute' ? delta / 6e4 : // 1000 * 60
+ units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
+ units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+ units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+ delta;
+ }
+ return asFloat ? output : absFloor(output);
+}
+
+function monthDiff (a, b) {
+ // difference in months
+ var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+ // b is in (anchor - 1 month, anchor + 1 month)
+ anchor = a.clone().add(wholeMonthDiff, 'months'),
+ anchor2, adjust;
+
+ if (b - anchor < 0) {
+ anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor - anchor2);
+ } else {
+ anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor2 - anchor);
+ }
+
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
+}
+
+hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+function toString () {
+ return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+}
+
+function toISOString () {
+ var m = this.clone().utc();
+ if (0 < m.year() && m.year() <= 9999) {
+ if (isFunction(Date.prototype.toISOString)) {
+ // native implementation is ~50x faster, use it when we can
+ return this.toDate().toISOString();
+ } else {
+ return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+ } else {
+ return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+}
+
+/**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+function inspect () {
+ if (!this.isValid()) {
+ return 'moment.invalid(/* ' + this._i + ' */)';
+ }
+ var func = 'moment';
+ var zone = '';
+ if (!this.isLocal()) {
+ func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+ zone = 'Z';
+ }
+ var prefix = '[' + func + '("]';
+ var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
+ var datetime = '-MM-DD[T]HH:mm:ss.SSS';
+ var suffix = zone + '[")]';
+
+ return this.format(prefix + year + datetime + suffix);
+}
+
+function format (inputString) {
+ if (!inputString) {
+ inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
+ }
+ var output = formatMoment(this, inputString);
+ return this.localeData().postformat(output);
+}
+
+function from (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+}
+
+function fromNow (withoutSuffix) {
+ return this.from(createLocal(), withoutSuffix);
+}
+
+function to (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+}
+
+function toNow (withoutSuffix) {
+ return this.to(createLocal(), withoutSuffix);
+}
+
+// If passed a locale key, it will set the locale for this
+// instance. Otherwise, it will return the locale configuration
+// variables for this instance.
+function locale (key) {
+ var newLocaleData;
+
+ if (key === undefined) {
+ return this._locale._abbr;
+ } else {
+ newLocaleData = getLocale(key);
+ if (newLocaleData != null) {
+ this._locale = newLocaleData;
+ }
+ return this;
+ }
+}
+
+var lang = deprecate(
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+ function (key) {
+ if (key === undefined) {
+ return this.localeData();
+ } else {
+ return this.locale(key);
+ }
+ }
+);
+
+function localeData () {
+ return this._locale;
+}
+
+function startOf (units) {
+ units = normalizeUnits(units);
+ // the following switch intentionally omits break keywords
+ // to utilize falling through the cases.
+ switch (units) {
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ case 'date':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
+ }
+
+ // weeks are a special case
+ if (units === 'week') {
+ this.weekday(0);
+ }
+ if (units === 'isoWeek') {
+ this.isoWeekday(1);
+ }
+
+ // quarters are also special
+ if (units === 'quarter') {
+ this.month(Math.floor(this.month() / 3) * 3);
+ }
+
+ return this;
+}
+
+function endOf (units) {
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond') {
+ return this;
+ }
+
+ // 'date' is an alias for 'day', so it should be considered as such.
+ if (units === 'date') {
+ units = 'day';
+ }
+
+ return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+}
+
+function valueOf () {
+ return this._d.valueOf() - ((this._offset || 0) * 60000);
+}
+
+function unix () {
+ return Math.floor(this.valueOf() / 1000);
+}
+
+function toDate () {
+ return new Date(this.valueOf());
+}
+
+function toArray () {
+ var m = this;
+ return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+}
+
+function toObject () {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds()
+ };
+}
+
+function toJSON () {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
+}
+
+function isValid$1 () {
+ return isValid(this);
+}
+
+function parsingFlags () {
+ return extend({}, getParsingFlags(this));
+}
+
+function invalidAt () {
+ return getParsingFlags(this).overflow;
+}
+
+function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict
+ };
+}
+
+// FORMATTING
+
+addFormatToken(0, ['gg', 2], 0, function () {
+ return this.weekYear() % 100;
+});
+
+addFormatToken(0, ['GG', 2], 0, function () {
+ return this.isoWeekYear() % 100;
+});
+
+function addWeekYearFormatToken (token, getter) {
+ addFormatToken(0, [token, token.length], 0, getter);
+}
+
+addWeekYearFormatToken('gggg', 'weekYear');
+addWeekYearFormatToken('ggggg', 'weekYear');
+addWeekYearFormatToken('GGGG', 'isoWeekYear');
+addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+// ALIASES
+
+addUnitAlias('weekYear', 'gg');
+addUnitAlias('isoWeekYear', 'GG');
+
+// PRIORITY
+
+addUnitPriority('weekYear', 1);
+addUnitPriority('isoWeekYear', 1);
+
+
+// PARSING
+
+addRegexToken('G', matchSigned);
+addRegexToken('g', matchSigned);
+addRegexToken('GG', match1to2, match2);
+addRegexToken('gg', match1to2, match2);
+addRegexToken('GGGG', match1to4, match4);
+addRegexToken('gggg', match1to4, match4);
+addRegexToken('GGGGG', match1to6, match6);
+addRegexToken('ggggg', match1to6, match6);
+
+addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+ week[token.substr(0, 2)] = toInt(input);
+});
+
+addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+ week[token] = hooks.parseTwoDigitYear(input);
+});
+
+// MOMENTS
+
+function getSetWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy);
+}
+
+function getSetISOWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input, this.isoWeek(), this.isoWeekday(), 1, 4);
+}
+
+function getISOWeeksInYear () {
+ return weeksInYear(this.year(), 1, 4);
+}
+
+function getWeeksInYear () {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+}
+
+function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
+ }
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
+}
+
+function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
+}
+
+// FORMATTING
+
+addFormatToken('Q', 0, 'Qo', 'quarter');
+
+// ALIASES
+
+addUnitAlias('quarter', 'Q');
+
+// PRIORITY
+
+addUnitPriority('quarter', 7);
+
+// PARSING
+
+addRegexToken('Q', match1);
+addParseToken('Q', function (input, array) {
+ array[MONTH] = (toInt(input) - 1) * 3;
+});
+
+// MOMENTS
+
+function getSetQuarter (input) {
+ return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+}
+
+// FORMATTING
+
+addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+// ALIASES
+
+addUnitAlias('date', 'D');
+
+// PRIOROITY
+addUnitPriority('date', 9);
+
+// PARSING
+
+addRegexToken('D', match1to2);
+addRegexToken('DD', match1to2, match2);
+addRegexToken('Do', function (isStrict, locale) {
+ return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;
+});
+
+addParseToken(['D', 'DD'], DATE);
+addParseToken('Do', function (input, array) {
+ array[DATE] = toInt(input.match(match1to2)[0], 10);
+});
+
+// MOMENTS
+
+var getSetDayOfMonth = makeGetSet('Date', true);
+
+// FORMATTING
+
+addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+// ALIASES
+
+addUnitAlias('dayOfYear', 'DDD');
+
+// PRIORITY
+addUnitPriority('dayOfYear', 4);
+
+// PARSING
+
+addRegexToken('DDD', match1to3);
+addRegexToken('DDDD', match3);
+addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
+});
+
+// HELPERS
+
+// MOMENTS
+
+function getSetDayOfYear (input) {
+ var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+}
+
+// FORMATTING
+
+addFormatToken('m', ['mm', 2], 0, 'minute');
+
+// ALIASES
+
+addUnitAlias('minute', 'm');
+
+// PRIORITY
+
+addUnitPriority('minute', 14);
+
+// PARSING
+
+addRegexToken('m', match1to2);
+addRegexToken('mm', match1to2, match2);
+addParseToken(['m', 'mm'], MINUTE);
+
+// MOMENTS
+
+var getSetMinute = makeGetSet('Minutes', false);
+
+// FORMATTING
+
+addFormatToken('s', ['ss', 2], 0, 'second');
+
+// ALIASES
+
+addUnitAlias('second', 's');
+
+// PRIORITY
+
+addUnitPriority('second', 15);
+
+// PARSING
+
+addRegexToken('s', match1to2);
+addRegexToken('ss', match1to2, match2);
+addParseToken(['s', 'ss'], SECOND);
+
+// MOMENTS
+
+var getSetSecond = makeGetSet('Seconds', false);
+
+// FORMATTING
+
+addFormatToken('S', 0, 0, function () {
+ return ~~(this.millisecond() / 100);
+});
+
+addFormatToken(0, ['SS', 2], 0, function () {
+ return ~~(this.millisecond() / 10);
+});
+
+addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+});
+addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+});
+addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+});
+addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+});
+addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+});
+addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+});
+
+
+// ALIASES
+
+addUnitAlias('millisecond', 'ms');
+
+// PRIORITY
+
+addUnitPriority('millisecond', 16);
+
+// PARSING
+
+addRegexToken('S', match1to3, match1);
+addRegexToken('SS', match1to3, match2);
+addRegexToken('SSS', match1to3, match3);
+
+var token;
+for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+}
+
+function parseMs(input, array) {
+ array[MILLISECOND] = toInt(('0.' + input) * 1000);
+}
+
+for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
+}
+// MOMENTS
+
+var getSetMillisecond = makeGetSet('Milliseconds', false);
+
+// FORMATTING
+
+addFormatToken('z', 0, 0, 'zoneAbbr');
+addFormatToken('zz', 0, 0, 'zoneName');
+
+// MOMENTS
+
+function getZoneAbbr () {
+ return this._isUTC ? 'UTC' : '';
+}
+
+function getZoneName () {
+ return this._isUTC ? 'Coordinated Universal Time' : '';
+}
+
+var proto = Moment.prototype;
+
+proto.add = add;
+proto.calendar = calendar$1;
+proto.clone = clone;
+proto.diff = diff;
+proto.endOf = endOf;
+proto.format = format;
+proto.from = from;
+proto.fromNow = fromNow;
+proto.to = to;
+proto.toNow = toNow;
+proto.get = stringGet;
+proto.invalidAt = invalidAt;
+proto.isAfter = isAfter;
+proto.isBefore = isBefore;
+proto.isBetween = isBetween;
+proto.isSame = isSame;
+proto.isSameOrAfter = isSameOrAfter;
+proto.isSameOrBefore = isSameOrBefore;
+proto.isValid = isValid$1;
+proto.lang = lang;
+proto.locale = locale;
+proto.localeData = localeData;
+proto.max = prototypeMax;
+proto.min = prototypeMin;
+proto.parsingFlags = parsingFlags;
+proto.set = stringSet;
+proto.startOf = startOf;
+proto.subtract = subtract;
+proto.toArray = toArray;
+proto.toObject = toObject;
+proto.toDate = toDate;
+proto.toISOString = toISOString;
+proto.inspect = inspect;
+proto.toJSON = toJSON;
+proto.toString = toString;
+proto.unix = unix;
+proto.valueOf = valueOf;
+proto.creationData = creationData;
+
+// Year
+proto.year = getSetYear;
+proto.isLeapYear = getIsLeapYear;
+
+// Week Year
+proto.weekYear = getSetWeekYear;
+proto.isoWeekYear = getSetISOWeekYear;
+
+// Quarter
+proto.quarter = proto.quarters = getSetQuarter;
+
+// Month
+proto.month = getSetMonth;
+proto.daysInMonth = getDaysInMonth;
+
+// Week
+proto.week = proto.weeks = getSetWeek;
+proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+proto.weeksInYear = getWeeksInYear;
+proto.isoWeeksInYear = getISOWeeksInYear;
+
+// Day
+proto.date = getSetDayOfMonth;
+proto.day = proto.days = getSetDayOfWeek;
+proto.weekday = getSetLocaleDayOfWeek;
+proto.isoWeekday = getSetISODayOfWeek;
+proto.dayOfYear = getSetDayOfYear;
+
+// Hour
+proto.hour = proto.hours = getSetHour;
+
+// Minute
+proto.minute = proto.minutes = getSetMinute;
+
+// Second
+proto.second = proto.seconds = getSetSecond;
+
+// Millisecond
+proto.millisecond = proto.milliseconds = getSetMillisecond;
+
+// Offset
+proto.utcOffset = getSetOffset;
+proto.utc = setOffsetToUTC;
+proto.local = setOffsetToLocal;
+proto.parseZone = setOffsetToParsedOffset;
+proto.hasAlignedHourOffset = hasAlignedHourOffset;
+proto.isDST = isDaylightSavingTime;
+proto.isLocal = isLocal;
+proto.isUtcOffset = isUtcOffset;
+proto.isUtc = isUtc;
+proto.isUTC = isUtc;
+
+// Timezone
+proto.zoneAbbr = getZoneAbbr;
+proto.zoneName = getZoneName;
+
+// Deprecations
+proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+
+function createUnix (input) {
+ return createLocal(input * 1000);
+}
+
+function createInZone () {
+ return createLocal.apply(null, arguments).parseZone();
+}
+
+function preParsePostFormat (string) {
+ return string;
+}
+
+var proto$1 = Locale.prototype;
+
+proto$1.calendar = calendar;
+proto$1.longDateFormat = longDateFormat;
+proto$1.invalidDate = invalidDate;
+proto$1.ordinal = ordinal;
+proto$1.preparse = preParsePostFormat;
+proto$1.postformat = preParsePostFormat;
+proto$1.relativeTime = relativeTime;
+proto$1.pastFuture = pastFuture;
+proto$1.set = set;
+
+// Month
+proto$1.months = localeMonths;
+proto$1.monthsShort = localeMonthsShort;
+proto$1.monthsParse = localeMonthsParse;
+proto$1.monthsRegex = monthsRegex;
+proto$1.monthsShortRegex = monthsShortRegex;
+
+// Week
+proto$1.week = localeWeek;
+proto$1.firstDayOfYear = localeFirstDayOfYear;
+proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+// Day of Week
+proto$1.weekdays = localeWeekdays;
+proto$1.weekdaysMin = localeWeekdaysMin;
+proto$1.weekdaysShort = localeWeekdaysShort;
+proto$1.weekdaysParse = localeWeekdaysParse;
+
+proto$1.weekdaysRegex = weekdaysRegex;
+proto$1.weekdaysShortRegex = weekdaysShortRegex;
+proto$1.weekdaysMinRegex = weekdaysMinRegex;
+
+// Hours
+proto$1.isPM = localeIsPM;
+proto$1.meridiem = localeMeridiem;
+
+function get$1 (format, index, field, setter) {
+ var locale = getLocale();
+ var utc = createUTC().set(setter, index);
+ return locale[field](utc, format);
+}
+
+function listMonthsImpl (format, index, field) {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+
+ if (index != null) {
+ return get$1(format, index, field, 'month');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = get$1(format, i, field, 'month');
+ }
+ return out;
+}
+
+// ()
+// (5)
+// (fmt, 5)
+// (fmt)
+// (true)
+// (true, 5)
+// (true, fmt, 5)
+// (true, fmt)
+function listWeekdaysImpl (localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
+
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ }
+
+ var locale = getLocale(),
+ shift = localeSorted ? locale._week.dow : 0;
+
+ if (index != null) {
+ return get$1(format, (index + shift) % 7, field, 'day');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 7; i++) {
+ out[i] = get$1(format, (i + shift) % 7, field, 'day');
+ }
+ return out;
+}
+
+function listMonths (format, index) {
+ return listMonthsImpl(format, index, 'months');
+}
+
+function listMonthsShort (format, index) {
+ return listMonthsImpl(format, index, 'monthsShort');
+}
+
+function listWeekdays (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+}
+
+function listWeekdaysShort (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+}
+
+function listWeekdaysMin (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+}
+
+getSetGlobalLocale('en', {
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (toInt(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
+
+// Side effect imports
+hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
+hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
+
+var mathAbs = Math.abs;
+
+function abs () {
+ var data = this._data;
+
+ this._milliseconds = mathAbs(this._milliseconds);
+ this._days = mathAbs(this._days);
+ this._months = mathAbs(this._months);
+
+ data.milliseconds = mathAbs(data.milliseconds);
+ data.seconds = mathAbs(data.seconds);
+ data.minutes = mathAbs(data.minutes);
+ data.hours = mathAbs(data.hours);
+ data.months = mathAbs(data.months);
+ data.years = mathAbs(data.years);
+
+ return this;
+}
+
+function addSubtract$1 (duration, input, value, direction) {
+ var other = createDuration(input, value);
+
+ duration._milliseconds += direction * other._milliseconds;
+ duration._days += direction * other._days;
+ duration._months += direction * other._months;
+
+ return duration._bubble();
+}
+
+// supports only 2.0-style add(1, 's') or add(duration)
+function add$1 (input, value) {
+ return addSubtract$1(this, input, value, 1);
+}
+
+// supports only 2.0-style subtract(1, 's') or subtract(duration)
+function subtract$1 (input, value) {
+ return addSubtract$1(this, input, value, -1);
+}
+
+function absCeil (number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
+ }
+}
+
+function bubble () {
+ var milliseconds = this._milliseconds;
+ var days = this._days;
+ var months = this._months;
+ var data = this._data;
+ var seconds, minutes, hours, years, monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0))) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
+ }
+
+ // The following code bubbles up values, see the tests for
+ // examples of what that means.
+ data.milliseconds = milliseconds % 1000;
+
+ seconds = absFloor(milliseconds / 1000);
+ data.seconds = seconds % 60;
+
+ minutes = absFloor(seconds / 60);
+ data.minutes = minutes % 60;
+
+ hours = absFloor(minutes / 60);
+ data.hours = hours % 24;
+
+ days += absFloor(hours / 24);
+
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+ data.days = days;
+ data.months = months;
+ data.years = years;
+
+ return this;
+}
+
+function daysToMonths (days) {
+ // 400 years have 146097 days (taking into account leap year rules)
+ // 400 years have 12 months === 4800
+ return days * 4800 / 146097;
+}
+
+function monthsToDays (months) {
+ // the reverse of daysToMonths
+ return months * 146097 / 4800;
+}
+
+function as (units) {
+ var days;
+ var months;
+ var milliseconds = this._milliseconds;
+
+ units = normalizeUnits(units);
+
+ if (units === 'month' || units === 'year') {
+ days = this._days + milliseconds / 864e5;
+ months = this._months + daysToMonths(days);
+ return units === 'month' ? months : months / 12;
+ } else {
+ // handle milliseconds separately because of floating point math errors (issue #1867)
+ days = this._days + Math.round(monthsToDays(this._months));
+ switch (units) {
+ case 'week' : return days / 7 + milliseconds / 6048e5;
+ case 'day' : return days + milliseconds / 864e5;
+ case 'hour' : return days * 24 + milliseconds / 36e5;
+ case 'minute' : return days * 1440 + milliseconds / 6e4;
+ case 'second' : return days * 86400 + milliseconds / 1000;
+ // Math.floor prevents floating point math errors here
+ case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+ default: throw new Error('Unknown unit ' + units);
+ }
+ }
+}
+
+// TODO: Use this.as('ms')?
+function valueOf$1 () {
+ return (
+ this._milliseconds +
+ this._days * 864e5 +
+ (this._months % 12) * 2592e6 +
+ toInt(this._months / 12) * 31536e6
+ );
+}
+
+function makeAs (alias) {
+ return function () {
+ return this.as(alias);
+ };
+}
+
+var asMilliseconds = makeAs('ms');
+var asSeconds = makeAs('s');
+var asMinutes = makeAs('m');
+var asHours = makeAs('h');
+var asDays = makeAs('d');
+var asWeeks = makeAs('w');
+var asMonths = makeAs('M');
+var asYears = makeAs('y');
+
+function get$2 (units) {
+ units = normalizeUnits(units);
+ return this[units + 's']();
+}
+
+function makeGetter(name) {
+ return function () {
+ return this._data[name];
+ };
+}
+
+var milliseconds = makeGetter('milliseconds');
+var seconds = makeGetter('seconds');
+var minutes = makeGetter('minutes');
+var hours = makeGetter('hours');
+var days = makeGetter('days');
+var months = makeGetter('months');
+var years = makeGetter('years');
+
+function weeks () {
+ return absFloor(this.days() / 7);
+}
+
+var round = Math.round;
+var thresholds = {
+ s: 45, // seconds to minute
+ m: 45, // minutes to hour
+ h: 22, // hours to day
+ d: 26, // days to month
+ M: 11 // months to year
+};
+
+// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+ return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+}
+
+function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
+ var duration = createDuration(posNegDuration).abs();
+ var seconds = round(duration.as('s'));
+ var minutes = round(duration.as('m'));
+ var hours = round(duration.as('h'));
+ var days = round(duration.as('d'));
+ var months = round(duration.as('M'));
+ var years = round(duration.as('y'));
+
+ var a = seconds < thresholds.s && ['s', seconds] ||
+ minutes <= 1 && ['m'] ||
+ minutes < thresholds.m && ['mm', minutes] ||
+ hours <= 1 && ['h'] ||
+ hours < thresholds.h && ['hh', hours] ||
+ days <= 1 && ['d'] ||
+ days < thresholds.d && ['dd', days] ||
+ months <= 1 && ['M'] ||
+ months < thresholds.M && ['MM', months] ||
+ years <= 1 && ['y'] || ['yy', years];
+
+ a[2] = withoutSuffix;
+ a[3] = +posNegDuration > 0;
+ a[4] = locale;
+ return substituteTimeAgo.apply(null, a);
+}
+
+// This function allows you to set the rounding function for relative time strings
+function getSetRelativeTimeRounding (roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
+ }
+ if (typeof(roundingFunction) === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+}
+
+// This function allows you to set a threshold for relative time strings
+function getSetRelativeTimeThreshold (threshold, limit) {
+ if (thresholds[threshold] === undefined) {
+ return false;
+ }
+ if (limit === undefined) {
+ return thresholds[threshold];
+ }
+ thresholds[threshold] = limit;
+ return true;
+}
+
+function humanize (withSuffix) {
+ var locale = this.localeData();
+ var output = relativeTime$1(this, !withSuffix, locale);
+
+ if (withSuffix) {
+ output = locale.pastFuture(+this, output);
+ }
+
+ return locale.postformat(output);
+}
+
+var abs$1 = Math.abs;
+
+function toISOString$1() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ var seconds = abs$1(this._milliseconds) / 1000;
+ var days = abs$1(this._days);
+ var months = abs$1(this._months);
+ var minutes, hours, years;
+
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+
+ // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+ var Y = years;
+ var M = months;
+ var D = days;
+ var h = hours;
+ var m = minutes;
+ var s = seconds;
+ var total = this.asSeconds();
+
+ if (!total) {
+ // this is the same as C#'s (Noda) and python (isodate)...
+ // but not other JS (goog.date)
+ return 'P0D';
+ }
+
+ return (total < 0 ? '-' : '') +
+ 'P' +
+ (Y ? Y + 'Y' : '') +
+ (M ? M + 'M' : '') +
+ (D ? D + 'D' : '') +
+ ((h || m || s) ? 'T' : '') +
+ (h ? h + 'H' : '') +
+ (m ? m + 'M' : '') +
+ (s ? s + 'S' : '');
+}
+
+var proto$2 = Duration.prototype;
+
+proto$2.abs = abs;
+proto$2.add = add$1;
+proto$2.subtract = subtract$1;
+proto$2.as = as;
+proto$2.asMilliseconds = asMilliseconds;
+proto$2.asSeconds = asSeconds;
+proto$2.asMinutes = asMinutes;
+proto$2.asHours = asHours;
+proto$2.asDays = asDays;
+proto$2.asWeeks = asWeeks;
+proto$2.asMonths = asMonths;
+proto$2.asYears = asYears;
+proto$2.valueOf = valueOf$1;
+proto$2._bubble = bubble;
+proto$2.get = get$2;
+proto$2.milliseconds = milliseconds;
+proto$2.seconds = seconds;
+proto$2.minutes = minutes;
+proto$2.hours = hours;
+proto$2.days = days;
+proto$2.weeks = weeks;
+proto$2.months = months;
+proto$2.years = years;
+proto$2.humanize = humanize;
+proto$2.toISOString = toISOString$1;
+proto$2.toString = toISOString$1;
+proto$2.toJSON = toISOString$1;
+proto$2.locale = locale;
+proto$2.localeData = localeData;
+
+// Deprecations
+proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
+proto$2.lang = lang;
+
+// Side effect imports
+
+// FORMATTING
+
+addFormatToken('X', 0, 0, 'unix');
+addFormatToken('x', 0, 0, 'valueOf');
+
+// PARSING
+
+addRegexToken('x', matchSigned);
+addRegexToken('X', matchTimestamp);
+addParseToken('X', function (input, array, config) {
+ config._d = new Date(parseFloat(input, 10) * 1000);
+});
+addParseToken('x', function (input, array, config) {
+ config._d = new Date(toInt(input));
+});
+
+// Side effect imports
+
+//! moment.js
+//! version : 2.17.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+hooks.version = '2.17.1';
+
+setHookCallback(createLocal);
+
+hooks.fn = proto;
+hooks.min = min;
+hooks.max = max;
+hooks.now = now;
+hooks.utc = createUTC;
+hooks.unix = createUnix;
+hooks.months = listMonths;
+hooks.isDate = isDate;
+hooks.locale = getSetGlobalLocale;
+hooks.invalid = createInvalid;
+hooks.duration = createDuration;
+hooks.isMoment = isMoment;
+hooks.weekdays = listWeekdays;
+hooks.parseZone = createInZone;
+hooks.localeData = getLocale;
+hooks.isDuration = isDuration;
+hooks.monthsShort = listMonthsShort;
+hooks.weekdaysMin = listWeekdaysMin;
+hooks.defineLocale = defineLocale;
+hooks.updateLocale = updateLocale;
+hooks.locales = listLocales;
+hooks.weekdaysShort = listWeekdaysShort;
+hooks.normalizeUnits = normalizeUnits;
+hooks.relativeTimeRounding = getSetRelativeTimeRounding;
+hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+hooks.calendarFormat = getCalendarFormat;
+hooks.prototype = proto;
+
+//! moment.js locale configuration
+//! locale : Afrikaans [af]
+//! author : Werner Mollentze : https://github.com/wernerm
+
+hooks.defineLocale('af', {
+ months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
+ weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+ weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+ meridiemParse: /vm|nm/i,
+ isPM : function (input) {
+ return /^nm$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'vm' : 'VM';
+ } else {
+ return isLower ? 'nm' : 'NM';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Vandag om] LT',
+ nextDay : '[Môre om] LT',
+ nextWeek : 'dddd [om] LT',
+ lastDay : '[Gister om] LT',
+ lastWeek : '[Laas] dddd [om] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'oor %s',
+ past : '%s gelede',
+ s : '\'n paar sekondes',
+ m : '\'n minuut',
+ mm : '%d minute',
+ h : '\'n uur',
+ hh : '%d ure',
+ d : '\'n dag',
+ dd : '%d dae',
+ M : '\'n maand',
+ MM : '%d maande',
+ y : '\'n jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
+ },
+ week : {
+ dow : 1, // Maandag is die eerste dag van die week.
+ doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Algeria) [ar-dz]
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+
+hooks.defineLocale('ar-dz', {
+ months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Lybia) [ar-ly]
+//! author : Ali Hmer: https://github.com/kikoanis
+
+var symbolMap = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '0': '0'
+};
+var pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+};
+var plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+};
+var pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm(number),
+ str = plurals[u][pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+};
+var months$1 = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+];
+
+hooks.defineLocale('ar-ly', {
+ months : months$1,
+ monthsShort : months$1,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize('s'),
+ m : pluralize('m'),
+ mm : pluralize('m'),
+ h : pluralize('h'),
+ hh : pluralize('h'),
+ d : pluralize('d'),
+ dd : pluralize('d'),
+ M : pluralize('M'),
+ MM : pluralize('M'),
+ y : pluralize('y'),
+ yy : pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Morocco) [ar-ma]
+//! author : ElFadili Yassine : https://github.com/ElFadiliY
+//! author : Abdel Said : https://github.com/abdelsaid
+
+hooks.defineLocale('ar-ma', {
+ months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Saudi Arabia) [ar-sa]
+//! author : Suhail Alkowaileet : https://github.com/xsoh
+
+var symbolMap$1 = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+};
+var numberMap = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+
+hooks.defineLocale('ar-sa', {
+ months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ preparse: function (string) {
+ return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$1[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic (Tunisia) [ar-tn]
+//! author : Nader Toukabri : https://github.com/naderio
+
+hooks.defineLocale('ar-tn', {
+ months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'في %s',
+ past: 'منذ %s',
+ s: 'ثوان',
+ m: 'دقيقة',
+ mm: '%d دقائق',
+ h: 'ساعة',
+ hh: '%d ساعات',
+ d: 'يوم',
+ dd: '%d أيام',
+ M: 'شهر',
+ MM: '%d أشهر',
+ y: 'سنة',
+ yy: '%d سنوات'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Arabic [ar]
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+
+var symbolMap$2 = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+};
+var numberMap$1 = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+var pluralForm$1 = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+};
+var plurals$1 = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+};
+var pluralize$1 = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm$1(number),
+ str = plurals$1[u][pluralForm$1(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+};
+var months$2 = [
+ 'كانون الثاني يناير',
+ 'شباط فبراير',
+ 'آذار مارس',
+ 'نيسان أبريل',
+ 'أيار مايو',
+ 'حزيران يونيو',
+ 'تموز يوليو',
+ 'آب أغسطس',
+ 'أيلول سبتمبر',
+ 'تشرين الأول أكتوبر',
+ 'تشرين الثاني نوفمبر',
+ 'كانون الأول ديسمبر'
+];
+
+hooks.defineLocale('ar', {
+ months : months$2,
+ monthsShort : months$2,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize$1('s'),
+ m : pluralize$1('m'),
+ mm : pluralize$1('m'),
+ h : pluralize$1('h'),
+ hh : pluralize$1('h'),
+ d : pluralize$1('d'),
+ dd : pluralize$1('d'),
+ M : pluralize$1('M'),
+ MM : pluralize$1('M'),
+ y : pluralize$1('y'),
+ yy : pluralize$1('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap$1[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$2[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Azerbaijani [az]
+//! author : topchiyev : https://github.com/topchiyev
+
+var suffixes = {
+ 1: '-inci',
+ 5: '-inci',
+ 8: '-inci',
+ 70: '-inci',
+ 80: '-inci',
+ 2: '-nci',
+ 7: '-nci',
+ 20: '-nci',
+ 50: '-nci',
+ 3: '-üncü',
+ 4: '-üncü',
+ 100: '-üncü',
+ 6: '-ncı',
+ 9: '-uncu',
+ 10: '-uncu',
+ 30: '-uncu',
+ 60: '-ıncı',
+ 90: '-ıncı'
+};
+
+hooks.defineLocale('az', {
+ months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
+ monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+ weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
+ weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+ weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[sabah saat] LT',
+ nextWeek : '[gələn həftə] dddd [saat] LT',
+ lastDay : '[dünən] LT',
+ lastWeek : '[keçən həftə] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s əvvəl',
+ s : 'birneçə saniyyə',
+ m : 'bir dəqiqə',
+ mm : '%d dəqiqə',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir il',
+ yy : '%d il'
+ },
+ meridiemParse: /gecə|səhər|gündüz|axşam/,
+ isPM : function (input) {
+ return /^(gündüz|axşam)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'gecə';
+ } else if (hour < 12) {
+ return 'səhər';
+ } else if (hour < 17) {
+ return 'gündüz';
+ } else {
+ return 'axşam';
+ }
+ },
+ ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '-ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Belarusian [be]
+//! author : Dmitry Demidov : https://github.com/demidov91
+//! author: Praleska: http://praleska.pro/
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+ 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+ 'dd': 'дзень_дні_дзён',
+ 'MM': 'месяц_месяцы_месяцаў',
+ 'yy': 'год_гады_гадоў'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвіліна' : 'хвіліну';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'гадзіна' : 'гадзіну';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+
+hooks.defineLocale('be', {
+ months : {
+ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+ standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+ },
+ monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
+ weekdays : {
+ format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+ standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+ },
+ weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сёння ў] LT',
+ nextDay: '[Заўтра ў] LT',
+ lastDay: '[Учора ў] LT',
+ nextWeek: function () {
+ return '[У] dddd [ў] LT';
+ },
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'праз %s',
+ past : '%s таму',
+ s : 'некалькі секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : relativeTimeWithPlural,
+ hh : relativeTimeWithPlural,
+ d : 'дзень',
+ dd : relativeTimeWithPlural,
+ M : 'месяц',
+ MM : relativeTimeWithPlural,
+ y : 'год',
+ yy : relativeTimeWithPlural
+ },
+ meridiemParse: /ночы|раніцы|дня|вечара/,
+ isPM : function (input) {
+ return /^(дня|вечара)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночы';
+ } else if (hour < 12) {
+ return 'раніцы';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечара';
+ }
+ },
+ ordinalParse: /\d{1,2}-(і|ы|га)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+ case 'D':
+ return number + '-га';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Bulgarian [bg]
+//! author : Krasen Borisov : https://github.com/kraz
+
+hooks.defineLocale('bg', {
+ months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Днес в] LT',
+ nextDay : '[Утре в] LT',
+ nextWeek : 'dddd [в] LT',
+ lastDay : '[Вчера в] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'след %s',
+ past : 'преди %s',
+ s : 'няколко секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дни',
+ M : 'месец',
+ MM : '%d месеца',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Bengali [bn]
+//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
+
+var symbolMap$3 = {
+ '1': '১',
+ '2': '২',
+ '3': '৩',
+ '4': '৪',
+ '5': '৫',
+ '6': '৬',
+ '7': '৭',
+ '8': '৮',
+ '9': '৯',
+ '0': '০'
+};
+var numberMap$2 = {
+ '১': '1',
+ '২': '2',
+ '৩': '3',
+ '৪': '4',
+ '৫': '5',
+ '৬': '6',
+ '৭': '7',
+ '৮': '8',
+ '৯': '9',
+ '০': '0'
+};
+
+hooks.defineLocale('bn', {
+ months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+ monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
+ weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
+ weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+ weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm সময়',
+ LTS : 'A h:mm:ss সময়',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm সময়',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
+ },
+ calendar : {
+ sameDay : '[আজ] LT',
+ nextDay : '[আগামীকাল] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[গতকাল] LT',
+ lastWeek : '[গত] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s পরে',
+ past : '%s আগে',
+ s : 'কয়েক সেকেন্ড',
+ m : 'এক মিনিট',
+ mm : '%d মিনিট',
+ h : 'এক ঘন্টা',
+ hh : '%d ঘন্টা',
+ d : 'এক দিন',
+ dd : '%d দিন',
+ M : 'এক মাস',
+ MM : '%d মাস',
+ y : 'এক বছর',
+ yy : '%d বছর'
+ },
+ preparse: function (string) {
+ return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+ return numberMap$2[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$3[match];
+ });
+ },
+ meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'রাত' && hour >= 4) ||
+ (meridiem === 'দুপুর' && hour < 5) ||
+ meridiem === 'বিকাল') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'রাত';
+ } else if (hour < 10) {
+ return 'সকাল';
+ } else if (hour < 17) {
+ return 'দুপুর';
+ } else if (hour < 20) {
+ return 'বিকাল';
+ } else {
+ return 'রাত';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tibetan [bo]
+//! author : Thupten N. Chakrishar : https://github.com/vajradog
+
+var symbolMap$4 = {
+ '1': '༡',
+ '2': '༢',
+ '3': '༣',
+ '4': '༤',
+ '5': '༥',
+ '6': '༦',
+ '7': '༧',
+ '8': '༨',
+ '9': '༩',
+ '0': '༠'
+};
+var numberMap$3 = {
+ '༡': '1',
+ '༢': '2',
+ '༣': '3',
+ '༤': '4',
+ '༥': '5',
+ '༦': '6',
+ '༧': '7',
+ '༨': '8',
+ '༩': '9',
+ '༠': '0'
+};
+
+hooks.defineLocale('bo', {
+ months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
+ weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[དི་རིང] LT',
+ nextDay : '[སང་ཉིན] LT',
+ nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
+ lastDay : '[ཁ་སང] LT',
+ lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ལ་',
+ past : '%s སྔན་ལ',
+ s : 'ལམ་སང',
+ m : 'སྐར་མ་གཅིག',
+ mm : '%d སྐར་མ',
+ h : 'ཆུ་ཚོད་གཅིག',
+ hh : '%d ཆུ་ཚོད',
+ d : 'ཉིན་གཅིག',
+ dd : '%d ཉིན་',
+ M : 'ཟླ་བ་གཅིག',
+ MM : '%d ཟླ་བ',
+ y : 'ལོ་གཅིག',
+ yy : '%d ལོ'
+ },
+ preparse: function (string) {
+ return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+ return numberMap$3[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$4[match];
+ });
+ },
+ meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
+ (meridiem === 'ཉིན་གུང' && hour < 5) ||
+ meridiem === 'དགོང་དག') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'མཚན་མོ';
+ } else if (hour < 10) {
+ return 'ཞོགས་ཀས';
+ } else if (hour < 17) {
+ return 'ཉིན་གུང';
+ } else if (hour < 20) {
+ return 'དགོང་དག';
+ } else {
+ return 'མཚན་མོ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Breton [br]
+//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+
+function relativeTimeWithMutation(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'munutenn',
+ 'MM': 'miz',
+ 'dd': 'devezh'
+ };
+ return number + ' ' + mutation(format[key], number);
+}
+function specialMutationForYears(number) {
+ switch (lastNumber(number)) {
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 9:
+ return number + ' bloaz';
+ default:
+ return number + ' vloaz';
+ }
+}
+function lastNumber(number) {
+ if (number > 9) {
+ return lastNumber(number % 10);
+ }
+ return number;
+}
+function mutation(text, number) {
+ if (number === 2) {
+ return softMutation(text);
+ }
+ return text;
+}
+function softMutation(text) {
+ var mutationTable = {
+ 'm': 'v',
+ 'b': 'v',
+ 'd': 'z'
+ };
+ if (mutationTable[text.charAt(0)] === undefined) {
+ return text;
+ }
+ return mutationTable[text.charAt(0)] + text.substring(1);
+}
+
+hooks.defineLocale('br', {
+ months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
+ monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+ weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
+ weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+ weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h[e]mm A',
+ LTS : 'h[e]mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [a viz] MMMM YYYY',
+ LLL : 'D [a viz] MMMM YYYY h[e]mm A',
+ LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
+ },
+ calendar : {
+ sameDay : '[Hiziv da] LT',
+ nextDay : '[Warc\'hoazh da] LT',
+ nextWeek : 'dddd [da] LT',
+ lastDay : '[Dec\'h da] LT',
+ lastWeek : 'dddd [paset da] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'a-benn %s',
+ past : '%s \'zo',
+ s : 'un nebeud segondennoù',
+ m : 'ur vunutenn',
+ mm : relativeTimeWithMutation,
+ h : 'un eur',
+ hh : '%d eur',
+ d : 'un devezh',
+ dd : relativeTimeWithMutation,
+ M : 'ur miz',
+ MM : relativeTimeWithMutation,
+ y : 'ur bloaz',
+ yy : specialMutationForYears
+ },
+ ordinalParse: /\d{1,2}(añ|vet)/,
+ ordinal : function (number) {
+ var output = (number === 1) ? 'añ' : 'vet';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Bosnian [bs]
+//! author : Nedim Cholich : https://github.com/frontyard
+//! based on (hr) translation by Bojan Marković
+
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+hooks.defineLocale('bs', {
+ months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : 'dan',
+ dd : translate,
+ M : 'mjesec',
+ MM : translate,
+ y : 'godinu',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Catalan [ca]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+hooks.defineLocale('ca', {
+ months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
+ monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
+ weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+ weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextDay : function () {
+ return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastDay : function () {
+ return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'd\'aquí %s',
+ past : 'fa %s',
+ s : 'uns segons',
+ m : 'un minut',
+ mm : '%d minuts',
+ h : 'una hora',
+ hh : '%d hores',
+ d : 'un dia',
+ dd : '%d dies',
+ M : 'un mes',
+ MM : '%d mesos',
+ y : 'un any',
+ yy : '%d anys'
+ },
+ ordinalParse: /\d{1,2}(r|n|t|è|a)/,
+ ordinal : function (number, period) {
+ var output = (number === 1) ? 'r' :
+ (number === 2) ? 'n' :
+ (number === 3) ? 'r' :
+ (number === 4) ? 't' : 'è';
+ if (period === 'w' || period === 'W') {
+ output = 'a';
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Czech [cs]
+//! author : petrbela : https://github.com/petrbela
+
+var months$3 = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');
+var monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
+function plural$1(n) {
+ return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
+}
+function translate$1(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'minuty' : 'minut');
+ } else {
+ return result + 'minutami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'hodiny' : 'hodin');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'dny' : 'dní');
+ } else {
+ return result + 'dny';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'měsíce' : 'měsíců');
+ } else {
+ return result + 'měsíci';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$1(number) ? 'roky' : 'let');
+ } else {
+ return result + 'lety';
+ }
+ break;
+ }
+}
+
+hooks.defineLocale('cs', {
+ months : months$3,
+ monthsShort : monthsShort,
+ monthsParse : (function (months, monthsShort) {
+ var i, _monthsParse = [];
+ for (i = 0; i < 12; i++) {
+ // use custom parser to solve problem with July (červenec)
+ _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+ }
+ return _monthsParse;
+ }(months$3, monthsShort)),
+ shortMonthsParse : (function (monthsShort) {
+ var i, _shortMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
+ }
+ return _shortMonthsParse;
+ }(monthsShort)),
+ longMonthsParse : (function (months) {
+ var i, _longMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
+ }
+ return _longMonthsParse;
+ }(months$3)),
+ weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+ weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
+ weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm',
+ l : 'D. M. YYYY'
+ },
+ calendar : {
+ sameDay: '[dnes v] LT',
+ nextDay: '[zítra v] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v neděli v] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [v] LT';
+ case 3:
+ return '[ve středu v] LT';
+ case 4:
+ return '[ve čtvrtek v] LT';
+ case 5:
+ return '[v pátek v] LT';
+ case 6:
+ return '[v sobotu v] LT';
+ }
+ },
+ lastDay: '[včera v] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulou neděli v] LT';
+ case 1:
+ case 2:
+ return '[minulé] dddd [v] LT';
+ case 3:
+ return '[minulou středu v] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [v] LT';
+ case 6:
+ return '[minulou sobotu v] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'před %s',
+ s : translate$1,
+ m : translate$1,
+ mm : translate$1,
+ h : translate$1,
+ hh : translate$1,
+ d : translate$1,
+ dd : translate$1,
+ M : translate$1,
+ MM : translate$1,
+ y : translate$1,
+ yy : translate$1
+ },
+ ordinalParse : /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chuvash [cv]
+//! author : Anatoly Mironov : https://github.com/mirontoli
+
+hooks.defineLocale('cv', {
+ months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
+ monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
+ weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
+ weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
+ weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
+ LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+ LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
+ },
+ calendar : {
+ sameDay: '[Паян] LT [сехетре]',
+ nextDay: '[Ыран] LT [сехетре]',
+ lastDay: '[Ӗнер] LT [сехетре]',
+ nextWeek: '[Ҫитес] dddd LT [сехетре]',
+ lastWeek: '[Иртнӗ] dddd LT [сехетре]',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (output) {
+ var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
+ return output + affix;
+ },
+ past : '%s каялла',
+ s : 'пӗр-ик ҫеккунт',
+ m : 'пӗр минут',
+ mm : '%d минут',
+ h : 'пӗр сехет',
+ hh : '%d сехет',
+ d : 'пӗр кун',
+ dd : '%d кун',
+ M : 'пӗр уйӑх',
+ MM : '%d уйӑх',
+ y : 'пӗр ҫул',
+ yy : '%d ҫул'
+ },
+ ordinalParse: /\d{1,2}-мӗш/,
+ ordinal : '%d-мӗш',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Welsh [cy]
+//! author : Robert Allen : https://github.com/robgallen
+//! author : https://github.com/ryangreaves
+
+hooks.defineLocale('cy', {
+ months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
+ monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
+ weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
+ weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+ weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ // time formats are the same as en-gb
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[Heddiw am] LT',
+ nextDay: '[Yfory am] LT',
+ nextWeek: 'dddd [am] LT',
+ lastDay: '[Ddoe am] LT',
+ lastWeek: 'dddd [diwethaf am] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'mewn %s',
+ past: '%s yn ôl',
+ s: 'ychydig eiliadau',
+ m: 'munud',
+ mm: '%d munud',
+ h: 'awr',
+ hh: '%d awr',
+ d: 'diwrnod',
+ dd: '%d diwrnod',
+ M: 'mis',
+ MM: '%d mis',
+ y: 'blwyddyn',
+ yy: '%d flynedd'
+ },
+ ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+ // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+ ordinal: function (number) {
+ var b = number,
+ output = '',
+ lookup = [
+ '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
+ 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
+ ];
+ if (b > 20) {
+ if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+ output = 'fed'; // not 30ain, 70ain or 90ain
+ } else {
+ output = 'ain';
+ }
+ } else if (b > 0) {
+ output = lookup[b];
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Danish [da]
+//! author : Ulrik Nielsen : https://github.com/mrbase
+
+hooks.defineLocale('da', {
+ months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[I dag kl.] LT',
+ nextDay : '[I morgen kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[I går kl.] LT',
+ lastWeek : '[sidste] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'få sekunder',
+ m : 'et minut',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dage',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'et år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : German (Austria) [de-at]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Martin Groller : https://github.com/MadMG
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+hooks.defineLocale('de-at', {
+ months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime,
+ mm : '%d Minuten',
+ h : processRelativeTime,
+ hh : '%d Stunden',
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : German [de]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+function processRelativeTime$1(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+hooks.defineLocale('de', {
+ months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime$1,
+ mm : '%d Minuten',
+ h : processRelativeTime$1,
+ hh : '%d Stunden',
+ d : processRelativeTime$1,
+ dd : processRelativeTime$1,
+ M : processRelativeTime$1,
+ MM : processRelativeTime$1,
+ y : processRelativeTime$1,
+ yy : processRelativeTime$1
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Maldivian [dv]
+//! author : Jawish Hameed : https://github.com/jawish
+
+var months$4 = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+];
+var weekdays = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+];
+
+hooks.defineLocale('dv', {
+ months : months$4,
+ monthsShort : months$4,
+ weekdays : weekdays,
+ weekdaysShort : weekdays,
+ weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+ longDateFormat : {
+
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/M/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /މކ|މފ/,
+ isPM : function (input) {
+ return 'މފ' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'މކ';
+ } else {
+ return 'މފ';
+ }
+ },
+ calendar : {
+ sameDay : '[މިއަދު] LT',
+ nextDay : '[މާދަމާ] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[އިއްޔެ] LT',
+ lastWeek : '[ފާއިތުވި] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ތެރޭގައި %s',
+ past : 'ކުރިން %s',
+ s : 'ސިކުންތުކޮޅެއް',
+ m : 'މިނިޓެއް',
+ mm : 'މިނިޓު %d',
+ h : 'ގަޑިއިރެއް',
+ hh : 'ގަޑިއިރު %d',
+ d : 'ދުވަހެއް',
+ dd : 'ދުވަސް %d',
+ M : 'މަހެއް',
+ MM : 'މަސް %d',
+ y : 'އަހަރެއް',
+ yy : 'އަހަރު %d'
+ },
+ preparse: function (string) {
+ return string.replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/,/g, '،');
+ },
+ week : {
+ dow : 7, // Sunday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Greek [el]
+//! author : Aggelos Karalias : https://github.com/mehiel
+
+hooks.defineLocale('el', {
+ monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
+ monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
+ months : function (momentToFormat, format) {
+ if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
+ return this._monthsGenitiveEl[momentToFormat.month()];
+ } else {
+ return this._monthsNominativeEl[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+ weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
+ weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+ weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'μμ' : 'ΜΜ';
+ } else {
+ return isLower ? 'πμ' : 'ΠΜ';
+ }
+ },
+ isPM : function (input) {
+ return ((input + '').toLowerCase()[0] === 'μ');
+ },
+ meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendarEl : {
+ sameDay : '[Σήμερα {}] LT',
+ nextDay : '[Αύριο {}] LT',
+ nextWeek : 'dddd [{}] LT',
+ lastDay : '[Χθες {}] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 6:
+ return '[το προηγούμενο] dddd [{}] LT';
+ default:
+ return '[την προηγούμενη] dddd [{}] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ calendar : function (key, mom) {
+ var output = this._calendarEl[key],
+ hours = mom && mom.hours();
+ if (isFunction(output)) {
+ output = output.apply(mom);
+ }
+ return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
+ },
+ relativeTime : {
+ future : 'σε %s',
+ past : '%s πριν',
+ s : 'λίγα δευτερόλεπτα',
+ m : 'ένα λεπτό',
+ mm : '%d λεπτά',
+ h : 'μία ώρα',
+ hh : '%d ώρες',
+ d : 'μία μέρα',
+ dd : '%d μέρες',
+ M : 'ένας μήνας',
+ MM : '%d μήνες',
+ y : 'ένας χρόνος',
+ yy : '%d χρόνια'
+ },
+ ordinalParse: /\d{1,2}η/,
+ ordinal: '%dη',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (Australia) [en-au]
+//! author : Jared Morse : https://github.com/jarcoal
+
+hooks.defineLocale('en-au', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (Canada) [en-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+hooks.defineLocale('en-ca', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'YYYY-MM-DD',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (United Kingdom) [en-gb]
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+
+hooks.defineLocale('en-gb', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (Ireland) [en-ie]
+//! author : Chris Cartlidge : https://github.com/chriscartlidge
+
+hooks.defineLocale('en-ie', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : English (New Zealand) [en-nz]
+//! author : Luke McGregor : https://github.com/lukemcgregor
+
+hooks.defineLocale('en-nz', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Esperanto [eo]
+//! author : Colin Dean : https://github.com/colindean
+//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+
+hooks.defineLocale('eo', {
+ months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
+ weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
+ weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D[-an de] MMMM, YYYY',
+ LLL : 'D[-an de] MMMM, YYYY HH:mm',
+ LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
+ },
+ meridiemParse: /[ap]\.t\.m/i,
+ isPM: function (input) {
+ return input.charAt(0).toLowerCase() === 'p';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'p.t.m.' : 'P.T.M.';
+ } else {
+ return isLower ? 'a.t.m.' : 'A.T.M.';
+ }
+ },
+ calendar : {
+ sameDay : '[Hodiaŭ je] LT',
+ nextDay : '[Morgaŭ je] LT',
+ nextWeek : 'dddd [je] LT',
+ lastDay : '[Hieraŭ je] LT',
+ lastWeek : '[pasinta] dddd [je] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'je %s',
+ past : 'antaŭ %s',
+ s : 'sekundoj',
+ m : 'minuto',
+ mm : '%d minutoj',
+ h : 'horo',
+ hh : '%d horoj',
+ d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
+ dd : '%d tagoj',
+ M : 'monato',
+ MM : '%d monatoj',
+ y : 'jaro',
+ yy : '%d jaroj'
+ },
+ ordinalParse: /\d{1,2}a/,
+ ordinal : '%da',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Spanish (Dominican Republic) [es-do]
+
+var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
+var monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+hooks.defineLocale('es-do', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort$1[m.month()];
+ } else {
+ return monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY h:mm A',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Spanish [es]
+//! author : Julio Napurí : https://github.com/julionc
+
+var monthsShortDot$1 = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');
+var monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+hooks.defineLocale('es', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort$2[m.month()];
+ } else {
+ return monthsShortDot$1[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Estonian [et]
+//! author : Henry Kehlmann : https://github.com/madhenry
+//! improvements : Illimar Tambek : https://github.com/ragulka
+
+function processRelativeTime$2(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+ 'm' : ['ühe minuti', 'üks minut'],
+ 'mm': [number + ' minuti', number + ' minutit'],
+ 'h' : ['ühe tunni', 'tund aega', 'üks tund'],
+ 'hh': [number + ' tunni', number + ' tundi'],
+ 'd' : ['ühe päeva', 'üks päev'],
+ 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
+ 'MM': [number + ' kuu', number + ' kuud'],
+ 'y' : ['ühe aasta', 'aasta', 'üks aasta'],
+ 'yy': [number + ' aasta', number + ' aastat']
+ };
+ if (withoutSuffix) {
+ return format[key][2] ? format[key][2] : format[key][1];
+ }
+ return isFuture ? format[key][0] : format[key][1];
+}
+
+hooks.defineLocale('et', {
+ months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
+ monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
+ weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
+ weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
+ weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Täna,] LT',
+ nextDay : '[Homme,] LT',
+ nextWeek : '[Järgmine] dddd LT',
+ lastDay : '[Eile,] LT',
+ lastWeek : '[Eelmine] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s pärast',
+ past : '%s tagasi',
+ s : processRelativeTime$2,
+ m : processRelativeTime$2,
+ mm : processRelativeTime$2,
+ h : processRelativeTime$2,
+ hh : processRelativeTime$2,
+ d : processRelativeTime$2,
+ dd : '%d päeva',
+ M : processRelativeTime$2,
+ MM : processRelativeTime$2,
+ y : processRelativeTime$2,
+ yy : processRelativeTime$2
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Basque [eu]
+//! author : Eneko Illarramendi : https://github.com/eillarra
+
+hooks.defineLocale('eu', {
+ months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
+ monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
+ weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
+ weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY[ko] MMMM[ren] D[a]',
+ LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+ LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
+ l : 'YYYY-M-D',
+ ll : 'YYYY[ko] MMM D[a]',
+ lll : 'YYYY[ko] MMM D[a] HH:mm',
+ llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
+ },
+ calendar : {
+ sameDay : '[gaur] LT[etan]',
+ nextDay : '[bihar] LT[etan]',
+ nextWeek : 'dddd LT[etan]',
+ lastDay : '[atzo] LT[etan]',
+ lastWeek : '[aurreko] dddd LT[etan]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s barru',
+ past : 'duela %s',
+ s : 'segundo batzuk',
+ m : 'minutu bat',
+ mm : '%d minutu',
+ h : 'ordu bat',
+ hh : '%d ordu',
+ d : 'egun bat',
+ dd : '%d egun',
+ M : 'hilabete bat',
+ MM : '%d hilabete',
+ y : 'urte bat',
+ yy : '%d urte'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Persian [fa]
+//! author : Ebrahim Byagowi : https://github.com/ebraminio
+
+var symbolMap$5 = {
+ '1': '۱',
+ '2': '۲',
+ '3': '۳',
+ '4': '۴',
+ '5': '۵',
+ '6': '۶',
+ '7': '۷',
+ '8': '۸',
+ '9': '۹',
+ '0': '۰'
+};
+var numberMap$4 = {
+ '۱': '1',
+ '۲': '2',
+ '۳': '3',
+ '۴': '4',
+ '۵': '5',
+ '۶': '6',
+ '۷': '7',
+ '۸': '8',
+ '۹': '9',
+ '۰': '0'
+};
+
+hooks.defineLocale('fa', {
+ months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /قبل از ظهر|بعد از ظهر/,
+ isPM: function (input) {
+ return /بعد از ظهر/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'قبل از ظهر';
+ } else {
+ return 'بعد از ظهر';
+ }
+ },
+ calendar : {
+ sameDay : '[امروز ساعت] LT',
+ nextDay : '[فردا ساعت] LT',
+ nextWeek : 'dddd [ساعت] LT',
+ lastDay : '[دیروز ساعت] LT',
+ lastWeek : 'dddd [پیش] [ساعت] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'در %s',
+ past : '%s پیش',
+ s : 'چندین ثانیه',
+ m : 'یک دقیقه',
+ mm : '%d دقیقه',
+ h : 'یک ساعت',
+ hh : '%d ساعت',
+ d : 'یک روز',
+ dd : '%d روز',
+ M : 'یک ماه',
+ MM : '%d ماه',
+ y : 'یک سال',
+ yy : '%d سال'
+ },
+ preparse: function (string) {
+ return string.replace(/[۰-۹]/g, function (match) {
+ return numberMap$4[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$5[match];
+ }).replace(/,/g, '،');
+ },
+ ordinalParse: /\d{1,2}م/,
+ ordinal : '%dم',
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Finnish [fi]
+//! author : Tarmo Aidantausta : https://github.com/bleadof
+
+var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');
+var numbersFuture = [
+ 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
+ numbersPast[7], numbersPast[8], numbersPast[9]
+ ];
+function translate$2(number, withoutSuffix, key, isFuture) {
+ var result = '';
+ switch (key) {
+ case 's':
+ return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+ case 'm':
+ return isFuture ? 'minuutin' : 'minuutti';
+ case 'mm':
+ result = isFuture ? 'minuutin' : 'minuuttia';
+ break;
+ case 'h':
+ return isFuture ? 'tunnin' : 'tunti';
+ case 'hh':
+ result = isFuture ? 'tunnin' : 'tuntia';
+ break;
+ case 'd':
+ return isFuture ? 'päivän' : 'päivä';
+ case 'dd':
+ result = isFuture ? 'päivän' : 'päivää';
+ break;
+ case 'M':
+ return isFuture ? 'kuukauden' : 'kuukausi';
+ case 'MM':
+ result = isFuture ? 'kuukauden' : 'kuukautta';
+ break;
+ case 'y':
+ return isFuture ? 'vuoden' : 'vuosi';
+ case 'yy':
+ result = isFuture ? 'vuoden' : 'vuotta';
+ break;
+ }
+ result = verbalNumber(number, isFuture) + ' ' + result;
+ return result;
+}
+function verbalNumber(number, isFuture) {
+ return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
+}
+
+hooks.defineLocale('fi', {
+ months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
+ monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
+ weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
+ weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'Do MMMM[ta] YYYY',
+ LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
+ LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
+ l : 'D.M.YYYY',
+ ll : 'Do MMM YYYY',
+ lll : 'Do MMM YYYY, [klo] HH.mm',
+ llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
+ },
+ calendar : {
+ sameDay : '[tänään] [klo] LT',
+ nextDay : '[huomenna] [klo] LT',
+ nextWeek : 'dddd [klo] LT',
+ lastDay : '[eilen] [klo] LT',
+ lastWeek : '[viime] dddd[na] [klo] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s päästä',
+ past : '%s sitten',
+ s : translate$2,
+ m : translate$2,
+ mm : translate$2,
+ h : translate$2,
+ hh : translate$2,
+ d : translate$2,
+ dd : translate$2,
+ M : translate$2,
+ MM : translate$2,
+ y : translate$2,
+ yy : translate$2
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Faroese [fo]
+//! author : Ragnar Johannesen : https://github.com/ragnar123
+
+hooks.defineLocale('fo', {
+ months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
+ weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+ weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D. MMMM, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Í dag kl.] LT',
+ nextDay : '[Í morgin kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[Í gjár kl.] LT',
+ lastWeek : '[síðstu] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'um %s',
+ past : '%s síðani',
+ s : 'fá sekund',
+ m : 'ein minutt',
+ mm : '%d minuttir',
+ h : 'ein tími',
+ hh : '%d tímar',
+ d : 'ein dagur',
+ dd : '%d dagar',
+ M : 'ein mánaði',
+ MM : '%d mánaðir',
+ y : 'eitt ár',
+ yy : '%d ár'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : French (Canada) [fr-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+hooks.defineLocale('fr-ca', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ }
+});
+
+//! moment.js locale configuration
+//! locale : French (Switzerland) [fr-ch]
+//! author : Gaspard Bucher : https://github.com/gaspard
+
+hooks.defineLocale('fr-ch', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : French [fr]
+//! author : John Fischer : https://github.com/jfroffice
+
+hooks.defineLocale('fr', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : '');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Frisian [fy]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');
+var monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
+
+hooks.defineLocale('fy', {
+ months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
+ weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
+ weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[hjoed om] LT',
+ nextDay: '[moarn om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[juster om] LT',
+ lastWeek: '[ôfrûne] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'oer %s',
+ past : '%s lyn',
+ s : 'in pear sekonden',
+ m : 'ien minút',
+ mm : '%d minuten',
+ h : 'ien oere',
+ hh : '%d oeren',
+ d : 'ien dei',
+ dd : '%d dagen',
+ M : 'ien moanne',
+ MM : '%d moannen',
+ y : 'ien jier',
+ yy : '%d jierren'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Scottish Gaelic [gd]
+//! author : Jon Ashdown : https://github.com/jonashdown
+
+var months$5 = [
+ 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
+];
+
+var monthsShort$3 = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
+
+var weekdays$1 = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
+
+var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
+
+var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+hooks.defineLocale('gd', {
+ months : months$5,
+ monthsShort : monthsShort$3,
+ monthsParseExact : true,
+ weekdays : weekdays$1,
+ weekdaysShort : weekdaysShort,
+ weekdaysMin : weekdaysMin,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[An-diugh aig] LT',
+ nextDay : '[A-màireach aig] LT',
+ nextWeek : 'dddd [aig] LT',
+ lastDay : '[An-dè aig] LT',
+ lastWeek : 'dddd [seo chaidh] [aig] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ann an %s',
+ past : 'bho chionn %s',
+ s : 'beagan diogan',
+ m : 'mionaid',
+ mm : '%d mionaidean',
+ h : 'uair',
+ hh : '%d uairean',
+ d : 'latha',
+ dd : '%d latha',
+ M : 'mìos',
+ MM : '%d mìosan',
+ y : 'bliadhna',
+ yy : '%d bliadhna'
+ },
+ ordinalParse : /\d{1,2}(d|na|mh)/,
+ ordinal : function (number) {
+ var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Galician [gl]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+hooks.defineLocale('gl', {
+ months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
+ monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ lastDay : function () {
+ return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
+ },
+ lastWeek : function () {
+ return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (str) {
+ if (str.indexOf('un') === 0) {
+ return 'n' + str;
+ }
+ return 'en ' + str;
+ },
+ past : 'hai %s',
+ s : 'uns segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'unha hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un ano',
+ yy : '%d anos'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Hebrew [he]
+//! author : Tomer Cohen : https://github.com/tomer
+//! author : Moshe Simantov : https://github.com/DevelopmentIL
+//! author : Tal Ater : https://github.com/TalAter
+
+hooks.defineLocale('he', {
+ months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
+ monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
+ weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+ weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+ weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [ב]MMMM YYYY',
+ LLL : 'D [ב]MMMM YYYY HH:mm',
+ LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
+ l : 'D/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[היום ב־]LT',
+ nextDay : '[מחר ב־]LT',
+ nextWeek : 'dddd [בשעה] LT',
+ lastDay : '[אתמול ב־]LT',
+ lastWeek : '[ביום] dddd [האחרון בשעה] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'בעוד %s',
+ past : 'לפני %s',
+ s : 'מספר שניות',
+ m : 'דקה',
+ mm : '%d דקות',
+ h : 'שעה',
+ hh : function (number) {
+ if (number === 2) {
+ return 'שעתיים';
+ }
+ return number + ' שעות';
+ },
+ d : 'יום',
+ dd : function (number) {
+ if (number === 2) {
+ return 'יומיים';
+ }
+ return number + ' ימים';
+ },
+ M : 'חודש',
+ MM : function (number) {
+ if (number === 2) {
+ return 'חודשיים';
+ }
+ return number + ' חודשים';
+ },
+ y : 'שנה',
+ yy : function (number) {
+ if (number === 2) {
+ return 'שנתיים';
+ } else if (number % 10 === 0 && number !== 10) {
+ return number + ' שנה';
+ }
+ return number + ' שנים';
+ }
+ },
+ meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+ isPM : function (input) {
+ return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 5) {
+ return 'לפנות בוקר';
+ } else if (hour < 10) {
+ return 'בבוקר';
+ } else if (hour < 12) {
+ return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+ } else if (hour < 18) {
+ return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+ } else {
+ return 'בערב';
+ }
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Hindi [hi]
+//! author : Mayank Singhal : https://github.com/mayanksinghal
+
+var symbolMap$6 = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap$5 = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+hooks.defineLocale('hi', {
+ months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
+ monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm बजे',
+ LTS : 'A h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[कल] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[कल] LT',
+ lastWeek : '[पिछले] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s में',
+ past : '%s पहले',
+ s : 'कुछ ही क्षण',
+ m : 'एक मिनट',
+ mm : '%d मिनट',
+ h : 'एक घंटा',
+ hh : '%d घंटे',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महीने',
+ MM : '%d महीने',
+ y : 'एक वर्ष',
+ yy : '%d वर्ष'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap$5[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$6[match];
+ });
+ },
+ // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+ meridiemParse: /रात|सुबह|दोपहर|शाम/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सुबह') {
+ return hour;
+ } else if (meridiem === 'दोपहर') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'शाम') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात';
+ } else if (hour < 10) {
+ return 'सुबह';
+ } else if (hour < 17) {
+ return 'दोपहर';
+ } else if (hour < 20) {
+ return 'शाम';
+ } else {
+ return 'रात';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Croatian [hr]
+//! author : Bojan Marković : https://github.com/bmarkovic
+
+function translate$3(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+hooks.defineLocale('hr', {
+ months : {
+ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
+ standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
+ },
+ monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate$3,
+ mm : translate$3,
+ h : translate$3,
+ hh : translate$3,
+ d : 'dan',
+ dd : translate$3,
+ M : 'mjesec',
+ MM : translate$3,
+ y : 'godinu',
+ yy : translate$3
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Hungarian [hu]
+//! author : Adam Brunner : https://github.com/adambrunner
+
+var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
+function translate$4(number, withoutSuffix, key, isFuture) {
+ var num = number,
+ suffix;
+ switch (key) {
+ case 's':
+ return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+ case 'm':
+ return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'mm':
+ return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'h':
+ return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'hh':
+ return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'd':
+ return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'dd':
+ return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'M':
+ return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'MM':
+ return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'y':
+ return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 'yy':
+ return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+ }
+ return '';
+}
+function week(isFuture) {
+ return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
+}
+
+hooks.defineLocale('hu', {
+ months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
+ monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
+ weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+ weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+ weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY.MM.DD.',
+ LL : 'YYYY. MMMM D.',
+ LLL : 'YYYY. MMMM D. H:mm',
+ LLLL : 'YYYY. MMMM D., dddd H:mm'
+ },
+ meridiemParse: /de|du/i,
+ isPM: function (input) {
+ return input.charAt(1).toLowerCase() === 'u';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower === true ? 'de' : 'DE';
+ } else {
+ return isLower === true ? 'du' : 'DU';
+ }
+ },
+ calendar : {
+ sameDay : '[ma] LT[-kor]',
+ nextDay : '[holnap] LT[-kor]',
+ nextWeek : function () {
+ return week.call(this, true);
+ },
+ lastDay : '[tegnap] LT[-kor]',
+ lastWeek : function () {
+ return week.call(this, false);
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s múlva',
+ past : '%s',
+ s : translate$4,
+ m : translate$4,
+ mm : translate$4,
+ h : translate$4,
+ hh : translate$4,
+ d : translate$4,
+ dd : translate$4,
+ M : translate$4,
+ MM : translate$4,
+ y : translate$4,
+ yy : translate$4
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Armenian [hy-am]
+//! author : Armendarabyan : https://github.com/armendarabyan
+
+hooks.defineLocale('hy-am', {
+ months : {
+ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+ standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
+ },
+ monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
+ weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY թ.',
+ LLL : 'D MMMM YYYY թ., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
+ },
+ calendar : {
+ sameDay: '[այսօր] LT',
+ nextDay: '[վաղը] LT',
+ lastDay: '[երեկ] LT',
+ nextWeek: function () {
+ return 'dddd [օրը ժամը] LT';
+ },
+ lastWeek: function () {
+ return '[անցած] dddd [օրը ժամը] LT';
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s հետո',
+ past : '%s առաջ',
+ s : 'մի քանի վայրկյան',
+ m : 'րոպե',
+ mm : '%d րոպե',
+ h : 'ժամ',
+ hh : '%d ժամ',
+ d : 'օր',
+ dd : '%d օր',
+ M : 'ամիս',
+ MM : '%d ամիս',
+ y : 'տարի',
+ yy : '%d տարի'
+ },
+ meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
+ isPM: function (input) {
+ return /^(ցերեկվա|երեկոյան)$/.test(input);
+ },
+ meridiem : function (hour) {
+ if (hour < 4) {
+ return 'գիշերվա';
+ } else if (hour < 12) {
+ return 'առավոտվա';
+ } else if (hour < 17) {
+ return 'ցերեկվա';
+ } else {
+ return 'երեկոյան';
+ }
+ },
+ ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'DDD':
+ case 'w':
+ case 'W':
+ case 'DDDo':
+ if (number === 1) {
+ return number + '-ին';
+ }
+ return number + '-րդ';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Indonesian [id]
+//! author : Mohammad Satrio Utomo : https://github.com/tyok
+//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+
+hooks.defineLocale('id', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|siang|sore|malam/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'siang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sore' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'siang';
+ } else if (hours < 19) {
+ return 'sore';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Besok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kemarin pukul] LT',
+ lastWeek : 'dddd [lalu pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lalu',
+ s : 'beberapa detik',
+ m : 'semenit',
+ mm : '%d menit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Icelandic [is]
+//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+
+function plural$2(n) {
+ if (n % 100 === 11) {
+ return true;
+ } else if (n % 10 === 1) {
+ return false;
+ }
+ return true;
+}
+function translate$5(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+ case 'm':
+ return withoutSuffix ? 'mínúta' : 'mínútu';
+ case 'mm':
+ if (plural$2(number)) {
+ return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+ } else if (withoutSuffix) {
+ return result + 'mínúta';
+ }
+ return result + 'mínútu';
+ case 'hh':
+ if (plural$2(number)) {
+ return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+ }
+ return result + 'klukkustund';
+ case 'd':
+ if (withoutSuffix) {
+ return 'dagur';
+ }
+ return isFuture ? 'dag' : 'degi';
+ case 'dd':
+ if (plural$2(number)) {
+ if (withoutSuffix) {
+ return result + 'dagar';
+ }
+ return result + (isFuture ? 'daga' : 'dögum');
+ } else if (withoutSuffix) {
+ return result + 'dagur';
+ }
+ return result + (isFuture ? 'dag' : 'degi');
+ case 'M':
+ if (withoutSuffix) {
+ return 'mánuður';
+ }
+ return isFuture ? 'mánuð' : 'mánuði';
+ case 'MM':
+ if (plural$2(number)) {
+ if (withoutSuffix) {
+ return result + 'mánuðir';
+ }
+ return result + (isFuture ? 'mánuði' : 'mánuðum');
+ } else if (withoutSuffix) {
+ return result + 'mánuður';
+ }
+ return result + (isFuture ? 'mánuð' : 'mánuði');
+ case 'y':
+ return withoutSuffix || isFuture ? 'ár' : 'ári';
+ case 'yy':
+ if (plural$2(number)) {
+ return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+ }
+ return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+ }
+}
+
+hooks.defineLocale('is', {
+ months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+ weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
+ weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+ weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
+ },
+ calendar : {
+ sameDay : '[í dag kl.] LT',
+ nextDay : '[á morgun kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[í gær kl.] LT',
+ lastWeek : '[síðasta] dddd [kl.] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'eftir %s',
+ past : 'fyrir %s síðan',
+ s : translate$5,
+ m : translate$5,
+ mm : translate$5,
+ h : 'klukkustund',
+ hh : translate$5,
+ d : translate$5,
+ dd : translate$5,
+ M : translate$5,
+ MM : translate$5,
+ y : translate$5,
+ yy : translate$5
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Italian [it]
+//! author : Lorenzo : https://github.com/aliem
+//! author: Mattia Larentis: https://github.com/nostalgiaz
+
+hooks.defineLocale('it', {
+ months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
+ monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+ weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
+ weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
+ weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Oggi alle] LT',
+ nextDay: '[Domani alle] LT',
+ nextWeek: 'dddd [alle] LT',
+ lastDay: '[Ieri alle] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[la scorsa] dddd [alle] LT';
+ default:
+ return '[lo scorso] dddd [alle] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
+ },
+ past : '%s fa',
+ s : 'alcuni secondi',
+ m : 'un minuto',
+ mm : '%d minuti',
+ h : 'un\'ora',
+ hh : '%d ore',
+ d : 'un giorno',
+ dd : '%d giorni',
+ M : 'un mese',
+ MM : '%d mesi',
+ y : 'un anno',
+ yy : '%d anni'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Japanese [ja]
+//! author : LI Long : https://github.com/baryon
+
+hooks.defineLocale('ja', {
+ months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+ weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
+ weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
+ longDateFormat : {
+ LT : 'Ah時m分',
+ LTS : 'Ah時m分s秒',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY年M月D日',
+ LLL : 'YYYY年M月D日Ah時m分',
+ LLLL : 'YYYY年M月D日Ah時m分 dddd'
+ },
+ meridiemParse: /午前|午後/i,
+ isPM : function (input) {
+ return input === '午後';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return '午前';
+ } else {
+ return '午後';
+ }
+ },
+ calendar : {
+ sameDay : '[今日] LT',
+ nextDay : '[明日] LT',
+ nextWeek : '[来週]dddd LT',
+ lastDay : '[昨日] LT',
+ lastWeek : '[前週]dddd LT',
+ sameElse : 'L'
+ },
+ ordinalParse : /\d{1,2}日/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s後',
+ past : '%s前',
+ s : '数秒',
+ m : '1分',
+ mm : '%d分',
+ h : '1時間',
+ hh : '%d時間',
+ d : '1日',
+ dd : '%d日',
+ M : '1ヶ月',
+ MM : '%dヶ月',
+ y : '1年',
+ yy : '%d年'
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Javanese [jv]
+//! author : Rony Lantip : https://github.com/lantip
+//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
+
+hooks.defineLocale('jv', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
+ weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /enjing|siyang|sonten|ndalu/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'enjing') {
+ return hour;
+ } else if (meridiem === 'siyang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'enjing';
+ } else if (hours < 15) {
+ return 'siyang';
+ } else if (hours < 19) {
+ return 'sonten';
+ } else {
+ return 'ndalu';
+ }
+ },
+ calendar : {
+ sameDay : '[Dinten puniko pukul] LT',
+ nextDay : '[Mbenjang pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kala wingi pukul] LT',
+ lastWeek : 'dddd [kepengker pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'wonten ing %s',
+ past : '%s ingkang kepengker',
+ s : 'sawetawis detik',
+ m : 'setunggal menit',
+ mm : '%d menit',
+ h : 'setunggal jam',
+ hh : '%d jam',
+ d : 'sedinten',
+ dd : '%d dinten',
+ M : 'sewulan',
+ MM : '%d wulan',
+ y : 'setaun',
+ yy : '%d taun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Georgian [ka]
+//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+
+hooks.defineLocale('ka', {
+ months : {
+ standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+ format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+ },
+ monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+ weekdays : {
+ standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+ format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+ isFormat: /(წინა|შემდეგ)/
+ },
+ weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+ weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[დღეს] LT[-ზე]',
+ nextDay : '[ხვალ] LT[-ზე]',
+ lastDay : '[გუშინ] LT[-ზე]',
+ nextWeek : '[შემდეგ] dddd LT[-ზე]',
+ lastWeek : '[წინა] dddd LT-ზე',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
+ s.replace(/ი$/, 'ში') :
+ s + 'ში';
+ },
+ past : function (s) {
+ if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
+ return s.replace(/(ი|ე)$/, 'ის წინ');
+ }
+ if ((/წელი/).test(s)) {
+ return s.replace(/წელი$/, 'წლის წინ');
+ }
+ },
+ s : 'რამდენიმე წამი',
+ m : 'წუთი',
+ mm : '%d წუთი',
+ h : 'საათი',
+ hh : '%d საათი',
+ d : 'დღე',
+ dd : '%d დღე',
+ M : 'თვე',
+ MM : '%d თვე',
+ y : 'წელი',
+ yy : '%d წელი'
+ },
+ ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
+ ordinal : function (number) {
+ if (number === 0) {
+ return number;
+ }
+ if (number === 1) {
+ return number + '-ლი';
+ }
+ if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
+ return 'მე-' + number;
+ }
+ return number + '-ე';
+ },
+ week : {
+ dow : 1,
+ doy : 7
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Kazakh [kk]
+//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
+
+var suffixes$1 = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+};
+
+hooks.defineLocale('kk', {
+ months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
+ monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+ weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
+ weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+ weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгін сағат] LT',
+ nextDay : '[Ертең сағат] LT',
+ nextWeek : 'dddd [сағат] LT',
+ lastDay : '[Кеше сағат] LT',
+ lastWeek : '[Өткен аптаның] dddd [сағат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ішінде',
+ past : '%s бұрын',
+ s : 'бірнеше секунд',
+ m : 'бір минут',
+ mm : '%d минут',
+ h : 'бір сағат',
+ hh : '%d сағат',
+ d : 'бір күн',
+ dd : '%d күн',
+ M : 'бір ай',
+ MM : '%d ай',
+ y : 'бір жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(ші|шы)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Cambodian [km]
+//! author : Kruy Vanna : https://github.com/kruyvanna
+
+hooks.defineLocale('km', {
+ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
+ nextDay: '[ស្អែក ម៉ោង] LT',
+ nextWeek: 'dddd [ម៉ោង] LT',
+ lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+ lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: '%sទៀត',
+ past: '%sមុន',
+ s: 'ប៉ុន្មានវិនាទី',
+ m: 'មួយនាទី',
+ mm: '%d នាទី',
+ h: 'មួយម៉ោង',
+ hh: '%d ម៉ោង',
+ d: 'មួយថ្ងៃ',
+ dd: '%d ថ្ងៃ',
+ M: 'មួយខែ',
+ MM: '%d ខែ',
+ y: 'មួយឆ្នាំ',
+ yy: '%d ឆ្នាំ'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Korean [ko]
+//! author : Kyungwook, Park : https://github.com/kyungw00k
+//! author : Jeeeyul Lee <jeeeyul@gmail.com>
+
+hooks.defineLocale('ko', {
+ months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+ weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
+ weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
+ longDateFormat : {
+ LT : 'A h시 m분',
+ LTS : 'A h시 m분 s초',
+ L : 'YYYY.MM.DD',
+ LL : 'YYYY년 MMMM D일',
+ LLL : 'YYYY년 MMMM D일 A h시 m분',
+ LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
+ },
+ calendar : {
+ sameDay : '오늘 LT',
+ nextDay : '내일 LT',
+ nextWeek : 'dddd LT',
+ lastDay : '어제 LT',
+ lastWeek : '지난주 dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s 후',
+ past : '%s 전',
+ s : '몇 초',
+ ss : '%d초',
+ m : '일분',
+ mm : '%d분',
+ h : '한 시간',
+ hh : '%d시간',
+ d : '하루',
+ dd : '%d일',
+ M : '한 달',
+ MM : '%d달',
+ y : '일 년',
+ yy : '%d년'
+ },
+ ordinalParse : /\d{1,2}일/,
+ ordinal : '%d일',
+ meridiemParse : /오전|오후/,
+ isPM : function (token) {
+ return token === '오후';
+ },
+ meridiem : function (hour, minute, isUpper) {
+ return hour < 12 ? '오전' : '오후';
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Kyrgyz [ky]
+//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
+
+
+var suffixes$2 = {
+ 0: '-чү',
+ 1: '-чи',
+ 2: '-чи',
+ 3: '-чү',
+ 4: '-чү',
+ 5: '-чи',
+ 6: '-чы',
+ 7: '-чи',
+ 8: '-чи',
+ 9: '-чу',
+ 10: '-чу',
+ 20: '-чы',
+ 30: '-чу',
+ 40: '-чы',
+ 50: '-чү',
+ 60: '-чы',
+ 70: '-чи',
+ 80: '-чи',
+ 90: '-чу',
+ 100: '-чү'
+};
+
+hooks.defineLocale('ky', {
+ months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
+ weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+ weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгүн саат] LT',
+ nextDay : '[Эртең саат] LT',
+ nextWeek : 'dddd [саат] LT',
+ lastDay : '[Кече саат] LT',
+ lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ичинде',
+ past : '%s мурун',
+ s : 'бирнече секунд',
+ m : 'бир мүнөт',
+ mm : '%d мүнөт',
+ h : 'бир саат',
+ hh : '%d саат',
+ d : 'бир күн',
+ dd : '%d күн',
+ M : 'бир ай',
+ MM : '%d ай',
+ y : 'бир жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Luxembourgish [lb]
+//! author : mweimerskirch : https://github.com/mweimerskirch
+//! author : David Raison : https://github.com/kwisatz
+
+function processRelativeTime$3(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eng Minutt', 'enger Minutt'],
+ 'h': ['eng Stonn', 'enger Stonn'],
+ 'd': ['een Dag', 'engem Dag'],
+ 'M': ['ee Mount', 'engem Mount'],
+ 'y': ['ee Joer', 'engem Joer']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+function processFutureTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'a ' + string;
+ }
+ return 'an ' + string;
+}
+function processPastTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'viru ' + string;
+ }
+ return 'virun ' + string;
+}
+/**
+ * Returns true if the word before the given number loses the '-n' ending.
+ * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+ *
+ * @param number {integer}
+ * @returns {boolean}
+ */
+function eifelerRegelAppliesToNumber(number) {
+ number = parseInt(number, 10);
+ if (isNaN(number)) {
+ return false;
+ }
+ if (number < 0) {
+ // Negative Number --> always true
+ return true;
+ } else if (number < 10) {
+ // Only 1 digit
+ if (4 <= number && number <= 7) {
+ return true;
+ }
+ return false;
+ } else if (number < 100) {
+ // 2 digits
+ var lastDigit = number % 10, firstDigit = number / 10;
+ if (lastDigit === 0) {
+ return eifelerRegelAppliesToNumber(firstDigit);
+ }
+ return eifelerRegelAppliesToNumber(lastDigit);
+ } else if (number < 10000) {
+ // 3 or 4 digits --> recursively check first digit
+ while (number >= 10) {
+ number = number / 10;
+ }
+ return eifelerRegelAppliesToNumber(number);
+ } else {
+ // Anything larger than 4 digits: recursively check first n-3 digits
+ number = number / 1000;
+ return eifelerRegelAppliesToNumber(number);
+ }
+}
+
+hooks.defineLocale('lb', {
+ months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
+ weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+ weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm [Auer]',
+ LTS: 'H:mm:ss [Auer]',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm [Auer]',
+ LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
+ },
+ calendar: {
+ sameDay: '[Haut um] LT',
+ sameElse: 'L',
+ nextDay: '[Muer um] LT',
+ nextWeek: 'dddd [um] LT',
+ lastDay: '[Gëschter um] LT',
+ lastWeek: function () {
+ // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+ switch (this.day()) {
+ case 2:
+ case 4:
+ return '[Leschten] dddd [um] LT';
+ default:
+ return '[Leschte] dddd [um] LT';
+ }
+ }
+ },
+ relativeTime : {
+ future : processFutureTime,
+ past : processPastTime,
+ s : 'e puer Sekonnen',
+ m : processRelativeTime$3,
+ mm : '%d Minutten',
+ h : processRelativeTime$3,
+ hh : '%d Stonnen',
+ d : processRelativeTime$3,
+ dd : '%d Deeg',
+ M : processRelativeTime$3,
+ MM : '%d Méint',
+ y : processRelativeTime$3,
+ yy : '%d Joer'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal: '%d.',
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Lao [lo]
+//! author : Ryan Hart : https://github.com/ryanhart2
+
+hooks.defineLocale('lo', {
+ months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+ isPM: function (input) {
+ return input === 'ຕອນແລງ';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ຕອນເຊົ້າ';
+ } else {
+ return 'ຕອນແລງ';
+ }
+ },
+ calendar : {
+ sameDay : '[ມື້ນີ້ເວລາ] LT',
+ nextDay : '[ມື້ອື່ນເວລາ] LT',
+ nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
+ lastDay : '[ມື້ວານນີ້ເວລາ] LT',
+ lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ອີກ %s',
+ past : '%sຜ່ານມາ',
+ s : 'ບໍ່ເທົ່າໃດວິນາທີ',
+ m : '1 ນາທີ',
+ mm : '%d ນາທີ',
+ h : '1 ຊົ່ວໂມງ',
+ hh : '%d ຊົ່ວໂມງ',
+ d : '1 ມື້',
+ dd : '%d ມື້',
+ M : '1 ເດືອນ',
+ MM : '%d ເດືອນ',
+ y : '1 ປີ',
+ yy : '%d ປີ'
+ },
+ ordinalParse: /(ທີ່)\d{1,2}/,
+ ordinal : function (number) {
+ return 'ທີ່' + number;
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Lithuanian [lt]
+//! author : Mindaugas Mozūras : https://github.com/mmozuras
+
+var units = {
+ 'm' : 'minutė_minutės_minutę',
+ 'mm': 'minutės_minučių_minutes',
+ 'h' : 'valanda_valandos_valandą',
+ 'hh': 'valandos_valandų_valandas',
+ 'd' : 'diena_dienos_dieną',
+ 'dd': 'dienos_dienų_dienas',
+ 'M' : 'mėnuo_mėnesio_mėnesį',
+ 'MM': 'mėnesiai_mėnesių_mėnesius',
+ 'y' : 'metai_metų_metus',
+ 'yy': 'metai_metų_metus'
+};
+function translateSeconds(number, withoutSuffix, key, isFuture) {
+ if (withoutSuffix) {
+ return 'kelios sekundės';
+ } else {
+ return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+ }
+}
+function translateSingular(number, withoutSuffix, key, isFuture) {
+ return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
+}
+function special(number) {
+ return number % 10 === 0 || (number > 10 && number < 20);
+}
+function forms(key) {
+ return units[key].split('_');
+}
+function translate$6(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ if (number === 1) {
+ return result + translateSingular(number, withoutSuffix, key[0], isFuture);
+ } else if (withoutSuffix) {
+ return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+ } else {
+ if (isFuture) {
+ return result + forms(key)[1];
+ } else {
+ return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+ }
+ }
+}
+hooks.defineLocale('lt', {
+ months : {
+ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
+ isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
+ },
+ monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+ weekdays : {
+ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
+ standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
+ isFormat: /dddd HH:mm/
+ },
+ weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+ weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY [m.] MMMM D [d.]',
+ LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY [m.] MMMM D [d.]',
+ lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
+ },
+ calendar : {
+ sameDay : '[Šiandien] LT',
+ nextDay : '[Rytoj] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[Vakar] LT',
+ lastWeek : '[Praėjusį] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'po %s',
+ past : 'prieš %s',
+ s : translateSeconds,
+ m : translateSingular,
+ mm : translate$6,
+ h : translateSingular,
+ hh : translate$6,
+ d : translateSingular,
+ dd : translate$6,
+ M : translateSingular,
+ MM : translate$6,
+ y : translateSingular,
+ yy : translate$6
+ },
+ ordinalParse: /\d{1,2}-oji/,
+ ordinal : function (number) {
+ return number + '-oji';
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Latvian [lv]
+//! author : Kristaps Karlsons : https://github.com/skakri
+//! author : Jānis Elmeris : https://github.com/JanisE
+
+var units$1 = {
+ 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'h': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'hh': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'dd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'y': 'gada_gadiem_gads_gadi'.split('_'),
+ 'yy': 'gada_gadiem_gads_gadi'.split('_')
+};
+/**
+ * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+ */
+function format$1(forms, number, withoutSuffix) {
+ if (withoutSuffix) {
+ // E.g. "21 minūte", "3 minūtes".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
+ } else {
+ // E.g. "21 minūtes" as in "pēc 21 minūtes".
+ // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
+ }
+}
+function relativeTimeWithPlural$1(number, withoutSuffix, key) {
+ return number + ' ' + format$1(units$1[key], number, withoutSuffix);
+}
+function relativeTimeWithSingular(number, withoutSuffix, key) {
+ return format$1(units$1[key], number, withoutSuffix);
+}
+function relativeSeconds(number, withoutSuffix) {
+ return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
+}
+
+hooks.defineLocale('lv', {
+ months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
+ weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY.',
+ LL : 'YYYY. [gada] D. MMMM',
+ LLL : 'YYYY. [gada] D. MMMM, HH:mm',
+ LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
+ },
+ calendar : {
+ sameDay : '[Šodien pulksten] LT',
+ nextDay : '[Rīt pulksten] LT',
+ nextWeek : 'dddd [pulksten] LT',
+ lastDay : '[Vakar pulksten] LT',
+ lastWeek : '[Pagājušā] dddd [pulksten] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'pēc %s',
+ past : 'pirms %s',
+ s : relativeSeconds,
+ m : relativeTimeWithSingular,
+ mm : relativeTimeWithPlural$1,
+ h : relativeTimeWithSingular,
+ hh : relativeTimeWithPlural$1,
+ d : relativeTimeWithSingular,
+ dd : relativeTimeWithPlural$1,
+ M : relativeTimeWithSingular,
+ MM : relativeTimeWithPlural$1,
+ y : relativeTimeWithSingular,
+ yy : relativeTimeWithPlural$1
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Montenegrin [me]
+//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jednog minuta'],
+ mm: ['minut', 'minuta', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mjesec', 'mjeseca', 'mjeseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+hooks.defineLocale('me', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sjutra u] LT',
+
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedjelje] [u] LT',
+ '[prošlog] [ponedjeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srijede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'nekoliko sekundi',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'dan',
+ dd : translator.translate,
+ M : 'mjesec',
+ MM : translator.translate,
+ y : 'godinu',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Maori [mi]
+//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
+
+hooks.defineLocale('mi', {
+ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
+ monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
+ monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+ weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+ weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY [i] HH:mm',
+ LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
+ },
+ calendar: {
+ sameDay: '[i teie mahana, i] LT',
+ nextDay: '[apopo i] LT',
+ nextWeek: 'dddd [i] LT',
+ lastDay: '[inanahi i] LT',
+ lastWeek: 'dddd [whakamutunga i] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'i roto i %s',
+ past: '%s i mua',
+ s: 'te hēkona ruarua',
+ m: 'he meneti',
+ mm: '%d meneti',
+ h: 'te haora',
+ hh: '%d haora',
+ d: 'he ra',
+ dd: '%d ra',
+ M: 'he marama',
+ MM: '%d marama',
+ y: 'he tau',
+ yy: '%d tau'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Macedonian [mk]
+//! author : Borislav Mickov : https://github.com/B0k0
+
+hooks.defineLocale('mk', {
+ months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+ weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Денес во] LT',
+ nextDay : '[Утре во] LT',
+ nextWeek : '[Во] dddd [во] LT',
+ lastDay : '[Вчера во] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'после %s',
+ past : 'пред %s',
+ s : 'неколку секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дена',
+ M : 'месец',
+ MM : '%d месеци',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Malayalam [ml]
+//! author : Floyd Pink : https://github.com/floydpink
+
+hooks.defineLocale('ml', {
+ months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
+ monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
+ weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+ weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm -നു',
+ LTS : 'A h:mm:ss -നു',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm -നു',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
+ },
+ calendar : {
+ sameDay : '[ഇന്ന്] LT',
+ nextDay : '[നാളെ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ഇന്നലെ] LT',
+ lastWeek : '[കഴിഞ്ഞ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s കഴിഞ്ഞ്',
+ past : '%s മുൻപ്',
+ s : 'അൽപ നിമിഷങ്ങൾ',
+ m : 'ഒരു മിനിറ്റ്',
+ mm : '%d മിനിറ്റ്',
+ h : 'ഒരു മണിക്കൂർ',
+ hh : '%d മണിക്കൂർ',
+ d : 'ഒരു ദിവസം',
+ dd : '%d ദിവസം',
+ M : 'ഒരു മാസം',
+ MM : '%d മാസം',
+ y : 'ഒരു വർഷം',
+ yy : '%d വർഷം'
+ },
+ meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'രാത്രി' && hour >= 4) ||
+ meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+ meridiem === 'വൈകുന്നേരം') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'രാത്രി';
+ } else if (hour < 12) {
+ return 'രാവിലെ';
+ } else if (hour < 17) {
+ return 'ഉച്ച കഴിഞ്ഞ്';
+ } else if (hour < 20) {
+ return 'വൈകുന്നേരം';
+ } else {
+ return 'രാത്രി';
+ }
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Marathi [mr]
+//! author : Harshad Kale : https://github.com/kalehv
+//! author : Vivek Athalye : https://github.com/vnathalye
+
+var symbolMap$7 = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap$6 = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+function relativeTimeMr(number, withoutSuffix, string, isFuture)
+{
+ var output = '';
+ if (withoutSuffix) {
+ switch (string) {
+ case 's': output = 'काही सेकंद'; break;
+ case 'm': output = 'एक मिनिट'; break;
+ case 'mm': output = '%d मिनिटे'; break;
+ case 'h': output = 'एक तास'; break;
+ case 'hh': output = '%d तास'; break;
+ case 'd': output = 'एक दिवस'; break;
+ case 'dd': output = '%d दिवस'; break;
+ case 'M': output = 'एक महिना'; break;
+ case 'MM': output = '%d महिने'; break;
+ case 'y': output = 'एक वर्ष'; break;
+ case 'yy': output = '%d वर्षे'; break;
+ }
+ }
+ else {
+ switch (string) {
+ case 's': output = 'काही सेकंदां'; break;
+ case 'm': output = 'एका मिनिटा'; break;
+ case 'mm': output = '%d मिनिटां'; break;
+ case 'h': output = 'एका तासा'; break;
+ case 'hh': output = '%d तासां'; break;
+ case 'd': output = 'एका दिवसा'; break;
+ case 'dd': output = '%d दिवसां'; break;
+ case 'M': output = 'एका महिन्या'; break;
+ case 'MM': output = '%d महिन्यां'; break;
+ case 'y': output = 'एका वर्षा'; break;
+ case 'yy': output = '%d वर्षां'; break;
+ }
+ }
+ return output.replace(/%d/i, number);
+}
+
+hooks.defineLocale('mr', {
+ months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
+ monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm वाजता',
+ LTS : 'A h:mm:ss वाजता',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm वाजता',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[उद्या] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[काल] LT',
+ lastWeek: '[मागील] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future: '%sमध्ये',
+ past: '%sपूर्वी',
+ s: relativeTimeMr,
+ m: relativeTimeMr,
+ mm: relativeTimeMr,
+ h: relativeTimeMr,
+ hh: relativeTimeMr,
+ d: relativeTimeMr,
+ dd: relativeTimeMr,
+ M: relativeTimeMr,
+ MM: relativeTimeMr,
+ y: relativeTimeMr,
+ yy: relativeTimeMr
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap$6[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$7[match];
+ });
+ },
+ meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात्री') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सकाळी') {
+ return hour;
+ } else if (meridiem === 'दुपारी') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'सायंकाळी') {
+ return hour + 12;
+ }
+ },
+ meridiem: function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात्री';
+ } else if (hour < 10) {
+ return 'सकाळी';
+ } else if (hour < 17) {
+ return 'दुपारी';
+ } else if (hour < 20) {
+ return 'सायंकाळी';
+ } else {
+ return 'रात्री';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Malay [ms-my]
+//! note : DEPRECATED, the correct one is [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+hooks.defineLocale('ms-my', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Malay [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+hooks.defineLocale('ms', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Burmese [my]
+//! author : Squar team, mysquar.com
+//! author : David Rossellat : https://github.com/gholadr
+//! author : Tin Aung Lin : https://github.com/thanyawzinmin
+
+var symbolMap$8 = {
+ '1': '၁',
+ '2': '၂',
+ '3': '၃',
+ '4': '၄',
+ '5': '၅',
+ '6': '၆',
+ '7': '၇',
+ '8': '၈',
+ '9': '၉',
+ '0': '၀'
+};
+var numberMap$7 = {
+ '၁': '1',
+ '၂': '2',
+ '၃': '3',
+ '၄': '4',
+ '၅': '5',
+ '၆': '6',
+ '၇': '7',
+ '၈': '8',
+ '၉': '9',
+ '၀': '0'
+};
+
+hooks.defineLocale('my', {
+ months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
+ monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+ weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
+ weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+ weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ယနေ.] LT [မှာ]',
+ nextDay: '[မနက်ဖြန်] LT [မှာ]',
+ nextWeek: 'dddd LT [မှာ]',
+ lastDay: '[မနေ.က] LT [မှာ]',
+ lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'လာမည့် %s မှာ',
+ past: 'လွန်ခဲ့သော %s က',
+ s: 'စက္ကန်.အနည်းငယ်',
+ m: 'တစ်မိနစ်',
+ mm: '%d မိနစ်',
+ h: 'တစ်နာရီ',
+ hh: '%d နာရီ',
+ d: 'တစ်ရက်',
+ dd: '%d ရက်',
+ M: 'တစ်လ',
+ MM: '%d လ',
+ y: 'တစ်နှစ်',
+ yy: '%d နှစ်'
+ },
+ preparse: function (string) {
+ return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+ return numberMap$7[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$8[match];
+ });
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Norwegian Bokmål [nb]
+//! authors : Espen Hovlandsdal : https://github.com/rexxars
+//! Sigurd Gartmann : https://github.com/sigurdga
+
+hooks.defineLocale('nb', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[i dag kl.] LT',
+ nextDay: '[i morgen kl.] LT',
+ nextWeek: 'dddd [kl.] LT',
+ lastDay: '[i går kl.] LT',
+ lastWeek: '[forrige] dddd [kl.] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'noen sekunder',
+ m : 'ett minutt',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dager',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Nepalese [ne]
+//! author : suvash : https://github.com/suvash
+
+var symbolMap$9 = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+};
+var numberMap$8 = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+hooks.defineLocale('ne', {
+ months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
+ monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
+ weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+ weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'Aको h:mm बजे',
+ LTS : 'Aको h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, Aको h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap$8[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$9[match];
+ });
+ },
+ meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'राति') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'बिहान') {
+ return hour;
+ } else if (meridiem === 'दिउँसो') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'साँझ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 3) {
+ return 'राति';
+ } else if (hour < 12) {
+ return 'बिहान';
+ } else if (hour < 16) {
+ return 'दिउँसो';
+ } else if (hour < 20) {
+ return 'साँझ';
+ } else {
+ return 'राति';
+ }
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[भोलि] LT',
+ nextWeek : '[आउँदो] dddd[,] LT',
+ lastDay : '[हिजो] LT',
+ lastWeek : '[गएको] dddd[,] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sमा',
+ past : '%s अगाडि',
+ s : 'केही क्षण',
+ m : 'एक मिनेट',
+ mm : '%d मिनेट',
+ h : 'एक घण्टा',
+ hh : '%d घण्टा',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महिना',
+ MM : '%d महिना',
+ y : 'एक बर्ष',
+ yy : '%d बर्ष'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Dutch (Belgium) [nl-be]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+var monthsShortWithDots$1 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
+var monthsShortWithoutDots$1 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex$1 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+hooks.defineLocale('nl-be', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots$1[m.month()];
+ } else {
+ return monthsShortWithDots$1[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex$1,
+ monthsShortRegex: monthsRegex$1,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Dutch [nl]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+var monthsShortWithDots$2 = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');
+var monthsShortWithoutDots$2 = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse$1 = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex$2 = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+hooks.defineLocale('nl', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots$2[m.month()];
+ } else {
+ return monthsShortWithDots$2[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex$2,
+ monthsShortRegex: monthsRegex$2,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse$1,
+ longMonthsParse : monthsParse$1,
+ shortMonthsParse : monthsParse$1,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Nynorsk [nn]
+//! author : https://github.com/mechuwind
+
+hooks.defineLocale('nn', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+ weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
+ weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[I dag klokka] LT',
+ nextDay: '[I morgon klokka] LT',
+ nextWeek: 'dddd [klokka] LT',
+ lastDay: '[I går klokka] LT',
+ lastWeek: '[Føregåande] dddd [klokka] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s sidan',
+ s : 'nokre sekund',
+ m : 'eit minutt',
+ mm : '%d minutt',
+ h : 'ein time',
+ hh : '%d timar',
+ d : 'ein dag',
+ dd : '%d dagar',
+ M : 'ein månad',
+ MM : '%d månader',
+ y : 'eit år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Punjabi (India) [pa-in]
+//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
+
+var symbolMap$10 = {
+ '1': '੧',
+ '2': '੨',
+ '3': '੩',
+ '4': '੪',
+ '5': '੫',
+ '6': '੬',
+ '7': '੭',
+ '8': '੮',
+ '9': '੯',
+ '0': '੦'
+};
+var numberMap$9 = {
+ '੧': '1',
+ '੨': '2',
+ '੩': '3',
+ '੪': '4',
+ '੫': '5',
+ '੬': '6',
+ '੭': '7',
+ '੮': '8',
+ '੯': '9',
+ '੦': '0'
+};
+
+hooks.defineLocale('pa-in', {
+ // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+ months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
+ weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm ਵਜੇ',
+ LTS : 'A h:mm:ss ਵਜੇ',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
+ },
+ calendar : {
+ sameDay : '[ਅਜ] LT',
+ nextDay : '[ਕਲ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ਕਲ] LT',
+ lastWeek : '[ਪਿਛਲੇ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ਵਿੱਚ',
+ past : '%s ਪਿਛਲੇ',
+ s : 'ਕੁਝ ਸਕਿੰਟ',
+ m : 'ਇਕ ਮਿੰਟ',
+ mm : '%d ਮਿੰਟ',
+ h : 'ਇੱਕ ਘੰਟਾ',
+ hh : '%d ਘੰਟੇ',
+ d : 'ਇੱਕ ਦਿਨ',
+ dd : '%d ਦਿਨ',
+ M : 'ਇੱਕ ਮਹੀਨਾ',
+ MM : '%d ਮਹੀਨੇ',
+ y : 'ਇੱਕ ਸਾਲ',
+ yy : '%d ਸਾਲ'
+ },
+ preparse: function (string) {
+ return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+ return numberMap$9[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$10[match];
+ });
+ },
+ // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+ meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ਰਾਤ') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ਸਵੇਰ') {
+ return hour;
+ } else if (meridiem === 'ਦੁਪਹਿਰ') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'ਸ਼ਾਮ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ਰਾਤ';
+ } else if (hour < 10) {
+ return 'ਸਵੇਰ';
+ } else if (hour < 17) {
+ return 'ਦੁਪਹਿਰ';
+ } else if (hour < 20) {
+ return 'ਸ਼ਾਮ';
+ } else {
+ return 'ਰਾਤ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Polish [pl]
+//! author : Rafal Hirsz : https://github.com/evoL
+
+var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');
+var monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
+function plural$3(n) {
+ return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
+}
+function translate$7(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'minuta' : 'minutę';
+ case 'mm':
+ return result + (plural$3(number) ? 'minuty' : 'minut');
+ case 'h':
+ return withoutSuffix ? 'godzina' : 'godzinę';
+ case 'hh':
+ return result + (plural$3(number) ? 'godziny' : 'godzin');
+ case 'MM':
+ return result + (plural$3(number) ? 'miesiące' : 'miesięcy');
+ case 'yy':
+ return result + (plural$3(number) ? 'lata' : 'lat');
+ }
+}
+
+hooks.defineLocale('pl', {
+ months : function (momentToFormat, format) {
+ if (format === '') {
+ // Hack: if format empty we know this is used to generate
+ // RegExp by moment. Give then back both valid forms of months
+ // in RegExp ready format.
+ return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
+ } else if (/D MMMM/.test(format)) {
+ return monthsSubjective[momentToFormat.month()];
+ } else {
+ return monthsNominative[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+ weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
+ weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
+ weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Dziś o] LT',
+ nextDay: '[Jutro o] LT',
+ nextWeek: '[W] dddd [o] LT',
+ lastDay: '[Wczoraj o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : '%s temu',
+ s : 'kilka sekund',
+ m : translate$7,
+ mm : translate$7,
+ h : translate$7,
+ hh : translate$7,
+ d : '1 dzień',
+ dd : '%d dni',
+ M : 'miesiąc',
+ MM : translate$7,
+ y : 'rok',
+ yy : translate$7
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Portuguese (Brazil) [pt-br]
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+hooks.defineLocale('pt-br', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : '%s atrás',
+ s : 'poucos segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº'
+});
+
+//! moment.js locale configuration
+//! locale : Portuguese [pt]
+//! author : Jefferson : https://github.com/jalex79
+
+hooks.defineLocale('pt', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : 'há %s',
+ s : 'segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Romanian [ro]
+//! author : Vlad Gurdiga : https://github.com/gurdiga
+//! author : Valentin Agachi : https://github.com/avaly
+
+function relativeTimeWithPlural$2(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'minute',
+ 'hh': 'ore',
+ 'dd': 'zile',
+ 'MM': 'luni',
+ 'yy': 'ani'
+ },
+ separator = ' ';
+ if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+ separator = ' de ';
+ }
+ return number + separator + format[key];
+}
+
+hooks.defineLocale('ro', {
+ months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
+ monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+ weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+ weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[azi la] LT',
+ nextDay: '[mâine la] LT',
+ nextWeek: 'dddd [la] LT',
+ lastDay: '[ieri la] LT',
+ lastWeek: '[fosta] dddd [la] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'peste %s',
+ past : '%s în urmă',
+ s : 'câteva secunde',
+ m : 'un minut',
+ mm : relativeTimeWithPlural$2,
+ h : 'o oră',
+ hh : relativeTimeWithPlural$2,
+ d : 'o zi',
+ dd : relativeTimeWithPlural$2,
+ M : 'o lună',
+ MM : relativeTimeWithPlural$2,
+ y : 'un an',
+ yy : relativeTimeWithPlural$2
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Russian [ru]
+//! author : Viktorminator : https://github.com/Viktorminator
+//! Author : Menelion Elensúle : https://github.com/Oire
+//! author : Коренберг Марк : https://github.com/socketpair
+
+function plural$4(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural$3(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+ 'hh': 'час_часа_часов',
+ 'dd': 'день_дня_дней',
+ 'MM': 'месяц_месяца_месяцев',
+ 'yy': 'год_года_лет'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'минута' : 'минуту';
+ }
+ else {
+ return number + ' ' + plural$4(format[key], +number);
+ }
+}
+var monthsParse$2 = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
+
+// http://new.gramota.ru/spravka/rules/139-prop : § 103
+// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+hooks.defineLocale('ru', {
+ months : {
+ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
+ standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
+ },
+ monthsShort : {
+ // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+ format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
+ standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
+ },
+ weekdays : {
+ standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+ format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
+ },
+ weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ monthsParse : monthsParse$2,
+ longMonthsParse : monthsParse$2,
+ shortMonthsParse : monthsParse$2,
+
+ // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+ monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // копия предыдущего
+ monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // полные названия с падежами
+ monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+ // Выражение, которое соотвествует только сокращённым формам
+ monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сегодня в] LT',
+ nextDay: '[Завтра в] LT',
+ lastDay: '[Вчера в] LT',
+ nextWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ lastWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'через %s',
+ past : '%s назад',
+ s : 'несколько секунд',
+ m : relativeTimeWithPlural$3,
+ mm : relativeTimeWithPlural$3,
+ h : 'час',
+ hh : relativeTimeWithPlural$3,
+ d : 'день',
+ dd : relativeTimeWithPlural$3,
+ M : 'месяц',
+ MM : relativeTimeWithPlural$3,
+ y : 'год',
+ yy : relativeTimeWithPlural$3
+ },
+ meridiemParse: /ночи|утра|дня|вечера/i,
+ isPM : function (input) {
+ return /^(дня|вечера)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночи';
+ } else if (hour < 12) {
+ return 'утра';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечера';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го|я)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ case 'w':
+ case 'W':
+ return number + '-я';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Northern Sami [se]
+//! authors : Bård Rolstad Henriksen : https://github.com/karamell
+
+
+hooks.defineLocale('se', {
+ months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
+ monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
+ weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
+ weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+ weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'MMMM D. [b.] YYYY',
+ LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
+ LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[otne ti] LT',
+ nextDay: '[ihttin ti] LT',
+ nextWeek: 'dddd [ti] LT',
+ lastDay: '[ikte ti] LT',
+ lastWeek: '[ovddit] dddd [ti] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s geažes',
+ past : 'maŋit %s',
+ s : 'moadde sekunddat',
+ m : 'okta minuhta',
+ mm : '%d minuhtat',
+ h : 'okta diimmu',
+ hh : '%d diimmut',
+ d : 'okta beaivi',
+ dd : '%d beaivvit',
+ M : 'okta mánnu',
+ MM : '%d mánut',
+ y : 'okta jahki',
+ yy : '%d jagit'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Sinhalese [si]
+//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
+
+/*jshint -W100*/
+hooks.defineLocale('si', {
+ months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
+ monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
+ weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
+ weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
+ weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'a h:mm',
+ LTS : 'a h:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY MMMM D',
+ LLL : 'YYYY MMMM D, a h:mm',
+ LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
+ },
+ calendar : {
+ sameDay : '[අද] LT[ට]',
+ nextDay : '[හෙට] LT[ට]',
+ nextWeek : 'dddd LT[ට]',
+ lastDay : '[ඊයේ] LT[ට]',
+ lastWeek : '[පසුගිය] dddd LT[ට]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sකින්',
+ past : '%sකට පෙර',
+ s : 'තත්පර කිහිපය',
+ m : 'මිනිත්තුව',
+ mm : 'මිනිත්තු %d',
+ h : 'පැය',
+ hh : 'පැය %d',
+ d : 'දිනය',
+ dd : 'දින %d',
+ M : 'මාසය',
+ MM : 'මාස %d',
+ y : 'වසර',
+ yy : 'වසර %d'
+ },
+ ordinalParse: /\d{1,2} වැනි/,
+ ordinal : function (number) {
+ return number + ' වැනි';
+ },
+ meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+ isPM : function (input) {
+ return input === 'ප.ව.' || input === 'පස් වරු';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'ප.ව.' : 'පස් වරු';
+ } else {
+ return isLower ? 'පෙ.ව.' : 'පෙර වරු';
+ }
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Slovak [sk]
+//! author : Martin Minka : https://github.com/k2s
+//! based on work of petrbela : https://github.com/petrbela
+
+var months$6 = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');
+var monthsShort$4 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+function plural$5(n) {
+ return (n > 1) && (n < 5);
+}
+function translate$8(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'minúty' : 'minút');
+ } else {
+ return result + 'minútami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'hodiny' : 'hodín');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'dni' : 'dní');
+ } else {
+ return result + 'dňami';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'mesiace' : 'mesiacov');
+ } else {
+ return result + 'mesiacmi';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural$5(number) ? 'roky' : 'rokov');
+ } else {
+ return result + 'rokmi';
+ }
+ break;
+ }
+}
+
+hooks.defineLocale('sk', {
+ months : months$6,
+ monthsShort : monthsShort$4,
+ weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+ weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
+ weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[dnes o] LT',
+ nextDay: '[zajtra o] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [o] LT';
+ case 3:
+ return '[v stredu o] LT';
+ case 4:
+ return '[vo štvrtok o] LT';
+ case 5:
+ return '[v piatok o] LT';
+ case 6:
+ return '[v sobotu o] LT';
+ }
+ },
+ lastDay: '[včera o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulú nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[minulý] dddd [o] LT';
+ case 3:
+ return '[minulú stredu o] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [o] LT';
+ case 6:
+ return '[minulú sobotu o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pred %s',
+ s : translate$8,
+ m : translate$8,
+ mm : translate$8,
+ h : translate$8,
+ hh : translate$8,
+ d : translate$8,
+ dd : translate$8,
+ M : translate$8,
+ MM : translate$8,
+ y : translate$8,
+ yy : translate$8
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Slovenian [sl]
+//! author : Robert Sedovšek : https://github.com/sedovsek
+
+function processRelativeTime$4(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
+ case 'm':
+ return withoutSuffix ? 'ena minuta' : 'eno minuto';
+ case 'mm':
+ if (number === 1) {
+ result += withoutSuffix ? 'minuta' : 'minuto';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+ } else {
+ result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'ena ura' : 'eno uro';
+ case 'hh':
+ if (number === 1) {
+ result += withoutSuffix ? 'ura' : 'uro';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'uri' : 'urama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'ure' : 'urami';
+ } else {
+ result += withoutSuffix || isFuture ? 'ur' : 'urami';
+ }
+ return result;
+ case 'd':
+ return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+ case 'dd':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+ } else {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+ }
+ return result;
+ case 'M':
+ return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+ case 'MM':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+ } else {
+ result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+ }
+ return result;
+ case 'y':
+ return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+ case 'yy':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'leto' : 'letom';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'leta' : 'leti';
+ } else {
+ result += withoutSuffix || isFuture ? 'let' : 'leti';
+ }
+ return result;
+ }
+}
+
+hooks.defineLocale('sl', {
+ months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+ weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+ weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danes ob] LT',
+ nextDay : '[jutri ob] LT',
+
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
+ }
+ },
+ lastDay : '[včeraj ob] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'čez %s',
+ past : 'pred %s',
+ s : processRelativeTime$4,
+ m : processRelativeTime$4,
+ mm : processRelativeTime$4,
+ h : processRelativeTime$4,
+ hh : processRelativeTime$4,
+ d : processRelativeTime$4,
+ dd : processRelativeTime$4,
+ M : processRelativeTime$4,
+ MM : processRelativeTime$4,
+ y : processRelativeTime$4,
+ yy : processRelativeTime$4
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Albanian [sq]
+//! author : Flakërim Ismani : https://github.com/flakerimi
+//! author : Menelion Elensúle : https://github.com/Oire
+//! author : Oerd Cukalla : https://github.com/oerd
+
+hooks.defineLocale('sq', {
+ months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
+ monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+ weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
+ weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+ weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /PD|MD/,
+ isPM: function (input) {
+ return input.charAt(0) === 'M';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ return hours < 12 ? 'PD' : 'MD';
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Sot në] LT',
+ nextDay : '[Nesër në] LT',
+ nextWeek : 'dddd [në] LT',
+ lastDay : '[Dje në] LT',
+ lastWeek : 'dddd [e kaluar në] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'në %s',
+ past : '%s më parë',
+ s : 'disa sekonda',
+ m : 'një minutë',
+ mm : '%d minuta',
+ h : 'një orë',
+ hh : '%d orë',
+ d : 'një ditë',
+ dd : '%d ditë',
+ M : 'një muaj',
+ MM : '%d muaj',
+ y : 'një vit',
+ yy : '%d vite'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Serbian Cyrillic [sr-cyrl]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+var translator$1 = {
+ words: { //Different grammatical cases
+ m: ['један минут', 'једне минуте'],
+ mm: ['минут', 'минуте', 'минута'],
+ h: ['један сат', 'једног сата'],
+ hh: ['сат', 'сата', 'сати'],
+ dd: ['дан', 'дана', 'дана'],
+ MM: ['месец', 'месеца', 'месеци'],
+ yy: ['година', 'године', 'година']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator$1.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator$1.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+hooks.defineLocale('sr-cyrl', {
+ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+ monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+ weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+ weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[данас у] LT',
+ nextDay: '[сутра у] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
+ }
+ },
+ lastDay : '[јуче у] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[прошле] [недеље] [у] LT',
+ '[прошлог] [понедељка] [у] LT',
+ '[прошлог] [уторка] [у] LT',
+ '[прошле] [среде] [у] LT',
+ '[прошлог] [четвртка] [у] LT',
+ '[прошлог] [петка] [у] LT',
+ '[прошле] [суботе] [у] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : 'пре %s',
+ s : 'неколико секунди',
+ m : translator$1.translate,
+ mm : translator$1.translate,
+ h : translator$1.translate,
+ hh : translator$1.translate,
+ d : 'дан',
+ dd : translator$1.translate,
+ M : 'месец',
+ MM : translator$1.translate,
+ y : 'годину',
+ yy : translator$1.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Serbian [sr]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+var translator$2 = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jedne minute'],
+ mm: ['minut', 'minute', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mesec', 'meseca', 'meseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator$2.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator$2.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+hooks.defineLocale('sr', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sutra u] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedelje] [u] LT',
+ '[prošlog] [ponedeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pre %s',
+ s : 'nekoliko sekundi',
+ m : translator$2.translate,
+ mm : translator$2.translate,
+ h : translator$2.translate,
+ hh : translator$2.translate,
+ d : 'dan',
+ dd : translator$2.translate,
+ M : 'mesec',
+ MM : translator$2.translate,
+ y : 'godinu',
+ yy : translator$2.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : siSwati [ss]
+//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
+
+
+hooks.defineLocale('ss', {
+ months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
+ monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+ weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
+ weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+ weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Namuhla nga] LT',
+ nextDay : '[Kusasa nga] LT',
+ nextWeek : 'dddd [nga] LT',
+ lastDay : '[Itolo nga] LT',
+ lastWeek : 'dddd [leliphelile] [nga] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'nga %s',
+ past : 'wenteka nga %s',
+ s : 'emizuzwana lomcane',
+ m : 'umzuzu',
+ mm : '%d emizuzu',
+ h : 'lihora',
+ hh : '%d emahora',
+ d : 'lilanga',
+ dd : '%d emalanga',
+ M : 'inyanga',
+ MM : '%d tinyanga',
+ y : 'umnyaka',
+ yy : '%d iminyaka'
+ },
+ meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'ekuseni';
+ } else if (hours < 15) {
+ return 'emini';
+ } else if (hours < 19) {
+ return 'entsambama';
+ } else {
+ return 'ebusuku';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ekuseni') {
+ return hour;
+ } else if (meridiem === 'emini') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+ if (hour === 0) {
+ return 0;
+ }
+ return hour + 12;
+ }
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : '%d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Swedish [sv]
+//! author : Jens Alm : https://github.com/ulmus
+
+hooks.defineLocale('sv', {
+ months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+ weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+ weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Idag] LT',
+ nextDay: '[Imorgon] LT',
+ lastDay: '[Igår] LT',
+ nextWeek: '[På] dddd LT',
+ lastWeek: '[I] dddd[s] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : 'för %s sedan',
+ s : 'några sekunder',
+ m : 'en minut',
+ mm : '%d minuter',
+ h : 'en timme',
+ hh : '%d timmar',
+ d : 'en dag',
+ dd : '%d dagar',
+ M : 'en månad',
+ MM : '%d månader',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}(e|a)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'e' :
+ (b === 1) ? 'a' :
+ (b === 2) ? 'a' :
+ (b === 3) ? 'e' : 'e';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Swahili [sw]
+//! author : Fahad Kassim : https://github.com/fadsel
+
+hooks.defineLocale('sw', {
+ months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
+ weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+ weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[leo saa] LT',
+ nextDay : '[kesho saa] LT',
+ nextWeek : '[wiki ijayo] dddd [saat] LT',
+ lastDay : '[jana] LT',
+ lastWeek : '[wiki iliyopita] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s baadaye',
+ past : 'tokea %s',
+ s : 'hivi punde',
+ m : 'dakika moja',
+ mm : 'dakika %d',
+ h : 'saa limoja',
+ hh : 'masaa %d',
+ d : 'siku moja',
+ dd : 'masiku %d',
+ M : 'mwezi mmoja',
+ MM : 'miezi %d',
+ y : 'mwaka mmoja',
+ yy : 'miaka %d'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tamil [ta]
+//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+
+var symbolMap$11 = {
+ '1': '௧',
+ '2': '௨',
+ '3': '௩',
+ '4': '௪',
+ '5': '௫',
+ '6': '௬',
+ '7': '௭',
+ '8': '௮',
+ '9': '௯',
+ '0': '௦'
+};
+var numberMap$10 = {
+ '௧': '1',
+ '௨': '2',
+ '௩': '3',
+ '௪': '4',
+ '௫': '5',
+ '௬': '6',
+ '௭': '7',
+ '௮': '8',
+ '௯': '9',
+ '௦': '0'
+};
+
+hooks.defineLocale('ta', {
+ months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
+ weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
+ weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, HH:mm',
+ LLLL : 'dddd, D MMMM YYYY, HH:mm'
+ },
+ calendar : {
+ sameDay : '[இன்று] LT',
+ nextDay : '[நாளை] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[நேற்று] LT',
+ lastWeek : '[கடந்த வாரம்] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s இல்',
+ past : '%s முன்',
+ s : 'ஒரு சில விநாடிகள்',
+ m : 'ஒரு நிமிடம்',
+ mm : '%d நிமிடங்கள்',
+ h : 'ஒரு மணி நேரம்',
+ hh : '%d மணி நேரம்',
+ d : 'ஒரு நாள்',
+ dd : '%d நாட்கள்',
+ M : 'ஒரு மாதம்',
+ MM : '%d மாதங்கள்',
+ y : 'ஒரு வருடம்',
+ yy : '%d ஆண்டுகள்'
+ },
+ ordinalParse: /\d{1,2}வது/,
+ ordinal : function (number) {
+ return number + 'வது';
+ },
+ preparse: function (string) {
+ return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+ return numberMap$10[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap$11[match];
+ });
+ },
+ // refer http://ta.wikipedia.org/s/1er1
+ meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 2) {
+ return ' யாமம்';
+ } else if (hour < 6) {
+ return ' வைகறை'; // வைகறை
+ } else if (hour < 10) {
+ return ' காலை'; // காலை
+ } else if (hour < 14) {
+ return ' நண்பகல்'; // நண்பகல்
+ } else if (hour < 18) {
+ return ' எற்பாடு'; // எற்பாடு
+ } else if (hour < 22) {
+ return ' மாலை'; // மாலை
+ } else {
+ return ' யாமம்';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'யாமம்') {
+ return hour < 2 ? hour : hour + 12;
+ } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
+ return hour;
+ } else if (meridiem === 'நண்பகல்') {
+ return hour >= 10 ? hour : hour + 12;
+ } else {
+ return hour + 12;
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Telugu [te]
+//! author : Krishna Chaitanya Thota : https://github.com/kcthota
+
+hooks.defineLocale('te', {
+ months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
+ monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
+ weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+ weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[నేడు] LT',
+ nextDay : '[రేపు] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[నిన్న] LT',
+ lastWeek : '[గత] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s లో',
+ past : '%s క్రితం',
+ s : 'కొన్ని క్షణాలు',
+ m : 'ఒక నిమిషం',
+ mm : '%d నిమిషాలు',
+ h : 'ఒక గంట',
+ hh : '%d గంటలు',
+ d : 'ఒక రోజు',
+ dd : '%d రోజులు',
+ M : 'ఒక నెల',
+ MM : '%d నెలలు',
+ y : 'ఒక సంవత్సరం',
+ yy : '%d సంవత్సరాలు'
+ },
+ ordinalParse : /\d{1,2}వ/,
+ ordinal : '%dవ',
+ meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'రాత్రి') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ఉదయం') {
+ return hour;
+ } else if (meridiem === 'మధ్యాహ్నం') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'సాయంత్రం') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'రాత్రి';
+ } else if (hour < 10) {
+ return 'ఉదయం';
+ } else if (hour < 17) {
+ return 'మధ్యాహ్నం';
+ } else if (hour < 20) {
+ return 'సాయంత్రం';
+ } else {
+ return 'రాత్రి';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tetun Dili (East Timor) [tet]
+//! author : Joshua Brooks : https://github.com/joshbrooks
+//! author : Onorio De J. Afonso : https://github.com/marobo
+
+hooks.defineLocale('tet', {
+ months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),
+ weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Ohin iha] LT',
+ nextDay: '[Aban iha] LT',
+ nextWeek: 'dddd [iha] LT',
+ lastDay: '[Horiseik iha] LT',
+ lastWeek: 'dddd [semana kotuk] [iha] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'iha %s',
+ past : '%s liuba',
+ s : 'minutu balun',
+ m : 'minutu ida',
+ mm : 'minutus %d',
+ h : 'horas ida',
+ hh : 'horas %d',
+ d : 'loron ida',
+ dd : 'loron %d',
+ M : 'fulan ida',
+ MM : 'fulan %d',
+ y : 'tinan ida',
+ yy : 'tinan %d'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Thai [th]
+//! author : Kridsada Thanabulpong : https://github.com/sirn
+
+hooks.defineLocale('th', {
+ months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
+ monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+ weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+ weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY เวลา H:mm',
+ LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
+ },
+ meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
+ isPM: function (input) {
+ return input === 'หลังเที่ยง';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ก่อนเที่ยง';
+ } else {
+ return 'หลังเที่ยง';
+ }
+ },
+ calendar : {
+ sameDay : '[วันนี้ เวลา] LT',
+ nextDay : '[พรุ่งนี้ เวลา] LT',
+ nextWeek : 'dddd[หน้า เวลา] LT',
+ lastDay : '[เมื่อวานนี้ เวลา] LT',
+ lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'อีก %s',
+ past : '%sที่แล้ว',
+ s : 'ไม่กี่วินาที',
+ m : '1 นาที',
+ mm : '%d นาที',
+ h : '1 ชั่วโมง',
+ hh : '%d ชั่วโมง',
+ d : '1 วัน',
+ dd : '%d วัน',
+ M : '1 เดือน',
+ MM : '%d เดือน',
+ y : '1 ปี',
+ yy : '%d ปี'
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Tagalog (Philippines) [tl-ph]
+//! author : Dan Hagman : https://github.com/hagmandan
+
+hooks.defineLocale('tl-ph', {
+ months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
+ monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+ weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
+ weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+ weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'MM/D/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY HH:mm',
+ LLLL : 'dddd, MMMM DD, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: 'LT [ngayong araw]',
+ nextDay: '[Bukas ng] LT',
+ nextWeek: 'LT [sa susunod na] dddd',
+ lastDay: 'LT [kahapon]',
+ lastWeek: 'LT [noong nakaraang] dddd',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'sa loob ng %s',
+ past : '%s ang nakalipas',
+ s : 'ilang segundo',
+ m : 'isang minuto',
+ mm : '%d minuto',
+ h : 'isang oras',
+ hh : '%d oras',
+ d : 'isang araw',
+ dd : '%d araw',
+ M : 'isang buwan',
+ MM : '%d buwan',
+ y : 'isang taon',
+ yy : '%d taon'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Klingon [tlh]
+//! author : Dominika Kruk : https://github.com/amaranthrose
+
+var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+function translateFuture(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'leS' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'waQ' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'nem' :
+ time + ' pIq';
+ return time;
+}
+
+function translatePast(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'Hu’' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'wen' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'ben' :
+ time + ' ret';
+ return time;
+}
+
+function translate$9(number, withoutSuffix, string, isFuture) {
+ var numberNoun = numberAsNoun(number);
+ switch (string) {
+ case 'mm':
+ return numberNoun + ' tup';
+ case 'hh':
+ return numberNoun + ' rep';
+ case 'dd':
+ return numberNoun + ' jaj';
+ case 'MM':
+ return numberNoun + ' jar';
+ case 'yy':
+ return numberNoun + ' DIS';
+ }
+}
+
+function numberAsNoun(number) {
+ var hundred = Math.floor((number % 1000) / 100),
+ ten = Math.floor((number % 100) / 10),
+ one = number % 10,
+ word = '';
+ if (hundred > 0) {
+ word += numbersNouns[hundred] + 'vatlh';
+ }
+ if (ten > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
+ }
+ if (one > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[one];
+ }
+ return (word === '') ? 'pagh' : word;
+}
+
+hooks.defineLocale('tlh', {
+ months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
+ monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[DaHjaj] LT',
+ nextDay: '[wa’leS] LT',
+ nextWeek: 'LLL',
+ lastDay: '[wa’Hu’] LT',
+ lastWeek: 'LLL',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : translateFuture,
+ past : translatePast,
+ s : 'puS lup',
+ m : 'wa’ tup',
+ mm : translate$9,
+ h : 'wa’ rep',
+ hh : translate$9,
+ d : 'wa’ jaj',
+ dd : translate$9,
+ M : 'wa’ jar',
+ MM : translate$9,
+ y : 'wa’ DIS',
+ yy : translate$9
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Turkish [tr]
+//! authors : Erhan Gundogan : https://github.com/erhangundogan,
+//! Burak Yiğit Kaya: https://github.com/BYK
+
+var suffixes$3 = {
+ 1: '\'inci',
+ 5: '\'inci',
+ 8: '\'inci',
+ 70: '\'inci',
+ 80: '\'inci',
+ 2: '\'nci',
+ 7: '\'nci',
+ 20: '\'nci',
+ 50: '\'nci',
+ 3: '\'üncü',
+ 4: '\'üncü',
+ 100: '\'üncü',
+ 6: '\'ncı',
+ 9: '\'uncu',
+ 10: '\'uncu',
+ 30: '\'uncu',
+ 60: '\'ıncı',
+ 90: '\'ıncı'
+};
+
+hooks.defineLocale('tr', {
+ months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
+ monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+ weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
+ weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+ weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[yarın saat] LT',
+ nextWeek : '[haftaya] dddd [saat] LT',
+ lastDay : '[dün] LT',
+ lastWeek : '[geçen hafta] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s önce',
+ s : 'birkaç saniye',
+ m : 'bir dakika',
+ mm : '%d dakika',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir yıl',
+ yy : '%d yıl'
+ },
+ ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '\'ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes$3[a] || suffixes$3[b] || suffixes$3[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Talossan [tzl]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+//! author : Iustì Canun
+
+// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+// This is currently too difficult (maybe even impossible) to add.
+hooks.defineLocale('tzl', {
+ months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+ weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+ weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+ weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM [dallas] YYYY',
+ LLL : 'D. MMMM [dallas] YYYY HH.mm',
+ LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
+ },
+ meridiemParse: /d\'o|d\'a/i,
+ isPM : function (input) {
+ return 'd\'o' === input.toLowerCase();
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'd\'o' : 'D\'O';
+ } else {
+ return isLower ? 'd\'a' : 'D\'A';
+ }
+ },
+ calendar : {
+ sameDay : '[oxhi à] LT',
+ nextDay : '[demà à] LT',
+ nextWeek : 'dddd [à] LT',
+ lastDay : '[ieiri à] LT',
+ lastWeek : '[sür el] dddd [lasteu à] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'osprei %s',
+ past : 'ja%s',
+ s : processRelativeTime$5,
+ m : processRelativeTime$5,
+ mm : processRelativeTime$5,
+ h : processRelativeTime$5,
+ hh : processRelativeTime$5,
+ d : processRelativeTime$5,
+ dd : processRelativeTime$5,
+ M : processRelativeTime$5,
+ MM : processRelativeTime$5,
+ y : processRelativeTime$5,
+ yy : processRelativeTime$5
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+function processRelativeTime$5(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's': ['viensas secunds', '\'iensas secunds'],
+ 'm': ['\'n míut', '\'iens míut'],
+ 'mm': [number + ' míuts', '' + number + ' míuts'],
+ 'h': ['\'n þora', '\'iensa þora'],
+ 'hh': [number + ' þoras', '' + number + ' þoras'],
+ 'd': ['\'n ziua', '\'iensa ziua'],
+ 'dd': [number + ' ziuas', '' + number + ' ziuas'],
+ 'M': ['\'n mes', '\'iens mes'],
+ 'MM': [number + ' mesen', '' + number + ' mesen'],
+ 'y': ['\'n ar', '\'iens ar'],
+ 'yy': [number + ' ars', '' + number + ' ars']
+ };
+ return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
+}
+
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight Latin [tzm-latn]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+hooks.defineLocale('tzm-latn', {
+ months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[asdkh g] LT',
+ nextDay: '[aska g] LT',
+ nextWeek: 'dddd [g] LT',
+ lastDay: '[assant g] LT',
+ lastWeek: 'dddd [g] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dadkh s yan %s',
+ past : 'yan %s',
+ s : 'imik',
+ m : 'minuḍ',
+ mm : '%d minuḍ',
+ h : 'saɛa',
+ hh : '%d tassaɛin',
+ d : 'ass',
+ dd : '%d ossan',
+ M : 'ayowr',
+ MM : '%d iyyirn',
+ y : 'asgas',
+ yy : '%d isgasn'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight [tzm]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+hooks.defineLocale('tzm', {
+ months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+ nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+ nextWeek: 'dddd [ⴴ] LT',
+ lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+ lastWeek: 'dddd [ⴴ] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+ past : 'ⵢⴰⵏ %s',
+ s : 'ⵉⵎⵉⴽ',
+ m : 'ⵎⵉⵏⵓⴺ',
+ mm : '%d ⵎⵉⵏⵓⴺ',
+ h : 'ⵙⴰⵄⴰ',
+ hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+ d : 'ⴰⵙⵙ',
+ dd : '%d oⵙⵙⴰⵏ',
+ M : 'ⴰⵢoⵓⵔ',
+ MM : '%d ⵉⵢⵢⵉⵔⵏ',
+ y : 'ⴰⵙⴳⴰⵙ',
+ yy : '%d ⵉⵙⴳⴰⵙⵏ'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Ukrainian [uk]
+//! author : zemlanin : https://github.com/zemlanin
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+function plural$6(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural$4(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+ 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
+ 'dd': 'день_дні_днів',
+ 'MM': 'місяць_місяці_місяців',
+ 'yy': 'рік_роки_років'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвилина' : 'хвилину';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'година' : 'годину';
+ }
+ else {
+ return number + ' ' + plural$6(format[key], +number);
+ }
+}
+function weekdaysCaseReplace(m, format) {
+ var weekdays = {
+ 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
+ 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
+ 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
+ },
+ nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
+ 'accusative' :
+ ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
+ 'genitive' :
+ 'nominative');
+ return weekdays[nounCase][m.day()];
+}
+function processHoursFunction(str) {
+ return function () {
+ return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+ };
+}
+
+hooks.defineLocale('uk', {
+ months : {
+ 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+ 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+ },
+ monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
+ weekdays : weekdaysCaseReplace,
+ weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY р.',
+ LLL : 'D MMMM YYYY р., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY р., HH:mm'
+ },
+ calendar : {
+ sameDay: processHoursFunction('[Сьогодні '),
+ nextDay: processHoursFunction('[Завтра '),
+ lastDay: processHoursFunction('[Вчора '),
+ nextWeek: processHoursFunction('[У] dddd ['),
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return processHoursFunction('[Минулої] dddd [').call(this);
+ case 1:
+ case 2:
+ case 4:
+ return processHoursFunction('[Минулого] dddd [').call(this);
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : '%s тому',
+ s : 'декілька секунд',
+ m : relativeTimeWithPlural$4,
+ mm : relativeTimeWithPlural$4,
+ h : 'годину',
+ hh : relativeTimeWithPlural$4,
+ d : 'день',
+ dd : relativeTimeWithPlural$4,
+ M : 'місяць',
+ MM : relativeTimeWithPlural$4,
+ y : 'рік',
+ yy : relativeTimeWithPlural$4
+ },
+ // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+ meridiemParse: /ночі|ранку|дня|вечора/,
+ isPM: function (input) {
+ return /^(дня|вечора)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночі';
+ } else if (hour < 12) {
+ return 'ранку';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечора';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Uzbek [uz]
+//! author : Sardor Muminov : https://github.com/muminoff
+
+hooks.defineLocale('uz', {
+ months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
+ monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+ weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+ weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'D MMMM YYYY, dddd HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бугун соат] LT [да]',
+ nextDay : '[Эртага] LT [да]',
+ nextWeek : 'dddd [куни соат] LT [да]',
+ lastDay : '[Кеча соат] LT [да]',
+ lastWeek : '[Утган] dddd [куни соат] LT [да]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'Якин %s ичида',
+ past : 'Бир неча %s олдин',
+ s : 'фурсат',
+ m : 'бир дакика',
+ mm : '%d дакика',
+ h : 'бир соат',
+ hh : '%d соат',
+ d : 'бир кун',
+ dd : '%d кун',
+ M : 'бир ой',
+ MM : '%d ой',
+ y : 'бир йил',
+ yy : '%d йил'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Vietnamese [vi]
+//! author : Bang Nguyen : https://github.com/bangnk
+
+hooks.defineLocale('vi', {
+ months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
+ monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
+ weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /sa|ch/i,
+ isPM : function (input) {
+ return /^ch$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'sa' : 'SA';
+ } else {
+ return isLower ? 'ch' : 'CH';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM [năm] YYYY',
+ LLL : 'D MMMM [năm] YYYY HH:mm',
+ LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
+ l : 'DD/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hôm nay lúc] LT',
+ nextDay: '[Ngày mai lúc] LT',
+ nextWeek: 'dddd [tuần tới lúc] LT',
+ lastDay: '[Hôm qua lúc] LT',
+ lastWeek: 'dddd [tuần rồi lúc] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s tới',
+ past : '%s trước',
+ s : 'vài giây',
+ m : 'một phút',
+ mm : '%d phút',
+ h : 'một giờ',
+ hh : '%d giờ',
+ d : 'một ngày',
+ dd : '%d ngày',
+ M : 'một tháng',
+ MM : '%d tháng',
+ y : 'một năm',
+ yy : '%d năm'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Pseudo [x-pseudo]
+//! author : Andrew Hood : https://github.com/andrewhood125
+
+hooks.defineLocale('x-pseudo', {
+ months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
+ monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
+ weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+ weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[T~ódá~ý át] LT',
+ nextDay : '[T~ómó~rró~w át] LT',
+ nextWeek : 'dddd [át] LT',
+ lastDay : '[Ý~ést~érdá~ý át] LT',
+ lastWeek : '[L~ást] dddd [át] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'í~ñ %s',
+ past : '%s á~gó',
+ s : 'á ~féw ~sécó~ñds',
+ m : 'á ~míñ~úté',
+ mm : '%d m~íñú~tés',
+ h : 'á~ñ hó~úr',
+ hh : '%d h~óúrs',
+ d : 'á ~dáý',
+ dd : '%d d~áýs',
+ M : 'á ~móñ~th',
+ MM : '%d m~óñt~hs',
+ y : 'á ~ýéár',
+ yy : '%d ý~éárs'
+ },
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Yoruba Nigeria [yo]
+//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
+
+hooks.defineLocale('yo', {
+ months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
+ monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
+ weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
+ weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
+ weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Ònì ni] LT',
+ nextDay : '[Ọ̀la ni] LT',
+ nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
+ lastDay : '[Àna ni] LT',
+ lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ní %s',
+ past : '%s kọjá',
+ s : 'ìsẹjú aayá die',
+ m : 'ìsẹjú kan',
+ mm : 'ìsẹjú %d',
+ h : 'wákati kan',
+ hh : 'wákati %d',
+ d : 'ọjọ́ kan',
+ dd : 'ọjọ́ %d',
+ M : 'osù kan',
+ MM : 'osù %d',
+ y : 'ọdún kan',
+ yy : 'ọdún %d'
+ },
+ ordinalParse : /ọjọ́\s\d{1,2}/,
+ ordinal : 'ọjọ́ %d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+
+hooks.defineLocale('zh-cn', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah点mm分',
+ LTS : 'Ah点m分s秒',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah点mm分',
+ LLLL : 'YYYY年MMMD日ddddAh点mm分',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah点mm分',
+ llll : 'YYYY年MMMD日ddddAh点mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' ||
+ meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ } else {
+ // '中午'
+ return hour >= 11 ? hour : hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : function () {
+ return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
+ },
+ nextDay : function () {
+ return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
+ },
+ lastDay : function () {
+ return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
+ },
+ nextWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = hooks().startOf('week');
+ prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ lastWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = hooks().startOf('week');
+ prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ sameElse : 'LL'
+ },
+ ordinalParse: /\d{1,2}(日|月|周)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ case 'M':
+ return number + '月';
+ case 'w':
+ case 'W':
+ return number + '周';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s内',
+ past : '%s前',
+ s : '几秒',
+ m : '1 分钟',
+ mm : '%d 分钟',
+ h : '1 小时',
+ hh : '%d 小时',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 个月',
+ MM : '%d 个月',
+ y : '1 年',
+ yy : '%d 年'
+ },
+ week : {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chinese (Hong Kong) [zh-hk]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+//! author : Konstantin : https://github.com/skfd
+
+hooks.defineLocale('zh-hk', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
+
+//! moment.js locale configuration
+//! locale : Chinese (Taiwan) [zh-tw]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+
+hooks.defineLocale('zh-tw', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
+
+hooks.locale('en');
+
+return hooks;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.min.js
new file mode 100644
index 00000000000..fd7f85744e5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment-with-locales.min.js
@@ -0,0 +1,1216 @@
+!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return le.apply(null,arguments)}
+// This is done to register the method called with moment()
+// without creating circular dependencies.
+function b(a){le=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){
+// IE8 will treat undefined and null as object if it wasn't for
+// input != null
+return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)
+// even if its not own property I'd still call it non-empty
+return!1;return!0}function f(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function g(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function h(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function i(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function j(a,b){for(var c in b)i(b,c)&&(a[c]=b[c]);return i(b,"toString")&&(a.toString=b.toString),i(b,"valueOf")&&(a.valueOf=b.valueOf),a}function k(a,b,c,d){return rb(a,b,c,d,!0).utc()}function l(){
+// We need to deep clone this object.
+return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function m(a){return null==a._pf&&(a._pf=l()),a._pf}function n(a){if(null==a._isValid){var b=m(a),c=ne.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function o(a){var b=k(NaN);return null!=a?j(m(b),a):m(b).userInvalidated=!0,b}function p(a){return void 0===a}function q(a,b){var c,d,e;if(p(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),p(b._i)||(a._i=b._i),p(b._f)||(a._f=b._f),p(b._l)||(a._l=b._l),p(b._strict)||(a._strict=b._strict),p(b._tzm)||(a._tzm=b._tzm),p(b._isUTC)||(a._isUTC=b._isUTC),p(b._offset)||(a._offset=b._offset),p(b._pf)||(a._pf=m(b)),p(b._locale)||(a._locale=b._locale),oe.length>0)for(c in oe)d=oe[c],e=b[d],p(e)||(a[d]=e);return a}
+// Moment prototype object
+function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),
+// Prevent infinite loop in case updateOffset creates new moment
+// objects.
+pe===!1&&(pe=!0,a.updateOffset(this),pe=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}
+// compare two arrays, return the number of differences
+function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return j(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),qe[b]||(w(c),qe[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,
+// Lenient ordinal parsing accepts just a number in addition to
+// number + (possibly) stuff coming from _ordinalParseLenient.
+this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=j({},a);for(c in b)i(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},j(e[c],a[c]),j(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)i(a,c)&&!i(b,c)&&d(a[c])&&(
+// make sure changes to properties don't modify parent config
+e[c]=j({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Ae[c]=Ae[c+"s"]=Ae[b]=a}function K(a){return"string"==typeof a?Ae[a]||Ae[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)i(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Be[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Be[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}
+// MOMENTS
+function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}
+// token: 'M'
+// padded: ['MM', 2]
+// ordinal: 'Mo'
+// callback: function () { this.month() + 1 }
+function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Fe[a]=e),b&&(Fe[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Fe[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Ce);for(b=0,c=d.length;b<c;b++)Fe[d[b]]?d[b]=Fe[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=d[e]instanceof Function?d[e].call(b,a):d[e];return f}}
+// format date using native date object
+function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Ee[b]=Ee[b]||W(b),Ee[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(De.lastIndex=0;d>=0&&De.test(a);)a=a.replace(De,c),De.lastIndex=0,d-=1;return a}function Z(a,b,c){Xe[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return i(Xe,a)?Xe[a](b._strict,b._locale):new RegExp(_(a))}
+// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),f(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c<a.length;c++)Ye[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&i(Ye,a)&&Ye[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||hf).test(b)?"format":"standalone"][a.month()]:this._months}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[hf.test(b)?"format":"standalone"][a.month()]:this._monthsShort}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(
+// this is not used
+this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=k([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=gf.call(this._shortMonthsParse,g),e!==-1?e:null):(e=gf.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=gf.call(this._shortMonthsParse,g),e!==-1?e:(e=gf.call(this._longMonthsParse,g),e!==-1?e:null)):(e=gf.call(this._longMonthsParse,g),e!==-1?e:(e=gf.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);
+// TODO: add sorting
+// Sorting makes sure if one month (or abbr) is a prefix of another
+// see sorting in computeMonthsParse
+for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){
+// test the regex
+if(
+// make the regex if we don't have it already
+e=k([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}
+// MOMENTS
+function ja(a,b){var c;if(!a.isValid())
+// No op
+return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else
+// TODO: Another silent failure?
+if(b=a.localeData().monthsParse(b),!f(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(i(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(i(this,"_monthsShortRegex")||(this._monthsShortRegex=lf),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(i(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(i(this,"_monthsRegex")||(this._monthsRegex=mf),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)
+// make the regex if we don't have it already
+c=k([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(
+// Sorting makes sure if one month (or abbr) is a prefix of another it
+// will match the longer piece.
+d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}
+// HELPERS
+function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){
+//can't just apply() to create a date:
+//http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+var h=new Date(a,b,c,d,e,f,g);
+//the date constructor remaps years 0-99 to 1900-1999
+return a<100&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));
+//the Date.UTC function remaps years 0-99 to 1900-1999
+return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}
+// start-of-first-week - start-of-year
+function ua(a,b,c){var// first-week day -- which january is always in the first week (4 for iso, 1 for other)
+d=7+b-c,
+// first-week day local weekday -- which local weekday is fwd
+e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}
+//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}
+// HELPERS
+// LOCALES
+function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}
+// MOMENTS
+function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}
+// HELPERS
+function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:this._weekdays}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=k([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=gf.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=gf.call(this._weekdaysParse,g),e!==-1?e:(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:(e=gf.call(this._weekdaysParse,g),e!==-1?e:(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=gf.call(this._minWeekdaysParse,g),e!==-1?e:(e=gf.call(this._weekdaysParse,g),e!==-1?e:(e=gf.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){
+// test the regex
+if(
+// make the regex if we don't have it already
+e=k([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}
+// MOMENTS
+function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;
+// behaves the same as moment#day except
+// as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+// as a setter, sunday should belong to the previous week.
+if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=sf),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=tf),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=uf),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)
+// make the regex if we don't have it already
+c=k([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(
+// Sorting makes sure if one weekday (or abbr) is a prefix of another it
+// will match the longer piece.
+g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}
+// FORMATTING
+function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}
+// PARSING
+function Ua(a,b){return b._meridiemParse}
+// LOCALES
+function Va(a){
+// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+// Using charAt should be more compatible.
+return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}
+// pick the locale from the array
+// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+function Ya(a){for(var b,c,d,e,f=0;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)
+//the next array item is better than a shallower substring of this one
+break;b--}f++}return null}function Za(a){var b=null;
+// TODO: Find a better way to register and load all the locales in Node
+if(!zf[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=vf._abbr,require("./locale/"+a),
+// because defineLocale currently also sets the global locale, we
+// want to undo that for lazy loaded locales
+$a(b)}catch(a){}return zf[a]}
+// This function will load locale and then set the global locale. If
+// no arguments are passed in, it will simply return the current global
+// locale key.
+function $a(a,b){var c;
+// moment.duration._locale = moment._locale = data;
+return a&&(c=p(b)?bb(a):_a(a,b),c&&(vf=c)),vf._abbr}function _a(a,b){if(null!==b){var c=yf;if(b.abbr=a,null!=zf[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=zf[a]._config;else if(null!=b.parentLocale){if(null==zf[b.parentLocale])return Af[b.parentLocale]||(Af[b.parentLocale]=[]),Af[b.parentLocale].push({name:a,config:b}),null;c=zf[b.parentLocale]._config}
+// backwards compat for now: also set the locale
+// make sure we set the locale AFTER all child locales have been
+// created, so we won't end up with the child locale set.
+return zf[a]=new C(B(c,b)),Af[a]&&Af[a].forEach(function(a){_a(a.name,a.config)}),$a(a),zf[a]}
+// useful for testing
+return delete zf[a],null}function ab(a,b){if(null!=b){var c,d=yf;
+// MERGE
+null!=zf[a]&&(d=zf[a]._config),b=B(d,b),c=new C(b),c.parentLocale=zf[a],zf[a]=c,
+// backwards compat for now: also set the locale
+$a(a)}else
+// pass null for config to unupdate, useful for tests
+null!=zf[a]&&(null!=zf[a].parentLocale?zf[a]=zf[a].parentLocale:null!=zf[a]&&delete zf[a]);return zf[a]}
+// returns locale data
+function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return vf;if(!c(a)){if(
+//short-circuit everything else
+b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return te(zf)}function db(a){var b,c=a._a;return c&&m(a).overflow===-2&&(b=c[$e]<0||c[$e]>11?$e:c[_e]<1||c[_e]>ea(c[Ze],c[$e])?_e:c[af]<0||c[af]>24||24===c[af]&&(0!==c[bf]||0!==c[cf]||0!==c[df])?af:c[bf]<0||c[bf]>59?bf:c[cf]<0||c[cf]>59?cf:c[df]<0||c[df]>999?df:-1,m(a)._overflowDayOfYear&&(b<Ze||b>_e)&&(b=_e),m(a)._overflowWeeks&&b===-1&&(b=ef),m(a)._overflowWeekday&&b===-1&&(b=ff),m(a).overflow=b),a}
+// date from iso format
+function eb(a){var b,c,d,e,f,g,h=a._i,i=Bf.exec(h)||Cf.exec(h);if(i){for(m(a).iso=!0,b=0,c=Ef.length;b<c;b++)if(Ef[b][1].exec(i[1])){e=Ef[b][0],d=Ef[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=Ff.length;b<c;b++)if(Ff[b][1].exec(i[3])){
+// match[2] should be 'T' or space
+f=(i[2]||" ")+Ff[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Df.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),kb(a)}else a._isValid=!1}
+// date from iso format or fallback
+function fb(b){var c=Gf.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}
+// Pick the first defined of two or three arguments.
+function gb(a,b,c){return null!=a?a:null!=b?b:c}function hb(b){
+// hooks is actually the exported moment object
+var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}
+// convert an array to a date.
+// the array should mirror the parameters below
+// note: all values past the year are optional and will default to the lowest possible value.
+// [year, month, day , hour, minute, second, millisecond]
+function ib(a){var b,c,d,e,f=[];if(!a._d){
+// Default to current date.
+// * if no year, month, day of month are given, default to today
+// * if day of month is given, default month and year
+// * if month is given, default only year
+// * if year is given, don't default anything
+for(d=hb(a),
+//compute day of the year from weeks and weekdays
+a._w&&null==a._a[_e]&&null==a._a[$e]&&jb(a),
+//if the day of the year is set, figure out what it is
+a._dayOfYear&&(e=gb(a._a[Ze],d[Ze]),a._dayOfYear>pa(e)&&(m(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[$e]=c.getUTCMonth(),a._a[_e]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];
+// Zero out whatever was not defaulted, including time
+for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];
+// Check for 24:00:00.000
+24===a._a[af]&&0===a._a[bf]&&0===a._a[cf]&&0===a._a[df]&&(a._nextDay=!0,a._a[af]=0),a._d=(a._useUTC?ta:sa).apply(null,f),
+// Apply timezone offset from input. The actual utcOffset can be changed
+// with parseZone.
+null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[af]=24)}}function jb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,
+// TODO: We need to take the current isoWeekYear, but that depends on
+// how we interpret now (local, utc, fixed offset). So create
+// a now version of current config (take local/utc/offset flags, and
+// create now).
+c=gb(b.GG,a._a[Ze],wa(sb(),1,4).year),d=gb(b.W,1),e=gb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(sb(),f,g);c=gb(b.gg,a._a[Ze],j.year),
+// Default to current week.
+d=gb(b.w,j.week),null!=b.d?(
+// weekday -- low day numbers are considered next week
+e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(
+// local weekday -- counting starts from begining of week
+e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):
+// default to begining of week
+e=f}d<1||d>xa(c,f,g)?m(a)._overflowWeeks=!0:null!=i?m(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[Ze]=h.year,a._dayOfYear=h.dayOfYear)}
+// date from string and format string
+function kb(b){
+// TODO: Move this to another part of the creation flow to prevent circular deps
+if(b._f===a.ISO_8601)return void eb(b);b._a=[],m(b).empty=!0;
+// This array is used to make a Date, either with `new Date` or `Date.UTC`
+var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Ce)||[],c=0;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],
+// console.log('token', token, 'parsedInput', parsedInput,
+// 'regex', getParseRegexForToken(token, config));
+d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&m(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),
+// don't parse if it's not a known token
+Fe[f]?(d?m(b).empty=!1:m(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&m(b).unusedTokens.push(f);
+// add remaining unparsed input length to the string
+m(b).charsLeftOver=i-j,h.length>0&&m(b).unusedInput.push(h),
+// clear _12h flag if hour is <= 12
+b._a[af]<=12&&m(b).bigHour===!0&&b._a[af]>0&&(m(b).bigHour=void 0),m(b).parsedDateParts=b._a.slice(0),m(b).meridiem=b._meridiem,
+// handle meridiem
+b._a[af]=lb(b._locale,b._a[af],b._meridiem),ib(b),db(b)}function lb(a,b,c){var d;
+// Fallback
+return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}
+// date from string and array of format strings
+function mb(a){var b,c,d,e,f;if(0===a._f.length)return m(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],kb(b),n(b)&&(
+// if there is any input that was not parsed add a penalty for that format
+f+=m(b).charsLeftOver,
+//or tokens
+f+=10*m(b).unusedTokens.length,m(b).score=f,(null==d||f<d)&&(d=f,c=b));j(a,c||b)}function nb(a){if(!a._d){var b=L(a._i);a._a=h([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),ib(a)}}function ob(a){var b=new r(db(pb(a)));
+// Adding is smart enough around DST
+return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function pb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?o({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(g(b)?a._d=b:c(d)?mb(a):d?kb(a):qb(a),n(a)||(a._d=null),a))}function qb(b){var d=b._i;void 0===d?b._d=new Date(a.now()):g(d)?b._d=new Date(d.valueOf()):"string"==typeof d?fb(b):c(d)?(b._a=h(d.slice(0),function(a){return parseInt(a,10)}),ib(b)):"object"==typeof d?nb(b):f(d)?
+// from milliseconds
+b._d=new Date(d):a.createFromInputFallback(b)}function rb(a,b,f,g,h){var i={};
+// object construction must be done this way.
+// https://github.com/moment/moment/issues/1423
+return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,ob(i)}function sb(a,b,c,d){return rb(a,b,c,d,!1)}
+// Pick a moment m from moments so that m[fn](other) is true for all
+// other. This relies on the function fn to be transitive.
+//
+// moments should either be an array of moment objects or an array, whose
+// first element is an array of moment objects.
+function tb(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return sb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}
+// TODO: Use [].sort instead?
+function ub(){var a=[].slice.call(arguments,0);return tb("isBefore",a)}function vb(){var a=[].slice.call(arguments,0);return tb("isAfter",a)}function wb(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;
+// representation for dateAddRemove
+this._milliseconds=+k+1e3*j+// 1000
+6e4*i+// 1000 * 60
+1e3*h*60*60,//using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+// Because of dateAddRemove treats 24 hours as different from a
+// day when working around DST, we need to store them separately
+this._days=+g+7*f,
+// It is impossible translate months into days without knowing
+// which months you are are talking about, so we have to store
+// it separately.
+this._months=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function xb(a){return a instanceof wb}function yb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}
+// FORMATTING
+function zb(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Ab(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Kf)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}
+// Return a moment from input, that is local/utc/zone equivalent to model.
+function Bb(b,c){var d,e;
+// Use low-level api, because this fn is low-level api.
+return c._isUTC?(d=c.clone(),e=(s(b)||g(b)?b.valueOf():sb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):sb(b).local()}function Cb(a){
+// On Firefox.24 Date#getTimezoneOffset returns a floating point.
+// https://github.com/moment/moment/pull/1871
+return 15*-Math.round(a._d.getTimezoneOffset()/15)}
+// MOMENTS
+// keepLocalTime = true means only change the timezone, without
+// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+// +0200, so we adjust the time as needed, to be valid.
+//
+// Keeping the time actually adds/subtracts (one hour)
+// from the actual represented time. That is why we call updateOffset
+// a second time. In case it wants us to change the offset again
+// _changeInProgress == true case, then we have to adjust, because
+// there is no such time in the given timezone.
+function Db(b,c){var d,e=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Ab(Ue,b),null===b)return this}else Math.abs(b)<16&&(b=60*b);return!this._isUTC&&c&&(d=Cb(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Tb(this,Ob(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?e:Cb(this)}function Eb(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Fb(a){return this.utcOffset(0,a)}function Gb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Cb(this),"m")),this}function Hb(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var a=Ab(Te,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Ib(a){return!!this.isValid()&&(a=a?sb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Jb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Kb(){if(!p(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=pb(a),a._a){var b=a._isUTC?k(a._a):sb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Lb(){return!!this.isValid()&&!this._isUTC}function Mb(){return!!this.isValid()&&this._isUTC}function Nb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ob(a,b){var c,d,e,g=a,
+// matching against regexp is expensive, do it on demand
+h=null;// checks for null or undefined
+return xb(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:f(a)?(g={},b?g[b]=a:g.milliseconds=a):(h=Lf.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:u(h[_e])*c,h:u(h[af])*c,m:u(h[bf])*c,s:u(h[cf])*c,ms:u(yb(1e3*h[df]))*c}):(h=Mf.exec(a))?(c="-"===h[1]?-1:1,g={y:Pb(h[2],c),M:Pb(h[3],c),w:Pb(h[4],c),d:Pb(h[5],c),h:Pb(h[6],c),m:Pb(h[7],c),s:Pb(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Rb(sb(g.from),sb(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new wb(g),xb(a)&&i(a,"_locale")&&(d._locale=a._locale),d}function Pb(a,b){
+// We'd normally use ~~inp for this, but unfortunately it also
+// converts floats to ints.
+// inp may be undefined, so careful calling replace on it.
+var c=a&&parseFloat(a.replace(",","."));
+// apply sign while we're at it
+return(isNaN(c)?0:c)*b}function Qb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Rb(a,b){var c;return a.isValid()&&b.isValid()?(b=Bb(b,a),a.isBefore(b)?c=Qb(a,b):(c=Qb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}
+// TODO: remove 'name' arg after deprecation is removed
+function Sb(a,b){return function(c,d){var e,f;
+//invert the arguments, but complain about it
+return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ob(c,d),Tb(this,e,a),this}}function Tb(b,c,d,e){var f=c._milliseconds,g=yb(c._days),h=yb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Ub(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Vb(b,c){
+// We want to compare the start of today, vs this.
+// Getting start-of-today depends on whether we're local/utc/offset or not.
+var d=b||sb(),e=Bb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,sb(d)))}function Wb(){return new r(this)}function Xb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf())}function Yb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf())}function Zb(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function $b(a,b){var c,d=s(a)?a:sb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function _b(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ac(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function bc(a,b,c){var d,e,f,g;// 1000
+// 1000 * 60
+// 1000 * 60 * 60
+// 1000 * 60 * 60 * 24, negate dst
+// 1000 * 60 * 60 * 24 * 7, negate dst
+return this.isValid()?(d=Bb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=cc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function cc(a,b){
+// difference in months
+var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),
+// b is in (anchor - 1 month, anchor + 1 month)
+f=a.clone().add(e,"months");
+//check for negative zero, return zero if negative zero
+// linear across the month
+// linear across the month
+return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function dc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ec(){var a=this.clone().utc();return 0<a.year()&&a.year()<=9999?z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}/**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+function fc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function gc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function hc(a,b){return this.isValid()&&(s(a)&&a.isValid()||sb(a).isValid())?Ob({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function ic(a){return this.from(sb(),a)}function jc(a,b){return this.isValid()&&(s(a)&&a.isValid()||sb(a).isValid())?Ob({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function kc(a){return this.to(sb(),a)}
+// If passed a locale key, it will set the locale for this
+// instance. Otherwise, it will return the locale configuration
+// variables for this instance.
+function lc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function mc(){return this._locale}function nc(a){
+// the following switch intentionally omits break keywords
+// to utilize falling through the cases.
+switch(a=K(a)){case"year":this.month(0);/* falls through */
+case"quarter":case"month":this.date(1);/* falls through */
+case"week":case"isoWeek":case"day":case"date":this.hours(0);/* falls through */
+case"hour":this.minutes(0);/* falls through */
+case"minute":this.seconds(0);/* falls through */
+case"second":this.milliseconds(0)}
+// weeks are a special case
+// quarters are also special
+return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function oc(a){
+// 'date' is an alias for 'day', so it should be considered as such.
+return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function pc(){return this._d.valueOf()-6e4*(this._offset||0)}function qc(){return Math.floor(this.valueOf()/1e3)}function rc(){return new Date(this.valueOf())}function sc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function tc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function uc(){
+// new Date(NaN).toJSON() === null
+return this.isValid()?this.toISOString():null}function vc(){return n(this)}function wc(){return j({},m(this))}function xc(){return m(this).overflow}function yc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function zc(a,b){U(0,[a,a.length],0,b)}
+// MOMENTS
+function Ac(a){return Ec.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Bc(a){return Ec.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Cc(){return xa(this.year(),1,4)}function Dc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ec(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Fc.call(this,a,b,c,d,e))}function Fc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}
+// MOMENTS
+function Gc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}
+// HELPERS
+// MOMENTS
+function Hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Ic(a,b){b[df]=u(1e3*("0."+a))}
+// MOMENTS
+function Jc(){return this._isUTC?"UTC":""}function Kc(){return this._isUTC?"Coordinated Universal Time":""}function Lc(a){return sb(1e3*a)}function Mc(){return sb.apply(null,arguments).parseZone()}function Nc(a){return a}function Oc(a,b,c,d){var e=bb(),f=k().set(d,b);return e[c](f,a)}function Pc(a,b,c){if(f(a)&&(b=a,a=void 0),a=a||"",null!=b)return Oc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Oc(a,d,c,"month");return e}
+// ()
+// (5)
+// (fmt, 5)
+// (fmt)
+// (true)
+// (true, 5)
+// (true, fmt, 5)
+// (true, fmt)
+function Qc(a,b,c,d){"boolean"==typeof a?(f(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,f(b)&&(c=b,b=void 0),b=b||"");var e=bb(),g=a?e._week.dow:0;if(null!=c)return Oc(b,(c+g)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Oc(b,(h+g)%7,d,"day");return i}function Rc(a,b){return Pc(a,b,"months")}function Sc(a,b){return Pc(a,b,"monthsShort")}function Tc(a,b,c){return Qc(a,b,c,"weekdays")}function Uc(a,b,c){return Qc(a,b,c,"weekdaysShort")}function Vc(a,b,c){return Qc(a,b,c,"weekdaysMin")}function Wc(){var a=this._data;return this._milliseconds=Xf(this._milliseconds),this._days=Xf(this._days),this._months=Xf(this._months),a.milliseconds=Xf(a.milliseconds),a.seconds=Xf(a.seconds),a.minutes=Xf(a.minutes),a.hours=Xf(a.hours),a.months=Xf(a.months),a.years=Xf(a.years),this}function Xc(a,b,c,d){var e=Ob(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}
+// supports only 2.0-style add(1, 's') or add(duration)
+function Yc(a,b){return Xc(this,a,b,1)}
+// supports only 2.0-style subtract(1, 's') or subtract(duration)
+function Zc(a,b){return Xc(this,a,b,-1)}function $c(a){return a<0?Math.floor(a):Math.ceil(a)}function _c(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;
+// if we have a mix of positive and negative values, bubble down first
+// check: https://github.com/moment/moment/issues/2166
+// The following code bubbles up values, see the tests for
+// examples of what that means.
+// convert days to months
+// 12 months -> 1 year
+return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*$c(bd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ad(g)),h+=e,g-=$c(bd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ad(a){
+// 400 years have 146097 days (taking into account leap year rules)
+// 400 years have 12 months === 4800
+return 4800*a/146097}function bd(a){
+// the reverse of daysToMonths
+return 146097*a/4800}function cd(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ad(b),"month"===a?c:c/12;switch(
+// handle milliseconds separately because of floating point math errors (issue #1867)
+b=this._days+Math.round(bd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;
+// Math.floor prevents floating point math errors here
+case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}
+// TODO: Use this.as('ms')?
+function dd(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12)}function ed(a){return function(){return this.as(a)}}function fd(a){return a=K(a),this[a+"s"]()}function gd(a){return function(){return this._data[a]}}function hd(){return t(this.days()/7)}
+// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+function id(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function jd(a,b,c){var d=Ob(a).abs(),e=lg(d.as("s")),f=lg(d.as("m")),g=lg(d.as("h")),h=lg(d.as("d")),i=lg(d.as("M")),j=lg(d.as("y")),k=e<mg.s&&["s",e]||f<=1&&["m"]||f<mg.m&&["mm",f]||g<=1&&["h"]||g<mg.h&&["hh",g]||h<=1&&["d"]||h<mg.d&&["dd",h]||i<=1&&["M"]||i<mg.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,id.apply(null,k)}
+// This function allows you to set the rounding function for relative time strings
+function kd(a){return void 0===a?lg:"function"==typeof a&&(lg=a,!0)}
+// This function allows you to set a threshold for relative time strings
+function ld(a,b){return void 0!==mg[a]&&(void 0===b?mg[a]:(mg[a]=b,!0))}function md(a){var b=this.localeData(),c=jd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function nd(){
+// for ISO strings we do not use the normal bubbling rules:
+// * milliseconds bubble up until they become hours
+// * days do not bubble at all
+// * months bubble up until they become years
+// This is because there is no context-free conversion between hours and days
+// (think of clock changes)
+// and also not between days and months (28-31 days per month)
+var a,b,c,d=ng(this._milliseconds)/1e3,e=ng(this._days),f=ng(this._months);
+// 3600 seconds -> 60 minutes -> 1 hour
+a=t(d/60),b=t(a/60),d%=60,a%=60,
+// 12 months -> 1 year
+c=t(f/12),f%=12;
+// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}
+//! moment.js locale configuration
+//! locale : Belarusian [be]
+//! author : Dmitry Demidov : https://github.com/demidov91
+//! author: Praleska: http://praleska.pro/
+//! Author : Menelion Elensúle : https://github.com/Oire
+function od(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function pd(a,b,c){var d={mm:b?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:b?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===c?b?"хвіліна":"хвіліну":"h"===c?b?"гадзіна":"гадзіну":a+" "+od(d[c],+a)}
+//! moment.js locale configuration
+//! locale : Breton [br]
+//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+function qd(a,b,c){var d={mm:"munutenn",MM:"miz",dd:"devezh"};return a+" "+td(d[c],a)}function rd(a){switch(sd(a)){case 1:case 3:case 4:case 5:case 9:return a+" bloaz";default:return a+" vloaz"}}function sd(a){return a>9?sd(a%10):a}function td(a,b){return 2===b?ud(a):a}function ud(a){var b={m:"v",b:"v",d:"z"};return void 0===b[a.charAt(0)]?a:b[a.charAt(0)]+a.substring(1)}
+//! moment.js locale configuration
+//! locale : Bosnian [bs]
+//! author : Nedim Cholich : https://github.com/frontyard
+//! based on (hr) translation by Bojan Marković
+function vd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function wd(a){return a>1&&a<5&&1!==~~(a/10)}function xd(a,b,c,d){var e=a+" ";switch(c){case"s":// a few seconds / in a few seconds / a few seconds ago
+return b||d?"pár sekund":"pár sekundami";case"m":// a minute / in a minute / a minute ago
+return b?"minuta":d?"minutu":"minutou";case"mm":// 9 minutes / in 9 minutes / 9 minutes ago
+// 9 minutes / in 9 minutes / 9 minutes ago
+return b||d?e+(wd(a)?"minuty":"minut"):e+"minutami";break;case"h":// an hour / in an hour / an hour ago
+return b?"hodina":d?"hodinu":"hodinou";case"hh":// 9 hours / in 9 hours / 9 hours ago
+// 9 hours / in 9 hours / 9 hours ago
+return b||d?e+(wd(a)?"hodiny":"hodin"):e+"hodinami";break;case"d":// a day / in a day / a day ago
+return b||d?"den":"dnem";case"dd":// 9 days / in 9 days / 9 days ago
+// 9 days / in 9 days / 9 days ago
+return b||d?e+(wd(a)?"dny":"dní"):e+"dny";break;case"M":// a month / in a month / a month ago
+return b||d?"měsíc":"měsícem";case"MM":// 9 months / in 9 months / 9 months ago
+// 9 months / in 9 months / 9 months ago
+return b||d?e+(wd(a)?"měsíce":"měsíců"):e+"měsíci";break;case"y":// a year / in a year / a year ago
+return b||d?"rok":"rokem";case"yy":// 9 years / in 9 years / 9 years ago
+// 9 years / in 9 years / 9 years ago
+return b||d?e+(wd(a)?"roky":"let"):e+"lety"}}
+//! moment.js locale configuration
+//! locale : German (Austria) [de-at]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Martin Groller : https://github.com/MadMG
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+function yd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}
+//! moment.js locale configuration
+//! locale : German [de]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+function zd(a,b,c,d){var e={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[a+" Tage",a+" Tagen"],M:["ein Monat","einem Monat"],MM:[a+" Monate",a+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[a+" Jahre",a+" Jahren"]};return b?e[c][0]:e[c][1]}
+//! moment.js locale configuration
+//! locale : Estonian [et]
+//! author : Henry Kehlmann : https://github.com/madhenry
+//! improvements : Illimar Tambek : https://github.com/ragulka
+function Ad(a,b,c,d){var e={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[a+" minuti",a+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[a+" tunni",a+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[a+" kuu",a+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[a+" aasta",a+" aastat"]};return b?e[c][2]?e[c][2]:e[c][1]:d?e[c][0]:e[c][1]}function Bd(a,b,c,d){var e="";switch(c){case"s":return d?"muutaman sekunnin":"muutama sekunti";case"m":return d?"minuutin":"minuutti";case"mm":e=d?"minuutin":"minuuttia";break;case"h":return d?"tunnin":"tunti";case"hh":e=d?"tunnin":"tuntia";break;case"d":return d?"päivän":"päivä";case"dd":e=d?"päivän":"päivää";break;case"M":return d?"kuukauden":"kuukausi";case"MM":e=d?"kuukauden":"kuukautta";break;case"y":return d?"vuoden":"vuosi";case"yy":e=d?"vuoden":"vuotta"}return e=Cd(a,d)+" "+e}function Cd(a,b){return a<10?b?Sg[a]:Rg[a]:a}
+//! moment.js locale configuration
+//! locale : Croatian [hr]
+//! author : Bojan Marković : https://github.com/bmarkovic
+function Dd(a,b,c){var d=a+" ";switch(c){case"m":return b?"jedna minuta":"jedne minute";case"mm":return d+=1===a?"minuta":2===a||3===a||4===a?"minute":"minuta";case"h":return b?"jedan sat":"jednog sata";case"hh":return d+=1===a?"sat":2===a||3===a||4===a?"sata":"sati";case"dd":return d+=1===a?"dan":"dana";case"MM":return d+=1===a?"mjesec":2===a||3===a||4===a?"mjeseca":"mjeseci";case"yy":return d+=1===a?"godina":2===a||3===a||4===a?"godine":"godina"}}function Ed(a,b,c,d){var e=a;switch(c){case"s":return d||b?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(d||b?" perc":" perce");case"mm":return e+(d||b?" perc":" perce");case"h":return"egy"+(d||b?" óra":" órája");case"hh":return e+(d||b?" óra":" órája");case"d":return"egy"+(d||b?" nap":" napja");case"dd":return e+(d||b?" nap":" napja");case"M":return"egy"+(d||b?" hónap":" hónapja");case"MM":return e+(d||b?" hónap":" hónapja");case"y":return"egy"+(d||b?" év":" éve");case"yy":return e+(d||b?" év":" éve")}return""}function Fd(a){return(a?"":"[múlt] ")+"["+ah[this.day()]+"] LT[-kor]"}
+//! moment.js locale configuration
+//! locale : Icelandic [is]
+//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+function Gd(a){return a%100===11||a%10!==1}function Hd(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return b?"mínúta":"mínútu";case"mm":return Gd(a)?e+(b||d?"mínútur":"mínútum"):b?e+"mínúta":e+"mínútu";case"hh":return Gd(a)?e+(b||d?"klukkustundir":"klukkustundum"):e+"klukkustund";case"d":return b?"dagur":d?"dag":"degi";case"dd":return Gd(a)?b?e+"dagar":e+(d?"daga":"dögum"):b?e+"dagur":e+(d?"dag":"degi");case"M":return b?"mánuður":d?"mánuð":"mánuði";case"MM":return Gd(a)?b?e+"mánuðir":e+(d?"mánuði":"mánuðum"):b?e+"mánuður":e+(d?"mánuð":"mánuði");case"y":return b||d?"ár":"ári";case"yy":return Gd(a)?e+(b||d?"ár":"árum"):e+(b||d?"ár":"ári")}}
+//! moment.js locale configuration
+//! locale : Luxembourgish [lb]
+//! author : mweimerskirch : https://github.com/mweimerskirch
+//! author : David Raison : https://github.com/kwisatz
+function Id(a,b,c,d){var e={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return b?e[c][0]:e[c][1]}function Jd(a){var b=a.substr(0,a.indexOf(" "));return Ld(b)?"a "+a:"an "+a}function Kd(a){var b=a.substr(0,a.indexOf(" "));return Ld(b)?"viru "+a:"virun "+a}/**
+ * Returns true if the word before the given number loses the '-n' ending.
+ * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+ *
+ * @param number {integer}
+ * @returns {boolean}
+ */
+function Ld(a){if(a=parseInt(a,10),isNaN(a))return!1;if(a<0)
+// Negative Number --> always true
+return!0;if(a<10)
+// Only 1 digit
+return 4<=a&&a<=7;if(a<100){
+// 2 digits
+var b=a%10,c=a/10;return Ld(0===b?c:b)}if(a<1e4){
+// 3 or 4 digits --> recursively check first digit
+for(;a>=10;)a/=10;return Ld(a)}
+// Anything larger than 4 digits: recursively check first n-3 digits
+return a/=1e3,Ld(a)}function Md(a,b,c,d){return b?"kelios sekundės":d?"kelių sekundžių":"kelias sekundes"}function Nd(a,b,c,d){return b?Pd(c)[0]:d?Pd(c)[1]:Pd(c)[2]}function Od(a){return a%10===0||a>10&&a<20}function Pd(a){return dh[a].split("_")}function Qd(a,b,c,d){var e=a+" ";return 1===a?e+Nd(a,b,c[0],d):b?e+(Od(a)?Pd(c)[1]:Pd(c)[0]):d?e+Pd(c)[1]:e+(Od(a)?Pd(c)[1]:Pd(c)[2])}/**
+ * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+ */
+function Rd(a,b,c){return c?b%10===1&&b%100!==11?a[2]:a[3]:b%10===1&&b%100!==11?a[0]:a[1]}function Sd(a,b,c){return a+" "+Rd(eh[c],a,b)}function Td(a,b,c){return Rd(eh[c],a,b)}function Ud(a,b){return b?"dažas sekundes":"dažām sekundēm"}function Vd(a,b,c,d){var e="";if(b)switch(c){case"s":e="काही सेकंद";break;case"m":e="एक मिनिट";break;case"mm":e="%d मिनिटे";break;case"h":e="एक तास";break;case"hh":e="%d तास";break;case"d":e="एक दिवस";break;case"dd":e="%d दिवस";break;case"M":e="एक महिना";break;case"MM":e="%d महिने";break;case"y":e="एक वर्ष";break;case"yy":e="%d वर्षे"}else switch(c){case"s":e="काही सेकंदां";break;case"m":e="एका मिनिटा";break;case"mm":e="%d मिनिटां";break;case"h":e="एका तासा";break;case"hh":e="%d तासां";break;case"d":e="एका दिवसा";break;case"dd":e="%d दिवसां";break;case"M":e="एका महिन्या";break;case"MM":e="%d महिन्यां";break;case"y":e="एका वर्षा";break;case"yy":e="%d वर्षां"}return e.replace(/%d/i,a)}function Wd(a){return a%10<5&&a%10>1&&~~(a/10)%10!==1}function Xd(a,b,c){var d=a+" ";switch(c){case"m":return b?"minuta":"minutę";case"mm":return d+(Wd(a)?"minuty":"minut");case"h":return b?"godzina":"godzinę";case"hh":return d+(Wd(a)?"godziny":"godzin");case"MM":return d+(Wd(a)?"miesiące":"miesięcy");case"yy":return d+(Wd(a)?"lata":"lat")}}
+//! moment.js locale configuration
+//! locale : Romanian [ro]
+//! author : Vlad Gurdiga : https://github.com/gurdiga
+//! author : Valentin Agachi : https://github.com/avaly
+function Yd(a,b,c){var d={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},e=" ";return(a%100>=20||a>=100&&a%100===0)&&(e=" de "),a+e+d[c]}
+//! moment.js locale configuration
+//! locale : Russian [ru]
+//! author : Viktorminator : https://github.com/Viktorminator
+//! Author : Menelion Elensúle : https://github.com/Oire
+//! author : Коренберг Марк : https://github.com/socketpair
+function Zd(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function $d(a,b,c){var d={mm:b?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===c?b?"минута":"минуту":a+" "+Zd(d[c],+a)}function _d(a){return a>1&&a<5}function ae(a,b,c,d){var e=a+" ";switch(c){case"s":// a few seconds / in a few seconds / a few seconds ago
+return b||d?"pár sekúnd":"pár sekundami";case"m":// a minute / in a minute / a minute ago
+return b?"minúta":d?"minútu":"minútou";case"mm":// 9 minutes / in 9 minutes / 9 minutes ago
+// 9 minutes / in 9 minutes / 9 minutes ago
+return b||d?e+(_d(a)?"minúty":"minút"):e+"minútami";break;case"h":// an hour / in an hour / an hour ago
+return b?"hodina":d?"hodinu":"hodinou";case"hh":// 9 hours / in 9 hours / 9 hours ago
+// 9 hours / in 9 hours / 9 hours ago
+return b||d?e+(_d(a)?"hodiny":"hodín"):e+"hodinami";break;case"d":// a day / in a day / a day ago
+return b||d?"deň":"dňom";case"dd":// 9 days / in 9 days / 9 days ago
+// 9 days / in 9 days / 9 days ago
+return b||d?e+(_d(a)?"dni":"dní"):e+"dňami";break;case"M":// a month / in a month / a month ago
+return b||d?"mesiac":"mesiacom";case"MM":// 9 months / in 9 months / 9 months ago
+// 9 months / in 9 months / 9 months ago
+return b||d?e+(_d(a)?"mesiace":"mesiacov"):e+"mesiacmi";break;case"y":// a year / in a year / a year ago
+return b||d?"rok":"rokom";case"yy":// 9 years / in 9 years / 9 years ago
+// 9 years / in 9 years / 9 years ago
+return b||d?e+(_d(a)?"roky":"rokov"):e+"rokmi"}}
+//! moment.js locale configuration
+//! locale : Slovenian [sl]
+//! author : Robert Sedovšek : https://github.com/sedovsek
+function be(a,b,c,d){var e=a+" ";switch(c){case"s":return b||d?"nekaj sekund":"nekaj sekundami";case"m":return b?"ena minuta":"eno minuto";case"mm":return e+=1===a?b?"minuta":"minuto":2===a?b||d?"minuti":"minutama":a<5?b||d?"minute":"minutami":b||d?"minut":"minutami";case"h":return b?"ena ura":"eno uro";case"hh":return e+=1===a?b?"ura":"uro":2===a?b||d?"uri":"urama":a<5?b||d?"ure":"urami":b||d?"ur":"urami";case"d":return b||d?"en dan":"enim dnem";case"dd":return e+=1===a?b||d?"dan":"dnem":2===a?b||d?"dni":"dnevoma":b||d?"dni":"dnevi";case"M":return b||d?"en mesec":"enim mesecem";case"MM":return e+=1===a?b||d?"mesec":"mesecem":2===a?b||d?"meseca":"mesecema":a<5?b||d?"mesece":"meseci":b||d?"mesecev":"meseci";case"y":return b||d?"eno leto":"enim letom";case"yy":return e+=1===a?b||d?"leto":"letom":2===a?b||d?"leti":"letoma":a<5?b||d?"leta":"leti":b||d?"let":"leti"}}function ce(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"leS":a.indexOf("jar")!==-1?b.slice(0,-3)+"waQ":a.indexOf("DIS")!==-1?b.slice(0,-3)+"nem":b+" pIq"}function de(a){var b=a;return b=a.indexOf("jaj")!==-1?b.slice(0,-3)+"Hu’":a.indexOf("jar")!==-1?b.slice(0,-3)+"wen":a.indexOf("DIS")!==-1?b.slice(0,-3)+"ben":b+" ret"}function ee(a,b,c,d){var e=fe(a);switch(c){case"mm":return e+" tup";case"hh":return e+" rep";case"dd":return e+" jaj";case"MM":return e+" jar";case"yy":return e+" DIS"}}function fe(a){var b=Math.floor(a%1e3/100),c=Math.floor(a%100/10),d=a%10,e="";return b>0&&(e+=Fh[b]+"vatlh"),c>0&&(e+=(""!==e?" ":"")+Fh[c]+"maH"),d>0&&(e+=(""!==e?" ":"")+Fh[d]),""===e?"pagh":e}function ge(a,b,c,d){var e={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[a+" míuts",""+a+" míuts"],h:["'n þora","'iensa þora"],hh:[a+" þoras",""+a+" þoras"],d:["'n ziua","'iensa ziua"],dd:[a+" ziuas",""+a+" ziuas"],M:["'n mes","'iens mes"],MM:[a+" mesen",""+a+" mesen"],y:["'n ar","'iens ar"],yy:[a+" ars",""+a+" ars"]};return d?e[c][0]:b?e[c][0]:e[c][1]}
+//! moment.js locale configuration
+//! locale : Ukrainian [uk]
+//! author : zemlanin : https://github.com/zemlanin
+//! Author : Menelion Elensúle : https://github.com/Oire
+function he(a,b){var c=a.split("_");return b%10===1&&b%100!==11?c[0]:b%10>=2&&b%10<=4&&(b%100<10||b%100>=20)?c[1]:c[2]}function ie(a,b,c){var d={mm:b?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:b?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===c?b?"хвилина":"хвилину":"h"===c?b?"година":"годину":a+" "+he(d[c],+a)}function je(a,b){var c={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")},d=/(\[[ВвУу]\]) ?dddd/.test(b)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(b)?"genitive":"nominative";return c[d][a.day()]}function ke(a){return function(){return a+"о"+(11===this.hours()?"б":"")+"] LT"}}var le,me;me=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d<c;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var ne=me,oe=a.momentProperties=[],pe=!1,qe={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var re;re=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)i(a,b)&&c.push(b);return c};var se,te=re,ue={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},ve={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},we="Invalid date",xe="%d",ye=/\d{1,2}/,ze={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Ae={},Be={},Ce=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,De=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ee={},Fe={},Ge=/\d/,He=/\d\d/,Ie=/\d{3}/,Je=/\d{4}/,Ke=/[+-]?\d{6}/,Le=/\d\d?/,Me=/\d\d\d\d?/,Ne=/\d\d\d\d\d\d?/,Oe=/\d{1,3}/,Pe=/\d{1,4}/,Qe=/[+-]?\d{1,6}/,Re=/\d+/,Se=/[+-]?\d+/,Te=/Z|[+-]\d\d:?\d\d/gi,Ue=/Z|[+-]\d\d(?::?\d\d)?/gi,Ve=/[+-]?\d+(\.\d{1,3})?/,We=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Xe={},Ye={},Ze=0,$e=1,_e=2,af=3,bf=4,cf=5,df=6,ef=7,ff=8;se=Array.prototype.indexOf?Array.prototype.indexOf:function(a){
+// I know
+var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1};var gf=se;
+// FORMATTING
+U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),U("MMMM",0,0,function(a){return this.localeData().months(this,a)}),
+// ALIASES
+J("month","M"),
+// PRIORITY
+M("month",8),
+// PARSING
+Z("M",Le),Z("MM",Le,He),Z("MMM",function(a,b){return b.monthsShortRegex(a)}),Z("MMMM",function(a,b){return b.monthsRegex(a)}),ba(["M","MM"],function(a,b){b[$e]=u(a)-1}),ba(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);
+// if we didn't find a month name, mark the date as invalid.
+null!=e?b[$e]=e:m(c).invalidMonth=a});
+// LOCALES
+var hf=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,jf="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),kf="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),lf=We,mf=We;
+// FORMATTING
+U("Y",0,0,function(){var a=this.year();return a<=9999?""+a:"+"+a}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),
+// ALIASES
+J("year","y"),
+// PRIORITIES
+M("year",1),
+// PARSING
+Z("Y",Se),Z("YY",Le,He),Z("YYYY",Pe,Je),Z("YYYYY",Qe,Ke),Z("YYYYYY",Qe,Ke),ba(["YYYYY","YYYYYY"],Ze),ba("YYYY",function(b,c){c[Ze]=2===b.length?a.parseTwoDigitYear(b):u(b)}),ba("YY",function(b,c){c[Ze]=a.parseTwoDigitYear(b)}),ba("Y",function(a,b){b[Ze]=parseInt(a,10)}),
+// HOOKS
+a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?1900:2e3)};
+// MOMENTS
+var nf=O("FullYear",!0);
+// FORMATTING
+U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),
+// ALIASES
+J("week","w"),J("isoWeek","W"),
+// PRIORITIES
+M("week",5),M("isoWeek",5),
+// PARSING
+Z("w",Le),Z("ww",Le,He),Z("W",Le),Z("WW",Le,He),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var of={dow:0,// Sunday is the first day of the week.
+doy:6};
+// FORMATTING
+U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),
+// ALIASES
+J("day","d"),J("weekday","e"),J("isoWeekday","E"),
+// PRIORITY
+M("day",11),M("weekday",11),M("isoWeekday",11),
+// PARSING
+Z("d",Le),Z("e",Le),Z("E",Le),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);
+// if we didn't get a weekday name, mark the date as invalid
+null!=e?b.d=e:m(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)});
+// LOCALES
+var pf="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),qf="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),rf="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),sf=We,tf=We,uf=We;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1),
+// ALIASES
+J("hour","h"),
+// PRIORITY
+M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Le),Z("h",Le),Z("HH",Le,He),Z("hh",Le,He),Z("hmm",Me),Z("hmmss",Ne),Z("Hmm",Me),Z("Hmmss",Ne),ba(["H","HH"],af),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[af]=u(a),m(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d)),m(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d,2)),b[cf]=u(a.substr(e)),m(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[af]=u(a.substr(0,d)),b[bf]=u(a.substr(d,2)),b[cf]=u(a.substr(e))});var vf,wf=/[ap]\.?m?\.?/i,xf=O("Hours",!0),yf={calendar:ue,longDateFormat:ve,invalidDate:we,ordinal:xe,ordinalParse:ye,relativeTime:ze,months:jf,monthsShort:kf,week:of,weekdays:pf,weekdaysMin:rf,weekdaysShort:qf,meridiemParse:wf},zf={},Af={},Bf=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Cf=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Df=/Z|[+-]\d\d(?::?\d\d)?/,Ef=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],
+// YYYYMM is NOT allowed by the standard
+["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ff=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Gf=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=x("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),
+// constant that refers to the ISO standard
+a.ISO_8601=function(){};var Hf=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?a<this?this:a:o()}),If=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:o()}),Jf=function(){return Date.now?Date.now():+new Date};zb("Z",":"),zb("ZZ",""),
+// PARSING
+Z("Z",Ue),Z("ZZ",Ue),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ab(Ue,a)});
+// HELPERS
+// timezone chunker
+// '+10:00' > ['10', '00']
+// '-1530' > ['-15', '30']
+var Kf=/([\+\-]|\d\d)/gi;
+// HOOKS
+// This function will be called whenever a moment is mutated.
+// It is intended to keep the offset in sync with the timezone.
+a.updateOffset=function(){};
+// ASP.NET json date format regex
+var Lf=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Mf=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ob.fn=wb.prototype;var Nf=Sb(1,"add"),Of=Sb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Pf=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});
+// FORMATTING
+U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),zc("gggg","weekYear"),zc("ggggg","weekYear"),zc("GGGG","isoWeekYear"),zc("GGGGG","isoWeekYear"),
+// ALIASES
+J("weekYear","gg"),J("isoWeekYear","GG"),
+// PRIORITY
+M("weekYear",1),M("isoWeekYear",1),
+// PARSING
+Z("G",Se),Z("g",Se),Z("GG",Le,He),Z("gg",Le,He),Z("GGGG",Pe,Je),Z("gggg",Pe,Je),Z("GGGGG",Qe,Ke),Z("ggggg",Qe,Ke),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),
+// FORMATTING
+U("Q",0,"Qo","quarter"),
+// ALIASES
+J("quarter","Q"),
+// PRIORITY
+M("quarter",7),
+// PARSING
+Z("Q",Ge),ba("Q",function(a,b){b[$e]=3*(u(a)-1)}),
+// FORMATTING
+U("D",["DD",2],"Do","date"),
+// ALIASES
+J("date","D"),
+// PRIOROITY
+M("date",9),
+// PARSING
+Z("D",Le),Z("DD",Le,He),Z("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),ba(["D","DD"],_e),ba("Do",function(a,b){b[_e]=u(a.match(Le)[0],10)});
+// MOMENTS
+var Qf=O("Date",!0);
+// FORMATTING
+U("DDD",["DDDD",3],"DDDo","dayOfYear"),
+// ALIASES
+J("dayOfYear","DDD"),
+// PRIORITY
+M("dayOfYear",4),
+// PARSING
+Z("DDD",Oe),Z("DDDD",Ie),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),
+// FORMATTING
+U("m",["mm",2],0,"minute"),
+// ALIASES
+J("minute","m"),
+// PRIORITY
+M("minute",14),
+// PARSING
+Z("m",Le),Z("mm",Le,He),ba(["m","mm"],bf);
+// MOMENTS
+var Rf=O("Minutes",!1);
+// FORMATTING
+U("s",["ss",2],0,"second"),
+// ALIASES
+J("second","s"),
+// PRIORITY
+M("second",15),
+// PARSING
+Z("s",Le),Z("ss",Le,He),ba(["s","ss"],cf);
+// MOMENTS
+var Sf=O("Seconds",!1);
+// FORMATTING
+U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),
+// ALIASES
+J("millisecond","ms"),
+// PRIORITY
+M("millisecond",16),
+// PARSING
+Z("S",Oe,Ge),Z("SS",Oe,He),Z("SSS",Oe,Ie);var Tf;for(Tf="SSSS";Tf.length<=9;Tf+="S")Z(Tf,Re);for(Tf="S";Tf.length<=9;Tf+="S")ba(Tf,Ic);
+// MOMENTS
+var Uf=O("Milliseconds",!1);
+// FORMATTING
+U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var Vf=r.prototype;Vf.add=Nf,Vf.calendar=Vb,Vf.clone=Wb,Vf.diff=bc,Vf.endOf=oc,Vf.format=gc,Vf.from=hc,Vf.fromNow=ic,Vf.to=jc,Vf.toNow=kc,Vf.get=R,Vf.invalidAt=xc,Vf.isAfter=Xb,Vf.isBefore=Yb,Vf.isBetween=Zb,Vf.isSame=$b,Vf.isSameOrAfter=_b,Vf.isSameOrBefore=ac,Vf.isValid=vc,Vf.lang=Pf,Vf.locale=lc,Vf.localeData=mc,Vf.max=If,Vf.min=Hf,Vf.parsingFlags=wc,Vf.set=S,Vf.startOf=nc,Vf.subtract=Of,Vf.toArray=sc,Vf.toObject=tc,Vf.toDate=rc,Vf.toISOString=ec,Vf.inspect=fc,Vf.toJSON=uc,Vf.toString=dc,Vf.unix=qc,Vf.valueOf=pc,Vf.creationData=yc,
+// Year
+Vf.year=nf,Vf.isLeapYear=ra,
+// Week Year
+Vf.weekYear=Ac,Vf.isoWeekYear=Bc,
+// Quarter
+Vf.quarter=Vf.quarters=Gc,
+// Month
+Vf.month=ka,Vf.daysInMonth=la,
+// Week
+Vf.week=Vf.weeks=Ba,Vf.isoWeek=Vf.isoWeeks=Ca,Vf.weeksInYear=Dc,Vf.isoWeeksInYear=Cc,
+// Day
+Vf.date=Qf,Vf.day=Vf.days=Ka,Vf.weekday=La,Vf.isoWeekday=Ma,Vf.dayOfYear=Hc,
+// Hour
+Vf.hour=Vf.hours=xf,
+// Minute
+Vf.minute=Vf.minutes=Rf,
+// Second
+Vf.second=Vf.seconds=Sf,
+// Millisecond
+Vf.millisecond=Vf.milliseconds=Uf,
+// Offset
+Vf.utcOffset=Db,Vf.utc=Fb,Vf.local=Gb,Vf.parseZone=Hb,Vf.hasAlignedHourOffset=Ib,Vf.isDST=Jb,Vf.isLocal=Lb,Vf.isUtcOffset=Mb,Vf.isUtc=Nb,Vf.isUTC=Nb,
+// Timezone
+Vf.zoneAbbr=Jc,Vf.zoneName=Kc,
+// Deprecations
+Vf.dates=x("dates accessor is deprecated. Use date instead.",Qf),Vf.months=x("months accessor is deprecated. Use month instead",ka),Vf.years=x("years accessor is deprecated. Use year instead",nf),Vf.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Eb),Vf.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Kb);var Wf=C.prototype;Wf.calendar=D,Wf.longDateFormat=E,Wf.invalidDate=F,Wf.ordinal=G,Wf.preparse=Nc,Wf.postformat=Nc,Wf.relativeTime=H,Wf.pastFuture=I,Wf.set=A,
+// Month
+Wf.months=fa,Wf.monthsShort=ga,Wf.monthsParse=ia,Wf.monthsRegex=na,Wf.monthsShortRegex=ma,
+// Week
+Wf.week=ya,Wf.firstDayOfYear=Aa,Wf.firstDayOfWeek=za,
+// Day of Week
+Wf.weekdays=Fa,Wf.weekdaysMin=Ha,Wf.weekdaysShort=Ga,Wf.weekdaysParse=Ja,Wf.weekdaysRegex=Na,Wf.weekdaysShortRegex=Oa,Wf.weekdaysMinRegex=Pa,
+// Hours
+Wf.isPM=Va,Wf.meridiem=Wa,$a("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),
+// Side effect imports
+a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var Xf=Math.abs,Yf=ed("ms"),Zf=ed("s"),$f=ed("m"),_f=ed("h"),ag=ed("d"),bg=ed("w"),cg=ed("M"),dg=ed("y"),eg=gd("milliseconds"),fg=gd("seconds"),gg=gd("minutes"),hg=gd("hours"),ig=gd("days"),jg=gd("months"),kg=gd("years"),lg=Math.round,mg={s:45,// seconds to minute
+m:45,// minutes to hour
+h:22,// hours to day
+d:26,// days to month
+M:11},ng=Math.abs,og=wb.prototype;og.abs=Wc,og.add=Yc,og.subtract=Zc,og.as=cd,og.asMilliseconds=Yf,og.asSeconds=Zf,og.asMinutes=$f,og.asHours=_f,og.asDays=ag,og.asWeeks=bg,og.asMonths=cg,og.asYears=dg,og.valueOf=dd,og._bubble=_c,og.get=fd,og.milliseconds=eg,og.seconds=fg,og.minutes=gg,og.hours=hg,og.days=ig,og.weeks=hd,og.months=jg,og.years=kg,og.humanize=md,og.toISOString=nd,og.toString=nd,og.toJSON=nd,og.locale=lc,og.localeData=mc,
+// Deprecations
+og.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nd),og.lang=Pf,
+// Side effect imports
+// FORMATTING
+U("X",0,0,"unix"),U("x",0,0,"valueOf"),
+// PARSING
+Z("x",Se),Z("X",Ve),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}),
+// Side effect imports
+//! moment.js
+//! version : 2.17.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+a.version="2.17.1",b(sb),a.fn=Vf,a.min=ub,a.max=vb,a.now=Jf,a.utc=k,a.unix=Lc,a.months=Rc,a.isDate=g,a.locale=$a,a.invalid=o,a.duration=Ob,a.isMoment=s,a.weekdays=Tc,a.parseZone=Mc,a.localeData=bb,a.isDuration=xb,a.monthsShort=Sc,a.weekdaysMin=Vc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Uc,a.normalizeUnits=K,a.relativeTimeRounding=kd,a.relativeTimeThreshold=ld,a.calendarFormat=Ub,a.prototype=Vf,
+//! moment.js locale configuration
+//! locale : Afrikaans [af]
+//! author : Werner Mollentze : https://github.com/wernerm
+a.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(a){return/^nm$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"vm":"VM":c?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Maandag is die eerste dag van die week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Arabic (Algeria) [ar-dz]
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+a.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,// Sunday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Arabic (Lybia) [ar-ly]
+//! author : Ali Hmer: https://github.com/kikoanis
+var pg={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},qg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},rg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},sg=function(a){return function(b,c,d,e){var f=qg(b),g=rg[a][qg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},tg=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];a.defineLocale("ar-ly",{months:tg,monthsShort:tg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:sg("s"),m:sg("m"),mm:sg("m"),h:sg("h"),hh:sg("h"),d:sg("d"),dd:sg("d"),M:sg("M"),MM:sg("M"),y:sg("y"),yy:sg("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return pg[a]}).replace(/,/g,"،")},week:{dow:6,// Saturday is the first day of the week.
+doy:12}}),
+//! moment.js locale configuration
+//! locale : Arabic (Morocco) [ar-ma]
+//! author : ElFadili Yassine : https://github.com/ElFadiliY
+//! author : Abdel Said : https://github.com/abdelsaid
+a.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,// Saturday is the first day of the week.
+doy:12}});
+//! moment.js locale configuration
+//! locale : Arabic (Saudi Arabia) [ar-sa]
+//! author : Suhail Alkowaileet : https://github.com/xsoh
+var ug={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},vg={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};a.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(a){return a.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return vg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return ug[a]}).replace(/,/g,"،")},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Arabic (Tunisia) [ar-tn]
+//! author : Nader Toukabri : https://github.com/naderio
+a.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Arabic [ar]
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+var wg={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},xg={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},yg=function(a){return 0===a?0:1===a?1:2===a?2:a%100>=3&&a%100<=10?3:a%100>=11?4:5},zg={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},Ag=function(a){return function(b,c,d,e){var f=yg(b),g=zg[a][yg(b)];return 2===f&&(g=g[c?0:1]),g.replace(/%d/i,b)}},Bg=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];a.defineLocale("ar",{months:Bg,monthsShort:Bg,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(a){return"م"===a},meridiem:function(a,b,c){return a<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:Ag("s"),m:Ag("m"),mm:Ag("m"),h:Ag("h"),hh:Ag("h"),d:Ag("d"),dd:Ag("d"),M:Ag("M"),MM:Ag("M"),y:Ag("y"),yy:Ag("y")},preparse:function(a){return a.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(a){return xg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return wg[a]}).replace(/,/g,"،")},week:{dow:6,// Saturday is the first day of the week.
+doy:12}});
+//! moment.js locale configuration
+//! locale : Azerbaijani [az]
+//! author : topchiyev : https://github.com/topchiyev
+var Cg={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};a.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(a){return/^(gündüz|axşam)$/.test(a)},meridiem:function(a,b,c){return a<4?"gecə":a<12?"səhər":a<17?"gündüz":"axşam"},ordinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(a){if(0===a)// special case for zero
+return a+"-ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Cg[b]||Cg[c]||Cg[d])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:pd,mm:pd,h:pd,hh:pd,d:"дзень",dd:pd,M:"месяц",MM:pd,y:"год",yy:pd},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(a){return/^(дня|вечара)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночы":a<12?"раніцы":a<17?"дня":"вечара"},ordinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a%10!==2&&a%10!==3||a%100===12||a%100===13?a+"-ы":a+"-і";case"D":return a+"-га";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Bulgarian [bg]
+//! author : Krasen Borisov : https://github.com/kraz
+a.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Bengali [bn]
+//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
+var Dg={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},Eg={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};a.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(a){return a.replace(/[১২৩৪৫৬৭৮৯০]/g,function(a){return Eg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Dg[a]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(a,b){return 12===a&&(a=0),"রাত"===b&&a>=4||"দুপুর"===b&&a<5||"বিকাল"===b?a+12:a},meridiem:function(a,b,c){return a<4?"রাত":a<10?"সকাল":a<17?"দুপুর":a<20?"বিকাল":"রাত"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}});
+//! moment.js locale configuration
+//! locale : Tibetan [bo]
+//! author : Thupten N. Chakrishar : https://github.com/vajradog
+var Fg={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},Gg={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};a.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(a){return a.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(a){return Gg[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Fg[a]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(a,b){return 12===a&&(a=0),"མཚན་མོ"===b&&a>=4||"ཉིན་གུང"===b&&a<5||"དགོང་དག"===b?a+12:a},meridiem:function(a,b,c){return a<4?"མཚན་མོ":a<10?"ཞོགས་ཀས":a<17?"ཉིན་གུང":a<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),a.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:qd,h:"un eur",hh:"%d eur",d:"un devezh",dd:qd,M:"ur miz",MM:qd,y:"ur bloaz",yy:rd},ordinalParse:/\d{1,2}(añ|vet)/,ordinal:function(a){var b=1===a?"añ":"vet";return a+b},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:vd,mm:vd,h:vd,hh:vd,d:"dan",dd:vd,M:"mjesec",MM:vd,y:"godinu",yy:vd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Catalan [ca]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+a.defineLocale("ca",{months:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),monthsShort:"gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd D MMMM YYYY H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},ordinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(a,b){var c=1===a?"r":2===a?"n":3===a?"r":4===a?"t":"è";return"w"!==b&&"W"!==b||(c="a"),a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Czech [cs]
+//! author : petrbela : https://github.com/petrbela
+var Hg="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),Ig="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");a.defineLocale("cs",{months:Hg,monthsShort:Ig,monthsParse:function(a,b){var c,d=[];for(c=0;c<12;c++)
+// use custom parser to solve problem with July (červenec)
+d[c]=new RegExp("^"+a[c]+"$|^"+b[c]+"$","i");return d}(Hg,Ig),shortMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Ig),longMonthsParse:function(a){var b,c=[];for(b=0;b<12;b++)c[b]=new RegExp("^"+a[b]+"$","i");return c}(Hg),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:xd,m:xd,mm:xd,h:xd,hh:xd,d:xd,dd:xd,M:xd,MM:xd,y:xd,yy:xd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Chuvash [cv]
+//! author : Anatoly Mironov : https://github.com/mirontoli
+a.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(a){var b=/сехет$/i.exec(a)?"рен":/ҫул$/i.exec(a)?"тан":"ран";return a+b},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},ordinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Welsh [cy]
+//! author : Robert Allen : https://github.com/robgallen
+//! author : https://github.com/ryangreaves
+a.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,
+// time formats are the same as en-gb
+longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},ordinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+// traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+ordinal:function(a){var b=a,c="",d=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed",// 1af to 10fed
+"eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return b>20?c=40===b||50===b||60===b||80===b||100===b?"fed":"ain":b>0&&(c=d[b]),a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Danish [da]
+//! author : Ulrik Nielsen : https://github.com/mrbase
+a.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY HH:mm"},calendar:{sameDay:"[I dag kl.] LT",nextDay:"[I morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[I går kl.] LT",lastWeek:"[sidste] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:yd,mm:"%d Minuten",h:yd,hh:"%d Stunden",d:yd,dd:yd,M:yd,MM:yd,y:yd,yy:yd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:zd,mm:"%d Minuten",h:zd,hh:"%d Stunden",d:zd,dd:zd,M:zd,MM:zd,y:zd,yy:zd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Maldivian [dv]
+//! author : Jawish Hameed : https://github.com/jawish
+var Jg=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],Kg=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];a.defineLocale("dv",{months:Jg,monthsShort:Jg,weekdays:Kg,weekdaysShort:Kg,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(a){return"މފ"===a},meridiem:function(a,b,c){return a<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(a){return a.replace(/،/g,",")},postformat:function(a){return a.replace(/,/g,"،")},week:{dow:7,// Sunday is the first day of the week.
+doy:12}}),
+//! moment.js locale configuration
+//! locale : Greek [el]
+//! author : Aggelos Karalias : https://github.com/mehiel
+a.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(a,b){return/D/.test(b.substring(0,b.indexOf("MMMM")))?this._monthsGenitiveEl[a.month()]:this._monthsNominativeEl[a.month()]},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(a,b,c){return a>11?c?"μμ":"ΜΜ":c?"πμ":"ΠΜ"},isPM:function(a){return"μ"===(a+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(a,b){var c=this._calendarEl[a],d=b&&b.hours();return z(c)&&(c=c.apply(b)),c.replace("{}",d%12===1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},ordinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (Australia) [en-au]
+//! author : Jared Morse : https://github.com/jarcoal
+a.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (Canada) [en-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+a.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),
+//! moment.js locale configuration
+//! locale : English (United Kingdom) [en-gb]
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+a.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (Ireland) [en-ie]
+//! author : Chris Cartlidge : https://github.com/chriscartlidge
+a.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : English (New Zealand) [en-nz]
+//! author : Luke McGregor : https://github.com/lukemcgregor
+a.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Esperanto [eo]
+//! author : Colin Dean : https://github.com/colindean
+//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+a.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato".split("_"),weekdaysShort:"Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Ĵa_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-an de] MMMM, YYYY",LLL:"D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-an de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(a){return"p"===a.charAt(0).toLowerCase()},meridiem:function(a,b,c){return a>11?c?"p.t.m.":"P.T.M.":c?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"je %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",//ne 'diurno', ĉar estas uzita por proksimumo
+dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},ordinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Spanish (Dominican Republic) [es-do]
+var Lg="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Mg="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Mg[a.month()]:Lg[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Spanish [es]
+//! author : Julio Napurí : https://github.com/julionc
+var Ng="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),Og="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");a.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Og[a.month()]:Ng[a.month()]},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:Ad,m:Ad,mm:Ad,h:Ad,hh:Ad,d:Ad,dd:"%d päeva",M:Ad,MM:Ad,y:Ad,yy:Ad},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Basque [eu]
+//! author : Eneko Illarramendi : https://github.com/eillarra
+a.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Persian [fa]
+//! author : Ebrahim Byagowi : https://github.com/ebraminio
+var Pg={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},Qg={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};a.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(a){return/بعد از ظهر/.test(a)},meridiem:function(a,b,c){return a<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چندین ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(a){return a.replace(/[۰-۹]/g,function(a){return Qg[a]}).replace(/،/g,",")},postformat:function(a){return a.replace(/\d/g,function(a){return Pg[a]}).replace(/,/g,"،")},ordinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,// Saturday is the first day of the week.
+doy:12}});
+//! moment.js locale configuration
+//! locale : Finnish [fi]
+//! author : Tarmo Aidantausta : https://github.com/bleadof
+var Rg="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),Sg=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",Rg[7],Rg[8],Rg[9]];a.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:Bd,m:Bd,mm:Bd,h:Bd,hh:Bd,d:Bd,dd:Bd,M:Bd,MM:Bd,y:Bd,yy:Bd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Faroese [fo]
+//! author : Ragnar Johannesen : https://github.com/ragnar123
+a.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : French (Canada) [fr-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+a.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")}}),
+//! moment.js locale configuration
+//! locale : French (Switzerland) [fr-ch]
+//! author : Gaspard Bucher : https://github.com/gaspard
+a.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|e)/,ordinal:function(a){return a+(1===a?"er":"e")},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : French [fr]
+//! author : John Fischer : https://github.com/jfroffice
+a.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd'hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},ordinalParse:/\d{1,2}(er|)/,ordinal:function(a){return a+(1===a?"er":"")},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Frisian [fy]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+var Tg="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),Ug="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");a.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?Ug[a.month()]:Tg[a.month()]},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Scottish Gaelic [gd]
+//! author : Jon Ashdown : https://github.com/jonashdown
+var Vg=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],Wg=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],Xg=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],Yg=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],Zg=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];a.defineLocale("gd",{months:Vg,monthsShort:Wg,monthsParseExact:!0,weekdays:Xg,weekdaysShort:Yg,weekdaysMin:Zg,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},ordinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(a){var b=1===a?"d":a%10===2?"na":"mh";return a+b},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Galician [gl]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+a.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(a){return 0===a.indexOf("un")?"n"+a:"en "+a},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Hebrew [he]
+//! author : Tomer Cohen : https://github.com/tomer
+//! author : Moshe Simantov : https://github.com/DevelopmentIL
+//! author : Tal Ater : https://github.com/TalAter
+a.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(a){return 2===a?"שעתיים":a+" שעות"},d:"יום",dd:function(a){return 2===a?"יומיים":a+" ימים"},M:"חודש",MM:function(a){return 2===a?"חודשיים":a+" חודשים"},y:"שנה",yy:function(a){return 2===a?"שנתיים":a%10===0&&10!==a?a+" שנה":a+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(a){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(a)},meridiem:function(a,b,c){return a<5?"לפנות בוקר":a<10?"בבוקר":a<12?c?'לפנה"צ':"לפני הצהריים":a<18?c?'אחה"צ':"אחרי הצהריים":"בערב"}});
+//! moment.js locale configuration
+//! locale : Hindi [hi]
+//! author : Mayank Singhal : https://github.com/mayanksinghal
+var $g={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},_g={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return _g[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return $g[a]})},
+// Hindi notation for meridiems are quite fuzzy in practice. While there exists
+// a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात"===b?a<4?a:a+12:"सुबह"===b?a:"दोपहर"===b?a>=10?a:a+12:"शाम"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात":a<10?"सुबह":a<17?"दोपहर":a<20?"शाम":"रात"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),a.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:Dd,mm:Dd,h:Dd,hh:Dd,d:"dan",dd:Dd,M:"mjesec",MM:Dd,y:"godinu",yy:Dd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Hungarian [hu]
+//! author : Adam Brunner : https://github.com/adambrunner
+var ah="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");a.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(a){return"u"===a.charAt(1).toLowerCase()},meridiem:function(a,b,c){return a<12?c===!0?"de":"DE":c===!0?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return Fd.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return Fd.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:Ed,m:Ed,mm:Ed,h:Ed,hh:Ed,d:Ed,dd:Ed,M:Ed,MM:Ed,y:Ed,yy:Ed},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Armenian [hy-am]
+//! author : Armendarabyan : https://github.com/armendarabyan
+a.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(a){return/^(ցերեկվա|երեկոյան)$/.test(a)},meridiem:function(a){return a<4?"գիշերվա":a<12?"առավոտվա":a<17?"ցերեկվա":"երեկոյան"},ordinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(a,b){switch(b){case"DDD":case"w":case"W":case"DDDo":return 1===a?a+"-ին":a+"-րդ";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Indonesian [id]
+//! author : Mohammad Satrio Utomo : https://github.com/tyok
+//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+a.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"siang"===b?a>=11?a:a+12:"sore"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"siang":a<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:Hd,m:Hd,mm:Hd,h:"klukkustund",hh:Hd,d:Hd,dd:Hd,M:Hd,MM:Hd,y:Hd,yy:Hd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Italian [it]
+//! author : Lorenzo : https://github.com/aliem
+//! author: Mattia Larentis: https://github.com/nostalgiaz
+a.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),weekdaysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),weekdaysMin:"Do_Lu_Ma_Me_Gi_Ve_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(a){return(/^[0-9].+$/.test(a)?"tra":"in")+" "+a},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Japanese [ja]
+//! author : LI Long : https://github.com/baryon
+a.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"Ah時m分",LTS:"Ah時m分s秒",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah時m分",LLLL:"YYYY年M月D日Ah時m分 dddd"},meridiemParse:/午前|午後/i,isPM:function(a){return"午後"===a},meridiem:function(a,b,c){return a<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},ordinalParse:/\d{1,2}日/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";default:return a}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}}),
+//! moment.js locale configuration
+//! locale : Javanese [jv]
+//! author : Rony Lantip : https://github.com/lantip
+//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
+a.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(a,b){return 12===a&&(a=0),"enjing"===b?a:"siyang"===b?a>=11?a:a+12:"sonten"===b||"ndalu"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"enjing":a<15?"siyang":a<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Georgian [ka]
+//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+a.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(a){return/(წამი|წუთი|საათი|წელი)/.test(a)?a.replace(/ი$/,"ში"):a+"ში"},past:function(a){return/(წამი|წუთი|საათი|დღე|თვე)/.test(a)?a.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(a)?a.replace(/წელი$/,"წლის წინ"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},ordinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(a){return 0===a?a:1===a?a+"-ლი":a<20||a<=100&&a%20===0||a%100===0?"მე-"+a:a+"-ე"},week:{dow:1,doy:7}});
+//! moment.js locale configuration
+//! locale : Kazakh [kk]
+//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
+var bh={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};a.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(bh[a]||bh[b]||bh[c])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Cambodian [km]
+//! author : Kruy Vanna : https://github.com/kruyvanna
+a.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Korean [ko]
+//! author : Kyungwook, Park : https://github.com/kyungw00k
+//! author : Jeeeyul Lee <jeeeyul@gmail.com>
+a.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h시 m분",LTS:"A h시 m분 s초",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h시 m분",LLLL:"YYYY년 MMMM D일 dddd A h시 m분"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"일분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},ordinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(a){return"오후"===a},meridiem:function(a,b,c){return a<12?"오전":"오후"}});
+//! moment.js locale configuration
+//! locale : Kyrgyz [ky]
+//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
+var ch={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};a.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},ordinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(a){var b=a%10,c=a>=100?100:null;return a+(ch[a]||ch[b]||ch[c])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){
+// Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:Jd,past:Kd,s:"e puer Sekonnen",m:Id,mm:"%d Minutten",h:Id,hh:"%d Stonnen",d:Id,dd:"%d Deeg",M:Id,MM:"%d Méint",y:Id,yy:"%d Joer"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Lao [lo]
+//! author : Ryan Hart : https://github.com/ryanhart2
+a.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(a){return"ຕອນແລງ"===a},meridiem:function(a,b,c){return a<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},ordinalParse:/(ທີ່)\d{1,2}/,ordinal:function(a){return"ທີ່"+a}});
+//! moment.js locale configuration
+//! locale : Lithuanian [lt]
+//! author : Mindaugas Mozūras : https://github.com/mmozuras
+var dh={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};a.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:Md,m:Nd,mm:Qd,h:Nd,hh:Qd,d:Nd,dd:Qd,M:Nd,MM:Qd,y:Nd,yy:Qd},ordinalParse:/\d{1,2}-oji/,ordinal:function(a){return a+"-oji"},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Latvian [lv]
+//! author : Kristaps Karlsons : https://github.com/skakri
+//! author : Jānis Elmeris : https://github.com/JanisE
+var eh={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};a.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:Ud,m:Td,mm:Sd,h:Td,hh:Sd,d:Td,dd:Sd,M:Td,MM:Sd,y:Td,yy:Sd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Montenegrin [me]
+//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
+var fh={words:{//Different grammatical cases
+m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=fh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+fh.correctGrammaticalCase(a,d)}};a.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:fh.translate,mm:fh.translate,h:fh.translate,hh:fh.translate,d:"dan",dd:fh.translate,M:"mjesec",MM:fh.translate,y:"godinu",yy:fh.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Maori [mi]
+//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
+a.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Macedonian [mk]
+//! author : Borislav Mickov : https://github.com/B0k0
+a.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},ordinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(a){var b=a%10,c=a%100;return 0===a?a+"-ев":0===c?a+"-ен":c>10&&c<20?a+"-ти":1===b?a+"-ви":2===b?a+"-ри":7===b||8===b?a+"-ми":a+"-ти"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Malayalam [ml]
+//! author : Floyd Pink : https://github.com/floydpink
+a.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(a,b){return 12===a&&(a=0),"രാത്രി"===b&&a>=4||"ഉച്ച കഴിഞ്ഞ്"===b||"വൈകുന്നേരം"===b?a+12:a},meridiem:function(a,b,c){return a<4?"രാത്രി":a<12?"രാവിലെ":a<17?"ഉച്ച കഴിഞ്ഞ്":a<20?"വൈകുന്നേരം":"രാത്രി"}});
+//! moment.js locale configuration
+//! locale : Marathi [mr]
+//! author : Harshad Kale : https://github.com/kalehv
+//! author : Vivek Athalye : https://github.com/vnathalye
+var gh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},hh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:Vd,m:Vd,mm:Vd,h:Vd,hh:Vd,d:Vd,dd:Vd,M:Vd,MM:Vd,y:Vd,yy:Vd},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return hh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return gh[a]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(a,b){return 12===a&&(a=0),"रात्री"===b?a<4?a:a+12:"सकाळी"===b?a:"दुपारी"===b?a>=10?a:a+12:"सायंकाळी"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"रात्री":a<10?"सकाळी":a<17?"दुपारी":a<20?"सायंकाळी":"रात्री"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Malay [ms-my]
+//! note : DEPRECATED, the correct one is [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+a.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Malay [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+a.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(a,b){return 12===a&&(a=0),"pagi"===b?a:"tengahari"===b?a>=11?a:a+12:"petang"===b||"malam"===b?a+12:void 0},meridiem:function(a,b,c){return a<11?"pagi":a<15?"tengahari":a<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Burmese [my]
+//! author : Squar team, mysquar.com
+//! author : David Rossellat : https://github.com/gholadr
+//! author : Tin Aung Lin : https://github.com/thanyawzinmin
+var ih={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},jh={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};a.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(a){return a.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(a){return jh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return ih[a]})},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Norwegian Bokmål [nb]
+//! authors : Espen Hovlandsdal : https://github.com/rexxars
+//! Sigurd Gartmann : https://github.com/sigurdga
+a.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Nepalese [ne]
+//! author : suvash : https://github.com/suvash
+var kh={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},lh={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};a.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(a){return a.replace(/[१२३४५६७८९०]/g,function(a){return lh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return kh[a]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(a,b){return 12===a&&(a=0),"राति"===b?a<4?a:a+12:"बिहान"===b?a:"दिउँसो"===b?a>=10?a:a+12:"साँझ"===b?a+12:void 0},meridiem:function(a,b,c){return a<3?"राति":a<12?"बिहान":a<16?"दिउँसो":a<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}});
+//! moment.js locale configuration
+//! locale : Dutch (Belgium) [nl-be]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+var mh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),nh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),oh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],ph=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?nh[a.month()]:mh[a.month()]},monthsRegex:ph,monthsShortRegex:ph,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:oh,longMonthsParse:oh,shortMonthsParse:oh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Dutch [nl]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+var qh="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),rh="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),sh=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],th=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;a.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(a,b){return/-MMM-/.test(b)?rh[a.month()]:qh[a.month()]},monthsRegex:th,monthsShortRegex:th,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:sh,longMonthsParse:sh,shortMonthsParse:sh,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},ordinalParse:/\d{1,2}(ste|de)/,ordinal:function(a){return a+(1===a||8===a||a>=20?"ste":"de")},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Nynorsk [nn]
+//! author : https://github.com/mechuwind
+a.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Punjabi (India) [pa-in]
+//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
+var uh={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},vh={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};a.defineLocale("pa-in",{
+// There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(a){return a.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(a){return vh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return uh[a]})},
+// Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+// a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(a,b){return 12===a&&(a=0),"ਰਾਤ"===b?a<4?a:a+12:"ਸਵੇਰ"===b?a:"ਦੁਪਹਿਰ"===b?a>=10?a:a+12:"ਸ਼ਾਮ"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"ਰਾਤ":a<10?"ਸਵੇਰ":a<17?"ਦੁਪਹਿਰ":a<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}});
+//! moment.js locale configuration
+//! locale : Polish [pl]
+//! author : Rafal Hirsz : https://github.com/evoL
+var wh="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),xh="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");a.defineLocale("pl",{months:function(a,b){return""===b?"("+xh[a.month()]+"|"+wh[a.month()]+")":/D MMMM/.test(b)?xh[a.month()]:wh[a.month()]},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:Xd,mm:Xd,h:Xd,hh:Xd,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:Xd,y:"rok",yy:Xd},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Portuguese (Brazil) [pt-br]
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+a.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){// Saturday + Sunday
+return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº"}),
+//! moment.js locale configuration
+//! locale : Portuguese [pt]
+//! author : Jefferson : https://github.com/jalex79
+a.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Dom_2ª_3ª_4ª_5ª_6ª_Sáb".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){// Saturday + Sunday
+return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},ordinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:Yd,h:"o oră",hh:Yd,d:"o zi",dd:Yd,M:"o lună",MM:Yd,y:"un an",yy:Yd},week:{dow:1,// Monday is the first day of the week.
+doy:7}});var yh=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];
+// http://new.gramota.ru/spravka/rules/139-prop : § 103
+// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+a.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{
+// по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:yh,longMonthsParse:yh,shortMonthsParse:yh,
+// полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+// копия предыдущего
+monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+// полные названия с падежами
+monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+// Выражение, которое соотвествует только сокращённым формам
+monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(a){if(a.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:$d,mm:$d,h:"час",hh:$d,d:"день",dd:$d,M:"месяц",MM:$d,y:"год",yy:$d},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(a){return/^(дня|вечера)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночи":a<12?"утра":a<17?"дня":"вечера"},ordinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":return a+"-й";case"D":return a+"-го";case"w":case"W":return a+"-я";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Northern Sami [se]
+//! authors : Bård Rolstad Henriksen : https://github.com/karamell
+a.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Sinhalese [si]
+//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
+/*jshint -W100*/
+a.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},ordinalParse:/\d{1,2} වැනි/,ordinal:function(a){return a+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(a){return"ප.ව."===a||"පස් වරු"===a},meridiem:function(a,b,c){return a>11?c?"ප.ව.":"පස් වරු":c?"පෙ.ව.":"පෙර වරු"}});
+//! moment.js locale configuration
+//! locale : Slovak [sk]
+//! author : Martin Minka : https://github.com/k2s
+//! based on work of petrbela : https://github.com/petrbela
+var zh="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),Ah="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");a.defineLocale("sk",{months:zh,monthsShort:Ah,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:ae,m:ae,mm:ae,h:ae,hh:ae,d:ae,dd:ae,M:ae,MM:ae,y:ae,yy:ae},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:be,m:be,mm:be,h:be,hh:be,d:be,dd:be,M:be,MM:be,y:be,yy:be},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : Albanian [sq]
+//! author : Flakërim Ismani : https://github.com/flakerimi
+//! author : Menelion Elensúle : https://github.com/Oire
+//! author : Oerd Cukalla : https://github.com/oerd
+a.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(a){return"M"===a.charAt(0)},meridiem:function(a,b,c){return a<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Serbian Cyrillic [sr-cyrl]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+var Bh={words:{//Different grammatical cases
+m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Bh.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Bh.correctGrammaticalCase(a,d)}};a.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){var a=["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:Bh.translate,mm:Bh.translate,h:Bh.translate,hh:Bh.translate,d:"дан",dd:Bh.translate,M:"месец",MM:Bh.translate,y:"годину",yy:Bh.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Serbian [sr]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+var Ch={words:{//Different grammatical cases
+m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(a,b){return 1===a?b[0]:a>=2&&a<=4?b[1]:b[2]},translate:function(a,b,c){var d=Ch.words[c];return 1===c.length?b?d[0]:d[1]:a+" "+Ch.correctGrammaticalCase(a,d)}};a.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){var a=["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"];return a[this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:Ch.translate,mm:Ch.translate,h:Ch.translate,hh:Ch.translate,d:"dan",dd:Ch.translate,M:"mesec",MM:Ch.translate,y:"godinu",yy:Ch.translate},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:7}}),
+//! moment.js locale configuration
+//! locale : siSwati [ss]
+//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
+a.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(a,b,c){return a<11?"ekuseni":a<15?"emini":a<19?"entsambama":"ebusuku"},meridiemHour:function(a,b){return 12===a&&(a=0),"ekuseni"===b?a:"emini"===b?a>=11?a:a+12:"entsambama"===b||"ebusuku"===b?0===a?0:a+12:void 0},ordinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Swedish [sv]
+//! author : Jens Alm : https://github.com/ulmus
+a.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},ordinalParse:/\d{1,2}(e|a)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"e":1===b?"a":2===b?"a":"e";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Swahili [sw]
+//! author : Fahad Kassim : https://github.com/fadsel
+a.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,// Monday is the first day of the week.
+doy:7}});
+//! moment.js locale configuration
+//! locale : Tamil [ta]
+//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+var Dh={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},Eh={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};a.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},ordinalParse:/\d{1,2}வது/,ordinal:function(a){return a+"வது"},preparse:function(a){return a.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(a){return Eh[a]})},postformat:function(a){return a.replace(/\d/g,function(a){return Dh[a]})},
+// refer http://ta.wikipedia.org/s/1er1
+meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(a,b,c){return a<2?" யாமம்":a<6?" வைகறை":a<10?" காலை":a<14?" நண்பகல்":a<18?" எற்பாடு":a<22?" மாலை":" யாமம்"},meridiemHour:function(a,b){return 12===a&&(a=0),"யாமம்"===b?a<2?a:a+12:"வைகறை"===b||"காலை"===b?a:"நண்பகல்"===b&&a>=10?a:a+12},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Telugu [te]
+//! author : Krishna Chaitanya Thota : https://github.com/kcthota
+a.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},ordinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(a,b){return 12===a&&(a=0),"రాత్రి"===b?a<4?a:a+12:"ఉదయం"===b?a:"మధ్యాహ్నం"===b?a>=10?a:a+12:"సాయంత్రం"===b?a+12:void 0},meridiem:function(a,b,c){return a<4?"రాత్రి":a<10?"ఉదయం":a<17?"మధ్యాహ్నం":a<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,// Sunday is the first day of the week.
+doy:6}}),
+//! moment.js locale configuration
+//! locale : Tetun Dili (East Timor) [tet]
+//! author : Joshua Brooks : https://github.com/joshbrooks
+//! author : Onorio De J. Afonso : https://github.com/marobo
+a.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},ordinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),
+//! moment.js locale configuration
+//! locale : Thai [th]
+//! author : Kridsada Thanabulpong : https://github.com/sirn
+a.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),// yes, three characters difference
+weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY/MM/DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(a){return"หลังเที่ยง"===a},meridiem:function(a,b,c){return a<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}}),
+//! moment.js locale configuration
+//! locale : Tagalog (Philippines) [tl-ph]
+//! author : Dan Hagman : https://github.com/hagmandan
+a.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Klingon [tlh]
+//! author : Dominika Kruk : https://github.com/amaranthrose
+var Fh="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");a.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:ce,past:de,s:"puS lup",m:"wa’ tup",mm:ee,h:"wa’ rep",hh:ee,d:"wa’ jaj",dd:ee,M:"wa’ jar",MM:ee,y:"wa’ DIS",yy:ee},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}});
+//! moment.js locale configuration
+//! locale : Turkish [tr]
+//! authors : Erhan Gundogan : https://github.com/erhangundogan,
+//! Burak Yiğit Kaya: https://github.com/BYK
+var Gh={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};
+//! moment.js locale configuration
+//! locale : Talossan [tzl]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+//! author : Iustì Canun
+// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+// This is currently too difficult (maybe even impossible) to add.
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight Latin [tzm-latn]
+//! author : Abdel Said : https://github.com/abdelsaid
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight [tzm]
+//! author : Abdel Said : https://github.com/abdelsaid
+//! moment.js locale configuration
+//! locale : Uzbek [uz]
+//! author : Sardor Muminov : https://github.com/muminoff
+//! moment.js locale configuration
+//! locale : Vietnamese [vi]
+//! author : Bang Nguyen : https://github.com/bangnk
+//! moment.js locale configuration
+//! locale : Pseudo [x-pseudo]
+//! author : Andrew Hood : https://github.com/andrewhood125
+//! moment.js locale configuration
+//! locale : Yoruba Nigeria [yo]
+//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+//! moment.js locale configuration
+//! locale : Chinese (Hong Kong) [zh-hk]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+//! author : Konstantin : https://github.com/skfd
+//! moment.js locale configuration
+//! locale : Chinese (Taiwan) [zh-tw]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+return a.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(a){if(0===a)// special case for zero
+return a+"'ıncı";var b=a%10,c=a%100-b,d=a>=100?100:null;return a+(Gh[b]||Gh[c]||Gh[d])},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(a){return"d'o"===a.toLowerCase()},meridiem:function(a,b,c){return a>11?c?"d'o":"D'O":c?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:ge,m:ge,mm:ge,h:ge,hh:ge,d:ge,dd:ge,M:ge,MM:ge,y:ge,yy:ge},ordinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,// Saturday is the first day of the week.
+doy:12}}),a.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,// Saturday is the first day of the week.
+doy:12}}),a.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:je,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:ke("[Сьогодні "),nextDay:ke("[Завтра "),lastDay:ke("[Вчора "),nextWeek:ke("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return ke("[Минулої] dddd [").call(this);case 1:case 2:case 4:return ke("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:ie,mm:ie,h:"годину",hh:ie,d:"день",dd:ie,M:"місяць",MM:ie,y:"рік",yy:ie},
+// M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(a){return/^(дня|вечора)$/.test(a)},meridiem:function(a,b,c){return a<4?"ночі":a<12?"ранку":a<17?"дня":"вечора"},ordinalParse:/\d{1,2}-(й|го)/,ordinal:function(a,b){switch(b){case"M":case"d":case"DDD":case"w":case"W":return a+"-й";case"D":return a+"-го";default:return a}},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,// Monday is the first day of the week.
+doy:7}}),a.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(a){return/^ch$/i.test(a)},meridiem:function(a,b,c){return a<12?c?"sa":"SA":c?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},ordinalParse:/\d{1,2}/,ordinal:function(a){return a},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===~~(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c},week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},ordinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah点mm分",LTS:"Ah点m分s秒",L:"YYYY-MM-DD",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY-MM-DD",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah点mm分",llll:"YYYY年MMMD日ddddAh点mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"下午"===b||"晚上"===b?a+12:a>=11?a:a+12},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:function(){return 0===this.minutes()?"[今天]Ah[点整]":"[今天]LT"},nextDay:function(){return 0===this.minutes()?"[明天]Ah[点整]":"[明天]LT"},lastDay:function(){return 0===this.minutes()?"[昨天]Ah[点整]":"[昨天]LT"},nextWeek:function(){var b,c;return b=a().startOf("week"),c=this.diff(b,"days")>=7?"[下]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},lastWeek:function(){var b,c;return b=a().startOf("week"),c=this.unix()<b.unix()?"[上]":"[本]",0===this.minutes()?c+"dddAh点整":c+"dddAh点mm"},sameElse:"LL"},ordinalParse:/\d{1,2}(日|月|周)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"周";default:return a}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{
+// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+dow:1,// Monday is the first day of the week.
+doy:4}}),a.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah點mm分",LLLL:"YYYY年MMMD日ddddAh點mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah點mm分",llll:"YYYY年MMMD日ddddAh點mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"Ah點mm分",LTS:"Ah點m分s秒",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah點mm分",LLLL:"YYYY年MMMD日ddddAh點mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日Ah點mm分",llll:"YYYY年MMMD日ddddAh點mm分"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(a,b){return 12===a&&(a=0),"凌晨"===b||"早上"===b||"上午"===b?a:"中午"===b?a>=11?a:a+12:"下午"===b||"晚上"===b?a+12:void 0},meridiem:function(a,b,c){var d=100*a+b;return d<600?"凌晨":d<900?"早上":d<1130?"上午":d<1230?"中午":d<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},ordinalParse:/\d{1,2}(日|月|週)/,ordinal:function(a,b){switch(b){case"d":case"D":case"DDD":return a+"日";case"M":return a+"月";case"w":case"W":return a+"週";default:return a}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}}),a.locale("en"),a}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment.min.js
new file mode 100644
index 00000000000..8c706712d37
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/moment.min.js
@@ -0,0 +1,551 @@
+//! moment.js
+//! version : 2.17.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return od.apply(null,arguments)}
+// This is done to register the method called with moment()
+// without creating circular dependencies.
+function b(a){od=a}function c(a){return a instanceof Array||"[object Array]"===Object.prototype.toString.call(a)}function d(a){
+// IE8 will treat undefined and null as object if it wasn't for
+// input != null
+return null!=a&&"[object Object]"===Object.prototype.toString.call(a)}function e(a){var b;for(b in a)
+// even if its not own property I'd still call it non-empty
+return!1;return!0}function f(a){return"number"==typeof a||"[object Number]"===Object.prototype.toString.call(a)}function g(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function h(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function i(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function j(a,b){for(var c in b)i(b,c)&&(a[c]=b[c]);return i(b,"toString")&&(a.toString=b.toString),i(b,"valueOf")&&(a.valueOf=b.valueOf),a}function k(a,b,c,d){return rb(a,b,c,d,!0).utc()}function l(){
+// We need to deep clone this object.
+return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function m(a){return null==a._pf&&(a._pf=l()),a._pf}function n(a){if(null==a._isValid){var b=m(a),c=qd.call(b.parsedDateParts,function(a){return null!=a}),d=!isNaN(a._d.getTime())&&b.overflow<0&&!b.empty&&!b.invalidMonth&&!b.invalidWeekday&&!b.nullInput&&!b.invalidFormat&&!b.userInvalidated&&(!b.meridiem||b.meridiem&&c);if(a._strict&&(d=d&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour),null!=Object.isFrozen&&Object.isFrozen(a))return d;a._isValid=d}return a._isValid}function o(a){var b=k(NaN);return null!=a?j(m(b),a):m(b).userInvalidated=!0,b}function p(a){return void 0===a}function q(a,b){var c,d,e;if(p(b._isAMomentObject)||(a._isAMomentObject=b._isAMomentObject),p(b._i)||(a._i=b._i),p(b._f)||(a._f=b._f),p(b._l)||(a._l=b._l),p(b._strict)||(a._strict=b._strict),p(b._tzm)||(a._tzm=b._tzm),p(b._isUTC)||(a._isUTC=b._isUTC),p(b._offset)||(a._offset=b._offset),p(b._pf)||(a._pf=m(b)),p(b._locale)||(a._locale=b._locale),rd.length>0)for(c in rd)d=rd[c],e=b[d],p(e)||(a[d]=e);return a}
+// Moment prototype object
+function r(b){q(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),
+// Prevent infinite loop in case updateOffset creates new moment
+// objects.
+sd===!1&&(sd=!0,a.updateOffset(this),sd=!1)}function s(a){return a instanceof r||null!=a&&null!=a._isAMomentObject}function t(a){return a<0?Math.ceil(a)||0:Math.floor(a)}function u(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=t(b)),c}
+// compare two arrays, return the number of differences
+function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;d<e;d++)(c&&a[d]!==b[d]||!c&&u(a[d])!==u(b[d]))&&g++;return g+f}function w(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function x(b,c){var d=!0;return j(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,b),d){for(var e,f=[],g=0;g<arguments.length;g++){if(e="","object"==typeof arguments[g]){e+="\n["+g+"] ";for(var h in arguments[0])e+=h+": "+arguments[0][h]+", ";e=e.slice(0,-2)}else e=arguments[g];f.push(e)}w(b+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),d=!1}return c.apply(this,arguments)},c)}function y(b,c){null!=a.deprecationHandler&&a.deprecationHandler(b,c),td[b]||(w(c),td[b]=!0)}function z(a){return a instanceof Function||"[object Function]"===Object.prototype.toString.call(a)}function A(a){var b,c;for(c in a)b=a[c],z(b)?this[c]=b:this["_"+c]=b;this._config=a,
+// Lenient ordinal parsing accepts just a number in addition to
+// number + (possibly) stuff coming from _ordinalParseLenient.
+this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function B(a,b){var c,e=j({},a);for(c in b)i(b,c)&&(d(a[c])&&d(b[c])?(e[c]={},j(e[c],a[c]),j(e[c],b[c])):null!=b[c]?e[c]=b[c]:delete e[c]);for(c in a)i(a,c)&&!i(b,c)&&d(a[c])&&(
+// make sure changes to properties don't modify parent config
+e[c]=j({},e[c]));return e}function C(a){null!=a&&this.set(a)}function D(a,b,c){var d=this._calendar[a]||this._calendar.sameElse;return z(d)?d.call(b,c):d}function E(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function F(){return this._invalidDate}function G(a){return this._ordinal.replace("%d",a)}function H(a,b,c,d){var e=this._relativeTime[c];return z(e)?e(a,b,c,d):e.replace(/%d/i,a)}function I(a,b){var c=this._relativeTime[a>0?"future":"past"];return z(c)?c(b):c.replace(/%s/i,b)}function J(a,b){var c=a.toLowerCase();Dd[c]=Dd[c+"s"]=Dd[b]=a}function K(a){return"string"==typeof a?Dd[a]||Dd[a.toLowerCase()]:void 0}function L(a){var b,c,d={};for(c in a)i(a,c)&&(b=K(c),b&&(d[b]=a[c]));return d}function M(a,b){Ed[a]=b}function N(a){var b=[];for(var c in a)b.push({unit:c,priority:Ed[c]});return b.sort(function(a,b){return a.priority-b.priority}),b}function O(b,c){return function(d){return null!=d?(Q(this,b,d),a.updateOffset(this,c),this):P(this,b)}}function P(a,b){return a.isValid()?a._d["get"+(a._isUTC?"UTC":"")+b]():NaN}function Q(a,b,c){a.isValid()&&a._d["set"+(a._isUTC?"UTC":"")+b](c)}
+// MOMENTS
+function R(a){return a=K(a),z(this[a])?this[a]():this}function S(a,b){if("object"==typeof a){a=L(a);for(var c=N(a),d=0;d<c.length;d++)this[c[d].unit](a[c[d].unit])}else if(a=K(a),z(this[a]))return this[a](b);return this}function T(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}
+// token: 'M'
+// padded: ['MM', 2]
+// ordinal: 'Mo'
+// callback: function () { this.month() + 1 }
+function U(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Id[a]=e),b&&(Id[b[0]]=function(){return T(e.apply(this,arguments),b[1],b[2])}),c&&(Id[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function V(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function W(a){var b,c,d=a.match(Fd);for(b=0,c=d.length;b<c;b++)Id[d[b]]?d[b]=Id[d[b]]:d[b]=V(d[b]);return function(b){var e,f="";for(e=0;e<c;e++)f+=d[e]instanceof Function?d[e].call(b,a):d[e];return f}}
+// format date using native date object
+function X(a,b){return a.isValid()?(b=Y(b,a.localeData()),Hd[b]=Hd[b]||W(b),Hd[b](a)):a.localeData().invalidDate()}function Y(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Gd.lastIndex=0;d>=0&&Gd.test(a);)a=a.replace(Gd,c),Gd.lastIndex=0,d-=1;return a}function Z(a,b,c){$d[a]=z(b)?b:function(a,d){return a&&c?c:b}}function $(a,b){return i($d,a)?$d[a](b._strict,b._locale):new RegExp(_(a))}
+// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+function _(a){return aa(a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}))}function aa(a){return a.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function ba(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),f(b)&&(d=function(a,c){c[b]=u(a)}),c=0;c<a.length;c++)_d[a[c]]=d}function ca(a,b){ba(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function da(a,b,c){null!=b&&i(_d,a)&&_d[a](b,c._a,c,a)}function ea(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function fa(a,b){return a?c(this._months)?this._months[a.month()]:this._months[(this._months.isFormat||ke).test(b)?"format":"standalone"][a.month()]:this._months}function ga(a,b){return a?c(this._monthsShort)?this._monthsShort[a.month()]:this._monthsShort[ke.test(b)?"format":"standalone"][a.month()]:this._monthsShort}function ha(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._monthsParse)for(
+// this is not used
+this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],d=0;d<12;++d)f=k([2e3,d]),this._shortMonthsParse[d]=this.monthsShort(f,"").toLocaleLowerCase(),this._longMonthsParse[d]=this.months(f,"").toLocaleLowerCase();return c?"MMM"===b?(e=je.call(this._shortMonthsParse,g),e!==-1?e:null):(e=je.call(this._longMonthsParse,g),e!==-1?e:null):"MMM"===b?(e=je.call(this._shortMonthsParse,g),e!==-1?e:(e=je.call(this._longMonthsParse,g),e!==-1?e:null)):(e=je.call(this._longMonthsParse,g),e!==-1?e:(e=je.call(this._shortMonthsParse,g),e!==-1?e:null))}function ia(a,b,c){var d,e,f;if(this._monthsParseExact)return ha.call(this,a,b,c);
+// TODO: add sorting
+// Sorting makes sure if one month (or abbr) is a prefix of another
+// see sorting in computeMonthsParse
+for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;d<12;d++){
+// test the regex
+if(
+// make the regex if we don't have it already
+e=k([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}
+// MOMENTS
+function ja(a,b){var c;if(!a.isValid())
+// No op
+return a;if("string"==typeof b)if(/^\d+$/.test(b))b=u(b);else
+// TODO: Another silent failure?
+if(b=a.localeData().monthsParse(b),!f(b))return a;return c=Math.min(a.date(),ea(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a}function ka(b){return null!=b?(ja(this,b),a.updateOffset(this,!0),this):P(this,"Month")}function la(){return ea(this.year(),this.month())}function ma(a){return this._monthsParseExact?(i(this,"_monthsRegex")||oa.call(this),a?this._monthsShortStrictRegex:this._monthsShortRegex):(i(this,"_monthsShortRegex")||(this._monthsShortRegex=ne),this._monthsShortStrictRegex&&a?this._monthsShortStrictRegex:this._monthsShortRegex)}function na(a){return this._monthsParseExact?(i(this,"_monthsRegex")||oa.call(this),a?this._monthsStrictRegex:this._monthsRegex):(i(this,"_monthsRegex")||(this._monthsRegex=oe),this._monthsStrictRegex&&a?this._monthsStrictRegex:this._monthsRegex)}function oa(){function a(a,b){return b.length-a.length}var b,c,d=[],e=[],f=[];for(b=0;b<12;b++)
+// make the regex if we don't have it already
+c=k([2e3,b]),d.push(this.monthsShort(c,"")),e.push(this.months(c,"")),f.push(this.months(c,"")),f.push(this.monthsShort(c,""));for(
+// Sorting makes sure if one month (or abbr) is a prefix of another it
+// will match the longer piece.
+d.sort(a),e.sort(a),f.sort(a),b=0;b<12;b++)d[b]=aa(d[b]),e[b]=aa(e[b]);for(b=0;b<24;b++)f[b]=aa(f[b]);this._monthsRegex=new RegExp("^("+f.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+e.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+d.join("|")+")","i")}
+// HELPERS
+function pa(a){return qa(a)?366:365}function qa(a){return a%4===0&&a%100!==0||a%400===0}function ra(){return qa(this.year())}function sa(a,b,c,d,e,f,g){
+//can't just apply() to create a date:
+//http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+var h=new Date(a,b,c,d,e,f,g);
+//the date constructor remaps years 0-99 to 1900-1999
+return a<100&&a>=0&&isFinite(h.getFullYear())&&h.setFullYear(a),h}function ta(a){var b=new Date(Date.UTC.apply(null,arguments));
+//the Date.UTC function remaps years 0-99 to 1900-1999
+return a<100&&a>=0&&isFinite(b.getUTCFullYear())&&b.setUTCFullYear(a),b}
+// start-of-first-week - start-of-year
+function ua(a,b,c){var// first-week day -- which january is always in the first week (4 for iso, 1 for other)
+d=7+b-c,
+// first-week day local weekday -- which local weekday is fwd
+e=(7+ta(a,0,d).getUTCDay()-b)%7;return-e+d-1}
+//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+function va(a,b,c,d,e){var f,g,h=(7+c-d)%7,i=ua(a,d,e),j=1+7*(b-1)+h+i;return j<=0?(f=a-1,g=pa(f)+j):j>pa(a)?(f=a+1,g=j-pa(a)):(f=a,g=j),{year:f,dayOfYear:g}}function wa(a,b,c){var d,e,f=ua(a.year(),b,c),g=Math.floor((a.dayOfYear()-f-1)/7)+1;return g<1?(e=a.year()-1,d=g+xa(e,b,c)):g>xa(a.year(),b,c)?(d=g-xa(a.year(),b,c),e=a.year()+1):(e=a.year(),d=g),{week:d,year:e}}function xa(a,b,c){var d=ua(a,b,c),e=ua(a+1,b,c);return(pa(a)-d+e)/7}
+// HELPERS
+// LOCALES
+function ya(a){return wa(a,this._week.dow,this._week.doy).week}function za(){return this._week.dow}function Aa(){return this._week.doy}
+// MOMENTS
+function Ba(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function Ca(a){var b=wa(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}
+// HELPERS
+function Da(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Ea(a,b){return"string"==typeof a?b.weekdaysParse(a)%7||7:isNaN(a)?null:a}function Fa(a,b){return a?c(this._weekdays)?this._weekdays[a.day()]:this._weekdays[this._weekdays.isFormat.test(b)?"format":"standalone"][a.day()]:this._weekdays}function Ga(a){return a?this._weekdaysShort[a.day()]:this._weekdaysShort}function Ha(a){return a?this._weekdaysMin[a.day()]:this._weekdaysMin}function Ia(a,b,c){var d,e,f,g=a.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],d=0;d<7;++d)f=k([2e3,1]).day(d),this._minWeekdaysParse[d]=this.weekdaysMin(f,"").toLocaleLowerCase(),this._shortWeekdaysParse[d]=this.weekdaysShort(f,"").toLocaleLowerCase(),this._weekdaysParse[d]=this.weekdays(f,"").toLocaleLowerCase();return c?"dddd"===b?(e=je.call(this._weekdaysParse,g),e!==-1?e:null):"ddd"===b?(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:null):(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null):"dddd"===b?(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null))):"ddd"===b?(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._minWeekdaysParse,g),e!==-1?e:null))):(e=je.call(this._minWeekdaysParse,g),e!==-1?e:(e=je.call(this._weekdaysParse,g),e!==-1?e:(e=je.call(this._shortWeekdaysParse,g),e!==-1?e:null)))}function Ja(a,b,c){var d,e,f;if(this._weekdaysParseExact)return Ia.call(this,a,b,c);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),d=0;d<7;d++){
+// test the regex
+if(
+// make the regex if we don't have it already
+e=k([2e3,1]).day(d),c&&!this._fullWeekdaysParse[d]&&(this._fullWeekdaysParse[d]=new RegExp("^"+this.weekdays(e,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[d]=new RegExp("^"+this.weekdaysShort(e,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[d]=new RegExp("^"+this.weekdaysMin(e,"").replace(".",".?")+"$","i")),this._weekdaysParse[d]||(f="^"+this.weekdays(e,"")+"|^"+this.weekdaysShort(e,"")+"|^"+this.weekdaysMin(e,""),this._weekdaysParse[d]=new RegExp(f.replace(".",""),"i")),c&&"dddd"===b&&this._fullWeekdaysParse[d].test(a))return d;if(c&&"ddd"===b&&this._shortWeekdaysParse[d].test(a))return d;if(c&&"dd"===b&&this._minWeekdaysParse[d].test(a))return d;if(!c&&this._weekdaysParse[d].test(a))return d}}
+// MOMENTS
+function Ka(a){if(!this.isValid())return null!=a?this:NaN;var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Da(a,this.localeData()),this.add(a-b,"d")):b}function La(a){if(!this.isValid())return null!=a?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ma(a){if(!this.isValid())return null!=a?this:NaN;
+// behaves the same as moment#day except
+// as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+// as a setter, sunday should belong to the previous week.
+if(null!=a){var b=Ea(a,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7}function Na(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysStrictRegex:this._weekdaysRegex):(i(this,"_weekdaysRegex")||(this._weekdaysRegex=ue),this._weekdaysStrictRegex&&a?this._weekdaysStrictRegex:this._weekdaysRegex)}function Oa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(i(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ve),this._weekdaysShortStrictRegex&&a?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Pa(a){return this._weekdaysParseExact?(i(this,"_weekdaysRegex")||Qa.call(this),a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(i(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=we),this._weekdaysMinStrictRegex&&a?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Qa(){function a(a,b){return b.length-a.length}var b,c,d,e,f,g=[],h=[],i=[],j=[];for(b=0;b<7;b++)
+// make the regex if we don't have it already
+c=k([2e3,1]).day(b),d=this.weekdaysMin(c,""),e=this.weekdaysShort(c,""),f=this.weekdays(c,""),g.push(d),h.push(e),i.push(f),j.push(d),j.push(e),j.push(f);for(
+// Sorting makes sure if one weekday (or abbr) is a prefix of another it
+// will match the longer piece.
+g.sort(a),h.sort(a),i.sort(a),j.sort(a),b=0;b<7;b++)h[b]=aa(h[b]),i[b]=aa(i[b]),j[b]=aa(j[b]);this._weekdaysRegex=new RegExp("^("+j.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+g.join("|")+")","i")}
+// FORMATTING
+function Ra(){return this.hours()%12||12}function Sa(){return this.hours()||24}function Ta(a,b){U(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}
+// PARSING
+function Ua(a,b){return b._meridiemParse}
+// LOCALES
+function Va(a){
+// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+// Using charAt should be more compatible.
+return"p"===(a+"").toLowerCase().charAt(0)}function Wa(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Xa(a){return a?a.toLowerCase().replace("_","-"):a}
+// pick the locale from the array
+// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+function Ya(a){for(var b,c,d,e,f=0;f<a.length;){for(e=Xa(a[f]).split("-"),b=e.length,c=Xa(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=Za(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)
+//the next array item is better than a shallower substring of this one
+break;b--}f++}return null}function Za(a){var b=null;
+// TODO: Find a better way to register and load all the locales in Node
+if(!Be[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=xe._abbr,require("./locale/"+a),
+// because defineLocale currently also sets the global locale, we
+// want to undo that for lazy loaded locales
+$a(b)}catch(a){}return Be[a]}
+// This function will load locale and then set the global locale. If
+// no arguments are passed in, it will simply return the current global
+// locale key.
+function $a(a,b){var c;
+// moment.duration._locale = moment._locale = data;
+return a&&(c=p(b)?bb(a):_a(a,b),c&&(xe=c)),xe._abbr}function _a(a,b){if(null!==b){var c=Ae;if(b.abbr=a,null!=Be[a])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),c=Be[a]._config;else if(null!=b.parentLocale){if(null==Be[b.parentLocale])return Ce[b.parentLocale]||(Ce[b.parentLocale]=[]),Ce[b.parentLocale].push({name:a,config:b}),null;c=Be[b.parentLocale]._config}
+// backwards compat for now: also set the locale
+// make sure we set the locale AFTER all child locales have been
+// created, so we won't end up with the child locale set.
+return Be[a]=new C(B(c,b)),Ce[a]&&Ce[a].forEach(function(a){_a(a.name,a.config)}),$a(a),Be[a]}
+// useful for testing
+return delete Be[a],null}function ab(a,b){if(null!=b){var c,d=Ae;
+// MERGE
+null!=Be[a]&&(d=Be[a]._config),b=B(d,b),c=new C(b),c.parentLocale=Be[a],Be[a]=c,
+// backwards compat for now: also set the locale
+$a(a)}else
+// pass null for config to unupdate, useful for tests
+null!=Be[a]&&(null!=Be[a].parentLocale?Be[a]=Be[a].parentLocale:null!=Be[a]&&delete Be[a]);return Be[a]}
+// returns locale data
+function bb(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return xe;if(!c(a)){if(
+//short-circuit everything else
+b=Za(a))return b;a=[a]}return Ya(a)}function cb(){return wd(Be)}function db(a){var b,c=a._a;return c&&m(a).overflow===-2&&(b=c[be]<0||c[be]>11?be:c[ce]<1||c[ce]>ea(c[ae],c[be])?ce:c[de]<0||c[de]>24||24===c[de]&&(0!==c[ee]||0!==c[fe]||0!==c[ge])?de:c[ee]<0||c[ee]>59?ee:c[fe]<0||c[fe]>59?fe:c[ge]<0||c[ge]>999?ge:-1,m(a)._overflowDayOfYear&&(b<ae||b>ce)&&(b=ce),m(a)._overflowWeeks&&b===-1&&(b=he),m(a)._overflowWeekday&&b===-1&&(b=ie),m(a).overflow=b),a}
+// date from iso format
+function eb(a){var b,c,d,e,f,g,h=a._i,i=De.exec(h)||Ee.exec(h);if(i){for(m(a).iso=!0,b=0,c=Ge.length;b<c;b++)if(Ge[b][1].exec(i[1])){e=Ge[b][0],d=Ge[b][2]!==!1;break}if(null==e)return void(a._isValid=!1);if(i[3]){for(b=0,c=He.length;b<c;b++)if(He[b][1].exec(i[3])){
+// match[2] should be 'T' or space
+f=(i[2]||" ")+He[b][0];break}if(null==f)return void(a._isValid=!1)}if(!d&&null!=f)return void(a._isValid=!1);if(i[4]){if(!Fe.exec(i[4]))return void(a._isValid=!1);g="Z"}a._f=e+(f||"")+(g||""),kb(a)}else a._isValid=!1}
+// date from iso format or fallback
+function fb(b){var c=Ie.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(eb(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}
+// Pick the first defined of two or three arguments.
+function gb(a,b,c){return null!=a?a:null!=b?b:c}function hb(b){
+// hooks is actually the exported moment object
+var c=new Date(a.now());return b._useUTC?[c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate()]:[c.getFullYear(),c.getMonth(),c.getDate()]}
+// convert an array to a date.
+// the array should mirror the parameters below
+// note: all values past the year are optional and will default to the lowest possible value.
+// [year, month, day , hour, minute, second, millisecond]
+function ib(a){var b,c,d,e,f=[];if(!a._d){
+// Default to current date.
+// * if no year, month, day of month are given, default to today
+// * if day of month is given, default month and year
+// * if month is given, default only year
+// * if year is given, don't default anything
+for(d=hb(a),
+//compute day of the year from weeks and weekdays
+a._w&&null==a._a[ce]&&null==a._a[be]&&jb(a),
+//if the day of the year is set, figure out what it is
+a._dayOfYear&&(e=gb(a._a[ae],d[ae]),a._dayOfYear>pa(e)&&(m(a)._overflowDayOfYear=!0),c=ta(e,0,a._dayOfYear),a._a[be]=c.getUTCMonth(),a._a[ce]=c.getUTCDate()),b=0;b<3&&null==a._a[b];++b)a._a[b]=f[b]=d[b];
+// Zero out whatever was not defaulted, including time
+for(;b<7;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];
+// Check for 24:00:00.000
+24===a._a[de]&&0===a._a[ee]&&0===a._a[fe]&&0===a._a[ge]&&(a._nextDay=!0,a._a[de]=0),a._d=(a._useUTC?ta:sa).apply(null,f),
+// Apply timezone offset from input. The actual utcOffset can be changed
+// with parseZone.
+null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[de]=24)}}function jb(a){var b,c,d,e,f,g,h,i;if(b=a._w,null!=b.GG||null!=b.W||null!=b.E)f=1,g=4,
+// TODO: We need to take the current isoWeekYear, but that depends on
+// how we interpret now (local, utc, fixed offset). So create
+// a now version of current config (take local/utc/offset flags, and
+// create now).
+c=gb(b.GG,a._a[ae],wa(sb(),1,4).year),d=gb(b.W,1),e=gb(b.E,1),(e<1||e>7)&&(i=!0);else{f=a._locale._week.dow,g=a._locale._week.doy;var j=wa(sb(),f,g);c=gb(b.gg,a._a[ae],j.year),
+// Default to current week.
+d=gb(b.w,j.week),null!=b.d?(
+// weekday -- low day numbers are considered next week
+e=b.d,(e<0||e>6)&&(i=!0)):null!=b.e?(
+// local weekday -- counting starts from begining of week
+e=b.e+f,(b.e<0||b.e>6)&&(i=!0)):
+// default to begining of week
+e=f}d<1||d>xa(c,f,g)?m(a)._overflowWeeks=!0:null!=i?m(a)._overflowWeekday=!0:(h=va(c,d,e,f,g),a._a[ae]=h.year,a._dayOfYear=h.dayOfYear)}
+// date from string and format string
+function kb(b){
+// TODO: Move this to another part of the creation flow to prevent circular deps
+if(b._f===a.ISO_8601)return void eb(b);b._a=[],m(b).empty=!0;
+// This array is used to make a Date, either with `new Date` or `Date.UTC`
+var c,d,e,f,g,h=""+b._i,i=h.length,j=0;for(e=Y(b._f,b._locale).match(Fd)||[],c=0;c<e.length;c++)f=e[c],d=(h.match($(f,b))||[])[0],
+// console.log('token', token, 'parsedInput', parsedInput,
+// 'regex', getParseRegexForToken(token, config));
+d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&m(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),j+=d.length),
+// don't parse if it's not a known token
+Id[f]?(d?m(b).empty=!1:m(b).unusedTokens.push(f),da(f,d,b)):b._strict&&!d&&m(b).unusedTokens.push(f);
+// add remaining unparsed input length to the string
+m(b).charsLeftOver=i-j,h.length>0&&m(b).unusedInput.push(h),
+// clear _12h flag if hour is <= 12
+b._a[de]<=12&&m(b).bigHour===!0&&b._a[de]>0&&(m(b).bigHour=void 0),m(b).parsedDateParts=b._a.slice(0),m(b).meridiem=b._meridiem,
+// handle meridiem
+b._a[de]=lb(b._locale,b._a[de],b._meridiem),ib(b),db(b)}function lb(a,b,c){var d;
+// Fallback
+return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&b<12&&(b+=12),d||12!==b||(b=0),b):b}
+// date from string and array of format strings
+function mb(a){var b,c,d,e,f;if(0===a._f.length)return m(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=q({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],kb(b),n(b)&&(
+// if there is any input that was not parsed add a penalty for that format
+f+=m(b).charsLeftOver,
+//or tokens
+f+=10*m(b).unusedTokens.length,m(b).score=f,(null==d||f<d)&&(d=f,c=b));j(a,c||b)}function nb(a){if(!a._d){var b=L(a._i);a._a=h([b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],function(a){return a&&parseInt(a,10)}),ib(a)}}function ob(a){var b=new r(db(pb(a)));
+// Adding is smart enough around DST
+return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function pb(a){var b=a._i,d=a._f;return a._locale=a._locale||bb(a._l),null===b||void 0===d&&""===b?o({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),s(b)?new r(db(b)):(g(b)?a._d=b:c(d)?mb(a):d?kb(a):qb(a),n(a)||(a._d=null),a))}function qb(b){var d=b._i;void 0===d?b._d=new Date(a.now()):g(d)?b._d=new Date(d.valueOf()):"string"==typeof d?fb(b):c(d)?(b._a=h(d.slice(0),function(a){return parseInt(a,10)}),ib(b)):"object"==typeof d?nb(b):f(d)?
+// from milliseconds
+b._d=new Date(d):a.createFromInputFallback(b)}function rb(a,b,f,g,h){var i={};
+// object construction must be done this way.
+// https://github.com/moment/moment/issues/1423
+return f!==!0&&f!==!1||(g=f,f=void 0),(d(a)&&e(a)||c(a)&&0===a.length)&&(a=void 0),i._isAMomentObject=!0,i._useUTC=i._isUTC=h,i._l=f,i._i=a,i._f=b,i._strict=g,ob(i)}function sb(a,b,c,d){return rb(a,b,c,d,!1)}
+// Pick a moment m from moments so that m[fn](other) is true for all
+// other. This relies on the function fn to be transitive.
+//
+// moments should either be an array of moment objects or an array, whose
+// first element is an array of moment objects.
+function tb(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return sb();for(d=b[0],e=1;e<b.length;++e)b[e].isValid()&&!b[e][a](d)||(d=b[e]);return d}
+// TODO: Use [].sort instead?
+function ub(){var a=[].slice.call(arguments,0);return tb("isBefore",a)}function vb(){var a=[].slice.call(arguments,0);return tb("isAfter",a)}function wb(a){var b=L(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;
+// representation for dateAddRemove
+this._milliseconds=+k+1e3*j+// 1000
+6e4*i+// 1000 * 60
+1e3*h*60*60,//using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+// Because of dateAddRemove treats 24 hours as different from a
+// day when working around DST, we need to store them separately
+this._days=+g+7*f,
+// It is impossible translate months into days without knowing
+// which months you are are talking about, so we have to store
+// it separately.
+this._months=+e+3*d+12*c,this._data={},this._locale=bb(),this._bubble()}function xb(a){return a instanceof wb}function yb(a){return a<0?Math.round(-1*a)*-1:Math.round(a)}
+// FORMATTING
+function zb(a,b){U(a,0,0,function(){var a=this.utcOffset(),c="+";return a<0&&(a=-a,c="-"),c+T(~~(a/60),2)+b+T(~~a%60,2)})}function Ab(a,b){var c=(b||"").match(a);if(null===c)return null;var d=c[c.length-1]||[],e=(d+"").match(Me)||["-",0,0],f=+(60*e[1])+u(e[2]);return 0===f?0:"+"===e[0]?f:-f}
+// Return a moment from input, that is local/utc/zone equivalent to model.
+function Bb(b,c){var d,e;
+// Use low-level api, because this fn is low-level api.
+return c._isUTC?(d=c.clone(),e=(s(b)||g(b)?b.valueOf():sb(b).valueOf())-d.valueOf(),d._d.setTime(d._d.valueOf()+e),a.updateOffset(d,!1),d):sb(b).local()}function Cb(a){
+// On Firefox.24 Date#getTimezoneOffset returns a floating point.
+// https://github.com/moment/moment/pull/1871
+return 15*-Math.round(a._d.getTimezoneOffset()/15)}
+// MOMENTS
+// keepLocalTime = true means only change the timezone, without
+// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+// +0200, so we adjust the time as needed, to be valid.
+//
+// Keeping the time actually adds/subtracts (one hour)
+// from the actual represented time. That is why we call updateOffset
+// a second time. In case it wants us to change the offset again
+// _changeInProgress == true case, then we have to adjust, because
+// there is no such time in the given timezone.
+function Db(b,c){var d,e=this._offset||0;if(!this.isValid())return null!=b?this:NaN;if(null!=b){if("string"==typeof b){if(b=Ab(Xd,b),null===b)return this}else Math.abs(b)<16&&(b=60*b);return!this._isUTC&&c&&(d=Cb(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?Tb(this,Ob(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?e:Cb(this)}function Eb(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Fb(a){return this.utcOffset(0,a)}function Gb(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Cb(this),"m")),this}function Hb(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var a=Ab(Wd,this._i);null!=a?this.utcOffset(a):this.utcOffset(0,!0)}return this}function Ib(a){return!!this.isValid()&&(a=a?sb(a).utcOffset():0,(this.utcOffset()-a)%60===0)}function Jb(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Kb(){if(!p(this._isDSTShifted))return this._isDSTShifted;var a={};if(q(a,this),a=pb(a),a._a){var b=a._isUTC?k(a._a):sb(a._a);this._isDSTShifted=this.isValid()&&v(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Lb(){return!!this.isValid()&&!this._isUTC}function Mb(){return!!this.isValid()&&this._isUTC}function Nb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ob(a,b){var c,d,e,g=a,
+// matching against regexp is expensive, do it on demand
+h=null;// checks for null or undefined
+return xb(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:f(a)?(g={},b?g[b]=a:g.milliseconds=a):(h=Ne.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:u(h[ce])*c,h:u(h[de])*c,m:u(h[ee])*c,s:u(h[fe])*c,ms:u(yb(1e3*h[ge]))*c}):(h=Oe.exec(a))?(c="-"===h[1]?-1:1,g={y:Pb(h[2],c),M:Pb(h[3],c),w:Pb(h[4],c),d:Pb(h[5],c),h:Pb(h[6],c),m:Pb(h[7],c),s:Pb(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Rb(sb(g.from),sb(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new wb(g),xb(a)&&i(a,"_locale")&&(d._locale=a._locale),d}function Pb(a,b){
+// We'd normally use ~~inp for this, but unfortunately it also
+// converts floats to ints.
+// inp may be undefined, so careful calling replace on it.
+var c=a&&parseFloat(a.replace(",","."));
+// apply sign while we're at it
+return(isNaN(c)?0:c)*b}function Qb(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Rb(a,b){var c;return a.isValid()&&b.isValid()?(b=Bb(b,a),a.isBefore(b)?c=Qb(a,b):(c=Qb(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0}}
+// TODO: remove 'name' arg after deprecation is removed
+function Sb(a,b){return function(c,d){var e,f;
+//invert the arguments, but complain about it
+return null===d||isNaN(+d)||(y(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ob(c,d),Tb(this,e,a),this}}function Tb(b,c,d,e){var f=c._milliseconds,g=yb(c._days),h=yb(c._months);b.isValid()&&(e=null==e||e,f&&b._d.setTime(b._d.valueOf()+f*d),g&&Q(b,"Date",P(b,"Date")+g*d),h&&ja(b,P(b,"Month")+h*d),e&&a.updateOffset(b,g||h))}function Ub(a,b){var c=a.diff(b,"days",!0);return c<-6?"sameElse":c<-1?"lastWeek":c<0?"lastDay":c<1?"sameDay":c<2?"nextDay":c<7?"nextWeek":"sameElse"}function Vb(b,c){
+// We want to compare the start of today, vs this.
+// Getting start-of-today depends on whether we're local/utc/offset or not.
+var d=b||sb(),e=Bb(d,this).startOf("day"),f=a.calendarFormat(this,e)||"sameElse",g=c&&(z(c[f])?c[f].call(this,d):c[f]);return this.format(g||this.localeData().calendar(f,this,sb(d)))}function Wb(){return new r(this)}function Xb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()>c.valueOf():c.valueOf()<this.clone().startOf(b).valueOf())}function Yb(a,b){var c=s(a)?a:sb(a);return!(!this.isValid()||!c.isValid())&&(b=K(p(b)?"millisecond":b),"millisecond"===b?this.valueOf()<c.valueOf():this.clone().endOf(b).valueOf()<c.valueOf())}function Zb(a,b,c,d){return d=d||"()",("("===d[0]?this.isAfter(a,c):!this.isBefore(a,c))&&(")"===d[1]?this.isBefore(b,c):!this.isAfter(b,c))}function $b(a,b){var c,d=s(a)?a:sb(a);return!(!this.isValid()||!d.isValid())&&(b=K(b||"millisecond"),"millisecond"===b?this.valueOf()===d.valueOf():(c=d.valueOf(),this.clone().startOf(b).valueOf()<=c&&c<=this.clone().endOf(b).valueOf()))}function _b(a,b){return this.isSame(a,b)||this.isAfter(a,b)}function ac(a,b){return this.isSame(a,b)||this.isBefore(a,b)}function bc(a,b,c){var d,e,f,g;// 1000
+// 1000 * 60
+// 1000 * 60 * 60
+// 1000 * 60 * 60 * 24, negate dst
+// 1000 * 60 * 60 * 24 * 7, negate dst
+return this.isValid()?(d=Bb(a,this),d.isValid()?(e=6e4*(d.utcOffset()-this.utcOffset()),b=K(b),"year"===b||"month"===b||"quarter"===b?(g=cc(this,d),"quarter"===b?g/=3:"year"===b&&(g/=12)):(f=this-d,g="second"===b?f/1e3:"minute"===b?f/6e4:"hour"===b?f/36e5:"day"===b?(f-e)/864e5:"week"===b?(f-e)/6048e5:f),c?g:t(g)):NaN):NaN}function cc(a,b){
+// difference in months
+var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),
+// b is in (anchor - 1 month, anchor + 1 month)
+f=a.clone().add(e,"months");
+//check for negative zero, return zero if negative zero
+// linear across the month
+// linear across the month
+return b-f<0?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)||0}function dc(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ec(){var a=this.clone().utc();return 0<a.year()&&a.year()<=9999?z(Date.prototype.toISOString)?this.toDate().toISOString():X(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):X(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}/**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+function fc(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var a="moment",b="";this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",b="Z");var c="["+a+'("]',d=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",e="-MM-DD[T]HH:mm:ss.SSS",f=b+'[")]';return this.format(c+d+e+f)}function gc(b){b||(b=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var c=X(this,b);return this.localeData().postformat(c)}function hc(a,b){return this.isValid()&&(s(a)&&a.isValid()||sb(a).isValid())?Ob({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function ic(a){return this.from(sb(),a)}function jc(a,b){return this.isValid()&&(s(a)&&a.isValid()||sb(a).isValid())?Ob({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function kc(a){return this.to(sb(),a)}
+// If passed a locale key, it will set the locale for this
+// instance. Otherwise, it will return the locale configuration
+// variables for this instance.
+function lc(a){var b;return void 0===a?this._locale._abbr:(b=bb(a),null!=b&&(this._locale=b),this)}function mc(){return this._locale}function nc(a){
+// the following switch intentionally omits break keywords
+// to utilize falling through the cases.
+switch(a=K(a)){case"year":this.month(0);/* falls through */
+case"quarter":case"month":this.date(1);/* falls through */
+case"week":case"isoWeek":case"day":case"date":this.hours(0);/* falls through */
+case"hour":this.minutes(0);/* falls through */
+case"minute":this.seconds(0);/* falls through */
+case"second":this.milliseconds(0)}
+// weeks are a special case
+// quarters are also special
+return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function oc(a){
+// 'date' is an alias for 'day', so it should be considered as such.
+return a=K(a),void 0===a||"millisecond"===a?this:("date"===a&&(a="day"),this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms"))}function pc(){return this._d.valueOf()-6e4*(this._offset||0)}function qc(){return Math.floor(this.valueOf()/1e3)}function rc(){return new Date(this.valueOf())}function sc(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function tc(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function uc(){
+// new Date(NaN).toJSON() === null
+return this.isValid()?this.toISOString():null}function vc(){return n(this)}function wc(){return j({},m(this))}function xc(){return m(this).overflow}function yc(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function zc(a,b){U(0,[a,a.length],0,b)}
+// MOMENTS
+function Ac(a){return Ec.call(this,a,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Bc(a){return Ec.call(this,a,this.isoWeek(),this.isoWeekday(),1,4)}function Cc(){return xa(this.year(),1,4)}function Dc(){var a=this.localeData()._week;return xa(this.year(),a.dow,a.doy)}function Ec(a,b,c,d,e){var f;return null==a?wa(this,d,e).year:(f=xa(a,d,e),b>f&&(b=f),Fc.call(this,a,b,c,d,e))}function Fc(a,b,c,d,e){var f=va(a,b,c,d,e),g=ta(f.year,0,f.dayOfYear);return this.year(g.getUTCFullYear()),this.month(g.getUTCMonth()),this.date(g.getUTCDate()),this}
+// MOMENTS
+function Gc(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}
+// HELPERS
+// MOMENTS
+function Hc(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function Ic(a,b){b[ge]=u(1e3*("0."+a))}
+// MOMENTS
+function Jc(){return this._isUTC?"UTC":""}function Kc(){return this._isUTC?"Coordinated Universal Time":""}function Lc(a){return sb(1e3*a)}function Mc(){return sb.apply(null,arguments).parseZone()}function Nc(a){return a}function Oc(a,b,c,d){var e=bb(),f=k().set(d,b);return e[c](f,a)}function Pc(a,b,c){if(f(a)&&(b=a,a=void 0),a=a||"",null!=b)return Oc(a,b,c,"month");var d,e=[];for(d=0;d<12;d++)e[d]=Oc(a,d,c,"month");return e}
+// ()
+// (5)
+// (fmt, 5)
+// (fmt)
+// (true)
+// (true, 5)
+// (true, fmt, 5)
+// (true, fmt)
+function Qc(a,b,c,d){"boolean"==typeof a?(f(b)&&(c=b,b=void 0),b=b||""):(b=a,c=b,a=!1,f(b)&&(c=b,b=void 0),b=b||"");var e=bb(),g=a?e._week.dow:0;if(null!=c)return Oc(b,(c+g)%7,d,"day");var h,i=[];for(h=0;h<7;h++)i[h]=Oc(b,(h+g)%7,d,"day");return i}function Rc(a,b){return Pc(a,b,"months")}function Sc(a,b){return Pc(a,b,"monthsShort")}function Tc(a,b,c){return Qc(a,b,c,"weekdays")}function Uc(a,b,c){return Qc(a,b,c,"weekdaysShort")}function Vc(a,b,c){return Qc(a,b,c,"weekdaysMin")}function Wc(){var a=this._data;return this._milliseconds=Ze(this._milliseconds),this._days=Ze(this._days),this._months=Ze(this._months),a.milliseconds=Ze(a.milliseconds),a.seconds=Ze(a.seconds),a.minutes=Ze(a.minutes),a.hours=Ze(a.hours),a.months=Ze(a.months),a.years=Ze(a.years),this}function Xc(a,b,c,d){var e=Ob(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}
+// supports only 2.0-style add(1, 's') or add(duration)
+function Yc(a,b){return Xc(this,a,b,1)}
+// supports only 2.0-style subtract(1, 's') or subtract(duration)
+function Zc(a,b){return Xc(this,a,b,-1)}function $c(a){return a<0?Math.floor(a):Math.ceil(a)}function _c(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;
+// if we have a mix of positive and negative values, bubble down first
+// check: https://github.com/moment/moment/issues/2166
+// The following code bubbles up values, see the tests for
+// examples of what that means.
+// convert days to months
+// 12 months -> 1 year
+return f>=0&&g>=0&&h>=0||f<=0&&g<=0&&h<=0||(f+=864e5*$c(bd(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=t(f/1e3),i.seconds=a%60,b=t(a/60),i.minutes=b%60,c=t(b/60),i.hours=c%24,g+=t(c/24),e=t(ad(g)),h+=e,g-=$c(bd(e)),d=t(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function ad(a){
+// 400 years have 146097 days (taking into account leap year rules)
+// 400 years have 12 months === 4800
+return 4800*a/146097}function bd(a){
+// the reverse of daysToMonths
+return 146097*a/4800}function cd(a){var b,c,d=this._milliseconds;if(a=K(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+ad(b),"month"===a?c:c/12;switch(
+// handle milliseconds separately because of floating point math errors (issue #1867)
+b=this._days+Math.round(bd(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;
+// Math.floor prevents floating point math errors here
+case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}
+// TODO: Use this.as('ms')?
+function dd(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*u(this._months/12)}function ed(a){return function(){return this.as(a)}}function fd(a){return a=K(a),this[a+"s"]()}function gd(a){return function(){return this._data[a]}}function hd(){return t(this.days()/7)}
+// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+function id(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function jd(a,b,c){var d=Ob(a).abs(),e=of(d.as("s")),f=of(d.as("m")),g=of(d.as("h")),h=of(d.as("d")),i=of(d.as("M")),j=of(d.as("y")),k=e<pf.s&&["s",e]||f<=1&&["m"]||f<pf.m&&["mm",f]||g<=1&&["h"]||g<pf.h&&["hh",g]||h<=1&&["d"]||h<pf.d&&["dd",h]||i<=1&&["M"]||i<pf.M&&["MM",i]||j<=1&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,id.apply(null,k)}
+// This function allows you to set the rounding function for relative time strings
+function kd(a){return void 0===a?of:"function"==typeof a&&(of=a,!0)}
+// This function allows you to set a threshold for relative time strings
+function ld(a,b){return void 0!==pf[a]&&(void 0===b?pf[a]:(pf[a]=b,!0))}function md(a){var b=this.localeData(),c=jd(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function nd(){
+// for ISO strings we do not use the normal bubbling rules:
+// * milliseconds bubble up until they become hours
+// * days do not bubble at all
+// * months bubble up until they become years
+// This is because there is no context-free conversion between hours and days
+// (think of clock changes)
+// and also not between days and months (28-31 days per month)
+var a,b,c,d=qf(this._milliseconds)/1e3,e=qf(this._days),f=qf(this._months);
+// 3600 seconds -> 60 minutes -> 1 hour
+a=t(d/60),b=t(a/60),d%=60,a%=60,
+// 12 months -> 1 year
+c=t(f/12),f%=12;
+// inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(m<0?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var od,pd;pd=Array.prototype.some?Array.prototype.some:function(a){for(var b=Object(this),c=b.length>>>0,d=0;d<c;d++)if(d in b&&a.call(this,b[d],d,b))return!0;return!1};var qd=pd,rd=a.momentProperties=[],sd=!1,td={};a.suppressDeprecationWarnings=!1,a.deprecationHandler=null;var ud;ud=Object.keys?Object.keys:function(a){var b,c=[];for(b in a)i(a,b)&&c.push(b);return c};var vd,wd=ud,xd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},yd={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},zd="Invalid date",Ad="%d",Bd=/\d{1,2}/,Cd={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Dd={},Ed={},Fd=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Gd=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Hd={},Id={},Jd=/\d/,Kd=/\d\d/,Ld=/\d{3}/,Md=/\d{4}/,Nd=/[+-]?\d{6}/,Od=/\d\d?/,Pd=/\d\d\d\d?/,Qd=/\d\d\d\d\d\d?/,Rd=/\d{1,3}/,Sd=/\d{1,4}/,Td=/[+-]?\d{1,6}/,Ud=/\d+/,Vd=/[+-]?\d+/,Wd=/Z|[+-]\d\d:?\d\d/gi,Xd=/Z|[+-]\d\d(?::?\d\d)?/gi,Yd=/[+-]?\d+(\.\d{1,3})?/,Zd=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,$d={},_d={},ae=0,be=1,ce=2,de=3,ee=4,fe=5,ge=6,he=7,ie=8;vd=Array.prototype.indexOf?Array.prototype.indexOf:function(a){
+// I know
+var b;for(b=0;b<this.length;++b)if(this[b]===a)return b;return-1};var je=vd;
+// FORMATTING
+U("M",["MM",2],"Mo",function(){return this.month()+1}),U("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),U("MMMM",0,0,function(a){return this.localeData().months(this,a)}),
+// ALIASES
+J("month","M"),
+// PRIORITY
+M("month",8),
+// PARSING
+Z("M",Od),Z("MM",Od,Kd),Z("MMM",function(a,b){return b.monthsShortRegex(a)}),Z("MMMM",function(a,b){return b.monthsRegex(a)}),ba(["M","MM"],function(a,b){b[be]=u(a)-1}),ba(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);
+// if we didn't find a month name, mark the date as invalid.
+null!=e?b[be]=e:m(c).invalidMonth=a});
+// LOCALES
+var ke=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,le="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),me="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ne=Zd,oe=Zd;
+// FORMATTING
+U("Y",0,0,function(){var a=this.year();return a<=9999?""+a:"+"+a}),U(0,["YY",2],0,function(){return this.year()%100}),U(0,["YYYY",4],0,"year"),U(0,["YYYYY",5],0,"year"),U(0,["YYYYYY",6,!0],0,"year"),
+// ALIASES
+J("year","y"),
+// PRIORITIES
+M("year",1),
+// PARSING
+Z("Y",Vd),Z("YY",Od,Kd),Z("YYYY",Sd,Md),Z("YYYYY",Td,Nd),Z("YYYYYY",Td,Nd),ba(["YYYYY","YYYYYY"],ae),ba("YYYY",function(b,c){c[ae]=2===b.length?a.parseTwoDigitYear(b):u(b)}),ba("YY",function(b,c){c[ae]=a.parseTwoDigitYear(b)}),ba("Y",function(a,b){b[ae]=parseInt(a,10)}),
+// HOOKS
+a.parseTwoDigitYear=function(a){return u(a)+(u(a)>68?1900:2e3)};
+// MOMENTS
+var pe=O("FullYear",!0);
+// FORMATTING
+U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),
+// ALIASES
+J("week","w"),J("isoWeek","W"),
+// PRIORITIES
+M("week",5),M("isoWeek",5),
+// PARSING
+Z("w",Od),Z("ww",Od,Kd),Z("W",Od),Z("WW",Od,Kd),ca(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=u(a)});var qe={dow:0,// Sunday is the first day of the week.
+doy:6};
+// FORMATTING
+U("d",0,"do","day"),U("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),U("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),U("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),
+// ALIASES
+J("day","d"),J("weekday","e"),J("isoWeekday","E"),
+// PRIORITY
+M("day",11),M("weekday",11),M("isoWeekday",11),
+// PARSING
+Z("d",Od),Z("e",Od),Z("E",Od),Z("dd",function(a,b){return b.weekdaysMinRegex(a)}),Z("ddd",function(a,b){return b.weekdaysShortRegex(a)}),Z("dddd",function(a,b){return b.weekdaysRegex(a)}),ca(["dd","ddd","dddd"],function(a,b,c,d){var e=c._locale.weekdaysParse(a,d,c._strict);
+// if we didn't get a weekday name, mark the date as invalid
+null!=e?b.d=e:m(c).invalidWeekday=a}),ca(["d","e","E"],function(a,b,c,d){b[d]=u(a)});
+// LOCALES
+var re="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),se="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),te="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ue=Zd,ve=Zd,we=Zd;U("H",["HH",2],0,"hour"),U("h",["hh",2],0,Ra),U("k",["kk",2],0,Sa),U("hmm",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)}),U("hmmss",0,0,function(){return""+Ra.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)}),U("Hmm",0,0,function(){return""+this.hours()+T(this.minutes(),2)}),U("Hmmss",0,0,function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)}),Ta("a",!0),Ta("A",!1),
+// ALIASES
+J("hour","h"),
+// PRIORITY
+M("hour",13),Z("a",Ua),Z("A",Ua),Z("H",Od),Z("h",Od),Z("HH",Od,Kd),Z("hh",Od,Kd),Z("hmm",Pd),Z("hmmss",Qd),Z("Hmm",Pd),Z("Hmmss",Qd),ba(["H","HH"],de),ba(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),ba(["h","hh"],function(a,b,c){b[de]=u(a),m(c).bigHour=!0}),ba("hmm",function(a,b,c){var d=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d)),m(c).bigHour=!0}),ba("hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d,2)),b[fe]=u(a.substr(e)),m(c).bigHour=!0}),ba("Hmm",function(a,b,c){var d=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d))}),ba("Hmmss",function(a,b,c){var d=a.length-4,e=a.length-2;b[de]=u(a.substr(0,d)),b[ee]=u(a.substr(d,2)),b[fe]=u(a.substr(e))});var xe,ye=/[ap]\.?m?\.?/i,ze=O("Hours",!0),Ae={calendar:xd,longDateFormat:yd,invalidDate:zd,ordinal:Ad,ordinalParse:Bd,relativeTime:Cd,months:le,monthsShort:me,week:qe,weekdays:re,weekdaysMin:te,weekdaysShort:se,meridiemParse:ye},Be={},Ce={},De=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ee=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fe=/Z|[+-]\d\d(?::?\d\d)?/,Ge=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],
+// YYYYMM is NOT allowed by the standard
+["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],He=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ie=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=x("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),
+// constant that refers to the ISO standard
+a.ISO_8601=function(){};var Je=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?a<this?this:a:o()}),Ke=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var a=sb.apply(null,arguments);return this.isValid()&&a.isValid()?a>this?this:a:o()}),Le=function(){return Date.now?Date.now():+new Date};zb("Z",":"),zb("ZZ",""),
+// PARSING
+Z("Z",Xd),Z("ZZ",Xd),ba(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ab(Xd,a)});
+// HELPERS
+// timezone chunker
+// '+10:00' > ['10', '00']
+// '-1530' > ['-15', '30']
+var Me=/([\+\-]|\d\d)/gi;
+// HOOKS
+// This function will be called whenever a moment is mutated.
+// It is intended to keep the offset in sync with the timezone.
+a.updateOffset=function(){};
+// ASP.NET json date format regex
+var Ne=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Oe=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ob.fn=wb.prototype;var Pe=Sb(1,"add"),Qe=Sb(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Re=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});
+// FORMATTING
+U(0,["gg",2],0,function(){return this.weekYear()%100}),U(0,["GG",2],0,function(){return this.isoWeekYear()%100}),zc("gggg","weekYear"),zc("ggggg","weekYear"),zc("GGGG","isoWeekYear"),zc("GGGGG","isoWeekYear"),
+// ALIASES
+J("weekYear","gg"),J("isoWeekYear","GG"),
+// PRIORITY
+M("weekYear",1),M("isoWeekYear",1),
+// PARSING
+Z("G",Vd),Z("g",Vd),Z("GG",Od,Kd),Z("gg",Od,Kd),Z("GGGG",Sd,Md),Z("gggg",Sd,Md),Z("GGGGG",Td,Nd),Z("ggggg",Td,Nd),ca(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=u(a)}),ca(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),
+// FORMATTING
+U("Q",0,"Qo","quarter"),
+// ALIASES
+J("quarter","Q"),
+// PRIORITY
+M("quarter",7),
+// PARSING
+Z("Q",Jd),ba("Q",function(a,b){b[be]=3*(u(a)-1)}),
+// FORMATTING
+U("D",["DD",2],"Do","date"),
+// ALIASES
+J("date","D"),
+// PRIOROITY
+M("date",9),
+// PARSING
+Z("D",Od),Z("DD",Od,Kd),Z("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),ba(["D","DD"],ce),ba("Do",function(a,b){b[ce]=u(a.match(Od)[0],10)});
+// MOMENTS
+var Se=O("Date",!0);
+// FORMATTING
+U("DDD",["DDDD",3],"DDDo","dayOfYear"),
+// ALIASES
+J("dayOfYear","DDD"),
+// PRIORITY
+M("dayOfYear",4),
+// PARSING
+Z("DDD",Rd),Z("DDDD",Ld),ba(["DDD","DDDD"],function(a,b,c){c._dayOfYear=u(a)}),
+// FORMATTING
+U("m",["mm",2],0,"minute"),
+// ALIASES
+J("minute","m"),
+// PRIORITY
+M("minute",14),
+// PARSING
+Z("m",Od),Z("mm",Od,Kd),ba(["m","mm"],ee);
+// MOMENTS
+var Te=O("Minutes",!1);
+// FORMATTING
+U("s",["ss",2],0,"second"),
+// ALIASES
+J("second","s"),
+// PRIORITY
+M("second",15),
+// PARSING
+Z("s",Od),Z("ss",Od,Kd),ba(["s","ss"],fe);
+// MOMENTS
+var Ue=O("Seconds",!1);
+// FORMATTING
+U("S",0,0,function(){return~~(this.millisecond()/100)}),U(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),U(0,["SSS",3],0,"millisecond"),U(0,["SSSS",4],0,function(){return 10*this.millisecond()}),U(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),U(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),U(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),U(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),U(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),
+// ALIASES
+J("millisecond","ms"),
+// PRIORITY
+M("millisecond",16),
+// PARSING
+Z("S",Rd,Jd),Z("SS",Rd,Kd),Z("SSS",Rd,Ld);var Ve;for(Ve="SSSS";Ve.length<=9;Ve+="S")Z(Ve,Ud);for(Ve="S";Ve.length<=9;Ve+="S")ba(Ve,Ic);
+// MOMENTS
+var We=O("Milliseconds",!1);
+// FORMATTING
+U("z",0,0,"zoneAbbr"),U("zz",0,0,"zoneName");var Xe=r.prototype;Xe.add=Pe,Xe.calendar=Vb,Xe.clone=Wb,Xe.diff=bc,Xe.endOf=oc,Xe.format=gc,Xe.from=hc,Xe.fromNow=ic,Xe.to=jc,Xe.toNow=kc,Xe.get=R,Xe.invalidAt=xc,Xe.isAfter=Xb,Xe.isBefore=Yb,Xe.isBetween=Zb,Xe.isSame=$b,Xe.isSameOrAfter=_b,Xe.isSameOrBefore=ac,Xe.isValid=vc,Xe.lang=Re,Xe.locale=lc,Xe.localeData=mc,Xe.max=Ke,Xe.min=Je,Xe.parsingFlags=wc,Xe.set=S,Xe.startOf=nc,Xe.subtract=Qe,Xe.toArray=sc,Xe.toObject=tc,Xe.toDate=rc,Xe.toISOString=ec,Xe.inspect=fc,Xe.toJSON=uc,Xe.toString=dc,Xe.unix=qc,Xe.valueOf=pc,Xe.creationData=yc,
+// Year
+Xe.year=pe,Xe.isLeapYear=ra,
+// Week Year
+Xe.weekYear=Ac,Xe.isoWeekYear=Bc,
+// Quarter
+Xe.quarter=Xe.quarters=Gc,
+// Month
+Xe.month=ka,Xe.daysInMonth=la,
+// Week
+Xe.week=Xe.weeks=Ba,Xe.isoWeek=Xe.isoWeeks=Ca,Xe.weeksInYear=Dc,Xe.isoWeeksInYear=Cc,
+// Day
+Xe.date=Se,Xe.day=Xe.days=Ka,Xe.weekday=La,Xe.isoWeekday=Ma,Xe.dayOfYear=Hc,
+// Hour
+Xe.hour=Xe.hours=ze,
+// Minute
+Xe.minute=Xe.minutes=Te,
+// Second
+Xe.second=Xe.seconds=Ue,
+// Millisecond
+Xe.millisecond=Xe.milliseconds=We,
+// Offset
+Xe.utcOffset=Db,Xe.utc=Fb,Xe.local=Gb,Xe.parseZone=Hb,Xe.hasAlignedHourOffset=Ib,Xe.isDST=Jb,Xe.isLocal=Lb,Xe.isUtcOffset=Mb,Xe.isUtc=Nb,Xe.isUTC=Nb,
+// Timezone
+Xe.zoneAbbr=Jc,Xe.zoneName=Kc,
+// Deprecations
+Xe.dates=x("dates accessor is deprecated. Use date instead.",Se),Xe.months=x("months accessor is deprecated. Use month instead",ka),Xe.years=x("years accessor is deprecated. Use year instead",pe),Xe.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Eb),Xe.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Kb);var Ye=C.prototype;Ye.calendar=D,Ye.longDateFormat=E,Ye.invalidDate=F,Ye.ordinal=G,Ye.preparse=Nc,Ye.postformat=Nc,Ye.relativeTime=H,Ye.pastFuture=I,Ye.set=A,
+// Month
+Ye.months=fa,Ye.monthsShort=ga,Ye.monthsParse=ia,Ye.monthsRegex=na,Ye.monthsShortRegex=ma,
+// Week
+Ye.week=ya,Ye.firstDayOfYear=Aa,Ye.firstDayOfWeek=za,
+// Day of Week
+Ye.weekdays=Fa,Ye.weekdaysMin=Ha,Ye.weekdaysShort=Ga,Ye.weekdaysParse=Ja,Ye.weekdaysRegex=Na,Ye.weekdaysShortRegex=Oa,Ye.weekdaysMinRegex=Pa,
+// Hours
+Ye.isPM=Va,Ye.meridiem=Wa,$a("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===u(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),
+// Side effect imports
+a.lang=x("moment.lang is deprecated. Use moment.locale instead.",$a),a.langData=x("moment.langData is deprecated. Use moment.localeData instead.",bb);var Ze=Math.abs,$e=ed("ms"),_e=ed("s"),af=ed("m"),bf=ed("h"),cf=ed("d"),df=ed("w"),ef=ed("M"),ff=ed("y"),gf=gd("milliseconds"),hf=gd("seconds"),jf=gd("minutes"),kf=gd("hours"),lf=gd("days"),mf=gd("months"),nf=gd("years"),of=Math.round,pf={s:45,// seconds to minute
+m:45,// minutes to hour
+h:22,// hours to day
+d:26,// days to month
+M:11},qf=Math.abs,rf=wb.prototype;
+// Deprecations
+// Side effect imports
+// FORMATTING
+// PARSING
+// Side effect imports
+return rf.abs=Wc,rf.add=Yc,rf.subtract=Zc,rf.as=cd,rf.asMilliseconds=$e,rf.asSeconds=_e,rf.asMinutes=af,rf.asHours=bf,rf.asDays=cf,rf.asWeeks=df,rf.asMonths=ef,rf.asYears=ff,rf.valueOf=dd,rf._bubble=_c,rf.get=fd,rf.milliseconds=gf,rf.seconds=hf,rf.minutes=jf,rf.hours=kf,rf.days=lf,rf.weeks=hd,rf.months=mf,rf.years=nf,rf.humanize=md,rf.toISOString=nd,rf.toString=nd,rf.toJSON=nd,rf.locale=lc,rf.localeData=mc,rf.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nd),rf.lang=Re,U("X",0,0,"unix"),U("x",0,0,"valueOf"),Z("x",Vd),Z("X",Yd),ba("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),ba("x",function(a,b,c){c._d=new Date(u(a))}),a.version="2.17.1",b(sb),a.fn=Xe,a.min=ub,a.max=vb,a.now=Le,a.utc=k,a.unix=Lc,a.months=Rc,a.isDate=g,a.locale=$a,a.invalid=o,a.duration=Ob,a.isMoment=s,a.weekdays=Tc,a.parseZone=Mc,a.localeData=bb,a.isDuration=xb,a.monthsShort=Sc,a.weekdaysMin=Vc,a.defineLocale=_a,a.updateLocale=ab,a.locales=cb,a.weekdaysShort=Uc,a.normalizeUnits=K,a.relativeTimeRounding=kd,a.relativeTimeThreshold=ld,a.calendarFormat=Ub,a.prototype=Xe,a}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/tests.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/tests.js
new file mode 100644
index 00000000000..0c98b2771a4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/min/tests.js
@@ -0,0 +1,72932 @@
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('af');
+
+test('parse', function (assert) {
+ var tests = 'Januarie Jan_Februarie Feb_Maart Mrt_April Apr_Mei Mei_Junie Jun_Julie Jul_Augustus Aug_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sondag, Februarie 14de 2010, 3:25:50 nm'],
+ ['ddd, hA', 'Son, 3NM'],
+ ['M Mo MM MMMM MMM', '2 2de 02 Februarie Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14de 14'],
+ ['d do dddd ddd dd', '0 0de Sondag Son So'],
+ ['DDD DDDo DDDD', '45 45ste 045'],
+ ['w wo ww', '6 6de 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'nm NM'],
+ ['[the] DDDo [day of the year]', 'the 45ste day of the year'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Februarie 2010'],
+ ['LLL', '14 Februarie 2010 15:25'],
+ ['LLLL', 'Sondag, 14 Februarie 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 15:25'],
+ ['llll', 'Son, 14 Feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste');
+});
+
+test('format month', function (assert) {
+ var expected = 'Januarie Jan_Februarie Feb_Maart Mrt_April Apr_Mei Mei_Junie Jun_Julie Jul_Augustus Aug_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sondag Son So_Maandag Maa Ma_Dinsdag Din Di_Woensdag Woe Wo_Donderdag Don Do_Vrydag Vry Vr_Saterdag Sat Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '\'n paar sekondes', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '\'n minuut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '\'n minuut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minute', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '\'n uur', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '\'n uur', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ure', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ure', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ure', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '\'n dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '\'n dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dae', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '\'n dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dae', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dae', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '\'n maand', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '\'n maand', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '\'n maand', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 maande', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 maande', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 maande', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '\'n maand', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 maande', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '\'n jaar', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaar', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '\'n jaar', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaar', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'oor \'n paar sekondes', 'prefix');
+ assert.equal(moment(0).from(30000), '\'n paar sekondes gelede', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), '\'n paar sekondes gelede', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'oor \'n paar sekondes', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'oor 5 dae', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Vandag om 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Vandag om 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Vandag om 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Môre om 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Vandag om 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Gister om 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Laas] dddd [om] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ar-dz');
+
+test('parse', function (assert) {
+ var tests = 'جانفي:جانفي_فيفري:فيفري_مارس:مارس_أفريل:أفريل_ماي:ماي_جوان:جوان_جويلية:جويلية_أوت:أوت_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(':');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فيفري 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'احد, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 فيفري فيفري'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 الأحد احد أح'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 فيفري 2010'],
+ ['LLL', '14 فيفري 2010 15:25'],
+ ['LLLL', 'الأحد 14 فيفري 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 فيفري 2010'],
+ ['lll', '14 فيفري 2010 15:25'],
+ ['llll', 'احد 14 فيفري 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'جانفي جانفي_فيفري فيفري_مارس مارس_أفريل أفريل_ماي ماي_جوان جوان_جويلية جويلية_أوت أوت_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'الأحد احد أح_الإثنين اثنين إث_الثلاثاء ثلاثاء ثلا_الأربعاء اربعاء أر_الخميس خميس خم_الجمعة جمعة جم_السبت سبت سب'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 دقائق', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقائق', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ساعات', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعات', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 أيام', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 أيام', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 أشهر', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 أشهر', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سنوات', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سنوات', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'في ثوان', 'prefix');
+ assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'في 5 أيام', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2016, 1, 4]).format('w ww wo'), '5 05 5', 'Feb 4 2016 should be week 5');
+ assert.equal(moment([2016, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2016 should be week 1');
+ assert.equal(moment([2016, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2016 should be week 1');
+ assert.equal(moment([2016, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2016 should be week 2');
+ assert.equal(moment([2016, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2016 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ar-ly');
+
+var months = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+];
+
+test('parse', function (assert) {
+ var tests = months, i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month());
+ }
+ for (i = 0; i < 12; i++) {
+ equalTest(tests[i], 'MMM', i);
+ equalTest(tests[i], 'MMM', i);
+ equalTest(tests[i], 'MMMM', i);
+ equalTest(tests[i], 'MMMM', i);
+ equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، فبراير 14 2010، 3:25:50 م'],
+ ['ddd, hA', 'أحد، 3م'],
+ ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 الأحد أحد ح'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'م م'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14/\u200f2/\u200f2010'],
+ ['LL', '14 فبراير 2010'],
+ ['LLL', '14 فبراير 2010 15:25'],
+ ['LLLL', 'الأحد 14 فبراير 2010 15:25'],
+ ['l', '14/\u200f2/\u200f2010'],
+ ['ll', '14 فبراير 2010'],
+ ['lll', '14 فبراير 2010 15:25'],
+ ['llll', 'أحد 14 فبراير 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = months, i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM'), expected[i], expected[i]);
+ assert.equal(moment([2011, i, 1]).format('MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '44 ثانية', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة واحدة', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة واحدة', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'دقيقتان', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقيقة', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة واحدة', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة واحدة', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'ساعتان', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعة', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم واحد', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم واحد', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'يومان', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم واحد', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 يومًا', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر واحد', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر واحد', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر واحد', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'شهران', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'شهران', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر واحد', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'عام واحد', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'عامان', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'عام واحد', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 أعوام', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'بعد 30 ثانية', 'prefix');
+ assert.equal(moment(0).from(30000), 'منذ 30 ثانية', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'منذ ثانية واحدة', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'بعد 30 ثانية', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'بعد 5 أيام', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'اليوم عند الساعة 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم عند الساعة 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم عند الساعة 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'غدًا عند الساعة 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم عند الساعة 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس عند الساعة 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting wednesday custom', function (assert) {
+ assert.equal(moment('2003 1 6', 'gggg w d').format('YYYY-MM-DD'), '2002-12-28', 'Week 1 of 2003 should be Dec 28 2002');
+ assert.equal(moment('2003 1 0', 'gggg w e').format('YYYY-MM-DD'), '2002-12-28', 'Week 1 of 2003 should be Dec 28 2002');
+ assert.equal(moment('2003 1 6', 'gggg w d').format('gggg w d'), '2003 1 6', 'Saturday of week 1 of 2003 parsed should be formatted as 2003 1 6');
+ assert.equal(moment('2003 1 0', 'gggg w e').format('gggg w e'), '2003 1 0', '1st day of week 1 of 2003 parsed should be formatted as 2003 1 0');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3');
+});
+
+test('no leading zeros in long date formats', function (assert) {
+ var i, j, longDateStr, shortDateStr;
+ for (i = 1; i <= 9; ++i) {
+ for (j = 1; j <= 9; ++j) {
+ longDateStr = moment([2014, i, j]).format('L');
+ shortDateStr = moment([2014, i, j]).format('l');
+ assert.equal(longDateStr, shortDateStr, 'should not have leading zeros in month or day');
+ }
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ar-ma');
+
+test('parse', function (assert) {
+ var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_ماي:ماي_يونيو:يونيو_يوليوز:يوليوز_غشت:غشت_شتنبر:شتنبر_أكتوبر:أكتوبر_نونبر:نونبر_دجنبر:دجنبر'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(':');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فبراير 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'احد, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 فبراير فبراير'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 الأحد احد ح'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 فبراير 2010'],
+ ['LLL', '14 فبراير 2010 15:25'],
+ ['LLLL', 'الأحد 14 فبراير 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 فبراير 2010'],
+ ['lll', '14 فبراير 2010 15:25'],
+ ['llll', 'احد 14 فبراير 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_ماي ماي_يونيو يونيو_يوليوز يوليوز_غشت غشت_شتنبر شتنبر_أكتوبر أكتوبر_نونبر نونبر_دجنبر دجنبر'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'الأحد احد ح_الإتنين اتنين ن_الثلاثاء ثلاثاء ث_الأربعاء اربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 دقائق', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 دقائق', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ساعات', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ساعات', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ساعات', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 أيام', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 أيام', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 أيام', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 أشهر', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 أشهر', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 أشهر', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 أشهر', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 سنوات', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 سنوات', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'في ثوان', 'prefix');
+ assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'في 5 أيام', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ar-sa');
+
+test('parse', function (assert) {
+ var tests = 'يناير:يناير_فبراير:فبراير_مارس:مارس_أبريل:أبريل_مايو:مايو_يونيو:يونيو_يوليو:يوليو_أغسطس:أغسطس_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month());
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(':');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، فبراير ١٤ ٢٠١٠، ٣:٢٥:٥٠ م'],
+ ['ddd, hA', 'أحد، ٣م'],
+ ['M Mo MM MMMM MMM', '٢ ٢ ٠٢ فبراير فبراير'],
+ ['YYYY YY', '٢٠١٠ ١٠'],
+ ['D Do DD', '١٤ ١٤ ١٤'],
+ ['d do dddd ddd dd', '٠ ٠ الأحد أحد ح'],
+ ['DDD DDDo DDDD', '٤٥ ٤٥ ٠٤٥'],
+ ['w wo ww', '٨ ٨ ٠٨'],
+ ['h hh', '٣ ٠٣'],
+ ['H HH', '١٥ ١٥'],
+ ['m mm', '٢٥ ٢٥'],
+ ['s ss', '٥٠ ٥٠'],
+ ['a A', 'م م'],
+ ['[the] DDDo [day of the year]', 'the ٤٥ day of the year'],
+ ['LT', '١٥:٢٥'],
+ ['LTS', '١٥:٢٥:٥٠'],
+ ['L', '١٤/٠٢/٢٠١٠'],
+ ['LL', '١٤ فبراير ٢٠١٠'],
+ ['LLL', '١٤ فبراير ٢٠١٠ ١٥:٢٥'],
+ ['LLLL', 'الأحد ١٤ فبراير ٢٠١٠ ١٥:٢٥'],
+ ['l', '١٤/٢/٢٠١٠'],
+ ['ll', '١٤ فبراير ٢٠١٠'],
+ ['lll', '١٤ فبراير ٢٠١٠ ١٥:٢٥'],
+ ['llll', 'أحد ١٤ فبراير ٢٠١٠ ١٥:٢٥']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '١', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '٢', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '٣', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '٤', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '٥', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '٦', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '٧', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '٨', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '٩', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '١٠', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '١١', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '١٢', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '١٣', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '١٤', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '١٥', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '١٦', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '١٧', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '١٨', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '١٩', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '٢٠', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '٢١', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '٢٢', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '٢٣', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '٢٤', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '٢٥', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '٢٦', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '٢٧', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '٢٨', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '٢٩', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '٣٠', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '٣١', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'يناير يناير_فبراير فبراير_مارس مارس_أبريل أبريل_مايو مايو_يونيو يونيو_يوليو يوليو_أغسطس أغسطس_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ثوان', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '٢ دقائق', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '٤٤ دقائق', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '٢ ساعات', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '٥ ساعات', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '٢١ ساعات', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '٢ أيام', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '٥ أيام', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '٢٥ أيام', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '٢ أشهر', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '٢ أشهر', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '٣ أشهر', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '٥ أشهر', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'سنة', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '٢ سنوات', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'سنة', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '٥ سنوات', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'في ثوان', 'prefix');
+ assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'في ثوان', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'في ٥ أيام', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'اليوم على الساعة ١٢:٠٠', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة ١٢:٢٥', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة ١٣:٠٠', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة ١٢:٠٠', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة ١١:٠٠', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة ١٢:٠٠', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting wednesday custom', function (assert) {
+ assert.equal(moment('2003 1 6', 'gggg w d').format('YYYY-MM-DD'), '٢٠٠٣-٠١-٠٤', '2003 1 6 : gggg w d');
+ assert.equal(moment('2003 1 0', 'gggg w e').format('YYYY-MM-DD'), '٢٠٠٢-١٢-٢٩', '2003 1 0 : gggg w e');
+ assert.equal(moment('2003 1 6', 'gggg w d').format('gggg w d'), '٢٠٠٣ ١ ٦', '2003 1 6 : gggg w d');
+ assert.equal(moment('2003 1 0', 'gggg w e').format('gggg w e'), '٢٠٠٣ ١ ٠', '2003 1 0 : gggg w e');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '٥٣ ٥٣ ٥٣', '2011 11 31');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '١ ٠١ ١', '2012 0 6');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '١ ٠١ ١', '2012 0 7');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '٢ ٠٢ ٢', '2012 0 13');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '٢ ٠٢ ٢', '2012 0 14');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ar-tn');
+
+test('parse', function (assert) {
+ var tests = 'جانفي:جانفي_فيفري:فيفري_مارس:مارس_أفريل:أفريل_ماي:ماي_جوان:جوان_جويلية:جويلية_أوت:أوت_سبتمبر:سبتمبر_أكتوبر:أكتوبر_نوفمبر:نوفمبر_ديسمبر:ديسمبر'.split('_'),
+ i;
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(':');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد, فيفري 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'أحد, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 فيفري فيفري'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 الأحد أحد ح'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '6 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 فيفري 2010'],
+ ['LLL', '14 فيفري 2010 15:25'],
+ ['LLLL', 'الأحد 14 فيفري 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 فيفري 2010'],
+ ['lll', '14 فيفري 2010 15:25'],
+ ['llll', 'أحد 14 فيفري 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'جانفي جانفي_فيفري فيفري_مارس مارس_أفريل أفريل_ماي ماي_جوان جوان_جويلية جويلية_أوت أوت_سبتمبر سبتمبر_أكتوبر أكتوبر_نوفمبر نوفمبر_ديسمبر ديسمبر'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 44
+ }), true), 'ثوان', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 45
+ }), true), 'دقيقة', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 89
+ }), true), 'دقيقة', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 90
+ }), true), '2 دقائق', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 44
+ }), true), '44 دقائق', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 45
+ }), true), 'ساعة', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 89
+ }), true), 'ساعة', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 90
+ }), true), '2 ساعات', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 5
+ }), true), '5 ساعات', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 21
+ }), true), '21 ساعات', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 22
+ }), true), 'يوم', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 35
+ }), true), 'يوم', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 36
+ }), true), '2 أيام', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 1
+ }), true), 'يوم', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 5
+ }), true), '5 أيام', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 25
+ }), true), '25 أيام', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 26
+ }), true), 'شهر', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 30
+ }), true), 'شهر', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 43
+ }), true), 'شهر', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 46
+ }), true), '2 أشهر', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 74
+ }), true), '2 أشهر', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 76
+ }), true), '3 أشهر', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ M: 1
+ }), true), 'شهر', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ M: 5
+ }), true), '5 أشهر', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 345
+ }), true), 'سنة', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 548
+ }), true), '2 سنوات', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ y: 1
+ }), true), 'سنة', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ y: 5
+ }), true), '5 سنوات', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'في ثوان', 'prefix');
+ assert.equal(moment(0).from(30000), 'منذ ثوان', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'منذ ثوان', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({
+ s: 30
+ }).fromNow(), 'في ثوان', 'in a few seconds');
+ assert.equal(moment().add({
+ d: 5
+ }).fromNow(), 'في 5 أيام', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'اليوم على الساعة 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم على الساعة 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم على الساعة 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'غدا على الساعة 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم على الساعة 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس على الساعة 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({
+ d: i
+ });
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({
+ d: i
+ });
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [على الساعة] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({
+ w: 1
+ }),
+ weeksFromNow = moment().add({
+ w: 1
+ });
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({
+ w: 2
+ });
+ weeksFromNow = moment().add({
+ w: 2
+ });
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ar');
+
+var months = [
+ 'كانون الثاني يناير',
+ 'شباط فبراير',
+ 'آذار مارس',
+ 'نيسان أبريل',
+ 'أيار مايو',
+ 'حزيران يونيو',
+ 'تموز يوليو',
+ 'آب أغسطس',
+ 'أيلول سبتمبر',
+ 'تشرين الأول أكتوبر',
+ 'تشرين الثاني نوفمبر',
+ 'كانون الأول ديسمبر'
+];
+
+test('parse', function (assert) {
+ var tests = months, i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month());
+ }
+ for (i = 0; i < 12; i++) {
+ equalTest(tests[i], 'MMM', i);
+ equalTest(tests[i], 'MMM', i);
+ equalTest(tests[i], 'MMMM', i);
+ equalTest(tests[i], 'MMMM', i);
+ equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'الأحد، شباط فبراير ١٤ ٢٠١٠، ٣:٢٥:٥٠ م'],
+ ['ddd, hA', 'أحد، ٣م'],
+ ['M Mo MM MMMM MMM', '٢ ٢ ٠٢ شباط فبراير شباط فبراير'],
+ ['YYYY YY', '٢٠١٠ ١٠'],
+ ['D Do DD', '١٤ ١٤ ١٤'],
+ ['d do dddd ddd dd', '٠ ٠ الأحد أحد ح'],
+ ['DDD DDDo DDDD', '٤٥ ٤٥ ٠٤٥'],
+ ['w wo ww', '٨ ٨ ٠٨'],
+ ['h hh', '٣ ٠٣'],
+ ['H HH', '١٥ ١٥'],
+ ['m mm', '٢٥ ٢٥'],
+ ['s ss', '٥٠ ٥٠'],
+ ['a A', 'م م'],
+ ['[the] DDDo [day of the year]', 'the ٤٥ day of the year'],
+ ['LT', '١٥:٢٥'],
+ ['LTS', '١٥:٢٥:٥٠'],
+ ['L', '١٤/\u200f٢/\u200f٢٠١٠'],
+ ['LL', '١٤ شباط فبراير ٢٠١٠'],
+ ['LLL', '١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'],
+ ['LLLL', 'الأحد ١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'],
+ ['l', '١٤/\u200f٢/\u200f٢٠١٠'],
+ ['ll', '١٤ شباط فبراير ٢٠١٠'],
+ ['lll', '١٤ شباط فبراير ٢٠١٠ ١٥:٢٥'],
+ ['llll', 'أحد ١٤ شباط فبراير ٢٠١٠ ١٥:٢٥']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '١', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '٢', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '٣', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '٤', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '٥', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '٦', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '٧', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '٨', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '٩', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '١٠', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '١١', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '١٢', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '١٣', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '١٤', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '١٥', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '١٦', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '١٧', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '١٨', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '١٩', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '٢٠', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '٢١', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '٢٢', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '٢٣', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '٢٤', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '٢٥', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '٢٦', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '٢٧', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '٢٨', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '٢٩', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '٣٠', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '٣١', '31');
+});
+
+test('format month', function (assert) {
+ var expected = months, i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM'), expected[i], expected[i]);
+ assert.equal(moment([2011, i, 1]).format('MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'الأحد أحد ح_الإثنين إثنين ن_الثلاثاء ثلاثاء ث_الأربعاء أربعاء ر_الخميس خميس خ_الجمعة جمعة ج_السبت سبت س'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '٤٤ ثانية', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'دقيقة واحدة', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'دقيقة واحدة', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'دقيقتان', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '٤٤ دقيقة', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ساعة واحدة', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ساعة واحدة', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'ساعتان', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '٥ ساعات', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '٢١ ساعة', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'يوم واحد', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'يوم واحد', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'يومان', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'يوم واحد', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '٥ أيام', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '٢٥ يومًا', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'شهر واحد', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'شهر واحد', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'شهر واحد', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'شهران', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'شهران', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '٣ أشهر', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'شهر واحد', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '٥ أشهر', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'عام واحد', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'عامان', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'عام واحد', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '٥ أعوام', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'بعد ٣٠ ثانية', 'prefix');
+ assert.equal(moment(0).from(30000), 'منذ ٣٠ ثانية', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'منذ ثانية واحدة', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'بعد ٣٠ ثانية', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'بعد ٥ أيام', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'اليوم عند الساعة ١٢:٠٠', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'اليوم عند الساعة ١٢:٢٥', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'اليوم عند الساعة ١٣:٠٠', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'غدًا عند الساعة ١٢:٠٠', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'اليوم عند الساعة ١١:٠٠', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'أمس عند الساعة ١٢:٠٠', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [عند الساعة] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting wednesday custom', function (assert) {
+ assert.equal(moment('2003 1 6', 'gggg w d').format('YYYY-MM-DD'), '٢٠٠٢-١٢-٢٨', 'Week 1 of 2003 should be Dec 28 2002');
+ assert.equal(moment('2003 1 0', 'gggg w e').format('YYYY-MM-DD'), '٢٠٠٢-١٢-٢٨', 'Week 1 of 2003 should be Dec 28 2002');
+ assert.equal(moment('2003 1 6', 'gggg w d').format('gggg w d'), '٢٠٠٣ ١ ٦', 'Saturday of week 1 of 2003 parsed should be formatted as 2003 1 6');
+ assert.equal(moment('2003 1 0', 'gggg w e').format('gggg w e'), '٢٠٠٣ ١ ٠', '1st day of week 1 of 2003 parsed should be formatted as 2003 1 0');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '١ ٠١ ١', 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '١ ٠١ ١', 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '٢ ٠٢ ٢', 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '٢ ٠٢ ٢', 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '٣ ٠٣ ٣', 'Jan 14 2012 should be week 3');
+});
+
+test('no leading zeros in long date formats', function (assert) {
+ var i, j, longDateStr, shortDateStr;
+ for (i = 1; i <= 9; ++i) {
+ for (j = 1; j <= 9; ++j) {
+ longDateStr = moment([2014, i, j]).format('L');
+ shortDateStr = moment([2014, i, j]).format('l');
+ assert.equal(longDateStr, shortDateStr, 'should not have leading zeros in month or day');
+ }
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('az');
+
+test('parse', function (assert) {
+ var tests = 'yanvar yan_fevral fev_mart mar_Aprel apr_may may_iyun iyn_iyul iyl_Avqust avq_sentyabr sen_oktyabr okt_noyabr noy_dekabr dek'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, D MMMM YYYY, HH:mm:ss', 'Bazar, 14 fevral 2010, 15:25:50'],
+ ['ddd, A h', 'Baz, gündüz 3'],
+ ['M Mo MM MMMM MMM', '2 2-nci 02 fevral fev'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-üncü 14'],
+ ['d do dddd ddd dd', '0 0-ıncı Bazar Baz Bz'],
+ ['DDD DDDo DDDD', '45 45-inci 045'],
+ ['w wo ww', '7 7-nci 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'gündüz gündüz'],
+ ['[ilin] DDDo [günü]', 'ilin 45-inci günü'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 fevral 2010'],
+ ['LLL', '14 fevral 2010 15:25'],
+ ['LLLL', 'Bazar, 14 fevral 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 fev 2010'],
+ ['lll', '14 fev 2010 15:25'],
+ ['llll', 'Baz, 14 fev 2010 15:25']
+ ],
+ DDDo = [
+ [359, '360-ıncı'],
+ [199, '200-üncü'],
+ [149, '150-nci']
+ ],
+ dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ DDDoDt,
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+ for (i = 0; i < DDDo.length; i++) {
+ DDDoDt = moment([2010]);
+ assert.equal(DDDoDt.add(DDDo[i][0], 'days').format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-inci', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-nci', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-üncü', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-üncü', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-inci', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ncı', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-nci', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-inci', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-uncu', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-uncu', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-inci', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-nci', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-üncü', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-üncü', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-inci', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ncı', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-nci', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-inci', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-uncu', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-nci', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-inci', '21th');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-nci', '22th');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-üncü', '23th');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-üncü', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-inci', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ncı', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-nci', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-inci', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-uncu', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-uncu', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-inci', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'yanvar yan_fevral fev_mart mar_aprel apr_may may_iyun iyn_iyul iyl_avqust avq_sentyabr sen_oktyabr okt_noyabr noy_dekabr dek'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Bazar Baz Bz_Bazar ertəsi BzE BE_Çərşənbə axşamı ÇAx ÇA_Çərşənbə Çər Çə_Cümə axşamı CAx CA_Cümə Cüm Cü_Şənbə Şən Şə'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'birneçə saniyyə', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'bir dəqiqə', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'bir dəqiqə', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 dəqiqə', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 dəqiqə', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'bir saat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'bir saat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 saat', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 saat', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 saat', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'bir gün', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'bir gün', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 gün', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'bir gün', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 gün', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 gün', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'bir ay', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'bir ay', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ay', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ay', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ay', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'bir ay', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ay', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'bir il', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 il', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'bir il', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 il', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'birneçə saniyyə sonra', 'prefix');
+ assert.equal(moment(0).from(30000), 'birneçə saniyyə əvvəl', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'birneçə saniyyə əvvəl', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'birneçə saniyyə sonra', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 gün sonra', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'bugün saat 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'bugün saat 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'bugün saat 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'sabah saat 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'bugün saat 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'dünən 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[gələn həftə] dddd [saat] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[keçən həftə] dddd [saat] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-inci', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-inci', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-nci', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-nci', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-üncü', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('be');
+
+test('parse', function (assert) {
+ var tests = 'студзень студ_люты лют_сакавік сак_красавік крас_травень трав_чэрвень чэрв_ліпень ліп_жнівень жнів_верасень вер_кастрычнік каст_лістапад ліст_снежань снеж'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'нядзеля, 14-га лютага 2010, 15:25:50'],
+ ['ddd, h A', 'нд, 3 дня'],
+ ['M Mo MM MMMM MMM', '2 2-і 02 люты лют'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-га 14'],
+ ['d do dddd ddd dd', '0 0-ы нядзеля нд нд'],
+ ['DDD DDDo DDDD', '45 45-ы 045'],
+ ['w wo ww', '7 7-ы 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'дня дня'],
+ ['DDDo [дзень года]', '45-ы дзень года'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 лютага 2010 г.'],
+ ['LLL', '14 лютага 2010 г., 15:25'],
+ ['LLLL', 'нядзеля, 14 лютага 2010 г., 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 лют 2010 г.'],
+ ['lll', '14 лют 2010 г., 15:25'],
+ ['llll', 'нд, 14 лют 2010 г., 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format meridiem', function (assert) {
+ assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'ночы', 'night');
+ assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'ночы', 'night');
+ assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'раніцы', 'morning');
+ assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'раніцы', 'morning');
+ assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'дня', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'дня', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'вечара', 'evening');
+ assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'вечара', 'evening');
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ы', '1-ы');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-і', '2-і');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-і', '3-і');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ы', '4-ы');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ы', '5-ы');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ы', '6-ы');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ы', '7-ы');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ы', '8-ы');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-ы', '9-ы');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-ы', '10-ы');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ы', '11-ы');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ы', '12-ы');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ы', '13-ы');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ы', '14-ы');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ы', '15-ы');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ы', '16-ы');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ы', '17-ы');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ы', '18-ы');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-ы', '19-ы');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-ы', '20-ы');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ы', '21-ы');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-і', '22-і');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-і', '23-і');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ы', '24-ы');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ы', '25-ы');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ы', '26-ы');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ы', '27-ы');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ы', '28-ы');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ы', '29-ы');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ы', '30-ы');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ы', '31-ы');
+});
+
+test('format month', function (assert) {
+ var expected = 'студзень студ_люты лют_сакавік сак_красавік крас_травень трав_чэрвень чэрв_ліпень ліп_жнівень жнів_верасень вер_кастрычнік каст_лістапад ліст_снежань снеж'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format month case', function (assert) {
+ var months = {
+ 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
+ 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]);
+ }
+});
+
+test('format month case with escaped symbols', function (assert) {
+ var months = {
+ 'nominative': 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_'),
+ 'accusative': 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMMM[</b>]'), '<i>1</i> <b>' + months.accusative[i] + '</b>', '1 <b>' + months.accusative[i] + '</b>');
+ assert.equal(moment([2013, i, 1]).format('D[-ы дзень] MMMM'), '1-ы дзень ' + months.accusative[i], '1-ы дзень ' + months.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'нядзеля нд нд_панядзелак пн пн_аўторак ат ат_серада ср ср_чацвер чц чц_пятніца пт пт_субота сб сб'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'некалькі секунд', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'хвіліна', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'хвіліна', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 хвіліны', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 31}), true), '31 хвіліна', '31 minutes = 31 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 хвіліны', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'гадзіна', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'гадзіна', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 гадзіны', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 гадзін', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 гадзіна', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'дзень', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'дзень', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дні', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'дзень', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дзён', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 дзён', '11 days = 11 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 дзень', '21 days = 21 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дзён', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месяц', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месяц', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месяц', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месяцы', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месяцы', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месяцы', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месяц', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месяцаў', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'год', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 гады', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'год', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 гадоў', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'праз некалькі секунд', 'prefix');
+ assert.equal(moment(0).from(30000), 'некалькі секунд таму', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'праз некалькі секунд', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'праз 5 дзён', 'in 5 days');
+ assert.equal(moment().add({m: 31}).fromNow(), 'праз 31 хвіліну', 'in 31 minutes = in 31 minutes');
+ assert.equal(moment().subtract({m: 31}).fromNow(), '31 хвіліну таму', '31 minutes ago = 31 minutes ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Сёння ў 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Сёння ў 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Сёння ў 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Заўтра ў 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Сёння ў 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Учора ў 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ function makeFormat(d) {
+ return '[У] dddd [ў] LT';
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ы', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ы', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-і', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-і', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-і', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('bg');
+
+test('parse', function (assert) {
+ var tests = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, H:mm:ss', 'неделя, февруари 14-ти 2010, 15:25:50'],
+ ['ddd, hA', 'нед, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-ти 14'],
+ ['d do dddd ddd dd', '0 0-ев неделя нед нд'],
+ ['DDD DDDo DDDD', '45 45-ти 045'],
+ ['w wo ww', '7 7-ми 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45-ти day of the year'],
+ ['LT', '15:25'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 февруари 2010'],
+ ['LLL', '14 февруари 2010 15:25'],
+ ['LLLL', 'неделя, 14 февруари 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 фев 2010'],
+ ['lll', '14 фев 2010 15:25'],
+ ['llll', 'нед, 14 фев 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви');
+});
+
+test('format month', function (assert) {
+ var expected = 'януари янр_февруари фев_март мар_април апр_май май_юни юни_юли юли_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'неделя нед нд_понеделник пон пн_вторник вто вт_сряда сря ср_четвъртък чет чт_петък пет пт_събота съб сб'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'няколко секунди', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'минута', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'минута', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минути', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минути', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'час', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'час', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 часа', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 часа', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 часа', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ден', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ден', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дни', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ден', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дни', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дни', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месец', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месец', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месец', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месеца', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месеца', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месеца', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месец', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месеца', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'година', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 години', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'година', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 години', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'след няколко секунди', 'prefix');
+ assert.equal(moment(0).from(30000), 'преди няколко секунди', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'преди няколко секунди', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'след няколко секунди', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'след 5 дни', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Днес в 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Днес в 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Днес в 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Утре в 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Днес в 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчера в 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [в] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [в] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [в] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('bn');
+
+test('parse', function (assert) {
+ var tests = 'জানুয়ারী জানু_ফেব্রুয়ারি ফেব_মার্চ মার্চ_এপ্রিল এপ্র_মে মে_জুন জুন_জুলাই জুল_আগস্ট আগ_সেপ্টেম্বর সেপ্ট_অক্টোবর অক্টো_নভেম্বর নভে_ডিসেম্বর ডিসে'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, a h:mm:ss সময়', 'রবিবার, ১৪ ফেব্রুয়ারি ২০১০, দুপুর ৩:২৫:৫০ সময়'],
+ ['ddd, a h সময়', 'রবি, দুপুর ৩ সময়'],
+ ['M Mo MM MMMM MMM', '২ ২ ০২ ফেব্রুয়ারি ফেব'],
+ ['YYYY YY', '২০১০ ১০'],
+ ['D Do DD', '১৪ ১৪ ১৪'],
+ ['d do dddd ddd dd', '০ ০ রবিবার রবি রবি'],
+ ['DDD DDDo DDDD', '৪৫ ৪৫ ০৪৫'],
+ ['w wo ww', '৮ ৮ ০৮'],
+ ['h hh', '৩ ০৩'],
+ ['H HH', '১৫ ১৫'],
+ ['m mm', '২৫ ২৫'],
+ ['s ss', '৫০ ৫০'],
+ ['a A', 'দুপুর দুপুর'],
+ ['LT', 'দুপুর ৩:২৫ সময়'],
+ ['LTS', 'দুপুর ৩:২৫:৫০ সময়'],
+ ['L', '১৪/০২/২০১০'],
+ ['LL', '১৪ ফেব্রুয়ারি ২০১০'],
+ ['LLL', '১৪ ফেব্রুয়ারি ২০১০, দুপুর ৩:২৫ সময়'],
+ ['LLLL', 'রবিবার, ১৪ ফেব্রুয়ারি ২০১০, দুপুর ৩:২৫ সময়'],
+ ['l', '১৪/২/২০১০'],
+ ['ll', '১৪ ফেব ২০১০'],
+ ['lll', '১৪ ফেব ২০১০, দুপুর ৩:২৫ সময়'],
+ ['llll', 'রবি, ১৪ ফেব ২০১০, দুপুর ৩:২৫ সময়']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '১', '১');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '২', '২');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '৩', '৩');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '৪', '৪');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '৫', '৫');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '৬', '৬');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '৭', '৭');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '৮', '৮');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '৯', '৯');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '১০', '১০');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '১১', '১১');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '১২', '১২');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '১৩', '১৩');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '১৪', '১৪');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '১৫', '১৫');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '১৬', '১৬');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '১৭', '১৭');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '১৮', '১৮');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '১৯', '১৯');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '২০', '২০');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '২১', '২১');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '২২', '২২');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '২৩', '২৩');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '২৪', '২৪');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '২৫', '২৫');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '২৬', '২৬');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '২৭', '২৭');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '২৮', '२৮');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '২৯', '২৯');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '৩০', '৩০');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '৩১', '৩১');
+});
+
+test('format month', function (assert) {
+ var expected = 'জানুয়ারী জানু_ফেব্রুয়ারি ফেব_মার্চ মার্চ_এপ্রিল এপ্র_মে মে_জুন জুন_জুলাই জুল_আগস্ট আগ_সেপ্টেম্বর সেপ্ট_অক্টোবর অক্টো_নভেম্বর নভে_ডিসেম্বর ডিসে'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'রবিবার রবি রবি_সোমবার সোম সোম_মঙ্গলবার মঙ্গল মঙ্গ_বুধবার বুধ বুধ_বৃহস্পতিবার বৃহস্পতি বৃহঃ_শুক্রবার শুক্র শুক্র_শনিবার শনি শনি'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'কয়েক সেকেন্ড', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'এক মিনিট', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'এক মিনিট', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '২ মিনিট', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '৪৪ মিনিট', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'এক ঘন্টা', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'এক ঘন্টা', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '২ ঘন্টা', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '৫ ঘন্টা', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '২১ ঘন্টা', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'এক দিন', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'এক দিন', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '২ দিন', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'এক দিন', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '৫ দিন', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '২৫ দিন', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'এক মাস', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'এক মাস', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '২ মাস', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '২ মাস', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '৩ মাস', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'এক মাস', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '৫ মাস', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'এক বছর', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '২ বছর', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'এক বছর', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '৫ বছর', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'কয়েক সেকেন্ড পরে', 'prefix');
+ assert.equal(moment(0).from(30000), 'কয়েক সেকেন্ড আগে', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'কয়েক সেকেন্ড আগে', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'কয়েক সেকেন্ড পরে', 'কয়েক সেকেন্ড পরে');
+ assert.equal(moment().add({d: 5}).fromNow(), '৫ দিন পরে', '৫ দিন পরে');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'আজ দুপুর ১২:০০ সময়', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'আজ দুপুর ১২:২৫ সময়', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'আজ দুপুর ৩:০০ সময়', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'আগামীকাল দুপুর ১২:০০ সময়', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'আজ দুপুর ১১:০০ সময়', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'গতকাল দুপুর ১২:০০ সময়', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[গত] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[গত] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[গত] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'রাত', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'সকাল', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'দুপুর', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'বিকাল', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'বিকাল', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'রাত', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'রাত', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'সকাল', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'দুপুর', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'বিকাল', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'বিকাল', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'রাত', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '১ ০১ ১', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '১ ০১ ১', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '২ ০২ ২', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '২ ০২ ২', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '৩ ০৩ ৩', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('bo');
+
+test('parse', function (assert) {
+ var tests = 'ཟླ་བ་དང་པོ ཟླ་བ་དང་པོ._ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, a h:mm:ss ལ་', 'གཟའ་ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥:༥༠ ལ་'],
+ ['ddd, a h ལ་', 'ཉི་མ་, ཉིན་གུང ༣ ལ་'],
+ ['M Mo MM MMMM MMM', '༢ ༢ ༠༢ ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ'],
+ ['YYYY YY', '༢༠༡༠ ༡༠'],
+ ['D Do DD', '༡༤ ༡༤ ༡༤'],
+ ['d do dddd ddd dd', '༠ ༠ གཟའ་ཉི་མ་ ཉི་མ་ ཉི་མ་'],
+ ['DDD DDDo DDDD', '༤༥ ༤༥ ༠༤༥'],
+ ['w wo ww', '༨ ༨ ༠༨'],
+ ['h hh', '༣ ༠༣'],
+ ['H HH', '༡༥ ༡༥'],
+ ['m mm', '༢༥ ༢༥'],
+ ['s ss', '༥༠ ༥༠'],
+ ['a A', 'ཉིན་གུང ཉིན་གུང'],
+ ['LT', 'ཉིན་གུང ༣:༢༥'],
+ ['LTS', 'ཉིན་གུང ༣:༢༥:༥༠'],
+ ['L', '༡༤/༠༢/༢༠༡༠'],
+ ['LL', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠'],
+ ['LLL', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'],
+ ['LLLL', 'གཟའ་ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'],
+ ['l', '༡༤/༢/༢༠༡༠'],
+ ['ll', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠'],
+ ['lll', '༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥'],
+ ['llll', 'ཉི་མ་, ༡༤ ཟླ་བ་གཉིས་པ ༢༠༡༠, ཉིན་གུང ༣:༢༥']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '༡', '༡');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '༢', '༢');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '༣', '༣');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '༤', '༤');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '༥', '༥');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '༦', '༦');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '༧', '༧');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '༨', '༨');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '༩', '༩');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '༡༠', '༡༠');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '༡༡', '༡༡');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '༡༢', '༡༢');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '༡༣', '༡༣');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '༡༤', '༡༤');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '༡༥', '༡༥');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '༡༦', '༡༦');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '༡༧', '༡༧');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '༡༨', '༡༨');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '༡༩', '༡༩');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '༢༠', '༢༠');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '༢༡', '༢༡');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '༢༢', '༢༢');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '༢༣', '༢༣');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '༢༤', '༢༤');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '༢༥', '༢༥');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '༢༦', '༢༦');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '༢༧', '༢༧');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '༢༨', '༢༨');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '༢༩', '༢༩');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '༣༠', '༣༠');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '༣༡', '༣༡');
+});
+
+test('format month', function (assert) {
+ var expected = 'ཟླ་བ་དང་པོ ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'གཟའ་ཉི་མ་ ཉི་མ་ ཉི་མ་_གཟའ་ཟླ་བ་ ཟླ་བ་ ཟླ་བ་_གཟའ་མིག་དམར་ མིག་དམར་ མིག་དམར་_གཟའ་ལྷག་པ་ ལྷག་པ་ ལྷག་པ་_གཟའ་ཕུར་བུ ཕུར་བུ ཕུར་བུ_གཟའ་པ་སངས་ པ་སངས་ པ་སངས་_གཟའ་སྤེན་པ་ སྤེན་པ་ སྤེན་པ་'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ལམ་སང', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'སྐར་མ་གཅིག', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'སྐར་མ་གཅིག', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '༢ སྐར་མ', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '༤༤ སྐར་མ', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ཆུ་ཚོད་གཅིག', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ཆུ་ཚོད་གཅིག', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '༢ ཆུ་ཚོད', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '༥ ཆུ་ཚོད', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '༢༡ ཆུ་ཚོད', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ཉིན་གཅིག', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ཉིན་གཅིག', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '༢ ཉིན་', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ཉིན་གཅིག', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '༥ ཉིན་', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '༢༥ ཉིན་', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ཟླ་བ་གཅིག', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ཟླ་བ་གཅིག', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ཟླ་བ་གཅིག', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '༢ ཟླ་བ', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '༢ ཟླ་བ', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '༣ ཟླ་བ', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ཟླ་བ་གཅིག', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '༥ ཟླ་བ', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ལོ་གཅིག', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '༢ ལོ', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ལོ་གཅིག', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '༥ ལོ', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ལམ་སང ལ་', 'prefix');
+ assert.equal(moment(0).from(30000), 'ལམ་སང སྔན་ལ', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ལམ་སང སྔན་ལ', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ལམ་སང ལ་', 'ལམ་སང ལ་');
+ assert.equal(moment().add({d: 5}).fromNow(), '༥ ཉིན་ ལ་', '༥ ཉིན་ ལ་');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'དི་རིང ཉིན་གུང ༡༢:༠༠', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'དི་རིང ཉིན་གུང ༡༢:༢༥', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'དི་རིང ཉིན་གུང ༣:༠༠', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'སང་ཉིན ཉིན་གུང ༡༢:༠༠', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'དི་རིང ཉིན་གུང ༡༡:༠༠', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ཁ་སང ཉིན་གུང ༡༢:༠༠', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་རྗེས་མ][,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[བདུན་ཕྲག་མཐའ་མ] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'མཚན་མོ', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ཞོགས་ཀས', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ཉིན་གུང', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'དགོང་དག', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'དགོང་དག', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'མཚན་མོ', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'མཚན་མོ', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ཞོགས་ཀས', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ཉིན་གུང', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'དགོང་དག', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'དགོང་དག', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'མཚན་མོ', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '༡ ༠༡ ༡', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '༡ ༠༡ ༡', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '༢ ༠༢ ༢', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '༢ ༠༢ ༢', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '༣ ༠༣ ༣', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('br');
+
+test('parse', function (assert) {
+ var tests = 'Genver Gen_C\'hwevrer C\'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ moment.locale('br');
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sul, C\'hwevrer 14vet 2010, 3:25:50 pm'],
+ ['ddd, h A', 'Sul, 3 PM'],
+ ['M Mo MM MMMM MMM', '2 2vet 02 C\'hwevrer C\'hwe'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14vet 14'],
+ ['d do dddd ddd dd', '0 0vet Sul Sul Su'],
+ ['DDD DDDo DDDD', '45 45vet 045'],
+ ['w wo ww', '6 6vet 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['DDDo [devezh] [ar] [vloaz]', '45vet devezh ar vloaz'],
+ ['L', '14/02/2010'],
+ ['LL', '14 a viz C\'hwevrer 2010'],
+ ['LLL', '14 a viz C\'hwevrer 2010 3e25 PM'],
+ ['LLLL', 'Sul, 14 a viz C\'hwevrer 2010 3e25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ moment.locale('br');
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1añ', '1añ');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2vet', '2vet');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3vet', '3vet');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4vet', '4vet');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5vet', '5vet');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6vet', '6vet');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7vet', '7vet');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8vet', '8vet');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9vet', '9vet');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10vet', '10vet');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11vet', '11vet');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12vet', '12vet');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13vet', '13vet');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14vet', '14vet');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15vet', '15vet');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16vet', '16vet');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17vet', '17vet');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18vet', '18vet');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19vet', '19vet');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20vet', '20vet');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21vet', '21vet');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22vet', '22vet');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23vet', '23vet');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24vet', '24vet');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25vet', '25vet');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26vet', '26vet');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27vet', '27vet');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28vet', '28vet');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29vet', '29vet');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30vet', '30vet');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31vet', '31vet');
+});
+
+test('format month', function (assert) {
+ moment.locale('br');
+ var expected = 'Genver Gen_C\'hwevrer C\'hwe_Meurzh Meu_Ebrel Ebr_Mae Mae_Mezheven Eve_Gouere Gou_Eost Eos_Gwengolo Gwe_Here Her_Du Du_Kerzu Ker'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ moment.locale('br');
+ var expected = 'Sul Sul Su_Lun Lun Lu_Meurzh Meu Me_Merc\'her Mer Mer_Yaou Yao Ya_Gwener Gwe Gw_Sadorn Sad Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ moment.locale('br');
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'un nebeud segondennoù', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ur vunutenn', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ur vunutenn', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 vunutenn', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 munutenn', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'un eur', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'un eur', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 eur', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 eur', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 eur', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un devezh', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un devezh', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 zevezh', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un devezh', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 devezh', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 devezh', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ur miz', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ur miz', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ur miz', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 viz', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 viz', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 miz', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ur miz', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 miz', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ur bloaz', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 vloaz', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ur bloaz', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 bloaz', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ moment.locale('br');
+ assert.equal(moment(30000).from(0), 'a-benn un nebeud segondennoù', 'prefix');
+ assert.equal(moment(0).from(30000), 'un nebeud segondennoù \'zo', 'suffix');
+});
+
+test('now from now', function (assert) {
+ moment.locale('br');
+ assert.equal(moment().fromNow(), 'un nebeud segondennoù \'zo', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ moment.locale('br');
+ assert.equal(moment().add({s: 30}).fromNow(), 'a-benn un nebeud segondennoù', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'a-benn 5 devezh', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ moment.locale('br');
+
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hiziv da 12e00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hiziv da 12e25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hiziv da 1e00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Warc\'hoazh da 12e00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hiziv da 11e00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Dec\'h da 12e00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ moment.locale('br');
+
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [da] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [da] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [da] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ moment.locale('br');
+
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [paset da] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [paset da] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [paset da] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ moment.locale('br');
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('special mutations for years', function (assert) {
+ moment.locale('br');
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ur bloaz', 'mutation 1 year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 2}), true), '2 vloaz', 'mutation 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 3}), true), '3 bloaz', 'mutation 3 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 4}), true), '4 bloaz', 'mutation 4 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 bloaz', 'mutation 5 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 9}), true), '9 bloaz', 'mutation 9 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 10}), true), '10 vloaz', 'mutation 10 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), '21 bloaz', 'mutation 21 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 22}), true), '22 vloaz', 'mutation 22 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 133}), true), '133 bloaz', 'mutation 133 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 148}), true), '148 vloaz', 'mutation 148 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 261}), true), '261 bloaz', 'mutation 261 years');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('bs');
+
+test('parse', function (assert) {
+ var tests = 'januar jan._februar feb._mart mar._april apr._maj maj._juni jun._juli jul._august aug._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' inp ' + mmm);
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. februar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ned., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. nedjelja ned. ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 15:25'],
+ ['LLLL', 'nedjelja, 14. februar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb. 2010'],
+ ['lll', '14. feb. 2010 15:25'],
+ ['llll', 'ned., 14. feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan._februar feb._mart mar._april apr._maj maj._juni jun._juli jul._august aug._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'par sekundi', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedna minuta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedna minuta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mjesec', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mjesec', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mjesec', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mjeseca', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mjeseca', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mjeseca', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mjesec', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mjeseci', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za par sekundi', 'prefix');
+ assert.equal(moment(0).from(30000), 'prije par sekundi', 'prefix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'prije par sekundi', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za par sekundi', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'sutra u 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'jučer u 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ca');
+
+test('parse', function (assert) {
+ var tests = 'gener gen._febrer febr._març mar._abril abr._maig mai._juny jun._juliol jul._agost ag._setembre set._octubre oct._novembre nov._desembre des.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'diumenge, 14è febrer 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dg., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2n 02 febrer febr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14è 14'],
+ ['d do dddd ddd dd', '0 0è diumenge dg. Dg'],
+ ['DDD DDDo DDDD', '45 45è 045'],
+ ['w wo ww', '6 6a 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45è day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 febrer 2010'],
+ ['LLL', '14 febrer 2010 15:25'],
+ ['LLLL', 'diumenge 14 febrer 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 febr. 2010'],
+ ['lll', '14 febr. 2010 15:25'],
+ ['llll', 'dg. 14 febr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1r', '1r');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2n', '2n');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3r', '3r');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4t', '4t');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5è', '5è');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6è', '6è');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7è', '7è');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8è', '8è');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9è', '9è');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10è', '10è');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11è', '11è');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12è', '12è');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13è', '13è');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14è', '14è');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15è', '15è');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16è', '16è');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17è', '17è');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18è', '18è');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19è', '19è');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20è', '20è');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21è', '21è');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22è', '22è');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23è', '23è');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24è', '24è');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25è', '25è');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26è', '26è');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27è', '27è');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28è', '28è');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29è', '29è');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30è', '30è');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31è', '31è');
+});
+
+test('format month', function (assert) {
+ var expected = 'gener gen._febrer febr._març mar._abril abr._maig mai._juny jun._juliol jul._agost ag._setembre set._octubre oct._novembre nov._desembre des.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'diumenge dg. Dg_dilluns dl. Dl_dimarts dt. Dt_dimecres dc. Dc_dijous dj. Dj_divendres dv. Dv_dissabte ds. Ds'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'uns segons', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuts', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuts', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'una hora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'una hora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hores', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hores', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hores', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un dia', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un dia', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dies', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un dia', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dies', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dies', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesos', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesos', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesos', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesos', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un any', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anys', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un any', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anys', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'd\'aquí uns segons', 'prefix');
+ assert.equal(moment(0).from(30000), 'fa uns segons', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'fa uns segons', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'd\'aquí uns segons', 'd\'aquí uns segons');
+ assert.equal(moment().add({d: 5}).fromNow(), 'd\'aquí 5 dies', 'd\'aquí 5 dies');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'avui a les 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'avui a les 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'avui a les 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'demà a les 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'demà a les 11:00', 'tomorrow minus 1 hour');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'avui a les 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ahir a les 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[el] dddd [passat a ' + ((m.hours() !== 1) ? 'les' : 'la') + '] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52a', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1a', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1a', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2a', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2a', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('cs');
+
+test('parse', function (assert) {
+ var tests = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split('_'), i;
+ function equalTest(input, mmm, monthIndex) {
+ assert.equal(moment(input, mmm).month(), monthIndex, input + ' ' + mmm + ' should be month ' + (monthIndex + 1));
+ }
+ function equalTestStrict(input, mmm, monthIndex) {
+ assert.equal(moment(input, mmm, true).month(), monthIndex, input + ' ' + mmm + ' should be strict month ' + (monthIndex + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+
+ equalTestStrict(tests[i][1], 'MMM', i);
+ equalTestStrict(tests[i][0], 'MMMM', i);
+ equalTestStrict(tests[i][1].toLocaleLowerCase(), 'MMM', i);
+ equalTestStrict(tests[i][1].toLocaleUpperCase(), 'MMM', i);
+ equalTestStrict(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTestStrict(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss', 'neděle, únor 14. 2010, 3:25:50'],
+ ['ddd, h', 'ne, 3'],
+ ['M Mo MM MMMM MMM', '2 2. 02 únor úno'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. neděle ne ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['DDDo [den v roce]', '45. den v roce'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. únor 2010'],
+ ['LLL', '14. únor 2010 15:25'],
+ ['LLLL', 'neděle 14. únor 2010 15:25'],
+ ['l', '14. 2. 2010'],
+ ['ll', '14. úno 2010'],
+ ['lll', '14. úno 2010 15:25'],
+ ['llll', 'ne 14. úno 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'leden led_únor úno_březen bře_duben dub_květen kvě_červen čvn_červenec čvc_srpen srp_září zář_říjen říj_listopad lis_prosinec pro'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'neděle ne ne_pondělí po po_úterý út út_středa st st_čtvrtek čt čt_pátek pá pá_sobota so so'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'pár sekund', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuty', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minut', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'hodina', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'hodina', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hodiny', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hodin', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hodin', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'den', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'den', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dny', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'den', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dní', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dní', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'měsíc', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'měsíc', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'měsíc', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 měsíce', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 měsíce', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 měsíce', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'měsíc', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 měsíců', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'rok', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 roky', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'rok', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 let', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za pár sekund', 'prefix');
+ assert.equal(moment(0).from(30000), 'před pár sekundami', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'před pár sekundami', 'now from now should display as in the past');
+});
+
+test('fromNow (future)', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za pár sekund', 'in a few seconds');
+ assert.equal(moment().add({m: 1}).fromNow(), 'za minutu', 'in a minute');
+ assert.equal(moment().add({m: 3}).fromNow(), 'za 3 minuty', 'in 3 minutes');
+ assert.equal(moment().add({m: 10}).fromNow(), 'za 10 minut', 'in 10 minutes');
+ assert.equal(moment().add({h: 1}).fromNow(), 'za hodinu', 'in an hour');
+ assert.equal(moment().add({h: 3}).fromNow(), 'za 3 hodiny', 'in 3 hours');
+ assert.equal(moment().add({h: 10}).fromNow(), 'za 10 hodin', 'in 10 hours');
+ assert.equal(moment().add({d: 1}).fromNow(), 'za den', 'in a day');
+ assert.equal(moment().add({d: 3}).fromNow(), 'za 3 dny', 'in 3 days');
+ assert.equal(moment().add({d: 10}).fromNow(), 'za 10 dní', 'in 10 days');
+ assert.equal(moment().add({M: 1}).fromNow(), 'za měsíc', 'in a month');
+ assert.equal(moment().add({M: 3}).fromNow(), 'za 3 měsíce', 'in 3 months');
+ assert.equal(moment().add({M: 10}).fromNow(), 'za 10 měsíců', 'in 10 months');
+ assert.equal(moment().add({y: 1}).fromNow(), 'za rok', 'in a year');
+ assert.equal(moment().add({y: 3}).fromNow(), 'za 3 roky', 'in 3 years');
+ assert.equal(moment().add({y: 10}).fromNow(), 'za 10 let', 'in 10 years');
+});
+
+test('fromNow (past)', function (assert) {
+ assert.equal(moment().subtract({s: 30}).fromNow(), 'před pár sekundami', 'a few seconds ago');
+ assert.equal(moment().subtract({m: 1}).fromNow(), 'před minutou', 'a minute ago');
+ assert.equal(moment().subtract({m: 3}).fromNow(), 'před 3 minutami', '3 minutes ago');
+ assert.equal(moment().subtract({m: 10}).fromNow(), 'před 10 minutami', '10 minutes ago');
+ assert.equal(moment().subtract({h: 1}).fromNow(), 'před hodinou', 'an hour ago');
+ assert.equal(moment().subtract({h: 3}).fromNow(), 'před 3 hodinami', '3 hours ago');
+ assert.equal(moment().subtract({h: 10}).fromNow(), 'před 10 hodinami', '10 hours ago');
+ assert.equal(moment().subtract({d: 1}).fromNow(), 'před dnem', 'a day ago');
+ assert.equal(moment().subtract({d: 3}).fromNow(), 'před 3 dny', '3 days ago');
+ assert.equal(moment().subtract({d: 10}).fromNow(), 'před 10 dny', '10 days ago');
+ assert.equal(moment().subtract({M: 1}).fromNow(), 'před měsícem', 'a month ago');
+ assert.equal(moment().subtract({M: 3}).fromNow(), 'před 3 měsíci', '3 months ago');
+ assert.equal(moment().subtract({M: 10}).fromNow(), 'před 10 měsíci', '10 months ago');
+ assert.equal(moment().subtract({y: 1}).fromNow(), 'před rokem', 'a year ago');
+ assert.equal(moment().subtract({y: 3}).fromNow(), 'před 3 lety', '3 years ago');
+ assert.equal(moment().subtract({y: 10}).fromNow(), 'před 10 lety', '10 years ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'dnes v 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'dnes v 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'dnes v 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'zítra v 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'dnes v 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'včera v 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m, nextDay;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ nextDay = '';
+ switch (m.day()) {
+ case 0:
+ nextDay = 'v neděli';
+ break;
+ case 1:
+ nextDay = 'v pondělí';
+ break;
+ case 2:
+ nextDay = 'v úterý';
+ break;
+ case 3:
+ nextDay = 've středu';
+ break;
+ case 4:
+ nextDay = 've čtvrtek';
+ break;
+ case 5:
+ nextDay = 'v pátek';
+ break;
+ case 6:
+ nextDay = 'v sobotu';
+ break;
+ }
+ assert.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[' + nextDay + '] [v] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, lastDay;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ lastDay = '';
+ switch (m.day()) {
+ case 0:
+ lastDay = 'minulou neděli';
+ break;
+ case 1:
+ lastDay = 'minulé pondělí';
+ break;
+ case 2:
+ lastDay = 'minulé úterý';
+ break;
+ case 3:
+ lastDay = 'minulou středu';
+ break;
+ case 4:
+ lastDay = 'minulý čtvrtek';
+ break;
+ case 5:
+ lastDay = 'minulý pátek';
+ break;
+ case 6:
+ lastDay = 'minulou sobotu';
+ break;
+ }
+ assert.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[' + lastDay + '] [v] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('humanize duration', function (assert) {
+ assert.equal(moment.duration(1, 'minutes').humanize(), 'minuta', 'a minute (future)');
+ assert.equal(moment.duration(1, 'minutes').humanize(true), 'za minutu', 'in a minute');
+ assert.equal(moment.duration(-1, 'minutes').humanize(), 'minuta', 'a minute (past)');
+ assert.equal(moment.duration(-1, 'minutes').humanize(true), 'před minutou', 'a minute ago');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('cv');
+
+test('parse', function (assert) {
+ var tests = 'кӑрлач кӑр_нарӑс нар_пуш пуш_ака ака_май май_ҫӗртме ҫӗр_утӑ утӑ_ҫурла ҫур_авӑн авн_юпа юпа_чӳк чӳк_раштав раш'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'вырсарникун, нарӑс 14-мӗш 2010, 3:25:50 pm'],
+ ['ddd, hA', 'выр, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2-мӗш 02 нарӑс нар'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-мӗш 14'],
+ ['d do dddd ddd dd', '0 0-мӗш вырсарникун выр вр'],
+ ['DDD DDDo DDDD', '45 45-мӗш 045'],
+ ['w wo ww', '7 7-мӗш 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['Ҫулӑн DDDo кунӗ', 'Ҫулӑн 45-мӗш кунӗ'],
+ ['LTS', '15:25:50'],
+ ['L', '14-02-2010'],
+ ['LL', '2010 ҫулхи нарӑс уйӑхӗн 14-мӗшӗ'],
+ ['LLL', '2010 ҫулхи нарӑс уйӑхӗн 14-мӗшӗ, 15:25'],
+ ['LLLL', 'вырсарникун, 2010 ҫулхи нарӑс уйӑхӗн 14-мӗшӗ, 15:25'],
+ ['l', '14-2-2010'],
+ ['ll', '2010 ҫулхи нар уйӑхӗн 14-мӗшӗ'],
+ ['lll', '2010 ҫулхи нар уйӑхӗн 14-мӗшӗ, 15:25'],
+ ['llll', 'выр, 2010 ҫулхи нар уйӑхӗн 14-мӗшӗ, 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-мӗш', '1-мӗш');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-мӗш', '2-мӗш');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-мӗш', '3-мӗш');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-мӗш', '4-мӗш');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-мӗш', '5-мӗш');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-мӗш', '6-мӗш');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-мӗш', '7-мӗш');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-мӗш', '8-мӗш');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-мӗш', '9-мӗш');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-мӗш', '10-мӗш');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-мӗш', '11-мӗш');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-мӗш', '12-мӗш');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-мӗш', '13-мӗш');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-мӗш', '14-мӗш');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-мӗш', '15-мӗш');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-мӗш', '16-мӗш');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-мӗш', '17-мӗш');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-мӗш', '18-мӗш');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-мӗш', '19-мӗш');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-мӗш', '20-мӗш');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-мӗш', '21-мӗш');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-мӗш', '22-мӗш');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-мӗш', '23-мӗш');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-мӗш', '24-мӗш');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-мӗш', '25-мӗш');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-мӗш', '26-мӗш');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-мӗш', '27-мӗш');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-мӗш', '28-мӗш');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-мӗш', '29-мӗш');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-мӗш', '30-мӗш');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-мӗш', '31-мӗш');
+});
+
+test('format month', function (assert) {
+ var expected = 'кӑрлач кӑр_нарӑс нар_пуш пуш_ака ака_май май_ҫӗртме ҫӗр_утӑ утӑ_ҫурла ҫур_авӑн авн_юпа юпа_чӳк чӳк_раштав раш'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'вырсарникун выр вр_тунтикун тун тн_ытларикун ытл ыт_юнкун юн юн_кӗҫнерникун кӗҫ кҫ_эрнекун эрн эр_шӑматкун шӑм шм'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'пӗр-ик ҫеккунт', '44 sekunder = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'пӗр минут', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'пӗр минут', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минут', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минут', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'пӗр сехет', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'пӗр сехет', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 сехет', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 сехет', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 сехет', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'пӗр кун', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'пӗр кун', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 кун', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'пӗр кун', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 кун', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 кун', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'пӗр уйӑх', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'пӗр уйӑх', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'пӗр уйӑх', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 уйӑх', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 уйӑх', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 уйӑх', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'пӗр уйӑх', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 уйӑх', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'пӗр ҫул', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ҫул', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'пӗр ҫул', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ҫул', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'пӗр-ик ҫеккунтран', 'prefix');
+ assert.equal(moment(0).from(30000), 'пӗр-ик ҫеккунт каялла', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'пӗр-ик ҫеккунт каялла', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'пӗр-ик ҫеккунтран', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 кунран', 'in 5 days');
+ assert.equal(moment().add({h: 2}).fromNow(), '2 сехетрен', 'in 2 hours, the right suffix!');
+ assert.equal(moment().add({y: 3}).fromNow(), '3 ҫултан', 'in 3 years, the right suffix!');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+ assert.equal(moment(a).calendar(), 'Паян 12:00 сехетре', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Паян 12:25 сехетре', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Паян 13:00 сехетре', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Ыран 12:00 сехетре', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Паян 11:00 сехетре', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ӗнер 12:00 сехетре', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[Ҫитес] dddd LT [сехетре]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Ҫитес] dddd LT [сехетре]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Ҫитес] dddd LT [сехетре]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Иртнӗ] dddd LT [сехетре]'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Иртнӗ] dddd LT [сехетре]'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Иртнӗ] dddd LT [сехетре]'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+// Monday is the first day of the week.
+// The week that contains Jan 1st is the first week of the year.
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-мӗш', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-мӗш', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-мӗш', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-мӗш', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-мӗш', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('cy');
+
+test('parse', function (assert) {
+ var tests = 'Ionawr Ion_Chwefror Chwe_Mawrth Maw_Ebrill Ebr_Mai Mai_Mehefin Meh_Gorffennaf Gor_Awst Aws_Medi Med_Hydref Hyd_Tachwedd Tach_Rhagfyr Rhag'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Dydd Sul, Chwefror 14eg 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sul, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2il 02 Chwefror Chwe'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14eg 14'],
+ ['d do dddd ddd dd', '0 0 Dydd Sul Sul Su'],
+ ['DDD DDDo DDDD', '45 45ain 045'],
+ ['w wo ww', '6 6ed 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45ain day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Chwefror 2010'],
+ ['LLL', '14 Chwefror 2010 15:25'],
+ ['LLLL', 'Dydd Sul, 14 Chwefror 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Chwe 2010'],
+ ['lll', '14 Chwe 2010 15:25'],
+ ['llll', 'Sul, 14 Chwe 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1af', '1af');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2il', '2il');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3ydd', '3ydd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4ydd', '4ydd');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5ed', '5ed');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6ed', '6ed');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7ed', '7ed');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8fed', '8fed');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9fed', '9fed');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10fed', '10fed');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11eg', '11eg');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12fed', '12fed');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13eg', '13eg');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14eg', '14eg');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15fed', '15fed');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16eg', '16eg');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17eg', '17eg');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18fed', '18fed');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19eg', '19eg');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20fed', '20fed');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ain', '21ain');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ain', '22ain');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ain', '23ain');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ain', '24ain');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ain', '25ain');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ain', '26ain');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ain', '27ain');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ain', '28ain');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ain', '29ain');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ain', '30ain');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ain', '31ain');
+});
+
+test('format month', function (assert) {
+ var expected = 'Ionawr Ion_Chwefror Chwe_Mawrth Maw_Ebrill Ebr_Mai Mai_Mehefin Meh_Gorffennaf Gor_Awst Aws_Medi Med_Hydref Hyd_Tachwedd Tach_Rhagfyr Rhag'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Dydd Sul Sul Su_Dydd Llun Llun Ll_Dydd Mawrth Maw Ma_Dydd Mercher Mer Me_Dydd Iau Iau Ia_Dydd Gwener Gwe Gw_Dydd Sadwrn Sad Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ychydig eiliadau', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'munud', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'munud', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 munud', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 munud', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'awr', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'awr', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 awr', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 awr', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 awr', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diwrnod', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diwrnod', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 diwrnod', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diwrnod', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 diwrnod', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 diwrnod', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mis', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mis', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mis', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mis', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mis', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mis', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mis', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mis', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'blwyddyn', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 flynedd', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'blwyddyn', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 flynedd', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'mewn ychydig eiliadau', 'prefix');
+ assert.equal(moment(0).from(30000), 'ychydig eiliadau yn ôl', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'mewn ychydig eiliadau', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'mewn 5 diwrnod', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Heddiw am 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Heddiw am 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Heddiw am 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Yfory am 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Heddiw am 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ddoe am 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [am] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [am] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [am] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [diwethaf am] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ain', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1af', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1af', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2il', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2il', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('da');
+
+test('parse', function (assert) {
+ var tests = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd [den] Do MMMM YYYY, h:mm:ss a', 'søndag den 14. februar 2010, 3:25:50 pm'],
+ ['ddd hA', 'søn 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. søndag søn sø'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[den] DDDo [dag på året]', 'den 45. dag på året'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 15:25'],
+ ['LLLL', 'søndag d. 14. februar 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14. feb 2010'],
+ ['lll', '14. feb 2010 15:25'],
+ ['llll', 'søn d. 14. feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan_februar feb_marts mar_april apr_maj maj_juni jun_juli jul_august aug_september sep_oktober okt_november nov_december dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'søndag søn sø_mandag man ma_tirsdag tir ti_onsdag ons on_torsdag tor to_fredag fre fr_lørdag lør lø'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'få sekunder', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'et minut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'et minut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutter', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutter', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'en time', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'en time', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timer', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timer', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timer', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dage', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dage', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dage', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en måned', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en måned', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en måned', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 måneder', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 måneder', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 måneder', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en måned', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 måneder', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'et år', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'et år', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'om få sekunder', 'prefix');
+ assert.equal(moment(0).from(30000), 'få sekunder siden', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'få sekunder siden', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'om få sekunder', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dage', 'in 5 days');
+});
+
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'I dag kl. 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'I dag kl. 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'I dag kl. 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'I morgen kl. 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'I dag kl. 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'I går kl. 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[sidste] dddd [kl] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[sidste] dddd [kl] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[sidste] dddd [kl] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('de-at');
+
+test('parse', function (assert) {
+ var tests = 'Jänner Jän._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i;
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'So., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. Sonntag So. So'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. Februar 2010'],
+ ['LLL', '14. Februar 2010 15:25'],
+ ['LLLL', 'Sonntag, 14. Februar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. Febr. 2010'],
+ ['lll', '14. Febr. 2010 15:25'],
+ ['llll', 'So., 14. Febr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'Jänner Jän._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ein paar Sekunden', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eine Minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eine Minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minuten', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minuten', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eine Stunde', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eine Stunde', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stunden', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stunden', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stunden', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein Tag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein Tag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Tage', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein Tag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Tage', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Tage', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein Monat', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein Monat', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Monate', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Monate', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Monate', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein Monat', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Monate', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ein Jahr', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Jahre', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ein Jahr', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Jahre', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in ein paar Sekunden', 'prefix');
+ assert.equal(moment(0).from(30000), 'vor ein paar Sekunden', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in ein paar Sekunden', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 Tagen', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'heute um 12:00 Uhr', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'heute um 12:25 Uhr', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'heute um 13:00 Uhr', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'morgen um 12:00 Uhr', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'heute um 11:00 Uhr', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'gestern um 12:00 Uhr', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('de');
+
+test('parse', function (assert) {
+ var tests = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'Sonntag, 14. Februar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'So., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. Sonntag So. So'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. Februar 2010'],
+ ['LLL', '14. Februar 2010 15:25'],
+ ['LLLL', 'Sonntag, 14. Februar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. Febr. 2010'],
+ ['lll', '14. Febr. 2010 15:25'],
+ ['llll', 'So., 14. Febr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'Januar Jan._Februar Febr._März Mrz._April Apr._Mai Mai_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sonntag So. So_Montag Mo. Mo_Dienstag Di. Di_Mittwoch Mi. Mi_Donnerstag Do. Do_Freitag Fr. Fr_Samstag Sa. Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ein paar Sekunden', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eine Minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eine Minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minuten', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minuten', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eine Stunde', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eine Stunde', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stunden', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stunden', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stunden', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein Tag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein Tag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Tage', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein Tag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Tage', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Tage', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein Monat', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein Monat', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein Monat', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Monate', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Monate', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Monate', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein Monat', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Monate', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ein Jahr', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Jahre', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ein Jahr', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Jahre', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in ein paar Sekunden', 'prefix');
+ assert.equal(moment(0).from(30000), 'vor ein paar Sekunden', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in ein paar Sekunden', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 Tagen', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'heute um 12:00 Uhr', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'heute um 12:25 Uhr', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'heute um 13:00 Uhr', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'morgen um 12:00 Uhr', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'heute um 11:00 Uhr', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'gestern um 12:00 Uhr', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[letzten] dddd [um] LT [Uhr]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('dv');
+
+test('parse', function (assert) {
+ var i,
+ tests = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+ ];
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ equalTest(tests[i], 'MMM', i);
+ equalTest(tests[i], 'MMMM', i);
+ equalTest(tests[i].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'އާދިއްތަ، ފެބްރުއަރީ 14 2010، 3:25:50 މފ'],
+ ['ddd, hA', 'އާދިއްތަ، 3މފ'],
+ ['M Mo MM MMMM MMM', '2 2 02 ފެބްރުއަރީ ފެބްރުއަރީ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 އާދިއްތަ އާދިއްތަ އާދި'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'މފ މފ'],
+ ['LTS', '15:25:50'],
+ ['L', '14/2/2010'],
+ ['LL', '14 ފެބްރުއަރީ 2010'],
+ ['LLL', '14 ފެބްރުއަރީ 2010 15:25'],
+ ['LLLL', 'އާދިއްތަ 14 ފެބްރުއަރީ 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 ފެބްރުއަރީ 2010'],
+ ['lll', '14 ފެބްރުއަރީ 2010 15:25'],
+ ['llll', 'އާދިއްތަ 14 ފެބްރުއަރީ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+ ];
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM'), expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+ ];
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd'), expected[i]);
+ }
+});
+
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ސިކުންތުކޮޅެއް', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'މިނިޓެއް', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'މިނިޓެއް', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'މިނިޓު 2', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'މިނިޓު 44', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ގަޑިއިރެއް', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ގަޑިއިރެއް', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'ގަޑިއިރު 2', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'ގަޑިއިރު 5', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'ގަޑިއިރު 21', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ދުވަހެއް', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ދުވަހެއް', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'ދުވަސް 2', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ދުވަހެއް', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'ދުވަސް 5', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'ދުވަސް 25', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'މަހެއް', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'މަހެއް', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'މަހެއް', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'މަސް 2', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'މަސް 2', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'މަސް 3', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'މަހެއް', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'މަސް 5', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'އަހަރެއް', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'އަހަރު 2', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'އަހަރެއް', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'އަހަރު 5', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ތެރޭގައި ސިކުންތުކޮޅެއް', 'prefix');
+ assert.equal(moment(0).from(30000), 'ކުރިން ސިކުންތުކޮޅެއް', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ތެރޭގައި ސިކުންތުކޮޅެއް', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'ތެރޭގައި ދުވަސް 5', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'މިއަދު 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'މިއަދު 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'މިއަދު 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'މާދަމާ 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'މިއަދު 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'އިއްޔެ 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[ފާއިތުވި] dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ފާއިތުވި] dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ފާއިތުވި] dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('el');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('parse meridiem', function (assert) {
+ var i,
+ b = moment(),
+ meridiemTests = [
+ // h a patterns, expected hours, isValid
+ ['10 πμ', 10, true],
+ ['10 μμ', 22, true],
+ ['10 π.μ.', 10, true],
+ ['10 μ.μ.', 22, true],
+ ['10 π', 10, true],
+ ['10 μ', 22, true],
+ ['10 ΠΜ', 10, true],
+ ['10 ΜΜ', 22, true],
+ ['10 Π.Μ.', 10, true],
+ ['10 Μ.Μ.', 22, true],
+ ['10 Π', 10, true],
+ ['10 Μ', 22, true],
+ ['10 am', 10, false],
+ ['10 pm', 10, false]
+ ],
+ parsed;
+
+ // test that a formatted moment including meridiem string can be parsed back to the same moment
+ assert.ok(b.isSame(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'el', true), 'seconds'), b.format('h:mm:ss a') + ' should be equal to ' + moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'el', true).format('h:mm:ss a'));
+
+ // test that a formatted moment having a meridiem string can be parsed with strict flag
+ assert.ok(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'el', true).isValid(), b.format('h:mm:ss a') + ' should be parsed as valid');
+
+ for (i = 0; i < meridiemTests.length; i++) {
+ parsed = moment(meridiemTests[i][0], 'h a', 'el', true);
+ assert.equal(parsed.isValid(), meridiemTests[i][2], 'validity for ' + meridiemTests[i][0]);
+ if (parsed.isValid()) {
+ assert.equal(parsed.hours(), meridiemTests[i][1], 'hours for ' + meridiemTests[i][0]);
+ }
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Κυριακή, Φεβρουάριος 14η 2010, 3:25:50 μμ'],
+ ['dddd, D MMMM YYYY, h:mm:ss a', 'Κυριακή, 14 Φεβρουαρίου 2010, 3:25:50 μμ'],
+ ['ddd, hA', 'Κυρ, 3ΜΜ'],
+ ['dddd, MMMM YYYY', 'Κυριακή, Φεβρουάριος 2010'],
+ ['M Mo MM MMMM MMM', '2 2η 02 Φεβρουάριος Φεβ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14η 14'],
+ ['d do dddd ddd dd', '0 0η Κυριακή Κυρ Κυ'],
+ ['DDD DDDo DDDD', '45 45η 045'],
+ ['w wo ww', '6 6η 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'μμ ΜΜ'],
+ ['[the] DDDo [day of the year]', 'the 45η day of the year'],
+ ['LTS', '3:25:50 ΜΜ'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Φεβρουαρίου 2010'],
+ ['LLL', '14 Φεβρουαρίου 2010 3:25 ΜΜ'],
+ ['LLLL', 'Κυριακή, 14 Φεβρουαρίου 2010 3:25 ΜΜ'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Φεβ 2010'],
+ ['lll', '14 Φεβ 2010 3:25 ΜΜ'],
+ ['llll', 'Κυρ, 14 Φεβ 2010 3:25 ΜΜ']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1η', '1η');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2η', '2η');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3η', '3η');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4η', '4η');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5η', '5η');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6η', '6η');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7η', '7η');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8η', '8η');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9η', '9η');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10η', '10η');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11η', '11η');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12η', '12η');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13η', '13η');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14η', '14η');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15η', '15η');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16η', '16η');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17η', '17η');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18η', '18η');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19η', '19η');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20η', '20η');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21η', '21η');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22η', '22η');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23η', '23η');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24η', '24η');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25η', '25η');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26η', '26η');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27η', '27η');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28η', '28η');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29η', '29η');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30η', '30η');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31η', '31η');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'Ιανουάριος Ιαν_Φεβρουάριος Φεβ_Μάρτιος Μαρ_Απρίλιος Απρ_Μάιος Μαϊ_Ιούνιος Ιουν_Ιούλιος Ιουλ_Αύγουστος Αυγ_Σεπτέμβριος Σεπ_Οκτώβριος Οκτ_Νοέμβριος Νοε_Δεκέμβριος Δεκ'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'Κυριακή Κυρ Κυ_Δευτέρα Δευ Δε_Τρίτη Τρι Τρ_Τετάρτη Τετ Τε_Πέμπτη Πεμ Πε_Παρασκευή Παρ Πα_Σάββατο Σαβ Σα'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'λίγα δευτερόλεπτα', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ένα λεπτό', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ένα λεπτό', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 λεπτά', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 λεπτά', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'μία ώρα', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'μία ώρα', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ώρες', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ώρες', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ώρες', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'μία μέρα', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'μία μέρα', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 μέρες', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'μία μέρα', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 μέρες', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 μέρες', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ένας μήνας', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ένας μήνας', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ένας μήνας', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 μήνες', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 μήνες', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 μήνες', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ένας μήνας', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 μήνες', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ένας χρόνος', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 χρόνια', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ένας χρόνος', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 χρόνια', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'σε λίγα δευτερόλεπτα', 'prefix');
+ assert.equal(moment(0).from(30000), 'λίγα δευτερόλεπτα πριν', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'λίγα δευτερόλεπτα πριν', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'σε λίγα δευτερόλεπτα', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'σε 5 μέρες', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Σήμερα στις 12:00 ΜΜ', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Σήμερα στις 12:25 ΜΜ', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Σήμερα στη 1:00 ΜΜ', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Αύριο στις 12:00 ΜΜ', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Σήμερα στις 11:00 ΠΜ', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Χθες στις 12:00 ΜΜ', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [στις] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [στις] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, dayString;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ dayString = m.day() === 6 ? '[το προηγούμενο Σάββατο]' : '[την προηγούμενη] dddd';
+ assert.equal(m.calendar(), m.format(dayString + ' [' + (m.hours() % 12 === 1 ? 'στη' : 'στις') + '] LT'), 'Today - ' + i + ' days current time');
+ m.hours(1).minutes(30).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(dayString + ' [στη] LT'), 'Today - ' + i + ' days one o clock');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(dayString + ' [στις] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(dayString + ' [στις] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52η', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1η', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1η', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2η', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2η', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('en-au');
+
+test('parse', function (assert) {
+ var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Sunday Sun Su'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '6 6th 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LTS', '3:25:50 PM'],
+ ['L', '14/02/2010'],
+ ['LL', '14 February 2010'],
+ ['LLL', '14 February 2010 3:25 PM'],
+ ['LLLL', 'Sunday, 14 February 2010 3:25 PM'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 3:25 PM'],
+ ['llll', 'Sun, 14 Feb 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix');
+ assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('en-ca');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Sunday Sun Su'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '8 8th 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['L', '2010-02-14'],
+ ['LTS', '3:25:50 PM'],
+ ['LL', 'February 14, 2010'],
+ ['LLL', 'February 14, 2010 3:25 PM'],
+ ['LLLL', 'Sunday, February 14, 2010 3:25 PM'],
+ ['l', '2010-2-14'],
+ ['ll', 'Feb 14, 2010'],
+ ['lll', 'Feb 14, 2010 3:25 PM'],
+ ['llll', 'Sun, Feb 14, 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix');
+ assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('en-gb');
+
+test('parse', function (assert) {
+ var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Sunday Sun Su'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '6 6th 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 February 2010'],
+ ['LLL', '14 February 2010 15:25'],
+ ['LLLL', 'Sunday, 14 February 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 15:25'],
+ ['llll', 'Sun, 14 Feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix');
+ assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('en-ie');
+
+test('parse', function (assert) {
+ var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Sunday Sun Su'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '6 6th 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14-02-2010'],
+ ['LL', '14 February 2010'],
+ ['LLL', '14 February 2010 15:25'],
+ ['LLLL', 'Sunday 14 February 2010 15:25'],
+ ['l', '14-2-2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 15:25'],
+ ['llll', 'Sun 14 Feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix');
+ assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('en-nz');
+
+test('parse', function (assert) {
+ var tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Sunday Sun Su'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '6 6th 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LTS', '3:25:50 PM'],
+ ['L', '14/02/2010'],
+ ['LL', '14 February 2010'],
+ ['LLL', '14 February 2010 3:25 PM'],
+ ['LLLL', 'Sunday, 14 February 2010 3:25 PM'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 3:25 PM'],
+ ['llll', 'Sun, 14 Feb 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix');
+ assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('en');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Sunday, February 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 February Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Sunday Sun Su'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '8 8th 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LTS', '3:25:50 PM'],
+ ['L', '02/14/2010'],
+ ['LL', 'February 14, 2010'],
+ ['LLL', 'February 14, 2010 3:25 PM'],
+ ['LLLL', 'Sunday, February 14, 2010 3:25 PM'],
+ ['l', '2/14/2010'],
+ ['ll', 'Feb 14, 2010'],
+ ['lll', 'Feb 14, 2010 3:25 PM'],
+ ['llll', 'Sun, Feb 14, 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'January Jan_February Feb_March Mar_April Apr_May May_June Jun_July Jul_August Aug_September Sep_October Oct_November Nov_December Dec'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'Sunday Sun Su_Monday Mon Mo_Tuesday Tue Tu_Wednesday Wed We_Thursday Thu Th_Friday Fri Fr_Saturday Sat Sa'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'a month', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 months', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 months', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 months', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 years', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 years', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in a few seconds', 'prefix');
+ assert.equal(moment(0).from(30000), 'a few seconds ago', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'a few seconds ago', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in a few seconds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'in 5 days', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at 12:00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at 12:25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at 1:00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at 12:00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at 11:00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at 12:00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [at] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Last] dddd [at] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1st', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1st', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2nd', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2nd', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3rd', 'Jan 15 2012 should be week 3');
+});
+
+test('weekdays strict parsing', function (assert) {
+ var m = moment('2015-01-01T12', moment.ISO_8601, true),
+ enLocale = moment.localeData('en');
+
+ for (var i = 0; i < 7; ++i) {
+ assert.equal(moment(enLocale.weekdays(m.day(i), ''), 'dddd', true).isValid(), true, 'parse weekday ' + i);
+ assert.equal(moment(enLocale.weekdaysShort(m.day(i), ''), 'ddd', true).isValid(), true, 'parse short weekday ' + i);
+ assert.equal(moment(enLocale.weekdaysMin(m.day(i), ''), 'dd', true).isValid(), true, 'parse min weekday ' + i);
+
+ // negative tests
+ assert.equal(moment(enLocale.weekdaysMin(m.day(i), ''), 'ddd', true).isValid(), false, 'parse short weekday ' + i);
+ assert.equal(moment(enLocale.weekdaysShort(m.day(i), ''), 'dd', true).isValid(), false, 'parse min weekday ' + i);
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('eo');
+
+test('parse', function (assert) {
+ var tests = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Dimanĉo, februaro 14a 2010, 3:25:50 p.t.m.'],
+ ['ddd, hA', 'Dim, 3P.T.M.'],
+ ['M Mo MM MMMM MMM', '2 2a 02 februaro feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14a 14'],
+ ['d do dddd ddd dd', '0 0a Dimanĉo Dim Di'],
+ ['DDD DDDo DDDD', '45 45a 045'],
+ ['w wo ww', '7 7a 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'p.t.m. P.T.M.'],
+ ['[la] DDDo [tago] [de] [la] [jaro]', 'la 45a tago de la jaro'],
+ ['LTS', '15:25:50'],
+ ['L', '2010-02-14'],
+ ['LL', '14-an de februaro, 2010'],
+ ['LLL', '14-an de februaro, 2010 15:25'],
+ ['LLLL', 'Dimanĉo, la 14-an de februaro, 2010 15:25'],
+ ['l', '2010-2-14'],
+ ['ll', '14-an de feb, 2010'],
+ ['lll', '14-an de feb, 2010 15:25'],
+ ['llll', 'Dim, la 14-an de feb, 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3a', '3a');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4a', '4a');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5a', '5a');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6a', '6a');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7a', '7a');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8a', '8a');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9a', '9a');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10a', '10a');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11a', '11a');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12a', '12a');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13a', '13a');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14a', '14a');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15a', '15a');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16a', '16a');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17a', '17a');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18a', '18a');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19a', '19a');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20a', '20a');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23a', '23a');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24a', '24a');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25a', '25a');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26a', '26a');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27a', '27a');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28a', '28a');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29a', '29a');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30a', '30a');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a');
+});
+
+test('format month', function (assert) {
+ var expected = 'januaro jan_februaro feb_marto mar_aprilo apr_majo maj_junio jun_julio jul_aŭgusto aŭg_septembro sep_oktobro okt_novembro nov_decembro dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Dimanĉo Dim Di_Lundo Lun Lu_Mardo Mard Ma_Merkredo Merk Me_Ĵaŭdo Ĵaŭ Ĵa_Vendredo Ven Ve_Sabato Sab Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'sekundoj', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutoj', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutoj', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'horo', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'horo', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horoj', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horoj', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horoj', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'tago', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'tago', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 tagoj', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'tago', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 tagoj', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 tagoj', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'monato', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'monato', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'monato', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 monatoj', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 monatoj', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 monatoj', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'monato', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 monatoj', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'jaro', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaroj', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'jaro', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaroj', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'je sekundoj', 'je prefix');
+ assert.equal(moment(0).from(30000), 'antaŭ sekundoj', 'antaŭ prefix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'antaŭ sekundoj', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'je sekundoj', 'je sekundoj');
+ assert.equal(moment().add({d: 5}).fromNow(), 'je 5 tagoj', 'je 5 tagoj');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hodiaŭ je 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hodiaŭ je 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hodiaŭ je 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Morgaŭ je 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hodiaŭ je 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hieraŭ je 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [je] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [je] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [je] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[pasinta] dddd [je] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1a', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1a', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2a', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2a', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3a', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('es-do');
+
+test('parse', function (assert) {
+ var tests = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febrero 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dom., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 febrero feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd dd', '0 0º domingo dom. do'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '6 6º 06'],
+ ['YYYY-MMM-DD', '2010-feb-14'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '3:25:50 PM'],
+ ['L', '14/02/2010'],
+ ['LL', '14 de febrero de 2010'],
+ ['LLL', '14 de febrero de 2010 3:25 PM'],
+ ['LLLL', 'domingo, 14 de febrero de 2010 3:25 PM'],
+ ['l', '14/2/2010'],
+ ['ll', '14 de feb. de 2010'],
+ ['lll', '14 de feb. de 2010 3:25 PM'],
+ ['llll', 'dom., 14 de feb. de 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'domingo dom. do_lunes lun. lu_martes mar. ma_miércoles mié. mi_jueves jue. ju_viernes vie. vi_sábado sáb. sá'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'unos segundos', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'una hora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'una hora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un día', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un día', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 días', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un día', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 días', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 días', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un año', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 años', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un año', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 años', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'en unos segundos', 'prefix');
+ assert.equal(moment(0).from(30000), 'hace unos segundos', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'hace unos segundos', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'en unos segundos', 'en unos segundos');
+ assert.equal(moment().add({d: 5}).fromNow(), 'en 5 días', 'en 5 días');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'hoy a las 12:00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'hoy a las 12:25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'hoy a las 1:00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'mañana a las 12:00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'mañana a las 11:00 AM', 'tomorrow minus 1 hour');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'hoy a las 11:00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ayer a las 12:00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('es');
+
+test('parse', function (assert) {
+ var tests = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febrero 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dom., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 febrero feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd dd', '0 0º domingo dom. do'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '6 6º 06'],
+ ['YYYY-MMM-DD', '2010-feb-14'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 de febrero de 2010'],
+ ['LLL', '14 de febrero de 2010 15:25'],
+ ['LLLL', 'domingo, 14 de febrero de 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 de feb. de 2010'],
+ ['lll', '14 de feb. de 2010 15:25'],
+ ['llll', 'dom., 14 de feb. de 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'enero ene._febrero feb._marzo mar._abril abr._mayo may._junio jun._julio jul._agosto ago._septiembre sep._octubre oct._noviembre nov._diciembre dic.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'domingo dom. do_lunes lun. lu_martes mar. ma_miércoles mié. mi_jueves jue. ju_viernes vie. vi_sábado sáb. sá'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'unos segundos', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'una hora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'una hora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un día', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un día', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 días', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un día', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 días', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 días', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un año', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 años', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un año', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 años', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'en unos segundos', 'prefix');
+ assert.equal(moment(0).from(30000), 'hace unos segundos', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'hace unos segundos', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'en unos segundos', 'en unos segundos');
+ assert.equal(moment().add({d: 5}).fromNow(), 'en 5 días', 'en 5 días');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'hoy a las 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'hoy a las 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'hoy a las 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'mañana a las 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'mañana a las 11:00', 'tomorrow minus 1 hour');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'hoy a las 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ayer a las 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[el] dddd [pasado a la' + ((m.hours() !== 1) ? 's' : '') + '] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('et');
+
+test('parse', function (assert) {
+ var tests = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' peaks olema kuu ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, H:mm:ss', 'pühapäev, 14. veebruar 2010, 15:25:50'],
+ ['ddd, h', 'P, 3'],
+ ['M Mo MM MMMM MMM', '2 2. 02 veebruar veebr'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. pühapäev P P'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[aasta] DDDo [päev]', 'aasta 45. päev'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. veebruar 2010'],
+ ['LLL', '14. veebruar 2010 15:25'],
+ ['LLLL', 'pühapäev, 14. veebruar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. veebr 2010'],
+ ['lll', '14. veebr 2010 15:25'],
+ ['llll', 'P, 14. veebr 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'jaanuar jaan_veebruar veebr_märts märts_aprill apr_mai mai_juuni juuni_juuli juuli_august aug_september sept_oktoober okt_november nov_detsember dets'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'pühapäev P P_esmaspäev E E_teisipäev T T_kolmapäev K K_neljapäev N N_reede R R_laupäev L L'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'paar sekundit', '44 seconds = paar sekundit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'üks minut', '45 seconds = üks minut');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'üks minut', '89 seconds = üks minut');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutit', '90 seconds = 2 minutit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutit', '44 minutes = 44 minutit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'üks tund', '45 minutes = tund aega');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'üks tund', '89 minutes = üks tund');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 tundi', '90 minutes = 2 tundi');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 tundi', '5 hours = 5 tundi');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tundi', '21 hours = 21 tundi');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'üks päev', '22 hours = üks päev');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'üks päev', '35 hours = üks päev');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 päeva', '36 hours = 2 päeva');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'üks päev', '1 day = üks päev');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 päeva', '5 days = 5 päeva');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 päeva', '25 days = 25 päeva');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'üks kuu', '26 days = üks kuu');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'üks kuu', '30 days = üks kuu');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'üks kuu', '43 days = üks kuu');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 kuud', '46 days = 2 kuud');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 kuud', '75 days = 2 kuud');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 kuud', '76 days = 3 kuud');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'üks kuu', '1 month = üks kuu');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 kuud', '5 months = 5 kuud');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'üks aasta', '345 days = üks aasta');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 aastat', '548 days = 2 aastat');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'üks aasta', '1 year = üks aasta');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 aastat', '5 years = 5 aastat');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'mõne sekundi pärast', 'prefix');
+ assert.equal(moment(0).from(30000), 'mõni sekund tagasi', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'mõni sekund tagasi', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'mõne sekundi pärast', 'in a few seconds');
+ assert.equal(moment().subtract({s: 30}).fromNow(), 'mõni sekund tagasi', 'a few seconds ago');
+
+ assert.equal(moment().add({m: 1}).fromNow(), 'ühe minuti pärast', 'in a minute');
+ assert.equal(moment().subtract({m: 1}).fromNow(), 'üks minut tagasi', 'a minute ago');
+
+ assert.equal(moment().add({m: 5}).fromNow(), '5 minuti pärast', 'in 5 minutes');
+ assert.equal(moment().subtract({m: 5}).fromNow(), '5 minutit tagasi', '5 minutes ago');
+
+ assert.equal(moment().add({d: 1}).fromNow(), 'ühe päeva pärast', 'in one day');
+ assert.equal(moment().subtract({d: 1}).fromNow(), 'üks päev tagasi', 'one day ago');
+
+ assert.equal(moment().add({d: 5}).fromNow(), '5 päeva pärast', 'in 5 days');
+ assert.equal(moment().subtract({d: 5}).fromNow(), '5 päeva tagasi', '5 days ago');
+
+ assert.equal(moment().add({M: 1}).fromNow(), 'kuu aja pärast', 'in a month');
+ assert.equal(moment().subtract({M: 1}).fromNow(), 'kuu aega tagasi', 'a month ago');
+
+ assert.equal(moment().add({M: 5}).fromNow(), '5 kuu pärast', 'in 5 months');
+ assert.equal(moment().subtract({M: 5}).fromNow(), '5 kuud tagasi', '5 months ago');
+
+ assert.equal(moment().add({y: 1}).fromNow(), 'ühe aasta pärast', 'in a year');
+ assert.equal(moment().subtract({y: 1}).fromNow(), 'aasta tagasi', 'a year ago');
+
+ assert.equal(moment().add({y: 5}).fromNow(), '5 aasta pärast', 'in 5 years');
+ assert.equal(moment().subtract({y: 5}).fromNow(), '5 aastat tagasi', '5 years ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Täna, 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Täna, 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Täna, 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Homme, 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Täna, 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Eile, 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[Järgmine] dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Järgmine] dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Järgmine] dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Eelmine] dddd LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Eelmine] dddd LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Eelmine] dddd LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 nädal tagasi');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '1 nädala pärast');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 nädalat tagasi');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '2 nädala pärast');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('eu');
+
+test('parse', function (assert) {
+ var tests = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'igandea, otsaila 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ig., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 otsaila ots.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. igandea ig. ig'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '2010-02-14'],
+ ['LL', '2010ko otsailaren 14a'],
+ ['LLL', '2010ko otsailaren 14a 15:25'],
+ ['LLLL', 'igandea, 2010ko otsailaren 14a 15:25'],
+ ['l', '2010-2-14'],
+ ['ll', '2010ko ots. 14a'],
+ ['lll', '2010ko ots. 14a 15:25'],
+ ['llll', 'ig., 2010ko ots. 14a 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'urtarrila urt._otsaila ots._martxoa mar._apirila api._maiatza mai._ekaina eka._uztaila uzt._abuztua abu._iraila ira._urria urr._azaroa aza._abendua abe.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'igandea ig. ig_astelehena al. al_asteartea ar. ar_asteazkena az. az_osteguna og. og_ostirala ol. ol_larunbata lr. lr'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'segundo batzuk', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutu bat', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutu bat', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutu', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutu', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ordu bat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ordu bat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ordu', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ordu', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ordu', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'egun bat', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'egun bat', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 egun', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'egun bat', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 egun', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 egun', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'hilabete bat', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'hilabete bat', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'hilabete bat', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 hilabete', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 hilabete', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 hilabete', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'hilabete bat', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 hilabete', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'urte bat', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 urte', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'urte bat', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 urte', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'segundo batzuk barru', 'prefix');
+ assert.equal(moment(0).from(30000), 'duela segundo batzuk', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'duela segundo batzuk', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'segundo batzuk barru', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 egun barru', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'gaur 12:00etan', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'gaur 12:25etan', 'now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'gaur 13:00etan', 'now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'bihar 12:00etan', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'gaur 11:00etan', 'now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'atzo 12:00etan', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd LT[etan]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd LT[etan]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd LT[etan]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[aurreko] dddd LT[etan]'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fa');
+
+test('parse', function (assert) {
+ var tests = 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1) + ' instead is month ' + moment(input, mmm).month());
+ }
+ for (i = 0; i < 12; i++) {
+ equalTest(tests[i], 'MMM', i);
+ equalTest(tests[i], 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'یک\u200cشنبه، فوریه ۱۴م ۲۰۱۰، ۳:۲۵:۵۰ بعد از ظهر'],
+ ['ddd, hA', 'یک\u200cشنبه، ۳بعد از ظهر'],
+ ['M Mo MM MMMM MMM', '۲ ۲م ۰۲ فوریه فوریه'],
+ ['YYYY YY', '۲۰۱۰ ۱۰'],
+ ['D Do DD', '۱۴ ۱۴م ۱۴'],
+ ['d do dddd ddd dd', '۰ ۰م یک\u200cشنبه یک\u200cشنبه ی'],
+ ['DDD DDDo DDDD', '۴۵ ۴۵م ۰۴۵'],
+ ['w wo ww', '۸ ۸م ۰۸'],
+ ['h hh', '۳ ۰۳'],
+ ['H HH', '۱۵ ۱۵'],
+ ['m mm', '۲۵ ۲۵'],
+ ['s ss', '۵۰ ۵۰'],
+ ['a A', 'بعد از ظهر بعد از ظهر'],
+ ['DDDo [روز سال]', '۴۵م روز سال'],
+ ['LTS', '۱۵:۲۵:۵۰'],
+ ['L', '۱۴/۰۲/۲۰۱۰'],
+ ['LL', '۱۴ فوریه ۲۰۱۰'],
+ ['LLL', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'],
+ ['LLLL', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'],
+ ['l', '۱۴/۲/۲۰۱۰'],
+ ['ll', '۱۴ فوریه ۲۰۱۰'],
+ ['lll', '۱۴ فوریه ۲۰۱۰ ۱۵:۲۵'],
+ ['llll', 'یک\u200cشنبه، ۱۴ فوریه ۲۰۱۰ ۱۵:۲۵']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '۱م', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '۲م', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '۳م', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '۴م', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '۵م', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '۶م', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '۷م', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '۸م', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '۹م', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '۱۰م', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '۱۱م', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '۱۲م', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '۱۳م', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '۱۴م', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '۱۵م', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '۱۶م', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '۱۷م', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '۱۸م', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '۱۹م', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '۲۰م', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '۲۱م', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '۲۲م', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '۲۳م', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '۲۴م', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '۲۵م', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '۲۶م', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '۲۷م', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '۲۸م', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '۲۹م', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '۳۰م', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '۳۱م', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'ژانویه ژانویه_فوریه فوریه_مارس مارس_آوریل آوریل_مه مه_ژوئن ژوئن_ژوئیه ژوئیه_اوت اوت_سپتامبر سپتامبر_اکتبر اکتبر_نوامبر نوامبر_دسامبر دسامبر'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'یک\u200cشنبه یک\u200cشنبه ی_دوشنبه دوشنبه د_سه\u200cشنبه سه\u200cشنبه س_چهارشنبه چهارشنبه چ_پنج\u200cشنبه پنج\u200cشنبه پ_جمعه جمعه ج_شنبه شنبه ش'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'چندین ثانیه', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'یک دقیقه', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'یک دقیقه', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '۲ دقیقه', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '۴۴ دقیقه', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'یک ساعت', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'یک ساعت', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '۲ ساعت', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '۵ ساعت', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '۲۱ ساعت', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'یک روز', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'یک روز', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '۲ روز', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'یک روز', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '۵ روز', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '۲۵ روز', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'یک ماه', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'یک ماه', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'یک ماه', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '۲ ماه', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '۲ ماه', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '۳ ماه', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'یک ماه', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '۵ ماه', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'یک سال', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '۲ سال', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'یک سال', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '۵ سال', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'در چندین ثانیه', 'prefix');
+ assert.equal(moment(0).from(30000), 'چندین ثانیه پیش', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'چندین ثانیه پیش', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'در چندین ثانیه', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'در ۵ روز', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'امروز ساعت ۱۲:۰۰', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'امروز ساعت ۱۲:۲۵', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'امروز ساعت ۱۳:۰۰', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'فردا ساعت ۱۲:۰۰', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'امروز ساعت ۱۱:۰۰', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'دیروز ساعت ۱۲:۰۰', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [ساعت] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [ساعت] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [ساعت] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [پیش ساعت] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '۱ ۰۱ ۱م', 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '۱ ۰۱ ۱م', 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '۲ ۰۲ ۲م', 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '۲ ۰۲ ۲م', 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '۳ ۰۳ ۳م', 'Jan 14 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fi');
+
+test('parse', function (assert) {
+ var tests = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'sunnuntai, helmikuu 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'su, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 helmikuu helmi'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. sunnuntai su su'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[vuoden] DDDo [päivä]', 'vuoden 45. päivä'],
+ ['LTS', '15.25.50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. helmikuuta 2010'],
+ ['LLL', '14. helmikuuta 2010, klo 15.25'],
+ ['LLLL', 'sunnuntai, 14. helmikuuta 2010, klo 15.25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. helmi 2010'],
+ ['lll', '14. helmi 2010, klo 15.25'],
+ ['llll', 'su, 14. helmi 2010, klo 15.25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'tammikuu tammi_helmikuu helmi_maaliskuu maalis_huhtikuu huhti_toukokuu touko_kesäkuu kesä_heinäkuu heinä_elokuu elo_syyskuu syys_lokakuu loka_marraskuu marras_joulukuu joulu'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'sunnuntai su su_maanantai ma ma_tiistai ti ti_keskiviikko ke ke_torstai to to_perjantai pe pe_lauantai la la'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'muutama sekunti', '44 seconds = few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuutti', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuutti', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'kaksi minuuttia', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuuttia', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'tunti', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'tunti', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'kaksi tuntia', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'viisi tuntia', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tuntia', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'päivä', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'päivä', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'kaksi päivää', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'päivä', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'viisi päivää', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 päivää', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'kuukausi', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'kuukausi', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'kuukausi', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'kaksi kuukautta', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'kaksi kuukautta', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'kolme kuukautta', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'kuukausi', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'viisi kuukautta', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'vuosi', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'kaksi vuotta', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'vuosi', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'viisi vuotta', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'muutaman sekunnin päästä', 'prefix');
+ assert.equal(moment(0).from(30000), 'muutama sekunti sitten', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'muutama sekunti sitten', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'muutaman sekunnin päästä', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'viiden päivän päästä', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'tänään klo 12.00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'tänään klo 12.25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'tänään klo 13.00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'huomenna klo 12.00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'tänään klo 11.00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'eilen klo 12.00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [klo] LT'), 'today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [klo] LT'), 'today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [klo] LT'), 'today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), 'today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), 'today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[viime] dddd[na] [klo] LT'), 'today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'yksi viikko sitten');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'yhden viikon päästä');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'kaksi viikkoa sitten');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'kaden viikon päästä');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fo');
+
+test('parse', function (assert) {
+ var tests = 'januar jan_februar feb_mars mar_apríl apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd [tann] Do MMMM YYYY, h:mm:ss a', 'sunnudagur tann 14. februar 2010, 3:25:50 pm'],
+ ['ddd hA', 'sun 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. sunnudagur sun su'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[tann] DDDo [dagin á árinum]', 'tann 45. dagin á árinum'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 februar 2010'],
+ ['LLL', '14 februar 2010 15:25'],
+ ['LLLL', 'sunnudagur 14. februar, 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 feb 2010'],
+ ['lll', '14 feb 2010 15:25'],
+ ['llll', 'sun 14. feb, 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan_februar feb_mars mar_apríl apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'sunnudagur sun su_mánadagur mán má_týsdagur týs tý_mikudagur mik mi_hósdagur hós hó_fríggjadagur frí fr_leygardagur ley le'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'fá sekund', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ein minutt', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ein minutt', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuttir', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuttir', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ein tími', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ein tími', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 tímar', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 tímar', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tímar', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein dagur', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein dagur', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein dagur', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein mánaði', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein mánaði', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein mánaði', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mánaðir', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mánaðir', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mánaðir', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein mánaði', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mánaðir', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eitt ár', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ár', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eitt ár', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ár', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'um fá sekund', 'prefix');
+ assert.equal(moment(0).from(30000), 'fá sekund síðani', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'fá sekund síðani', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'um fá sekund', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'um 5 dagar', 'in 5 days');
+});
+
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Í dag kl. 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Í dag kl. 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Í dag kl. 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Í morgin kl. 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Í dag kl. 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Í gjár kl. 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[síðstu] dddd [kl] LT'), 'today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[síðstu] dddd [kl] LT'), 'today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[síðstu] dddd [kl] LT'), 'today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'yksi viikko sitten');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'yhden viikon päästä');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'kaksi viikkoa sitten');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'kaden viikon päästä');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fr-ca');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14e 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dim., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2e 02 février févr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14e 14'],
+ ['d do dddd ddd dd', '0 0e dimanche dim. Di'],
+ ['DDD DDDo DDDD', '45 45e 045'],
+ ['w wo ww', '8 8e 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45e day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '2010-02-14'],
+ ['LL', '14 février 2010'],
+ ['LLL', '14 février 2010 15:25'],
+ ['LLLL', 'dimanche 14 février 2010 15:25'],
+ ['l', '2010-2-14'],
+ ['ll', '14 févr. 2010'],
+ ['lll', '14 févr. 2010 15:25'],
+ ['llll', 'dim. 14 févr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2e', '2e');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21e', '21e');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22e', '22e');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31e', '31e');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'quelques secondes', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'une minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'une minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'une heure', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'une heure', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 heures', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 heures', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 heures', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un jour', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un jour', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 jours', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un jour', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 jours', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 jours', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mois', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mois', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mois', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mois', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mois', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mois', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mois', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mois', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ans', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ans', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dans quelques secondes', 'prefix');
+ assert.equal(moment(0).from(30000), 'il y a quelques secondes', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dans quelques secondes', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dans 5 jours', 'in 5 days');
+});
+
+test('same day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Aujourd\'hui à 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Aujourd\'hui à 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Aujourd\'hui à 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Demain à 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aujourd\'hui à 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hier à 12:00', 'yesterday at the same time');
+});
+
+test('same next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('same last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('same all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1er', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1er', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2e', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2e', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3e', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fr-ch');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14e 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dim., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2e 02 février févr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14e 14'],
+ ['d do dddd ddd dd', '0 0e dimanche dim. Di'],
+ ['DDD DDDo DDDD', '45 45e 045'],
+ ['w wo ww', '6 6e 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45e day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 février 2010'],
+ ['LLL', '14 février 2010 15:25'],
+ ['LLLL', 'dimanche 14 février 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 févr. 2010'],
+ ['lll', '14 févr. 2010 15:25'],
+ ['llll', 'dim. 14 févr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2e', '2e');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21e', '21e');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22e', '22e');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31e', '31e');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'quelques secondes', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'une minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'une minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'une heure', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'une heure', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 heures', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 heures', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 heures', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un jour', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un jour', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 jours', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un jour', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 jours', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 jours', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mois', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mois', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mois', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mois', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mois', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mois', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mois', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mois', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ans', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ans', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dans quelques secondes', 'prefix');
+ assert.equal(moment(0).from(30000), 'il y a quelques secondes', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dans quelques secondes', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dans 5 jours', 'in 5 days');
+});
+
+test('same day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Aujourd\'hui à 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Aujourd\'hui à 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Aujourd\'hui à 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Demain à 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aujourd\'hui à 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hier à 12:00', 'yesterday at the same time');
+});
+
+test('same next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('same last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('same all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52e', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1er', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1er', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2e', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2e', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fr');
+
+test('parse', function (assert) {
+ var tests = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'dimanche, février 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dim., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 février févr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 dimanche dim. Di'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '6 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 février 2010'],
+ ['LLL', '14 février 2010 15:25'],
+ ['LLLL', 'dimanche 14 février 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 févr. 2010'],
+ ['lll', '14 févr. 2010 15:25'],
+ ['llll', 'dim. 14 févr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1er', '1er');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'janvier janv._février févr._mars mars_avril avr._mai mai_juin juin_juillet juil._août août_septembre sept._octobre oct._novembre nov._décembre déc.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'dimanche dim. Di_lundi lun. Lu_mardi mar. Ma_mercredi mer. Me_jeudi jeu. Je_vendredi ven. Ve_samedi sam. Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'quelques secondes', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'une minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'une minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'une heure', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'une heure', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 heures', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 heures', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 heures', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un jour', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un jour', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 jours', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un jour', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 jours', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 jours', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mois', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mois', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mois', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mois', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mois', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mois', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mois', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mois', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ans', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ans', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dans quelques secondes', 'prefix');
+ assert.equal(moment(0).from(30000), 'il y a quelques secondes', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dans quelques secondes', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dans 5 jours', 'in 5 days');
+});
+
+test('same day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Aujourd\'hui à 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Aujourd\'hui à 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Aujourd\'hui à 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Demain à 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Aujourd\'hui à 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hier à 12:00', 'yesterday at the same time');
+});
+
+test('same next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('same last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [dernier à] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('same all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1er', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1er', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('fy');
+
+test('parse', function (assert) {
+ var tests = 'jannewaris jan._febrewaris feb._maart mrt._april apr._maaie mai._juny jun._july jul._augustus aug._septimber sep._oktober okt._novimber nov._desimber des.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, HH:mm:ss', 'snein, febrewaris 14de 2010, 15:25:50'],
+ ['ddd, HH', 'si., 15'],
+ ['M Mo MM MMMM MMM', '2 2de 02 febrewaris feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14de 14'],
+ ['d do dddd ddd dd', '0 0de snein si. Si'],
+ ['DDD DDDo DDDD', '45 45ste 045'],
+ ['w wo ww', '6 6de 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45ste day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14-02-2010'],
+ ['LL', '14 febrewaris 2010'],
+ ['LLL', '14 febrewaris 2010 15:25'],
+ ['LLLL', 'snein 14 febrewaris 2010 15:25'],
+ ['l', '14-2-2010'],
+ ['ll', '14 feb. 2010'],
+ ['lll', '14 feb. 2010 15:25'],
+ ['llll', 'si. 14 feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste');
+});
+
+test('format month', function (assert) {
+ var expected = 'jannewaris jan._febrewaris feb._maart mrt._april apr._maaie mai_juny jun._july jul._augustus aug._septimber sep._oktober okt._novimber nov._desimber des.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'snein si. Si_moandei mo. Mo_tiisdei ti. Ti_woansdei wo. Wo_tongersdei to. To_freed fr. Fr_sneon so. So'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'in pear sekonden', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ien minút', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ien minút', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuten', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuten', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ien oere', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ien oere', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 oeren', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 oeren', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 oeren', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ien dei', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ien dei', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagen', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ien dei', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagen', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagen', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ien moanne', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ien moanne', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ien moanne', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 moannen', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 moannen', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 moannen', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ien moanne', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 moannen', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ien jier', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jierren', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ien jier', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jierren', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'oer in pear sekonden', 'prefix');
+ assert.equal(moment(0).from(30000), 'in pear sekonden lyn', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'in pear sekonden lyn', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'oer in pear sekonden', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'oer 5 dagen', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'hjoed om 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'hjoed om 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'hjoed om 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'moarn om 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'hjoed om 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'juster om 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[ôfrûne] dddd [om] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ôfrûne] dddd [om] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ôfrûne] dddd [om] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('month abbreviation', function (assert) {
+ assert.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot');
+ assert.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('gd');
+
+var months = [
+ 'Am Faoilleach,Faoi',
+ 'An Gearran,Gear',
+ 'Am Màrt,Màrt',
+ 'An Giblean,Gibl',
+ 'An Cèitean,Cèit',
+ 'An t-Ògmhios,Ògmh',
+ 'An t-Iuchar,Iuch',
+ 'An Lùnastal,Lùn',
+ 'An t-Sultain,Sult',
+ 'An Dàmhair,Dàmh',
+ 'An t-Samhain,Samh',
+ 'An Dùbhlachd,Dùbh'
+];
+
+test('parse', function (assert) {
+ function equalTest(monthName, monthFormat, monthNum) {
+ assert.equal(moment(monthName, monthFormat).month(), monthNum, monthName + ' should be month ' + (monthNum + 1));
+ }
+
+ for (var i = 0; i < 12; i++) {
+ var testMonth = months[i].split(',');
+ equalTest(testMonth[0], 'MMM', i);
+ equalTest(testMonth[1], 'MMM', i);
+ equalTest(testMonth[0], 'MMMM', i);
+ equalTest(testMonth[1], 'MMMM', i);
+ equalTest(testMonth[0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(testMonth[1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(testMonth[0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(testMonth[1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Didòmhnaich, An Gearran 14mh 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Did, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2na 02 An Gearran Gear'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14mh 14'],
+ ['d do dddd ddd dd', '0 0mh Didòmhnaich Did Dò'],
+ ['DDD DDDo DDDD', '45 45mh 045'],
+ ['w wo ww', '6 6mh 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[an] DDDo [latha den bhliadhna]', 'an 45mh latha den bhliadhna'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 An Gearran 2010'],
+ ['LLL', '14 An Gearran 2010 15:25'],
+ ['LLLL', 'Didòmhnaich, 14 An Gearran 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Gear 2010'],
+ ['lll', '14 Gear 2010 15:25'],
+ ['llll', 'Did, 14 Gear 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1d', '1d');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2na', '2na');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3mh', '3mh');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4mh', '4mh');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5mh', '5mh');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6mh', '6mh');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7mh', '7mh');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8mh', '8mh');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9mh', '9mh');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10mh', '10mh');
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11mh', '11mh');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12na', '12na');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13mh', '13mh');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14mh', '14mh');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15mh', '15mh');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16mh', '16mh');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17mh', '17mh');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18mh', '18mh');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19mh', '19mh');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20mh', '20mh');
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21mh', '21mh');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22na', '22na');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23mh', '23mh');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24mh', '24mh');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25mh', '25mh');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26mh', '26mh');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27mh', '27mh');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28mh', '28mh');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29mh', '29mh');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30mh', '30mh');
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31mh', '31mh');
+});
+
+test('format month', function (assert) {
+ var expected = months;
+ for (var i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM,MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = ['Didòmhnaich Did Dò', 'Diluain Dil Lu', 'Dimàirt Dim Mà', 'Diciadain Dic Ci', 'Diardaoin Dia Ar', 'Dihaoine Dih Ha', 'Disathairne Dis Sa'];
+ for (var i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beagan diogan', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'mionaid', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'mionaid', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 mionaidean', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 mionaidean', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'uair', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'uair', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uairean', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 uairean', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 uairean', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'latha', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'latha', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 latha', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'latha', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 latha', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 latha', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mìos', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mìos', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mìos', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mìosan', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mìosan', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mìosan', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mìos', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mìosan', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'bliadhna', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 bliadhna', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'bliadhna', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 bliadhna', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ann an beagan diogan', 'prefix');
+ assert.equal(moment(0).from(30000), 'bho chionn beagan diogan', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'bho chionn beagan diogan', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ann an beagan diogan', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'ann an 5 latha', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'An-diugh aig 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'An-diugh aig 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'An-diugh aig 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'A-màireach aig 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'An-diugh aig 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'An-dè aig 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [aig] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [aig] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [aig] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [seo chaidh] [aig] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [seo chaidh] [aig] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [seo chaidh] [aig] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52na', 'Faoi 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1d', 'Faoi 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1d', 'Faoi 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2na', 'Faoi 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2na', 'Faoi 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('gl');
+
+test('parse', function (assert) {
+ var tests = 'xaneiro xan._febreiro feb._marzo mar._abril abr._maio mai._xuño xuñ._xullo xul._agosto ago._setembro set._outubro out._novembro nov._decembro dec.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'domingo, febreiro 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'dom., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 febreiro feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd dd', '0 0º domingo dom. do'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '6 6º 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 de febreiro de 2010'],
+ ['LLL', '14 de febreiro de 2010 15:25'],
+ ['LLLL', 'domingo, 14 de febreiro de 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 de feb. de 2010'],
+ ['lll', '14 de feb. de 2010 15:25'],
+ ['llll', 'dom., 14 de feb. de 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'xaneiro xan._febreiro feb._marzo mar._abril abr._maio mai._xuño xuñ._xullo xul._agosto ago._setembro set._outubro out._novembro nov._decembro dec.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'domingo dom. do_luns lun. lu_martes mar. ma_mércores mér. mé_xoves xov. xo_venres ven. ve_sábado sáb. sá'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'uns segundos', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'unha hora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'unha hora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un día', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un día', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 días', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un día', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 días', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 días', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mes', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mes', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mes', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mes', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un ano', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anos', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un ano', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anos', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'nuns segundos', 'prefix');
+ assert.equal(moment(0).from(30000), 'hai uns segundos', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'hai uns segundos', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'nuns segundos', 'nuns segundos');
+ assert.equal(moment().add({d: 5}).fromNow(), 'en 5 días', 'en 5 días');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'hoxe ás 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'hoxe ás 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'hoxe ás 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'mañá ás 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).add({d: 1, h : -1}).calendar(), 'mañá ás 11:00', 'tomorrow minus 1 hour');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'hoxe ás 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'onte á 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[o] dddd [pasado ' + ((m.hours() !== 1) ? 'ás' : 'a') + '] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('regression tests', function (assert) {
+ var lastWeek = moment().subtract({d: 4}).hours(1);
+ assert.equal(lastWeek.calendar(), lastWeek.format('[o] dddd [pasado a] LT'), '1 o\'clock bug');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('he');
+
+test('parse', function (assert) {
+ var tests = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'ראשון, פברואר 14 2010, 3:25:50 אחה"צ'],
+ ['ddd, h A', 'א׳, 3 אחרי הצהריים'],
+ ['M Mo MM MMMM MMM', '2 2 02 פברואר פבר׳'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 ראשון א׳ א'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'אחה"צ אחרי הצהריים'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 בפברואר 2010'],
+ ['LLL', '14 בפברואר 2010 15:25'],
+ ['LLLL', 'ראשון, 14 בפברואר 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 פבר׳ 2010'],
+ ['lll', '14 פבר׳ 2010 15:25'],
+ ['llll', 'א׳, 14 פבר׳ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = 'ינואר ינו׳_פברואר פבר׳_מרץ מרץ_אפריל אפר׳_מאי מאי_יוני יוני_יולי יולי_אוגוסט אוג׳_ספטמבר ספט׳_אוקטובר אוק׳_נובמבר נוב׳_דצמבר דצמ׳'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ראשון א׳ א|שני ב׳ ב|שלישי ג׳ ג|רביעי ד׳ ד|חמישי ה׳ ה|שישי ו׳ ו|שבת ש׳ ש'.split('|'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'מספר שניות', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'דקה', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'דקה', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 דקות', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 דקות', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'שעה', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'שעה', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'שעתיים', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 שעות', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 שעות', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'יום', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'יום', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'יומיים', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'יום', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ימים', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ימים', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'חודש', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'חודש', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'חודש', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'חודשיים', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'חודשיים', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 חודשים', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'חודש', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 חודשים', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'שנה', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'שנתיים', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 3699}), true), '10 שנים', '345 days = 10 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 7340}), true), '20 שנה', '548 days = 20 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'שנה', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 שנים', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'בעוד מספר שניות', 'prefix');
+ assert.equal(moment(0).from(30000), 'לפני מספר שניות', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'לפני מספר שניות', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'בעוד מספר שניות', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'בעוד 5 ימים', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'היום ב־12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'היום ב־12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'היום ב־13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'מחר ב־12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'היום ב־11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'אתמול ב־12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [בשעה] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [בשעה] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [בשעה] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ביום] dddd [האחרון בשעה] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('hi');
+
+test('parse', function (assert) {
+ var tests = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, a h:mm:ss बजे', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५:५० बजे'],
+ ['ddd, a h बजे', 'रवि, दोपहर ३ बजे'],
+ ['M Mo MM MMMM MMM', '२ २ ०२ फ़रवरी फ़र.'],
+ ['YYYY YY', '२०१० १०'],
+ ['D Do DD', '१४ १४ १४'],
+ ['d do dddd ddd dd', '० ० रविवार रवि र'],
+ ['DDD DDDo DDDD', '४५ ४५ ०४५'],
+ ['w wo ww', '८ ८ ०८'],
+ ['h hh', '३ ०३'],
+ ['H HH', '१५ १५'],
+ ['m mm', '२५ २५'],
+ ['s ss', '५० ५०'],
+ ['a A', 'दोपहर दोपहर'],
+ ['LTS', 'दोपहर ३:२५:५० बजे'],
+ ['L', '१४/०२/२०१०'],
+ ['LL', '१४ फ़रवरी २०१०'],
+ ['LLL', '१४ फ़रवरी २०१०, दोपहर ३:२५ बजे'],
+ ['LLLL', 'रविवार, १४ फ़रवरी २०१०, दोपहर ३:२५ बजे'],
+ ['l', '१४/२/२०१०'],
+ ['ll', '१४ फ़र. २०१०'],
+ ['lll', '१४ फ़र. २०१०, दोपहर ३:२५ बजे'],
+ ['llll', 'रवि, १४ फ़र. २०१०, दोपहर ३:२५ बजे']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१');
+});
+
+test('format month', function (assert) {
+ var expected = 'जनवरी जन._फ़रवरी फ़र._मार्च मार्च_अप्रैल अप्रै._मई मई_जून जून_जुलाई जुल._अगस्त अग._सितम्बर सित._अक्टूबर अक्टू._नवम्बर नव._दिसम्बर दिस.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'रविवार रवि र_सोमवार सोम सो_मंगलवार मंगल मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'कुछ ही क्षण', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'एक मिनट', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'एक मिनट', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '२ मिनट', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '४४ मिनट', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'एक घंटा', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'एक घंटा', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '२ घंटे', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '५ घंटे', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '२१ घंटे', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'एक दिन', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'एक दिन', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '२ दिन', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'एक दिन', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '५ दिन', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '२५ दिन', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'एक महीने', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'एक महीने', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'एक महीने', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '२ महीने', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '२ महीने', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '३ महीने', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'एक महीने', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '५ महीने', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'एक वर्ष', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '२ वर्ष', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'एक वर्ष', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '५ वर्ष', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'कुछ ही क्षण में', 'prefix');
+ assert.equal(moment(0).from(30000), 'कुछ ही क्षण पहले', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'कुछ ही क्षण पहले', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'कुछ ही क्षण में', 'कुछ ही क्षण में');
+ assert.equal(moment().add({d: 5}).fromNow(), '५ दिन में', '५ दिन में');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'आज दोपहर १२:०० बजे', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'आज दोपहर १२:२५ बजे', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'आज दोपहर ३:०० बजे', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'कल दोपहर १२:०० बजे', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'आज दोपहर ११:०० बजे', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'कल दोपहर १२:०० बजे', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[पिछले] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'रात', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'सुबह', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'दोपहर', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'शाम', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'शाम', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'रात', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'रात', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'सुबह', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'दोपहर', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'शाम', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'शाम', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'रात', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('hr');
+
+test('parse', function (assert) {
+ var tests = 'siječanj sij._veljača velj._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. veljače 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ned., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 veljača velj.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. nedjelja ned. ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. veljača 2010'],
+ ['LLL', '14. veljača 2010 15:25'],
+ ['LLLL', 'nedjelja, 14. veljača 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. velj. 2010'],
+ ['lll', '14. velj. 2010 15:25'],
+ ['llll', 'ned., 14. velj. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'siječanj sij._veljača velj._ožujak ožu._travanj tra._svibanj svi._lipanj lip._srpanj srp._kolovoz kol._rujan ruj._listopad lis._studeni stu._prosinac pro.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'par sekundi', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedna minuta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedna minuta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mjesec', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mjesec', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mjesec', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mjeseca', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mjeseca', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mjeseca', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mjesec', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mjeseci', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za par sekundi', 'prefix');
+ assert.equal(moment(0).from(30000), 'prije par sekundi', 'prefix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'prije par sekundi', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za par sekundi', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'sutra u 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'jučer u 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('hu');
+
+test('parse', function (assert) {
+ var tests = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, HH:mm:ss', 'vasárnap, február 14. 2010, 15:25:50'],
+ ['ddd, HH', 'vas, 15'],
+ ['M Mo MM MMMM MMM', '2 2. 02 február feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. vasárnap vas v'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['[az év] DDDo [napja]', 'az év 45. napja'],
+ ['LTS', '15:25:50'],
+ ['L', '2010.02.14.'],
+ ['LL', '2010. február 14.'],
+ ['LLL', '2010. február 14. 15:25'],
+ ['LLLL', '2010. február 14., vasárnap 15:25'],
+ ['l', '2010.2.14.'],
+ ['ll', '2010. feb 14.'],
+ ['lll', '2010. feb 14. 15:25'],
+ ['llll', '2010. feb 14., vas 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('a'), 'de', 'am');
+ assert.equal(moment([2011, 2, 23, 11, 59]).format('a'), 'de', 'am');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('a'), 'du', 'pm');
+ assert.equal(moment([2011, 2, 23, 23, 59]).format('a'), 'du', 'pm');
+
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), 'DE', 'AM');
+ assert.equal(moment([2011, 2, 23, 11, 59]).format('A'), 'DE', 'AM');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), 'DU', 'PM');
+ assert.equal(moment([2011, 2, 23, 23, 59]).format('A'), 'DU', 'PM');
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'január jan_február feb_március márc_április ápr_május máj_június jún_július júl_augusztus aug_szeptember szept_október okt_november nov_december dec'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'vasárnap vas_hétfő hét_kedd kedd_szerda sze_csütörtök csüt_péntek pén_szombat szo'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'néhány másodperc', '44 másodperc = néhány másodperc');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'egy perc', '45 másodperc = egy perc');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'egy perc', '89 másodperc = egy perc');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 perc', '90 másodperc = 2 perc');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 perc', '44 perc = 44 perc');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'egy óra', '45 perc = egy óra');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'egy óra', '89 perc = egy óra');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 óra', '90 perc = 2 óra');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 óra', '5 óra = 5 óra');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 óra', '21 óra = 21 óra');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'egy nap', '22 óra = egy nap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'egy nap', '35 óra = egy nap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 nap', '36 óra = 2 nap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'egy nap', '1 nap = egy nap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 nap', '5 nap = 5 nap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 nap', '25 nap = 25 nap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'egy hónap', '26 nap = egy hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'egy hónap', '30 nap = egy hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'egy hónap', '45 nap = egy hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 hónap', '46 nap = 2 hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 hónap', '75 nap = 2 hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 hónap', '76 nap = 3 hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'egy hónap', '1 hónap = egy hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 hónap', '5 hónap = 5 hónap');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'egy év', '345 nap = egy év');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 év', '548 nap = 2 év');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'egy év', '1 év = egy év');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 év', '5 év = 5 év');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'néhány másodperc múlva', 'prefix');
+ assert.equal(moment(0).from(30000), 'néhány másodperce', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'néhány másodperce', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'néhány másodperc múlva', 'néhány másodperc múlva');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 nap múlva', '5 nap múlva');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ma 12:00-kor', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ma 12:25-kor', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'ma 13:00-kor', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'holnap 12:00-kor', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ma 11:00-kor', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'tegnap 12:00-kor', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_');
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), 'today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), 'today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[' + days[m.day()] + '] LT[-kor]'), 'today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, days = 'vasárnap_hétfőn_kedden_szerdán_csütörtökön_pénteken_szombaton'.split('_');
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), 'today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), 'today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[múlt ' + days[m.day()] + '] LT[-kor]'), 'today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'egy héte');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'egy hét múlva');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 hete');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '2 hét múlva');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '52 52 52.', 'Dec 26 2011 should be week 52');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('hy-am');
+
+test('parse', function (assert) {
+ var tests = 'հունվար հնվ_փետրվար փտր_մարտ մրտ_ապրիլ ապր_մայիս մյս_հունիս հնս_հուլիս հլս_օգոստոս օգս_սեպտեմբեր սպտ_հոկտեմբեր հկտ_նոյեմբեր նմբ_դեկտեմբեր դկտ'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('parse exceptional case', function (assert) {
+ assert.equal(moment('11 մայիսի 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989');
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'կիրակի, 14 փետրվարի 2010, 15:25:50'],
+ ['ddd, h A', 'կրկ, 3 ցերեկվա'],
+ ['M Mo MM MMMM MMM', '2 2 02 փետրվար փտր'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 կիրակի կրկ կրկ'],
+ ['DDD DDDo DDDD', '45 45-րդ 045'],
+ ['w wo ww', '7 7-րդ 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'ցերեկվա ցերեկվա'],
+ ['[տարվա] DDDo [օրը]', 'տարվա 45-րդ օրը'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 փետրվարի 2010 թ.'],
+ ['LLL', '14 փետրվարի 2010 թ., 15:25'],
+ ['LLLL', 'կիրակի, 14 փետրվարի 2010 թ., 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 փտր 2010 թ.'],
+ ['lll', '14 փտր 2010 թ., 15:25'],
+ ['llll', 'կրկ, 14 փտր 2010 թ., 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format meridiem', function (assert) {
+ assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'գիշերվա', 'night');
+ assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'գիշերվա', 'night');
+ assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'առավոտվա', 'morning');
+ assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'առավոտվա', 'morning');
+ assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'ցերեկվա', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'ցերեկվա', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'երեկոյան', 'evening');
+ assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'երեկոյան', 'evening');
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ին', '1-ին');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-րդ', '2-րդ');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-րդ', '3-րդ');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-րդ', '4-րդ');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-րդ', '5-րդ');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-րդ', '6-րդ');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-րդ', '7-րդ');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-րդ', '8-րդ');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-րդ', '9-րդ');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-րդ', '10-րդ');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-րդ', '11-րդ');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-րդ', '12-րդ');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-րդ', '13-րդ');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-րդ', '14-րդ');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-րդ', '15-րդ');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-րդ', '16-րդ');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-րդ', '17-րդ');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-րդ', '18-րդ');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-րդ', '19-րդ');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-րդ', '20-րդ');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-րդ', '21-րդ');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-րդ', '22-րդ');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-րդ', '23-րդ');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-րդ', '24-րդ');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-րդ', '25-րդ');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-րդ', '26-րդ');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-րդ', '27-րդ');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-րդ', '28-րդ');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-րդ', '29-րդ');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-րդ', '30-րդ');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-րդ', '31-րդ');
+});
+
+test('format month', function (assert) {
+ var expected = 'հունվար հնվ_փետրվար փտր_մարտ մրտ_ապրիլ ապր_մայիս մյս_հունիս հնս_հուլիս հլս_օգոստոս օգս_սեպտեմբեր սպտ_հոկտեմբեր հկտ_նոյեմբեր նմբ_դեկտեմբեր դկտ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format month case', function (assert) {
+ var months = {
+ 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
+ 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]);
+ }
+});
+
+test('format month short case', function (assert) {
+ var monthsShort = {
+ 'nominative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ 'accusative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]);
+ assert.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]);
+ }
+});
+
+test('format month case with escaped symbols', function (assert) {
+ var months = {
+ 'nominative': 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_'),
+ 'accusative': 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMMM[</b>]'), '<i>1</i> <b>' + months.accusative[i] + '</b>', '1 <b>' + months.accusative[i] + '</b>');
+ assert.equal(moment([2013, i, 1]).format('D[-ին օրը] MMMM'), '1-ին օրը ' + months.accusative[i], '1-ին օրը ' + months.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]);
+ }
+});
+
+test('format month short case with escaped symbols', function (assert) {
+ var monthsShort = {
+ 'nominative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ 'accusative': 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2013, i, 1]).format('D[] MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMM[</b>]'), '<i>1</i> <b>' + monthsShort.accusative[i] + '</b>', '1 <b>' + monthsShort.accusative[i] + '</b>');
+ assert.equal(moment([2013, i, 1]).format('D[-ին օրը] MMM'), '1-ին օրը ' + monthsShort.accusative[i], '1-ին օրը ' + monthsShort.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('D, MMM'), '1, ' + monthsShort.nominative[i], '1, ' + monthsShort.nominative[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'կիրակի կրկ կրկ_երկուշաբթի երկ երկ_երեքշաբթի երք երք_չորեքշաբթի չրք չրք_հինգշաբթի հնգ հնգ_ուրբաթ ուրբ ուրբ_շաբաթ շբթ շբթ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'մի քանի վայրկյան', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'րոպե', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'րոպե', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 րոպե', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 րոպե', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ժամ', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ժամ', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ժամ', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ժամ', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ժամ', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'օր', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'օր', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 օր', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'օր', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 օր', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 օր', '11 days = 11 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 օր', '21 days = 21 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 օր', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ամիս', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ամիս', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ամիս', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ամիս', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ամիս', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ամիս', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ամիս', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ամիս', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'տարի', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 տարի', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'տարի', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 տարի', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'մի քանի վայրկյան հետո', 'prefix');
+ assert.equal(moment(0).from(30000), 'մի քանի վայրկյան առաջ', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'մի քանի վայրկյան հետո', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 օր հետո', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'այսօր 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'այսօր 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'այսօր 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'վաղը 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'այսօր 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'երեկ 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ function makeFormat(d) {
+ return 'dddd [օրը ժամը] LT';
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ return '[անցած] dddd [օրը ժամը] LT';
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ին', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ին', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-րդ', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-րդ', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-րդ', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('id');
+
+test('parse', function (assert) {
+ var tests = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Minggu, Februari 14 2010, 3:25:50 sore'],
+ ['ddd, hA', 'Min, 3sore'],
+ ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Minggu Min Mg'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'sore sore'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15.25.50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Februari 2010'],
+ ['LLL', '14 Februari 2010 pukul 15.25'],
+ ['LLLL', 'Minggu, 14 Februari 2010 pukul 15.25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 pukul 15.25'],
+ ['llll', 'Min, 14 Feb 2010 pukul 15.25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_November Nov_Desember Des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Minggu Min Mg_Senin Sen Sn_Selasa Sel Sl_Rabu Rab Rb_Kamis Kam Km_Jumat Jum Jm_Sabtu Sab Sb'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beberapa detik', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'semenit', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'semenit', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 menit', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 menit', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'sejam', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'sejam', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sehari', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sehari', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 hari', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sehari', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 hari', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 hari', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sebulan', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sebulan', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sebulan', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 bulan', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 bulan', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 bulan', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sebulan', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 bulan', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setahun', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tahun', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setahun', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tahun', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dalam beberapa detik', 'prefix');
+ assert.equal(moment(0).from(30000), 'beberapa detik yang lalu', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'beberapa detik yang lalu', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dalam beberapa detik', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dalam 5 hari', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hari ini pukul 12.00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hari ini pukul 12.25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hari ini pukul 13.00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Besok pukul 12.00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hari ini pukul 11.00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kemarin pukul 12.00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [lalu pukul] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('is');
+
+test('parse', function (assert) {
+ var tests = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'sunnudagur, 14. febrúar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 febrúar feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. sunnudagur sun Su'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. febrúar 2010'],
+ ['LLL', '14. febrúar 2010 kl. 15:25'],
+ ['LLLL', 'sunnudagur, 14. febrúar 2010 kl. 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb 2010'],
+ ['lll', '14. feb 2010 kl. 15:25'],
+ ['llll', 'sun, 14. feb 2010 kl. 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'janúar jan_febrúar feb_mars mar_apríl apr_maí maí_júní jún_júlí júl_ágúst ágú_september sep_október okt_nóvember nóv_desember des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'sunnudagur sun Su_mánudagur mán Má_þriðjudagur þri Þr_miðvikudagur mið Mi_fimmtudagur fim Fi_föstudagur fös Fö_laugardagur lau La'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nokkrar sekúndur', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'mínúta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'mínúta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 mínútur', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 mínútur', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 21}), true), '21 mínúta', '21 minutes = 21 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'klukkustund', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'klukkustund', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 klukkustundir', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 klukkustundir', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 klukkustund', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dagur', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dagur', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dagur', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 dagar', '11 days = 11 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 dagur', '21 days = 21 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mánuður', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mánuður', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mánuður', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mánuðir', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mánuðir', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mánuðir', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mánuður', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mánuðir', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ár', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ár', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ár', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ár', '5 years = 5 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), '21 ár', '21 years = 21 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'eftir nokkrar sekúndur', 'prefix');
+ assert.equal(moment(0).from(30000), 'fyrir nokkrum sekúndum síðan', 'suffix');
+ assert.equal(moment().subtract({m: 1}).fromNow(), 'fyrir mínútu síðan', 'a minute ago');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'fyrir nokkrum sekúndum síðan', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'eftir nokkrar sekúndur', 'in a few seconds');
+ assert.equal(moment().add({m: 1}).fromNow(), 'eftir mínútu', 'in a minute');
+ assert.equal(moment().add({d: 5}).fromNow(), 'eftir 5 daga', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'í dag kl. 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'í dag kl. 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'í dag kl. 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'á morgun kl. 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'í dag kl. 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'í gær kl. 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[síðasta] dddd [kl.] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('it');
+
+test('parse', function (assert) {
+ var tests = 'gennaio gen_febbraio feb_marzo mar_aprile apr_maggio mag_giugno giu_luglio lug_agosto ago_settembre set_ottobre ott_novembre nov_dicembre dic'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domenica, febbraio 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Dom, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 febbraio feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd dd', '0 0º Domenica Dom Do'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '6 6º 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 febbraio 2010'],
+ ['LLL', '14 febbraio 2010 15:25'],
+ ['LLLL', 'Domenica, 14 febbraio 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 feb 2010'],
+ ['lll', '14 feb 2010 15:25'],
+ ['llll', 'Dom, 14 feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'gennaio gen_febbraio feb_marzo mar_aprile apr_maggio mag_giugno giu_luglio lug_agosto ago_settembre set_ottobre ott_novembre nov_dicembre dic'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Domenica Dom Do_Lunedì Lun Lu_Martedì Mar Ma_Mercoledì Mer Me_Giovedì Gio Gi_Venerdì Ven Ve_Sabato Sab Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'alcuni secondi', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuti', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuti', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'un\'ora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'un\'ora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ore', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ore', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ore', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'un giorno', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'un giorno', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 giorni', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'un giorno', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 giorni', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 giorni', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'un mese', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'un mese', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'un mese', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesi', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesi', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesi', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'un mese', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesi', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un anno', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anni', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un anno', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anni', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'in alcuni secondi', 'prefix');
+ assert.equal(moment(0).from(30000), 'alcuni secondi fa', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'in alcuni secondi', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'tra 5 giorni', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Oggi alle 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Oggi alle 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Oggi alle 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Domani alle 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Oggi alle 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ieri alle 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [alle] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [alle] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [alle] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, weekday, datestring;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ // Different date string
+ weekday = parseInt(m.format('d'), 10);
+ datestring = (weekday === 0) ? '[la scorsa] dddd [alle] LT' : '[lo scorso] dddd [alle] LT';
+ assert.equal(m.calendar(), m.format(datestring), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(datestring), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(datestring), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ja');
+
+test('parse', function (assert) {
+ var tests = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, a h:mm:ss', '日曜日, 2月 14日 2010, 午後 3:25:50'],
+ ['ddd, Ah', '日, 午後3'],
+ ['M Mo MM MMMM MMM', '2 2 02 2月 2月'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14日 14'],
+ ['d do dddd ddd dd', '0 0日 日曜日 日 日'],
+ ['DDD DDDo DDDD', '45 45日 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', '午後 午後'],
+ ['[the] DDDo [day of the year]', 'the 45日 day of the year'],
+ ['LTS', '午後3時25分50秒'],
+ ['L', '2010/02/14'],
+ ['LL', '2010年2月14日'],
+ ['LLL', '2010年2月14日午後3時25分'],
+ ['LLLL', '2010年2月14日午後3時25分 日曜日'],
+ ['l', '2010/2/14'],
+ ['ll', '2010年2月14日'],
+ ['lll', '2010年2月14日午後3時25分'],
+ ['llll', '2010年2月14日午後3時25分 日']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = '1月 1月_2月 2月_3月 3月_4月 4月_5月 5月_6月 6月_7月 7月_8月 8月_9月 9月_10月 10月_11月 11月_12月 12月'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = '日曜日 日 日_月曜日 月 月_火曜日 火 火_水曜日 水 水_木曜日 木 木_金曜日 金 金_土曜日 土 土'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '数秒', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1分', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1分', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2分', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44分', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1時間', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1時間', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2時間', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5時間', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21時間', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1日', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1日', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2日', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1日', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5日', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25日', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1ヶ月', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1ヶ月', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1ヶ月', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2ヶ月', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2ヶ月', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3ヶ月', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1ヶ月', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5ヶ月', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1年', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2年', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1年', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5年', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), '数秒後', 'prefix');
+ assert.equal(moment(0).from(30000), '数秒前', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), '数秒前', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), '数秒後', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5日後', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), '今日 午後12時0分', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), '今日 午後12時25分', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), '今日 午後1時0分', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), '明日 午後12時0分', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), '今日 午前11時0分', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), '昨日 午後12時0分', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[来週]dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[来週]dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[来週]dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[前週]dddd LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[前週]dddd LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[前週]dddd LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('jv');
+
+test('parse', function (assert) {
+ var tests = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_Nopember Nop_Desember Des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Minggu, Februari 14 2010, 3:25:50 sonten'],
+ ['ddd, hA', 'Min, 3sonten'],
+ ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Minggu Min Mg'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'sonten sonten'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15.25.50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Februari 2010'],
+ ['LLL', '14 Februari 2010 pukul 15.25'],
+ ['LLLL', 'Minggu, 14 Februari 2010 pukul 15.25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 pukul 15.25'],
+ ['llll', 'Min, 14 Feb 2010 pukul 15.25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = 'Januari Jan_Februari Feb_Maret Mar_April Apr_Mei Mei_Juni Jun_Juli Jul_Agustus Ags_September Sep_Oktober Okt_Nopember Nop_Desember Des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Minggu Min Mg_Senen Sen Sn_Seloso Sel Sl_Rebu Reb Rb_Kemis Kem Km_Jemuwah Jem Jm_Septu Sep Sp'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'sawetawis detik', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'setunggal menit', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'setunggal menit', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 menit', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 menit', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'setunggal jam', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'setunggal jam', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sedinten', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sedinten', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dinten', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sedinten', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dinten', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dinten', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sewulan', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sewulan', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sewulan', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 wulan', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 wulan', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 wulan', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sewulan', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 wulan', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setaun', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 taun', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setaun', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 taun', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'wonten ing sawetawis detik', 'prefix');
+ assert.equal(moment(0).from(30000), 'sawetawis detik ingkang kepengker', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'sawetawis detik ingkang kepengker', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'wonten ing sawetawis detik', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'wonten ing 5 dinten', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Dinten puniko pukul 12.00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Dinten puniko pukul 12.25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Dinten puniko pukul 13.00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Mbenjang pukul 12.00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Dinten puniko pukul 11.00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kala wingi pukul 12.00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [kepengker pukul] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [kepengker pukul] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [kepengker pukul] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+// Monday is the first day of the week.
+// The week that contains Jan 1st is the first week of the year.
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ka');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' უნდა იყოს თვე ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'კვირა, თებერვალი მე-14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'კვი, 3PM'],
+ ['M Mo MM MMMM MMM', '2 მე-2 02 თებერვალი თებ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 მე-14 14'],
+ ['d do dddd ddd dd', '0 0 კვირა კვი კვ'],
+ ['DDD DDDo DDDD', '45 45-ე 045'],
+ ['w wo ww', '7 მე-7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['წლის DDDo დღე', 'წლის 45-ე დღე'],
+ ['LTS', '3:25:50 PM'],
+ ['L', '14/02/2010'],
+ ['LL', '14 თებერვალს 2010'],
+ ['LLL', '14 თებერვალს 2010 3:25 PM'],
+ ['LLLL', 'კვირა, 14 თებერვალს 2010 3:25 PM'],
+ ['l', '14/2/2010'],
+ ['ll', '14 თებ 2010'],
+ ['lll', '14 თებ 2010 3:25 PM'],
+ ['llll', 'კვი, 14 თებ 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ლი', '1-ლი');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), 'მე-2', 'მე-2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), 'მე-3', 'მე-3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), 'მე-4', 'მე-4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), 'მე-5', 'მე-5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), 'მე-6', 'მე-6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), 'მე-7', 'მე-7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), 'მე-8', 'მე-8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), 'მე-9', 'მე-9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), 'მე-10', 'მე-10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), 'მე-11', 'მე-11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), 'მე-12', 'მე-12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), 'მე-13', 'მე-13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), 'მე-14', 'მე-14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), 'მე-15', 'მე-15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), 'მე-16', 'მე-16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), 'მე-17', 'მე-17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), 'მე-18', 'მე-18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), 'მე-19', 'მე-19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), 'მე-20', 'მე-20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ე', '21-ე');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ე', '22-ე');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ე', '23-ე');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ე', '24-ე');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ე', '25-ე');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ე', '26-ე');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ე', '27-ე');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ე', '28-ე');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ე', '29-ე');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ე', '30-ე');
+
+ assert.equal(moment('2011 40', 'YYYY DDD').format('DDDo'), 'მე-40', 'მე-40');
+ assert.equal(moment('2011 50', 'YYYY DDD').format('DDDo'), '50-ე', '50-ე');
+ assert.equal(moment('2011 60', 'YYYY DDD').format('DDDo'), 'მე-60', 'მე-60');
+ assert.equal(moment('2011 100', 'YYYY DDD').format('DDDo'), 'მე-100', 'მე-100');
+ assert.equal(moment('2011 101', 'YYYY DDD').format('DDDo'), '101-ე', '101-ე');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'იანვარი იან_თებერვალი თებ_მარტი მარ_აპრილი აპრ_მაისი მაი_ივნისი ივნ_ივლისი ივლ_აგვისტო აგვ_სექტემბერი სექ_ოქტომბერი ოქტ_ნოემბერი ნოე_დეკემბერი დეკ'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'კვირა კვი კვ_ორშაბათი ორშ ორ_სამშაბათი სამ სა_ოთხშაბათი ოთხ ოთ_ხუთშაბათი ხუთ ხუ_პარასკევი პარ პა_შაბათი შაბ შა'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'რამდენიმე წამი', '44 წამი = რამდენიმე წამი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'წუთი', '45 წამი = წუთი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'წუთი', '89 წამი = წუთი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 წუთი', '90 წამი = 2 წუთი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 წუთი', '44 წამი = 44 წუთი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'საათი', '45 წამი = საათი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'საათი', '89 წამი = საათი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 საათი', '90 წამი = 2 საათი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 საათი', '5 საათი = 5 საათი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 საათი', '21 საათი = 21 საათი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'დღე', '22 საათი = დღე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'დღე', '35 საათი = დღე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 დღე', '36 საათი = 2 დღე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'დღე', '1 დღე = დღე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 დღე', '5 დღე = 5 დღე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 დღე', '25 დღე = 25 დღე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'თვე', '26 დღე = თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'თვე', '30 დღე = თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'თვე', '45 დღე = თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 თვე', '46 დღე = 2 თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 თვე', '75 დღე = 2 თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 თვე', '76 დღე = 3 თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'თვე', '1 თვე = თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 თვე', '5 თვე = 5 თვე');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'წელი', '345 დღე = წელი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 წელი', '548 დღე = 2 წელი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'წელი', '1 წელი = წელი');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 წელი', '5 წელი = 5 წელი');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'რამდენიმე წამში', 'ში სუფიქსი');
+ assert.equal(moment(0).from(30000), 'რამდენიმე წამის წინ', 'წინ სუფიქსი');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'რამდენიმე წამის წინ', 'უნდა აჩვენოს როგორც წარსული');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'რამდენიმე წამში', 'რამდენიმე წამში');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 დღეში', '5 დღეში');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'დღეს 12:00 PM-ზე', 'დღეს ამავე დროს');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'დღეს 12:25 PM-ზე', 'ახლანდელ დროს დამატებული 25 წუთი');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'დღეს 1:00 PM-ზე', 'ახლანდელ დროს დამატებული 1 საათი');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'ხვალ 12:00 PM-ზე', 'ხვალ ამავე დროს');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'დღეს 11:00 AM-ზე', 'ახლანდელ დროს გამოკლებული 1 საათი');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'გუშინ 12:00 PM-ზე', 'გუშინ ამავე დროს');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), 'დღეს + ' + i + ' დღე ახლანდელ დროს');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), 'დღეს + ' + i + ' დღე დღის დასაწყისში');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[შემდეგ] dddd LT[-ზე]'), 'დღეს + ' + i + ' დღე დღის დასასრულს');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), 'დღეს - ' + i + ' დღე ახლანდელ დროს');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), 'დღეს - ' + i + ' დღე დღის დასაწყისში');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[წინა] dddd LT[-ზე]'), 'დღეს - ' + i + ' დღე დღის დასასრულს');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 კვირის წინ');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '1 კვირაში');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 კვირის წინ');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '2 კვირაში');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ლი', 'დეკ 26 2011 უნდა იყოს კვირა 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ლი', 'იან 1 2012 უნდა იყოს კვირა 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 მე-2', 'იან 2 2012 უნდა იყოს კვირა 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 მე-2', 'იან 8 2012 უნდა იყოს კვირა 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 მე-3', 'იან 9 2012 უნდა იყოს კვირა 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('kk');
+
+test('parse', function (assert) {
+ var tests = 'қаңтар қаң_ақпан ақп_наурыз нау_сәуір сәу_мамыр мам_маусым мау_шілде шіл_тамыз там_қыркүйек қыр_қазан қаз_қараша қар_желтоқсан жел'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'жексенбі, 14-ші ақпан 2010, 15:25:50'],
+ ['ddd, hA', 'жек, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2-ші 02 ақпан ақп'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-ші 14'],
+ ['d do dddd ddd dd', '0 0-ші жексенбі жек жк'],
+ ['DDD DDDo DDDD', '45 45-ші 045'],
+ ['w wo ww', '7 7-ші 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[жылдың] DDDo [күні]', 'жылдың 45-ші күні'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 ақпан 2010'],
+ ['LLL', '14 ақпан 2010 15:25'],
+ ['LLLL', 'жексенбі, 14 ақпан 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 ақп 2010'],
+ ['lll', '14 ақп 2010 15:25'],
+ ['llll', 'жек, 14 ақп 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ші', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-ші', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-ші', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ші', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ші', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-шы', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ші', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ші', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-шы', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-шы', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ші', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ші', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ші', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ші', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ші', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-шы', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ші', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ші', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-шы', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-шы', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ші', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ші', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ші', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ші', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ші', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-шы', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ші', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ші', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-шы', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-шы', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ші', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'қаңтар қаң_ақпан ақп_наурыз нау_сәуір сәу_мамыр мам_маусым мау_шілде шіл_тамыз там_қыркүйек қыр_қазан қаз_қараша қар_желтоқсан жел'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'жексенбі жек жк_дүйсенбі дүй дй_сейсенбі сей сй_сәрсенбі сәр ср_бейсенбі бей бй_жұма жұм жм_сенбі сен сн'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'бірнеше секунд', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'бір минут', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'бір минут', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минут', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минут', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'бір сағат', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'бір сағат', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 сағат', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 сағат', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 сағат', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'бір күн', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'бір күн', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 күн', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'бір күн', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 күн', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 күн', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'бір ай', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'бір ай', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'бір ай', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ай', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ай', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ай', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'бір ай', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ай', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'бір жыл', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 жыл', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'бір жыл', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 жыл', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'бірнеше секунд ішінде', 'prefix');
+ assert.equal(moment(0).from(30000), 'бірнеше секунд бұрын', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'бірнеше секунд бұрын', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'бірнеше секунд ішінде', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 күн ішінде', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Бүгін сағат 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Бүгін сағат 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Бүгін сағат 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Ертең сағат 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Бүгін сағат 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Кеше сағат 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [сағат] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [сағат] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [сағат] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Өткен аптаның] dddd [сағат] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Өткен аптаның] dddd [сағат] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Өткен аптаның] dddd [сағат] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ші', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ші', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ші', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ші', 'Jan 9 2012 should be week 3');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3-ші', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('km');
+
+test('parse', function (assert) {
+ var tests = 'មករា មករា_កុម្ភៈ កុម្ភៈ_មីនា មីនា_មេសា មេសា_ឧសភា ឧសភា_មិថុនា មិថុនា_កក្កដា កក្កដា_សីហា សីហា_កញ្ញា កញ្ញា_តុលា តុលា_វិច្ឆិកា វិច្ឆិកា_ធ្នូ ធ្នូ'.split('_'),
+ i;
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'អាទិត្យ, កុម្ភៈ 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'អាទិត្យ, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 កុម្ភៈ កុម្ភៈ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 អាទិត្យ អាទិត្យ អាទិត្យ'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '6 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 កុម្ភៈ 2010'],
+ ['LLL', '14 កុម្ភៈ 2010 15:25'],
+ ['LLLL', 'អាទិត្យ, 14 កុម្ភៈ 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 កុម្ភៈ 2010'],
+ ['lll', '14 កុម្ភៈ 2010 15:25'],
+ ['llll', 'អាទិត្យ, 14 កុម្ភៈ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'មករា មករា_កុម្ភៈ កុម្ភៈ_មីនា មីនា_មេសា មេសា_ឧសភា ឧសភា_មិថុនា មិថុនា_កក្កដា កក្កដា_សីហា សីហា_កញ្ញា កញ្ញា_តុលា តុលា_វិច្ឆិកា វិច្ឆិកា_ធ្នូ ធ្នូ'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'អាទិត្យ អាទិត្យ អាទិត្យ_ច័ន្ទ ច័ន្ទ ច័ន្ទ_អង្គារ អង្គារ អង្គារ_ពុធ ពុធ ពុធ_ព្រហស្បតិ៍ ព្រហស្បតិ៍ ព្រហស្បតិ៍_សុក្រ សុក្រ សុក្រ_សៅរ៍ សៅរ៍ សៅរ៍'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ប៉ុន្មានវិនាទី', '44 seconds = ប៉ុន្មានវិនាទី');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'មួយនាទី', '45 seconds = មួយនាទី');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'មួយនាទី', '89 seconds = មួយនាទី');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 នាទី', '90 seconds = 2 នាទី');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 នាទី', '44 minutes = 44 នាទី');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'មួយម៉ោង', '45 minutes = មួយម៉ោង');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'មួយម៉ោង', '89 minutes = មួយម៉ោង');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ម៉ោង', '90 minutes = 2 ម៉ោង');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ម៉ោង', '5 hours = 5 ម៉ោង');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ម៉ោង', '21 hours = 21 ម៉ោង');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'មួយថ្ងៃ', '22 hours = មួយថ្ងៃ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'មួយថ្ងៃ', '35 hours = មួយថ្ងៃ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ថ្ងៃ', '36 hours = 2 ថ្ងៃ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'មួយថ្ងៃ', '1 day = មួយថ្ងៃ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ថ្ងៃ', '5 days = 5 ថ្ងៃ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ថ្ងៃ', '25 days = 25 ថ្ងៃ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'មួយខែ', '26 days = មួយខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'មួយខែ', '30 days = មួយខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'មួយខែ', '43 days = មួយខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ខែ', '46 days = 2 ខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ខែ', '75 days = 2 ខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ខែ', '76 days = 3 ខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'មួយខែ', '1 month = មួយខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ខែ', '5 months = 5 ខែ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'មួយឆ្នាំ', '345 days = មួយឆ្នាំ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ឆ្នាំ', '548 days = 2 ឆ្នាំ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'មួយឆ្នាំ', '1 year = មួយឆ្នាំ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ឆ្នាំ', '5 years = 5 ឆ្នាំ');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ប៉ុន្មានវិនាទីទៀត', 'prefix');
+ assert.equal(moment(0).from(30000), 'ប៉ុន្មានវិនាទីមុន', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ប៉ុន្មានវិនាទីមុន', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({
+ s: 30
+ }).fromNow(), 'ប៉ុន្មានវិនាទីទៀត', 'in a few seconds');
+ assert.equal(moment().add({
+ d: 5
+ }).fromNow(), '5 ថ្ងៃទៀត', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ថ្ងៃនេះ ម៉ោង 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ថ្ងៃនេះ ម៉ោង 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'ថ្ងៃនេះ ម៉ោង 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'ស្អែក ម៉ោង 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ថ្ងៃនេះ ម៉ោង 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ម្សិលមិញ ម៉ោង 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({
+ d: i
+ });
+ assert.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [ម៉ោង] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({
+ d: i
+ });
+ assert.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [សប្តាហ៍មុន] [ម៉ោង] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({
+ w: 1
+ }),
+ weeksFromNow = moment().add({
+ w: 1
+ });
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({
+ w: 2
+ });
+ weeksFromNow = moment().add({
+ w: 2
+ });
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ko');
+
+test('parse', function (assert) {
+ var tests = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('parse meridiem', function (assert) {
+ var elements = [{
+ expression : '1981년 9월 8일 오후 2시 30분',
+ inputFormat : 'YYYY[년] M[월] D[일] A h[시] m[분]',
+ outputFormat : 'A',
+ expected : '오후'
+ }, {
+ expression : '1981년 9월 8일 오전 2시 30분',
+ inputFormat : 'YYYY[년] M[월] D[일] A h[시] m[분]',
+ outputFormat : 'A h시',
+ expected : '오전 2시'
+ }, {
+ expression : '14시 30분',
+ inputFormat : 'H[시] m[분]',
+ outputFormat : 'A',
+ expected : '오후'
+ }, {
+ expression : '오후 4시',
+ inputFormat : 'A h[시]',
+ outputFormat : 'H',
+ expected : '16'
+ }], i, l, it, actual;
+
+ for (i = 0, l = elements.length; i < l; ++i) {
+ it = elements[i];
+ actual = moment(it.expression, it.inputFormat).format(it.outputFormat);
+
+ assert.equal(
+ actual,
+ it.expected,
+ '\'' + it.outputFormat + '\' of \'' + it.expression + '\' must be \'' + it.expected + '\' but was \'' + actual + '\'.'
+ );
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['YYYY년 MMMM Do dddd a h:mm:ss', '2010년 2월 14일 일요일 오후 3:25:50'],
+ ['ddd A h', '일 오후 3'],
+ ['M Mo MM MMMM MMM', '2 2일 02 2월 2월'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14일 14'],
+ ['d do dddd ddd dd', '0 0일 일요일 일 일'],
+ ['DDD DDDo DDDD', '45 45일 045'],
+ ['w wo ww', '8 8일 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', '오후 오후'],
+ ['일년 중 DDDo째 되는 날', '일년 중 45일째 되는 날'],
+ ['LTS', '오후 3시 25분 50초'],
+ ['L', '2010.02.14'],
+ ['LL', '2010년 2월 14일'],
+ ['LLL', '2010년 2월 14일 오후 3시 25분'],
+ ['LLLL', '2010년 2월 14일 일요일 오후 3시 25분'],
+ ['l', '2010.2.14'],
+ ['ll', '2010년 2월 14일'],
+ ['lll', '2010년 2월 14일 오후 3시 25분'],
+ ['llll', '2010년 2월 14일 일 오후 3시 25분']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1일', '1일');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2일', '2일');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3일', '3일');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4일', '4일');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5일', '5일');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6일', '6일');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7일', '7일');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8일', '8일');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9일', '9일');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10일', '10일');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11일', '11일');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12일', '12일');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13일', '13일');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14일', '14일');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15일', '15일');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16일', '16일');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17일', '17일');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18일', '18일');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19일', '19일');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20일', '20일');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21일', '21일');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22일', '22일');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23일', '23일');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24일', '24일');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25일', '25일');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26일', '26일');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27일', '27일');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28일', '28일');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29일', '29일');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30일', '30일');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31일', '31일');
+});
+
+test('format month', function (assert) {
+ var expected = '1월 1월_2월 2월_3월 3월_4월 4월_5월 5월_6월 6월_7월 7월_8월 8월_9월 9월_10월 10월_11월 11월_12월 12월'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = '일요일 일 일_월요일 월 월_화요일 화 화_수요일 수 수_목요일 목 목_금요일 금 금_토요일 토 토'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '몇 초', '44초 = 몇 초');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '일분', '45초 = 일분');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '일분', '89초 = 일분');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2분', '90초 = 2분');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44분', '44분 = 44분');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '한 시간', '45분 = 한 시간');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '한 시간', '89분 = 한 시간');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2시간', '90분 = 2시간');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5시간', '5시간 = 5시간');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21시간', '21시간 = 21시간');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '하루', '22시간 = 하루');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '하루', '35시간 = 하루');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2일', '36시간 = 2일');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '하루', '하루 = 하루');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5일', '5일 = 5일');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25일', '25일 = 25일');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '한 달', '26일 = 한 달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '한 달', '30일 = 한 달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '한 달', '45일 = 한 달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2달', '46일 = 2달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2달', '75일 = 2달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3달', '76일 = 3달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '한 달', '1달 = 한 달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5달', '5달 = 5달');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '일 년', '345일 = 일 년');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2년', '548일 = 2년');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '일 년', '일 년 = 일 년');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5년', '5년 = 5년');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), '몇 초 후', 'prefix');
+ assert.equal(moment(0).from(30000), '몇 초 전', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), '몇 초 전', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), '몇 초 후', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5일 후', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), '오늘 오후 12시 0분', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), '오늘 오후 12시 25분', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), '오늘 오후 1시 0분', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), '내일 오후 12시 0분', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), '오늘 오전 11시 0분', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), '어제 오후 12시 0분', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('지난주 dddd LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('지난주 dddd LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('지난주 dddd LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1일', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1일', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2일', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2일', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3일', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ky');
+
+test('parse', function (assert) {
+ var tests = 'январь янв_февраль фев_март март_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'Жекшемби, 14-чү февраль 2010, 15:25:50'],
+ ['ddd, hA', 'Жек, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2-чи 02 февраль фев'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-чү 14'],
+ ['d do dddd ddd dd', '0 0-чү Жекшемби Жек Жк'],
+ ['DDD DDDo DDDD', '45 45-чи 045'],
+ ['w wo ww', '7 7-чи 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[жылдын] DDDo [күнү]', 'жылдын 45-чи күнү'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 февраль 2010'],
+ ['LLL', '14 февраль 2010 15:25'],
+ ['LLLL', 'Жекшемби, 14 февраль 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 фев 2010'],
+ ['lll', '14 фев 2010 15:25'],
+ ['llll', 'Жек, 14 фев 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-чи', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-чи', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-чү', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-чү', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-чи', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-чы', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-чи', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-чи', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-чу', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-чу', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-чи', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-чи', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-чү', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-чү', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-чи', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-чы', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-чи', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-чи', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-чу', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-чы', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-чи', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-чи', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-чү', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-чү', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-чи', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-чы', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-чи', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-чи', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-чу', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-чу', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-чи', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'январь янв_февраль фев_март март_апрель апр_май май_июнь июнь_июль июль_август авг_сентябрь сен_октябрь окт_ноябрь ноя_декабрь дек'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Жекшемби Жек Жк_Дүйшөмбү Дүй Дй_Шейшемби Шей Шй_Шаршемби Шар Шр_Бейшемби Бей Бй_Жума Жум Жм_Ишемби Ише Иш'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'бирнече секунд', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'бир мүнөт', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'бир мүнөт', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 мүнөт', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 мүнөт', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'бир саат', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'бир саат', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 саат', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 саат', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 саат', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'бир күн', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'бир күн', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 күн', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'бир күн', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 күн', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 күн', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'бир ай', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'бир ай', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'бир ай', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ай', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ай', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ай', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'бир ай', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ай', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'бир жыл', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 жыл', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'бир жыл', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 жыл', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'бирнече секунд ичинде', 'prefix');
+ assert.equal(moment(0).from(30000), 'бирнече секунд мурун', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'бирнече секунд мурун', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'бирнече секунд ичинде', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 күн ичинде', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Бүгүн саат 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Бүгүн саат 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Бүгүн саат 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Эртең саат 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Бүгүн саат 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Кече саат 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [саат] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [саат] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [саат] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Өткен аптанын] dddd [күнү] [саат] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Өткен аптанын] dddd [күнү] [саат] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Өткен аптанын] dddd [күнү] [саат] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-чи', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-чи', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-чи', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-чү', 'Jan 9 2012 should be week 3');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3-чү', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('lb');
+
+test('parse', function (assert) {
+ var tests = 'Januar Jan._Februar Febr._Mäerz Mrz._Abrëll Abr._Mee Mee_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i;
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'Sonndeg, 14. Februar 2010, 15:25:50'],
+ ['ddd, HH:mm', 'So., 15:25'],
+ ['M Mo MM MMMM MMM', '2 2. 02 Februar Febr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. Sonndeg So. So'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50 Auer'],
+ ['L', '14.02.2010'],
+ ['LL', '14. Februar 2010'],
+ ['LLL', '14. Februar 2010 15:25 Auer'],
+ ['LLLL', 'Sonndeg, 14. Februar 2010 15:25 Auer'],
+ ['l', '14.2.2010'],
+ ['ll', '14. Febr. 2010'],
+ ['lll', '14. Febr. 2010 15:25 Auer'],
+ ['llll', 'So., 14. Febr. 2010 15:25 Auer']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = 'Januar Jan._Februar Febr._Mäerz Mrz._Abrëll Abr._Mee Mee_Juni Jun._Juli Jul._August Aug._September Sept._Oktober Okt._November Nov._Dezember Dez.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Sonndeg So. So_Méindeg Mé. Mé_Dënschdeg Dë. Dë_Mëttwoch Më. Më_Donneschdeg Do. Do_Freideg Fr. Fr_Samschdeg Sa. Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'e puer Sekonnen', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eng Minutt', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eng Minutt', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 Minutten', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 Minutten', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'eng Stonn', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'eng Stonn', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 Stonnen', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 Stonnen', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 Stonnen', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'een Dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'een Dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 Deeg', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'een Dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 Deeg', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 Deeg', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ee Mount', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ee Mount', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ee Mount', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 Méint', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 Méint', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 Méint', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ee Mount', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 Méint', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ee Joer', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 Joer', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ee Joer', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 Joer', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'an e puer Sekonnen', 'prefix');
+ assert.equal(moment(0).from(30000), 'virun e puer Sekonnen', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'an e puer Sekonnen', 'in a few seconds');
+ assert.equal(moment().add({d: 1}).fromNow(), 'an engem Dag', 'in one day');
+ assert.equal(moment().add({d: 2}).fromNow(), 'an 2 Deeg', 'in 2 days');
+ assert.equal(moment().add({d: 3}).fromNow(), 'an 3 Deeg', 'in 3 days');
+ assert.equal(moment().add({d: 4}).fromNow(), 'a 4 Deeg', 'in 4 days');
+ assert.equal(moment().add({d: 5}).fromNow(), 'a 5 Deeg', 'in 5 days');
+ assert.equal(moment().add({d: 6}).fromNow(), 'a 6 Deeg', 'in 6 days');
+ assert.equal(moment().add({d: 7}).fromNow(), 'a 7 Deeg', 'in 7 days');
+ assert.equal(moment().add({d: 8}).fromNow(), 'an 8 Deeg', 'in 8 days');
+ assert.equal(moment().add({d: 9}).fromNow(), 'an 9 Deeg', 'in 9 days');
+ assert.equal(moment().add({d: 10}).fromNow(), 'an 10 Deeg', 'in 10 days');
+ assert.equal(moment().add({y: 100}).fromNow(), 'an 100 Joer', 'in 100 years');
+ assert.equal(moment().add({y: 400}).fromNow(), 'a 400 Joer', 'in 400 years');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Haut um 12:00 Auer', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Haut um 12:25 Auer', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Haut um 13:00 Auer', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Muer um 12:00 Auer', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Haut um 11:00 Auer', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Gëschter um 12:00 Auer', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [um] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [um] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [um] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, weekday, datestring;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+
+ // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday)
+ weekday = parseInt(m.format('d'), 10);
+ datestring = (weekday === 2 || weekday === 4 ? '[Leschten] dddd [um] LT' : '[Leschte] dddd [um] LT');
+
+ assert.equal(m.calendar(), m.format(datestring), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(datestring), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(datestring), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1.', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2.', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('lo');
+
+test('parse', function (assert) {
+ var tests = 'ມັງກອນ ມັງກອນ_ກຸມພາ ກຸມພາ_ມີນາ ມີນາ_ເມສາ ເມສາ_ພຶດສະພາ ພຶດສະພາ_ມິຖຸນາ ມິຖຸນາ_ກໍລະກົດ ກໍລະກົດ_ສິງຫາ ສິງຫາ_ກັນຍາ ກັນຍາ_ຕຸລາ ຕຸລາ_ພະຈິກ ພະຈິກ_ທັນວາ ທັນວາ'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'ອາທິດ, ກຸມພາ ທີ່14 2010, 3:25:50 ຕອນແລງ'],
+ ['ddd, hA', 'ທິດ, 3ຕອນແລງ'],
+ ['M Mo MM MMMM MMM', '2 ທີ່2 02 ກຸມພາ ກຸມພາ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 ທີ່14 14'],
+ ['d do dddd ddd dd', '0 ທີ່0 ອາທິດ ທິດ ທ'],
+ ['DDD DDDo DDDD', '45 ທີ່45 045'],
+ ['w wo ww', '8 ທີ່8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'ຕອນແລງ ຕອນແລງ'],
+ ['[ວັນ]DDDo [ຂອງປີ]', 'ວັນທີ່45 ຂອງປີ'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 ກຸມພາ 2010'],
+ ['LLL', '14 ກຸມພາ 2010 15:25'],
+ ['LLLL', 'ວັນອາທິດ 14 ກຸມພາ 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 ກຸມພາ 2010'],
+ ['lll', '14 ກຸມພາ 2010 15:25'],
+ ['llll', 'ວັນທິດ 14 ກຸມພາ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), 'ທີ່1', 'ທີ່1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), 'ທີ່2', 'ທີ່2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), 'ທີ່3', 'ທີ່3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), 'ທີ່4', 'ທີ່4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), 'ທີ່5', 'ທີ່5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), 'ທີ່6', 'ທີ່6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), 'ທີ່7', 'ທີ່7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), 'ທີ່8', 'ທີ່8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), 'ທີ່9', 'ທີ່9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), 'ທີ່10', 'ທີ່10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), 'ທີ່11', 'ທີ່11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), 'ທີ່12', 'ທີ່12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), 'ທີ່13', 'ທີ່13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), 'ທີ່14', 'ທີ່14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), 'ທີ່15', 'ທີ່15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), 'ທີ່16', 'ທີ່16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), 'ທີ່17', 'ທີ່17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), 'ທີ່18', 'ທີ່18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), 'ທີ່19', 'ທີ່19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), 'ທີ່20', 'ທີ່20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), 'ທີ່21', 'ທີ່21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), 'ທີ່22', 'ທີ່22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), 'ທີ່23', 'ທີ່23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), 'ທີ່24', 'ທີ່24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), 'ທີ່25', 'ທີ່25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), 'ທີ່26', 'ທີ່26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), 'ທີ່27', 'ທີ່27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), 'ທີ່28', 'ທີ່28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), 'ທີ່29', 'ທີ່29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), 'ທີ່30', 'ທີ່30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), 'ທີ່31', 'ທີ່31');
+});
+
+test('format month', function (assert) {
+ var expected = 'ມັງກອນ ມັງກອນ_ກຸມພາ ກຸມພາ_ມີນາ ມີນາ_ເມສາ ເມສາ_ພຶດສະພາ ພຶດສະພາ_ມິຖຸນາ ມິຖຸນາ_ກໍລະກົດ ກໍລະກົດ_ສິງຫາ ສິງຫາ_ກັນຍາ ກັນຍາ_ຕຸລາ ຕຸລາ_ພະຈິກ ພະຈິກ_ທັນວາ ທັນວາ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ອາທິດ ທິດ ທ_ຈັນ ຈັນ ຈ_ອັງຄານ ອັງຄານ ອຄ_ພຸດ ພຸດ ພ_ພະຫັດ ພະຫັດ ພຫ_ສຸກ ສຸກ ສກ_ເສົາ ເສົາ ສ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ບໍ່ເທົ່າໃດວິນາທີ', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 ນາທີ', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 ນາທີ', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 ນາທີ', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 ນາທີ', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 ຊົ່ວໂມງ', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 ຊົ່ວໂມງ', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ຊົ່ວໂມງ', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ຊົ່ວໂມງ', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ຊົ່ວໂມງ', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 ມື້', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 ມື້', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ມື້', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 ມື້', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ມື້', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ມື້', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 ເດືອນ', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 ເດືອນ', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 ເດືອນ', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ເດືອນ', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ເດືອນ', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ເດືອນ', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 ເດືອນ', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ເດືອນ', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 ປີ', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ປີ', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 ປີ', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ປີ', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ອີກ ບໍ່ເທົ່າໃດວິນາທີ', 'prefix');
+ assert.equal(moment(0).from(30000), 'ບໍ່ເທົ່າໃດວິນາທີຜ່ານມາ', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ບໍ່ເທົ່າໃດວິນາທີຜ່ານມາ', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ອີກ ບໍ່ເທົ່າໃດວິນາທີ', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'ອີກ 5 ມື້', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ມື້ນີ້ເວລາ 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ມື້ນີ້ເວລາ 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'ມື້ນີ້ເວລາ 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'ມື້ອື່ນເວລາ 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ມື້ນີ້ເວລາ 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ມື້ວານນີ້ເວລາ 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[ວັນ]dddd[ໜ້າເວລາ] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ວັນ]dddd[ໜ້າເວລາ] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ວັນ]dddd[ໜ້າເວລາ] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 ທີ່1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 ທີ່1', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 ທີ່2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 ທີ່2', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 ທີ່3', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('lt');
+
+test('parse', function (assert) {
+ var tests = 'sausis sau_vasaris vas_kovas kov_balandis bal_gegužė geg_birželis bir_liepa lie_rugpjūtis rgp_rugsėjis rgs_spalis spa_lapkritis lap_gruodis grd'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'sekmadienis, 14-oji vasario 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sek, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2-oji 02 vasaris vas'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-oji 14'],
+ ['d do dddd ddd dd', '0 0-oji sekmadienis Sek S'],
+ ['DDD DDDo DDDD', '45 45-oji 045'],
+ ['w wo ww', '6 6-oji 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['DDDo [metų diena]', '45-oji metų diena'],
+ ['LTS', '15:25:50'],
+ ['L', '2010-02-14'],
+ ['LL', '2010 m. vasario 14 d.'],
+ ['LLL', '2010 m. vasario 14 d., 15:25 val.'],
+ ['LLLL', '2010 m. vasario 14 d., sekmadienis, 15:25 val.'],
+ ['l', '2010-02-14'],
+ ['ll', '2010 m. vasario 14 d.'],
+ ['lll', '2010 m. vasario 14 d., 15:25 val.'],
+ ['llll', '2010 m. vasario 14 d., Sek, 15:25 val.']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-oji', '1-oji');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-oji', '2-oji');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-oji', '3-oji');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-oji', '4-oji');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-oji', '5-oji');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-oji', '6-oji');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-oji', '7-oji');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-oji', '8-oji');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-oji', '9-oji');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-oji', '10-oji');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-oji', '11-oji');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-oji', '12-oji');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-oji', '13-oji');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-oji', '14-oji');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-oji', '15-oji');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-oji', '16-oji');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-oji', '17-oji');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-oji', '18-oji');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-oji', '19-oji');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-oji', '20-oji');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-oji', '21-oji');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-oji', '22-oji');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-oji', '23-oji');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-oji', '24-oji');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-oji', '25-oji');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-oji', '26-oji');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-oji', '27-oji');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-oji', '28-oji');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-oji', '29-oji');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-oji', '30-oji');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-oji', '31-oji');
+});
+
+test('format month', function (assert) {
+ var expected = 'sausis sau_vasaris vas_kovas kov_balandis bal_gegužė geg_birželis bir_liepa lie_rugpjūtis rgp_rugsėjis rgs_spalis spa_lapkritis lap_gruodis grd'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('format week on US calendar', function (assert) {
+ // Tests, whether the weekday names are correct, even if the week does not start on Monday
+ moment.updateLocale('lt', {week: {dow: 0, doy: 6}});
+ var expected = 'sekmadienis Sek S_pirmadienis Pir P_antradienis Ant A_trečiadienis Tre T_ketvirtadienis Ket K_penktadienis Pen Pn_šeštadienis Šeš Š'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+ moment.updateLocale('lt', null);
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'kelios sekundės', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutė', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutė', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutės', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 10}), true), '10 minučių', '10 minutes = 10 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 11}), true), '11 minučių', '11 minutes = 11 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 19}), true), '19 minučių', '19 minutes = 19 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 20}), true), '20 minučių', '20 minutes = 20 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutės', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'valanda', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'valanda', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 valandos', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 valandos', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 10}), true), '10 valandų', '10 hours = 10 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 valandos', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diena', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diena', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dienos', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diena', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dienos', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 10}), true), '10 dienų', '10 days = 10 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dienos', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mėnuo', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mėnuo', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mėnuo', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mėnesiai', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mėnesiai', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mėnesiai', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mėnuo', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mėnesiai', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 10}), true), '10 mėnesių', '10 months = 10 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'metai', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 metai', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'metai', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 metai', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'po kelių sekundžių', 'prefix');
+ assert.equal(moment(0).from(30000), 'prieš kelias sekundes', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'prieš kelias sekundes', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'po kelių sekundžių', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'po 5 dienų', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Šiandien 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Šiandien 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Šiandien 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Rytoj 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Šiandien 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Vakar 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Praėjusį] dddd LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52-oji', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1-oji', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1-oji', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2-oji', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2-oji', 'Jan 15 2012 should be week 2');
+});
+
+test('month cases', function (assert) {
+ assert.equal(moment([2015, 4, 1]).format('LL'), '2015 m. gegužės 1 d.', 'uses format instead of standalone form');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('lv');
+
+test('parse', function (assert) {
+ var tests = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'svētdiena, 14. februāris 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Sv, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februāris feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. svētdiena Sv Sv'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010.'],
+ ['LL', '2010. gada 14. februāris'],
+ ['LLL', '2010. gada 14. februāris, 15:25'],
+ ['LLLL', '2010. gada 14. februāris, svētdiena, 15:25'],
+ ['l', '14.2.2010.'],
+ ['ll', '2010. gada 14. feb'],
+ ['lll', '2010. gada 14. feb, 15:25'],
+ ['llll', '2010. gada 14. feb, Sv, 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'janvāris jan_februāris feb_marts mar_aprīlis apr_maijs mai_jūnijs jūn_jūlijs jūl_augusts aug_septembris sep_oktobris okt_novembris nov_decembris dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'svētdiena Sv Sv_pirmdiena P P_otrdiena O O_trešdiena T T_ceturtdiena C C_piektdiena Pk Pk_sestdiena S S'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+// Includes testing the cases of withoutSuffix = true and false.
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'dažas sekundes', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), false), 'pirms dažām sekundēm', '44 seconds with suffix = seconds ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minūte', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), false), 'pirms minūtes', '45 seconds with suffix = a minute ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minūte', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: -89}), false), 'pēc minūtes', '89 seconds with suffix/prefix = in a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minūtes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), false), 'pirms 2 minūtēm', '90 seconds with suffix = 2 minutes ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minūtes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), false), 'pirms 44 minūtēm', '44 minutes with suffix = 44 minutes ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'stunda', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), false), 'pirms stundas', '45 minutes with suffix = an hour ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'stunda', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 stundas', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: -90}), false), 'pēc 2 stundām', '90 minutes with suffix = in 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 stundas', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), false), 'pirms 5 stundām', '5 hours with suffix = 5 hours ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 stunda', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), false), 'pirms 21 stundas', '21 hours with suffix = 21 hours ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'diena', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), false), 'pirms dienas', '22 hours with suffix = a day ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'diena', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dienas', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), false), 'pirms 2 dienām', '36 hours with suffix = 2 days ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'diena', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dienas', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), false), 'pirms 5 dienām', '5 days with suffix = 5 days ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dienas', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), false), 'pirms 25 dienām', '25 days with suffix = 25 days ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mēnesis', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), false), 'pirms mēneša', '26 days with suffix = a month ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mēnesis', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mēnesis', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mēneši', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), false), 'pirms 2 mēnešiem', '46 days with suffix = 2 months ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mēneši', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mēneši', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), false), 'pirms 3 mēnešiem', '76 days with suffix = 3 months ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mēnesis', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mēneši', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), false), 'pirms 5 mēnešiem', '5 months with suffix = 5 months ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'gads', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), false), 'pirms gada', '345 days with suffix = a year ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 gadi', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), false), 'pirms 2 gadiem', '548 days with suffix = 2 years ago');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'gads', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 gadi', '5 years = 5 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), false), 'pirms 5 gadiem', '5 years with suffix = 5 years ago');
+
+ // test that numbers ending with 1 are singular except for when they end with 11 in which case they are plural
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 11}), true), '11 gadi', '11 years = 11 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 21}), true), '21 gads', '21 year = 21 year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 211}), true), '211 gadi', '211 years = 211 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 221}), false), 'pirms 221 gada', '221 year with suffix = 221 years ago');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'pēc dažām sekundēm', 'prefix');
+ assert.equal(moment(0).from(30000), 'pirms dažām sekundēm', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'pirms dažām sekundēm', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'pēc dažām sekundēm', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'pēc 5 dienām', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Šodien pulksten 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Šodien pulksten 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Šodien pulksten 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Rīt pulksten 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Šodien pulksten 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Vakar pulksten 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [pulksten] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [pulksten] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [pulksten] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Pagājušā] dddd [pulksten] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('me');
+
+test('parse', function (assert) {
+ var tests = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedjelja, 14. februar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ned., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. nedjelja ned. ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 15:25'],
+ ['LLLL', 'nedjelja, 14. februar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb. 2010'],
+ ['lll', '14. feb. 2010 15:25'],
+ ['llll', 'ned., 14. feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'nedjelja ned. ne_ponedjeljak pon. po_utorak uto. ut_srijeda sri. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nekoliko sekundi', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedan minut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedan minut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuta', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mjesec', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mjesec', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mjesec', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mjeseca', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mjeseca', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mjeseca', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mjesec', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mjeseci', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za nekoliko sekundi', 'prefix');
+ assert.equal(moment(0).from(30000), 'prije nekoliko sekundi', 'prefix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'prije nekoliko sekundi', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za nekoliko sekundi', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'sjutra u 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'juče u 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ var lastWeekDay = [
+ '[prošle] [nedjelje] [u] LT',
+ '[prošlog] [ponedjeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srijede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+
+ return lastWeekDay[d.day()];
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+// Monday is the first day of the week.
+// The week that contains Jan 1st is the first week of the year.
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('mi');
+
+test('parse', function (assert) {
+ var tests = 'Kohi-tāte Kohi_Hui-tanguru Hui_Poutū-te-rangi Pou_Paenga-whāwhā Pae_Haratua Hara_Pipiri Pipi_Hōngoingoi Hōngoi_Here-turi-kōkā Here_Mahuru Mahu_Whiringa-ā-nuku Whi-nu_Whiringa-ā-rangi Whi-ra_Hakihea Haki'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Rātapu, Hui-tanguru 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Ta, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 Hui-tanguru Hui'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd dd', '0 0º Rātapu Ta Ta'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '6 6º 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Hui-tanguru 2010'],
+ ['LLL', '14 Hui-tanguru 2010 i 15:25'],
+ ['LLLL', 'Rātapu, 14 Hui-tanguru 2010 i 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Hui 2010'],
+ ['lll', '14 Hui 2010 i 15:25'],
+ ['llll', 'Ta, 14 Hui 2010 i 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'Kohi-tāte Kohi_Hui-tanguru Hui_Poutū-te-rangi Pou_Paenga-whāwhā Pae_Haratua Hara_Pipiri Pipi_Hōngoingoi Hōngoi_Here-turi-kōkā Here_Mahuru Mahu_Whiringa-ā-nuku Whi-nu_Whiringa-ā-rangi Whi-ra_Hakihea Haki'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Rātapu Ta Ta_Mane Ma Ma_Tūrei Tū Tū_Wenerei We We_Tāite Tāi Tāi_Paraire Pa Pa_Hātarei Hā Hā'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'te hēkona ruarua', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'he meneti', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'he meneti', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 meneti', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 meneti', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'te haora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'te haora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 haora', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 haora', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 haora', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'he ra', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'he ra', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ra', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'he ra', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ra', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ra', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'he marama', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'he marama', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'he marama', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 marama', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 marama', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 marama', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'he marama', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 marama', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'he tau', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tau', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'he tau', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tau', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'i roto i te hēkona ruarua', 'prefix');
+ assert.equal(moment(0).from(30000), 'te hēkona ruarua i mua', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'te hēkona ruarua i mua', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'i roto i te hēkona ruarua', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'i roto i 5 ra', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'i teie mahana, i 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'i teie mahana, i 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'i teie mahana, i 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'apopo i 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'i teie mahana, i 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'inanahi i 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [i] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [i] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [i] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [whakamutunga i] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [whakamutunga i] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [whakamutunga i] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('mk');
+
+test('parse', function (assert) {
+ var tests = 'јануари јан_февруари фев_март мар_април апр_мај мај_јуни јун_јули јул_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, H:mm:ss', 'недела, февруари 14-ти 2010, 15:25:50'],
+ ['ddd, hA', 'нед, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2-ри 02 февруари фев'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-ти 14'],
+ ['d do dddd ddd dd', '0 0-ев недела нед нe'],
+ ['DDD DDDo DDDD', '45 45-ти 045'],
+ ['w wo ww', '7 7-ми 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45-ти day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 февруари 2010'],
+ ['LLL', '14 февруари 2010 15:25'],
+ ['LLLL', 'недела, 14 февруари 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 фев 2010'],
+ ['lll', '14 фев 2010 15:25'],
+ ['llll', 'нед, 14 фев 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-ви', '1-ви');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-ри', '2-ри');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-ти', '3-ти');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-ти', '4-ти');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-ти', '5-ти');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-ти', '6-ти');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-ми', '7-ми');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-ми', '8-ми');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-ти', '9-ти');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-ти', '10-ти');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-ти', '11-ти');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-ти', '12-ти');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-ти', '13-ти');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-ти', '14-ти');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-ти', '15-ти');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-ти', '16-ти');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-ти', '17-ти');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-ти', '18-ти');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-ти', '19-ти');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-ти', '20-ти');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-ви', '21-ви');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-ри', '22-ри');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-ти', '23-ти');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-ти', '24-ти');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-ти', '25-ти');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-ти', '26-ти');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-ми', '27-ми');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-ми', '28-ми');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-ти', '29-ти');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-ти', '30-ти');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-ви', '31-ви');
+});
+
+test('format month', function (assert) {
+ var expected = 'јануари јан_февруари фев_март мар_април апр_мај мај_јуни јун_јули јул_август авг_септември сеп_октомври окт_ноември ное_декември дек'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'недела нед нe_понеделник пон пo_вторник вто вт_среда сре ср_четврток чет че_петок пет пе_сабота саб сa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'неколку секунди', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'минута', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'минута', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минути', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минути', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'час', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'час', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 часа', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 часа', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 часа', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ден', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ден', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дена', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ден', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дена', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дена', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месец', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месец', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месец', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месеци', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месеци', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месеци', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месец', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месеци', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'година', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 години', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'година', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 години', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'после неколку секунди', 'prefix');
+ assert.equal(moment(0).from(30000), 'пред неколку секунди', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'пред неколку секунди', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'после неколку секунди', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'после 5 дена', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Денес во 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Денес во 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Денес во 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Утре во 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Денес во 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчера во 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[Во] dddd [во] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Во] dddd [во] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Во] dddd [во] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-ви', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-ви', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-ри', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-ри', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-ти', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ml');
+
+test('parse', function (assert) {
+ var tests = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, a h:mm:ss -നു', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25:50 -നു'],
+ ['ddd, a h -നു', 'ഞായർ, ഉച്ച കഴിഞ്ഞ് 3 -നു'],
+ ['M Mo MM MMMM MMM', '2 2 02 ഫെബ്രുവരി ഫെബ്രു.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 ഞായറാഴ്ച ഞായർ ഞാ'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'ഉച്ച കഴിഞ്ഞ് ഉച്ച കഴിഞ്ഞ്'],
+ ['LTS', 'ഉച്ച കഴിഞ്ഞ് 3:25:50 -നു'],
+ ['L', '14/02/2010'],
+ ['LL', '14 ഫെബ്രുവരി 2010'],
+ ['LLL', '14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'],
+ ['LLLL', 'ഞായറാഴ്ച, 14 ഫെബ്രുവരി 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'],
+ ['l', '14/2/2010'],
+ ['ll', '14 ഫെബ്രു. 2010'],
+ ['lll', '14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു'],
+ ['llll', 'ഞായർ, 14 ഫെബ്രു. 2010, ഉച്ച കഴിഞ്ഞ് 3:25 -നു']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'ജനുവരി ജനു._ഫെബ്രുവരി ഫെബ്രു._മാർച്ച് മാർ._ഏപ്രിൽ ഏപ്രി._മേയ് മേയ്_ജൂൺ ജൂൺ_ജൂലൈ ജൂലൈ._ഓഗസ്റ്റ് ഓഗ._സെപ്റ്റംബർ സെപ്റ്റ._ഒക്ടോബർ ഒക്ടോ._നവംബർ നവം._ഡിസംബർ ഡിസം.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ഞായറാഴ്ച ഞായർ ഞാ_തിങ്കളാഴ്ച തിങ്കൾ തി_ചൊവ്വാഴ്ച ചൊവ്വ ചൊ_ബുധനാഴ്ച ബുധൻ ബു_വ്യാഴാഴ്ച വ്യാഴം വ്യാ_വെള്ളിയാഴ്ച വെള്ളി വെ_ശനിയാഴ്ച ശനി ശ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'അൽപ നിമിഷങ്ങൾ', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ഒരു മിനിറ്റ്', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ഒരു മിനിറ്റ്', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 മിനിറ്റ്', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 മിനിറ്റ്', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ഒരു മണിക്കൂർ', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ഒരു മണിക്കൂർ', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 മണിക്കൂർ', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 മണിക്കൂർ', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 മണിക്കൂർ', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ഒരു ദിവസം', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ഒരു ദിവസം', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ദിവസം', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ഒരു ദിവസം', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ദിവസം', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ദിവസം', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ഒരു മാസം', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ഒരു മാസം', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ഒരു മാസം', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 മാസം', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 മാസം', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 മാസം', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ഒരു മാസം', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 മാസം', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ഒരു വർഷം', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 വർഷം', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ഒരു വർഷം', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 വർഷം', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്', 'prefix');
+ assert.equal(moment(0).from(30000), 'അൽപ നിമിഷങ്ങൾ മുൻപ്', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'അൽപ നിമിഷങ്ങൾ മുൻപ്', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്', 'അൽപ നിമിഷങ്ങൾ കഴിഞ്ഞ്');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 ദിവസം കഴിഞ്ഞ്', '5 ദിവസം കഴിഞ്ഞ്');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ഇന്ന് ഉച്ച കഴിഞ്ഞ് 12:00 -നു', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ഇന്ന് ഉച്ച കഴിഞ്ഞ് 12:25 -നു', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'ഇന്ന് ഉച്ച കഴിഞ്ഞ് 3:00 -നു', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'നാളെ ഉച്ച കഴിഞ്ഞ് 12:00 -നു', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ഇന്ന് രാവിലെ 11:00 -നു', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ഇന്നലെ ഉച്ച കഴിഞ്ഞ് 12:00 -നു', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[കഴിഞ്ഞ] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'രാത്രി', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'രാവിലെ', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ഉച്ച കഴിഞ്ഞ്', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'വൈകുന്നേരം', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'വൈകുന്നേരം', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'രാത്രി', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'രാത്രി', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'രാവിലെ', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ഉച്ച കഴിഞ്ഞ്', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'വൈകുന്നേരം', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'വൈകുന്നേരം', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'രാത്രി', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('mr');
+
+test('parse', function (assert) {
+ var tests = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, a h:mm:ss वाजता', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५:५० वाजता'],
+ ['ddd, a h वाजता', 'रवि, दुपारी ३ वाजता'],
+ ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवारी फेब्रु.'],
+ ['YYYY YY', '२०१० १०'],
+ ['D Do DD', '१४ १४ १४'],
+ ['d do dddd ddd dd', '० ० रविवार रवि र'],
+ ['DDD DDDo DDDD', '४५ ४५ ०४५'],
+ ['w wo ww', '८ ८ ०८'],
+ ['h hh', '३ ०३'],
+ ['H HH', '१५ १५'],
+ ['m mm', '२५ २५'],
+ ['s ss', '५० ५०'],
+ ['a A', 'दुपारी दुपारी'],
+ ['LTS', 'दुपारी ३:२५:५० वाजता'],
+ ['L', '१४/०२/२०१०'],
+ ['LL', '१४ फेब्रुवारी २०१०'],
+ ['LLL', '१४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'],
+ ['LLLL', 'रविवार, १४ फेब्रुवारी २०१०, दुपारी ३:२५ वाजता'],
+ ['l', '१४/२/२०१०'],
+ ['ll', '१४ फेब्रु. २०१०'],
+ ['lll', '१४ फेब्रु. २०१०, दुपारी ३:२५ वाजता'],
+ ['llll', 'रवि, १४ फेब्रु. २०१०, दुपारी ३:२५ वाजता']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१');
+});
+
+test('format month', function (assert) {
+ var expected = 'जानेवारी जाने._फेब्रुवारी फेब्रु._मार्च मार्च._एप्रिल एप्रि._मे मे._जून जून._जुलै जुलै._ऑगस्ट ऑग._सप्टेंबर सप्टें._ऑक्टोबर ऑक्टो._नोव्हेंबर नोव्हें._डिसेंबर डिसें.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'रविवार रवि र_सोमवार सोम सो_मंगळवार मंगळ मं_बुधवार बुध बु_गुरूवार गुरू गु_शुक्रवार शुक्र शु_शनिवार शनि श'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'काही सेकंद', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'एक मिनिट', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'एक मिनिट', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '२ मिनिटे', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '४४ मिनिटे', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'एक तास', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'एक तास', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '२ तास', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '५ तास', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '२१ तास', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'एक दिवस', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'एक दिवस', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '२ दिवस', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'एक दिवस', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '५ दिवस', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '२५ दिवस', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'एक महिना', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'एक महिना', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'एक महिना', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '२ महिने', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '२ महिने', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '३ महिने', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'एक महिना', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '५ महिने', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'एक वर्ष', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '२ वर्षे', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'एक वर्ष', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '५ वर्षे', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'काही सेकंदांमध्ये', 'prefix');
+ assert.equal(moment(0).from(30000), 'काही सेकंदांपूर्वी', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'काही सेकंदांपूर्वी', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'काही सेकंदांमध्ये', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '५ दिवसांमध्ये', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'आज दुपारी १२:०० वाजता', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'आज दुपारी १२:२५ वाजता', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'आज दुपारी ३:०० वाजता', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'उद्या दुपारी १२:०० वाजता', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'आज दुपारी ११:०० वाजता', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'काल दुपारी १२:०० वाजता', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[मागील] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'रात्री', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'सकाळी', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'दुपारी', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'सायंकाळी', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'सायंकाळी', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'रात्री', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'रात्री', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'सकाळी', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'दुपारी', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'सायंकाळी', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'सायंकाळी', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'रात्री', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '१ ०१ १', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '२ ०२ २', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '३ ०३ ३', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ms-my');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' sepatutnya bulan ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Ahad, Februari 14 2010, 3:25:50 petang'],
+ ['ddd, hA', 'Ahd, 3petang'],
+ ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Ahad Ahd Ah'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'petang petang'],
+ ['[hari] [ke] DDDo [tahun] ini', 'hari ke 45 tahun ini'],
+ ['LTS', '15.25.50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Februari 2010'],
+ ['LLL', '14 Februari 2010 pukul 15.25'],
+ ['LLLL', 'Ahad, 14 Februari 2010 pukul 15.25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 pukul 15.25'],
+ ['llll', 'Ahd, 14 Feb 2010 pukul 15.25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'Ahad Ahd Ah_Isnin Isn Is_Selasa Sel Sl_Rabu Rab Rb_Khamis Kha Km_Jumaat Jum Jm_Sabtu Sab Sb'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beberapa saat', '44 saat = beberapa saat');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'seminit', '45 saat = seminit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'seminit', '89 saat = seminit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minit', '90 saat = 2 minit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minit', '44 minit = 44 minit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'sejam', '45 minit = sejam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'sejam', '89 minit = sejam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minit = 2 jam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 jam = 5 jam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 jam = 21 jam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sehari', '22 jam = sehari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sehari', '35 jam = sehari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 hari', '36 jam = 2 hari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sehari', '1 hari = sehari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 hari', '5 hari = 5 hari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 hari', '25 hari = 25 hari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sebulan', '26 hari = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sebulan', '30 hari = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sebulan', '45 hari = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 bulan', '46 hari = 2 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 bulan', '75 hari = 2 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 bulan', '76 hari = 3 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sebulan', '1 bulan = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 bulan', '5 bulan = 5 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setahun', '345 hari = setahun');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tahun', '548 hari = 2 tahun');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setahun', '1 tahun = setahun');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tahun', '5 tahun = 5 tahun');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dalam beberapa saat', 'prefix');
+ assert.equal(moment(0).from(30000), 'beberapa saat yang lepas', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'beberapa saat yang lepas', 'waktu sekarang dari sekarang sepatutnya menunjukkan sebagai telah lepas');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dalam beberapa saat', 'dalam beberapa saat');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dalam 5 hari', 'dalam 5 hari');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hari ini pukul 12.00', 'hari ini pada waktu yang sama');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hari ini pukul 12.25', 'Sekarang tambah 25 minit');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hari ini pukul 13.00', 'Sekarang tambah 1 jam');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Esok pukul 12.00', 'esok pada waktu yang sama');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hari ini pukul 11.00', 'Sekarang tolak 1 jam');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kelmarin pukul 12.00', 'kelmarin pada waktu yang sama');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari waktu sekarang');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari permulaan hari');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari tamat hari');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari waktu sekarang');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari permulaan hari');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari tamat hari');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 minggu lepas');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 1 minggu');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 minggu lepas');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 2 minggu');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 sepatutnya minggu 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 sepatutnya minggu 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 sepatutnya minggu 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 sepatutnya minggu 3');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 sepatutnya minggu 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ms');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' sepatutnya bulan ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Ahad, Februari 14 2010, 3:25:50 petang'],
+ ['ddd, hA', 'Ahd, 3petang'],
+ ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Ahad Ahd Ah'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'petang petang'],
+ ['[hari] [ke] DDDo [tahun] ini', 'hari ke 45 tahun ini'],
+ ['LTS', '15.25.50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Februari 2010'],
+ ['LLL', '14 Februari 2010 pukul 15.25'],
+ ['LLLL', 'Ahad, 14 Februari 2010 pukul 15.25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 pukul 15.25'],
+ ['llll', 'Ahd, 14 Feb 2010 pukul 15.25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'Januari Jan_Februari Feb_Mac Mac_April Apr_Mei Mei_Jun Jun_Julai Jul_Ogos Ogs_September Sep_Oktober Okt_November Nov_Disember Dis'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'Ahad Ahd Ah_Isnin Isn Is_Selasa Sel Sl_Rabu Rab Rb_Khamis Kha Km_Jumaat Jum Jm_Sabtu Sab Sb'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'beberapa saat', '44 saat = beberapa saat');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'seminit', '45 saat = seminit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'seminit', '89 saat = seminit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minit', '90 saat = 2 minit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minit', '44 minit = 44 minit');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'sejam', '45 minit = sejam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'sejam', '89 minit = sejam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 jam', '90 minit = 2 jam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 jam', '5 jam = 5 jam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 jam', '21 jam = 21 jam');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'sehari', '22 jam = sehari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'sehari', '35 jam = sehari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 hari', '36 jam = 2 hari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'sehari', '1 hari = sehari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 hari', '5 hari = 5 hari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 hari', '25 hari = 25 hari');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'sebulan', '26 hari = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'sebulan', '30 hari = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'sebulan', '45 hari = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 bulan', '46 hari = 2 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 bulan', '75 hari = 2 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 bulan', '76 hari = 3 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'sebulan', '1 bulan = sebulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 bulan', '5 bulan = 5 bulan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'setahun', '345 hari = setahun');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 tahun', '548 hari = 2 tahun');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'setahun', '1 tahun = setahun');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 tahun', '5 tahun = 5 tahun');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dalam beberapa saat', 'prefix');
+ assert.equal(moment(0).from(30000), 'beberapa saat yang lepas', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'beberapa saat yang lepas', 'waktu sekarang dari sekarang sepatutnya menunjukkan sebagai telah lepas');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dalam beberapa saat', 'dalam beberapa saat');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dalam 5 hari', 'dalam 5 hari');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hari ini pukul 12.00', 'hari ini pada waktu yang sama');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hari ini pukul 12.25', 'Sekarang tambah 25 minit');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hari ini pukul 13.00', 'Sekarang tambah 1 jam');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Esok pukul 12.00', 'esok pada waktu yang sama');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hari ini pukul 11.00', 'Sekarang tolak 1 jam');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Kelmarin pukul 12.00', 'kelmarin pada waktu yang sama');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari waktu sekarang');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari permulaan hari');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [pukul] LT'), 'Hari ini + ' + i + ' hari tamat hari');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari waktu sekarang');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari permulaan hari');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [lepas] [pukul] LT'), 'Hari ini - ' + i + ' hari tamat hari');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 minggu lepas');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 1 minggu');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 minggu lepas');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'dalam 2 minggu');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 sepatutnya minggu 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 sepatutnya minggu 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 sepatutnya minggu 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 sepatutnya minggu 3');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 sepatutnya minggu 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('my');
+
+test('parse', function (assert) {
+ var tests = 'ဇန်နဝါရီ ဇန်_ဖေဖော်ဝါရီ ဖေ_မတ် မတ်_ဧပြီ ပြီ_မေ မေ_ဇွန် ဇွန်_ဇူလိုင် လိုင်_သြဂုတ် သြ_စက်တင်ဘာ စက်_အောက်တိုဘာ အောက်_နိုဝင်ဘာ နို_ဒီဇင်ဘာ ဒီ'.split('_'),
+ i;
+
+ function equalTest (input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'တနင်္ဂနွေ, ဖေဖော်ဝါရီ ၁၄ ၂၀၁၀, ၃:၂၅:၅၀ pm'],
+ ['ddd, hA', 'နွေ, ၃PM'],
+ ['M Mo MM MMMM MMM', '၂ ၂ ၀၂ ဖေဖော်ဝါရီ ဖေ'],
+ ['YYYY YY', '၂၀၁၀ ၁၀'],
+ ['D Do DD', '၁၄ ၁၄ ၁၄'],
+ ['d do dddd ddd dd', '၀ ၀ တနင်္ဂနွေ နွေ နွေ'],
+ ['DDD DDDo DDDD', '၄၅ ၄၅ ၀၄၅'],
+ ['w wo ww', '၆ ၆ ၀၆'],
+ ['h hh', '၃ ၀၃'],
+ ['H HH', '၁၅ ၁၅'],
+ ['m mm', '၂၅ ၂၅'],
+ ['s ss', '၅၀ ၅၀'],
+ ['a A', 'pm PM'],
+ ['[နှစ်၏] DDDo [ရက်မြောက်]', 'နှစ်၏ ၄၅ ရက်မြောက်'],
+ ['LTS', '၁၅:၂၅:၅၀'],
+ ['L', '၁၄/၀၂/၂၀၁၀'],
+ ['LL', '၁၄ ဖေဖော်ဝါရီ ၂၀၁၀'],
+ ['LLL', '၁၄ ဖေဖော်ဝါရီ ၂၀၁၀ ၁၅:၂၅'],
+ ['LLLL', 'တနင်္ဂနွေ ၁၄ ဖေဖော်ဝါရီ ၂၀၁၀ ၁၅:၂၅'],
+ ['l', '၁၄/၂/၂၀၁၀'],
+ ['ll', '၁၄ ဖေ ၂၀၁၀'],
+ ['lll', '၁၄ ဖေ ၂၀၁၀ ၁၅:၂၅'],
+ ['llll', 'နွေ ၁၄ ဖေ ၂၀၁၀ ၁၅:၂၅']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '၁', '၁');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '၂', '၂');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '၃', '၃');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '၄', '၄');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '၅', '၅');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '၆', '၆');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '၇', '၇');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '၈', '၈');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '၉', '၉');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '၁၀', '၁၀');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '၁၁', '၁၁');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '၁၂', '၁၂');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '၁၃', '၁၃');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '၁၄', '၁၄');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '၁၅', '၁၅');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '၁၆', '၁၆');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '၁၇', '၁၇');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '၁၈', '၁၈');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '၁၉', '၁၉');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '၂၀', '၂၀');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '၂၁', '၂၁');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '၂၂', '၂၂');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '၂၃', '၂၃');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '၂၄', '၂၄');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '၂၅', '၂၅');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '၂၆', '၂၆');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '၂၇', '၂၇');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '၂၈', '၂၈');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '၂၉', '၂၉');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '၃၀', '၃၀');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '၃၁', '၃၁');
+});
+
+test('format month', function (assert) {
+ var expected = 'ဇန်နဝါရီ ဇန်_ဖေဖော်ဝါရီ ဖေ_မတ် မတ်_ဧပြီ ပြီ_မေ မေ_ဇွန် ဇွန်_ဇူလိုင် လိုင်_သြဂုတ် သြ_စက်တင်ဘာ စက်_အောက်တိုဘာ အောက်_နိုဝင်ဘာ နို_ဒီဇင်ဘာ ဒီ'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'တနင်္ဂနွေ နွေ နွေ_တနင်္လာ လာ လာ_အင်္ဂါ ဂါ ဂါ_ဗုဒ္ဓဟူး ဟူး ဟူး_ကြာသပတေး ကြာ ကြာ_သောကြာ သော သော_စနေ နေ နေ'.split('_'),
+ i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 44
+ }), true), 'စက္ကန်.အနည်းငယ်', '၄၄ စက္ကန်. = စက္ကန်.အနည်းငယ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 45
+ }), true), 'တစ်မိနစ်', '၄၅ စက္ကန်. = တစ်မိနစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 89
+ }), true), 'တစ်မိနစ်', '၈၉ စက္ကန်. = တစ်မိနစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ s: 90
+ }), true), '၂ မိနစ်', '၉၀ စက္ကန်. = ၂ မိနစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 44
+ }), true), '၄၄ မိနစ်', '၄၄ မိနစ် = ၄၄ မိနစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 45
+ }), true), 'တစ်နာရီ', '၄၅ မိနစ် = ၁ နာရီ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 89
+ }), true), 'တစ်နာရီ', '၈၉ မိနစ် = တစ်နာရီ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ m: 90
+ }), true), '၂ နာရီ', 'မိနစ် ၉၀= ၂ နာရီ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 5
+ }), true), '၅ နာရီ', '၅ နာရီ= ၅ နာရီ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 21
+ }), true), '၂၁ နာရီ', '၂၁ နာရီ =၂၁ နာရီ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 22
+ }), true), 'တစ်ရက်', '၂၂ နာရီ =တစ်ရက်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 35
+ }), true), 'တစ်ရက်', '၃၅ နာရီ =တစ်ရက်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ h: 36
+ }), true), '၂ ရက်', '၃၆ နာရီ = ၂ ရက်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 1
+ }), true), 'တစ်ရက်', '၁ ရက်= တစ်ရက်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 5
+ }), true), '၅ ရက်', '၅ ရက် = ၅ ရက်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 25
+ }), true), '၂၅ ရက်', '၂၅ ရက်= ၂၅ ရက်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 26
+ }), true), 'တစ်လ', '၂၆ ရက် = တစ်လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 30
+ }), true), 'တစ်လ', 'ရက် ၃၀ = တစ်လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 43
+ }), true), 'တစ်လ', '၄၃ ရက် = တစ်လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 46
+ }), true), '၂ လ', '၄၆ ရက် = ၂ လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 74
+ }), true), '၂ လ', '၇၅ ရက်= ၂ လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 76
+ }), true), '၃ လ', '၇၆ ရက် = ၃ လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ M: 1
+ }), true), 'တစ်လ', '၁ လ = တစ်လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ M: 5
+ }), true), '၅ လ', '၅ လ = ၅ လ');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 345
+ }), true), 'တစ်နှစ်', '၃၄၅ ရက် = တစ်နှစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ d: 548
+ }), true), '၂ နှစ်', '၅၄၈ ရက် = ၂ နှစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ y: 1
+ }), true), 'တစ်နှစ်', '၁ နှစ် = တစ်နှစ်');
+ assert.equal(start.from(moment([2007, 1, 28]).add({
+ y: 5
+ }), true), '၅ နှစ်', '၅ နှစ် = ၅ နှစ်');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'လာမည့် စက္ကန်.အနည်းငယ် မှာ', 'prefix');
+ assert.equal(moment(0).from(30000), 'လွန်ခဲ့သော စက္ကန်.အနည်းငယ် က', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'လွန်ခဲ့သော စက္ကန်.အနည်းငယ် က', 'ယခုမှစပြီး အတိတ်တွင်ဖော်ပြသလိုဖော်ပြမည်');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({
+ s: 30
+ }).fromNow(), 'လာမည့် စက္ကန်.အနည်းငယ် မှာ', 'လာမည့် စက္ကန်.အနည်းငယ် မှာ');
+ assert.equal(moment().add({
+ d: 5
+ }).fromNow(), 'လာမည့် ၅ ရက် မှာ', 'လာမည့် ၅ ရက် မှာ');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ယနေ. ၁၂:၀၀ မှာ', 'ယနေ. ဒီအချိန်');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ယနေ. ၁၂:၂၅ မှာ', 'ယခုမှ ၂၅ မိနစ်ပေါင်းထည့်');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'ယနေ. ၁၃:၀၀ မှာ', 'ယခုမှ ၁ နာရီပေါင်းထည့်');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'မနက်ဖြန် ၁၂:၀၀ မှာ', 'မနက်ဖြန် ဒီအချိန်');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ယနေ. ၁၁:၀၀ မှာ', 'ယခုမှ ၁ နာရီနှုတ်');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'မနေ.က ၁၂:၀၀ မှာ', 'မနေ.က ဒီအချိန်');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({
+ d: i
+ });
+ assert.equal(m.calendar(), m.format('dddd LT [မှာ]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd LT [မှာ]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd LT [မှာ]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({
+ d: i
+ });
+ assert.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ပြီးခဲ့သော] dddd LT [မှာ]'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({
+ w: 1
+ }),
+ weeksFromNow = moment().add({
+ w: 1
+ });
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), 'လွန်ခဲ့သော ၁ ပတ်က');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '၁ ပတ်အတွင်း');
+
+ weeksAgo = moment().subtract({
+ w: 2
+ });
+ weeksFromNow = moment().add({
+ w: 2
+ });
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '၂ ပတ် အရင်က');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), '၂ ပတ် အတွင်း');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '၅၂ ၅၂ ၅၂', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '၁ ၀၁ ၁', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '၁ ၀၁ ၁', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '၂ ၀၂ ၂', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '၂ ၀၂ ၂', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('nb');
+
+test('parse', function (assert) {
+ var tests = 'januar jan._februar feb._mars mars_april april_mai mai_juni juni_juli juli_august aug._september sep._oktober okt._november nov._desember des.'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'søndag, februar 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'sø., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. søndag sø. sø'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[den] DDDo [dagen i året]', 'den 45. dagen i året'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 kl. 15:25'],
+ ['LLLL', 'søndag 14. februar 2010 kl. 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb. 2010'],
+ ['lll', '14. feb. 2010 kl. 15:25'],
+ ['llll', 'sø. 14. feb. 2010 kl. 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan._februar feb._mars mars_april april_mai mai_juni juni_juli juli_august aug._september sep._oktober okt._november nov._desember des.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'søndag sø. sø_mandag ma. ma_tirsdag ti. ti_onsdag on. on_torsdag to. to_fredag fr. fr_lørdag lø. lø'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'noen sekunder', '44 sekunder = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ett minutt', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ett minutt', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutter', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutter', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'en time', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'en time', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timer', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timer', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timer', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dager', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dager', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dager', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en måned', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en måned', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en måned', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 måneder', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 måneder', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 måneder', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en måned', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 måneder', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ett år', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ett år', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'om noen sekunder', 'prefix');
+ assert.equal(moment(0).from(30000), 'noen sekunder siden', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'noen sekunder siden', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'om noen sekunder', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dager', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'i dag kl. 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'i dag kl. 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'i dag kl. 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'i morgen kl. 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'i dag kl. 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'i går kl. 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [kl.] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[forrige] dddd [kl.] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ne');
+
+test('parse', function (assert) {
+ var tests = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, aको h:mm:ss बजे', 'आइतबार, १४ फेब्रुवरी २०१०, दिउँसोको ३:२५:५० बजे'],
+ ['ddd, aको h बजे', 'आइत., दिउँसोको ३ बजे'],
+ ['M Mo MM MMMM MMM', '२ २ ०२ फेब्रुवरी फेब्रु.'],
+ ['YYYY YY', '२०१० १०'],
+ ['D Do DD', '१४ १४ १४'],
+ ['d do dddd ddd dd', '० ० आइतबार आइत. आ.'],
+ ['DDD DDDo DDDD', '४५ ४५ ०४५'],
+ ['w wo ww', '८ ८ ०८'],
+ ['h hh', '३ ०३'],
+ ['H HH', '१५ १५'],
+ ['m mm', '२५ २५'],
+ ['s ss', '५० ५०'],
+ ['a A', 'दिउँसो दिउँसो'],
+ ['LTS', 'दिउँसोको ३:२५:५० बजे'],
+ ['L', '१४/०२/२०१०'],
+ ['LL', '१४ फेब्रुवरी २०१०'],
+ ['LLL', '१४ फेब्रुवरी २०१०, दिउँसोको ३:२५ बजे'],
+ ['LLLL', 'आइतबार, १४ फेब्रुवरी २०१०, दिउँसोको ३:२५ बजे'],
+ ['l', '१४/२/२०१०'],
+ ['ll', '१४ फेब्रु. २०१०'],
+ ['lll', '१४ फेब्रु. २०१०, दिउँसोको ३:२५ बजे'],
+ ['llll', 'आइत., १४ फेब्रु. २०१०, दिउँसोको ३:२५ बजे']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '१', '१');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '२', '२');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '३', '३');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '४', '४');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '५', '५');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '६', '६');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '७', '७');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '८', '८');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '९', '९');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '१०', '१०');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '११', '११');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '१२', '१२');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '१३', '१३');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '१४', '१४');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '१५', '१५');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '१६', '१६');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '१७', '१७');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '१८', '१८');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '१९', '१९');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '२०', '२०');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '२१', '२१');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '२२', '२२');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '२३', '२३');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '२४', '२४');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '२५', '२५');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '२६', '२६');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '२७', '२७');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '२८', '२८');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '२९', '२९');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '३०', '३०');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '३१', '३१');
+});
+
+test('format month', function (assert) {
+ var expected = 'जनवरी जन._फेब्रुवरी फेब्रु._मार्च मार्च_अप्रिल अप्रि._मई मई_जुन जुन_जुलाई जुलाई._अगष्ट अग._सेप्टेम्बर सेप्ट._अक्टोबर अक्टो._नोभेम्बर नोभे._डिसेम्बर डिसे.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'आइतबार आइत. आ._सोमबार सोम. सो._मङ्गलबार मङ्गल. मं._बुधबार बुध. बु._बिहिबार बिहि. बि._शुक्रबार शुक्र. शु._शनिबार शनि. श.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'केही क्षण', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'एक मिनेट', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'एक मिनेट', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '२ मिनेट', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '४४ मिनेट', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'एक घण्टा', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'एक घण्टा', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '२ घण्टा', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '५ घण्टा', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '२१ घण्टा', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'एक दिन', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'एक दिन', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '२ दिन', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'एक दिन', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '५ दिन', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '२५ दिन', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'एक महिना', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'एक महिना', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'एक महिना', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '२ महिना', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '२ महिना', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '३ महिना', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'एक महिना', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '५ महिना', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'एक बर्ष', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '२ बर्ष', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'एक बर्ष', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '५ बर्ष', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'केही क्षणमा', 'prefix');
+ assert.equal(moment(0).from(30000), 'केही क्षण अगाडि', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'केही क्षण अगाडि', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'केही क्षणमा', 'केही क्षणमा');
+ assert.equal(moment().add({d: 5}).fromNow(), '५ दिनमा', '५ दिनमा');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'आज दिउँसोको १२:०० बजे', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'आज दिउँसोको १२:२५ बजे', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'आज दिउँसोको १:०० बजे', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'भोलि दिउँसोको १२:०० बजे', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'आज बिहानको ११:०० बजे', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'हिजो दिउँसोको १२:०० बजे', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[आउँदो] dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[गएको] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'राति', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'बिहान', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'दिउँसो', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'साँझ', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'साँझ', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'राति', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'राति', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'बिहान', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'दिउँसो', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'साँझ', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'साँझ', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'राति', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '५३ ५३ ५३', 'Dec 26 2011 should be week 53');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '१ ०१ १', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '१ ०१ १', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '२ ०२ २', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '२ ०२ २', 'Jan 9 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('nl-be');
+
+test('parse', function (assert) {
+ var tests = 'januari jan._februari feb._maart mrt._april apr._mei mei._juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, HH:mm:ss', 'zondag, februari 14de 2010, 15:25:50'],
+ ['ddd, HH', 'zo., 15'],
+ ['M Mo MM MMMM MMM', '2 2de 02 februari feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14de 14'],
+ ['d do dddd ddd dd', '0 0de zondag zo. Zo'],
+ ['DDD DDDo DDDD', '45 45ste 045'],
+ ['w wo ww', '6 6de 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45ste day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 februari 2010'],
+ ['LLL', '14 februari 2010 15:25'],
+ ['LLLL', 'zondag 14 februari 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 feb. 2010'],
+ ['lll', '14 feb. 2010 15:25'],
+ ['llll', 'zo. 14 feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste');
+});
+
+test('format month', function (assert) {
+ var expected = 'januari jan._februari feb._maart mrt._april apr._mei mei_juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'zondag zo. Zo_maandag ma. Ma_dinsdag di. Di_woensdag wo. Wo_donderdag do. Do_vrijdag vr. Vr_zaterdag za. Za'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'een paar seconden', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'één minuut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'één minuut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuten', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuten', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'één uur', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'één uur', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uur', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 uur', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 uur', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'één dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'één dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagen', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'één dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagen', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagen', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'één maand', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'één maand', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'één maand', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 maanden', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 maanden', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 maanden', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'één maand', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 maanden', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'één jaar', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaar', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'één jaar', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaar', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'over een paar seconden', 'prefix');
+ assert.equal(moment(0).from(30000), 'een paar seconden geleden', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'een paar seconden geleden', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'over een paar seconden', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'over 5 dagen', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'vandaag om 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'vandaag om 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'vandaag om 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'morgen om 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'vandaag om 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'gisteren om 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('month abbreviation', function (assert) {
+ assert.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot');
+ assert.equal(moment([2012, 5, 23]).unix(), moment('23-jun-2012', 'D-MMM-YYYY').unix(), 'parse month abbreviation surrounded by dashes without dot');
+ assert.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot');
+ assert.equal(moment([2012, 5, 23]).unix(), moment('23 jun. 2012', 'D MMM YYYY').unix(), 'parse month abbreviation not surrounded by dashes with dot');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('nl');
+
+test('parse', function (assert) {
+ var tests = 'januari jan._februari feb._maart mrt._april apr._mei mei._juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, HH:mm:ss', 'zondag, februari 14de 2010, 15:25:50'],
+ ['ddd, HH', 'zo., 15'],
+ ['M Mo MM MMMM MMM', '2 2de 02 februari feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14de 14'],
+ ['d do dddd ddd dd', '0 0de zondag zo. Zo'],
+ ['DDD DDDo DDDD', '45 45ste 045'],
+ ['w wo ww', '6 6de 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45ste day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14-02-2010'],
+ ['LL', '14 februari 2010'],
+ ['LLL', '14 februari 2010 15:25'],
+ ['LLLL', 'zondag 14 februari 2010 15:25'],
+ ['l', '14-2-2010'],
+ ['ll', '14 feb. 2010'],
+ ['lll', '14 feb. 2010 15:25'],
+ ['llll', 'zo. 14 feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1ste', '1ste');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2de', '2de');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3de', '3de');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4de', '4de');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5de', '5de');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6de', '6de');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7de', '7de');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8ste', '8ste');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9de', '9de');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10de', '10de');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11de', '11de');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12de', '12de');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13de', '13de');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14de', '14de');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15de', '15de');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16de', '16de');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17de', '17de');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18de', '18de');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19de', '19de');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20ste', '20ste');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21ste', '21ste');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22ste', '22ste');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23ste', '23ste');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24ste', '24ste');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25ste', '25ste');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26ste', '26ste');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27ste', '27ste');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28ste', '28ste');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29ste', '29ste');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30ste', '30ste');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31ste', '31ste');
+});
+
+test('format month', function (assert) {
+ var expected = 'januari jan._februari feb._maart mrt._april apr._mei mei_juni jun._juli jul._augustus aug._september sep._oktober okt._november nov._december dec.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'zondag zo. Zo_maandag ma. Ma_dinsdag di. Di_woensdag wo. Wo_donderdag do. Do_vrijdag vr. Vr_zaterdag za. Za'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'een paar seconden', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'één minuut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'één minuut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuten', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuten', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'één uur', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'één uur', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uur', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 uur', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 uur', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'één dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'één dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagen', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'één dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagen', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagen', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'één maand', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'één maand', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'één maand', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 maanden', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 maanden', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 maanden', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'één maand', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 maanden', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'één jaar', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jaar', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'één jaar', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jaar', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'over een paar seconden', 'prefix');
+ assert.equal(moment(0).from(30000), 'een paar seconden geleden', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'een paar seconden geleden', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'over een paar seconden', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'over 5 dagen', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'vandaag om 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'vandaag om 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'vandaag om 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'morgen om 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'vandaag om 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'gisteren om 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [om] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[afgelopen] dddd [om] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('month abbreviation', function (assert) {
+ assert.equal(moment([2012, 5, 23]).format('D-MMM-YYYY'), '23-jun-2012', 'format month abbreviation surrounded by dashes should not include a dot');
+ assert.equal(moment([2012, 5, 23]).unix(), moment('23-jun-2012', 'D-MMM-YYYY').unix(), 'parse month abbreviation surrounded by dashes without dot');
+ assert.equal(moment([2012, 5, 23]).format('D MMM YYYY'), '23 jun. 2012', 'format month abbreviation not surrounded by dashes should include a dot');
+ assert.equal(moment([2012, 5, 23]).unix(), moment('23 jun. 2012', 'D MMM YYYY').unix(), 'parse month abbreviation not surrounded by dashes with dot');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52ste', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1ste', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1ste', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2de', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2de', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('nn');
+
+test('parse', function (assert) {
+ var tests = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'sundag, februar 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'sun, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. sundag sun su'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 kl. 15:25'],
+ ['LLLL', 'sundag 14. februar 2010 kl. 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb 2010'],
+ ['lll', '14. feb 2010 kl. 15:25'],
+ ['llll', 'sun 14. feb 2010 kl. 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan_februar feb_mars mar_april apr_mai mai_juni jun_juli jul_august aug_september sep_oktober okt_november nov_desember des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'sundag sun su_måndag mån må_tysdag tys ty_onsdag ons on_torsdag tor to_fredag fre fr_laurdag lau lø'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nokre sekund', '44 sekunder = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'eit minutt', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'eit minutt', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutt', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutt', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ein time', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ein time', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timar', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timar', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timar', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ein dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ein dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ein dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ein månad', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ein månad', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ein månad', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 månader', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 månader', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 månader', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ein månad', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 månader', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eit år', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eit år', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'om nokre sekund', 'prefix');
+ assert.equal(moment(0).from(30000), 'nokre sekund sidan', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'nokre sekund sidan', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'om nokre sekund', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dagar', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'I dag klokka 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'I dag klokka 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'I dag klokka 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'I morgon klokka 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'I dag klokka 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'I går klokka 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [klokka] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [klokka] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [klokka] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Føregåande] dddd [klokka] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('pa-in');
+
+test('parse', function (assert) {
+ var tests = 'ਜਨਵਰੀ ਜਨਵਰੀ_ਫ਼ਰਵਰੀ ਫ਼ਰਵਰੀ_ਮਾਰਚ ਮਾਰਚ_ਅਪ੍ਰੈਲ ਅਪ੍ਰੈਲ_ਮਈ ਮਈ_ਜੂਨ ਜੂਨ_ਜੁਲਾਈ ਜੁਲਾਈ_ਅਗਸਤ ਅਗਸਤ_ਸਤੰਬਰ ਸਤੰਬਰ_ਅਕਤੂਬਰ ਅਕਤੂਬਰ_ਨਵੰਬਰ ਨਵੰਬਰ_ਦਸੰਬਰ ਦਸੰਬਰ'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, a h:mm:ss ਵਜੇ', 'ਐਤਵਾਰ, ੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫:੫੦ ਵਜੇ'],
+ ['ddd, a h ਵਜੇ', 'ਐਤ, ਦੁਪਹਿਰ ੩ ਵਜੇ'],
+ ['M Mo MM MMMM MMM', '੨ ੨ ੦੨ ਫ਼ਰਵਰੀ ਫ਼ਰਵਰੀ'],
+ ['YYYY YY', '੨੦੧੦ ੧੦'],
+ ['D Do DD', '੧੪ ੧੪ ੧੪'],
+ ['d do dddd ddd dd', '੦ ੦ ਐਤਵਾਰ ਐਤ ਐਤ'],
+ ['DDD DDDo DDDD', '੪੫ ੪੫ ੦੪੫'],
+ ['w wo ww', '੮ ੮ ੦੮'],
+ ['h hh', '੩ ੦੩'],
+ ['H HH', '੧੫ ੧੫'],
+ ['m mm', '੨੫ ੨੫'],
+ ['s ss', '੫੦ ੫੦'],
+ ['a A', 'ਦੁਪਹਿਰ ਦੁਪਹਿਰ'],
+ ['LTS', 'ਦੁਪਹਿਰ ੩:੨੫:੫੦ ਵਜੇ'],
+ ['L', '੧੪/੦੨/੨੦੧੦'],
+ ['LL', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦'],
+ ['LLL', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'],
+ ['LLLL', 'ਐਤਵਾਰ, ੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'],
+ ['l', '੧੪/੨/੨੦੧੦'],
+ ['ll', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦'],
+ ['lll', '੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ'],
+ ['llll', 'ਐਤ, ੧੪ ਫ਼ਰਵਰੀ ੨੦੧੦, ਦੁਪਹਿਰ ੩:੨੫ ਵਜੇ']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '੧', '੧');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '੨', '੨');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '੩', '੩');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '੪', '੪');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '੫', '੫');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '੬', '੬');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '੭', '੭');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '੮', '੮');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '੯', '੯');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '੧੦', '੧੦');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '੧੧', '੧੧');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '੧੨', '੧੨');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '੧੩', '੧੩');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '੧੪', '੧੪');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '੧੫', '੧੫');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '੧੬', '੧੬');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '੧੭', '੧੭');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '੧੮', '੧੮');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '੧੯', '੧੯');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '੨੦', '੨੦');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '੨੧', '੨੧');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '੨੨', '੨੨');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '੨੩', '੨੩');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '੨੪', '੨੪');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '੨੫', '੨੫');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '੨੬', '੨੬');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '੨੭', '੨੭');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '੨੮', '੨੮');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '੨੯', '੨੯');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '੩੦', '੩੦');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '੩੧', '੩੧');
+});
+
+test('format month', function (assert) {
+ var expected = 'ਜਨਵਰੀ ਜਨਵਰੀ_ਫ਼ਰਵਰੀ ਫ਼ਰਵਰੀ_ਮਾਰਚ ਮਾਰਚ_ਅਪ੍ਰੈਲ ਅਪ੍ਰੈਲ_ਮਈ ਮਈ_ਜੂਨ ਜੂਨ_ਜੁਲਾਈ ਜੁਲਾਈ_ਅਗਸਤ ਅਗਸਤ_ਸਤੰਬਰ ਸਤੰਬਰ_ਅਕਤੂਬਰ ਅਕਤੂਬਰ_ਨਵੰਬਰ ਨਵੰਬਰ_ਦਸੰਬਰ ਦਸੰਬਰ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ਐਤਵਾਰ ਐਤ ਐਤ_ਸੋਮਵਾਰ ਸੋਮ ਸੋਮ_ਮੰਗਲਵਾਰ ਮੰਗਲ ਮੰਗਲ_ਬੁਧਵਾਰ ਬੁਧ ਬੁਧ_ਵੀਰਵਾਰ ਵੀਰ ਵੀਰ_ਸ਼ੁੱਕਰਵਾਰ ਸ਼ੁਕਰ ਸ਼ੁਕਰ_ਸ਼ਨੀਚਰਵਾਰ ਸ਼ਨੀ ਸ਼ਨੀ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ਕੁਝ ਸਕਿੰਟ', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ਇਕ ਮਿੰਟ', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ਇਕ ਮਿੰਟ', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '੨ ਮਿੰਟ', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '੪੪ ਮਿੰਟ', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ਇੱਕ ਘੰਟਾ', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ਇੱਕ ਘੰਟਾ', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '੨ ਘੰਟੇ', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '੫ ਘੰਟੇ', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '੨੧ ਘੰਟੇ', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ਇੱਕ ਦਿਨ', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ਇੱਕ ਦਿਨ', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '੨ ਦਿਨ', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ਇੱਕ ਦਿਨ', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '੫ ਦਿਨ', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '੨੫ ਦਿਨ', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ਇੱਕ ਮਹੀਨਾ', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ਇੱਕ ਮਹੀਨਾ', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ਇੱਕ ਮਹੀਨਾ', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '੨ ਮਹੀਨੇ', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '੨ ਮਹੀਨੇ', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '੩ ਮਹੀਨੇ', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ਇੱਕ ਮਹੀਨਾ', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '੫ ਮਹੀਨੇ', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ਇੱਕ ਸਾਲ', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '੨ ਸਾਲ', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ਇੱਕ ਸਾਲ', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '੫ ਸਾਲ', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ਕੁਝ ਸਕਿੰਟ ਵਿੱਚ', 'prefix');
+ assert.equal(moment(0).from(30000), 'ਕੁਝ ਸਕਿੰਟ ਪਿਛਲੇ', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ਕੁਝ ਸਕਿੰਟ ਪਿਛਲੇ', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ਕੁਝ ਸਕਿੰਟ ਵਿੱਚ', 'ਕੁਝ ਸਕਿੰਟ ਵਿੱਚ');
+ assert.equal(moment().add({d: 5}).fromNow(), '੫ ਦਿਨ ਵਿੱਚ', '੫ ਦਿਨ ਵਿੱਚ');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੧੨:੦੦ ਵਜੇ', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੧੨:੨੫ ਵਜੇ', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੩:੦੦ ਵਜੇ', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'ਕਲ ਦੁਪਹਿਰ ੧੨:੦੦ ਵਜੇ', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ਅਜ ਦੁਪਹਿਰ ੧੧:੦੦ ਵਜੇ', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ਕਲ ਦੁਪਹਿਰ ੧੨:੦੦ ਵਜੇ', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[ਪਿਛਲੇ] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ਪਿਛਲੇ] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ਪਿਛਲੇ] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem invariant', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'ਰਾਤ', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ਸਵੇਰ', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'ਦੁਪਹਿਰ', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'ਸ਼ਾਮ', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'ਸ਼ਾਮ', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'ਰਾਤ', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'ਰਾਤ', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ਸਵੇਰ', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'ਦੁਪਹਿਰ', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'ਸ਼ਾਮ', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'ਸ਼ਾਮ', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'ਰਾਤ', 'night');
+});
+
+test('weeks year starting sunday', function (assert) {
+ assert.equal(moment([2012, 0, 1]).week(), 1, 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).week(), 1, 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).week(), 2, 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).week(), 2, 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).week(), 3, 'Jan 15 2012 should be week 3');
+});
+
+test('weeks year starting monday', function (assert) {
+ assert.equal(moment([2006, 11, 31]).week(), 1, 'Dec 31 2006 should be week 1');
+ assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1');
+ assert.equal(moment([2007, 0, 6]).week(), 1, 'Jan 6 2007 should be week 1');
+ assert.equal(moment([2007, 0, 7]).week(), 2, 'Jan 7 2007 should be week 2');
+ assert.equal(moment([2007, 0, 13]).week(), 2, 'Jan 13 2007 should be week 2');
+ assert.equal(moment([2007, 0, 14]).week(), 3, 'Jan 14 2007 should be week 3');
+});
+
+test('weeks year starting tuesday', function (assert) {
+ assert.equal(moment([2007, 11, 29]).week(), 52, 'Dec 29 2007 should be week 52');
+ assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1');
+ assert.equal(moment([2008, 0, 5]).week(), 1, 'Jan 5 2008 should be week 1');
+ assert.equal(moment([2008, 0, 6]).week(), 2, 'Jan 6 2008 should be week 2');
+ assert.equal(moment([2008, 0, 12]).week(), 2, 'Jan 12 2008 should be week 2');
+ assert.equal(moment([2008, 0, 13]).week(), 3, 'Jan 13 2008 should be week 3');
+});
+
+test('weeks year starting wednesday', function (assert) {
+ assert.equal(moment([2002, 11, 29]).week(), 1, 'Dec 29 2002 should be week 1');
+ assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1');
+ assert.equal(moment([2003, 0, 4]).week(), 1, 'Jan 4 2003 should be week 1');
+ assert.equal(moment([2003, 0, 5]).week(), 2, 'Jan 5 2003 should be week 2');
+ assert.equal(moment([2003, 0, 11]).week(), 2, 'Jan 11 2003 should be week 2');
+ assert.equal(moment([2003, 0, 12]).week(), 3, 'Jan 12 2003 should be week 3');
+});
+
+test('weeks year starting thursday', function (assert) {
+ assert.equal(moment([2008, 11, 28]).week(), 1, 'Dec 28 2008 should be week 1');
+ assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1');
+ assert.equal(moment([2009, 0, 3]).week(), 1, 'Jan 3 2009 should be week 1');
+ assert.equal(moment([2009, 0, 4]).week(), 2, 'Jan 4 2009 should be week 2');
+ assert.equal(moment([2009, 0, 10]).week(), 2, 'Jan 10 2009 should be week 2');
+ assert.equal(moment([2009, 0, 11]).week(), 3, 'Jan 11 2009 should be week 3');
+});
+
+test('weeks year starting friday', function (assert) {
+ assert.equal(moment([2009, 11, 27]).week(), 1, 'Dec 27 2009 should be week 1');
+ assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1');
+ assert.equal(moment([2010, 0, 2]).week(), 1, 'Jan 2 2010 should be week 1');
+ assert.equal(moment([2010, 0, 3]).week(), 2, 'Jan 3 2010 should be week 2');
+ assert.equal(moment([2010, 0, 9]).week(), 2, 'Jan 9 2010 should be week 2');
+ assert.equal(moment([2010, 0, 10]).week(), 3, 'Jan 10 2010 should be week 3');
+});
+
+test('weeks year starting saturday', function (assert) {
+ assert.equal(moment([2010, 11, 26]).week(), 1, 'Dec 26 2010 should be week 1');
+ assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1');
+ assert.equal(moment([2011, 0, 2]).week(), 2, 'Jan 2 2011 should be week 2');
+ assert.equal(moment([2011, 0, 8]).week(), 2, 'Jan 8 2011 should be week 2');
+ assert.equal(moment([2011, 0, 9]).week(), 3, 'Jan 9 2011 should be week 3');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '੧ ੦੧ ੧', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '੧ ੦੧ ੧', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '੨ ੦੨ ੨', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '੨ ੦੨ ੨', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '੩ ੦੩ ੩', 'Jan 15 2012 should be week 3');
+});
+
+test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+});
+
+test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+});
+
+test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('pl');
+
+test('parse', function (assert) {
+ var tests = 'styczeń stycznia sty_luty lutego lut_marzec marca mar_kwiecień kwietnia kwi_maj maja maj_czerwiec czerwca cze_lipiec lipca lip_sierpień sierpnia sie_wrzesień września wrz_październik października paź_listopad listopada lis_grudzień grudnia gru'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][2], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][2], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][2].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][2].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('parse strict', function (assert) {
+ var tests = 'styczeń stycznia sty_luty lutego lut_marzec marca mar_kwiecień kwietnia kwi_maj maja maj_czerwiec czerwca cze_lipiec lipca lip_sierpień sierpnia sie_wrzesień września wrz_październik października paź_listopad listopada lis_grudzień grudnia gru'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm, true).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][2], 'MMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][2].toLocaleLowerCase(), 'MMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][2].toLocaleUpperCase(), 'MMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'niedziela, luty 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ndz, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 luty lut'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. niedziela ndz Nd'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 lutego 2010'],
+ ['LLL', '14 lutego 2010 15:25'],
+ ['LLLL', 'niedziela, 14 lutego 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 lut 2010'],
+ ['lll', '14 lut 2010 15:25'],
+ ['llll', 'ndz, 14 lut 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'styczeń sty_luty lut_marzec mar_kwiecień kwi_maj maj_czerwiec cze_lipiec lip_sierpień sie_wrzesień wrz_październik paź_listopad lis_grudzień gru'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'niedziela ndz Nd_poniedziałek pon Pn_wtorek wt Wt_środa śr Śr_czwartek czw Cz_piątek pt Pt_sobota sob So'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'kilka sekund', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuty', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuty', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'godzina', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'godzina', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 godziny', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 godzin', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 godzin', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 dzień', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 dzień', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dni', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 dzień', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dni', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dni', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'miesiąc', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'miesiąc', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'miesiąc', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 miesiące', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 miesiące', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 miesiące', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'miesiąc', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 miesięcy', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'rok', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 lata', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'rok', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 lat', '5 years = 5 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 112}), true), '112 lat', '112 years = 112 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 122}), true), '122 lata', '122 years = 122 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 213}), true), '213 lat', '213 years = 213 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 223}), true), '223 lata', '223 years = 223 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za kilka sekund', 'prefix');
+ assert.equal(moment(0).from(30000), 'kilka sekund temu', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'kilka sekund temu', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za kilka sekund', 'in a few seconds');
+ assert.equal(moment().add({h: 1}).fromNow(), 'za godzinę', 'in an hour');
+ assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dni', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Dziś o 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Dziś o 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Dziś o 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Jutro o 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Dziś o 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Wczoraj o 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[W] dddd [o] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[W] dddd [o] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[W] dddd [o] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('pt-br');
+
+test('parse', function (assert) {
+ var tests = 'janeiro jan_fevereiro fev_março mar_abril abr_maio mai_junho jun_julho jul_agosto ago_setembro set_outubro out_novembro nov_dezembro dez'.split('_'), i;
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingo, Fevereiro 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Dom, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 Fevereiro Fev'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd', '0 0º Domingo Dom'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '8 8º 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 de Fevereiro de 2010'],
+ ['LLL', '14 de Fevereiro de 2010 às 15:25'],
+ ['LLLL', 'Domingo, 14 de Fevereiro de 2010 às 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 de Fev de 2010'],
+ ['lll', '14 de Fev de 2010 às 15:25'],
+ ['llll', 'Dom, 14 de Fev de 2010 às 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Domingo Dom_Segunda-feira Seg_Terça-feira Ter_Quarta-feira Qua_Quinta-feira Qui_Sexta-feira Sex_Sábado Sáb'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'poucos segundos', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'um minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'um minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'uma hora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'uma hora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'um dia', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'um dia', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dias', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'um dia', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dias', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dias', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'um mês', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'um mês', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'um mês', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'um mês', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'um ano', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anos', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'um ano', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anos', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'em poucos segundos', 'prefix');
+ assert.equal(moment(0).from(30000), 'poucos segundos atrás', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'em poucos segundos', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'em 5 dias', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hoje às 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hoje às 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hoje às 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Amanhã às 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hoje às 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ontem às 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1º', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1º', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2º', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2º', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3º', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('pt');
+
+test('parse', function (assert) {
+ var tests = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingo, Fevereiro 14º 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Dom, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2º 02 Fevereiro Fev'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14º 14'],
+ ['d do dddd ddd', '0 0º Domingo Dom'],
+ ['DDD DDDo DDDD', '45 45º 045'],
+ ['w wo ww', '6 6º 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45º day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 de Fevereiro de 2010'],
+ ['LLL', '14 de Fevereiro de 2010 15:25'],
+ ['LLLL', 'Domingo, 14 de Fevereiro de 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 de Fev de 2010'],
+ ['lll', '14 de Fev de 2010 15:25'],
+ ['llll', 'Dom, 14 de Fev de 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1º', '1º');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2º', '2º');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3º', '3º');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4º', '4º');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5º', '5º');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6º', '6º');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7º', '7º');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8º', '8º');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9º', '9º');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10º', '10º');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11º', '11º');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12º', '12º');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13º', '13º');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14º', '14º');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15º', '15º');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16º', '16º');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17º', '17º');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18º', '18º');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19º', '19º');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20º', '20º');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21º', '21º');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22º', '22º');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23º', '23º');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24º', '24º');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25º', '25º');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26º', '26º');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27º', '27º');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28º', '28º');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29º', '29º');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30º', '30º');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31º', '31º');
+});
+
+test('format month', function (assert) {
+ var expected = 'Janeiro Jan_Fevereiro Fev_Março Mar_Abril Abr_Maio Mai_Junho Jun_Julho Jul_Agosto Ago_Setembro Set_Outubro Out_Novembro Nov_Dezembro Dez'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Domingo Dom Dom_Segunda-Feira Seg 2ª_Terça-Feira Ter 3ª_Quarta-Feira Qua 4ª_Quinta-Feira Qui 5ª_Sexta-Feira Sex 6ª_Sábado Sáb Sáb'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'segundos', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'um minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'um minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minutos', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minutos', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'uma hora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'uma hora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 horas', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 horas', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 horas', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'um dia', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'um dia', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dias', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'um dia', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dias', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dias', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'um mês', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'um mês', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'um mês', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meses', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meses', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meses', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'um mês', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meses', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'um ano', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 anos', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'um ano', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 anos', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'em segundos', 'prefix');
+ assert.equal(moment(0).from(30000), 'há segundos', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'em segundos', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'em 5 dias', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hoje às 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hoje às 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hoje às 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Amanhã às 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hoje às 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ontem às 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [às] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format((m.day() === 0 || m.day() === 6) ? '[Último] dddd [às] LT' : '[Última] dddd [às] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52º', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1º', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1º', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2º', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2º', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ro');
+
+test('parse', function (assert) {
+ var tests = 'ianuarie ian._februarie febr._martie mart._aprilie apr._mai mai_iunie iun._iulie iul._august aug._septembrie sept._octombrie oct._noiembrie nov._decembrie dec.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss A', 'duminică, februarie 14 2010, 3:25:50 PM'],
+ ['ddd, hA', 'Dum, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 februarie febr.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 duminică Dum Du'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[a] DDDo[a zi a anului]', 'a 45a zi a anului'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 februarie 2010'],
+ ['LLL', '14 februarie 2010 15:25'],
+ ['LLLL', 'duminică, 14 februarie 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 febr. 2010'],
+ ['lll', '14 febr. 2010 15:25'],
+ ['llll', 'Dum, 14 febr. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'ianuarie ian._februarie febr._martie mart._aprilie apr._mai mai_iunie iun._iulie iul._august aug._septembrie sept._octombrie oct._noiembrie nov._decembrie dec.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'duminică Dum Du_luni Lun Lu_marți Mar Ma_miercuri Mie Mi_joi Joi Jo_vineri Vin Vi_sâmbătă Sâm Sâ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'câteva secunde', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'un minut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'un minut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 de minute', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'o oră', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'o oră', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ore', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ore', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 de ore', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'o zi', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'o zi', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 zile', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'o zi', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 zile', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 de zile', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'o lună', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'o lună', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'o lună', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 luni', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 luni', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 luni', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'o lună', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 luni', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'un an', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ani', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'un an', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ani', '5 years = 5 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 19}), true), '19 ani', '19 years = 19 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 20}), true), '20 de ani', '20 years = 20 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 100}), true), '100 de ani', '100 years = 100 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 101}), true), '101 ani', '101 years = 101 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 119}), true), '119 ani', '119 years = 119 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 120}), true), '120 de ani', '120 years = 120 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 219}), true), '219 ani', '219 years = 219 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 220}), true), '220 de ani', '220 years = 220 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'peste câteva secunde', 'prefix');
+ assert.equal(moment(0).from(30000), 'câteva secunde în urmă', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'câteva secunde în urmă', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'peste câteva secunde', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'peste 5 zile', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'azi la 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'azi la 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'azi la 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'mâine la 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'azi la 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ieri la 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [la] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [la] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [la] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[fosta] dddd [la] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ru');
+
+test('parse', function (assert) {
+ var tests = 'январь янв._февраль февр._март март_апрель апр._май май_июнь июнь_июль июль_август авг._сентябрь сент._октябрь окт._ноябрь нояб._декабрь дек.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ function equalTestStrict(input, mmm, monthIndex) {
+ assert.equal(moment(input, mmm, true).month(), monthIndex, input + ' ' + mmm + ' should be strict month ' + (monthIndex + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+
+ equalTestStrict(tests[i][1], 'MMM', i);
+ equalTestStrict(tests[i][0], 'MMMM', i);
+ equalTestStrict(tests[i][1].toLocaleLowerCase(), 'MMM', i);
+ equalTestStrict(tests[i][1].toLocaleUpperCase(), 'MMM', i);
+ equalTestStrict(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTestStrict(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('parse exceptional case', function (assert) {
+ assert.equal(moment('11 Мая 1989', ['DD MMMM YYYY']).format('DD-MM-YYYY'), '11-05-1989');
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'воскресенье, 14-го февраля 2010, 15:25:50'],
+ ['ddd, h A', 'вс, 3 дня'],
+ ['M Mo MM MMMM MMM', '2 2-й 02 февраль февр.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-го 14'],
+ ['d do dddd ddd dd', '0 0-й воскресенье вс вс'],
+ ['DDD DDDo DDDD', '45 45-й 045'],
+ ['w wo ww', '7 7-я 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'дня дня'],
+ ['DDDo [день года]', '45-й день года'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 февраля 2010 г.'],
+ ['LLL', '14 февраля 2010 г., 15:25'],
+ ['LLLL', 'воскресенье, 14 февраля 2010 г., 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 февр. 2010 г.'],
+ ['lll', '14 февр. 2010 г., 15:25'],
+ ['llll', 'вс, 14 февр. 2010 г., 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format meridiem', function (assert) {
+ assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'ночи', 'night');
+ assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'ночи', 'night');
+ assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'утра', 'morning');
+ assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'утра', 'morning');
+ assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'дня', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'дня', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'вечера', 'evening');
+ assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'вечера', 'evening');
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й');
+});
+
+test('format month', function (assert) {
+ var expected = 'январь янв._февраль февр._март март_апрель апр._май май_июнь июнь_июль июль_август авг._сентябрь сент._октябрь окт._ноябрь нояб._декабрь дек.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format month case', function (assert) {
+ var months = {
+ 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]);
+ }
+});
+
+test('format month short case', function (assert) {
+ var monthsShort = {
+ 'nominative': 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_'),
+ 'accusative': 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2011, i, 1]).format('D MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]);
+ assert.equal(moment([2011, i, 1]).format('MMM'), monthsShort.nominative[i], '1 ' + monthsShort.nominative[i]);
+ }
+});
+
+test('format month case with escaped symbols', function (assert) {
+ var months = {
+ 'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ 'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2013, i, 1]).format('D[] MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMMM[</b>]'), '<i>1</i> <b>' + months.accusative[i] + '</b>', '1 <b>' + months.accusative[i] + '</b>');
+ assert.equal(moment([2013, i, 1]).format('D[-й день] MMMM'), '1-й день ' + months.accusative[i], '1-й день ' + months.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('D, MMMM'), '1, ' + months.nominative[i], '1, ' + months.nominative[i]);
+ }
+});
+
+test('format month short case with escaped symbols', function (assert) {
+ var monthsShort = {
+ 'nominative': 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_'),
+ 'accusative': 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2013, i, 1]).format('D[] MMM'), '1 ' + monthsShort.accusative[i], '1 ' + monthsShort.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('[<i>]D[</i>] [<b>]MMM[</b>]'), '<i>1</i> <b>' + monthsShort.accusative[i] + '</b>', '1 <b>' + monthsShort.accusative[i] + '</b>');
+ assert.equal(moment([2013, i, 1]).format('D[-й день] MMM'), '1-й день ' + monthsShort.accusative[i], '1-й день ' + monthsShort.accusative[i]);
+ assert.equal(moment([2013, i, 1]).format('D, MMM'), '1, ' + monthsShort.nominative[i], '1, ' + monthsShort.nominative[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'воскресенье вс вс_понедельник пн пн_вторник вт вт_среда ср ср_четверг чт чт_пятница пт пт_суббота сб сб'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'несколько секунд', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'минута', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'минута', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минуты', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 31}), true), '31 минута', '31 minutes = 31 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минуты', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'час', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'час', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 часа', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 часов', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 час', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'день', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'день', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дня', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'день', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дней', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 дней', '11 days = 11 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 день', '21 days = 21 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дней', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месяц', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месяц', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месяц', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месяца', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месяца', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месяца', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месяц', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месяцев', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'год', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 года', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'год', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 лет', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'через несколько секунд', 'prefix');
+ assert.equal(moment(0).from(30000), 'несколько секунд назад', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'через несколько секунд', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'через 5 дней', 'in 5 days');
+ assert.equal(moment().add({m: 31}).fromNow(), 'через 31 минуту', 'in 31 minutes = in 31 minutes');
+ assert.equal(moment().subtract({m: 31}).fromNow(), '31 минуту назад', '31 minutes ago = 31 minutes ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Сегодня в 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Сегодня в 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Сегодня в 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Завтра в 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Сегодня в 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчера в 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m, now;
+
+ function makeFormatNext(d) {
+ switch (d.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ }
+
+ function makeFormatThis(d) {
+ if (d.day() === 2) {
+ return '[Во] dddd [в] LT';
+ }
+ else {
+ return '[В] dddd [в] LT';
+ }
+ }
+
+ now = moment().startOf('week');
+ for (i = 2; i < 7; i++) {
+ m = moment(now).add({d: i});
+ assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today + ' + i + ' days end of day');
+ }
+
+ now = moment().endOf('week');
+ for (i = 2; i < 7; i++) {
+ m = moment(now).add({d: i});
+ assert.equal(m.calendar(now), m.format(makeFormatNext(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(now), m.format(makeFormatNext(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(now), m.format(makeFormatNext(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, now;
+
+ function makeFormatLast(d) {
+ switch (d.day()) {
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
+ }
+ }
+
+ function makeFormatThis(d) {
+ if (d.day() === 2) {
+ return '[Во] dddd [в] LT';
+ }
+ else {
+ return '[В] dddd [в] LT';
+ }
+ }
+
+ now = moment().startOf('week');
+ for (i = 2; i < 7; i++) {
+ m = moment(now).subtract({d: i});
+ assert.equal(m.calendar(now), m.format(makeFormatLast(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(now), m.format(makeFormatLast(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(now), m.format(makeFormatLast(m)), 'Today - ' + i + ' days end of day');
+ }
+
+ now = moment().endOf('week');
+ for (i = 2; i < 7; i++) {
+ m = moment(now).subtract({d: i});
+ assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(now), m.format(makeFormatThis(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-я', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-я', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-я', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-я', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-я', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('se');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'ođđajagemánnu ođđj_guovvamánnu guov_njukčamánnu njuk_cuoŋománnu cuo_miessemánnu mies_geassemánnu geas_suoidnemánnu suoi_borgemánnu borg_čakčamánnu čakč_golggotmánnu golg_skábmamánnu skáb_juovlamánnu juov'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'sotnabeaivi, guovvamánnu 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'sotn, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 guovvamánnu guov'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. sotnabeaivi sotn s'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[jagi] DDDo [beaivi]', 'jagi 45. beaivi'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', 'guovvamánnu 14. b. 2010'],
+ ['LLL', 'guovvamánnu 14. b. 2010 ti. 15:25'],
+ ['LLLL', 'sotnabeaivi, guovvamánnu 14. b. 2010 ti. 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', 'guov 14. b. 2010'],
+ ['lll', 'guov 14. b. 2010 ti. 15:25'],
+ ['llll', 'sotn, guov 14. b. 2010 ti. 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'ođđajagemánnu ođđj_guovvamánnu guov_njukčamánnu njuk_cuoŋománnu cuo_miessemánnu mies_geassemánnu geas_suoidnemánnu suoi_borgemánnu borg_čakčamánnu čakč_golggotmánnu golg_skábmamánnu skáb_juovlamánnu juov'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'sotnabeaivi sotn s_vuossárga vuos v_maŋŋebárga maŋ m_gaskavahkku gask g_duorastat duor d_bearjadat bear b_lávvardat láv L'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'moadde sekunddat', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'okta minuhta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'okta minuhta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuhtat', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuhtat', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'okta diimmu', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'okta diimmu', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 diimmut', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 diimmut', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 diimmut', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'okta beaivi', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'okta beaivi', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 beaivvit', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'okta beaivi', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 beaivvit', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 beaivvit', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'okta mánnu', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'okta mánnu', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'okta mánnu', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mánut', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mánut', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mánut', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'okta mánnu', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mánut', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'okta jahki', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 jagit', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'okta jahki', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 jagit', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'moadde sekunddat geažes', 'prefix');
+ assert.equal(moment(0).from(30000), 'maŋit moadde sekunddat', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'maŋit moadde sekunddat', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'moadde sekunddat geažes', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 beaivvit geažes', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'otne ti 12:00', 'Today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'otne ti 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'otne ti 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'ihttin ti 12:00', 'Tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'otne ti 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ikte ti 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [ti] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [ti] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [ti] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[ovddit] dddd [ti] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[ovddit] dddd [ti] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[ovddit] dddd [ti] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('si');
+
+/*jshint -W100*/
+test('parse', function (assert) {
+ var tests = 'ජනවාරි ජන_පෙබරවාරි පෙබ_මාර්තු මාර්_අප්‍රේල් අප්_මැයි මැයි_ජූනි ජූනි_ජූලි ජූලි_අගෝස්තු අගෝ_සැප්තැම්බර් සැප්_ඔක්තෝබර් ඔක්_නොවැම්බර් නොවැ_දෙසැම්බර් දෙසැ'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['YYYY MMMM Do dddd, a h:mm:ss', '2010 පෙබරවාරි 14 වැනි ඉරිදා, ප.ව. 3:25:50'],
+ ['YYYY MMMM Do dddd, a h:mm:ss', '2010 පෙබරවාරි 14 වැනි ඉරිදා, ප.ව. 3:25:50'],
+ ['ddd, A h', 'ඉරි, පස් වරු 3'],
+ ['M Mo MM MMMM MMM', '2 2 වැනි 02 පෙබරවාරි පෙබ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 වැනි 14'],
+ ['d do dddd ddd dd', '0 0 වැනි ඉරිදා ඉරි ඉ'],
+ ['DDD DDDo DDDD', '45 45 වැනි 045'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'ප.ව. පස් වරු'],
+ ['[වසරේ] DDDo [දිනය]', 'වසරේ 45 වැනි දිනය'],
+ ['LTS', 'ප.ව. 3:25:50'],
+ ['LT', 'ප.ව. 3:25'],
+ ['L', '2010/02/14'],
+ ['LL', '2010 පෙබරවාරි 14'],
+ ['LLL', '2010 පෙබරවාරි 14, ප.ව. 3:25'],
+ ['LLLL', '2010 පෙබරවාරි 14 වැනි ඉරිදා, ප.ව. 3:25:50'],
+ ['l', '2010/2/14'],
+ ['ll', '2010 පෙබ 14'],
+ ['lll', '2010 පෙබ 14, ප.ව. 3:25'],
+ ['llll', '2010 පෙබ 14 වැනි ඉරි, ප.ව. 3:25:50']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1 වැනි', '1 වැනි');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2 වැනි', '2 වැනි');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3 වැනි', '3 වැනි');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4 වැනි', '4 වැනි');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5 වැනි', '5 වැනි');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6 වැනි', '6 වැනි');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7 වැනි', '7 වැනි');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8 වැනි', '8 වැනි');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9 වැනි', '9 වැනි');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10 වැනි', '10 වැනි');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11 වැනි', '11 වැනි');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12 වැනි', '12 වැනි');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13 වැනි', '13 වැනි');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14 වැනි', '14 වැනි');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15 වැනි', '15 වැනි');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16 වැනි', '16 වැනි');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17 වැනි', '17 වැනි');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18 වැනි', '18 වැනි');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19 වැනි', '19 වැනි');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20 වැනි', '20 වැනි');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21 වැනි', '21 වැනි');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22 වැනි', '22 වැනි');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23 වැනි', '23 වැනි');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24 වැනි', '24 වැනි');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25 වැනි', '25 වැනි');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26 වැනි', '26 වැනි');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27 වැනි', '27 වැනි');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28 වැනි', '28 වැනි');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29 වැනි', '29 වැනි');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30 වැනි', '30 වැනි');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31 වැනි', '31 වැනි');
+});
+
+test('format month', function (assert) {
+ var expected = 'ජනවාරි ජන_පෙබරවාරි පෙබ_මාර්තු මාර්_අප්‍රේල් අප්_මැයි මැයි_ජූනි ජූනි_ජූලි ජූලි_අගෝස්තු අගෝ_සැප්තැම්බර් සැප්_ඔක්තෝබර් ඔක්_නොවැම්බර් නොවැ_දෙසැම්බර් දෙසැ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ඉරිදා ඉරි ඉ_සඳුදා සඳු ස_අඟහරුවාදා අඟ අ_බදාදා බදා බ_බ්‍රහස්පතින්දා බ්‍රහ බ්‍ර_සිකුරාදා සිකු සි_සෙනසුරාදා සෙන සෙ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'තත්පර කිහිපය', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'මිනිත්තුව', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'මිනිත්තුව', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'මිනිත්තු 2', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'මිනිත්තු 44', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'පැය', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'පැය', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'පැය 2', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'පැය 5', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'පැය 21', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'දිනය', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'දිනය', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'දින 2', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'දිනය', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'දින 5', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'දින 25', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'මාසය', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'මාසය', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'මාසය', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'මාස 2', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'මාස 2', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'මාස 3', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'මාසය', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'මාස 5', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'වසර', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'වසර 2', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'වසර', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'වසර 5', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'තත්පර කිහිපයකින්', 'prefix');
+ assert.equal(moment(0).from(30000), 'තත්පර කිහිපයකට පෙර', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'තත්පර කිහිපයකට පෙර', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'තත්පර කිහිපයකින්', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'දින 5කින්', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'අද ප.ව. 12:00ට', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'අද ප.ව. 12:25ට', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'අද ප.ව. 1:00ට', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'හෙට ප.ව. 12:00ට', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'අද පෙ.ව. 11:00ට', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ඊයේ ප.ව. 12:00ට', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd LT[ට]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd LT[ට]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd LT[ට]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[පසුගිය] dddd LT[ට]'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[පසුගිය] dddd LT[ට]'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[පසුගිය] dddd LT[ට]'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sk');
+
+test('parse', function (assert) {
+ var tests = 'január jan._február feb._marec mar._apríl apr._máj máj_jún jún._júl júl._august aug._september sep._október okt._november nov._december dec.'.split('_'), i;
+ function equalTest(input, mmm, monthIndex) {
+ assert.equal(moment(input, mmm).month(), monthIndex, input + ' should be month ' + (monthIndex + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss', 'nedeľa, február 14. 2010, 3:25:50'],
+ ['ddd, h', 'ne, 3'],
+ ['M Mo MM MMMM MMM', '2 2. 02 február feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. nedeľa ne ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['DDDo [deň v roku]', '45. deň v roku'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. február 2010'],
+ ['LLL', '14. február 2010 15:25'],
+ ['LLLL', 'nedeľa 14. február 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb 2010'],
+ ['lll', '14. feb 2010 15:25'],
+ ['llll', 'ne 14. feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'január jan_február feb_marec mar_apríl apr_máj máj_jún jún_júl júl_august aug_september sep_október okt_november nov_december dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'nedeľa ne ne_pondelok po po_utorok ut ut_streda st st_štvrtok št št_piatok pi pi_sobota so so'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'pár sekúnd', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minúta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minúta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minúty', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minút', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'hodina', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'hodina', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 hodiny', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 hodín', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 hodín', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'deň', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'deň', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dni', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'deň', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dní', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dní', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mesiac', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mesiac', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mesiac', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesiace', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesiace', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesiace', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mesiac', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesiacov', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'rok', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 roky', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'rok', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 rokov', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za pár sekúnd', 'prefix');
+ assert.equal(moment(0).from(30000), 'pred pár sekundami', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'pred pár sekundami', 'now from now should display as in the past');
+});
+
+test('fromNow (future)', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za pár sekúnd', 'in a few seconds');
+ assert.equal(moment().add({m: 1}).fromNow(), 'za minútu', 'in a minute');
+ assert.equal(moment().add({m: 3}).fromNow(), 'za 3 minúty', 'in 3 minutes');
+ assert.equal(moment().add({m: 10}).fromNow(), 'za 10 minút', 'in 10 minutes');
+ assert.equal(moment().add({h: 1}).fromNow(), 'za hodinu', 'in an hour');
+ assert.equal(moment().add({h: 3}).fromNow(), 'za 3 hodiny', 'in 3 hours');
+ assert.equal(moment().add({h: 10}).fromNow(), 'za 10 hodín', 'in 10 hours');
+ assert.equal(moment().add({d: 1}).fromNow(), 'za deň', 'in a day');
+ assert.equal(moment().add({d: 3}).fromNow(), 'za 3 dni', 'in 3 days');
+ assert.equal(moment().add({d: 10}).fromNow(), 'za 10 dní', 'in 10 days');
+ assert.equal(moment().add({M: 1}).fromNow(), 'za mesiac', 'in a month');
+ assert.equal(moment().add({M: 3}).fromNow(), 'za 3 mesiace', 'in 3 months');
+ assert.equal(moment().add({M: 10}).fromNow(), 'za 10 mesiacov', 'in 10 months');
+ assert.equal(moment().add({y: 1}).fromNow(), 'za rok', 'in a year');
+ assert.equal(moment().add({y: 3}).fromNow(), 'za 3 roky', 'in 3 years');
+ assert.equal(moment().add({y: 10}).fromNow(), 'za 10 rokov', 'in 10 years');
+});
+
+test('fromNow (past)', function (assert) {
+ assert.equal(moment().subtract({s: 30}).fromNow(), 'pred pár sekundami', 'a few seconds ago');
+ assert.equal(moment().subtract({m: 1}).fromNow(), 'pred minútou', 'a minute ago');
+ assert.equal(moment().subtract({m: 3}).fromNow(), 'pred 3 minútami', '3 minutes ago');
+ assert.equal(moment().subtract({m: 10}).fromNow(), 'pred 10 minútami', '10 minutes ago');
+ assert.equal(moment().subtract({h: 1}).fromNow(), 'pred hodinou', 'an hour ago');
+ assert.equal(moment().subtract({h: 3}).fromNow(), 'pred 3 hodinami', '3 hours ago');
+ assert.equal(moment().subtract({h: 10}).fromNow(), 'pred 10 hodinami', '10 hours ago');
+ assert.equal(moment().subtract({d: 1}).fromNow(), 'pred dňom', 'a day ago');
+ assert.equal(moment().subtract({d: 3}).fromNow(), 'pred 3 dňami', '3 days ago');
+ assert.equal(moment().subtract({d: 10}).fromNow(), 'pred 10 dňami', '10 days ago');
+ assert.equal(moment().subtract({M: 1}).fromNow(), 'pred mesiacom', 'a month ago');
+ assert.equal(moment().subtract({M: 3}).fromNow(), 'pred 3 mesiacmi', '3 months ago');
+ assert.equal(moment().subtract({M: 10}).fromNow(), 'pred 10 mesiacmi', '10 months ago');
+ assert.equal(moment().subtract({y: 1}).fromNow(), 'pred rokom', 'a year ago');
+ assert.equal(moment().subtract({y: 3}).fromNow(), 'pred 3 rokmi', '3 years ago');
+ assert.equal(moment().subtract({y: 10}).fromNow(), 'pred 10 rokmi', '10 years ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'dnes o 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'dnes o 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'dnes o 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'zajtra o 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'dnes o 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'včera o 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m, nextDay;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ nextDay = '';
+ switch (m.day()) {
+ case 0:
+ nextDay = 'v nedeľu';
+ break;
+ case 1:
+ nextDay = 'v pondelok';
+ break;
+ case 2:
+ nextDay = 'v utorok';
+ break;
+ case 3:
+ nextDay = 'v stredu';
+ break;
+ case 4:
+ nextDay = 'vo štvrtok';
+ break;
+ case 5:
+ nextDay = 'v piatok';
+ break;
+ case 6:
+ nextDay = 'v sobotu';
+ break;
+ }
+ assert.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[' + nextDay + '] [o] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m, lastDay;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ lastDay = '';
+ switch (m.day()) {
+ case 0:
+ lastDay = 'minulú nedeľu';
+ break;
+ case 1:
+ lastDay = 'minulý pondelok';
+ break;
+ case 2:
+ lastDay = 'minulý utorok';
+ break;
+ case 3:
+ lastDay = 'minulú stredu';
+ break;
+ case 4:
+ lastDay = 'minulý štvrtok';
+ break;
+ case 5:
+ lastDay = 'minulý piatok';
+ break;
+ case 6:
+ lastDay = 'minulú sobotu';
+ break;
+ }
+ assert.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[' + lastDay + '] [o] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('humanize duration', function (assert) {
+ assert.equal(moment.duration(1, 'minutes').humanize(), 'minúta', 'a minute (future)');
+ assert.equal(moment.duration(1, 'minutes').humanize(true), 'za minútu', 'in a minute');
+ assert.equal(moment.duration(-1, 'minutes').humanize(), 'minúta', 'a minute (past)');
+ assert.equal(moment.duration(-1, 'minutes').humanize(true), 'pred minútou', 'a minute ago');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sl');
+
+test('parse', function (assert) {
+ var tests = 'januar jan._februar feb._marec mar._april apr._maj maj_junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ned., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. nedelja ned. ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 15:25'],
+ ['LLLL', 'nedelja, 14. februar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb. 2010'],
+ ['lll', '14. feb. 2010 15:25'],
+ ['llll', 'ned., 14. feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan._februar feb._marec mar._april apr._maj maj._junij jun._julij jul._avgust avg._september sep._oktober okt._november nov._december dec.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'nedelja ned. ne_ponedeljek pon. po_torek tor. to_sreda sre. sr_četrtek čet. če_petek pet. pe_sobota sob. so'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nekaj sekund', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ena minuta', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ena minuta', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuti', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minut', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ena ura', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ena ura', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 uri', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ur', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ur', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dan', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dan', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dni', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dan', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dni', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dni', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en mesec', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en mesec', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en mesec', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meseca', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meseca', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesece', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en mesec', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesecev', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'eno leto', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 leti', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eno leto', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 let', '5 years = 5 years');
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 1}), true), 'ena minuta', 'a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 2}), true), '2 minuti', '2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 3}), true), '3 minute', '3 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 4}), true), '4 minute', '4 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 5}), true), '5 minut', '5 minutes');
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 1}), true), 'ena ura', 'an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 2}), true), '2 uri', '2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 3}), true), '3 ure', '3 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 4}), true), '4 ure', '4 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ur', '5 hours');
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dan', 'a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 2}), true), '2 dni', '2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 3}), true), '3 dni', '3 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 4}), true), '4 dni', '4 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dni', '5 days');
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en mesec', 'a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 2}), true), '2 meseca', '2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 3}), true), '3 mesece', '3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 4}), true), '4 mesece', '4 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesecev', '5 months');
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'eno leto', 'a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 2}), true), '2 leti', '2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 3}), true), '3 leta', '3 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 4}), true), '4 leta', '4 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 let', '5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'čez nekaj sekund', 'prefix');
+ assert.equal(moment(0).from(30000), 'pred nekaj sekundami', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'pred nekaj sekundami', 'now from now should display as in the past');
+});
+
+test('fromNow (future)', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'čez nekaj sekund', 'in a few seconds');
+ assert.equal(moment().add({m: 1}).fromNow(), 'čez eno minuto', 'in a minute');
+ assert.equal(moment().add({m: 2}).fromNow(), 'čez 2 minuti', 'in 2 minutes');
+ assert.equal(moment().add({m: 3}).fromNow(), 'čez 3 minute', 'in 3 minutes');
+ assert.equal(moment().add({m: 4}).fromNow(), 'čez 4 minute', 'in 4 minutes');
+ assert.equal(moment().add({m: 5}).fromNow(), 'čez 5 minut', 'in 5 minutes');
+
+ assert.equal(moment().add({h: 1}).fromNow(), 'čez eno uro', 'in an hour');
+ assert.equal(moment().add({h: 2}).fromNow(), 'čez 2 uri', 'in 2 hours');
+ assert.equal(moment().add({h: 3}).fromNow(), 'čez 3 ure', 'in 3 hours');
+ assert.equal(moment().add({h: 4}).fromNow(), 'čez 4 ure', 'in 4 hours');
+ assert.equal(moment().add({h: 5}).fromNow(), 'čez 5 ur', 'in 5 hours');
+
+ assert.equal(moment().add({d: 1}).fromNow(), 'čez en dan', 'in a day');
+ assert.equal(moment().add({d: 2}).fromNow(), 'čez 2 dni', 'in 2 days');
+ assert.equal(moment().add({d: 3}).fromNow(), 'čez 3 dni', 'in 3 days');
+ assert.equal(moment().add({d: 4}).fromNow(), 'čez 4 dni', 'in 4 days');
+ assert.equal(moment().add({d: 5}).fromNow(), 'čez 5 dni', 'in 5 days');
+
+ assert.equal(moment().add({M: 1}).fromNow(), 'čez en mesec', 'in a month');
+ assert.equal(moment().add({M: 2}).fromNow(), 'čez 2 meseca', 'in 2 months');
+ assert.equal(moment().add({M: 3}).fromNow(), 'čez 3 mesece', 'in 3 months');
+ assert.equal(moment().add({M: 4}).fromNow(), 'čez 4 mesece', 'in 4 months');
+ assert.equal(moment().add({M: 5}).fromNow(), 'čez 5 mesecev', 'in 5 months');
+
+ assert.equal(moment().add({y: 1}).fromNow(), 'čez eno leto', 'in a year');
+ assert.equal(moment().add({y: 2}).fromNow(), 'čez 2 leti', 'in 2 years');
+ assert.equal(moment().add({y: 3}).fromNow(), 'čez 3 leta', 'in 3 years');
+ assert.equal(moment().add({y: 4}).fromNow(), 'čez 4 leta', 'in 4 years');
+ assert.equal(moment().add({y: 5}).fromNow(), 'čez 5 let', 'in 5 years');
+
+ assert.equal(moment().subtract({s: 30}).fromNow(), 'pred nekaj sekundami', 'a few seconds ago');
+
+ assert.equal(moment().subtract({m: 1}).fromNow(), 'pred eno minuto', 'a minute ago');
+ assert.equal(moment().subtract({m: 2}).fromNow(), 'pred 2 minutama', '2 minutes ago');
+ assert.equal(moment().subtract({m: 3}).fromNow(), 'pred 3 minutami', '3 minutes ago');
+ assert.equal(moment().subtract({m: 4}).fromNow(), 'pred 4 minutami', '4 minutes ago');
+ assert.equal(moment().subtract({m: 5}).fromNow(), 'pred 5 minutami', '5 minutes ago');
+
+ assert.equal(moment().subtract({h: 1}).fromNow(), 'pred eno uro', 'an hour ago');
+ assert.equal(moment().subtract({h: 2}).fromNow(), 'pred 2 urama', '2 hours ago');
+ assert.equal(moment().subtract({h: 3}).fromNow(), 'pred 3 urami', '3 hours ago');
+ assert.equal(moment().subtract({h: 4}).fromNow(), 'pred 4 urami', '4 hours ago');
+ assert.equal(moment().subtract({h: 5}).fromNow(), 'pred 5 urami', '5 hours ago');
+
+ assert.equal(moment().subtract({d: 1}).fromNow(), 'pred enim dnem', 'a day ago');
+ assert.equal(moment().subtract({d: 2}).fromNow(), 'pred 2 dnevoma', '2 days ago');
+ assert.equal(moment().subtract({d: 3}).fromNow(), 'pred 3 dnevi', '3 days ago');
+ assert.equal(moment().subtract({d: 4}).fromNow(), 'pred 4 dnevi', '4 days ago');
+ assert.equal(moment().subtract({d: 5}).fromNow(), 'pred 5 dnevi', '5 days ago');
+
+ assert.equal(moment().subtract({M: 1}).fromNow(), 'pred enim mesecem', 'a month ago');
+ assert.equal(moment().subtract({M: 2}).fromNow(), 'pred 2 mesecema', '2 months ago');
+ assert.equal(moment().subtract({M: 3}).fromNow(), 'pred 3 meseci', '3 months ago');
+ assert.equal(moment().subtract({M: 4}).fromNow(), 'pred 4 meseci', '4 months ago');
+ assert.equal(moment().subtract({M: 5}).fromNow(), 'pred 5 meseci', '5 months ago');
+
+ assert.equal(moment().subtract({y: 1}).fromNow(), 'pred enim letom', 'a year ago');
+ assert.equal(moment().subtract({y: 2}).fromNow(), 'pred 2 letoma', '2 years ago');
+ assert.equal(moment().subtract({y: 3}).fromNow(), 'pred 3 leti', '3 years ago');
+ assert.equal(moment().subtract({y: 4}).fromNow(), 'pred 4 leti', '4 years ago');
+ assert.equal(moment().subtract({y: 5}).fromNow(), 'pred 5 leti', '5 years ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'danes ob 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'danes ob 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'danes ob 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'jutri ob 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'danes ob 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'včeraj ob 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sq');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, HH:mm:ss', 'E Diel, Shkurt 14. 2010, 15:25:50'],
+ ['ddd, HH', 'Die, 15'],
+ ['M Mo MM MMMM MMM', '2 2. 02 Shkurt Shk'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. E Diel Die D'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'MD MD'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Shkurt 2010'],
+ ['LLL', '14 Shkurt 2010 15:25'],
+ ['LLLL', 'E Diel, 14 Shkurt 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Shk 2010'],
+ ['lll', '14 Shk 2010 15:25'],
+ ['llll', 'Die, 14 Shk 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), 'PD', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), 'MD', 'noon');
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'Janar Jan_Shkurt Shk_Mars Mar_Prill Pri_Maj Maj_Qershor Qer_Korrik Kor_Gusht Gus_Shtator Sht_Tetor Tet_Nëntor Nën_Dhjetor Dhj'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'E Diel Die D_E Hënë Hën H_E Martë Mar Ma_E Mërkurë Mër Më_E Enjte Enj E_E Premte Pre P_E Shtunë Sht Sh'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'disa sekonda', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'një minutë', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'një minutë', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuta', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'një orë', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'një orë', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 orë', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 orë', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 orë', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'një ditë', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'një ditë', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ditë', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'një ditë', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ditë', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ditë', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'një muaj', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'një muaj', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'një muaj', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 muaj', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 muaj', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 muaj', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'një muaj', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 muaj', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'një vit', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 vite', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'një vit', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 vite', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'në disa sekonda', 'prefix');
+ assert.equal(moment(0).from(30000), 'disa sekonda më parë', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'disa sekonda më parë', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'në disa sekonda', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'në 5 ditë', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Sot në 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Sot në 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Sot në 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Nesër në 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Sot në 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Dje në 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [në] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [në] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [në] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [e kaluar në] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sr-cyrl');
+
+test('parse', function (assert) {
+ var tests = 'јануар јан._фебруар феб._март мар._април апр._мај мај_јун јун_јул јул_август авг._септембар сеп._октобар окт._новембар нов._децембар дец.'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'недеља, 14. фебруар 2010, 3:25:50 pm'],
+ ['ddd, hA', 'нед., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 фебруар феб.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. недеља нед. не'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. фебруар 2010'],
+ ['LLL', '14. фебруар 2010 15:25'],
+ ['LLLL', 'недеља, 14. фебруар 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. феб. 2010'],
+ ['lll', '14. феб. 2010 15:25'],
+ ['llll', 'нед., 14. феб. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'јануар јан._фебруар феб._март мар._април апр._мај мај_јун јун_јул јул_август авг._септембар сеп._октобар окт._новембар нов._децембар дец.'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'недеља нед. не_понедељак пон. по_уторак уто. ут_среда сре. ср_четвртак чет. че_петак пет. пе_субота суб. су'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'неколико секунди', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'један минут', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'један минут', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 минуте', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 минута', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'један сат', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'један сат', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 сата', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 сати', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 сати', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'дан', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'дан', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дана', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'дан', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 дана', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 дана', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'месец', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'месец', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'месец', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 месеца', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 месеца', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 месеца', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'месец', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 месеци', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'годину', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 године', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'годину', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 година', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'за неколико секунди', 'prefix');
+ assert.equal(moment(0).from(30000), 'пре неколико секунди', 'prefix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'пре неколико секунди', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'за неколико секунди', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'за 5 дана', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'данас у 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'данас у 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'данас у 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'сутра у 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'данас у 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'јуче у 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ var lastWeekDay = [
+ '[прошле] [недеље] [у] LT',
+ '[прошлог] [понедељка] [у] LT',
+ '[прошлог] [уторка] [у] LT',
+ '[прошле] [среде] [у] LT',
+ '[прошлог] [четвртка] [у] LT',
+ '[прошлог] [петка] [у] LT',
+ '[прошле] [суботе] [у] LT'
+ ];
+
+ return lastWeekDay[d.day()];
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sr');
+
+test('parse', function (assert) {
+ var tests = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'nedelja, 14. februar 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ned., 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 februar feb.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. nedelja ned. ne'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '7 7. 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. februar 2010'],
+ ['LLL', '14. februar 2010 15:25'],
+ ['LLLL', 'nedelja, 14. februar 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. feb. 2010'],
+ ['lll', '14. feb. 2010 15:25'],
+ ['llll', 'ned., 14. feb. 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'januar jan._februar feb._mart mar._april apr._maj maj_jun jun_jul jul_avgust avg._septembar sep._oktobar okt._novembar nov._decembar dec.'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'nedelja ned. ne_ponedeljak pon. po_utorak uto. ut_sreda sre. sr_četvrtak čet. če_petak pet. pe_subota sub. su'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'nekoliko sekundi', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'jedan minut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'jedan minut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minute', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuta', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'jedan sat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'jedan sat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 sata', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 sati', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 sati', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'dan', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'dan', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dana', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'dan', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dana', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dana', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mesec', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mesec', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mesec', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 meseca', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 meseca', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 meseca', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mesec', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 meseci', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'godinu', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 godine', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'godinu', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 godina', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'za nekoliko sekundi', 'prefix');
+ assert.equal(moment(0).from(30000), 'pre nekoliko sekundi', 'prefix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'pre nekoliko sekundi', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'za nekoliko sekundi', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'za 5 dana', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'danas u 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'danas u 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'danas u 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'sutra u 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'danas u 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'juče u 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ var lastWeekDay = [
+ '[prošle] [nedelje] [u] LT',
+ '[prošlog] [ponedeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+
+ return lastWeekDay[d.day()];
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1.', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1.', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2.', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2.', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3.', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ss');
+
+test('parse', function (assert) {
+ var tests = "Bhimbidvwane Bhi_Indlovana Ina_Indlov'lenkhulu Inu_Mabasa Mab_Inkhwekhweti Ink_Inhlaba Inh_Kholwane Kho_Ingci Igc_Inyoni Iny_Imphala Imp_Lweti lwe_Ingongoni Igo".split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('parse meridiem', function (assert) {
+ var i,
+ b = moment(),
+ meridiemTests = [
+ // h a patterns, expected hours, isValid
+ ['10 ekuseni', 10, true],
+ ['11 emini', 11, true],
+ ['3 entsambama', 15, true],
+ ['4 entsambama', 16, true],
+ ['6 entsambama', 18, true],
+ ['7 ebusuku', 19, true],
+ ['12 ebusuku', 0, true],
+ ['10 am', 10, false],
+ ['10 pm', 10, false]
+ ],
+ parsed;
+
+ // test that a formatted moment including meridiem string can be parsed back to the same moment
+ assert.ok(b.isSame(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'ss', true), 'seconds'), b.format('h:mm:ss a') + ' should be equal to ' + moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'ss', true).format('h:mm:ss a'));
+
+ // test that a formatted moment having a meridiem string can be parsed with strict flag
+ assert.ok(moment(b.format('h:mm:ss a'), 'h:mm:ss a', 'ss', true).isValid(), b.format('h:mm:ss a') + ' should be parsed as valid');
+
+ for (i = 0; i < meridiemTests.length; i++) {
+ parsed = moment(meridiemTests[i][0], 'h a', 'ss', true);
+ assert.equal(parsed.isValid(), meridiemTests[i][2], 'validity for ' + meridiemTests[i][0]);
+ if (parsed.isValid()) {
+ assert.equal(parsed.hours(), meridiemTests[i][1], 'hours for ' + meridiemTests[i][0]);
+ }
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Lisontfo, Indlovana 14 2010, 3:25:50 entsambama'],
+ ['ddd, h A', 'Lis, 3 entsambama'],
+ ['M Mo MM MMMM MMM', '2 2 02 Indlovana Ina'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Lisontfo Lis Li'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '6 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'entsambama entsambama'],
+ ['[Lilanga] DDDo [lilanga lelinyaka]', 'Lilanga 45 lilanga lelinyaka'],
+ ['LTS', '3:25:50 entsambama'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Indlovana 2010'],
+ ['LLL', '14 Indlovana 2010 3:25 entsambama'],
+ ['LLLL', 'Lisontfo, 14 Indlovana 2010 3:25 entsambama'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Ina 2010'],
+ ['lll', '14 Ina 2010 3:25 entsambama'],
+ ['llll', 'Lis, 14 Ina 2010 3:25 entsambama']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = "Bhimbidvwane Bhi_Indlovana Ina_Indlov'lenkhulu Inu_Mabasa Mab_Inkhwekhweti Ink_Inhlaba Inh_Kholwane Kho_Ingci Igc_Inyoni Iny_Imphala Imp_Lweti Lwe_Ingongoni Igo".split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Lisontfo Lis Li_Umsombuluko Umb Us_Lesibili Lsb Lb_Lesitsatfu Les Lt_Lesine Lsi Ls_Lesihlanu Lsh Lh_Umgcibelo Umg Ug'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'emizuzwana lomcane', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'umzuzu', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'umzuzu', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 emizuzu', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 emizuzu', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'lihora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'lihora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 emahora', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 emahora', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 emahora', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'lilanga', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'lilanga', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 emalanga', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'lilanga', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 emalanga', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 emalanga', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'inyanga', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'inyanga', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'inyanga', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 tinyanga', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 tinyanga', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 tinyanga', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'inyanga', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 tinyanga', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'umnyaka', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 iminyaka', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'umnyaka', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 iminyaka', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'nga emizuzwana lomcane', 'prefix');
+ assert.equal(moment(0).from(30000), 'wenteka nga emizuzwana lomcane', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'wenteka nga emizuzwana lomcane', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'nga emizuzwana lomcane', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'nga 5 emalanga', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Namuhla nga 12:00 emini', 'Today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Namuhla nga 12:25 emini', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Namuhla nga 1:00 emini', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Kusasa nga 12:00 emini', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Namuhla nga 11:00 emini', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Itolo nga 12:00 emini', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [nga] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [nga] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [nga] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [leliphelile] [nga] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [leliphelile] [nga] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [leliphelile] [nga] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 4 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sv');
+
+test('parse', function (assert) {
+ var tests = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'söndag, februari 14e 2010, 3:25:50 pm'],
+ ['ddd, hA', 'sön, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2a 02 februari feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14e 14'],
+ ['d do dddd ddd dd', '0 0e söndag sön sö'],
+ ['DDD DDDo DDDD', '45 45e 045'],
+ ['w wo ww', '6 6e 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45e day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '2010-02-14'],
+ ['LL', '14 februari 2010'],
+ ['LLL', '14 februari 2010 kl. 15:25'],
+ ['LLLL', 'söndag 14 februari 2010 kl. 15:25'],
+ ['l', '2010-2-14'],
+ ['ll', '14 feb 2010'],
+ ['lll', '14 feb 2010 15:25'],
+ ['llll', 'sön 14 feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1a', '1a');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2a', '2a');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3e', '3e');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4e', '4e');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5e', '5e');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6e', '6e');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7e', '7e');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8e', '8e');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9e', '9e');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10e', '10e');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11e', '11e');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12e', '12e');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13e', '13e');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14e', '14e');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15e', '15e');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16e', '16e');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17e', '17e');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18e', '18e');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19e', '19e');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20e', '20e');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21a', '21a');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22a', '22a');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23e', '23e');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24e', '24e');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25e', '25e');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26e', '26e');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27e', '27e');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28e', '28e');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29e', '29e');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30e', '30e');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31a', '31a');
+});
+
+test('format month', function (assert) {
+ var expected = 'januari jan_februari feb_mars mar_april apr_maj maj_juni jun_juli jul_augusti aug_september sep_oktober okt_november nov_december dec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'söndag sön sö_måndag mån må_tisdag tis ti_onsdag ons on_torsdag tor to_fredag fre fr_lördag lör lö'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'några sekunder', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'en minut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'en minut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuter', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuter', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'en timme', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'en timme', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 timmar', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 timmar', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 timmar', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'en dag', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'en dag', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 dagar', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'en dag', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 dagar', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 dagar', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'en månad', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'en månad', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'en månad', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 månader', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 månader', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 månader', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'en månad', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 månader', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ett år', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 år', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ett år', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 år', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'om några sekunder', 'prefix');
+ assert.equal(moment(0).from(30000), 'för några sekunder sedan', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'för några sekunder sedan', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'om några sekunder', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'om 5 dagar', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Idag 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Idag 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Idag 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Imorgon 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Idag 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Igår 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[På] dddd LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[På] dddd LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[På] dddd LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[I] dddd[s] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[I] dddd[s] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[I] dddd[s] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52a', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1a', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1a', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2a', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2a', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('sw');
+
+test('parse', function (assert) {
+ var tests = 'Januari Jan_Februari Feb_Machi Mac_Aprili Apr_Mei Mei_Juni Jun_Julai Jul_Agosti Ago_Septemba Sep_Oktoba Okt_Novemba Nov_Desemba Des'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Jumapili, Februari 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Jpl, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 Februari Feb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Jumapili Jpl J2'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[siku] DDDo [ya mwaka]', 'siku 45 ya mwaka'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 Februari 2010'],
+ ['LLL', '14 Februari 2010 15:25'],
+ ['LLLL', 'Jumapili, 14 Februari 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 Feb 2010'],
+ ['lll', '14 Feb 2010 15:25'],
+ ['llll', 'Jpl, 14 Feb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'Januari Jan_Februari Feb_Machi Mac_Aprili Apr_Mei Mei_Juni Jun_Julai Jul_Agosti Ago_Septemba Sep_Oktoba Okt_Novemba Nov_Desemba Des'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Jumapili Jpl J2_Jumatatu Jtat J3_Jumanne Jnne J4_Jumatano Jtan J5_Alhamisi Alh Al_Ijumaa Ijm Ij_Jumamosi Jmos J1'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'hivi punde', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'dakika moja', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'dakika moja', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'dakika 2', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'dakika 44', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'saa limoja', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'saa limoja', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'masaa 2', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'masaa 5', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'masaa 21', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'siku moja', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'siku moja', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'masiku 2', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'siku moja', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'masiku 5', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'masiku 25', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'mwezi mmoja', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'mwezi mmoja', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'mwezi mmoja', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'miezi 2', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'miezi 2', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'miezi 3', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'mwezi mmoja', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'miezi 5', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'mwaka mmoja', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'miaka 2', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'mwaka mmoja', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'miaka 5', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'hivi punde baadaye', 'prefix');
+ assert.equal(moment(0).from(30000), 'tokea hivi punde', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'tokea hivi punde', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'hivi punde baadaye', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'masiku 5 baadaye', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+ assert.equal(moment(a).calendar(), 'leo saa 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'leo saa 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'leo saa 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'kesho saa 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'leo saa 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'jana 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[wiki ijayo] dddd [saat] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[wiki ijayo] dddd [saat] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[wiki ijayo] dddd [saat] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[wiki iliyopita] dddd [saat] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[wiki iliyopita] dddd [saat] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[wiki iliyopita] dddd [saat] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('ta');
+
+test('parse', function (assert) {
+ var tests = 'ஜனவரி ஜனவரி_பிப்ரவரி பிப்ரவரி_மார்ச் மார்ச்_ஏப்ரல் ஏப்ரல்_மே மே_ஜூன் ஜூன்_ஜூலை ஜூலை_ஆகஸ்ட் ஆகஸ்ட்_செப்டெம்பர் செப்டெம்பர்_அக்டோபர் அக்டோபர்_நவம்பர் நவம்பர்_டிசம்பர் டிசம்பர்'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'ஞாயிற்றுக்கிழமை, பிப்ரவரி ௧௪வது ௨௦௧௦, ௩:௨௫:௫௦ எற்பாடு'],
+ ['ddd, hA', 'ஞாயிறு, ௩ எற்பாடு'],
+ ['M Mo MM MMMM MMM', '௨ ௨வது ௦௨ பிப்ரவரி பிப்ரவரி'],
+ ['YYYY YY', '௨௦௧௦ ௧௦'],
+ ['D Do DD', '௧௪ ௧௪வது ௧௪'],
+ ['d do dddd ddd dd', '௦ ௦வது ஞாயிற்றுக்கிழமை ஞாயிறு ஞா'],
+ ['DDD DDDo DDDD', '௪௫ ௪௫வது ௦௪௫'],
+ ['w wo ww', '௮ ௮வது ௦௮'],
+ ['h hh', '௩ ௦௩'],
+ ['H HH', '௧௫ ௧௫'],
+ ['m mm', '௨௫ ௨௫'],
+ ['s ss', '௫௦ ௫௦'],
+ ['a A', ' எற்பாடு எற்பாடு'],
+ ['[ஆண்டின்] DDDo [நாள்]', 'ஆண்டின் ௪௫வது நாள்'],
+ ['LTS', '௧௫:௨௫:௫௦'],
+ ['L', '௧௪/௦௨/௨௦௧௦'],
+ ['LL', '௧௪ பிப்ரவரி ௨௦௧௦'],
+ ['LLL', '௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'],
+ ['LLLL', 'ஞாயிற்றுக்கிழமை, ௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'],
+ ['l', '௧௪/௨/௨௦௧௦'],
+ ['ll', '௧௪ பிப்ரவரி ௨௦௧௦'],
+ ['lll', '௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫'],
+ ['llll', 'ஞாயிறு, ௧௪ பிப்ரவரி ௨௦௧௦, ௧௫:௨௫']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '௧வது', '௧வது');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '௨வது', '௨வது');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '௩வது', '௩வது');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '௪வது', '௪வது');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '௫வது', '௫வது');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '௬வது', '௬வது');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '௭வது', '௭வது');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '௮வது', '௮வது');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '௯வது', '௯வது');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '௧௦வது', '௧௦வது');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '௧௧வது', '௧௧வது');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '௧௨வது', '௧௨வது');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '௧௩வது', '௧௩வது');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '௧௪வது', '௧௪வது');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '௧௫வது', '௧௫வது');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '௧௬வது', '௧௬வது');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '௧௭வது', '௧௭வது');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '௧௮வது', '௧௮வது');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '௧௯வது', '௧௯வது');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '௨௦வது', '௨௦வது');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '௨௧வது', '௨௧வது');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '௨௨வது', '௨௨வது');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '௨௩வது', '௨௩வது');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '௨௪வது', '௨௪வது');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '௨௫வது', '௨௫வது');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '௨௬வது', '௨௬வது');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '௨௭வது', '௨௭வது');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '௨௮வது', '௨௮வது');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '௨௯வது', '௨௯வது');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '௩௦வது', '௩௦வது');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '௩௧வது', '௩௧வது');
+});
+
+test('format month', function (assert) {
+ var expected = 'ஜனவரி ஜனவரி_பிப்ரவரி பிப்ரவரி_மார்ச் மார்ச்_ஏப்ரல் ஏப்ரல்_மே மே_ஜூன் ஜூன்_ஜூலை ஜூலை_ஆகஸ்ட் ஆகஸ்ட்_செப்டெம்பர் செப்டெம்பர்_அக்டோபர் அக்டோபர்_நவம்பர் நவம்பர்_டிசம்பர் டிசம்பர்'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ஞாயிற்றுக்கிழமை ஞாயிறு ஞா_திங்கட்கிழமை திங்கள் தி_செவ்வாய்கிழமை செவ்வாய் செ_புதன்கிழமை புதன் பு_வியாழக்கிழமை வியாழன் வி_வெள்ளிக்கிழமை வெள்ளி வெ_சனிக்கிழமை சனி ச'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ஒரு சில விநாடிகள்', '44 விநாடிகள் = ஒரு சில விநாடிகள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ஒரு நிமிடம்', '45 விநாடிகள் = ஒரு நிமிடம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ஒரு நிமிடம்', '89 விநாடிகள் = ஒரு நிமிடம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '௨ நிமிடங்கள்', '90 விநாடிகள் = ௨ நிமிடங்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '௪௪ நிமிடங்கள்', '44 நிமிடங்கள் = 44 நிமிடங்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ஒரு மணி நேரம்', '45 நிமிடங்கள் = ஒரு மணி நேரம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ஒரு மணி நேரம்', '89 நிமிடங்கள் = ஒரு மணி நேரம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '௨ மணி நேரம்', '90 நிமிடங்கள் = ௨ மணி நேரம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '௫ மணி நேரம்', '5 மணி நேரம் = 5 மணி நேரம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '௨௧ மணி நேரம்', '௨௧ மணி நேரம் = ௨௧ மணி நேரம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ஒரு நாள்', '௨௨ மணி நேரம் = ஒரு நாள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ஒரு நாள்', '௩5 மணி நேரம் = ஒரு நாள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '௨ நாட்கள்', '௩6 மணி நேரம் = ௨ days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ஒரு நாள்', '௧ நாள் = ஒரு நாள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '௫ நாட்கள்', '5 நாட்கள் = 5 நாட்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '௨௫ நாட்கள்', '௨5 நாட்கள் = ௨5 நாட்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ஒரு மாதம்', '௨6 நாட்கள் = ஒரு மாதம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ஒரு மாதம்', '௩0 நாட்கள் = ஒரு மாதம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ஒரு மாதம்', '45 நாட்கள் = ஒரு மாதம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '௨ மாதங்கள்', '46 நாட்கள் = ௨ மாதங்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '௨ மாதங்கள்', '75 நாட்கள் = ௨ மாதங்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '௩ மாதங்கள்', '76 நாட்கள் = ௩ மாதங்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ஒரு மாதம்', '௧ மாதம் = ஒரு மாதம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '௫ மாதங்கள்', '5 மாதங்கள் = 5 மாதங்கள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ஒரு வருடம்', '௩45 நாட்கள் = ஒரு வருடம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '௨ ஆண்டுகள்', '548 நாட்கள் = ௨ ஆண்டுகள்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ஒரு வருடம்', '௧ வருடம் = ஒரு வருடம்');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '௫ ஆண்டுகள்', '5 ஆண்டுகள் = 5 ஆண்டுகள்');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ஒரு சில விநாடிகள் இல்', 'prefix');
+ assert.equal(moment(0).from(30000), 'ஒரு சில விநாடிகள் முன்', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ஒரு சில விநாடிகள் முன்', 'இப்போது இருந்து கடந்த காலத்தில் காட்ட வேண்டும்');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ஒரு சில விநாடிகள் இல்', 'ஒரு சில விநாடிகள் இல்');
+ assert.equal(moment().add({d: 5}).fromNow(), '௫ நாட்கள் இல்', '5 நாட்கள் இல்');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'இன்று ௧௨:௦௦', 'இன்று 12:00');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'இன்று ௧௨:௨௫', 'இன்று 12:25');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'இன்று ௧௩:௦௦', 'இன்று 13:00');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'நாளை ௧௨:௦௦', 'நாளை 12:00');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'இன்று ௧௧:௦௦', 'இன்று 11:00');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'நேற்று ௧௨:௦௦', 'நேற்று 12:00');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd, LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd, LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd, LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[கடந்த வாரம்] dddd, LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 0, 30]).format('a'), ' யாமம்', '(after) midnight');
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), ' வைகறை', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), ' காலை', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), ' எற்பாடு', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), ' எற்பாடு', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), ' மாலை', 'late evening');
+ assert.equal(moment([2011, 2, 23, 23, 30]).format('a'), ' யாமம்', '(before) midnight');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('te');
+
+test('parse', function (assert) {
+ var tests = 'జనవరి జన._ఫిబ్రవరి ఫిబ్ర._మార్చి మార్చి_ఏప్రిల్ ఏప్రి._మే మే_జూన్ జూన్_జూలై జూలై_ఆగస్టు ఆగ._సెప్టెంబర్ సెప్._అక్టోబర్ అక్టో._నవంబర్ నవ._డిసెంబర్ డిసె.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do తేదీ MMMM YYYY, a h:mm:ss', 'ఆదివారం, 14వ తేదీ ఫిబ్రవరి 2010, మధ్యాహ్నం 3:25:50'],
+ ['ddd, a h గంటలు', 'ఆది, మధ్యాహ్నం 3 గంటలు'],
+ ['M Mo నెల MM MMMM MMM', '2 2వ నెల 02 ఫిబ్రవరి ఫిబ్ర.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14వ 14'],
+ ['d do dddd ddd dd', '0 0వ ఆదివారం ఆది ఆ'],
+ ['DDD DDDo DDDD', '45 45వ 045'],
+ ['w wo ww', '8 8వ 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'మధ్యాహ్నం మధ్యాహ్నం'],
+ ['LTS', 'మధ్యాహ్నం 3:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 ఫిబ్రవరి 2010'],
+ ['LLL', '14 ఫిబ్రవరి 2010, మధ్యాహ్నం 3:25'],
+ ['LLLL', 'ఆదివారం, 14 ఫిబ్రవరి 2010, మధ్యాహ్నం 3:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 ఫిబ్ర. 2010'],
+ ['lll', '14 ఫిబ్ర. 2010, మధ్యాహ్నం 3:25'],
+ ['llll', 'ఆది, 14 ఫిబ్ర. 2010, మధ్యాహ్నం 3:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1వ', '1వ');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2వ', '2వ');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3వ', '3వ');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4వ', '4వ');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5వ', '5వ');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6వ', '6వ');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7వ', '7వ');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8వ', '8వ');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9వ', '9వ');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10వ', '10వ');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11వ', '11వ');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12వ', '12వ');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13వ', '13వ');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14వ', '14వ');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15వ', '15వ');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16వ', '16వ');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17వ', '17వ');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18వ', '18వ');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19వ', '19వ');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20వ', '20వ');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21వ', '21వ');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22వ', '22వ');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23వ', '23వ');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24వ', '24వ');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25వ', '25వ');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26వ', '26వ');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27వ', '27వ');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28వ', '28వ');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29వ', '29వ');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30వ', '30వ');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31వ', '31వ');
+});
+
+test('format month', function (assert) {
+ var expected = 'జనవరి జన._ఫిబ్రవరి ఫిబ్ర._మార్చి మార్చి_ఏప్రిల్ ఏప్రి._మే మే_జూన్ జూన్_జూలై జూలై_ఆగస్టు ఆగ._సెప్టెంబర్ సెప్._అక్టోబర్ అక్టో._నవంబర్ నవ._డిసెంబర్ డిసె.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ఆదివారం ఆది ఆ_సోమవారం సోమ సో_మంగళవారం మంగళ మం_బుధవారం బుధ బు_గురువారం గురు గు_శుక్రవారం శుక్ర శు_శనివారం శని శ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'కొన్ని క్షణాలు', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ఒక నిమిషం', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ఒక నిమిషం', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 నిమిషాలు', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 నిమిషాలు', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ఒక గంట', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ఒక గంట', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 గంటలు', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 గంటలు', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 గంటలు', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ఒక రోజు', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ఒక రోజు', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 రోజులు', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ఒక రోజు', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 రోజులు', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 రోజులు', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ఒక నెల', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ఒక నెల', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ఒక నెల', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 నెలలు', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 నెలలు', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 నెలలు', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ఒక నెల', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 నెలలు', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ఒక సంవత్సరం', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 సంవత్సరాలు', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ఒక సంవత్సరం', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 సంవత్సరాలు', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'కొన్ని క్షణాలు లో', 'prefix');
+ assert.equal(moment(0).from(30000), 'కొన్ని క్షణాలు క్రితం', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'కొన్ని క్షణాలు క్రితం', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'కొన్ని క్షణాలు లో', 'కొన్ని క్షణాలు లో');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 రోజులు లో', '5 రోజులు లో');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'నేడు మధ్యాహ్నం 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'నేడు మధ్యాహ్నం 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 3}).calendar(), 'నేడు మధ్యాహ్నం 3:00', 'Now plus 3 hours');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'రేపు మధ్యాహ్నం 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'నేడు మధ్యాహ్నం 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'నిన్న మధ్యాహ్నం 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[,] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[గత] dddd[,] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[గత] dddd[,] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[గత] dddd[,] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('a'), 'రాత్రి', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('a'), 'ఉదయం', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('a'), 'మధ్యాహ్నం', 'during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('a'), 'సాయంత్రం', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('a'), 'సాయంత్రం', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('a'), 'రాత్రి', 'night');
+
+ assert.equal(moment([2011, 2, 23, 2, 30]).format('A'), 'రాత్రి', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 9, 30]).format('A'), 'ఉదయం', 'morning');
+ assert.equal(moment([2011, 2, 23, 14, 30]).format('A'), 'మధ్యాహ్నం', ' during day');
+ assert.equal(moment([2011, 2, 23, 17, 30]).format('A'), 'సాయంత్రం', 'evening');
+ assert.equal(moment([2011, 2, 23, 19, 30]).format('A'), 'సాయంత్రం', 'late evening');
+ assert.equal(moment([2011, 2, 23, 21, 20]).format('A'), 'రాత్రి', 'night');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1వ', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1వ', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2వ', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2వ', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3వ', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tet');
+
+test('parse', function (assert) {
+ var tests = 'Janeiru Jan_Fevereiru Fev_Marsu Mar_Abril Abr_Maiu Mai_Juniu Jun_Juliu Jul_Augustu Aug_Setembru Set_Outubru Out_Novembru Nov_Dezembru Dez'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Domingu, Fevereiru 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Dom, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 Fevereiru Fev'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th Domingu Dom Do'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '6 6th 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Fevereiru 2010'],
+ ['LLL', '14 Fevereiru 2010 15:25'],
+ ['LLLL', 'Domingu, 14 Fevereiru 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Fev 2010'],
+ ['lll', '14 Fev 2010 15:25'],
+ ['llll', 'Dom, 14 Fev 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'Janeiru Jan_Fevereiru Fev_Marsu Mar_Abril Abr_Maiu Mai_Juniu Jun_Juliu Jul_Augustu Aug_Setembru Set_Outubru Out_Novembru Nov_Dezembru Dez'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Domingu Dom Do_Segunda Seg Seg_Tersa Ters Te_Kuarta Kua Ku_Kinta Kint Ki_Sexta Sext Sex_Sabadu Sab Sa'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'minutu balun', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minutu ida', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minutu ida', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'minutus 2', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'minutus 44', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'horas ida', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'horas ida', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'horas 2', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'horas 5', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'horas 21', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'loron ida', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'loron ida', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'loron 2', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'loron ida', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'loron 5', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'loron 25', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'fulan ida', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'fulan ida', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'fulan ida', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'fulan 2', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'fulan 2', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'fulan 3', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'fulan ida', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'fulan 5', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'tinan ida', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'tinan 2', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'tinan ida', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'tinan 5', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'iha minutu balun', 'prefix');
+ assert.equal(moment(0).from(30000), 'minutu balun liuba', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'minutu balun liuba', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'iha minutu balun', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'iha loron 5', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Ohin iha 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Ohin iha 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Ohin iha 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Aban iha 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Ohin iha 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Horiseik iha 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [iha] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [iha] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [iha] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [semana kotuk] [iha] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [semana kotuk] [iha] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [semana kotuk] [iha] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('th');
+
+test('parse', function (assert) {
+ var tests = 'มกราคม ม.ค._กุมภาพันธ์ ก.พ._มีนาคม มี.ค._เมษายน เม.ย._พฤษภาคม พ.ค._มิถุนายน มิ.ย._กรกฎาคม ก.ค._สิงหาคม ส.ค._กันยายน ก.ย._ตุลาคม ต.ค._พฤศจิกายน พ.ย._ธันวาคม ธ.ค.'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, h:mm:ss a', 'อาทิตย์, 14 กุมภาพันธ์ 2010, 3:25:50 หลังเที่ยง'],
+ ['ddd, h A', 'อาทิตย์, 3 หลังเที่ยง'],
+ ['M Mo MM MMMM MMM', '2 2 02 กุมภาพันธ์ ก.พ.'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 อาทิตย์ อาทิตย์ อา.'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'หลังเที่ยง หลังเที่ยง'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '2010/02/14'],
+ ['LL', '14 กุมภาพันธ์ 2010'],
+ ['LLL', '14 กุมภาพันธ์ 2010 เวลา 15:25'],
+ ['LLLL', 'วันอาทิตย์ที่ 14 กุมภาพันธ์ 2010 เวลา 15:25'],
+ ['l', '2010/2/14'],
+ ['ll', '14 ก.พ. 2010'],
+ ['lll', '14 ก.พ. 2010 เวลา 15:25'],
+ ['llll', 'วันอาทิตย์ที่ 14 ก.พ. 2010 เวลา 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = 'มกราคม ม.ค._กุมภาพันธ์ ก.พ._มีนาคม มี.ค._เมษายน เม.ย._พฤษภาคม พ.ค._มิถุนายน มิ.ย._กรกฎาคม ก.ค._สิงหาคม ส.ค._กันยายน ก.ย._ตุลาคม ต.ค._พฤศจิกายน พ.ย._ธันวาคม ธ.ค.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'อาทิตย์ อาทิตย์ อา._จันทร์ จันทร์ จ._อังคาร อังคาร อ._พุธ พุธ พ._พฤหัสบดี พฤหัส พฤ._ศุกร์ ศุกร์ ศ._เสาร์ เสาร์ ส.'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ไม่กี่วินาที', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 นาที', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 นาที', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 นาที', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 นาที', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 ชั่วโมง', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 ชั่วโมง', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ชั่วโมง', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ชั่วโมง', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ชั่วโมง', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 วัน', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 วัน', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 วัน', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 วัน', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 วัน', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 วัน', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 เดือน', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 เดือน', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 เดือน', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 เดือน', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 เดือน', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 เดือน', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 เดือน', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 เดือน', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 ปี', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ปี', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 ปี', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ปี', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'อีก ไม่กี่วินาที', 'prefix');
+ assert.equal(moment(0).from(30000), 'ไม่กี่วินาทีที่แล้ว', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ไม่กี่วินาทีที่แล้ว', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'อีก ไม่กี่วินาที', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'อีก 5 วัน', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'วันนี้ เวลา 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'วันนี้ เวลา 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'วันนี้ เวลา 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'พรุ่งนี้ เวลา 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'วันนี้ เวลา 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'เมื่อวานนี้ เวลา 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd[หน้า เวลา] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[วัน]dddd[ที่แล้ว เวลา] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1', 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2', 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tl-ph');
+
+test('parse', function (assert) {
+ var tests = 'Enero Ene_Pebrero Peb_Marso Mar_Abril Abr_Mayo May_Hunyo Hun_Hulyo Hul_Agosto Ago_Setyembre Set_Oktubre Okt_Nobyembre Nob_Disyembre Dis'.split('_'),
+ i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Linggo, Pebrero 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Lin, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 Pebrero Peb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Linggo Lin Li'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '6 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '02/14/2010'],
+ ['LL', 'Pebrero 14, 2010'],
+ ['LLL', 'Pebrero 14, 2010 15:25'],
+ ['LLLL', 'Linggo, Pebrero 14, 2010 15:25'],
+ ['l', '2/14/2010'],
+ ['ll', 'Peb 14, 2010'],
+ ['lll', 'Peb 14, 2010 15:25'],
+ ['llll', 'Lin, Peb 14, 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'Enero Ene_Pebrero Peb_Marso Mar_Abril Abr_Mayo May_Hunyo Hun_Hulyo Hul_Agosto Ago_Setyembre Set_Oktubre Okt_Nobyembre Nob_Disyembre Dis'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Linggo Lin Li_Lunes Lun Lu_Martes Mar Ma_Miyerkules Miy Mi_Huwebes Huw Hu_Biyernes Biy Bi_Sabado Sab Sab'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ilang segundo', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'isang minuto', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'isang minuto', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuto', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuto', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'isang oras', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'isang oras', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 oras', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 oras', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 oras', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'isang araw', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'isang araw', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 araw', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'isang araw', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 araw', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 araw', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'isang buwan', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'isang buwan', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'isang buwan', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 buwan', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 buwan', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 buwan', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'isang buwan', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 buwan', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'isang taon', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 taon', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'isang taon', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 taon', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'sa loob ng ilang segundo', 'prefix');
+ assert.equal(moment(0).from(30000), 'ilang segundo ang nakalipas', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'sa loob ng ilang segundo', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'sa loob ng 5 araw', 'in 5 days');
+});
+
+test('same day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), '12:00 ngayong araw', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), '12:25 ngayong araw', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), '13:00 ngayong araw', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Bukas ng 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), '11:00 ngayong araw', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), '12:00 kahapon', 'yesterday at the same time');
+});
+
+test('same next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('LT [sa susunod na] dddd'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('LT [sa susunod na] dddd'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('LT [sa susunod na] dddd'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('same last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('LT [noong nakaraang] dddd'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('LT [noong nakaraang] dddd'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('LT [noong nakaraang] dddd'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('same all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tlh');
+
+//Current parsing method doesn't allow parsing correctly months 10, 11 and 12.
+/*
+ * test('parse', function (assert) {
+ var tests = 'tera’ jar wa’.jar wa’_tera’ jar cha’.jar cha’_tera’ jar wej.jar wej_tera’ jar loS.jar loS_tera’ jar vagh.jar vagh_tera’ jar jav.jar jav_tera’ jar Soch.jar Soch_tera’ jar chorgh.jar chorgh_tera’ jar Hut.jar Hut_tera’ jar wa’maH.jar wa’maH_tera’ jar wa’maH wa’.jar wa’maH wa’_tera’ jar wa’maH cha’.jar wa’maH cha’'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split('.');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+*/
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'lojmItjaj, tera’ jar cha’ 14. 2010, 3:25:50 pm'],
+ ['ddd, hA', 'lojmItjaj, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2. 02 tera’ jar cha’ jar cha’'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. lojmItjaj lojmItjaj lojmItjaj'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[DIS jaj] DDDo', 'DIS jaj 45.'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 tera’ jar cha’ 2010'],
+ ['LLL', '14 tera’ jar cha’ 2010 15:25'],
+ ['LLLL', 'lojmItjaj, 14 tera’ jar cha’ 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 jar cha’ 2010'],
+ ['lll', '14 jar cha’ 2010 15:25'],
+ ['llll', 'lojmItjaj, 14 jar cha’ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'tera’ jar wa’ jar wa’_tera’ jar cha’ jar cha’_tera’ jar wej jar wej_tera’ jar loS jar loS_tera’ jar vagh jar vagh_tera’ jar jav jar jav_tera’ jar Soch jar Soch_tera’ jar chorgh jar chorgh_tera’ jar Hut jar Hut_tera’ jar wa’maH jar wa’maH_tera’ jar wa’maH wa’ jar wa’maH wa’_tera’ jar wa’maH cha’ jar wa’maH cha’'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'lojmItjaj lojmItjaj lojmItjaj_DaSjaj DaSjaj DaSjaj_povjaj povjaj povjaj_ghItlhjaj ghItlhjaj ghItlhjaj_loghjaj loghjaj loghjaj_buqjaj buqjaj buqjaj_ghInjaj ghInjaj ghInjaj'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'puS lup', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'wa’ tup', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'wa’ tup', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'cha’ tup', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'loSmaH loS tup', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'wa’ rep', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'wa’ rep', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'cha’ rep', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'vagh rep', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'cha’maH wa’ rep', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'wa’ jaj', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'wa’ jaj', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'cha’ jaj', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'wa’ jaj', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'vagh jaj', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'cha’maH vagh jaj', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'wa’ jar', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'wa’ jar', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'wa’ jar', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'cha’ jar', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'cha’ jar', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'wej jar', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'wa’ jar', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'vagh jar', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'wa’ DIS', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'cha’ DIS', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'wa’ DIS', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'vagh DIS', '5 years = 5 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 112}), true), 'wa’vatlh wa’maH cha’ DIS', '112 years = 112 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 122}), true), 'wa’vatlh cha’maH cha’ DIS', '122 years = 122 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 213}), true), 'cha’vatlh wa’maH wej DIS', '213 years = 213 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 223}), true), 'cha’vatlh cha’maH wej DIS', '223 years = 223 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'puS lup pIq', 'suffix');
+ assert.equal(moment(0).from(30000), 'puS lup ret', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'puS lup ret', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'puS lup pIq', 'in a few seconds');
+ assert.equal(moment().add({h: 1}).fromNow(), 'wa’ rep pIq', 'in an hour');
+ assert.equal(moment().add({d: 5}).fromNow(), 'vagh leS', 'in 5 days');
+ assert.equal(moment().add({M: 2}).fromNow(), 'cha’ waQ', 'in 2 months');
+ assert.equal(moment().add({y: 1}).fromNow(), 'wa’ nem', 'in a year');
+ assert.equal(moment().add({s: -30}).fromNow(), 'puS lup ret', 'a few seconds ago');
+ assert.equal(moment().add({h: -1}).fromNow(), 'wa’ rep ret', 'an hour ago');
+ assert.equal(moment().add({d: -5}).fromNow(), 'vagh Hu’', '5 days ago');
+ assert.equal(moment().add({M: -2}).fromNow(), 'cha’ wen', '2 months ago');
+ assert.equal(moment().add({y: -1}).fromNow(), 'wa’ ben', 'a year ago');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'DaHjaj 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'DaHjaj 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'DaHjaj 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'wa’leS 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'DaHjaj 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'wa’Hu’ 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('LLL'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('LLL'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('LLL'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('LLL'), 'Today - ' + i + ' days current time');
+
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('LLL'), 'Today - ' + i + ' days beginning of day');
+
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('LLL'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tr');
+
+test('parse', function (assert) {
+ var tests = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Pazar, Şubat 14\'üncü 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Paz, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2\'nci 02 Şubat Şub'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14\'üncü 14'],
+ ['d do dddd ddd dd', '0 0\'ıncı Pazar Paz Pz'],
+ ['DDD DDDo DDDD', '45 45\'inci 045'],
+ ['w wo ww', '7 7\'nci 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[yılın] DDDo [günü]', 'yılın 45\'inci günü'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 Şubat 2010'],
+ ['LLL', '14 Şubat 2010 15:25'],
+ ['LLLL', 'Pazar, 14 Şubat 2010 15:25'],
+ ['l', '14.2.2010'],
+ ['ll', '14 Şub 2010'],
+ ['lll', '14 Şub 2010 15:25'],
+ ['llll', 'Paz, 14 Şub 2010 15:25']
+ ],
+ DDDo = [
+ [359, '360\'ıncı'],
+ [199, '200\'üncü'],
+ [149, '150\'nci']
+ ],
+ dt = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ DDDoDt,
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(dt.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+ for (i = 0; i < DDDo.length; i++) {
+ DDDoDt = moment([2010]);
+ assert.equal(DDDoDt.add(DDDo[i][0], 'days').format('DDDo'), DDDo[i][1], DDDo[i][0] + ' ---> ' + DDDo[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1\'inci', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2\'nci', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3\'üncü', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4\'üncü', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5\'inci', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6\'ncı', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7\'nci', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8\'inci', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9\'uncu', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10\'uncu', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11\'inci', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12\'nci', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13\'üncü', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14\'üncü', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15\'inci', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16\'ncı', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17\'nci', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18\'inci', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19\'uncu', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20\'nci', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21\'inci', '21th');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22\'nci', '22th');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23\'üncü', '23th');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24\'üncü', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25\'inci', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26\'ncı', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27\'nci', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28\'inci', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29\'uncu', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30\'uncu', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31\'inci', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'Ocak Oca_Şubat Şub_Mart Mar_Nisan Nis_Mayıs May_Haziran Haz_Temmuz Tem_Ağustos Ağu_Eylül Eyl_Ekim Eki_Kasım Kas_Aralık Ara'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Pazar Paz Pz_Pazartesi Pts Pt_Salı Sal Sa_Çarşamba Çar Ça_Perşembe Per Pe_Cuma Cum Cu_Cumartesi Cts Ct'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'birkaç saniye', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'bir dakika', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'bir dakika', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 dakika', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 dakika', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'bir saat', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'bir saat', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 saat', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 saat', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 saat', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'bir gün', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'bir gün', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 gün', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'bir gün', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 gün', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 gün', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'bir ay', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'bir ay', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'bir ay', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ay', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ay', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ay', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'bir ay', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ay', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'bir yıl', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 yıl', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'bir yıl', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 yıl', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'birkaç saniye sonra', 'prefix');
+ assert.equal(moment(0).from(30000), 'birkaç saniye önce', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'birkaç saniye önce', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'birkaç saniye sonra', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 gün sonra', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'bugün saat 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'bugün saat 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'bugün saat 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'yarın saat 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'bugün saat 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'dün 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[haftaya] dddd [saat] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[geçen hafta] dddd [saat] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1\'inci', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1\'inci', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2\'nci', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2\'nci', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3\'üncü', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tzl');
+
+test('parse', function (assert) {
+ var tests = 'Januar Jan_Fevraglh Fev_Març Mar_Avrïu Avr_Mai Mai_Gün Gün_Julia Jul_Guscht Gus_Setemvar Set_Listopäts Lis_Noemvar Noe_Zecemvar Zec'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h.mm.ss a', 'Súladi, Fevraglh 14. 2010, 3.25.50 d\'o'],
+ ['ddd, hA', 'Súl, 3D\'O'],
+ ['M Mo MM MMMM MMM', '2 2. 02 Fevraglh Fev'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14. 14'],
+ ['d do dddd ddd dd', '0 0. Súladi Súl Sú'],
+ ['DDD DDDo DDDD', '45 45. 045'],
+ ['w wo ww', '6 6. 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'd\'o D\'O'],
+ ['[the] DDDo [day of the year]', 'the 45. day of the year'],
+ ['LTS', '15.25.50'],
+ ['L', '14.02.2010'],
+ ['LL', '14. Fevraglh dallas 2010'],
+ ['LLL', '14. Fevraglh dallas 2010 15.25'],
+ ['LLLL', 'Súladi, li 14. Fevraglh dallas 2010 15.25'],
+ ['l', '14.2.2010'],
+ ['ll', '14. Fev dallas 2010'],
+ ['lll', '14. Fev dallas 2010 15.25'],
+ ['llll', 'Súl, li 14. Fev dallas 2010 15.25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1.', '1.');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2.', '2.');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3.', '3.');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4.', '4.');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5.', '5.');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6.', '6.');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7.', '7.');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8.', '8.');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9.', '9.');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10.', '10.');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11.', '11.');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12.', '12.');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13.', '13.');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14.', '14.');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15.', '15.');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16.', '16.');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17.', '17.');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18.', '18.');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19.', '19.');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20.', '20.');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21.', '21.');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22.', '22.');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23.', '23.');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24.', '24.');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25.', '25.');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26.', '26.');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27.', '27.');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28.', '28.');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29.', '29.');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30.', '30.');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31.', '31.');
+});
+
+test('format month', function (assert) {
+ var expected = 'Januar Jan_Fevraglh Fev_Març Mar_Avrïu Avr_Mai Mai_Gün Gün_Julia Jul_Guscht Gus_Setemvar Set_Listopäts Lis_Noemvar Noe_Zecemvar Zec'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Súladi Súl Sú_Lúneçi Lún Lú_Maitzi Mai Ma_Márcuri Már Má_Xhúadi Xhú Xh_Viénerçi Vié Vi_Sáturi Sát Sá'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'viensas secunds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '\'n míut', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '\'n míut', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 míuts', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 míuts', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '\'n þora', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '\'n þora', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 þoras', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 þoras', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 þoras', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '\'n ziua', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '\'n ziua', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ziuas', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '\'n ziua', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ziuas', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ziuas', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '\'n mes', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '\'n mes', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '\'n mes', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 mesen', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 mesen', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 mesen', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '\'n mes', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 mesen', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '\'n ar', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ars', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '\'n ar', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ars', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'osprei viensas secunds', 'prefix');
+ assert.equal(moment(0).from(30000), 'ja\'iensas secunds', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ja\'iensas secunds', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'osprei viensas secunds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'osprei 5 ziuas', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'oxhi à 12.00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'oxhi à 12.25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'oxhi à 13.00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'demà à 12.00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'oxhi à 11.00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ieiri à 12.00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [à] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[sür el] dddd [lasteu à] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[sür el] dddd [lasteu à] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[sür el] dddd [lasteu à] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+// Monday is the first day of the week.
+// The week that contains Jan 4th is the first week of the year.
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52.', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1.', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1.', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2.', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2.', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tzm-latn');
+
+test('parse', function (assert) {
+ var tests = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'asamas, brˤayrˤ 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'asamas, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 brˤayrˤ brˤayrˤ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 asamas asamas asamas'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 brˤayrˤ 2010'],
+ ['LLL', '14 brˤayrˤ 2010 15:25'],
+ ['LLLL', 'asamas 14 brˤayrˤ 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 brˤayrˤ 2010'],
+ ['lll', '14 brˤayrˤ 2010 15:25'],
+ ['llll', 'asamas 14 brˤayrˤ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'innayr innayr_brˤayrˤ brˤayrˤ_marˤsˤ marˤsˤ_ibrir ibrir_mayyw mayyw_ywnyw ywnyw_ywlywz ywlywz_ɣwšt ɣwšt_šwtanbir šwtanbir_ktˤwbrˤ ktˤwbrˤ_nwwanbir nwwanbir_dwjnbir dwjnbir'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'asamas asamas asamas_aynas aynas aynas_asinas asinas asinas_akras akras akras_akwas akwas akwas_asimwas asimwas asimwas_asiḍyas asiḍyas asiḍyas'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'imik', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'minuḍ', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'minuḍ', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 minuḍ', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 minuḍ', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'saɛa', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'saɛa', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 tassaɛin', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 tassaɛin', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 tassaɛin', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ass', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ass', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ossan', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ass', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ossan', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ossan', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ayowr', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ayowr', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ayowr', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 iyyirn', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 iyyirn', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 iyyirn', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ayowr', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 iyyirn', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'asgas', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 isgasn', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'asgas', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 isgasn', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'dadkh s yan imik', 'prefix');
+ assert.equal(moment(0).from(30000), 'yan imik', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'yan imik', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'dadkh s yan imik', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'dadkh s yan 5 ossan', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'asdkh g 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'asdkh g 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'asdkh g 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'aska g 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'asdkh g 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'assant g 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [g] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('tzm');
+
+test('parse', function (assert) {
+ var tests = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'ⴰⵙⴰⵎⴰⵙ, ⴱⵕⴰⵢⵕ 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'ⴰⵙⴰⵎⴰⵙ, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2 02 ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '8 8 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45 day of the year'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 ⴱⵕⴰⵢⵕ 2010'],
+ ['LLL', '14 ⴱⵕⴰⵢⵕ 2010 15:25'],
+ ['LLLL', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 ⴱⵕⴰⵢⵕ 2010'],
+ ['lll', '14 ⴱⵕⴰⵢⵕ 2010 15:25'],
+ ['llll', 'ⴰⵙⴰⵎⴰⵙ 14 ⴱⵕⴰⵢⵕ 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'ⵉⵏⵏⴰⵢⵔ ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ⵉⵎⵉⴽ', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ⵎⵉⵏⵓⴺ', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ⵎⵉⵏⵓⴺ', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 ⵎⵉⵏⵓⴺ', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 ⵎⵉⵏⵓⴺ', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'ⵙⴰⵄⴰ', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'ⵙⴰⵄⴰ', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 ⵜⴰⵙⵙⴰⵄⵉⵏ', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 ⵜⴰⵙⵙⴰⵄⵉⵏ', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 ⵜⴰⵙⵙⴰⵄⵉⵏ', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ⴰⵙⵙ', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ⴰⵙⵙ', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 oⵙⵙⴰⵏ', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ⴰⵙⵙ', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 oⵙⵙⴰⵏ', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 oⵙⵙⴰⵏ', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'ⴰⵢoⵓⵔ', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'ⴰⵢoⵓⵔ', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'ⴰⵢoⵓⵔ', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ⵉⵢⵢⵉⵔⵏ', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ⵉⵢⵢⵉⵔⵏ', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ⵉⵢⵢⵉⵔⵏ', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'ⴰⵢoⵓⵔ', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ⵉⵢⵢⵉⵔⵏ', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ⴰⵙⴳⴰⵙ', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ⵉⵙⴳⴰⵙⵏ', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ⴰⵙⴳⴰⵙ', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ⵉⵙⴳⴰⵙⵏ', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ', 'prefix');
+ assert.equal(moment(0).from(30000), 'ⵢⴰⵏ ⵉⵎⵉⴽ', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ⵢⴰⵏ ⵉⵎⵉⴽ', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ ⵉⵎⵉⴽ', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ 5 oⵙⵙⴰⵏ', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'ⴰⵙⴷⵅ ⴴ 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'ⴰⵙⴷⵅ ⴴ 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'ⴰⵙⴷⵅ ⴴ 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'ⴰⵙⴽⴰ ⴴ 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'ⴰⵙⴷⵅ ⴴ 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'ⴰⵚⴰⵏⵜ ⴴ 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [ⴴ] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 31]).format('w ww wo'), '1 01 1', 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).format('w ww wo'), '1 01 1', 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '2 02 2', 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).format('w ww wo'), '2 02 2', 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '3 03 3', 'Jan 14 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('uk');
+
+test('parse', function (assert) {
+ var tests = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do MMMM YYYY, HH:mm:ss', 'неділя, 14-го лютого 2010, 15:25:50'],
+ ['ddd, h A', 'нд, 3 дня'],
+ ['M Mo MM MMMM MMM', '2 2-й 02 лютий лют'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14-го 14'],
+ ['d do dddd ddd dd', '0 0-й неділя нд нд'],
+ ['DDD DDDo DDDD', '45 45-й 045'],
+ ['w wo ww', '7 7-й 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'дня дня'],
+ ['DDDo [день року]', '45-й день року'],
+ ['LTS', '15:25:50'],
+ ['L', '14.02.2010'],
+ ['LL', '14 лютого 2010 р.'],
+ ['LLL', '14 лютого 2010 р., 15:25'],
+ ['LLLL', 'неділя, 14 лютого 2010 р., 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format meridiem', function (assert) {
+ assert.equal(moment([2012, 11, 28, 0, 0]).format('A'), 'ночі', 'night');
+ assert.equal(moment([2012, 11, 28, 3, 59]).format('A'), 'ночі', 'night');
+ assert.equal(moment([2012, 11, 28, 4, 0]).format('A'), 'ранку', 'morning');
+ assert.equal(moment([2012, 11, 28, 11, 59]).format('A'), 'ранку', 'morning');
+ assert.equal(moment([2012, 11, 28, 12, 0]).format('A'), 'дня', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 16, 59]).format('A'), 'дня', 'afternoon');
+ assert.equal(moment([2012, 11, 28, 17, 0]).format('A'), 'вечора', 'evening');
+ assert.equal(moment([2012, 11, 28, 23, 59]).format('A'), 'вечора', 'evening');
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1-й', '1-й');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2-й', '2-й');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3-й', '3-й');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4-й', '4-й');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5-й', '5-й');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6-й', '6-й');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7-й', '7-й');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8-й', '8-й');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9-й', '9-й');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10-й', '10-й');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11-й', '11-й');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12-й', '12-й');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13-й', '13-й');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14-й', '14-й');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15-й', '15-й');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16-й', '16-й');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17-й', '17-й');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18-й', '18-й');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19-й', '19-й');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20-й', '20-й');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21-й', '21-й');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22-й', '22-й');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23-й', '23-й');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24-й', '24-й');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25-й', '25-й');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26-й', '26-й');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27-й', '27-й');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28-й', '28-й');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29-й', '29-й');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30-й', '30-й');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31-й', '31-й');
+});
+
+test('format month', function (assert) {
+ var expected = 'січень січ_лютий лют_березень бер_квітень квіт_травень трав_червень черв_липень лип_серпень серп_вересень вер_жовтень жовт_листопад лист_грудень груд'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format month case', function (assert) {
+ var months = {
+ 'nominative': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_'),
+ 'accusative': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_')
+ }, i;
+ for (i = 0; i < 12; i++) {
+ assert.equal(moment([2011, i, 1]).format('D MMMM'), '1 ' + months.accusative[i], '1 ' + months.accusative[i]);
+ assert.equal(moment([2011, i, 1]).format('MMMM'), months.nominative[i], '1 ' + months.nominative[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'неділя нд нд_понеділок пн пн_вівторок вт вт_середа ср ср_четвер чт чт_п’ятниця пт пт_субота сб сб'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'декілька секунд', '44 seconds = seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'хвилина', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'хвилина', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 хвилини', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 хвилини', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'годину', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'годину', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 години', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 годин', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 година', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'день', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'день', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 дні', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'день', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 днів', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 11}), true), '11 днів', '11 days = 11 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 21}), true), '21 день', '21 days = 21 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 днів', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'місяць', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'місяць', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'місяць', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 місяці', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 місяці', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 місяці', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'місяць', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 місяців', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'рік', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 роки', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'рік', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 років', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'за декілька секунд', 'prefix');
+ assert.equal(moment(0).from(30000), 'декілька секунд тому', 'suffix');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'за декілька секунд', 'in seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'за 5 днів', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Сьогодні о 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Сьогодні о 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Сьогодні о 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Завтра о 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 2}).calendar(), 'Сьогодні о 10:00', 'Now minus 2 hours');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Вчора о 12:00', 'yesterday at the same time');
+ // A special case for Ukrainian since 11 hours have different preposition
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Сьогодні об 11:00', 'same day at 11 o\'clock');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[У] dddd [о' + (m.hours() === 11 ? 'б' : '') + '] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[У] dddd [о] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[У] dddd [о] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ function makeFormat(d) {
+ switch (d.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[Минулої] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[Минулого] dddd [о' + (d.hours() === 11 ? 'б' : '') + '] LT';
+ }
+ }
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format(makeFormat(m)), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2011, 11, 26]).format('w ww wo'), '1 01 1-й', 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1-й', 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2-й', 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2-й', 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3-й', 'Jan 9 2012 should be week 3');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('uz');
+
+test('parse', function (assert) {
+ var tests = 'январ янв_феврал фев_март мар_апрел апр_май май_июн июн_июл июл_август авг_сентябр сен_октябр окт_ноябр ноя_декабр дек'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, Do-MMMM YYYY, h:mm:ss', 'Якшанба, 14-феврал 2010, 3:25:50'],
+ ['ddd, h:mm', 'Якш, 3:25'],
+ ['M Mo MM MMMM MMM', '2 2 02 феврал фев'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 Якшанба Якш Як'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '7 7 07'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[йилнинг] DDDo-[куни]', 'йилнинг 45-куни'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 феврал 2010'],
+ ['LLL', '14 феврал 2010 15:25'],
+ ['LLLL', '14 феврал 2010, Якшанба 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 фев 2010'],
+ ['lll', '14 фев 2010 15:25'],
+ ['llll', '14 фев 2010, Якш 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var expected = 'январ янв_феврал фев_март мар_апрел апр_май май_июн июн_июл июл_август авг_сентябр сен_октябр окт_ноябр ноя_декабр дек'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Якшанба Якш Як_Душанба Душ Ду_Сешанба Сеш Се_Чоршанба Чор Чо_Пайшанба Пай Па_Жума Жум Жу_Шанба Шан Ша'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'фурсат', '44 секунд = фурсат');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'бир дакика', '45 секунд = бир дакика');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'бир дакика', '89 секунд = бир дакика');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 дакика', '90 секунд = 2 дакика');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 дакика', '44 дакика = 44 дакика');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'бир соат', '45 минут = бир соат');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'бир соат', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 соат', '90 минут = 2 соат');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 соат', '5 соат = 5 соат');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 соат', '21 соат = 21 соат');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'бир кун', '22 соат = бир кун');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'бир кун', '35 соат = бир кун');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 кун', '36 соат = 2 кун');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'бир кун', '1 кун = 1 кун');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 кун', '5 кун = 5 кун');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 кун', '25 кун = 25 кун');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'бир ой', '26 кун = бир ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'бир ой', '30 кун = бир ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'бир ой', '45 кун = бир ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 ой', '46 кун = 2 ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 ой', '75 кун = 2 ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 ой', '76 кун = 3 ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'бир ой', 'бир ой = бир ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 ой', '5 ой = 5 ой');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'бир йил', '345 кун = бир йил');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 йил', '548 кун = 2 йил');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'бир йил', '1 йил = бир йил');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 йил', '5 йил = 5 йил');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'Якин фурсат ичида', 'prefix');
+ assert.equal(moment(0).from(30000), 'Бир неча фурсат олдин', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'Бир неча фурсат олдин', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'Якин фурсат ичида', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'Якин 5 кун ичида', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Бугун соат 12:00 да', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Бугун соат 12:25 да', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Бугун соат 13:00 да', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Эртага 12:00 да', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Бугун соат 11:00 да', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Кеча соат 12:00 да', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [куни соат] LT [да]'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[Утган] dddd [куни соат] LT [да]'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '2 02 2', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '3 03 3', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('vi');
+
+test('parse', function (assert) {
+ var i,
+ tests = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split('_');
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + i);
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(',');
+ equalTest(tests[i][0], '[tháng] M', i);
+ equalTest(tests[i][1], '[Th]M', i);
+ equalTest(tests[i][0], '[tháng] MM', i);
+ equalTest(tests[i][1], '[Th]MM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), '[THÁNG] M', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), '[TH]M', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), '[THÁNG] MM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), '[TH]MM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'chủ nhật, tháng 2 14 2010, 3:25:50 ch'],
+ ['ddd, hA', 'CN, 3CH'],
+ ['M Mo MM MMMM MMM', '2 2 02 tháng 2 Th02'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14 14'],
+ ['d do dddd ddd dd', '0 0 chủ nhật CN CN'],
+ ['DDD DDDo DDDD', '45 45 045'],
+ ['w wo ww', '6 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'ch CH'],
+ ['[ngày thứ] DDDo [của năm]', 'ngày thứ 45 của năm'],
+ ['LTS', '15:25:50'],
+ ['L', '14/02/2010'],
+ ['LL', '14 tháng 2 năm 2010'],
+ ['LLL', '14 tháng 2 năm 2010 15:25'],
+ ['LLLL', 'chủ nhật, 14 tháng 2 năm 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Th02 2010'],
+ ['lll', '14 Th02 2010 15:25'],
+ ['llll', 'CN, 14 Th02 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1', '1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2', '2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3', '3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4', '4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5', '5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6', '6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7', '7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8', '8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9', '9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10', '10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11', '11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12', '12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13', '13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14', '14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15', '15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16', '16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17', '17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18', '18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19', '19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20', '20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21', '21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22', '22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23', '23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24', '24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25', '25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26', '26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27', '27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28', '28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29', '29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30', '30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31', '31');
+});
+
+test('format month', function (assert) {
+ var i,
+ expected = 'tháng 1,Th01_tháng 2,Th02_tháng 3,Th03_tháng 4,Th04_tháng 5,Th05_tháng 6,Th06_tháng 7,Th07_tháng 8,Th08_tháng 9,Th09_tháng 10,Th10_tháng 11,Th11_tháng 12,Th12'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM,MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var i,
+ expected = 'chủ nhật CN CN_thứ hai T2 T2_thứ ba T3 T3_thứ tư T4 T4_thứ năm T5 T5_thứ sáu T6 T6_thứ bảy T7 T7'.split('_');
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'vài giây', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'một phút', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'một phút', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 phút', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 phút', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'một giờ', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'một giờ', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 giờ', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 giờ', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 giờ', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'một ngày', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'một ngày', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 ngày', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'một ngày', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 ngày', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 ngày', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'một tháng', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'một tháng', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'một tháng', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 tháng', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 tháng', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 tháng', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'một tháng', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 tháng', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'một năm', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 năm', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'một năm', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 năm', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'vài giây tới', 'prefix');
+ assert.equal(moment(0).from(30000), 'vài giây trước', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'vài giây trước', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'vài giây tới', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 ngày tới', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Hôm nay lúc 12:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Hôm nay lúc 12:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Hôm nay lúc 13:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Ngày mai lúc 12:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Hôm nay lúc 11:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Hôm qua lúc 12:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [tuần tới lúc] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [tuần rồi lúc] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('x-pseudo');
+
+test('parse', function (assert) {
+ var tests = 'J~áñúá~rý J~áñ_F~ébrú~árý ~Féb_~Márc~h ~Már_Áp~ríl ~Ápr_~Máý ~Máý_~Júñé~ ~Júñ_Júl~ý ~Júl_Áú~gúst~ ~Áúg_Sép~témb~ér ~Sép_Ó~ctób~ér ~Óct_Ñ~óvém~bér ~Ñóv_~Décé~mbér ~Déc'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'S~úñdá~ý, F~ébrú~árý 14th 2010, 3:25:50 pm'],
+ ['ddd, hA', 'S~úñ, 3PM'],
+ ['M Mo MM MMMM MMM', '2 2nd 02 F~ébrú~árý ~Féb'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14th 14'],
+ ['d do dddd ddd dd', '0 0th S~úñdá~ý S~úñ S~ú'],
+ ['DDD DDDo DDDD', '45 45th 045'],
+ ['w wo ww', '6 6th 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the 45th day of the year'],
+ ['LT', '15:25'],
+ ['L', '14/02/2010'],
+ ['LL', '14 F~ébrú~árý 2010'],
+ ['LLL', '14 F~ébrú~árý 2010 15:25'],
+ ['LLLL', 'S~úñdá~ý, 14 F~ébrú~árý 2010 15:25'],
+ ['l', '14/2/2010'],
+ ['ll', '14 ~Féb 2010'],
+ ['lll', '14 ~Féb 2010 15:25'],
+ ['llll', 'S~úñ, 14 ~Féb 2010 15:25']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), '1st', '1st');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), '2nd', '2nd');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), '3rd', '3rd');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), '4th', '4th');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), '5th', '5th');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), '6th', '6th');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), '7th', '7th');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), '8th', '8th');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), '9th', '9th');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), '10th', '10th');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), '11th', '11th');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), '12th', '12th');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), '13th', '13th');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), '14th', '14th');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), '15th', '15th');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), '16th', '16th');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), '17th', '17th');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), '18th', '18th');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), '19th', '19th');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), '20th', '20th');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), '21st', '21st');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), '22nd', '22nd');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), '23rd', '23rd');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), '24th', '24th');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), '25th', '25th');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), '26th', '26th');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), '27th', '27th');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), '28th', '28th');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), '29th', '29th');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), '30th', '30th');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), '31st', '31st');
+});
+
+test('format month', function (assert) {
+ var expected = 'J~áñúá~rý J~áñ_F~ébrú~árý ~Féb_~Márc~h ~Már_Áp~ríl ~Ápr_~Máý ~Máý_~Júñé~ ~Júñ_Júl~ý ~Júl_Áú~gúst~ ~Áúg_Sép~témb~ér ~Sép_Ó~ctób~ér ~Óct_Ñ~óvém~bér ~Ñóv_~Décé~mbér ~Déc'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'S~úñdá~ý S~úñ S~ú_Mó~ñdáý~ ~Móñ Mó~_Túé~sdáý~ ~Túé Tú_Wéd~ñésd~áý ~Wéd ~Wé_T~húrs~dáý ~Thú T~h_~Fríd~áý ~Frí Fr~_S~átúr~dáý ~Sát Sá'.split('_'), i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'á ~féw ~sécó~ñds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'á ~míñ~úté', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'á ~míñ~úté', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 m~íñú~tés', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 m~íñú~tés', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'á~ñ hó~úr', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'á~ñ hó~úr', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 h~óúrs', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 h~óúrs', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 h~óúrs', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'á ~dáý', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'á ~dáý', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 d~áýs', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'á ~dáý', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 d~áýs', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 d~áýs', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'á ~móñ~th', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'á ~móñ~th', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'á ~móñ~th', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 m~óñt~hs', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 m~óñt~hs', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 m~óñt~hs', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'á ~móñ~th', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 m~óñt~hs', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'á ~ýéár', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 ý~éárs', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'á ~ýéár', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 ý~éárs', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'í~ñ á ~féw ~sécó~ñds', 'prefix');
+ assert.equal(moment(0).from(30000), 'á ~féw ~sécó~ñds á~gó', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'á ~féw ~sécó~ñds á~gó', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'í~ñ á ~féw ~sécó~ñds', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), 'í~ñ 5 d~áýs', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(2).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'T~ódá~ý át 02:00', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'T~ódá~ý át 02:25', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'T~ódá~ý át 03:00', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'T~ómó~rró~w át 02:00', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'T~ódá~ý át 01:00', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Ý~ést~érdá~ý át 02:00', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [át] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [át] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [át] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[L~ást] dddd [át] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[L~ást] dddd [át] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[L~ást] dddd [át] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52nd', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 1st', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 1st', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 2nd', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 2nd', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('yo');
+
+test('parse', function (assert) {
+ var tests = 'Sẹ́rẹ́ Sẹ́r_Èrèlè Èrl_Ẹrẹ̀nà Ẹrn_Ìgbé Ìgb_Èbibi Èbi_Òkùdu Òkù_Agẹmo Agẹ_Ògún Ògú_Owewe Owe_Ọ̀wàrà Ọ̀wà_Bélú Bél_Ọ̀pẹ̀̀ Ọ̀pẹ̀̀'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, h:mm:ss a', 'Àìkú, Èrèlè ọjọ́ 14 2010, 3:25:50 pm'],
+ ['ddd, hA', 'Àìk, 3PM'],
+ ['M Mo MM MMMM MMM', '2 ọjọ́ 2 02 Èrèlè Èrl'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 ọjọ́ 14 14'],
+ ['d do dddd ddd dd', '0 ọjọ́ 0 Àìkú Àìk Àì'],
+ ['DDD DDDo DDDD', '45 ọjọ́ 45 045'],
+ ['w wo ww', '6 ọjọ́ 6 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', 'pm PM'],
+ ['[the] DDDo [day of the year]', 'the ọjọ́ 45 day of the year'],
+ ['LTS', '3:25:50 PM'],
+ ['L', '14/02/2010'],
+ ['LL', '14 Èrèlè 2010'],
+ ['LLL', '14 Èrèlè 2010 3:25 PM'],
+ ['LLLL', 'Àìkú, 14 Èrèlè 2010 3:25 PM'],
+ ['l', '14/2/2010'],
+ ['ll', '14 Èrl 2010'],
+ ['lll', '14 Èrl 2010 3:25 PM'],
+ ['llll', 'Àìk, 14 Èrl 2010 3:25 PM']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format ordinal', function (assert) {
+ assert.equal(moment([2011, 0, 1]).format('DDDo'), 'ọjọ́ 1', 'ọjọ́ 1');
+ assert.equal(moment([2011, 0, 2]).format('DDDo'), 'ọjọ́ 2', 'ọjọ́ 2');
+ assert.equal(moment([2011, 0, 3]).format('DDDo'), 'ọjọ́ 3', 'ọjọ́ 3');
+ assert.equal(moment([2011, 0, 4]).format('DDDo'), 'ọjọ́ 4', 'ọjọ́ 4');
+ assert.equal(moment([2011, 0, 5]).format('DDDo'), 'ọjọ́ 5', 'ọjọ́ 5');
+ assert.equal(moment([2011, 0, 6]).format('DDDo'), 'ọjọ́ 6', 'ọjọ́ 6');
+ assert.equal(moment([2011, 0, 7]).format('DDDo'), 'ọjọ́ 7', 'ọjọ́ 7');
+ assert.equal(moment([2011, 0, 8]).format('DDDo'), 'ọjọ́ 8', 'ọjọ́ 8');
+ assert.equal(moment([2011, 0, 9]).format('DDDo'), 'ọjọ́ 9', 'ọjọ́ 9');
+ assert.equal(moment([2011, 0, 10]).format('DDDo'), 'ọjọ́ 10', 'ọjọ́ 10');
+
+ assert.equal(moment([2011, 0, 11]).format('DDDo'), 'ọjọ́ 11', 'ọjọ́ 11');
+ assert.equal(moment([2011, 0, 12]).format('DDDo'), 'ọjọ́ 12', 'ọjọ́ 12');
+ assert.equal(moment([2011, 0, 13]).format('DDDo'), 'ọjọ́ 13', 'ọjọ́ 13');
+ assert.equal(moment([2011, 0, 14]).format('DDDo'), 'ọjọ́ 14', 'ọjọ́ 14');
+ assert.equal(moment([2011, 0, 15]).format('DDDo'), 'ọjọ́ 15', 'ọjọ́ 15');
+ assert.equal(moment([2011, 0, 16]).format('DDDo'), 'ọjọ́ 16', 'ọjọ́ 16');
+ assert.equal(moment([2011, 0, 17]).format('DDDo'), 'ọjọ́ 17', 'ọjọ́ 17');
+ assert.equal(moment([2011, 0, 18]).format('DDDo'), 'ọjọ́ 18', 'ọjọ́ 18');
+ assert.equal(moment([2011, 0, 19]).format('DDDo'), 'ọjọ́ 19', 'ọjọ́ 19');
+ assert.equal(moment([2011, 0, 20]).format('DDDo'), 'ọjọ́ 20', 'ọjọ́ 20');
+
+ assert.equal(moment([2011, 0, 21]).format('DDDo'), 'ọjọ́ 21', 'ọjọ́ 21');
+ assert.equal(moment([2011, 0, 22]).format('DDDo'), 'ọjọ́ 22', 'ọjọ́ 22');
+ assert.equal(moment([2011, 0, 23]).format('DDDo'), 'ọjọ́ 23', 'ọjọ́ 23');
+ assert.equal(moment([2011, 0, 24]).format('DDDo'), 'ọjọ́ 24', 'ọjọ́ 24');
+ assert.equal(moment([2011, 0, 25]).format('DDDo'), 'ọjọ́ 25', 'ọjọ́ 25');
+ assert.equal(moment([2011, 0, 26]).format('DDDo'), 'ọjọ́ 26', 'ọjọ́ 26');
+ assert.equal(moment([2011, 0, 27]).format('DDDo'), 'ọjọ́ 27', 'ọjọ́ 27');
+ assert.equal(moment([2011, 0, 28]).format('DDDo'), 'ọjọ́ 28', 'ọjọ́ 28');
+ assert.equal(moment([2011, 0, 29]).format('DDDo'), 'ọjọ́ 29', 'ọjọ́ 29');
+ assert.equal(moment([2011, 0, 30]).format('DDDo'), 'ọjọ́ 30', 'ọjọ́ 30');
+
+ assert.equal(moment([2011, 0, 31]).format('DDDo'), 'ọjọ́ 31', 'ọjọ́ 31');
+});
+
+test('format month', function (assert) {
+ var expected = 'Sẹ́rẹ́ Sẹ́r_Èrèlè Èrl_Ẹrẹ̀nà Ẹrn_Ìgbé Ìgb_Èbibi Èbi_Òkùdu Òkù_Agẹmo Agẹ_Ògún Ògú_Owewe Owe_Ọ̀wàrà Ọ̀wà_Bélú Bél_Ọ̀pẹ̀̀ Ọ̀pẹ̀̀'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = 'Àìkú Àìk Àì_Ajé Ajé Aj_Ìsẹ́gun Ìsẹ́ Ìs_Ọjọ́rú Ọjr Ọr_Ọjọ́bọ Ọjb Ọb_Ẹtì Ẹtì Ẹt_Àbámẹ́ta Àbá Àb'.split('_'),
+ i;
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), 'ìsẹjú aayá die', '44 seconds = ìsẹjú aayá die');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), 'ìsẹjú kan', '45 seconds = ìsẹjú kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), 'ìsẹjú kan', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), 'ìsẹjú 2', '90 seconds = ìsẹjú 2');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), 'ìsẹjú 44', 'ìsẹjú 44 = ìsẹjú 44');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), 'wákati kan', 'ìsẹjú 45 = wákati kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), 'wákati kan', 'ìsẹjú 89 = wákati kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), 'wákati 2', 'ìsẹjú 90 = wákati 2');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), 'wákati 5', 'wákati 5 = wákati 5');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), 'wákati 21', 'wákati 21 = wákati 21');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), 'ọjọ́ kan', '22 wákati = ọjọ́ kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), 'ọjọ́ kan', '35 wákati = ọjọ́ kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), 'ọjọ́ 2', 'wákati 36 = ọjọ́ 2');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), 'ọjọ́ kan', '1 = ọjọ́ kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), 'ọjọ́ 5', 'ọjọ́ 5 = ọjọ́ 5');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), 'ọjọ́ 25', 'ọjọ́ 25 = ọjọ́ 25');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), 'osù kan', 'ọjọ́ 26 = osù kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), 'osù kan', 'ọjọ́ 30 = osù kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), 'osù kan', 'ọjọ́ 43 = osù kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), 'osù 2', 'ọjọ́ 46 = osù 2');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), 'osù 2', 'ọjọ́ 75 = osù 2');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), 'osù 3', 'ọjọ́ 76 = osù 3');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), 'osù kan', 'osù 1 = osù kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), 'osù 5', 'osù 5 = osù 5');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), 'ọdún kan', 'ọjọ 345 = ọdún kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), 'ọdún 2', 'ọjọ 548 = ọdún 2');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), 'ọdún kan', 'ọdún 1 = ọdún kan');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), 'ọdún 5', 'ọdún 5 = ọdún 5');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), 'ní ìsẹjú aayá die', 'prefix');
+ assert.equal(moment(0).from(30000), 'ìsẹjú aayá die kọjá', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), 'ìsẹjú aayá die kọjá', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), 'ní ìsẹjú aayá die', 'ní ìsẹjú aayá die');
+ assert.equal(moment().add({d: 5}).fromNow(), 'ní ọjọ́ 5', 'ní ọjọ́ 5');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Ònì ni 12:00 PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Ònì ni 12:25 PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Ònì ni 1:00 PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Ọ̀la ni 12:00 PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Ònì ni 11:00 AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Àna ni 12:00 PM', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tón\'bọ] [ni] LT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tón\'bọ] [ni] LT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tón\'bọ] [ni] LT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tólọ́] [ni] LT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tólọ́] [ni] LT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('dddd [Ọsẹ̀ tólọ́] [ni] LT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 ọjọ́ 52', 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).format('w ww wo'), '1 01 ọjọ́ 1', 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '1 01 ọjọ́ 1', 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).format('w ww wo'), '2 02 ọjọ́ 2', 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '2 02 ọjọ́ 2', 'Jan 15 2012 should be week 2');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('zh-cn');
+
+test('parse', function (assert) {
+ var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i;
+
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'],
+ ['ddd, Ah', '周日, 下午3'],
+ ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14日 14'],
+ ['d do dddd ddd dd', '0 0日 星期日 周日 日'],
+ ['DDD DDDo DDDD', '45 45日 045'],
+ ['w wo ww', '6 6周 06'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', '下午 下午'],
+ ['[这年的第] DDDo', '这年的第 45日'],
+ ['LTS', '下午3点25分50秒'],
+ ['L', '2010-02-14'],
+ ['LL', '2010年2月14日'],
+ ['LLL', '2010年2月14日下午3点25分'],
+ ['LLLL', '2010年2月14日星期日下午3点25分'],
+ ['l', '2010-02-14'],
+ ['ll', '2010年2月14日'],
+ ['lll', '2010年2月14日下午3点25分'],
+ ['llll', '2010年2月14日星期日下午3点25分']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = '星期日 周日 日_星期一 周一 一_星期二 周二 二_星期三 周三 三_星期四 周四 四_星期五 周五 五_星期六 周六 六'.split('_'), i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '几秒', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 分钟', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 分钟', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 分钟', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 分钟', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 小时', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 小时', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 小时', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 小时', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 小时', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 天', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 天', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 天', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 天', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 天', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 天', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 个月', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 个月', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 个月', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 个月', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 个月', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 个月', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 个月', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 个月', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 年', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 年', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 年', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 年', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), '几秒内', 'prefix');
+ assert.equal(moment(0).from(30000), '几秒前', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), '几秒前', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), '几秒内', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 天内', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), '今天中午12点整', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), '今天中午12点25分', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), '今天下午1点整', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), '明天中午12点整', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), '今天上午11点整', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), '昨天中午12点整', 'yesterday at the same time');
+});
+
+test('calendar current week', function (assert) {
+ var i, m,
+ today = moment().startOf('day');
+
+ for (i = 0; i < 7; i++) {
+ m = moment().startOf('week').add({d: i});
+ if (Math.abs(m.diff(today, 'days')) <= 1) {
+ continue; // skip today, yesterday, tomorrow
+ }
+ assert.equal(m.calendar(), m.format('[本]ddd凌晨12点整'), 'Monday + ' + i + ' days current time');
+ }
+});
+
+test('calendar next week', function (assert) {
+ var i, m,
+ today = moment().startOf('day');
+
+ for (i = 7; i < 14; i++) {
+ m = moment().startOf('week').add({d: i});
+ if (Math.abs(m.diff(today, 'days')) >= 7) {
+ continue;
+ }
+ if (Math.abs(m.diff(today, 'days')) <= 1) {
+ continue; // skip today, yesterday, tomorrow
+ }
+ assert.equal(m.calendar(), m.format('[下]ddd凌晨12点整'), 'Today + ' + i + ' days beginning of day');
+ }
+ assert.equal(42, 42, 'at least one assert');
+});
+
+test('calendar last week', function (assert) {
+ var i, m,
+ today = moment().startOf('day');
+
+ for (i = 1; i < 8; i++) {
+ m = moment().startOf('week').subtract({d: i});
+ if ((Math.abs(m.diff(today, 'days')) >= 7) || (Math.abs(m.diff(today, 'days')) <= 1)) {
+ continue;
+ }
+ assert.equal(m.calendar(), m.format('[上]ddd凌晨12点整'), 'Monday - ' + i + ' days next week');
+ }
+ assert.equal(42, 42, 'at least one assert');
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('LL'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('LL'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('LL'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('LL'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), '凌晨', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 6, 0]).format('A'), '早上', 'morning');
+ assert.equal(moment([2011, 2, 23, 9, 0]).format('A'), '上午', 'before noon');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), '中午', 'noon');
+ assert.equal(moment([2011, 2, 23, 13, 0]).format('A'), '下午', 'afternoon');
+ assert.equal(moment([2011, 2, 23, 18, 0]).format('A'), '晚上', 'night');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '52 52 52周', 'Jan 1 2012 应该是第52周');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1周', 'Jan 7 2012 应该是第 1周');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2周', 'Jan 14 2012 应该是第 2周');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('zh-hk');
+
+test('parse', function (assert) {
+ var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'],
+ ['ddd, Ah', '週日, 下午3'],
+ ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14日 14'],
+ ['d do dddd ddd dd', '0 0日 星期日 週日 日'],
+ ['DDD DDDo DDDD', '45 45日 045'],
+ ['w wo ww', '8 8週 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', '下午 下午'],
+ ['[這年的第] DDDo', '這年的第 45日'],
+ ['LTS', '下午3點25分50秒'],
+ ['L', '2010年2月14日'],
+ ['LL', '2010年2月14日'],
+ ['LLL', '2010年2月14日下午3點25分'],
+ ['LLLL', '2010年2月14日星期日下午3點25分'],
+ ['l', '2010年2月14日'],
+ ['ll', '2010年2月14日'],
+ ['lll', '2010年2月14日下午3點25分'],
+ ['llll', '2010年2月14日星期日下午3點25分']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = '星期日 週日 日_星期一 週一 一_星期二 週二 二_星期三 週三 三_星期四 週四 四_星期五 週五 五_星期六 週六 六'.split('_'), i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '幾秒', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 分鐘', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 分鐘', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 分鐘', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 分鐘', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 小時', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 小時', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 小時', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 小時', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 小時', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 天', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 天', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 天', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 天', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 天', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 天', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 個月', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 個月', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 個月', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 個月', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 個月', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 個月', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 個月', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 個月', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 年', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 年', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 年', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 年', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), '幾秒內', 'prefix');
+ assert.equal(moment(0).from(30000), '幾秒前', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), '幾秒前', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), '幾秒內', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 天內', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), '今天中午12點00分', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), '今天中午12點25分', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), '今天下午1點00分', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), '明天中午12點00分', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), '今天上午11點00分', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), '昨天中午12點00分', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('a'), '凌晨', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 6, 0]).format('a'), '早上', 'morning');
+ assert.equal(moment([2011, 2, 23, 9, 0]).format('a'), '上午', 'before noon');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('a'), '中午', 'noon');
+ assert.equal(moment([2011, 2, 23, 13, 0]).format('a'), '下午', 'after noon');
+ assert.equal(moment([2011, 2, 23, 18, 0]).format('a'), '晚上', 'night');
+
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), '凌晨', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 6, 0]).format('A'), '早上', 'morning');
+ assert.equal(moment([2011, 2, 23, 9, 0]).format('A'), '上午', 'before noon');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), '中午', 'noon');
+ assert.equal(moment([2011, 2, 23, 13, 0]).format('A'), '下午', 'afternoon');
+ assert.equal(moment([2011, 2, 23, 18, 0]).format('A'), '晚上', 'night');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1週', 'Jan 1 2012 應該是第 1週');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1週', 'Jan 7 2012 應該是第 1週');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2週', 'Jan 8 2012 應該是第 2週');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2週', 'Jan 14 2012 應該是第 2週');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3週', 'Jan 15 2012 應該是第 3週');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+
+
+function localeModule (name, lifecycle) {
+ QUnit.module('locale:' + name, {
+ setup : function () {
+ moment.locale(name);
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ moment.locale('en');
+ teardownDeprecationHandler(test, moment, 'locale');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+ defineCommonLocaleTests(name, -1, -1);
+}
+
+localeModule('zh-tw');
+
+test('parse', function (assert) {
+ var tests = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i;
+ function equalTest(input, mmm, i) {
+ assert.equal(moment(input, mmm).month(), i, input + ' should be month ' + (i + 1));
+ }
+ for (i = 0; i < 12; i++) {
+ tests[i] = tests[i].split(' ');
+ equalTest(tests[i][0], 'MMM', i);
+ equalTest(tests[i][1], 'MMM', i);
+ equalTest(tests[i][0], 'MMMM', i);
+ equalTest(tests[i][1], 'MMMM', i);
+ equalTest(tests[i][0].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleLowerCase(), 'MMMM', i);
+ equalTest(tests[i][0].toLocaleUpperCase(), 'MMMM', i);
+ equalTest(tests[i][1].toLocaleUpperCase(), 'MMMM', i);
+ }
+});
+
+test('format', function (assert) {
+ var a = [
+ ['dddd, MMMM Do YYYY, a h:mm:ss', '星期日, 二月 14日 2010, 下午 3:25:50'],
+ ['ddd, Ah', '週日, 下午3'],
+ ['M Mo MM MMMM MMM', '2 2月 02 二月 2月'],
+ ['YYYY YY', '2010 10'],
+ ['D Do DD', '14 14日 14'],
+ ['d do dddd ddd dd', '0 0日 星期日 週日 日'],
+ ['DDD DDDo DDDD', '45 45日 045'],
+ ['w wo ww', '8 8週 08'],
+ ['h hh', '3 03'],
+ ['H HH', '15 15'],
+ ['m mm', '25 25'],
+ ['s ss', '50 50'],
+ ['a A', '下午 下午'],
+ ['[這年的第] DDDo', '這年的第 45日'],
+ ['LTS', '下午3點25分50秒'],
+ ['L', '2010年2月14日'],
+ ['LL', '2010年2月14日'],
+ ['LLL', '2010年2月14日下午3點25分'],
+ ['LLLL', '2010年2月14日星期日下午3點25分'],
+ ['l', '2010年2月14日'],
+ ['ll', '2010年2月14日'],
+ ['lll', '2010年2月14日下午3點25分'],
+ ['llll', '2010年2月14日星期日下午3點25分']
+ ],
+ b = moment(new Date(2010, 1, 14, 15, 25, 50, 125)),
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(b.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('format month', function (assert) {
+ var expected = '一月 1月_二月 2月_三月 3月_四月 4月_五月 5月_六月 6月_七月 7月_八月 8月_九月 9月_十月 10月_十一月 11月_十二月 12月'.split('_'), i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, i, 1]).format('MMMM MMM'), expected[i], expected[i]);
+ }
+});
+
+test('format week', function (assert) {
+ var expected = '星期日 週日 日_星期一 週一 一_星期二 週二 二_星期三 週三 三_星期四 週四 四_星期五 週五 五_星期六 週六 六'.split('_'), i;
+
+ for (i = 0; i < expected.length; i++) {
+ assert.equal(moment([2011, 0, 2 + i]).format('dddd ddd dd'), expected[i], expected[i]);
+ }
+});
+
+test('from', function (assert) {
+ var start = moment([2007, 1, 28]);
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44}), true), '幾秒', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45}), true), '1 分鐘', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89}), true), '1 分鐘', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '2 分鐘', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44}), true), '44 分鐘', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45}), true), '1 小時', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89}), true), '1 小時', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90}), true), '2 小時', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5}), true), '5 小時', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21}), true), '21 小時', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22}), true), '1 天', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35}), true), '1 天', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36}), true), '2 天', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1}), true), '1 天', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5}), true), '5 天', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25}), true), '25 天', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26}), true), '1 個月', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30}), true), '1 個月', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43}), true), '1 個月', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46}), true), '2 個月', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74}), true), '2 個月', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76}), true), '3 個月', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1}), true), '1 個月', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5}), true), '5 個月', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345}), true), '1 年', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548}), true), '2 年', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1}), true), '1 年', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5}), true), '5 年', '5 years = 5 years');
+});
+
+test('suffix', function (assert) {
+ assert.equal(moment(30000).from(0), '幾秒內', 'prefix');
+ assert.equal(moment(0).from(30000), '幾秒前', 'suffix');
+});
+
+test('now from now', function (assert) {
+ assert.equal(moment().fromNow(), '幾秒前', 'now from now should display as in the past');
+});
+
+test('fromNow', function (assert) {
+ assert.equal(moment().add({s: 30}).fromNow(), '幾秒內', 'in a few seconds');
+ assert.equal(moment().add({d: 5}).fromNow(), '5 天內', 'in 5 days');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), '今天中午12點00分', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), '今天中午12點25分', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), '今天下午1點00分', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), '明天中午12點00分', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), '今天上午11點00分', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), '昨天中午12點00分', 'yesterday at the same time');
+});
+
+test('calendar next week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().add({d: i});
+ assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[下]ddddLT'), 'Today + ' + i + ' days end of day');
+ }
+});
+
+test('calendar last week', function (assert) {
+ var i, m;
+ for (i = 2; i < 7; i++) {
+ m = moment().subtract({d: i});
+ assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days current time');
+ m.hours(0).minutes(0).seconds(0).milliseconds(0);
+ assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days beginning of day');
+ m.hours(23).minutes(59).seconds(59).milliseconds(999);
+ assert.equal(m.calendar(), m.format('[上]ddddLT'), 'Today - ' + i + ' days end of day');
+ }
+});
+
+test('calendar all else', function (assert) {
+ var weeksAgo = moment().subtract({w: 1}),
+ weeksFromNow = moment().add({w: 1});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '1 week ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 1 week');
+
+ weeksAgo = moment().subtract({w: 2});
+ weeksFromNow = moment().add({w: 2});
+
+ assert.equal(weeksAgo.calendar(), weeksAgo.format('L'), '2 weeks ago');
+ assert.equal(weeksFromNow.calendar(), weeksFromNow.format('L'), 'in 2 weeks');
+});
+
+test('meridiem', function (assert) {
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('a'), '凌晨', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 6, 0]).format('a'), '早上', 'morning');
+ assert.equal(moment([2011, 2, 23, 9, 0]).format('a'), '上午', 'before noon');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('a'), '中午', 'noon');
+ assert.equal(moment([2011, 2, 23, 13, 0]).format('a'), '下午', 'after noon');
+ assert.equal(moment([2011, 2, 23, 18, 0]).format('a'), '晚上', 'night');
+
+ assert.equal(moment([2011, 2, 23, 0, 0]).format('A'), '凌晨', 'before dawn');
+ assert.equal(moment([2011, 2, 23, 6, 0]).format('A'), '早上', 'morning');
+ assert.equal(moment([2011, 2, 23, 9, 0]).format('A'), '上午', 'before noon');
+ assert.equal(moment([2011, 2, 23, 12, 0]).format('A'), '中午', 'noon');
+ assert.equal(moment([2011, 2, 23, 13, 0]).format('A'), '下午', 'afternoon');
+ assert.equal(moment([2011, 2, 23, 18, 0]).format('A'), '晚上', 'night');
+});
+
+test('weeks year starting sunday format', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('w ww wo'), '1 01 1週', 'Jan 1 2012 應該是第 1週');
+ assert.equal(moment([2012, 0, 7]).format('w ww wo'), '1 01 1週', 'Jan 7 2012 應該是第 1週');
+ assert.equal(moment([2012, 0, 8]).format('w ww wo'), '2 02 2週', 'Jan 8 2012 應該是第 2週');
+ assert.equal(moment([2012, 0, 14]).format('w ww wo'), '2 02 2週', 'Jan 14 2012 應該是第 2週');
+ assert.equal(moment([2012, 0, 15]).format('w ww wo'), '3 03 3週', 'Jan 15 2012 應該是第 3週');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('add and subtract');
+
+test('add short reverse args', function (assert) {
+ var a = moment(), b, c, d;
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add({ms: 50}).milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add({s: 1}).seconds(), 9, 'Add seconds');
+ assert.equal(a.add({m: 1}).minutes(), 8, 'Add minutes');
+ assert.equal(a.add({h: 1}).hours(), 7, 'Add hours');
+ assert.equal(a.add({d: 1}).date(), 13, 'Add date');
+ assert.equal(a.add({w: 1}).date(), 20, 'Add week');
+ assert.equal(a.add({M: 1}).month(), 10, 'Add month');
+ assert.equal(a.add({y: 1}).year(), 2012, 'Add year');
+ assert.equal(a.add({Q: 1}).month(), 1, 'Add quarter');
+
+ b = moment([2010, 0, 31]).add({M: 1});
+ c = moment([2010, 1, 28]).subtract({M: 1});
+ d = moment([2010, 1, 28]).subtract({Q: 1});
+
+ assert.equal(b.month(), 1, 'add month, jan 31st to feb 28th');
+ assert.equal(b.date(), 28, 'add month, jan 31st to feb 28th');
+ assert.equal(c.month(), 0, 'subtract month, feb 28th to jan 28th');
+ assert.equal(c.date(), 28, 'subtract month, feb 28th to jan 28th');
+ assert.equal(d.month(), 10, 'subtract quarter, feb 28th 2010 to nov 28th 2009');
+ assert.equal(d.date(), 28, 'subtract quarter, feb 28th 2010 to nov 28th 2009');
+ assert.equal(d.year(), 2009, 'subtract quarter, feb 28th 2010 to nov 28th 2009');
+});
+
+test('add long reverse args', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add({milliseconds: 50}).milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add({seconds: 1}).seconds(), 9, 'Add seconds');
+ assert.equal(a.add({minutes: 1}).minutes(), 8, 'Add minutes');
+ assert.equal(a.add({hours: 1}).hours(), 7, 'Add hours');
+ assert.equal(a.add({days: 1}).date(), 13, 'Add date');
+ assert.equal(a.add({weeks: 1}).date(), 20, 'Add week');
+ assert.equal(a.add({months: 1}).month(), 10, 'Add month');
+ assert.equal(a.add({years: 1}).year(), 2012, 'Add year');
+ assert.equal(a.add({quarters: 1}).month(), 1, 'Add quarter');
+});
+
+test('add long singular reverse args', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add({millisecond: 50}).milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add({second: 1}).seconds(), 9, 'Add seconds');
+ assert.equal(a.add({minute: 1}).minutes(), 8, 'Add minutes');
+ assert.equal(a.add({hour: 1}).hours(), 7, 'Add hours');
+ assert.equal(a.add({day: 1}).date(), 13, 'Add date');
+ assert.equal(a.add({week: 1}).date(), 20, 'Add week');
+ assert.equal(a.add({month: 1}).month(), 10, 'Add month');
+ assert.equal(a.add({year: 1}).year(), 2012, 'Add year');
+ assert.equal(a.add({quarter: 1}).month(), 1, 'Add quarter');
+});
+
+test('add string long reverse args', function (assert) {
+ var a = moment(), b;
+
+ test.expectedDeprecations('moment().add(period, number)');
+
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ b = a.clone();
+
+ assert.equal(a.add('millisecond', 50).milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add('second', 1).seconds(), 9, 'Add seconds');
+ assert.equal(a.add('minute', 1).minutes(), 8, 'Add minutes');
+ assert.equal(a.add('hour', 1).hours(), 7, 'Add hours');
+ assert.equal(a.add('day', 1).date(), 13, 'Add date');
+ assert.equal(a.add('week', 1).date(), 20, 'Add week');
+ assert.equal(a.add('month', 1).month(), 10, 'Add month');
+ assert.equal(a.add('year', 1).year(), 2012, 'Add year');
+ assert.equal(b.add('day', '01').date(), 13, 'Add date');
+ assert.equal(a.add('quarter', 1).month(), 1, 'Add quarter');
+});
+
+test('add string long singular reverse args', function (assert) {
+ var a = moment(), b;
+
+ test.expectedDeprecations('moment().add(period, number)');
+
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ b = a.clone();
+
+ assert.equal(a.add('milliseconds', 50).milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add('seconds', 1).seconds(), 9, 'Add seconds');
+ assert.equal(a.add('minutes', 1).minutes(), 8, 'Add minutes');
+ assert.equal(a.add('hours', 1).hours(), 7, 'Add hours');
+ assert.equal(a.add('days', 1).date(), 13, 'Add date');
+ assert.equal(a.add('weeks', 1).date(), 20, 'Add week');
+ assert.equal(a.add('months', 1).month(), 10, 'Add month');
+ assert.equal(a.add('years', 1).year(), 2012, 'Add year');
+ assert.equal(b.add('days', '01').date(), 13, 'Add date');
+ assert.equal(a.add('quarters', 1).month(), 1, 'Add quarter');
+});
+
+test('add string short reverse args', function (assert) {
+ var a = moment();
+ test.expectedDeprecations('moment().add(period, number)');
+
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add('ms', 50).milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add('s', 1).seconds(), 9, 'Add seconds');
+ assert.equal(a.add('m', 1).minutes(), 8, 'Add minutes');
+ assert.equal(a.add('h', 1).hours(), 7, 'Add hours');
+ assert.equal(a.add('d', 1).date(), 13, 'Add date');
+ assert.equal(a.add('w', 1).date(), 20, 'Add week');
+ assert.equal(a.add('M', 1).month(), 10, 'Add month');
+ assert.equal(a.add('y', 1).year(), 2012, 'Add year');
+ assert.equal(a.add('Q', 1).month(), 1, 'Add quarter');
+});
+
+test('add string long', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add(50, 'millisecond').milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add(1, 'second').seconds(), 9, 'Add seconds');
+ assert.equal(a.add(1, 'minute').minutes(), 8, 'Add minutes');
+ assert.equal(a.add(1, 'hour').hours(), 7, 'Add hours');
+ assert.equal(a.add(1, 'day').date(), 13, 'Add date');
+ assert.equal(a.add(1, 'week').date(), 20, 'Add week');
+ assert.equal(a.add(1, 'month').month(), 10, 'Add month');
+ assert.equal(a.add(1, 'year').year(), 2012, 'Add year');
+ assert.equal(a.add(1, 'quarter').month(), 1, 'Add quarter');
+});
+
+test('add string long singular', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add(50, 'milliseconds').milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add(1, 'seconds').seconds(), 9, 'Add seconds');
+ assert.equal(a.add(1, 'minutes').minutes(), 8, 'Add minutes');
+ assert.equal(a.add(1, 'hours').hours(), 7, 'Add hours');
+ assert.equal(a.add(1, 'days').date(), 13, 'Add date');
+ assert.equal(a.add(1, 'weeks').date(), 20, 'Add week');
+ assert.equal(a.add(1, 'months').month(), 10, 'Add month');
+ assert.equal(a.add(1, 'years').year(), 2012, 'Add year');
+ assert.equal(a.add(1, 'quarters').month(), 1, 'Add quarter');
+});
+
+test('add string short', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add(50, 'ms').milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add(1, 's').seconds(), 9, 'Add seconds');
+ assert.equal(a.add(1, 'm').minutes(), 8, 'Add minutes');
+ assert.equal(a.add(1, 'h').hours(), 7, 'Add hours');
+ assert.equal(a.add(1, 'd').date(), 13, 'Add date');
+ assert.equal(a.add(1, 'w').date(), 20, 'Add week');
+ assert.equal(a.add(1, 'M').month(), 10, 'Add month');
+ assert.equal(a.add(1, 'y').year(), 2012, 'Add year');
+ assert.equal(a.add(1, 'Q').month(), 1, 'Add quarter');
+});
+
+test('add strings string short reversed', function (assert) {
+ var a = moment();
+ test.expectedDeprecations('moment().add(period, number)');
+
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add('ms', '50').milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add('s', '1').seconds(), 9, 'Add seconds');
+ assert.equal(a.add('m', '1').minutes(), 8, 'Add minutes');
+ assert.equal(a.add('h', '1').hours(), 7, 'Add hours');
+ assert.equal(a.add('d', '1').date(), 13, 'Add date');
+ assert.equal(a.add('w', '1').date(), 20, 'Add week');
+ assert.equal(a.add('M', '1').month(), 10, 'Add month');
+ assert.equal(a.add('y', '1').year(), 2012, 'Add year');
+ assert.equal(a.add('Q', '1').month(), 1, 'Add quarter');
+});
+
+test('subtract strings string short reversed', function (assert) {
+ var a = moment();
+ test.expectedDeprecations('moment().subtract(period, number)');
+
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.subtract('ms', '50').milliseconds(), 450, 'Subtract milliseconds');
+ assert.equal(a.subtract('s', '1').seconds(), 7, 'Subtract seconds');
+ assert.equal(a.subtract('m', '1').minutes(), 6, 'Subtract minutes');
+ assert.equal(a.subtract('h', '1').hours(), 5, 'Subtract hours');
+ assert.equal(a.subtract('d', '1').date(), 11, 'Subtract date');
+ assert.equal(a.subtract('w', '1').date(), 4, 'Subtract week');
+ assert.equal(a.subtract('M', '1').month(), 8, 'Subtract month');
+ assert.equal(a.subtract('y', '1').year(), 2010, 'Subtract year');
+ assert.equal(a.subtract('Q', '1').month(), 5, 'Subtract quarter');
+});
+
+test('add strings string short', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add('50', 'ms').milliseconds(), 550, 'Add milliseconds');
+ assert.equal(a.add('1', 's').seconds(), 9, 'Add seconds');
+ assert.equal(a.add('1', 'm').minutes(), 8, 'Add minutes');
+ assert.equal(a.add('1', 'h').hours(), 7, 'Add hours');
+ assert.equal(a.add('1', 'd').date(), 13, 'Add date');
+ assert.equal(a.add('1', 'w').date(), 20, 'Add week');
+ assert.equal(a.add('1', 'M').month(), 10, 'Add month');
+ assert.equal(a.add('1', 'y').year(), 2012, 'Add year');
+ assert.equal(a.add('1', 'Q').month(), 1, 'Add quarter');
+});
+
+test('add no string with milliseconds default', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.add(50).milliseconds(), 550, 'Add milliseconds');
+});
+
+test('subtract strings string short', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(500);
+
+ assert.equal(a.subtract('50', 'ms').milliseconds(), 450, 'Subtract milliseconds');
+ assert.equal(a.subtract('1', 's').seconds(), 7, 'Subtract seconds');
+ assert.equal(a.subtract('1', 'm').minutes(), 6, 'Subtract minutes');
+ assert.equal(a.subtract('1', 'h').hours(), 5, 'Subtract hours');
+ assert.equal(a.subtract('1', 'd').date(), 11, 'Subtract date');
+ assert.equal(a.subtract('1', 'w').date(), 4, 'Subtract week');
+ assert.equal(a.subtract('1', 'M').month(), 8, 'Subtract month');
+ assert.equal(a.subtract('1', 'y').year(), 2010, 'Subtract year');
+ assert.equal(a.subtract('1', 'Q').month(), 5, 'Subtract quarter');
+});
+
+test('add across DST', function (assert) {
+ // Detect Safari bug and bail. Hours on 13th March 2011 are shifted
+ // with 1 ahead.
+ if (new Date(2011, 2, 13, 5, 0, 0).getHours() !== 5) {
+ expect(0);
+ return;
+ }
+
+ var a = moment(new Date(2011, 2, 12, 5, 0, 0)),
+ b = moment(new Date(2011, 2, 12, 5, 0, 0)),
+ c = moment(new Date(2011, 2, 12, 5, 0, 0)),
+ d = moment(new Date(2011, 2, 12, 5, 0, 0)),
+ e = moment(new Date(2011, 2, 12, 5, 0, 0));
+ a.add(1, 'days');
+ b.add(24, 'hours');
+ c.add(1, 'months');
+ e.add(1, 'quarter');
+
+ assert.equal(a.hours(), 5, 'adding days over DST difference should result in the same hour');
+ if (b.isDST() && !d.isDST()) {
+ assert.equal(b.hours(), 6, 'adding hours over DST difference should result in a different hour');
+ } else if (!b.isDST() && d.isDST()) {
+ assert.equal(b.hours(), 4, 'adding hours over DST difference should result in a different hour');
+ } else {
+ assert.equal(b.hours(), 5, 'adding hours over DST difference should result in a same hour if the timezone does not have daylight savings time');
+ }
+ assert.equal(c.hours(), 5, 'adding months over DST difference should result in the same hour');
+ assert.equal(e.hours(), 5, 'adding quarters over DST difference should result in the same hour');
+});
+
+test('add decimal values of days and months', function (assert) {
+ assert.equal(moment([2016,3,3]).add(1.5, 'days').date(), 5, 'adding 1.5 days is rounded to adding 2 day');
+ assert.equal(moment([2016,3,3]).add(-1.5, 'days').date(), 1, 'adding -1.5 days is rounded to adding -2 day');
+ assert.equal(moment([2016,3,1]).add(-1.5, 'days').date(), 30, 'adding -1.5 days on first of month wraps around');
+ assert.equal(moment([2016,3,3]).add(1.5, 'months').month(), 5, 'adding 1.5 months adds 2 months');
+ assert.equal(moment([2016,3,3]).add(-1.5, 'months').month(), 1, 'adding -1.5 months adds -2 months');
+ assert.equal(moment([2016,0,3]).add(-1.5, 'months').month(), 10, 'adding -1.5 months at start of year wraps back');
+ assert.equal(moment([2016,3,3]).subtract(1.5, 'days').date(),1, 'subtract 1.5 days is rounded to subtract 2 day');
+ assert.equal(moment([2016,3,2]).subtract(1.5, 'days').date(), 31, 'subtract 1.5 days subtracts 2 days');
+ assert.equal(moment([2016,1,1]).subtract(1.1, 'days').date(), 31, 'subtract 1.1 days wraps to previous month');
+ assert.equal(moment([2016,3,3]).subtract(-1.5, 'days').date(), 5, 'subtract -1.5 days is rounded to subtract -2 day');
+ assert.equal(moment([2016,3,30]).subtract(-1.5, 'days').date(), 2, 'subtract -1.5 days on last of month wraps around');
+ assert.equal(moment([2016,3,3]).subtract(1.5, 'months').month(), 1, 'subtract 1.5 months subtract 2 months');
+ assert.equal(moment([2016,3,3]).subtract(-1.5, 'months').month(), 5, 'subtract -1.5 months subtract -2 month');
+ assert.equal(moment([2016,11,31]).subtract(-1.5, 'months').month(),1, 'subtract -1.5 months at end of year wraps back');
+ assert.equal(moment([2016, 0,1]).add(1.5, 'years').format('YYYY-MM-DD'), '2017-07-01', 'add 1.5 years adds 1 year six months');
+ assert.equal(moment([2016, 0,1]).add(1.6, 'years').format('YYYY-MM-DD'), '2017-08-01', 'add 1.6 years becomes 1.6*12 = 19.2, round, 19 months');
+ assert.equal(moment([2016,0,1]).add(1.1, 'quarters').format('YYYY-MM-DD'), '2016-04-01', 'add 1.1 quarters 1.1*3=3.3, round, 3 months');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+// These tests are for locale independent features
+// locale dependent tests would be in locale test folder
+module$1('calendar');
+
+test('passing a function', function (assert) {
+ var a = moment().hours(13).minutes(0).seconds(0);
+ assert.equal(moment(a).calendar(null, {
+ 'sameDay': function () {
+ return 'h:mmA';
+ }
+ }), '1:00PM', 'should equate');
+});
+
+test('extending calendar options', function (assert) {
+ var calendarFormat = moment.calendarFormat;
+
+ moment.calendarFormat = function (myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ var nextMonth = now.clone().add(1, 'month');
+
+ var retVal = diff < -6 ? 'sameElse' :
+ diff < -1 ? 'lastWeek' :
+ diff < 0 ? 'lastDay' :
+ diff < 1 ? 'sameDay' :
+ diff < 2 ? 'nextDay' :
+ diff < 7 ? 'nextWeek' :
+ (myMoment.month() === now.month() && myMoment.year() === now.year()) ? 'thisMonth' :
+ (nextMonth.month() === myMoment.month() && nextMonth.year() === myMoment.year()) ? 'nextMonth' : 'sameElse';
+ return retVal;
+ };
+
+ moment.updateLocale('en', {
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ thisMonth : '[This month on the] Do',
+ nextMonth : '[Next month on the] Do',
+ sameElse : 'L'
+ }
+ });
+ var a = moment('2016-01-01').add(28, 'days');
+ var b = moment('2016-01-01').add(1, 'month');
+ try {
+ assert.equal(a.calendar('2016-01-01'), 'This month on the 29th', 'Ad hoc calendar format for this month');
+ assert.equal(b.calendar('2016-01-01'), 'Next month on the 1st', 'Ad hoc calendar format for next month');
+ assert.equal(a.locale('fr').calendar('2016-01-01'), a.locale('fr').format('L'), 'French falls back to default because thisMonth is not defined in that locale');
+ } finally {
+ moment.calendarFormat = calendarFormat;
+ moment.updateLocale('en', null);
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('create');
+
+test('array', function (assert) {
+ assert.ok(moment([2010]).toDate() instanceof Date, '[2010]');
+ assert.ok(moment([2010, 1]).toDate() instanceof Date, '[2010, 1]');
+ assert.ok(moment([2010, 1, 12]).toDate() instanceof Date, '[2010, 1, 12]');
+ assert.ok(moment([2010, 1, 12, 1]).toDate() instanceof Date, '[2010, 1, 12, 1]');
+ assert.ok(moment([2010, 1, 12, 1, 1]).toDate() instanceof Date, '[2010, 1, 12, 1, 1]');
+ assert.ok(moment([2010, 1, 12, 1, 1, 1]).toDate() instanceof Date, '[2010, 1, 12, 1, 1, 1]');
+ assert.ok(moment([2010, 1, 12, 1, 1, 1, 1]).toDate() instanceof Date, '[2010, 1, 12, 1, 1, 1, 1]');
+ assert.equal(+moment(new Date(2010, 1, 14, 15, 25, 50, 125)), +moment([2010, 1, 14, 15, 25, 50, 125]), 'constructing with array === constructing with new Date()');
+});
+
+test('array with invalid arguments', function (assert) {
+ assert.ok(!moment([2010, null, null]).isValid(), '[2010, null, null]');
+ assert.ok(!moment([1945, null, null]).isValid(), '[1945, null, null] (pre-1970)');
+});
+
+test('array copying', function (assert) {
+ var importantArray = [2009, 11];
+ moment(importantArray);
+ assert.deepEqual(importantArray, [2009, 11], 'initializer should not mutate the original array');
+});
+
+test('object', function (assert) {
+ var fmt = 'YYYY-MM-DD HH:mm:ss.SSS',
+ tests = [
+ [{year: 2010}, '2010-01-01 00:00:00.000'],
+ [{year: 2010, month: 1}, '2010-02-01 00:00:00.000'],
+ [{year: 2010, month: 1, day: 12}, '2010-02-12 00:00:00.000'],
+ [{year: 2010, month: 1, date: 12}, '2010-02-12 00:00:00.000'],
+ [{year: 2010, month: 1, day: 12, hours: 1}, '2010-02-12 01:00:00.000'],
+ [{year: 2010, month: 1, date: 12, hours: 1}, '2010-02-12 01:00:00.000'],
+ [{year: 2010, month: 1, day: 12, hours: 1, minutes: 1}, '2010-02-12 01:01:00.000'],
+ [{year: 2010, month: 1, date: 12, hours: 1, minutes: 1}, '2010-02-12 01:01:00.000'],
+ [{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1}, '2010-02-12 01:01:01.000'],
+ [{year: 2010, month: 1, day: 12, hours: 1, minutes: 1, seconds: 1, milliseconds: 1}, '2010-02-12 01:01:01.001'],
+ [{years: 2010, months: 1, days: 14, hours: 15, minutes: 25, seconds: 50, milliseconds: 125}, '2010-02-14 15:25:50.125'],
+ [{year: 2010, month: 1, day: 14, hour: 15, minute: 25, second: 50, millisecond: 125}, '2010-02-14 15:25:50.125'],
+ [{y: 2010, M: 1, d: 14, h: 15, m: 25, s: 50, ms: 125}, '2010-02-14 15:25:50.125']
+ ], i;
+ for (i = 0; i < tests.length; ++i) {
+ assert.equal(moment(tests[i][0]).format(fmt), tests[i][1]);
+ }
+});
+
+test('multi format array copying', function (assert) {
+ var importantArray = ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'];
+ moment('1999-02-13', importantArray);
+ assert.deepEqual(importantArray, ['MM/DD/YYYY', 'YYYY-MM-DD', 'MM-DD-YYYY'], 'initializer should not mutate the original array');
+});
+
+test('number', function (assert) {
+ assert.ok(moment(1000).toDate() instanceof Date, '1000');
+ assert.equal(moment(1000).valueOf(), 1000, 'asserting valueOf');
+ assert.equal(moment.utc(1000).valueOf(), 1000, 'asserting valueOf');
+});
+
+test('unix', function (assert) {
+ assert.equal(moment.unix(1).valueOf(), 1000, '1 unix timestamp == 1000 Date.valueOf');
+ assert.equal(moment(1000).unix(), 1, '1000 Date.valueOf == 1 unix timestamp');
+ assert.equal(moment.unix(1000).valueOf(), 1000000, '1000 unix timestamp == 1000000 Date.valueOf');
+ assert.equal(moment(1500).unix(), 1, '1500 Date.valueOf == 1 unix timestamp');
+ assert.equal(moment(1900).unix(), 1, '1900 Date.valueOf == 1 unix timestamp');
+ assert.equal(moment(2100).unix(), 2, '2100 Date.valueOf == 2 unix timestamp');
+ assert.equal(moment(1333129333524).unix(), 1333129333, '1333129333524 Date.valueOf == 1333129333 unix timestamp');
+ assert.equal(moment(1333129333524000).unix(), 1333129333524, '1333129333524000 Date.valueOf == 1333129333524 unix timestamp');
+});
+
+test('date', function (assert) {
+ assert.ok(moment(new Date()).toDate() instanceof Date, 'new Date()');
+ assert.equal(moment(new Date(2016,0,1), 'YYYY-MM-DD').format('YYYY-MM-DD'), '2016-01-01', 'If date is provided, format string is ignored');
+});
+
+test('date with a format as an array', function (assert) {
+ var tests = [
+ new Date(2016, 9, 27),
+ new Date(2016, 9, 28),
+ new Date(2016, 9, 29),
+ new Date(2016, 9, 30),
+ new Date(2016, 9, 31)
+ ], i;
+
+ for (i = 0; i < tests.length; i++) {
+ assert.equal(moment(tests[i]).format(), moment(tests[i], ['MM/DD/YYYY'], false).format(), 'Passing date with a format array should still return the correct date');
+ }
+});
+
+test('date mutation', function (assert) {
+ var a = new Date();
+ assert.ok(moment(a).toDate() !== a, 'the date moment uses should not be the date passed in');
+});
+
+test('moment', function (assert) {
+ assert.ok(moment(moment()).toDate() instanceof Date, 'moment(moment())');
+ assert.ok(moment(moment(moment())).toDate() instanceof Date, 'moment(moment(moment()))');
+});
+
+test('cloning moment should only copy own properties', function (assert) {
+ assert.ok(!moment().clone().hasOwnProperty('month'), 'Should not clone prototype methods');
+});
+
+test('cloning moment works with weird clones', function (assert) {
+ var extend = function (a, b) {
+ var i;
+ for (i in b) {
+ a[i] = b[i];
+ }
+ return a;
+ },
+ now = moment(),
+ nowu = moment.utc();
+
+ assert.equal(+extend({}, now).clone(), +now, 'cloning extend-ed now is now');
+ assert.equal(+extend({}, nowu).clone(), +nowu, 'cloning extend-ed utc now is utc now');
+});
+
+test('cloning respects moment.momentProperties', function (assert) {
+ var m = moment();
+
+ assert.equal(m.clone()._special, undefined, 'cloning ignores extra properties');
+ m._special = 'bacon';
+ moment.momentProperties.push('_special');
+ assert.equal(m.clone()._special, 'bacon', 'cloning respects momentProperties');
+ moment.momentProperties.pop();
+});
+
+test('undefined', function (assert) {
+ assert.ok(moment().toDate() instanceof Date, 'undefined');
+});
+
+test('iso with bad input', function (assert) {
+ assert.ok(!moment('a', moment.ISO_8601).isValid(), 'iso parsing with invalid string');
+ assert.ok(!moment('a', moment.ISO_8601, true).isValid(), 'iso parsing with invalid string, strict');
+});
+
+test('iso format 24hrs', function (assert) {
+ assert.equal(moment('2014-01-01T24:00:00.000').format('YYYY-MM-DD[T]HH:mm:ss.SSS'),
+ '2014-01-02T00:00:00.000', 'iso format with 24:00 localtime');
+ assert.equal(moment.utc('2014-01-01T24:00:00.000').format('YYYY-MM-DD[T]HH:mm:ss.SSS'),
+ '2014-01-02T00:00:00.000', 'iso format with 24:00 utc');
+});
+
+test('string without format - json', function (assert) {
+ assert.equal(moment('Date(1325132654000)').valueOf(), 1325132654000, 'Date(1325132654000)');
+ assert.equal(moment('Date(-1325132654000)').valueOf(), -1325132654000, 'Date(-1325132654000)');
+ assert.equal(moment('/Date(1325132654000)/').valueOf(), 1325132654000, '/Date(1325132654000)/');
+ assert.equal(moment('/Date(1325132654000+0700)/').valueOf(), 1325132654000, '/Date(1325132654000+0700)/');
+ assert.equal(moment('/Date(1325132654000-0700)/').valueOf(), 1325132654000, '/Date(1325132654000-0700)/');
+});
+
+test('string with format dropped am/pm bug', function (assert) {
+ moment.locale('en');
+
+ assert.equal(moment('05/1/2012 12:25:00', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens');
+ assert.equal(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens');
+ assert.equal(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').format('MM/DD/YYYY'), '05/01/2012', 'should not break if am/pm is left off from the parsing tokens');
+
+ assert.ok(moment('05/1/2012 12:25:00', 'MM/DD/YYYY h:m:s a').isValid());
+ assert.ok(moment('05/1/2012 12:25:00 am', 'MM/DD/YYYY h:m:s a').isValid());
+ assert.ok(moment('05/1/2012 12:25:00 pm', 'MM/DD/YYYY h:m:s a').isValid());
+});
+
+test('empty string with formats', function (assert) {
+ assert.equal(moment('', 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+ assert.equal(moment(' ', 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+ assert.equal(moment(' ', 'DD').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+ assert.equal(moment(' ', ['MM', 'DD']).format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+
+ assert.ok(!moment('', 'MM').isValid());
+ assert.ok(!moment(' ', 'MM').isValid());
+ assert.ok(!moment(' ', 'DD').isValid());
+ assert.ok(!moment(' ', ['MM', 'DD']).isValid());
+});
+
+test('undefined argument with formats', function (assert) {
+ assert.equal(moment(undefined, 'MM').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+ assert.equal(moment(undefined, 'DD').format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+ assert.equal(moment(undefined, ['MM', 'DD']).format('YYYY-MM-DD HH:mm:ss'), 'Invalid date');
+
+ assert.ok(!moment(undefined, 'MM').isValid());
+ assert.ok(!moment(undefined, 'MM').isValid());
+ assert.ok(!moment(undefined, 'DD').isValid());
+ assert.ok(!moment(undefined, ['MM', 'DD']).isValid());
+});
+
+test('defaulting to current date', function (assert) {
+ var now = moment();
+ assert.equal(moment('12:13:14', 'hh:mm:ss').format('YYYY-MM-DD hh:mm:ss'),
+ now.clone().hour(12).minute(13).second(14).format('YYYY-MM-DD hh:mm:ss'),
+ 'given only time default to current date');
+ assert.equal(moment('05', 'DD').format('YYYY-MM-DD'),
+ now.clone().date(5).format('YYYY-MM-DD'),
+ 'given day of month default to current month, year');
+ assert.equal(moment('05', 'MM').format('YYYY-MM-DD'),
+ now.clone().month(4).date(1).format('YYYY-MM-DD'),
+ 'given month default to current year');
+ assert.equal(moment('1996', 'YYYY').format('YYYY-MM-DD'),
+ now.clone().year(1996).month(0).date(1).format('YYYY-MM-DD'),
+ 'given year do not default');
+});
+
+test('matching am/pm', function (assert) {
+ assert.equal(moment('2012-09-03T03:00PM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for PM');
+ assert.equal(moment('2012-09-03T03:00P.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P.M.');
+ assert.equal(moment('2012-09-03T03:00P', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for P');
+ assert.equal(moment('2012-09-03T03:00pm', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for pm');
+ assert.equal(moment('2012-09-03T03:00p.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p.m.');
+ assert.equal(moment('2012-09-03T03:00p', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00PM', 'am/pm should parse correctly for p');
+
+ assert.equal(moment('2012-09-03T03:00AM', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for AM');
+ assert.equal(moment('2012-09-03T03:00A.M.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A.M.');
+ assert.equal(moment('2012-09-03T03:00A', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for A');
+ assert.equal(moment('2012-09-03T03:00am', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for am');
+ assert.equal(moment('2012-09-03T03:00a.m.', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a.m.');
+ assert.equal(moment('2012-09-03T03:00a', 'YYYY-MM-DDThh:mmA').format('YYYY-MM-DDThh:mmA'), '2012-09-03T03:00AM', 'am/pm should parse correctly for a');
+
+ assert.equal(moment('5:00p.m.March 4 2012', 'h:mmAMMMM D YYYY').format('YYYY-MM-DDThh:mmA'), '2012-03-04T05:00PM', 'am/pm should parse correctly before month names');
+});
+
+test('string with format', function (assert) {
+ moment.locale('en');
+ var a = [
+ ['YYYY-Q', '2014-4'],
+ ['MM-DD-YYYY', '12-02-1999'],
+ ['DD-MM-YYYY', '12-02-1999'],
+ ['DD/MM/YYYY', '12/02/1999'],
+ ['DD_MM_YYYY', '12_02_1999'],
+ ['DD:MM:YYYY', '12:02:1999'],
+ ['D-M-YY', '2-2-99'],
+ ['YY', '99'],
+ ['DDD-YYYY', '300-1999'],
+ ['DD-MM-YYYY h:m:s', '12-02-1999 2:45:10'],
+ ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 am'],
+ ['DD-MM-YYYY h:m:s a', '12-02-1999 2:45:10 pm'],
+ ['h:mm a', '12:00 pm'],
+ ['h:mm a', '12:30 pm'],
+ ['h:mm a', '12:00 am'],
+ ['h:mm a', '12:30 am'],
+ ['HH:mm', '12:00'],
+ ['YYYY-MM-DDTHH:mm:ss', '2011-11-11T11:11:11'],
+ ['MM-DD-YYYY [M]', '12-02-1999 M'],
+ ['ddd MMM DD HH:mm:ss YYYY', 'Tue Apr 07 22:52:51 2009'],
+ ['HH:mm:ss', '12:00:00'],
+ ['HH:mm:ss', '12:30:00'],
+ ['HH:mm:ss', '00:00:00'],
+ ['HH:mm:ss S', '00:30:00 1'],
+ ['HH:mm:ss SS', '00:30:00 12'],
+ ['HH:mm:ss SSS', '00:30:00 123'],
+ ['HH:mm:ss S', '00:30:00 7'],
+ ['HH:mm:ss SS', '00:30:00 78'],
+ ['HH:mm:ss SSS', '00:30:00 789'],
+ ['X', '1234567890'],
+ ['x', '1234567890123'],
+ ['LT', '12:30 AM'],
+ ['LTS', '12:30:29 AM'],
+ ['L', '09/02/1999'],
+ ['l', '9/2/1999'],
+ ['LL', 'September 2, 1999'],
+ ['ll', 'Sep 2, 1999'],
+ ['LLL', 'September 2, 1999 12:30 AM'],
+ ['lll', 'Sep 2, 1999 12:30 AM'],
+ ['LLLL', 'Thursday, September 2, 1999 12:30 AM'],
+ ['llll', 'Thu, Sep 2, 1999 12:30 AM']
+ ],
+ m,
+ i;
+
+ for (i = 0; i < a.length; i++) {
+ m = moment(a[i][1], a[i][0]);
+ assert.ok(m.isValid());
+ assert.equal(m.format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('2 digit year with YYYY format', function (assert) {
+ assert.equal(moment('9/2/99', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1999', 'D/M/YYYY ---> 9/2/99');
+ assert.equal(moment('9/2/1999', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1999', 'D/M/YYYY ---> 9/2/1999');
+ assert.equal(moment('9/2/68', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/2068', 'D/M/YYYY ---> 9/2/68');
+ assert.equal(moment('9/2/69', 'D/M/YYYY').format('DD/MM/YYYY'), '09/02/1969', 'D/M/YYYY ---> 9/2/69');
+});
+
+test('unix timestamp format', function (assert) {
+ var formats = ['X', 'X.S', 'X.SS', 'X.SSS'], i, format;
+
+ for (i = 0; i < formats.length; i++) {
+ format = formats[i];
+ assert.equal(moment('1234567890', format).valueOf(), 1234567890 * 1000, format + ' matches timestamp without milliseconds');
+ assert.equal(moment('1234567890.1', format).valueOf(), 1234567890 * 1000 + 100, format + ' matches timestamp with deciseconds');
+ assert.equal(moment('1234567890.12', format).valueOf(), 1234567890 * 1000 + 120, format + ' matches timestamp with centiseconds');
+ assert.equal(moment('1234567890.123', format).valueOf(), 1234567890 * 1000 + 123, format + ' matches timestamp with milliseconds');
+ }
+});
+
+test('unix offset milliseconds', function (assert) {
+ assert.equal(moment('1234567890123', 'x').valueOf(), 1234567890123, 'x matches unix offset in milliseconds');
+});
+
+test('milliseconds format', function (assert) {
+ assert.equal(moment('1', 'S').get('ms'), 100, 'deciseconds');
+ // assert.equal(moment('10', 'S', true).isValid(), false, 'deciseconds with two digits');
+ // assert.equal(moment('1', 'SS', true).isValid(), false, 'centiseconds with one digits');
+ assert.equal(moment('12', 'SS').get('ms'), 120, 'centiseconds');
+ // assert.equal(moment('123', 'SS', true).isValid(), false, 'centiseconds with three digits');
+ assert.equal(moment('123', 'SSS').get('ms'), 123, 'milliseconds');
+ assert.equal(moment('1234', 'SSSS').get('ms'), 123, 'milliseconds with SSSS');
+ assert.equal(moment('123456789101112', 'SSSS').get('ms'), 123, 'milliseconds with SSSS');
+});
+
+test('string with format no separators', function (assert) {
+ moment.locale('en');
+ var a = [
+ ['MMDDYYYY', '12021999'],
+ ['DDMMYYYY', '12021999'],
+ ['YYYYMMDD', '19991202'],
+ ['DDMMMYYYY', '10Sep2001']
+ ], i;
+
+ for (i = 0; i < a.length; i++) {
+ assert.equal(moment(a[i][1], a[i][0]).format(a[i][0]), a[i][1], a[i][0] + ' ---> ' + a[i][1]);
+ }
+});
+
+test('string with format (timezone)', function (assert) {
+ assert.equal(moment('5 -0700', 'H ZZ').toDate().getUTCHours(), 12, 'parse hours \'5 -0700\' ---> \'H ZZ\'');
+ assert.equal(moment('5 -07:00', 'H Z').toDate().getUTCHours(), 12, 'parse hours \'5 -07:00\' ---> \'H Z\'');
+ assert.equal(moment('5 -0730', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours \'5 -0730\' ---> \'H ZZ\'');
+ assert.equal(moment('5 -07:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours \'5 -07:0\' ---> \'H Z\'');
+ assert.equal(moment('5 +0100', 'H ZZ').toDate().getUTCHours(), 4, 'parse hours \'5 +0100\' ---> \'H ZZ\'');
+ assert.equal(moment('5 +01:00', 'H Z').toDate().getUTCHours(), 4, 'parse hours \'5 +01:00\' ---> \'H Z\'');
+ assert.equal(moment('5 +0130', 'H ZZ').toDate().getUTCMinutes(), 30, 'parse hours \'5 +0130\' ---> \'H ZZ\'');
+ assert.equal(moment('5 +01:30', 'H Z').toDate().getUTCMinutes(), 30, 'parse hours \'5 +01:30\' ---> \'H Z\'');
+});
+
+test('string with format (timezone offset)', function (assert) {
+ var a, b, c, d, e, f;
+ a = new Date(Date.UTC(2011, 0, 1, 1));
+ b = moment('2011 1 1 0 -01:00', 'YYYY MM DD HH Z');
+ assert.equal(a.getHours(), b.hours(), 'date created with utc == parsed string with timezone offset');
+ assert.equal(+a, +b, 'date created with utc == parsed string with timezone offset');
+ c = moment('2011 2 1 10 -05:00', 'YYYY MM DD HH Z');
+ d = moment('2011 2 1 8 -07:00', 'YYYY MM DD HH Z');
+ assert.equal(c.hours(), d.hours(), '10 am central time == 8 am pacific time');
+ e = moment.utc('Fri, 20 Jul 2012 17:15:00', 'ddd, DD MMM YYYY HH:mm:ss');
+ f = moment.utc('Fri, 20 Jul 2012 10:15:00 -0700', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
+ assert.equal(e.hours(), f.hours(), 'parse timezone offset in utc');
+});
+
+test('string with timezone around start of year', function (assert) {
+ assert.equal(moment('2000-01-01T00:00:00.000+01:00').toISOString(), '1999-12-31T23:00:00.000Z', '+1:00 around 2000');
+ assert.equal(moment('2000-01-01T00:00:00.000-01:00').toISOString(), '2000-01-01T01:00:00.000Z', '-1:00 around 2000');
+ assert.equal(moment('1970-01-01T00:00:00.000+01:00').toISOString(), '1969-12-31T23:00:00.000Z', '+1:00 around 1970');
+ assert.equal(moment('1970-01-01T00:00:00.000-01:00').toISOString(), '1970-01-01T01:00:00.000Z', '-1:00 around 1970');
+ assert.equal(moment('1200-01-01T00:00:00.000+01:00').toISOString(), '1199-12-31T23:00:00.000Z', '+1:00 around 1200');
+ assert.equal(moment('1200-01-01T00:00:00.000-01:00').toISOString(), '1200-01-01T01:00:00.000Z', '-1:00 around 1200');
+});
+
+test('string with array of formats', function (assert) {
+ var thursdayForCurrentWeek = moment()
+ .day(4)
+ .format('YYYY MM DD');
+
+ assert.equal(moment('11-02-1999', ['MM-DD-YYYY', 'DD-MM-YYYY']).format('MM DD YYYY'), '11 02 1999', 'switching month and day');
+ assert.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last');
+ assert.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD', 'MM-DD-YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first');
+
+ assert.equal(moment('02-11-1999', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year last');
+ assert.equal(moment('1999-02-11', ['MM/DD/YYYY', 'YYYY MM DD']).format('MM DD YYYY'), '02 11 1999', 'year first');
+ assert.equal(moment('02-11-1999', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year last');
+ assert.equal(moment('1999-02-11', ['YYYY MM DD', 'MM/DD/YYYY']).format('MM DD YYYY'), '02 11 1999', 'year first');
+
+ assert.equal(moment('13-11-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'second must be month');
+ assert.equal(moment('11-13-1999', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '11 13 1999', 'first must be month');
+ assert.equal(moment('01-02-2000', ['MM/DD/YYYY', 'DD/MM/YYYY']).format('MM DD YYYY'), '01 02 2000', 'either can be a month, month first format');
+ assert.equal(moment('02-01-2000', ['DD/MM/YYYY', 'MM/DD/YYYY']).format('MM DD YYYY'), '01 02 2000', 'either can be a month, day first format');
+
+ assert.equal(moment('11-02-10', ['MM/DD/YY', 'YY MM DD', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'all unparsed substrings have influence on format penalty');
+ assert.equal(moment('11-02-10', ['MM-DD-YY HH:mm', 'YY MM DD']).format('MM DD YYYY'), '02 10 2011', 'prefer formats without extra tokens');
+ assert.equal(moment('11-02-10 junk', ['MM-DD-YY', 'YY.MM.DD junk']).format('MM DD YYYY'), '02 10 2011', 'prefer formats that dont result in extra characters');
+ assert.equal(moment('11-22-10', ['YY-MM-DD', 'YY-DD-MM']).format('MM DD YYYY'), '10 22 2011', 'prefer valid results');
+
+ assert.equal(moment('gibberish', ['YY-MM-DD', 'YY-DD-MM']).format('MM DD YYYY'), 'Invalid date', 'doest throw for invalid strings');
+ assert.equal(moment('gibberish', []).format('MM DD YYYY'), 'Invalid date', 'doest throw for an empty array');
+
+ //https://github.com/moment/moment/issues/1143
+ assert.equal(moment(
+ 'System Administrator and Database Assistant (7/1/2011), System Administrator and Database Assistant (7/1/2011), Database Coordinator (7/1/2011), Vice President (7/1/2011), System Administrator and Database Assistant (5/31/2012), Database Coordinator (7/1/2012), System Administrator and Database Assistant (7/1/2013)',
+ ['MM/DD/YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD', 'YYYY-MM-DDTHH:mm:ssZ'])
+ .format('YYYY-MM-DD'), '2011-07-01', 'Works for long strings');
+
+ assert.equal(moment('11-02-10', ['MM.DD.YY', 'DD-MM-YY']).format('MM DD YYYY'), '02 11 2010', 'escape RegExp special characters on comparing');
+
+ assert.equal(moment('13-10-98', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YY', 'use two digit year');
+ assert.equal(moment('13-10-1998', ['DD MM YY', 'DD MM YYYY'])._f, 'DD MM YYYY', 'use four digit year');
+
+ assert.equal(moment('01', ['MM', 'DD'])._f, 'MM', 'Should use first valid format');
+
+ assert.equal(moment('Thursday 8:30pm', ['dddd h:mma']).format('YYYY MM DD dddd h:mma'), thursdayForCurrentWeek + ' Thursday 8:30pm', 'Default to current week');
+});
+
+test('string with array of formats + ISO', function (assert) {
+ assert.equal(moment('1994', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).year(), 1994, 'iso: assert parse YYYY');
+ assert.equal(moment('17:15', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).hour(), 17, 'iso: assert parse HH:mm (1)');
+ assert.equal(moment('17:15', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).minutes(), 15, 'iso: assert parse HH:mm (2)');
+ assert.equal(moment('06', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).month(), 6 - 1, 'iso: assert parse MM');
+ assert.equal(moment('2012-06-01', [moment.ISO_8601, 'MM', 'HH:mm', 'YYYY']).parsingFlags().iso, true, 'iso: assert parse iso');
+ assert.equal(moment('2014-05-05', [moment.ISO_8601, 'YYYY-MM-DD']).parsingFlags().iso, true, 'iso: edge case array precedence iso');
+ assert.equal(moment('2014-05-05', ['YYYY-MM-DD', moment.ISO_8601]).parsingFlags().iso, false, 'iso: edge case array precedence not iso');
+});
+
+test('string with format - years', function (assert) {
+ assert.equal(moment('67', 'YY').format('YYYY'), '2067', '67 > 2067');
+ assert.equal(moment('68', 'YY').format('YYYY'), '2068', '68 > 2068');
+ assert.equal(moment('69', 'YY').format('YYYY'), '1969', '69 > 1969');
+ assert.equal(moment('70', 'YY').format('YYYY'), '1970', '70 > 1970');
+});
+
+test('implicit cloning', function (assert) {
+ var momentA = moment([2011, 10, 10]),
+ momentB = moment(momentA);
+ momentA.month(5);
+ assert.equal(momentB.month(), 10, 'Calling moment() on a moment will create a clone');
+ assert.equal(momentA.month(), 5, 'Calling moment() on a moment will create a clone');
+});
+
+test('explicit cloning', function (assert) {
+ var momentA = moment([2011, 10, 10]),
+ momentB = momentA.clone();
+ momentA.month(5);
+ assert.equal(momentB.month(), 10, 'Calling moment() on a moment will create a clone');
+ assert.equal(momentA.month(), 5, 'Calling moment() on a moment will create a clone');
+});
+
+test('cloning carrying over utc mode', function (assert) {
+ assert.equal(moment().local().clone()._isUTC, false, 'An explicit cloned local moment should have _isUTC == false');
+ assert.equal(moment().utc().clone()._isUTC, true, 'An cloned utc moment should have _isUTC == true');
+ assert.equal(moment().clone()._isUTC, false, 'An explicit cloned local moment should have _isUTC == false');
+ assert.equal(moment.utc().clone()._isUTC, true, 'An explicit cloned utc moment should have _isUTC == true');
+ assert.equal(moment(moment().local())._isUTC, false, 'An implicit cloned local moment should have _isUTC == false');
+ assert.equal(moment(moment().utc())._isUTC, true, 'An implicit cloned utc moment should have _isUTC == true');
+ assert.equal(moment(moment())._isUTC, false, 'An implicit cloned local moment should have _isUTC == false');
+ assert.equal(moment(moment.utc())._isUTC, true, 'An implicit cloned utc moment should have _isUTC == true');
+});
+
+test('parsing iso', function (assert) {
+ var offset = moment([2011, 9, 8]).utcOffset(),
+ pad = function (input) {
+ if (input < 10) {
+ return '0' + input;
+ }
+ return '' + input;
+ },
+ hourOffset = (offset > 0 ? Math.floor(offset / 60) : Math.ceil(offset / 60)),
+ minOffset = offset - (hourOffset * 60),
+ tz = (offset >= 0) ?
+ '+' + pad(hourOffset) + ':' + pad(minOffset) :
+ '-' + pad(-hourOffset) + ':' + pad(-minOffset),
+ tz2 = tz.replace(':', ''),
+ tz3 = tz2.slice(0, 3),
+ //Tz3 removes minutes digit so will break the tests when parsed if they all use the same minutes digit
+ minutesForTz3 = pad((4 + minOffset) % 60),
+ minute = pad(4 + minOffset),
+
+ formats = [
+ ['2011-10-08', '2011-10-08T00:00:00.000' + tz],
+ ['2011-10-08T18', '2011-10-08T18:00:00.000' + tz],
+ ['2011-10-08T18:04', '2011-10-08T18:04:00.000' + tz],
+ ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000' + tz],
+ ['2011-10-08T18:04' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011-10-08T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011-10-08T18:04' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011-10-08T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011-10-08T18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011-10-08T18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011-10-08T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011-10-08T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011-10-08T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011-10-08 18', '2011-10-08T18:00:00.000' + tz],
+ ['2011-10-08 18:04', '2011-10-08T18:04:00.000' + tz],
+ ['2011-10-08 18:04:20', '2011-10-08T18:04:20.000' + tz],
+ ['2011-10-08 18:04' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011-10-08 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011-10-08 18:04' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011-10-08 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011-10-08 18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011-10-08 18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011-10-08 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011-10-08 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011-10-08 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011-W40', '2011-10-03T00:00:00.000' + tz],
+ ['2011-W40-6', '2011-10-08T00:00:00.000' + tz],
+ ['2011-W40-6T18', '2011-10-08T18:00:00.000' + tz],
+ ['2011-W40-6T18:04', '2011-10-08T18:04:00.000' + tz],
+ ['2011-W40-6T18:04:20', '2011-10-08T18:04:20.000' + tz],
+ ['2011-W40-6T18:04' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011-W40-6T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011-W40-6T18:04' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011-W40-6T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011-W40-6T18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011-W40-6T18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011-W40-6T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011-W40-6T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011-W40-6T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011-W40-6 18', '2011-10-08T18:00:00.000' + tz],
+ ['2011-W40-6 18:04', '2011-10-08T18:04:00.000' + tz],
+ ['2011-W40-6 18:04:20', '2011-10-08T18:04:20.000' + tz],
+ ['2011-W40-6 18:04' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011-W40-6 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011-W40-6 18:04' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011-W40-6 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011-W40-6 18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011-W40-6 18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011-W40-6 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011-W40-6 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011-W40-6 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011-281', '2011-10-08T00:00:00.000' + tz],
+ ['2011-281T18', '2011-10-08T18:00:00.000' + tz],
+ ['2011-281T18:04', '2011-10-08T18:04:00.000' + tz],
+ ['2011-281T18:04:20', '2011-10-08T18:04:20.000' + tz],
+ ['2011-281T18:04' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011-281T18:04:20' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011-281T18:04' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011-281T18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011-281T18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011-281T18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011-281T18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011-281T18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011-281T18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011-281 18', '2011-10-08T18:00:00.000' + tz],
+ ['2011-281 18:04', '2011-10-08T18:04:00.000' + tz],
+ ['2011-281 18:04:20', '2011-10-08T18:04:20.000' + tz],
+ ['2011-281 18:04' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011-281 18:04:20' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011-281 18:04' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011-281 18:04:20' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011-281 18:04' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011-281 18:04:20' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011-281 18:04:20.1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011-281 18:04:20.11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011-281 18:04:20.111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['20111008T18', '2011-10-08T18:00:00.000' + tz],
+ ['20111008T1804', '2011-10-08T18:04:00.000' + tz],
+ ['20111008T180420', '2011-10-08T18:04:20.000' + tz],
+ ['20111008T1804' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['20111008T180420' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['20111008T1804' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['20111008T180420' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['20111008T1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['20111008T180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['20111008T180420,1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['20111008T180420,11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['20111008T180420,111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['20111008 18', '2011-10-08T18:00:00.000' + tz],
+ ['20111008 1804', '2011-10-08T18:04:00.000' + tz],
+ ['20111008 180420', '2011-10-08T18:04:20.000' + tz],
+ ['20111008 1804' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['20111008 180420' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['20111008 1804' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['20111008 180420' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['20111008 1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['20111008 180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['20111008 180420,1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['20111008 180420,11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['20111008 180420,111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011W40', '2011-10-03T00:00:00.000' + tz],
+ ['2011W406', '2011-10-08T00:00:00.000' + tz],
+ ['2011W406T18', '2011-10-08T18:00:00.000' + tz],
+ ['2011W406T1804', '2011-10-08T18:04:00.000' + tz],
+ ['2011W406T180420', '2011-10-08T18:04:20.000' + tz],
+ ['2011W406 1804' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011W406T1804' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011W406T180420' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011W406T1804' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011W406T180420' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011W406T1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011W406T180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011W406T180420,1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011W406T180420,11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011W406T180420,111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011W406 18', '2011-10-08T18:00:00.000' + tz],
+ ['2011W406 1804', '2011-10-08T18:04:00.000' + tz],
+ ['2011W406 180420', '2011-10-08T18:04:20.000' + tz],
+ ['2011W406 1804' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011W406 180420' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011W406 180420' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011W406 1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011W406 180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011W406 180420,1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011W406 180420,11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011W406 180420,111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011281', '2011-10-08T00:00:00.000' + tz],
+ ['2011281T18', '2011-10-08T18:00:00.000' + tz],
+ ['2011281T1804', '2011-10-08T18:04:00.000' + tz],
+ ['2011281T180420', '2011-10-08T18:04:20.000' + tz],
+ ['2011281T1804' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011281T180420' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011281T1804' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011281T180420' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011281T1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011281T180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011281T180420,1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011281T180420,11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011281T180420,111' + tz2, '2011-10-08T18:04:20.111' + tz],
+ ['2011281 18', '2011-10-08T18:00:00.000' + tz],
+ ['2011281 1804', '2011-10-08T18:04:00.000' + tz],
+ ['2011281 180420', '2011-10-08T18:04:20.000' + tz],
+ ['2011281 1804' + tz, '2011-10-08T18:04:00.000' + tz],
+ ['2011281 180420' + tz, '2011-10-08T18:04:20.000' + tz],
+ ['2011281 1804' + tz2, '2011-10-08T18:04:00.000' + tz],
+ ['2011281 180420' + tz2, '2011-10-08T18:04:20.000' + tz],
+ ['2011281 1804' + tz3, '2011-10-08T18:' + minutesForTz3 + ':00.000' + tz],
+ ['2011281 180420' + tz3, '2011-10-08T18:' + minutesForTz3 + ':20.000' + tz],
+ ['2011281 180420,1' + tz2, '2011-10-08T18:04:20.100' + tz],
+ ['2011281 180420,11' + tz2, '2011-10-08T18:04:20.110' + tz],
+ ['2011281 180420,111' + tz2, '2011-10-08T18:04:20.111' + tz]
+ ], i;
+ for (i = 0; i < formats.length; i++) {
+ assert.equal(moment(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
+ formats[i][1], 'moment should be able to parse ISO ' + formats[i][0]);
+ assert.equal(moment(formats[i][0], moment.ISO_8601).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
+ formats[i][1], 'moment should be able to parse specified ISO ' + formats[i][0]);
+ assert.equal(moment(formats[i][0], moment.ISO_8601, true).format('YYYY-MM-DDTHH:mm:ss.SSSZ'),
+ formats[i][1], 'moment should be able to parse specified strict ISO ' + formats[i][0]);
+ }
+});
+
+test('non iso 8601 strings', function (assert) {
+ assert.ok(!moment('2015-10T10:15', moment.ISO_8601, true).isValid(), 'incomplete date with time');
+ assert.ok(!moment('2015-W10T10:15', moment.ISO_8601, true).isValid(), 'incomplete week date with time');
+ assert.ok(!moment('201510', moment.ISO_8601, true).isValid(), 'basic YYYYMM is not allowed');
+ assert.ok(!moment('2015W10T1015', moment.ISO_8601, true).isValid(), 'incomplete week date with time (basic)');
+ assert.ok(!moment('2015-10-08T1015', moment.ISO_8601, true).isValid(), 'mixing extended and basic format');
+ assert.ok(!moment('20151008T10:15', moment.ISO_8601, true).isValid(), 'mixing basic and extended format');
+ assert.ok(!moment('2015-10-1', moment.ISO_8601, true).isValid(), 'missing zero padding for day');
+});
+
+test('parsing iso week year/week/weekday', function (assert) {
+ assert.equal(moment.utc('2007-W01').format(), '2007-01-01T00:00:00Z', '2008 week 1 (1st Jan Mon)');
+ assert.equal(moment.utc('2008-W01').format(), '2007-12-31T00:00:00Z', '2008 week 1 (1st Jan Tue)');
+ assert.equal(moment.utc('2003-W01').format(), '2002-12-30T00:00:00Z', '2008 week 1 (1st Jan Wed)');
+ assert.equal(moment.utc('2009-W01').format(), '2008-12-29T00:00:00Z', '2009 week 1 (1st Jan Thu)');
+ assert.equal(moment.utc('2010-W01').format(), '2010-01-04T00:00:00Z', '2010 week 1 (1st Jan Fri)');
+ assert.equal(moment.utc('2011-W01').format(), '2011-01-03T00:00:00Z', '2011 week 1 (1st Jan Sat)');
+ assert.equal(moment.utc('2012-W01').format(), '2012-01-02T00:00:00Z', '2012 week 1 (1st Jan Sun)');
+});
+
+test('parsing week year/week/weekday (dow 1, doy 4)', function (assert) {
+ moment.locale('dow:1,doy:4', {week: {dow: 1, doy: 4}});
+
+ assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2007-01-01T00:00:00Z', '2007 week 1 (1st Jan Mon)');
+ assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-31T00:00:00Z', '2008 week 1 (1st Jan Tue)');
+ assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-30T00:00:00Z', '2003 week 1 (1st Jan Wed)');
+ assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-29T00:00:00Z', '2009 week 1 (1st Jan Thu)');
+ assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2010-01-04T00:00:00Z', '2010 week 1 (1st Jan Fri)');
+ assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2011-01-03T00:00:00Z', '2011 week 1 (1st Jan Sat)');
+ assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2012-01-02T00:00:00Z', '2012 week 1 (1st Jan Sun)');
+
+ moment.defineLocale('dow:1,doy:4', null);
+});
+
+test('parsing week year/week/weekday (dow 1, doy 7)', function (assert) {
+ moment.locale('dow:1,doy:7', {week: {dow: 1, doy: 7}});
+
+ assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2007-01-01T00:00:00Z', '2007 week 1 (1st Jan Mon)');
+ assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-31T00:00:00Z', '2008 week 1 (1st Jan Tue)');
+ assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-30T00:00:00Z', '2003 week 1 (1st Jan Wed)');
+ assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-29T00:00:00Z', '2009 week 1 (1st Jan Thu)');
+ assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2009-12-28T00:00:00Z', '2010 week 1 (1st Jan Fri)');
+ assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2010-12-27T00:00:00Z', '2011 week 1 (1st Jan Sat)');
+ assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2011-12-26T00:00:00Z', '2012 week 1 (1st Jan Sun)');
+ moment.defineLocale('dow:1,doy:7', null);
+});
+
+test('parsing week year/week/weekday (dow 0, doy 6)', function (assert) {
+ moment.locale('dow:0,doy:6', {week: {dow: 0, doy: 6}});
+
+ assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2006-12-31T00:00:00Z', '2007 week 1 (1st Jan Mon)');
+ assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-30T00:00:00Z', '2008 week 1 (1st Jan Tue)');
+ assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-29T00:00:00Z', '2003 week 1 (1st Jan Wed)');
+ assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-28T00:00:00Z', '2009 week 1 (1st Jan Thu)');
+ assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2009-12-27T00:00:00Z', '2010 week 1 (1st Jan Fri)');
+ assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2010-12-26T00:00:00Z', '2011 week 1 (1st Jan Sat)');
+ assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2012-01-01T00:00:00Z', '2012 week 1 (1st Jan Sun)');
+ moment.defineLocale('dow:0,doy:6', null);
+});
+
+test('parsing week year/week/weekday (dow 6, doy 12)', function (assert) {
+ moment.locale('dow:6,doy:12', {week: {dow: 6, doy: 12}});
+
+ assert.equal(moment.utc('2007-01', 'gggg-ww').format(), '2006-12-30T00:00:00Z', '2007 week 1 (1st Jan Mon)');
+ assert.equal(moment.utc('2008-01', 'gggg-ww').format(), '2007-12-29T00:00:00Z', '2008 week 1 (1st Jan Tue)');
+ assert.equal(moment.utc('2003-01', 'gggg-ww').format(), '2002-12-28T00:00:00Z', '2003 week 1 (1st Jan Wed)');
+ assert.equal(moment.utc('2009-01', 'gggg-ww').format(), '2008-12-27T00:00:00Z', '2009 week 1 (1st Jan Thu)');
+ assert.equal(moment.utc('2010-01', 'gggg-ww').format(), '2009-12-26T00:00:00Z', '2010 week 1 (1st Jan Fri)');
+ assert.equal(moment.utc('2011-01', 'gggg-ww').format(), '2011-01-01T00:00:00Z', '2011 week 1 (1st Jan Sat)');
+ assert.equal(moment.utc('2012-01', 'gggg-ww').format(), '2011-12-31T00:00:00Z', '2012 week 1 (1st Jan Sun)');
+ moment.defineLocale('dow:6,doy:12', null);
+});
+
+test('parsing ISO with Z', function (assert) {
+ var i, mom, formats = [
+ ['2011-10-08T18:04', '2011-10-08T18:04:00.000'],
+ ['2011-10-08T18:04:20', '2011-10-08T18:04:20.000'],
+ ['2011-10-08T18:04:20.1', '2011-10-08T18:04:20.100'],
+ ['2011-10-08T18:04:20.11', '2011-10-08T18:04:20.110'],
+ ['2011-10-08T18:04:20.111', '2011-10-08T18:04:20.111'],
+ ['2011-W40-6T18', '2011-10-08T18:00:00.000'],
+ ['2011-W40-6T18:04', '2011-10-08T18:04:00.000'],
+ ['2011-W40-6T18:04:20', '2011-10-08T18:04:20.000'],
+ ['2011-W40-6T18:04:20.1', '2011-10-08T18:04:20.100'],
+ ['2011-W40-6T18:04:20.11', '2011-10-08T18:04:20.110'],
+ ['2011-W40-6T18:04:20.111', '2011-10-08T18:04:20.111'],
+ ['2011-281T18', '2011-10-08T18:00:00.000'],
+ ['2011-281T18:04', '2011-10-08T18:04:00.000'],
+ ['2011-281T18:04:20', '2011-10-08T18:04:20.000'],
+ ['2011-281T18:04:20', '2011-10-08T18:04:20.000'],
+ ['2011-281T18:04:20.1', '2011-10-08T18:04:20.100'],
+ ['2011-281T18:04:20.11', '2011-10-08T18:04:20.110'],
+ ['2011-281T18:04:20.111', '2011-10-08T18:04:20.111']
+ ];
+
+ for (i = 0; i < formats.length; i++) {
+ mom = moment(formats[i][0] + 'Z').utc();
+ assert.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], 'moment should be able to parse ISO in UTC ' + formats[i][0] + 'Z');
+
+ mom = moment(formats[i][0] + ' Z').utc();
+ assert.equal(mom.format('YYYY-MM-DDTHH:mm:ss.SSS'), formats[i][1], 'moment should be able to parse ISO in UTC ' + formats[i][0] + ' Z');
+ }
+});
+
+test('parsing iso with T', function (assert) {
+ assert.equal(moment('2011-10-08T18')._f, 'YYYY-MM-DDTHH', 'should include \'T\' in the format');
+ assert.equal(moment('2011-10-08T18:20')._f, 'YYYY-MM-DDTHH:mm', 'should include \'T\' in the format');
+ assert.equal(moment('2011-10-08T18:20:13')._f, 'YYYY-MM-DDTHH:mm:ss', 'should include \'T\' in the format');
+ assert.equal(moment('2011-10-08T18:20:13.321')._f, 'YYYY-MM-DDTHH:mm:ss.SSSS', 'should include \'T\' in the format');
+
+ assert.equal(moment('2011-10-08 18')._f, 'YYYY-MM-DD HH', 'should not include \'T\' in the format');
+ assert.equal(moment('2011-10-08 18:20')._f, 'YYYY-MM-DD HH:mm', 'should not include \'T\' in the format');
+ assert.equal(moment('2011-10-08 18:20:13')._f, 'YYYY-MM-DD HH:mm:ss', 'should not include \'T\' in the format');
+ assert.equal(moment('2011-10-08 18:20:13.321')._f, 'YYYY-MM-DD HH:mm:ss.SSSS', 'should not include \'T\' in the format');
+});
+
+test('parsing iso Z timezone', function (assert) {
+ var i,
+ formats = [
+ ['2011-10-08T18:04Z', '2011-10-08T18:04:00.000+00:00'],
+ ['2011-10-08T18:04:20Z', '2011-10-08T18:04:20.000+00:00'],
+ ['2011-10-08T18:04:20.111Z', '2011-10-08T18:04:20.111+00:00']
+ ];
+ for (i = 0; i < formats.length; i++) {
+ assert.equal(moment.utc(formats[i][0]).format('YYYY-MM-DDTHH:mm:ss.SSSZ'), formats[i][1], 'moment should be able to parse ISO ' + formats[i][0]);
+ }
+});
+
+test('parsing iso Z timezone into local', function (assert) {
+ var m = moment('2011-10-08T18:04:20.111Z');
+
+ assert.equal(m.utc().format('YYYY-MM-DDTHH:mm:ss.SSS'), '2011-10-08T18:04:20.111', 'moment should be able to parse ISO 2011-10-08T18:04:20.111Z');
+});
+
+test('parsing iso with more subsecond precision digits', function (assert) {
+ assert.equal(moment.utc('2013-07-31T22:00:00.0000000Z').format(), '2013-07-31T22:00:00Z', 'more than 3 subsecond digits');
+});
+
+test('null or empty', function (assert) {
+ assert.equal(moment('').isValid(), false, 'moment(\'\') is not valid');
+ assert.equal(moment(null).isValid(), false, 'moment(null) is not valid');
+ assert.equal(moment(null, 'YYYY-MM-DD').isValid(), false, 'moment(\'\', \'format\') is not valid');
+ assert.equal(moment('', 'YYYY-MM-DD').isValid(), false, 'moment(\'\', \'format\') is not valid');
+ assert.equal(moment.utc('').isValid(), false, 'moment.utc(\'\') is not valid');
+ assert.equal(moment.utc(null).isValid(), false, 'moment.utc(null) is not valid');
+ assert.equal(moment.utc(null, 'YYYY-MM-DD').isValid(), false, 'moment.utc(null) is not valid');
+ assert.equal(moment.utc('', 'YYYY-MM-DD').isValid(), false, 'moment.utc(\'\', \'YYYY-MM-DD\') is not valid');
+});
+
+test('first century', function (assert) {
+ assert.equal(moment([0, 0, 1]).format('YYYY-MM-DD'), '0000-01-01', 'Year AD 0');
+ assert.equal(moment([99, 0, 1]).format('YYYY-MM-DD'), '0099-01-01', 'Year AD 99');
+ assert.equal(moment([999, 0, 1]).format('YYYY-MM-DD'), '0999-01-01', 'Year AD 999');
+ assert.equal(moment('0 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0000-01-01', 'Year AD 0');
+ assert.equal(moment('999 1 1', 'YYYY MM DD').format('YYYY-MM-DD'), '0999-01-01', 'Year AD 999');
+ assert.equal(moment('0 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00000-01-01', 'Year AD 0');
+ assert.equal(moment('99 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00099-01-01', 'Year AD 99');
+ assert.equal(moment('999 1 1', 'YYYYY MM DD').format('YYYYY-MM-DD'), '00999-01-01', 'Year AD 999');
+});
+
+test('six digit years', function (assert) {
+ assert.equal(moment([-270000, 0, 1]).format('YYYYY-MM-DD'), '-270000-01-01', 'format BC 270,001');
+ assert.equal(moment([270000, 0, 1]).format('YYYYY-MM-DD'), '270000-01-01', 'format AD 270,000');
+ assert.equal(moment('-270000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), -270000, 'parse BC 270,001');
+ assert.equal(moment('270000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), 270000, 'parse AD 270,000');
+ assert.equal(moment('+270000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), 270000, 'parse AD +270,000');
+ assert.equal(moment.utc('-270000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), -270000, 'parse utc BC 270,001');
+ assert.equal(moment.utc('270000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), 270000, 'parse utc AD 270,000');
+ assert.equal(moment.utc('+270000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), 270000, 'parse utc AD +270,000');
+});
+
+test('negative four digit years', function (assert) {
+ assert.equal(moment('-1000-01-01', 'YYYYY-MM-DD').toDate().getFullYear(), -1000, 'parse BC 1,001');
+ assert.equal(moment.utc('-1000-01-01', 'YYYYY-MM-DD').toDate().getUTCFullYear(), -1000, 'parse utc BC 1,001');
+});
+
+test('strict parsing', function (assert) {
+ assert.equal(moment('2014-', 'YYYY-Q', true).isValid(), false, 'fail missing quarter');
+
+ assert.equal(moment('2012-05', 'YYYY-MM', true).format('YYYY-MM'), '2012-05', 'parse correct string');
+ assert.equal(moment(' 2012-05', 'YYYY-MM', true).isValid(), false, 'fail on extra whitespace');
+ assert.equal(moment('foo 2012-05', '[foo] YYYY-MM', true).format('YYYY-MM'), '2012-05', 'handle fixed text');
+ assert.equal(moment('2012 05', 'YYYY-MM', true).isValid(), false, 'fail on different separator');
+ assert.equal(moment('2012 05', 'YYYY MM DD', true).isValid(), false, 'fail on too many tokens');
+
+ assert.equal(moment('05 30 2010', ['DD MM YYYY', 'MM DD YYYY'], true).format('MM DD YYYY'), '05 30 2010', 'array with bad date');
+ assert.equal(moment('05 30 2010', ['', 'MM DD YYYY'], true).format('MM DD YYYY'), '05 30 2010', 'array with invalid format');
+ assert.equal(moment('05 30 2010', [' DD MM YYYY', 'MM DD YYYY'], true).format('MM DD YYYY'), '05 30 2010', 'array with non-matching format');
+
+ assert.equal(moment('2010.*...', 'YYYY.*', true).isValid(), false, 'invalid format with regex chars');
+ assert.equal(moment('2010.*', 'YYYY.*', true).year(), 2010, 'valid format with regex chars');
+ assert.equal(moment('.*2010.*', '.*YYYY.*', true).year(), 2010, 'valid format with regex chars on both sides');
+
+ //strict tokens
+ assert.equal(moment('-5-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid negative year');
+ assert.equal(moment('2-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid one-digit year');
+ assert.equal(moment('20-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid two-digit year');
+ assert.equal(moment('201-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid three-digit year');
+ assert.equal(moment('2010-05-25', 'YYYY-MM-DD', true).isValid(), true, 'valid four-digit year');
+ assert.equal(moment('22010-05-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid five-digit year');
+
+ assert.equal(moment('12-05-25', 'YY-MM-DD', true).isValid(), true, 'valid two-digit year');
+ assert.equal(moment('2012-05-25', 'YY-MM-DD', true).isValid(), false, 'invalid four-digit year');
+
+ assert.equal(moment('-5-05-25', 'Y-MM-DD', true).isValid(), true, 'valid negative year');
+ assert.equal(moment('2-05-25', 'Y-MM-DD', true).isValid(), true, 'valid one-digit year');
+ assert.equal(moment('20-05-25', 'Y-MM-DD', true).isValid(), true, 'valid two-digit year');
+ assert.equal(moment('201-05-25', 'Y-MM-DD', true).isValid(), true, 'valid three-digit year');
+
+ assert.equal(moment('2012-5-25', 'YYYY-M-DD', true).isValid(), true, 'valid one-digit month');
+ assert.equal(moment('2012-5-25', 'YYYY-MM-DD', true).isValid(), false, 'invalid one-digit month');
+ assert.equal(moment('2012-05-25', 'YYYY-M-DD', true).isValid(), true, 'valid one-digit month');
+ assert.equal(moment('2012-05-25', 'YYYY-MM-DD', true).isValid(), true, 'valid one-digit month');
+
+ assert.equal(moment('2012-05-2', 'YYYY-MM-D', true).isValid(), true, 'valid one-digit day');
+ assert.equal(moment('2012-05-2', 'YYYY-MM-DD', true).isValid(), false, 'invalid one-digit day');
+ assert.equal(moment('2012-05-02', 'YYYY-MM-D', true).isValid(), true, 'valid two-digit day');
+ assert.equal(moment('2012-05-02', 'YYYY-MM-DD', true).isValid(), true, 'valid two-digit day');
+
+ assert.equal(moment('+002012-05-25', 'YYYYY-MM-DD', true).isValid(), true, 'valid six-digit year');
+ assert.equal(moment('+2012-05-25', 'YYYYY-MM-DD', true).isValid(), false, 'invalid four-digit year');
+
+ //thse are kinda pointless, but they should work as expected
+ assert.equal(moment('1', 'S', true).isValid(), true, 'valid one-digit milisecond');
+ assert.equal(moment('12', 'S', true).isValid(), false, 'invalid two-digit milisecond');
+ assert.equal(moment('123', 'S', true).isValid(), false, 'invalid three-digit milisecond');
+
+ assert.equal(moment('1', 'SS', true).isValid(), false, 'invalid one-digit milisecond');
+ assert.equal(moment('12', 'SS', true).isValid(), true, 'valid two-digit milisecond');
+ assert.equal(moment('123', 'SS', true).isValid(), false, 'invalid three-digit milisecond');
+
+ assert.equal(moment('1', 'SSS', true).isValid(), false, 'invalid one-digit milisecond');
+ assert.equal(moment('12', 'SSS', true).isValid(), false, 'invalid two-digit milisecond');
+ assert.equal(moment('123', 'SSS', true).isValid(), true, 'valid three-digit milisecond');
+
+ // strict parsing respects month length
+ assert.ok(moment('1 January 2000', 'D MMMM YYYY', true).isValid(), 'capital long-month + MMMM');
+ assert.ok(!moment('1 January 2000', 'D MMM YYYY', true).isValid(), 'capital long-month + MMM');
+ assert.ok(!moment('1 Jan 2000', 'D MMMM YYYY', true).isValid(), 'capital short-month + MMMM');
+ assert.ok(moment('1 Jan 2000', 'D MMM YYYY', true).isValid(), 'capital short-month + MMM');
+ assert.ok(moment('1 january 2000', 'D MMMM YYYY', true).isValid(), 'lower long-month + MMMM');
+ assert.ok(!moment('1 january 2000', 'D MMM YYYY', true).isValid(), 'lower long-month + MMM');
+ assert.ok(!moment('1 jan 2000', 'D MMMM YYYY', true).isValid(), 'lower short-month + MMMM');
+ assert.ok(moment('1 jan 2000', 'D MMM YYYY', true).isValid(), 'lower short-month + MMM');
+});
+
+test('parsing into a locale', function (assert) {
+ moment.defineLocale('parselocale', {
+ months : 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'),
+ monthsShort : 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_')
+ });
+
+ moment.locale('en');
+
+ assert.equal(moment('2012 seven', 'YYYY MMM', 'parselocale').month(), 6, 'should be able to parse in a specific locale');
+
+ moment.locale('parselocale');
+
+ assert.equal(moment('2012 july', 'YYYY MMM', 'en').month(), 6, 'should be able to parse in a specific locale');
+
+ moment.defineLocale('parselocale', null);
+});
+
+function getVerifier(test$$1) {
+ return function (input, format, expected, description, asymetrical) {
+ var m = moment(input, format);
+ test$$1.equal(m.format('YYYY MM DD'), expected, 'compare: ' + description);
+
+ //test round trip
+ if (!asymetrical) {
+ test$$1.equal(m.format(format), input, 'round trip: ' + description);
+ }
+ };
+}
+
+test('parsing week and weekday information', function (assert) {
+ var ver = getVerifier(assert);
+ var currentWeekOfYear = moment().weeks();
+ var expectedDate2012 = moment([2012, 0, 1])
+ .day(0)
+ .add((currentWeekOfYear - 1), 'weeks')
+ .format('YYYY MM DD');
+ var expectedDate1999 = moment([1999, 0, 1])
+ .day(0)
+ .add((currentWeekOfYear - 1), 'weeks')
+ .format('YYYY MM DD');
+
+ // year
+ ver('12', 'gg', expectedDate2012, 'week-year two digits');
+ ver('2012', 'gggg', expectedDate2012, 'week-year four digits');
+ ver('99', 'gg', expectedDate1999, 'week-year two digits previous year');
+ ver('1999', 'gggg', expectedDate1999, 'week-year four digits previous year');
+
+ ver('99', 'GG', '1999 01 04', 'iso week-year two digits');
+ ver('1999', 'GGGG', '1999 01 04', 'iso week-year four digits');
+
+ ver('13', 'GG', '2012 12 31', 'iso week-year two digits previous year');
+ ver('2013', 'GGGG', '2012 12 31', 'iso week-year four digits previous year');
+
+ // year + week
+ ver('1999 37', 'gggg w', '1999 09 05', 'week');
+ ver('1999 37', 'gggg ww', '1999 09 05', 'week double');
+ ver('1999 37', 'GGGG W', '1999 09 13', 'iso week');
+ ver('1999 37', 'GGGG WW', '1999 09 13', 'iso week double');
+
+ ver('1999 37 4', 'GGGG WW E', '1999 09 16', 'iso day');
+ ver('1999 37 04', 'GGGG WW E', '1999 09 16', 'iso day wide', true);
+
+ ver('1999 37 4', 'gggg ww e', '1999 09 09', 'day');
+ ver('1999 37 04', 'gggg ww e', '1999 09 09', 'day wide', true);
+
+ // year + week + day
+ ver('1999 37 4', 'gggg ww d', '1999 09 09', 'd');
+ ver('1999 37 Th', 'gggg ww dd', '1999 09 09', 'dd');
+ ver('1999 37 Thu', 'gggg ww ddd', '1999 09 09', 'ddd');
+ ver('1999 37 Thursday', 'gggg ww dddd', '1999 09 09', 'dddd');
+
+ // lower-order only
+ assert.equal(moment('22', 'ww').week(), 22, 'week sets the week by itself');
+ assert.equal(moment('22', 'ww').weekYear(), moment().weekYear(), 'week keeps this year');
+ assert.equal(moment('2012 22', 'YYYY ww').weekYear(), 2012, 'week keeps parsed year');
+
+ assert.equal(moment('22', 'WW').isoWeek(), 22, 'iso week sets the week by itself');
+ assert.equal(moment('2012 22', 'YYYY WW').weekYear(), 2012, 'iso week keeps parsed year');
+ assert.equal(moment('22', 'WW').isoWeekYear(), moment().isoWeekYear(), 'iso week keeps this year');
+
+ // order
+ ver('6 2013 2', 'e gggg w', '2013 01 12', 'order doesn\'t matter');
+ ver('6 2013 2', 'E GGGG W', '2013 01 12', 'iso order doesn\'t matter');
+
+ //can parse other stuff too
+ assert.equal(moment('1999-W37-4 3:30', 'GGGG-[W]WW-E HH:mm').format('YYYY MM DD HH:mm'), '1999 09 16 03:30', 'parsing weeks and hours');
+
+ // In safari, all years before 1300 are shifted back with one day.
+ // http://stackoverflow.com/questions/20768975/safari-subtracts-1-day-from-dates-before-1300
+ if (new Date('1300-01-01').getUTCFullYear() === 1300) {
+ // Years less than 100
+ ver('0098-06', 'GGGG-WW', '0098 02 03', 'small years work', true);
+ }
+});
+
+test('parsing localized weekdays', function (assert) {
+ var ver = getVerifier(assert);
+ try {
+ moment.locale('dow:1,doy:4', {
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ week: {dow: 1, doy: 4}
+ });
+ ver('1999 37 4', 'GGGG WW E', '1999 09 16', 'iso ignores locale');
+ ver('1999 37 7', 'GGGG WW E', '1999 09 19', 'iso ignores locale');
+
+ ver('1999 37 0', 'gggg ww e', '1999 09 13', 'localized e uses local doy and dow: 0 = monday');
+ ver('1999 37 4', 'gggg ww e', '1999 09 17', 'localized e uses local doy and dow: 4 = friday');
+
+ ver('1999 37 1', 'gggg ww d', '1999 09 13', 'localized d uses 0-indexed days: 1 = monday');
+ ver('1999 37 Lu', 'gggg ww dd', '1999 09 13', 'localized d uses 0-indexed days: Mo');
+ ver('1999 37 lun.', 'gggg ww ddd', '1999 09 13', 'localized d uses 0-indexed days: Mon');
+ ver('1999 37 lundi', 'gggg ww dddd', '1999 09 13', 'localized d uses 0-indexed days: Monday');
+ ver('1999 37 4', 'gggg ww d', '1999 09 16', 'localized d uses 0-indexed days: 4');
+
+ //sunday goes at the end of the week
+ ver('1999 37 0', 'gggg ww d', '1999 09 19', 'localized d uses 0-indexed days: 0 = sund');
+ ver('1999 37 Di', 'gggg ww dd', '1999 09 19', 'localized d uses 0-indexed days: 0 = sund');
+ }
+ finally {
+ moment.defineLocale('dow:1,doy:4', null);
+ moment.locale('en');
+ }
+});
+
+test('parsing with customized two-digit year', function (assert) {
+ var original = moment.parseTwoDigitYear;
+ try {
+ assert.equal(moment('68', 'YY').year(), 2068);
+ assert.equal(moment('69', 'YY').year(), 1969);
+ moment.parseTwoDigitYear = function (input) {
+ return +input + (+input > 30 ? 1900 : 2000);
+ };
+ assert.equal(moment('68', 'YY').year(), 1968);
+ assert.equal(moment('67', 'YY').year(), 1967);
+ assert.equal(moment('31', 'YY').year(), 1931);
+ assert.equal(moment('30', 'YY').year(), 2030);
+ }
+ finally {
+ moment.parseTwoDigitYear = original;
+ }
+});
+
+test('array with strings', function (assert) {
+ assert.equal(moment(['2014', '7', '31']).isValid(), true, 'string array + isValid');
+});
+
+test('object with strings', function (assert) {
+ assert.equal(moment({year: '2014', month: '7', day: '31'}).isValid(), true, 'string object + isValid');
+});
+
+test('utc with array of formats', function (assert) {
+ assert.equal(moment.utc('2014-01-01', ['YYYY-MM-DD', 'YYYY-MM']).format(), '2014-01-01T00:00:00Z', 'moment.utc works with array of formats');
+});
+
+test('parsing invalid string weekdays', function (assert) {
+ assert.equal(false, moment('a', 'dd').isValid(),
+ 'dd with invalid weekday, non-strict');
+ assert.equal(false, moment('a', 'dd', true).isValid(),
+ 'dd with invalid weekday, strict');
+ assert.equal(false, moment('a', 'ddd').isValid(),
+ 'ddd with invalid weekday, non-strict');
+ assert.equal(false, moment('a', 'ddd', true).isValid(),
+ 'ddd with invalid weekday, strict');
+ assert.equal(false, moment('a', 'dddd').isValid(),
+ 'dddd with invalid weekday, non-strict');
+ assert.equal(false, moment('a', 'dddd', true).isValid(),
+ 'dddd with invalid weekday, strict');
+});
+
+test('milliseconds', function (assert) {
+ assert.equal(moment('1', 'S').millisecond(), 100);
+ assert.equal(moment('12', 'SS').millisecond(), 120);
+ assert.equal(moment('123', 'SSS').millisecond(), 123);
+ assert.equal(moment('1234', 'SSSS').millisecond(), 123);
+ assert.equal(moment('12345', 'SSSSS').millisecond(), 123);
+ assert.equal(moment('123456', 'SSSSSS').millisecond(), 123);
+ assert.equal(moment('1234567', 'SSSSSSS').millisecond(), 123);
+ assert.equal(moment('12345678', 'SSSSSSSS').millisecond(), 123);
+ assert.equal(moment('123456789', 'SSSSSSSSS').millisecond(), 123);
+});
+
+test('hmm', function (assert) {
+ assert.equal(moment('123', 'hmm', true).format('HH:mm:ss'), '01:23:00', '123 with hmm');
+ assert.equal(moment('123a', 'hmmA', true).format('HH:mm:ss'), '01:23:00', '123a with hmmA');
+ assert.equal(moment('123p', 'hmmA', true).format('HH:mm:ss'), '13:23:00', '123p with hmmA');
+
+ assert.equal(moment('1234', 'hmm', true).format('HH:mm:ss'), '12:34:00', '1234 with hmm');
+ assert.equal(moment('1234a', 'hmmA', true).format('HH:mm:ss'), '00:34:00', '1234a with hmmA');
+ assert.equal(moment('1234p', 'hmmA', true).format('HH:mm:ss'), '12:34:00', '1234p with hmmA');
+
+ assert.equal(moment('12345', 'hmmss', true).format('HH:mm:ss'), '01:23:45', '12345 with hmmss');
+ assert.equal(moment('12345a', 'hmmssA', true).format('HH:mm:ss'), '01:23:45', '12345a with hmmssA');
+ assert.equal(moment('12345p', 'hmmssA', true).format('HH:mm:ss'), '13:23:45', '12345p with hmmssA');
+ assert.equal(moment('112345', 'hmmss', true).format('HH:mm:ss'), '11:23:45', '112345 with hmmss');
+ assert.equal(moment('112345a', 'hmmssA', true).format('HH:mm:ss'), '11:23:45', '112345a with hmmssA');
+ assert.equal(moment('112345p', 'hmmssA', true).format('HH:mm:ss'), '23:23:45', '112345p with hmmssA');
+
+ assert.equal(moment('023', 'Hmm', true).format('HH:mm:ss'), '00:23:00', '023 with Hmm');
+ assert.equal(moment('123', 'Hmm', true).format('HH:mm:ss'), '01:23:00', '123 with Hmm');
+ assert.equal(moment('1234', 'Hmm', true).format('HH:mm:ss'), '12:34:00', '1234 with Hmm');
+ assert.equal(moment('1534', 'Hmm', true).format('HH:mm:ss'), '15:34:00', '1234 with Hmm');
+ assert.equal(moment('12345', 'Hmmss', true).format('HH:mm:ss'), '01:23:45', '12345 with Hmmss');
+ assert.equal(moment('112345', 'Hmmss', true).format('HH:mm:ss'), '11:23:45', '112345 with Hmmss');
+ assert.equal(moment('172345', 'Hmmss', true).format('HH:mm:ss'), '17:23:45', '112345 with Hmmss');
+});
+
+test('Y token', function (assert) {
+ assert.equal(moment('1-1-2010', 'M-D-Y', true).year(), 2010, 'parsing Y');
+});
+
+test('parsing flags retain parsed date parts', function (assert) {
+ var a = moment('10 p', 'hh:mm a');
+ assert.equal(a.parsingFlags().parsedDateParts[3], 10, 'parsed 10 as the hour');
+ assert.equal(a.parsingFlags().parsedDateParts[0], undefined, 'year was not parsed');
+ assert.equal(a.parsingFlags().meridiem, 'p', 'meridiem flag was added');
+ var b = moment('10:30', ['MMDDYY', 'HH:mm']);
+ assert.equal(b.parsingFlags().parsedDateParts[3], 10, 'multiple format parshing matched hour');
+ assert.equal(b.parsingFlags().parsedDateParts[0], undefined, 'array is properly copied, no residual data from first token parse');
+});
+
+test('parsing only meridiem results in invalid date', function (assert) {
+ assert.ok(!moment('alkj', 'hh:mm a').isValid(), 'because an a token is used, a meridiem will be parsed but nothing else was so invalid');
+ assert.ok(moment('02:30 p more extra stuff', 'hh:mm a').isValid(), 'because other tokens were parsed, date is valid');
+ assert.ok(moment('1/1/2016 extra data', ['a', 'M/D/YYYY']).isValid(), 'took second format, does not pick up on meridiem parsed from first format (good copy)');
+});
+
+test('invalid dates return invalid for methods that access the _d prop', function (assert) {
+ var momentAsDate = moment(['2015', '12', '1']).toDate();
+ assert.ok(momentAsDate instanceof Date, 'toDate returns a Date object');
+ assert.ok(isNaN(momentAsDate.getTime()), 'toDate returns an invalid Date invalid');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('creation data');
+
+test('valid date', function (assert) {
+ var dat = moment('1992-10-22');
+ var orig = dat.creationData();
+
+ assert.equal(dat.isValid(), true, '1992-10-22 is valid');
+ assert.equal(orig.input, '1992-10-22', 'original input is not correct.');
+ assert.equal(orig.format, 'YYYY-MM-DD', 'original format is defined.');
+ assert.equal(orig.locale._abbr, 'en', 'default locale is en');
+ assert.equal(orig.isUTC, false, 'not a UTC date');
+});
+
+test('valid date at fr locale', function (assert) {
+ var dat = moment('1992-10-22', 'YYYY-MM-DD', 'fr');
+ var orig = dat.creationData();
+
+ assert.equal(orig.locale._abbr, 'fr', 'locale is fr');
+});
+
+test('valid date with formats', function (assert) {
+ var dat = moment('29-06-1995', ['MM-DD-YYYY', 'DD-MM', 'DD-MM-YYYY']);
+ var orig = dat.creationData();
+
+ assert.equal(orig.format, 'DD-MM-YYYY', 'DD-MM-YYYY format is defined.');
+});
+
+test('strict', function (assert) {
+ assert.ok(moment('2015-01-02', 'YYYY-MM-DD', true).creationData().strict, 'strict is true');
+ assert.ok(!moment('2015-01-02', 'YYYY-MM-DD').creationData().strict, 'strict is true');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('days in month');
+
+test('days in month', function (assert) {
+ each([31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], function (days, i) {
+ var firstDay = moment([2012, i]),
+ lastDay = moment([2012, i, days]);
+ assert.equal(firstDay.daysInMonth(), days, firstDay.format('L') + ' should have ' + days + ' days.');
+ assert.equal(lastDay.daysInMonth(), days, lastDay.format('L') + ' should have ' + days + ' days.');
+ });
+});
+
+test('days in month leap years', function (assert) {
+ assert.equal(moment([2010, 1]).daysInMonth(), 28, 'Feb 2010 should have 28 days');
+ assert.equal(moment([2100, 1]).daysInMonth(), 28, 'Feb 2100 should have 28 days');
+ assert.equal(moment([2008, 1]).daysInMonth(), 29, 'Feb 2008 should have 29 days');
+ assert.equal(moment([2000, 1]).daysInMonth(), 29, 'Feb 2000 should have 29 days');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+function hasOwnProp(a, b) {
+ return Object.prototype.hasOwnProperty.call(a, b);
+}
+
+function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
+
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
+
+ return a;
+}
+
+var hookCallback;
+
+function hooks () {
+ return hookCallback.apply(null, arguments);
+}
+
+function warn(msg) {
+ if (hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
+}
+
+function deprecate(msg, fn) {
+ var firstTime = true;
+
+ return extend(function () {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
+}
+
+var deprecations = {};
+
+
+
+hooks.suppressDeprecationWarnings = false;
+hooks.deprecationHandler = null;
+
+module$1('deprecate');
+
+test('deprecate', function (assert) {
+ // NOTE: hooks inside deprecate.js and moment are different, so this is can
+ // not be test.expectedDeprecations(...)
+ var fn = function () {};
+ var deprecatedFn = deprecate('testing deprecation', fn);
+ deprecatedFn();
+
+ expect(0);
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+function equal(assert, a, b, message) {
+ assert.ok(Math.abs(a - b) < 0.00000001, '(' + a + ' === ' + b + ') ' + message);
+}
+
+function dstForYear(year) {
+ var start = moment([year]),
+ end = moment([year + 1]),
+ current = start.clone(),
+ last;
+
+ while (current < end) {
+ last = current.clone();
+ current.add(24, 'hour');
+ if (last.utcOffset() !== current.utcOffset()) {
+ end = current.clone();
+ current = last.clone();
+ break;
+ }
+ }
+
+ while (current < end) {
+ last = current.clone();
+ current.add(1, 'hour');
+ if (last.utcOffset() !== current.utcOffset()) {
+ return {
+ moment : last,
+ diff : -(current.utcOffset() - last.utcOffset()) / 60
+ };
+ }
+ }
+}
+
+module$1('diff');
+
+test('diff', function (assert) {
+ assert.equal(moment(1000).diff(0), 1000, '1 second - 0 = 1000');
+ assert.equal(moment(1000).diff(500), 500, '1 second - 0.5 seconds = 500');
+ assert.equal(moment(0).diff(1000), -1000, '0 - 1 second = -1000');
+ assert.equal(moment(new Date(1000)).diff(1000), 0, '1 second - 1 second = 0');
+ var oneHourDate = new Date(2015, 5, 21),
+ nowDate = new Date(+oneHourDate);
+ oneHourDate.setHours(oneHourDate.getHours() + 1);
+ assert.equal(moment(oneHourDate).diff(nowDate), 60 * 60 * 1000, '1 hour from now = 3600000');
+});
+
+test('diff key after', function (assert) {
+ assert.equal(moment([2010]).diff([2011], 'years'), -1, 'year diff');
+ assert.equal(moment([2010]).diff([2010, 2], 'months'), -2, 'month diff');
+ assert.equal(moment([2010]).diff([2010, 0, 7], 'weeks'), 0, 'week diff');
+ assert.equal(moment([2010]).diff([2010, 0, 8], 'weeks'), -1, 'week diff');
+ assert.equal(moment([2010]).diff([2010, 0, 21], 'weeks'), -2, 'week diff');
+ assert.equal(moment([2010]).diff([2010, 0, 22], 'weeks'), -3, 'week diff');
+ assert.equal(moment([2010]).diff([2010, 0, 4], 'days'), -3, 'day diff');
+ assert.equal(moment([2010]).diff([2010, 0, 1, 4], 'hours'), -4, 'hour diff');
+ assert.equal(moment([2010]).diff([2010, 0, 1, 0, 5], 'minutes'), -5, 'minute diff');
+ assert.equal(moment([2010]).diff([2010, 0, 1, 0, 0, 6], 'seconds'), -6, 'second diff');
+});
+
+test('diff key before', function (assert) {
+ assert.equal(moment([2011]).diff([2010], 'years'), 1, 'year diff');
+ assert.equal(moment([2010, 2]).diff([2010], 'months'), 2, 'month diff');
+ assert.equal(moment([2010, 0, 4]).diff([2010], 'days'), 3, 'day diff');
+ assert.equal(moment([2010, 0, 7]).diff([2010], 'weeks'), 0, 'week diff');
+ assert.equal(moment([2010, 0, 8]).diff([2010], 'weeks'), 1, 'week diff');
+ assert.equal(moment([2010, 0, 21]).diff([2010], 'weeks'), 2, 'week diff');
+ assert.equal(moment([2010, 0, 22]).diff([2010], 'weeks'), 3, 'week diff');
+ assert.equal(moment([2010, 0, 1, 4]).diff([2010], 'hours'), 4, 'hour diff');
+ assert.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minutes'), 5, 'minute diff');
+ assert.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'seconds'), 6, 'second diff');
+});
+
+test('diff key before singular', function (assert) {
+ assert.equal(moment([2011]).diff([2010], 'year'), 1, 'year diff singular');
+ assert.equal(moment([2010, 2]).diff([2010], 'month'), 2, 'month diff singular');
+ assert.equal(moment([2010, 0, 4]).diff([2010], 'day'), 3, 'day diff singular');
+ assert.equal(moment([2010, 0, 7]).diff([2010], 'week'), 0, 'week diff singular');
+ assert.equal(moment([2010, 0, 8]).diff([2010], 'week'), 1, 'week diff singular');
+ assert.equal(moment([2010, 0, 21]).diff([2010], 'week'), 2, 'week diff singular');
+ assert.equal(moment([2010, 0, 22]).diff([2010], 'week'), 3, 'week diff singular');
+ assert.equal(moment([2010, 0, 1, 4]).diff([2010], 'hour'), 4, 'hour diff singular');
+ assert.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'minute'), 5, 'minute diff singular');
+ assert.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 'second'), 6, 'second diff singular');
+});
+
+test('diff key before abbreviated', function (assert) {
+ assert.equal(moment([2011]).diff([2010], 'y'), 1, 'year diff abbreviated');
+ assert.equal(moment([2010, 2]).diff([2010], 'M'), 2, 'month diff abbreviated');
+ assert.equal(moment([2010, 0, 4]).diff([2010], 'd'), 3, 'day diff abbreviated');
+ assert.equal(moment([2010, 0, 7]).diff([2010], 'w'), 0, 'week diff abbreviated');
+ assert.equal(moment([2010, 0, 8]).diff([2010], 'w'), 1, 'week diff abbreviated');
+ assert.equal(moment([2010, 0, 21]).diff([2010], 'w'), 2, 'week diff abbreviated');
+ assert.equal(moment([2010, 0, 22]).diff([2010], 'w'), 3, 'week diff abbreviated');
+ assert.equal(moment([2010, 0, 1, 4]).diff([2010], 'h'), 4, 'hour diff abbreviated');
+ assert.equal(moment([2010, 0, 1, 0, 5]).diff([2010], 'm'), 5, 'minute diff abbreviated');
+ assert.equal(moment([2010, 0, 1, 0, 0, 6]).diff([2010], 's'), 6, 'second diff abbreviated');
+});
+
+test('diff month', function (assert) {
+ assert.equal(moment([2011, 0, 31]).diff([2011, 2, 1], 'months'), -1, 'month diff');
+});
+
+test('diff across DST', function (assert) {
+ var dst = dstForYear(2012), a, b, daysInMonth;
+ if (!dst) {
+ assert.equal(42, 42, 'at least one assertion');
+ return;
+ }
+
+ a = dst.moment;
+ b = a.clone().utc().add(12, 'hours').local();
+ daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2;
+ assert.equal(b.diff(a, 'milliseconds', true), 12 * 60 * 60 * 1000,
+ 'ms diff across DST');
+ assert.equal(b.diff(a, 'seconds', true), 12 * 60 * 60,
+ 'second diff across DST');
+ assert.equal(b.diff(a, 'minutes', true), 12 * 60,
+ 'minute diff across DST');
+ assert.equal(b.diff(a, 'hours', true), 12,
+ 'hour diff across DST');
+ assert.equal(b.diff(a, 'days', true), (12 - dst.diff) / 24,
+ 'day diff across DST');
+ equal(assert, b.diff(a, 'weeks', true), (12 - dst.diff) / 24 / 7,
+ 'week diff across DST');
+ assert.ok(0.95 / (2 * 31) < b.diff(a, 'months', true),
+ 'month diff across DST, lower bound');
+ assert.ok(b.diff(a, 'month', true) < 1.05 / (2 * 28),
+ 'month diff across DST, upper bound');
+ assert.ok(0.95 / (2 * 31 * 12) < b.diff(a, 'years', true),
+ 'year diff across DST, lower bound');
+ assert.ok(b.diff(a, 'year', true) < 1.05 / (2 * 28 * 12),
+ 'year diff across DST, upper bound');
+
+ a = dst.moment;
+ b = a.clone().utc().add(12 + dst.diff, 'hours').local();
+ daysInMonth = (a.daysInMonth() + b.daysInMonth()) / 2;
+
+ assert.equal(b.diff(a, 'milliseconds', true),
+ (12 + dst.diff) * 60 * 60 * 1000,
+ 'ms diff across DST');
+ assert.equal(b.diff(a, 'seconds', true), (12 + dst.diff) * 60 * 60,
+ 'second diff across DST');
+ assert.equal(b.diff(a, 'minutes', true), (12 + dst.diff) * 60,
+ 'minute diff across DST');
+ assert.equal(b.diff(a, 'hours', true), (12 + dst.diff),
+ 'hour diff across DST');
+ assert.equal(b.diff(a, 'days', true), 12 / 24, 'day diff across DST');
+ equal(assert, b.diff(a, 'weeks', true), 12 / 24 / 7,
+ 'week diff across DST');
+ assert.ok(0.95 / (2 * 31) < b.diff(a, 'months', true),
+ 'month diff across DST, lower bound');
+ assert.ok(b.diff(a, 'month', true) < 1.05 / (2 * 28),
+ 'month diff across DST, upper bound');
+ assert.ok(0.95 / (2 * 31 * 12) < b.diff(a, 'years', true),
+ 'year diff across DST, lower bound');
+ assert.ok(b.diff(a, 'year', true) < 1.05 / (2 * 28 * 12),
+ 'year diff across DST, upper bound');
+});
+
+test('diff overflow', function (assert) {
+ assert.equal(moment([2011]).diff([2010], 'months'), 12, 'month diff');
+ assert.equal(moment([2010, 0, 2]).diff([2010], 'hours'), 24, 'hour diff');
+ assert.equal(moment([2010, 0, 1, 2]).diff([2010], 'minutes'), 120, 'minute diff');
+ assert.equal(moment([2010, 0, 1, 0, 4]).diff([2010], 'seconds'), 240, 'second diff');
+});
+
+test('diff between utc and local', function (assert) {
+ if (moment([2012]).utcOffset() === moment([2011]).utcOffset()) {
+ // Russia's utc offset on 1st of Jan 2012 vs 2011 is different
+ assert.equal(moment([2012]).utc().diff([2011], 'years'), 1, 'year diff');
+ }
+ assert.equal(moment([2010, 2, 2]).utc().diff([2010, 0, 2], 'months'), 2, 'month diff');
+ assert.equal(moment([2010, 0, 4]).utc().diff([2010], 'days'), 3, 'day diff');
+ assert.equal(moment([2010, 0, 22]).utc().diff([2010], 'weeks'), 3, 'week diff');
+ assert.equal(moment([2010, 0, 1, 4]).utc().diff([2010], 'hours'), 4, 'hour diff');
+ assert.equal(moment([2010, 0, 1, 0, 5]).utc().diff([2010], 'minutes'), 5, 'minute diff');
+ assert.equal(moment([2010, 0, 1, 0, 0, 6]).utc().diff([2010], 'seconds'), 6, 'second diff');
+});
+
+test('diff floored', function (assert) {
+ assert.equal(moment([2010, 0, 1, 23]).diff([2010], 'day'), 0, '23 hours = 0 days');
+ assert.equal(moment([2010, 0, 1, 23, 59]).diff([2010], 'day'), 0, '23:59 hours = 0 days');
+ assert.equal(moment([2010, 0, 1, 24]).diff([2010], 'day'), 1, '24 hours = 1 day');
+ assert.equal(moment([2010, 0, 2]).diff([2011, 0, 1], 'year'), 0, 'year rounded down');
+ assert.equal(moment([2011, 0, 1]).diff([2010, 0, 2], 'year'), 0, 'year rounded down');
+ assert.equal(moment([2010, 0, 2]).diff([2011, 0, 2], 'year'), -1, 'year rounded down');
+ assert.equal(moment([2011, 0, 2]).diff([2010, 0, 2], 'year'), 1, 'year rounded down');
+});
+
+test('year diffs include dates', function (assert) {
+ assert.ok(moment([2012, 1, 19]).diff(moment([2002, 1, 20]), 'years', true) < 10, 'year diff should include date of month');
+});
+
+test('month diffs', function (assert) {
+ // due to floating point math errors, these tests just need to be accurate within 0.00000001
+ assert.equal(moment([2012, 0, 1]).diff([2012, 1, 1], 'months', true), -1, 'Jan 1 to Feb 1 should be 1 month');
+ equal(assert, moment([2012, 0, 1]).diff([2012, 0, 1, 12], 'months', true), -0.5 / 31, 'Jan 1 to Jan 1 noon should be 0.5 / 31 months');
+ assert.equal(moment([2012, 0, 15]).diff([2012, 1, 15], 'months', true), -1, 'Jan 15 to Feb 15 should be 1 month');
+ assert.equal(moment([2012, 0, 28]).diff([2012, 1, 28], 'months', true), -1, 'Jan 28 to Feb 28 should be 1 month');
+ assert.ok(moment([2012, 0, 31]).diff([2012, 1, 29], 'months', true), -1, 'Jan 31 to Feb 29 should be 1 month');
+ assert.ok(-1 > moment([2012, 0, 31]).diff([2012, 2, 1], 'months', true), 'Jan 31 to Mar 1 should be more than 1 month');
+ assert.ok(-30 / 28 < moment([2012, 0, 31]).diff([2012, 2, 1], 'months', true), 'Jan 31 to Mar 1 should be less than 1 month and 1 day');
+ equal(assert, moment([2012, 0, 1]).diff([2012, 0, 31], 'months', true), -(30 / 31), 'Jan 1 to Jan 31 should be 30 / 31 months');
+ assert.ok(0 < moment('2014-02-01').diff(moment('2014-01-31'), 'months', true), 'jan-31 to feb-1 diff is positive');
+});
+
+test('exact month diffs', function (assert) {
+ // generate all pairs of months and compute month diff, with fixed day
+ // of month = 15.
+
+ var m1, m2;
+ for (m1 = 0; m1 < 12; ++m1) {
+ for (m2 = m1; m2 < 12; ++m2) {
+ assert.equal(moment([2013, m2, 15]).diff(moment([2013, m1, 15]), 'months', true), m2 - m1,
+ 'month diff from 2013-' + m1 + '-15 to 2013-' + m2 + '-15');
+ }
+ }
+});
+
+test('year diffs', function (assert) {
+ // due to floating point math errors, these tests just need to be accurate within 0.00000001
+ equal(assert, moment([2012, 0, 1]).diff([2013, 0, 1], 'years', true), -1, 'Jan 1 2012 to Jan 1 2013 should be 1 year');
+ equal(assert, moment([2012, 1, 28]).diff([2013, 1, 28], 'years', true), -1, 'Feb 28 2012 to Feb 28 2013 should be 1 year');
+ equal(assert, moment([2012, 2, 1]).diff([2013, 2, 1], 'years', true), -1, 'Mar 1 2012 to Mar 1 2013 should be 1 year');
+ equal(assert, moment([2012, 11, 1]).diff([2013, 11, 1], 'years', true), -1, 'Dec 1 2012 to Dec 1 2013 should be 1 year');
+ equal(assert, moment([2012, 11, 31]).diff([2013, 11, 31], 'years', true), -1, 'Dec 31 2012 to Dec 31 2013 should be 1 year');
+ equal(assert, moment([2012, 0, 1]).diff([2013, 6, 1], 'years', true), -1.5, 'Jan 1 2012 to Jul 1 2013 should be 1.5 years');
+ equal(assert, moment([2012, 0, 31]).diff([2013, 6, 31], 'years', true), -1.5, 'Jan 31 2012 to Jul 31 2013 should be 1.5 years');
+ equal(assert, moment([2012, 0, 1]).diff([2013, 0, 1, 12], 'years', true), -1 - (0.5 / 31) / 12, 'Jan 1 2012 to Jan 1 2013 noon should be 1+(0.5 / 31) / 12 years');
+ equal(assert, moment([2012, 0, 1]).diff([2013, 6, 1, 12], 'years', true), -1.5 - (0.5 / 31) / 12, 'Jan 1 2012 to Jul 1 2013 noon should be 1.5+(0.5 / 31) / 12 years');
+ equal(assert, moment([2012, 1, 29]).diff([2013, 1, 28], 'years', true), -1, 'Feb 29 2012 to Feb 28 2013 should be 1-(1 / 28.5) / 12 years');
+});
+
+test('negative zero', function (assert) {
+ function isNegative (n) {
+ return (1 / n) < 0;
+ }
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1]), 'months')), 'month diff on same date is zero, not -0');
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1]), 'years')), 'year diff on same date is zero, not -0');
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1]), 'quarters')), 'quarter diff on same date is zero, not -0');
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 1]), 'days')), 'days diff on same date is zero, not -0');
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 0, 1]), 'hours')), 'hour diff on same hour is zero, not -0');
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 0, 0, 1]), 'minutes')), 'minute diff on same minute is zero, not -0');
+ assert.ok(!isNegative(moment([2012, 0, 1]).diff(moment([2012, 0, 1, 0, 0, 0, 1]), 'seconds')), 'second diff on same second is zero, not -0');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('duration');
+
+test('object instantiation', function (assert) {
+ var d = moment.duration({
+ years: 2,
+ months: 3,
+ weeks: 2,
+ days: 1,
+ hours: 8,
+ minutes: 9,
+ seconds: 20,
+ milliseconds: 12
+ });
+
+ assert.equal(d.years(), 2, 'years');
+ assert.equal(d.months(), 3, 'months');
+ assert.equal(d.weeks(), 2, 'weeks');
+ assert.equal(d.days(), 15, 'days'); // two weeks + 1 day
+ assert.equal(d.hours(), 8, 'hours');
+ assert.equal(d.minutes(), 9, 'minutes');
+ assert.equal(d.seconds(), 20, 'seconds');
+ assert.equal(d.milliseconds(), 12, 'milliseconds');
+});
+
+test('object instantiation with strings', function (assert) {
+ var d = moment.duration({
+ years: '2',
+ months: '3',
+ weeks: '2',
+ days: '1',
+ hours: '8',
+ minutes: '9',
+ seconds: '20',
+ milliseconds: '12'
+ });
+
+ assert.equal(d.years(), 2, 'years');
+ assert.equal(d.months(), 3, 'months');
+ assert.equal(d.weeks(), 2, 'weeks');
+ assert.equal(d.days(), 15, 'days'); // two weeks + 1 day
+ assert.equal(d.hours(), 8, 'hours');
+ assert.equal(d.minutes(), 9, 'minutes');
+ assert.equal(d.seconds(), 20, 'seconds');
+ assert.equal(d.milliseconds(), 12, 'milliseconds');
+});
+
+test('milliseconds instantiation', function (assert) {
+ assert.equal(moment.duration(72).milliseconds(), 72, 'milliseconds');
+});
+
+test('undefined instantiation', function (assert) {
+ assert.equal(moment.duration(undefined).milliseconds(), 0, 'milliseconds');
+});
+
+test('null instantiation', function (assert) {
+ assert.equal(moment.duration(null).milliseconds(), 0, 'milliseconds');
+});
+
+test('instantiation by type', function (assert) {
+ assert.equal(moment.duration(1, 'years').years(), 1, 'years');
+ assert.equal(moment.duration(1, 'y').years(), 1, 'y');
+ assert.equal(moment.duration(2, 'months').months(), 2, 'months');
+ assert.equal(moment.duration(2, 'M').months(), 2, 'M');
+ assert.equal(moment.duration(3, 'weeks').weeks(), 3, 'weeks');
+ assert.equal(moment.duration(3, 'w').weeks(), 3, 'weeks');
+ assert.equal(moment.duration(4, 'days').days(), 4, 'days');
+ assert.equal(moment.duration(4, 'd').days(), 4, 'd');
+ assert.equal(moment.duration(5, 'hours').hours(), 5, 'hours');
+ assert.equal(moment.duration(5, 'h').hours(), 5, 'h');
+ assert.equal(moment.duration(6, 'minutes').minutes(), 6, 'minutes');
+ assert.equal(moment.duration(6, 'm').minutes(), 6, 'm');
+ assert.equal(moment.duration(7, 'seconds').seconds(), 7, 'seconds');
+ assert.equal(moment.duration(7, 's').seconds(), 7, 's');
+ assert.equal(moment.duration(8, 'milliseconds').milliseconds(), 8, 'milliseconds');
+ assert.equal(moment.duration(8, 'ms').milliseconds(), 8, 'ms');
+});
+
+test('shortcuts', function (assert) {
+ assert.equal(moment.duration({y: 1}).years(), 1, 'years = y');
+ assert.equal(moment.duration({M: 2}).months(), 2, 'months = M');
+ assert.equal(moment.duration({w: 3}).weeks(), 3, 'weeks = w');
+ assert.equal(moment.duration({d: 4}).days(), 4, 'days = d');
+ assert.equal(moment.duration({h: 5}).hours(), 5, 'hours = h');
+ assert.equal(moment.duration({m: 6}).minutes(), 6, 'minutes = m');
+ assert.equal(moment.duration({s: 7}).seconds(), 7, 'seconds = s');
+ assert.equal(moment.duration({ms: 8}).milliseconds(), 8, 'milliseconds = ms');
+});
+
+test('generic getter', function (assert) {
+ assert.equal(moment.duration(1, 'years').get('years'), 1, 'years');
+ assert.equal(moment.duration(1, 'years').get('year'), 1, 'years = year');
+ assert.equal(moment.duration(1, 'years').get('y'), 1, 'years = y');
+ assert.equal(moment.duration(2, 'months').get('months'), 2, 'months');
+ assert.equal(moment.duration(2, 'months').get('month'), 2, 'months = month');
+ assert.equal(moment.duration(2, 'months').get('M'), 2, 'months = M');
+ assert.equal(moment.duration(3, 'weeks').get('weeks'), 3, 'weeks');
+ assert.equal(moment.duration(3, 'weeks').get('week'), 3, 'weeks = week');
+ assert.equal(moment.duration(3, 'weeks').get('w'), 3, 'weeks = w');
+ assert.equal(moment.duration(4, 'days').get('days'), 4, 'days');
+ assert.equal(moment.duration(4, 'days').get('day'), 4, 'days = day');
+ assert.equal(moment.duration(4, 'days').get('d'), 4, 'days = d');
+ assert.equal(moment.duration(5, 'hours').get('hours'), 5, 'hours');
+ assert.equal(moment.duration(5, 'hours').get('hour'), 5, 'hours = hour');
+ assert.equal(moment.duration(5, 'hours').get('h'), 5, 'hours = h');
+ assert.equal(moment.duration(6, 'minutes').get('minutes'), 6, 'minutes');
+ assert.equal(moment.duration(6, 'minutes').get('minute'), 6, 'minutes = minute');
+ assert.equal(moment.duration(6, 'minutes').get('m'), 6, 'minutes = m');
+ assert.equal(moment.duration(7, 'seconds').get('seconds'), 7, 'seconds');
+ assert.equal(moment.duration(7, 'seconds').get('second'), 7, 'seconds = second');
+ assert.equal(moment.duration(7, 'seconds').get('s'), 7, 'seconds = s');
+ assert.equal(moment.duration(8, 'milliseconds').get('milliseconds'), 8, 'milliseconds');
+ assert.equal(moment.duration(8, 'milliseconds').get('millisecond'), 8, 'milliseconds = millisecond');
+ assert.equal(moment.duration(8, 'milliseconds').get('ms'), 8, 'milliseconds = ms');
+});
+
+test('instantiation from another duration', function (assert) {
+ var simple = moment.duration(1234),
+ lengthy = moment.duration(60 * 60 * 24 * 360 * 1e3),
+ complicated = moment.duration({
+ years: 2,
+ months: 3,
+ weeks: 4,
+ days: 1,
+ hours: 8,
+ minutes: 9,
+ seconds: 20,
+ milliseconds: 12
+ }),
+ modified = moment.duration(1, 'day').add(moment.duration(1, 'day'));
+
+ assert.deepEqual(moment.duration(simple), simple, 'simple clones are equal');
+ assert.deepEqual(moment.duration(lengthy), lengthy, 'lengthy clones are equal');
+ assert.deepEqual(moment.duration(complicated), complicated, 'complicated clones are equal');
+ assert.deepEqual(moment.duration(modified), modified, 'cloning modified duration works');
+});
+
+test('instantiation from 24-hour time zero', function (assert) {
+ assert.equal(moment.duration('00:00').years(), 0, '0 years');
+ assert.equal(moment.duration('00:00').days(), 0, '0 days');
+ assert.equal(moment.duration('00:00').hours(), 0, '0 hours');
+ assert.equal(moment.duration('00:00').minutes(), 0, '0 minutes');
+ assert.equal(moment.duration('00:00').seconds(), 0, '0 seconds');
+ assert.equal(moment.duration('00:00').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instantiation from 24-hour time <24 hours', function (assert) {
+ assert.equal(moment.duration('06:45').years(), 0, '0 years');
+ assert.equal(moment.duration('06:45').days(), 0, '0 days');
+ assert.equal(moment.duration('06:45').hours(), 6, '6 hours');
+ assert.equal(moment.duration('06:45').minutes(), 45, '45 minutes');
+ assert.equal(moment.duration('06:45').seconds(), 0, '0 seconds');
+ assert.equal(moment.duration('06:45').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instantiation from 24-hour time >24 hours', function (assert) {
+ assert.equal(moment.duration('26:45').years(), 0, '0 years');
+ assert.equal(moment.duration('26:45').days(), 1, '0 days');
+ assert.equal(moment.duration('26:45').hours(), 2, '2 hours');
+ assert.equal(moment.duration('26:45').minutes(), 45, '45 minutes');
+ assert.equal(moment.duration('26:45').seconds(), 0, '0 seconds');
+ assert.equal(moment.duration('26:45').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instatiation from serialized C# TimeSpan zero', function (assert) {
+ assert.equal(moment.duration('00:00:00').years(), 0, '0 years');
+ assert.equal(moment.duration('00:00:00').days(), 0, '0 days');
+ assert.equal(moment.duration('00:00:00').hours(), 0, '0 hours');
+ assert.equal(moment.duration('00:00:00').minutes(), 0, '0 minutes');
+ assert.equal(moment.duration('00:00:00').seconds(), 0, '0 seconds');
+ assert.equal(moment.duration('00:00:00').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instatiation from serialized C# TimeSpan with days', function (assert) {
+ assert.equal(moment.duration('1.02:03:04.9999999').years(), 0, '0 years');
+ assert.equal(moment.duration('1.02:03:04.9999999').days(), 1, '1 day');
+ assert.equal(moment.duration('1.02:03:04.9999999').hours(), 2, '2 hours');
+ assert.equal(moment.duration('1.02:03:04.9999999').minutes(), 3, '3 minutes');
+ assert.equal(moment.duration('1.02:03:04.9999999').seconds(), 5, '5 seconds');
+ assert.equal(moment.duration('1.02:03:04.9999999').milliseconds(), 0, '0 milliseconds');
+
+ assert.equal(moment.duration('1 02:03:04.9999999').years(), 0, '0 years');
+ assert.equal(moment.duration('1 02:03:04.9999999').days(), 1, '1 day');
+ assert.equal(moment.duration('1 02:03:04.9999999').hours(), 2, '2 hours');
+ assert.equal(moment.duration('1 02:03:04.9999999').minutes(), 3, '3 minutes');
+ assert.equal(moment.duration('1 02:03:04.9999999').seconds(), 5, '5 seconds');
+ assert.equal(moment.duration('1 02:03:04.9999999').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instatiation from serialized C# TimeSpan without days', function (assert) {
+ assert.equal(moment.duration('01:02:03.9999999').years(), 0, '0 years');
+ assert.equal(moment.duration('01:02:03.9999999').days(), 0, '0 days');
+ assert.equal(moment.duration('01:02:03.9999999').hours(), 1, '1 hour');
+ assert.equal(moment.duration('01:02:03.9999999').minutes(), 2, '2 minutes');
+ assert.equal(moment.duration('01:02:03.9999999').seconds(), 4, '4 seconds');
+ assert.equal(moment.duration('01:02:03.9999999').milliseconds(), 0, '0 milliseconds');
+
+ assert.equal(moment.duration('23:59:59.9999999').days(), 1, '1 days');
+ assert.equal(moment.duration('23:59:59.9999999').hours(), 0, '0 hours');
+ assert.equal(moment.duration('23:59:59.9999999').minutes(), 0, '0 minutes');
+ assert.equal(moment.duration('23:59:59.9999999').seconds(), 0, '0 seconds');
+ assert.equal(moment.duration('23:59:59.9999999').milliseconds(), 0, '0 milliseconds');
+
+ assert.equal(moment.duration('500:59:59.8888888').days(), 20, '500 hours overflows to 20 days');
+ assert.equal(moment.duration('500:59:59.8888888').hours(), 20, '500 hours overflows to 20 hours');
+});
+
+test('instatiation from serialized C# TimeSpan without days or milliseconds', function (assert) {
+ assert.equal(moment.duration('01:02:03').years(), 0, '0 years');
+ assert.equal(moment.duration('01:02:03').days(), 0, '0 days');
+ assert.equal(moment.duration('01:02:03').hours(), 1, '1 hour');
+ assert.equal(moment.duration('01:02:03').minutes(), 2, '2 minutes');
+ assert.equal(moment.duration('01:02:03').seconds(), 3, '3 seconds');
+ assert.equal(moment.duration('01:02:03').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instatiation from serialized C# TimeSpan without milliseconds', function (assert) {
+ assert.equal(moment.duration('1.02:03:04').years(), 0, '0 years');
+ assert.equal(moment.duration('1.02:03:04').days(), 1, '1 day');
+ assert.equal(moment.duration('1.02:03:04').hours(), 2, '2 hours');
+ assert.equal(moment.duration('1.02:03:04').minutes(), 3, '3 minutes');
+ assert.equal(moment.duration('1.02:03:04').seconds(), 4, '4 seconds');
+ assert.equal(moment.duration('1.02:03:04').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instantiation from serialized C# TimeSpan with low millisecond precision', function (assert) {
+ assert.equal(moment.duration('00:00:15.72').years(), 0, '0 years');
+ assert.equal(moment.duration('00:00:15.72').days(), 0, '0 days');
+ assert.equal(moment.duration('00:00:15.72').hours(), 0, '0 hours');
+ assert.equal(moment.duration('00:00:15.72').minutes(), 0, '0 minutes');
+ assert.equal(moment.duration('00:00:15.72').seconds(), 15, '15 seconds');
+ assert.equal(moment.duration('00:00:15.72').milliseconds(), 720, '720 milliseconds');
+
+ assert.equal(moment.duration('00:00:15.7').milliseconds(), 700, '700 milliseconds');
+
+ assert.equal(moment.duration('00:00:15.').milliseconds(), 0, '0 milliseconds');
+});
+
+test('instantiation from serialized C# TimeSpan with high millisecond precision', function (assert) {
+ assert.equal(moment.duration('00:00:15.7200000').seconds(), 15, '15 seconds');
+ assert.equal(moment.duration('00:00:15.7200000').milliseconds(), 720, '720 milliseconds');
+
+ assert.equal(moment.duration('00:00:15.7209999').seconds(), 15, '15 seconds');
+ assert.equal(moment.duration('00:00:15.7209999').milliseconds(), 721, '721 milliseconds');
+
+ assert.equal(moment.duration('00:00:15.7205000').seconds(), 15, '15 seconds');
+ assert.equal(moment.duration('00:00:15.7205000').milliseconds(), 721, '721 milliseconds');
+
+ assert.equal(moment.duration('-00:00:15.7205000').seconds(), -15, '15 seconds');
+ assert.equal(moment.duration('-00:00:15.7205000').milliseconds(), -721, '721 milliseconds');
+});
+
+test('instatiation from serialized C# TimeSpan maxValue', function (assert) {
+ var d = moment.duration('10675199.02:48:05.4775807');
+
+ assert.equal(d.years(), 29227, '29227 years');
+ assert.equal(d.months(), 8, '8 months');
+ assert.equal(d.days(), 12, '12 day'); // if you have to change this value -- just do it
+
+ assert.equal(d.hours(), 2, '2 hours');
+ assert.equal(d.minutes(), 48, '48 minutes');
+ assert.equal(d.seconds(), 5, '5 seconds');
+ assert.equal(d.milliseconds(), 478, '478 milliseconds');
+});
+
+test('instatiation from serialized C# TimeSpan minValue', function (assert) {
+ var d = moment.duration('-10675199.02:48:05.4775808');
+
+ assert.equal(d.years(), -29227, '29653 years');
+ assert.equal(d.months(), -8, '8 day');
+ assert.equal(d.days(), -12, '12 day'); // if you have to change this value -- just do it
+
+ assert.equal(d.hours(), -2, '2 hours');
+ assert.equal(d.minutes(), -48, '48 minutes');
+ assert.equal(d.seconds(), -5, '5 seconds');
+ assert.equal(d.milliseconds(), -478, '478 milliseconds');
+});
+
+test('instantiation from ISO 8601 duration', function (assert) {
+ assert.equal(moment.duration('P1Y2M3DT4H5M6S').asSeconds(), moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).asSeconds(), 'all fields');
+ assert.equal(moment.duration('P3W3D').asSeconds(), moment.duration({w: 3, d: 3}).asSeconds(), 'week and day fields');
+ assert.equal(moment.duration('P1M').asSeconds(), moment.duration({M: 1}).asSeconds(), 'single month field');
+ assert.equal(moment.duration('PT1M').asSeconds(), moment.duration({m: 1}).asSeconds(), 'single minute field');
+ assert.equal(moment.duration('P1MT2H').asSeconds(), moment.duration({M: 1, h: 2}).asSeconds(), 'random fields missing');
+ assert.equal(moment.duration('-P60D').asSeconds(), moment.duration({d: -60}).asSeconds(), 'negative days');
+ assert.equal(moment.duration('PT0.5S').asSeconds(), moment.duration({s: 0.5}).asSeconds(), 'fractional seconds');
+ assert.equal(moment.duration('PT0,5S').asSeconds(), moment.duration({s: 0.5}).asSeconds(), 'fractional seconds (comma)');
+});
+
+test('serialization to ISO 8601 duration strings', function (assert) {
+ assert.equal(moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).toISOString(), 'P1Y2M3DT4H5M6S', 'all fields');
+ assert.equal(moment.duration({M: -1}).toISOString(), '-P1M', 'one month ago');
+ assert.equal(moment.duration({m: -1}).toISOString(), '-PT1M', 'one minute ago');
+ assert.equal(moment.duration({s: -0.5}).toISOString(), '-PT0.5S', 'one half second ago');
+ assert.equal(moment.duration({y: -0.5, M: 1}).toISOString(), '-P5M', 'a month after half a year ago');
+ assert.equal(moment.duration({}).toISOString(), 'P0D', 'zero duration');
+ assert.equal(moment.duration({M: 16, d:40, s: 86465}).toISOString(), 'P1Y4M40DT24H1M5S', 'all fields');
+});
+
+test('toString acts as toISOString', function (assert) {
+ assert.equal(moment.duration({y: 1, M: 2, d: 3, h: 4, m: 5, s: 6}).toString(), 'P1Y2M3DT4H5M6S', 'all fields');
+ assert.equal(moment.duration({M: -1}).toString(), '-P1M', 'one month ago');
+ assert.equal(moment.duration({m: -1}).toString(), '-PT1M', 'one minute ago');
+ assert.equal(moment.duration({s: -0.5}).toString(), '-PT0.5S', 'one half second ago');
+ assert.equal(moment.duration({y: -0.5, M: 1}).toString(), '-P5M', 'a month after half a year ago');
+ assert.equal(moment.duration({}).toString(), 'P0D', 'zero duration');
+ assert.equal(moment.duration({M: 16, d:40, s: 86465}).toString(), 'P1Y4M40DT24H1M5S', 'all fields');
+});
+
+test('toIsoString deprecation', function (assert) {
+ test.expectedDeprecations('toIsoString()');
+
+ assert.equal(moment.duration({}).toIsoString(), moment.duration({}).toISOString(), 'toIsoString delegates to toISOString');
+});
+
+test('`isodate` (python) test cases', function (assert) {
+ assert.equal(moment.duration('P18Y9M4DT11H9M8S').asSeconds(), moment.duration({y: 18, M: 9, d: 4, h: 11, m: 9, s: 8}).asSeconds(), 'python isodate 1');
+ assert.equal(moment.duration('P2W').asSeconds(), moment.duration({w: 2}).asSeconds(), 'python isodate 2');
+ assert.equal(moment.duration('P3Y6M4DT12H30M5S').asSeconds(), moment.duration({y: 3, M: 6, d: 4, h: 12, m: 30, s: 5}).asSeconds(), 'python isodate 3');
+ assert.equal(moment.duration('P23DT23H').asSeconds(), moment.duration({d: 23, h: 23}).asSeconds(), 'python isodate 4');
+ assert.equal(moment.duration('P4Y').asSeconds(), moment.duration({y: 4}).asSeconds(), 'python isodate 5');
+ assert.equal(moment.duration('P1M').asSeconds(), moment.duration({M: 1}).asSeconds(), 'python isodate 6');
+ assert.equal(moment.duration('PT1M').asSeconds(), moment.duration({m: 1}).asSeconds(), 'python isodate 7');
+ assert.equal(moment.duration('P0.5Y').asSeconds(), moment.duration({y: 0.5}).asSeconds(), 'python isodate 8');
+ assert.equal(moment.duration('PT36H').asSeconds(), moment.duration({h: 36}).asSeconds(), 'python isodate 9');
+ assert.equal(moment.duration('P1DT12H').asSeconds(), moment.duration({d: 1, h: 12}).asSeconds(), 'python isodate 10');
+ assert.equal(moment.duration('-P2W').asSeconds(), moment.duration({w: -2}).asSeconds(), 'python isodate 11');
+ assert.equal(moment.duration('-P2.2W').asSeconds(), moment.duration({w: -2.2}).asSeconds(), 'python isodate 12');
+ assert.equal(moment.duration('P1DT2H3M4S').asSeconds(), moment.duration({d: 1, h: 2, m: 3, s: 4}).asSeconds(), 'python isodate 13');
+ assert.equal(moment.duration('P1DT2H3M').asSeconds(), moment.duration({d: 1, h: 2, m: 3}).asSeconds(), 'python isodate 14');
+ assert.equal(moment.duration('P1DT2H').asSeconds(), moment.duration({d: 1, h: 2}).asSeconds(), 'python isodate 15');
+ assert.equal(moment.duration('PT2H').asSeconds(), moment.duration({h: 2}).asSeconds(), 'python isodate 16');
+ assert.equal(moment.duration('PT2.3H').asSeconds(), moment.duration({h: 2.3}).asSeconds(), 'python isodate 17');
+ assert.equal(moment.duration('PT2H3M4S').asSeconds(), moment.duration({h: 2, m: 3, s: 4}).asSeconds(), 'python isodate 18');
+ assert.equal(moment.duration('PT3M4S').asSeconds(), moment.duration({m: 3, s: 4}).asSeconds(), 'python isodate 19');
+ assert.equal(moment.duration('PT22S').asSeconds(), moment.duration({s: 22}).asSeconds(), 'python isodate 20');
+ assert.equal(moment.duration('PT22.22S').asSeconds(), moment.duration({s: 22.22}).asSeconds(), 'python isodate 21');
+ assert.equal(moment.duration('-P2Y').asSeconds(), moment.duration({y: -2}).asSeconds(), 'python isodate 22');
+ assert.equal(moment.duration('-P3Y6M4DT12H30M5S').asSeconds(), moment.duration({y: -3, M: -6, d: -4, h: -12, m: -30, s: -5}).asSeconds(), 'python isodate 23');
+ assert.equal(moment.duration('-P1DT2H3M4S').asSeconds(), moment.duration({d: -1, h: -2, m: -3, s: -4}).asSeconds(), 'python isodate 24');
+ assert.equal(moment.duration('PT-6H3M').asSeconds(), moment.duration({h: -6, m: 3}).asSeconds(), 'python isodate 25');
+ assert.equal(moment.duration('-PT-6H3M').asSeconds(), moment.duration({h: 6, m: -3}).asSeconds(), 'python isodate 26');
+ assert.equal(moment.duration('-P-3Y-6M-4DT-12H-30M-5S').asSeconds(), moment.duration({y: 3, M: 6, d: 4, h: 12, m: 30, s: 5}).asSeconds(), 'python isodate 27');
+ assert.equal(moment.duration('P-3Y-6M-4DT-12H-30M-5S').asSeconds(), moment.duration({y: -3, M: -6, d: -4, h: -12, m: -30, s: -5}).asSeconds(), 'python isodate 28');
+ assert.equal(moment.duration('-P-2W').asSeconds(), moment.duration({w: 2}).asSeconds(), 'python isodate 29');
+ assert.equal(moment.duration('P-2W').asSeconds(), moment.duration({w: -2}).asSeconds(), 'python isodate 30');
+});
+
+test('ISO 8601 misuse cases', function (assert) {
+ assert.equal(moment.duration('P').asSeconds(), 0, 'lonely P');
+ assert.equal(moment.duration('PT').asSeconds(), 0, 'just P and T');
+ assert.equal(moment.duration('P1H').asSeconds(), 0, 'missing T');
+ assert.equal(moment.duration('P1D1Y').asSeconds(), 0, 'out of order');
+ assert.equal(moment.duration('PT.5S').asSeconds(), 0.5, 'accept no leading zero for decimal');
+ assert.equal(moment.duration('PT1,S').asSeconds(), 1, 'accept trailing decimal separator');
+ assert.equal(moment.duration('PT1M0,,5S').asSeconds(), 60, 'extra decimal separators are ignored as 0');
+});
+
+test('humanize', function (assert) {
+ moment.locale('en');
+ assert.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', '44 seconds = a few seconds');
+ assert.equal(moment.duration({seconds: 45}).humanize(), 'a minute', '45 seconds = a minute');
+ assert.equal(moment.duration({seconds: 89}).humanize(), 'a minute', '89 seconds = a minute');
+ assert.equal(moment.duration({seconds: 90}).humanize(), '2 minutes', '90 seconds = 2 minutes');
+ assert.equal(moment.duration({minutes: 44}).humanize(), '44 minutes', '44 minutes = 44 minutes');
+ assert.equal(moment.duration({minutes: 45}).humanize(), 'an hour', '45 minutes = an hour');
+ assert.equal(moment.duration({minutes: 89}).humanize(), 'an hour', '89 minutes = an hour');
+ assert.equal(moment.duration({minutes: 90}).humanize(), '2 hours', '90 minutes = 2 hours');
+ assert.equal(moment.duration({hours: 5}).humanize(), '5 hours', '5 hours = 5 hours');
+ assert.equal(moment.duration({hours: 21}).humanize(), '21 hours', '21 hours = 21 hours');
+ assert.equal(moment.duration({hours: 22}).humanize(), 'a day', '22 hours = a day');
+ assert.equal(moment.duration({hours: 35}).humanize(), 'a day', '35 hours = a day');
+ assert.equal(moment.duration({hours: 36}).humanize(), '2 days', '36 hours = 2 days');
+ assert.equal(moment.duration({days: 1}).humanize(), 'a day', '1 day = a day');
+ assert.equal(moment.duration({days: 5}).humanize(), '5 days', '5 days = 5 days');
+ assert.equal(moment.duration({weeks: 1}).humanize(), '7 days', '1 week = 7 days');
+ assert.equal(moment.duration({days: 25}).humanize(), '25 days', '25 days = 25 days');
+ assert.equal(moment.duration({days: 26}).humanize(), 'a month', '26 days = a month');
+ assert.equal(moment.duration({days: 30}).humanize(), 'a month', '30 days = a month');
+ assert.equal(moment.duration({days: 45}).humanize(), 'a month', '45 days = a month');
+ assert.equal(moment.duration({days: 46}).humanize(), '2 months', '46 days = 2 months');
+ assert.equal(moment.duration({days: 74}).humanize(), '2 months', '74 days = 2 months');
+ assert.equal(moment.duration({days: 77}).humanize(), '3 months', '77 days = 3 months');
+ assert.equal(moment.duration({months: 1}).humanize(), 'a month', '1 month = a month');
+ assert.equal(moment.duration({months: 5}).humanize(), '5 months', '5 months = 5 months');
+ assert.equal(moment.duration({days: 344}).humanize(), 'a year', '344 days = a year');
+ assert.equal(moment.duration({days: 345}).humanize(), 'a year', '345 days = a year');
+ assert.equal(moment.duration({days: 547}).humanize(), 'a year', '547 days = a year');
+ assert.equal(moment.duration({days: 548}).humanize(), '2 years', '548 days = 2 years');
+ assert.equal(moment.duration({years: 1}).humanize(), 'a year', '1 year = a year');
+ assert.equal(moment.duration({years: 5}).humanize(), '5 years', '5 years = 5 years');
+ assert.equal(moment.duration(7200000).humanize(), '2 hours', '7200000 = 2 minutes');
+});
+
+test('humanize duration with suffix', function (assert) {
+ moment.locale('en');
+ assert.equal(moment.duration({seconds: 44}).humanize(true), 'in a few seconds', '44 seconds = a few seconds');
+ assert.equal(moment.duration({seconds: -44}).humanize(true), 'a few seconds ago', '44 seconds = a few seconds');
+});
+
+test('bubble value up', function (assert) {
+ assert.equal(moment.duration({milliseconds: 61001}).milliseconds(), 1, '61001 milliseconds has 1 millisecond left over');
+ assert.equal(moment.duration({milliseconds: 61001}).seconds(), 1, '61001 milliseconds has 1 second left over');
+ assert.equal(moment.duration({milliseconds: 61001}).minutes(), 1, '61001 milliseconds has 1 minute left over');
+
+ assert.equal(moment.duration({minutes: 350}).minutes(), 50, '350 minutes has 50 minutes left over');
+ assert.equal(moment.duration({minutes: 350}).hours(), 5, '350 minutes has 5 hours left over');
+});
+
+test('clipping', function (assert) {
+ assert.equal(moment.duration({months: 11}).months(), 11, '11 months is 11 months');
+ assert.equal(moment.duration({months: 11}).years(), 0, '11 months makes no year');
+ assert.equal(moment.duration({months: 12}).months(), 0, '12 months is 0 months left over');
+ assert.equal(moment.duration({months: 12}).years(), 1, '12 months makes 1 year');
+ assert.equal(moment.duration({months: 13}).months(), 1, '13 months is 1 month left over');
+ assert.equal(moment.duration({months: 13}).years(), 1, '13 months makes 1 year');
+
+ assert.equal(moment.duration({days: 30}).days(), 30, '30 days is 30 days');
+ assert.equal(moment.duration({days: 30}).months(), 0, '30 days makes no month');
+ assert.equal(moment.duration({days: 31}).days(), 0, '31 days is 0 days left over');
+ assert.equal(moment.duration({days: 31}).months(), 1, '31 days is a month');
+ assert.equal(moment.duration({days: 32}).days(), 1, '32 days is 1 day left over');
+ assert.equal(moment.duration({days: 32}).months(), 1, '32 days is a month');
+
+ assert.equal(moment.duration({hours: 23}).hours(), 23, '23 hours is 23 hours');
+ assert.equal(moment.duration({hours: 23}).days(), 0, '23 hours makes no day');
+ assert.equal(moment.duration({hours: 24}).hours(), 0, '24 hours is 0 hours left over');
+ assert.equal(moment.duration({hours: 24}).days(), 1, '24 hours makes 1 day');
+ assert.equal(moment.duration({hours: 25}).hours(), 1, '25 hours is 1 hour left over');
+ assert.equal(moment.duration({hours: 25}).days(), 1, '25 hours makes 1 day');
+});
+
+test('bubbling consistency', function (assert) {
+ var days = 0, months = 0, newDays, newMonths, totalDays, d;
+ for (totalDays = 1; totalDays <= 500; ++totalDays) {
+ d = moment.duration(totalDays, 'days');
+ newDays = d.days();
+ newMonths = d.months() + d.years() * 12;
+ assert.ok(
+ (months === newMonths && days + 1 === newDays) ||
+ (months + 1 === newMonths && newDays === 0),
+ 'consistent total days ' + totalDays +
+ ' was ' + months + ' ' + days +
+ ' now ' + newMonths + ' ' + newDays);
+ days = newDays;
+ months = newMonths;
+ }
+});
+
+test('effective equivalency', function (assert) {
+ assert.deepEqual(moment.duration({seconds: 1})._data, moment.duration({milliseconds: 1000})._data, '1 second is the same as 1000 milliseconds');
+ assert.deepEqual(moment.duration({seconds: 60})._data, moment.duration({minutes: 1})._data, '1 minute is the same as 60 seconds');
+ assert.deepEqual(moment.duration({minutes: 60})._data, moment.duration({hours: 1})._data, '1 hour is the same as 60 minutes');
+ assert.deepEqual(moment.duration({hours: 24})._data, moment.duration({days: 1})._data, '1 day is the same as 24 hours');
+ assert.deepEqual(moment.duration({days: 7})._data, moment.duration({weeks: 1})._data, '1 week is the same as 7 days');
+ assert.deepEqual(moment.duration({days: 31})._data, moment.duration({months: 1})._data, '1 month is the same as 30 days');
+ assert.deepEqual(moment.duration({months: 12})._data, moment.duration({years: 1})._data, '1 years is the same as 12 months');
+});
+
+test('asGetters', function (assert) {
+ // 400 years have exactly 146097 days
+
+ // years
+ assert.equal(moment.duration(1, 'year').asYears(), 1, '1 year as years');
+ assert.equal(moment.duration(1, 'year').asMonths(), 12, '1 year as months');
+ assert.equal(moment.duration(400, 'year').asMonths(), 4800, '400 years as months');
+ assert.equal(moment.duration(1, 'year').asWeeks().toFixed(3), 52.143, '1 year as weeks');
+ assert.equal(moment.duration(1, 'year').asDays(), 365, '1 year as days');
+ assert.equal(moment.duration(2, 'year').asDays(), 730, '2 years as days');
+ assert.equal(moment.duration(3, 'year').asDays(), 1096, '3 years as days');
+ assert.equal(moment.duration(4, 'year').asDays(), 1461, '4 years as days');
+ assert.equal(moment.duration(400, 'year').asDays(), 146097, '400 years as days');
+ assert.equal(moment.duration(1, 'year').asHours(), 8760, '1 year as hours');
+ assert.equal(moment.duration(1, 'year').asMinutes(), 525600, '1 year as minutes');
+ assert.equal(moment.duration(1, 'year').asSeconds(), 31536000, '1 year as seconds');
+ assert.equal(moment.duration(1, 'year').asMilliseconds(), 31536000000, '1 year as milliseconds');
+
+ // months
+ assert.equal(moment.duration(1, 'month').asYears().toFixed(4), 0.0833, '1 month as years');
+ assert.equal(moment.duration(1, 'month').asMonths(), 1, '1 month as months');
+ assert.equal(moment.duration(1, 'month').asWeeks().toFixed(3), 4.286, '1 month as weeks');
+ assert.equal(moment.duration(1, 'month').asDays(), 30, '1 month as days');
+ assert.equal(moment.duration(2, 'month').asDays(), 61, '2 months as days');
+ assert.equal(moment.duration(3, 'month').asDays(), 91, '3 months as days');
+ assert.equal(moment.duration(4, 'month').asDays(), 122, '4 months as days');
+ assert.equal(moment.duration(5, 'month').asDays(), 152, '5 months as days');
+ assert.equal(moment.duration(6, 'month').asDays(), 183, '6 months as days');
+ assert.equal(moment.duration(7, 'month').asDays(), 213, '7 months as days');
+ assert.equal(moment.duration(8, 'month').asDays(), 243, '8 months as days');
+ assert.equal(moment.duration(9, 'month').asDays(), 274, '9 months as days');
+ assert.equal(moment.duration(10, 'month').asDays(), 304, '10 months as days');
+ assert.equal(moment.duration(11, 'month').asDays(), 335, '11 months as days');
+ assert.equal(moment.duration(12, 'month').asDays(), 365, '12 months as days');
+ assert.equal(moment.duration(24, 'month').asDays(), 730, '24 months as days');
+ assert.equal(moment.duration(36, 'month').asDays(), 1096, '36 months as days');
+ assert.equal(moment.duration(48, 'month').asDays(), 1461, '48 months as days');
+ assert.equal(moment.duration(4800, 'month').asDays(), 146097, '4800 months as days');
+ assert.equal(moment.duration(1, 'month').asHours(), 720, '1 month as hours');
+ assert.equal(moment.duration(1, 'month').asMinutes(), 43200, '1 month as minutes');
+ assert.equal(moment.duration(1, 'month').asSeconds(), 2592000, '1 month as seconds');
+ assert.equal(moment.duration(1, 'month').asMilliseconds(), 2592000000, '1 month as milliseconds');
+
+ // weeks
+ assert.equal(moment.duration(1, 'week').asYears().toFixed(4), 0.0192, '1 week as years');
+ assert.equal(moment.duration(1, 'week').asMonths().toFixed(3), 0.230, '1 week as months');
+ assert.equal(moment.duration(1, 'week').asWeeks(), 1, '1 week as weeks');
+ assert.equal(moment.duration(1, 'week').asDays(), 7, '1 week as days');
+ assert.equal(moment.duration(1, 'week').asHours(), 168, '1 week as hours');
+ assert.equal(moment.duration(1, 'week').asMinutes(), 10080, '1 week as minutes');
+ assert.equal(moment.duration(1, 'week').asSeconds(), 604800, '1 week as seconds');
+ assert.equal(moment.duration(1, 'week').asMilliseconds(), 604800000, '1 week as milliseconds');
+
+ // days
+ assert.equal(moment.duration(1, 'day').asYears().toFixed(4), 0.0027, '1 day as years');
+ assert.equal(moment.duration(1, 'day').asMonths().toFixed(3), 0.033, '1 day as months');
+ assert.equal(moment.duration(1, 'day').asWeeks().toFixed(3), 0.143, '1 day as weeks');
+ assert.equal(moment.duration(1, 'day').asDays(), 1, '1 day as days');
+ assert.equal(moment.duration(1, 'day').asHours(), 24, '1 day as hours');
+ assert.equal(moment.duration(1, 'day').asMinutes(), 1440, '1 day as minutes');
+ assert.equal(moment.duration(1, 'day').asSeconds(), 86400, '1 day as seconds');
+ assert.equal(moment.duration(1, 'day').asMilliseconds(), 86400000, '1 day as milliseconds');
+
+ // hours
+ assert.equal(moment.duration(1, 'hour').asYears().toFixed(6), 0.000114, '1 hour as years');
+ assert.equal(moment.duration(1, 'hour').asMonths().toFixed(5), 0.00137, '1 hour as months');
+ assert.equal(moment.duration(1, 'hour').asWeeks().toFixed(5), 0.00595, '1 hour as weeks');
+ assert.equal(moment.duration(1, 'hour').asDays().toFixed(4), 0.0417, '1 hour as days');
+ assert.equal(moment.duration(1, 'hour').asHours(), 1, '1 hour as hours');
+ assert.equal(moment.duration(1, 'hour').asMinutes(), 60, '1 hour as minutes');
+ assert.equal(moment.duration(1, 'hour').asSeconds(), 3600, '1 hour as seconds');
+ assert.equal(moment.duration(1, 'hour').asMilliseconds(), 3600000, '1 hour as milliseconds');
+
+ // minutes
+ assert.equal(moment.duration(1, 'minute').asYears().toFixed(8), 0.00000190, '1 minute as years');
+ assert.equal(moment.duration(1, 'minute').asMonths().toFixed(7), 0.0000228, '1 minute as months');
+ assert.equal(moment.duration(1, 'minute').asWeeks().toFixed(7), 0.0000992, '1 minute as weeks');
+ assert.equal(moment.duration(1, 'minute').asDays().toFixed(6), 0.000694, '1 minute as days');
+ assert.equal(moment.duration(1, 'minute').asHours().toFixed(4), 0.0167, '1 minute as hours');
+ assert.equal(moment.duration(1, 'minute').asMinutes(), 1, '1 minute as minutes');
+ assert.equal(moment.duration(1, 'minute').asSeconds(), 60, '1 minute as seconds');
+ assert.equal(moment.duration(1, 'minute').asMilliseconds(), 60000, '1 minute as milliseconds');
+
+ // seconds
+ assert.equal(moment.duration(1, 'second').asYears().toFixed(10), 0.0000000317, '1 second as years');
+ assert.equal(moment.duration(1, 'second').asMonths().toFixed(9), 0.000000380, '1 second as months');
+ assert.equal(moment.duration(1, 'second').asWeeks().toFixed(8), 0.00000165, '1 second as weeks');
+ assert.equal(moment.duration(1, 'second').asDays().toFixed(7), 0.0000116, '1 second as days');
+ assert.equal(moment.duration(1, 'second').asHours().toFixed(6), 0.000278, '1 second as hours');
+ assert.equal(moment.duration(1, 'second').asMinutes().toFixed(4), 0.0167, '1 second as minutes');
+ assert.equal(moment.duration(1, 'second').asSeconds(), 1, '1 second as seconds');
+ assert.equal(moment.duration(1, 'second').asMilliseconds(), 1000, '1 second as milliseconds');
+
+ // milliseconds
+ assert.equal(moment.duration(1, 'millisecond').asYears().toFixed(13), 0.0000000000317, '1 millisecond as years');
+ assert.equal(moment.duration(1, 'millisecond').asMonths().toFixed(12), 0.000000000380, '1 millisecond as months');
+ assert.equal(moment.duration(1, 'millisecond').asWeeks().toFixed(11), 0.00000000165, '1 millisecond as weeks');
+ assert.equal(moment.duration(1, 'millisecond').asDays().toFixed(10), 0.0000000116, '1 millisecond as days');
+ assert.equal(moment.duration(1, 'millisecond').asHours().toFixed(9), 0.000000278, '1 millisecond as hours');
+ assert.equal(moment.duration(1, 'millisecond').asMinutes().toFixed(7), 0.0000167, '1 millisecond as minutes');
+ assert.equal(moment.duration(1, 'millisecond').asSeconds(), 0.001, '1 millisecond as seconds');
+ assert.equal(moment.duration(1, 'millisecond').asMilliseconds(), 1, '1 millisecond as milliseconds');
+});
+
+test('as getters for small units', function (assert) {
+ var dS = moment.duration(1, 'milliseconds'),
+ ds = moment.duration(3, 'seconds'),
+ dm = moment.duration(13, 'minutes');
+
+ // Tests for issue #1867.
+ // Floating point errors for small duration units were introduced in version 2.8.0.
+ assert.equal(dS.as('milliseconds'), 1, 'as("milliseconds")');
+ assert.equal(dS.asMilliseconds(), 1, 'asMilliseconds()');
+ assert.equal(ds.as('seconds'), 3, 'as("seconds")');
+ assert.equal(ds.asSeconds(), 3, 'asSeconds()');
+ assert.equal(dm.as('minutes'), 13, 'as("minutes")');
+ assert.equal(dm.asMinutes(), 13, 'asMinutes()');
+});
+
+test('minutes getter for floating point hours', function (assert) {
+ // Tests for issue #2978.
+ // For certain floating point hours, .minutes() getter produced incorrect values due to the rounding errors
+ assert.equal(moment.duration(2.3, 'h').minutes(), 18, 'minutes()');
+ assert.equal(moment.duration(4.1, 'h').minutes(), 6, 'minutes()');
+});
+
+test('isDuration', function (assert) {
+ assert.ok(moment.isDuration(moment.duration(12345678)), 'correctly says true');
+ assert.ok(!moment.isDuration(moment()), 'moment object is not a duration');
+ assert.ok(!moment.isDuration({milliseconds: 1}), 'plain object is not a duration');
+});
+
+test('add', function (assert) {
+ var d = moment.duration({months: 4, weeks: 3, days: 2});
+ // for some reason, d._data._months does not get updated; use d._months instead.
+ assert.equal(d.add(1, 'month')._months, 5, 'Add months');
+ assert.equal(d.add(5, 'days')._days, 28, 'Add days');
+ assert.equal(d.add(10000)._milliseconds, 10000, 'Add milliseconds');
+ assert.equal(d.add({h: 23, m: 59})._milliseconds, 23 * 60 * 60 * 1000 + 59 * 60 * 1000 + 10000, 'Add hour:minute');
+});
+
+test('add and bubble', function (assert) {
+ var d;
+
+ assert.equal(moment.duration(1, 'second').add(1000, 'milliseconds').seconds(), 2, 'Adding milliseconds should bubble up to seconds');
+ assert.equal(moment.duration(1, 'minute').add(60, 'second').minutes(), 2, 'Adding seconds should bubble up to minutes');
+ assert.equal(moment.duration(1, 'hour').add(60, 'minutes').hours(), 2, 'Adding minutes should bubble up to hours');
+ assert.equal(moment.duration(1, 'day').add(24, 'hours').days(), 2, 'Adding hours should bubble up to days');
+
+ d = moment.duration(-1, 'day').add(1, 'hour');
+ assert.equal(d.hours(), -23, '-1 day + 1 hour == -23 hour (component)');
+ assert.equal(d.asHours(), -23, '-1 day + 1 hour == -23 hours');
+
+ d = moment.duration(-1, 'year').add(1, 'day');
+ assert.equal(d.days(), -30, '- 1 year + 1 day == -30 days (component)');
+ assert.equal(d.months(), -11, '- 1 year + 1 day == -11 months (component)');
+ assert.equal(d.years(), 0, '- 1 year + 1 day == 0 years (component)');
+ assert.equal(d.asDays(), -364, '- 1 year + 1 day == -364 days');
+
+ d = moment.duration(-1, 'year').add(1, 'hour');
+ assert.equal(d.hours(), -23, '- 1 year + 1 hour == -23 hours (component)');
+ assert.equal(d.days(), -30, '- 1 year + 1 hour == -30 days (component)');
+ assert.equal(d.months(), -11, '- 1 year + 1 hour == -11 months (component)');
+ assert.equal(d.years(), 0, '- 1 year + 1 hour == 0 years (component)');
+});
+
+test('subtract and bubble', function (assert) {
+ var d;
+
+ assert.equal(moment.duration(2, 'second').subtract(1000, 'milliseconds').seconds(), 1, 'Subtracting milliseconds should bubble up to seconds');
+ assert.equal(moment.duration(2, 'minute').subtract(60, 'second').minutes(), 1, 'Subtracting seconds should bubble up to minutes');
+ assert.equal(moment.duration(2, 'hour').subtract(60, 'minutes').hours(), 1, 'Subtracting minutes should bubble up to hours');
+ assert.equal(moment.duration(2, 'day').subtract(24, 'hours').days(), 1, 'Subtracting hours should bubble up to days');
+
+ d = moment.duration(1, 'day').subtract(1, 'hour');
+ assert.equal(d.hours(), 23, '1 day - 1 hour == 23 hour (component)');
+ assert.equal(d.asHours(), 23, '1 day - 1 hour == 23 hours');
+
+ d = moment.duration(1, 'year').subtract(1, 'day');
+ assert.equal(d.days(), 30, '1 year - 1 day == 30 days (component)');
+ assert.equal(d.months(), 11, '1 year - 1 day == 11 months (component)');
+ assert.equal(d.years(), 0, '1 year - 1 day == 0 years (component)');
+ assert.equal(d.asDays(), 364, '1 year - 1 day == 364 days');
+
+ d = moment.duration(1, 'year').subtract(1, 'hour');
+ assert.equal(d.hours(), 23, '1 year - 1 hour == 23 hours (component)');
+ assert.equal(d.days(), 30, '1 year - 1 hour == 30 days (component)');
+ assert.equal(d.months(), 11, '1 year - 1 hour == 11 months (component)');
+ assert.equal(d.years(), 0, '1 year - 1 hour == 0 years (component)');
+});
+
+test('subtract', function (assert) {
+ var d = moment.duration({months: 2, weeks: 2, days: 0, hours: 5});
+ // for some reason, d._data._months does not get updated; use d._months instead.
+ assert.equal(d.subtract(1, 'months')._months, 1, 'Subtract months');
+ assert.equal(d.subtract(14, 'days')._days, 0, 'Subtract days');
+ assert.equal(d.subtract(10000)._milliseconds, 5 * 60 * 60 * 1000 - 10000, 'Subtract milliseconds');
+ assert.equal(d.subtract({h: 1, m: 59})._milliseconds, 3 * 60 * 60 * 1000 + 1 * 60 * 1000 - 10000, 'Subtract hour:minute');
+});
+
+test('JSON.stringify duration', function (assert) {
+ var d = moment.duration(1024, 'h');
+
+ assert.equal(JSON.stringify(d), '"' + d.toISOString() + '"', 'JSON.stringify on duration should return ISO string');
+});
+
+test('duration plugins', function (assert) {
+ var durationObject = moment.duration();
+ moment.duration.fn.foo = function (arg) {
+ assert.equal(this, durationObject);
+ assert.equal(arg, 5);
+ };
+ durationObject.foo(5);
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('duration from moments');
+
+test('pure year diff', function (assert) {
+ var m1 = moment('2012-01-01T00:00:00.000Z'),
+ m2 = moment('2013-01-01T00:00:00.000Z');
+
+ assert.equal(moment.duration({from: m1, to: m2}).as('years'), 1, 'year moment difference');
+ assert.equal(moment.duration({from: m2, to: m1}).as('years'), -1, 'negative year moment difference');
+});
+
+test('month and day diff', function (assert) {
+ var m1 = moment('2012-01-15T00:00:00.000Z'),
+ m2 = moment('2012-02-17T00:00:00.000Z'),
+ d = moment.duration({from: m1, to: m2});
+
+ assert.equal(d.get('days'), 2);
+ assert.equal(d.get('months'), 1);
+});
+
+test('day diff, separate months', function (assert) {
+ var m1 = moment('2012-01-15T00:00:00.000Z'),
+ m2 = moment('2012-02-13T00:00:00.000Z'),
+ d = moment.duration({from: m1, to: m2});
+
+ assert.equal(d.as('days'), 29);
+});
+
+test('hour diff', function (assert) {
+ var m1 = moment('2012-01-15T17:00:00.000Z'),
+ m2 = moment('2012-01-16T03:00:00.000Z'),
+ d = moment.duration({from: m1, to: m2});
+
+ assert.equal(d.as('hours'), 10);
+});
+
+test('minute diff', function (assert) {
+ var m1 = moment('2012-01-15T17:45:00.000Z'),
+ m2 = moment('2012-01-16T03:15:00.000Z'),
+ d = moment.duration({from: m1, to: m2});
+
+ assert.equal(d.as('hours'), 9.5);
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('format');
+
+test('format YY', function (assert) {
+ var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125));
+ assert.equal(b.format('YY'), '09', 'YY ---> 09');
+});
+
+test('format escape brackets', function (assert) {
+ moment.locale('en');
+
+ var b = moment(new Date(2009, 1, 14, 15, 25, 50, 125));
+ assert.equal(b.format('[day]'), 'day', 'Single bracket');
+ assert.equal(b.format('[day] YY [YY]'), 'day 09 YY', 'Double bracket');
+ assert.equal(b.format('[YY'), '[09', 'Un-ended bracket');
+ assert.equal(b.format('[[YY]]'), '[YY]', 'Double nested brackets');
+ assert.equal(b.format('[[]'), '[', 'Escape open bracket');
+ assert.equal(b.format('[Last]'), 'Last', 'localized tokens');
+ assert.equal(b.format('[L] L'), 'L 02/14/2009', 'localized tokens with escaped localized tokens');
+ assert.equal(b.format('[L LL LLL LLLL aLa]'), 'L LL LLL LLLL aLa', 'localized tokens with escaped localized tokens');
+ assert.equal(b.format('[LLL] LLL'), 'LLL February 14, 2009 3:25 PM', 'localized tokens with escaped localized tokens (recursion)');
+ assert.equal(b.format('YYYY[\n]DD[\n]'), '2009\n14\n', 'Newlines');
+});
+
+test('handle negative years', function (assert) {
+ moment.locale('en');
+ assert.equal(moment.utc().year(-1).format('YY'), '-01', 'YY with negative year');
+ assert.equal(moment.utc().year(-1).format('YYYY'), '-0001', 'YYYY with negative year');
+ assert.equal(moment.utc().year(-12).format('YY'), '-12', 'YY with negative year');
+ assert.equal(moment.utc().year(-12).format('YYYY'), '-0012', 'YYYY with negative year');
+ assert.equal(moment.utc().year(-123).format('YY'), '-23', 'YY with negative year');
+ assert.equal(moment.utc().year(-123).format('YYYY'), '-0123', 'YYYY with negative year');
+ assert.equal(moment.utc().year(-1234).format('YY'), '-34', 'YY with negative year');
+ assert.equal(moment.utc().year(-1234).format('YYYY'), '-1234', 'YYYY with negative year');
+ assert.equal(moment.utc().year(-12345).format('YY'), '-45', 'YY with negative year');
+ assert.equal(moment.utc().year(-12345).format('YYYY'), '-12345', 'YYYY with negative year');
+});
+
+test('format milliseconds', function (assert) {
+ var b = moment(new Date(2009, 1, 14, 15, 25, 50, 123));
+ assert.equal(b.format('S'), '1', 'Deciseconds');
+ assert.equal(b.format('SS'), '12', 'Centiseconds');
+ assert.equal(b.format('SSS'), '123', 'Milliseconds');
+ b.milliseconds(789);
+ assert.equal(b.format('S'), '7', 'Deciseconds');
+ assert.equal(b.format('SS'), '78', 'Centiseconds');
+ assert.equal(b.format('SSS'), '789', 'Milliseconds');
+});
+
+test('format timezone', function (assert) {
+ var b = moment(new Date(2010, 1, 14, 15, 25, 50, 125));
+ assert.ok(b.format('Z').match(/^[\+\-]\d\d:\d\d$/), b.format('Z') + ' should be something like \'+07:30\'');
+ assert.ok(b.format('ZZ').match(/^[\+\-]\d{4}$/), b.format('ZZ') + ' should be something like \'+0700\'');
+});
+
+test('format multiple with utc offset', function (assert) {
+ var b = moment('2012-10-08 -1200', ['YYYY-MM-DD HH:mm ZZ', 'YYYY-MM-DD ZZ', 'YYYY-MM-DD']);
+ assert.equal(b.format('YYYY-MM'), '2012-10', 'Parsing multiple formats should not crash with different sized formats');
+});
+
+test('isDST', function (assert) {
+ var janOffset = new Date(2011, 0, 1).getTimezoneOffset(),
+ julOffset = new Date(2011, 6, 1).getTimezoneOffset(),
+ janIsDst = janOffset < julOffset,
+ julIsDst = julOffset < janOffset,
+ jan1 = moment([2011]),
+ jul1 = moment([2011, 6]);
+
+ if (janIsDst && julIsDst) {
+ assert.ok(0, 'January and July cannot both be in DST');
+ assert.ok(0, 'January and July cannot both be in DST');
+ } else if (janIsDst) {
+ assert.ok(jan1.isDST(), 'January 1 is DST');
+ assert.ok(!jul1.isDST(), 'July 1 is not DST');
+ } else if (julIsDst) {
+ assert.ok(!jan1.isDST(), 'January 1 is not DST');
+ assert.ok(jul1.isDST(), 'July 1 is DST');
+ } else {
+ assert.ok(!jan1.isDST(), 'January 1 is not DST');
+ assert.ok(!jul1.isDST(), 'July 1 is not DST');
+ }
+});
+
+test('unix timestamp', function (assert) {
+ var m = moment('1234567890.123', 'X');
+ assert.equal(m.format('X'), '1234567890', 'unix timestamp without milliseconds');
+ assert.equal(m.format('X.S'), '1234567890.1', 'unix timestamp with deciseconds');
+ assert.equal(m.format('X.SS'), '1234567890.12', 'unix timestamp with centiseconds');
+ assert.equal(m.format('X.SSS'), '1234567890.123', 'unix timestamp with milliseconds');
+
+ m = moment(1234567890.123, 'X');
+ assert.equal(m.format('X'), '1234567890', 'unix timestamp as integer');
+});
+
+test('unix offset milliseconds', function (assert) {
+ var m = moment('1234567890123', 'x');
+ assert.equal(m.format('x'), '1234567890123', 'unix offset in milliseconds');
+
+ m = moment(1234567890123, 'x');
+ assert.equal(m.format('x'), '1234567890123', 'unix offset in milliseconds as integer');
+});
+
+test('utcOffset sanity checks', function (assert) {
+ assert.equal(moment().utcOffset() % 15, 0,
+ 'utc offset should be a multiple of 15 (was ' + moment().utcOffset() + ')');
+
+ assert.equal(moment().utcOffset(), -(new Date()).getTimezoneOffset(),
+ 'utcOffset should return the opposite of getTimezoneOffset');
+});
+
+test('default format', function (assert) {
+ var isoRegex = /\d{4}.\d\d.\d\dT\d\d.\d\d.\d\d[\+\-]\d\d:\d\d/;
+ assert.ok(isoRegex.exec(moment().format()), 'default format (' + moment().format() + ') should match ISO');
+});
+
+test('default UTC format', function (assert) {
+ var isoRegex = /\d{4}.\d\d.\d\dT\d\d.\d\d.\d\dZ/;
+ assert.ok(isoRegex.exec(moment.utc().format()), 'default UTC format (' + moment.utc().format() + ') should match ISO');
+});
+
+test('toJSON', function (assert) {
+ var supportsJson = typeof JSON !== 'undefined' && JSON.stringify && JSON.stringify.call,
+ date = moment('2012-10-09T21:30:40.678+0100');
+
+ assert.equal(date.toJSON(), '2012-10-09T20:30:40.678Z', 'should output ISO8601 on moment.fn.toJSON');
+
+ if (supportsJson) {
+ assert.equal(JSON.stringify({
+ date : date
+ }), '{"date":"2012-10-09T20:30:40.678Z"}', 'should output ISO8601 on JSON.stringify');
+ }
+});
+
+test('toISOString', function (assert) {
+ var date = moment.utc('2012-10-09T20:30:40.678');
+
+ assert.equal(date.toISOString(), '2012-10-09T20:30:40.678Z', 'should output ISO8601 on moment.fn.toISOString');
+
+ // big years
+ date = moment.utc('+020123-10-09T20:30:40.678');
+ assert.equal(date.toISOString(), '+020123-10-09T20:30:40.678Z', 'ISO8601 format on big positive year');
+ // negative years
+ date = moment.utc('-000001-10-09T20:30:40.678');
+ assert.equal(date.toISOString(), '-000001-10-09T20:30:40.678Z', 'ISO8601 format on negative year');
+ // big negative years
+ date = moment.utc('-020123-10-09T20:30:40.678');
+ assert.equal(date.toISOString(), '-020123-10-09T20:30:40.678Z', 'ISO8601 format on big negative year');
+});
+
+// See https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+test('inspect', function (assert) {
+ function roundtrip(m) {
+ /*jshint evil:true */
+ return (new Function('moment', 'return ' + m.inspect()))(moment);
+ }
+ function testInspect(date, string) {
+ var inspected = date.inspect();
+ assert.equal(inspected, string);
+ assert.ok(date.isSame(roundtrip(date)), 'Tried to parse ' + inspected);
+ }
+
+ testInspect(
+ moment('2012-10-09T20:30:40.678'),
+ 'moment("2012-10-09T20:30:40.678")'
+ );
+ testInspect(
+ moment('+020123-10-09T20:30:40.678'),
+ 'moment("+020123-10-09T20:30:40.678")'
+ );
+ testInspect(
+ moment.utc('2012-10-09T20:30:40.678'),
+ 'moment.utc("2012-10-09T20:30:40.678+00:00")'
+ );
+ testInspect(
+ moment.utc('+020123-10-09T20:30:40.678'),
+ 'moment.utc("+020123-10-09T20:30:40.678+00:00")'
+ );
+ testInspect(
+ moment.utc('+020123-10-09T20:30:40.678+01:00'),
+ 'moment.utc("+020123-10-09T19:30:40.678+00:00")'
+ );
+ testInspect(
+ moment.parseZone('2016-06-11T17:30:40.678+0430'),
+ 'moment.parseZone("2016-06-11T17:30:40.678+04:30")'
+ );
+ testInspect(
+ moment.parseZone('+112016-06-11T17:30:40.678+0430'),
+ 'moment.parseZone("+112016-06-11T17:30:40.678+04:30")'
+ );
+
+ assert.equal(
+ moment(new Date('nope')).inspect(),
+ 'moment.invalid(/* Invalid Date */)'
+ );
+ assert.equal(
+ moment('blah', 'YYYY').inspect(),
+ 'moment.invalid(/* blah */)'
+ );
+});
+
+test('long years', function (assert) {
+ assert.equal(moment.utc().year(2).format('YYYYYY'), '+000002', 'small year with YYYYYY');
+ assert.equal(moment.utc().year(2012).format('YYYYYY'), '+002012', 'regular year with YYYYYY');
+ assert.equal(moment.utc().year(20123).format('YYYYYY'), '+020123', 'big year with YYYYYY');
+
+ assert.equal(moment.utc().year(-1).format('YYYYYY'), '-000001', 'small negative year with YYYYYY');
+ assert.equal(moment.utc().year(-2012).format('YYYYYY'), '-002012', 'negative year with YYYYYY');
+ assert.equal(moment.utc().year(-20123).format('YYYYYY'), '-020123', 'big negative year with YYYYYY');
+});
+
+test('iso week formats', function (assert) {
+ // http://en.wikipedia.org/wiki/ISO_week_date
+ var cases = {
+ '2005-01-02': '2004-53',
+ '2005-12-31': '2005-52',
+ '2007-01-01': '2007-01',
+ '2007-12-30': '2007-52',
+ '2007-12-31': '2008-01',
+ '2008-01-01': '2008-01',
+ '2008-12-28': '2008-52',
+ '2008-12-29': '2009-01',
+ '2008-12-30': '2009-01',
+ '2008-12-31': '2009-01',
+ '2009-01-01': '2009-01',
+ '2009-12-31': '2009-53',
+ '2010-01-01': '2009-53',
+ '2010-01-02': '2009-53',
+ '2010-01-03': '2009-53',
+ '404-12-31': '0404-53',
+ '405-12-31': '0405-52'
+ }, i, isoWeek, formatted2, formatted1;
+
+ for (i in cases) {
+ isoWeek = cases[i].split('-').pop();
+ formatted2 = moment(i, 'YYYY-MM-DD').format('WW');
+ assert.equal(isoWeek, formatted2, i + ': WW should be ' + isoWeek + ', but ' + formatted2);
+ isoWeek = isoWeek.replace(/^0+/, '');
+ formatted1 = moment(i, 'YYYY-MM-DD').format('W');
+ assert.equal(isoWeek, formatted1, i + ': W should be ' + isoWeek + ', but ' + formatted1);
+ }
+});
+
+test('iso week year formats', function (assert) {
+ // http://en.wikipedia.org/wiki/ISO_week_date
+ var cases = {
+ '2005-01-02': '2004-53',
+ '2005-12-31': '2005-52',
+ '2007-01-01': '2007-01',
+ '2007-12-30': '2007-52',
+ '2007-12-31': '2008-01',
+ '2008-01-01': '2008-01',
+ '2008-12-28': '2008-52',
+ '2008-12-29': '2009-01',
+ '2008-12-30': '2009-01',
+ '2008-12-31': '2009-01',
+ '2009-01-01': '2009-01',
+ '2009-12-31': '2009-53',
+ '2010-01-01': '2009-53',
+ '2010-01-02': '2009-53',
+ '2010-01-03': '2009-53',
+ '404-12-31': '0404-53',
+ '405-12-31': '0405-52'
+ }, i, isoWeekYear, formatted5, formatted4, formatted2;
+
+ for (i in cases) {
+ isoWeekYear = cases[i].split('-')[0];
+ formatted5 = moment(i, 'YYYY-MM-DD').format('GGGGG');
+ assert.equal('0' + isoWeekYear, formatted5, i + ': GGGGG should be ' + isoWeekYear + ', but ' + formatted5);
+ formatted4 = moment(i, 'YYYY-MM-DD').format('GGGG');
+ assert.equal(isoWeekYear, formatted4, i + ': GGGG should be ' + isoWeekYear + ', but ' + formatted4);
+ formatted2 = moment(i, 'YYYY-MM-DD').format('GG');
+ assert.equal(isoWeekYear.slice(2, 4), formatted2, i + ': GG should be ' + isoWeekYear + ', but ' + formatted2);
+ }
+});
+
+test('week year formats', function (assert) {
+ // http://en.wikipedia.org/wiki/ISO_week_date
+ var cases = {
+ '2005-01-02': '2004-53',
+ '2005-12-31': '2005-52',
+ '2007-01-01': '2007-01',
+ '2007-12-30': '2007-52',
+ '2007-12-31': '2008-01',
+ '2008-01-01': '2008-01',
+ '2008-12-28': '2008-52',
+ '2008-12-29': '2009-01',
+ '2008-12-30': '2009-01',
+ '2008-12-31': '2009-01',
+ '2009-01-01': '2009-01',
+ '2009-12-31': '2009-53',
+ '2010-01-01': '2009-53',
+ '2010-01-02': '2009-53',
+ '2010-01-03': '2009-53',
+ '404-12-31': '0404-53',
+ '405-12-31': '0405-52'
+ }, i, isoWeekYear, formatted5, formatted4, formatted2;
+
+ moment.defineLocale('dow:1,doy:4', {week: {dow: 1, doy: 4}});
+
+ for (i in cases) {
+ isoWeekYear = cases[i].split('-')[0];
+ formatted5 = moment(i, 'YYYY-MM-DD').format('ggggg');
+ assert.equal('0' + isoWeekYear, formatted5, i + ': ggggg should be ' + isoWeekYear + ', but ' + formatted5);
+ formatted4 = moment(i, 'YYYY-MM-DD').format('gggg');
+ assert.equal(isoWeekYear, formatted4, i + ': gggg should be ' + isoWeekYear + ', but ' + formatted4);
+ formatted2 = moment(i, 'YYYY-MM-DD').format('gg');
+ assert.equal(isoWeekYear.slice(2, 4), formatted2, i + ': gg should be ' + isoWeekYear + ', but ' + formatted2);
+ }
+ moment.defineLocale('dow:1,doy:4', null);
+});
+
+test('iso weekday formats', function (assert) {
+ assert.equal(moment([1985, 1, 4]).format('E'), '1', 'Feb 4 1985 is Monday -- 1st day');
+ assert.equal(moment([2029, 8, 18]).format('E'), '2', 'Sep 18 2029 is Tuesday -- 2nd day');
+ assert.equal(moment([2013, 3, 24]).format('E'), '3', 'Apr 24 2013 is Wednesday -- 3rd day');
+ assert.equal(moment([2015, 2, 5]).format('E'), '4', 'Mar 5 2015 is Thursday -- 4th day');
+ assert.equal(moment([1970, 0, 2]).format('E'), '5', 'Jan 2 1970 is Friday -- 5th day');
+ assert.equal(moment([2001, 4, 12]).format('E'), '6', 'May 12 2001 is Saturday -- 6th day');
+ assert.equal(moment([2000, 0, 2]).format('E'), '7', 'Jan 2 2000 is Sunday -- 7th day');
+});
+
+test('weekday formats', function (assert) {
+ moment.defineLocale('dow: 3,doy: 5', {week: {dow: 3, doy: 5}});
+ assert.equal(moment([1985, 1, 6]).format('e'), '0', 'Feb 6 1985 is Wednesday -- 0th day');
+ assert.equal(moment([2029, 8, 20]).format('e'), '1', 'Sep 20 2029 is Thursday -- 1st day');
+ assert.equal(moment([2013, 3, 26]).format('e'), '2', 'Apr 26 2013 is Friday -- 2nd day');
+ assert.equal(moment([2015, 2, 7]).format('e'), '3', 'Mar 7 2015 is Saturday -- 3nd day');
+ assert.equal(moment([1970, 0, 4]).format('e'), '4', 'Jan 4 1970 is Sunday -- 4th day');
+ assert.equal(moment([2001, 4, 14]).format('e'), '5', 'May 14 2001 is Monday -- 5th day');
+ assert.equal(moment([2000, 0, 4]).format('e'), '6', 'Jan 4 2000 is Tuesday -- 6th day');
+ moment.defineLocale('dow: 3,doy: 5', null);
+});
+
+test('toString is just human readable format', function (assert) {
+ var b = moment(new Date(2009, 1, 5, 15, 25, 50, 125));
+ assert.equal(b.toString(), b.format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'));
+});
+
+test('toJSON skips postformat', function (assert) {
+ moment.defineLocale('postformat', {
+ postformat: function (s) {
+ s.replace(/./g, 'X');
+ }
+ });
+ assert.equal(moment.utc([2000, 0, 1]).toJSON(), '2000-01-01T00:00:00.000Z', 'toJSON doesn\'t postformat');
+ moment.defineLocale('postformat', null);
+});
+
+test('calendar day timezone', function (assert) {
+ moment.locale('en');
+ var zones = [60, -60, 90, -90, 360, -360, 720, -720],
+ b = moment().utc().startOf('day').subtract({m : 1}),
+ c = moment().local().startOf('day').subtract({m : 1}),
+ d = moment().local().startOf('day').subtract({d : 2}),
+ i, z, a;
+
+ for (i = 0; i < zones.length; ++i) {
+ z = zones[i];
+ a = moment().utcOffset(z).startOf('day').subtract({m: 1});
+ assert.equal(moment(a).utcOffset(z).calendar(), 'Yesterday at 11:59 PM',
+ 'Yesterday at 11:59 PM, not Today, or the wrong time, tz = ' + z);
+ }
+
+ assert.equal(moment(b).utc().calendar(), 'Yesterday at 11:59 PM', 'Yesterday at 11:59 PM, not Today, or the wrong time');
+ assert.equal(moment(c).local().calendar(), 'Yesterday at 11:59 PM', 'Yesterday at 11:59 PM, not Today, or the wrong time');
+ assert.equal(moment(c).local().calendar(d), 'Tomorrow at 11:59 PM', 'Tomorrow at 11:59 PM, not Yesterday, or the wrong time');
+});
+
+test('calendar with custom formats', function (assert) {
+ assert.equal(moment().calendar(null, {sameDay: '[Today]'}), 'Today', 'Today');
+ assert.equal(moment().add(1, 'days').calendar(null, {nextDay: '[Tomorrow]'}), 'Tomorrow', 'Tomorrow');
+ assert.equal(moment([1985, 1, 4]).calendar(null, {sameElse: 'YYYY-MM-DD'}), '1985-02-04', 'Else');
+});
+
+test('invalid', function (assert) {
+ assert.equal(moment.invalid().format(), 'Invalid date');
+ assert.equal(moment.invalid().format('YYYY-MM-DD'), 'Invalid date');
+});
+
+test('quarter formats', function (assert) {
+ assert.equal(moment([1985, 1, 4]).format('Q'), '1', 'Feb 4 1985 is Q1');
+ assert.equal(moment([2029, 8, 18]).format('Q'), '3', 'Sep 18 2029 is Q3');
+ assert.equal(moment([2013, 3, 24]).format('Q'), '2', 'Apr 24 2013 is Q2');
+ assert.equal(moment([2015, 2, 5]).format('Q'), '1', 'Mar 5 2015 is Q1');
+ assert.equal(moment([1970, 0, 2]).format('Q'), '1', 'Jan 2 1970 is Q1');
+ assert.equal(moment([2001, 11, 12]).format('Q'), '4', 'Dec 12 2001 is Q4');
+ assert.equal(moment([2000, 0, 2]).format('[Q]Q-YYYY'), 'Q1-2000', 'Jan 2 2000 is Q1');
+});
+
+test('quarter ordinal formats', function (assert) {
+ assert.equal(moment([1985, 1, 4]).format('Qo'), '1st', 'Feb 4 1985 is 1st quarter');
+ assert.equal(moment([2029, 8, 18]).format('Qo'), '3rd', 'Sep 18 2029 is 3rd quarter');
+ assert.equal(moment([2013, 3, 24]).format('Qo'), '2nd', 'Apr 24 2013 is 2nd quarter');
+ assert.equal(moment([2015, 2, 5]).format('Qo'), '1st', 'Mar 5 2015 is 1st quarter');
+ assert.equal(moment([1970, 0, 2]).format('Qo'), '1st', 'Jan 2 1970 is 1st quarter');
+ assert.equal(moment([2001, 11, 12]).format('Qo'), '4th', 'Dec 12 2001 is 4th quarter');
+ assert.equal(moment([2000, 0, 2]).format('Qo [quarter] YYYY'), '1st quarter 2000', 'Jan 2 2000 is 1st quarter');
+});
+
+// test('full expanded format is returned from abbreviated formats', function (assert) {
+// function objectKeys(obj) {
+// if (Object.keys) {
+// return Object.keys(obj);
+// } else {
+// // IE8
+// var res = [], i;
+// for (i in obj) {
+// if (obj.hasOwnProperty(i)) {
+// res.push(i);
+// }
+// }
+// return res;
+// }
+// }
+
+// var locales =
+// 'ar-sa ar-tn ar az be bg bn bo br bs ca cs cv cy da de-at de dv el ' +
+// 'en-au en-ca en-gb en-ie en-nz eo es et eu fa fi fo fr-ca fr-ch fr fy ' +
+// 'gd gl he hi hr hu hy-am id is it ja jv ka kk km ko lb lo lt lv me mk ml ' +
+// 'mr ms-my ms my nb ne nl nn pl pt-br pt ro ru se si sk sl sq sr-cyrl ' +
+// 'sr sv sw ta te th tl-ph tlh tr tzl tzm-latn tzm uk uz vi zh-cn zh-tw';
+
+// each(locales.split(' '), function (locale) {
+// var data, tokens;
+// data = moment().locale(locale).localeData()._longDateFormat;
+// tokens = objectKeys(data);
+// each(tokens, function (token) {
+// // Check each format string to make sure it does not contain any
+// // tokens that need to be expanded.
+// each(tokens, function (i) {
+// // strip escaped sequences
+// var format = data[i].replace(/(\[[^\]]*\])/g, '');
+// assert.equal(false, !!~format.indexOf(token), 'locale ' + locale + ' contains ' + token + ' in ' + i);
+// });
+// });
+// });
+// });
+
+test('milliseconds', function (assert) {
+ var m = moment('123', 'SSS');
+
+ assert.equal(m.format('S'), '1');
+ assert.equal(m.format('SS'), '12');
+ assert.equal(m.format('SSS'), '123');
+ assert.equal(m.format('SSSS'), '1230');
+ assert.equal(m.format('SSSSS'), '12300');
+ assert.equal(m.format('SSSSSS'), '123000');
+ assert.equal(m.format('SSSSSSS'), '1230000');
+ assert.equal(m.format('SSSSSSSS'), '12300000');
+ assert.equal(m.format('SSSSSSSSS'), '123000000');
+});
+
+test('hmm and hmmss', function (assert) {
+ assert.equal(moment('12:34:56', 'HH:mm:ss').format('hmm'), '1234');
+ assert.equal(moment('01:34:56', 'HH:mm:ss').format('hmm'), '134');
+ assert.equal(moment('13:34:56', 'HH:mm:ss').format('hmm'), '134');
+
+ assert.equal(moment('12:34:56', 'HH:mm:ss').format('hmmss'), '123456');
+ assert.equal(moment('01:34:56', 'HH:mm:ss').format('hmmss'), '13456');
+ assert.equal(moment('13:34:56', 'HH:mm:ss').format('hmmss'), '13456');
+});
+
+test('Hmm and Hmmss', function (assert) {
+ assert.equal(moment('12:34:56', 'HH:mm:ss').format('Hmm'), '1234');
+ assert.equal(moment('01:34:56', 'HH:mm:ss').format('Hmm'), '134');
+ assert.equal(moment('13:34:56', 'HH:mm:ss').format('Hmm'), '1334');
+
+ assert.equal(moment('12:34:56', 'HH:mm:ss').format('Hmmss'), '123456');
+ assert.equal(moment('01:34:56', 'HH:mm:ss').format('Hmmss'), '13456');
+ assert.equal(moment('08:34:56', 'HH:mm:ss').format('Hmmss'), '83456');
+ assert.equal(moment('18:34:56', 'HH:mm:ss').format('Hmmss'), '183456');
+});
+
+test('k and kk', function (assert) {
+ assert.equal(moment('01:23:45', 'HH:mm:ss').format('k'), '1');
+ assert.equal(moment('12:34:56', 'HH:mm:ss').format('k'), '12');
+ assert.equal(moment('01:23:45', 'HH:mm:ss').format('kk'), '01');
+ assert.equal(moment('12:34:56', 'HH:mm:ss').format('kk'), '12');
+ assert.equal(moment('00:34:56', 'HH:mm:ss').format('kk'), '24');
+ assert.equal(moment('00:00:00', 'HH:mm:ss').format('kk'), '24');
+});
+
+test('Y token', function (assert) {
+ assert.equal(moment('2010-01-01', 'YYYY-MM-DD', true).format('Y'), '2010', 'format 2010 with Y');
+ assert.equal(moment('-123-01-01', 'Y-MM-DD', true).format('Y'), '-123', 'format -123 with Y');
+ assert.equal(moment('12345-01-01', 'Y-MM-DD', true).format('Y'), '+12345', 'format 12345 with Y');
+ assert.equal(moment('0-01-01', 'Y-MM-DD', true).format('Y'), '0', 'format 0 with Y');
+ assert.equal(moment('1-01-01', 'Y-MM-DD', true).format('Y'), '1', 'format 1 with Y');
+ assert.equal(moment('9999-01-01', 'Y-MM-DD', true).format('Y'), '9999', 'format 9999 with Y');
+ assert.equal(moment('10000-01-01', 'Y-MM-DD', true).format('Y'), '+10000', 'format 10000 with Y');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('from_to');
+
+test('from', function (assert) {
+ var start = moment();
+ moment.locale('en');
+ assert.equal(start.from(start.clone().add(5, 'seconds')), 'a few seconds ago', '5 seconds = a few seconds ago');
+ assert.equal(start.from(start.clone().add(1, 'minute')), 'a minute ago', '1 minute = a minute ago');
+ assert.equal(start.from(start.clone().add(5, 'minutes')), '5 minutes ago', '5 minutes = 5 minutes ago');
+
+ assert.equal(start.from(start.clone().subtract(5, 'seconds')), 'in a few seconds', '5 seconds = in a few seconds');
+ assert.equal(start.from(start.clone().subtract(1, 'minute')), 'in a minute', '1 minute = in a minute');
+ assert.equal(start.from(start.clone().subtract(5, 'minutes')), 'in 5 minutes', '5 minutes = in 5 minutes');
+});
+
+test('from with absolute duration', function (assert) {
+ var start = moment();
+ moment.locale('en');
+ assert.equal(start.from(start.clone().add(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds');
+ assert.equal(start.from(start.clone().add(1, 'minute'), true), 'a minute', '1 minute = a minute');
+ assert.equal(start.from(start.clone().add(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes');
+
+ assert.equal(start.from(start.clone().subtract(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds');
+ assert.equal(start.from(start.clone().subtract(1, 'minute'), true), 'a minute', '1 minute = a minute');
+ assert.equal(start.from(start.clone().subtract(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes');
+});
+
+test('to', function (assert) {
+ var start = moment();
+ moment.locale('en');
+ assert.equal(start.to(start.clone().subtract(5, 'seconds')), 'a few seconds ago', '5 seconds = a few seconds ago');
+ assert.equal(start.to(start.clone().subtract(1, 'minute')), 'a minute ago', '1 minute = a minute ago');
+ assert.equal(start.to(start.clone().subtract(5, 'minutes')), '5 minutes ago', '5 minutes = 5 minutes ago');
+
+ assert.equal(start.to(start.clone().add(5, 'seconds')), 'in a few seconds', '5 seconds = in a few seconds');
+ assert.equal(start.to(start.clone().add(1, 'minute')), 'in a minute', '1 minute = in a minute');
+ assert.equal(start.to(start.clone().add(5, 'minutes')), 'in 5 minutes', '5 minutes = in 5 minutes');
+});
+
+test('to with absolute duration', function (assert) {
+ var start = moment();
+ moment.locale('en');
+ assert.equal(start.to(start.clone().add(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds');
+ assert.equal(start.to(start.clone().add(1, 'minute'), true), 'a minute', '1 minute = a minute');
+ assert.equal(start.to(start.clone().add(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes');
+
+ assert.equal(start.to(start.clone().subtract(5, 'seconds'), true), 'a few seconds', '5 seconds = a few seconds');
+ assert.equal(start.to(start.clone().subtract(1, 'minute'), true), 'a minute', '1 minute = a minute');
+ assert.equal(start.to(start.clone().subtract(5, 'minutes'), true), '5 minutes', '5 minutes = 5 minutes');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('getters and setters');
+
+test('getters', function (assert) {
+ var a = moment([2011, 9, 12, 6, 7, 8, 9]);
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hours(), 6, 'hour');
+ assert.equal(a.minutes(), 7, 'minute');
+ assert.equal(a.seconds(), 8, 'second');
+ assert.equal(a.milliseconds(), 9, 'milliseconds');
+});
+
+test('getters programmatic', function (assert) {
+ var a = moment([2011, 9, 12, 6, 7, 8, 9]);
+ assert.equal(a.get('year'), 2011, 'year');
+ assert.equal(a.get('month'), 9, 'month');
+ assert.equal(a.get('date'), 12, 'date');
+ assert.equal(a.get('day'), 3, 'day');
+ assert.equal(a.get('hour'), 6, 'hour');
+ assert.equal(a.get('minute'), 7, 'minute');
+ assert.equal(a.get('second'), 8, 'second');
+ assert.equal(a.get('milliseconds'), 9, 'milliseconds');
+
+ //actual getters tested elsewhere
+ assert.equal(a.get('weekday'), a.weekday(), 'weekday');
+ assert.equal(a.get('isoWeekday'), a.isoWeekday(), 'isoWeekday');
+ assert.equal(a.get('week'), a.week(), 'week');
+ assert.equal(a.get('isoWeek'), a.isoWeek(), 'isoWeek');
+ assert.equal(a.get('dayOfYear'), a.dayOfYear(), 'dayOfYear');
+
+ //getter no longer sets values when passed an object
+ assert.equal(moment([2016,0,1]).get({year:2015}).year(), 2016, 'getter no longer sets values when passed an object');
+});
+
+test('setters plural', function (assert) {
+ var a = moment();
+ test.expectedDeprecations('years accessor', 'months accessor', 'dates accessor');
+
+ a.years(2011);
+ a.months(9);
+ a.dates(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(9);
+ assert.equal(a.years(), 2011, 'years');
+ assert.equal(a.months(), 9, 'months');
+ assert.equal(a.dates(), 12, 'dates');
+ assert.equal(a.days(), 3, 'days');
+ assert.equal(a.hours(), 6, 'hours');
+ assert.equal(a.minutes(), 7, 'minutes');
+ assert.equal(a.seconds(), 8, 'seconds');
+ assert.equal(a.milliseconds(), 9, 'milliseconds');
+});
+
+test('setters singular', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hour(6);
+ a.minute(7);
+ a.second(8);
+ a.millisecond(9);
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hour(), 6, 'hour');
+ assert.equal(a.minute(), 7, 'minute');
+ assert.equal(a.second(), 8, 'second');
+ assert.equal(a.millisecond(), 9, 'milliseconds');
+});
+
+test('setters', function (assert) {
+ var a = moment();
+ a.year(2011);
+ a.month(9);
+ a.date(12);
+ a.hours(6);
+ a.minutes(7);
+ a.seconds(8);
+ a.milliseconds(9);
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hours(), 6, 'hour');
+ assert.equal(a.minutes(), 7, 'minute');
+ assert.equal(a.seconds(), 8, 'second');
+ assert.equal(a.milliseconds(), 9, 'milliseconds');
+
+ // Test month() behavior. See https://github.com/timrwood/moment/pull/822
+ a = moment('20130531', 'YYYYMMDD');
+ a.month(3);
+ assert.equal(a.month(), 3, 'month edge case');
+});
+
+test('setter programmatic', function (assert) {
+ var a = moment();
+ a.set('year', 2011);
+ a.set('month', 9);
+ a.set('date', 12);
+ a.set('hours', 6);
+ a.set('minutes', 7);
+ a.set('seconds', 8);
+ a.set('milliseconds', 9);
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hours(), 6, 'hour');
+ assert.equal(a.minutes(), 7, 'minute');
+ assert.equal(a.seconds(), 8, 'second');
+ assert.equal(a.milliseconds(), 9, 'milliseconds');
+
+ // Test month() behavior. See https://github.com/timrwood/moment/pull/822
+ a = moment('20130531', 'YYYYMMDD');
+ a.month(3);
+ assert.equal(a.month(), 3, 'month edge case');
+});
+
+test('setters programatic with weeks', function (assert) {
+ var a = moment();
+ a.set('weekYear', 2001);
+ a.set('week', 49);
+ a.set('day', 4);
+
+ assert.equal(a.weekYear(), 2001, 'weekYear');
+ assert.equal(a.week(), 49, 'week');
+ assert.equal(a.day(), 4, 'day');
+
+ a.set('weekday', 1);
+ assert.equal(a.weekday(), 1, 'weekday');
+});
+
+test('setters programatic with weeks ISO', function (assert) {
+ var a = moment();
+ a.set('isoWeekYear', 2001);
+ a.set('isoWeek', 49);
+ a.set('isoWeekday', 4);
+
+ assert.equal(a.isoWeekYear(), 2001, 'isoWeekYear');
+ assert.equal(a.isoWeek(), 49, 'isoWeek');
+ assert.equal(a.isoWeekday(), 4, 'isoWeekday');
+});
+
+test('setters strings', function (assert) {
+ var a = moment([2012]).locale('en');
+ assert.equal(a.clone().day(0).day('Wednesday').day(), 3, 'day full name');
+ assert.equal(a.clone().day(0).day('Wed').day(), 3, 'day short name');
+ assert.equal(a.clone().day(0).day('We').day(), 3, 'day minimal name');
+ assert.equal(a.clone().day(0).day('invalid').day(), 0, 'invalid day name');
+ assert.equal(a.clone().month(0).month('April').month(), 3, 'month full name');
+ assert.equal(a.clone().month(0).month('Apr').month(), 3, 'month short name');
+ assert.equal(a.clone().month(0).month('invalid').month(), 0, 'invalid month name');
+});
+
+test('setters - falsey values', function (assert) {
+ var a = moment();
+ // ensure minutes wasn't coincidentally 0 already
+ a.minutes(1);
+ a.minutes(0);
+ assert.equal(a.minutes(), 0, 'falsey value');
+});
+
+test('chaining setters', function (assert) {
+ var a = moment();
+ a.year(2011)
+ .month(9)
+ .date(12)
+ .hours(6)
+ .minutes(7)
+ .seconds(8);
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hours(), 6, 'hour');
+ assert.equal(a.minutes(), 7, 'minute');
+ assert.equal(a.seconds(), 8, 'second');
+});
+
+test('setter with multiple unit values', function (assert) {
+ var a = moment();
+ a.set({
+ year: 2011,
+ month: 9,
+ date: 12,
+ hours: 6,
+ minutes: 7,
+ seconds: 8,
+ milliseconds: 9
+ });
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hours(), 6, 'hour');
+ assert.equal(a.minutes(), 7, 'minute');
+ assert.equal(a.seconds(), 8, 'second');
+ assert.equal(a.milliseconds(), 9, 'milliseconds');
+
+ var c = moment([2016,0,1]);
+ assert.equal(c.set({weekYear: 2016}).weekYear(), 2016, 'week year correctly sets with object syntax');
+ assert.equal(c.set({quarter: 3}).quarter(), 3, 'quarter sets correctly with object syntax');
+});
+
+test('day setter', function (assert) {
+ var a = moment([2011, 0, 15]);
+ assert.equal(moment(a).day(0).date(), 9, 'set from saturday to sunday');
+ assert.equal(moment(a).day(6).date(), 15, 'set from saturday to saturday');
+ assert.equal(moment(a).day(3).date(), 12, 'set from saturday to wednesday');
+
+ a = moment([2011, 0, 9]);
+ assert.equal(moment(a).day(0).date(), 9, 'set from sunday to sunday');
+ assert.equal(moment(a).day(6).date(), 15, 'set from sunday to saturday');
+ assert.equal(moment(a).day(3).date(), 12, 'set from sunday to wednesday');
+
+ a = moment([2011, 0, 12]);
+ assert.equal(moment(a).day(0).date(), 9, 'set from wednesday to sunday');
+ assert.equal(moment(a).day(6).date(), 15, 'set from wednesday to saturday');
+ assert.equal(moment(a).day(3).date(), 12, 'set from wednesday to wednesday');
+
+ assert.equal(moment(a).day(-7).date(), 2, 'set from wednesday to last sunday');
+ assert.equal(moment(a).day(-1).date(), 8, 'set from wednesday to last saturday');
+ assert.equal(moment(a).day(-4).date(), 5, 'set from wednesday to last wednesday');
+
+ assert.equal(moment(a).day(7).date(), 16, 'set from wednesday to next sunday');
+ assert.equal(moment(a).day(13).date(), 22, 'set from wednesday to next saturday');
+ assert.equal(moment(a).day(10).date(), 19, 'set from wednesday to next wednesday');
+
+ assert.equal(moment(a).day(14).date(), 23, 'set from wednesday to second next sunday');
+ assert.equal(moment(a).day(20).date(), 29, 'set from wednesday to second next saturday');
+ assert.equal(moment(a).day(17).date(), 26, 'set from wednesday to second next wednesday');
+});
+
+test('object set ordering', function (assert) {
+ var a = moment([2016,3,30]);
+ assert.equal(a.set({date:31, month:4}).date(), 31, 'setter order automatically arranged by size');
+ var b = moment([2015,1,28]);
+ assert.equal(b.set({date:29, year: 2016}).format('YYYY-MM-DD'), '2016-02-29', 'year is prioritized over date');
+ //check a nonexistent time in US isn't set
+ var c = moment([2016,2,13]);
+ c.set({
+ hour:2,
+ minutes:30,
+ date: 14
+ });
+ assert.equal(c.format('YYYY-MM-DDTHH:mm'), '2016-03-14T02:30', 'setting hours, minutes date puts date first allowing time set to work');
+});
+
+test('string setters', function (assert) {
+ var a = moment();
+ a.year('2011');
+ a.month('9');
+ a.date('12');
+ a.hours('6');
+ a.minutes('7');
+ a.seconds('8');
+ a.milliseconds('9');
+ assert.equal(a.year(), 2011, 'year');
+ assert.equal(a.month(), 9, 'month');
+ assert.equal(a.date(), 12, 'date');
+ assert.equal(a.day(), 3, 'day');
+ assert.equal(a.hours(), 6, 'hour');
+ assert.equal(a.minutes(), 7, 'minute');
+ assert.equal(a.seconds(), 8, 'second');
+ assert.equal(a.milliseconds(), 9, 'milliseconds');
+});
+
+test('setters across DST +1', function (assert) {
+ var oldUpdateOffset = moment.updateOffset,
+ // Based on a real story somewhere in America/Los_Angeles
+ dstAt = moment('2014-03-09T02:00:00-08:00').parseZone(),
+ m;
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.isBefore(dstAt)) {
+ mom.utcOffset(-8, keepTime);
+ } else {
+ mom.utcOffset(-7, keepTime);
+ }
+ };
+
+ m = moment('2014-03-15T00:00:00-07:00').parseZone();
+ m.year(2013);
+ assert.equal(m.format(), '2013-03-15T00:00:00-08:00', 'year across +1');
+
+ m = moment('2014-03-15T00:00:00-07:00').parseZone();
+ m.month(0);
+ assert.equal(m.format(), '2014-01-15T00:00:00-08:00', 'month across +1');
+
+ m = moment('2014-03-15T00:00:00-07:00').parseZone();
+ m.date(1);
+ assert.equal(m.format(), '2014-03-01T00:00:00-08:00', 'date across +1');
+
+ m = moment('2014-03-09T03:05:00-07:00').parseZone();
+ m.hour(0);
+ assert.equal(m.format(), '2014-03-09T00:05:00-08:00', 'hour across +1');
+
+ moment.updateOffset = oldUpdateOffset;
+});
+
+test('setters across DST -1', function (assert) {
+ var oldUpdateOffset = moment.updateOffset,
+ // Based on a real story somewhere in America/Los_Angeles
+ dstAt = moment('2014-11-02T02:00:00-07:00').parseZone(),
+ m;
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.isBefore(dstAt)) {
+ mom.utcOffset(-7, keepTime);
+ } else {
+ mom.utcOffset(-8, keepTime);
+ }
+ };
+
+ m = moment('2014-11-15T00:00:00-08:00').parseZone();
+ m.year(2013);
+ assert.equal(m.format(), '2013-11-15T00:00:00-07:00', 'year across -1');
+
+ m = moment('2014-11-15T00:00:00-08:00').parseZone();
+ m.month(0);
+ assert.equal(m.format(), '2014-01-15T00:00:00-07:00', 'month across -1');
+
+ m = moment('2014-11-15T00:00:00-08:00').parseZone();
+ m.date(1);
+ assert.equal(m.format(), '2014-11-01T00:00:00-07:00', 'date across -1');
+
+ m = moment('2014-11-02T03:30:00-08:00').parseZone();
+ m.hour(0);
+ assert.equal(m.format(), '2014-11-02T00:30:00-07:00', 'hour across -1');
+
+ moment.updateOffset = oldUpdateOffset;
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('instanceof');
+
+test('instanceof', function (assert) {
+ var mm = moment([2010, 0, 1]);
+
+ var extend = function (a, b) {
+ var i;
+ for (i in b) {
+ a[i] = b[i];
+ }
+ return a;
+ };
+
+ assert.equal(moment() instanceof moment, true, 'simple moment object');
+ assert.equal(extend({}, moment()) instanceof moment, false, 'extended moment object');
+ assert.equal(moment(null) instanceof moment, true, 'invalid moment object');
+
+ assert.equal(new Date() instanceof moment, false, 'date object is not moment object');
+ assert.equal(Object instanceof moment, false, 'Object is not moment object');
+ assert.equal('foo' instanceof moment, false, 'string is not moment object');
+ assert.equal(1 instanceof moment, false, 'number is not moment object');
+ assert.equal(NaN instanceof moment, false, 'NaN is not moment object');
+ assert.equal(null instanceof moment, false, 'null is not moment object');
+ assert.equal(undefined instanceof moment, false, 'undefined is not moment object');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('invalid');
+
+test('invalid', function (assert) {
+ var m = moment.invalid();
+ assert.equal(m.isValid(), false);
+ assert.equal(m.parsingFlags().userInvalidated, true);
+ assert.ok(isNaN(m.valueOf()));
+});
+
+test('invalid with existing flag', function (assert) {
+ var m = moment.invalid({invalidMonth : 'whatchamacallit'});
+ assert.equal(m.isValid(), false);
+ assert.equal(m.parsingFlags().userInvalidated, false);
+ assert.equal(m.parsingFlags().invalidMonth, 'whatchamacallit');
+ assert.ok(isNaN(m.valueOf()));
+});
+
+test('invalid with custom flag', function (assert) {
+ var m = moment.invalid({tooBusyWith : 'reiculating splines'});
+ assert.equal(m.isValid(), false);
+ assert.equal(m.parsingFlags().userInvalidated, false);
+ assert.equal(m.parsingFlags().tooBusyWith, 'reiculating splines');
+ assert.ok(isNaN(m.valueOf()));
+});
+
+test('invalid operations', function (assert) {
+ var invalids = [
+ moment.invalid(),
+ moment('xyz', 'l'),
+ moment('2015-01-35', 'YYYY-MM-DD'),
+ moment('2015-01-25 a', 'YYYY-MM-DD', true)
+ ],
+ i,
+ invalid,
+ valid = moment();
+
+ test.expectedDeprecations('moment().min', 'moment().max', 'isDSTShifted');
+
+ for (i = 0; i < invalids.length; ++i) {
+ invalid = invalids[i];
+
+ assert.ok(!invalid.clone().add(5, 'hours').isValid(), 'invalid.add is invalid');
+ assert.equal(invalid.calendar(), 'Invalid date', 'invalid.calendar is \'Invalid date\'');
+ assert.ok(!invalid.clone().isValid(), 'invalid.clone is invalid');
+ assert.ok(isNaN(invalid.diff(valid)), 'invalid.diff(valid) is NaN');
+ assert.ok(isNaN(valid.diff(invalid)), 'valid.diff(invalid) is NaN');
+ assert.ok(isNaN(invalid.diff(invalid)), 'invalid.diff(invalid) is NaN');
+ assert.ok(!invalid.clone().endOf('month').isValid(), 'invalid.endOf is invalid');
+ assert.equal(invalid.format(), 'Invalid date', 'invalid.format is \'Invalid date\'');
+ assert.equal(invalid.from(), 'Invalid date');
+ assert.equal(invalid.from(valid), 'Invalid date');
+ assert.equal(valid.from(invalid), 'Invalid date');
+ assert.equal(invalid.fromNow(), 'Invalid date');
+ assert.equal(invalid.to(), 'Invalid date');
+ assert.equal(invalid.to(valid), 'Invalid date');
+ assert.equal(valid.to(invalid), 'Invalid date');
+ assert.equal(invalid.toNow(), 'Invalid date');
+ assert.ok(isNaN(invalid.get('year')), 'invalid.get is NaN');
+ // TODO invalidAt
+ assert.ok(!invalid.isAfter(valid));
+ assert.ok(!valid.isAfter(invalid));
+ assert.ok(!invalid.isAfter(invalid));
+ assert.ok(!invalid.isBefore(valid));
+ assert.ok(!valid.isBefore(invalid));
+ assert.ok(!invalid.isBefore(invalid));
+ assert.ok(!invalid.isBetween(valid, valid));
+ assert.ok(!valid.isBetween(invalid, valid));
+ assert.ok(!valid.isBetween(valid, invalid));
+ assert.ok(!invalid.isSame(invalid));
+ assert.ok(!invalid.isSame(valid));
+ assert.ok(!valid.isSame(invalid));
+ assert.ok(!invalid.isValid());
+ assert.equal(invalid.locale(), 'en');
+ assert.equal(invalid.localeData()._abbr, 'en');
+ assert.ok(!invalid.clone().max(valid).isValid());
+ assert.ok(!valid.clone().max(invalid).isValid());
+ assert.ok(!invalid.clone().max(invalid).isValid());
+ assert.ok(!invalid.clone().min(valid).isValid());
+ assert.ok(!valid.clone().min(invalid).isValid());
+ assert.ok(!invalid.clone().min(invalid).isValid());
+ assert.ok(!moment.min(invalid, valid).isValid());
+ assert.ok(!moment.min(valid, invalid).isValid());
+ assert.ok(!moment.max(invalid, valid).isValid());
+ assert.ok(!moment.max(valid, invalid).isValid());
+ assert.ok(!invalid.clone().set('year', 2005).isValid());
+ assert.ok(!invalid.clone().startOf('month').isValid());
+
+ assert.ok(!invalid.clone().subtract(5, 'days').isValid());
+ assert.deepEqual(invalid.toArray(), [NaN, NaN, NaN, NaN, NaN, NaN, NaN]);
+ assert.deepEqual(invalid.toObject(), {
+ years: NaN,
+ months: NaN,
+ date: NaN,
+ hours: NaN,
+ minutes: NaN,
+ seconds: NaN,
+ milliseconds: NaN
+ });
+ assert.ok(moment.isDate(invalid.toDate()));
+ assert.ok(isNaN(invalid.toDate().valueOf()));
+ assert.equal(invalid.toJSON(), null);
+ assert.equal(invalid.toString(), 'Invalid date');
+ assert.ok(isNaN(invalid.unix()));
+ assert.ok(isNaN(invalid.valueOf()));
+
+ assert.ok(isNaN(invalid.year()));
+ assert.ok(isNaN(invalid.weekYear()));
+ assert.ok(isNaN(invalid.isoWeekYear()));
+ assert.ok(isNaN(invalid.quarter()));
+ assert.ok(isNaN(invalid.quarters()));
+ assert.ok(isNaN(invalid.month()));
+ assert.ok(isNaN(invalid.daysInMonth()));
+ assert.ok(isNaN(invalid.week()));
+ assert.ok(isNaN(invalid.weeks()));
+ assert.ok(isNaN(invalid.isoWeek()));
+ assert.ok(isNaN(invalid.isoWeeks()));
+ assert.ok(isNaN(invalid.weeksInYear()));
+ assert.ok(isNaN(invalid.isoWeeksInYear()));
+ assert.ok(isNaN(invalid.date()));
+ assert.ok(isNaN(invalid.day()));
+ assert.ok(isNaN(invalid.days()));
+ assert.ok(isNaN(invalid.weekday()));
+ assert.ok(isNaN(invalid.isoWeekday()));
+ assert.ok(isNaN(invalid.dayOfYear()));
+ assert.ok(isNaN(invalid.hour()));
+ assert.ok(isNaN(invalid.hours()));
+ assert.ok(isNaN(invalid.minute()));
+ assert.ok(isNaN(invalid.minutes()));
+ assert.ok(isNaN(invalid.second()));
+ assert.ok(isNaN(invalid.seconds()));
+ assert.ok(isNaN(invalid.millisecond()));
+ assert.ok(isNaN(invalid.milliseconds()));
+ assert.ok(isNaN(invalid.utcOffset()));
+
+ assert.ok(!invalid.clone().year(2001).isValid());
+ assert.ok(!invalid.clone().weekYear(2001).isValid());
+ assert.ok(!invalid.clone().isoWeekYear(2001).isValid());
+ assert.ok(!invalid.clone().quarter(1).isValid());
+ assert.ok(!invalid.clone().quarters(1).isValid());
+ assert.ok(!invalid.clone().month(1).isValid());
+ assert.ok(!invalid.clone().week(1).isValid());
+ assert.ok(!invalid.clone().weeks(1).isValid());
+ assert.ok(!invalid.clone().isoWeek(1).isValid());
+ assert.ok(!invalid.clone().isoWeeks(1).isValid());
+ assert.ok(!invalid.clone().date(1).isValid());
+ assert.ok(!invalid.clone().day(1).isValid());
+ assert.ok(!invalid.clone().days(1).isValid());
+ assert.ok(!invalid.clone().weekday(1).isValid());
+ assert.ok(!invalid.clone().isoWeekday(1).isValid());
+ assert.ok(!invalid.clone().dayOfYear(1).isValid());
+ assert.ok(!invalid.clone().hour(1).isValid());
+ assert.ok(!invalid.clone().hours(1).isValid());
+ assert.ok(!invalid.clone().minute(1).isValid());
+ assert.ok(!invalid.clone().minutes(1).isValid());
+ assert.ok(!invalid.clone().second(1).isValid());
+ assert.ok(!invalid.clone().seconds(1).isValid());
+ assert.ok(!invalid.clone().millisecond(1).isValid());
+ assert.ok(!invalid.clone().milliseconds(1).isValid());
+ assert.ok(!invalid.clone().utcOffset(1).isValid());
+
+ assert.ok(!invalid.clone().utc().isValid());
+ assert.ok(!invalid.clone().local().isValid());
+ assert.ok(!invalid.clone().parseZone('05:30').isValid());
+ assert.ok(!invalid.hasAlignedHourOffset());
+ assert.ok(!invalid.isDST());
+ assert.ok(!invalid.isDSTShifted());
+ assert.ok(!invalid.isLocal());
+ assert.ok(!invalid.isUtcOffset());
+ assert.ok(!invalid.isUtc());
+ assert.ok(!invalid.isUTC());
+
+ assert.ok(!invalid.isLeapYear());
+
+ assert.equal(moment.duration({from: invalid, to: valid}).asMilliseconds(), 0);
+ assert.equal(moment.duration({from: valid, to: invalid}).asMilliseconds(), 0);
+ assert.equal(moment.duration({from: invalid, to: invalid}).asMilliseconds(), 0);
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is after');
+
+test('is after without units', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, 'day is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), true, 'day is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, 'hour is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), true, 'hour is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, 'minute is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), true, 'minute is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, 'second is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), true, 'second is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'millisecond match');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, 'millisecond is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), true, 'millisecond is earlier');
+ assert.equal(m.isAfter(m), false, 'moments are not after themselves');
+ assert.equal(+m, +mCopy, 'isAfter second should not change moment');
+});
+
+test('is after year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year match');
+ assert.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, 'exact start of year');
+ assert.equal(m.isAfter(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, 'exact end of year');
+ assert.equal(m.isAfter(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, 'start of next year');
+ assert.equal(m.isAfter(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), true, 'end of previous year');
+ assert.equal(m.isAfter(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), true, 'end of year far before');
+ assert.equal(m.isAfter(m, 'year'), false, 'same moments are not after the same year');
+ assert.equal(+m, +mCopy, 'isAfter year should not change moment');
+});
+
+test('is after month', function (assert) {
+ var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, 'month match');
+ assert.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, 'exact start of month');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, 'exact end of month');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, 'start of next month');
+ assert.equal(m.isAfter(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), true, 'end of previous month');
+ assert.equal(m.isAfter(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), true, 'later month but earlier year');
+ assert.equal(m.isAfter(m, 'month'), false, 'same moments are not after the same month');
+ assert.equal(+m, +mCopy, 'isAfter month should not change moment');
+});
+
+test('is after day', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, 'day match');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), false, 'day is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), true, 'day is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, 'exact start of day');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, 'exact end of day');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), false, 'start of next day');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), true, 'end of previous day');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), true, 'later day but earlier year');
+ assert.equal(m.isAfter(m, 'day'), false, 'same moments are not after the same day');
+ assert.equal(+m, +mCopy, 'isAfter day should not change moment');
+});
+
+test('is after hour', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour match');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), false, 'day is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), true, 'day is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), false, 'hour is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, 'exact start of hour');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, 'exact end of hour');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), false, 'start of next hour');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), true, 'end of previous hour');
+ assert.equal(m.isAfter(m, 'hour'), false, 'same moments are not after the same hour');
+ assert.equal(+m, +mCopy, 'isAfter hour should not change moment');
+});
+
+test('is after minute', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'minute match');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), false, 'day is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), true, 'day is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), false, 'hour is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), true, 'hour is earler');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), false, 'minute is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), true, 'minute is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, 'exact start of minute');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, 'exact end of minute');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), false, 'start of next minute');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), true, 'end of previous minute');
+ assert.equal(m.isAfter(m, 'minute'), false, 'same moments are not after the same minute');
+ assert.equal(+m, +mCopy, 'isAfter minute should not change moment');
+});
+
+test('is after second', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, 'second match');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), false, 'day is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), true, 'day is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), false, 'hour is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), true, 'hour is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), false, 'minute is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), true, 'minute is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), false, 'second is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), true, 'second is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, 'exact start of second');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, 'exact end of second');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), false, 'start of next second');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), true, 'end of previous second');
+ assert.equal(m.isAfter(m, 'second'), false, 'same moments are not after the same second');
+ assert.equal(+m, +mCopy, 'isAfter second should not change moment');
+});
+
+test('is after millisecond', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'millisecond match');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work');
+ assert.equal(m.isAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is later');
+ assert.equal(m.isAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, 'day is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), true, 'day is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, 'hour is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), true, 'hour is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, 'minute is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), true, 'minute is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, 'second is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), true, 'second is earlier');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, 'millisecond is later');
+ assert.equal(m.isAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), true, 'millisecond is earlier');
+ assert.equal(m.isAfter(m, 'millisecond'), false, 'same moments are not after the same millisecond');
+ assert.equal(+m, +mCopy, 'isAfter millisecond should not change moment');
+});
+
+test('is after invalid', function (assert) {
+ var m = moment(), invalid = moment.invalid();
+ assert.equal(m.isAfter(invalid), false, 'valid moment is not after invalid moment');
+ assert.equal(invalid.isAfter(m), false, 'invalid moment is not after valid moment');
+ assert.equal(m.isAfter(invalid, 'year'), false, 'invalid moment year');
+ assert.equal(m.isAfter(invalid, 'month'), false, 'invalid moment month');
+ assert.equal(m.isAfter(invalid, 'day'), false, 'invalid moment day');
+ assert.equal(m.isAfter(invalid, 'hour'), false, 'invalid moment hour');
+ assert.equal(m.isAfter(invalid, 'minute'), false, 'invalid moment minute');
+ assert.equal(m.isAfter(invalid, 'second'), false, 'invalid moment second');
+ assert.equal(m.isAfter(invalid, 'milliseconds'), false, 'invalid moment milliseconds');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function isArray(input) {
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+}
+
+test('isArray recognizes Array objects', function (assert) {
+ assert.ok(isArray([1,2,3]), 'array args');
+ assert.ok(isArray([]), 'empty array');
+ assert.ok(isArray(new Array(1,2,3)), 'array constructor');
+});
+
+test('isArray rejects non-Array objects', function (assert) {
+ assert.ok(!isArray(), 'nothing');
+ assert.ok(!isArray(undefined), 'undefined');
+ assert.ok(!isArray(null), 'null');
+ assert.ok(!isArray(123), 'number');
+ assert.ok(!isArray('[1,2,3]'), 'string');
+ assert.ok(!isArray(new Date()), 'date');
+ assert.ok(!isArray({a:1,b:2}), 'object');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is before');
+
+test('is after without units', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, 'day is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, 'day is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, 'hour is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, 'hour is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, 'minute is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, 'minute is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, 'second is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, 'second is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'millisecond match');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, 'millisecond is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, 'millisecond is earlier');
+ assert.equal(m.isBefore(m), false, 'moments are not before themselves');
+ assert.equal(+m, +mCopy, 'isBefore second should not change moment');
+});
+
+test('is before year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year match');
+ assert.equal(m.isBefore(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), false, 'exact start of year');
+ assert.equal(m.isBefore(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), false, 'exact end of year');
+ assert.equal(m.isBefore(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), true, 'start of next year');
+ assert.equal(m.isBefore(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of previous year');
+ assert.equal(m.isBefore(moment(new Date(1980, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of year far before');
+ assert.equal(m.isBefore(m, 'year'), false, 'same moments are not before the same year');
+ assert.equal(+m, +mCopy, 'isBefore year should not change moment');
+});
+
+test('is before month', function (assert) {
+ var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, 'month match');
+ assert.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), false, 'exact start of month');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), false, 'exact end of month');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), true, 'start of next month');
+ assert.equal(m.isBefore(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, 'end of previous month');
+ assert.equal(m.isBefore(moment(new Date(2010, 12, 31, 23, 59, 59, 999)), 'month'), false, 'later month but earlier year');
+ assert.equal(m.isBefore(m, 'month'), false, 'same moments are not before the same month');
+ assert.equal(+m, +mCopy, 'isBefore month should not change moment');
+});
+
+test('is before day', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 7, 8, 9, 10)), 'day'), false, 'day match');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 7, 8, 9, 10)), 'day'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 7, 8, 9, 10)), 'day'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 7, 8, 9, 10)), 'day'), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 7, 8, 9, 10)), 'day'), true, 'day is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 7, 8, 9, 10)), 'day'), false, 'day is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 0, 0, 0, 0)), 'day'), false, 'exact start of day');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 23, 59, 59, 999)), 'day'), false, 'exact end of day');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 0, 0, 0, 0)), 'day'), true, 'start of next day');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 23, 59, 59, 999)), 'day'), false, 'end of previous day');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 10, 0, 0, 0, 0)), 'day'), false, 'later day but earlier year');
+ assert.equal(m.isBefore(m, 'day'), false, 'same moments are not before the same day');
+ assert.equal(+m, +mCopy, 'isBefore day should not change moment');
+});
+
+test('is before hour', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour match');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 8, 9, 10)), 'hour'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 8, 9, 10)), 'hour'), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 8, 9, 10)), 'hour'), true, 'day is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 8, 9, 10)), 'hour'), false, 'day is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 8, 9, 10)), 'hour'), true, 'hour is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 8, 9, 10)), 'hour'), false, 'hour is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 0, 0, 0)), 'hour'), false, 'exact start of hour');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 59, 59, 999)), 'hour'), false, 'exact end of hour');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 0, 0, 0)), 'hour'), true, 'start of next hour');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 59, 59, 999)), 'hour'), false, 'end of previous hour');
+ assert.equal(m.isBefore(m, 'hour'), false, 'same moments are not before the same hour');
+ assert.equal(+m, +mCopy, 'isBefore hour should not change moment');
+});
+
+test('is before minute', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'minute match');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 9, 10)), 'minute'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 9, 10)), 'minute'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 9, 10)), 'minute'), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 9, 10)), 'minute'), true, 'day is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 3, 4, 9, 10)), 'minute'), false, 'day is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 9, 10)), 'minute'), true, 'hour is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 2, 4, 9, 10)), 'minute'), false, 'hour is earler');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 9, 10)), 'minute'), true, 'minute is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 9, 10)), 'minute'), false, 'minute is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 0, 0)), 'minute'), false, 'exact start of minute');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 59, 999)), 'minute'), false, 'exact end of minute');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 0, 0)), 'minute'), true, 'start of next minute');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 59, 999)), 'minute'), false, 'end of previous minute');
+ assert.equal(m.isBefore(m, 'minute'), false, 'same moments are not before the same minute');
+ assert.equal(+m, +mCopy, 'isBefore minute should not change moment');
+});
+
+test('is before second', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'second'), false, 'second match');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'second'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'second'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'second'), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'second'), true, 'day is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'second'), false, 'day is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'second'), true, 'hour is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'second'), false, 'hour is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'second'), true, 'minute is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'second'), false, 'minute is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'second'), true, 'second is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'second'), false, 'second is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 0)), 'second'), false, 'exact start of second');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 999)), 'second'), false, 'exact end of second');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 0)), 'second'), true, 'start of next second');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 999)), 'second'), false, 'end of previous second');
+ assert.equal(m.isBefore(m, 'second'), false, 'same moments are not before the same second');
+ assert.equal(+m, +mCopy, 'isBefore second should not change moment');
+});
+
+test('is before millisecond', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'millisecond match');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds'), false, 'plural should work');
+ assert.equal(m.isBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is later');
+ assert.equal(m.isBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), true, 'day is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, 'day is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), true, 'hour is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, 'hour is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), true, 'minute is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, 'minute is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), true, 'second is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, 'second is earlier');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), true, 'millisecond is later');
+ assert.equal(m.isBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, 'millisecond is earlier');
+ assert.equal(m.isBefore(m, 'millisecond'), false, 'same moments are not before the same millisecond');
+ assert.equal(+m, +mCopy, 'isBefore millisecond should not change moment');
+});
+
+test('is before invalid', function (assert) {
+ var m = moment(), invalid = moment.invalid();
+ assert.equal(m.isBefore(invalid), false, 'valid moment is not before invalid moment');
+ assert.equal(invalid.isBefore(m), false, 'invalid moment is not before valid moment');
+ assert.equal(m.isBefore(invalid, 'year'), false, 'invalid moment year');
+ assert.equal(m.isBefore(invalid, 'month'), false, 'invalid moment month');
+ assert.equal(m.isBefore(invalid, 'day'), false, 'invalid moment day');
+ assert.equal(m.isBefore(invalid, 'hour'), false, 'invalid moment hour');
+ assert.equal(m.isBefore(invalid, 'minute'), false, 'invalid moment minute');
+ assert.equal(m.isBefore(invalid, 'second'), false, 'invalid moment second');
+ assert.equal(m.isBefore(invalid, 'milliseconds'), false, 'invalid moment milliseconds');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is between');
+
+test('is between without units', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'year is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2013, 3, 2, 3, 4, 5, 10))), false, 'year is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10))), true, 'year is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'month is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 5, 2, 3, 4, 5, 10))), false, 'month is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 2, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, 'month is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 1, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'day is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 4, 3, 4, 5, 10))), false, 'day is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 1, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, 'day is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 1, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'hour is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 5, 4, 5, 10))), false, 'hour is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 2, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, 'hour is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 6, 5, 10))), false, 'minute is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 2, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'minute is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 3, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, 'minute is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 7, 10))), false, 'second is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 3, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'second is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 4, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, 'second is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 12))), false, 'millisecond is later');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 8)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10))), false, 'millisecond is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 9)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, 'millisecond is between');
+ assert.equal(m.isBetween(m, m), false, 'moments are not between themselves');
+ assert.equal(+m, +mCopy, 'isBetween second should not change moment');
+});
+
+test('is between without units inclusivity', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, start is equal to moment');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, end is equal to moment');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '()'), true, 'start and end are excluded, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '()'), false, 'start and end are excluded, should fail on same start/end date.');
+
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '(]'), false, 'start is excluded and end is included should fail on same start date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '(]'), true, 'start is excluded and end is included should succeed on end date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '(]'), true, 'start is excluded and end is included, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '(]'), false, 'start is excluded and end is included, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '(]'), false, 'start is excluded and end is included, should fail on same start/end date.');
+
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[)'), true, 'start is included and end is excluded should succeed on same start date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[)'), false, 'start is included and end is excluded should fail on same end date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[)'), true, 'start is included and end is excluded, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '[)'), false, 'start is included and end is excluded, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[)'), false, 'start is included and end is excluded, should fail on same end and start date');
+
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive should succeed on same start date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive should succeed on same end date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), null, '[]'), false, 'start and end inclusive, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), null, '[]'), true, 'start and end inclusive, should handle same end and start date');
+});
+
+test('is between milliseconds inclusivity', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'options, no inclusive');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, start is equal to moment');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, end is equal to moment');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), true, 'start and end are excluded, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '()'), false, 'start and end are excluded, should fail on same start/end date.');
+
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), false, 'start is excluded and end is included should fail on same start date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), true, 'start is excluded and end is included should succeed on end date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), true, 'start is excluded and end is included, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), false, 'start is excluded and end is included, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '(]'), false, 'start is excluded and end is included, should fail on same start/end date.');
+
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), true, 'start is included and end is excluded should succeed on same start date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), false, 'start is included and end is excluded should fail on same end date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), true, 'start is included and end is excluded, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), false, 'start is included and end is excluded, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[)'), false, 'start is included and end is excluded, should fail on same end and start date');
+
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive should succeed on same start date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive should succeed on same end date');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive, is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2009, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), false, 'start and end inclusive, is not between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds', '[]'), true, 'start and end inclusive, should handle same end and start date');
+});
+
+test('is between year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 5, 6, 7, 8, 9, 10)),
+ moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year match');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 5, 6, 7, 8, 9, 10)),
+ moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 5, 6, 7, 8, 9, 10)),
+ moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 5, 6, 7, 8, 9, 10)),
+ moment(new Date(2013, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2010, 5, 6, 7, 8, 9, 10)),
+ moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is later');
+ assert.equal(m.isBetween(m, 'year'), false, 'same moments are not between the same year');
+ assert.equal(+m, +mCopy, 'isBetween year should not change moment');
+});
+
+test('is between month', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 6, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month match');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 0, 6, 7, 8, 9, 10)),
+ moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 0, 31, 23, 59, 59, 999)),
+ moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'month is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 6, 7, 8, 9, 10)),
+ moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), false, 'month is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 11, 6, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month is later');
+ assert.equal(m.isBetween(m, 'month'), false, 'same moments are not between the same month');
+ assert.equal(+m, +mCopy, 'isBetween month should not change moment');
+});
+
+test('is between day', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), false, 'day match');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 1, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'days'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 1, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), true, 'day is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 4, 7, 8, 9, 10)), 'day'), false, 'day is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 1, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), false, 'day is later');
+ assert.equal(m.isBetween(m, 'day'), false, 'same moments are not between the same day');
+ assert.equal(+m, +mCopy, 'isBetween day should not change moment');
+});
+
+test('is between hour', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 5, 9, 10)),
+ moment(new Date(2011, 1, 2, 3, 9, 9, 10)), 'hour'), false, 'hour match');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 1, 59, 59, 999)),
+ moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hours'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 2, 59, 59, 999)),
+ moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), true, 'hour is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'hour'), false, 'hour is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)),
+ moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'hour'), false, 'hour is later');
+ assert.equal(m.isBetween(m, 'hour'), false, 'same moments are not between the same hour');
+ assert.equal(+m, +mCopy, 'isBetween hour should not change moment');
+});
+
+test('is between minute', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 9, 10)),
+ moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'minute match');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 3, 9, 10)),
+ moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minutes'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 3, 59, 999)),
+ moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), true, 'minute is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 5, 0, 0)),
+ moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'minute'), false, 'minute is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 2, 9, 10)),
+ moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, 'minute is later');
+ assert.equal(m.isBetween(m, 'minute'), false, 'same moments are not between the same minute');
+ assert.equal(+m, +mCopy, 'isBetween minute should not change moment');
+});
+
+test('is between second', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 10)),
+ moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), false, 'second match');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 4, 10)),
+ moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'seconds'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 4, 999)),
+ moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), true, 'second is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 6, 0)),
+ moment(new Date(2011, 1, 2, 3, 4, 7, 10)), 'second'), false, 'second is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 3, 10)),
+ moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, 'second is later');
+ assert.equal(m.isBetween(m, 'second'), false, 'same moments are not between the same second');
+ assert.equal(+m, +mCopy, 'isBetween second should not change moment');
+});
+
+test('is between millisecond', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 6)),
+ moment(new Date(2011, 1, 2, 3, 4, 5, 6)), 'millisecond'), false, 'millisecond match');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 5)),
+ moment(new Date(2011, 1, 2, 3, 4, 5, 7)), 'milliseconds'), true, 'plural should work');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 5)),
+ moment(new Date(2011, 1, 2, 3, 4, 5, 7)), 'millisecond'), true, 'millisecond is between');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 7)),
+ moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'millisecond'), false, 'millisecond is earlier');
+ assert.equal(m.isBetween(
+ moment(new Date(2011, 1, 2, 3, 4, 5, 4)),
+ moment(new Date(2011, 1, 2, 3, 4, 5, 6)), 'millisecond'), false, 'millisecond is later');
+ assert.equal(m.isBetween(m, 'millisecond'), false, 'same moments are not between the same millisecond');
+ assert.equal(+m, +mCopy, 'isBetween millisecond should not change moment');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is date');
+
+test('isDate recognizes Date objects', function (assert) {
+ assert.ok(moment.isDate(new Date()), 'no args (now)');
+ assert.ok(moment.isDate(new Date([2014, 2, 15])), 'array args');
+ assert.ok(moment.isDate(new Date('2014-03-15')), 'string args');
+ assert.ok(moment.isDate(new Date('does NOT look like a date')), 'invalid date');
+});
+
+test('isDate rejects non-Date objects', function (assert) {
+ assert.ok(!moment.isDate(), 'nothing');
+ assert.ok(!moment.isDate(undefined), 'undefined');
+ assert.ok(!moment.isDate(null), 'string args');
+ assert.ok(!moment.isDate(42), 'number');
+ assert.ok(!moment.isDate('2014-03-15'), 'string');
+ assert.ok(!moment.isDate([2014, 2, 15]), 'array');
+ assert.ok(!moment.isDate({year: 2014, month: 2, day: 15}), 'object');
+ assert.ok(!moment.isDate({
+ toString: function () {
+ return '[object Date]';
+ }
+ }), 'lying object');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is moment');
+
+test('is moment object', function (assert) {
+ var MyObj = function () {},
+ extend = function (a, b) {
+ var i;
+ for (i in b) {
+ a[i] = b[i];
+ }
+ return a;
+ };
+ MyObj.prototype.toDate = function () {
+ return new Date();
+ };
+
+ assert.ok(moment.isMoment(moment()), 'simple moment object');
+ assert.ok(moment.isMoment(moment(null)), 'invalid moment object');
+ assert.ok(moment.isMoment(extend({}, moment())), 'externally cloned moments are moments');
+ assert.ok(moment.isMoment(extend({}, moment.utc())), 'externally cloned utc moments are moments');
+
+ assert.ok(!moment.isMoment(new MyObj()), 'myObj is not moment object');
+ assert.ok(!moment.isMoment(moment), 'moment function is not moment object');
+ assert.ok(!moment.isMoment(new Date()), 'date object is not moment object');
+ assert.ok(!moment.isMoment(Object), 'Object is not moment object');
+ assert.ok(!moment.isMoment('foo'), 'string is not moment object');
+ assert.ok(!moment.isMoment(1), 'number is not moment object');
+ assert.ok(!moment.isMoment(NaN), 'NaN is not moment object');
+ assert.ok(!moment.isMoment(null), 'null is not moment object');
+ assert.ok(!moment.isMoment(undefined), 'undefined is not moment object');
+});
+
+test('is moment with hacked hasOwnProperty', function (assert) {
+ var obj = {};
+ // HACK to suppress jshint warning about bad property name
+ obj['hasOwnMoney'.replace('Money', 'Property')] = function () {
+ return true;
+ };
+
+ assert.ok(!moment.isMoment(obj), 'isMoment works even if passed object has a wrong hasOwnProperty implementation (ie8)');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function isNumber(input) {
+ return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+}
+
+test('isNumber recognizes numbers', function (assert) {
+ assert.ok(isNumber(1), 'simple integer');
+ assert.ok(isNumber(0), 'simple number');
+ assert.ok(isNumber(-0), 'silly number');
+ assert.ok(isNumber(1010010293029), 'large number');
+ assert.ok(isNumber(Infinity), 'largest number');
+ assert.ok(isNumber(-Infinity), 'smallest number');
+ assert.ok(isNumber(NaN), 'not number');
+ assert.ok(isNumber(1.100393830000), 'decimal numbers');
+ assert.ok(isNumber(Math.LN2), 'natural log of two');
+ assert.ok(isNumber(Math.PI), 'delicious number');
+ assert.ok(isNumber(5e10), 'scientifically notated number');
+ assert.ok(isNumber(new Number(1)), 'number primitive wrapped in an object'); // jshint ignore:line
+});
+
+test('isNumber rejects non-numbers', function (assert) {
+ assert.ok(!isNumber(), 'nothing');
+ assert.ok(!isNumber(undefined), 'undefined');
+ assert.ok(!isNumber(null), 'null');
+ assert.ok(!isNumber([1]), 'array');
+ assert.ok(!isNumber('[1,2,3]'), 'string');
+ assert.ok(!isNumber(new Date()), 'date');
+ assert.ok(!isNumber({a:1,b:2}), 'object');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is same');
+
+test('is same without units', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, 'year is later');
+ assert.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, 'year is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, 'month is later');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, 'month is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, 'day is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, 'day is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, 'hour is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, 'hour is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, 'minute is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, 'minute is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, 'second is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, 'second is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, 'millisecond match');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, 'millisecond is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, 'millisecond is earlier');
+ assert.equal(m.isSame(m), true, 'moments are the same as themselves');
+ assert.equal(+m, +mCopy, 'isSame second should not change moment');
+});
+
+test('is same year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year match');
+ assert.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, 'exact start of year');
+ assert.equal(m.isSame(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, 'exact end of year');
+ assert.equal(m.isSame(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, 'start of next year');
+ assert.equal(m.isSame(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of previous year');
+ assert.equal(m.isSame(m, 'year'), true, 'same moments are in the same year');
+ assert.equal(+m, +mCopy, 'isSame year should not change moment');
+});
+
+test('is same month', function (assert) {
+ var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, 'month match');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, 'month mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'exact start of month');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, 'exact end of month');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, 'start of next month');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, 'end of previous month');
+ assert.equal(m.isSame(m, 'month'), true, 'same moments are in the same month');
+ assert.equal(+m, +mCopy, 'isSame month should not change moment');
+});
+
+test('is same day', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, 'day match');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), false, 'year mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, 'month mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), false, 'day mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, 'exact start of day');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, 'exact end of day');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), false, 'start of next day');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), false, 'end of previous day');
+ assert.equal(m.isSame(m, 'day'), true, 'same moments are in the same day');
+ assert.equal(+m, +mCopy, 'isSame day should not change moment');
+});
+
+test('is same hour', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'hour match');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'year mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), false, 'month mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), false, 'day mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), false, 'hour mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, 'exact start of hour');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, 'exact end of hour');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), false, 'start of next hour');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), false, 'end of previous hour');
+ assert.equal(m.isSame(m, 'hour'), true, 'same moments are in the same hour');
+ assert.equal(+m, +mCopy, 'isSame hour should not change moment');
+});
+
+test('is same minute', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'minute match');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'year mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, 'month mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), false, 'day mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), false, 'hour mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), false, 'minute mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, 'exact start of minute');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, 'exact end of minute');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), false, 'start of next minute');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, 'end of previous minute');
+ assert.equal(m.isSame(m, 'minute'), true, 'same moments are in the same minute');
+ assert.equal(+m, +mCopy, 'isSame minute should not change moment');
+});
+
+test('is same second', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, 'second match');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), false, 'year mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, 'month mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), false, 'day mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), false, 'hour mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), false, 'minute mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), false, 'second mismatch');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, 'exact start of second');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, 'exact end of second');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), false, 'start of next second');
+ assert.equal(m.isSame(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, 'end of previous second');
+ assert.equal(m.isSame(m, 'second'), true, 'same moments are in the same second');
+ assert.equal(+m, +mCopy, 'isSame second should not change moment');
+});
+
+test('is same millisecond', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'millisecond match');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work');
+ assert.equal(m.isSame(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is later');
+ assert.equal(m.isSame(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is later');
+ assert.equal(m.isSame(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, 'day is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, 'day is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, 'hour is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, 'hour is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, 'minute is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, 'minute is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, 'second is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, 'second is earlier');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, 'millisecond is later');
+ assert.equal(m.isSame(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, 'millisecond is earlier');
+ assert.equal(m.isSame(m, 'millisecond'), true, 'same moments are in the same millisecond');
+ assert.equal(+m, +mCopy, 'isSame millisecond should not change moment');
+});
+
+test('is same with utc offset moments', function (assert) {
+ assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSame(moment('2013-02-01'), 'year'), 'zoned vs local moment');
+ assert.ok(moment('2013-02-01').isSame(moment('2013-02-01').utcOffset('-05:00'), 'year'), 'local vs zoned moment');
+ assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSame(moment.parseZone('2013-02-01T00:00:00-06:30'), 'year'),
+ 'zoned vs (differently) zoned moment');
+});
+
+test('is same with invalid moments', function (assert) {
+ assert.equal(moment.invalid().isSame(moment.invalid()), false, 'invalid moments are not considered equal');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is same or after');
+
+test('is same or after without units', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), false, 'day is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), true, 'day is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), false, 'hour is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), true, 'hour is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), false, 'minute is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), true, 'minute is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), false, 'second is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), true, 'second is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, 'millisecond match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), false, 'millisecond is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), true, 'millisecond is earlier');
+ assert.equal(m.isSameOrAfter(m), true, 'moments are the same as themselves');
+ assert.equal(+m, +mCopy, 'isSameOrAfter second should not change moment');
+});
+
+test('is same or after year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, 'exact start of year');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, 'exact end of year');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), false, 'start of next year');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), true, 'end of previous year');
+ assert.equal(m.isSameOrAfter(m, 'year'), true, 'same moments are in the same year');
+ assert.equal(+m, +mCopy, 'isSameOrAfter year should not change moment');
+});
+
+test('is same or after month', function (assert) {
+ var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, 'month match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'exact start of month');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, 'exact end of month');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), false, 'start of next month');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), true, 'end of previous month');
+ assert.equal(m.isSameOrAfter(m, 'month'), true, 'same moments are in the same month');
+ assert.equal(+m, +mCopy, 'isSameOrAfter month should not change moment');
+});
+
+test('is same or after day', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, 'day match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 7, 8, 9, 10)), 'day'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 7, 8, 9, 10)), 'day'), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), false, 'day is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 7, 8, 9, 10)), 'day'), true, 'day is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, 'exact start of day');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, 'exact end of day');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), false, 'start of next day');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), true, 'end of previous day');
+ assert.equal(m.isSameOrAfter(m, 'day'), true, 'same moments are in the same day');
+ assert.equal(+m, +mCopy, 'isSameOrAfter day should not change moment');
+});
+
+test('is same or after hour', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'hour match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 3, 8, 9, 10)), 'hour'), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), false, 'day is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 3, 8, 9, 10)), 'hour'), true, 'day is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), false, 'hour is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 8, 9, 10)), 'hour'), true, 'hour is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, 'exact start of hour');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, 'exact end of hour');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), false, 'start of next hour');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), true, 'end of previous hour');
+ assert.equal(m.isSameOrAfter(m, 'hour'), true, 'same moments are in the same hour');
+ assert.equal(+m, +mCopy, 'isSameOrAfter hour should not change moment');
+});
+
+test('is same or after minute', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'minute match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 3, 4, 9, 10)), 'minute'), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), false, 'day is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 3, 4, 9, 10)), 'minute'), true, 'day is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), false, 'hour is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 4, 9, 10)), 'minute'), true, 'hour is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), false, 'minute is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 3, 9, 10)), 'minute'), true, 'minute is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, 'exact start of minute');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, 'exact end of minute');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), false, 'start of next minute');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), true, 'end of previous minute');
+ assert.equal(m.isSameOrAfter(m, 'minute'), true, 'same moments are in the same minute');
+ assert.equal(+m, +mCopy, 'isSameOrAfter minute should not change moment');
+});
+
+test('is same or after second', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, 'second match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 1, 2, 3, 4, 5, 10)), 'second'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 12, 2, 3, 4, 5, 10)), 'second'), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), false, 'day is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 1, 3, 4, 5, 10)), 'second'), true, 'day is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), false, 'hour is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 2, 4, 5, 10)), 'second'), true, 'hour is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), false, 'minute is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 3, 5, 10)), 'second'), true, 'minute is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), false, 'second is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 4, 10)), 'second'), true, 'second is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, 'exact start of second');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, 'exact end of second');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), false, 'start of next second');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), true, 'end of previous second');
+ assert.equal(m.isSameOrAfter(m, 'second'), true, 'same moments are in the same second');
+ assert.equal(+m, +mCopy, 'isSameOrAfter second should not change moment');
+});
+
+test('is same or after millisecond', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'millisecond match');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work');
+ assert.equal(m.isSameOrAfter(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), false, 'day is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), true, 'day is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), false, 'hour is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), true, 'hour is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), false, 'minute is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), true, 'minute is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), false, 'second is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), true, 'second is earlier');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), false, 'millisecond is later');
+ assert.equal(m.isSameOrAfter(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), true, 'millisecond is earlier');
+ assert.equal(m.isSameOrAfter(m, 'millisecond'), true, 'same moments are in the same millisecond');
+ assert.equal(+m, +mCopy, 'isSameOrAfter millisecond should not change moment');
+});
+
+test('is same or after with utc offset moments', function (assert) {
+ assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrAfter(moment('2013-02-01'), 'year'), 'zoned vs local moment');
+ assert.ok(moment('2013-02-01').isSameOrAfter(moment('2013-02-01').utcOffset('-05:00'), 'year'), 'local vs zoned moment');
+ assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrAfter(moment.parseZone('2013-02-01T00:00:00-06:30'), 'year'),
+ 'zoned vs (differently) zoned moment');
+});
+
+test('is same or after with invalid moments', function (assert) {
+ var m = moment(), invalid = moment.invalid();
+ assert.equal(invalid.isSameOrAfter(invalid), false, 'invalid moments are not considered equal');
+ assert.equal(m.isSameOrAfter(invalid), false, 'valid moment is not after invalid moment');
+ assert.equal(invalid.isSameOrAfter(m), false, 'invalid moment is not after valid moment');
+ assert.equal(m.isSameOrAfter(invalid, 'year'), false, 'invalid moment year');
+ assert.equal(m.isSameOrAfter(invalid, 'month'), false, 'invalid moment month');
+ assert.equal(m.isSameOrAfter(invalid, 'day'), false, 'invalid moment day');
+ assert.equal(m.isSameOrAfter(invalid, 'hour'), false, 'invalid moment hour');
+ assert.equal(m.isSameOrAfter(invalid, 'minute'), false, 'invalid moment minute');
+ assert.equal(m.isSameOrAfter(invalid, 'second'), false, 'invalid moment second');
+ assert.equal(m.isSameOrAfter(invalid, 'milliseconds'), false, 'invalid moment milliseconds');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is same or before');
+
+test('is same or before without units', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 3, 2, 3, 5, 5, 10))), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 3, 2, 3, 3, 5, 10))), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10))), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10))), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10))), true, 'day is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 3, 4, 5, 10))), false, 'day is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10))), true, 'hour is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 2, 4, 5, 10))), false, 'hour is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10))), true, 'minute is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10))), false, 'minute is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10))), true, 'second is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 11))), false, 'second is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10))), true, 'millisecond match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 11))), true, 'millisecond is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 9))), false, 'millisecond is earlier');
+ assert.equal(m.isSameOrBefore(m), true, 'moments are the same as themselves');
+ assert.equal(+m, +mCopy, 'isSameOrBefore second should not change moment');
+});
+
+test('is same or before year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'years'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 5, 6, 7, 8, 9, 10)), 'year'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 5, 6, 7, 8, 9, 10)), 'year'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 0, 1, 0, 0, 0, 0)), 'year'), true, 'exact start of year');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 11, 31, 23, 59, 59, 999)), 'year'), true, 'exact end of year');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 0, 1, 0, 0, 0, 0)), 'year'), true, 'start of next year');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 11, 31, 23, 59, 59, 999)), 'year'), false, 'end of previous year');
+ assert.equal(m.isSameOrBefore(m, 'year'), true, 'same moments are in the same year');
+ assert.equal(+m, +mCopy, 'isSameOrBefore year should not change moment');
+});
+
+test('is same or before month', function (assert) {
+ var m = moment(new Date(2011, 2, 3, 4, 5, 6, 7)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'month'), true, 'month match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 6, 7, 8, 9, 10)), 'months'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 2, 6, 7, 8, 9, 10)), 'month'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 2, 6, 7, 8, 9, 10)), 'month'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 5, 6, 7, 8, 9, 10)), 'month'), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 6, 7, 8, 9, 10)), 'month'), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 1, 0, 0, 0, 0)), 'month'), true, 'exact start of month');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 31, 23, 59, 59, 999)), 'month'), true, 'exact end of month');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 0, 0, 0, 0)), 'month'), true, 'start of next month');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 27, 23, 59, 59, 999)), 'month'), false, 'end of previous month');
+ assert.equal(m.isSameOrBefore(m, 'month'), true, 'same moments are in the same month');
+ assert.equal(+m, +mCopy, 'isSameOrBefore month should not change moment');
+});
+
+test('is same or before day', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'day'), true, 'day match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 7, 8, 9, 10)), 'days'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 7, 8, 9, 10)), 'day'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 7, 8, 9, 10)), 'day'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 7, 8, 9, 10)), 'day'), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 7, 8, 9, 10)), 'day'), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 7, 8, 9, 10)), 'day'), true, 'day is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 7, 8, 9, 10)), 'day'), false, 'day is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 0, 0, 0, 0)), 'day'), true, 'exact start of day');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 23, 59, 59, 999)), 'day'), true, 'exact end of day');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 0, 0, 0, 0)), 'day'), true, 'start of next day');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 23, 59, 59, 999)), 'day'), false, 'end of previous day');
+ assert.equal(m.isSameOrBefore(m, 'day'), true, 'same moments are in the same day');
+ assert.equal(+m, +mCopy, 'isSameOrBefore day should not change moment');
+});
+
+test('is same or before hour', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'hour match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 8, 9, 10)), 'hours'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 3, 8, 9, 10)), 'hour'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 3, 8, 9, 10)), 'hour'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 8, 9, 10)), 'hour'), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 3, 8, 9, 10)), 'hour'), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 3, 8, 9, 10)), 'hour'), true, 'day is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 3, 8, 9, 10)), 'hour'), false, 'day is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 8, 9, 10)), 'hour'), true, 'hour is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 8, 9, 10)), 'hour'), false, 'hour is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 0, 0, 0)), 'hour'), true, 'exact start of hour');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 59, 59, 999)), 'hour'), true, 'exact end of hour');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 0, 0, 0)), 'hour'), true, 'start of next hour');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 59, 59, 999)), 'hour'), false, 'end of previous hour');
+ assert.equal(m.isSameOrBefore(m, 'hour'), true, 'same moments are in the same hour');
+ assert.equal(+m, +mCopy, 'isSameOrBefore hour should not change moment');
+});
+
+test('is same or before minute', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'minute match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 9, 10)), 'minutes'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 3, 4, 9, 10)), 'minute'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 3, 4, 9, 10)), 'minute'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 9, 10)), 'minute'), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 3, 4, 9, 10)), 'minute'), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 3, 4, 9, 10)), 'minute'), true, 'day is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 3, 4, 9, 10)), 'minute'), false, 'day is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 4, 9, 10)), 'minute'), true, 'hour is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 4, 9, 10)), 'minute'), false, 'hour is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 5, 9, 10)), 'minute'), true, 'minute is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 3, 9, 10)), 'minute'), false, 'minute is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 0, 0)), 'minute'), true, 'exact start of minute');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 59, 999)), 'minute'), true, 'exact end of minute');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 5, 0, 0)), 'minute'), true, 'start of next minute');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 3, 59, 999)), 'minute'), false, 'end of previous minute');
+ assert.equal(m.isSameOrBefore(m, 'minute'), true, 'same moments are in the same minute');
+ assert.equal(+m, +mCopy, 'isSameOrBefore minute should not change moment');
+});
+
+test('is same or before second', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'second'), true, 'second match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 10)), 'seconds'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 1, 2, 3, 4, 5, 10)), 'second'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 1, 2, 3, 4, 5, 10)), 'second'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'second'), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 12, 2, 3, 4, 5, 10)), 'second'), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 3, 3, 4, 5, 10)), 'second'), true, 'day is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 1, 3, 4, 5, 10)), 'second'), false, 'day is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 4, 4, 5, 10)), 'second'), true, 'hour is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 2, 4, 5, 10)), 'second'), false, 'hour is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 5, 5, 10)), 'second'), true, 'minute is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 3, 5, 10)), 'second'), false, 'minute is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 6, 10)), 'second'), true, 'second is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 4, 10)), 'second'), false, 'second is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 0)), 'second'), true, 'exact start of second');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 5, 999)), 'second'), true, 'exact end of second');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 6, 0)), 'second'), true, 'start of next second');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 1, 2, 3, 4, 4, 999)), 'second'), false, 'end of previous second');
+ assert.equal(m.isSameOrBefore(m, 'second'), true, 'same moments are in the same second');
+ assert.equal(+m, +mCopy, 'isSameOrBefore second should not change moment');
+});
+
+test('is same or before millisecond', function (assert) {
+ var m = moment(new Date(2011, 3, 2, 3, 4, 5, 10)), mCopy = moment(m);
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'millisecond match');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 5, 10)), 'milliseconds'), true, 'plural should work');
+ assert.equal(m.isSameOrBefore(moment(new Date(2012, 3, 2, 3, 4, 5, 10)), 'millisecond'), true, 'year is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2010, 3, 2, 3, 4, 5, 10)), 'millisecond'), false, 'year is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 4, 2, 3, 4, 5, 10)), 'millisecond'), true, 'month is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 2, 2, 3, 4, 5, 10)), 'millisecond'), false, 'month is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 3, 3, 4, 5, 10)), 'millisecond'), true, 'day is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 1, 4, 5, 10)), 'millisecond'), false, 'day is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 4, 4, 5, 10)), 'millisecond'), true, 'hour is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 1, 4, 1, 5, 10)), 'millisecond'), false, 'hour is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 5, 5, 10)), 'millisecond'), true, 'minute is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 3, 5, 10)), 'millisecond'), false, 'minute is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 10)), 'millisecond'), true, 'second is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 5)), 'millisecond'), false, 'second is earlier');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 6, 11)), 'millisecond'), true, 'millisecond is later');
+ assert.equal(m.isSameOrBefore(moment(new Date(2011, 3, 2, 3, 4, 4, 9)), 'millisecond'), false, 'millisecond is earlier');
+ assert.equal(m.isSameOrBefore(m, 'millisecond'), true, 'same moments are in the same millisecond');
+ assert.equal(+m, +mCopy, 'isSameOrBefore millisecond should not change moment');
+});
+
+test('is same with utc offset moments', function (assert) {
+ assert.ok(moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrBefore(moment('2013-02-01'), 'year'), 'zoned vs local moment');
+ assert.ok(moment('2013-02-01').isSameOrBefore(moment('2013-02-01').utcOffset('-05:00'), 'year'), 'local vs zoned moment');
+ assert.ok(
+ moment.parseZone('2013-02-01T00:00:00-05:00').isSameOrBefore(moment.parseZone('2013-02-01T00:00:00-06:30'), 'year'),
+ 'zoned vs (differently) zoned moment'
+ );
+});
+
+test('is same with invalid moments', function (assert) {
+ var m = moment(), invalid = moment.invalid();
+ assert.equal(invalid.isSameOrBefore(invalid), false, 'invalid moments are not considered equal');
+ assert.equal(m.isSameOrBefore(invalid), false, 'valid moment is not before invalid moment');
+ assert.equal(invalid.isSameOrBefore(m), false, 'invalid moment is not before valid moment');
+ assert.equal(m.isSameOrBefore(invalid, 'year'), false, 'invalid moment year');
+ assert.equal(m.isSameOrBefore(invalid, 'month'), false, 'invalid moment month');
+ assert.equal(m.isSameOrBefore(invalid, 'day'), false, 'invalid moment day');
+ assert.equal(m.isSameOrBefore(invalid, 'hour'), false, 'invalid moment hour');
+ assert.equal(m.isSameOrBefore(invalid, 'minute'), false, 'invalid moment minute');
+ assert.equal(m.isSameOrBefore(invalid, 'second'), false, 'invalid moment second');
+ assert.equal(m.isSameOrBefore(invalid, 'milliseconds'), false, 'invalid moment milliseconds');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('is valid');
+
+test('array bad month', function (assert) {
+ assert.equal(moment([2010, -1]).isValid(), false, 'month -1 invalid');
+ assert.equal(moment([2100, 12]).isValid(), false, 'month 12 invalid');
+});
+
+test('array good month', function (assert) {
+ for (var i = 0; i < 12; i++) {
+ assert.equal(moment([2010, i]).isValid(), true, 'month ' + i);
+ assert.equal(moment.utc([2010, i]).isValid(), true, 'month ' + i);
+ }
+});
+
+test('array bad date', function (assert) {
+ var tests = [
+ moment([2010, 0, 0]),
+ moment([2100, 0, 32]),
+ moment.utc([2010, 0, 0]),
+ moment.utc([2100, 0, 32])
+ ],
+ i, m;
+
+ for (i in tests) {
+ m = tests[i];
+ assert.equal(m.isValid(), false);
+ }
+});
+
+test('h/hh with hour > 12', function (assert) {
+ assert.ok(moment('06/20/2014 11:51 PM', 'MM/DD/YYYY hh:mm A', true).isValid(), '11 for hh');
+ assert.ok(moment('06/20/2014 11:51 AM', 'MM/DD/YYYY hh:mm A', true).isValid(), '11 for hh');
+ assert.ok(moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A').isValid(), 'non-strict validity 23 for hh');
+ assert.ok(moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A').parsingFlags().bigHour, 'non-strict bigHour 23 for hh');
+ assert.ok(!moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A', true).isValid(), 'validity 23 for hh');
+ assert.ok(moment('06/20/2014 23:51 PM', 'MM/DD/YYYY hh:mm A', true).parsingFlags().bigHour, 'bigHour 23 for hh');
+});
+
+test('array bad date leap year', function (assert) {
+ assert.equal(moment([2010, 1, 29]).isValid(), false, '2010 feb 29');
+ assert.equal(moment([2100, 1, 29]).isValid(), false, '2100 feb 29');
+ assert.equal(moment([2008, 1, 30]).isValid(), false, '2008 feb 30');
+ assert.equal(moment([2000, 1, 30]).isValid(), false, '2000 feb 30');
+
+ assert.equal(moment.utc([2010, 1, 29]).isValid(), false, 'utc 2010 feb 29');
+ assert.equal(moment.utc([2100, 1, 29]).isValid(), false, 'utc 2100 feb 29');
+ assert.equal(moment.utc([2008, 1, 30]).isValid(), false, 'utc 2008 feb 30');
+ assert.equal(moment.utc([2000, 1, 30]).isValid(), false, 'utc 2000 feb 30');
+});
+
+test('string + formats bad date', function (assert) {
+ assert.equal(moment('2020-00-00', []).isValid(), false, 'invalid on empty array');
+ assert.equal(moment('2020-00-00', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), false, 'invalid on all in array');
+ assert.equal(moment('2020-00-00', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'invalid on all in array');
+ assert.equal(moment('2020-01-01', ['YYYY-MM-DD', 'DD-MM-YYYY']).isValid(), true, 'valid on first');
+ assert.equal(moment('2020-01-01', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), true, 'valid on last');
+ assert.equal(moment('2020-01-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on both');
+ assert.equal(moment('2020-13-01', ['YYYY-MM-DD', 'YYYY-DD-MM']).isValid(), true, 'valid on last');
+
+ assert.equal(moment('12-13-2012', ['DD-MM-YYYY', 'YYYY-MM-DD']).isValid(), false, 'month rollover');
+ assert.equal(moment('12-13-2012', ['DD-MM-YYYY', 'DD-MM-YYYY']).isValid(), false, 'month rollover');
+ assert.equal(moment('38-12-2012', ['DD-MM-YYYY']).isValid(), false, 'day rollover');
+});
+
+test('string nonsensical with format', function (assert) {
+ assert.equal(moment('fail', 'MM-DD-YYYY').isValid(), false, 'string \'fail\' with format \'MM-DD-YYYY\'');
+ assert.equal(moment('xx-xx-2001', 'DD-MM-YYY').isValid(), true, 'string \'xx-xx-2001\' with format \'MM-DD-YYYY\'');
+});
+
+test('string with bad month name', function (assert) {
+ assert.equal(moment('01-Nam-2012', 'DD-MMM-YYYY').isValid(), false, '\'Nam\' is an invalid month');
+ assert.equal(moment('01-Aug-2012', 'DD-MMM-YYYY').isValid(), true, '\'Aug\' is a valid month');
+});
+
+test('string with spaceless format', function (assert) {
+ assert.equal(moment('10Sep2001', 'DDMMMYYYY').isValid(), true, 'Parsing 10Sep2001 should result in a valid date');
+});
+
+test('invalid string iso 8601', function (assert) {
+ var tests = [
+ '2010-00-00',
+ '2010-01-00',
+ '2010-01-40',
+ '2010-01-01T24:01', // 24:00:00 is actually valid
+ '2010-01-01T23:60',
+ '2010-01-01T23:59:60'
+ ], i;
+
+ for (i = 0; i < tests.length; i++) {
+ assert.equal(moment(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid');
+ assert.equal(moment.utc(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid');
+ }
+});
+
+test('invalid string iso 8601 + timezone', function (assert) {
+ var tests = [
+ '2010-00-00T+00:00',
+ '2010-01-00T+00:00',
+ '2010-01-40T+00:00',
+ '2010-01-40T24:01+00:00',
+ '2010-01-40T23:60+00:00',
+ '2010-01-40T23:59:60+00:00',
+ '2010-01-40T23:59:59.9999+00:00',
+ '2010-01-40T23:59:59,9999+00:00'
+ ], i;
+
+ for (i = 0; i < tests.length; i++) {
+ assert.equal(moment(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid');
+ assert.equal(moment.utc(tests[i], moment.ISO_8601).isValid(), false, tests[i] + ' should be invalid');
+ }
+});
+
+test('valid string iso 8601 - not strict', function (assert) {
+ var tests = [
+ '2010-01-30 00:00:00,000Z',
+ '20100101',
+ '20100130',
+ '20100130T23+00:00',
+ '20100130T2359+0000',
+ '20100130T235959+0000',
+ '20100130T235959,999+0000',
+ '20100130T235959,999-0700',
+ '20100130T000000,000+0700',
+ '20100130 000000,000Z'
+ ];
+
+ for (var i = 0; i < tests.length; i++) {
+ assert.equal(moment(tests[i]).isValid(), true, tests[i] + ' should be valid in normal');
+ assert.equal(moment.utc(tests[i]).isValid(), true, tests[i] + ' should be valid in normal');
+ }
+});
+
+test('valid string iso 8601 + timezone', function (assert) {
+ var tests = [
+ '2010-01-01',
+ '2010-01-30',
+ '2010-01-30T23+00:00',
+ '2010-01-30T23:59+00:00',
+ '2010-01-30T23:59:59+00:00',
+ '2010-01-30T23:59:59.999+00:00',
+ '2010-01-30T23:59:59.999-07:00',
+ '2010-01-30T00:00:00.000+07:00',
+ '2010-01-30T23:59:59.999-07',
+ '2010-01-30T00:00:00.000+07',
+ '2010-01-30 00:00:00.000Z'
+ ], i;
+
+ for (i = 0; i < tests.length; i++) {
+ assert.equal(moment(tests[i]).isValid(), true, tests[i] + ' should be valid in normal');
+ assert.equal(moment.utc(tests[i]).isValid(), true, tests[i] + ' should be valid in normal');
+ assert.equal(moment(tests[i], moment.ISO_8601, true).isValid(), true, tests[i] + ' should be valid in strict');
+ assert.equal(moment.utc(tests[i], moment.ISO_8601, true).isValid(), true, tests[i] + ' should be valid in strict');
+ }
+});
+
+test('invalidAt', function (assert) {
+ assert.equal(moment([2000, 12]).invalidAt(), 1, 'month 12 is invalid: 0-11');
+ assert.equal(moment([2000, 1, 30]).invalidAt(), 2, '30 is not a valid february day');
+ assert.equal(moment([2000, 1, 29, 25]).invalidAt(), 3, '25 is invalid hour');
+ assert.equal(moment([2000, 1, 29, 24, 1]).invalidAt(), 3, '24:01 is invalid hour');
+ assert.equal(moment([2000, 1, 29, 23, 60]).invalidAt(), 4, '60 is invalid minute');
+ assert.equal(moment([2000, 1, 29, 23, 59, 60]).invalidAt(), 5, '60 is invalid second');
+ assert.equal(moment([2000, 1, 29, 23, 59, 59, 1000]).invalidAt(), 6, '1000 is invalid millisecond');
+ assert.equal(moment([2000, 1, 29, 23, 59, 59, 999]).invalidAt(), -1, '-1 if everything is fine');
+});
+
+test('valid Unix timestamp', function (assert) {
+ assert.equal(moment(1371065286, 'X').isValid(), true, 'number integer');
+ assert.equal(moment(1379066897.0, 'X').isValid(), true, 'number whole 1dp');
+ assert.equal(moment(1379066897.7, 'X').isValid(), true, 'number 1dp');
+ assert.equal(moment(1379066897.00, 'X').isValid(), true, 'number whole 2dp');
+ assert.equal(moment(1379066897.07, 'X').isValid(), true, 'number 2dp');
+ assert.equal(moment(1379066897.17, 'X').isValid(), true, 'number 2dp');
+ assert.equal(moment(1379066897.000, 'X').isValid(), true, 'number whole 3dp');
+ assert.equal(moment(1379066897.007, 'X').isValid(), true, 'number 3dp');
+ assert.equal(moment(1379066897.017, 'X').isValid(), true, 'number 3dp');
+ assert.equal(moment(1379066897.157, 'X').isValid(), true, 'number 3dp');
+ assert.equal(moment('1371065286', 'X').isValid(), true, 'string integer');
+ assert.equal(moment('1379066897.', 'X').isValid(), true, 'string trailing .');
+ assert.equal(moment('1379066897.0', 'X').isValid(), true, 'string whole 1dp');
+ assert.equal(moment('1379066897.7', 'X').isValid(), true, 'string 1dp');
+ assert.equal(moment('1379066897.00', 'X').isValid(), true, 'string whole 2dp');
+ assert.equal(moment('1379066897.07', 'X').isValid(), true, 'string 2dp');
+ assert.equal(moment('1379066897.17', 'X').isValid(), true, 'string 2dp');
+ assert.equal(moment('1379066897.000', 'X').isValid(), true, 'string whole 3dp');
+ assert.equal(moment('1379066897.007', 'X').isValid(), true, 'string 3dp');
+ assert.equal(moment('1379066897.017', 'X').isValid(), true, 'string 3dp');
+ assert.equal(moment('1379066897.157', 'X').isValid(), true, 'string 3dp');
+});
+
+test('invalid Unix timestamp', function (assert) {
+ assert.equal(moment(undefined, 'X').isValid(), false, 'undefined');
+ assert.equal(moment('undefined', 'X').isValid(), false, 'string undefined');
+ try {
+ assert.equal(moment(null, 'X').isValid(), false, 'null');
+ } catch (e) {
+ assert.ok(true, 'null');
+ }
+
+ assert.equal(moment('null', 'X').isValid(), false, 'string null');
+ assert.equal(moment([], 'X').isValid(), false, 'array');
+ assert.equal(moment('{}', 'X').isValid(), false, 'object');
+ try {
+ assert.equal(moment('', 'X').isValid(), false, 'string empty');
+ } catch (e) {
+ assert.ok(true, 'string empty');
+ }
+
+ assert.equal(moment(' ', 'X').isValid(), false, 'string space');
+});
+
+test('valid Unix offset milliseconds', function (assert) {
+ assert.equal(moment(1234567890123, 'x').isValid(), true, 'number integer');
+ assert.equal(moment('1234567890123', 'x').isValid(), true, 'string integer');
+});
+
+test('invalid Unix offset milliseconds', function (assert) {
+ assert.equal(moment(undefined, 'x').isValid(), false, 'undefined');
+ assert.equal(moment('undefined', 'x').isValid(), false, 'string undefined');
+ try {
+ assert.equal(moment(null, 'x').isValid(), false, 'null');
+ } catch (e) {
+ assert.ok(true, 'null');
+ }
+
+ assert.equal(moment('null', 'x').isValid(), false, 'string null');
+ assert.equal(moment([], 'x').isValid(), false, 'array');
+ assert.equal(moment('{}', 'x').isValid(), false, 'object');
+ try {
+ assert.equal(moment('', 'x').isValid(), false, 'string empty');
+ } catch (e) {
+ assert.ok(true, 'string empty');
+ }
+
+ assert.equal(moment(' ', 'x').isValid(), false, 'string space');
+});
+
+test('empty', function (assert) {
+ assert.equal(moment(null).isValid(), false, 'null');
+ assert.equal(moment('').isValid(), false, 'empty string');
+ assert.equal(moment(null, 'YYYY').isValid(), false, 'format + null');
+ assert.equal(moment('', 'YYYY').isValid(), false, 'format + empty string');
+ assert.equal(moment(' ', 'YYYY').isValid(), false, 'format + empty when trimmed');
+});
+
+test('days of the year', function (assert) {
+ assert.equal(moment('2010 300', 'YYYY DDDD').isValid(), true, 'day 300 of year valid');
+ assert.equal(moment('2010 365', 'YYYY DDDD').isValid(), true, 'day 365 of year valid');
+ assert.equal(moment('2010 366', 'YYYY DDDD').isValid(), false, 'day 366 of year invalid');
+ assert.equal(moment('2012 365', 'YYYY DDDD').isValid(), true, 'day 365 of leap year valid');
+ assert.equal(moment('2012 366', 'YYYY DDDD').isValid(), true, 'day 366 of leap year valid');
+ assert.equal(moment('2012 367', 'YYYY DDDD').isValid(), false, 'day 367 of leap year invalid');
+});
+
+test('24:00:00.000 is valid', function (assert) {
+ assert.equal(moment('2014-01-01 24', 'YYYY-MM-DD HH').isValid(), true, '24 is valid');
+ assert.equal(moment('2014-01-01 24:00', 'YYYY-MM-DD HH:mm').isValid(), true, '24:00 is valid');
+ assert.equal(moment('2014-01-01 24:01', 'YYYY-MM-DD HH:mm').isValid(), false, '24:01 is not valid');
+});
+
+test('oddball permissiveness', function (assert) {
+ //https://github.com/moment/moment/issues/1128
+ assert.ok(moment('2010-10-3199', ['MM/DD/YYYY', 'MM-DD-YYYY', 'YYYY-MM-DD']).isValid());
+
+ //https://github.com/moment/moment/issues/1122
+ assert.ok(moment('3:25', ['h:mma', 'hh:mma', 'H:mm', 'HH:mm']).isValid());
+});
+
+test('0 hour is invalid in strict', function (assert) {
+ assert.equal(moment('00:01', 'hh:mm', true).isValid(), false, '00 hour is invalid in strict');
+ assert.equal(moment('00:01', 'hh:mm').isValid(), true, '00 hour is valid in normal');
+ assert.equal(moment('0:01', 'h:mm', true).isValid(), false, '0 hour is invalid in strict');
+ assert.equal(moment('0:01', 'h:mm').isValid(), true, '0 hour is valid in normal');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('leap year');
+
+test('leap year', function (assert) {
+ assert.equal(moment([2010, 0, 1]).isLeapYear(), false, '2010');
+ assert.equal(moment([2100, 0, 1]).isLeapYear(), false, '2100');
+ assert.equal(moment([2008, 0, 1]).isLeapYear(), true, '2008');
+ assert.equal(moment([2000, 0, 1]).isLeapYear(), true, '2000');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('listers');
+
+test('default', function (assert) {
+ assert.deepEqual(moment.months(), ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']);
+ assert.deepEqual(moment.monthsShort(), ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']);
+ assert.deepEqual(moment.weekdays(), ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']);
+ assert.deepEqual(moment.weekdaysShort(), ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']);
+ assert.deepEqual(moment.weekdaysMin(), ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);
+});
+
+test('index', function (assert) {
+ assert.equal(moment.months(0), 'January');
+ assert.equal(moment.months(2), 'March');
+ assert.equal(moment.monthsShort(0), 'Jan');
+ assert.equal(moment.monthsShort(2), 'Mar');
+ assert.equal(moment.weekdays(0), 'Sunday');
+ assert.equal(moment.weekdays(2), 'Tuesday');
+ assert.equal(moment.weekdaysShort(0), 'Sun');
+ assert.equal(moment.weekdaysShort(2), 'Tue');
+ assert.equal(moment.weekdaysMin(0), 'Su');
+ assert.equal(moment.weekdaysMin(2), 'Tu');
+});
+
+test('localized', function (assert) {
+ var months = 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'),
+ monthsShort = 'on_tw_th_fo_fi_si_se_ei_ni_te_el_tw'.split('_'),
+ weekdays = 'one_two_three_four_five_six_seven'.split('_'),
+ weekdaysShort = 'on_tw_th_fo_fi_si_se'.split('_'),
+ weekdaysMin = '1_2_3_4_5_6_7'.split('_'),
+ weekdaysLocale = 'four_five_six_seven_one_two_three'.split('_'),
+ weekdaysShortLocale = 'fo_fi_si_se_on_tw_th'.split('_'),
+ weekdaysMinLocale = '4_5_6_7_1_2_3'.split('_'),
+ week = {
+ dow : 3,
+ doy : 6
+ };
+
+ moment.locale('numerologists', {
+ months : months,
+ monthsShort : monthsShort,
+ weekdays : weekdays,
+ weekdaysShort: weekdaysShort,
+ weekdaysMin: weekdaysMin,
+ week : week
+ });
+
+ assert.deepEqual(moment.months(), months);
+ assert.deepEqual(moment.monthsShort(), monthsShort);
+ assert.deepEqual(moment.weekdays(), weekdays);
+ assert.deepEqual(moment.weekdaysShort(), weekdaysShort);
+ assert.deepEqual(moment.weekdaysMin(), weekdaysMin);
+
+ assert.equal(moment.months(0), 'one');
+ assert.equal(moment.monthsShort(0), 'on');
+ assert.equal(moment.weekdays(0), 'one');
+ assert.equal(moment.weekdaysShort(0), 'on');
+ assert.equal(moment.weekdaysMin(0), '1');
+
+ assert.equal(moment.months(2), 'three');
+ assert.equal(moment.monthsShort(2), 'th');
+ assert.equal(moment.weekdays(2), 'three');
+ assert.equal(moment.weekdaysShort(2), 'th');
+ assert.equal(moment.weekdaysMin(2), '3');
+
+ assert.deepEqual(moment.weekdays(true), weekdaysLocale);
+ assert.deepEqual(moment.weekdaysShort(true), weekdaysShortLocale);
+ assert.deepEqual(moment.weekdaysMin(true), weekdaysMinLocale);
+
+ assert.equal(moment.weekdays(true, 0), 'four');
+ assert.equal(moment.weekdaysShort(true, 0), 'fo');
+ assert.equal(moment.weekdaysMin(true, 0), '4');
+
+ assert.equal(moment.weekdays(false, 2), 'three');
+ assert.equal(moment.weekdaysShort(false, 2), 'th');
+ assert.equal(moment.weekdaysMin(false, 2), '3');
+});
+
+test('with functions', function (assert) {
+ var monthsShort = 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'),
+ monthsShortWeird = 'onesy_twosy_threesy_foursy_fivesy_sixsy_sevensy_eightsy_ninesy_tensy_elevensy_twelvesy'.split('_');
+
+ moment.locale('difficult', {
+
+ monthsShort: function (m, format) {
+ var arr = format.match(/-MMM-/) ? monthsShortWeird : monthsShort;
+ return arr[m.month()];
+ }
+ });
+
+ assert.deepEqual(moment.monthsShort(), monthsShort);
+ assert.deepEqual(moment.monthsShort('MMM'), monthsShort);
+ assert.deepEqual(moment.monthsShort('-MMM-'), monthsShortWeird);
+
+ assert.deepEqual(moment.monthsShort('MMM', 2), 'three');
+ assert.deepEqual(moment.monthsShort('-MMM-', 2), 'threesy');
+ assert.deepEqual(moment.monthsShort(2), 'three');
+});
+
+test('with locale data', function (assert) {
+ var months = 'one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve'.split('_'),
+ monthsShort = 'on_tw_th_fo_fi_si_se_ei_ni_te_el_tw'.split('_'),
+ weekdays = 'one_two_three_four_five_six_seven'.split('_'),
+ weekdaysShort = 'on_tw_th_fo_fi_si_se'.split('_'),
+ weekdaysMin = '1_2_3_4_5_6_7'.split('_'),
+ weekdaysLocale = 'four_five_six_seven_one_two_three'.split('_'),
+ weekdaysShortLocale = 'fo_fi_si_se_on_tw_th'.split('_'),
+ weekdaysMinLocale = '4_5_6_7_1_2_3'.split('_'),
+ week = {
+ dow : 3,
+ doy : 6
+ };
+
+ var customLocale = moment.localeData('numerologists');
+
+ assert.deepEqual(customLocale.months(), months);
+ assert.deepEqual(customLocale.monthsShort(), monthsShort);
+ assert.deepEqual(customLocale.weekdays(), weekdays);
+ assert.deepEqual(customLocale.weekdaysShort(), weekdaysShort);
+ assert.deepEqual(customLocale.weekdaysMin(), weekdaysMin);
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+var indexOf;
+
+if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+} else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+var indexOf$1 = indexOf;
+
+module$1('locale', {
+ setup : function () {
+ // TODO: Remove once locales are switched to ES6
+ each([{
+ name: 'en-gb',
+ data: {}
+ }, {
+ name: 'en-ca',
+ data: {}
+ }, {
+ name: 'es',
+ data: {
+ relativeTime: {past: 'hace %s', s: 'unos segundos', d: 'un día'},
+ months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_')
+ }
+ }, {
+ name: 'fr',
+ data: {}
+ }, {
+ name: 'fr-ca',
+ data: {}
+ }, {
+ name: 'it',
+ data: {}
+ }, {
+ name: 'zh-cn',
+ data: {
+ months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_')
+ }
+ }], function (locale) {
+ if (moment.locale(locale.name) !== locale.name) {
+ moment.defineLocale(locale.name, locale.data);
+ }
+ });
+ moment.locale('en');
+ }
+});
+
+test('library getters and setters', function (assert) {
+ var r = moment.locale('en');
+
+ assert.equal(r, 'en', 'locale should return en by default');
+ assert.equal(moment.locale(), 'en', 'locale should return en by default');
+
+ moment.locale('fr');
+ assert.equal(moment.locale(), 'fr', 'locale should return the changed locale');
+
+ moment.locale('en-gb');
+ assert.equal(moment.locale(), 'en-gb', 'locale should return the changed locale');
+
+ moment.locale('en');
+ assert.equal(moment.locale(), 'en', 'locale should reset');
+
+ moment.locale('does-not-exist');
+ assert.equal(moment.locale(), 'en', 'locale should reset');
+
+ moment.locale('EN');
+ assert.equal(moment.locale(), 'en', 'Normalize locale key case');
+
+ moment.locale('EN_gb');
+ assert.equal(moment.locale(), 'en-gb', 'Normalize locale key underscore');
+});
+
+test('library setter array of locales', function (assert) {
+ assert.equal(moment.locale(['non-existent', 'fr', 'also-non-existent']), 'fr', 'passing an array uses the first valid locale');
+ assert.equal(moment.locale(['es', 'fr', 'also-non-existent']), 'es', 'passing an array uses the first valid locale');
+});
+
+test('library setter locale substrings', function (assert) {
+ assert.equal(moment.locale('fr-crap'), 'fr', 'use substrings');
+ assert.equal(moment.locale('fr-does-not-exist'), 'fr', 'uses deep substrings');
+ assert.equal(moment.locale('fr-CA-does-not-exist'), 'fr-ca', 'uses deepest substring');
+});
+
+test('library getter locale array and substrings', function (assert) {
+ assert.equal(moment.locale(['en-CH', 'fr']), 'en', 'prefer root locale to shallower ones');
+ assert.equal(moment.locale(['en-gb-leeds', 'en-CA']), 'en-gb', 'prefer root locale to shallower ones');
+ assert.equal(moment.locale(['en-fake', 'en-CA']), 'en-ca', 'prefer alternatives with shared roots');
+ assert.equal(moment.locale(['en-fake', 'en-fake2', 'en-ca']), 'en-ca', 'prefer alternatives with shared roots');
+ assert.equal(moment.locale(['fake-CA', 'fake-MX', 'fr']), 'fr', 'always find something if possible');
+ assert.equal(moment.locale(['fake-CA', 'fake-MX', 'fr']), 'fr', 'always find something if possible');
+ assert.equal(moment.locale(['fake-CA', 'fake-MX', 'fr-fake-fake-fake']), 'fr', 'always find something if possible');
+ assert.equal(moment.locale(['en', 'en-CA']), 'en', 'prefer earlier if it works');
+});
+
+test('library ensure inheritance', function (assert) {
+ moment.locale('made-up', {
+ // I put them out of order
+ months : 'February_March_April_May_June_July_August_September_October_November_December_January'.split('_')
+ // the rest of the properties should be inherited.
+ });
+
+ assert.equal(moment([2012, 5, 6]).format('MMMM'), 'July', 'Override some of the configs');
+ assert.equal(moment([2012, 5, 6]).format('MMM'), 'Jun', 'But not all of them');
+});
+
+test('library ensure inheritance LT L LL LLL LLLL', function (assert) {
+ var locale = 'test-inherit-lt';
+
+ moment.defineLocale(locale, {
+ longDateFormat : {
+ LT : '-[LT]-',
+ L : '-[L]-',
+ LL : '-[LL]-',
+ LLL : '-[LLL]-',
+ LLLL : '-[LLLL]-'
+ },
+ calendar : {
+ sameDay : '[sameDay] LT',
+ nextDay : '[nextDay] L',
+ nextWeek : '[nextWeek] LL',
+ lastDay : '[lastDay] LLL',
+ lastWeek : '[lastWeek] LLLL',
+ sameElse : 'L'
+ }
+ });
+
+ moment.locale('es');
+
+ assert.equal(moment().locale(locale).calendar(), 'sameDay -LT-', 'Should use instance locale in LT formatting');
+ assert.equal(moment().add(1, 'days').locale(locale).calendar(), 'nextDay -L-', 'Should use instance locale in L formatting');
+ assert.equal(moment().add(-1, 'days').locale(locale).calendar(), 'lastDay -LLL-', 'Should use instance locale in LL formatting');
+ assert.equal(moment().add(4, 'days').locale(locale).calendar(), 'nextWeek -LL-', 'Should use instance locale in LLL formatting');
+ assert.equal(moment().add(-4, 'days').locale(locale).calendar(), 'lastWeek -LLLL-', 'Should use instance locale in LLLL formatting');
+});
+
+test('library localeData', function (assert) {
+ moment.locale('en');
+
+ var jan = moment([2000, 0]);
+
+ assert.equal(moment.localeData().months(jan), 'January', 'no arguments returns global');
+ assert.equal(moment.localeData('zh-cn').months(jan), '一月', 'a string returns the locale based on key');
+ assert.equal(moment.localeData(moment().locale('es')).months(jan), 'enero', 'if you pass in a moment it uses the moment\'s locale');
+});
+
+test('library deprecations', function (assert) {
+ test.expectedDeprecations('moment.lang');
+ moment.lang('dude', {months: ['Movember']});
+ assert.equal(moment.locale(), 'dude', 'setting the lang sets the locale');
+ assert.equal(moment.lang(), moment.locale());
+ assert.equal(moment.langData(), moment.localeData(), 'langData is localeData');
+ moment.defineLocale('dude', null);
+});
+
+test('defineLocale', function (assert) {
+ moment.locale('en');
+ moment.defineLocale('dude', {months: ['Movember']});
+ assert.equal(moment().locale(), 'dude', 'defineLocale also sets it');
+ assert.equal(moment().locale('dude').locale(), 'dude', 'defineLocale defines a locale');
+ moment.defineLocale('dude', null);
+});
+
+test('locales', function (assert) {
+ moment.defineLocale('dude', {months: ['Movember']});
+ assert.equal(true, !!~indexOf$1.call(moment.locales(), 'dude'), 'locales returns an array of defined locales');
+ assert.equal(true, !!~indexOf$1.call(moment.locales(), 'en'), 'locales should always include english');
+ moment.defineLocale('dude', null);
+});
+
+test('library convenience', function (assert) {
+ moment.locale('something', {week: {dow: 3}});
+ moment.locale('something');
+ assert.equal(moment.locale(), 'something', 'locale can be used to create the locale too');
+ moment.defineLocale('something', null);
+});
+
+test('firstDayOfWeek firstDayOfYear locale getters', function (assert) {
+ moment.locale('something', {week: {dow: 3, doy: 4}});
+ moment.locale('something');
+ assert.equal(moment.localeData().firstDayOfWeek(), 3, 'firstDayOfWeek');
+ assert.equal(moment.localeData().firstDayOfYear(), 4, 'firstDayOfYear');
+ moment.defineLocale('something', null);
+});
+
+test('instance locale method', function (assert) {
+ moment.locale('en');
+
+ assert.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Normally default to global');
+ assert.equal(moment([2012, 5, 6]).locale('es').format('MMMM'), 'junio', 'Use the instance specific locale');
+ assert.equal(moment([2012, 5, 6]).format('MMMM'), 'June', 'Using an instance specific locale does not affect other moments');
+});
+
+test('instance locale method with array', function (assert) {
+ var m = moment().locale(['non-existent', 'fr', 'also-non-existent']);
+ assert.equal(m.locale(), 'fr', 'passing an array uses the first valid locale');
+ m = moment().locale(['es', 'fr', 'also-non-existent']);
+ assert.equal(m.locale(), 'es', 'passing an array uses the first valid locale');
+});
+
+test('instance getter locale substrings', function (assert) {
+ var m = moment();
+
+ m.locale('fr-crap');
+ assert.equal(m.locale(), 'fr', 'use substrings');
+
+ m.locale('fr-does-not-exist');
+ assert.equal(m.locale(), 'fr', 'uses deep substrings');
+});
+
+test('instance locale persists with manipulation', function (assert) {
+ moment.locale('en');
+
+ assert.equal(moment([2012, 5, 6]).locale('es').add({days: 1}).format('MMMM'), 'junio', 'With addition');
+ assert.equal(moment([2012, 5, 6]).locale('es').day(0).format('MMMM'), 'junio', 'With day getter');
+ assert.equal(moment([2012, 5, 6]).locale('es').endOf('day').format('MMMM'), 'junio', 'With endOf');
+});
+
+test('instance locale persists with cloning', function (assert) {
+ moment.locale('en');
+
+ var a = moment([2012, 5, 6]).locale('es'),
+ b = a.clone(),
+ c = moment(a);
+
+ assert.equal(b.format('MMMM'), 'junio', 'using moment.fn.clone()');
+ assert.equal(b.format('MMMM'), 'junio', 'using moment()');
+});
+
+test('duration locale method', function (assert) {
+ moment.locale('en');
+
+ assert.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Normally default to global');
+ assert.equal(moment.duration({seconds: 44}).locale('es').humanize(), 'unos segundos', 'Use the instance specific locale');
+ assert.equal(moment.duration({seconds: 44}).humanize(), 'a few seconds', 'Using an instance specific locale does not affect other durations');
+});
+
+test('duration locale persists with cloning', function (assert) {
+ moment.locale('en');
+
+ var a = moment.duration({seconds: 44}).locale('es'),
+ b = moment.duration(a);
+
+ assert.equal(b.humanize(), 'unos segundos', 'using moment.duration()');
+});
+
+test('changing the global locale doesn\'t affect existing duration instances', function (assert) {
+ var mom = moment.duration();
+ moment.locale('fr');
+ assert.equal('en', mom.locale());
+});
+
+test('duration deprecations', function (assert) {
+ test.expectedDeprecations('moment().lang()');
+ assert.equal(moment.duration().lang(), moment.duration().localeData(), 'duration.lang is the same as duration.localeData');
+});
+
+test('from and fromNow with invalid date', function (assert) {
+ assert.equal(moment(NaN).from(), 'Invalid date', 'moment.from with invalid moment');
+ assert.equal(moment(NaN).fromNow(), 'Invalid date', 'moment.fromNow with invalid moment');
+});
+
+test('from relative time future', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 44})), 'in a few seconds', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 45})), 'in a minute', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 89})), 'in a minute', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({s: 90})), 'in 2 minutes', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 44})), 'in 44 minutes', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 45})), 'in an hour', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 89})), 'in an hour', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({m: 90})), 'in 2 hours', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 5})), 'in 5 hours', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 21})), 'in 21 hours', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 22})), 'in a day', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 35})), 'in a day', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({h: 36})), 'in 2 days', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 1})), 'in a day', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 5})), 'in 5 days', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 25})), 'in 25 days', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 26})), 'in a month', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 30})), 'in a month', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 45})), 'in a month', '45 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 47})), 'in 2 months', '47 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 74})), 'in 2 months', '74 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 78})), 'in 3 months', '78 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({M: 1})), 'in a month', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({M: 5})), 'in 5 months', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 315})), 'in 10 months', '315 days = 10 months');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 344})), 'in a year', '344 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 345})), 'in a year', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({d: 548})), 'in 2 years', '548 days = in 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({y: 1})), 'in a year', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).subtract({y: 5})), 'in 5 years', '5 years = 5 years');
+});
+
+test('from relative time past', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 44})), 'a few seconds ago', '44 seconds = a few seconds');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 45})), 'a minute ago', '45 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 89})), 'a minute ago', '89 seconds = a minute');
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90})), '2 minutes ago', '90 seconds = 2 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 44})), '44 minutes ago', '44 minutes = 44 minutes');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 45})), 'an hour ago', '45 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 89})), 'an hour ago', '89 minutes = an hour');
+ assert.equal(start.from(moment([2007, 1, 28]).add({m: 90})), '2 hours ago', '90 minutes = 2 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 5})), '5 hours ago', '5 hours = 5 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 21})), '21 hours ago', '21 hours = 21 hours');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 22})), 'a day ago', '22 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 35})), 'a day ago', '35 hours = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({h: 36})), '2 days ago', '36 hours = 2 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 1})), 'a day ago', '1 day = a day');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 5})), '5 days ago', '5 days = 5 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 25})), '25 days ago', '25 days = 25 days');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 26})), 'a month ago', '26 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 30})), 'a month ago', '30 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 43})), 'a month ago', '43 days = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 46})), '2 months ago', '46 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 74})), '2 months ago', '75 days = 2 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 76})), '3 months ago', '76 days = 3 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 1})), 'a month ago', '1 month = a month');
+ assert.equal(start.from(moment([2007, 1, 28]).add({M: 5})), '5 months ago', '5 months = 5 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 315})), '10 months ago', '315 days = 10 months');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 344})), 'a year ago', '344 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 345})), 'a year ago', '345 days = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({d: 548})), '2 years ago', '548 days = 2 years');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 1})), 'a year ago', '1 year = a year');
+ assert.equal(start.from(moment([2007, 1, 28]).add({y: 5})), '5 years ago', '5 years = 5 years');
+});
+
+test('instance locale used with from', function (assert) {
+ moment.locale('en');
+
+ var a = moment([2012, 5, 6]).locale('es'),
+ b = moment([2012, 5, 7]);
+
+ assert.equal(a.from(b), 'hace un día', 'preserve locale of first moment');
+ assert.equal(b.from(a), 'in a day', 'do not preserve locale of second moment');
+});
+
+test('instance localeData', function (assert) {
+ moment.defineLocale('dude', {week: {dow: 3}});
+ assert.equal(moment().locale('dude').localeData()._week.dow, 3);
+ moment.defineLocale('dude', null);
+});
+
+test('month name callback function', function (assert) {
+ function fakeReplace(m, format) {
+ if (/test/.test(format)) {
+ return 'test';
+ }
+ if (m.date() === 1) {
+ return 'date';
+ }
+ return 'default';
+ }
+
+ moment.locale('made-up-2', {
+ months : fakeReplace,
+ monthsShort : fakeReplace,
+ weekdays : fakeReplace,
+ weekdaysShort : fakeReplace,
+ weekdaysMin : fakeReplace
+ });
+
+ assert.equal(moment().format('[test] dd ddd dddd MMM MMMM'), 'test test test test test test', 'format month name function should be able to access the format string');
+ assert.equal(moment([2011, 0, 1]).format('dd ddd dddd MMM MMMM'), 'date date date date date', 'format month name function should be able to access the moment object');
+ assert.equal(moment([2011, 0, 2]).format('dd ddd dddd MMM MMMM'), 'default default default default default', 'format month name function should be able to access the moment object');
+});
+
+test('changing parts of a locale config', function (assert) {
+ test.expectedDeprecations('defineLocaleOverride');
+
+ moment.locale('partial-lang', {
+ months : 'a b c d e f g h i j k l'.split(' ')
+ });
+
+ assert.equal(moment([2011, 0, 1]).format('MMMM'), 'a', 'should be able to set locale values when creating the localeuage');
+
+ moment.locale('partial-lang', {
+ monthsShort : 'A B C D E F G H I J K L'.split(' ')
+ });
+
+ assert.equal(moment([2011, 0, 1]).format('MMMM MMM'), 'a A', 'should be able to set locale values after creating the localeuage');
+
+ moment.defineLocale('partial-lang', null);
+});
+
+test('start/endOf week feature for first-day-is-monday locales', function (assert) {
+ moment.locale('monday-lang', {
+ week : {
+ dow : 1 // Monday is the first day of the week
+ }
+ });
+
+ moment.locale('monday-lang');
+ assert.equal(moment([2013, 0, 1]).startOf('week').day(), 1, 'for locale monday-lang first day of the week should be monday');
+ assert.equal(moment([2013, 0, 1]).endOf('week').day(), 0, 'for locale monday-lang last day of the week should be sunday');
+ moment.defineLocale('monday-lang', null);
+});
+
+test('meridiem parsing', function (assert) {
+ moment.locale('meridiem-parsing', {
+ meridiemParse : /[bd]/i,
+ isPM : function (input) {
+ return input === 'b';
+ }
+ });
+
+ moment.locale('meridiem-parsing');
+ assert.equal(moment('2012-01-01 3b', 'YYYY-MM-DD ha').hour(), 15, 'Custom parsing of meridiem should work');
+ assert.equal(moment('2012-01-01 3d', 'YYYY-MM-DD ha').hour(), 3, 'Custom parsing of meridiem should work');
+ moment.defineLocale('meridiem-parsing', null);
+});
+
+test('invalid date formatting', function (assert) {
+ moment.locale('has-invalid', {
+ invalidDate: 'KHAAAAAAAAAAAN!'
+ });
+
+ assert.equal(moment.invalid().format(), 'KHAAAAAAAAAAAN!');
+ assert.equal(moment.invalid().format('YYYY-MM-DD'), 'KHAAAAAAAAAAAN!');
+ moment.defineLocale('has-invalid', null);
+});
+
+test('return locale name', function (assert) {
+ var registered = moment.locale('return-this', {});
+
+ assert.equal(registered, 'return-this', 'returns the locale configured');
+ moment.locale('return-this', null);
+});
+
+test('changing the global locale doesn\'t affect existing instances', function (assert) {
+ var mom = moment();
+ moment.locale('fr');
+ assert.equal('en', mom.locale());
+});
+
+test('setting a language on instance returns the original moment for chaining', function (assert) {
+ test.expectedDeprecations('moment().lang()');
+ var mom = moment();
+
+ assert.equal(mom.lang('fr'), mom, 'setting the language (lang) returns the original moment for chaining');
+ assert.equal(mom.locale('it'), mom, 'setting the language (locale) returns the original moment for chaining');
+});
+
+test('lang(key) changes the language of the instance', function (assert) {
+ test.expectedDeprecations('moment().lang()');
+ var m = moment().month(0);
+ m.lang('fr');
+ assert.equal(m.locale(), 'fr', 'm.lang(key) changes instance locale');
+});
+
+test('moment#locale(false) resets to global locale', function (assert) {
+ var m = moment();
+
+ moment.locale('fr');
+ m.locale('it');
+
+ assert.equal(moment.locale(), 'fr', 'global locale is it');
+ assert.equal(m.locale(), 'it', 'instance locale is it');
+ m.locale(false);
+ assert.equal(m.locale(), 'fr', 'instance locale reset to global locale');
+});
+
+test('moment().locale with missing key doesn\'t change locale', function (assert) {
+ assert.equal(moment().locale('boo').localeData(), moment.localeData(),
+ 'preserve global locale in case of bad locale id');
+});
+
+test('moment().lang with missing key doesn\'t change locale', function (assert) {
+ test.expectedDeprecations('moment().lang()');
+ assert.equal(moment().lang('boo').localeData(), moment.localeData(),
+ 'preserve global locale in case of bad locale id');
+});
+
+
+// TODO: Enable this after fixing pl months parse hack hack
+// test('monthsParseExact', function (assert) {
+// var locale = 'test-months-parse-exact';
+
+// moment.defineLocale(locale, {
+// monthsParseExact: true,
+// months: 'A_AA_AAA_B_B B_BB B_C_C-C_C,C2C_D_D+D_D`D*D'.split('_'),
+// monthsShort: 'E_EE_EEE_F_FF_FFF_G_GG_GGG_H_HH_HHH'.split('_')
+// });
+
+// assert.equal(moment('A', 'MMMM', true).month(), 0, 'parse long month 0 with MMMM');
+// assert.equal(moment('AA', 'MMMM', true).month(), 1, 'parse long month 1 with MMMM');
+// assert.equal(moment('AAA', 'MMMM', true).month(), 2, 'parse long month 2 with MMMM');
+// assert.equal(moment('B B', 'MMMM', true).month(), 4, 'parse long month 4 with MMMM');
+// assert.equal(moment('BB B', 'MMMM', true).month(), 5, 'parse long month 5 with MMMM');
+// assert.equal(moment('C-C', 'MMMM', true).month(), 7, 'parse long month 7 with MMMM');
+// assert.equal(moment('C,C2C', 'MMMM', true).month(), 8, 'parse long month 8 with MMMM');
+// assert.equal(moment('D+D', 'MMMM', true).month(), 10, 'parse long month 10 with MMMM');
+// assert.equal(moment('D`D*D', 'MMMM', true).month(), 11, 'parse long month 11 with MMMM');
+
+// assert.equal(moment('E', 'MMM', true).month(), 0, 'parse long month 0 with MMM');
+// assert.equal(moment('EE', 'MMM', true).month(), 1, 'parse long month 1 with MMM');
+// assert.equal(moment('EEE', 'MMM', true).month(), 2, 'parse long month 2 with MMM');
+
+// assert.equal(moment('A', 'MMM').month(), 0, 'non-strict parse long month 0 with MMM');
+// assert.equal(moment('AA', 'MMM').month(), 1, 'non-strict parse long month 1 with MMM');
+// assert.equal(moment('AAA', 'MMM').month(), 2, 'non-strict parse long month 2 with MMM');
+// assert.equal(moment('E', 'MMMM').month(), 0, 'non-strict parse short month 0 with MMMM');
+// assert.equal(moment('EE', 'MMMM').month(), 1, 'non-strict parse short month 1 with MMMM');
+// assert.equal(moment('EEE', 'MMMM').month(), 2, 'non-strict parse short month 2 with MMMM');
+// });
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('locale inheritance');
+
+test('calendar', function (assert) {
+ moment.defineLocale('base-cal', {
+ calendar : {
+ sameDay: '[Today at] HH:mm',
+ nextDay: '[Tomorrow at] HH:mm',
+ nextWeek: '[Next week at] HH:mm',
+ lastDay: '[Yesterday at] HH:mm',
+ lastWeek: '[Last week at] HH:mm',
+ sameElse: '[whatever]'
+ }
+ });
+ moment.defineLocale('child-cal', {
+ parentLocale: 'base-cal',
+ calendar: {
+ sameDay: '[Today] HH:mm',
+ nextDay: '[Tomorrow] HH:mm',
+ nextWeek: '[Next week] HH:mm'
+ }
+ });
+
+ moment.locale('child-cal');
+ var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601);
+ assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today 15:00', 'today uses child version');
+ assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow 12:00', 'tomorrow uses child version');
+ assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week 12:00', 'next week uses child version');
+
+ assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version');
+ assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version');
+ assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -');
+ assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +');
+});
+
+test('missing', function (assert) {
+ moment.defineLocale('base-cal-2', {
+ calendar: {
+ sameDay: '[Today at] HH:mm',
+ nextDay: '[Tomorrow at] HH:mm',
+ nextWeek: '[Next week at] HH:mm',
+ lastDay: '[Yesterday at] HH:mm',
+ lastWeek: '[Last week at] HH:mm',
+ sameElse: '[whatever]'
+ }
+ });
+ moment.defineLocale('child-cal-2', {
+ parentLocale: 'base-cal-2'
+ });
+ moment.locale('child-cal-2');
+ var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601);
+ assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today at 15:00', 'today uses parent version');
+ assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow at 12:00', 'tomorrow uses parent version');
+ assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week at 12:00', 'next week uses parent version');
+ assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version');
+ assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version');
+ assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -');
+ assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +');
+});
+
+// Test function vs obj both directions
+
+test('long date format', function (assert) {
+ moment.defineLocale('base-ldf', {
+ longDateFormat : {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ }
+ });
+ moment.defineLocale('child-ldf', {
+ parentLocale: 'base-ldf',
+ longDateFormat: {
+ LLL : '[child] MMMM D, YYYY h:mm A',
+ LLLL : '[child] dddd, MMMM D, YYYY h:mm A'
+ }
+ });
+
+ moment.locale('child-ldf');
+ var anchor = moment.utc('2015-09-06T12:34:56', moment.ISO_8601);
+ assert.equal(anchor.format('LTS'), '12:34:56 PM', 'LTS uses base');
+ assert.equal(anchor.format('LT'), '12:34 PM', 'LT uses base');
+ assert.equal(anchor.format('L'), '09/06/2015', 'L uses base');
+ assert.equal(anchor.format('l'), '9/6/2015', 'l uses base');
+ assert.equal(anchor.format('LL'), 'September 6, 2015', 'LL uses base');
+ assert.equal(anchor.format('ll'), 'Sep 6, 2015', 'll uses base');
+ assert.equal(anchor.format('LLL'), 'child September 6, 2015 12:34 PM', 'LLL uses child');
+ assert.equal(anchor.format('lll'), 'child Sep 6, 2015 12:34 PM', 'lll uses child');
+ assert.equal(anchor.format('LLLL'), 'child Sunday, September 6, 2015 12:34 PM', 'LLLL uses child');
+ assert.equal(anchor.format('llll'), 'child Sun, Sep 6, 2015 12:34 PM', 'llll uses child');
+});
+
+test('ordinal', function (assert) {
+ moment.defineLocale('base-ordinal-1', {
+ ordinal : '%dx'
+ });
+ moment.defineLocale('child-ordinal-1', {
+ parentLocale: 'base-ordinal-1',
+ ordinal : '%dy'
+ });
+
+ assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string');
+
+ moment.defineLocale('base-ordinal-2', {
+ ordinal : '%dx'
+ });
+ moment.defineLocale('child-ordinal-2', {
+ parentLocale: 'base-ordinal-2',
+ ordinal : function (num) {
+ return num + 'y';
+ }
+ });
+
+ assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child function');
+
+ moment.defineLocale('base-ordinal-3', {
+ ordinal : function (num) {
+ return num + 'x';
+ }
+ });
+ moment.defineLocale('child-ordinal-3', {
+ parentLocale: 'base-ordinal-3',
+ ordinal : '%dy'
+ });
+
+ assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string (overwrite parent function)');
+});
+
+test('ordinal parse', function (assert) {
+ moment.defineLocale('base-ordinal-parse-1', {
+ ordinalParse : /\d{1,2}x/
+ });
+ moment.defineLocale('child-ordinal-parse-1', {
+ parentLocale: 'base-ordinal-parse-1',
+ ordinalParse : /\d{1,2}y/
+ });
+
+ assert.ok(moment.utc('2015-01-1y', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child');
+
+ moment.defineLocale('base-ordinal-parse-2', {
+ ordinalParse : /\d{1,2}x/
+ });
+ moment.defineLocale('child-ordinal-parse-2', {
+ parentLocale: 'base-ordinal-parse-2',
+ ordinalParse : /\d{1,2}/
+ });
+
+ assert.ok(moment.utc('2015-01-1', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child (default)');
+});
+
+test('months', function (assert) {
+ moment.defineLocale('base-months', {
+ months : 'One_Two_Three_Four_Five_Six_Seven_Eight_Nine_Ten_Eleven_Twelve'.split('_')
+ });
+ moment.defineLocale('child-months', {
+ parentLocale: 'base-months',
+ months : 'First_Second_Third_Fourth_Fifth_Sixth_Seventh_Eighth_Ninth_Tenth_Eleventh_Twelveth '.split('_')
+ });
+ assert.ok(moment.utc('2015-01-01', 'YYYY-MM-DD').format('MMMM'), 'First', 'months uses child');
+});
+
+test('define child locale before parent', function (assert) {
+ moment.defineLocale('months-x', null);
+ moment.defineLocale('base-months-x', null);
+
+ moment.defineLocale('months-x', {
+ parentLocale: 'base-months-x',
+ months : 'First_Second_Third_Fourth_Fifth_Sixth_Seventh_Eighth_Ninth_Tenth_Eleventh_Twelveth '.split('_')
+ });
+ assert.equal(moment.locale(), 'en', 'failed to set a locale requiring missing parent');
+ moment.defineLocale('base-months-x', {
+ months : 'One_Two_Three_Four_Five_Six_Seven_Eight_Nine_Ten_Eleven_Twelve'.split('_')
+ });
+ assert.equal(moment.locale(), 'base-months-x', 'defineLocale should also set the locale (regardless of child locales)');
+
+ assert.equal(moment().locale('months-x').month(0).format('MMMM'), 'First', 'loading child before parent locale works');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('locale update');
+
+test('calendar', function (assert) {
+ moment.defineLocale('cal', null);
+ moment.defineLocale('cal', {
+ calendar : {
+ sameDay: '[Today at] HH:mm',
+ nextDay: '[Tomorrow at] HH:mm',
+ nextWeek: '[Next week at] HH:mm',
+ lastDay: '[Yesterday at] HH:mm',
+ lastWeek: '[Last week at] HH:mm',
+ sameElse: '[whatever]'
+ }
+ });
+ moment.updateLocale('cal', {
+ calendar: {
+ sameDay: '[Today] HH:mm',
+ nextDay: '[Tomorrow] HH:mm',
+ nextWeek: '[Next week] HH:mm'
+ }
+ });
+
+ moment.locale('cal');
+ var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601);
+ assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today 15:00', 'today uses child version');
+ assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow 12:00', 'tomorrow uses child version');
+ assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week 12:00', 'next week uses child version');
+
+ assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version');
+ assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version');
+ assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -');
+ assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +');
+});
+
+test('missing', function (assert) {
+ moment.defineLocale('cal-2', null);
+ moment.defineLocale('cal-2', {
+ calendar: {
+ sameDay: '[Today at] HH:mm',
+ nextDay: '[Tomorrow at] HH:mm',
+ nextWeek: '[Next week at] HH:mm',
+ lastDay: '[Yesterday at] HH:mm',
+ lastWeek: '[Last week at] HH:mm',
+ sameElse: '[whatever]'
+ }
+ });
+ moment.updateLocale('cal-2', {
+ });
+ moment.locale('cal-2');
+ var anchor = moment.utc('2015-05-05T12:00:00', moment.ISO_8601);
+ assert.equal(anchor.clone().add(3, 'hours').calendar(anchor), 'Today at 15:00', 'today uses parent version');
+ assert.equal(anchor.clone().add(1, 'day').calendar(anchor), 'Tomorrow at 12:00', 'tomorrow uses parent version');
+ assert.equal(anchor.clone().add(3, 'days').calendar(anchor), 'Next week at 12:00', 'next week uses parent version');
+ assert.equal(anchor.clone().subtract(1, 'day').calendar(anchor), 'Yesterday at 12:00', 'yesterday uses parent version');
+ assert.equal(anchor.clone().subtract(3, 'days').calendar(anchor), 'Last week at 12:00', 'last week uses parent version');
+ assert.equal(anchor.clone().subtract(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version -');
+ assert.equal(anchor.clone().add(7, 'days').calendar(anchor), 'whatever', 'sameElse uses parent version +');
+});
+
+// Test function vs obj both directions
+
+test('long date format', function (assert) {
+ moment.defineLocale('ldf', null);
+ moment.defineLocale('ldf', {
+ longDateFormat : {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ }
+ });
+ moment.updateLocale('ldf', {
+ longDateFormat: {
+ LLL : '[child] MMMM D, YYYY h:mm A',
+ LLLL : '[child] dddd, MMMM D, YYYY h:mm A'
+ }
+ });
+
+ moment.locale('ldf');
+ var anchor = moment.utc('2015-09-06T12:34:56', moment.ISO_8601);
+ assert.equal(anchor.format('LTS'), '12:34:56 PM', 'LTS uses base');
+ assert.equal(anchor.format('LT'), '12:34 PM', 'LT uses base');
+ assert.equal(anchor.format('L'), '09/06/2015', 'L uses base');
+ assert.equal(anchor.format('l'), '9/6/2015', 'l uses base');
+ assert.equal(anchor.format('LL'), 'September 6, 2015', 'LL uses base');
+ assert.equal(anchor.format('ll'), 'Sep 6, 2015', 'll uses base');
+ assert.equal(anchor.format('LLL'), 'child September 6, 2015 12:34 PM', 'LLL uses child');
+ assert.equal(anchor.format('lll'), 'child Sep 6, 2015 12:34 PM', 'lll uses child');
+ assert.equal(anchor.format('LLLL'), 'child Sunday, September 6, 2015 12:34 PM', 'LLLL uses child');
+ assert.equal(anchor.format('llll'), 'child Sun, Sep 6, 2015 12:34 PM', 'llll uses child');
+});
+
+test('ordinal', function (assert) {
+ moment.defineLocale('ordinal-1', null);
+ moment.defineLocale('ordinal-1', {
+ ordinal : '%dx'
+ });
+ moment.updateLocale('ordinal-1', {
+ ordinal : '%dy'
+ });
+
+ assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string');
+
+ moment.defineLocale('ordinal-2', null);
+ moment.defineLocale('ordinal-2', {
+ ordinal : '%dx'
+ });
+ moment.updateLocale('ordinal-2', {
+ ordinal : function (num) {
+ return num + 'y';
+ }
+ });
+
+ assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child function');
+
+ moment.defineLocale('ordinal-3', null);
+ moment.defineLocale('ordinal-3', {
+ ordinal : function (num) {
+ return num + 'x';
+ }
+ });
+ moment.updateLocale('ordinal-3', {
+ ordinal : '%dy'
+ });
+
+ assert.equal(moment.utc('2015-02-03', moment.ISO_8601).format('Do'), '3y', 'ordinal uses child string (overwrite parent function)');
+});
+
+test('ordinal parse', function (assert) {
+ moment.defineLocale('ordinal-parse-1', null);
+ moment.defineLocale('ordinal-parse-1', {
+ ordinalParse : /\d{1,2}x/
+ });
+ moment.updateLocale('ordinal-parse-1', {
+ ordinalParse : /\d{1,2}y/
+ });
+
+ assert.ok(moment.utc('2015-01-1y', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child');
+
+ moment.defineLocale('ordinal-parse-2', null);
+ moment.defineLocale('ordinal-parse-2', {
+ ordinalParse : /\d{1,2}x/
+ });
+ moment.updateLocale('ordinal-parse-2', {
+ ordinalParse : /\d{1,2}/
+ });
+
+ assert.ok(moment.utc('2015-01-1', 'YYYY-MM-Do', true).isValid(), 'ordinal parse uses child (default)');
+});
+
+test('months', function (assert) {
+ moment.defineLocale('months', null);
+ moment.defineLocale('months', {
+ months : 'One_Two_Three_Four_Five_Six_Seven_Eight_Nine_Ten_Eleven_Twelve'.split('_')
+ });
+ moment.updateLocale('months', {
+ parentLocale: 'base-months',
+ months : 'First_Second_Third_Fourth_Fifth_Sixth_Seventh_Eighth_Ninth_Tenth_Eleventh_Twelveth '.split('_')
+ });
+ assert.ok(moment.utc('2015-01-01', 'YYYY-MM-DD').format('MMMM'), 'First', 'months uses child');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('min max');
+
+test('min', function (assert) {
+ var now = moment(),
+ future = now.clone().add(1, 'month'),
+ past = now.clone().subtract(1, 'month'),
+ invalid = moment.invalid();
+
+ assert.equal(moment.min(now, future, past), past, 'min(now, future, past)');
+ assert.equal(moment.min(future, now, past), past, 'min(future, now, past)');
+ assert.equal(moment.min(future, past, now), past, 'min(future, past, now)');
+ assert.equal(moment.min(past, future, now), past, 'min(past, future, now)');
+ assert.equal(moment.min(now, past), past, 'min(now, past)');
+ assert.equal(moment.min(past, now), past, 'min(past, now)');
+ assert.equal(moment.min(now), now, 'min(now, past)');
+
+ assert.equal(moment.min([now, future, past]), past, 'min([now, future, past])');
+ assert.equal(moment.min([now, past]), past, 'min(now, past)');
+ assert.equal(moment.min([now]), now, 'min(now)');
+
+ assert.equal(moment.min([now, invalid]), invalid, 'min(now, invalid)');
+ assert.equal(moment.min([invalid, now]), invalid, 'min(invalid, now)');
+});
+
+test('max', function (assert) {
+ var now = moment(),
+ future = now.clone().add(1, 'month'),
+ past = now.clone().subtract(1, 'month'),
+ invalid = moment.invalid();
+
+ assert.equal(moment.max(now, future, past), future, 'max(now, future, past)');
+ assert.equal(moment.max(future, now, past), future, 'max(future, now, past)');
+ assert.equal(moment.max(future, past, now), future, 'max(future, past, now)');
+ assert.equal(moment.max(past, future, now), future, 'max(past, future, now)');
+ assert.equal(moment.max(now, past), now, 'max(now, past)');
+ assert.equal(moment.max(past, now), now, 'max(past, now)');
+ assert.equal(moment.max(now), now, 'max(now, past)');
+
+ assert.equal(moment.max([now, future, past]), future, 'max([now, future, past])');
+ assert.equal(moment.max([now, past]), now, 'max(now, past)');
+ assert.equal(moment.max([now]), now, 'max(now)');
+
+ assert.equal(moment.max([now, invalid]), invalid, 'max(now, invalid)');
+ assert.equal(moment.max([invalid, now]), invalid, 'max(invalid, now)');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('mutable');
+
+test('manipulation methods', function (assert) {
+ var m = moment();
+
+ assert.equal(m, m.year(2011), 'year() should be mutable');
+ assert.equal(m, m.month(1), 'month() should be mutable');
+ assert.equal(m, m.hours(7), 'hours() should be mutable');
+ assert.equal(m, m.minutes(33), 'minutes() should be mutable');
+ assert.equal(m, m.seconds(44), 'seconds() should be mutable');
+ assert.equal(m, m.milliseconds(55), 'milliseconds() should be mutable');
+ assert.equal(m, m.day(2), 'day() should be mutable');
+ assert.equal(m, m.startOf('week'), 'startOf() should be mutable');
+ assert.equal(m, m.add(1, 'days'), 'add() should be mutable');
+ assert.equal(m, m.subtract(2, 'years'), 'subtract() should be mutable');
+ assert.equal(m, m.local(), 'local() should be mutable');
+ assert.equal(m, m.utc(), 'utc() should be mutable');
+});
+
+test('non mutable methods', function (assert) {
+ var m = moment();
+ assert.notEqual(m, m.clone(), 'clone() should not be mutable');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('normalize units');
+
+test('normalize units', function (assert) {
+ var fullKeys = ['year', 'quarter', 'month', 'isoWeek', 'week', 'day', 'hour', 'minute', 'second', 'millisecond', 'date', 'dayOfYear', 'weekday', 'isoWeekday', 'weekYear', 'isoWeekYear'],
+ aliases = ['y', 'Q', 'M', 'W', 'w', 'd', 'h', 'm', 's', 'ms', 'D', 'DDD', 'e', 'E', 'gg', 'GG'],
+ length = fullKeys.length,
+ fullKey,
+ fullKeyCaps,
+ fullKeyPlural,
+ fullKeyCapsPlural,
+ fullKeyLower,
+ alias,
+ index;
+
+ for (index = 0; index < length; index += 1) {
+ fullKey = fullKeys[index];
+ fullKeyCaps = fullKey.toUpperCase();
+ fullKeyLower = fullKey.toLowerCase();
+ fullKeyPlural = fullKey + 's';
+ fullKeyCapsPlural = fullKeyCaps + 's';
+ alias = aliases[index];
+ assert.equal(moment.normalizeUnits(fullKey), fullKey, 'Testing full key ' + fullKey);
+ assert.equal(moment.normalizeUnits(fullKeyCaps), fullKey, 'Testing full key capitalised ' + fullKey);
+ assert.equal(moment.normalizeUnits(fullKeyPlural), fullKey, 'Testing full key plural ' + fullKey);
+ assert.equal(moment.normalizeUnits(fullKeyCapsPlural), fullKey, 'Testing full key capitalised and plural ' + fullKey);
+ assert.equal(moment.normalizeUnits(alias), fullKey, 'Testing alias ' + fullKey);
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('now');
+
+test('now', function (assert) {
+ var startOfTest = new Date().valueOf(),
+ momentNowTime = moment.now(),
+ afterMomentCreationTime = new Date().valueOf();
+
+ assert.ok(startOfTest <= momentNowTime, 'moment now() time should be now, not in the past');
+ assert.ok(momentNowTime <= afterMomentCreationTime, 'moment now() time should be now, not in the future');
+});
+
+test('now - Date mocked', function (assert) {
+ // We need to test mocking the global Date object, so disable 'Read Only' jshint check
+ /* jshint -W020 */
+ var RealDate = Date,
+ customTimeMs = moment('2015-01-01T01:30:00.000Z').valueOf();
+
+ function MockDate() {
+ return new RealDate(customTimeMs);
+ }
+
+ MockDate.now = function () {
+ return new MockDate().valueOf();
+ };
+
+ MockDate.prototype = RealDate.prototype;
+
+ Date = MockDate;
+
+ try {
+ assert.equal(moment().valueOf(), customTimeMs, 'moment now() time should use the global Date object');
+ } finally {
+ Date = RealDate;
+ }
+});
+
+test('now - custom value', function (assert) {
+ var customTimeStr = '2015-01-01T01:30:00.000Z',
+ customTime = moment(customTimeStr, moment.ISO_8601).valueOf(),
+ oldFn = moment.now;
+
+ moment.now = function () {
+ return customTime;
+ };
+
+ try {
+ assert.equal(moment().toISOString(), customTimeStr, 'moment() constructor should use the function defined by moment.now, but it did not');
+ assert.equal(moment.utc().toISOString(), customTimeStr, 'moment() constructor should use the function defined by moment.now, but it did not');
+ } finally {
+ moment.now = oldFn;
+ }
+});
+
+test('empty object, empty array', function (assert) {
+ function assertIsNow(gen, msg) {
+ var before = +(new Date()),
+ mid = gen(),
+ after = +(new Date());
+ assert.ok(before <= +mid && +mid <= after, 'should be now : ' + msg);
+ }
+ assertIsNow(function () {
+ return moment();
+ }, 'moment()');
+ assertIsNow(function () {
+ return moment([]);
+ }, 'moment([])');
+ assertIsNow(function () {
+ return moment({});
+ }, 'moment({})');
+ assertIsNow(function () {
+ return moment.utc();
+ }, 'moment.utc()');
+ assertIsNow(function () {
+ return moment.utc([]);
+ }, 'moment.utc([])');
+ assertIsNow(function () {
+ return moment.utc({});
+ }, 'moment.utc({})');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('parsing flags');
+
+function flags () {
+ return moment.apply(null, arguments).parsingFlags();
+}
+
+test('overflow with array', function (assert) {
+ //months
+ assert.equal(flags([2010, 0]).overflow, -1, 'month 0 valid');
+ assert.equal(flags([2010, 1]).overflow, -1, 'month 1 valid');
+ assert.equal(flags([2010, -1]).overflow, 1, 'month -1 invalid');
+ assert.equal(flags([2100, 12]).overflow, 1, 'month 12 invalid');
+
+ //days
+ assert.equal(flags([2010, 1, 16]).overflow, -1, 'date valid');
+ assert.equal(flags([2010, 1, -1]).overflow, 2, 'date -1 invalid');
+ assert.equal(flags([2010, 1, 0]).overflow, 2, 'date 0 invalid');
+ assert.equal(flags([2010, 1, 32]).overflow, 2, 'date 32 invalid');
+ assert.equal(flags([2012, 1, 29]).overflow, -1, 'date leap year valid');
+ assert.equal(flags([2010, 1, 29]).overflow, 2, 'date leap year invalid');
+
+ //hours
+ assert.equal(flags([2010, 1, 1, 8]).overflow, -1, 'hour valid');
+ assert.equal(flags([2010, 1, 1, 0]).overflow, -1, 'hour 0 valid');
+ assert.equal(flags([2010, 1, 1, -1]).overflow, 3, 'hour -1 invalid');
+ assert.equal(flags([2010, 1, 1, 25]).overflow, 3, 'hour 25 invalid');
+ assert.equal(flags([2010, 1, 1, 24, 1]).overflow, 3, 'hour 24:01 invalid');
+
+ //minutes
+ assert.equal(flags([2010, 1, 1, 8, 15]).overflow, -1, 'minute valid');
+ assert.equal(flags([2010, 1, 1, 8, 0]).overflow, -1, 'minute 0 valid');
+ assert.equal(flags([2010, 1, 1, 8, -1]).overflow, 4, 'minute -1 invalid');
+ assert.equal(flags([2010, 1, 1, 8, 60]).overflow, 4, 'minute 60 invalid');
+
+ //seconds
+ assert.equal(flags([2010, 1, 1, 8, 15, 12]).overflow, -1, 'second valid');
+ assert.equal(flags([2010, 1, 1, 8, 15, 0]).overflow, -1, 'second 0 valid');
+ assert.equal(flags([2010, 1, 1, 8, 15, -1]).overflow, 5, 'second -1 invalid');
+ assert.equal(flags([2010, 1, 1, 8, 15, 60]).overflow, 5, 'second 60 invalid');
+
+ //milliseconds
+ assert.equal(flags([2010, 1, 1, 8, 15, 12, 345]).overflow, -1, 'millisecond valid');
+ assert.equal(flags([2010, 1, 1, 8, 15, 12, 0]).overflow, -1, 'millisecond 0 valid');
+ assert.equal(flags([2010, 1, 1, 8, 15, 12, -1]).overflow, 6, 'millisecond -1 invalid');
+ assert.equal(flags([2010, 1, 1, 8, 15, 12, 1000]).overflow, 6, 'millisecond 1000 invalid');
+
+ // 24 hrs
+ assert.equal(flags([2010, 1, 1, 24, 0, 0, 0]).overflow, -1, '24:00:00.000 is fine');
+ assert.equal(flags([2010, 1, 1, 24, 1, 0, 0]).overflow, 3, '24:01:00.000 is wrong hour');
+ assert.equal(flags([2010, 1, 1, 24, 0, 1, 0]).overflow, 3, '24:00:01.000 is wrong hour');
+ assert.equal(flags([2010, 1, 1, 24, 0, 0, 1]).overflow, 3, '24:00:00.001 is wrong hour');
+});
+
+test('overflow without format', function (assert) {
+ //months
+ assert.equal(flags('2001-01', 'YYYY-MM').overflow, -1, 'month 1 valid');
+ assert.equal(flags('2001-12', 'YYYY-MM').overflow, -1, 'month 12 valid');
+ assert.equal(flags('2001-13', 'YYYY-MM').overflow, 1, 'month 13 invalid');
+
+ //days
+ assert.equal(flags('2010-01-16', 'YYYY-MM-DD').overflow, -1, 'date 16 valid');
+ assert.equal(flags('2010-01-0', 'YYYY-MM-DD').overflow, 2, 'date 0 invalid');
+ assert.equal(flags('2010-01-32', 'YYYY-MM-DD').overflow, 2, 'date 32 invalid');
+ assert.equal(flags('2012-02-29', 'YYYY-MM-DD').overflow, -1, 'date leap year valid');
+ assert.equal(flags('2010-02-29', 'YYYY-MM-DD').overflow, 2, 'date leap year invalid');
+
+ //days of the year
+ assert.equal(flags('2010 300', 'YYYY DDDD').overflow, -1, 'day 300 of year valid');
+ assert.equal(flags('2010 365', 'YYYY DDDD').overflow, -1, 'day 365 of year valid');
+ assert.equal(flags('2010 366', 'YYYY DDDD').overflow, 2, 'day 366 of year invalid');
+ assert.equal(flags('2012 366', 'YYYY DDDD').overflow, -1, 'day 366 of leap year valid');
+ assert.equal(flags('2012 367', 'YYYY DDDD').overflow, 2, 'day 367 of leap year invalid');
+
+ //hours
+ assert.equal(flags('08', 'HH').overflow, -1, 'hour valid');
+ assert.equal(flags('00', 'HH').overflow, -1, 'hour 0 valid');
+ assert.equal(flags('25', 'HH').overflow, 3, 'hour 25 invalid');
+ assert.equal(flags('24:01', 'HH:mm').overflow, 3, 'hour 24:01 invalid');
+
+ //minutes
+ assert.equal(flags('08:15', 'HH:mm').overflow, -1, 'minute valid');
+ assert.equal(flags('08:00', 'HH:mm').overflow, -1, 'minute 0 valid');
+ assert.equal(flags('08:60', 'HH:mm').overflow, 4, 'minute 60 invalid');
+
+ //seconds
+ assert.equal(flags('08:15:12', 'HH:mm:ss').overflow, -1, 'second valid');
+ assert.equal(flags('08:15:00', 'HH:mm:ss').overflow, -1, 'second 0 valid');
+ assert.equal(flags('08:15:60', 'HH:mm:ss').overflow, 5, 'second 60 invalid');
+
+ //milliseconds
+ assert.equal(flags('08:15:12:345', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond valid');
+ assert.equal(flags('08:15:12:000', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond 0 valid');
+
+ //this is OK because we don't match the last digit, so it's 100 ms
+ assert.equal(flags('08:15:12:1000', 'HH:mm:ss:SSSS').overflow, -1, 'millisecond 1000 actually valid');
+});
+
+test('extra tokens', function (assert) {
+ assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD').unusedTokens, [], 'nothing extra');
+ assert.deepEqual(flags('1982-05', 'YYYY-MM-DD').unusedTokens, ['DD'], 'extra formatting token');
+ assert.deepEqual(flags('1982', 'YYYY-MM-DD').unusedTokens, ['MM', 'DD'], 'multiple extra formatting tokens');
+ assert.deepEqual(flags('1982-05', 'YYYY-MM-').unusedTokens, [], 'extra non-formatting token');
+ assert.deepEqual(flags('1982-05-', 'YYYY-MM-DD').unusedTokens, ['DD'], 'non-extra non-formatting token');
+ assert.deepEqual(flags('1982 05 1982', 'YYYY-MM-DD').unusedTokens, [], 'different non-formatting token');
+});
+
+test('extra tokens strict', function (assert) {
+ assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD', true).unusedTokens, [], 'nothing extra');
+ assert.deepEqual(flags('1982-05', 'YYYY-MM-DD', true).unusedTokens, ['-', 'DD'], 'extra formatting token');
+ assert.deepEqual(flags('1982', 'YYYY-MM-DD', true).unusedTokens, ['-', 'MM', '-', 'DD'], 'multiple extra formatting tokens');
+ assert.deepEqual(flags('1982-05', 'YYYY-MM-', true).unusedTokens, ['-'], 'extra non-formatting token');
+ assert.deepEqual(flags('1982-05-', 'YYYY-MM-DD', true).unusedTokens, ['DD'], 'non-extra non-formatting token');
+ assert.deepEqual(flags('1982 05 1982', 'YYYY-MM-DD', true).unusedTokens, ['-', '-'], 'different non-formatting token');
+});
+
+test('unused input', function (assert) {
+ assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD').unusedInput, [], 'normal input');
+ assert.deepEqual(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD').unusedInput, [' this is more stuff'], 'trailing nonsense');
+ assert.deepEqual(flags('1982-05-25 09:30', 'YYYY-MM-DD').unusedInput, [' 09:30'], ['trailing legit-looking input']);
+ assert.deepEqual(flags('1982-05-25 some junk', 'YYYY-MM-DD [some junk]').unusedInput, [], 'junk that actually gets matched');
+ assert.deepEqual(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD').unusedInput, ['stuff at beginning '], 'leading junk');
+ assert.deepEqual(flags('junk 1982 more junk 05 yet more junk25', 'YYYY-MM-DD').unusedInput, ['junk ', ' more junk ', ' yet more junk'], 'interstitial junk');
+});
+
+test('unused input strict', function (assert) {
+ assert.deepEqual(flags('1982-05-25', 'YYYY-MM-DD', true).unusedInput, [], 'normal input');
+ assert.deepEqual(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD', true).unusedInput, [' this is more stuff'], 'trailing nonsense');
+ assert.deepEqual(flags('1982-05-25 09:30', 'YYYY-MM-DD', true).unusedInput, [' 09:30'], ['trailing legit-looking input']);
+ assert.deepEqual(flags('1982-05-25 some junk', 'YYYY-MM-DD [some junk]', true).unusedInput, [], 'junk that actually gets matched');
+ assert.deepEqual(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD', true).unusedInput, ['stuff at beginning '], 'leading junk');
+ assert.deepEqual(flags('junk 1982 more junk 05 yet more junk25', 'YYYY-MM-DD', true).unusedInput, ['junk ', ' more junk ', ' yet more junk'], 'interstitial junk');
+});
+
+test('chars left over', function (assert) {
+ assert.equal(flags('1982-05-25', 'YYYY-MM-DD').charsLeftOver, 0, 'normal input');
+ assert.equal(flags('1982-05-25 this is more stuff', 'YYYY-MM-DD').charsLeftOver, ' this is more stuff'.length, 'trailing nonsense');
+ assert.equal(flags('1982-05-25 09:30', 'YYYY-MM-DD').charsLeftOver, ' 09:30'.length, 'trailing legit-looking input');
+ assert.equal(flags('stuff at beginning 1982-05-25', 'YYYY-MM-DD').charsLeftOver, 'stuff at beginning '.length, 'leading junk');
+ assert.equal(flags('1982 junk 05 more junk25', 'YYYY-MM-DD').charsLeftOver, [' junk ', ' more junk'].join('').length, 'interstitial junk');
+ assert.equal(flags('stuff at beginning 1982 junk 05 more junk25', 'YYYY-MM-DD').charsLeftOver, ['stuff at beginning ', ' junk ', ' more junk'].join('').length, 'leading and interstitial junk');
+});
+
+test('empty', function (assert) {
+ assert.equal(flags('1982-05-25', 'YYYY-MM-DD').empty, false, 'normal input');
+ assert.equal(flags('nothing here', 'YYYY-MM-DD').empty, true, 'pure garbage');
+ assert.equal(flags('junk but has the number 2000 in it', 'YYYY-MM-DD').empty, false, 'only mostly garbage');
+ assert.equal(flags('', 'YYYY-MM-DD').empty, true, 'empty string');
+ assert.equal(flags('', 'YYYY-MM-DD').empty, true, 'blank string');
+});
+
+test('null', function (assert) {
+ assert.equal(flags('1982-05-25', 'YYYY-MM-DD').nullInput, false, 'normal input');
+ assert.equal(flags(null).nullInput, true, 'just null');
+ assert.equal(flags(null, 'YYYY-MM-DD').nullInput, true, 'null with format');
+});
+
+test('invalid month', function (assert) {
+ assert.equal(flags('1982 May', 'YYYY MMMM').invalidMonth, null, 'normal input');
+ assert.equal(flags('1982 Laser', 'YYYY MMMM').invalidMonth, 'Laser', 'bad month name');
+});
+
+test('empty format array', function (assert) {
+ assert.equal(flags('1982 May', ['YYYY MMM']).invalidFormat, false, 'empty format array');
+ assert.equal(flags('1982 May', []).invalidFormat, true, 'empty format array');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+var symbolMap = {
+ '1': '!',
+ '2': '@',
+ '3': '#',
+ '4': '$',
+ '5': '%',
+ '6': '^',
+ '7': '&',
+ '8': '*',
+ '9': '(',
+ '0': ')'
+ };
+var numberMap = {
+ '!': '1',
+ '@': '2',
+ '#': '3',
+ '$': '4',
+ '%': '5',
+ '^': '6',
+ '&': '7',
+ '*': '8',
+ '(': '9',
+ ')': '0'
+ };
+
+module$1('preparse and postformat', {
+ setup: function () {
+ moment.locale('symbol', {
+ preparse: function (string) {
+ return string.replace(/[!@#$%\^&*()]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ }
+ });
+ },
+ teardown: function () {
+ moment.defineLocale('symbol', null);
+ }
+});
+
+test('transform', function (assert) {
+ assert.equal(moment.utc('@)!@-)*-@&', 'YYYY-MM-DD').unix(), 1346025600, 'preparse string + format');
+ assert.equal(moment.utc('@)!@-)*-@&').unix(), 1346025600, 'preparse ISO8601 string');
+ assert.equal(moment.unix(1346025600).utc().format('YYYY-MM-DD'), '@)!@-)*-@&', 'postformat');
+});
+
+test('transform from', function (assert) {
+ var start = moment([2007, 1, 28]);
+
+ assert.equal(start.from(moment([2007, 1, 28]).add({s: 90}), true), '@ minutes', 'postformat should work on moment.fn.from');
+ assert.equal(moment().add(6, 'd').fromNow(true), '^ days', 'postformat should work on moment.fn.fromNow');
+ assert.equal(moment.duration(10, 'h').humanize(), '!) hours', 'postformat should work on moment.duration.fn.humanize');
+});
+
+test('calendar day', function (assert) {
+ var a = moment().hours(12).minutes(0).seconds(0);
+
+ assert.equal(moment(a).calendar(), 'Today at !@:)) PM', 'today at the same time');
+ assert.equal(moment(a).add({m: 25}).calendar(), 'Today at !@:@% PM', 'Now plus 25 min');
+ assert.equal(moment(a).add({h: 1}).calendar(), 'Today at !:)) PM', 'Now plus 1 hour');
+ assert.equal(moment(a).add({d: 1}).calendar(), 'Tomorrow at !@:)) PM', 'tomorrow at the same time');
+ assert.equal(moment(a).subtract({h: 1}).calendar(), 'Today at !!:)) AM', 'Now minus 1 hour');
+ assert.equal(moment(a).subtract({d: 1}).calendar(), 'Yesterday at !@:)) PM', 'yesterday at the same time');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('quarter');
+
+test('library quarter getter', function (assert) {
+ assert.equal(moment([1985, 1, 4]).quarter(), 1, 'Feb 4 1985 is Q1');
+ assert.equal(moment([2029, 8, 18]).quarter(), 3, 'Sep 18 2029 is Q3');
+ assert.equal(moment([2013, 3, 24]).quarter(), 2, 'Apr 24 2013 is Q2');
+ assert.equal(moment([2015, 2, 5]).quarter(), 1, 'Mar 5 2015 is Q1');
+ assert.equal(moment([1970, 0, 2]).quarter(), 1, 'Jan 2 1970 is Q1');
+ assert.equal(moment([2001, 11, 12]).quarter(), 4, 'Dec 12 2001 is Q4');
+ assert.equal(moment([2000, 0, 2]).quarter(), 1, 'Jan 2 2000 is Q1');
+});
+
+test('quarter setter singular', function (assert) {
+ var m = moment([2014, 4, 11]);
+ assert.equal(m.quarter(2).month(), 4, 'set same quarter');
+ assert.equal(m.quarter(3).month(), 7, 'set 3rd quarter');
+ assert.equal(m.quarter(1).month(), 1, 'set 1st quarter');
+ assert.equal(m.quarter(4).month(), 10, 'set 4th quarter');
+});
+
+test('quarter setter plural', function (assert) {
+ var m = moment([2014, 4, 11]);
+ assert.equal(m.quarters(2).month(), 4, 'set same quarter');
+ assert.equal(m.quarters(3).month(), 7, 'set 3rd quarter');
+ assert.equal(m.quarters(1).month(), 1, 'set 1st quarter');
+ assert.equal(m.quarters(4).month(), 10, 'set 4th quarter');
+});
+
+test('quarter setter programmatic', function (assert) {
+ var m = moment([2014, 4, 11]);
+ assert.equal(m.set('quarter', 2).month(), 4, 'set same quarter');
+ assert.equal(m.set('quarter', 3).month(), 7, 'set 3rd quarter');
+ assert.equal(m.set('quarter', 1).month(), 1, 'set 1st quarter');
+ assert.equal(m.set('quarter', 4).month(), 10, 'set 4th quarter');
+});
+
+test('quarter setter programmatic plural', function (assert) {
+ var m = moment([2014, 4, 11]);
+ assert.equal(m.set('quarters', 2).month(), 4, 'set same quarter');
+ assert.equal(m.set('quarters', 3).month(), 7, 'set 3rd quarter');
+ assert.equal(m.set('quarters', 1).month(), 1, 'set 1st quarter');
+ assert.equal(m.set('quarters', 4).month(), 10, 'set 4th quarter');
+});
+
+test('quarter setter programmatic abbr', function (assert) {
+ var m = moment([2014, 4, 11]);
+ assert.equal(m.set('Q', 2).month(), 4, 'set same quarter');
+ assert.equal(m.set('Q', 3).month(), 7, 'set 3rd quarter');
+ assert.equal(m.set('Q', 1).month(), 1, 'set 1st quarter');
+ assert.equal(m.set('Q', 4).month(), 10, 'set 4th quarter');
+});
+
+test('quarter setter only month changes', function (assert) {
+ var m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(4);
+ assert.equal(m.year(), 2014, 'keep year');
+ assert.equal(m.month(), 10, 'set month');
+ assert.equal(m.date(), 11, 'keep date');
+ assert.equal(m.hour(), 1, 'keep hour');
+ assert.equal(m.minute(), 2, 'keep minutes');
+ assert.equal(m.second(), 3, 'keep seconds');
+ assert.equal(m.millisecond(), 4, 'keep milliseconds');
+});
+
+test('quarter setter bubble to next year', function (assert) {
+ var m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(7);
+ assert.equal(m.year(), 2015, 'year bubbled');
+ assert.equal(m.month(), 7, 'set month');
+ assert.equal(m.date(), 11, 'keep date');
+ assert.equal(m.hour(), 1, 'keep hour');
+ assert.equal(m.minute(), 2, 'keep minutes');
+ assert.equal(m.second(), 3, 'keep seconds');
+ assert.equal(m.millisecond(), 4, 'keep milliseconds');
+});
+
+test('quarter diff', function (assert) {
+ assert.equal(moment('2014-01-01').diff(moment('2014-04-01'), 'quarter'),
+ -1, 'diff -1 quarter');
+ assert.equal(moment('2014-04-01').diff(moment('2014-01-01'), 'quarter'),
+ 1, 'diff 1 quarter');
+ assert.equal(moment('2014-05-01').diff(moment('2014-01-01'), 'quarter'),
+ 1, 'diff 1 quarter');
+ assert.ok(Math.abs((4 / 3) - moment('2014-05-01').diff(
+ moment('2014-01-01'), 'quarter', true)) < 0.00001,
+ 'diff 1 1/3 quarter');
+ assert.equal(moment('2015-01-01').diff(moment('2014-01-01'), 'quarter'),
+ 4, 'diff 4 quarters');
+});
+
+test('quarter setter bubble to previous year', function (assert) {
+ var m = moment([2014, 4, 11, 1, 2, 3, 4]).quarter(-3);
+ assert.equal(m.year(), 2013, 'year bubbled');
+ assert.equal(m.month(), 1, 'set month');
+ assert.equal(m.date(), 11, 'keep date');
+ assert.equal(m.hour(), 1, 'keep hour');
+ assert.equal(m.minute(), 2, 'keep minutes');
+ assert.equal(m.second(), 3, 'keep seconds');
+ assert.equal(m.millisecond(), 4, 'keep milliseconds');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('relative time');
+
+test('default thresholds fromNow', function (assert) {
+ var a = moment();
+
+ // Seconds to minutes threshold
+ a.subtract(44, 'seconds');
+ assert.equal(a.fromNow(), 'a few seconds ago', 'Below default seconds to minutes threshold');
+ a.subtract(1, 'seconds');
+ assert.equal(a.fromNow(), 'a minute ago', 'Above default seconds to minutes threshold');
+
+ // Minutes to hours threshold
+ a = moment();
+ a.subtract(44, 'minutes');
+ assert.equal(a.fromNow(), '44 minutes ago', 'Below default minute to hour threshold');
+ a.subtract(1, 'minutes');
+ assert.equal(a.fromNow(), 'an hour ago', 'Above default minute to hour threshold');
+
+ // Hours to days threshold
+ a = moment();
+ a.subtract(21, 'hours');
+ assert.equal(a.fromNow(), '21 hours ago', 'Below default hours to day threshold');
+ a.subtract(1, 'hours');
+ assert.equal(a.fromNow(), 'a day ago', 'Above default hours to day threshold');
+
+ // Days to month threshold
+ a = moment();
+ a.subtract(25, 'days');
+ assert.equal(a.fromNow(), '25 days ago', 'Below default days to month (singular) threshold');
+ a.subtract(1, 'days');
+ assert.equal(a.fromNow(), 'a month ago', 'Above default days to month (singular) threshold');
+
+ // months to year threshold
+ a = moment();
+ a.subtract(10, 'months');
+ assert.equal(a.fromNow(), '10 months ago', 'Below default days to years threshold');
+ a.subtract(1, 'month');
+ assert.equal(a.fromNow(), 'a year ago', 'Above default days to years threshold');
+});
+
+test('default thresholds toNow', function (assert) {
+ var a = moment();
+
+ // Seconds to minutes threshold
+ a.subtract(44, 'seconds');
+ assert.equal(a.toNow(), 'in a few seconds', 'Below default seconds to minutes threshold');
+ a.subtract(1, 'seconds');
+ assert.equal(a.toNow(), 'in a minute', 'Above default seconds to minutes threshold');
+
+ // Minutes to hours threshold
+ a = moment();
+ a.subtract(44, 'minutes');
+ assert.equal(a.toNow(), 'in 44 minutes', 'Below default minute to hour threshold');
+ a.subtract(1, 'minutes');
+ assert.equal(a.toNow(), 'in an hour', 'Above default minute to hour threshold');
+
+ // Hours to days threshold
+ a = moment();
+ a.subtract(21, 'hours');
+ assert.equal(a.toNow(), 'in 21 hours', 'Below default hours to day threshold');
+ a.subtract(1, 'hours');
+ assert.equal(a.toNow(), 'in a day', 'Above default hours to day threshold');
+
+ // Days to month threshold
+ a = moment();
+ a.subtract(25, 'days');
+ assert.equal(a.toNow(), 'in 25 days', 'Below default days to month (singular) threshold');
+ a.subtract(1, 'days');
+ assert.equal(a.toNow(), 'in a month', 'Above default days to month (singular) threshold');
+
+ // months to year threshold
+ a = moment();
+ a.subtract(10, 'months');
+ assert.equal(a.toNow(), 'in 10 months', 'Below default days to years threshold');
+ a.subtract(1, 'month');
+ assert.equal(a.toNow(), 'in a year', 'Above default days to years threshold');
+});
+
+test('custom thresholds', function (assert) {
+ var a;
+
+ // Seconds to minute threshold, under 30
+ moment.relativeTimeThreshold('s', 25);
+
+ a = moment();
+ a.subtract(24, 'seconds');
+ assert.equal(a.fromNow(), 'a few seconds ago', 'Below custom seconds to minute threshold, s < 30');
+ a.subtract(1, 'seconds');
+ assert.equal(a.fromNow(), 'a minute ago', 'Above custom seconds to minute threshold, s < 30');
+
+ // Seconds to minutes threshold
+ moment.relativeTimeThreshold('s', 55);
+
+ a = moment();
+ a.subtract(54, 'seconds');
+ assert.equal(a.fromNow(), 'a few seconds ago', 'Below custom seconds to minutes threshold');
+ a.subtract(1, 'seconds');
+ assert.equal(a.fromNow(), 'a minute ago', 'Above custom seconds to minutes threshold');
+
+ moment.relativeTimeThreshold('s', 45);
+
+ // Minutes to hours threshold
+ moment.relativeTimeThreshold('m', 55);
+ a = moment();
+ a.subtract(54, 'minutes');
+ assert.equal(a.fromNow(), '54 minutes ago', 'Below custom minutes to hours threshold');
+ a.subtract(1, 'minutes');
+ assert.equal(a.fromNow(), 'an hour ago', 'Above custom minutes to hours threshold');
+ moment.relativeTimeThreshold('m', 45);
+
+ // Hours to days threshold
+ moment.relativeTimeThreshold('h', 24);
+ a = moment();
+ a.subtract(23, 'hours');
+ assert.equal(a.fromNow(), '23 hours ago', 'Below custom hours to days threshold');
+ a.subtract(1, 'hours');
+ assert.equal(a.fromNow(), 'a day ago', 'Above custom hours to days threshold');
+ moment.relativeTimeThreshold('h', 22);
+
+ // Days to month threshold
+ moment.relativeTimeThreshold('d', 28);
+ a = moment();
+ a.subtract(27, 'days');
+ assert.equal(a.fromNow(), '27 days ago', 'Below custom days to month (singular) threshold');
+ a.subtract(1, 'days');
+ assert.equal(a.fromNow(), 'a month ago', 'Above custom days to month (singular) threshold');
+ moment.relativeTimeThreshold('d', 26);
+
+ // months to years threshold
+ moment.relativeTimeThreshold('M', 9);
+ a = moment();
+ a.subtract(8, 'months');
+ assert.equal(a.fromNow(), '8 months ago', 'Below custom days to years threshold');
+ a.subtract(1, 'months');
+ assert.equal(a.fromNow(), 'a year ago', 'Above custom days to years threshold');
+ moment.relativeTimeThreshold('M', 11);
+});
+
+test('custom rounding', function (assert) {
+ var roundingDefault = moment.relativeTimeRounding();
+
+ // Round relative time evaluation down
+ moment.relativeTimeRounding(Math.floor);
+
+ moment.relativeTimeThreshold('s', 60);
+ moment.relativeTimeThreshold('m', 60);
+ moment.relativeTimeThreshold('h', 24);
+ moment.relativeTimeThreshold('d', 31);
+ moment.relativeTimeThreshold('M', 12);
+
+ var a = moment.utc();
+ a.subtract({minutes: 59, seconds: 59});
+ assert.equal(a.toNow(), 'in 59 minutes', 'Round down towards the nearest minute');
+
+ a = moment.utc();
+ a.subtract({hours: 23, minutes: 59, seconds: 59});
+ assert.equal(a.toNow(), 'in 23 hours', 'Round down towards the nearest hour');
+
+ a = moment.utc();
+ a.subtract({days: 30, hours: 23, minutes: 59});
+ assert.equal(a.toNow(), 'in 30 days', 'Round down towards the nearest day');
+
+ a = moment.utc();
+ a.subtract({days: 364});
+ assert.equal(a.toNow(), 'in 11 months', 'Round down towards the nearest month');
+
+ a = moment.utc();
+ a.subtract({years: 1, days: 364});
+ assert.equal(a.toNow(), 'in a year', 'Round down towards the nearest year');
+
+ // Do not round relative time evaluation
+ var retainValue = function (value) {
+ return value.toFixed(3);
+ };
+ moment.relativeTimeRounding(retainValue);
+
+ a = moment.utc();
+ a.subtract({hours: 39});
+ assert.equal(a.toNow(), 'in 1.625 days', 'Round down towards the nearest year');
+
+ // Restore defaults
+ moment.relativeTimeThreshold('s', 45);
+ moment.relativeTimeThreshold('m', 45);
+ moment.relativeTimeThreshold('h', 22);
+ moment.relativeTimeThreshold('d', 26);
+ moment.relativeTimeThreshold('M', 11);
+ moment.relativeTimeRounding(roundingDefault);
+});
+
+test('retrive rounding settings', function (assert) {
+ moment.relativeTimeRounding(Math.round);
+ var roundingFunction = moment.relativeTimeRounding();
+
+ assert.equal(roundingFunction, Math.round, 'Can retrieve rounding setting');
+});
+
+test('retrive threshold settings', function (assert) {
+ moment.relativeTimeThreshold('m', 45);
+ var minuteThreshold = moment.relativeTimeThreshold('m');
+
+ assert.equal(minuteThreshold, 45, 'Can retrieve minute setting');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('start and end of units');
+
+test('start of year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('year'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('years'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('y');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 0, 'strip out the month');
+ assert.equal(m.date(), 1, 'strip out the day');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of year', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('year'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('years'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('y');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 11, 'set the month');
+ assert.equal(m.date(), 31, 'set the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of quarter', function (assert) {
+ var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarter'),
+ ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('quarters'),
+ ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).startOf('Q');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.quarter(), 2, 'keep the quarter');
+ assert.equal(m.month(), 3, 'strip out the month');
+ assert.equal(m.date(), 1, 'strip out the day');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of quarter', function (assert) {
+ var m = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarter'),
+ ms = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('quarters'),
+ ma = moment(new Date(2011, 4, 2, 3, 4, 5, 6)).endOf('Q');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.quarter(), 2, 'keep the quarter');
+ assert.equal(m.month(), 5, 'set the month');
+ assert.equal(m.date(), 30, 'set the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of month', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('month'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('months'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('M');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 1, 'strip out the day');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of month', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('month'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('months'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('M');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 28, 'set the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of week', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('week'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('weeks'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('w');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 0, 'rolls back to January');
+ assert.equal(m.day(), 0, 'set day of week');
+ assert.equal(m.date(), 30, 'set correct date');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of week', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('week'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('weeks');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.day(), 6, 'set the day of the week');
+ assert.equal(m.date(), 5, 'set the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of iso-week', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeek'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('isoWeeks'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('W');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 0, 'rollback to January');
+ assert.equal(m.isoWeekday(), 1, 'set day of iso-week');
+ assert.equal(m.date(), 31, 'set correct date');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of iso-week', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeek'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('isoWeeks'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('W');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.isoWeekday(), 7, 'set the day of the week');
+ assert.equal(m.date(), 6, 'set the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of day', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('day'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('days'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('d');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of day', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('day'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('days'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('d');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of date', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('date'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('dates');
+
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 0, 'strip out the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of date', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('date'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('dates');
+
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 23, 'set the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+
+test('start of hour', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hour'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('hours'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('h');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 3, 'keep the hours');
+ assert.equal(m.minutes(), 0, 'strip out the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of hour', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hour'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('hours'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('h');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 3, 'keep the hours');
+ assert.equal(m.minutes(), 59, 'set the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of minute', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minute'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('minutes'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('m');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 3, 'keep the hours');
+ assert.equal(m.minutes(), 4, 'keep the minutes');
+ assert.equal(m.seconds(), 0, 'strip out the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of minute', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minute'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('minutes'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('m');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 3, 'keep the hours');
+ assert.equal(m.minutes(), 4, 'keep the minutes');
+ assert.equal(m.seconds(), 59, 'set the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('start of second', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('second'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('seconds'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).startOf('s');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 3, 'keep the hours');
+ assert.equal(m.minutes(), 4, 'keep the minutes');
+ assert.equal(m.seconds(), 5, 'keep the the seconds');
+ assert.equal(m.milliseconds(), 0, 'strip out the milliseconds');
+});
+
+test('end of second', function (assert) {
+ var m = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('second'),
+ ms = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('seconds'),
+ ma = moment(new Date(2011, 1, 2, 3, 4, 5, 6)).endOf('s');
+ assert.equal(+m, +ms, 'Plural or singular should work');
+ assert.equal(+m, +ma, 'Full or abbreviated should work');
+ assert.equal(m.year(), 2011, 'keep the year');
+ assert.equal(m.month(), 1, 'keep the month');
+ assert.equal(m.date(), 2, 'keep the day');
+ assert.equal(m.hours(), 3, 'keep the hours');
+ assert.equal(m.minutes(), 4, 'keep the minutes');
+ assert.equal(m.seconds(), 5, 'keep the seconds');
+ assert.equal(m.milliseconds(), 999, 'set the seconds');
+});
+
+test('startOf across DST +1', function (assert) {
+ var oldUpdateOffset = moment.updateOffset,
+ // Based on a real story somewhere in America/Los_Angeles
+ dstAt = moment('2014-03-09T02:00:00-08:00').parseZone(),
+ m;
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.isBefore(dstAt)) {
+ mom.utcOffset(-8, keepTime);
+ } else {
+ mom.utcOffset(-7, keepTime);
+ }
+ };
+
+ m = moment('2014-03-15T00:00:00-07:00').parseZone();
+ m.startOf('y');
+ assert.equal(m.format(), '2014-01-01T00:00:00-08:00', 'startOf(\'year\') across +1');
+
+ m = moment('2014-03-15T00:00:00-07:00').parseZone();
+ m.startOf('M');
+ assert.equal(m.format(), '2014-03-01T00:00:00-08:00', 'startOf(\'month\') across +1');
+
+ m = moment('2014-03-09T09:00:00-07:00').parseZone();
+ m.startOf('d');
+ assert.equal(m.format(), '2014-03-09T00:00:00-08:00', 'startOf(\'day\') across +1');
+
+ m = moment('2014-03-09T03:05:00-07:00').parseZone();
+ m.startOf('h');
+ assert.equal(m.format(), '2014-03-09T03:00:00-07:00', 'startOf(\'hour\') after +1');
+
+ m = moment('2014-03-09T01:35:00-08:00').parseZone();
+ m.startOf('h');
+ assert.equal(m.format(), '2014-03-09T01:00:00-08:00', 'startOf(\'hour\') before +1');
+
+ // There is no such time as 2:30-7 to try startOf('hour') across that
+
+ moment.updateOffset = oldUpdateOffset;
+});
+
+test('startOf across DST -1', function (assert) {
+ var oldUpdateOffset = moment.updateOffset,
+ // Based on a real story somewhere in America/Los_Angeles
+ dstAt = moment('2014-11-02T02:00:00-07:00').parseZone(),
+ m;
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.isBefore(dstAt)) {
+ mom.utcOffset(-7, keepTime);
+ } else {
+ mom.utcOffset(-8, keepTime);
+ }
+ };
+
+ m = moment('2014-11-15T00:00:00-08:00').parseZone();
+ m.startOf('y');
+ assert.equal(m.format(), '2014-01-01T00:00:00-07:00', 'startOf(\'year\') across -1');
+
+ m = moment('2014-11-15T00:00:00-08:00').parseZone();
+ m.startOf('M');
+ assert.equal(m.format(), '2014-11-01T00:00:00-07:00', 'startOf(\'month\') across -1');
+
+ m = moment('2014-11-02T09:00:00-08:00').parseZone();
+ m.startOf('d');
+ assert.equal(m.format(), '2014-11-02T00:00:00-07:00', 'startOf(\'day\') across -1');
+
+ // note that utc offset is -8
+ m = moment('2014-11-02T01:30:00-08:00').parseZone();
+ m.startOf('h');
+ assert.equal(m.format(), '2014-11-02T01:00:00-08:00', 'startOf(\'hour\') after +1');
+
+ // note that utc offset is -7
+ m = moment('2014-11-02T01:30:00-07:00').parseZone();
+ m.startOf('h');
+ assert.equal(m.format(), '2014-11-02T01:00:00-07:00', 'startOf(\'hour\') before +1');
+
+ moment.updateOffset = oldUpdateOffset;
+});
+
+test('endOf millisecond and no-arg', function (assert) {
+ var m = moment();
+ assert.equal(+m, +m.clone().endOf(), 'endOf without argument should change time');
+ assert.equal(+m, +m.clone().endOf('ms'), 'endOf with ms argument should change time');
+ assert.equal(+m, +m.clone().endOf('millisecond'), 'endOf with millisecond argument should change time');
+ assert.equal(+m, +m.clone().endOf('milliseconds'), 'endOf with milliseconds argument should change time');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('string prototype');
+
+test('string prototype overrides call', function (assert) {
+ var prior = String.prototype.call, b;
+ String.prototype.call = function () {
+ return null;
+ };
+
+ b = moment(new Date(2011, 7, 28, 15, 25, 50, 125));
+ assert.equal(b.format('MMMM Do YYYY, h:mm a'), 'August 28th 2011, 3:25 pm');
+
+ String.prototype.call = prior;
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('to type');
+
+test('toObject', function (assert) {
+ var expected = {
+ years:2010,
+ months:3,
+ date:5,
+ hours:15,
+ minutes:10,
+ seconds:3,
+ milliseconds:123
+ };
+ assert.deepEqual(moment(expected).toObject(), expected, 'toObject invalid');
+});
+
+test('toArray', function (assert) {
+ var expected = [2014, 11, 26, 11, 46, 58, 17];
+ assert.deepEqual(moment(expected).toArray(), expected, 'toArray invalid');
+});
+
+test('toDate returns a copy of the internal date', function (assert) {
+ var m = moment();
+ var d = m.toDate();
+ m.year(0);
+ assert.notEqual(d, m.toDate());
+});
+
+test('toJSON', function (assert) {
+ if (Date.prototype.toISOString) {
+ var expected = new Date().toISOString();
+ assert.deepEqual(moment(expected).toJSON(), expected, 'toJSON invalid');
+ } else {
+ // IE8
+ expect(0);
+ }
+});
+
+test('toJSON works when moment is frozen', function (assert) {
+ if (Date.prototype.toISOString) {
+ var expected = new Date().toISOString();
+ var m = moment(expected);
+ if (Object.freeze != null) {
+ Object.freeze(m);
+ }
+ assert.deepEqual(m.toJSON(), expected, 'toJSON when frozen invalid');
+ } else {
+ // IE8
+ expect(0);
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('utc');
+
+test('utc and local', function (assert) {
+ var m = moment(Date.UTC(2011, 1, 2, 3, 4, 5, 6)), offset, expected;
+ m.utc();
+ // utc
+ assert.equal(m.date(), 2, 'the day should be correct for utc');
+ assert.equal(m.day(), 3, 'the date should be correct for utc');
+ assert.equal(m.hours(), 3, 'the hours should be correct for utc');
+
+ // local
+ m.local();
+ if (m.utcOffset() < -180) {
+ assert.equal(m.date(), 1, 'the date should be correct for local');
+ assert.equal(m.day(), 2, 'the day should be correct for local');
+ } else {
+ assert.equal(m.date(), 2, 'the date should be correct for local');
+ assert.equal(m.day(), 3, 'the day should be correct for local');
+ }
+ offset = Math.floor(m.utcOffset() / 60);
+ expected = (24 + 3 + offset) % 24;
+ assert.equal(m.hours(), expected, 'the hours (' + m.hours() + ') should be correct for local');
+ assert.equal(moment().utc().utcOffset(), 0, 'timezone in utc should always be zero');
+});
+
+test('creating with utc and no arguments', function (assert) {
+ var startOfTest = new Date().valueOf(),
+ momentDefaultUtcTime = moment.utc().valueOf(),
+ afterMomentCreationTime = new Date().valueOf();
+
+ assert.ok(startOfTest <= momentDefaultUtcTime, 'moment UTC default time should be now, not in the past');
+ assert.ok(momentDefaultUtcTime <= afterMomentCreationTime, 'moment UTC default time should be now, not in the future');
+});
+
+test('creating with utc and a date parameter array', function (assert) {
+ var m = moment.utc([2011, 1, 2, 3, 4, 5, 6]);
+ assert.equal(m.date(), 2, 'the day should be correct for utc array');
+ assert.equal(m.hours(), 3, 'the hours should be correct for utc array');
+
+ m = moment.utc('2011-02-02 3:04:05', 'YYYY-MM-DD HH:mm:ss');
+ assert.equal(m.date(), 2, 'the day should be correct for utc parsing format');
+ assert.equal(m.hours(), 3, 'the hours should be correct for utc parsing format');
+
+ m = moment.utc('2011-02-02T03:04:05+00:00');
+ assert.equal(m.date(), 2, 'the day should be correct for utc parsing iso');
+ assert.equal(m.hours(), 3, 'the hours should be correct for utc parsing iso');
+});
+
+test('creating with utc without timezone', function (assert) {
+ var m = moment.utc('2012-01-02T08:20:00');
+ assert.equal(m.date(), 2, 'the day should be correct for utc parse without timezone');
+ assert.equal(m.hours(), 8, 'the hours should be correct for utc parse without timezone');
+
+ m = moment.utc('2012-01-02T08:20:00+09:00');
+ assert.equal(m.date(), 1, 'the day should be correct for utc parse with timezone');
+ assert.equal(m.hours(), 23, 'the hours should be correct for utc parse with timezone');
+});
+
+test('cloning with utc offset', function (assert) {
+ var m = moment.utc('2012-01-02T08:20:00');
+ assert.equal(moment.utc(m)._isUTC, true, 'the local offset should be converted to UTC');
+ assert.equal(moment.utc(m.clone().utc())._isUTC, true, 'the local offset should stay in UTC');
+
+ m.utcOffset(120);
+ assert.equal(moment.utc(m)._isUTC, true, 'the explicit utc offset should stay in UTC');
+ assert.equal(moment.utc(m).utcOffset(), 0, 'the explicit utc offset should have an offset of 0');
+});
+
+test('weekday with utc', function (assert) {
+ assert.equal(
+ moment('2013-09-15T00:00:00Z').utc().weekday(), // first minute of the day
+ moment('2013-09-15T23:59:00Z').utc().weekday(), // last minute of the day
+ 'a UTC-moment\'s .weekday() should not be affected by the local timezone'
+ );
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('utc offset');
+
+test('setter / getter blackbox', function (assert) {
+ var m = moment([2010]);
+
+ assert.equal(m.clone().utcOffset(0).utcOffset(), 0, 'utcOffset 0');
+
+ assert.equal(m.clone().utcOffset(1).utcOffset(), 60, 'utcOffset 1 is 60');
+ assert.equal(m.clone().utcOffset(60).utcOffset(), 60, 'utcOffset 60');
+ assert.equal(m.clone().utcOffset('+01:00').utcOffset(), 60, 'utcOffset +01:00 is 60');
+ assert.equal(m.clone().utcOffset('+0100').utcOffset(), 60, 'utcOffset +0100 is 60');
+
+ assert.equal(m.clone().utcOffset(-1).utcOffset(), -60, 'utcOffset -1 is -60');
+ assert.equal(m.clone().utcOffset(-60).utcOffset(), -60, 'utcOffset -60');
+ assert.equal(m.clone().utcOffset('-01:00').utcOffset(), -60, 'utcOffset -01:00 is -60');
+ assert.equal(m.clone().utcOffset('-0100').utcOffset(), -60, 'utcOffset -0100 is -60');
+
+ assert.equal(m.clone().utcOffset(1.5).utcOffset(), 90, 'utcOffset 1.5 is 90');
+ assert.equal(m.clone().utcOffset(90).utcOffset(), 90, 'utcOffset 1.5 is 90');
+ assert.equal(m.clone().utcOffset('+01:30').utcOffset(), 90, 'utcOffset +01:30 is 90');
+ assert.equal(m.clone().utcOffset('+0130').utcOffset(), 90, 'utcOffset +0130 is 90');
+
+ assert.equal(m.clone().utcOffset(-1.5).utcOffset(), -90, 'utcOffset -1.5');
+ assert.equal(m.clone().utcOffset(-90).utcOffset(), -90, 'utcOffset -90');
+ assert.equal(m.clone().utcOffset('-01:30').utcOffset(), -90, 'utcOffset +01:30 is 90');
+ assert.equal(m.clone().utcOffset('-0130').utcOffset(), -90, 'utcOffset +0130 is 90');
+ assert.equal(m.clone().utcOffset('+00:10').utcOffset(), 10, 'utcOffset +00:10 is 10');
+ assert.equal(m.clone().utcOffset('-00:10').utcOffset(), -10, 'utcOffset +00:10 is 10');
+ assert.equal(m.clone().utcOffset('+0010').utcOffset(), 10, 'utcOffset +0010 is 10');
+ assert.equal(m.clone().utcOffset('-0010').utcOffset(), -10, 'utcOffset +0010 is 10');
+});
+
+test('utcOffset shorthand hours -> minutes', function (assert) {
+ var i;
+ for (i = -15; i <= 15; ++i) {
+ assert.equal(moment().utcOffset(i).utcOffset(), i * 60,
+ '' + i + ' -> ' + i * 60);
+ }
+ assert.equal(moment().utcOffset(-16).utcOffset(), -16, '-16 -> -16');
+ assert.equal(moment().utcOffset(16).utcOffset(), 16, '16 -> 16');
+});
+
+test('isLocal, isUtc, isUtcOffset', function (assert) {
+ assert.ok(moment().isLocal(), 'moment() creates objects in local time');
+ assert.ok(!moment.utc().isLocal(), 'moment.utc creates objects NOT in local time');
+ assert.ok(moment.utc().local().isLocal(), 'moment.fn.local() converts to local time');
+ assert.ok(!moment().utcOffset(5).isLocal(), 'moment.fn.utcOffset(N) puts objects NOT in local time');
+ assert.ok(moment().utcOffset(5).local().isLocal(), 'moment.fn.local() converts to local time');
+
+ assert.ok(moment.utc().isUtc(), 'moment.utc() creates objects in utc time');
+ assert.ok(moment().utcOffset(0).isUtc(), 'utcOffset(0) is equivalent to utc mode');
+ assert.ok(!moment().utcOffset(1).isUtc(), 'utcOffset(1) is NOT equivalent to utc mode');
+
+ assert.ok(!moment().isUtcOffset(), 'moment() creates objects NOT in utc-offset mode');
+ assert.ok(moment.utc().isUtcOffset(), 'moment.utc() creates objects in utc-offset mode');
+ assert.ok(moment().utcOffset(3).isUtcOffset(), 'utcOffset(N != 0) creates objects in utc-offset mode');
+ assert.ok(moment().utcOffset(0).isUtcOffset(), 'utcOffset(0) creates objects in utc-offset mode');
+});
+
+test('isUTC', function (assert) {
+ assert.ok(moment.utc().isUTC(), 'moment.utc() creates objects in utc time');
+ assert.ok(moment().utcOffset(0).isUTC(), 'utcOffset(0) is equivalent to utc mode');
+ assert.ok(!moment().utcOffset(1).isUTC(), 'utcOffset(1) is NOT equivalent to utc mode');
+});
+
+test('change hours when changing the utc offset', function (assert) {
+ var m = moment.utc([2000, 0, 1, 6]);
+ assert.equal(m.hour(), 6, 'UTC 6AM should be 6AM at +0000');
+
+ // sanity check
+ m.utcOffset(0);
+ assert.equal(m.hour(), 6, 'UTC 6AM should be 6AM at +0000');
+
+ m.utcOffset(-60);
+ assert.equal(m.hour(), 5, 'UTC 6AM should be 5AM at -0100');
+
+ m.utcOffset(60);
+ assert.equal(m.hour(), 7, 'UTC 6AM should be 7AM at +0100');
+});
+
+test('change minutes when changing the utc offset', function (assert) {
+ var m = moment.utc([2000, 0, 1, 6, 31]);
+
+ m.utcOffset(0);
+ assert.equal(m.format('HH:mm'), '06:31', 'UTC 6:31AM should be 6:31AM at +0000');
+
+ m.utcOffset(-30);
+ assert.equal(m.format('HH:mm'), '06:01', 'UTC 6:31AM should be 6:01AM at -0030');
+
+ m.utcOffset(30);
+ assert.equal(m.format('HH:mm'), '07:01', 'UTC 6:31AM should be 7:01AM at +0030');
+
+ m.utcOffset(-1380);
+ assert.equal(m.format('HH:mm'), '07:31', 'UTC 6:31AM should be 7:31AM at +1380');
+});
+
+test('distance from the unix epoch', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA),
+ zoneC = moment(zoneA),
+ zoneD = moment(zoneA),
+ zoneE = moment(zoneA);
+
+ zoneB.utc();
+ assert.equal(+zoneA, +zoneB, 'moment should equal moment.utc');
+
+ zoneC.utcOffset(60);
+ assert.equal(+zoneA, +zoneC, 'moment should equal moment.utcOffset(60)');
+
+ zoneD.utcOffset(-480);
+ assert.equal(+zoneA, +zoneD,
+ 'moment should equal moment.utcOffset(-480)');
+
+ zoneE.utcOffset(-1000);
+ assert.equal(+zoneA, +zoneE,
+ 'moment should equal moment.utcOffset(-1000)');
+});
+
+test('update offset after changing any values', function (assert) {
+ var oldOffset = moment.updateOffset,
+ m = moment.utc([2000, 6, 1]);
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.__doChange) {
+ if (+mom > 962409600000) {
+ mom.utcOffset(-120, keepTime);
+ } else {
+ mom.utcOffset(-60, keepTime);
+ }
+ }
+ };
+
+ assert.equal(m.format('ZZ'), '+0000', 'should be at +0000');
+ assert.equal(m.format('HH:mm'), '00:00', 'should start 12AM at +0000 timezone');
+
+ m.__doChange = true;
+ m.add(1, 'h');
+
+ assert.equal(m.format('ZZ'), '-0200', 'should be at -0200');
+ assert.equal(m.format('HH:mm'), '23:00', '1AM at +0000 should be 11PM at -0200 timezone');
+
+ m.subtract(1, 'h');
+
+ assert.equal(m.format('ZZ'), '-0100', 'should be at -0100');
+ assert.equal(m.format('HH:mm'), '23:00', '12AM at +0000 should be 11PM at -0100 timezone');
+
+ moment.updateOffset = oldOffset;
+});
+
+//////////////////
+test('getters and setters', function (assert) {
+ var a = moment([2011, 5, 20]);
+
+ assert.equal(a.clone().utcOffset(-120).year(2012).year(), 2012, 'should get and set year correctly');
+ assert.equal(a.clone().utcOffset(-120).month(1).month(), 1, 'should get and set month correctly');
+ assert.equal(a.clone().utcOffset(-120).date(2).date(), 2, 'should get and set date correctly');
+ assert.equal(a.clone().utcOffset(-120).day(1).day(), 1, 'should get and set day correctly');
+ assert.equal(a.clone().utcOffset(-120).hour(1).hour(), 1, 'should get and set hour correctly');
+ assert.equal(a.clone().utcOffset(-120).minute(1).minute(), 1, 'should get and set minute correctly');
+});
+
+test('getters', function (assert) {
+ var a = moment.utc([2012, 0, 1, 0, 0, 0]);
+
+ assert.equal(a.clone().utcOffset(-120).year(), 2011, 'should get year correctly');
+ assert.equal(a.clone().utcOffset(-120).month(), 11, 'should get month correctly');
+ assert.equal(a.clone().utcOffset(-120).date(), 31, 'should get date correctly');
+ assert.equal(a.clone().utcOffset(-120).hour(), 22, 'should get hour correctly');
+ assert.equal(a.clone().utcOffset(-120).minute(), 0, 'should get minute correctly');
+
+ assert.equal(a.clone().utcOffset(120).year(), 2012, 'should get year correctly');
+ assert.equal(a.clone().utcOffset(120).month(), 0, 'should get month correctly');
+ assert.equal(a.clone().utcOffset(120).date(), 1, 'should get date correctly');
+ assert.equal(a.clone().utcOffset(120).hour(), 2, 'should get hour correctly');
+ assert.equal(a.clone().utcOffset(120).minute(), 0, 'should get minute correctly');
+
+ assert.equal(a.clone().utcOffset(90).year(), 2012, 'should get year correctly');
+ assert.equal(a.clone().utcOffset(90).month(), 0, 'should get month correctly');
+ assert.equal(a.clone().utcOffset(90).date(), 1, 'should get date correctly');
+ assert.equal(a.clone().utcOffset(90).hour(), 1, 'should get hour correctly');
+ assert.equal(a.clone().utcOffset(90).minute(), 30, 'should get minute correctly');
+});
+
+test('from', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA).utcOffset(-720),
+ zoneC = moment(zoneA).utcOffset(-360),
+ zoneD = moment(zoneA).utcOffset(690),
+ other = moment(zoneA).add(35, 'm');
+
+ assert.equal(zoneA.from(other), zoneB.from(other), 'moment#from should be the same in all zones');
+ assert.equal(zoneA.from(other), zoneC.from(other), 'moment#from should be the same in all zones');
+ assert.equal(zoneA.from(other), zoneD.from(other), 'moment#from should be the same in all zones');
+});
+
+test('diff', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA).utcOffset(-720),
+ zoneC = moment(zoneA).utcOffset(-360),
+ zoneD = moment(zoneA).utcOffset(690),
+ other = moment(zoneA).add(35, 'm');
+
+ assert.equal(zoneA.diff(other), zoneB.diff(other), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other), zoneC.diff(other), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other), zoneD.diff(other), 'moment#diff should be the same in all zones');
+
+ assert.equal(zoneA.diff(other, 'minute', true), zoneB.diff(other, 'minute', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'minute', true), zoneC.diff(other, 'minute', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'minute', true), zoneD.diff(other, 'minute', true), 'moment#diff should be the same in all zones');
+
+ assert.equal(zoneA.diff(other, 'hour', true), zoneB.diff(other, 'hour', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'hour', true), zoneC.diff(other, 'hour', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'hour', true), zoneD.diff(other, 'hour', true), 'moment#diff should be the same in all zones');
+});
+
+test('unix offset and timestamp', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA).utcOffset(-720),
+ zoneC = moment(zoneA).utcOffset(-360),
+ zoneD = moment(zoneA).utcOffset(690);
+
+ assert.equal(zoneA.unix(), zoneB.unix(), 'moment#unix should be the same in all zones');
+ assert.equal(zoneA.unix(), zoneC.unix(), 'moment#unix should be the same in all zones');
+ assert.equal(zoneA.unix(), zoneD.unix(), 'moment#unix should be the same in all zones');
+
+ assert.equal(+zoneA, +zoneB, 'moment#valueOf should be the same in all zones');
+ assert.equal(+zoneA, +zoneC, 'moment#valueOf should be the same in all zones');
+ assert.equal(+zoneA, +zoneD, 'moment#valueOf should be the same in all zones');
+});
+
+test('cloning', function (assert) {
+ assert.equal(moment().utcOffset(-120).clone().utcOffset(), -120,
+ 'explicit cloning should retain the offset');
+ assert.equal(moment().utcOffset(120).clone().utcOffset(), 120,
+ 'explicit cloning should retain the offset');
+ assert.equal(moment(moment().utcOffset(-120)).utcOffset(), -120,
+ 'implicit cloning should retain the offset');
+ assert.equal(moment(moment().utcOffset(120)).utcOffset(), 120,
+ 'implicit cloning should retain the offset');
+});
+
+test('start of / end of', function (assert) {
+ var a = moment.utc([2010, 1, 2, 0, 0, 0]).utcOffset(-450);
+
+ assert.equal(a.clone().startOf('day').hour(), 0,
+ 'start of day should work on moments with utc offset');
+ assert.equal(a.clone().startOf('day').minute(), 0,
+ 'start of day should work on moments with utc offset');
+ assert.equal(a.clone().startOf('hour').minute(), 0,
+ 'start of hour should work on moments with utc offset');
+
+ assert.equal(a.clone().endOf('day').hour(), 23,
+ 'end of day should work on moments with utc offset');
+ assert.equal(a.clone().endOf('day').minute(), 59,
+ 'end of day should work on moments with utc offset');
+ assert.equal(a.clone().endOf('hour').minute(), 59,
+ 'end of hour should work on moments with utc offset');
+});
+
+test('reset offset with moment#utc', function (assert) {
+ var a = moment.utc([2012]).utcOffset(-480);
+
+ assert.equal(a.clone().hour(), 16, 'different utc offset should have different hour');
+ assert.equal(a.clone().utc().hour(), 0, 'calling moment#utc should reset the offset');
+});
+
+test('reset offset with moment#local', function (assert) {
+ var a = moment([2012]).utcOffset(-480);
+
+ assert.equal(a.clone().local().hour(), 0, 'calling moment#local should reset the offset');
+});
+
+test('toDate', function (assert) {
+ var zoneA = new Date(),
+ zoneB = moment(zoneA).utcOffset(-720).toDate(),
+ zoneC = moment(zoneA).utcOffset(-360).toDate(),
+ zoneD = moment(zoneA).utcOffset(690).toDate();
+
+ assert.equal(+zoneA, +zoneB, 'moment#toDate should output a date with the right unix timestamp');
+ assert.equal(+zoneA, +zoneC, 'moment#toDate should output a date with the right unix timestamp');
+ assert.equal(+zoneA, +zoneD, 'moment#toDate should output a date with the right unix timestamp');
+});
+
+test('same / before / after', function (assert) {
+ var zoneA = moment().utc(),
+ zoneB = moment(zoneA).utcOffset(-120),
+ zoneC = moment(zoneA).utcOffset(120);
+
+ assert.ok(zoneA.isSame(zoneB), 'two moments with different offsets should be the same');
+ assert.ok(zoneA.isSame(zoneC), 'two moments with different offsets should be the same');
+
+ assert.ok(zoneA.isSame(zoneB, 'hour'), 'two moments with different offsets should be the same hour');
+ assert.ok(zoneA.isSame(zoneC, 'hour'), 'two moments with different offsets should be the same hour');
+
+ zoneA.add(1, 'hour');
+
+ assert.ok(zoneA.isAfter(zoneB), 'isAfter should work with two moments with different offsets');
+ assert.ok(zoneA.isAfter(zoneC), 'isAfter should work with two moments with different offsets');
+
+ assert.ok(zoneA.isAfter(zoneB, 'hour'), 'isAfter:hour should work with two moments with different offsets');
+ assert.ok(zoneA.isAfter(zoneC, 'hour'), 'isAfter:hour should work with two moments with different offsets');
+
+ zoneA.subtract(2, 'hour');
+
+ assert.ok(zoneA.isBefore(zoneB), 'isBefore should work with two moments with different offsets');
+ assert.ok(zoneA.isBefore(zoneC), 'isBefore should work with two moments with different offsets');
+
+ assert.ok(zoneA.isBefore(zoneB, 'hour'), 'isBefore:hour should work with two moments with different offsets');
+ assert.ok(zoneA.isBefore(zoneC, 'hour'), 'isBefore:hour should work with two moments with different offsets');
+});
+
+test('add / subtract over dst', function (assert) {
+ var oldOffset = moment.updateOffset,
+ m = moment.utc([2000, 2, 31, 3]);
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.clone().utc().month() > 2) {
+ mom.utcOffset(60, keepTime);
+ } else {
+ mom.utcOffset(0, keepTime);
+ }
+ };
+
+ assert.equal(m.hour(), 3, 'should start at 00:00');
+
+ m.add(24, 'hour');
+
+ assert.equal(m.hour(), 4, 'adding 24 hours should disregard dst');
+
+ m.subtract(24, 'hour');
+
+ assert.equal(m.hour(), 3, 'subtracting 24 hours should disregard dst');
+
+ m.add(1, 'day');
+
+ assert.equal(m.hour(), 3, 'adding 1 day should have the same hour');
+
+ m.subtract(1, 'day');
+
+ assert.equal(m.hour(), 3, 'subtracting 1 day should have the same hour');
+
+ m.add(1, 'month');
+
+ assert.equal(m.hour(), 3, 'adding 1 month should have the same hour');
+
+ m.subtract(1, 'month');
+
+ assert.equal(m.hour(), 3, 'subtracting 1 month should have the same hour');
+
+ moment.updateOffset = oldOffset;
+});
+
+test('isDST', function (assert) {
+ var oldOffset = moment.updateOffset;
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.month() > 2 && mom.month() < 9) {
+ mom.utcOffset(60, keepTime);
+ } else {
+ mom.utcOffset(0, keepTime);
+ }
+ };
+
+ assert.ok(!moment().month(0).isDST(), 'Jan should not be summer dst');
+ assert.ok(moment().month(6).isDST(), 'Jul should be summer dst');
+ assert.ok(!moment().month(11).isDST(), 'Dec should not be summer dst');
+
+ moment.updateOffset = function (mom) {
+ if (mom.month() > 2 && mom.month() < 9) {
+ mom.utcOffset(0);
+ } else {
+ mom.utcOffset(60);
+ }
+ };
+
+ assert.ok(moment().month(0).isDST(), 'Jan should be winter dst');
+ assert.ok(!moment().month(6).isDST(), 'Jul should not be winter dst');
+ assert.ok(moment().month(11).isDST(), 'Dec should be winter dst');
+
+ moment.updateOffset = oldOffset;
+});
+
+test('zone names', function (assert) {
+ assert.equal(moment().zoneAbbr(), '', 'Local zone abbr should be empty');
+ assert.equal(moment().format('z'), '', 'Local zone formatted abbr should be empty');
+ assert.equal(moment().zoneName(), '', 'Local zone name should be empty');
+ assert.equal(moment().format('zz'), '', 'Local zone formatted name should be empty');
+
+ assert.equal(moment.utc().zoneAbbr(), 'UTC', 'UTC zone abbr should be UTC');
+ assert.equal(moment.utc().format('z'), 'UTC', 'UTC zone formatted abbr should be UTC');
+ assert.equal(moment.utc().zoneName(), 'Coordinated Universal Time', 'UTC zone abbr should be Coordinated Universal Time');
+ assert.equal(moment.utc().format('zz'), 'Coordinated Universal Time', 'UTC zone formatted abbr should be Coordinated Universal Time');
+});
+
+test('hours alignment with UTC', function (assert) {
+ assert.equal(moment().utcOffset(-120).hasAlignedHourOffset(), true);
+ assert.equal(moment().utcOffset(180).hasAlignedHourOffset(), true);
+ assert.equal(moment().utcOffset(-90).hasAlignedHourOffset(), false);
+ assert.equal(moment().utcOffset(90).hasAlignedHourOffset(), false);
+});
+
+test('hours alignment with other zone', function (assert) {
+ var m = moment().utcOffset(-120);
+
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-90)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(90)), false);
+
+ m = moment().utcOffset(-90);
+
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-180)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(180)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-30)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(30)), true);
+
+ m = moment().utcOffset(60);
+
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-90)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(90)), false);
+
+ m = moment().utcOffset(-25);
+
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(35)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-85)), true);
+
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(-35)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().utcOffset(85)), false);
+});
+
+test('parse zone', function (assert) {
+ var m = moment('2013-01-01T00:00:00-13:00').parseZone();
+ assert.equal(m.utcOffset(), -13 * 60);
+ assert.equal(m.hours(), 0);
+});
+
+test('parse UTC zone', function (assert) {
+ var m = moment('2013-01-01T05:00:00+00:00').parseZone();
+ assert.equal(m.utcOffset(), 0);
+ assert.equal(m.hours(), 5);
+});
+
+test('parse zone static', function (assert) {
+ var m = moment.parseZone('2013-01-01T00:00:00-13:00');
+ assert.equal(m.utcOffset(), -13 * 60);
+ assert.equal(m.hours(), 0);
+});
+
+test('parse zone with more arguments', function (assert) {
+ var m;
+ m = moment.parseZone('2013 01 01 05 -13:00', 'YYYY MM DD HH ZZ');
+ assert.equal(m.format(), '2013-01-01T05:00:00-13:00', 'accept input and format');
+ m = moment.parseZone('2013-01-01-13:00', 'YYYY MM DD ZZ', true);
+ assert.equal(m.isValid(), false, 'accept input, format and strict flag');
+ m = moment.parseZone('2013-01-01-13:00', ['DD MM YYYY ZZ', 'YYYY MM DD ZZ']);
+ assert.equal(m.format(), '2013-01-01T00:00:00-13:00', 'accept input and array of formats');
+});
+
+test('parse zone with a timezone from the format string', function (assert) {
+ var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY ZZ #####').parseZone();
+
+ assert.equal(m.utcOffset(), -4 * 60);
+});
+
+test('parse zone without a timezone included in the format string', function (assert) {
+ var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY').parseZone();
+
+ assert.equal(m.utcOffset(), 11 * 60);
+});
+
+test('timezone format', function (assert) {
+ assert.equal(moment().utcOffset(60).format('ZZ'), '+0100', '-60 -> +0100');
+ assert.equal(moment().utcOffset(90).format('ZZ'), '+0130', '-90 -> +0130');
+ assert.equal(moment().utcOffset(120).format('ZZ'), '+0200', '-120 -> +0200');
+
+ assert.equal(moment().utcOffset(-60).format('ZZ'), '-0100', '+60 -> -0100');
+ assert.equal(moment().utcOffset(-90).format('ZZ'), '-0130', '+90 -> -0130');
+ assert.equal(moment().utcOffset(-120).format('ZZ'), '-0200', '+120 -> -0200');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('week year');
+
+test('iso week year', function (assert) {
+ // Some examples taken from http://en.wikipedia.org/wiki/ISO_week
+ assert.equal(moment([2005, 0, 1]).isoWeekYear(), 2004);
+ assert.equal(moment([2005, 0, 2]).isoWeekYear(), 2004);
+ assert.equal(moment([2005, 0, 3]).isoWeekYear(), 2005);
+ assert.equal(moment([2005, 11, 31]).isoWeekYear(), 2005);
+ assert.equal(moment([2006, 0, 1]).isoWeekYear(), 2005);
+ assert.equal(moment([2006, 0, 2]).isoWeekYear(), 2006);
+ assert.equal(moment([2007, 0, 1]).isoWeekYear(), 2007);
+ assert.equal(moment([2007, 11, 30]).isoWeekYear(), 2007);
+ assert.equal(moment([2007, 11, 31]).isoWeekYear(), 2008);
+ assert.equal(moment([2008, 0, 1]).isoWeekYear(), 2008);
+ assert.equal(moment([2008, 11, 28]).isoWeekYear(), 2008);
+ assert.equal(moment([2008, 11, 29]).isoWeekYear(), 2009);
+ assert.equal(moment([2008, 11, 30]).isoWeekYear(), 2009);
+ assert.equal(moment([2008, 11, 31]).isoWeekYear(), 2009);
+ assert.equal(moment([2009, 0, 1]).isoWeekYear(), 2009);
+ assert.equal(moment([2010, 0, 1]).isoWeekYear(), 2009);
+ assert.equal(moment([2010, 0, 2]).isoWeekYear(), 2009);
+ assert.equal(moment([2010, 0, 3]).isoWeekYear(), 2009);
+ assert.equal(moment([2010, 0, 4]).isoWeekYear(), 2010);
+});
+
+test('week year', function (assert) {
+ // Some examples taken from http://en.wikipedia.org/wiki/ISO_week
+ moment.locale('dow: 1,doy: 4', {week: {dow: 1, doy: 4}}); // like iso
+ assert.equal(moment([2005, 0, 1]).weekYear(), 2004);
+ assert.equal(moment([2005, 0, 2]).weekYear(), 2004);
+ assert.equal(moment([2005, 0, 3]).weekYear(), 2005);
+ assert.equal(moment([2005, 11, 31]).weekYear(), 2005);
+ assert.equal(moment([2006, 0, 1]).weekYear(), 2005);
+ assert.equal(moment([2006, 0, 2]).weekYear(), 2006);
+ assert.equal(moment([2007, 0, 1]).weekYear(), 2007);
+ assert.equal(moment([2007, 11, 30]).weekYear(), 2007);
+ assert.equal(moment([2007, 11, 31]).weekYear(), 2008);
+ assert.equal(moment([2008, 0, 1]).weekYear(), 2008);
+ assert.equal(moment([2008, 11, 28]).weekYear(), 2008);
+ assert.equal(moment([2008, 11, 29]).weekYear(), 2009);
+ assert.equal(moment([2008, 11, 30]).weekYear(), 2009);
+ assert.equal(moment([2008, 11, 31]).weekYear(), 2009);
+ assert.equal(moment([2009, 0, 1]).weekYear(), 2009);
+ assert.equal(moment([2010, 0, 1]).weekYear(), 2009);
+ assert.equal(moment([2010, 0, 2]).weekYear(), 2009);
+ assert.equal(moment([2010, 0, 3]).weekYear(), 2009);
+ assert.equal(moment([2010, 0, 4]).weekYear(), 2010);
+
+ moment.locale('dow: 1,doy: 7', {week: {dow: 1, doy: 7}});
+ assert.equal(moment([2004, 11, 26]).weekYear(), 2004);
+ assert.equal(moment([2004, 11, 27]).weekYear(), 2005);
+ assert.equal(moment([2005, 11, 25]).weekYear(), 2005);
+ assert.equal(moment([2005, 11, 26]).weekYear(), 2006);
+ assert.equal(moment([2006, 11, 31]).weekYear(), 2006);
+ assert.equal(moment([2007, 0, 1]).weekYear(), 2007);
+ assert.equal(moment([2007, 11, 30]).weekYear(), 2007);
+ assert.equal(moment([2007, 11, 31]).weekYear(), 2008);
+ assert.equal(moment([2008, 11, 28]).weekYear(), 2008);
+ assert.equal(moment([2008, 11, 29]).weekYear(), 2009);
+ assert.equal(moment([2009, 11, 27]).weekYear(), 2009);
+ assert.equal(moment([2009, 11, 28]).weekYear(), 2010);
+});
+
+// Verifies that the week number, week day computation is correct for all dow, doy combinations
+test('week year roundtrip', function (assert) {
+ var dow, doy, wd, m, localeName;
+ for (dow = 0; dow < 7; ++dow) {
+ for (doy = dow; doy < dow + 7; ++doy) {
+ for (wd = 0; wd < 7; ++wd) {
+ localeName = 'dow: ' + dow + ', doy: ' + doy;
+ moment.locale(localeName, {week: {dow: dow, doy: doy}});
+ // We use the 10th week as the 1st one can spill to the previous year
+ m = moment('2015 10 ' + wd, 'gggg w d', true);
+ assert.equal(m.format('gggg w d'), '2015 10 ' + wd, 'dow: ' + dow + ' doy: ' + doy + ' wd: ' + wd);
+ m = moment('2015 10 ' + wd, 'gggg w e', true);
+ assert.equal(m.format('gggg w e'), '2015 10 ' + wd, 'dow: ' + dow + ' doy: ' + doy + ' wd: ' + wd);
+ moment.defineLocale(localeName, null);
+ }
+ }
+ }
+});
+
+test('week numbers 2012/2013', function (assert) {
+ moment.locale('dow: 6, doy: 12', {week: {dow: 6, doy: 12}});
+ assert.equal(52, moment('2012-12-28', 'YYYY-MM-DD').week(), '2012-12-28 is week 52'); // 51 -- should be 52?
+ assert.equal(1, moment('2012-12-29', 'YYYY-MM-DD').week(), '2012-12-29 is week 1'); // 52 -- should be 1
+ assert.equal(1, moment('2013-01-01', 'YYYY-MM-DD').week(), '2013-01-01 is week 1'); // 52 -- should be 1
+ assert.equal(2, moment('2013-01-08', 'YYYY-MM-DD').week(), '2013-01-08 is week 2'); // 53 -- should be 2
+ assert.equal(2, moment('2013-01-11', 'YYYY-MM-DD').week(), '2013-01-11 is week 2'); // 53 -- should be 2
+ assert.equal(3, moment('2013-01-12', 'YYYY-MM-DD').week(), '2013-01-12 is week 3'); // 1 -- should be 3
+ assert.equal(52, moment('2012-01-01', 'YYYY-MM-DD').weeksInYear(), 'weeks in 2012 are 52'); // 52
+ moment.defineLocale('dow: 6, doy: 12', null);
+});
+
+test('weeks numbers dow:1 doy:4', function (assert) {
+ moment.locale('dow: 1, doy: 4', {week: {dow: 1, doy: 4}});
+ assert.equal(moment([2012, 0, 1]).week(), 52, 'Jan 1 2012 should be week 52');
+ assert.equal(moment([2012, 0, 2]).week(), 1, 'Jan 2 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).week(), 1, 'Jan 8 2012 should be week 1');
+ assert.equal(moment([2012, 0, 9]).week(), 2, 'Jan 9 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).week(), 2, 'Jan 15 2012 should be week 2');
+ assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1');
+ assert.equal(moment([2007, 0, 7]).week(), 1, 'Jan 7 2007 should be week 1');
+ assert.equal(moment([2007, 0, 8]).week(), 2, 'Jan 8 2007 should be week 2');
+ assert.equal(moment([2007, 0, 14]).week(), 2, 'Jan 14 2007 should be week 2');
+ assert.equal(moment([2007, 0, 15]).week(), 3, 'Jan 15 2007 should be week 3');
+ assert.equal(moment([2007, 11, 31]).week(), 1, 'Dec 31 2007 should be week 1');
+ assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1');
+ assert.equal(moment([2008, 0, 6]).week(), 1, 'Jan 6 2008 should be week 1');
+ assert.equal(moment([2008, 0, 7]).week(), 2, 'Jan 7 2008 should be week 2');
+ assert.equal(moment([2008, 0, 13]).week(), 2, 'Jan 13 2008 should be week 2');
+ assert.equal(moment([2008, 0, 14]).week(), 3, 'Jan 14 2008 should be week 3');
+ assert.equal(moment([2002, 11, 30]).week(), 1, 'Dec 30 2002 should be week 1');
+ assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1');
+ assert.equal(moment([2003, 0, 5]).week(), 1, 'Jan 5 2003 should be week 1');
+ assert.equal(moment([2003, 0, 6]).week(), 2, 'Jan 6 2003 should be week 2');
+ assert.equal(moment([2003, 0, 12]).week(), 2, 'Jan 12 2003 should be week 2');
+ assert.equal(moment([2003, 0, 13]).week(), 3, 'Jan 13 2003 should be week 3');
+ assert.equal(moment([2008, 11, 29]).week(), 1, 'Dec 29 2008 should be week 1');
+ assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1');
+ assert.equal(moment([2009, 0, 4]).week(), 1, 'Jan 4 2009 should be week 1');
+ assert.equal(moment([2009, 0, 5]).week(), 2, 'Jan 5 2009 should be week 2');
+ assert.equal(moment([2009, 0, 11]).week(), 2, 'Jan 11 2009 should be week 2');
+ assert.equal(moment([2009, 0, 13]).week(), 3, 'Jan 12 2009 should be week 3');
+ assert.equal(moment([2009, 11, 28]).week(), 53, 'Dec 28 2009 should be week 53');
+ assert.equal(moment([2010, 0, 1]).week(), 53, 'Jan 1 2010 should be week 53');
+ assert.equal(moment([2010, 0, 3]).week(), 53, 'Jan 3 2010 should be week 53');
+ assert.equal(moment([2010, 0, 4]).week(), 1, 'Jan 4 2010 should be week 1');
+ assert.equal(moment([2010, 0, 10]).week(), 1, 'Jan 10 2010 should be week 1');
+ assert.equal(moment([2010, 0, 11]).week(), 2, 'Jan 11 2010 should be week 2');
+ assert.equal(moment([2010, 11, 27]).week(), 52, 'Dec 27 2010 should be week 52');
+ assert.equal(moment([2011, 0, 1]).week(), 52, 'Jan 1 2011 should be week 52');
+ assert.equal(moment([2011, 0, 2]).week(), 52, 'Jan 2 2011 should be week 52');
+ assert.equal(moment([2011, 0, 3]).week(), 1, 'Jan 3 2011 should be week 1');
+ assert.equal(moment([2011, 0, 9]).week(), 1, 'Jan 9 2011 should be week 1');
+ assert.equal(moment([2011, 0, 10]).week(), 2, 'Jan 10 2011 should be week 2');
+ moment.defineLocale('dow: 1, doy: 4', null);
+});
+
+test('weeks numbers dow:6 doy:12', function (assert) {
+ moment.locale('dow: 6, doy: 12', {week: {dow: 6, doy: 12}});
+ assert.equal(moment([2011, 11, 31]).week(), 1, 'Dec 31 2011 should be week 1');
+ assert.equal(moment([2012, 0, 6]).week(), 1, 'Jan 6 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).week(), 2, 'Jan 7 2012 should be week 2');
+ assert.equal(moment([2012, 0, 13]).week(), 2, 'Jan 13 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).week(), 3, 'Jan 14 2012 should be week 3');
+ assert.equal(moment([2006, 11, 30]).week(), 1, 'Dec 30 2006 should be week 1');
+ assert.equal(moment([2007, 0, 5]).week(), 1, 'Jan 5 2007 should be week 1');
+ assert.equal(moment([2007, 0, 6]).week(), 2, 'Jan 6 2007 should be week 2');
+ assert.equal(moment([2007, 0, 12]).week(), 2, 'Jan 12 2007 should be week 2');
+ assert.equal(moment([2007, 0, 13]).week(), 3, 'Jan 13 2007 should be week 3');
+ assert.equal(moment([2007, 11, 29]).week(), 1, 'Dec 29 2007 should be week 1');
+ assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1');
+ assert.equal(moment([2008, 0, 4]).week(), 1, 'Jan 4 2008 should be week 1');
+ assert.equal(moment([2008, 0, 5]).week(), 2, 'Jan 5 2008 should be week 2');
+ assert.equal(moment([2008, 0, 11]).week(), 2, 'Jan 11 2008 should be week 2');
+ assert.equal(moment([2008, 0, 12]).week(), 3, 'Jan 12 2008 should be week 3');
+ assert.equal(moment([2002, 11, 28]).week(), 1, 'Dec 28 2002 should be week 1');
+ assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1');
+ assert.equal(moment([2003, 0, 3]).week(), 1, 'Jan 3 2003 should be week 1');
+ assert.equal(moment([2003, 0, 4]).week(), 2, 'Jan 4 2003 should be week 2');
+ assert.equal(moment([2003, 0, 10]).week(), 2, 'Jan 10 2003 should be week 2');
+ assert.equal(moment([2003, 0, 11]).week(), 3, 'Jan 11 2003 should be week 3');
+ assert.equal(moment([2008, 11, 27]).week(), 1, 'Dec 27 2008 should be week 1');
+ assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1');
+ assert.equal(moment([2009, 0, 2]).week(), 1, 'Jan 2 2009 should be week 1');
+ assert.equal(moment([2009, 0, 3]).week(), 2, 'Jan 3 2009 should be week 2');
+ assert.equal(moment([2009, 0, 9]).week(), 2, 'Jan 9 2009 should be week 2');
+ assert.equal(moment([2009, 0, 10]).week(), 3, 'Jan 10 2009 should be week 3');
+ assert.equal(moment([2009, 11, 26]).week(), 1, 'Dec 26 2009 should be week 1');
+ assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1');
+ assert.equal(moment([2010, 0, 2]).week(), 2, 'Jan 2 2010 should be week 2');
+ assert.equal(moment([2010, 0, 8]).week(), 2, 'Jan 8 2010 should be week 2');
+ assert.equal(moment([2010, 0, 9]).week(), 3, 'Jan 9 2010 should be week 3');
+ assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1');
+ assert.equal(moment([2011, 0, 7]).week(), 1, 'Jan 7 2011 should be week 1');
+ assert.equal(moment([2011, 0, 8]).week(), 2, 'Jan 8 2011 should be week 2');
+ assert.equal(moment([2011, 0, 14]).week(), 2, 'Jan 14 2011 should be week 2');
+ assert.equal(moment([2011, 0, 15]).week(), 3, 'Jan 15 2011 should be week 3');
+ moment.defineLocale('dow: 6, doy: 12', null);
+});
+
+test('weeks numbers dow:1 doy:7', function (assert) {
+ moment.locale('dow: 1, doy: 7', {week: {dow: 1, doy: 7}});
+ assert.equal(moment([2011, 11, 26]).week(), 1, 'Dec 26 2011 should be week 1');
+ assert.equal(moment([2012, 0, 1]).week(), 1, 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 2]).week(), 2, 'Jan 2 2012 should be week 2');
+ assert.equal(moment([2012, 0, 8]).week(), 2, 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 9]).week(), 3, 'Jan 9 2012 should be week 3');
+ assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1');
+ assert.equal(moment([2007, 0, 7]).week(), 1, 'Jan 7 2007 should be week 1');
+ assert.equal(moment([2007, 0, 8]).week(), 2, 'Jan 8 2007 should be week 2');
+ assert.equal(moment([2007, 0, 14]).week(), 2, 'Jan 14 2007 should be week 2');
+ assert.equal(moment([2007, 0, 15]).week(), 3, 'Jan 15 2007 should be week 3');
+ assert.equal(moment([2007, 11, 31]).week(), 1, 'Dec 31 2007 should be week 1');
+ assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1');
+ assert.equal(moment([2008, 0, 6]).week(), 1, 'Jan 6 2008 should be week 1');
+ assert.equal(moment([2008, 0, 7]).week(), 2, 'Jan 7 2008 should be week 2');
+ assert.equal(moment([2008, 0, 13]).week(), 2, 'Jan 13 2008 should be week 2');
+ assert.equal(moment([2008, 0, 14]).week(), 3, 'Jan 14 2008 should be week 3');
+ assert.equal(moment([2002, 11, 30]).week(), 1, 'Dec 30 2002 should be week 1');
+ assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1');
+ assert.equal(moment([2003, 0, 5]).week(), 1, 'Jan 5 2003 should be week 1');
+ assert.equal(moment([2003, 0, 6]).week(), 2, 'Jan 6 2003 should be week 2');
+ assert.equal(moment([2003, 0, 12]).week(), 2, 'Jan 12 2003 should be week 2');
+ assert.equal(moment([2003, 0, 13]).week(), 3, 'Jan 13 2003 should be week 3');
+ assert.equal(moment([2008, 11, 29]).week(), 1, 'Dec 29 2008 should be week 1');
+ assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1');
+ assert.equal(moment([2009, 0, 4]).week(), 1, 'Jan 4 2009 should be week 1');
+ assert.equal(moment([2009, 0, 5]).week(), 2, 'Jan 5 2009 should be week 2');
+ assert.equal(moment([2009, 0, 11]).week(), 2, 'Jan 11 2009 should be week 2');
+ assert.equal(moment([2009, 0, 12]).week(), 3, 'Jan 12 2009 should be week 3');
+ assert.equal(moment([2009, 11, 28]).week(), 1, 'Dec 28 2009 should be week 1');
+ assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1');
+ assert.equal(moment([2010, 0, 3]).week(), 1, 'Jan 3 2010 should be week 1');
+ assert.equal(moment([2010, 0, 4]).week(), 2, 'Jan 4 2010 should be week 2');
+ assert.equal(moment([2010, 0, 10]).week(), 2, 'Jan 10 2010 should be week 2');
+ assert.equal(moment([2010, 0, 11]).week(), 3, 'Jan 11 2010 should be week 3');
+ assert.equal(moment([2010, 11, 27]).week(), 1, 'Dec 27 2010 should be week 1');
+ assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1');
+ assert.equal(moment([2011, 0, 2]).week(), 1, 'Jan 2 2011 should be week 1');
+ assert.equal(moment([2011, 0, 3]).week(), 2, 'Jan 3 2011 should be week 2');
+ assert.equal(moment([2011, 0, 9]).week(), 2, 'Jan 9 2011 should be week 2');
+ assert.equal(moment([2011, 0, 10]).week(), 3, 'Jan 10 2011 should be week 3');
+ moment.defineLocale('dow: 1, doy: 7', null);
+});
+
+test('weeks numbers dow:0 doy:6', function (assert) {
+ moment.locale('dow: 0, doy: 6', {week: {dow: 0, doy: 6}});
+ assert.equal(moment([2012, 0, 1]).week(), 1, 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).week(), 1, 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).week(), 2, 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).week(), 2, 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).week(), 3, 'Jan 15 2012 should be week 3');
+ assert.equal(moment([2006, 11, 31]).week(), 1, 'Dec 31 2006 should be week 1');
+ assert.equal(moment([2007, 0, 1]).week(), 1, 'Jan 1 2007 should be week 1');
+ assert.equal(moment([2007, 0, 6]).week(), 1, 'Jan 6 2007 should be week 1');
+ assert.equal(moment([2007, 0, 7]).week(), 2, 'Jan 7 2007 should be week 2');
+ assert.equal(moment([2007, 0, 13]).week(), 2, 'Jan 13 2007 should be week 2');
+ assert.equal(moment([2007, 0, 14]).week(), 3, 'Jan 14 2007 should be week 3');
+ assert.equal(moment([2007, 11, 29]).week(), 52, 'Dec 29 2007 should be week 52');
+ assert.equal(moment([2008, 0, 1]).week(), 1, 'Jan 1 2008 should be week 1');
+ assert.equal(moment([2008, 0, 5]).week(), 1, 'Jan 5 2008 should be week 1');
+ assert.equal(moment([2008, 0, 6]).week(), 2, 'Jan 6 2008 should be week 2');
+ assert.equal(moment([2008, 0, 12]).week(), 2, 'Jan 12 2008 should be week 2');
+ assert.equal(moment([2008, 0, 13]).week(), 3, 'Jan 13 2008 should be week 3');
+ assert.equal(moment([2002, 11, 29]).week(), 1, 'Dec 29 2002 should be week 1');
+ assert.equal(moment([2003, 0, 1]).week(), 1, 'Jan 1 2003 should be week 1');
+ assert.equal(moment([2003, 0, 4]).week(), 1, 'Jan 4 2003 should be week 1');
+ assert.equal(moment([2003, 0, 5]).week(), 2, 'Jan 5 2003 should be week 2');
+ assert.equal(moment([2003, 0, 11]).week(), 2, 'Jan 11 2003 should be week 2');
+ assert.equal(moment([2003, 0, 12]).week(), 3, 'Jan 12 2003 should be week 3');
+ assert.equal(moment([2008, 11, 28]).week(), 1, 'Dec 28 2008 should be week 1');
+ assert.equal(moment([2009, 0, 1]).week(), 1, 'Jan 1 2009 should be week 1');
+ assert.equal(moment([2009, 0, 3]).week(), 1, 'Jan 3 2009 should be week 1');
+ assert.equal(moment([2009, 0, 4]).week(), 2, 'Jan 4 2009 should be week 2');
+ assert.equal(moment([2009, 0, 10]).week(), 2, 'Jan 10 2009 should be week 2');
+ assert.equal(moment([2009, 0, 11]).week(), 3, 'Jan 11 2009 should be week 3');
+ assert.equal(moment([2009, 11, 27]).week(), 1, 'Dec 27 2009 should be week 1');
+ assert.equal(moment([2010, 0, 1]).week(), 1, 'Jan 1 2010 should be week 1');
+ assert.equal(moment([2010, 0, 2]).week(), 1, 'Jan 2 2010 should be week 1');
+ assert.equal(moment([2010, 0, 3]).week(), 2, 'Jan 3 2010 should be week 2');
+ assert.equal(moment([2010, 0, 9]).week(), 2, 'Jan 9 2010 should be week 2');
+ assert.equal(moment([2010, 0, 10]).week(), 3, 'Jan 10 2010 should be week 3');
+ assert.equal(moment([2010, 11, 26]).week(), 1, 'Dec 26 2010 should be week 1');
+ assert.equal(moment([2011, 0, 1]).week(), 1, 'Jan 1 2011 should be week 1');
+ assert.equal(moment([2011, 0, 2]).week(), 2, 'Jan 2 2011 should be week 2');
+ assert.equal(moment([2011, 0, 8]).week(), 2, 'Jan 8 2011 should be week 2');
+ assert.equal(moment([2011, 0, 9]).week(), 3, 'Jan 9 2011 should be week 3');
+ moment.defineLocale('dow: 0, doy: 6', null);
+});
+
+test('week year overflows', function (assert) {
+ assert.equal('2005-01-01', moment.utc('2004-W53-6', moment.ISO_8601, true).format('YYYY-MM-DD'), '2004-W53-6 is 1st Jan 2005');
+ assert.equal('2007-12-31', moment.utc('2008-W01-1', moment.ISO_8601, true).format('YYYY-MM-DD'), '2008-W01-1 is 31st Dec 2007');
+});
+
+test('weeks overflow', function (assert) {
+ assert.equal(7, moment.utc('2004-W54-1', moment.ISO_8601, true).parsingFlags().overflow, '2004 has only 53 weeks');
+ assert.equal(7, moment.utc('2004-W00-1', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 0th week');
+});
+
+test('weekday overflow', function (assert) {
+ assert.equal(8, moment.utc('2004-W30-0', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 0 iso weekday');
+ assert.equal(8, moment.utc('2004-W30-8', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 8 iso weekday');
+ assert.equal(8, moment.utc('2004-w30-7', 'gggg-[w]ww-e', true).parsingFlags().overflow, 'there is no 7 \'e\' weekday');
+ assert.equal(8, moment.utc('2004-w30-7', 'gggg-[w]ww-d', true).parsingFlags().overflow, 'there is no 7 \'d\' weekday');
+});
+
+test('week year setter works', function (assert) {
+ for (var year = 2000; year <= 2020; year += 1) {
+ assert.equal(moment.utc('2012-12-31T00:00:00.000Z').isoWeekYear(year).isoWeekYear(), year, 'setting iso-week-year to ' + year);
+ assert.equal(moment.utc('2012-12-31T00:00:00.000Z').weekYear(year).weekYear(), year, 'setting week-year to ' + year);
+ }
+
+ assert.equal(moment.utc('2004-W53-1', moment.ISO_8601, true).isoWeekYear(2013).format('GGGG-[W]WW-E'), '2013-W52-1', '2004-W53-1 to 2013');
+ assert.equal(moment.utc('2004-W53-1', moment.ISO_8601, true).isoWeekYear(2020).format('GGGG-[W]WW-E'), '2020-W53-1', '2004-W53-1 to 2020');
+ assert.equal(moment.utc('2005-W52-1', moment.ISO_8601, true).isoWeekYear(2004).format('GGGG-[W]WW-E'), '2004-W52-1', '2005-W52-1 to 2004');
+ assert.equal(moment.utc('2013-W30-4', moment.ISO_8601, true).isoWeekYear(2015).format('GGGG-[W]WW-E'), '2015-W30-4', '2013-W30-4 to 2015');
+
+ assert.equal(moment.utc('2005-w53-0', 'gggg-[w]ww-e', true).weekYear(2013).format('gggg-[w]ww-e'), '2013-w52-0', '2005-w53-0 to 2013');
+ assert.equal(moment.utc('2005-w53-0', 'gggg-[w]ww-e', true).weekYear(2016).format('gggg-[w]ww-e'), '2016-w53-0', '2005-w53-0 to 2016');
+ assert.equal(moment.utc('2004-w52-0', 'gggg-[w]ww-e', true).weekYear(2005).format('gggg-[w]ww-e'), '2005-w52-0', '2004-w52-0 to 2005');
+ assert.equal(moment.utc('2013-w30-4', 'gggg-[w]ww-e', true).weekYear(2015).format('gggg-[w]ww-e'), '2015-w30-4', '2013-w30-4 to 2015');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('week day');
+
+test('iso weekday', function (assert) {
+ var i;
+
+ for (i = 0; i < 7; ++i) {
+ moment.locale('dow:' + i + ',doy: 6', {week: {dow: i, doy: 6}});
+ assert.equal(moment([1985, 1, 4]).isoWeekday(), 1, 'Feb 4 1985 is Monday -- 1st day');
+ assert.equal(moment([2029, 8, 18]).isoWeekday(), 2, 'Sep 18 2029 is Tuesday -- 2nd day');
+ assert.equal(moment([2013, 3, 24]).isoWeekday(), 3, 'Apr 24 2013 is Wednesday -- 3rd day');
+ assert.equal(moment([2015, 2, 5]).isoWeekday(), 4, 'Mar 5 2015 is Thursday -- 4th day');
+ assert.equal(moment([1970, 0, 2]).isoWeekday(), 5, 'Jan 2 1970 is Friday -- 5th day');
+ assert.equal(moment([2001, 4, 12]).isoWeekday(), 6, 'May 12 2001 is Saturday -- 6th day');
+ assert.equal(moment([2000, 0, 2]).isoWeekday(), 7, 'Jan 2 2000 is Sunday -- 7th day');
+ }
+});
+
+test('iso weekday setter', function (assert) {
+ var a = moment([2011, 0, 10]);
+ assert.equal(moment(a).isoWeekday(1).date(), 10, 'set from mon to mon');
+ assert.equal(moment(a).isoWeekday(4).date(), 13, 'set from mon to thu');
+ assert.equal(moment(a).isoWeekday(7).date(), 16, 'set from mon to sun');
+ assert.equal(moment(a).isoWeekday(-6).date(), 3, 'set from mon to last mon');
+ assert.equal(moment(a).isoWeekday(-3).date(), 6, 'set from mon to last thu');
+ assert.equal(moment(a).isoWeekday(0).date(), 9, 'set from mon to last sun');
+ assert.equal(moment(a).isoWeekday(8).date(), 17, 'set from mon to next mon');
+ assert.equal(moment(a).isoWeekday(11).date(), 20, 'set from mon to next thu');
+ assert.equal(moment(a).isoWeekday(14).date(), 23, 'set from mon to next sun');
+
+ a = moment([2011, 0, 13]);
+ assert.equal(moment(a).isoWeekday(1).date(), 10, 'set from thu to mon');
+ assert.equal(moment(a).isoWeekday(4).date(), 13, 'set from thu to thu');
+ assert.equal(moment(a).isoWeekday(7).date(), 16, 'set from thu to sun');
+ assert.equal(moment(a).isoWeekday(-6).date(), 3, 'set from thu to last mon');
+ assert.equal(moment(a).isoWeekday(-3).date(), 6, 'set from thu to last thu');
+ assert.equal(moment(a).isoWeekday(0).date(), 9, 'set from thu to last sun');
+ assert.equal(moment(a).isoWeekday(8).date(), 17, 'set from thu to next mon');
+ assert.equal(moment(a).isoWeekday(11).date(), 20, 'set from thu to next thu');
+ assert.equal(moment(a).isoWeekday(14).date(), 23, 'set from thu to next sun');
+
+ a = moment([2011, 0, 16]);
+ assert.equal(moment(a).isoWeekday(1).date(), 10, 'set from sun to mon');
+ assert.equal(moment(a).isoWeekday(4).date(), 13, 'set from sun to thu');
+ assert.equal(moment(a).isoWeekday(7).date(), 16, 'set from sun to sun');
+ assert.equal(moment(a).isoWeekday(-6).date(), 3, 'set from sun to last mon');
+ assert.equal(moment(a).isoWeekday(-3).date(), 6, 'set from sun to last thu');
+ assert.equal(moment(a).isoWeekday(0).date(), 9, 'set from sun to last sun');
+ assert.equal(moment(a).isoWeekday(8).date(), 17, 'set from sun to next mon');
+ assert.equal(moment(a).isoWeekday(11).date(), 20, 'set from sun to next thu');
+ assert.equal(moment(a).isoWeekday(14).date(), 23, 'set from sun to next sun');
+});
+
+test('iso weekday setter with day name', function (assert) {
+ moment.locale('en');
+
+ var a = moment([2011, 0, 10]);
+ assert.equal(moment(a).isoWeekday('Monday').date(), 10, 'set from mon to mon');
+ assert.equal(moment(a).isoWeekday('Thursday').date(), 13, 'set from mon to thu');
+ assert.equal(moment(a).isoWeekday('Sunday').date(), 16, 'set from mon to sun');
+
+ a = moment([2011, 0, 13]);
+ assert.equal(moment(a).isoWeekday('Monday').date(), 10, 'set from thu to mon');
+ assert.equal(moment(a).isoWeekday('Thursday').date(), 13, 'set from thu to thu');
+ assert.equal(moment(a).isoWeekday('Sunday').date(), 16, 'set from thu to sun');
+
+ a = moment([2011, 0, 16]);
+ assert.equal(moment(a).isoWeekday('Monday').date(), 10, 'set from sun to mon');
+ assert.equal(moment(a).isoWeekday('Thursday').date(), 13, 'set from sun to thu');
+ assert.equal(moment(a).isoWeekday('Sunday').date(), 16, 'set from sun to sun');
+});
+
+test('weekday first day of week Sunday (dow 0)', function (assert) {
+ moment.locale('dow: 0,doy: 6', {week: {dow: 0, doy: 6}});
+ assert.equal(moment([1985, 1, 3]).weekday(), 0, 'Feb 3 1985 is Sunday -- 0th day');
+ assert.equal(moment([2029, 8, 17]).weekday(), 1, 'Sep 17 2029 is Monday -- 1st day');
+ assert.equal(moment([2013, 3, 23]).weekday(), 2, 'Apr 23 2013 is Tuesday -- 2nd day');
+ assert.equal(moment([2015, 2, 4]).weekday(), 3, 'Mar 4 2015 is Wednesday -- 3nd day');
+ assert.equal(moment([1970, 0, 1]).weekday(), 4, 'Jan 1 1970 is Thursday -- 4th day');
+ assert.equal(moment([2001, 4, 11]).weekday(), 5, 'May 11 2001 is Friday -- 5th day');
+ assert.equal(moment([2000, 0, 1]).weekday(), 6, 'Jan 1 2000 is Saturday -- 6th day');
+});
+
+test('weekday first day of week Monday (dow 1)', function (assert) {
+ moment.locale('dow: 1,doy: 6', {week: {dow: 1, doy: 6}});
+ assert.equal(moment([1985, 1, 4]).weekday(), 0, 'Feb 4 1985 is Monday -- 0th day');
+ assert.equal(moment([2029, 8, 18]).weekday(), 1, 'Sep 18 2029 is Tuesday -- 1st day');
+ assert.equal(moment([2013, 3, 24]).weekday(), 2, 'Apr 24 2013 is Wednesday -- 2nd day');
+ assert.equal(moment([2015, 2, 5]).weekday(), 3, 'Mar 5 2015 is Thursday -- 3nd day');
+ assert.equal(moment([1970, 0, 2]).weekday(), 4, 'Jan 2 1970 is Friday -- 4th day');
+ assert.equal(moment([2001, 4, 12]).weekday(), 5, 'May 12 2001 is Saturday -- 5th day');
+ assert.equal(moment([2000, 0, 2]).weekday(), 6, 'Jan 2 2000 is Sunday -- 6th day');
+});
+
+test('weekday first day of week Tuesday (dow 2)', function (assert) {
+ moment.locale('dow: 2,doy: 6', {week: {dow: 2, doy: 6}});
+ assert.equal(moment([1985, 1, 5]).weekday(), 0, 'Feb 5 1985 is Tuesday -- 0th day');
+ assert.equal(moment([2029, 8, 19]).weekday(), 1, 'Sep 19 2029 is Wednesday -- 1st day');
+ assert.equal(moment([2013, 3, 25]).weekday(), 2, 'Apr 25 2013 is Thursday -- 2nd day');
+ assert.equal(moment([2015, 2, 6]).weekday(), 3, 'Mar 6 2015 is Friday -- 3nd day');
+ assert.equal(moment([1970, 0, 3]).weekday(), 4, 'Jan 3 1970 is Staturday -- 4th day');
+ assert.equal(moment([2001, 4, 13]).weekday(), 5, 'May 13 2001 is Sunday -- 5th day');
+ assert.equal(moment([2000, 0, 3]).weekday(), 6, 'Jan 3 2000 is Monday -- 6th day');
+});
+
+test('weekday first day of week Wednesday (dow 3)', function (assert) {
+ moment.locale('dow: 3,doy: 6', {week: {dow: 3, doy: 6}});
+ assert.equal(moment([1985, 1, 6]).weekday(), 0, 'Feb 6 1985 is Wednesday -- 0th day');
+ assert.equal(moment([2029, 8, 20]).weekday(), 1, 'Sep 20 2029 is Thursday -- 1st day');
+ assert.equal(moment([2013, 3, 26]).weekday(), 2, 'Apr 26 2013 is Friday -- 2nd day');
+ assert.equal(moment([2015, 2, 7]).weekday(), 3, 'Mar 7 2015 is Saturday -- 3nd day');
+ assert.equal(moment([1970, 0, 4]).weekday(), 4, 'Jan 4 1970 is Sunday -- 4th day');
+ assert.equal(moment([2001, 4, 14]).weekday(), 5, 'May 14 2001 is Monday -- 5th day');
+ assert.equal(moment([2000, 0, 4]).weekday(), 6, 'Jan 4 2000 is Tuesday -- 6th day');
+ moment.locale('dow:3,doy:6', null);
+});
+
+test('weekday first day of week Thursday (dow 4)', function (assert) {
+ moment.locale('dow: 4,doy: 6', {week: {dow: 4, doy: 6}});
+ assert.equal(moment([1985, 1, 7]).weekday(), 0, 'Feb 7 1985 is Thursday -- 0th day');
+ assert.equal(moment([2029, 8, 21]).weekday(), 1, 'Sep 21 2029 is Friday -- 1st day');
+ assert.equal(moment([2013, 3, 27]).weekday(), 2, 'Apr 27 2013 is Saturday -- 2nd day');
+ assert.equal(moment([2015, 2, 8]).weekday(), 3, 'Mar 8 2015 is Sunday -- 3nd day');
+ assert.equal(moment([1970, 0, 5]).weekday(), 4, 'Jan 5 1970 is Monday -- 4th day');
+ assert.equal(moment([2001, 4, 15]).weekday(), 5, 'May 15 2001 is Tuesday -- 5th day');
+ assert.equal(moment([2000, 0, 5]).weekday(), 6, 'Jan 5 2000 is Wednesday -- 6th day');
+});
+
+test('weekday first day of week Friday (dow 5)', function (assert) {
+ moment.locale('dow: 5,doy: 6', {week: {dow: 5, doy: 6}});
+ assert.equal(moment([1985, 1, 8]).weekday(), 0, 'Feb 8 1985 is Friday -- 0th day');
+ assert.equal(moment([2029, 8, 22]).weekday(), 1, 'Sep 22 2029 is Staturday -- 1st day');
+ assert.equal(moment([2013, 3, 28]).weekday(), 2, 'Apr 28 2013 is Sunday -- 2nd day');
+ assert.equal(moment([2015, 2, 9]).weekday(), 3, 'Mar 9 2015 is Monday -- 3nd day');
+ assert.equal(moment([1970, 0, 6]).weekday(), 4, 'Jan 6 1970 is Tuesday -- 4th day');
+ assert.equal(moment([2001, 4, 16]).weekday(), 5, 'May 16 2001 is Wednesday -- 5th day');
+ assert.equal(moment([2000, 0, 6]).weekday(), 6, 'Jan 6 2000 is Thursday -- 6th day');
+});
+
+test('weekday first day of week Saturday (dow 6)', function (assert) {
+ moment.locale('dow: 6,doy: 6', {week: {dow: 6, doy: 6}});
+ assert.equal(moment([1985, 1, 9]).weekday(), 0, 'Feb 9 1985 is Staturday -- 0th day');
+ assert.equal(moment([2029, 8, 23]).weekday(), 1, 'Sep 23 2029 is Sunday -- 1st day');
+ assert.equal(moment([2013, 3, 29]).weekday(), 2, 'Apr 29 2013 is Monday -- 2nd day');
+ assert.equal(moment([2015, 2, 10]).weekday(), 3, 'Mar 10 2015 is Tuesday -- 3nd day');
+ assert.equal(moment([1970, 0, 7]).weekday(), 4, 'Jan 7 1970 is Wednesday -- 4th day');
+ assert.equal(moment([2001, 4, 17]).weekday(), 5, 'May 17 2001 is Thursday -- 5th day');
+ assert.equal(moment([2000, 0, 7]).weekday(), 6, 'Jan 7 2000 is Friday -- 6th day');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('weeks');
+
+test('day of year', function (assert) {
+ assert.equal(moment([2000, 0, 1]).dayOfYear(), 1, 'Jan 1 2000 should be day 1 of the year');
+ assert.equal(moment([2000, 1, 28]).dayOfYear(), 59, 'Feb 28 2000 should be day 59 of the year');
+ assert.equal(moment([2000, 1, 29]).dayOfYear(), 60, 'Feb 28 2000 should be day 60 of the year');
+ assert.equal(moment([2000, 11, 31]).dayOfYear(), 366, 'Dec 31 2000 should be day 366 of the year');
+ assert.equal(moment([2001, 0, 1]).dayOfYear(), 1, 'Jan 1 2001 should be day 1 of the year');
+ assert.equal(moment([2001, 1, 28]).dayOfYear(), 59, 'Feb 28 2001 should be day 59 of the year');
+ assert.equal(moment([2001, 2, 1]).dayOfYear(), 60, 'Mar 1 2001 should be day 60 of the year');
+ assert.equal(moment([2001, 11, 31]).dayOfYear(), 365, 'Dec 31 2001 should be day 365 of the year');
+});
+
+test('day of year setters', function (assert) {
+ assert.equal(moment([2000, 0, 1]).dayOfYear(200).dayOfYear(), 200, 'Setting Jan 1 2000 day of the year to 200 should work');
+ assert.equal(moment([2000, 1, 28]).dayOfYear(200).dayOfYear(), 200, 'Setting Feb 28 2000 day of the year to 200 should work');
+ assert.equal(moment([2000, 1, 29]).dayOfYear(200).dayOfYear(), 200, 'Setting Feb 28 2000 day of the year to 200 should work');
+ assert.equal(moment([2000, 11, 31]).dayOfYear(200).dayOfYear(), 200, 'Setting Dec 31 2000 day of the year to 200 should work');
+ assert.equal(moment().dayOfYear(1).dayOfYear(), 1, 'Setting day of the year to 1 should work');
+ assert.equal(moment().dayOfYear(59).dayOfYear(), 59, 'Setting day of the year to 59 should work');
+ assert.equal(moment().dayOfYear(60).dayOfYear(), 60, 'Setting day of the year to 60 should work');
+ assert.equal(moment().dayOfYear(365).dayOfYear(), 365, 'Setting day of the year to 365 should work');
+});
+
+test('iso weeks year starting sunday', function (assert) {
+ assert.equal(moment([2012, 0, 1]).isoWeek(), 52, 'Jan 1 2012 should be iso week 52');
+ assert.equal(moment([2012, 0, 2]).isoWeek(), 1, 'Jan 2 2012 should be iso week 1');
+ assert.equal(moment([2012, 0, 8]).isoWeek(), 1, 'Jan 8 2012 should be iso week 1');
+ assert.equal(moment([2012, 0, 9]).isoWeek(), 2, 'Jan 9 2012 should be iso week 2');
+ assert.equal(moment([2012, 0, 15]).isoWeek(), 2, 'Jan 15 2012 should be iso week 2');
+});
+
+test('iso weeks year starting monday', function (assert) {
+ assert.equal(moment([2007, 0, 1]).isoWeek(), 1, 'Jan 1 2007 should be iso week 1');
+ assert.equal(moment([2007, 0, 7]).isoWeek(), 1, 'Jan 7 2007 should be iso week 1');
+ assert.equal(moment([2007, 0, 8]).isoWeek(), 2, 'Jan 8 2007 should be iso week 2');
+ assert.equal(moment([2007, 0, 14]).isoWeek(), 2, 'Jan 14 2007 should be iso week 2');
+ assert.equal(moment([2007, 0, 15]).isoWeek(), 3, 'Jan 15 2007 should be iso week 3');
+});
+
+test('iso weeks year starting tuesday', function (assert) {
+ assert.equal(moment([2007, 11, 31]).isoWeek(), 1, 'Dec 31 2007 should be iso week 1');
+ assert.equal(moment([2008, 0, 1]).isoWeek(), 1, 'Jan 1 2008 should be iso week 1');
+ assert.equal(moment([2008, 0, 6]).isoWeek(), 1, 'Jan 6 2008 should be iso week 1');
+ assert.equal(moment([2008, 0, 7]).isoWeek(), 2, 'Jan 7 2008 should be iso week 2');
+ assert.equal(moment([2008, 0, 13]).isoWeek(), 2, 'Jan 13 2008 should be iso week 2');
+ assert.equal(moment([2008, 0, 14]).isoWeek(), 3, 'Jan 14 2008 should be iso week 3');
+});
+
+test('iso weeks year starting wednesday', function (assert) {
+ assert.equal(moment([2002, 11, 30]).isoWeek(), 1, 'Dec 30 2002 should be iso week 1');
+ assert.equal(moment([2003, 0, 1]).isoWeek(), 1, 'Jan 1 2003 should be iso week 1');
+ assert.equal(moment([2003, 0, 5]).isoWeek(), 1, 'Jan 5 2003 should be iso week 1');
+ assert.equal(moment([2003, 0, 6]).isoWeek(), 2, 'Jan 6 2003 should be iso week 2');
+ assert.equal(moment([2003, 0, 12]).isoWeek(), 2, 'Jan 12 2003 should be iso week 2');
+ assert.equal(moment([2003, 0, 13]).isoWeek(), 3, 'Jan 13 2003 should be iso week 3');
+});
+
+test('iso weeks year starting thursday', function (assert) {
+ assert.equal(moment([2008, 11, 29]).isoWeek(), 1, 'Dec 29 2008 should be iso week 1');
+ assert.equal(moment([2009, 0, 1]).isoWeek(), 1, 'Jan 1 2009 should be iso week 1');
+ assert.equal(moment([2009, 0, 4]).isoWeek(), 1, 'Jan 4 2009 should be iso week 1');
+ assert.equal(moment([2009, 0, 5]).isoWeek(), 2, 'Jan 5 2009 should be iso week 2');
+ assert.equal(moment([2009, 0, 11]).isoWeek(), 2, 'Jan 11 2009 should be iso week 2');
+ assert.equal(moment([2009, 0, 13]).isoWeek(), 3, 'Jan 12 2009 should be iso week 3');
+});
+
+test('iso weeks year starting friday', function (assert) {
+ assert.equal(moment([2009, 11, 28]).isoWeek(), 53, 'Dec 28 2009 should be iso week 53');
+ assert.equal(moment([2010, 0, 1]).isoWeek(), 53, 'Jan 1 2010 should be iso week 53');
+ assert.equal(moment([2010, 0, 3]).isoWeek(), 53, 'Jan 3 2010 should be iso week 53');
+ assert.equal(moment([2010, 0, 4]).isoWeek(), 1, 'Jan 4 2010 should be iso week 1');
+ assert.equal(moment([2010, 0, 10]).isoWeek(), 1, 'Jan 10 2010 should be iso week 1');
+ assert.equal(moment([2010, 0, 11]).isoWeek(), 2, 'Jan 11 2010 should be iso week 2');
+});
+
+test('iso weeks year starting saturday', function (assert) {
+ assert.equal(moment([2010, 11, 27]).isoWeek(), 52, 'Dec 27 2010 should be iso week 52');
+ assert.equal(moment([2011, 0, 1]).isoWeek(), 52, 'Jan 1 2011 should be iso week 52');
+ assert.equal(moment([2011, 0, 2]).isoWeek(), 52, 'Jan 2 2011 should be iso week 52');
+ assert.equal(moment([2011, 0, 3]).isoWeek(), 1, 'Jan 3 2011 should be iso week 1');
+ assert.equal(moment([2011, 0, 9]).isoWeek(), 1, 'Jan 9 2011 should be iso week 1');
+ assert.equal(moment([2011, 0, 10]).isoWeek(), 2, 'Jan 10 2011 should be iso week 2');
+});
+
+test('iso weeks year starting sunday formatted', function (assert) {
+ assert.equal(moment([2012, 0, 1]).format('W WW Wo'), '52 52 52nd', 'Jan 1 2012 should be iso week 52');
+ assert.equal(moment([2012, 0, 2]).format('W WW Wo'), '1 01 1st', 'Jan 2 2012 should be iso week 1');
+ assert.equal(moment([2012, 0, 8]).format('W WW Wo'), '1 01 1st', 'Jan 8 2012 should be iso week 1');
+ assert.equal(moment([2012, 0, 9]).format('W WW Wo'), '2 02 2nd', 'Jan 9 2012 should be iso week 2');
+ assert.equal(moment([2012, 0, 15]).format('W WW Wo'), '2 02 2nd', 'Jan 15 2012 should be iso week 2');
+});
+
+test('weeks plural year starting sunday', function (assert) {
+ assert.equal(moment([2012, 0, 1]).weeks(), 1, 'Jan 1 2012 should be week 1');
+ assert.equal(moment([2012, 0, 7]).weeks(), 1, 'Jan 7 2012 should be week 1');
+ assert.equal(moment([2012, 0, 8]).weeks(), 2, 'Jan 8 2012 should be week 2');
+ assert.equal(moment([2012, 0, 14]).weeks(), 2, 'Jan 14 2012 should be week 2');
+ assert.equal(moment([2012, 0, 15]).weeks(), 3, 'Jan 15 2012 should be week 3');
+});
+
+test('iso weeks plural year starting sunday', function (assert) {
+ assert.equal(moment([2012, 0, 1]).isoWeeks(), 52, 'Jan 1 2012 should be iso week 52');
+ assert.equal(moment([2012, 0, 2]).isoWeeks(), 1, 'Jan 2 2012 should be iso week 1');
+ assert.equal(moment([2012, 0, 8]).isoWeeks(), 1, 'Jan 8 2012 should be iso week 1');
+ assert.equal(moment([2012, 0, 9]).isoWeeks(), 2, 'Jan 9 2012 should be iso week 2');
+ assert.equal(moment([2012, 0, 15]).isoWeeks(), 2, 'Jan 15 2012 should be iso week 2');
+});
+
+test('weeks setter', function (assert) {
+ assert.equal(moment([2012, 0, 1]).week(30).week(), 30, 'Setting Jan 1 2012 to week 30 should work');
+ assert.equal(moment([2012, 0, 7]).week(30).week(), 30, 'Setting Jan 7 2012 to week 30 should work');
+ assert.equal(moment([2012, 0, 8]).week(30).week(), 30, 'Setting Jan 8 2012 to week 30 should work');
+ assert.equal(moment([2012, 0, 14]).week(30).week(), 30, 'Setting Jan 14 2012 to week 30 should work');
+ assert.equal(moment([2012, 0, 15]).week(30).week(), 30, 'Setting Jan 15 2012 to week 30 should work');
+});
+
+test('iso weeks setter', function (assert) {
+ assert.equal(moment([2012, 0, 1]).isoWeeks(25).isoWeeks(), 25, 'Setting Jan 1 2012 to week 25 should work');
+ assert.equal(moment([2012, 0, 2]).isoWeeks(24).isoWeeks(), 24, 'Setting Jan 2 2012 to week 24 should work');
+ assert.equal(moment([2012, 0, 8]).isoWeeks(23).isoWeeks(), 23, 'Setting Jan 8 2012 to week 23 should work');
+ assert.equal(moment([2012, 0, 9]).isoWeeks(22).isoWeeks(), 22, 'Setting Jan 9 2012 to week 22 should work');
+ assert.equal(moment([2012, 0, 15]).isoWeeks(21).isoWeeks(), 21, 'Setting Jan 15 2012 to week 21 should work');
+});
+
+test('iso weeks setter day of year', function (assert) {
+ assert.equal(moment([2012, 0, 1]).isoWeek(1).dayOfYear(), 9, 'Setting Jan 1 2012 to week 1 should be day of year 8');
+ assert.equal(moment([2012, 0, 1]).isoWeek(1).year(), 2011, 'Setting Jan 1 2012 to week 1 should be year 2011');
+ assert.equal(moment([2012, 0, 2]).isoWeek(1).dayOfYear(), 2, 'Setting Jan 2 2012 to week 1 should be day of year 2');
+ assert.equal(moment([2012, 0, 8]).isoWeek(1).dayOfYear(), 8, 'Setting Jan 8 2012 to week 1 should be day of year 8');
+ assert.equal(moment([2012, 0, 9]).isoWeek(1).dayOfYear(), 2, 'Setting Jan 9 2012 to week 1 should be day of year 2');
+ assert.equal(moment([2012, 0, 15]).isoWeek(1).dayOfYear(), 8, 'Setting Jan 15 2012 to week 1 should be day of year 8');
+});
+
+test('years with iso week 53', function (assert) {
+ // Based on a table taken from http://en.wikipedia.org/wiki/ISO_week_date
+ // (as downloaded on 2014-01-06) listing the 71 years in a 400-year cycle
+ // that have 53 weeks; in this case reflecting the 2000 based cycle
+ assert.equal(moment([2004, 11, 31]).isoWeek(), 53, 'Dec 31 2004 should be iso week 53');
+ assert.equal(moment([2009, 11, 31]).isoWeek(), 53, 'Dec 31 2009 should be iso week 53');
+ assert.equal(moment([2015, 11, 31]).isoWeek(), 53, 'Dec 31 2015 should be iso week 53');
+ assert.equal(moment([2020, 11, 31]).isoWeek(), 53, 'Dec 31 2020 should be iso week 53');
+ assert.equal(moment([2026, 11, 31]).isoWeek(), 53, 'Dec 31 2026 should be iso week 53');
+ assert.equal(moment([2032, 11, 31]).isoWeek(), 53, 'Dec 31 2032 should be iso week 53');
+ assert.equal(moment([2037, 11, 31]).isoWeek(), 53, 'Dec 31 2037 should be iso week 53');
+ assert.equal(moment([2043, 11, 31]).isoWeek(), 53, 'Dec 31 2043 should be iso week 53');
+ assert.equal(moment([2048, 11, 31]).isoWeek(), 53, 'Dec 31 2048 should be iso week 53');
+ assert.equal(moment([2054, 11, 31]).isoWeek(), 53, 'Dec 31 2054 should be iso week 53');
+ assert.equal(moment([2060, 11, 31]).isoWeek(), 53, 'Dec 31 2060 should be iso week 53');
+ assert.equal(moment([2065, 11, 31]).isoWeek(), 53, 'Dec 31 2065 should be iso week 53');
+ assert.equal(moment([2071, 11, 31]).isoWeek(), 53, 'Dec 31 2071 should be iso week 53');
+ assert.equal(moment([2076, 11, 31]).isoWeek(), 53, 'Dec 31 2076 should be iso week 53');
+ assert.equal(moment([2082, 11, 31]).isoWeek(), 53, 'Dec 31 2082 should be iso week 53');
+ assert.equal(moment([2088, 11, 31]).isoWeek(), 53, 'Dec 31 2088 should be iso week 53');
+ assert.equal(moment([2093, 11, 31]).isoWeek(), 53, 'Dec 31 2093 should be iso week 53');
+ assert.equal(moment([2099, 11, 31]).isoWeek(), 53, 'Dec 31 2099 should be iso week 53');
+ assert.equal(moment([2105, 11, 31]).isoWeek(), 53, 'Dec 31 2105 should be iso week 53');
+ assert.equal(moment([2111, 11, 31]).isoWeek(), 53, 'Dec 31 2111 should be iso week 53');
+ assert.equal(moment([2116, 11, 31]).isoWeek(), 53, 'Dec 31 2116 should be iso week 53');
+ assert.equal(moment([2122, 11, 31]).isoWeek(), 53, 'Dec 31 2122 should be iso week 53');
+ assert.equal(moment([2128, 11, 31]).isoWeek(), 53, 'Dec 31 2128 should be iso week 53');
+ assert.equal(moment([2133, 11, 31]).isoWeek(), 53, 'Dec 31 2133 should be iso week 53');
+ assert.equal(moment([2139, 11, 31]).isoWeek(), 53, 'Dec 31 2139 should be iso week 53');
+ assert.equal(moment([2144, 11, 31]).isoWeek(), 53, 'Dec 31 2144 should be iso week 53');
+ assert.equal(moment([2150, 11, 31]).isoWeek(), 53, 'Dec 31 2150 should be iso week 53');
+ assert.equal(moment([2156, 11, 31]).isoWeek(), 53, 'Dec 31 2156 should be iso week 53');
+ assert.equal(moment([2161, 11, 31]).isoWeek(), 53, 'Dec 31 2161 should be iso week 53');
+ assert.equal(moment([2167, 11, 31]).isoWeek(), 53, 'Dec 31 2167 should be iso week 53');
+ assert.equal(moment([2172, 11, 31]).isoWeek(), 53, 'Dec 31 2172 should be iso week 53');
+ assert.equal(moment([2178, 11, 31]).isoWeek(), 53, 'Dec 31 2178 should be iso week 53');
+ assert.equal(moment([2184, 11, 31]).isoWeek(), 53, 'Dec 31 2184 should be iso week 53');
+ assert.equal(moment([2189, 11, 31]).isoWeek(), 53, 'Dec 31 2189 should be iso week 53');
+ assert.equal(moment([2195, 11, 31]).isoWeek(), 53, 'Dec 31 2195 should be iso week 53');
+ assert.equal(moment([2201, 11, 31]).isoWeek(), 53, 'Dec 31 2201 should be iso week 53');
+ assert.equal(moment([2207, 11, 31]).isoWeek(), 53, 'Dec 31 2207 should be iso week 53');
+ assert.equal(moment([2212, 11, 31]).isoWeek(), 53, 'Dec 31 2212 should be iso week 53');
+ assert.equal(moment([2218, 11, 31]).isoWeek(), 53, 'Dec 31 2218 should be iso week 53');
+ assert.equal(moment([2224, 11, 31]).isoWeek(), 53, 'Dec 31 2224 should be iso week 53');
+ assert.equal(moment([2229, 11, 31]).isoWeek(), 53, 'Dec 31 2229 should be iso week 53');
+ assert.equal(moment([2235, 11, 31]).isoWeek(), 53, 'Dec 31 2235 should be iso week 53');
+ assert.equal(moment([2240, 11, 31]).isoWeek(), 53, 'Dec 31 2240 should be iso week 53');
+ assert.equal(moment([2246, 11, 31]).isoWeek(), 53, 'Dec 31 2246 should be iso week 53');
+ assert.equal(moment([2252, 11, 31]).isoWeek(), 53, 'Dec 31 2252 should be iso week 53');
+ assert.equal(moment([2257, 11, 31]).isoWeek(), 53, 'Dec 31 2257 should be iso week 53');
+ assert.equal(moment([2263, 11, 31]).isoWeek(), 53, 'Dec 31 2263 should be iso week 53');
+ assert.equal(moment([2268, 11, 31]).isoWeek(), 53, 'Dec 31 2268 should be iso week 53');
+ assert.equal(moment([2274, 11, 31]).isoWeek(), 53, 'Dec 31 2274 should be iso week 53');
+ assert.equal(moment([2280, 11, 31]).isoWeek(), 53, 'Dec 31 2280 should be iso week 53');
+ assert.equal(moment([2285, 11, 31]).isoWeek(), 53, 'Dec 31 2285 should be iso week 53');
+ assert.equal(moment([2291, 11, 31]).isoWeek(), 53, 'Dec 31 2291 should be iso week 53');
+ assert.equal(moment([2296, 11, 31]).isoWeek(), 53, 'Dec 31 2296 should be iso week 53');
+ assert.equal(moment([2303, 11, 31]).isoWeek(), 53, 'Dec 31 2303 should be iso week 53');
+ assert.equal(moment([2308, 11, 31]).isoWeek(), 53, 'Dec 31 2308 should be iso week 53');
+ assert.equal(moment([2314, 11, 31]).isoWeek(), 53, 'Dec 31 2314 should be iso week 53');
+ assert.equal(moment([2320, 11, 31]).isoWeek(), 53, 'Dec 31 2320 should be iso week 53');
+ assert.equal(moment([2325, 11, 31]).isoWeek(), 53, 'Dec 31 2325 should be iso week 53');
+ assert.equal(moment([2331, 11, 31]).isoWeek(), 53, 'Dec 31 2331 should be iso week 53');
+ assert.equal(moment([2336, 11, 31]).isoWeek(), 53, 'Dec 31 2336 should be iso week 53');
+ assert.equal(moment([2342, 11, 31]).isoWeek(), 53, 'Dec 31 2342 should be iso week 53');
+ assert.equal(moment([2348, 11, 31]).isoWeek(), 53, 'Dec 31 2348 should be iso week 53');
+ assert.equal(moment([2353, 11, 31]).isoWeek(), 53, 'Dec 31 2353 should be iso week 53');
+ assert.equal(moment([2359, 11, 31]).isoWeek(), 53, 'Dec 31 2359 should be iso week 53');
+ assert.equal(moment([2364, 11, 31]).isoWeek(), 53, 'Dec 31 2364 should be iso week 53');
+ assert.equal(moment([2370, 11, 31]).isoWeek(), 53, 'Dec 31 2370 should be iso week 53');
+ assert.equal(moment([2376, 11, 31]).isoWeek(), 53, 'Dec 31 2376 should be iso week 53');
+ assert.equal(moment([2381, 11, 31]).isoWeek(), 53, 'Dec 31 2381 should be iso week 53');
+ assert.equal(moment([2387, 11, 31]).isoWeek(), 53, 'Dec 31 2387 should be iso week 53');
+ assert.equal(moment([2392, 11, 31]).isoWeek(), 53, 'Dec 31 2392 should be iso week 53');
+ assert.equal(moment([2398, 11, 31]).isoWeek(), 53, 'Dec 31 2398 should be iso week 53');
+});
+
+test('count years with iso week 53', function (assert) {
+ // Based on http://en.wikipedia.org/wiki/ISO_week_date (as seen on 2014-01-06)
+ // stating that there are 71 years in a 400-year cycle that have 53 weeks;
+ // in this case reflecting the 2000 based cycle
+ var count = 0, i;
+ for (i = 0; i < 400; i++) {
+ count += (moment([2000 + i, 11, 31]).isoWeek() === 53) ? 1 : 0;
+ }
+ assert.equal(count, 71, 'Should have 71 years in 400-year cycle with iso week 53');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('weeks in year');
+
+test('isoWeeksInYear', function (assert) {
+ assert.equal(moment([2004]).isoWeeksInYear(), 53, '2004 has 53 iso weeks');
+ assert.equal(moment([2005]).isoWeeksInYear(), 52, '2005 has 53 iso weeks');
+ assert.equal(moment([2006]).isoWeeksInYear(), 52, '2006 has 53 iso weeks');
+ assert.equal(moment([2007]).isoWeeksInYear(), 52, '2007 has 52 iso weeks');
+ assert.equal(moment([2008]).isoWeeksInYear(), 52, '2008 has 53 iso weeks');
+ assert.equal(moment([2009]).isoWeeksInYear(), 53, '2009 has 53 iso weeks');
+ assert.equal(moment([2010]).isoWeeksInYear(), 52, '2010 has 52 iso weeks');
+ assert.equal(moment([2011]).isoWeeksInYear(), 52, '2011 has 52 iso weeks');
+ assert.equal(moment([2012]).isoWeeksInYear(), 52, '2012 has 52 iso weeks');
+ assert.equal(moment([2013]).isoWeeksInYear(), 52, '2013 has 52 iso weeks');
+ assert.equal(moment([2014]).isoWeeksInYear(), 52, '2014 has 52 iso weeks');
+ assert.equal(moment([2015]).isoWeeksInYear(), 53, '2015 has 53 iso weeks');
+});
+
+test('weeksInYear doy/dow = 1/4', function (assert) {
+ moment.locale('1/4', {week: {dow: 1, doy: 4}});
+
+ assert.equal(moment([2004]).weeksInYear(), 53, '2004 has 53 weeks');
+ assert.equal(moment([2005]).weeksInYear(), 52, '2005 has 53 weeks');
+ assert.equal(moment([2006]).weeksInYear(), 52, '2006 has 53 weeks');
+ assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks');
+ assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks');
+ assert.equal(moment([2009]).weeksInYear(), 53, '2009 has 53 weeks');
+ assert.equal(moment([2010]).weeksInYear(), 52, '2010 has 52 weeks');
+ assert.equal(moment([2011]).weeksInYear(), 52, '2011 has 52 weeks');
+ assert.equal(moment([2012]).weeksInYear(), 52, '2012 has 52 weeks');
+ assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks');
+ assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks');
+ assert.equal(moment([2015]).weeksInYear(), 53, '2015 has 53 weeks');
+});
+
+test('weeksInYear doy/dow = 6/12', function (assert) {
+ moment.locale('6/12', {week: {dow: 6, doy: 12}});
+
+ assert.equal(moment([2004]).weeksInYear(), 53, '2004 has 53 weeks');
+ assert.equal(moment([2005]).weeksInYear(), 52, '2005 has 53 weeks');
+ assert.equal(moment([2006]).weeksInYear(), 52, '2006 has 53 weeks');
+ assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks');
+ assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks');
+ assert.equal(moment([2009]).weeksInYear(), 52, '2009 has 53 weeks');
+ assert.equal(moment([2010]).weeksInYear(), 53, '2010 has 52 weeks');
+ assert.equal(moment([2011]).weeksInYear(), 52, '2011 has 52 weeks');
+ assert.equal(moment([2012]).weeksInYear(), 52, '2012 has 52 weeks');
+ assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks');
+ assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks');
+ assert.equal(moment([2015]).weeksInYear(), 52, '2015 has 53 weeks');
+});
+
+test('weeksInYear doy/dow = 1/7', function (assert) {
+ moment.locale('1/7', {week: {dow: 1, doy: 7}});
+
+ assert.equal(moment([2004]).weeksInYear(), 52, '2004 has 53 weeks');
+ assert.equal(moment([2005]).weeksInYear(), 52, '2005 has 53 weeks');
+ assert.equal(moment([2006]).weeksInYear(), 53, '2006 has 53 weeks');
+ assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks');
+ assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks');
+ assert.equal(moment([2009]).weeksInYear(), 52, '2009 has 53 weeks');
+ assert.equal(moment([2010]).weeksInYear(), 52, '2010 has 52 weeks');
+ assert.equal(moment([2011]).weeksInYear(), 52, '2011 has 52 weeks');
+ assert.equal(moment([2012]).weeksInYear(), 53, '2012 has 52 weeks');
+ assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks');
+ assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks');
+ assert.equal(moment([2015]).weeksInYear(), 52, '2015 has 53 weeks');
+});
+
+test('weeksInYear doy/dow = 0/6', function (assert) {
+ moment.locale('0/6', {week: {dow: 0, doy: 6}});
+
+ assert.equal(moment([2004]).weeksInYear(), 52, '2004 has 53 weeks');
+ assert.equal(moment([2005]).weeksInYear(), 53, '2005 has 53 weeks');
+ assert.equal(moment([2006]).weeksInYear(), 52, '2006 has 53 weeks');
+ assert.equal(moment([2007]).weeksInYear(), 52, '2007 has 52 weeks');
+ assert.equal(moment([2008]).weeksInYear(), 52, '2008 has 53 weeks');
+ assert.equal(moment([2009]).weeksInYear(), 52, '2009 has 53 weeks');
+ assert.equal(moment([2010]).weeksInYear(), 52, '2010 has 52 weeks');
+ assert.equal(moment([2011]).weeksInYear(), 53, '2011 has 52 weeks');
+ assert.equal(moment([2012]).weeksInYear(), 52, '2012 has 52 weeks');
+ assert.equal(moment([2013]).weeksInYear(), 52, '2013 has 52 weeks');
+ assert.equal(moment([2014]).weeksInYear(), 52, '2014 has 52 weeks');
+ assert.equal(moment([2015]).weeksInYear(), 52, '2015 has 53 weeks');
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+function isNearSpringDST() {
+ return moment().subtract(1, 'day').utcOffset() !== moment().add(1, 'day').utcOffset();
+}
+
+module$1('zone switching');
+
+test('local to utc, keepLocalTime = true', function (assert) {
+ var m = moment(),
+ fmt = 'YYYY-DD-MM HH:mm:ss';
+ assert.equal(m.clone().utc(true).format(fmt), m.format(fmt), 'local to utc failed to keep local time');
+});
+
+test('local to utc, keepLocalTime = false', function (assert) {
+ var m = moment();
+ assert.equal(m.clone().utc().valueOf(), m.valueOf(), 'local to utc failed to keep utc time (implicit)');
+ assert.equal(m.clone().utc(false).valueOf(), m.valueOf(), 'local to utc failed to keep utc time (explicit)');
+});
+
+test('local to zone, keepLocalTime = true', function (assert) {
+ test.expectedDeprecations('moment().zone');
+ var m = moment(),
+ fmt = 'YYYY-DD-MM HH:mm:ss',
+ z;
+
+ // Apparently there is -12:00 and +14:00
+ // http://en.wikipedia.org/wiki/UTC+14:00
+ // http://en.wikipedia.org/wiki/UTC-12:00
+ for (z = -12; z <= 14; ++z) {
+ assert.equal(m.clone().zone(z * 60, true).format(fmt), m.format(fmt),
+ 'local to zone(' + z + ':00) failed to keep local time');
+ }
+});
+
+test('local to zone, keepLocalTime = false', function (assert) {
+ test.expectedDeprecations('moment().zone');
+ var m = moment(),
+ z;
+
+ // Apparently there is -12:00 and +14:00
+ // http://en.wikipedia.org/wiki/UTC+14:00
+ // http://en.wikipedia.org/wiki/UTC-12:00
+ for (z = -12; z <= 14; ++z) {
+ assert.equal(m.clone().zone(z * 60).valueOf(), m.valueOf(),
+ 'local to zone(' + z + ':00) failed to keep utc time (implicit)');
+ assert.equal(m.clone().zone(z * 60, false).valueOf(), m.valueOf(),
+ 'local to zone(' + z + ':00) failed to keep utc time (explicit)');
+ }
+});
+
+test('utc to local, keepLocalTime = true', function (assert) {
+ // Don't test near the spring DST transition
+ if (isNearSpringDST()) {
+ expect(0);
+ return;
+ }
+
+ var um = moment.utc(),
+ fmt = 'YYYY-DD-MM HH:mm:ss';
+
+ assert.equal(um.clone().local(true).format(fmt), um.format(fmt), 'utc to local failed to keep local time');
+});
+
+test('utc to local, keepLocalTime = false', function (assert) {
+ var um = moment.utc();
+ assert.equal(um.clone().local().valueOf(), um.valueOf(), 'utc to local failed to keep utc time (implicit)');
+ assert.equal(um.clone().local(false).valueOf(), um.valueOf(), 'utc to local failed to keep utc time (explicit)');
+});
+
+test('zone to local, keepLocalTime = true', function (assert) {
+ // Don't test near the spring DST transition
+ if (isNearSpringDST()) {
+ expect(0);
+ return;
+ }
+
+ test.expectedDeprecations('moment().zone');
+
+ var m = moment(),
+ fmt = 'YYYY-DD-MM HH:mm:ss',
+ z;
+
+ // Apparently there is -12:00 and +14:00
+ // http://en.wikipedia.org/wiki/UTC+14:00
+ // http://en.wikipedia.org/wiki/UTC-12:00
+ for (z = -12; z <= 14; ++z) {
+ m.zone(z * 60);
+
+ assert.equal(m.clone().local(true).format(fmt), m.format(fmt),
+ 'zone(' + z + ':00) to local failed to keep local time');
+ }
+});
+
+test('zone to local, keepLocalTime = false', function (assert) {
+ test.expectedDeprecations('moment().zone');
+ var m = moment(),
+ z;
+
+ // Apparently there is -12:00 and +14:00
+ // http://en.wikipedia.org/wiki/UTC+14:00
+ // http://en.wikipedia.org/wiki/UTC-12:00
+ for (z = -12; z <= 14; ++z) {
+ m.zone(z * 60);
+
+ assert.equal(m.clone().local(false).valueOf(), m.valueOf(),
+ 'zone(' + z + ':00) to local failed to keep utc time (explicit)');
+ assert.equal(m.clone().local().valueOf(), m.valueOf(),
+ 'zone(' + z + ':00) to local failed to keep utc time (implicit)');
+ }
+});
+
+})));
+
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
+
+function each(array, callback) {
+ var i;
+ for (i = 0; i < array.length; i++) {
+ callback(array[i], i, array);
+ }
+}
+
+function objectKeys(obj) {
+ if (Object.keys) {
+ return Object.keys(obj);
+ } else {
+ // IE8
+ var res = [], i;
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ }
+}
+
+// Pick the first defined of two or three arguments.
+
+function defineCommonLocaleTests(locale, options) {
+ test('lenient ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing ' + i + ' date check');
+ }
+ });
+
+ test('lenient ordinal parsing of number', function (assert) {
+ var i, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ testMoment = moment('2014 01 ' + i, 'YYYY MM Do');
+ assert.equal(testMoment.year(), 2014,
+ 'lenient ordinal parsing of number ' + i + ' year check');
+ assert.equal(testMoment.month(), 0,
+ 'lenient ordinal parsing of number ' + i + ' month check');
+ assert.equal(testMoment.date(), i,
+ 'lenient ordinal parsing of number ' + i + ' date check');
+ }
+ });
+
+ test('strict ordinal parsing', function (assert) {
+ var i, ordinalStr, testMoment;
+ for (i = 1; i <= 31; ++i) {
+ ordinalStr = moment([2014, 0, i]).format('YYYY MM Do');
+ testMoment = moment(ordinalStr, 'YYYY MM Do', true);
+ assert.ok(testMoment.isValid(), 'strict ordinal parsing ' + i);
+ }
+ });
+
+ test('meridiem invariant', function (assert) {
+ var h, m, t1, t2;
+ for (h = 0; h < 24; ++h) {
+ for (m = 0; m < 60; m += 15) {
+ t1 = moment.utc([2000, 0, 1, h, m]);
+ t2 = moment.utc(t1.format('A h:mm'), 'A h:mm');
+ assert.equal(t2.format('HH:mm'), t1.format('HH:mm'),
+ 'meridiem at ' + t1.format('HH:mm'));
+ }
+ }
+ });
+
+ test('date format correctness', function (assert) {
+ var data, tokens;
+ data = moment.localeData()._longDateFormat;
+ tokens = objectKeys(data);
+ each(tokens, function (srchToken) {
+ // Check each format string to make sure it does not contain any
+ // tokens that need to be expanded.
+ each(tokens, function (baseToken) {
+ // strip escaped sequences
+ var format = data[baseToken].replace(/(\[[^\]]*\])/g, '');
+ assert.equal(false, !!~format.indexOf(srchToken),
+ 'contains ' + srchToken + ' in ' + baseToken);
+ });
+ });
+ });
+
+ test('month parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr') {
+ // I can't fix it :(
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r;
+ r = moment(m.format(format), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.month(), m.month(), 'month ' + i + ' fmt ' + format + ' lower strict');
+ }
+
+ for (i = 0; i < 12; ++i) {
+ m = moment([2015, i, 15, 18]);
+ tester('MMM');
+ tester('MMM.');
+ tester('MMMM');
+ tester('MMMM.');
+ }
+ });
+
+ test('weekday parsing correctness', function (assert) {
+ var i, m;
+
+ if (locale === 'tr' || locale === 'az' || locale === 'ro') {
+ // tr, az: There is a lower-case letter (ı), that converted to
+ // upper then lower changes to i
+ // ro: there is the letter ț which behaves weird under IE8
+ expect(0);
+ return;
+ }
+ function tester(format) {
+ var r, baseMsg = 'weekday ' + m.weekday() + ' fmt ' + format + ' ' + m.toISOString();
+ r = moment(m.format(format), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg);
+ r = moment(m.format(format).toLocaleUpperCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper');
+ r = moment(m.format(format).toLocaleLowerCase(), format);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower');
+
+ r = moment(m.format(format), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' strict');
+ r = moment(m.format(format).toLocaleUpperCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' upper strict');
+ r = moment(m.format(format).toLocaleLowerCase(), format, true);
+ assert.equal(r.weekday(), m.weekday(), baseMsg + ' lower strict');
+ }
+
+ for (i = 0; i < 7; ++i) {
+ m = moment.utc([2015, 0, i + 1, 18]);
+ tester('dd');
+ tester('ddd');
+ tester('dddd');
+ }
+ });
+}
+
+function setupDeprecationHandler(test, moment$$1, scope) {
+ test._expectedDeprecations = null;
+ test._observedDeprecations = null;
+ test._oldSupress = moment$$1.suppressDeprecationWarnings;
+ moment$$1.suppressDeprecationWarnings = true;
+ test.expectedDeprecations = function () {
+ test._expectedDeprecations = arguments;
+ test._observedDeprecations = [];
+ };
+ moment$$1.deprecationHandler = function (name, msg) {
+ var deprecationId = matchedDeprecation(name, msg, test._expectedDeprecations);
+ if (deprecationId === -1) {
+ throw new Error('Unexpected deprecation thrown name=' +
+ name + ' msg=' + msg);
+ }
+ test._observedDeprecations[deprecationId] = 1;
+ };
+}
+
+function teardownDeprecationHandler(test, moment$$1, scope) {
+ moment$$1.suppressDeprecationWarnings = test._oldSupress;
+
+ if (test._expectedDeprecations != null) {
+ var missedDeprecations = [];
+ each(test._expectedDeprecations, function (deprecationPattern, id) {
+ if (test._observedDeprecations[id] !== 1) {
+ missedDeprecations.push(deprecationPattern);
+ }
+ });
+ if (missedDeprecations.length !== 0) {
+ throw new Error('Expected deprecation warnings did not happen: ' +
+ missedDeprecations.join(' '));
+ }
+ }
+}
+
+function matchedDeprecation(name, msg, deprecations) {
+ if (deprecations == null) {
+ return -1;
+ }
+ for (var i = 0; i < deprecations.length; ++i) {
+ if (name != null && name === deprecations[i]) {
+ return i;
+ }
+ if (msg != null && msg.substring(0, deprecations[i].length) === deprecations[i]) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+/*global QUnit:false*/
+
+var test = QUnit.test;
+
+var expect = QUnit.expect;
+
+function module$1 (name, lifecycle) {
+ QUnit.module(name, {
+ setup : function () {
+ moment.locale('en');
+ moment.createFromInputFallback = function (config) {
+ throw new Error('input not handled by moment: ' + config._i);
+ };
+ setupDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.setup) {
+ lifecycle.setup();
+ }
+ },
+ teardown : function () {
+ teardownDeprecationHandler(test, moment, 'core');
+ if (lifecycle && lifecycle.teardown) {
+ lifecycle.teardown();
+ }
+ }
+ });
+}
+
+module$1('zones', {
+ 'setup': function () {
+ test.expectedDeprecations('moment().zone');
+ }
+});
+
+test('set zone', function (assert) {
+ var zone = moment();
+
+ zone.zone(0);
+ assert.equal(zone.zone(), 0, 'should be able to set the zone to 0');
+
+ zone.zone(60);
+ assert.equal(zone.zone(), 60, 'should be able to set the zone to 60');
+
+ zone.zone(-60);
+ assert.equal(zone.zone(), -60, 'should be able to set the zone to -60');
+});
+
+test('set zone shorthand', function (assert) {
+ var zone = moment();
+
+ zone.zone(1);
+ assert.equal(zone.zone(), 60, 'setting the zone to 1 should imply hours and convert to 60');
+
+ zone.zone(-1);
+ assert.equal(zone.zone(), -60, 'setting the zone to -1 should imply hours and convert to -60');
+
+ zone.zone(15);
+ assert.equal(zone.zone(), 900, 'setting the zone to 15 should imply hours and convert to 900');
+
+ zone.zone(-15);
+ assert.equal(zone.zone(), -900, 'setting the zone to -15 should imply hours and convert to -900');
+
+ zone.zone(16);
+ assert.equal(zone.zone(), 16, 'setting the zone to 16 should imply minutes');
+
+ zone.zone(-16);
+ assert.equal(zone.zone(), -16, 'setting the zone to -16 should imply minutes');
+});
+
+test('set zone with string', function (assert) {
+ var zone = moment();
+
+ zone.zone('+00:00');
+ assert.equal(zone.zone(), 0, 'set the zone with a timezone string');
+
+ zone.zone('2013-03-07T07:00:00-08:00');
+ assert.equal(zone.zone(), 480, 'set the zone with a string that does not begin with the timezone');
+
+ zone.zone('2013-03-07T07:00:00+0100');
+ assert.equal(zone.zone(), -60, 'set the zone with a string that uses the +0000 syntax');
+
+ zone.zone('2013-03-07T07:00:00+02');
+ assert.equal(zone.zone(), -120, 'set the zone with a string that uses the +00 syntax');
+
+ zone.zone('03-07-2013T07:00:00-08:00');
+ assert.equal(zone.zone(), 480, 'set the zone with a string with a non-ISO 8601 date');
+});
+
+test('change hours when changing the zone', function (assert) {
+ var zone = moment.utc([2000, 0, 1, 6]);
+
+ zone.zone(0);
+ assert.equal(zone.hour(), 6, 'UTC 6AM should be 6AM at +0000');
+
+ zone.zone(60);
+ assert.equal(zone.hour(), 5, 'UTC 6AM should be 5AM at -0100');
+
+ zone.zone(-60);
+ assert.equal(zone.hour(), 7, 'UTC 6AM should be 7AM at +0100');
+});
+
+test('change minutes when changing the zone', function (assert) {
+ var zone = moment.utc([2000, 0, 1, 6, 31]);
+
+ zone.zone(0);
+ assert.equal(zone.format('HH:mm'), '06:31', 'UTC 6:31AM should be 6:31AM at +0000');
+
+ zone.zone(30);
+ assert.equal(zone.format('HH:mm'), '06:01', 'UTC 6:31AM should be 6:01AM at -0030');
+
+ zone.zone(-30);
+ assert.equal(zone.format('HH:mm'), '07:01', 'UTC 6:31AM should be 7:01AM at +0030');
+
+ zone.zone(1380);
+ assert.equal(zone.format('HH:mm'), '07:31', 'UTC 6:31AM should be 7:31AM at +1380');
+});
+
+test('distance from the unix epoch', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA),
+ zoneC = moment(zoneA),
+ zoneD = moment(zoneA),
+ zoneE = moment(zoneA);
+
+ zoneB.utc();
+ assert.equal(+zoneA, +zoneB, 'moment should equal moment.utc');
+
+ zoneC.zone(-60);
+ assert.equal(+zoneA, +zoneC, 'moment should equal moment.zone(-60)');
+
+ zoneD.zone(480);
+ assert.equal(+zoneA, +zoneD, 'moment should equal moment.zone(480)');
+
+ zoneE.zone(1000);
+ assert.equal(+zoneA, +zoneE, 'moment should equal moment.zone(1000)');
+});
+
+test('update offset after changing any values', function (assert) {
+ var oldOffset = moment.updateOffset,
+ m = moment.utc([2000, 6, 1]);
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.__doChange) {
+ if (+mom > 962409600000) {
+ mom.zone(120, keepTime);
+ } else {
+ mom.zone(60, keepTime);
+ }
+ }
+ };
+
+ assert.equal(m.format('ZZ'), '+0000', 'should be at +0000');
+ assert.equal(m.format('HH:mm'), '00:00', 'should start 12AM at +0000 timezone');
+
+ m.__doChange = true;
+ m.add(1, 'h');
+
+ assert.equal(m.format('ZZ'), '-0200', 'should be at -0200');
+ assert.equal(m.format('HH:mm'), '23:00', '1AM at +0000 should be 11PM at -0200 timezone');
+
+ m.subtract(1, 'h');
+
+ assert.equal(m.format('ZZ'), '-0100', 'should be at -0100');
+ assert.equal(m.format('HH:mm'), '23:00', '12AM at +0000 should be 11PM at -0100 timezone');
+
+ moment.updateOffset = oldOffset;
+});
+
+test('getters and setters', function (assert) {
+ var a = moment([2011, 5, 20]);
+
+ assert.equal(a.clone().zone(120).year(2012).year(), 2012, 'should get and set year correctly');
+ assert.equal(a.clone().zone(120).month(1).month(), 1, 'should get and set month correctly');
+ assert.equal(a.clone().zone(120).date(2).date(), 2, 'should get and set date correctly');
+ assert.equal(a.clone().zone(120).day(1).day(), 1, 'should get and set day correctly');
+ assert.equal(a.clone().zone(120).hour(1).hour(), 1, 'should get and set hour correctly');
+ assert.equal(a.clone().zone(120).minute(1).minute(), 1, 'should get and set minute correctly');
+});
+
+test('getters', function (assert) {
+ var a = moment.utc([2012, 0, 1, 0, 0, 0]);
+
+ assert.equal(a.clone().zone(120).year(), 2011, 'should get year correctly');
+ assert.equal(a.clone().zone(120).month(), 11, 'should get month correctly');
+ assert.equal(a.clone().zone(120).date(), 31, 'should get date correctly');
+ assert.equal(a.clone().zone(120).hour(), 22, 'should get hour correctly');
+ assert.equal(a.clone().zone(120).minute(), 0, 'should get minute correctly');
+
+ assert.equal(a.clone().zone(-120).year(), 2012, 'should get year correctly');
+ assert.equal(a.clone().zone(-120).month(), 0, 'should get month correctly');
+ assert.equal(a.clone().zone(-120).date(), 1, 'should get date correctly');
+ assert.equal(a.clone().zone(-120).hour(), 2, 'should get hour correctly');
+ assert.equal(a.clone().zone(-120).minute(), 0, 'should get minute correctly');
+
+ assert.equal(a.clone().zone(-90).year(), 2012, 'should get year correctly');
+ assert.equal(a.clone().zone(-90).month(), 0, 'should get month correctly');
+ assert.equal(a.clone().zone(-90).date(), 1, 'should get date correctly');
+ assert.equal(a.clone().zone(-90).hour(), 1, 'should get hour correctly');
+ assert.equal(a.clone().zone(-90).minute(), 30, 'should get minute correctly');
+});
+
+test('from', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA).zone(720),
+ zoneC = moment(zoneA).zone(360),
+ zoneD = moment(zoneA).zone(-690),
+ other = moment(zoneA).add(35, 'm');
+
+ assert.equal(zoneA.from(other), zoneB.from(other), 'moment#from should be the same in all zones');
+ assert.equal(zoneA.from(other), zoneC.from(other), 'moment#from should be the same in all zones');
+ assert.equal(zoneA.from(other), zoneD.from(other), 'moment#from should be the same in all zones');
+});
+
+test('diff', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA).zone(720),
+ zoneC = moment(zoneA).zone(360),
+ zoneD = moment(zoneA).zone(-690),
+ other = moment(zoneA).add(35, 'm');
+
+ assert.equal(zoneA.diff(other), zoneB.diff(other), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other), zoneC.diff(other), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other), zoneD.diff(other), 'moment#diff should be the same in all zones');
+
+ assert.equal(zoneA.diff(other, 'minute', true), zoneB.diff(other, 'minute', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'minute', true), zoneC.diff(other, 'minute', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'minute', true), zoneD.diff(other, 'minute', true), 'moment#diff should be the same in all zones');
+
+ assert.equal(zoneA.diff(other, 'hour', true), zoneB.diff(other, 'hour', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'hour', true), zoneC.diff(other, 'hour', true), 'moment#diff should be the same in all zones');
+ assert.equal(zoneA.diff(other, 'hour', true), zoneD.diff(other, 'hour', true), 'moment#diff should be the same in all zones');
+});
+
+test('unix offset and timestamp', function (assert) {
+ var zoneA = moment(),
+ zoneB = moment(zoneA).zone(720),
+ zoneC = moment(zoneA).zone(360),
+ zoneD = moment(zoneA).zone(-690);
+
+ assert.equal(zoneA.unix(), zoneB.unix(), 'moment#unix should be the same in all zones');
+ assert.equal(zoneA.unix(), zoneC.unix(), 'moment#unix should be the same in all zones');
+ assert.equal(zoneA.unix(), zoneD.unix(), 'moment#unix should be the same in all zones');
+
+ assert.equal(+zoneA, +zoneB, 'moment#valueOf should be the same in all zones');
+ assert.equal(+zoneA, +zoneC, 'moment#valueOf should be the same in all zones');
+ assert.equal(+zoneA, +zoneD, 'moment#valueOf should be the same in all zones');
+});
+
+test('cloning', function (assert) {
+ assert.equal(moment().zone(120).clone().zone(), 120, 'explicit cloning should retain the zone');
+ assert.equal(moment().zone(-120).clone().zone(), -120, 'explicit cloning should retain the zone');
+ assert.equal(moment(moment().zone(120)).zone(), 120, 'implicit cloning should retain the zone');
+ assert.equal(moment(moment().zone(-120)).zone(), -120, 'implicit cloning should retain the zone');
+});
+
+test('start of / end of', function (assert) {
+ var a = moment.utc([2010, 1, 2, 0, 0, 0]).zone(450);
+
+ assert.equal(a.clone().startOf('day').hour(), 0, 'start of day should work on moments with a zone');
+ assert.equal(a.clone().startOf('day').minute(), 0, 'start of day should work on moments with a zone');
+ assert.equal(a.clone().startOf('hour').minute(), 0, 'start of hour should work on moments with a zone');
+
+ assert.equal(a.clone().endOf('day').hour(), 23, 'end of day should work on moments with a zone');
+ assert.equal(a.clone().endOf('day').minute(), 59, 'end of day should work on moments with a zone');
+ assert.equal(a.clone().endOf('hour').minute(), 59, 'end of hour should work on moments with a zone');
+});
+
+test('reset zone with moment#utc', function (assert) {
+ var a = moment.utc([2012]).zone(480);
+
+ assert.equal(a.clone().hour(), 16, 'different zone should have different hour');
+ assert.equal(a.clone().utc().hour(), 0, 'calling moment#utc should reset the offset');
+});
+
+test('reset zone with moment#local', function (assert) {
+ var a = moment([2012]).zone(480);
+
+ assert.equal(a.clone().local().hour(), 0, 'calling moment#local should reset the offset');
+});
+
+test('toDate', function (assert) {
+ var zoneA = new Date(),
+ zoneB = moment(zoneA).zone(720).toDate(),
+ zoneC = moment(zoneA).zone(360).toDate(),
+ zoneD = moment(zoneA).zone(-690).toDate();
+
+ assert.equal(+zoneA, +zoneB, 'moment#toDate should output a date with the right unix timestamp');
+ assert.equal(+zoneA, +zoneC, 'moment#toDate should output a date with the right unix timestamp');
+ assert.equal(+zoneA, +zoneD, 'moment#toDate should output a date with the right unix timestamp');
+});
+
+test('same / before / after', function (assert) {
+ var zoneA = moment().utc(),
+ zoneB = moment(zoneA).zone(120),
+ zoneC = moment(zoneA).zone(-120);
+
+ assert.ok(zoneA.isSame(zoneB), 'two moments with different offsets should be the same');
+ assert.ok(zoneA.isSame(zoneC), 'two moments with different offsets should be the same');
+
+ assert.ok(zoneA.isSame(zoneB, 'hour'), 'two moments with different offsets should be the same hour');
+ assert.ok(zoneA.isSame(zoneC, 'hour'), 'two moments with different offsets should be the same hour');
+
+ zoneA.add(1, 'hour');
+
+ assert.ok(zoneA.isAfter(zoneB), 'isAfter should work with two moments with different offsets');
+ assert.ok(zoneA.isAfter(zoneC), 'isAfter should work with two moments with different offsets');
+
+ assert.ok(zoneA.isAfter(zoneB, 'hour'), 'isAfter:hour should work with two moments with different offsets');
+ assert.ok(zoneA.isAfter(zoneC, 'hour'), 'isAfter:hour should work with two moments with different offsets');
+
+ zoneA.subtract(2, 'hour');
+
+ assert.ok(zoneA.isBefore(zoneB), 'isBefore should work with two moments with different offsets');
+ assert.ok(zoneA.isBefore(zoneC), 'isBefore should work with two moments with different offsets');
+
+ assert.ok(zoneA.isBefore(zoneB, 'hour'), 'isBefore:hour should work with two moments with different offsets');
+ assert.ok(zoneA.isBefore(zoneC, 'hour'), 'isBefore:hour should work with two moments with different offsets');
+});
+
+test('add / subtract over dst', function (assert) {
+ var oldOffset = moment.updateOffset,
+ m = moment.utc([2000, 2, 31, 3]);
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.clone().utc().month() > 2) {
+ mom.zone(-60, keepTime);
+ } else {
+ mom.zone(0, keepTime);
+ }
+ };
+
+ assert.equal(m.hour(), 3, 'should start at 00:00');
+
+ m.add(24, 'hour');
+
+ assert.equal(m.hour(), 4, 'adding 24 hours should disregard dst');
+
+ m.subtract(24, 'hour');
+
+ assert.equal(m.hour(), 3, 'subtracting 24 hours should disregard dst');
+
+ m.add(1, 'day');
+
+ assert.equal(m.hour(), 3, 'adding 1 day should have the same hour');
+
+ m.subtract(1, 'day');
+
+ assert.equal(m.hour(), 3, 'subtracting 1 day should have the same hour');
+
+ m.add(1, 'month');
+
+ assert.equal(m.hour(), 3, 'adding 1 month should have the same hour');
+
+ m.subtract(1, 'month');
+
+ assert.equal(m.hour(), 3, 'subtracting 1 month should have the same hour');
+
+ moment.updateOffset = oldOffset;
+});
+
+test('isDST', function (assert) {
+ var oldOffset = moment.updateOffset;
+
+ moment.updateOffset = function (mom, keepTime) {
+ if (mom.month() > 2 && mom.month() < 9) {
+ mom.zone(-60, keepTime);
+ } else {
+ mom.zone(0, keepTime);
+ }
+ };
+
+ assert.ok(!moment().month(0).isDST(), 'Jan should not be summer dst');
+ assert.ok(moment().month(6).isDST(), 'Jul should be summer dst');
+ assert.ok(!moment().month(11).isDST(), 'Dec should not be summer dst');
+
+ moment.updateOffset = function (mom) {
+ if (mom.month() > 2 && mom.month() < 9) {
+ mom.zone(0);
+ } else {
+ mom.zone(-60);
+ }
+ };
+
+ assert.ok(moment().month(0).isDST(), 'Jan should be winter dst');
+ assert.ok(!moment().month(6).isDST(), 'Jul should not be winter dst');
+ assert.ok(moment().month(11).isDST(), 'Dec should be winter dst');
+
+ moment.updateOffset = oldOffset;
+});
+
+test('zone names', function (assert) {
+ test.expectedDeprecations();
+ assert.equal(moment().zoneAbbr(), '', 'Local zone abbr should be empty');
+ assert.equal(moment().format('z'), '', 'Local zone formatted abbr should be empty');
+ assert.equal(moment().zoneName(), '', 'Local zone name should be empty');
+ assert.equal(moment().format('zz'), '', 'Local zone formatted name should be empty');
+
+ assert.equal(moment.utc().zoneAbbr(), 'UTC', 'UTC zone abbr should be UTC');
+ assert.equal(moment.utc().format('z'), 'UTC', 'UTC zone formatted abbr should be UTC');
+ assert.equal(moment.utc().zoneName(), 'Coordinated Universal Time', 'UTC zone abbr should be Coordinated Universal Time');
+ assert.equal(moment.utc().format('zz'), 'Coordinated Universal Time', 'UTC zone formatted abbr should be Coordinated Universal Time');
+});
+
+test('hours alignment with UTC', function (assert) {
+ assert.equal(moment().zone(120).hasAlignedHourOffset(), true);
+ assert.equal(moment().zone(-180).hasAlignedHourOffset(), true);
+ assert.equal(moment().zone(90).hasAlignedHourOffset(), false);
+ assert.equal(moment().zone(-90).hasAlignedHourOffset(), false);
+});
+
+test('hours alignment with other zone', function (assert) {
+ var m = moment().zone(120);
+
+ assert.equal(m.hasAlignedHourOffset(moment().zone(180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(90)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-90)), false);
+
+ m = moment().zone(90);
+
+ assert.equal(m.hasAlignedHourOffset(moment().zone(180)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-180)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(30)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-30)), true);
+
+ m = moment().zone(-60);
+
+ assert.equal(m.hasAlignedHourOffset(moment().zone(180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-180)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(90)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-90)), false);
+
+ m = moment().zone(25);
+
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-35)), true);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(85)), true);
+
+ assert.equal(m.hasAlignedHourOffset(moment().zone(35)), false);
+ assert.equal(m.hasAlignedHourOffset(moment().zone(-85)), false);
+});
+
+test('parse zone', function (assert) {
+ var m = moment('2013-01-01T00:00:00-13:00').parseZone();
+ assert.equal(m.zone(), 13 * 60);
+ assert.equal(m.hours(), 0);
+});
+
+test('parse zone static', function (assert) {
+ var m = moment.parseZone('2013-01-01T00:00:00-13:00');
+ assert.equal(m.zone(), 13 * 60);
+ assert.equal(m.hours(), 0);
+});
+
+test('parse zone with more arguments', function (assert) {
+ test.expectedDeprecations();
+ var m;
+ m = moment.parseZone('2013 01 01 05 -13:00', 'YYYY MM DD HH ZZ');
+ assert.equal(m.format(), '2013-01-01T05:00:00-13:00', 'accept input and format');
+ m = moment.parseZone('2013-01-01-13:00', 'YYYY MM DD ZZ', true);
+ assert.equal(m.isValid(), false, 'accept input, format and strict flag');
+ m = moment.parseZone('2013-01-01-13:00', ['DD MM YYYY ZZ', 'YYYY MM DD ZZ']);
+ assert.equal(m.format(), '2013-01-01T00:00:00-13:00', 'accept input and array of formats');
+});
+
+test('parse zone with a timezone from the format string', function (assert) {
+ var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY ZZ #####').parseZone();
+
+ assert.equal(m.zone(), 4 * 60);
+});
+
+test('parse zone without a timezone included in the format string', function (assert) {
+ var m = moment('11-12-2013 -0400 +1100', 'DD-MM-YYYY').parseZone();
+
+ assert.equal(m.zone(), -11 * 60);
+});
+
+test('timezone format', function (assert) {
+ assert.equal(moment().zone(-60).format('ZZ'), '+0100', '-60 -> +0100');
+ assert.equal(moment().zone(-90).format('ZZ'), '+0130', '-90 -> +0130');
+ assert.equal(moment().zone(-120).format('ZZ'), '+0200', '-120 -> +0200');
+
+ assert.equal(moment().zone(+60).format('ZZ'), '-0100', '+60 -> -0100');
+ assert.equal(moment().zone(+90).format('ZZ'), '-0130', '+90 -> -0130');
+ assert.equal(moment().zone(+120).format('ZZ'), '-0200', '+120 -> -0200');
+});
+
+test('parse zone without a timezone', function (assert) {
+ test.expectedDeprecations();
+ var m1 = moment.parseZone('2016-02-01T00:00:00');
+ var m2 = moment.parseZone('2016-02-01T00:00:00Z');
+ var m3 = moment.parseZone('2016-02-01T00:00:00+00:00'); //Someone might argue this is not necessary, you could even argue that is wrong being here.
+ var m4 = moment.parseZone('2016-02-01T00:00:00+0000'); //Someone might argue this is not necessary, you could even argue that is wrong being here.
+ assert.equal(
+ m1.format('M D YYYY HH:mm:ss ZZ'),
+ '2 1 2016 00:00:00 +0000',
+ 'Not providing a timezone should keep the time and change the zone to 0'
+ );
+ assert.equal(
+ m2.format('M D YYYY HH:mm:ss ZZ'),
+ '2 1 2016 00:00:00 +0000',
+ 'Not providing a timezone should keep the time and change the zone to 0'
+ );
+ assert.equal(
+ m3.format('M D YYYY HH:mm:ss ZZ'),
+ '2 1 2016 00:00:00 +0000',
+ 'Not providing a timezone should keep the time and change the zone to 0'
+ );
+ assert.equal(
+ m4.format('M D YYYY HH:mm:ss ZZ'),
+ '2 1 2016 00:00:00 +0000',
+ 'Not providing a timezone should keep the time and change the zone to 0'
+ );
+});
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.d.ts
new file mode 100644
index 00000000000..2234ea7318f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.d.ts
@@ -0,0 +1,708 @@
+declare function moment(inp?: moment.MomentInput, format?: moment.MomentFormatSpecification, strict?: boolean): moment.Moment;
+declare function moment(inp?: moment.MomentInput, format?: moment.MomentFormatSpecification, language?: string, strict?: boolean): moment.Moment;
+
+declare namespace moment {
+ type RelativeTimeKey = 's' | 'm' | 'mm' | 'h' | 'hh' | 'd' | 'dd' | 'M' | 'MM' | 'y' | 'yy';
+ type CalendarKey = 'sameDay' | 'nextDay' | 'lastDay' | 'nextWeek' | 'lastWeek' | 'sameElse' | string;
+ type LongDateFormatKey = 'LTS' | 'LT' | 'L' | 'LL' | 'LLL' | 'LLLL' | 'lts' | 'lt' | 'l' | 'll' | 'lll' | 'llll';
+
+ interface Locale {
+ calendar(key?: CalendarKey, m?: Moment, now?: Moment): string;
+
+ longDateFormat(key: LongDateFormatKey): string;
+ invalidDate(): string;
+ ordinal(n: number): string;
+
+ preparse(inp: string): string;
+ postformat(inp: string): string;
+ relativeTime(n: number, withoutSuffix: boolean,
+ key: RelativeTimeKey, isFuture: boolean): string;
+ pastFuture(diff: number, absRelTime: string): string;
+ set(config: Object): void;
+
+ months(): string[];
+ months(m: Moment, format?: string): string;
+ monthsShort(): string[];
+ monthsShort(m: Moment, format?: string): string;
+ monthsParse(monthName: string, format: string, strict: boolean): number;
+ monthsRegex(strict: boolean): RegExp;
+ monthsShortRegex(strict: boolean): RegExp;
+
+ week(m: Moment): number;
+ firstDayOfYear(): number;
+ firstDayOfWeek(): number;
+
+ weekdays(): string[];
+ weekdays(m: Moment, format?: string): string;
+ weekdaysMin(): string[];
+ weekdaysMin(m: Moment): string;
+ weekdaysShort(): string[];
+ weekdaysShort(m: Moment): string;
+ weekdaysParse(weekdayName: string, format: string, strict: boolean): number;
+ weekdaysRegex(strict: boolean): RegExp;
+ weekdaysShortRegex(strict: boolean): RegExp;
+ weekdaysMinRegex(strict: boolean): RegExp;
+
+ isPM(input: string): boolean;
+ meridiem(hour: number, minute: number, isLower: boolean): string;
+ }
+
+ interface StandaloneFormatSpec {
+ format: string[];
+ standalone: string[];
+ isFormat?: RegExp;
+ }
+
+ interface WeekSpec {
+ dow: number;
+ doy: number;
+ }
+
+ type CalendarSpecVal = string | ((m?: Moment, now?: Moment) => string);
+ interface CalendarSpec {
+ sameDay?: CalendarSpecVal;
+ nextDay?: CalendarSpecVal;
+ lastDay?: CalendarSpecVal;
+ nextWeek?: CalendarSpecVal;
+ lastWeek?: CalendarSpecVal;
+ sameElse?: CalendarSpecVal;
+
+ // any additional properties might be used with moment.calendarFormat
+ [x: string]: CalendarSpecVal | void; // undefined
+ }
+
+ type RelativeTimeSpecVal = (
+ string |
+ ((n: number, withoutSuffix: boolean,
+ key: RelativeTimeKey, isFuture: boolean) => string)
+ );
+ type RelativeTimeFuturePastVal = string | ((relTime: string) => string);
+
+ interface RelativeTimeSpec {
+ future: RelativeTimeFuturePastVal;
+ past: RelativeTimeFuturePastVal;
+ s: RelativeTimeSpecVal;
+ m: RelativeTimeSpecVal;
+ mm: RelativeTimeSpecVal;
+ h: RelativeTimeSpecVal;
+ hh: RelativeTimeSpecVal;
+ d: RelativeTimeSpecVal;
+ dd: RelativeTimeSpecVal;
+ M: RelativeTimeSpecVal;
+ MM: RelativeTimeSpecVal;
+ y: RelativeTimeSpecVal;
+ yy: RelativeTimeSpecVal;
+ }
+
+ interface LongDateFormatSpec {
+ LTS: string;
+ LT: string;
+ L: string;
+ LL: string;
+ LLL: string;
+ LLLL: string;
+
+ // lets forget for a sec that any upper/lower permutation will also work
+ lts?: string;
+ lt?: string;
+ l?: string;
+ ll?: string;
+ lll?: string;
+ llll?: string;
+ }
+
+ type MonthWeekdayFn = (momentToFormat: Moment, format?: string) => string;
+ type WeekdaySimpleFn = (momentToFormat: Moment) => string;
+
+ interface LocaleSpecification {
+ months?: string[] | StandaloneFormatSpec | MonthWeekdayFn;
+ monthsShort?: string[] | StandaloneFormatSpec | MonthWeekdayFn;
+
+ weekdays?: string[] | StandaloneFormatSpec | MonthWeekdayFn;
+ weekdaysShort?: string[] | StandaloneFormatSpec | WeekdaySimpleFn;
+ weekdaysMin?: string[] | StandaloneFormatSpec | WeekdaySimpleFn;
+
+ meridiemParse?: RegExp;
+ meridiem?: (hour: number, minute:number, isLower: boolean) => string;
+
+ isPM?: (input: string) => boolean;
+
+ longDateFormat?: LongDateFormatSpec;
+ calendar?: CalendarSpec;
+ relativeTime?: RelativeTimeSpec;
+ invalidDate?: string;
+ ordinal?: (n: number) => string;
+ ordinalParse?: RegExp;
+
+ week?: WeekSpec;
+
+ // Allow anything: in general any property that is passed as locale spec is
+ // put in the locale object so it can be used by locale functions
+ [x: string]: any;
+ }
+
+ interface MomentObjectOutput {
+ years: number;
+ /* One digit */
+ months: number;
+ /* Day of the month */
+ date: number;
+ hours: number;
+ minutes: number;
+ seconds: number;
+ milliseconds: number;
+ }
+
+ interface Duration {
+ humanize(withSuffix?: boolean): string;
+
+ abs(): Duration;
+
+ as(units: unitOfTime.Base): number;
+ get(units: unitOfTime.Base): number;
+
+ milliseconds(): number;
+ asMilliseconds(): number;
+
+ seconds(): number;
+ asSeconds(): number;
+
+ minutes(): number;
+ asMinutes(): number;
+
+ hours(): number;
+ asHours(): number;
+
+ days(): number;
+ asDays(): number;
+
+ weeks(): number;
+ asWeeks(): number;
+
+ months(): number;
+ asMonths(): number;
+
+ years(): number;
+ asYears(): number;
+
+ add(inp?: DurationInputArg1, unit?: DurationInputArg2): Duration;
+ subtract(inp?: DurationInputArg1, unit?: DurationInputArg2): Duration;
+
+ locale(): string;
+ locale(locale: LocaleSpecifier): Duration;
+ localeData(): Locale;
+
+ toISOString(): string;
+ toJSON(): string;
+
+ /**
+ * @deprecated since version 2.8.0
+ */
+ lang(locale: LocaleSpecifier): Moment;
+ /**
+ * @deprecated since version 2.8.0
+ */
+ lang(): Locale;
+ /**
+ * @deprecated
+ */
+ toIsoString(): string;
+ }
+
+ interface MomentRelativeTime {
+ future: any;
+ past: any;
+ s: any;
+ m: any;
+ mm: any;
+ h: any;
+ hh: any;
+ d: any;
+ dd: any;
+ M: any;
+ MM: any;
+ y: any;
+ yy: any;
+ }
+
+ interface MomentLongDateFormat {
+ L: string;
+ LL: string;
+ LLL: string;
+ LLLL: string;
+ LT: string;
+ LTS: string;
+
+ l?: string;
+ ll?: string;
+ lll?: string;
+ llll?: string;
+ lt?: string;
+ lts?: string;
+ }
+
+ interface MomentParsingFlags {
+ empty: boolean;
+ unusedTokens: string[];
+ unusedInput: string[];
+ overflow: number;
+ charsLeftOver: number;
+ nullInput: boolean;
+ invalidMonth: string | void; // null
+ invalidFormat: boolean;
+ userInvalidated: boolean;
+ iso: boolean;
+ parsedDateParts: any[];
+ meridiem: string | void; // null
+ }
+
+ interface MomentParsingFlagsOpt {
+ empty?: boolean;
+ unusedTokens?: string[];
+ unusedInput?: string[];
+ overflow?: number;
+ charsLeftOver?: number;
+ nullInput?: boolean;
+ invalidMonth?: string;
+ invalidFormat?: boolean;
+ userInvalidated?: boolean;
+ iso?: boolean;
+ parsedDateParts?: any[];
+ meridiem?: string;
+ }
+
+ interface MomentBuiltinFormat {
+ __momentBuiltinFormatBrand: any;
+ }
+
+ type MomentFormatSpecification = string | MomentBuiltinFormat | (string | MomentBuiltinFormat)[];
+
+ namespace unitOfTime {
+ type Base = (
+ "year" | "years" | "y" |
+ "month" | "months" | "M" |
+ "week" | "weeks" | "w" |
+ "day" | "days" | "d" |
+ "hour" | "hours" | "h" |
+ "minute" | "minutes" | "m" |
+ "second" | "seconds" | "s" |
+ "millisecond" | "milliseconds" | "ms"
+ );
+
+ type _quarter = "quarter" | "quarters" | "Q";
+ type _isoWeek = "isoWeek" | "isoWeeks" | "W";
+ type _date = "date" | "dates" | "D";
+ type DurationConstructor = Base | _quarter;
+
+ type DurationAs = Base;
+
+ type StartOf = Base | _quarter | _isoWeek | _date;
+
+ type Diff = Base | _quarter;
+
+ type MomentConstructor = Base | _date;
+
+ type All = Base | _quarter | _isoWeek | _date |
+ "weekYear" | "weekYears" | "gg" |
+ "isoWeekYear" | "isoWeekYears" | "GG" |
+ "dayOfYear" | "dayOfYears" | "DDD" |
+ "weekday" | "weekdays" | "e" |
+ "isoWeekday" | "isoWeekdays" | "E";
+ }
+
+ interface MomentInputObject {
+ years?: number;
+ year?: number;
+ y?: number;
+
+ months?: number;
+ month?: number;
+ M?: number;
+
+ days?: number;
+ day?: number;
+ d?: number;
+
+ dates?: number;
+ date?: number;
+ D?: number;
+
+ hours?: number;
+ hour?: number;
+ h?: number;
+
+ minutes?: number;
+ minute?: number;
+ m?: number;
+
+ seconds?: number;
+ second?: number;
+ s?: number;
+
+ milliseconds?: number;
+ millisecond?: number;
+ ms?: number;
+ }
+
+ interface DurationInputObject extends MomentInputObject {
+ quarters?: number;
+ quarter?: number;
+ Q?: number;
+ }
+
+ interface MomentSetObject extends MomentInputObject {
+ weekYears?: number;
+ weekYear?: number;
+ gg?: number;
+
+ isoWeekYears?: number;
+ isoWeekYear?: number;
+ GG?: number;
+
+ quarters?: number;
+ quarter?: number;
+ Q?: number;
+
+ weeks?: number;
+ week?: number;
+ w?: number;
+
+ isoWeeks?: number;
+ isoWeek?: number;
+ W?: number;
+
+ dayOfYears?: number;
+ dayOfYear?: number;
+ DDD?: number;
+
+ weekdays?: number;
+ weekday?: number;
+ e?: number;
+
+ isoWeekdays?: number;
+ isoWeekday?: number;
+ E?: number;
+ }
+
+ interface FromTo {
+ from: MomentInput;
+ to: MomentInput;
+ }
+
+ type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
+ type DurationInputArg1 = Duration | number | string | FromTo | DurationInputObject | void; // null | undefined
+ type DurationInputArg2 = unitOfTime.DurationConstructor;
+ type LocaleSpecifier = string | Moment | Duration | string[];
+
+ interface MomentCreationData {
+ input: string;
+ format: string;
+ locale: Locale;
+ isUTC: boolean;
+ strict: boolean;
+ }
+
+ interface Moment {
+ format(format?: string): string;
+
+ startOf(unitOfTime: unitOfTime.StartOf): Moment;
+ endOf(unitOfTime: unitOfTime.StartOf): Moment;
+
+ add(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment;
+ /**
+ * @deprecated reverse syntax
+ */
+ add(unit: unitOfTime.DurationConstructor, amount: number|string): Moment;
+
+ subtract(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment;
+ /**
+ * @deprecated reverse syntax
+ */
+ subtract(unit: unitOfTime.DurationConstructor, amount: number|string): Moment;
+
+ calendar(time?: MomentInput, formats?: CalendarSpec): string;
+
+ clone(): Moment;
+
+ /**
+ * @return Unix timestamp in milliseconds
+ */
+ valueOf(): number;
+
+ // current date/time in local mode
+ local(keepLocalTime?: boolean): Moment;
+ isLocal(): boolean;
+
+ // current date/time in UTC mode
+ utc(keepLocalTime?: boolean): Moment;
+ isUTC(): boolean;
+ /**
+ * @deprecated use isUTC
+ */
+ isUtc(): boolean;
+
+ parseZone(): Moment;
+ isValid(): boolean;
+ invalidAt(): number;
+
+ hasAlignedHourOffset(other?: MomentInput): boolean;
+
+ creationData(): MomentCreationData;
+ parsingFlags(): MomentParsingFlags;
+
+ year(y: number): Moment;
+ year(): number;
+ /**
+ * @deprecated use year(y)
+ */
+ years(y: number): Moment;
+ /**
+ * @deprecated use year()
+ */
+ years(): number;
+ quarter(): number;
+ quarter(q: number): Moment;
+ quarters(): number;
+ quarters(q: number): Moment;
+ month(M: number|string): Moment;
+ month(): number;
+ /**
+ * @deprecated use month(M)
+ */
+ months(M: number|string): Moment;
+ /**
+ * @deprecated use month()
+ */
+ months(): number;
+ day(d: number|string): Moment;
+ day(): number;
+ days(d: number|string): Moment;
+ days(): number;
+ date(d: number): Moment;
+ date(): number;
+ /**
+ * @deprecated use date(d)
+ */
+ dates(d: number): Moment;
+ /**
+ * @deprecated use date()
+ */
+ dates(): number;
+ hour(h: number): Moment;
+ hour(): number;
+ hours(h: number): Moment;
+ hours(): number;
+ minute(m: number): Moment;
+ minute(): number;
+ minutes(m: number): Moment;
+ minutes(): number;
+ second(s: number): Moment;
+ second(): number;
+ seconds(s: number): Moment;
+ seconds(): number;
+ millisecond(ms: number): Moment;
+ millisecond(): number;
+ milliseconds(ms: number): Moment;
+ milliseconds(): number;
+ weekday(): number;
+ weekday(d: number): Moment;
+ isoWeekday(): number;
+ isoWeekday(d: number|string): Moment;
+ weekYear(): number;
+ weekYear(d: number): Moment;
+ isoWeekYear(): number;
+ isoWeekYear(d: number): Moment;
+ week(): number;
+ week(d: number): Moment;
+ weeks(): number;
+ weeks(d: number): Moment;
+ isoWeek(): number;
+ isoWeek(d: number): Moment;
+ isoWeeks(): number;
+ isoWeeks(d: number): Moment;
+ weeksInYear(): number;
+ isoWeeksInYear(): number;
+ dayOfYear(): number;
+ dayOfYear(d: number): Moment;
+
+ from(inp: MomentInput, suffix?: boolean): string;
+ to(inp: MomentInput, suffix?: boolean): string;
+ fromNow(withoutSuffix?: boolean): string;
+ toNow(withoutPrefix?: boolean): string;
+
+ diff(b: MomentInput, unitOfTime?: unitOfTime.Diff, precise?: boolean): number;
+
+ toArray(): number[];
+ toDate(): Date;
+ toISOString(): string;
+ inspect(): string;
+ toJSON(): string;
+ unix(): number;
+
+ isLeapYear(): boolean;
+ /**
+ * @deprecated in favor of utcOffset
+ */
+ zone(): number;
+ zone(b: number|string): Moment;
+ utcOffset(): number;
+ utcOffset(b: number|string, keepLocalTime?: boolean): Moment;
+ isUTCOffset(): boolean;
+ daysInMonth(): number;
+ isDST(): boolean;
+
+ zoneAbbr(): string;
+ zoneName(): string;
+
+ isBefore(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean;
+ isAfter(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean;
+ isSame(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean;
+ isSameOrAfter(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean;
+ isSameOrBefore(inp?: MomentInput, granularity?: unitOfTime.StartOf): boolean;
+ isBetween(a: MomentInput, b: MomentInput, granularity?: unitOfTime.StartOf, inclusivity?: "()" | "[)" | "(]" | "[]"): boolean;
+
+ /**
+ * @deprecated as of 2.8.0, use locale
+ */
+ lang(language: LocaleSpecifier): Moment;
+ /**
+ * @deprecated as of 2.8.0, use locale
+ */
+ lang(): Locale;
+
+ locale(): string;
+ locale(locale: LocaleSpecifier): Moment;
+
+ localeData(): Locale;
+
+ /**
+ * @deprecated no reliable implementation
+ */
+ isDSTShifted(): boolean;
+
+ // NOTE(constructor): Same as moment constructor
+ /**
+ * @deprecated as of 2.7.0, use moment.min/max
+ */
+ max(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment;
+ /**
+ * @deprecated as of 2.7.0, use moment.min/max
+ */
+ max(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment;
+
+ // NOTE(constructor): Same as moment constructor
+ /**
+ * @deprecated as of 2.7.0, use moment.min/max
+ */
+ min(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment;
+ /**
+ * @deprecated as of 2.7.0, use moment.min/max
+ */
+ min(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment;
+
+ get(unit: unitOfTime.All): number;
+ set(unit: unitOfTime.All, value: number): Moment;
+ set(objectLiteral: MomentSetObject): Moment;
+
+ toObject(): MomentObjectOutput;
+ }
+
+ export var version: string;
+ export var fn: Moment;
+
+ // NOTE(constructor): Same as moment constructor
+ export function utc(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment;
+ export function utc(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment;
+
+ export function unix(timestamp: number): Moment;
+
+ export function invalid(flags?: MomentParsingFlagsOpt): Moment;
+ export function isMoment(m: any): m is Moment;
+ export function isDate(m: any): m is Date;
+ export function isDuration(d: any): d is Duration;
+
+ /**
+ * @deprecated in 2.8.0
+ */
+ export function lang(language?: string): string;
+ /**
+ * @deprecated in 2.8.0
+ */
+ export function lang(language?: string, definition?: Locale): string;
+
+ export function locale(language?: string): string;
+ export function locale(language?: string[]): string;
+ export function locale(language?: string, definition?: LocaleSpecification | void): string; // null | undefined
+
+ export function localeData(key?: string | string[]): Locale;
+
+ export function duration(inp?: DurationInputArg1, unit?: DurationInputArg2): Duration;
+
+ // NOTE(constructor): Same as moment constructor
+ export function parseZone(inp?: MomentInput, format?: MomentFormatSpecification, strict?: boolean): Moment;
+ export function parseZone(inp?: MomentInput, format?: MomentFormatSpecification, language?: string, strict?: boolean): Moment;
+
+ export function months(): string[];
+ export function months(index: number): string;
+ export function months(format: string): string[];
+ export function months(format: string, index: number): string;
+ export function monthsShort(): string[];
+ export function monthsShort(index: number): string;
+ export function monthsShort(format: string): string[];
+ export function monthsShort(format: string, index: number): string;
+
+ export function weekdays(): string[];
+ export function weekdays(index: number): string;
+ export function weekdays(format: string): string[];
+ export function weekdays(format: string, index: number): string;
+ export function weekdays(localeSorted: boolean): string[];
+ export function weekdays(localeSorted: boolean, index: number): string;
+ export function weekdays(localeSorted: boolean, format: string): string[];
+ export function weekdays(localeSorted: boolean, format: string, index: number): string;
+ export function weekdaysShort(): string[];
+ export function weekdaysShort(index: number): string;
+ export function weekdaysShort(format: string): string[];
+ export function weekdaysShort(format: string, index: number): string;
+ export function weekdaysShort(localeSorted: boolean): string[];
+ export function weekdaysShort(localeSorted: boolean, index: number): string;
+ export function weekdaysShort(localeSorted: boolean, format: string): string[];
+ export function weekdaysShort(localeSorted: boolean, format: string, index: number): string;
+ export function weekdaysMin(): string[];
+ export function weekdaysMin(index: number): string;
+ export function weekdaysMin(format: string): string[];
+ export function weekdaysMin(format: string, index: number): string;
+ export function weekdaysMin(localeSorted: boolean): string[];
+ export function weekdaysMin(localeSorted: boolean, index: number): string;
+ export function weekdaysMin(localeSorted: boolean, format: string): string[];
+ export function weekdaysMin(localeSorted: boolean, format: string, index: number): string;
+
+ export function min(...moments: MomentInput[]): Moment;
+ export function max(...moments: MomentInput[]): Moment;
+
+ /**
+ * Returns unix time in milliseconds. Overwrite for profit.
+ */
+ export function now(): number;
+
+ export function defineLocale(language: string, localeSpec: LocaleSpecification | void): Locale; // null
+ export function updateLocale(language: string, localeSpec: LocaleSpecification | void): Locale; // null
+
+ export function locales(): string[];
+
+ export function normalizeUnits(unit: unitOfTime.All): string;
+ export function relativeTimeThreshold(threshold: string): number | boolean;
+ export function relativeTimeThreshold(threshold: string, limit: number): boolean;
+ export function relativeTimeRounding(fn: (num: number) => number): boolean;
+ export function relativeTimeRounding(): (num: number) => number;
+ export function calendarFormat(m: Moment, now: Moment): string;
+
+ /**
+ * Constant used to enable explicit ISO_8601 format parsing.
+ */
+ export var ISO_8601: MomentBuiltinFormat;
+
+ export var defaultFormat: string;
+ export var defaultFormatUtc: string;
+}
+
+export = moment;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.js
new file mode 100644
index 00000000000..f2269a1c444
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/moment.js
@@ -0,0 +1,4301 @@
+//! moment.js
+//! version : 2.17.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ global.moment = factory()
+}(this, (function () { 'use strict';
+
+var hookCallback;
+
+function hooks () {
+ return hookCallback.apply(null, arguments);
+}
+
+// This is done to register the method called with moment()
+// without creating circular dependencies.
+function setHookCallback (callback) {
+ hookCallback = callback;
+}
+
+function isArray(input) {
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+}
+
+function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return input != null && Object.prototype.toString.call(input) === '[object Object]';
+}
+
+function isObjectEmpty(obj) {
+ var k;
+ for (k in obj) {
+ // even if its not own property I'd still call it non-empty
+ return false;
+ }
+ return true;
+}
+
+function isNumber(input) {
+ return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+}
+
+function isDate(input) {
+ return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+}
+
+function map(arr, fn) {
+ var res = [], i;
+ for (i = 0; i < arr.length; ++i) {
+ res.push(fn(arr[i], i));
+ }
+ return res;
+}
+
+function hasOwnProp(a, b) {
+ return Object.prototype.hasOwnProperty.call(a, b);
+}
+
+function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
+
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
+
+ return a;
+}
+
+function createUTC (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, true).utc();
+}
+
+function defaultParsingFlags() {
+ // We need to deep clone this object.
+ return {
+ empty : false,
+ unusedTokens : [],
+ unusedInput : [],
+ overflow : -2,
+ charsLeftOver : 0,
+ nullInput : false,
+ invalidMonth : null,
+ invalidFormat : false,
+ userInvalidated : false,
+ iso : false,
+ parsedDateParts : [],
+ meridiem : null
+ };
+}
+
+function getParsingFlags(m) {
+ if (m._pf == null) {
+ m._pf = defaultParsingFlags();
+ }
+ return m._pf;
+}
+
+var some;
+if (Array.prototype.some) {
+ some = Array.prototype.some;
+} else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+}
+
+var some$1 = some;
+
+function isValid(m) {
+ if (m._isValid == null) {
+ var flags = getParsingFlags(m);
+ var parsedParts = some$1.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
+ var isNowValid = !isNaN(m._d.getTime()) &&
+ flags.overflow < 0 &&
+ !flags.empty &&
+ !flags.invalidMonth &&
+ !flags.invalidWeekday &&
+ !flags.nullInput &&
+ !flags.invalidFormat &&
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
+
+ if (m._strict) {
+ isNowValid = isNowValid &&
+ flags.charsLeftOver === 0 &&
+ flags.unusedTokens.length === 0 &&
+ flags.bigHour === undefined;
+ }
+
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ }
+ else {
+ return isNowValid;
+ }
+ }
+ return m._isValid;
+}
+
+function createInvalid (flags) {
+ var m = createUTC(NaN);
+ if (flags != null) {
+ extend(getParsingFlags(m), flags);
+ }
+ else {
+ getParsingFlags(m).userInvalidated = true;
+ }
+
+ return m;
+}
+
+function isUndefined(input) {
+ return input === void 0;
+}
+
+// Plugins that add properties should also add the key here (null value),
+// so we can properly clone ourselves.
+var momentProperties = hooks.momentProperties = [];
+
+function copyConfig(to, from) {
+ var i, prop, val;
+
+ if (!isUndefined(from._isAMomentObject)) {
+ to._isAMomentObject = from._isAMomentObject;
+ }
+ if (!isUndefined(from._i)) {
+ to._i = from._i;
+ }
+ if (!isUndefined(from._f)) {
+ to._f = from._f;
+ }
+ if (!isUndefined(from._l)) {
+ to._l = from._l;
+ }
+ if (!isUndefined(from._strict)) {
+ to._strict = from._strict;
+ }
+ if (!isUndefined(from._tzm)) {
+ to._tzm = from._tzm;
+ }
+ if (!isUndefined(from._isUTC)) {
+ to._isUTC = from._isUTC;
+ }
+ if (!isUndefined(from._offset)) {
+ to._offset = from._offset;
+ }
+ if (!isUndefined(from._pf)) {
+ to._pf = getParsingFlags(from);
+ }
+ if (!isUndefined(from._locale)) {
+ to._locale = from._locale;
+ }
+
+ if (momentProperties.length > 0) {
+ for (i in momentProperties) {
+ prop = momentProperties[i];
+ val = from[prop];
+ if (!isUndefined(val)) {
+ to[prop] = val;
+ }
+ }
+ }
+
+ return to;
+}
+
+var updateInProgress = false;
+
+// Moment prototype object
+function Moment(config) {
+ copyConfig(this, config);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+ if (!this.isValid()) {
+ this._d = new Date(NaN);
+ }
+ // Prevent infinite loop in case updateOffset creates new moment
+ // objects.
+ if (updateInProgress === false) {
+ updateInProgress = true;
+ hooks.updateOffset(this);
+ updateInProgress = false;
+ }
+}
+
+function isMoment (obj) {
+ return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+}
+
+function absFloor (number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+}
+
+function toInt(argumentForCoercion) {
+ var coercedNumber = +argumentForCoercion,
+ value = 0;
+
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+ value = absFloor(coercedNumber);
+ }
+
+ return value;
+}
+
+// compare two arrays, return the number of differences
+function compareArrays(array1, array2, dontConvert) {
+ var len = Math.min(array1.length, array2.length),
+ lengthDiff = Math.abs(array1.length - array2.length),
+ diffs = 0,
+ i;
+ for (i = 0; i < len; i++) {
+ if ((dontConvert && array1[i] !== array2[i]) ||
+ (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+ diffs++;
+ }
+ }
+ return diffs + lengthDiff;
+}
+
+function warn(msg) {
+ if (hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
+}
+
+function deprecate(msg, fn) {
+ var firstTime = true;
+
+ return extend(function () {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
+}
+
+var deprecations = {};
+
+function deprecateSimple(name, msg) {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
+ }
+}
+
+hooks.suppressDeprecationWarnings = false;
+hooks.deprecationHandler = null;
+
+function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+}
+
+function set (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
+ }
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+}
+
+function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig), prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
+ }
+ }
+ return res;
+}
+
+function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
+}
+
+var keys;
+
+if (Object.keys) {
+ keys = Object.keys;
+} else {
+ keys = function (obj) {
+ var i, res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ };
+}
+
+var keys$1 = keys;
+
+var defaultCalendar = {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+};
+
+function calendar (key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
+}
+
+var defaultLongDateFormat = {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+};
+
+function longDateFormat (key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
+
+ if (format || !formatUpper) {
+ return format;
+ }
+
+ this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
+
+ return this._longDateFormat[key];
+}
+
+var defaultInvalidDate = 'Invalid date';
+
+function invalidDate () {
+ return this._invalidDate;
+}
+
+var defaultOrdinal = '%d';
+var defaultOrdinalParse = /\d{1,2}/;
+
+function ordinal (number) {
+ return this._ordinal.replace('%d', number);
+}
+
+var defaultRelativeTime = {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+};
+
+function relativeTime (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (isFunction(output)) ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+}
+
+function pastFuture (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+}
+
+var aliases = {};
+
+function addUnitAlias (unit, shorthand) {
+ var lowerCase = unit.toLowerCase();
+ aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+}
+
+function normalizeUnits(units) {
+ return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+}
+
+function normalizeObjectUnits(inputObject) {
+ var normalizedInput = {},
+ normalizedProp,
+ prop;
+
+ for (prop in inputObject) {
+ if (hasOwnProp(inputObject, prop)) {
+ normalizedProp = normalizeUnits(prop);
+ if (normalizedProp) {
+ normalizedInput[normalizedProp] = inputObject[prop];
+ }
+ }
+ }
+
+ return normalizedInput;
+}
+
+var priorities = {};
+
+function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
+}
+
+function getPrioritizedUnits(unitsObj) {
+ var units = [];
+ for (var u in unitsObj) {
+ units.push({unit: u, priority: priorities[u]});
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+}
+
+function makeGetSet (unit, keepTime) {
+ return function (value) {
+ if (value != null) {
+ set$1(this, unit, value);
+ hooks.updateOffset(this, keepTime);
+ return this;
+ } else {
+ return get(this, unit);
+ }
+ };
+}
+
+function get (mom, unit) {
+ return mom.isValid() ?
+ mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+}
+
+function set$1 (mom, unit, value) {
+ if (mom.isValid()) {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
+}
+
+// MOMENTS
+
+function stringGet (units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+}
+
+
+function stringSet (units, value) {
+ if (typeof units === 'object') {
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units);
+ for (var i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
+ }
+ } else {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units](value);
+ }
+ }
+ return this;
+}
+
+function zeroFill(number, targetLength, forceSign) {
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
+ sign = number >= 0;
+ return (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+}
+
+var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+var formatFunctions = {};
+
+var formatTokenFunctions = {};
+
+// token: 'M'
+// padded: ['MM', 2]
+// ordinal: 'Mo'
+// callback: function () { this.month() + 1 }
+function addFormatToken (token, padded, ordinal, callback) {
+ var func = callback;
+ if (typeof callback === 'string') {
+ func = function () {
+ return this[callback]();
+ };
+ }
+ if (token) {
+ formatTokenFunctions[token] = func;
+ }
+ if (padded) {
+ formatTokenFunctions[padded[0]] = function () {
+ return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+ };
+ }
+ if (ordinal) {
+ formatTokenFunctions[ordinal] = function () {
+ return this.localeData().ordinal(func.apply(this, arguments), token);
+ };
+ }
+}
+
+function removeFormattingTokens(input) {
+ if (input.match(/\[[\s\S]/)) {
+ return input.replace(/^\[|\]$/g, '');
+ }
+ return input.replace(/\\/g, '');
+}
+
+function makeFormatFunction(format) {
+ var array = format.match(formattingTokens), i, length;
+
+ for (i = 0, length = array.length; i < length; i++) {
+ if (formatTokenFunctions[array[i]]) {
+ array[i] = formatTokenFunctions[array[i]];
+ } else {
+ array[i] = removeFormattingTokens(array[i]);
+ }
+ }
+
+ return function (mom) {
+ var output = '', i;
+ for (i = 0; i < length; i++) {
+ output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+ }
+ return output;
+ };
+}
+
+// format date using native date object
+function formatMoment(m, format) {
+ if (!m.isValid()) {
+ return m.localeData().invalidDate();
+ }
+
+ format = expandFormat(format, m.localeData());
+ formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+ return formatFunctions[format](m);
+}
+
+function expandFormat(format, locale) {
+ var i = 5;
+
+ function replaceLongDateFormatTokens(input) {
+ return locale.longDateFormat(input) || input;
+ }
+
+ localFormattingTokens.lastIndex = 0;
+ while (i >= 0 && localFormattingTokens.test(format)) {
+ format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+ localFormattingTokens.lastIndex = 0;
+ i -= 1;
+ }
+
+ return format;
+}
+
+var match1 = /\d/; // 0 - 9
+var match2 = /\d\d/; // 00 - 99
+var match3 = /\d{3}/; // 000 - 999
+var match4 = /\d{4}/; // 0000 - 9999
+var match6 = /[+-]?\d{6}/; // -999999 - 999999
+var match1to2 = /\d\d?/; // 0 - 99
+var match3to4 = /\d\d\d\d?/; // 999 - 9999
+var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
+var match1to3 = /\d{1,3}/; // 0 - 999
+var match1to4 = /\d{1,4}/; // 0 - 9999
+var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
+
+var matchUnsigned = /\d+/; // 0 - inf
+var matchSigned = /[+-]?\d+/; // -inf - inf
+
+var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+
+var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+// any word (or two) characters or numbers including two/three word month in arabic.
+// includes scottish gaelic two word and hyphenated months
+var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
+
+var regexes = {};
+
+function addRegexToken (token, regex, strictRegex) {
+ regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+ return (isStrict && strictRegex) ? strictRegex : regex;
+ };
+}
+
+function getParseRegexForToken (token, config) {
+ if (!hasOwnProp(regexes, token)) {
+ return new RegExp(unescapeFormat(token));
+ }
+
+ return regexes[token](config._strict, config._locale);
+}
+
+// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+function unescapeFormat(s) {
+ return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return p1 || p2 || p3 || p4;
+ }));
+}
+
+function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+}
+
+var tokens = {};
+
+function addParseToken (token, callback) {
+ var i, func = callback;
+ if (typeof token === 'string') {
+ token = [token];
+ }
+ if (isNumber(callback)) {
+ func = function (input, array) {
+ array[callback] = toInt(input);
+ };
+ }
+ for (i = 0; i < token.length; i++) {
+ tokens[token[i]] = func;
+ }
+}
+
+function addWeekParseToken (token, callback) {
+ addParseToken(token, function (input, array, config, token) {
+ config._w = config._w || {};
+ callback(input, config._w, config, token);
+ });
+}
+
+function addTimeToArrayFromToken(token, input, config) {
+ if (input != null && hasOwnProp(tokens, token)) {
+ tokens[token](input, config._a, config, token);
+ }
+}
+
+var YEAR = 0;
+var MONTH = 1;
+var DATE = 2;
+var HOUR = 3;
+var MINUTE = 4;
+var SECOND = 5;
+var MILLISECOND = 6;
+var WEEK = 7;
+var WEEKDAY = 8;
+
+var indexOf;
+
+if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+} else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+var indexOf$1 = indexOf;
+
+function daysInMonth(year, month) {
+ return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+}
+
+// FORMATTING
+
+addFormatToken('M', ['MM', 2], 'Mo', function () {
+ return this.month() + 1;
+});
+
+addFormatToken('MMM', 0, 0, function (format) {
+ return this.localeData().monthsShort(this, format);
+});
+
+addFormatToken('MMMM', 0, 0, function (format) {
+ return this.localeData().months(this, format);
+});
+
+// ALIASES
+
+addUnitAlias('month', 'M');
+
+// PRIORITY
+
+addUnitPriority('month', 8);
+
+// PARSING
+
+addRegexToken('M', match1to2);
+addRegexToken('MM', match1to2, match2);
+addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+});
+addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+});
+
+addParseToken(['M', 'MM'], function (input, array) {
+ array[MONTH] = toInt(input) - 1;
+});
+
+addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+ var month = config._locale.monthsParse(input, token, config._strict);
+ // if we didn't find a month name, mark the date as invalid.
+ if (month != null) {
+ array[MONTH] = month;
+ } else {
+ getParsingFlags(config).invalidMonth = input;
+ }
+});
+
+// LOCALES
+
+var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
+var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+function localeMonths (m, format) {
+ if (!m) {
+ return this._months;
+ }
+ return isArray(this._months) ? this._months[m.month()] :
+ this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+function localeMonthsShort (m, format) {
+ if (!m) {
+ return this._monthsShort;
+ }
+ return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+ this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+function handleStrictParse(monthName, format, strict) {
+ var i, ii, mom, llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf$1.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf$1.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+}
+
+function localeMonthsParse (monthName, format, strict) {
+ var i, mom, regex;
+
+ if (this._monthsParseExact) {
+ return handleStrictParse.call(this, monthName, format, strict);
+ }
+
+ if (!this._monthsParse) {
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ }
+
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+ this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+ }
+ if (!strict && !this._monthsParse[i]) {
+ regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+ this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
+ return i;
+ }
+ }
+}
+
+// MOMENTS
+
+function setMonth (mom, value) {
+ var dayOfMonth;
+
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
+
+ if (typeof value === 'string') {
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (!isNumber(value)) {
+ return mom;
+ }
+ }
+ }
+
+ dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+ return mom;
+}
+
+function getSetMonth (value) {
+ if (value != null) {
+ setMonth(this, value);
+ hooks.updateOffset(this, true);
+ return this;
+ } else {
+ return get(this, 'Month');
+ }
+}
+
+function getDaysInMonth () {
+ return daysInMonth(this.year(), this.month());
+}
+
+var defaultMonthsShortRegex = matchWord;
+function monthsShortRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict ?
+ this._monthsShortStrictRegex : this._monthsShortRegex;
+ }
+}
+
+var defaultMonthsRegex = matchWord;
+function monthsRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict ?
+ this._monthsStrictRegex : this._monthsRegex;
+ }
+}
+
+function computeMonthsParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ }
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+}
+
+// FORMATTING
+
+addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? '' + y : '+' + y;
+});
+
+addFormatToken(0, ['YY', 2], 0, function () {
+ return this.year() % 100;
+});
+
+addFormatToken(0, ['YYYY', 4], 0, 'year');
+addFormatToken(0, ['YYYYY', 5], 0, 'year');
+addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+// ALIASES
+
+addUnitAlias('year', 'y');
+
+// PRIORITIES
+
+addUnitPriority('year', 1);
+
+// PARSING
+
+addRegexToken('Y', matchSigned);
+addRegexToken('YY', match1to2, match2);
+addRegexToken('YYYY', match1to4, match4);
+addRegexToken('YYYYY', match1to6, match6);
+addRegexToken('YYYYYY', match1to6, match6);
+
+addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+addParseToken('YYYY', function (input, array) {
+ array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+});
+addParseToken('YY', function (input, array) {
+ array[YEAR] = hooks.parseTwoDigitYear(input);
+});
+addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+});
+
+// HELPERS
+
+function daysInYear(year) {
+ return isLeapYear(year) ? 366 : 365;
+}
+
+function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+}
+
+// HOOKS
+
+hooks.parseTwoDigitYear = function (input) {
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+};
+
+// MOMENTS
+
+var getSetYear = makeGetSet('FullYear', true);
+
+function getIsLeapYear () {
+ return isLeapYear(this.year());
+}
+
+function createDate (y, m, d, h, M, s, ms) {
+ //can't just apply() to create a date:
+ //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ //the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ return date;
+}
+
+function createUTCDate (y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+
+ //the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+}
+
+// start-of-first-week - start-of-year
+function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+ return -fwdlw + fwd - 1;
+}
+
+//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear, resDayOfYear;
+
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
+
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear
+ };
+}
+
+function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek, resYear;
+
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
+
+ return {
+ week: resWeek,
+ year: resYear
+ };
+}
+
+function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+}
+
+// FORMATTING
+
+addFormatToken('w', ['ww', 2], 'wo', 'week');
+addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+// ALIASES
+
+addUnitAlias('week', 'w');
+addUnitAlias('isoWeek', 'W');
+
+// PRIORITIES
+
+addUnitPriority('week', 5);
+addUnitPriority('isoWeek', 5);
+
+// PARSING
+
+addRegexToken('w', match1to2);
+addRegexToken('ww', match1to2, match2);
+addRegexToken('W', match1to2);
+addRegexToken('WW', match1to2, match2);
+
+addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+ week[token.substr(0, 1)] = toInt(input);
+});
+
+// HELPERS
+
+// LOCALES
+
+function localeWeek (mom) {
+ return weekOfYear(mom, this._week.dow, this._week.doy).week;
+}
+
+var defaultLocaleWeek = {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+};
+
+function localeFirstDayOfWeek () {
+ return this._week.dow;
+}
+
+function localeFirstDayOfYear () {
+ return this._week.doy;
+}
+
+// MOMENTS
+
+function getSetWeek (input) {
+ var week = this.localeData().week(this);
+ return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+function getSetISOWeek (input) {
+ var week = weekOfYear(this, 1, 4).week;
+ return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+// FORMATTING
+
+addFormatToken('d', 0, 'do', 'day');
+
+addFormatToken('dd', 0, 0, function (format) {
+ return this.localeData().weekdaysMin(this, format);
+});
+
+addFormatToken('ddd', 0, 0, function (format) {
+ return this.localeData().weekdaysShort(this, format);
+});
+
+addFormatToken('dddd', 0, 0, function (format) {
+ return this.localeData().weekdays(this, format);
+});
+
+addFormatToken('e', 0, 0, 'weekday');
+addFormatToken('E', 0, 0, 'isoWeekday');
+
+// ALIASES
+
+addUnitAlias('day', 'd');
+addUnitAlias('weekday', 'e');
+addUnitAlias('isoWeekday', 'E');
+
+// PRIORITY
+addUnitPriority('day', 11);
+addUnitPriority('weekday', 11);
+addUnitPriority('isoWeekday', 11);
+
+// PARSING
+
+addRegexToken('d', match1to2);
+addRegexToken('e', match1to2);
+addRegexToken('E', match1to2);
+addRegexToken('dd', function (isStrict, locale) {
+ return locale.weekdaysMinRegex(isStrict);
+});
+addRegexToken('ddd', function (isStrict, locale) {
+ return locale.weekdaysShortRegex(isStrict);
+});
+addRegexToken('dddd', function (isStrict, locale) {
+ return locale.weekdaysRegex(isStrict);
+});
+
+addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+ var weekday = config._locale.weekdaysParse(input, token, config._strict);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (weekday != null) {
+ week.d = weekday;
+ } else {
+ getParsingFlags(config).invalidWeekday = input;
+ }
+});
+
+addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+ week[token] = toInt(input);
+});
+
+// HELPERS
+
+function parseWeekday(input, locale) {
+ if (typeof input !== 'string') {
+ return input;
+ }
+
+ if (!isNaN(input)) {
+ return parseInt(input, 10);
+ }
+
+ input = locale.weekdaysParse(input);
+ if (typeof input === 'number') {
+ return input;
+ }
+
+ return null;
+}
+
+function parseIsoWeekday(input, locale) {
+ if (typeof input === 'string') {
+ return locale.weekdaysParse(input) % 7 || 7;
+ }
+ return isNaN(input) ? null : input;
+}
+
+// LOCALES
+
+var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+function localeWeekdays (m, format) {
+ if (!m) {
+ return this._weekdays;
+ }
+ return isArray(this._weekdays) ? this._weekdays[m.day()] :
+ this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+}
+
+var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+function localeWeekdaysShort (m) {
+ return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+}
+
+var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+function localeWeekdaysMin (m) {
+ return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+}
+
+function handleStrictParse$1(weekdayName, format, strict) {
+ var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
+
+ for (i = 0; i < 7; ++i) {
+ mom = createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf$1.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf$1.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+}
+
+function localeWeekdaysParse (weekdayName, format, strict) {
+ var i, mom, regex;
+
+ if (this._weekdaysParseExact) {
+ return handleStrictParse$1.call(this, weekdayName, format, strict);
+ }
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+
+ mom = createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+ this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+ this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+ }
+ if (!this._weekdaysParse[i]) {
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
+}
+
+// MOMENTS
+
+function getSetDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+}
+
+function getSetLocaleDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+}
+
+function getSetISODayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+}
+
+var defaultWeekdaysRegex = matchWord;
+function weekdaysRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict ?
+ this._weekdaysStrictRegex : this._weekdaysRegex;
+ }
+}
+
+var defaultWeekdaysShortRegex = matchWord;
+function weekdaysShortRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict ?
+ this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+ }
+}
+
+var defaultWeekdaysMinRegex = matchWord;
+function weekdaysMinRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict ?
+ this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+ }
+}
+
+
+function computeWeekdaysParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom, minp, shortp, longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, 1]).day(i);
+ minp = this.weekdaysMin(mom, '');
+ shortp = this.weekdaysShort(mom, '');
+ longp = this.weekdays(mom, '');
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 7; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
+
+ this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+}
+
+// FORMATTING
+
+function hFormat() {
+ return this.hours() % 12 || 12;
+}
+
+function kFormat() {
+ return this.hours() || 24;
+}
+
+addFormatToken('H', ['HH', 2], 0, 'hour');
+addFormatToken('h', ['hh', 2], 0, hFormat);
+addFormatToken('k', ['kk', 2], 0, kFormat);
+
+addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('hmmss', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+});
+
+addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('Hmmss', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+});
+
+function meridiem (token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+ });
+}
+
+meridiem('a', true);
+meridiem('A', false);
+
+// ALIASES
+
+addUnitAlias('hour', 'h');
+
+// PRIORITY
+addUnitPriority('hour', 13);
+
+// PARSING
+
+function matchMeridiem (isStrict, locale) {
+ return locale._meridiemParse;
+}
+
+addRegexToken('a', matchMeridiem);
+addRegexToken('A', matchMeridiem);
+addRegexToken('H', match1to2);
+addRegexToken('h', match1to2);
+addRegexToken('HH', match1to2, match2);
+addRegexToken('hh', match1to2, match2);
+
+addRegexToken('hmm', match3to4);
+addRegexToken('hmmss', match5to6);
+addRegexToken('Hmm', match3to4);
+addRegexToken('Hmmss', match5to6);
+
+addParseToken(['H', 'HH'], HOUR);
+addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+});
+addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+});
+addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+});
+
+// LOCALES
+
+function localeIsPM (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+}
+
+var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+function localeMeridiem (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+}
+
+
+// MOMENTS
+
+// Setting the hour should keep the time, because the user explicitly
+// specified which hour he wants. So trying to maintain the same hour (in
+// a new timezone) makes sense. Adding/subtracting hours does not follow
+// this rule.
+var getSetHour = makeGetSet('Hours', true);
+
+// months
+// week
+// weekdays
+// meridiem
+var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ ordinalParse: defaultOrdinalParse,
+ relativeTime: defaultRelativeTime,
+
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
+
+ week: defaultLocaleWeek,
+
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
+
+ meridiemParse: defaultLocaleMeridiemParse
+};
+
+// internal storage for locale config files
+var locales = {};
+var localeFamilies = {};
+var globalLocale;
+
+function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+}
+
+// pick the locale from the array
+// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return null;
+}
+
+function loadLocale(name) {
+ var oldLocale = null;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (!locales[name] && (typeof module !== 'undefined') &&
+ module && module.exports) {
+ try {
+ oldLocale = globalLocale._abbr;
+ require('./locale/' + name);
+ // because defineLocale currently also sets the global locale, we
+ // want to undo that for lazy loaded locales
+ getSetGlobalLocale(oldLocale);
+ } catch (e) { }
+ }
+ return locales[name];
+}
+
+// This function will load locale and then set the global locale. If
+// no arguments are passed in, it will simply return the current global
+// locale key.
+function getSetGlobalLocale (key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = getLocale(key);
+ }
+ else {
+ data = defineLocale(key, values);
+ }
+
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ }
+ }
+
+ return globalLocale._abbr;
+}
+
+function defineLocale (name, config) {
+ if (config !== null) {
+ var parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple('defineLocaleOverride',
+ 'use moment.updateLocale(localeName, config) to change ' +
+ 'an existing locale. moment.defineLocale(localeName, ' +
+ 'config) should only be used for creating a new locale ' +
+ 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ if (!localeFamilies[config.parentLocale]) {
+ localeFamilies[config.parentLocale] = [];
+ }
+ localeFamilies[config.parentLocale].push({
+ name: name,
+ config: config
+ });
+ return null;
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+ if (localeFamilies[name]) {
+ localeFamilies[name].forEach(function (x) {
+ defineLocale(x.name, x.config);
+ });
+ }
+
+ // backwards compat for now: also set the locale
+ // make sure we set the locale AFTER all child locales have been
+ // created, so we won't end up with the child locale set.
+ getSetGlobalLocale(name);
+
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+}
+
+function updateLocale(name, config) {
+ if (config != null) {
+ var locale, parentConfig = baseConfig;
+ // MERGE
+ if (locales[name] != null) {
+ parentConfig = locales[name]._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+
+ // backwards compat for now: also set the locale
+ getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+}
+
+// returns locale data
+function getLocale (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return globalLocale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
+}
+
+function listLocales() {
+ return keys$1(locales);
+}
+
+function checkOverflow (m) {
+ var overflow;
+ var a = m._a;
+
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
+ a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+ a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+ a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
+ a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
+ a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
+
+ getParsingFlags(m).overflow = overflow;
+ }
+
+ return m;
+}
+
+// iso 8601 regex
+// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+var isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ // YYYYMM is NOT allowed by the standard
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/]
+];
+
+// iso time formats and regexes
+var isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/]
+];
+
+var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+// date from iso format
+function configFromISO(config) {
+ var i, l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime, dateFormat, timeFormat, tzFormat;
+
+ if (match) {
+ getParsingFlags(config).iso = true;
+
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+}
+
+// date from iso format or fallback
+function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
+
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ hooks.createFromInputFallback(config);
+ }
+}
+
+hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non ISO date formats are ' +
+ 'discouraged and will be removed in an upcoming major release. Please refer to ' +
+ 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+);
+
+// Pick the first defined of two or three arguments.
+function defaults(a, b, c) {
+ if (a != null) {
+ return a;
+ }
+ if (b != null) {
+ return b;
+ }
+ return c;
+}
+
+function currentDateArray(config) {
+ // hooks is actually the exported moment object
+ var nowValue = new Date(hooks.now());
+ if (config._useUTC) {
+ return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+ }
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+}
+
+// convert an array to a date.
+// the array should mirror the parameters below
+// note: all values past the year are optional and will default to the lowest possible value.
+// [year, month, day , hour, minute, second, millisecond]
+function configFromArray (config) {
+ var i, date, input = [], currentDate, yearToUse;
+
+ if (config._d) {
+ return;
+ }
+
+ currentDate = currentDateArray(config);
+
+ //compute day of the year from weeks and weekdays
+ if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+ dayOfYearFromWeekInfo(config);
+ }
+
+ //if the day of the year is set, figure out what it is
+ if (config._dayOfYear) {
+ yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+ if (config._dayOfYear > daysInYear(yearToUse)) {
+ getParsingFlags(config)._overflowDayOfYear = true;
+ }
+
+ date = createUTCDate(yearToUse, 0, config._dayOfYear);
+ config._a[MONTH] = date.getUTCMonth();
+ config._a[DATE] = date.getUTCDate();
+ }
+
+ // Default to current date.
+ // * if no year, month, day of month are given, default to today
+ // * if day of month is given, default month and year
+ // * if month is given, default only year
+ // * if year is given, don't default anything
+ for (i = 0; i < 3 && config._a[i] == null; ++i) {
+ config._a[i] = input[i] = currentDate[i];
+ }
+
+ // Zero out whatever was not defaulted, including time
+ for (; i < 7; i++) {
+ config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+ }
+
+ // Check for 24:00:00.000
+ if (config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
+
+ config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+ // Apply timezone offset from input. The actual utcOffset can be changed
+ // with parseZone.
+ if (config._tzm != null) {
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+ }
+
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
+}
+
+function dayOfYearFromWeekInfo(config) {
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
+
+ w = config._w;
+ if (w.GG != null || w.W != null || w.E != null) {
+ dow = 1;
+ doy = 4;
+
+ // TODO: We need to take the current isoWeekYear, but that depends on
+ // how we interpret now (local, utc, fixed offset). So create
+ // a now version of current config (take local/utc/offset flags, and
+ // create now).
+ weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
+ week = defaults(w.W, 1);
+ weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
+ } else {
+ dow = config._locale._week.dow;
+ doy = config._locale._week.doy;
+
+ var curWeek = weekOfYear(createLocal(), dow, doy);
+
+ weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+ // Default to current week.
+ week = defaults(w.w, curWeek.week);
+
+ if (w.d != null) {
+ // weekday -- low day numbers are considered next week
+ weekday = w.d;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
+ }
+ } else if (w.e != null) {
+ // local weekday -- counting starts from begining of week
+ weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
+ } else {
+ // default to begining of week
+ weekday = dow;
+ }
+ }
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
+}
+
+// constant that refers to the ISO standard
+hooks.ISO_8601 = function () {};
+
+// date from string and format string
+function configFromStringAndFormat(config) {
+ // TODO: Move this to another part of the creation flow to prevent circular deps
+ if (config._f === hooks.ISO_8601) {
+ configFromISO(config);
+ return;
+ }
+
+ config._a = [];
+ getParsingFlags(config).empty = true;
+
+ // This array is used to make a Date, either with `new Date` or `Date.UTC`
+ var string = '' + config._i,
+ i, parsedInput, tokens, token, skipped,
+ stringLength = string.length,
+ totalParsedInputLength = 0;
+
+ tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ // console.log('token', token, 'parsedInput', parsedInput,
+ // 'regex', getParseRegexForToken(token, config));
+ if (parsedInput) {
+ skipped = string.substr(0, string.indexOf(parsedInput));
+ if (skipped.length > 0) {
+ getParsingFlags(config).unusedInput.push(skipped);
+ }
+ string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+ totalParsedInputLength += parsedInput.length;
+ }
+ // don't parse if it's not a known token
+ if (formatTokenFunctions[token]) {
+ if (parsedInput) {
+ getParsingFlags(config).empty = false;
+ }
+ else {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ addTimeToArrayFromToken(token, parsedInput, config);
+ }
+ else if (config._strict && !parsedInput) {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ }
+
+ // add remaining unparsed input length to the string
+ getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+ if (string.length > 0) {
+ getParsingFlags(config).unusedInput.push(string);
+ }
+
+ // clear _12h flag if hour is <= 12
+ if (config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0) {
+ getParsingFlags(config).bigHour = undefined;
+ }
+
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
+ // handle meridiem
+ config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+ configFromArray(config);
+ checkOverflow(config);
+}
+
+
+function meridiemFixWrap (locale, hour, meridiem) {
+ var isPm;
+
+ if (meridiem == null) {
+ // nothing to do
+ return hour;
+ }
+ if (locale.meridiemHour != null) {
+ return locale.meridiemHour(hour, meridiem);
+ } else if (locale.isPM != null) {
+ // Fallback
+ isPm = locale.isPM(meridiem);
+ if (isPm && hour < 12) {
+ hour += 12;
+ }
+ if (!isPm && hour === 12) {
+ hour = 0;
+ }
+ return hour;
+ } else {
+ // this is not supposed to happen
+ return hour;
+ }
+}
+
+// date from string and array of format strings
+function configFromStringAndArray(config) {
+ var tempConfig,
+ bestMoment,
+
+ scoreToBeat,
+ i,
+ currentScore;
+
+ if (config._f.length === 0) {
+ getParsingFlags(config).invalidFormat = true;
+ config._d = new Date(NaN);
+ return;
+ }
+
+ for (i = 0; i < config._f.length; i++) {
+ currentScore = 0;
+ tempConfig = copyConfig({}, config);
+ if (config._useUTC != null) {
+ tempConfig._useUTC = config._useUTC;
+ }
+ tempConfig._f = config._f[i];
+ configFromStringAndFormat(tempConfig);
+
+ if (!isValid(tempConfig)) {
+ continue;
+ }
+
+ // if there is any input that was not parsed add a penalty for that format
+ currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+ //or tokens
+ currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+ getParsingFlags(tempConfig).score = currentScore;
+
+ if (scoreToBeat == null || currentScore < scoreToBeat) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ }
+ }
+
+ extend(config, bestMoment || tempConfig);
+}
+
+function configFromObject(config) {
+ if (config._d) {
+ return;
+ }
+
+ var i = normalizeObjectUnits(config._i);
+ config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+ return obj && parseInt(obj, 10);
+ });
+
+ configFromArray(config);
+}
+
+function createFromConfig (config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+}
+
+function prepareConfig (config) {
+ var input = config._i,
+ format = config._f;
+
+ config._locale = config._locale || getLocale(config._l);
+
+ if (input === null || (format === undefined && input === '')) {
+ return createInvalid({nullInput: true});
+ }
+
+ if (typeof input === 'string') {
+ config._i = input = config._locale.preparse(input);
+ }
+
+ if (isMoment(input)) {
+ return new Moment(checkOverflow(input));
+ } else if (isDate(input)) {
+ config._d = input;
+ } else if (isArray(format)) {
+ configFromStringAndArray(config);
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
+ configFromInput(config);
+ }
+
+ if (!isValid(config)) {
+ config._d = null;
+ }
+
+ return config;
+}
+
+function configFromInput(config) {
+ var input = config._i;
+ if (input === undefined) {
+ config._d = new Date(hooks.now());
+ } else if (isDate(input)) {
+ config._d = new Date(input.valueOf());
+ } else if (typeof input === 'string') {
+ configFromString(config);
+ } else if (isArray(input)) {
+ config._a = map(input.slice(0), function (obj) {
+ return parseInt(obj, 10);
+ });
+ configFromArray(config);
+ } else if (typeof(input) === 'object') {
+ configFromObject(config);
+ } else if (isNumber(input)) {
+ // from milliseconds
+ config._d = new Date(input);
+ } else {
+ hooks.createFromInputFallback(config);
+ }
+}
+
+function createLocalOrUTC (input, format, locale, strict, isUTC) {
+ var c = {};
+
+ if (locale === true || locale === false) {
+ strict = locale;
+ locale = undefined;
+ }
+
+ if ((isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)) {
+ input = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c._isAMomentObject = true;
+ c._useUTC = c._isUTC = isUTC;
+ c._l = locale;
+ c._i = input;
+ c._f = format;
+ c._strict = strict;
+
+ return createFromConfig(c);
+}
+
+function createLocal (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, false);
+}
+
+var prototypeMin = deprecate(
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+);
+
+var prototypeMax = deprecate(
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+);
+
+// Pick a moment m from moments so that m[fn](other) is true for all
+// other. This relies on the function fn to be transitive.
+//
+// moments should either be an array of moment objects or an array, whose
+// first element is an array of moment objects.
+function pickBy(fn, moments) {
+ var res, i;
+ if (moments.length === 1 && isArray(moments[0])) {
+ moments = moments[0];
+ }
+ if (!moments.length) {
+ return createLocal();
+ }
+ res = moments[0];
+ for (i = 1; i < moments.length; ++i) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
+ res = moments[i];
+ }
+ }
+ return res;
+}
+
+// TODO: Use [].sort instead?
+function min () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isBefore', args);
+}
+
+function max () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isAfter', args);
+}
+
+var now = function () {
+ return Date.now ? Date.now() : +(new Date());
+};
+
+function Duration (duration) {
+ var normalizedInput = normalizeObjectUnits(duration),
+ years = normalizedInput.year || 0,
+ quarters = normalizedInput.quarter || 0,
+ months = normalizedInput.month || 0,
+ weeks = normalizedInput.week || 0,
+ days = normalizedInput.day || 0,
+ hours = normalizedInput.hour || 0,
+ minutes = normalizedInput.minute || 0,
+ seconds = normalizedInput.second || 0,
+ milliseconds = normalizedInput.millisecond || 0;
+
+ // representation for dateAddRemove
+ this._milliseconds = +milliseconds +
+ seconds * 1e3 + // 1000
+ minutes * 6e4 + // 1000 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+ // Because of dateAddRemove treats 24 hours as different from a
+ // day when working around DST, we need to store them separately
+ this._days = +days +
+ weeks * 7;
+ // It is impossible translate months into days without knowing
+ // which months you are are talking about, so we have to store
+ // it separately.
+ this._months = +months +
+ quarters * 3 +
+ years * 12;
+
+ this._data = {};
+
+ this._locale = getLocale();
+
+ this._bubble();
+}
+
+function isDuration (obj) {
+ return obj instanceof Duration;
+}
+
+function absRound (number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
+}
+
+// FORMATTING
+
+function offset (token, separator) {
+ addFormatToken(token, 0, 0, function () {
+ var offset = this.utcOffset();
+ var sign = '+';
+ if (offset < 0) {
+ offset = -offset;
+ sign = '-';
+ }
+ return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+ });
+}
+
+offset('Z', ':');
+offset('ZZ', '');
+
+// PARSING
+
+addRegexToken('Z', matchShortOffset);
+addRegexToken('ZZ', matchShortOffset);
+addParseToken(['Z', 'ZZ'], function (input, array, config) {
+ config._useUTC = true;
+ config._tzm = offsetFromString(matchShortOffset, input);
+});
+
+// HELPERS
+
+// timezone chunker
+// '+10:00' > ['10', '00']
+// '-1530' > ['-15', '30']
+var chunkOffset = /([\+\-]|\d\d)/gi;
+
+function offsetFromString(matcher, string) {
+ var matches = (string || '').match(matcher);
+
+ if (matches === null) {
+ return null;
+ }
+
+ var chunk = matches[matches.length - 1] || [];
+ var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+ var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+ return minutes === 0 ?
+ 0 :
+ parts[0] === '+' ? minutes : -minutes;
+}
+
+// Return a moment from input, that is local/utc/zone equivalent to model.
+function cloneWithOffset(input, model) {
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(res._d.valueOf() + diff);
+ hooks.updateOffset(res, false);
+ return res;
+ } else {
+ return createLocal(input).local();
+ }
+}
+
+function getDateOffset (m) {
+ // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+ // https://github.com/moment/moment/pull/1871
+ return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+}
+
+// HOOKS
+
+// This function will be called whenever a moment is mutated.
+// It is intended to keep the offset in sync with the timezone.
+hooks.updateOffset = function () {};
+
+// MOMENTS
+
+// keepLocalTime = true means only change the timezone, without
+// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+// +0200, so we adjust the time as needed, to be valid.
+//
+// Keeping the time actually adds/subtracts (one hour)
+// from the actual represented time. That is why we call updateOffset
+// a second time. In case it wants us to change the offset again
+// _changeInProgress == true case, then we have to adjust, because
+// there is no such time in the given timezone.
+function getSetOffset (input, keepLocalTime) {
+ var offset = this._offset || 0,
+ localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ if (input != null) {
+ if (typeof input === 'string') {
+ input = offsetFromString(matchShortOffset, input);
+ if (input === null) {
+ return this;
+ }
+ } else if (Math.abs(input) < 16) {
+ input = input * 60;
+ }
+ if (!this._isUTC && keepLocalTime) {
+ localAdjust = getDateOffset(this);
+ }
+ this._offset = input;
+ this._isUTC = true;
+ if (localAdjust != null) {
+ this.add(localAdjust, 'm');
+ }
+ if (offset !== input) {
+ if (!keepLocalTime || this._changeInProgress) {
+ addSubtract(this, createDuration(input - offset, 'm'), 1, false);
+ } else if (!this._changeInProgress) {
+ this._changeInProgress = true;
+ hooks.updateOffset(this, true);
+ this._changeInProgress = null;
+ }
+ }
+ return this;
+ } else {
+ return this._isUTC ? offset : getDateOffset(this);
+ }
+}
+
+function getSetZone (input, keepLocalTime) {
+ if (input != null) {
+ if (typeof input !== 'string') {
+ input = -input;
+ }
+
+ this.utcOffset(input, keepLocalTime);
+
+ return this;
+ } else {
+ return -this.utcOffset();
+ }
+}
+
+function setOffsetToUTC (keepLocalTime) {
+ return this.utcOffset(0, keepLocalTime);
+}
+
+function setOffsetToLocal (keepLocalTime) {
+ if (this._isUTC) {
+ this.utcOffset(0, keepLocalTime);
+ this._isUTC = false;
+
+ if (keepLocalTime) {
+ this.subtract(getDateOffset(this), 'm');
+ }
+ }
+ return this;
+}
+
+function setOffsetToParsedOffset () {
+ if (this._tzm != null) {
+ this.utcOffset(this._tzm);
+ } else if (typeof this._i === 'string') {
+ var tZone = offsetFromString(matchOffset, this._i);
+ if (tZone != null) {
+ this.utcOffset(tZone);
+ }
+ else {
+ this.utcOffset(0, true);
+ }
+ }
+ return this;
+}
+
+function hasAlignedHourOffset (input) {
+ if (!this.isValid()) {
+ return false;
+ }
+ input = input ? createLocal(input).utcOffset() : 0;
+
+ return (this.utcOffset() - input) % 60 === 0;
+}
+
+function isDaylightSavingTime () {
+ return (
+ this.utcOffset() > this.clone().month(0).utcOffset() ||
+ this.utcOffset() > this.clone().month(5).utcOffset()
+ );
+}
+
+function isDaylightSavingTimeShifted () {
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
+ }
+
+ var c = {};
+
+ copyConfig(c, this);
+ c = prepareConfig(c);
+
+ if (c._a) {
+ var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+ this._isDSTShifted = this.isValid() &&
+ compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
+
+ return this._isDSTShifted;
+}
+
+function isLocal () {
+ return this.isValid() ? !this._isUTC : false;
+}
+
+function isUtcOffset () {
+ return this.isValid() ? this._isUTC : false;
+}
+
+function isUtc () {
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
+}
+
+// ASP.NET json date format regex
+var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
+
+// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+// and further modified to allow for strings containing both week and day
+var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
+
+function createDuration (input, key) {
+ var duration = input,
+ // matching against regexp is expensive, do it on demand
+ match = null,
+ sign,
+ ret,
+ diffRes;
+
+ if (isDuration(input)) {
+ duration = {
+ ms : input._milliseconds,
+ d : input._days,
+ M : input._months
+ };
+ } else if (isNumber(input)) {
+ duration = {};
+ if (key) {
+ duration[key] = input;
+ } else {
+ duration.milliseconds = input;
+ }
+ } else if (!!(match = aspNetRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : 0,
+ d : toInt(match[DATE]) * sign,
+ h : toInt(match[HOUR]) * sign,
+ m : toInt(match[MINUTE]) * sign,
+ s : toInt(match[SECOND]) * sign,
+ ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
+ };
+ } else if (!!(match = isoRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : parseIso(match[2], sign),
+ M : parseIso(match[3], sign),
+ w : parseIso(match[4], sign),
+ d : parseIso(match[5], sign),
+ h : parseIso(match[6], sign),
+ m : parseIso(match[7], sign),
+ s : parseIso(match[8], sign)
+ };
+ } else if (duration == null) {// checks for null or undefined
+ duration = {};
+ } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+ diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
+
+ duration = {};
+ duration.ms = diffRes.milliseconds;
+ duration.M = diffRes.months;
+ }
+
+ ret = new Duration(duration);
+
+ if (isDuration(input) && hasOwnProp(input, '_locale')) {
+ ret._locale = input._locale;
+ }
+
+ return ret;
+}
+
+createDuration.fn = Duration.prototype;
+
+function parseIso (inp, sign) {
+ // We'd normally use ~~inp for this, but unfortunately it also
+ // converts floats to ints.
+ // inp may be undefined, so careful calling replace on it.
+ var res = inp && parseFloat(inp.replace(',', '.'));
+ // apply sign while we're at it
+ return (isNaN(res) ? 0 : res) * sign;
+}
+
+function positiveMomentsDifference(base, other) {
+ var res = {milliseconds: 0, months: 0};
+
+ res.months = other.month() - base.month() +
+ (other.year() - base.year()) * 12;
+ if (base.clone().add(res.months, 'M').isAfter(other)) {
+ --res.months;
+ }
+
+ res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+ return res;
+}
+
+function momentsDifference(base, other) {
+ var res;
+ if (!(base.isValid() && other.isValid())) {
+ return {milliseconds: 0, months: 0};
+ }
+
+ other = cloneWithOffset(other, base);
+ if (base.isBefore(other)) {
+ res = positiveMomentsDifference(base, other);
+ } else {
+ res = positiveMomentsDifference(other, base);
+ res.milliseconds = -res.milliseconds;
+ res.months = -res.months;
+ }
+
+ return res;
+}
+
+// TODO: remove 'name' arg after deprecation is removed
+function createAdder(direction, name) {
+ return function (val, period) {
+ var dur, tmp;
+ //invert the arguments, but complain about it
+ if (period !== null && !isNaN(+period)) {
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+ tmp = val; val = period; period = tmp;
+ }
+
+ val = typeof val === 'string' ? +val : val;
+ dur = createDuration(val, period);
+ addSubtract(this, dur, direction);
+ return this;
+ };
+}
+
+function addSubtract (mom, duration, isAdding, updateOffset) {
+ var milliseconds = duration._milliseconds,
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
+ }
+
+ updateOffset = updateOffset == null ? true : updateOffset;
+
+ if (milliseconds) {
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+ }
+ if (days) {
+ set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+ }
+ if (months) {
+ setMonth(mom, get(mom, 'Month') + months * isAdding);
+ }
+ if (updateOffset) {
+ hooks.updateOffset(mom, days || months);
+ }
+}
+
+var add = createAdder(1, 'add');
+var subtract = createAdder(-1, 'subtract');
+
+function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6 ? 'sameElse' :
+ diff < -1 ? 'lastWeek' :
+ diff < 0 ? 'lastDay' :
+ diff < 1 ? 'sameDay' :
+ diff < 2 ? 'nextDay' :
+ diff < 7 ? 'nextWeek' : 'sameElse';
+}
+
+function calendar$1 (time, formats) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = hooks.calendarFormat(this, sod) || 'sameElse';
+
+ var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+ return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
+}
+
+function clone () {
+ return new Moment(this);
+}
+
+function isAfter (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() > localInput.valueOf();
+ } else {
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
+ }
+}
+
+function isBefore (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() < localInput.valueOf();
+ } else {
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
+ }
+}
+
+function isBetween (from, to, units, inclusivity) {
+ inclusivity = inclusivity || '()';
+ return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+ (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
+}
+
+function isSame (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(units || 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() === localInput.valueOf();
+ } else {
+ inputMs = localInput.valueOf();
+ return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+ }
+}
+
+function isSameOrAfter (input, units) {
+ return this.isSame(input, units) || this.isAfter(input,units);
+}
+
+function isSameOrBefore (input, units) {
+ return this.isSame(input, units) || this.isBefore(input,units);
+}
+
+function diff (input, units, asFloat) {
+ var that,
+ zoneDelta,
+ delta, output;
+
+ if (!this.isValid()) {
+ return NaN;
+ }
+
+ that = cloneWithOffset(input, this);
+
+ if (!that.isValid()) {
+ return NaN;
+ }
+
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+ units = normalizeUnits(units);
+
+ if (units === 'year' || units === 'month' || units === 'quarter') {
+ output = monthDiff(this, that);
+ if (units === 'quarter') {
+ output = output / 3;
+ } else if (units === 'year') {
+ output = output / 12;
+ }
+ } else {
+ delta = this - that;
+ output = units === 'second' ? delta / 1e3 : // 1000
+ units === 'minute' ? delta / 6e4 : // 1000 * 60
+ units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
+ units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+ units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+ delta;
+ }
+ return asFloat ? output : absFloor(output);
+}
+
+function monthDiff (a, b) {
+ // difference in months
+ var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+ // b is in (anchor - 1 month, anchor + 1 month)
+ anchor = a.clone().add(wholeMonthDiff, 'months'),
+ anchor2, adjust;
+
+ if (b - anchor < 0) {
+ anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor - anchor2);
+ } else {
+ anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor2 - anchor);
+ }
+
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
+}
+
+hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+function toString () {
+ return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+}
+
+function toISOString () {
+ var m = this.clone().utc();
+ if (0 < m.year() && m.year() <= 9999) {
+ if (isFunction(Date.prototype.toISOString)) {
+ // native implementation is ~50x faster, use it when we can
+ return this.toDate().toISOString();
+ } else {
+ return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+ } else {
+ return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+}
+
+/**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+function inspect () {
+ if (!this.isValid()) {
+ return 'moment.invalid(/* ' + this._i + ' */)';
+ }
+ var func = 'moment';
+ var zone = '';
+ if (!this.isLocal()) {
+ func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+ zone = 'Z';
+ }
+ var prefix = '[' + func + '("]';
+ var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
+ var datetime = '-MM-DD[T]HH:mm:ss.SSS';
+ var suffix = zone + '[")]';
+
+ return this.format(prefix + year + datetime + suffix);
+}
+
+function format (inputString) {
+ if (!inputString) {
+ inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
+ }
+ var output = formatMoment(this, inputString);
+ return this.localeData().postformat(output);
+}
+
+function from (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+}
+
+function fromNow (withoutSuffix) {
+ return this.from(createLocal(), withoutSuffix);
+}
+
+function to (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+}
+
+function toNow (withoutSuffix) {
+ return this.to(createLocal(), withoutSuffix);
+}
+
+// If passed a locale key, it will set the locale for this
+// instance. Otherwise, it will return the locale configuration
+// variables for this instance.
+function locale (key) {
+ var newLocaleData;
+
+ if (key === undefined) {
+ return this._locale._abbr;
+ } else {
+ newLocaleData = getLocale(key);
+ if (newLocaleData != null) {
+ this._locale = newLocaleData;
+ }
+ return this;
+ }
+}
+
+var lang = deprecate(
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+ function (key) {
+ if (key === undefined) {
+ return this.localeData();
+ } else {
+ return this.locale(key);
+ }
+ }
+);
+
+function localeData () {
+ return this._locale;
+}
+
+function startOf (units) {
+ units = normalizeUnits(units);
+ // the following switch intentionally omits break keywords
+ // to utilize falling through the cases.
+ switch (units) {
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ case 'date':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
+ }
+
+ // weeks are a special case
+ if (units === 'week') {
+ this.weekday(0);
+ }
+ if (units === 'isoWeek') {
+ this.isoWeekday(1);
+ }
+
+ // quarters are also special
+ if (units === 'quarter') {
+ this.month(Math.floor(this.month() / 3) * 3);
+ }
+
+ return this;
+}
+
+function endOf (units) {
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond') {
+ return this;
+ }
+
+ // 'date' is an alias for 'day', so it should be considered as such.
+ if (units === 'date') {
+ units = 'day';
+ }
+
+ return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+}
+
+function valueOf () {
+ return this._d.valueOf() - ((this._offset || 0) * 60000);
+}
+
+function unix () {
+ return Math.floor(this.valueOf() / 1000);
+}
+
+function toDate () {
+ return new Date(this.valueOf());
+}
+
+function toArray () {
+ var m = this;
+ return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+}
+
+function toObject () {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds()
+ };
+}
+
+function toJSON () {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
+}
+
+function isValid$1 () {
+ return isValid(this);
+}
+
+function parsingFlags () {
+ return extend({}, getParsingFlags(this));
+}
+
+function invalidAt () {
+ return getParsingFlags(this).overflow;
+}
+
+function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict
+ };
+}
+
+// FORMATTING
+
+addFormatToken(0, ['gg', 2], 0, function () {
+ return this.weekYear() % 100;
+});
+
+addFormatToken(0, ['GG', 2], 0, function () {
+ return this.isoWeekYear() % 100;
+});
+
+function addWeekYearFormatToken (token, getter) {
+ addFormatToken(0, [token, token.length], 0, getter);
+}
+
+addWeekYearFormatToken('gggg', 'weekYear');
+addWeekYearFormatToken('ggggg', 'weekYear');
+addWeekYearFormatToken('GGGG', 'isoWeekYear');
+addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+// ALIASES
+
+addUnitAlias('weekYear', 'gg');
+addUnitAlias('isoWeekYear', 'GG');
+
+// PRIORITY
+
+addUnitPriority('weekYear', 1);
+addUnitPriority('isoWeekYear', 1);
+
+
+// PARSING
+
+addRegexToken('G', matchSigned);
+addRegexToken('g', matchSigned);
+addRegexToken('GG', match1to2, match2);
+addRegexToken('gg', match1to2, match2);
+addRegexToken('GGGG', match1to4, match4);
+addRegexToken('gggg', match1to4, match4);
+addRegexToken('GGGGG', match1to6, match6);
+addRegexToken('ggggg', match1to6, match6);
+
+addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+ week[token.substr(0, 2)] = toInt(input);
+});
+
+addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+ week[token] = hooks.parseTwoDigitYear(input);
+});
+
+// MOMENTS
+
+function getSetWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy);
+}
+
+function getSetISOWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input, this.isoWeek(), this.isoWeekday(), 1, 4);
+}
+
+function getISOWeeksInYear () {
+ return weeksInYear(this.year(), 1, 4);
+}
+
+function getWeeksInYear () {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+}
+
+function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
+ }
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
+}
+
+function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
+}
+
+// FORMATTING
+
+addFormatToken('Q', 0, 'Qo', 'quarter');
+
+// ALIASES
+
+addUnitAlias('quarter', 'Q');
+
+// PRIORITY
+
+addUnitPriority('quarter', 7);
+
+// PARSING
+
+addRegexToken('Q', match1);
+addParseToken('Q', function (input, array) {
+ array[MONTH] = (toInt(input) - 1) * 3;
+});
+
+// MOMENTS
+
+function getSetQuarter (input) {
+ return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+}
+
+// FORMATTING
+
+addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+// ALIASES
+
+addUnitAlias('date', 'D');
+
+// PRIOROITY
+addUnitPriority('date', 9);
+
+// PARSING
+
+addRegexToken('D', match1to2);
+addRegexToken('DD', match1to2, match2);
+addRegexToken('Do', function (isStrict, locale) {
+ return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;
+});
+
+addParseToken(['D', 'DD'], DATE);
+addParseToken('Do', function (input, array) {
+ array[DATE] = toInt(input.match(match1to2)[0], 10);
+});
+
+// MOMENTS
+
+var getSetDayOfMonth = makeGetSet('Date', true);
+
+// FORMATTING
+
+addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+// ALIASES
+
+addUnitAlias('dayOfYear', 'DDD');
+
+// PRIORITY
+addUnitPriority('dayOfYear', 4);
+
+// PARSING
+
+addRegexToken('DDD', match1to3);
+addRegexToken('DDDD', match3);
+addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
+});
+
+// HELPERS
+
+// MOMENTS
+
+function getSetDayOfYear (input) {
+ var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+}
+
+// FORMATTING
+
+addFormatToken('m', ['mm', 2], 0, 'minute');
+
+// ALIASES
+
+addUnitAlias('minute', 'm');
+
+// PRIORITY
+
+addUnitPriority('minute', 14);
+
+// PARSING
+
+addRegexToken('m', match1to2);
+addRegexToken('mm', match1to2, match2);
+addParseToken(['m', 'mm'], MINUTE);
+
+// MOMENTS
+
+var getSetMinute = makeGetSet('Minutes', false);
+
+// FORMATTING
+
+addFormatToken('s', ['ss', 2], 0, 'second');
+
+// ALIASES
+
+addUnitAlias('second', 's');
+
+// PRIORITY
+
+addUnitPriority('second', 15);
+
+// PARSING
+
+addRegexToken('s', match1to2);
+addRegexToken('ss', match1to2, match2);
+addParseToken(['s', 'ss'], SECOND);
+
+// MOMENTS
+
+var getSetSecond = makeGetSet('Seconds', false);
+
+// FORMATTING
+
+addFormatToken('S', 0, 0, function () {
+ return ~~(this.millisecond() / 100);
+});
+
+addFormatToken(0, ['SS', 2], 0, function () {
+ return ~~(this.millisecond() / 10);
+});
+
+addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+});
+addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+});
+addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+});
+addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+});
+addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+});
+addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+});
+
+
+// ALIASES
+
+addUnitAlias('millisecond', 'ms');
+
+// PRIORITY
+
+addUnitPriority('millisecond', 16);
+
+// PARSING
+
+addRegexToken('S', match1to3, match1);
+addRegexToken('SS', match1to3, match2);
+addRegexToken('SSS', match1to3, match3);
+
+var token;
+for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+}
+
+function parseMs(input, array) {
+ array[MILLISECOND] = toInt(('0.' + input) * 1000);
+}
+
+for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
+}
+// MOMENTS
+
+var getSetMillisecond = makeGetSet('Milliseconds', false);
+
+// FORMATTING
+
+addFormatToken('z', 0, 0, 'zoneAbbr');
+addFormatToken('zz', 0, 0, 'zoneName');
+
+// MOMENTS
+
+function getZoneAbbr () {
+ return this._isUTC ? 'UTC' : '';
+}
+
+function getZoneName () {
+ return this._isUTC ? 'Coordinated Universal Time' : '';
+}
+
+var proto = Moment.prototype;
+
+proto.add = add;
+proto.calendar = calendar$1;
+proto.clone = clone;
+proto.diff = diff;
+proto.endOf = endOf;
+proto.format = format;
+proto.from = from;
+proto.fromNow = fromNow;
+proto.to = to;
+proto.toNow = toNow;
+proto.get = stringGet;
+proto.invalidAt = invalidAt;
+proto.isAfter = isAfter;
+proto.isBefore = isBefore;
+proto.isBetween = isBetween;
+proto.isSame = isSame;
+proto.isSameOrAfter = isSameOrAfter;
+proto.isSameOrBefore = isSameOrBefore;
+proto.isValid = isValid$1;
+proto.lang = lang;
+proto.locale = locale;
+proto.localeData = localeData;
+proto.max = prototypeMax;
+proto.min = prototypeMin;
+proto.parsingFlags = parsingFlags;
+proto.set = stringSet;
+proto.startOf = startOf;
+proto.subtract = subtract;
+proto.toArray = toArray;
+proto.toObject = toObject;
+proto.toDate = toDate;
+proto.toISOString = toISOString;
+proto.inspect = inspect;
+proto.toJSON = toJSON;
+proto.toString = toString;
+proto.unix = unix;
+proto.valueOf = valueOf;
+proto.creationData = creationData;
+
+// Year
+proto.year = getSetYear;
+proto.isLeapYear = getIsLeapYear;
+
+// Week Year
+proto.weekYear = getSetWeekYear;
+proto.isoWeekYear = getSetISOWeekYear;
+
+// Quarter
+proto.quarter = proto.quarters = getSetQuarter;
+
+// Month
+proto.month = getSetMonth;
+proto.daysInMonth = getDaysInMonth;
+
+// Week
+proto.week = proto.weeks = getSetWeek;
+proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+proto.weeksInYear = getWeeksInYear;
+proto.isoWeeksInYear = getISOWeeksInYear;
+
+// Day
+proto.date = getSetDayOfMonth;
+proto.day = proto.days = getSetDayOfWeek;
+proto.weekday = getSetLocaleDayOfWeek;
+proto.isoWeekday = getSetISODayOfWeek;
+proto.dayOfYear = getSetDayOfYear;
+
+// Hour
+proto.hour = proto.hours = getSetHour;
+
+// Minute
+proto.minute = proto.minutes = getSetMinute;
+
+// Second
+proto.second = proto.seconds = getSetSecond;
+
+// Millisecond
+proto.millisecond = proto.milliseconds = getSetMillisecond;
+
+// Offset
+proto.utcOffset = getSetOffset;
+proto.utc = setOffsetToUTC;
+proto.local = setOffsetToLocal;
+proto.parseZone = setOffsetToParsedOffset;
+proto.hasAlignedHourOffset = hasAlignedHourOffset;
+proto.isDST = isDaylightSavingTime;
+proto.isLocal = isLocal;
+proto.isUtcOffset = isUtcOffset;
+proto.isUtc = isUtc;
+proto.isUTC = isUtc;
+
+// Timezone
+proto.zoneAbbr = getZoneAbbr;
+proto.zoneName = getZoneName;
+
+// Deprecations
+proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+
+function createUnix (input) {
+ return createLocal(input * 1000);
+}
+
+function createInZone () {
+ return createLocal.apply(null, arguments).parseZone();
+}
+
+function preParsePostFormat (string) {
+ return string;
+}
+
+var proto$1 = Locale.prototype;
+
+proto$1.calendar = calendar;
+proto$1.longDateFormat = longDateFormat;
+proto$1.invalidDate = invalidDate;
+proto$1.ordinal = ordinal;
+proto$1.preparse = preParsePostFormat;
+proto$1.postformat = preParsePostFormat;
+proto$1.relativeTime = relativeTime;
+proto$1.pastFuture = pastFuture;
+proto$1.set = set;
+
+// Month
+proto$1.months = localeMonths;
+proto$1.monthsShort = localeMonthsShort;
+proto$1.monthsParse = localeMonthsParse;
+proto$1.monthsRegex = monthsRegex;
+proto$1.monthsShortRegex = monthsShortRegex;
+
+// Week
+proto$1.week = localeWeek;
+proto$1.firstDayOfYear = localeFirstDayOfYear;
+proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+// Day of Week
+proto$1.weekdays = localeWeekdays;
+proto$1.weekdaysMin = localeWeekdaysMin;
+proto$1.weekdaysShort = localeWeekdaysShort;
+proto$1.weekdaysParse = localeWeekdaysParse;
+
+proto$1.weekdaysRegex = weekdaysRegex;
+proto$1.weekdaysShortRegex = weekdaysShortRegex;
+proto$1.weekdaysMinRegex = weekdaysMinRegex;
+
+// Hours
+proto$1.isPM = localeIsPM;
+proto$1.meridiem = localeMeridiem;
+
+function get$1 (format, index, field, setter) {
+ var locale = getLocale();
+ var utc = createUTC().set(setter, index);
+ return locale[field](utc, format);
+}
+
+function listMonthsImpl (format, index, field) {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+
+ if (index != null) {
+ return get$1(format, index, field, 'month');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = get$1(format, i, field, 'month');
+ }
+ return out;
+}
+
+// ()
+// (5)
+// (fmt, 5)
+// (fmt)
+// (true)
+// (true, 5)
+// (true, fmt, 5)
+// (true, fmt)
+function listWeekdaysImpl (localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
+
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ }
+
+ var locale = getLocale(),
+ shift = localeSorted ? locale._week.dow : 0;
+
+ if (index != null) {
+ return get$1(format, (index + shift) % 7, field, 'day');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 7; i++) {
+ out[i] = get$1(format, (i + shift) % 7, field, 'day');
+ }
+ return out;
+}
+
+function listMonths (format, index) {
+ return listMonthsImpl(format, index, 'months');
+}
+
+function listMonthsShort (format, index) {
+ return listMonthsImpl(format, index, 'monthsShort');
+}
+
+function listWeekdays (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+}
+
+function listWeekdaysShort (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+}
+
+function listWeekdaysMin (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+}
+
+getSetGlobalLocale('en', {
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (toInt(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
+
+// Side effect imports
+hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
+hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
+
+var mathAbs = Math.abs;
+
+function abs () {
+ var data = this._data;
+
+ this._milliseconds = mathAbs(this._milliseconds);
+ this._days = mathAbs(this._days);
+ this._months = mathAbs(this._months);
+
+ data.milliseconds = mathAbs(data.milliseconds);
+ data.seconds = mathAbs(data.seconds);
+ data.minutes = mathAbs(data.minutes);
+ data.hours = mathAbs(data.hours);
+ data.months = mathAbs(data.months);
+ data.years = mathAbs(data.years);
+
+ return this;
+}
+
+function addSubtract$1 (duration, input, value, direction) {
+ var other = createDuration(input, value);
+
+ duration._milliseconds += direction * other._milliseconds;
+ duration._days += direction * other._days;
+ duration._months += direction * other._months;
+
+ return duration._bubble();
+}
+
+// supports only 2.0-style add(1, 's') or add(duration)
+function add$1 (input, value) {
+ return addSubtract$1(this, input, value, 1);
+}
+
+// supports only 2.0-style subtract(1, 's') or subtract(duration)
+function subtract$1 (input, value) {
+ return addSubtract$1(this, input, value, -1);
+}
+
+function absCeil (number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
+ }
+}
+
+function bubble () {
+ var milliseconds = this._milliseconds;
+ var days = this._days;
+ var months = this._months;
+ var data = this._data;
+ var seconds, minutes, hours, years, monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0))) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
+ }
+
+ // The following code bubbles up values, see the tests for
+ // examples of what that means.
+ data.milliseconds = milliseconds % 1000;
+
+ seconds = absFloor(milliseconds / 1000);
+ data.seconds = seconds % 60;
+
+ minutes = absFloor(seconds / 60);
+ data.minutes = minutes % 60;
+
+ hours = absFloor(minutes / 60);
+ data.hours = hours % 24;
+
+ days += absFloor(hours / 24);
+
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+ data.days = days;
+ data.months = months;
+ data.years = years;
+
+ return this;
+}
+
+function daysToMonths (days) {
+ // 400 years have 146097 days (taking into account leap year rules)
+ // 400 years have 12 months === 4800
+ return days * 4800 / 146097;
+}
+
+function monthsToDays (months) {
+ // the reverse of daysToMonths
+ return months * 146097 / 4800;
+}
+
+function as (units) {
+ var days;
+ var months;
+ var milliseconds = this._milliseconds;
+
+ units = normalizeUnits(units);
+
+ if (units === 'month' || units === 'year') {
+ days = this._days + milliseconds / 864e5;
+ months = this._months + daysToMonths(days);
+ return units === 'month' ? months : months / 12;
+ } else {
+ // handle milliseconds separately because of floating point math errors (issue #1867)
+ days = this._days + Math.round(monthsToDays(this._months));
+ switch (units) {
+ case 'week' : return days / 7 + milliseconds / 6048e5;
+ case 'day' : return days + milliseconds / 864e5;
+ case 'hour' : return days * 24 + milliseconds / 36e5;
+ case 'minute' : return days * 1440 + milliseconds / 6e4;
+ case 'second' : return days * 86400 + milliseconds / 1000;
+ // Math.floor prevents floating point math errors here
+ case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+ default: throw new Error('Unknown unit ' + units);
+ }
+ }
+}
+
+// TODO: Use this.as('ms')?
+function valueOf$1 () {
+ return (
+ this._milliseconds +
+ this._days * 864e5 +
+ (this._months % 12) * 2592e6 +
+ toInt(this._months / 12) * 31536e6
+ );
+}
+
+function makeAs (alias) {
+ return function () {
+ return this.as(alias);
+ };
+}
+
+var asMilliseconds = makeAs('ms');
+var asSeconds = makeAs('s');
+var asMinutes = makeAs('m');
+var asHours = makeAs('h');
+var asDays = makeAs('d');
+var asWeeks = makeAs('w');
+var asMonths = makeAs('M');
+var asYears = makeAs('y');
+
+function get$2 (units) {
+ units = normalizeUnits(units);
+ return this[units + 's']();
+}
+
+function makeGetter(name) {
+ return function () {
+ return this._data[name];
+ };
+}
+
+var milliseconds = makeGetter('milliseconds');
+var seconds = makeGetter('seconds');
+var minutes = makeGetter('minutes');
+var hours = makeGetter('hours');
+var days = makeGetter('days');
+var months = makeGetter('months');
+var years = makeGetter('years');
+
+function weeks () {
+ return absFloor(this.days() / 7);
+}
+
+var round = Math.round;
+var thresholds = {
+ s: 45, // seconds to minute
+ m: 45, // minutes to hour
+ h: 22, // hours to day
+ d: 26, // days to month
+ M: 11 // months to year
+};
+
+// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+ return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+}
+
+function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
+ var duration = createDuration(posNegDuration).abs();
+ var seconds = round(duration.as('s'));
+ var minutes = round(duration.as('m'));
+ var hours = round(duration.as('h'));
+ var days = round(duration.as('d'));
+ var months = round(duration.as('M'));
+ var years = round(duration.as('y'));
+
+ var a = seconds < thresholds.s && ['s', seconds] ||
+ minutes <= 1 && ['m'] ||
+ minutes < thresholds.m && ['mm', minutes] ||
+ hours <= 1 && ['h'] ||
+ hours < thresholds.h && ['hh', hours] ||
+ days <= 1 && ['d'] ||
+ days < thresholds.d && ['dd', days] ||
+ months <= 1 && ['M'] ||
+ months < thresholds.M && ['MM', months] ||
+ years <= 1 && ['y'] || ['yy', years];
+
+ a[2] = withoutSuffix;
+ a[3] = +posNegDuration > 0;
+ a[4] = locale;
+ return substituteTimeAgo.apply(null, a);
+}
+
+// This function allows you to set the rounding function for relative time strings
+function getSetRelativeTimeRounding (roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
+ }
+ if (typeof(roundingFunction) === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+}
+
+// This function allows you to set a threshold for relative time strings
+function getSetRelativeTimeThreshold (threshold, limit) {
+ if (thresholds[threshold] === undefined) {
+ return false;
+ }
+ if (limit === undefined) {
+ return thresholds[threshold];
+ }
+ thresholds[threshold] = limit;
+ return true;
+}
+
+function humanize (withSuffix) {
+ var locale = this.localeData();
+ var output = relativeTime$1(this, !withSuffix, locale);
+
+ if (withSuffix) {
+ output = locale.pastFuture(+this, output);
+ }
+
+ return locale.postformat(output);
+}
+
+var abs$1 = Math.abs;
+
+function toISOString$1() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ var seconds = abs$1(this._milliseconds) / 1000;
+ var days = abs$1(this._days);
+ var months = abs$1(this._months);
+ var minutes, hours, years;
+
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+
+ // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+ var Y = years;
+ var M = months;
+ var D = days;
+ var h = hours;
+ var m = minutes;
+ var s = seconds;
+ var total = this.asSeconds();
+
+ if (!total) {
+ // this is the same as C#'s (Noda) and python (isodate)...
+ // but not other JS (goog.date)
+ return 'P0D';
+ }
+
+ return (total < 0 ? '-' : '') +
+ 'P' +
+ (Y ? Y + 'Y' : '') +
+ (M ? M + 'M' : '') +
+ (D ? D + 'D' : '') +
+ ((h || m || s) ? 'T' : '') +
+ (h ? h + 'H' : '') +
+ (m ? m + 'M' : '') +
+ (s ? s + 'S' : '');
+}
+
+var proto$2 = Duration.prototype;
+
+proto$2.abs = abs;
+proto$2.add = add$1;
+proto$2.subtract = subtract$1;
+proto$2.as = as;
+proto$2.asMilliseconds = asMilliseconds;
+proto$2.asSeconds = asSeconds;
+proto$2.asMinutes = asMinutes;
+proto$2.asHours = asHours;
+proto$2.asDays = asDays;
+proto$2.asWeeks = asWeeks;
+proto$2.asMonths = asMonths;
+proto$2.asYears = asYears;
+proto$2.valueOf = valueOf$1;
+proto$2._bubble = bubble;
+proto$2.get = get$2;
+proto$2.milliseconds = milliseconds;
+proto$2.seconds = seconds;
+proto$2.minutes = minutes;
+proto$2.hours = hours;
+proto$2.days = days;
+proto$2.weeks = weeks;
+proto$2.months = months;
+proto$2.years = years;
+proto$2.humanize = humanize;
+proto$2.toISOString = toISOString$1;
+proto$2.toString = toISOString$1;
+proto$2.toJSON = toISOString$1;
+proto$2.locale = locale;
+proto$2.localeData = localeData;
+
+// Deprecations
+proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
+proto$2.lang = lang;
+
+// Side effect imports
+
+// FORMATTING
+
+addFormatToken('X', 0, 0, 'unix');
+addFormatToken('x', 0, 0, 'valueOf');
+
+// PARSING
+
+addRegexToken('x', matchSigned);
+addRegexToken('X', matchTimestamp);
+addParseToken('X', function (input, array, config) {
+ config._d = new Date(parseFloat(input, 10) * 1000);
+});
+addParseToken('x', function (input, array, config) {
+ config._d = new Date(toInt(input));
+});
+
+// Side effect imports
+
+
+hooks.version = '2.17.1';
+
+setHookCallback(createLocal);
+
+hooks.fn = proto;
+hooks.min = min;
+hooks.max = max;
+hooks.now = now;
+hooks.utc = createUTC;
+hooks.unix = createUnix;
+hooks.months = listMonths;
+hooks.isDate = isDate;
+hooks.locale = getSetGlobalLocale;
+hooks.invalid = createInvalid;
+hooks.duration = createDuration;
+hooks.isMoment = isMoment;
+hooks.weekdays = listWeekdays;
+hooks.parseZone = createInZone;
+hooks.localeData = getLocale;
+hooks.isDuration = isDuration;
+hooks.monthsShort = listMonthsShort;
+hooks.weekdaysMin = listWeekdaysMin;
+hooks.defineLocale = defineLocale;
+hooks.updateLocale = updateLocale;
+hooks.locales = listLocales;
+hooks.weekdaysShort = listWeekdaysShort;
+hooks.normalizeUnits = normalizeUnits;
+hooks.relativeTimeRounding = getSetRelativeTimeRounding;
+hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+hooks.calendarFormat = getCalendarFormat;
+hooks.prototype = proto;
+
+return hooks;
+
+})));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/check-overflow.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/check-overflow.js
new file mode 100644
index 00000000000..41b539fb733
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/check-overflow.js
@@ -0,0 +1,34 @@
+import { daysInMonth } from '../units/month';
+import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND, WEEK, WEEKDAY } from '../units/constants';
+import getParsingFlags from '../create/parsing-flags';
+
+export default function checkOverflow (m) {
+ var overflow;
+ var a = m._a;
+
+ if (a && getParsingFlags(m).overflow === -2) {
+ overflow =
+ a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
+ a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+ a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+ a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
+ a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
+ a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+ -1;
+
+ if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+ overflow = DATE;
+ }
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
+ if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+ overflow = WEEKDAY;
+ }
+
+ getParsingFlags(m).overflow = overflow;
+ }
+
+ return m;
+}
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/date-from-array.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/date-from-array.js
new file mode 100644
index 00000000000..180f55c717f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/date-from-array.js
@@ -0,0 +1,21 @@
+export function createDate (y, m, d, h, M, s, ms) {
+ //can't just apply() to create a date:
+ //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+ var date = new Date(y, m, d, h, M, s, ms);
+
+ //the date constructor remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+ date.setFullYear(y);
+ }
+ return date;
+}
+
+export function createUTCDate (y) {
+ var date = new Date(Date.UTC.apply(null, arguments));
+
+ //the Date.UTC function remaps years 0-99 to 1900-1999
+ if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+ date.setUTCFullYear(y);
+ }
+ return date;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-anything.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-anything.js
new file mode 100644
index 00000000000..ae76f8544cf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-anything.js
@@ -0,0 +1,109 @@
+import isArray from '../utils/is-array';
+import isObject from '../utils/is-object';
+import isObjectEmpty from '../utils/is-object-empty';
+import isNumber from '../utils/is-number';
+import isDate from '../utils/is-date';
+import map from '../utils/map';
+import { createInvalid } from './valid';
+import { Moment, isMoment } from '../moment/constructor';
+import { getLocale } from '../locale/locales';
+import { hooks } from '../utils/hooks';
+import checkOverflow from './check-overflow';
+import { isValid } from './valid';
+
+import { configFromStringAndArray } from './from-string-and-array';
+import { configFromStringAndFormat } from './from-string-and-format';
+import { configFromString } from './from-string';
+import { configFromArray } from './from-array';
+import { configFromObject } from './from-object';
+
+function createFromConfig (config) {
+ var res = new Moment(checkOverflow(prepareConfig(config)));
+ if (res._nextDay) {
+ // Adding is smart enough around DST
+ res.add(1, 'd');
+ res._nextDay = undefined;
+ }
+
+ return res;
+}
+
+export function prepareConfig (config) {
+ var input = config._i,
+ format = config._f;
+
+ config._locale = config._locale || getLocale(config._l);
+
+ if (input === null || (format === undefined && input === '')) {
+ return createInvalid({nullInput: true});
+ }
+
+ if (typeof input === 'string') {
+ config._i = input = config._locale.preparse(input);
+ }
+
+ if (isMoment(input)) {
+ return new Moment(checkOverflow(input));
+ } else if (isDate(input)) {
+ config._d = input;
+ } else if (isArray(format)) {
+ configFromStringAndArray(config);
+ } else if (format) {
+ configFromStringAndFormat(config);
+ } else {
+ configFromInput(config);
+ }
+
+ if (!isValid(config)) {
+ config._d = null;
+ }
+
+ return config;
+}
+
+function configFromInput(config) {
+ var input = config._i;
+ if (input === undefined) {
+ config._d = new Date(hooks.now());
+ } else if (isDate(input)) {
+ config._d = new Date(input.valueOf());
+ } else if (typeof input === 'string') {
+ configFromString(config);
+ } else if (isArray(input)) {
+ config._a = map(input.slice(0), function (obj) {
+ return parseInt(obj, 10);
+ });
+ configFromArray(config);
+ } else if (typeof(input) === 'object') {
+ configFromObject(config);
+ } else if (isNumber(input)) {
+ // from milliseconds
+ config._d = new Date(input);
+ } else {
+ hooks.createFromInputFallback(config);
+ }
+}
+
+export function createLocalOrUTC (input, format, locale, strict, isUTC) {
+ var c = {};
+
+ if (locale === true || locale === false) {
+ strict = locale;
+ locale = undefined;
+ }
+
+ if ((isObject(input) && isObjectEmpty(input)) ||
+ (isArray(input) && input.length === 0)) {
+ input = undefined;
+ }
+ // object construction must be done this way.
+ // https://github.com/moment/moment/issues/1423
+ c._isAMomentObject = true;
+ c._useUTC = c._isUTC = isUTC;
+ c._l = locale;
+ c._i = input;
+ c._f = format;
+ c._strict = strict;
+
+ return createFromConfig(c);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-array.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-array.js
new file mode 100644
index 00000000000..3ae35a0bdd2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-array.js
@@ -0,0 +1,140 @@
+import { hooks } from '../utils/hooks';
+import { createDate, createUTCDate } from './date-from-array';
+import { daysInYear } from '../units/year';
+import { weekOfYear, weeksInYear, dayOfYearFromWeeks } from '../units/week-calendar-utils';
+import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants';
+import { createLocal } from './local';
+import defaults from '../utils/defaults';
+import getParsingFlags from './parsing-flags';
+
+function currentDateArray(config) {
+ // hooks is actually the exported moment object
+ var nowValue = new Date(hooks.now());
+ if (config._useUTC) {
+ return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+ }
+ return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+}
+
+// convert an array to a date.
+// the array should mirror the parameters below
+// note: all values past the year are optional and will default to the lowest possible value.
+// [year, month, day , hour, minute, second, millisecond]
+export function configFromArray (config) {
+ var i, date, input = [], currentDate, yearToUse;
+
+ if (config._d) {
+ return;
+ }
+
+ currentDate = currentDateArray(config);
+
+ //compute day of the year from weeks and weekdays
+ if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+ dayOfYearFromWeekInfo(config);
+ }
+
+ //if the day of the year is set, figure out what it is
+ if (config._dayOfYear) {
+ yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+ if (config._dayOfYear > daysInYear(yearToUse)) {
+ getParsingFlags(config)._overflowDayOfYear = true;
+ }
+
+ date = createUTCDate(yearToUse, 0, config._dayOfYear);
+ config._a[MONTH] = date.getUTCMonth();
+ config._a[DATE] = date.getUTCDate();
+ }
+
+ // Default to current date.
+ // * if no year, month, day of month are given, default to today
+ // * if day of month is given, default month and year
+ // * if month is given, default only year
+ // * if year is given, don't default anything
+ for (i = 0; i < 3 && config._a[i] == null; ++i) {
+ config._a[i] = input[i] = currentDate[i];
+ }
+
+ // Zero out whatever was not defaulted, including time
+ for (; i < 7; i++) {
+ config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+ }
+
+ // Check for 24:00:00.000
+ if (config._a[HOUR] === 24 &&
+ config._a[MINUTE] === 0 &&
+ config._a[SECOND] === 0 &&
+ config._a[MILLISECOND] === 0) {
+ config._nextDay = true;
+ config._a[HOUR] = 0;
+ }
+
+ config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+ // Apply timezone offset from input. The actual utcOffset can be changed
+ // with parseZone.
+ if (config._tzm != null) {
+ config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+ }
+
+ if (config._nextDay) {
+ config._a[HOUR] = 24;
+ }
+}
+
+function dayOfYearFromWeekInfo(config) {
+ var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
+
+ w = config._w;
+ if (w.GG != null || w.W != null || w.E != null) {
+ dow = 1;
+ doy = 4;
+
+ // TODO: We need to take the current isoWeekYear, but that depends on
+ // how we interpret now (local, utc, fixed offset). So create
+ // a now version of current config (take local/utc/offset flags, and
+ // create now).
+ weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
+ week = defaults(w.W, 1);
+ weekday = defaults(w.E, 1);
+ if (weekday < 1 || weekday > 7) {
+ weekdayOverflow = true;
+ }
+ } else {
+ dow = config._locale._week.dow;
+ doy = config._locale._week.doy;
+
+ var curWeek = weekOfYear(createLocal(), dow, doy);
+
+ weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+ // Default to current week.
+ week = defaults(w.w, curWeek.week);
+
+ if (w.d != null) {
+ // weekday -- low day numbers are considered next week
+ weekday = w.d;
+ if (weekday < 0 || weekday > 6) {
+ weekdayOverflow = true;
+ }
+ } else if (w.e != null) {
+ // local weekday -- counting starts from begining of week
+ weekday = w.e + dow;
+ if (w.e < 0 || w.e > 6) {
+ weekdayOverflow = true;
+ }
+ } else {
+ // default to begining of week
+ weekday = dow;
+ }
+ }
+ if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+ getParsingFlags(config)._overflowWeeks = true;
+ } else if (weekdayOverflow != null) {
+ getParsingFlags(config)._overflowWeekday = true;
+ } else {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-object.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-object.js
new file mode 100644
index 00000000000..c0bfe9f8d5d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-object.js
@@ -0,0 +1,16 @@
+import { normalizeObjectUnits } from '../units/aliases';
+import { configFromArray } from './from-array';
+import map from '../utils/map';
+
+export function configFromObject(config) {
+ if (config._d) {
+ return;
+ }
+
+ var i = normalizeObjectUnits(config._i);
+ config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+ return obj && parseInt(obj, 10);
+ });
+
+ configFromArray(config);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-array.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-array.js
new file mode 100644
index 00000000000..1d8a7a806cd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-array.js
@@ -0,0 +1,50 @@
+import { copyConfig } from '../moment/constructor';
+import { configFromStringAndFormat } from './from-string-and-format';
+import getParsingFlags from './parsing-flags';
+import { isValid } from './valid';
+import extend from '../utils/extend';
+
+// date from string and array of format strings
+export function configFromStringAndArray(config) {
+ var tempConfig,
+ bestMoment,
+
+ scoreToBeat,
+ i,
+ currentScore;
+
+ if (config._f.length === 0) {
+ getParsingFlags(config).invalidFormat = true;
+ config._d = new Date(NaN);
+ return;
+ }
+
+ for (i = 0; i < config._f.length; i++) {
+ currentScore = 0;
+ tempConfig = copyConfig({}, config);
+ if (config._useUTC != null) {
+ tempConfig._useUTC = config._useUTC;
+ }
+ tempConfig._f = config._f[i];
+ configFromStringAndFormat(tempConfig);
+
+ if (!isValid(tempConfig)) {
+ continue;
+ }
+
+ // if there is any input that was not parsed add a penalty for that format
+ currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+ //or tokens
+ currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+ getParsingFlags(tempConfig).score = currentScore;
+
+ if (scoreToBeat == null || currentScore < scoreToBeat) {
+ scoreToBeat = currentScore;
+ bestMoment = tempConfig;
+ }
+ }
+
+ extend(config, bestMoment || tempConfig);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-format.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-format.js
new file mode 100644
index 00000000000..2ef23515c55
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string-and-format.js
@@ -0,0 +1,107 @@
+import { configFromISO } from './from-string';
+import { configFromArray } from './from-array';
+import { getParseRegexForToken } from '../parse/regex';
+import { addTimeToArrayFromToken } from '../parse/token';
+import { expandFormat, formatTokenFunctions, formattingTokens } from '../format/format';
+import checkOverflow from './check-overflow';
+import { HOUR } from '../units/constants';
+import { hooks } from '../utils/hooks';
+import getParsingFlags from './parsing-flags';
+
+// constant that refers to the ISO standard
+hooks.ISO_8601 = function () {};
+
+// date from string and format string
+export function configFromStringAndFormat(config) {
+ // TODO: Move this to another part of the creation flow to prevent circular deps
+ if (config._f === hooks.ISO_8601) {
+ configFromISO(config);
+ return;
+ }
+
+ config._a = [];
+ getParsingFlags(config).empty = true;
+
+ // This array is used to make a Date, either with `new Date` or `Date.UTC`
+ var string = '' + config._i,
+ i, parsedInput, tokens, token, skipped,
+ stringLength = string.length,
+ totalParsedInputLength = 0;
+
+ tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+ for (i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+ // console.log('token', token, 'parsedInput', parsedInput,
+ // 'regex', getParseRegexForToken(token, config));
+ if (parsedInput) {
+ skipped = string.substr(0, string.indexOf(parsedInput));
+ if (skipped.length > 0) {
+ getParsingFlags(config).unusedInput.push(skipped);
+ }
+ string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+ totalParsedInputLength += parsedInput.length;
+ }
+ // don't parse if it's not a known token
+ if (formatTokenFunctions[token]) {
+ if (parsedInput) {
+ getParsingFlags(config).empty = false;
+ }
+ else {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ addTimeToArrayFromToken(token, parsedInput, config);
+ }
+ else if (config._strict && !parsedInput) {
+ getParsingFlags(config).unusedTokens.push(token);
+ }
+ }
+
+ // add remaining unparsed input length to the string
+ getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+ if (string.length > 0) {
+ getParsingFlags(config).unusedInput.push(string);
+ }
+
+ // clear _12h flag if hour is <= 12
+ if (config._a[HOUR] <= 12 &&
+ getParsingFlags(config).bigHour === true &&
+ config._a[HOUR] > 0) {
+ getParsingFlags(config).bigHour = undefined;
+ }
+
+ getParsingFlags(config).parsedDateParts = config._a.slice(0);
+ getParsingFlags(config).meridiem = config._meridiem;
+ // handle meridiem
+ config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+ configFromArray(config);
+ checkOverflow(config);
+}
+
+
+function meridiemFixWrap (locale, hour, meridiem) {
+ var isPm;
+
+ if (meridiem == null) {
+ // nothing to do
+ return hour;
+ }
+ if (locale.meridiemHour != null) {
+ return locale.meridiemHour(hour, meridiem);
+ } else if (locale.isPM != null) {
+ // Fallback
+ isPm = locale.isPM(meridiem);
+ if (isPm && hour < 12) {
+ hour += 12;
+ }
+ if (!isPm && hour === 12) {
+ hour = 0;
+ }
+ return hour;
+ } else {
+ // this is not supposed to happen
+ return hour;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string.js
new file mode 100644
index 00000000000..63df05ea8da
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/from-string.js
@@ -0,0 +1,120 @@
+import { configFromStringAndFormat } from './from-string-and-format';
+import { hooks } from '../utils/hooks';
+import { deprecate } from '../utils/deprecate';
+import getParsingFlags from './parsing-flags';
+
+// iso 8601 regex
+// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+var isoDates = [
+ ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+ ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+ ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+ ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+ ['YYYY-DDD', /\d{4}-\d{3}/],
+ ['YYYY-MM', /\d{4}-\d\d/, false],
+ ['YYYYYYMMDD', /[+-]\d{10}/],
+ ['YYYYMMDD', /\d{8}/],
+ // YYYYMM is NOT allowed by the standard
+ ['GGGG[W]WWE', /\d{4}W\d{3}/],
+ ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+ ['YYYYDDD', /\d{7}/]
+];
+
+// iso time formats and regexes
+var isoTimes = [
+ ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+ ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+ ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+ ['HH:mm', /\d\d:\d\d/],
+ ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+ ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+ ['HHmmss', /\d\d\d\d\d\d/],
+ ['HHmm', /\d\d\d\d/],
+ ['HH', /\d\d/]
+];
+
+var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+// date from iso format
+export function configFromISO(config) {
+ var i, l,
+ string = config._i,
+ match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+ allowTime, dateFormat, timeFormat, tzFormat;
+
+ if (match) {
+ getParsingFlags(config).iso = true;
+
+ for (i = 0, l = isoDates.length; i < l; i++) {
+ if (isoDates[i][1].exec(match[1])) {
+ dateFormat = isoDates[i][0];
+ allowTime = isoDates[i][2] !== false;
+ break;
+ }
+ }
+ if (dateFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[3]) {
+ for (i = 0, l = isoTimes.length; i < l; i++) {
+ if (isoTimes[i][1].exec(match[3])) {
+ // match[2] should be 'T' or space
+ timeFormat = (match[2] || ' ') + isoTimes[i][0];
+ break;
+ }
+ }
+ if (timeFormat == null) {
+ config._isValid = false;
+ return;
+ }
+ }
+ if (!allowTime && timeFormat != null) {
+ config._isValid = false;
+ return;
+ }
+ if (match[4]) {
+ if (tzRegex.exec(match[4])) {
+ tzFormat = 'Z';
+ } else {
+ config._isValid = false;
+ return;
+ }
+ }
+ config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+ configFromStringAndFormat(config);
+ } else {
+ config._isValid = false;
+ }
+}
+
+// date from iso format or fallback
+export function configFromString(config) {
+ var matched = aspNetJsonRegex.exec(config._i);
+
+ if (matched !== null) {
+ config._d = new Date(+matched[1]);
+ return;
+ }
+
+ configFromISO(config);
+ if (config._isValid === false) {
+ delete config._isValid;
+ hooks.createFromInputFallback(config);
+ }
+}
+
+hooks.createFromInputFallback = deprecate(
+ 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +
+ 'which is not reliable across all browsers and versions. Non ISO date formats are ' +
+ 'discouraged and will be removed in an upcoming major release. Please refer to ' +
+ 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+ function (config) {
+ config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+ }
+);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/local.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/local.js
new file mode 100644
index 00000000000..88c1e269289
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/local.js
@@ -0,0 +1,5 @@
+import { createLocalOrUTC } from './from-anything';
+
+export function createLocal (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, false);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/parsing-flags.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/parsing-flags.js
new file mode 100644
index 00000000000..5a4220013a3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/parsing-flags.js
@@ -0,0 +1,24 @@
+function defaultParsingFlags() {
+ // We need to deep clone this object.
+ return {
+ empty : false,
+ unusedTokens : [],
+ unusedInput : [],
+ overflow : -2,
+ charsLeftOver : 0,
+ nullInput : false,
+ invalidMonth : null,
+ invalidFormat : false,
+ userInvalidated : false,
+ iso : false,
+ parsedDateParts : [],
+ meridiem : null
+ };
+}
+
+export default function getParsingFlags(m) {
+ if (m._pf == null) {
+ m._pf = defaultParsingFlags();
+ }
+ return m._pf;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/utc.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/utc.js
new file mode 100644
index 00000000000..96139530e26
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/utc.js
@@ -0,0 +1,5 @@
+import { createLocalOrUTC } from './from-anything';
+
+export function createUTC (input, format, locale, strict) {
+ return createLocalOrUTC(input, format, locale, strict, true).utc();
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/valid.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/valid.js
new file mode 100644
index 00000000000..96b1cf615dc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/create/valid.js
@@ -0,0 +1,49 @@
+import extend from '../utils/extend';
+import { createUTC } from './utc';
+import getParsingFlags from '../create/parsing-flags';
+import some from '../utils/some';
+
+export function isValid(m) {
+ if (m._isValid == null) {
+ var flags = getParsingFlags(m);
+ var parsedParts = some.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
+ var isNowValid = !isNaN(m._d.getTime()) &&
+ flags.overflow < 0 &&
+ !flags.empty &&
+ !flags.invalidMonth &&
+ !flags.invalidWeekday &&
+ !flags.nullInput &&
+ !flags.invalidFormat &&
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
+
+ if (m._strict) {
+ isNowValid = isNowValid &&
+ flags.charsLeftOver === 0 &&
+ flags.unusedTokens.length === 0 &&
+ flags.bigHour === undefined;
+ }
+
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
+ m._isValid = isNowValid;
+ }
+ else {
+ return isNowValid;
+ }
+ }
+ return m._isValid;
+}
+
+export function createInvalid (flags) {
+ var m = createUTC(NaN);
+ if (flags != null) {
+ extend(getParsingFlags(m), flags);
+ }
+ else {
+ getParsingFlags(m).userInvalidated = true;
+ }
+
+ return m;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/abs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/abs.js
new file mode 100644
index 00000000000..103a4cf9b30
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/abs.js
@@ -0,0 +1,18 @@
+var mathAbs = Math.abs;
+
+export function abs () {
+ var data = this._data;
+
+ this._milliseconds = mathAbs(this._milliseconds);
+ this._days = mathAbs(this._days);
+ this._months = mathAbs(this._months);
+
+ data.milliseconds = mathAbs(data.milliseconds);
+ data.seconds = mathAbs(data.seconds);
+ data.minutes = mathAbs(data.minutes);
+ data.hours = mathAbs(data.hours);
+ data.months = mathAbs(data.months);
+ data.years = mathAbs(data.years);
+
+ return this;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/add-subtract.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/add-subtract.js
new file mode 100644
index 00000000000..3b44e186fcc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/add-subtract.js
@@ -0,0 +1,21 @@
+import { createDuration } from './create';
+
+function addSubtract (duration, input, value, direction) {
+ var other = createDuration(input, value);
+
+ duration._milliseconds += direction * other._milliseconds;
+ duration._days += direction * other._days;
+ duration._months += direction * other._months;
+
+ return duration._bubble();
+}
+
+// supports only 2.0-style add(1, 's') or add(duration)
+export function add (input, value) {
+ return addSubtract(this, input, value, 1);
+}
+
+// supports only 2.0-style subtract(1, 's') or subtract(duration)
+export function subtract (input, value) {
+ return addSubtract(this, input, value, -1);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/as.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/as.js
new file mode 100644
index 00000000000..03ecd6dab25
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/as.js
@@ -0,0 +1,55 @@
+import { daysToMonths, monthsToDays } from './bubble';
+import { normalizeUnits } from '../units/aliases';
+import toInt from '../utils/to-int';
+
+export function as (units) {
+ var days;
+ var months;
+ var milliseconds = this._milliseconds;
+
+ units = normalizeUnits(units);
+
+ if (units === 'month' || units === 'year') {
+ days = this._days + milliseconds / 864e5;
+ months = this._months + daysToMonths(days);
+ return units === 'month' ? months : months / 12;
+ } else {
+ // handle milliseconds separately because of floating point math errors (issue #1867)
+ days = this._days + Math.round(monthsToDays(this._months));
+ switch (units) {
+ case 'week' : return days / 7 + milliseconds / 6048e5;
+ case 'day' : return days + milliseconds / 864e5;
+ case 'hour' : return days * 24 + milliseconds / 36e5;
+ case 'minute' : return days * 1440 + milliseconds / 6e4;
+ case 'second' : return days * 86400 + milliseconds / 1000;
+ // Math.floor prevents floating point math errors here
+ case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+ default: throw new Error('Unknown unit ' + units);
+ }
+ }
+}
+
+// TODO: Use this.as('ms')?
+export function valueOf () {
+ return (
+ this._milliseconds +
+ this._days * 864e5 +
+ (this._months % 12) * 2592e6 +
+ toInt(this._months / 12) * 31536e6
+ );
+}
+
+function makeAs (alias) {
+ return function () {
+ return this.as(alias);
+ };
+}
+
+export var asMilliseconds = makeAs('ms');
+export var asSeconds = makeAs('s');
+export var asMinutes = makeAs('m');
+export var asHours = makeAs('h');
+export var asDays = makeAs('d');
+export var asWeeks = makeAs('w');
+export var asMonths = makeAs('M');
+export var asYears = makeAs('y');
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/bubble.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/bubble.js
new file mode 100644
index 00000000000..0c4a336ec47
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/bubble.js
@@ -0,0 +1,61 @@
+import absFloor from '../utils/abs-floor';
+import absCeil from '../utils/abs-ceil';
+import { createUTCDate } from '../create/date-from-array';
+
+export function bubble () {
+ var milliseconds = this._milliseconds;
+ var days = this._days;
+ var months = this._months;
+ var data = this._data;
+ var seconds, minutes, hours, years, monthsFromDays;
+
+ // if we have a mix of positive and negative values, bubble down first
+ // check: https://github.com/moment/moment/issues/2166
+ if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+ (milliseconds <= 0 && days <= 0 && months <= 0))) {
+ milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+ days = 0;
+ months = 0;
+ }
+
+ // The following code bubbles up values, see the tests for
+ // examples of what that means.
+ data.milliseconds = milliseconds % 1000;
+
+ seconds = absFloor(milliseconds / 1000);
+ data.seconds = seconds % 60;
+
+ minutes = absFloor(seconds / 60);
+ data.minutes = minutes % 60;
+
+ hours = absFloor(minutes / 60);
+ data.hours = hours % 24;
+
+ days += absFloor(hours / 24);
+
+ // convert days to months
+ monthsFromDays = absFloor(daysToMonths(days));
+ months += monthsFromDays;
+ days -= absCeil(monthsToDays(monthsFromDays));
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+ data.days = days;
+ data.months = months;
+ data.years = years;
+
+ return this;
+}
+
+export function daysToMonths (days) {
+ // 400 years have 146097 days (taking into account leap year rules)
+ // 400 years have 12 months === 4800
+ return days * 4800 / 146097;
+}
+
+export function monthsToDays (months) {
+ // the reverse of daysToMonths
+ return months * 146097 / 4800;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/constructor.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/constructor.js
new file mode 100644
index 00000000000..fb01c704137
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/constructor.js
@@ -0,0 +1,41 @@
+import { normalizeObjectUnits } from '../units/aliases';
+import { getLocale } from '../locale/locales';
+
+export function Duration (duration) {
+ var normalizedInput = normalizeObjectUnits(duration),
+ years = normalizedInput.year || 0,
+ quarters = normalizedInput.quarter || 0,
+ months = normalizedInput.month || 0,
+ weeks = normalizedInput.week || 0,
+ days = normalizedInput.day || 0,
+ hours = normalizedInput.hour || 0,
+ minutes = normalizedInput.minute || 0,
+ seconds = normalizedInput.second || 0,
+ milliseconds = normalizedInput.millisecond || 0;
+
+ // representation for dateAddRemove
+ this._milliseconds = +milliseconds +
+ seconds * 1e3 + // 1000
+ minutes * 6e4 + // 1000 * 60
+ hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+ // Because of dateAddRemove treats 24 hours as different from a
+ // day when working around DST, we need to store them separately
+ this._days = +days +
+ weeks * 7;
+ // It is impossible translate months into days without knowing
+ // which months you are are talking about, so we have to store
+ // it separately.
+ this._months = +months +
+ quarters * 3 +
+ years * 12;
+
+ this._data = {};
+
+ this._locale = getLocale();
+
+ this._bubble();
+}
+
+export function isDuration (obj) {
+ return obj instanceof Duration;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/create.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/create.js
new file mode 100644
index 00000000000..09af9e24f7b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/create.js
@@ -0,0 +1,120 @@
+import { Duration, isDuration } from './constructor';
+import isNumber from '../utils/is-number';
+import toInt from '../utils/to-int';
+import absRound from '../utils/abs-round';
+import hasOwnProp from '../utils/has-own-prop';
+import { DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants';
+import { cloneWithOffset } from '../units/offset';
+import { createLocal } from '../create/local';
+
+// ASP.NET json date format regex
+var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
+
+// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+// and further modified to allow for strings containing both week and day
+var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
+
+export function createDuration (input, key) {
+ var duration = input,
+ // matching against regexp is expensive, do it on demand
+ match = null,
+ sign,
+ ret,
+ diffRes;
+
+ if (isDuration(input)) {
+ duration = {
+ ms : input._milliseconds,
+ d : input._days,
+ M : input._months
+ };
+ } else if (isNumber(input)) {
+ duration = {};
+ if (key) {
+ duration[key] = input;
+ } else {
+ duration.milliseconds = input;
+ }
+ } else if (!!(match = aspNetRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : 0,
+ d : toInt(match[DATE]) * sign,
+ h : toInt(match[HOUR]) * sign,
+ m : toInt(match[MINUTE]) * sign,
+ s : toInt(match[SECOND]) * sign,
+ ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
+ };
+ } else if (!!(match = isoRegex.exec(input))) {
+ sign = (match[1] === '-') ? -1 : 1;
+ duration = {
+ y : parseIso(match[2], sign),
+ M : parseIso(match[3], sign),
+ w : parseIso(match[4], sign),
+ d : parseIso(match[5], sign),
+ h : parseIso(match[6], sign),
+ m : parseIso(match[7], sign),
+ s : parseIso(match[8], sign)
+ };
+ } else if (duration == null) {// checks for null or undefined
+ duration = {};
+ } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+ diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
+
+ duration = {};
+ duration.ms = diffRes.milliseconds;
+ duration.M = diffRes.months;
+ }
+
+ ret = new Duration(duration);
+
+ if (isDuration(input) && hasOwnProp(input, '_locale')) {
+ ret._locale = input._locale;
+ }
+
+ return ret;
+}
+
+createDuration.fn = Duration.prototype;
+
+function parseIso (inp, sign) {
+ // We'd normally use ~~inp for this, but unfortunately it also
+ // converts floats to ints.
+ // inp may be undefined, so careful calling replace on it.
+ var res = inp && parseFloat(inp.replace(',', '.'));
+ // apply sign while we're at it
+ return (isNaN(res) ? 0 : res) * sign;
+}
+
+function positiveMomentsDifference(base, other) {
+ var res = {milliseconds: 0, months: 0};
+
+ res.months = other.month() - base.month() +
+ (other.year() - base.year()) * 12;
+ if (base.clone().add(res.months, 'M').isAfter(other)) {
+ --res.months;
+ }
+
+ res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+ return res;
+}
+
+function momentsDifference(base, other) {
+ var res;
+ if (!(base.isValid() && other.isValid())) {
+ return {milliseconds: 0, months: 0};
+ }
+
+ other = cloneWithOffset(other, base);
+ if (base.isBefore(other)) {
+ res = positiveMomentsDifference(base, other);
+ } else {
+ res = positiveMomentsDifference(other, base);
+ res.milliseconds = -res.milliseconds;
+ res.months = -res.months;
+ }
+
+ return res;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/duration.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/duration.js
new file mode 100644
index 00000000000..528b568121f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/duration.js
@@ -0,0 +1,16 @@
+// Side effect imports
+import './prototype';
+
+import { createDuration } from './create';
+import { isDuration } from './constructor';
+import {
+ getSetRelativeTimeRounding,
+ getSetRelativeTimeThreshold
+} from './humanize';
+
+export {
+ createDuration,
+ isDuration,
+ getSetRelativeTimeRounding,
+ getSetRelativeTimeThreshold
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/get.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/get.js
new file mode 100644
index 00000000000..6dafacdd860
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/get.js
@@ -0,0 +1,25 @@
+import { normalizeUnits } from '../units/aliases';
+import absFloor from '../utils/abs-floor';
+
+export function get (units) {
+ units = normalizeUnits(units);
+ return this[units + 's']();
+}
+
+function makeGetter(name) {
+ return function () {
+ return this._data[name];
+ };
+}
+
+export var milliseconds = makeGetter('milliseconds');
+export var seconds = makeGetter('seconds');
+export var minutes = makeGetter('minutes');
+export var hours = makeGetter('hours');
+export var days = makeGetter('days');
+export var months = makeGetter('months');
+export var years = makeGetter('years');
+
+export function weeks () {
+ return absFloor(this.days() / 7);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/humanize.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/humanize.js
new file mode 100644
index 00000000000..6120d404bca
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/humanize.js
@@ -0,0 +1,76 @@
+import { createDuration } from './create';
+
+var round = Math.round;
+var thresholds = {
+ s: 45, // seconds to minute
+ m: 45, // minutes to hour
+ h: 22, // hours to day
+ d: 26, // days to month
+ M: 11 // months to year
+};
+
+// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+ return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+}
+
+function relativeTime (posNegDuration, withoutSuffix, locale) {
+ var duration = createDuration(posNegDuration).abs();
+ var seconds = round(duration.as('s'));
+ var minutes = round(duration.as('m'));
+ var hours = round(duration.as('h'));
+ var days = round(duration.as('d'));
+ var months = round(duration.as('M'));
+ var years = round(duration.as('y'));
+
+ var a = seconds < thresholds.s && ['s', seconds] ||
+ minutes <= 1 && ['m'] ||
+ minutes < thresholds.m && ['mm', minutes] ||
+ hours <= 1 && ['h'] ||
+ hours < thresholds.h && ['hh', hours] ||
+ days <= 1 && ['d'] ||
+ days < thresholds.d && ['dd', days] ||
+ months <= 1 && ['M'] ||
+ months < thresholds.M && ['MM', months] ||
+ years <= 1 && ['y'] || ['yy', years];
+
+ a[2] = withoutSuffix;
+ a[3] = +posNegDuration > 0;
+ a[4] = locale;
+ return substituteTimeAgo.apply(null, a);
+}
+
+// This function allows you to set the rounding function for relative time strings
+export function getSetRelativeTimeRounding (roundingFunction) {
+ if (roundingFunction === undefined) {
+ return round;
+ }
+ if (typeof(roundingFunction) === 'function') {
+ round = roundingFunction;
+ return true;
+ }
+ return false;
+}
+
+// This function allows you to set a threshold for relative time strings
+export function getSetRelativeTimeThreshold (threshold, limit) {
+ if (thresholds[threshold] === undefined) {
+ return false;
+ }
+ if (limit === undefined) {
+ return thresholds[threshold];
+ }
+ thresholds[threshold] = limit;
+ return true;
+}
+
+export function humanize (withSuffix) {
+ var locale = this.localeData();
+ var output = relativeTime(this, !withSuffix, locale);
+
+ if (withSuffix) {
+ output = locale.pastFuture(+this, output);
+ }
+
+ return locale.postformat(output);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/iso-string.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/iso-string.js
new file mode 100644
index 00000000000..f33a968da8e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/iso-string.js
@@ -0,0 +1,52 @@
+import absFloor from '../utils/abs-floor';
+var abs = Math.abs;
+
+export function toISOString() {
+ // for ISO strings we do not use the normal bubbling rules:
+ // * milliseconds bubble up until they become hours
+ // * days do not bubble at all
+ // * months bubble up until they become years
+ // This is because there is no context-free conversion between hours and days
+ // (think of clock changes)
+ // and also not between days and months (28-31 days per month)
+ var seconds = abs(this._milliseconds) / 1000;
+ var days = abs(this._days);
+ var months = abs(this._months);
+ var minutes, hours, years;
+
+ // 3600 seconds -> 60 minutes -> 1 hour
+ minutes = absFloor(seconds / 60);
+ hours = absFloor(minutes / 60);
+ seconds %= 60;
+ minutes %= 60;
+
+ // 12 months -> 1 year
+ years = absFloor(months / 12);
+ months %= 12;
+
+
+ // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+ var Y = years;
+ var M = months;
+ var D = days;
+ var h = hours;
+ var m = minutes;
+ var s = seconds;
+ var total = this.asSeconds();
+
+ if (!total) {
+ // this is the same as C#'s (Noda) and python (isodate)...
+ // but not other JS (goog.date)
+ return 'P0D';
+ }
+
+ return (total < 0 ? '-' : '') +
+ 'P' +
+ (Y ? Y + 'Y' : '') +
+ (M ? M + 'M' : '') +
+ (D ? D + 'D' : '') +
+ ((h || m || s) ? 'T' : '') +
+ (h ? h + 'H' : '') +
+ (m ? m + 'M' : '') +
+ (s ? s + 'S' : '');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/prototype.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/prototype.js
new file mode 100644
index 00000000000..0257ff9b501
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/duration/prototype.js
@@ -0,0 +1,48 @@
+import { Duration } from './constructor';
+
+var proto = Duration.prototype;
+
+import { abs } from './abs';
+import { add, subtract } from './add-subtract';
+import { as, asMilliseconds, asSeconds, asMinutes, asHours, asDays, asWeeks, asMonths, asYears, valueOf } from './as';
+import { bubble } from './bubble';
+import { get, milliseconds, seconds, minutes, hours, days, months, years, weeks } from './get';
+import { humanize } from './humanize';
+import { toISOString } from './iso-string';
+import { lang, locale, localeData } from '../moment/locale';
+
+proto.abs = abs;
+proto.add = add;
+proto.subtract = subtract;
+proto.as = as;
+proto.asMilliseconds = asMilliseconds;
+proto.asSeconds = asSeconds;
+proto.asMinutes = asMinutes;
+proto.asHours = asHours;
+proto.asDays = asDays;
+proto.asWeeks = asWeeks;
+proto.asMonths = asMonths;
+proto.asYears = asYears;
+proto.valueOf = valueOf;
+proto._bubble = bubble;
+proto.get = get;
+proto.milliseconds = milliseconds;
+proto.seconds = seconds;
+proto.minutes = minutes;
+proto.hours = hours;
+proto.days = days;
+proto.weeks = weeks;
+proto.months = months;
+proto.years = years;
+proto.humanize = humanize;
+proto.toISOString = toISOString;
+proto.toString = toISOString;
+proto.toJSON = toISOString;
+proto.locale = locale;
+proto.localeData = localeData;
+
+// Deprecations
+import { deprecate } from '../utils/deprecate';
+
+proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString);
+proto.lang = lang;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/format/format.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/format/format.js
new file mode 100644
index 00000000000..33486f1d566
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/format/format.js
@@ -0,0 +1,91 @@
+import zeroFill from '../utils/zero-fill';
+
+export var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+var formatFunctions = {};
+
+export var formatTokenFunctions = {};
+
+// token: 'M'
+// padded: ['MM', 2]
+// ordinal: 'Mo'
+// callback: function () { this.month() + 1 }
+export function addFormatToken (token, padded, ordinal, callback) {
+ var func = callback;
+ if (typeof callback === 'string') {
+ func = function () {
+ return this[callback]();
+ };
+ }
+ if (token) {
+ formatTokenFunctions[token] = func;
+ }
+ if (padded) {
+ formatTokenFunctions[padded[0]] = function () {
+ return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+ };
+ }
+ if (ordinal) {
+ formatTokenFunctions[ordinal] = function () {
+ return this.localeData().ordinal(func.apply(this, arguments), token);
+ };
+ }
+}
+
+function removeFormattingTokens(input) {
+ if (input.match(/\[[\s\S]/)) {
+ return input.replace(/^\[|\]$/g, '');
+ }
+ return input.replace(/\\/g, '');
+}
+
+function makeFormatFunction(format) {
+ var array = format.match(formattingTokens), i, length;
+
+ for (i = 0, length = array.length; i < length; i++) {
+ if (formatTokenFunctions[array[i]]) {
+ array[i] = formatTokenFunctions[array[i]];
+ } else {
+ array[i] = removeFormattingTokens(array[i]);
+ }
+ }
+
+ return function (mom) {
+ var output = '', i;
+ for (i = 0; i < length; i++) {
+ output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+ }
+ return output;
+ };
+}
+
+// format date using native date object
+export function formatMoment(m, format) {
+ if (!m.isValid()) {
+ return m.localeData().invalidDate();
+ }
+
+ format = expandFormat(format, m.localeData());
+ formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+ return formatFunctions[format](m);
+}
+
+export function expandFormat(format, locale) {
+ var i = 5;
+
+ function replaceLongDateFormatTokens(input) {
+ return locale.longDateFormat(input) || input;
+ }
+
+ localFormattingTokens.lastIndex = 0;
+ while (i >= 0 && localFormattingTokens.test(format)) {
+ format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+ localFormattingTokens.lastIndex = 0;
+ i -= 1;
+ }
+
+ return format;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/base-config.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/base-config.js
new file mode 100644
index 00000000000..cbb0b36b49f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/base-config.js
@@ -0,0 +1,44 @@
+import { defaultCalendar } from './calendar';
+import { defaultLongDateFormat } from './formats';
+import { defaultInvalidDate } from './invalid';
+import { defaultOrdinal, defaultOrdinalParse } from './ordinal';
+import { defaultRelativeTime } from './relative';
+
+// months
+import {
+ defaultLocaleMonths,
+ defaultLocaleMonthsShort,
+} from '../units/month';
+
+// week
+import { defaultLocaleWeek } from '../units/week';
+
+// weekdays
+import {
+ defaultLocaleWeekdays,
+ defaultLocaleWeekdaysMin,
+ defaultLocaleWeekdaysShort,
+} from '../units/day-of-week';
+
+// meridiem
+import { defaultLocaleMeridiemParse } from '../units/hour';
+
+export var baseConfig = {
+ calendar: defaultCalendar,
+ longDateFormat: defaultLongDateFormat,
+ invalidDate: defaultInvalidDate,
+ ordinal: defaultOrdinal,
+ ordinalParse: defaultOrdinalParse,
+ relativeTime: defaultRelativeTime,
+
+ months: defaultLocaleMonths,
+ monthsShort: defaultLocaleMonthsShort,
+
+ week: defaultLocaleWeek,
+
+ weekdays: defaultLocaleWeekdays,
+ weekdaysMin: defaultLocaleWeekdaysMin,
+ weekdaysShort: defaultLocaleWeekdaysShort,
+
+ meridiemParse: defaultLocaleMeridiemParse
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/calendar.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/calendar.js
new file mode 100644
index 00000000000..f12214b86da
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/calendar.js
@@ -0,0 +1,15 @@
+export var defaultCalendar = {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+};
+
+import isFunction from '../utils/is-function';
+
+export function calendar (key, mom, now) {
+ var output = this._calendar[key] || this._calendar['sameElse'];
+ return isFunction(output) ? output.call(mom, now) : output;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/constructor.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/constructor.js
new file mode 100644
index 00000000000..c32b73ee11c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/constructor.js
@@ -0,0 +1,5 @@
+export function Locale(config) {
+ if (config != null) {
+ this.set(config);
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/en.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/en.js
new file mode 100644
index 00000000000..20964cd9c1c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/en.js
@@ -0,0 +1,15 @@
+import './prototype';
+import { getSetGlobalLocale } from './locales';
+import toInt from '../utils/to-int';
+
+getSetGlobalLocale('en', {
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (toInt(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/formats.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/formats.js
new file mode 100644
index 00000000000..6d83b039484
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/formats.js
@@ -0,0 +1,23 @@
+export var defaultLongDateFormat = {
+ LTS : 'h:mm:ss A',
+ LT : 'h:mm A',
+ L : 'MM/DD/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+};
+
+export function longDateFormat (key) {
+ var format = this._longDateFormat[key],
+ formatUpper = this._longDateFormat[key.toUpperCase()];
+
+ if (format || !formatUpper) {
+ return format;
+ }
+
+ this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+ return val.slice(1);
+ });
+
+ return this._longDateFormat[key];
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/invalid.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/invalid.js
new file mode 100644
index 00000000000..e9096339baa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/invalid.js
@@ -0,0 +1,5 @@
+export var defaultInvalidDate = 'Invalid date';
+
+export function invalidDate () {
+ return this._invalidDate;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/lists.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/lists.js
new file mode 100644
index 00000000000..42f7572e2a9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/lists.js
@@ -0,0 +1,93 @@
+import isNumber from '../utils/is-number';
+import { getLocale } from './locales';
+import { createUTC } from '../create/utc';
+
+function get (format, index, field, setter) {
+ var locale = getLocale();
+ var utc = createUTC().set(setter, index);
+ return locale[field](utc, format);
+}
+
+function listMonthsImpl (format, index, field) {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+
+ if (index != null) {
+ return get(format, index, field, 'month');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 12; i++) {
+ out[i] = get(format, i, field, 'month');
+ }
+ return out;
+}
+
+// ()
+// (5)
+// (fmt, 5)
+// (fmt)
+// (true)
+// (true, 5)
+// (true, fmt, 5)
+// (true, fmt)
+function listWeekdaysImpl (localeSorted, format, index, field) {
+ if (typeof localeSorted === 'boolean') {
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ } else {
+ format = localeSorted;
+ index = format;
+ localeSorted = false;
+
+ if (isNumber(format)) {
+ index = format;
+ format = undefined;
+ }
+
+ format = format || '';
+ }
+
+ var locale = getLocale(),
+ shift = localeSorted ? locale._week.dow : 0;
+
+ if (index != null) {
+ return get(format, (index + shift) % 7, field, 'day');
+ }
+
+ var i;
+ var out = [];
+ for (i = 0; i < 7; i++) {
+ out[i] = get(format, (i + shift) % 7, field, 'day');
+ }
+ return out;
+}
+
+export function listMonths (format, index) {
+ return listMonthsImpl(format, index, 'months');
+}
+
+export function listMonthsShort (format, index) {
+ return listMonthsImpl(format, index, 'monthsShort');
+}
+
+export function listWeekdays (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+}
+
+export function listWeekdaysShort (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+}
+
+export function listWeekdaysMin (localeSorted, format, index) {
+ return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locale.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locale.js
new file mode 100644
index 00000000000..ac9cebfb824
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locale.js
@@ -0,0 +1,39 @@
+// Side effect imports
+import './prototype';
+
+import {
+ getSetGlobalLocale,
+ defineLocale,
+ updateLocale,
+ getLocale,
+ listLocales
+} from './locales';
+
+import {
+ listMonths,
+ listMonthsShort,
+ listWeekdays,
+ listWeekdaysShort,
+ listWeekdaysMin
+} from './lists';
+
+export {
+ getSetGlobalLocale,
+ defineLocale,
+ updateLocale,
+ getLocale,
+ listLocales,
+ listMonths,
+ listMonthsShort,
+ listWeekdays,
+ listWeekdaysShort,
+ listWeekdaysMin
+};
+
+import { deprecate } from '../utils/deprecate';
+import { hooks } from '../utils/hooks';
+
+hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
+hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
+
+import './en';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locales.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locales.js
new file mode 100644
index 00000000000..99ee1157184
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/locales.js
@@ -0,0 +1,186 @@
+import isArray from '../utils/is-array';
+import hasOwnProp from '../utils/has-own-prop';
+import isUndefined from '../utils/is-undefined';
+import compareArrays from '../utils/compare-arrays';
+import { deprecateSimple } from '../utils/deprecate';
+import { mergeConfigs } from './set';
+import { Locale } from './constructor';
+import keys from '../utils/keys';
+
+import { baseConfig } from './base-config';
+
+// internal storage for locale config files
+var locales = {};
+var localeFamilies = {};
+var globalLocale;
+
+function normalizeLocale(key) {
+ return key ? key.toLowerCase().replace('_', '-') : key;
+}
+
+// pick the locale from the array
+// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+function chooseLocale(names) {
+ var i = 0, j, next, locale, split;
+
+ while (i < names.length) {
+ split = normalizeLocale(names[i]).split('-');
+ j = split.length;
+ next = normalizeLocale(names[i + 1]);
+ next = next ? next.split('-') : null;
+ while (j > 0) {
+ locale = loadLocale(split.slice(0, j).join('-'));
+ if (locale) {
+ return locale;
+ }
+ if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+ //the next array item is better than a shallower substring of this one
+ break;
+ }
+ j--;
+ }
+ i++;
+ }
+ return null;
+}
+
+function loadLocale(name) {
+ var oldLocale = null;
+ // TODO: Find a better way to register and load all the locales in Node
+ if (!locales[name] && (typeof module !== 'undefined') &&
+ module && module.exports) {
+ try {
+ oldLocale = globalLocale._abbr;
+ require('./locale/' + name);
+ // because defineLocale currently also sets the global locale, we
+ // want to undo that for lazy loaded locales
+ getSetGlobalLocale(oldLocale);
+ } catch (e) { }
+ }
+ return locales[name];
+}
+
+// This function will load locale and then set the global locale. If
+// no arguments are passed in, it will simply return the current global
+// locale key.
+export function getSetGlobalLocale (key, values) {
+ var data;
+ if (key) {
+ if (isUndefined(values)) {
+ data = getLocale(key);
+ }
+ else {
+ data = defineLocale(key, values);
+ }
+
+ if (data) {
+ // moment.duration._locale = moment._locale = data;
+ globalLocale = data;
+ }
+ }
+
+ return globalLocale._abbr;
+}
+
+export function defineLocale (name, config) {
+ if (config !== null) {
+ var parentConfig = baseConfig;
+ config.abbr = name;
+ if (locales[name] != null) {
+ deprecateSimple('defineLocaleOverride',
+ 'use moment.updateLocale(localeName, config) to change ' +
+ 'an existing locale. moment.defineLocale(localeName, ' +
+ 'config) should only be used for creating a new locale ' +
+ 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+ parentConfig = locales[name]._config;
+ } else if (config.parentLocale != null) {
+ if (locales[config.parentLocale] != null) {
+ parentConfig = locales[config.parentLocale]._config;
+ } else {
+ if (!localeFamilies[config.parentLocale]) {
+ localeFamilies[config.parentLocale] = [];
+ }
+ localeFamilies[config.parentLocale].push({
+ name: name,
+ config: config
+ });
+ return null;
+ }
+ }
+ locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+ if (localeFamilies[name]) {
+ localeFamilies[name].forEach(function (x) {
+ defineLocale(x.name, x.config);
+ });
+ }
+
+ // backwards compat for now: also set the locale
+ // make sure we set the locale AFTER all child locales have been
+ // created, so we won't end up with the child locale set.
+ getSetGlobalLocale(name);
+
+
+ return locales[name];
+ } else {
+ // useful for testing
+ delete locales[name];
+ return null;
+ }
+}
+
+export function updateLocale(name, config) {
+ if (config != null) {
+ var locale, parentConfig = baseConfig;
+ // MERGE
+ if (locales[name] != null) {
+ parentConfig = locales[name]._config;
+ }
+ config = mergeConfigs(parentConfig, config);
+ locale = new Locale(config);
+ locale.parentLocale = locales[name];
+ locales[name] = locale;
+
+ // backwards compat for now: also set the locale
+ getSetGlobalLocale(name);
+ } else {
+ // pass null for config to unupdate, useful for tests
+ if (locales[name] != null) {
+ if (locales[name].parentLocale != null) {
+ locales[name] = locales[name].parentLocale;
+ } else if (locales[name] != null) {
+ delete locales[name];
+ }
+ }
+ }
+ return locales[name];
+}
+
+// returns locale data
+export function getLocale (key) {
+ var locale;
+
+ if (key && key._locale && key._locale._abbr) {
+ key = key._locale._abbr;
+ }
+
+ if (!key) {
+ return globalLocale;
+ }
+
+ if (!isArray(key)) {
+ //short-circuit everything else
+ locale = loadLocale(key);
+ if (locale) {
+ return locale;
+ }
+ key = [key];
+ }
+
+ return chooseLocale(key);
+}
+
+export function listLocales() {
+ return keys(locales);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/ordinal.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/ordinal.js
new file mode 100644
index 00000000000..0028aca024e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/ordinal.js
@@ -0,0 +1,7 @@
+export var defaultOrdinal = '%d';
+export var defaultOrdinalParse = /\d{1,2}/;
+
+export function ordinal (number) {
+ return this._ordinal.replace('%d', number);
+}
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/pre-post-format.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/pre-post-format.js
new file mode 100644
index 00000000000..10ed2058429
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/pre-post-format.js
@@ -0,0 +1,3 @@
+export function preParsePostFormat (string) {
+ return string;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/prototype.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/prototype.js
new file mode 100644
index 00000000000..24eef89f14b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/prototype.js
@@ -0,0 +1,69 @@
+import { Locale } from './constructor';
+
+var proto = Locale.prototype;
+
+import { calendar } from './calendar';
+import { longDateFormat } from './formats';
+import { invalidDate } from './invalid';
+import { ordinal } from './ordinal';
+import { preParsePostFormat } from './pre-post-format';
+import { relativeTime, pastFuture } from './relative';
+import { set } from './set';
+
+proto.calendar = calendar;
+proto.longDateFormat = longDateFormat;
+proto.invalidDate = invalidDate;
+proto.ordinal = ordinal;
+proto.preparse = preParsePostFormat;
+proto.postformat = preParsePostFormat;
+proto.relativeTime = relativeTime;
+proto.pastFuture = pastFuture;
+proto.set = set;
+
+// Month
+import {
+ localeMonthsParse,
+ localeMonths,
+ localeMonthsShort,
+ monthsRegex,
+ monthsShortRegex
+} from '../units/month';
+
+proto.months = localeMonths;
+proto.monthsShort = localeMonthsShort;
+proto.monthsParse = localeMonthsParse;
+proto.monthsRegex = monthsRegex;
+proto.monthsShortRegex = monthsShortRegex;
+
+// Week
+import { localeWeek, localeFirstDayOfYear, localeFirstDayOfWeek } from '../units/week';
+proto.week = localeWeek;
+proto.firstDayOfYear = localeFirstDayOfYear;
+proto.firstDayOfWeek = localeFirstDayOfWeek;
+
+// Day of Week
+import {
+ localeWeekdaysParse,
+ localeWeekdays,
+ localeWeekdaysMin,
+ localeWeekdaysShort,
+
+ weekdaysRegex,
+ weekdaysShortRegex,
+ weekdaysMinRegex
+} from '../units/day-of-week';
+
+proto.weekdays = localeWeekdays;
+proto.weekdaysMin = localeWeekdaysMin;
+proto.weekdaysShort = localeWeekdaysShort;
+proto.weekdaysParse = localeWeekdaysParse;
+
+proto.weekdaysRegex = weekdaysRegex;
+proto.weekdaysShortRegex = weekdaysShortRegex;
+proto.weekdaysMinRegex = weekdaysMinRegex;
+
+// Hours
+import { localeIsPM, localeMeridiem } from '../units/hour';
+
+proto.isPM = localeIsPM;
+proto.meridiem = localeMeridiem;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/relative.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/relative.js
new file mode 100644
index 00000000000..4c485ea2224
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/relative.js
@@ -0,0 +1,29 @@
+export var defaultRelativeTime = {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+};
+
+import isFunction from '../utils/is-function';
+
+export function relativeTime (number, withoutSuffix, string, isFuture) {
+ var output = this._relativeTime[string];
+ return (isFunction(output)) ?
+ output(number, withoutSuffix, string, isFuture) :
+ output.replace(/%d/i, number);
+}
+
+export function pastFuture (diff, output) {
+ var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+ return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/set.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/set.js
new file mode 100644
index 00000000000..45a2f46e12f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/locale/set.js
@@ -0,0 +1,46 @@
+import isFunction from '../utils/is-function';
+import extend from '../utils/extend';
+import isObject from '../utils/is-object';
+import hasOwnProp from '../utils/has-own-prop';
+
+export function set (config) {
+ var prop, i;
+ for (i in config) {
+ prop = config[i];
+ if (isFunction(prop)) {
+ this[i] = prop;
+ } else {
+ this['_' + i] = prop;
+ }
+ }
+ this._config = config;
+ // Lenient ordinal parsing accepts just a number in addition to
+ // number + (possibly) stuff coming from _ordinalParseLenient.
+ this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+}
+
+export function mergeConfigs(parentConfig, childConfig) {
+ var res = extend({}, parentConfig), prop;
+ for (prop in childConfig) {
+ if (hasOwnProp(childConfig, prop)) {
+ if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+ res[prop] = {};
+ extend(res[prop], parentConfig[prop]);
+ extend(res[prop], childConfig[prop]);
+ } else if (childConfig[prop] != null) {
+ res[prop] = childConfig[prop];
+ } else {
+ delete res[prop];
+ }
+ }
+ }
+ for (prop in parentConfig) {
+ if (hasOwnProp(parentConfig, prop) &&
+ !hasOwnProp(childConfig, prop) &&
+ isObject(parentConfig[prop])) {
+ // make sure changes to properties don't modify parent config
+ res[prop] = extend({}, res[prop]);
+ }
+ }
+ return res;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/add-subtract.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/add-subtract.js
new file mode 100644
index 00000000000..b9e86a69d2a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/add-subtract.js
@@ -0,0 +1,55 @@
+import { get, set } from './get-set';
+import { setMonth } from '../units/month';
+import { createDuration } from '../duration/create';
+import { deprecateSimple } from '../utils/deprecate';
+import { hooks } from '../utils/hooks';
+import absRound from '../utils/abs-round';
+
+
+// TODO: remove 'name' arg after deprecation is removed
+function createAdder(direction, name) {
+ return function (val, period) {
+ var dur, tmp;
+ //invert the arguments, but complain about it
+ if (period !== null && !isNaN(+period)) {
+ deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+ 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+ tmp = val; val = period; period = tmp;
+ }
+
+ val = typeof val === 'string' ? +val : val;
+ dur = createDuration(val, period);
+ addSubtract(this, dur, direction);
+ return this;
+ };
+}
+
+export function addSubtract (mom, duration, isAdding, updateOffset) {
+ var milliseconds = duration._milliseconds,
+ days = absRound(duration._days),
+ months = absRound(duration._months);
+
+ if (!mom.isValid()) {
+ // No op
+ return;
+ }
+
+ updateOffset = updateOffset == null ? true : updateOffset;
+
+ if (milliseconds) {
+ mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+ }
+ if (days) {
+ set(mom, 'Date', get(mom, 'Date') + days * isAdding);
+ }
+ if (months) {
+ setMonth(mom, get(mom, 'Month') + months * isAdding);
+ }
+ if (updateOffset) {
+ hooks.updateOffset(mom, days || months);
+ }
+}
+
+export var add = createAdder(1, 'add');
+export var subtract = createAdder(-1, 'subtract');
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/calendar.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/calendar.js
new file mode 100644
index 00000000000..4b5725c58b0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/calendar.js
@@ -0,0 +1,26 @@
+import { createLocal } from '../create/local';
+import { cloneWithOffset } from '../units/offset';
+import isFunction from '../utils/is-function';
+import { hooks } from '../utils/hooks';
+
+export function getCalendarFormat(myMoment, now) {
+ var diff = myMoment.diff(now, 'days', true);
+ return diff < -6 ? 'sameElse' :
+ diff < -1 ? 'lastWeek' :
+ diff < 0 ? 'lastDay' :
+ diff < 1 ? 'sameDay' :
+ diff < 2 ? 'nextDay' :
+ diff < 7 ? 'nextWeek' : 'sameElse';
+}
+
+export function calendar (time, formats) {
+ // We want to compare the start of today, vs this.
+ // Getting start-of-today depends on whether we're local/utc/offset or not.
+ var now = time || createLocal(),
+ sod = cloneWithOffset(now, this).startOf('day'),
+ format = hooks.calendarFormat(this, sod) || 'sameElse';
+
+ var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+ return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/clone.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/clone.js
new file mode 100644
index 00000000000..d96b328b244
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/clone.js
@@ -0,0 +1,5 @@
+import { Moment } from './constructor';
+
+export function clone () {
+ return new Moment(this);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/compare.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/compare.js
new file mode 100644
index 00000000000..b26bac633c4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/compare.js
@@ -0,0 +1,59 @@
+import { isMoment } from './constructor';
+import { normalizeUnits } from '../units/aliases';
+import { createLocal } from '../create/local';
+import isUndefined from '../utils/is-undefined';
+
+export function isAfter (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() > localInput.valueOf();
+ } else {
+ return localInput.valueOf() < this.clone().startOf(units).valueOf();
+ }
+}
+
+export function isBefore (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input);
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() < localInput.valueOf();
+ } else {
+ return this.clone().endOf(units).valueOf() < localInput.valueOf();
+ }
+}
+
+export function isBetween (from, to, units, inclusivity) {
+ inclusivity = inclusivity || '()';
+ return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+ (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
+}
+
+export function isSame (input, units) {
+ var localInput = isMoment(input) ? input : createLocal(input),
+ inputMs;
+ if (!(this.isValid() && localInput.isValid())) {
+ return false;
+ }
+ units = normalizeUnits(units || 'millisecond');
+ if (units === 'millisecond') {
+ return this.valueOf() === localInput.valueOf();
+ } else {
+ inputMs = localInput.valueOf();
+ return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+ }
+}
+
+export function isSameOrAfter (input, units) {
+ return this.isSame(input, units) || this.isAfter(input,units);
+}
+
+export function isSameOrBefore (input, units) {
+ return this.isSame(input, units) || this.isBefore(input,units);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/constructor.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/constructor.js
new file mode 100644
index 00000000000..83f83effe5c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/constructor.js
@@ -0,0 +1,77 @@
+import { hooks } from '../utils/hooks';
+import hasOwnProp from '../utils/has-own-prop';
+import isUndefined from '../utils/is-undefined';
+import getParsingFlags from '../create/parsing-flags';
+
+// Plugins that add properties should also add the key here (null value),
+// so we can properly clone ourselves.
+var momentProperties = hooks.momentProperties = [];
+
+export function copyConfig(to, from) {
+ var i, prop, val;
+
+ if (!isUndefined(from._isAMomentObject)) {
+ to._isAMomentObject = from._isAMomentObject;
+ }
+ if (!isUndefined(from._i)) {
+ to._i = from._i;
+ }
+ if (!isUndefined(from._f)) {
+ to._f = from._f;
+ }
+ if (!isUndefined(from._l)) {
+ to._l = from._l;
+ }
+ if (!isUndefined(from._strict)) {
+ to._strict = from._strict;
+ }
+ if (!isUndefined(from._tzm)) {
+ to._tzm = from._tzm;
+ }
+ if (!isUndefined(from._isUTC)) {
+ to._isUTC = from._isUTC;
+ }
+ if (!isUndefined(from._offset)) {
+ to._offset = from._offset;
+ }
+ if (!isUndefined(from._pf)) {
+ to._pf = getParsingFlags(from);
+ }
+ if (!isUndefined(from._locale)) {
+ to._locale = from._locale;
+ }
+
+ if (momentProperties.length > 0) {
+ for (i in momentProperties) {
+ prop = momentProperties[i];
+ val = from[prop];
+ if (!isUndefined(val)) {
+ to[prop] = val;
+ }
+ }
+ }
+
+ return to;
+}
+
+var updateInProgress = false;
+
+// Moment prototype object
+export function Moment(config) {
+ copyConfig(this, config);
+ this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+ if (!this.isValid()) {
+ this._d = new Date(NaN);
+ }
+ // Prevent infinite loop in case updateOffset creates new moment
+ // objects.
+ if (updateInProgress === false) {
+ updateInProgress = true;
+ hooks.updateOffset(this);
+ updateInProgress = false;
+ }
+}
+
+export function isMoment (obj) {
+ return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/creation-data.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/creation-data.js
new file mode 100644
index 00000000000..7e2d69aa1e3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/creation-data.js
@@ -0,0 +1,9 @@
+export function creationData() {
+ return {
+ input: this._i,
+ format: this._f,
+ locale: this._locale,
+ isUTC: this._isUTC,
+ strict: this._strict
+ };
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/diff.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/diff.js
new file mode 100644
index 00000000000..9f439081898
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/diff.js
@@ -0,0 +1,62 @@
+import absFloor from '../utils/abs-floor';
+import { cloneWithOffset } from '../units/offset';
+import { normalizeUnits } from '../units/aliases';
+
+export function diff (input, units, asFloat) {
+ var that,
+ zoneDelta,
+ delta, output;
+
+ if (!this.isValid()) {
+ return NaN;
+ }
+
+ that = cloneWithOffset(input, this);
+
+ if (!that.isValid()) {
+ return NaN;
+ }
+
+ zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+ units = normalizeUnits(units);
+
+ if (units === 'year' || units === 'month' || units === 'quarter') {
+ output = monthDiff(this, that);
+ if (units === 'quarter') {
+ output = output / 3;
+ } else if (units === 'year') {
+ output = output / 12;
+ }
+ } else {
+ delta = this - that;
+ output = units === 'second' ? delta / 1e3 : // 1000
+ units === 'minute' ? delta / 6e4 : // 1000 * 60
+ units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
+ units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+ units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+ delta;
+ }
+ return asFloat ? output : absFloor(output);
+}
+
+function monthDiff (a, b) {
+ // difference in months
+ var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+ // b is in (anchor - 1 month, anchor + 1 month)
+ anchor = a.clone().add(wholeMonthDiff, 'months'),
+ anchor2, adjust;
+
+ if (b - anchor < 0) {
+ anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor - anchor2);
+ } else {
+ anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+ // linear across the month
+ adjust = (b - anchor) / (anchor2 - anchor);
+ }
+
+ //check for negative zero, return zero if negative zero
+ return -(wholeMonthDiff + adjust) || 0;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/format.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/format.js
new file mode 100644
index 00000000000..539f6c8e1a0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/format.js
@@ -0,0 +1,56 @@
+import { formatMoment } from '../format/format';
+import { hooks } from '../utils/hooks';
+import isFunction from '../utils/is-function';
+
+hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+export function toString () {
+ return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+}
+
+export function toISOString () {
+ var m = this.clone().utc();
+ if (0 < m.year() && m.year() <= 9999) {
+ if (isFunction(Date.prototype.toISOString)) {
+ // native implementation is ~50x faster, use it when we can
+ return this.toDate().toISOString();
+ } else {
+ return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+ } else {
+ return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+ }
+}
+
+/**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+export function inspect () {
+ if (!this.isValid()) {
+ return 'moment.invalid(/* ' + this._i + ' */)';
+ }
+ var func = 'moment';
+ var zone = '';
+ if (!this.isLocal()) {
+ func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+ zone = 'Z';
+ }
+ var prefix = '[' + func + '("]';
+ var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
+ var datetime = '-MM-DD[T]HH:mm:ss.SSS';
+ var suffix = zone + '[")]';
+
+ return this.format(prefix + year + datetime + suffix);
+}
+
+export function format (inputString) {
+ if (!inputString) {
+ inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
+ }
+ var output = formatMoment(this, inputString);
+ return this.localeData().postformat(output);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/from.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/from.js
new file mode 100644
index 00000000000..4fbd03e438b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/from.js
@@ -0,0 +1,17 @@
+import { createDuration } from '../duration/create';
+import { createLocal } from '../create/local';
+import { isMoment } from '../moment/constructor';
+
+export function from (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+}
+
+export function fromNow (withoutSuffix) {
+ return this.from(createLocal(), withoutSuffix);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/get-set.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/get-set.js
new file mode 100644
index 00000000000..0d9fe5dfef0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/get-set.js
@@ -0,0 +1,55 @@
+import { normalizeUnits, normalizeObjectUnits } from '../units/aliases';
+import { getPrioritizedUnits } from '../units/priorities';
+import { hooks } from '../utils/hooks';
+import isFunction from '../utils/is-function';
+
+
+export function makeGetSet (unit, keepTime) {
+ return function (value) {
+ if (value != null) {
+ set(this, unit, value);
+ hooks.updateOffset(this, keepTime);
+ return this;
+ } else {
+ return get(this, unit);
+ }
+ };
+}
+
+export function get (mom, unit) {
+ return mom.isValid() ?
+ mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+}
+
+export function set (mom, unit, value) {
+ if (mom.isValid()) {
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+ }
+}
+
+// MOMENTS
+
+export function stringGet (units) {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units]();
+ }
+ return this;
+}
+
+
+export function stringSet (units, value) {
+ if (typeof units === 'object') {
+ units = normalizeObjectUnits(units);
+ var prioritized = getPrioritizedUnits(units);
+ for (var i = 0; i < prioritized.length; i++) {
+ this[prioritized[i].unit](units[prioritized[i].unit]);
+ }
+ } else {
+ units = normalizeUnits(units);
+ if (isFunction(this[units])) {
+ return this[units](value);
+ }
+ }
+ return this;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/locale.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/locale.js
new file mode 100644
index 00000000000..fb46e6569e8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/locale.js
@@ -0,0 +1,34 @@
+import { getLocale } from '../locale/locales';
+import { deprecate } from '../utils/deprecate';
+
+// If passed a locale key, it will set the locale for this
+// instance. Otherwise, it will return the locale configuration
+// variables for this instance.
+export function locale (key) {
+ var newLocaleData;
+
+ if (key === undefined) {
+ return this._locale._abbr;
+ } else {
+ newLocaleData = getLocale(key);
+ if (newLocaleData != null) {
+ this._locale = newLocaleData;
+ }
+ return this;
+ }
+}
+
+export var lang = deprecate(
+ 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+ function (key) {
+ if (key === undefined) {
+ return this.localeData();
+ } else {
+ return this.locale(key);
+ }
+ }
+);
+
+export function localeData () {
+ return this._locale;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/min-max.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/min-max.js
new file mode 100644
index 00000000000..d76920a7124
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/min-max.js
@@ -0,0 +1,63 @@
+import { deprecate } from '../utils/deprecate';
+import isArray from '../utils/is-array';
+import { createLocal } from '../create/local';
+import { createInvalid } from '../create/valid';
+
+export var prototypeMin = deprecate(
+ 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other < this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+);
+
+export var prototypeMax = deprecate(
+ 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+ function () {
+ var other = createLocal.apply(null, arguments);
+ if (this.isValid() && other.isValid()) {
+ return other > this ? this : other;
+ } else {
+ return createInvalid();
+ }
+ }
+);
+
+// Pick a moment m from moments so that m[fn](other) is true for all
+// other. This relies on the function fn to be transitive.
+//
+// moments should either be an array of moment objects or an array, whose
+// first element is an array of moment objects.
+function pickBy(fn, moments) {
+ var res, i;
+ if (moments.length === 1 && isArray(moments[0])) {
+ moments = moments[0];
+ }
+ if (!moments.length) {
+ return createLocal();
+ }
+ res = moments[0];
+ for (i = 1; i < moments.length; ++i) {
+ if (!moments[i].isValid() || moments[i][fn](res)) {
+ res = moments[i];
+ }
+ }
+ return res;
+}
+
+// TODO: Use [].sort instead?
+export function min () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isBefore', args);
+}
+
+export function max () {
+ var args = [].slice.call(arguments, 0);
+
+ return pickBy('isAfter', args);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/moment.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/moment.js
new file mode 100644
index 00000000000..12eb5f15ab8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/moment.js
@@ -0,0 +1,28 @@
+import { createLocal } from '../create/local';
+import { createUTC } from '../create/utc';
+import { createInvalid } from '../create/valid';
+import { isMoment } from './constructor';
+import { min, max } from './min-max';
+import { now } from './now';
+import momentPrototype from './prototype';
+
+function createUnix (input) {
+ return createLocal(input * 1000);
+}
+
+function createInZone () {
+ return createLocal.apply(null, arguments).parseZone();
+}
+
+export {
+ now,
+ min,
+ max,
+ isMoment,
+ createUTC,
+ createUnix,
+ createLocal,
+ createInZone,
+ createInvalid,
+ momentPrototype
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/now.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/now.js
new file mode 100644
index 00000000000..0f4d0aef0c6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/now.js
@@ -0,0 +1,3 @@
+export var now = function () {
+ return Date.now ? Date.now() : +(new Date());
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/prototype.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/prototype.js
new file mode 100644
index 00000000000..bd8fff79c20
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/prototype.js
@@ -0,0 +1,150 @@
+import { Moment } from './constructor';
+
+var proto = Moment.prototype;
+
+import { add, subtract } from './add-subtract';
+import { calendar, getCalendarFormat } from './calendar';
+import { clone } from './clone';
+import { isBefore, isBetween, isSame, isAfter, isSameOrAfter, isSameOrBefore } from './compare';
+import { diff } from './diff';
+import { format, toString, toISOString, inspect } from './format';
+import { from, fromNow } from './from';
+import { to, toNow } from './to';
+import { stringGet, stringSet } from './get-set';
+import { locale, localeData, lang } from './locale';
+import { prototypeMin, prototypeMax } from './min-max';
+import { startOf, endOf } from './start-end-of';
+import { valueOf, toDate, toArray, toObject, toJSON, unix } from './to-type';
+import { isValid, parsingFlags, invalidAt } from './valid';
+import { creationData } from './creation-data';
+
+proto.add = add;
+proto.calendar = calendar;
+proto.clone = clone;
+proto.diff = diff;
+proto.endOf = endOf;
+proto.format = format;
+proto.from = from;
+proto.fromNow = fromNow;
+proto.to = to;
+proto.toNow = toNow;
+proto.get = stringGet;
+proto.invalidAt = invalidAt;
+proto.isAfter = isAfter;
+proto.isBefore = isBefore;
+proto.isBetween = isBetween;
+proto.isSame = isSame;
+proto.isSameOrAfter = isSameOrAfter;
+proto.isSameOrBefore = isSameOrBefore;
+proto.isValid = isValid;
+proto.lang = lang;
+proto.locale = locale;
+proto.localeData = localeData;
+proto.max = prototypeMax;
+proto.min = prototypeMin;
+proto.parsingFlags = parsingFlags;
+proto.set = stringSet;
+proto.startOf = startOf;
+proto.subtract = subtract;
+proto.toArray = toArray;
+proto.toObject = toObject;
+proto.toDate = toDate;
+proto.toISOString = toISOString;
+proto.inspect = inspect;
+proto.toJSON = toJSON;
+proto.toString = toString;
+proto.unix = unix;
+proto.valueOf = valueOf;
+proto.creationData = creationData;
+
+// Year
+import { getSetYear, getIsLeapYear } from '../units/year';
+proto.year = getSetYear;
+proto.isLeapYear = getIsLeapYear;
+
+// Week Year
+import { getSetWeekYear, getSetISOWeekYear, getWeeksInYear, getISOWeeksInYear } from '../units/week-year';
+proto.weekYear = getSetWeekYear;
+proto.isoWeekYear = getSetISOWeekYear;
+
+// Quarter
+import { getSetQuarter } from '../units/quarter';
+proto.quarter = proto.quarters = getSetQuarter;
+
+// Month
+import { getSetMonth, getDaysInMonth } from '../units/month';
+proto.month = getSetMonth;
+proto.daysInMonth = getDaysInMonth;
+
+// Week
+import { getSetWeek, getSetISOWeek } from '../units/week';
+proto.week = proto.weeks = getSetWeek;
+proto.isoWeek = proto.isoWeeks = getSetISOWeek;
+proto.weeksInYear = getWeeksInYear;
+proto.isoWeeksInYear = getISOWeeksInYear;
+
+// Day
+import { getSetDayOfMonth } from '../units/day-of-month';
+import { getSetDayOfWeek, getSetISODayOfWeek, getSetLocaleDayOfWeek } from '../units/day-of-week';
+import { getSetDayOfYear } from '../units/day-of-year';
+proto.date = getSetDayOfMonth;
+proto.day = proto.days = getSetDayOfWeek;
+proto.weekday = getSetLocaleDayOfWeek;
+proto.isoWeekday = getSetISODayOfWeek;
+proto.dayOfYear = getSetDayOfYear;
+
+// Hour
+import { getSetHour } from '../units/hour';
+proto.hour = proto.hours = getSetHour;
+
+// Minute
+import { getSetMinute } from '../units/minute';
+proto.minute = proto.minutes = getSetMinute;
+
+// Second
+import { getSetSecond } from '../units/second';
+proto.second = proto.seconds = getSetSecond;
+
+// Millisecond
+import { getSetMillisecond } from '../units/millisecond';
+proto.millisecond = proto.milliseconds = getSetMillisecond;
+
+// Offset
+import {
+ getSetOffset,
+ setOffsetToUTC,
+ setOffsetToLocal,
+ setOffsetToParsedOffset,
+ hasAlignedHourOffset,
+ isDaylightSavingTime,
+ isDaylightSavingTimeShifted,
+ getSetZone,
+ isLocal,
+ isUtcOffset,
+ isUtc
+} from '../units/offset';
+proto.utcOffset = getSetOffset;
+proto.utc = setOffsetToUTC;
+proto.local = setOffsetToLocal;
+proto.parseZone = setOffsetToParsedOffset;
+proto.hasAlignedHourOffset = hasAlignedHourOffset;
+proto.isDST = isDaylightSavingTime;
+proto.isLocal = isLocal;
+proto.isUtcOffset = isUtcOffset;
+proto.isUtc = isUtc;
+proto.isUTC = isUtc;
+
+// Timezone
+import { getZoneAbbr, getZoneName } from '../units/timezone';
+proto.zoneAbbr = getZoneAbbr;
+proto.zoneName = getZoneName;
+
+// Deprecations
+import { deprecate } from '../utils/deprecate';
+proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+
+export default proto;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/start-end-of.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/start-end-of.js
new file mode 100644
index 00000000000..02f982479ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/start-end-of.js
@@ -0,0 +1,59 @@
+import { normalizeUnits } from '../units/aliases';
+
+export function startOf (units) {
+ units = normalizeUnits(units);
+ // the following switch intentionally omits break keywords
+ // to utilize falling through the cases.
+ switch (units) {
+ case 'year':
+ this.month(0);
+ /* falls through */
+ case 'quarter':
+ case 'month':
+ this.date(1);
+ /* falls through */
+ case 'week':
+ case 'isoWeek':
+ case 'day':
+ case 'date':
+ this.hours(0);
+ /* falls through */
+ case 'hour':
+ this.minutes(0);
+ /* falls through */
+ case 'minute':
+ this.seconds(0);
+ /* falls through */
+ case 'second':
+ this.milliseconds(0);
+ }
+
+ // weeks are a special case
+ if (units === 'week') {
+ this.weekday(0);
+ }
+ if (units === 'isoWeek') {
+ this.isoWeekday(1);
+ }
+
+ // quarters are also special
+ if (units === 'quarter') {
+ this.month(Math.floor(this.month() / 3) * 3);
+ }
+
+ return this;
+}
+
+export function endOf (units) {
+ units = normalizeUnits(units);
+ if (units === undefined || units === 'millisecond') {
+ return this;
+ }
+
+ // 'date' is an alias for 'day', so it should be considered as such.
+ if (units === 'date') {
+ units = 'day';
+ }
+
+ return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to-type.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to-type.js
new file mode 100644
index 00000000000..a990dd200b3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to-type.js
@@ -0,0 +1,34 @@
+export function valueOf () {
+ return this._d.valueOf() - ((this._offset || 0) * 60000);
+}
+
+export function unix () {
+ return Math.floor(this.valueOf() / 1000);
+}
+
+export function toDate () {
+ return new Date(this.valueOf());
+}
+
+export function toArray () {
+ var m = this;
+ return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+}
+
+export function toObject () {
+ var m = this;
+ return {
+ years: m.year(),
+ months: m.month(),
+ date: m.date(),
+ hours: m.hours(),
+ minutes: m.minutes(),
+ seconds: m.seconds(),
+ milliseconds: m.milliseconds()
+ };
+}
+
+export function toJSON () {
+ // new Date(NaN).toJSON() === null
+ return this.isValid() ? this.toISOString() : null;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to.js
new file mode 100644
index 00000000000..7ad667e87f9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/to.js
@@ -0,0 +1,17 @@
+import { createDuration } from '../duration/create';
+import { createLocal } from '../create/local';
+import { isMoment } from '../moment/constructor';
+
+export function to (time, withoutSuffix) {
+ if (this.isValid() &&
+ ((isMoment(time) && time.isValid()) ||
+ createLocal(time).isValid())) {
+ return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+ } else {
+ return this.localeData().invalidDate();
+ }
+}
+
+export function toNow (withoutSuffix) {
+ return this.to(createLocal(), withoutSuffix);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/valid.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/valid.js
new file mode 100644
index 00000000000..6c007429388
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/moment/valid.js
@@ -0,0 +1,15 @@
+import { isValid as _isValid } from '../create/valid';
+import extend from '../utils/extend';
+import getParsingFlags from '../create/parsing-flags';
+
+export function isValid () {
+ return _isValid(this);
+}
+
+export function parsingFlags () {
+ return extend({}, getParsingFlags(this));
+}
+
+export function invalidAt () {
+ return getParsingFlags(this).overflow;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/regex.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/regex.js
new file mode 100644
index 00000000000..b1dc7529e5c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/regex.js
@@ -0,0 +1,54 @@
+export var match1 = /\d/; // 0 - 9
+export var match2 = /\d\d/; // 00 - 99
+export var match3 = /\d{3}/; // 000 - 999
+export var match4 = /\d{4}/; // 0000 - 9999
+export var match6 = /[+-]?\d{6}/; // -999999 - 999999
+export var match1to2 = /\d\d?/; // 0 - 99
+export var match3to4 = /\d\d\d\d?/; // 999 - 9999
+export var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
+export var match1to3 = /\d{1,3}/; // 0 - 999
+export var match1to4 = /\d{1,4}/; // 0 - 9999
+export var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
+
+export var matchUnsigned = /\d+/; // 0 - inf
+export var matchSigned = /[+-]?\d+/; // -inf - inf
+
+export var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+export var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+
+export var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+// any word (or two) characters or numbers including two/three word month in arabic.
+// includes scottish gaelic two word and hyphenated months
+export var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
+
+import hasOwnProp from '../utils/has-own-prop';
+import isFunction from '../utils/is-function';
+
+var regexes = {};
+
+export function addRegexToken (token, regex, strictRegex) {
+ regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+ return (isStrict && strictRegex) ? strictRegex : regex;
+ };
+}
+
+export function getParseRegexForToken (token, config) {
+ if (!hasOwnProp(regexes, token)) {
+ return new RegExp(unescapeFormat(token));
+ }
+
+ return regexes[token](config._strict, config._locale);
+}
+
+// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+function unescapeFormat(s) {
+ return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+ return p1 || p2 || p3 || p4;
+ }));
+}
+
+export function regexEscape(s) {
+ return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/token.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/token.js
new file mode 100644
index 00000000000..24b4474f87e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/parse/token.js
@@ -0,0 +1,33 @@
+import hasOwnProp from '../utils/has-own-prop';
+import isNumber from '../utils/is-number';
+import toInt from '../utils/to-int';
+
+var tokens = {};
+
+export function addParseToken (token, callback) {
+ var i, func = callback;
+ if (typeof token === 'string') {
+ token = [token];
+ }
+ if (isNumber(callback)) {
+ func = function (input, array) {
+ array[callback] = toInt(input);
+ };
+ }
+ for (i = 0; i < token.length; i++) {
+ tokens[token[i]] = func;
+ }
+}
+
+export function addWeekParseToken (token, callback) {
+ addParseToken(token, function (input, array, config, token) {
+ config._w = config._w || {};
+ callback(input, config._w, config, token);
+ });
+}
+
+export function addTimeToArrayFromToken(token, input, config) {
+ if (input != null && hasOwnProp(tokens, token)) {
+ tokens[token](input, config._a, config, token);
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/aliases.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/aliases.js
new file mode 100644
index 00000000000..0d8b88a138b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/aliases.js
@@ -0,0 +1,30 @@
+import hasOwnProp from '../utils/has-own-prop';
+
+var aliases = {};
+
+export function addUnitAlias (unit, shorthand) {
+ var lowerCase = unit.toLowerCase();
+ aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+}
+
+export function normalizeUnits(units) {
+ return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+}
+
+export function normalizeObjectUnits(inputObject) {
+ var normalizedInput = {},
+ normalizedProp,
+ prop;
+
+ for (prop in inputObject) {
+ if (hasOwnProp(inputObject, prop)) {
+ normalizedProp = normalizeUnits(prop);
+ if (normalizedProp) {
+ normalizedInput[normalizedProp] = inputObject[prop];
+ }
+ }
+ }
+
+ return normalizedInput;
+}
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/constants.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/constants.js
new file mode 100644
index 00000000000..70bf1b26ede
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/constants.js
@@ -0,0 +1,9 @@
+export var YEAR = 0;
+export var MONTH = 1;
+export var DATE = 2;
+export var HOUR = 3;
+export var MINUTE = 4;
+export var SECOND = 5;
+export var MILLISECOND = 6;
+export var WEEK = 7;
+export var WEEKDAY = 8;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-month.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-month.js
new file mode 100644
index 00000000000..e28ec9f4dd4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-month.js
@@ -0,0 +1,36 @@
+import { makeGetSet } from '../moment/get-set';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match2 } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { DATE } from './constants';
+import toInt from '../utils/to-int';
+
+// FORMATTING
+
+addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+// ALIASES
+
+addUnitAlias('date', 'D');
+
+// PRIOROITY
+addUnitPriority('date', 9);
+
+// PARSING
+
+addRegexToken('D', match1to2);
+addRegexToken('DD', match1to2, match2);
+addRegexToken('Do', function (isStrict, locale) {
+ return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;
+});
+
+addParseToken(['D', 'DD'], DATE);
+addParseToken('Do', function (input, array) {
+ array[DATE] = toInt(input.match(match1to2)[0], 10);
+});
+
+// MOMENTS
+
+export var getSetDayOfMonth = makeGetSet('Date', true);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-week.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-week.js
new file mode 100644
index 00000000000..603192e2898
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-week.js
@@ -0,0 +1,363 @@
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, matchWord, regexEscape } from '../parse/regex';
+import { addWeekParseToken } from '../parse/token';
+import toInt from '../utils/to-int';
+import isArray from '../utils/is-array';
+import indexOf from '../utils/index-of';
+import hasOwnProp from '../utils/has-own-prop';
+import { createUTC } from '../create/utc';
+import getParsingFlags from '../create/parsing-flags';
+
+// FORMATTING
+
+addFormatToken('d', 0, 'do', 'day');
+
+addFormatToken('dd', 0, 0, function (format) {
+ return this.localeData().weekdaysMin(this, format);
+});
+
+addFormatToken('ddd', 0, 0, function (format) {
+ return this.localeData().weekdaysShort(this, format);
+});
+
+addFormatToken('dddd', 0, 0, function (format) {
+ return this.localeData().weekdays(this, format);
+});
+
+addFormatToken('e', 0, 0, 'weekday');
+addFormatToken('E', 0, 0, 'isoWeekday');
+
+// ALIASES
+
+addUnitAlias('day', 'd');
+addUnitAlias('weekday', 'e');
+addUnitAlias('isoWeekday', 'E');
+
+// PRIORITY
+addUnitPriority('day', 11);
+addUnitPriority('weekday', 11);
+addUnitPriority('isoWeekday', 11);
+
+// PARSING
+
+addRegexToken('d', match1to2);
+addRegexToken('e', match1to2);
+addRegexToken('E', match1to2);
+addRegexToken('dd', function (isStrict, locale) {
+ return locale.weekdaysMinRegex(isStrict);
+});
+addRegexToken('ddd', function (isStrict, locale) {
+ return locale.weekdaysShortRegex(isStrict);
+});
+addRegexToken('dddd', function (isStrict, locale) {
+ return locale.weekdaysRegex(isStrict);
+});
+
+addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+ var weekday = config._locale.weekdaysParse(input, token, config._strict);
+ // if we didn't get a weekday name, mark the date as invalid
+ if (weekday != null) {
+ week.d = weekday;
+ } else {
+ getParsingFlags(config).invalidWeekday = input;
+ }
+});
+
+addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+ week[token] = toInt(input);
+});
+
+// HELPERS
+
+function parseWeekday(input, locale) {
+ if (typeof input !== 'string') {
+ return input;
+ }
+
+ if (!isNaN(input)) {
+ return parseInt(input, 10);
+ }
+
+ input = locale.weekdaysParse(input);
+ if (typeof input === 'number') {
+ return input;
+ }
+
+ return null;
+}
+
+function parseIsoWeekday(input, locale) {
+ if (typeof input === 'string') {
+ return locale.weekdaysParse(input) % 7 || 7;
+ }
+ return isNaN(input) ? null : input;
+}
+
+// LOCALES
+
+export var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+export function localeWeekdays (m, format) {
+ if (!m) {
+ return this._weekdays;
+ }
+ return isArray(this._weekdays) ? this._weekdays[m.day()] :
+ this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+}
+
+export var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+export function localeWeekdaysShort (m) {
+ return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+}
+
+export var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+export function localeWeekdaysMin (m) {
+ return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+}
+
+function handleStrictParse(weekdayName, format, strict) {
+ var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._minWeekdaysParse = [];
+
+ for (i = 0; i < 7; ++i) {
+ mom = createUTC([2000, 1]).day(i);
+ this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+ this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+ this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'dddd') {
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else if (format === 'ddd') {
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._minWeekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._weekdaysParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortWeekdaysParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+}
+
+export function localeWeekdaysParse (weekdayName, format, strict) {
+ var i, mom, regex;
+
+ if (this._weekdaysParseExact) {
+ return handleStrictParse.call(this, weekdayName, format, strict);
+ }
+
+ if (!this._weekdaysParse) {
+ this._weekdaysParse = [];
+ this._minWeekdaysParse = [];
+ this._shortWeekdaysParse = [];
+ this._fullWeekdaysParse = [];
+ }
+
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+
+ mom = createUTC([2000, 1]).day(i);
+ if (strict && !this._fullWeekdaysParse[i]) {
+ this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+ this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+ this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+ }
+ if (!this._weekdaysParse[i]) {
+ regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+ this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+ return i;
+ } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+ return i;
+ }
+ }
+}
+
+// MOMENTS
+
+export function getSetDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+ if (input != null) {
+ input = parseWeekday(input, this.localeData());
+ return this.add(input - day, 'd');
+ } else {
+ return day;
+ }
+}
+
+export function getSetLocaleDayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+ return input == null ? weekday : this.add(input - weekday, 'd');
+}
+
+export function getSetISODayOfWeek (input) {
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+
+ // behaves the same as moment#day except
+ // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+ // as a setter, sunday should belong to the previous week.
+
+ if (input != null) {
+ var weekday = parseIsoWeekday(input, this.localeData());
+ return this.day(this.day() % 7 ? weekday : weekday - 7);
+ } else {
+ return this.day() || 7;
+ }
+}
+
+var defaultWeekdaysRegex = matchWord;
+export function weekdaysRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysStrictRegex;
+ } else {
+ return this._weekdaysRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ this._weekdaysRegex = defaultWeekdaysRegex;
+ }
+ return this._weekdaysStrictRegex && isStrict ?
+ this._weekdaysStrictRegex : this._weekdaysRegex;
+ }
+}
+
+var defaultWeekdaysShortRegex = matchWord;
+export function weekdaysShortRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysShortStrictRegex;
+ } else {
+ return this._weekdaysShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+ this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+ }
+ return this._weekdaysShortStrictRegex && isStrict ?
+ this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+ }
+}
+
+var defaultWeekdaysMinRegex = matchWord;
+export function weekdaysMinRegex (isStrict) {
+ if (this._weekdaysParseExact) {
+ if (!hasOwnProp(this, '_weekdaysRegex')) {
+ computeWeekdaysParse.call(this);
+ }
+ if (isStrict) {
+ return this._weekdaysMinStrictRegex;
+ } else {
+ return this._weekdaysMinRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+ this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+ }
+ return this._weekdaysMinStrictRegex && isStrict ?
+ this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+ }
+}
+
+
+function computeWeekdaysParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom, minp, shortp, longp;
+ for (i = 0; i < 7; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, 1]).day(i);
+ minp = this.weekdaysMin(mom, '');
+ shortp = this.weekdaysShort(mom, '');
+ longp = this.weekdays(mom, '');
+ minPieces.push(minp);
+ shortPieces.push(shortp);
+ longPieces.push(longp);
+ mixedPieces.push(minp);
+ mixedPieces.push(shortp);
+ mixedPieces.push(longp);
+ }
+ // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+ // will match the longer piece.
+ minPieces.sort(cmpLenRev);
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 7; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._weekdaysShortRegex = this._weekdaysRegex;
+ this._weekdaysMinRegex = this._weekdaysRegex;
+
+ this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+ this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-year.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-year.js
new file mode 100644
index 00000000000..6fe931c1e46
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/day-of-year.js
@@ -0,0 +1,36 @@
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match3, match1to3 } from '../parse/regex';
+import { daysInYear } from './year';
+import { createUTCDate } from '../create/date-from-array';
+import { addParseToken } from '../parse/token';
+import toInt from '../utils/to-int';
+
+// FORMATTING
+
+addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+// ALIASES
+
+addUnitAlias('dayOfYear', 'DDD');
+
+// PRIORITY
+addUnitPriority('dayOfYear', 4);
+
+// PARSING
+
+addRegexToken('DDD', match1to3);
+addRegexToken('DDDD', match3);
+addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+ config._dayOfYear = toInt(input);
+});
+
+// HELPERS
+
+// MOMENTS
+
+export function getSetDayOfYear (input) {
+ var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+ return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/hour.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/hour.js
new file mode 100644
index 00000000000..d5733fbbcfa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/hour.js
@@ -0,0 +1,138 @@
+import { makeGetSet } from '../moment/get-set';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match2, match3to4, match5to6 } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { HOUR, MINUTE, SECOND } from './constants';
+import toInt from '../utils/to-int';
+import zeroFill from '../utils/zero-fill';
+import getParsingFlags from '../create/parsing-flags';
+
+// FORMATTING
+
+function hFormat() {
+ return this.hours() % 12 || 12;
+}
+
+function kFormat() {
+ return this.hours() || 24;
+}
+
+addFormatToken('H', ['HH', 2], 0, 'hour');
+addFormatToken('h', ['hh', 2], 0, hFormat);
+addFormatToken('k', ['kk', 2], 0, kFormat);
+
+addFormatToken('hmm', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('hmmss', 0, 0, function () {
+ return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+});
+
+addFormatToken('Hmm', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('Hmmss', 0, 0, function () {
+ return '' + this.hours() + zeroFill(this.minutes(), 2) +
+ zeroFill(this.seconds(), 2);
+});
+
+function meridiem (token, lowercase) {
+ addFormatToken(token, 0, 0, function () {
+ return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+ });
+}
+
+meridiem('a', true);
+meridiem('A', false);
+
+// ALIASES
+
+addUnitAlias('hour', 'h');
+
+// PRIORITY
+addUnitPriority('hour', 13);
+
+// PARSING
+
+function matchMeridiem (isStrict, locale) {
+ return locale._meridiemParse;
+}
+
+addRegexToken('a', matchMeridiem);
+addRegexToken('A', matchMeridiem);
+addRegexToken('H', match1to2);
+addRegexToken('h', match1to2);
+addRegexToken('HH', match1to2, match2);
+addRegexToken('hh', match1to2, match2);
+
+addRegexToken('hmm', match3to4);
+addRegexToken('hmmss', match5to6);
+addRegexToken('Hmm', match3to4);
+addRegexToken('Hmmss', match5to6);
+
+addParseToken(['H', 'HH'], HOUR);
+addParseToken(['a', 'A'], function (input, array, config) {
+ config._isPm = config._locale.isPM(input);
+ config._meridiem = input;
+});
+addParseToken(['h', 'hh'], function (input, array, config) {
+ array[HOUR] = toInt(input);
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+ getParsingFlags(config).bigHour = true;
+});
+addParseToken('Hmm', function (input, array, config) {
+ var pos = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos));
+ array[MINUTE] = toInt(input.substr(pos));
+});
+addParseToken('Hmmss', function (input, array, config) {
+ var pos1 = input.length - 4;
+ var pos2 = input.length - 2;
+ array[HOUR] = toInt(input.substr(0, pos1));
+ array[MINUTE] = toInt(input.substr(pos1, 2));
+ array[SECOND] = toInt(input.substr(pos2));
+});
+
+// LOCALES
+
+export function localeIsPM (input) {
+ // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+ // Using charAt should be more compatible.
+ return ((input + '').toLowerCase().charAt(0) === 'p');
+}
+
+export var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+export function localeMeridiem (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'pm' : 'PM';
+ } else {
+ return isLower ? 'am' : 'AM';
+ }
+}
+
+
+// MOMENTS
+
+// Setting the hour should keep the time, because the user explicitly
+// specified which hour he wants. So trying to maintain the same hour (in
+// a new timezone) makes sense. Adding/subtracting hours does not follow
+// this rule.
+export var getSetHour = makeGetSet('Hours', true);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/millisecond.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/millisecond.js
new file mode 100644
index 00000000000..27c95126936
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/millisecond.js
@@ -0,0 +1,69 @@
+import { makeGetSet } from '../moment/get-set';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1, match2, match3, match1to3, matchUnsigned } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { MILLISECOND } from './constants';
+import toInt from '../utils/to-int';
+
+// FORMATTING
+
+addFormatToken('S', 0, 0, function () {
+ return ~~(this.millisecond() / 100);
+});
+
+addFormatToken(0, ['SS', 2], 0, function () {
+ return ~~(this.millisecond() / 10);
+});
+
+addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+addFormatToken(0, ['SSSS', 4], 0, function () {
+ return this.millisecond() * 10;
+});
+addFormatToken(0, ['SSSSS', 5], 0, function () {
+ return this.millisecond() * 100;
+});
+addFormatToken(0, ['SSSSSS', 6], 0, function () {
+ return this.millisecond() * 1000;
+});
+addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+ return this.millisecond() * 10000;
+});
+addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+ return this.millisecond() * 100000;
+});
+addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+ return this.millisecond() * 1000000;
+});
+
+
+// ALIASES
+
+addUnitAlias('millisecond', 'ms');
+
+// PRIORITY
+
+addUnitPriority('millisecond', 16);
+
+// PARSING
+
+addRegexToken('S', match1to3, match1);
+addRegexToken('SS', match1to3, match2);
+addRegexToken('SSS', match1to3, match3);
+
+var token;
+for (token = 'SSSS'; token.length <= 9; token += 'S') {
+ addRegexToken(token, matchUnsigned);
+}
+
+function parseMs(input, array) {
+ array[MILLISECOND] = toInt(('0.' + input) * 1000);
+}
+
+for (token = 'S'; token.length <= 9; token += 'S') {
+ addParseToken(token, parseMs);
+}
+// MOMENTS
+
+export var getSetMillisecond = makeGetSet('Milliseconds', false);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/minute.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/minute.js
new file mode 100644
index 00000000000..9f760322e13
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/minute.js
@@ -0,0 +1,29 @@
+import { makeGetSet } from '../moment/get-set';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match2 } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { MINUTE } from './constants';
+
+// FORMATTING
+
+addFormatToken('m', ['mm', 2], 0, 'minute');
+
+// ALIASES
+
+addUnitAlias('minute', 'm');
+
+// PRIORITY
+
+addUnitPriority('minute', 14);
+
+// PARSING
+
+addRegexToken('m', match1to2);
+addRegexToken('mm', match1to2, match2);
+addParseToken(['m', 'mm'], MINUTE);
+
+// MOMENTS
+
+export var getSetMinute = makeGetSet('Minutes', false);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/month.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/month.js
new file mode 100644
index 00000000000..e454d678a13
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/month.js
@@ -0,0 +1,281 @@
+import { get } from '../moment/get-set';
+import hasOwnProp from '../utils/has-own-prop';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match2, matchWord, regexEscape } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { hooks } from '../utils/hooks';
+import { MONTH } from './constants';
+import toInt from '../utils/to-int';
+import isArray from '../utils/is-array';
+import isNumber from '../utils/is-number';
+import indexOf from '../utils/index-of';
+import { createUTC } from '../create/utc';
+import getParsingFlags from '../create/parsing-flags';
+
+export function daysInMonth(year, month) {
+ return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+}
+
+// FORMATTING
+
+addFormatToken('M', ['MM', 2], 'Mo', function () {
+ return this.month() + 1;
+});
+
+addFormatToken('MMM', 0, 0, function (format) {
+ return this.localeData().monthsShort(this, format);
+});
+
+addFormatToken('MMMM', 0, 0, function (format) {
+ return this.localeData().months(this, format);
+});
+
+// ALIASES
+
+addUnitAlias('month', 'M');
+
+// PRIORITY
+
+addUnitPriority('month', 8);
+
+// PARSING
+
+addRegexToken('M', match1to2);
+addRegexToken('MM', match1to2, match2);
+addRegexToken('MMM', function (isStrict, locale) {
+ return locale.monthsShortRegex(isStrict);
+});
+addRegexToken('MMMM', function (isStrict, locale) {
+ return locale.monthsRegex(isStrict);
+});
+
+addParseToken(['M', 'MM'], function (input, array) {
+ array[MONTH] = toInt(input) - 1;
+});
+
+addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+ var month = config._locale.monthsParse(input, token, config._strict);
+ // if we didn't find a month name, mark the date as invalid.
+ if (month != null) {
+ array[MONTH] = month;
+ } else {
+ getParsingFlags(config).invalidMonth = input;
+ }
+});
+
+// LOCALES
+
+var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
+export var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+export function localeMonths (m, format) {
+ if (!m) {
+ return this._months;
+ }
+ return isArray(this._months) ? this._months[m.month()] :
+ this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+export var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+export function localeMonthsShort (m, format) {
+ if (!m) {
+ return this._monthsShort;
+ }
+ return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+ this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+function handleStrictParse(monthName, format, strict) {
+ var i, ii, mom, llc = monthName.toLocaleLowerCase();
+ if (!this._monthsParse) {
+ // this is not used
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ for (i = 0; i < 12; ++i) {
+ mom = createUTC([2000, i]);
+ this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+ this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+ }
+ }
+
+ if (strict) {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ } else {
+ if (format === 'MMM') {
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._longMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ } else {
+ ii = indexOf.call(this._longMonthsParse, llc);
+ if (ii !== -1) {
+ return ii;
+ }
+ ii = indexOf.call(this._shortMonthsParse, llc);
+ return ii !== -1 ? ii : null;
+ }
+ }
+}
+
+export function localeMonthsParse (monthName, format, strict) {
+ var i, mom, regex;
+
+ if (this._monthsParseExact) {
+ return handleStrictParse.call(this, monthName, format, strict);
+ }
+
+ if (!this._monthsParse) {
+ this._monthsParse = [];
+ this._longMonthsParse = [];
+ this._shortMonthsParse = [];
+ }
+
+ // TODO: add sorting
+ // Sorting makes sure if one month (or abbr) is a prefix of another
+ // see sorting in computeMonthsParse
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ if (strict && !this._longMonthsParse[i]) {
+ this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+ this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+ }
+ if (!strict && !this._monthsParse[i]) {
+ regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+ this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+ }
+ // test the regex
+ if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+ return i;
+ } else if (!strict && this._monthsParse[i].test(monthName)) {
+ return i;
+ }
+ }
+}
+
+// MOMENTS
+
+export function setMonth (mom, value) {
+ var dayOfMonth;
+
+ if (!mom.isValid()) {
+ // No op
+ return mom;
+ }
+
+ if (typeof value === 'string') {
+ if (/^\d+$/.test(value)) {
+ value = toInt(value);
+ } else {
+ value = mom.localeData().monthsParse(value);
+ // TODO: Another silent failure?
+ if (!isNumber(value)) {
+ return mom;
+ }
+ }
+ }
+
+ dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+ mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+ return mom;
+}
+
+export function getSetMonth (value) {
+ if (value != null) {
+ setMonth(this, value);
+ hooks.updateOffset(this, true);
+ return this;
+ } else {
+ return get(this, 'Month');
+ }
+}
+
+export function getDaysInMonth () {
+ return daysInMonth(this.year(), this.month());
+}
+
+var defaultMonthsShortRegex = matchWord;
+export function monthsShortRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsShortStrictRegex;
+ } else {
+ return this._monthsShortRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsShortRegex')) {
+ this._monthsShortRegex = defaultMonthsShortRegex;
+ }
+ return this._monthsShortStrictRegex && isStrict ?
+ this._monthsShortStrictRegex : this._monthsShortRegex;
+ }
+}
+
+var defaultMonthsRegex = matchWord;
+export function monthsRegex (isStrict) {
+ if (this._monthsParseExact) {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ computeMonthsParse.call(this);
+ }
+ if (isStrict) {
+ return this._monthsStrictRegex;
+ } else {
+ return this._monthsRegex;
+ }
+ } else {
+ if (!hasOwnProp(this, '_monthsRegex')) {
+ this._monthsRegex = defaultMonthsRegex;
+ }
+ return this._monthsStrictRegex && isStrict ?
+ this._monthsStrictRegex : this._monthsRegex;
+ }
+}
+
+function computeMonthsParse () {
+ function cmpLenRev(a, b) {
+ return b.length - a.length;
+ }
+
+ var shortPieces = [], longPieces = [], mixedPieces = [],
+ i, mom;
+ for (i = 0; i < 12; i++) {
+ // make the regex if we don't have it already
+ mom = createUTC([2000, i]);
+ shortPieces.push(this.monthsShort(mom, ''));
+ longPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.months(mom, ''));
+ mixedPieces.push(this.monthsShort(mom, ''));
+ }
+ // Sorting makes sure if one month (or abbr) is a prefix of another it
+ // will match the longer piece.
+ shortPieces.sort(cmpLenRev);
+ longPieces.sort(cmpLenRev);
+ mixedPieces.sort(cmpLenRev);
+ for (i = 0; i < 12; i++) {
+ shortPieces[i] = regexEscape(shortPieces[i]);
+ longPieces[i] = regexEscape(longPieces[i]);
+ }
+ for (i = 0; i < 24; i++) {
+ mixedPieces[i] = regexEscape(mixedPieces[i]);
+ }
+
+ this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+ this._monthsShortRegex = this._monthsRegex;
+ this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+ this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/offset.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/offset.js
new file mode 100644
index 00000000000..168aeadd808
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/offset.js
@@ -0,0 +1,235 @@
+import zeroFill from '../utils/zero-fill';
+import { createDuration } from '../duration/create';
+import { addSubtract } from '../moment/add-subtract';
+import { isMoment, copyConfig } from '../moment/constructor';
+import { addFormatToken } from '../format/format';
+import { addRegexToken, matchOffset, matchShortOffset } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { createLocal } from '../create/local';
+import { prepareConfig } from '../create/from-anything';
+import { createUTC } from '../create/utc';
+import isDate from '../utils/is-date';
+import toInt from '../utils/to-int';
+import isUndefined from '../utils/is-undefined';
+import compareArrays from '../utils/compare-arrays';
+import { hooks } from '../utils/hooks';
+
+// FORMATTING
+
+function offset (token, separator) {
+ addFormatToken(token, 0, 0, function () {
+ var offset = this.utcOffset();
+ var sign = '+';
+ if (offset < 0) {
+ offset = -offset;
+ sign = '-';
+ }
+ return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+ });
+}
+
+offset('Z', ':');
+offset('ZZ', '');
+
+// PARSING
+
+addRegexToken('Z', matchShortOffset);
+addRegexToken('ZZ', matchShortOffset);
+addParseToken(['Z', 'ZZ'], function (input, array, config) {
+ config._useUTC = true;
+ config._tzm = offsetFromString(matchShortOffset, input);
+});
+
+// HELPERS
+
+// timezone chunker
+// '+10:00' > ['10', '00']
+// '-1530' > ['-15', '30']
+var chunkOffset = /([\+\-]|\d\d)/gi;
+
+function offsetFromString(matcher, string) {
+ var matches = (string || '').match(matcher);
+
+ if (matches === null) {
+ return null;
+ }
+
+ var chunk = matches[matches.length - 1] || [];
+ var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+ var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+ return minutes === 0 ?
+ 0 :
+ parts[0] === '+' ? minutes : -minutes;
+}
+
+// Return a moment from input, that is local/utc/zone equivalent to model.
+export function cloneWithOffset(input, model) {
+ var res, diff;
+ if (model._isUTC) {
+ res = model.clone();
+ diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
+ // Use low-level api, because this fn is low-level api.
+ res._d.setTime(res._d.valueOf() + diff);
+ hooks.updateOffset(res, false);
+ return res;
+ } else {
+ return createLocal(input).local();
+ }
+}
+
+function getDateOffset (m) {
+ // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+ // https://github.com/moment/moment/pull/1871
+ return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+}
+
+// HOOKS
+
+// This function will be called whenever a moment is mutated.
+// It is intended to keep the offset in sync with the timezone.
+hooks.updateOffset = function () {};
+
+// MOMENTS
+
+// keepLocalTime = true means only change the timezone, without
+// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+// +0200, so we adjust the time as needed, to be valid.
+//
+// Keeping the time actually adds/subtracts (one hour)
+// from the actual represented time. That is why we call updateOffset
+// a second time. In case it wants us to change the offset again
+// _changeInProgress == true case, then we have to adjust, because
+// there is no such time in the given timezone.
+export function getSetOffset (input, keepLocalTime) {
+ var offset = this._offset || 0,
+ localAdjust;
+ if (!this.isValid()) {
+ return input != null ? this : NaN;
+ }
+ if (input != null) {
+ if (typeof input === 'string') {
+ input = offsetFromString(matchShortOffset, input);
+ if (input === null) {
+ return this;
+ }
+ } else if (Math.abs(input) < 16) {
+ input = input * 60;
+ }
+ if (!this._isUTC && keepLocalTime) {
+ localAdjust = getDateOffset(this);
+ }
+ this._offset = input;
+ this._isUTC = true;
+ if (localAdjust != null) {
+ this.add(localAdjust, 'm');
+ }
+ if (offset !== input) {
+ if (!keepLocalTime || this._changeInProgress) {
+ addSubtract(this, createDuration(input - offset, 'm'), 1, false);
+ } else if (!this._changeInProgress) {
+ this._changeInProgress = true;
+ hooks.updateOffset(this, true);
+ this._changeInProgress = null;
+ }
+ }
+ return this;
+ } else {
+ return this._isUTC ? offset : getDateOffset(this);
+ }
+}
+
+export function getSetZone (input, keepLocalTime) {
+ if (input != null) {
+ if (typeof input !== 'string') {
+ input = -input;
+ }
+
+ this.utcOffset(input, keepLocalTime);
+
+ return this;
+ } else {
+ return -this.utcOffset();
+ }
+}
+
+export function setOffsetToUTC (keepLocalTime) {
+ return this.utcOffset(0, keepLocalTime);
+}
+
+export function setOffsetToLocal (keepLocalTime) {
+ if (this._isUTC) {
+ this.utcOffset(0, keepLocalTime);
+ this._isUTC = false;
+
+ if (keepLocalTime) {
+ this.subtract(getDateOffset(this), 'm');
+ }
+ }
+ return this;
+}
+
+export function setOffsetToParsedOffset () {
+ if (this._tzm != null) {
+ this.utcOffset(this._tzm);
+ } else if (typeof this._i === 'string') {
+ var tZone = offsetFromString(matchOffset, this._i);
+ if (tZone != null) {
+ this.utcOffset(tZone);
+ }
+ else {
+ this.utcOffset(0, true);
+ }
+ }
+ return this;
+}
+
+export function hasAlignedHourOffset (input) {
+ if (!this.isValid()) {
+ return false;
+ }
+ input = input ? createLocal(input).utcOffset() : 0;
+
+ return (this.utcOffset() - input) % 60 === 0;
+}
+
+export function isDaylightSavingTime () {
+ return (
+ this.utcOffset() > this.clone().month(0).utcOffset() ||
+ this.utcOffset() > this.clone().month(5).utcOffset()
+ );
+}
+
+export function isDaylightSavingTimeShifted () {
+ if (!isUndefined(this._isDSTShifted)) {
+ return this._isDSTShifted;
+ }
+
+ var c = {};
+
+ copyConfig(c, this);
+ c = prepareConfig(c);
+
+ if (c._a) {
+ var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+ this._isDSTShifted = this.isValid() &&
+ compareArrays(c._a, other.toArray()) > 0;
+ } else {
+ this._isDSTShifted = false;
+ }
+
+ return this._isDSTShifted;
+}
+
+export function isLocal () {
+ return this.isValid() ? !this._isUTC : false;
+}
+
+export function isUtcOffset () {
+ return this.isValid() ? this._isUTC : false;
+}
+
+export function isUtc () {
+ return this.isValid() ? this._isUTC && this._offset === 0 : false;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/priorities.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/priorities.js
new file mode 100644
index 00000000000..699017cb80f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/priorities.js
@@ -0,0 +1,16 @@
+var priorities = {};
+
+export function addUnitPriority(unit, priority) {
+ priorities[unit] = priority;
+}
+
+export function getPrioritizedUnits(unitsObj) {
+ var units = [];
+ for (var u in unitsObj) {
+ units.push({unit: u, priority: priorities[u]});
+ }
+ units.sort(function (a, b) {
+ return a.priority - b.priority;
+ });
+ return units;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/quarter.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/quarter.js
new file mode 100644
index 00000000000..a6d409a862c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/quarter.js
@@ -0,0 +1,32 @@
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1 } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { MONTH } from './constants';
+import toInt from '../utils/to-int';
+
+// FORMATTING
+
+addFormatToken('Q', 0, 'Qo', 'quarter');
+
+// ALIASES
+
+addUnitAlias('quarter', 'Q');
+
+// PRIORITY
+
+addUnitPriority('quarter', 7);
+
+// PARSING
+
+addRegexToken('Q', match1);
+addParseToken('Q', function (input, array) {
+ array[MONTH] = (toInt(input) - 1) * 3;
+});
+
+// MOMENTS
+
+export function getSetQuarter (input) {
+ return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/second.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/second.js
new file mode 100644
index 00000000000..179371186e9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/second.js
@@ -0,0 +1,29 @@
+import { makeGetSet } from '../moment/get-set';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match2 } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { SECOND } from './constants';
+
+// FORMATTING
+
+addFormatToken('s', ['ss', 2], 0, 'second');
+
+// ALIASES
+
+addUnitAlias('second', 's');
+
+// PRIORITY
+
+addUnitPriority('second', 15);
+
+// PARSING
+
+addRegexToken('s', match1to2);
+addRegexToken('ss', match1to2, match2);
+addParseToken(['s', 'ss'], SECOND);
+
+// MOMENTS
+
+export var getSetSecond = makeGetSet('Seconds', false);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timestamp.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timestamp.js
new file mode 100644
index 00000000000..a49e1e4b852
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timestamp.js
@@ -0,0 +1,20 @@
+import { addFormatToken } from '../format/format';
+import { addRegexToken, matchTimestamp, matchSigned } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import toInt from '../utils/to-int';
+
+// FORMATTING
+
+addFormatToken('X', 0, 0, 'unix');
+addFormatToken('x', 0, 0, 'valueOf');
+
+// PARSING
+
+addRegexToken('x', matchSigned);
+addRegexToken('X', matchTimestamp);
+addParseToken('X', function (input, array, config) {
+ config._d = new Date(parseFloat(input, 10) * 1000);
+});
+addParseToken('x', function (input, array, config) {
+ config._d = new Date(toInt(input));
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timezone.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timezone.js
new file mode 100644
index 00000000000..20c81cd2c62
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/timezone.js
@@ -0,0 +1,16 @@
+import { addFormatToken } from '../format/format';
+
+// FORMATTING
+
+addFormatToken('z', 0, 0, 'zoneAbbr');
+addFormatToken('zz', 0, 0, 'zoneName');
+
+// MOMENTS
+
+export function getZoneAbbr () {
+ return this._isUTC ? 'UTC' : '';
+}
+
+export function getZoneName () {
+ return this._isUTC ? 'Coordinated Universal Time' : '';
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/units.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/units.js
new file mode 100644
index 00000000000..6f45f1c040b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/units.js
@@ -0,0 +1,20 @@
+// Side effect imports
+import './day-of-month';
+import './day-of-week';
+import './day-of-year';
+import './hour';
+import './millisecond';
+import './minute';
+import './month';
+import './offset';
+import './quarter';
+import './second';
+import './timestamp';
+import './timezone';
+import './week-year';
+import './week';
+import './year';
+
+import { normalizeUnits } from './aliases';
+
+export { normalizeUnits };
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-calendar-utils.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-calendar-utils.js
new file mode 100644
index 00000000000..b89810c75ac
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-calendar-utils.js
@@ -0,0 +1,65 @@
+import { daysInYear } from './year';
+import { createLocal } from '../create/local';
+import { createUTCDate } from '../create/date-from-array';
+
+// start-of-first-week - start-of-year
+function firstWeekOffset(year, dow, doy) {
+ var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ fwd = 7 + dow - doy,
+ // first-week day local weekday -- which local weekday is fwd
+ fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+ return -fwdlw + fwd - 1;
+}
+
+//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+export function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+ var localWeekday = (7 + weekday - dow) % 7,
+ weekOffset = firstWeekOffset(year, dow, doy),
+ dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+ resYear, resDayOfYear;
+
+ if (dayOfYear <= 0) {
+ resYear = year - 1;
+ resDayOfYear = daysInYear(resYear) + dayOfYear;
+ } else if (dayOfYear > daysInYear(year)) {
+ resYear = year + 1;
+ resDayOfYear = dayOfYear - daysInYear(year);
+ } else {
+ resYear = year;
+ resDayOfYear = dayOfYear;
+ }
+
+ return {
+ year: resYear,
+ dayOfYear: resDayOfYear
+ };
+}
+
+export function weekOfYear(mom, dow, doy) {
+ var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+ week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+ resWeek, resYear;
+
+ if (week < 1) {
+ resYear = mom.year() - 1;
+ resWeek = week + weeksInYear(resYear, dow, doy);
+ } else if (week > weeksInYear(mom.year(), dow, doy)) {
+ resWeek = week - weeksInYear(mom.year(), dow, doy);
+ resYear = mom.year() + 1;
+ } else {
+ resYear = mom.year();
+ resWeek = week;
+ }
+
+ return {
+ week: resWeek,
+ year: resYear
+ };
+}
+
+export function weeksInYear(year, dow, doy) {
+ var weekOffset = firstWeekOffset(year, dow, doy),
+ weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+ return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-year.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-year.js
new file mode 100644
index 00000000000..7fa5425bccb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week-year.js
@@ -0,0 +1,107 @@
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match1to4, match1to6, match2, match4, match6, matchSigned } from '../parse/regex';
+import { addWeekParseToken } from '../parse/token';
+import { weekOfYear, weeksInYear, dayOfYearFromWeeks } from './week-calendar-utils';
+import toInt from '../utils/to-int';
+import { hooks } from '../utils/hooks';
+import { createLocal } from '../create/local';
+import { createUTCDate } from '../create/date-from-array';
+
+// FORMATTING
+
+addFormatToken(0, ['gg', 2], 0, function () {
+ return this.weekYear() % 100;
+});
+
+addFormatToken(0, ['GG', 2], 0, function () {
+ return this.isoWeekYear() % 100;
+});
+
+function addWeekYearFormatToken (token, getter) {
+ addFormatToken(0, [token, token.length], 0, getter);
+}
+
+addWeekYearFormatToken('gggg', 'weekYear');
+addWeekYearFormatToken('ggggg', 'weekYear');
+addWeekYearFormatToken('GGGG', 'isoWeekYear');
+addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+// ALIASES
+
+addUnitAlias('weekYear', 'gg');
+addUnitAlias('isoWeekYear', 'GG');
+
+// PRIORITY
+
+addUnitPriority('weekYear', 1);
+addUnitPriority('isoWeekYear', 1);
+
+
+// PARSING
+
+addRegexToken('G', matchSigned);
+addRegexToken('g', matchSigned);
+addRegexToken('GG', match1to2, match2);
+addRegexToken('gg', match1to2, match2);
+addRegexToken('GGGG', match1to4, match4);
+addRegexToken('gggg', match1to4, match4);
+addRegexToken('GGGGG', match1to6, match6);
+addRegexToken('ggggg', match1to6, match6);
+
+addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+ week[token.substr(0, 2)] = toInt(input);
+});
+
+addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+ week[token] = hooks.parseTwoDigitYear(input);
+});
+
+// MOMENTS
+
+export function getSetWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input,
+ this.week(),
+ this.weekday(),
+ this.localeData()._week.dow,
+ this.localeData()._week.doy);
+}
+
+export function getSetISOWeekYear (input) {
+ return getSetWeekYearHelper.call(this,
+ input, this.isoWeek(), this.isoWeekday(), 1, 4);
+}
+
+export function getISOWeeksInYear () {
+ return weeksInYear(this.year(), 1, 4);
+}
+
+export function getWeeksInYear () {
+ var weekInfo = this.localeData()._week;
+ return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+}
+
+function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+ var weeksTarget;
+ if (input == null) {
+ return weekOfYear(this, dow, doy).year;
+ } else {
+ weeksTarget = weeksInYear(input, dow, doy);
+ if (week > weeksTarget) {
+ week = weeksTarget;
+ }
+ return setWeekAll.call(this, input, week, weekday, dow, doy);
+ }
+}
+
+function setWeekAll(weekYear, week, weekday, dow, doy) {
+ var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+ date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+ this.year(date.getUTCFullYear());
+ this.month(date.getUTCMonth());
+ this.date(date.getUTCDate());
+ return this;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week.js
new file mode 100644
index 00000000000..da64ffef328
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/week.js
@@ -0,0 +1,67 @@
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match2 } from '../parse/regex';
+import { addWeekParseToken } from '../parse/token';
+import toInt from '../utils/to-int';
+import { createLocal } from '../create/local';
+import { weekOfYear } from './week-calendar-utils';
+
+// FORMATTING
+
+addFormatToken('w', ['ww', 2], 'wo', 'week');
+addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+// ALIASES
+
+addUnitAlias('week', 'w');
+addUnitAlias('isoWeek', 'W');
+
+// PRIORITIES
+
+addUnitPriority('week', 5);
+addUnitPriority('isoWeek', 5);
+
+// PARSING
+
+addRegexToken('w', match1to2);
+addRegexToken('ww', match1to2, match2);
+addRegexToken('W', match1to2);
+addRegexToken('WW', match1to2, match2);
+
+addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+ week[token.substr(0, 1)] = toInt(input);
+});
+
+// HELPERS
+
+// LOCALES
+
+export function localeWeek (mom) {
+ return weekOfYear(mom, this._week.dow, this._week.doy).week;
+}
+
+export var defaultLocaleWeek = {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+};
+
+export function localeFirstDayOfWeek () {
+ return this._week.dow;
+}
+
+export function localeFirstDayOfYear () {
+ return this._week.doy;
+}
+
+// MOMENTS
+
+export function getSetWeek (input) {
+ var week = this.localeData().week(this);
+ return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+export function getSetISOWeek (input) {
+ var week = weekOfYear(this, 1, 4).week;
+ return input == null ? week : this.add((input - week) * 7, 'd');
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/year.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/year.js
new file mode 100644
index 00000000000..a10e5b4beb3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/units/year.js
@@ -0,0 +1,75 @@
+import { makeGetSet } from '../moment/get-set';
+import { addFormatToken } from '../format/format';
+import { addUnitAlias } from './aliases';
+import { addUnitPriority } from './priorities';
+import { addRegexToken, match1to2, match1to4, match1to6, match2, match4, match6, matchSigned } from '../parse/regex';
+import { addParseToken } from '../parse/token';
+import { hooks } from '../utils/hooks';
+import { YEAR } from './constants';
+import toInt from '../utils/to-int';
+
+// FORMATTING
+
+addFormatToken('Y', 0, 0, function () {
+ var y = this.year();
+ return y <= 9999 ? '' + y : '+' + y;
+});
+
+addFormatToken(0, ['YY', 2], 0, function () {
+ return this.year() % 100;
+});
+
+addFormatToken(0, ['YYYY', 4], 0, 'year');
+addFormatToken(0, ['YYYYY', 5], 0, 'year');
+addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+// ALIASES
+
+addUnitAlias('year', 'y');
+
+// PRIORITIES
+
+addUnitPriority('year', 1);
+
+// PARSING
+
+addRegexToken('Y', matchSigned);
+addRegexToken('YY', match1to2, match2);
+addRegexToken('YYYY', match1to4, match4);
+addRegexToken('YYYYY', match1to6, match6);
+addRegexToken('YYYYYY', match1to6, match6);
+
+addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+addParseToken('YYYY', function (input, array) {
+ array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+});
+addParseToken('YY', function (input, array) {
+ array[YEAR] = hooks.parseTwoDigitYear(input);
+});
+addParseToken('Y', function (input, array) {
+ array[YEAR] = parseInt(input, 10);
+});
+
+// HELPERS
+
+export function daysInYear(year) {
+ return isLeapYear(year) ? 366 : 365;
+}
+
+function isLeapYear(year) {
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+}
+
+// HOOKS
+
+hooks.parseTwoDigitYear = function (input) {
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+};
+
+// MOMENTS
+
+export var getSetYear = makeGetSet('FullYear', true);
+
+export function getIsLeapYear () {
+ return isLeapYear(this.year());
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-ceil.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-ceil.js
new file mode 100644
index 00000000000..7cf93290c51
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-ceil.js
@@ -0,0 +1,7 @@
+export default function absCeil (number) {
+ if (number < 0) {
+ return Math.floor(number);
+ } else {
+ return Math.ceil(number);
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-floor.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-floor.js
new file mode 100644
index 00000000000..401c7f041f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-floor.js
@@ -0,0 +1,8 @@
+export default function absFloor (number) {
+ if (number < 0) {
+ // -0 -> 0
+ return Math.ceil(number) || 0;
+ } else {
+ return Math.floor(number);
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-round.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-round.js
new file mode 100644
index 00000000000..98f54bc68fd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/abs-round.js
@@ -0,0 +1,7 @@
+export default function absRound (number) {
+ if (number < 0) {
+ return Math.round(-1 * number) * -1;
+ } else {
+ return Math.round(number);
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/compare-arrays.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/compare-arrays.js
new file mode 100644
index 00000000000..2eb274befee
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/compare-arrays.js
@@ -0,0 +1,16 @@
+import toInt from './to-int';
+
+// compare two arrays, return the number of differences
+export default function compareArrays(array1, array2, dontConvert) {
+ var len = Math.min(array1.length, array2.length),
+ lengthDiff = Math.abs(array1.length - array2.length),
+ diffs = 0,
+ i;
+ for (i = 0; i < len; i++) {
+ if ((dontConvert && array1[i] !== array2[i]) ||
+ (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+ diffs++;
+ }
+ }
+ return diffs + lengthDiff;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/defaults.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/defaults.js
new file mode 100644
index 00000000000..45c5e879424
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/defaults.js
@@ -0,0 +1,10 @@
+// Pick the first defined of two or three arguments.
+export default function defaults(a, b, c) {
+ if (a != null) {
+ return a;
+ }
+ if (b != null) {
+ return b;
+ }
+ return c;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/deprecate.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/deprecate.js
new file mode 100644
index 00000000000..8b4c87a2805
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/deprecate.js
@@ -0,0 +1,55 @@
+import extend from './extend';
+import { hooks } from './hooks';
+import isUndefined from './is-undefined';
+
+function warn(msg) {
+ if (hooks.suppressDeprecationWarnings === false &&
+ (typeof console !== 'undefined') && console.warn) {
+ console.warn('Deprecation warning: ' + msg);
+ }
+}
+
+export function deprecate(msg, fn) {
+ var firstTime = true;
+
+ return extend(function () {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(null, msg);
+ }
+ if (firstTime) {
+ var args = [];
+ var arg;
+ for (var i = 0; i < arguments.length; i++) {
+ arg = '';
+ if (typeof arguments[i] === 'object') {
+ arg += '\n[' + i + '] ';
+ for (var key in arguments[0]) {
+ arg += key + ': ' + arguments[0][key] + ', ';
+ }
+ arg = arg.slice(0, -2); // Remove trailing comma and space
+ } else {
+ arg = arguments[i];
+ }
+ args.push(arg);
+ }
+ warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+ firstTime = false;
+ }
+ return fn.apply(this, arguments);
+ }, fn);
+}
+
+var deprecations = {};
+
+export function deprecateSimple(name, msg) {
+ if (hooks.deprecationHandler != null) {
+ hooks.deprecationHandler(name, msg);
+ }
+ if (!deprecations[name]) {
+ warn(msg);
+ deprecations[name] = true;
+ }
+}
+
+hooks.suppressDeprecationWarnings = false;
+hooks.deprecationHandler = null;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/extend.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/extend.js
new file mode 100644
index 00000000000..ba74a0bf19c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/extend.js
@@ -0,0 +1,19 @@
+import hasOwnProp from './has-own-prop';
+
+export default function extend(a, b) {
+ for (var i in b) {
+ if (hasOwnProp(b, i)) {
+ a[i] = b[i];
+ }
+ }
+
+ if (hasOwnProp(b, 'toString')) {
+ a.toString = b.toString;
+ }
+
+ if (hasOwnProp(b, 'valueOf')) {
+ a.valueOf = b.valueOf;
+ }
+
+ return a;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/has-own-prop.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/has-own-prop.js
new file mode 100644
index 00000000000..4d2403ccb40
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/has-own-prop.js
@@ -0,0 +1,3 @@
+export default function hasOwnProp(a, b) {
+ return Object.prototype.hasOwnProperty.call(a, b);
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/hooks.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/hooks.js
new file mode 100644
index 00000000000..02a5bd3dac2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/hooks.js
@@ -0,0 +1,13 @@
+export { hooks, setHookCallback };
+
+var hookCallback;
+
+function hooks () {
+ return hookCallback.apply(null, arguments);
+}
+
+// This is done to register the method called with moment()
+// without creating circular dependencies.
+function setHookCallback (callback) {
+ hookCallback = callback;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/index-of.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/index-of.js
new file mode 100644
index 00000000000..92298cff31a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/index-of.js
@@ -0,0 +1,18 @@
+var indexOf;
+
+if (Array.prototype.indexOf) {
+ indexOf = Array.prototype.indexOf;
+} else {
+ indexOf = function (o) {
+ // I know
+ var i;
+ for (i = 0; i < this.length; ++i) {
+ if (this[i] === o) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+
+export { indexOf as default };
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-array.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-array.js
new file mode 100644
index 00000000000..2d0e0f3da3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-array.js
@@ -0,0 +1,3 @@
+export default function isArray(input) {
+ return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-date.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-date.js
new file mode 100644
index 00000000000..69c4d0e9c6a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-date.js
@@ -0,0 +1,3 @@
+export default function isDate(input) {
+ return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-function.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-function.js
new file mode 100644
index 00000000000..12304b1bd63
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-function.js
@@ -0,0 +1,3 @@
+export default function isFunction(input) {
+ return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-number.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-number.js
new file mode 100644
index 00000000000..74d6137b7a8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-number.js
@@ -0,0 +1,3 @@
+export default function isNumber(input) {
+ return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object-empty.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object-empty.js
new file mode 100644
index 00000000000..1f2d939a579
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object-empty.js
@@ -0,0 +1,8 @@
+export default function isObjectEmpty(obj) {
+ var k;
+ for (k in obj) {
+ // even if its not own property I'd still call it non-empty
+ return false;
+ }
+ return true;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object.js
new file mode 100644
index 00000000000..111353899ac
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-object.js
@@ -0,0 +1,5 @@
+export default function isObject(input) {
+ // IE8 will treat undefined and null as object if it wasn't for
+ // input != null
+ return input != null && Object.prototype.toString.call(input) === '[object Object]';
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-undefined.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-undefined.js
new file mode 100644
index 00000000000..de57a8b2849
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/is-undefined.js
@@ -0,0 +1,3 @@
+export default function isUndefined(input) {
+ return input === void 0;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/keys.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/keys.js
new file mode 100644
index 00000000000..2da4e322882
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/keys.js
@@ -0,0 +1,19 @@
+import hasOwnProp from './has-own-prop';
+
+var keys;
+
+if (Object.keys) {
+ keys = Object.keys;
+} else {
+ keys = function (obj) {
+ var i, res = [];
+ for (i in obj) {
+ if (hasOwnProp(obj, i)) {
+ res.push(i);
+ }
+ }
+ return res;
+ };
+}
+
+export { keys as default };
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/map.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/map.js
new file mode 100644
index 00000000000..1cbc5639f0a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/map.js
@@ -0,0 +1,7 @@
+export default function map(arr, fn) {
+ var res = [], i;
+ for (i = 0; i < arr.length; ++i) {
+ res.push(fn(arr[i], i));
+ }
+ return res;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/some.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/some.js
new file mode 100644
index 00000000000..1bd318675f0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/some.js
@@ -0,0 +1,19 @@
+var some;
+if (Array.prototype.some) {
+ some = Array.prototype.some;
+} else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+}
+
+export { some as default };
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/to-int.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/to-int.js
new file mode 100644
index 00000000000..fb489416f16
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/to-int.js
@@ -0,0 +1,12 @@
+import absFloor from './abs-floor';
+
+export default function toInt(argumentForCoercion) {
+ var coercedNumber = +argumentForCoercion,
+ value = 0;
+
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+ value = absFloor(coercedNumber);
+ }
+
+ return value;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/zero-fill.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/zero-fill.js
new file mode 100644
index 00000000000..7009ec903d3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/lib/utils/zero-fill.js
@@ -0,0 +1,7 @@
+export default function zeroFill(number, targetLength, forceSign) {
+ var absNumber = '' + Math.abs(number),
+ zerosToFill = targetLength - absNumber.length,
+ sign = number >= 0;
+ return (sign ? (forceSign ? '+' : '') : '-') +
+ Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/af.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/af.js
new file mode 100644
index 00000000000..addd8273828
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/af.js
@@ -0,0 +1,63 @@
+//! moment.js locale configuration
+//! locale : Afrikaans [af]
+//! author : Werner Mollentze : https://github.com/wernerm
+
+import moment from '../moment';
+
+export default moment.defineLocale('af', {
+ months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
+ weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
+ weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
+ meridiemParse: /vm|nm/i,
+ isPM : function (input) {
+ return /^nm$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'vm' : 'VM';
+ } else {
+ return isLower ? 'nm' : 'NM';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Vandag om] LT',
+ nextDay : '[Môre om] LT',
+ nextWeek : 'dddd [om] LT',
+ lastDay : '[Gister om] LT',
+ lastWeek : '[Laas] dddd [om] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'oor %s',
+ past : '%s gelede',
+ s : '\'n paar sekondes',
+ m : '\'n minuut',
+ mm : '%d minute',
+ h : '\'n uur',
+ hh : '%d ure',
+ d : '\'n dag',
+ dd : '%d dae',
+ M : '\'n maand',
+ MM : '%d maande',
+ y : '\'n jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter
+ },
+ week : {
+ dow : 1, // Maandag is die eerste dag van die week.
+ doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-dz.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-dz.js
new file mode 100644
index 00000000000..d14e0ff830b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-dz.js
@@ -0,0 +1,50 @@
+//! moment.js locale configuration
+//! locale : Arabic (Algeria) [ar-dz]
+//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme
+
+import moment from '../moment';
+
+export default moment.defineLocale('ar-dz', {
+ months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ly.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ly.js
new file mode 100644
index 00000000000..2dcba3f684a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ly.js
@@ -0,0 +1,112 @@
+//! moment.js locale configuration
+//! locale : Arabic (Lybia) [ar-ly]
+//! author : Ali Hmer: https://github.com/kikoanis
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '1',
+ '2': '2',
+ '3': '3',
+ '4': '4',
+ '5': '5',
+ '6': '6',
+ '7': '7',
+ '8': '8',
+ '9': '9',
+ '0': '0'
+}, pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+}, plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+}, pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm(number),
+ str = plurals[u][pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+}, months = [
+ 'يناير',
+ 'فبراير',
+ 'مارس',
+ 'أبريل',
+ 'مايو',
+ 'يونيو',
+ 'يوليو',
+ 'أغسطس',
+ 'سبتمبر',
+ 'أكتوبر',
+ 'نوفمبر',
+ 'ديسمبر'
+];
+
+export default moment.defineLocale('ar-ly', {
+ months : months,
+ monthsShort : months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize('s'),
+ m : pluralize('m'),
+ mm : pluralize('m'),
+ h : pluralize('h'),
+ hh : pluralize('h'),
+ d : pluralize('d'),
+ dd : pluralize('d'),
+ M : pluralize('M'),
+ MM : pluralize('M'),
+ y : pluralize('y'),
+ yy : pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ma.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ma.js
new file mode 100644
index 00000000000..03973d22981
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-ma.js
@@ -0,0 +1,51 @@
+//! moment.js locale configuration
+//! locale : Arabic (Morocco) [ar-ma]
+//! author : ElFadili Yassine : https://github.com/ElFadiliY
+//! author : Abdel Said : https://github.com/abdelsaid
+
+import moment from '../moment';
+
+export default moment.defineLocale('ar-ma', {
+ months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
+ weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-sa.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-sa.js
new file mode 100644
index 00000000000..30a9968d6e3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-sa.js
@@ -0,0 +1,95 @@
+//! moment.js locale configuration
+//! locale : Arabic (Saudi Arabia) [ar-sa]
+//! author : Suhail Alkowaileet : https://github.com/xsoh
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+}, numberMap = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+};
+
+export default moment.defineLocale('ar-sa', {
+ months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'في %s',
+ past : 'منذ %s',
+ s : 'ثوان',
+ m : 'دقيقة',
+ mm : '%d دقائق',
+ h : 'ساعة',
+ hh : '%d ساعات',
+ d : 'يوم',
+ dd : '%d أيام',
+ M : 'شهر',
+ MM : '%d أشهر',
+ y : 'سنة',
+ yy : '%d سنوات'
+ },
+ preparse: function (string) {
+ return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-tn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-tn.js
new file mode 100644
index 00000000000..8ab8945bddf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar-tn.js
@@ -0,0 +1,50 @@
+//! moment.js locale configuration
+//! locale : Arabic (Tunisia) [ar-tn]
+//! author : Nader Toukabri : https://github.com/naderio
+
+import moment from '../moment';
+
+export default moment.defineLocale('ar-tn', {
+ months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
+ weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[اليوم على الساعة] LT',
+ nextDay: '[غدا على الساعة] LT',
+ nextWeek: 'dddd [على الساعة] LT',
+ lastDay: '[أمس على الساعة] LT',
+ lastWeek: 'dddd [على الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'في %s',
+ past: 'منذ %s',
+ s: 'ثوان',
+ m: 'دقيقة',
+ mm: '%d دقائق',
+ h: 'ساعة',
+ hh: '%d ساعات',
+ d: 'يوم',
+ dd: '%d أيام',
+ M: 'شهر',
+ MM: '%d أشهر',
+ y: 'سنة',
+ yy: '%d سنوات'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar.js
new file mode 100644
index 00000000000..619843ae560
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ar.js
@@ -0,0 +1,128 @@
+//! moment.js locale configuration
+//! locale : Arabic [ar]
+//! author : Abdel Said: https://github.com/abdelsaid
+//! author : Ahmed Elkhatib
+//! author : forabi https://github.com/forabi
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '١',
+ '2': '٢',
+ '3': '٣',
+ '4': '٤',
+ '5': '٥',
+ '6': '٦',
+ '7': '٧',
+ '8': '٨',
+ '9': '٩',
+ '0': '٠'
+}, numberMap = {
+ '١': '1',
+ '٢': '2',
+ '٣': '3',
+ '٤': '4',
+ '٥': '5',
+ '٦': '6',
+ '٧': '7',
+ '٨': '8',
+ '٩': '9',
+ '٠': '0'
+}, pluralForm = function (n) {
+ return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;
+}, plurals = {
+ s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],
+ m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],
+ h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],
+ d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],
+ M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],
+ y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']
+}, pluralize = function (u) {
+ return function (number, withoutSuffix, string, isFuture) {
+ var f = pluralForm(number),
+ str = plurals[u][pluralForm(number)];
+ if (f === 2) {
+ str = str[withoutSuffix ? 0 : 1];
+ }
+ return str.replace(/%d/i, number);
+ };
+}, months = [
+ 'كانون الثاني يناير',
+ 'شباط فبراير',
+ 'آذار مارس',
+ 'نيسان أبريل',
+ 'أيار مايو',
+ 'حزيران يونيو',
+ 'تموز يوليو',
+ 'آب أغسطس',
+ 'أيلول سبتمبر',
+ 'تشرين الأول أكتوبر',
+ 'تشرين الثاني نوفمبر',
+ 'كانون الأول ديسمبر'
+];
+
+export default moment.defineLocale('ar', {
+ months : months,
+ monthsShort : months,
+ weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
+ weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
+ weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/\u200FM/\u200FYYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ص|م/,
+ isPM : function (input) {
+ return 'م' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ص';
+ } else {
+ return 'م';
+ }
+ },
+ calendar : {
+ sameDay: '[اليوم عند الساعة] LT',
+ nextDay: '[غدًا عند الساعة] LT',
+ nextWeek: 'dddd [عند الساعة] LT',
+ lastDay: '[أمس عند الساعة] LT',
+ lastWeek: 'dddd [عند الساعة] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'بعد %s',
+ past : 'منذ %s',
+ s : pluralize('s'),
+ m : pluralize('m'),
+ mm : pluralize('m'),
+ h : pluralize('h'),
+ hh : pluralize('h'),
+ d : pluralize('d'),
+ dd : pluralize('d'),
+ M : pluralize('M'),
+ MM : pluralize('M'),
+ y : pluralize('y'),
+ yy : pluralize('y')
+ },
+ preparse: function (string) {
+ return string.replace(/\u200f/g, '').replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/az.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/az.js
new file mode 100644
index 00000000000..f9b368b816b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/az.js
@@ -0,0 +1,96 @@
+//! moment.js locale configuration
+//! locale : Azerbaijani [az]
+//! author : topchiyev : https://github.com/topchiyev
+
+import moment from '../moment';
+
+var suffixes = {
+ 1: '-inci',
+ 5: '-inci',
+ 8: '-inci',
+ 70: '-inci',
+ 80: '-inci',
+ 2: '-nci',
+ 7: '-nci',
+ 20: '-nci',
+ 50: '-nci',
+ 3: '-üncü',
+ 4: '-üncü',
+ 100: '-üncü',
+ 6: '-ncı',
+ 9: '-uncu',
+ 10: '-uncu',
+ 30: '-uncu',
+ 60: '-ıncı',
+ 90: '-ıncı'
+};
+
+export default moment.defineLocale('az', {
+ months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
+ monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
+ weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
+ weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
+ weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[sabah saat] LT',
+ nextWeek : '[gələn həftə] dddd [saat] LT',
+ lastDay : '[dünən] LT',
+ lastWeek : '[keçən həftə] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s əvvəl',
+ s : 'birneçə saniyyə',
+ m : 'bir dəqiqə',
+ mm : '%d dəqiqə',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir il',
+ yy : '%d il'
+ },
+ meridiemParse: /gecə|səhər|gündüz|axşam/,
+ isPM : function (input) {
+ return /^(gündüz|axşam)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'gecə';
+ } else if (hour < 12) {
+ return 'səhər';
+ } else if (hour < 17) {
+ return 'gündüz';
+ } else {
+ return 'axşam';
+ }
+ },
+ ordinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '-ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/be.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/be.js
new file mode 100644
index 00000000000..c22c6e1e69c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/be.js
@@ -0,0 +1,125 @@
+//! moment.js locale configuration
+//! locale : Belarusian [be]
+//! author : Dmitry Demidov : https://github.com/demidov91
+//! author: Praleska: http://praleska.pro/
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+import moment from '../moment';
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
+ 'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
+ 'dd': 'дзень_дні_дзён',
+ 'MM': 'месяц_месяцы_месяцаў',
+ 'yy': 'год_гады_гадоў'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвіліна' : 'хвіліну';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'гадзіна' : 'гадзіну';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+
+export default moment.defineLocale('be', {
+ months : {
+ format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
+ standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')
+ },
+ monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
+ weekdays : {
+ format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
+ standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/
+ },
+ weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сёння ў] LT',
+ nextDay: '[Заўтра ў] LT',
+ lastDay: '[Учора ў] LT',
+ nextWeek: function () {
+ return '[У] dddd [ў] LT';
+ },
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return '[У мінулую] dddd [ў] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[У мінулы] dddd [ў] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'праз %s',
+ past : '%s таму',
+ s : 'некалькі секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : relativeTimeWithPlural,
+ hh : relativeTimeWithPlural,
+ d : 'дзень',
+ dd : relativeTimeWithPlural,
+ M : 'месяц',
+ MM : relativeTimeWithPlural,
+ y : 'год',
+ yy : relativeTimeWithPlural
+ },
+ meridiemParse: /ночы|раніцы|дня|вечара/,
+ isPM : function (input) {
+ return /^(дня|вечара)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночы';
+ } else if (hour < 12) {
+ return 'раніцы';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечара';
+ }
+ },
+ ordinalParse: /\d{1,2}-(і|ы|га)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';
+ case 'D':
+ return number + '-га';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bg.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bg.js
new file mode 100644
index 00000000000..0c4597ed5a9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bg.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Bulgarian [bg]
+//! author : Krasen Borisov : https://github.com/kraz
+
+import moment from '../moment';
+
+export default moment.defineLocale('bg', {
+ months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Днес в] LT',
+ nextDay : '[Утре в] LT',
+ nextWeek : 'dddd [в] LT',
+ lastDay : '[Вчера в] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[В изминалата] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[В изминалия] dddd [в] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'след %s',
+ past : 'преди %s',
+ s : 'няколко секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дни',
+ M : 'месец',
+ MM : '%d месеца',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bn.js
new file mode 100644
index 00000000000..359a376dc7a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bn.js
@@ -0,0 +1,109 @@
+//! moment.js locale configuration
+//! locale : Bengali [bn]
+//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '১',
+ '2': '২',
+ '3': '৩',
+ '4': '৪',
+ '5': '৫',
+ '6': '৬',
+ '7': '৭',
+ '8': '৮',
+ '9': '৯',
+ '0': '০'
+},
+numberMap = {
+ '১': '1',
+ '২': '2',
+ '৩': '3',
+ '৪': '4',
+ '৫': '5',
+ '৬': '6',
+ '৭': '7',
+ '৮': '8',
+ '৯': '9',
+ '০': '0'
+};
+
+export default moment.defineLocale('bn', {
+ months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
+ monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
+ weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
+ weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
+ weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm সময়',
+ LTS : 'A h:mm:ss সময়',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm সময়',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'
+ },
+ calendar : {
+ sameDay : '[আজ] LT',
+ nextDay : '[আগামীকাল] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[গতকাল] LT',
+ lastWeek : '[গত] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s পরে',
+ past : '%s আগে',
+ s : 'কয়েক সেকেন্ড',
+ m : 'এক মিনিট',
+ mm : '%d মিনিট',
+ h : 'এক ঘন্টা',
+ hh : '%d ঘন্টা',
+ d : 'এক দিন',
+ dd : '%d দিন',
+ M : 'এক মাস',
+ MM : '%d মাস',
+ y : 'এক বছর',
+ yy : '%d বছর'
+ },
+ preparse: function (string) {
+ return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'রাত' && hour >= 4) ||
+ (meridiem === 'দুপুর' && hour < 5) ||
+ meridiem === 'বিকাল') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'রাত';
+ } else if (hour < 10) {
+ return 'সকাল';
+ } else if (hour < 17) {
+ return 'দুপুর';
+ } else if (hour < 20) {
+ return 'বিকাল';
+ } else {
+ return 'রাত';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bo.js
new file mode 100644
index 00000000000..5d15d84480d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bo.js
@@ -0,0 +1,110 @@
+//! moment.js locale configuration
+//! locale : Tibetan [bo]
+//! author : Thupten N. Chakrishar : https://github.com/vajradog
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '༡',
+ '2': '༢',
+ '3': '༣',
+ '4': '༤',
+ '5': '༥',
+ '6': '༦',
+ '7': '༧',
+ '8': '༨',
+ '9': '༩',
+ '0': '༠'
+},
+numberMap = {
+ '༡': '1',
+ '༢': '2',
+ '༣': '3',
+ '༤': '4',
+ '༥': '5',
+ '༦': '6',
+ '༧': '7',
+ '༨': '8',
+ '༩': '9',
+ '༠': '0'
+};
+
+export default moment.defineLocale('bo', {
+ months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
+ weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
+ weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[དི་རིང] LT',
+ nextDay : '[སང་ཉིན] LT',
+ nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',
+ lastDay : '[ཁ་སང] LT',
+ lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ལ་',
+ past : '%s སྔན་ལ',
+ s : 'ལམ་སང',
+ m : 'སྐར་མ་གཅིག',
+ mm : '%d སྐར་མ',
+ h : 'ཆུ་ཚོད་གཅིག',
+ hh : '%d ཆུ་ཚོད',
+ d : 'ཉིན་གཅིག',
+ dd : '%d ཉིན་',
+ M : 'ཟླ་བ་གཅིག',
+ MM : '%d ཟླ་བ',
+ y : 'ལོ་གཅིག',
+ yy : '%d ལོ'
+ },
+ preparse: function (string) {
+ return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'མཚན་མོ' && hour >= 4) ||
+ (meridiem === 'ཉིན་གུང' && hour < 5) ||
+ meridiem === 'དགོང་དག') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'མཚན་མོ';
+ } else if (hour < 10) {
+ return 'ཞོགས་ཀས';
+ } else if (hour < 17) {
+ return 'ཉིན་གུང';
+ } else if (hour < 20) {
+ return 'དགོང་དག';
+ } else {
+ return 'མཚན་མོ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/br.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/br.js
new file mode 100644
index 00000000000..86c580d4748
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/br.js
@@ -0,0 +1,99 @@
+//! moment.js locale configuration
+//! locale : Breton [br]
+//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
+
+import moment from '../moment';
+
+function relativeTimeWithMutation(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'munutenn',
+ 'MM': 'miz',
+ 'dd': 'devezh'
+ };
+ return number + ' ' + mutation(format[key], number);
+}
+function specialMutationForYears(number) {
+ switch (lastNumber(number)) {
+ case 1:
+ case 3:
+ case 4:
+ case 5:
+ case 9:
+ return number + ' bloaz';
+ default:
+ return number + ' vloaz';
+ }
+}
+function lastNumber(number) {
+ if (number > 9) {
+ return lastNumber(number % 10);
+ }
+ return number;
+}
+function mutation(text, number) {
+ if (number === 2) {
+ return softMutation(text);
+ }
+ return text;
+}
+function softMutation(text) {
+ var mutationTable = {
+ 'm': 'v',
+ 'b': 'v',
+ 'd': 'z'
+ };
+ if (mutationTable[text.charAt(0)] === undefined) {
+ return text;
+ }
+ return mutationTable[text.charAt(0)] + text.substring(1);
+}
+
+export default moment.defineLocale('br', {
+ months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
+ monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
+ weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'),
+ weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
+ weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h[e]mm A',
+ LTS : 'h[e]mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [a viz] MMMM YYYY',
+ LLL : 'D [a viz] MMMM YYYY h[e]mm A',
+ LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'
+ },
+ calendar : {
+ sameDay : '[Hiziv da] LT',
+ nextDay : '[Warc\'hoazh da] LT',
+ nextWeek : 'dddd [da] LT',
+ lastDay : '[Dec\'h da] LT',
+ lastWeek : 'dddd [paset da] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'a-benn %s',
+ past : '%s \'zo',
+ s : 'un nebeud segondennoù',
+ m : 'ur vunutenn',
+ mm : relativeTimeWithMutation,
+ h : 'un eur',
+ hh : '%d eur',
+ d : 'un devezh',
+ dd : relativeTimeWithMutation,
+ M : 'ur miz',
+ MM : relativeTimeWithMutation,
+ y : 'ur bloaz',
+ yy : specialMutationForYears
+ },
+ ordinalParse: /\d{1,2}(añ|vet)/,
+ ordinal : function (number) {
+ var output = (number === 1) ? 'añ' : 'vet';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bs.js
new file mode 100644
index 00000000000..90cb0b96c60
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/bs.js
@@ -0,0 +1,133 @@
+//! moment.js locale configuration
+//! locale : Bosnian [bs]
+//! author : Nedim Cholich : https://github.com/frontyard
+//! based on (hr) translation by Bojan Marković
+
+import moment from '../moment';
+
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+export default moment.defineLocale('bs', {
+ months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : 'dan',
+ dd : translate,
+ M : 'mjesec',
+ MM : translate,
+ y : 'godinu',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ca.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ca.js
new file mode 100644
index 00000000000..17f50b5d848
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ca.js
@@ -0,0 +1,72 @@
+//! moment.js locale configuration
+//! locale : Catalan [ca]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+import moment from '../moment';
+
+export default moment.defineLocale('ca', {
+ months : 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),
+ monthsShort : 'gen._febr._mar._abr._mai._jun._jul._ag._set._oct._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),
+ weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
+ weekdaysMin : 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextDay : function () {
+ return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastDay : function () {
+ return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'd\'aquí %s',
+ past : 'fa %s',
+ s : 'uns segons',
+ m : 'un minut',
+ mm : '%d minuts',
+ h : 'una hora',
+ hh : '%d hores',
+ d : 'un dia',
+ dd : '%d dies',
+ M : 'un mes',
+ MM : '%d mesos',
+ y : 'un any',
+ yy : '%d anys'
+ },
+ ordinalParse: /\d{1,2}(r|n|t|è|a)/,
+ ordinal : function (number, period) {
+ var output = (number === 1) ? 'r' :
+ (number === 2) ? 'n' :
+ (number === 3) ? 'r' :
+ (number === 4) ? 't' : 'è';
+ if (period === 'w' || period === 'W') {
+ output = 'a';
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cs.js
new file mode 100644
index 00000000000..621b8031c3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cs.js
@@ -0,0 +1,163 @@
+//! moment.js locale configuration
+//! locale : Czech [cs]
+//! author : petrbela : https://github.com/petrbela
+
+import moment from '../moment';
+
+var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
+ monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');
+function plural(n) {
+ return (n > 1) && (n < 5) && (~~(n / 10) !== 1);
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'minuty' : 'minut');
+ } else {
+ return result + 'minutami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'hodiny' : 'hodin');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'den' : 'dnem';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'dny' : 'dní');
+ } else {
+ return result + 'dny';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'měsíce' : 'měsíců');
+ } else {
+ return result + 'měsíci';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokem';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'roky' : 'let');
+ } else {
+ return result + 'lety';
+ }
+ break;
+ }
+}
+
+export default moment.defineLocale('cs', {
+ months : months,
+ monthsShort : monthsShort,
+ monthsParse : (function (months, monthsShort) {
+ var i, _monthsParse = [];
+ for (i = 0; i < 12; i++) {
+ // use custom parser to solve problem with July (červenec)
+ _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');
+ }
+ return _monthsParse;
+ }(months, monthsShort)),
+ shortMonthsParse : (function (monthsShort) {
+ var i, _shortMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');
+ }
+ return _shortMonthsParse;
+ }(monthsShort)),
+ longMonthsParse : (function (months) {
+ var i, _longMonthsParse = [];
+ for (i = 0; i < 12; i++) {
+ _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');
+ }
+ return _longMonthsParse;
+ }(months)),
+ weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
+ weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),
+ weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm',
+ l : 'D. M. YYYY'
+ },
+ calendar : {
+ sameDay: '[dnes v] LT',
+ nextDay: '[zítra v] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v neděli v] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [v] LT';
+ case 3:
+ return '[ve středu v] LT';
+ case 4:
+ return '[ve čtvrtek v] LT';
+ case 5:
+ return '[v pátek v] LT';
+ case 6:
+ return '[v sobotu v] LT';
+ }
+ },
+ lastDay: '[včera v] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulou neděli v] LT';
+ case 1:
+ case 2:
+ return '[minulé] dddd [v] LT';
+ case 3:
+ return '[minulou středu v] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [v] LT';
+ case 6:
+ return '[minulou sobotu v] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'před %s',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse : /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cv.js
new file mode 100644
index 00000000000..1884d2dbf2a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cv.js
@@ -0,0 +1,53 @@
+//! moment.js locale configuration
+//! locale : Chuvash [cv]
+//! author : Anatoly Mironov : https://github.com/mirontoli
+
+import moment from '../moment';
+
+export default moment.defineLocale('cv', {
+ months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
+ monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
+ weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
+ weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
+ weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
+ LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
+ LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
+ },
+ calendar : {
+ sameDay: '[Паян] LT [сехетре]',
+ nextDay: '[Ыран] LT [сехетре]',
+ lastDay: '[Ӗнер] LT [сехетре]',
+ nextWeek: '[Ҫитес] dddd LT [сехетре]',
+ lastWeek: '[Иртнӗ] dddd LT [сехетре]',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (output) {
+ var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';
+ return output + affix;
+ },
+ past : '%s каялла',
+ s : 'пӗр-ик ҫеккунт',
+ m : 'пӗр минут',
+ mm : '%d минут',
+ h : 'пӗр сехет',
+ hh : '%d сехет',
+ d : 'пӗр кун',
+ dd : '%d кун',
+ M : 'пӗр уйӑх',
+ MM : '%d уйӑх',
+ y : 'пӗр ҫул',
+ yy : '%d ҫул'
+ },
+ ordinalParse: /\d{1,2}-мӗш/,
+ ordinal : '%d-мӗш',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cy.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cy.js
new file mode 100644
index 00000000000..972b7009925
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/cy.js
@@ -0,0 +1,72 @@
+//! moment.js locale configuration
+//! locale : Welsh [cy]
+//! author : Robert Allen : https://github.com/robgallen
+//! author : https://github.com/ryangreaves
+
+import moment from '../moment';
+
+export default moment.defineLocale('cy', {
+ months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
+ monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
+ weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
+ weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
+ weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
+ weekdaysParseExact : true,
+ // time formats are the same as en-gb
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[Heddiw am] LT',
+ nextDay: '[Yfory am] LT',
+ nextWeek: 'dddd [am] LT',
+ lastDay: '[Ddoe am] LT',
+ lastWeek: 'dddd [diwethaf am] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'mewn %s',
+ past: '%s yn ôl',
+ s: 'ychydig eiliadau',
+ m: 'munud',
+ mm: '%d munud',
+ h: 'awr',
+ hh: '%d awr',
+ d: 'diwrnod',
+ dd: '%d diwrnod',
+ M: 'mis',
+ MM: '%d mis',
+ y: 'blwyddyn',
+ yy: '%d flynedd'
+ },
+ ordinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
+ // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
+ ordinal: function (number) {
+ var b = number,
+ output = '',
+ lookup = [
+ '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed
+ 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed
+ ];
+ if (b > 20) {
+ if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
+ output = 'fed'; // not 30ain, 70ain or 90ain
+ } else {
+ output = 'ain';
+ }
+ } else if (b > 0) {
+ output = lookup[b];
+ }
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/da.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/da.js
new file mode 100644
index 00000000000..da2316cadca
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/da.js
@@ -0,0 +1,51 @@
+//! moment.js locale configuration
+//! locale : Danish [da]
+//! author : Ulrik Nielsen : https://github.com/mrbase
+
+import moment from '../moment';
+
+export default moment.defineLocale('da', {
+ months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[I dag kl.] LT',
+ nextDay : '[I morgen kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[I går kl.] LT',
+ lastWeek : '[sidste] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'få sekunder',
+ m : 'et minut',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dage',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'et år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de-at.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de-at.js
new file mode 100644
index 00000000000..4e59f687258
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de-at.js
@@ -0,0 +1,69 @@
+//! moment.js locale configuration
+//! locale : German (Austria) [de-at]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Martin Groller : https://github.com/MadMG
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+import moment from '../moment';
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+export default moment.defineLocale('de-at', {
+ months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime,
+ mm : '%d Minuten',
+ h : processRelativeTime,
+ hh : '%d Stunden',
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de.js
new file mode 100644
index 00000000000..1839b5955c3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/de.js
@@ -0,0 +1,68 @@
+//! moment.js locale configuration
+//! locale : German [de]
+//! author : lluchs : https://github.com/lluchs
+//! author: Menelion Elensúle: https://github.com/Oire
+//! author : Mikolaj Dadela : https://github.com/mik01aj
+
+import moment from '../moment';
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eine Minute', 'einer Minute'],
+ 'h': ['eine Stunde', 'einer Stunde'],
+ 'd': ['ein Tag', 'einem Tag'],
+ 'dd': [number + ' Tage', number + ' Tagen'],
+ 'M': ['ein Monat', 'einem Monat'],
+ 'MM': [number + ' Monate', number + ' Monaten'],
+ 'y': ['ein Jahr', 'einem Jahr'],
+ 'yy': [number + ' Jahre', number + ' Jahren']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+
+export default moment.defineLocale('de', {
+ months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
+ weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
+ weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY HH:mm',
+ LLLL : 'dddd, D. MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[heute um] LT [Uhr]',
+ sameElse: 'L',
+ nextDay: '[morgen um] LT [Uhr]',
+ nextWeek: 'dddd [um] LT [Uhr]',
+ lastDay: '[gestern um] LT [Uhr]',
+ lastWeek: '[letzten] dddd [um] LT [Uhr]'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : 'vor %s',
+ s : 'ein paar Sekunden',
+ m : processRelativeTime,
+ mm : '%d Minuten',
+ h : processRelativeTime,
+ hh : '%d Stunden',
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/dv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/dv.js
new file mode 100644
index 00000000000..9490e3feae7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/dv.js
@@ -0,0 +1,89 @@
+//! moment.js locale configuration
+//! locale : Maldivian [dv]
+//! author : Jawish Hameed : https://github.com/jawish
+
+import moment from '../moment';
+
+var months = [
+ 'ޖެނުއަރީ',
+ 'ފެބްރުއަރީ',
+ 'މާރިޗު',
+ 'އޭޕްރީލު',
+ 'މޭ',
+ 'ޖޫން',
+ 'ޖުލައި',
+ 'އޯގަސްޓު',
+ 'ސެޕްޓެމްބަރު',
+ 'އޮކްޓޯބަރު',
+ 'ނޮވެމްބަރު',
+ 'ޑިސެމްބަރު'
+], weekdays = [
+ 'އާދިއްތަ',
+ 'ހޯމަ',
+ 'އަންގާރަ',
+ 'ބުދަ',
+ 'ބުރާސްފަތި',
+ 'ހުކުރު',
+ 'ހޮނިހިރު'
+];
+
+export default moment.defineLocale('dv', {
+ months : months,
+ monthsShort : months,
+ weekdays : weekdays,
+ weekdaysShort : weekdays,
+ weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
+ longDateFormat : {
+
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'D/M/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /މކ|މފ/,
+ isPM : function (input) {
+ return 'މފ' === input;
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'މކ';
+ } else {
+ return 'މފ';
+ }
+ },
+ calendar : {
+ sameDay : '[މިއަދު] LT',
+ nextDay : '[މާދަމާ] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[އިއްޔެ] LT',
+ lastWeek : '[ފާއިތުވި] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ތެރޭގައި %s',
+ past : 'ކުރިން %s',
+ s : 'ސިކުންތުކޮޅެއް',
+ m : 'މިނިޓެއް',
+ mm : 'މިނިޓު %d',
+ h : 'ގަޑިއިރެއް',
+ hh : 'ގަޑިއިރު %d',
+ d : 'ދުވަހެއް',
+ dd : 'ދުވަސް %d',
+ M : 'މަހެއް',
+ MM : 'މަސް %d',
+ y : 'އަހަރެއް',
+ yy : 'އަހަރު %d'
+ },
+ preparse: function (string) {
+ return string.replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/,/g, '،');
+ },
+ week : {
+ dow : 7, // Sunday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/el.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/el.js
new file mode 100644
index 00000000000..e157a6352db
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/el.js
@@ -0,0 +1,86 @@
+//! moment.js locale configuration
+//! locale : Greek [el]
+//! author : Aggelos Karalias : https://github.com/mehiel
+
+import moment from '../moment';
+import isFunction from '../lib/utils/is-function';
+
+export default moment.defineLocale('el', {
+ monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),
+ monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),
+ months : function (momentToFormat, format) {
+ if (/D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'
+ return this._monthsGenitiveEl[momentToFormat.month()];
+ } else {
+ return this._monthsNominativeEl[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
+ weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),
+ weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
+ weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'μμ' : 'ΜΜ';
+ } else {
+ return isLower ? 'πμ' : 'ΠΜ';
+ }
+ },
+ isPM : function (input) {
+ return ((input + '').toLowerCase()[0] === 'μ');
+ },
+ meridiemParse : /[ΠΜ]\.?Μ?\.?/i,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendarEl : {
+ sameDay : '[Σήμερα {}] LT',
+ nextDay : '[Αύριο {}] LT',
+ nextWeek : 'dddd [{}] LT',
+ lastDay : '[Χθες {}] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 6:
+ return '[το προηγούμενο] dddd [{}] LT';
+ default:
+ return '[την προηγούμενη] dddd [{}] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ calendar : function (key, mom) {
+ var output = this._calendarEl[key],
+ hours = mom && mom.hours();
+ if (isFunction(output)) {
+ output = output.apply(mom);
+ }
+ return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));
+ },
+ relativeTime : {
+ future : 'σε %s',
+ past : '%s πριν',
+ s : 'λίγα δευτερόλεπτα',
+ m : 'ένα λεπτό',
+ mm : '%d λεπτά',
+ h : 'μία ώρα',
+ hh : '%d ώρες',
+ d : 'μία μέρα',
+ dd : '%d μέρες',
+ M : 'ένας μήνας',
+ MM : '%d μήνες',
+ y : 'ένας χρόνος',
+ yy : '%d χρόνια'
+ },
+ ordinalParse: /\d{1,2}η/,
+ ordinal: '%dη',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-au.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-au.js
new file mode 100644
index 00000000000..5f714095280
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-au.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : English (Australia) [en-au]
+//! author : Jared Morse : https://github.com/jarcoal
+
+import moment from '../moment';
+
+export default moment.defineLocale('en-au', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ca.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ca.js
new file mode 100644
index 00000000000..a678eab57d8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ca.js
@@ -0,0 +1,53 @@
+//! moment.js locale configuration
+//! locale : English (Canada) [en-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+import moment from '../moment';
+
+export default moment.defineLocale('en-ca', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'YYYY-MM-DD',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY h:mm A',
+ LLLL : 'dddd, MMMM D, YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-gb.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-gb.js
new file mode 100644
index 00000000000..f551112d7fb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-gb.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : English (United Kingdom) [en-gb]
+//! author : Chris Gedrim : https://github.com/chrisgedrim
+
+import moment from '../moment';
+
+export default moment.defineLocale('en-gb', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ie.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ie.js
new file mode 100644
index 00000000000..3447973e3ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-ie.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : English (Ireland) [en-ie]
+//! author : Chris Cartlidge : https://github.com/chriscartlidge
+
+import moment from '../moment';
+
+export default moment.defineLocale('en-ie', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-nz.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-nz.js
new file mode 100644
index 00000000000..8413be1c25c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/en-nz.js
@@ -0,0 +1,57 @@
+//! moment.js locale configuration
+//! locale : English (New Zealand) [en-nz]
+//! author : Luke McGregor : https://github.com/lukemcgregor
+
+import moment from '../moment';
+
+export default moment.defineLocale('en-nz', {
+ months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
+ weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),
+ weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
+ weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Today at] LT',
+ nextDay : '[Tomorrow at] LT',
+ nextWeek : 'dddd [at] LT',
+ lastDay : '[Yesterday at] LT',
+ lastWeek : '[Last] dddd [at] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'in %s',
+ past : '%s ago',
+ s : 'a few seconds',
+ m : 'a minute',
+ mm : '%d minutes',
+ h : 'an hour',
+ hh : '%d hours',
+ d : 'a day',
+ dd : '%d days',
+ M : 'a month',
+ MM : '%d months',
+ y : 'a year',
+ yy : '%d years'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eo.js
new file mode 100644
index 00000000000..e8df29f863a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eo.js
@@ -0,0 +1,64 @@
+//! moment.js locale configuration
+//! locale : Esperanto [eo]
+//! author : Colin Dean : https://github.com/colindean
+//! komento: Mi estas malcerta se mi korekte traktis akuzativojn en tiu traduko.
+//! Se ne, bonvolu korekti kaj avizi min por ke mi povas lerni!
+
+import moment from '../moment';
+
+export default moment.defineLocale('eo', {
+ months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),
+ weekdays : 'Dimanĉo_Lundo_Mardo_Merkredo_Ĵaŭdo_Vendredo_Sabato'.split('_'),
+ weekdaysShort : 'Dim_Lun_Mard_Merk_Ĵaŭ_Ven_Sab'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Ĵa_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D[-an de] MMMM, YYYY',
+ LLL : 'D[-an de] MMMM, YYYY HH:mm',
+ LLLL : 'dddd, [la] D[-an de] MMMM, YYYY HH:mm'
+ },
+ meridiemParse: /[ap]\.t\.m/i,
+ isPM: function (input) {
+ return input.charAt(0).toLowerCase() === 'p';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'p.t.m.' : 'P.T.M.';
+ } else {
+ return isLower ? 'a.t.m.' : 'A.T.M.';
+ }
+ },
+ calendar : {
+ sameDay : '[Hodiaŭ je] LT',
+ nextDay : '[Morgaŭ je] LT',
+ nextWeek : 'dddd [je] LT',
+ lastDay : '[Hieraŭ je] LT',
+ lastWeek : '[pasinta] dddd [je] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'je %s',
+ past : 'antaŭ %s',
+ s : 'sekundoj',
+ m : 'minuto',
+ mm : '%d minutoj',
+ h : 'horo',
+ hh : '%d horoj',
+ d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo
+ dd : '%d tagoj',
+ M : 'monato',
+ MM : '%d monatoj',
+ y : 'jaro',
+ yy : '%d jaroj'
+ },
+ ordinalParse: /\d{1,2}a/,
+ ordinal : '%da',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es-do.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es-do.js
new file mode 100644
index 00000000000..21a44ab89a1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es-do.js
@@ -0,0 +1,71 @@
+//! moment.js locale configuration
+//! locale : Spanish (Dominican Republic) [es-do]
+
+import moment from '../moment';
+
+var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+ monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+export default moment.defineLocale('es-do', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort[m.month()];
+ } else {
+ return monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY h:mm A',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es.js
new file mode 100644
index 00000000000..cc971615a96
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/es.js
@@ -0,0 +1,72 @@
+//! moment.js locale configuration
+//! locale : Spanish [es]
+//! author : Julio Napurí : https://github.com/julionc
+
+import moment from '../moment';
+
+var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),
+ monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');
+
+export default moment.defineLocale('es', {
+ months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShort[m.month()];
+ } else {
+ return monthsShortDot[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastDay : function () {
+ return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ lastWeek : function () {
+ return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'en %s',
+ past : 'hace %s',
+ s : 'unos segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'una hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un año',
+ yy : '%d años'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/et.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/et.js
new file mode 100644
index 00000000000..f8a718ba661
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/et.js
@@ -0,0 +1,71 @@
+//! moment.js locale configuration
+//! locale : Estonian [et]
+//! author : Henry Kehlmann : https://github.com/madhenry
+//! improvements : Illimar Tambek : https://github.com/ragulka
+
+import moment from '../moment';
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
+ 'm' : ['ühe minuti', 'üks minut'],
+ 'mm': [number + ' minuti', number + ' minutit'],
+ 'h' : ['ühe tunni', 'tund aega', 'üks tund'],
+ 'hh': [number + ' tunni', number + ' tundi'],
+ 'd' : ['ühe päeva', 'üks päev'],
+ 'M' : ['kuu aja', 'kuu aega', 'üks kuu'],
+ 'MM': [number + ' kuu', number + ' kuud'],
+ 'y' : ['ühe aasta', 'aasta', 'üks aasta'],
+ 'yy': [number + ' aasta', number + ' aastat']
+ };
+ if (withoutSuffix) {
+ return format[key][2] ? format[key][2] : format[key][1];
+ }
+ return isFuture ? format[key][0] : format[key][1];
+}
+
+export default moment.defineLocale('et', {
+ months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),
+ monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),
+ weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),
+ weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),
+ weekdaysMin : 'P_E_T_K_N_R_L'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Täna,] LT',
+ nextDay : '[Homme,] LT',
+ nextWeek : '[Järgmine] dddd LT',
+ lastDay : '[Eile,] LT',
+ lastWeek : '[Eelmine] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s pärast',
+ past : '%s tagasi',
+ s : processRelativeTime,
+ m : processRelativeTime,
+ mm : processRelativeTime,
+ h : processRelativeTime,
+ hh : processRelativeTime,
+ d : processRelativeTime,
+ dd : '%d päeva',
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eu.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eu.js
new file mode 100644
index 00000000000..390819b65b9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/eu.js
@@ -0,0 +1,57 @@
+//! moment.js locale configuration
+//! locale : Basque [eu]
+//! author : Eneko Illarramendi : https://github.com/eillarra
+
+import moment from '../moment';
+
+export default moment.defineLocale('eu', {
+ months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),
+ monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),
+ weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),
+ weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY[ko] MMMM[ren] D[a]',
+ LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',
+ LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
+ l : 'YYYY-M-D',
+ ll : 'YYYY[ko] MMM D[a]',
+ lll : 'YYYY[ko] MMM D[a] HH:mm',
+ llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'
+ },
+ calendar : {
+ sameDay : '[gaur] LT[etan]',
+ nextDay : '[bihar] LT[etan]',
+ nextWeek : 'dddd LT[etan]',
+ lastDay : '[atzo] LT[etan]',
+ lastWeek : '[aurreko] dddd LT[etan]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s barru',
+ past : 'duela %s',
+ s : 'segundo batzuk',
+ m : 'minutu bat',
+ mm : '%d minutu',
+ h : 'ordu bat',
+ hh : '%d ordu',
+ d : 'egun bat',
+ dd : '%d egun',
+ M : 'hilabete bat',
+ MM : '%d hilabete',
+ y : 'urte bat',
+ yy : '%d urte'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fa.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fa.js
new file mode 100644
index 00000000000..634c2c19dbb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fa.js
@@ -0,0 +1,97 @@
+//! moment.js locale configuration
+//! locale : Persian [fa]
+//! author : Ebrahim Byagowi : https://github.com/ebraminio
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '۱',
+ '2': '۲',
+ '3': '۳',
+ '4': '۴',
+ '5': '۵',
+ '6': '۶',
+ '7': '۷',
+ '8': '۸',
+ '9': '۹',
+ '0': '۰'
+}, numberMap = {
+ '۱': '1',
+ '۲': '2',
+ '۳': '3',
+ '۴': '4',
+ '۵': '5',
+ '۶': '6',
+ '۷': '7',
+ '۸': '8',
+ '۹': '9',
+ '۰': '0'
+};
+
+export default moment.defineLocale('fa', {
+ months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),
+ weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'),
+ weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /قبل از ظهر|بعد از ظهر/,
+ isPM: function (input) {
+ return /بعد از ظهر/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'قبل از ظهر';
+ } else {
+ return 'بعد از ظهر';
+ }
+ },
+ calendar : {
+ sameDay : '[امروز ساعت] LT',
+ nextDay : '[فردا ساعت] LT',
+ nextWeek : 'dddd [ساعت] LT',
+ lastDay : '[دیروز ساعت] LT',
+ lastWeek : 'dddd [پیش] [ساعت] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'در %s',
+ past : '%s پیش',
+ s : 'چندین ثانیه',
+ m : 'یک دقیقه',
+ mm : '%d دقیقه',
+ h : 'یک ساعت',
+ hh : '%d ساعت',
+ d : 'یک روز',
+ dd : '%d روز',
+ M : 'یک ماه',
+ MM : '%d ماه',
+ y : 'یک سال',
+ yy : '%d سال'
+ },
+ preparse: function (string) {
+ return string.replace(/[۰-۹]/g, function (match) {
+ return numberMap[match];
+ }).replace(/،/g, ',');
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ }).replace(/,/g, '،');
+ },
+ ordinalParse: /\d{1,2}م/,
+ ordinal : '%dم',
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fi.js
new file mode 100644
index 00000000000..f91e1280b95
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fi.js
@@ -0,0 +1,98 @@
+//! moment.js locale configuration
+//! locale : Finnish [fi]
+//! author : Tarmo Aidantausta : https://github.com/bleadof
+
+import moment from '../moment';
+
+var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
+ numbersFuture = [
+ 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
+ numbersPast[7], numbersPast[8], numbersPast[9]
+ ];
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = '';
+ switch (key) {
+ case 's':
+ return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
+ case 'm':
+ return isFuture ? 'minuutin' : 'minuutti';
+ case 'mm':
+ result = isFuture ? 'minuutin' : 'minuuttia';
+ break;
+ case 'h':
+ return isFuture ? 'tunnin' : 'tunti';
+ case 'hh':
+ result = isFuture ? 'tunnin' : 'tuntia';
+ break;
+ case 'd':
+ return isFuture ? 'päivän' : 'päivä';
+ case 'dd':
+ result = isFuture ? 'päivän' : 'päivää';
+ break;
+ case 'M':
+ return isFuture ? 'kuukauden' : 'kuukausi';
+ case 'MM':
+ result = isFuture ? 'kuukauden' : 'kuukautta';
+ break;
+ case 'y':
+ return isFuture ? 'vuoden' : 'vuosi';
+ case 'yy':
+ result = isFuture ? 'vuoden' : 'vuotta';
+ break;
+ }
+ result = verbalNumber(number, isFuture) + ' ' + result;
+ return result;
+}
+function verbalNumber(number, isFuture) {
+ return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
+}
+
+export default moment.defineLocale('fi', {
+ months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
+ monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
+ weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
+ weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'Do MMMM[ta] YYYY',
+ LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
+ LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
+ l : 'D.M.YYYY',
+ ll : 'Do MMM YYYY',
+ lll : 'Do MMM YYYY, [klo] HH.mm',
+ llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
+ },
+ calendar : {
+ sameDay : '[tänään] [klo] LT',
+ nextDay : '[huomenna] [klo] LT',
+ nextWeek : 'dddd [klo] LT',
+ lastDay : '[eilen] [klo] LT',
+ lastWeek : '[viime] dddd[na] [klo] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s päästä',
+ past : '%s sitten',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fo.js
new file mode 100644
index 00000000000..e3b169d74c4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fo.js
@@ -0,0 +1,51 @@
+//! moment.js locale configuration
+//! locale : Faroese [fo]
+//! author : Ragnar Johannesen : https://github.com/ragnar123
+
+import moment from '../moment';
+
+export default moment.defineLocale('fo', {
+ months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),
+ weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
+ weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D. MMMM, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Í dag kl.] LT',
+ nextDay : '[Í morgin kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[Í gjár kl.] LT',
+ lastWeek : '[síðstu] dddd [kl] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'um %s',
+ past : '%s síðani',
+ s : 'fá sekund',
+ m : 'ein minutt',
+ mm : '%d minuttir',
+ h : 'ein tími',
+ hh : '%d tímar',
+ d : 'ein dagur',
+ dd : '%d dagar',
+ M : 'ein mánaði',
+ MM : '%d mánaðir',
+ y : 'eitt ár',
+ yy : '%d ár'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ca.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ca.js
new file mode 100644
index 00000000000..07b3de18d48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ca.js
@@ -0,0 +1,51 @@
+//! moment.js locale configuration
+//! locale : French (Canada) [fr-ca]
+//! author : Jonathan Abourbih : https://github.com/jonbca
+
+import moment from '../moment';
+
+export default moment.defineLocale('fr-ca', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ch.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ch.js
new file mode 100644
index 00000000000..ea0d291a4e5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr-ch.js
@@ -0,0 +1,55 @@
+//! moment.js locale configuration
+//! locale : French (Switzerland) [fr-ch]
+//! author : Gaspard Bucher : https://github.com/gaspard
+
+import moment from '../moment';
+
+export default moment.defineLocale('fr-ch', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|e)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : 'e');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr.js
new file mode 100644
index 00000000000..6e704d1d0f4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fr.js
@@ -0,0 +1,55 @@
+//! moment.js locale configuration
+//! locale : French [fr]
+//! author : John Fischer : https://github.com/jfroffice
+
+import moment from '../moment';
+
+export default moment.defineLocale('fr', {
+ months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
+ monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
+ weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
+ weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Aujourd\'hui à] LT',
+ nextDay: '[Demain à] LT',
+ nextWeek: 'dddd [à] LT',
+ lastDay: '[Hier à] LT',
+ lastWeek: 'dddd [dernier à] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dans %s',
+ past : 'il y a %s',
+ s : 'quelques secondes',
+ m : 'une minute',
+ mm : '%d minutes',
+ h : 'une heure',
+ hh : '%d heures',
+ d : 'un jour',
+ dd : '%d jours',
+ M : 'un mois',
+ MM : '%d mois',
+ y : 'un an',
+ yy : '%d ans'
+ },
+ ordinalParse: /\d{1,2}(er|)/,
+ ordinal : function (number) {
+ return number + (number === 1 ? 'er' : '');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fy.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fy.js
new file mode 100644
index 00000000000..5861a772657
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/fy.js
@@ -0,0 +1,64 @@
+//! moment.js locale configuration
+//! locale : Frisian [fy]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+
+import moment from '../moment';
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),
+ monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');
+
+export default moment.defineLocale('fy', {
+ months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+ monthsParseExact : true,
+ weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),
+ weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),
+ weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[hjoed om] LT',
+ nextDay: '[moarn om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[juster om] LT',
+ lastWeek: '[ôfrûne] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'oer %s',
+ past : '%s lyn',
+ s : 'in pear sekonden',
+ m : 'ien minút',
+ mm : '%d minuten',
+ h : 'ien oere',
+ hh : '%d oeren',
+ d : 'ien dei',
+ dd : '%d dagen',
+ M : 'ien moanne',
+ MM : '%d moannen',
+ y : 'ien jier',
+ yy : '%d jierren'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gd.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gd.js
new file mode 100644
index 00000000000..3ec664e476c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gd.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : Scottish Gaelic [gd]
+//! author : Jon Ashdown : https://github.com/jonashdown
+
+import moment from '../moment';
+
+var months = [
+ 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'
+];
+
+var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];
+
+var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];
+
+var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];
+
+var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
+
+export default moment.defineLocale('gd', {
+ months : months,
+ monthsShort : monthsShort,
+ monthsParseExact : true,
+ weekdays : weekdays,
+ weekdaysShort : weekdaysShort,
+ weekdaysMin : weekdaysMin,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[An-diugh aig] LT',
+ nextDay : '[A-màireach aig] LT',
+ nextWeek : 'dddd [aig] LT',
+ lastDay : '[An-dè aig] LT',
+ lastWeek : 'dddd [seo chaidh] [aig] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ann an %s',
+ past : 'bho chionn %s',
+ s : 'beagan diogan',
+ m : 'mionaid',
+ mm : '%d mionaidean',
+ h : 'uair',
+ hh : '%d uairean',
+ d : 'latha',
+ dd : '%d latha',
+ M : 'mìos',
+ MM : '%d mìosan',
+ y : 'bliadhna',
+ yy : '%d bliadhna'
+ },
+ ordinalParse : /\d{1,2}(d|na|mh)/,
+ ordinal : function (number) {
+ var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gl.js
new file mode 100644
index 00000000000..d0ea61d49b8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/gl.js
@@ -0,0 +1,68 @@
+//! moment.js locale configuration
+//! locale : Galician [gl]
+//! author : Juan G. Hurtado : https://github.com/juanghurtado
+
+import moment from '../moment';
+
+export default moment.defineLocale('gl', {
+ months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),
+ monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
+ weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
+ weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY H:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
+ },
+ calendar : {
+ sameDay : function () {
+ return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextDay : function () {
+ return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';
+ },
+ nextWeek : function () {
+ return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ lastDay : function () {
+ return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';
+ },
+ lastWeek : function () {
+ return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (str) {
+ if (str.indexOf('un') === 0) {
+ return 'n' + str;
+ }
+ return 'en ' + str;
+ },
+ past : 'hai %s',
+ s : 'uns segundos',
+ m : 'un minuto',
+ mm : '%d minutos',
+ h : 'unha hora',
+ hh : '%d horas',
+ d : 'un día',
+ dd : '%d días',
+ M : 'un mes',
+ MM : '%d meses',
+ y : 'un ano',
+ yy : '%d anos'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/he.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/he.js
new file mode 100644
index 00000000000..b6a1944b57f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/he.js
@@ -0,0 +1,90 @@
+//! moment.js locale configuration
+//! locale : Hebrew [he]
+//! author : Tomer Cohen : https://github.com/tomer
+//! author : Moshe Simantov : https://github.com/DevelopmentIL
+//! author : Tal Ater : https://github.com/TalAter
+
+import moment from '../moment';
+
+export default moment.defineLocale('he', {
+ months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),
+ monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),
+ weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
+ weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
+ weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [ב]MMMM YYYY',
+ LLL : 'D [ב]MMMM YYYY HH:mm',
+ LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',
+ l : 'D/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[היום ב־]LT',
+ nextDay : '[מחר ב־]LT',
+ nextWeek : 'dddd [בשעה] LT',
+ lastDay : '[אתמול ב־]LT',
+ lastWeek : '[ביום] dddd [האחרון בשעה] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'בעוד %s',
+ past : 'לפני %s',
+ s : 'מספר שניות',
+ m : 'דקה',
+ mm : '%d דקות',
+ h : 'שעה',
+ hh : function (number) {
+ if (number === 2) {
+ return 'שעתיים';
+ }
+ return number + ' שעות';
+ },
+ d : 'יום',
+ dd : function (number) {
+ if (number === 2) {
+ return 'יומיים';
+ }
+ return number + ' ימים';
+ },
+ M : 'חודש',
+ MM : function (number) {
+ if (number === 2) {
+ return 'חודשיים';
+ }
+ return number + ' חודשים';
+ },
+ y : 'שנה',
+ yy : function (number) {
+ if (number === 2) {
+ return 'שנתיים';
+ } else if (number % 10 === 0 && number !== 10) {
+ return number + ' שנה';
+ }
+ return number + ' שנים';
+ }
+ },
+ meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
+ isPM : function (input) {
+ return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 5) {
+ return 'לפנות בוקר';
+ } else if (hour < 10) {
+ return 'בבוקר';
+ } else if (hour < 12) {
+ return isLower ? 'לפנה"צ' : 'לפני הצהריים';
+ } else if (hour < 18) {
+ return isLower ? 'אחה"צ' : 'אחרי הצהריים';
+ } else {
+ return 'בערב';
+ }
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hi.js
new file mode 100644
index 00000000000..30a50e4ebe1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hi.js
@@ -0,0 +1,115 @@
+//! moment.js locale configuration
+//! locale : Hindi [hi]
+//! author : Mayank Singhal : https://github.com/mayanksinghal
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+},
+numberMap = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+export default moment.defineLocale('hi', {
+ months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),
+ monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm बजे',
+ LTS : 'A h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[कल] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[कल] LT',
+ lastWeek : '[पिछले] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s में',
+ past : '%s पहले',
+ s : 'कुछ ही क्षण',
+ m : 'एक मिनट',
+ mm : '%d मिनट',
+ h : 'एक घंटा',
+ hh : '%d घंटे',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महीने',
+ MM : '%d महीने',
+ y : 'एक वर्ष',
+ yy : '%d वर्ष'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ // Hindi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
+ meridiemParse: /रात|सुबह|दोपहर|शाम/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सुबह') {
+ return hour;
+ } else if (meridiem === 'दोपहर') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'शाम') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात';
+ } else if (hour < 10) {
+ return 'सुबह';
+ } else if (hour < 17) {
+ return 'दोपहर';
+ } else if (hour < 20) {
+ return 'शाम';
+ } else {
+ return 'रात';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hr.js
new file mode 100644
index 00000000000..84878ad094a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hr.js
@@ -0,0 +1,135 @@
+//! moment.js locale configuration
+//! locale : Croatian [hr]
+//! author : Bojan Marković : https://github.com/bmarkovic
+
+import moment from '../moment';
+
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'jedna minuta' : 'jedne minute';
+ case 'mm':
+ if (number === 1) {
+ result += 'minuta';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'minute';
+ } else {
+ result += 'minuta';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'jedan sat' : 'jednog sata';
+ case 'hh':
+ if (number === 1) {
+ result += 'sat';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'sata';
+ } else {
+ result += 'sati';
+ }
+ return result;
+ case 'dd':
+ if (number === 1) {
+ result += 'dan';
+ } else {
+ result += 'dana';
+ }
+ return result;
+ case 'MM':
+ if (number === 1) {
+ result += 'mjesec';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'mjeseca';
+ } else {
+ result += 'mjeseci';
+ }
+ return result;
+ case 'yy':
+ if (number === 1) {
+ result += 'godina';
+ } else if (number === 2 || number === 3 || number === 4) {
+ result += 'godine';
+ } else {
+ result += 'godina';
+ }
+ return result;
+ }
+}
+
+export default moment.defineLocale('hr', {
+ months : {
+ format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),
+ standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')
+ },
+ monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danas u] LT',
+ nextDay : '[sutra u] LT',
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[jučer u] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ return '[prošlu] dddd [u] LT';
+ case 6:
+ return '[prošle] [subote] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prošli] dddd [u] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'par sekundi',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : 'dan',
+ dd : translate,
+ M : 'mjesec',
+ MM : translate,
+ y : 'godinu',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hu.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hu.js
new file mode 100644
index 00000000000..0cffecf836d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hu.js
@@ -0,0 +1,100 @@
+//! moment.js locale configuration
+//! locale : Hungarian [hu]
+//! author : Adam Brunner : https://github.com/adambrunner
+
+import moment from '../moment';
+
+var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');
+function translate(number, withoutSuffix, key, isFuture) {
+ var num = number,
+ suffix;
+ switch (key) {
+ case 's':
+ return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';
+ case 'm':
+ return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'mm':
+ return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
+ case 'h':
+ return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'hh':
+ return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
+ case 'd':
+ return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'dd':
+ return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
+ case 'M':
+ return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'MM':
+ return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
+ case 'y':
+ return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
+ case 'yy':
+ return num + (isFuture || withoutSuffix ? ' év' : ' éve');
+ }
+ return '';
+}
+function week(isFuture) {
+ return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';
+}
+
+export default moment.defineLocale('hu', {
+ months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),
+ monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),
+ weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
+ weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
+ weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY.MM.DD.',
+ LL : 'YYYY. MMMM D.',
+ LLL : 'YYYY. MMMM D. H:mm',
+ LLLL : 'YYYY. MMMM D., dddd H:mm'
+ },
+ meridiemParse: /de|du/i,
+ isPM: function (input) {
+ return input.charAt(1).toLowerCase() === 'u';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower === true ? 'de' : 'DE';
+ } else {
+ return isLower === true ? 'du' : 'DU';
+ }
+ },
+ calendar : {
+ sameDay : '[ma] LT[-kor]',
+ nextDay : '[holnap] LT[-kor]',
+ nextWeek : function () {
+ return week.call(this, true);
+ },
+ lastDay : '[tegnap] LT[-kor]',
+ lastWeek : function () {
+ return week.call(this, false);
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s múlva',
+ past : '%s',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hy-am.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hy-am.js
new file mode 100644
index 00000000000..bc50205e03a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/hy-am.js
@@ -0,0 +1,86 @@
+//! moment.js locale configuration
+//! locale : Armenian [hy-am]
+//! author : Armendarabyan : https://github.com/armendarabyan
+
+import moment from '../moment';
+
+export default moment.defineLocale('hy-am', {
+ months : {
+ format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),
+ standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')
+ },
+ monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
+ weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),
+ weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY թ.',
+ LLL : 'D MMMM YYYY թ., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY թ., HH:mm'
+ },
+ calendar : {
+ sameDay: '[այսօր] LT',
+ nextDay: '[վաղը] LT',
+ lastDay: '[երեկ] LT',
+ nextWeek: function () {
+ return 'dddd [օրը ժամը] LT';
+ },
+ lastWeek: function () {
+ return '[անցած] dddd [օրը ժամը] LT';
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s հետո',
+ past : '%s առաջ',
+ s : 'մի քանի վայրկյան',
+ m : 'րոպե',
+ mm : '%d րոպե',
+ h : 'ժամ',
+ hh : '%d ժամ',
+ d : 'օր',
+ dd : '%d օր',
+ M : 'ամիս',
+ MM : '%d ամիս',
+ y : 'տարի',
+ yy : '%d տարի'
+ },
+ meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
+ isPM: function (input) {
+ return /^(ցերեկվա|երեկոյան)$/.test(input);
+ },
+ meridiem : function (hour) {
+ if (hour < 4) {
+ return 'գիշերվա';
+ } else if (hour < 12) {
+ return 'առավոտվա';
+ } else if (hour < 17) {
+ return 'ցերեկվա';
+ } else {
+ return 'երեկոյան';
+ }
+ },
+ ordinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'DDD':
+ case 'w':
+ case 'W':
+ case 'DDDo':
+ if (number === 1) {
+ return number + '-ին';
+ }
+ return number + '-րդ';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/id.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/id.js
new file mode 100644
index 00000000000..ab4204e5873
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/id.js
@@ -0,0 +1,74 @@
+//! moment.js locale configuration
+//! locale : Indonesian [id]
+//! author : Mohammad Satrio Utomo : https://github.com/tyok
+//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
+
+import moment from '../moment';
+
+export default moment.defineLocale('id', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|siang|sore|malam/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'siang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sore' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'siang';
+ } else if (hours < 19) {
+ return 'sore';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Besok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kemarin pukul] LT',
+ lastWeek : 'dddd [lalu pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lalu',
+ s : 'beberapa detik',
+ m : 'semenit',
+ mm : '%d menit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/is.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/is.js
new file mode 100644
index 00000000000..22f873d0b20
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/is.js
@@ -0,0 +1,118 @@
+//! moment.js locale configuration
+//! locale : Icelandic [is]
+//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
+
+import moment from '../moment';
+
+function plural(n) {
+ if (n % 100 === 11) {
+ return true;
+ } else if (n % 10 === 1) {
+ return false;
+ }
+ return true;
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';
+ case 'm':
+ return withoutSuffix ? 'mínúta' : 'mínútu';
+ case 'mm':
+ if (plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');
+ } else if (withoutSuffix) {
+ return result + 'mínúta';
+ }
+ return result + 'mínútu';
+ case 'hh':
+ if (plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');
+ }
+ return result + 'klukkustund';
+ case 'd':
+ if (withoutSuffix) {
+ return 'dagur';
+ }
+ return isFuture ? 'dag' : 'degi';
+ case 'dd':
+ if (plural(number)) {
+ if (withoutSuffix) {
+ return result + 'dagar';
+ }
+ return result + (isFuture ? 'daga' : 'dögum');
+ } else if (withoutSuffix) {
+ return result + 'dagur';
+ }
+ return result + (isFuture ? 'dag' : 'degi');
+ case 'M':
+ if (withoutSuffix) {
+ return 'mánuður';
+ }
+ return isFuture ? 'mánuð' : 'mánuði';
+ case 'MM':
+ if (plural(number)) {
+ if (withoutSuffix) {
+ return result + 'mánuðir';
+ }
+ return result + (isFuture ? 'mánuði' : 'mánuðum');
+ } else if (withoutSuffix) {
+ return result + 'mánuður';
+ }
+ return result + (isFuture ? 'mánuð' : 'mánuði');
+ case 'y':
+ return withoutSuffix || isFuture ? 'ár' : 'ári';
+ case 'yy':
+ if (plural(number)) {
+ return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
+ }
+ return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
+ }
+}
+
+export default moment.defineLocale('is', {
+ months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
+ weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),
+ weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
+ weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'
+ },
+ calendar : {
+ sameDay : '[í dag kl.] LT',
+ nextDay : '[á morgun kl.] LT',
+ nextWeek : 'dddd [kl.] LT',
+ lastDay : '[í gær kl.] LT',
+ lastWeek : '[síðasta] dddd [kl.] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'eftir %s',
+ past : 'fyrir %s síðan',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : 'klukkustund',
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/it.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/it.js
new file mode 100644
index 00000000000..0b47212e226
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/it.js
@@ -0,0 +1,61 @@
+//! moment.js locale configuration
+//! locale : Italian [it]
+//! author : Lorenzo : https://github.com/aliem
+//! author: Mattia Larentis: https://github.com/nostalgiaz
+
+import moment from '../moment';
+
+export default moment.defineLocale('it', {
+ months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),
+ monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
+ weekdays : 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'),
+ weekdaysShort : 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'),
+ weekdaysMin : 'Do_Lu_Ma_Me_Gi_Ve_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Oggi alle] LT',
+ nextDay: '[Domani alle] LT',
+ nextWeek: 'dddd [alle] LT',
+ lastDay: '[Ieri alle] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[la scorsa] dddd [alle] LT';
+ default:
+ return '[lo scorso] dddd [alle] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;
+ },
+ past : '%s fa',
+ s : 'alcuni secondi',
+ m : 'un minuto',
+ mm : '%d minuti',
+ h : 'un\'ora',
+ hh : '%d ore',
+ d : 'un giorno',
+ dd : '%d giorni',
+ M : 'un mese',
+ MM : '%d mesi',
+ y : 'un anno',
+ yy : '%d anni'
+ },
+ ordinalParse : /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ja.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ja.js
new file mode 100644
index 00000000000..38a262ed3dc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ja.js
@@ -0,0 +1,67 @@
+//! moment.js locale configuration
+//! locale : Japanese [ja]
+//! author : LI Long : https://github.com/baryon
+
+import moment from '../moment';
+
+export default moment.defineLocale('ja', {
+ months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
+ weekdaysShort : '日_月_火_水_木_金_土'.split('_'),
+ weekdaysMin : '日_月_火_水_木_金_土'.split('_'),
+ longDateFormat : {
+ LT : 'Ah時m分',
+ LTS : 'Ah時m分s秒',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY年M月D日',
+ LLL : 'YYYY年M月D日Ah時m分',
+ LLLL : 'YYYY年M月D日Ah時m分 dddd'
+ },
+ meridiemParse: /午前|午後/i,
+ isPM : function (input) {
+ return input === '午後';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return '午前';
+ } else {
+ return '午後';
+ }
+ },
+ calendar : {
+ sameDay : '[今日] LT',
+ nextDay : '[明日] LT',
+ nextWeek : '[来週]dddd LT',
+ lastDay : '[昨日] LT',
+ lastWeek : '[前週]dddd LT',
+ sameElse : 'L'
+ },
+ ordinalParse : /\d{1,2}日/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s後',
+ past : '%s前',
+ s : '数秒',
+ m : '1分',
+ mm : '%d分',
+ h : '1時間',
+ hh : '%d時間',
+ d : '1日',
+ dd : '%d日',
+ M : '1ヶ月',
+ MM : '%dヶ月',
+ y : '1年',
+ yy : '%d年'
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/jv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/jv.js
new file mode 100644
index 00000000000..e5e25f9db16
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/jv.js
@@ -0,0 +1,73 @@
+//! moment.js locale configuration
+//! locale : Javanese [jv]
+//! author : Rony Lantip : https://github.com/lantip
+//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
+
+import moment from '../moment';
+
+export default moment.defineLocale('jv', {
+ months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),
+ monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
+ weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
+ weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
+ weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /enjing|siyang|sonten|ndalu/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'enjing') {
+ return hour;
+ } else if (meridiem === 'siyang') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'enjing';
+ } else if (hours < 15) {
+ return 'siyang';
+ } else if (hours < 19) {
+ return 'sonten';
+ } else {
+ return 'ndalu';
+ }
+ },
+ calendar : {
+ sameDay : '[Dinten puniko pukul] LT',
+ nextDay : '[Mbenjang pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kala wingi pukul] LT',
+ lastWeek : 'dddd [kepengker pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'wonten ing %s',
+ past : '%s ingkang kepengker',
+ s : 'sawetawis detik',
+ m : 'setunggal menit',
+ mm : '%d menit',
+ h : 'setunggal jam',
+ hh : '%d jam',
+ d : 'sedinten',
+ dd : '%d dinten',
+ M : 'sewulan',
+ MM : '%d wulan',
+ y : 'setaun',
+ yy : '%d taun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ka.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ka.js
new file mode 100644
index 00000000000..b03175d629d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ka.js
@@ -0,0 +1,80 @@
+//! moment.js locale configuration
+//! locale : Georgian [ka]
+//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili
+
+import moment from '../moment';
+
+export default moment.defineLocale('ka', {
+ months : {
+ standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),
+ format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')
+ },
+ monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
+ weekdays : {
+ standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),
+ format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),
+ isFormat: /(წინა|შემდეგ)/
+ },
+ weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
+ weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[დღეს] LT[-ზე]',
+ nextDay : '[ხვალ] LT[-ზე]',
+ lastDay : '[გუშინ] LT[-ზე]',
+ nextWeek : '[შემდეგ] dddd LT[-ზე]',
+ lastWeek : '[წინა] dddd LT-ზე',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : function (s) {
+ return (/(წამი|წუთი|საათი|წელი)/).test(s) ?
+ s.replace(/ი$/, 'ში') :
+ s + 'ში';
+ },
+ past : function (s) {
+ if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {
+ return s.replace(/(ი|ე)$/, 'ის წინ');
+ }
+ if ((/წელი/).test(s)) {
+ return s.replace(/წელი$/, 'წლის წინ');
+ }
+ },
+ s : 'რამდენიმე წამი',
+ m : 'წუთი',
+ mm : '%d წუთი',
+ h : 'საათი',
+ hh : '%d საათი',
+ d : 'დღე',
+ dd : '%d დღე',
+ M : 'თვე',
+ MM : '%d თვე',
+ y : 'წელი',
+ yy : '%d წელი'
+ },
+ ordinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
+ ordinal : function (number) {
+ if (number === 0) {
+ return number;
+ }
+ if (number === 1) {
+ return number + '-ლი';
+ }
+ if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {
+ return 'მე-' + number;
+ }
+ return number + '-ე';
+ },
+ week : {
+ dow : 1,
+ doy : 7
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/kk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/kk.js
new file mode 100644
index 00000000000..073405439cc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/kk.js
@@ -0,0 +1,77 @@
+//! moment.js locale configuration
+//! locale : Kazakh [kk]
+//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
+
+import moment from '../moment';
+
+var suffixes = {
+ 0: '-ші',
+ 1: '-ші',
+ 2: '-ші',
+ 3: '-ші',
+ 4: '-ші',
+ 5: '-ші',
+ 6: '-шы',
+ 7: '-ші',
+ 8: '-ші',
+ 9: '-шы',
+ 10: '-шы',
+ 20: '-шы',
+ 30: '-шы',
+ 40: '-шы',
+ 50: '-ші',
+ 60: '-шы',
+ 70: '-ші',
+ 80: '-ші',
+ 90: '-шы',
+ 100: '-ші'
+};
+
+export default moment.defineLocale('kk', {
+ months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),
+ monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
+ weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),
+ weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
+ weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгін сағат] LT',
+ nextDay : '[Ертең сағат] LT',
+ nextWeek : 'dddd [сағат] LT',
+ lastDay : '[Кеше сағат] LT',
+ lastWeek : '[Өткен аптаның] dddd [сағат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ішінде',
+ past : '%s бұрын',
+ s : 'бірнеше секунд',
+ m : 'бір минут',
+ mm : '%d минут',
+ h : 'бір сағат',
+ hh : '%d сағат',
+ d : 'бір күн',
+ dd : '%d күн',
+ M : 'бір ай',
+ MM : '%d ай',
+ y : 'бір жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(ші|шы)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes[number] || suffixes[a] || suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/km.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/km.js
new file mode 100644
index 00000000000..8ae00be7654
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/km.js
@@ -0,0 +1,49 @@
+//! moment.js locale configuration
+//! locale : Cambodian [km]
+//! author : Kruy Vanna : https://github.com/kruyvanna
+
+import moment from '../moment';
+
+export default moment.defineLocale('km', {
+ months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),
+ weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
+ nextDay: '[ស្អែក ម៉ោង] LT',
+ nextWeek: 'dddd [ម៉ោង] LT',
+ lastDay: '[ម្សិលមិញ ម៉ោង] LT',
+ lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: '%sទៀត',
+ past: '%sមុន',
+ s: 'ប៉ុន្មានវិនាទី',
+ m: 'មួយនាទី',
+ mm: '%d នាទី',
+ h: 'មួយម៉ោង',
+ hh: '%d ម៉ោង',
+ d: 'មួយថ្ងៃ',
+ dd: '%d ថ្ងៃ',
+ M: 'មួយខែ',
+ MM: '%d ខែ',
+ y: 'មួយឆ្នាំ',
+ yy: '%d ឆ្នាំ'
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ko.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ko.js
new file mode 100644
index 00000000000..6941fa5261c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ko.js
@@ -0,0 +1,56 @@
+//! moment.js locale configuration
+//! locale : Korean [ko]
+//! author : Kyungwook, Park : https://github.com/kyungw00k
+//! author : Jeeeyul Lee <jeeeyul@gmail.com>
+
+import moment from '../moment';
+
+export default moment.defineLocale('ko', {
+ months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
+ weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
+ weekdaysShort : '일_월_화_수_목_금_토'.split('_'),
+ weekdaysMin : '일_월_화_수_목_금_토'.split('_'),
+ longDateFormat : {
+ LT : 'A h시 m분',
+ LTS : 'A h시 m분 s초',
+ L : 'YYYY.MM.DD',
+ LL : 'YYYY년 MMMM D일',
+ LLL : 'YYYY년 MMMM D일 A h시 m분',
+ LLLL : 'YYYY년 MMMM D일 dddd A h시 m분'
+ },
+ calendar : {
+ sameDay : '오늘 LT',
+ nextDay : '내일 LT',
+ nextWeek : 'dddd LT',
+ lastDay : '어제 LT',
+ lastWeek : '지난주 dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s 후',
+ past : '%s 전',
+ s : '몇 초',
+ ss : '%d초',
+ m : '일분',
+ mm : '%d분',
+ h : '한 시간',
+ hh : '%d시간',
+ d : '하루',
+ dd : '%d일',
+ M : '한 달',
+ MM : '%d달',
+ y : '일 년',
+ yy : '%d년'
+ },
+ ordinalParse : /\d{1,2}일/,
+ ordinal : '%d일',
+ meridiemParse : /오전|오후/,
+ isPM : function (token) {
+ return token === '오후';
+ },
+ meridiem : function (hour, minute, isUpper) {
+ return hour < 12 ? '오전' : '오후';
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ky.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ky.js
new file mode 100644
index 00000000000..566677c8109
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ky.js
@@ -0,0 +1,78 @@
+//! moment.js locale configuration
+//! locale : Kyrgyz [ky]
+//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
+
+
+import moment from '../moment';
+
+var suffixes = {
+ 0: '-чү',
+ 1: '-чи',
+ 2: '-чи',
+ 3: '-чү',
+ 4: '-чү',
+ 5: '-чи',
+ 6: '-чы',
+ 7: '-чи',
+ 8: '-чи',
+ 9: '-чу',
+ 10: '-чу',
+ 20: '-чы',
+ 30: '-чу',
+ 40: '-чы',
+ 50: '-чү',
+ 60: '-чы',
+ 70: '-чи',
+ 80: '-чи',
+ 90: '-чу',
+ 100: '-чү'
+};
+
+export default moment.defineLocale('ky', {
+ months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
+ monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),
+ weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
+ weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бүгүн саат] LT',
+ nextDay : '[Эртең саат] LT',
+ nextWeek : 'dddd [саат] LT',
+ lastDay : '[Кече саат] LT',
+ lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ичинде',
+ past : '%s мурун',
+ s : 'бирнече секунд',
+ m : 'бир мүнөт',
+ mm : '%d мүнөт',
+ h : 'бир саат',
+ hh : '%d саат',
+ d : 'бир күн',
+ dd : '%d күн',
+ M : 'бир ай',
+ MM : '%d ай',
+ y : 'бир жыл',
+ yy : '%d жыл'
+ },
+ ordinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
+ ordinal : function (number) {
+ var a = number % 10,
+ b = number >= 100 ? 100 : null;
+ return number + (suffixes[number] || suffixes[a] || suffixes[b]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lb.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lb.js
new file mode 100644
index 00000000000..843b7adf253
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lb.js
@@ -0,0 +1,128 @@
+//! moment.js locale configuration
+//! locale : Luxembourgish [lb]
+//! author : mweimerskirch : https://github.com/mweimerskirch
+//! author : David Raison : https://github.com/kwisatz
+
+import moment from '../moment';
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 'm': ['eng Minutt', 'enger Minutt'],
+ 'h': ['eng Stonn', 'enger Stonn'],
+ 'd': ['een Dag', 'engem Dag'],
+ 'M': ['ee Mount', 'engem Mount'],
+ 'y': ['ee Joer', 'engem Joer']
+ };
+ return withoutSuffix ? format[key][0] : format[key][1];
+}
+function processFutureTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'a ' + string;
+ }
+ return 'an ' + string;
+}
+function processPastTime(string) {
+ var number = string.substr(0, string.indexOf(' '));
+ if (eifelerRegelAppliesToNumber(number)) {
+ return 'viru ' + string;
+ }
+ return 'virun ' + string;
+}
+/**
+ * Returns true if the word before the given number loses the '-n' ending.
+ * e.g. 'an 10 Deeg' but 'a 5 Deeg'
+ *
+ * @param number {integer}
+ * @returns {boolean}
+ */
+function eifelerRegelAppliesToNumber(number) {
+ number = parseInt(number, 10);
+ if (isNaN(number)) {
+ return false;
+ }
+ if (number < 0) {
+ // Negative Number --> always true
+ return true;
+ } else if (number < 10) {
+ // Only 1 digit
+ if (4 <= number && number <= 7) {
+ return true;
+ }
+ return false;
+ } else if (number < 100) {
+ // 2 digits
+ var lastDigit = number % 10, firstDigit = number / 10;
+ if (lastDigit === 0) {
+ return eifelerRegelAppliesToNumber(firstDigit);
+ }
+ return eifelerRegelAppliesToNumber(lastDigit);
+ } else if (number < 10000) {
+ // 3 or 4 digits --> recursively check first digit
+ while (number >= 10) {
+ number = number / 10;
+ }
+ return eifelerRegelAppliesToNumber(number);
+ } else {
+ // Anything larger than 4 digits: recursively check first n-3 digits
+ number = number / 1000;
+ return eifelerRegelAppliesToNumber(number);
+ }
+}
+
+export default moment.defineLocale('lb', {
+ months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
+ monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),
+ weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
+ weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm [Auer]',
+ LTS: 'H:mm:ss [Auer]',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm [Auer]',
+ LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'
+ },
+ calendar: {
+ sameDay: '[Haut um] LT',
+ sameElse: 'L',
+ nextDay: '[Muer um] LT',
+ nextWeek: 'dddd [um] LT',
+ lastDay: '[Gëschter um] LT',
+ lastWeek: function () {
+ // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
+ switch (this.day()) {
+ case 2:
+ case 4:
+ return '[Leschten] dddd [um] LT';
+ default:
+ return '[Leschte] dddd [um] LT';
+ }
+ }
+ },
+ relativeTime : {
+ future : processFutureTime,
+ past : processPastTime,
+ s : 'e puer Sekonnen',
+ m : processRelativeTime,
+ mm : '%d Minutten',
+ h : processRelativeTime,
+ hh : '%d Stonnen',
+ d : processRelativeTime,
+ dd : '%d Deeg',
+ M : processRelativeTime,
+ MM : '%d Méint',
+ y : processRelativeTime,
+ yy : '%d Joer'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal: '%d.',
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lo.js
new file mode 100644
index 00000000000..5f6ad7d5ca5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lo.js
@@ -0,0 +1,61 @@
+//! moment.js locale configuration
+//! locale : Lao [lo]
+//! author : Ryan Hart : https://github.com/ryanhart2
+
+import moment from '../moment';
+
+export default moment.defineLocale('lo', {
+ months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),
+ weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
+ weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'ວັນdddd D MMMM YYYY HH:mm'
+ },
+ meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
+ isPM: function (input) {
+ return input === 'ຕອນແລງ';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ຕອນເຊົ້າ';
+ } else {
+ return 'ຕອນແລງ';
+ }
+ },
+ calendar : {
+ sameDay : '[ມື້ນີ້ເວລາ] LT',
+ nextDay : '[ມື້ອື່ນເວລາ] LT',
+ nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',
+ lastDay : '[ມື້ວານນີ້ເວລາ] LT',
+ lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ອີກ %s',
+ past : '%sຜ່ານມາ',
+ s : 'ບໍ່ເທົ່າໃດວິນາທີ',
+ m : '1 ນາທີ',
+ mm : '%d ນາທີ',
+ h : '1 ຊົ່ວໂມງ',
+ hh : '%d ຊົ່ວໂມງ',
+ d : '1 ມື້',
+ dd : '%d ມື້',
+ M : '1 ເດືອນ',
+ MM : '%d ເດືອນ',
+ y : '1 ປີ',
+ yy : '%d ປີ'
+ },
+ ordinalParse: /(ທີ່)\d{1,2}/,
+ ordinal : function (number) {
+ return 'ທີ່' + number;
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lt.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lt.js
new file mode 100644
index 00000000000..363f193609d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lt.js
@@ -0,0 +1,108 @@
+//! moment.js locale configuration
+//! locale : Lithuanian [lt]
+//! author : Mindaugas Mozūras : https://github.com/mmozuras
+
+import moment from '../moment';
+
+var units = {
+ 'm' : 'minutė_minutės_minutę',
+ 'mm': 'minutės_minučių_minutes',
+ 'h' : 'valanda_valandos_valandą',
+ 'hh': 'valandos_valandų_valandas',
+ 'd' : 'diena_dienos_dieną',
+ 'dd': 'dienos_dienų_dienas',
+ 'M' : 'mėnuo_mėnesio_mėnesį',
+ 'MM': 'mėnesiai_mėnesių_mėnesius',
+ 'y' : 'metai_metų_metus',
+ 'yy': 'metai_metų_metus'
+};
+function translateSeconds(number, withoutSuffix, key, isFuture) {
+ if (withoutSuffix) {
+ return 'kelios sekundės';
+ } else {
+ return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
+ }
+}
+function translateSingular(number, withoutSuffix, key, isFuture) {
+ return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);
+}
+function special(number) {
+ return number % 10 === 0 || (number > 10 && number < 20);
+}
+function forms(key) {
+ return units[key].split('_');
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ if (number === 1) {
+ return result + translateSingular(number, withoutSuffix, key[0], isFuture);
+ } else if (withoutSuffix) {
+ return result + (special(number) ? forms(key)[1] : forms(key)[0]);
+ } else {
+ if (isFuture) {
+ return result + forms(key)[1];
+ } else {
+ return result + (special(number) ? forms(key)[1] : forms(key)[2]);
+ }
+ }
+}
+export default moment.defineLocale('lt', {
+ months : {
+ format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),
+ standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),
+ isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/
+ },
+ monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
+ weekdays : {
+ format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),
+ standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),
+ isFormat: /dddd HH:mm/
+ },
+ weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
+ weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY [m.] MMMM D [d.]',
+ LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY [m.] MMMM D [d.]',
+ lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
+ llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'
+ },
+ calendar : {
+ sameDay : '[Šiandien] LT',
+ nextDay : '[Rytoj] LT',
+ nextWeek : 'dddd LT',
+ lastDay : '[Vakar] LT',
+ lastWeek : '[Praėjusį] dddd LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'po %s',
+ past : 'prieš %s',
+ s : translateSeconds,
+ m : translateSingular,
+ mm : translate,
+ h : translateSingular,
+ hh : translate,
+ d : translateSingular,
+ dd : translate,
+ M : translateSingular,
+ MM : translate,
+ y : translateSingular,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}-oji/,
+ ordinal : function (number) {
+ return number + '-oji';
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lv.js
new file mode 100644
index 00000000000..5afe0b7af52
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/lv.js
@@ -0,0 +1,88 @@
+//! moment.js locale configuration
+//! locale : Latvian [lv]
+//! author : Kristaps Karlsons : https://github.com/skakri
+//! author : Jānis Elmeris : https://github.com/JanisE
+
+import moment from '../moment';
+
+var units = {
+ 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),
+ 'h': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'hh': 'stundas_stundām_stunda_stundas'.split('_'),
+ 'd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'dd': 'dienas_dienām_diena_dienas'.split('_'),
+ 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
+ 'y': 'gada_gadiem_gads_gadi'.split('_'),
+ 'yy': 'gada_gadiem_gads_gadi'.split('_')
+};
+/**
+ * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
+ */
+function format(forms, number, withoutSuffix) {
+ if (withoutSuffix) {
+ // E.g. "21 minūte", "3 minūtes".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
+ } else {
+ // E.g. "21 minūtes" as in "pēc 21 minūtes".
+ // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
+ return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
+ }
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ return number + ' ' + format(units[key], number, withoutSuffix);
+}
+function relativeTimeWithSingular(number, withoutSuffix, key) {
+ return format(units[key], number, withoutSuffix);
+}
+function relativeSeconds(number, withoutSuffix) {
+ return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
+}
+
+export default moment.defineLocale('lv', {
+ months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),
+ weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY.',
+ LL : 'YYYY. [gada] D. MMMM',
+ LLL : 'YYYY. [gada] D. MMMM, HH:mm',
+ LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'
+ },
+ calendar : {
+ sameDay : '[Šodien pulksten] LT',
+ nextDay : '[Rīt pulksten] LT',
+ nextWeek : 'dddd [pulksten] LT',
+ lastDay : '[Vakar pulksten] LT',
+ lastWeek : '[Pagājušā] dddd [pulksten] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'pēc %s',
+ past : 'pirms %s',
+ s : relativeSeconds,
+ m : relativeTimeWithSingular,
+ mm : relativeTimeWithPlural,
+ h : relativeTimeWithSingular,
+ hh : relativeTimeWithPlural,
+ d : relativeTimeWithSingular,
+ dd : relativeTimeWithPlural,
+ M : relativeTimeWithSingular,
+ MM : relativeTimeWithPlural,
+ y : relativeTimeWithSingular,
+ yy : relativeTimeWithPlural
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/me.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/me.js
new file mode 100644
index 00000000000..1635cb500f9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/me.js
@@ -0,0 +1,101 @@
+//! moment.js locale configuration
+//! locale : Montenegrin [me]
+//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
+
+import moment from '../moment';
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jednog minuta'],
+ mm: ['minut', 'minuta', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mjesec', 'mjeseca', 'mjeseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+export default moment.defineLocale('me', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact : true,
+ weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sjutra u] LT',
+
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedjelju] [u] LT';
+ case 3:
+ return '[u] [srijedu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedjelje] [u] LT',
+ '[prošlog] [ponedjeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srijede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'prije %s',
+ s : 'nekoliko sekundi',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'dan',
+ dd : translator.translate,
+ M : 'mjesec',
+ MM : translator.translate,
+ y : 'godinu',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mi.js
new file mode 100644
index 00000000000..6c894bbe001
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mi.js
@@ -0,0 +1,54 @@
+//! moment.js locale configuration
+//! locale : Maori [mi]
+//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
+
+import moment from '../moment';
+
+export default moment.defineLocale('mi', {
+ months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),
+ monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),
+ monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
+ monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
+ weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
+ weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY [i] HH:mm',
+ LLLL: 'dddd, D MMMM YYYY [i] HH:mm'
+ },
+ calendar: {
+ sameDay: '[i teie mahana, i] LT',
+ nextDay: '[apopo i] LT',
+ nextWeek: 'dddd [i] LT',
+ lastDay: '[inanahi i] LT',
+ lastWeek: 'dddd [whakamutunga i] LT',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'i roto i %s',
+ past: '%s i mua',
+ s: 'te hēkona ruarua',
+ m: 'he meneti',
+ mm: '%d meneti',
+ h: 'te haora',
+ hh: '%d haora',
+ d: 'he ra',
+ dd: '%d ra',
+ M: 'he marama',
+ MM: '%d marama',
+ y: 'he tau',
+ yy: '%d tau'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal: '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mk.js
new file mode 100644
index 00000000000..ccd7a161878
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mk.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Macedonian [mk]
+//! author : Borislav Mickov : https://github.com/B0k0
+
+import moment from '../moment';
+
+export default moment.defineLocale('mk', {
+ months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),
+ monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
+ weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),
+ weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
+ weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'D.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[Денес во] LT',
+ nextDay : '[Утре во] LT',
+ nextWeek : '[Во] dddd [во] LT',
+ lastDay : '[Вчера во] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 6:
+ return '[Изминатата] dddd [во] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[Изминатиот] dddd [во] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'после %s',
+ past : 'пред %s',
+ s : 'неколку секунди',
+ m : 'минута',
+ mm : '%d минути',
+ h : 'час',
+ hh : '%d часа',
+ d : 'ден',
+ dd : '%d дена',
+ M : 'месец',
+ MM : '%d месеци',
+ y : 'година',
+ yy : '%d години'
+ },
+ ordinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
+ ordinal : function (number) {
+ var lastDigit = number % 10,
+ last2Digits = number % 100;
+ if (number === 0) {
+ return number + '-ев';
+ } else if (last2Digits === 0) {
+ return number + '-ен';
+ } else if (last2Digits > 10 && last2Digits < 20) {
+ return number + '-ти';
+ } else if (lastDigit === 1) {
+ return number + '-ви';
+ } else if (lastDigit === 2) {
+ return number + '-ри';
+ } else if (lastDigit === 7 || lastDigit === 8) {
+ return number + '-ми';
+ } else {
+ return number + '-ти';
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ml.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ml.js
new file mode 100644
index 00000000000..c3df98818e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ml.js
@@ -0,0 +1,72 @@
+//! moment.js locale configuration
+//! locale : Malayalam [ml]
+//! author : Floyd Pink : https://github.com/floydpink
+
+import moment from '../moment';
+
+export default moment.defineLocale('ml', {
+ months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),
+ monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),
+ weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
+ weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm -നു',
+ LTS : 'A h:mm:ss -നു',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm -നു',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'
+ },
+ calendar : {
+ sameDay : '[ഇന്ന്] LT',
+ nextDay : '[നാളെ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ഇന്നലെ] LT',
+ lastWeek : '[കഴിഞ്ഞ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s കഴിഞ്ഞ്',
+ past : '%s മുൻപ്',
+ s : 'അൽപ നിമിഷങ്ങൾ',
+ m : 'ഒരു മിനിറ്റ്',
+ mm : '%d മിനിറ്റ്',
+ h : 'ഒരു മണിക്കൂർ',
+ hh : '%d മണിക്കൂർ',
+ d : 'ഒരു ദിവസം',
+ dd : '%d ദിവസം',
+ M : 'ഒരു മാസം',
+ MM : '%d മാസം',
+ y : 'ഒരു വർഷം',
+ yy : '%d വർഷം'
+ },
+ meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if ((meridiem === 'രാത്രി' && hour >= 4) ||
+ meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
+ meridiem === 'വൈകുന്നേരം') {
+ return hour + 12;
+ } else {
+ return hour;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'രാത്രി';
+ } else if (hour < 12) {
+ return 'രാവിലെ';
+ } else if (hour < 17) {
+ return 'ഉച്ച കഴിഞ്ഞ്';
+ } else if (hour < 20) {
+ return 'വൈകുന്നേരം';
+ } else {
+ return 'രാത്രി';
+ }
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mr.js
new file mode 100644
index 00000000000..08cc3e02bee
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/mr.js
@@ -0,0 +1,150 @@
+//! moment.js locale configuration
+//! locale : Marathi [mr]
+//! author : Harshad Kale : https://github.com/kalehv
+//! author : Vivek Athalye : https://github.com/vnathalye
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+},
+numberMap = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+function relativeTimeMr(number, withoutSuffix, string, isFuture)
+{
+ var output = '';
+ if (withoutSuffix) {
+ switch (string) {
+ case 's': output = 'काही सेकंद'; break;
+ case 'm': output = 'एक मिनिट'; break;
+ case 'mm': output = '%d मिनिटे'; break;
+ case 'h': output = 'एक तास'; break;
+ case 'hh': output = '%d तास'; break;
+ case 'd': output = 'एक दिवस'; break;
+ case 'dd': output = '%d दिवस'; break;
+ case 'M': output = 'एक महिना'; break;
+ case 'MM': output = '%d महिने'; break;
+ case 'y': output = 'एक वर्ष'; break;
+ case 'yy': output = '%d वर्षे'; break;
+ }
+ }
+ else {
+ switch (string) {
+ case 's': output = 'काही सेकंदां'; break;
+ case 'm': output = 'एका मिनिटा'; break;
+ case 'mm': output = '%d मिनिटां'; break;
+ case 'h': output = 'एका तासा'; break;
+ case 'hh': output = '%d तासां'; break;
+ case 'd': output = 'एका दिवसा'; break;
+ case 'dd': output = '%d दिवसां'; break;
+ case 'M': output = 'एका महिन्या'; break;
+ case 'MM': output = '%d महिन्यां'; break;
+ case 'y': output = 'एका वर्षा'; break;
+ case 'yy': output = '%d वर्षां'; break;
+ }
+ }
+ return output.replace(/%d/i, number);
+}
+
+export default moment.defineLocale('mr', {
+ months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),
+ monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
+ weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
+ weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm वाजता',
+ LTS : 'A h:mm:ss वाजता',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm वाजता',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[उद्या] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[काल] LT',
+ lastWeek: '[मागील] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future: '%sमध्ये',
+ past: '%sपूर्वी',
+ s: relativeTimeMr,
+ m: relativeTimeMr,
+ mm: relativeTimeMr,
+ h: relativeTimeMr,
+ hh: relativeTimeMr,
+ d: relativeTimeMr,
+ dd: relativeTimeMr,
+ M: relativeTimeMr,
+ MM: relativeTimeMr,
+ y: relativeTimeMr,
+ yy: relativeTimeMr
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'रात्री') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'सकाळी') {
+ return hour;
+ } else if (meridiem === 'दुपारी') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'सायंकाळी') {
+ return hour + 12;
+ }
+ },
+ meridiem: function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'रात्री';
+ } else if (hour < 10) {
+ return 'सकाळी';
+ } else if (hour < 17) {
+ return 'दुपारी';
+ } else if (hour < 20) {
+ return 'सायंकाळी';
+ } else {
+ return 'रात्री';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms-my.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms-my.js
new file mode 100644
index 00000000000..f5ea96f467c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms-my.js
@@ -0,0 +1,74 @@
+//! moment.js locale configuration
+//! locale : Malay [ms-my]
+//! note : DEPRECATED, the correct one is [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+import moment from '../moment';
+
+export default moment.defineLocale('ms-my', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms.js
new file mode 100644
index 00000000000..44c3e373010
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ms.js
@@ -0,0 +1,73 @@
+//! moment.js locale configuration
+//! locale : Malay [ms]
+//! author : Weldan Jamili : https://github.com/weldan
+
+import moment from '../moment';
+
+export default moment.defineLocale('ms', {
+ months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
+ weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
+ weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
+ weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [pukul] HH.mm',
+ LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'
+ },
+ meridiemParse: /pagi|tengahari|petang|malam/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'pagi') {
+ return hour;
+ } else if (meridiem === 'tengahari') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'petang' || meridiem === 'malam') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'pagi';
+ } else if (hours < 15) {
+ return 'tengahari';
+ } else if (hours < 19) {
+ return 'petang';
+ } else {
+ return 'malam';
+ }
+ },
+ calendar : {
+ sameDay : '[Hari ini pukul] LT',
+ nextDay : '[Esok pukul] LT',
+ nextWeek : 'dddd [pukul] LT',
+ lastDay : '[Kelmarin pukul] LT',
+ lastWeek : 'dddd [lepas pukul] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'dalam %s',
+ past : '%s yang lepas',
+ s : 'beberapa saat',
+ m : 'seminit',
+ mm : '%d minit',
+ h : 'sejam',
+ hh : '%d jam',
+ d : 'sehari',
+ dd : '%d hari',
+ M : 'sebulan',
+ MM : '%d bulan',
+ y : 'setahun',
+ yy : '%d tahun'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/my.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/my.js
new file mode 100644
index 00000000000..401d06e911e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/my.js
@@ -0,0 +1,86 @@
+//! moment.js locale configuration
+//! locale : Burmese [my]
+//! author : Squar team, mysquar.com
+//! author : David Rossellat : https://github.com/gholadr
+//! author : Tin Aung Lin : https://github.com/thanyawzinmin
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '၁',
+ '2': '၂',
+ '3': '၃',
+ '4': '၄',
+ '5': '၅',
+ '6': '၆',
+ '7': '၇',
+ '8': '၈',
+ '9': '၉',
+ '0': '၀'
+}, numberMap = {
+ '၁': '1',
+ '၂': '2',
+ '၃': '3',
+ '၄': '4',
+ '၅': '5',
+ '၆': '6',
+ '၇': '7',
+ '၈': '8',
+ '၉': '9',
+ '၀': '0'
+};
+
+export default moment.defineLocale('my', {
+ months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),
+ monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
+ weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),
+ weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+ weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
+
+ longDateFormat: {
+ LT: 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L: 'DD/MM/YYYY',
+ LL: 'D MMMM YYYY',
+ LLL: 'D MMMM YYYY HH:mm',
+ LLLL: 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar: {
+ sameDay: '[ယနေ.] LT [မှာ]',
+ nextDay: '[မနက်ဖြန်] LT [မှာ]',
+ nextWeek: 'dddd LT [မှာ]',
+ lastDay: '[မနေ.က] LT [မှာ]',
+ lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
+ sameElse: 'L'
+ },
+ relativeTime: {
+ future: 'လာမည့် %s မှာ',
+ past: 'လွန်ခဲ့သော %s က',
+ s: 'စက္ကန်.အနည်းငယ်',
+ m: 'တစ်မိနစ်',
+ mm: '%d မိနစ်',
+ h: 'တစ်နာရီ',
+ hh: '%d နာရီ',
+ d: 'တစ်ရက်',
+ dd: '%d ရက်',
+ M: 'တစ်လ',
+ MM: '%d လ',
+ y: 'တစ်နှစ်',
+ yy: '%d နှစ်'
+ },
+ preparse: function (string) {
+ return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ week: {
+ dow: 1, // Monday is the first day of the week.
+ doy: 4 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nb.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nb.js
new file mode 100644
index 00000000000..00744383c5b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nb.js
@@ -0,0 +1,54 @@
+//! moment.js locale configuration
+//! locale : Norwegian Bokmål [nb]
+//! authors : Espen Hovlandsdal : https://github.com/rexxars
+//! Sigurd Gartmann : https://github.com/sigurdga
+
+import moment from '../moment';
+
+export default moment.defineLocale('nb', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
+ weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),
+ weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[i dag kl.] LT',
+ nextDay: '[i morgen kl.] LT',
+ nextWeek: 'dddd [kl.] LT',
+ lastDay: '[i går kl.] LT',
+ lastWeek: '[forrige] dddd [kl.] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s siden',
+ s : 'noen sekunder',
+ m : 'ett minutt',
+ mm : '%d minutter',
+ h : 'en time',
+ hh : '%d timer',
+ d : 'en dag',
+ dd : '%d dager',
+ M : 'en måned',
+ MM : '%d måneder',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ne.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ne.js
new file mode 100644
index 00000000000..a82cb95b39e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ne.js
@@ -0,0 +1,114 @@
+//! moment.js locale configuration
+//! locale : Nepalese [ne]
+//! author : suvash : https://github.com/suvash
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '१',
+ '2': '२',
+ '3': '३',
+ '4': '४',
+ '5': '५',
+ '6': '६',
+ '7': '७',
+ '8': '८',
+ '9': '९',
+ '0': '०'
+},
+numberMap = {
+ '१': '1',
+ '२': '2',
+ '३': '3',
+ '४': '4',
+ '५': '5',
+ '६': '6',
+ '७': '7',
+ '८': '8',
+ '९': '9',
+ '०': '0'
+};
+
+export default moment.defineLocale('ne', {
+ months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),
+ monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),
+ weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
+ weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'Aको h:mm बजे',
+ LTS : 'Aको h:mm:ss बजे',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, Aको h:mm बजे',
+ LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'
+ },
+ preparse: function (string) {
+ return string.replace(/[१२३४५६७८९०]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'राति') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'बिहान') {
+ return hour;
+ } else if (meridiem === 'दिउँसो') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'साँझ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 3) {
+ return 'राति';
+ } else if (hour < 12) {
+ return 'बिहान';
+ } else if (hour < 16) {
+ return 'दिउँसो';
+ } else if (hour < 20) {
+ return 'साँझ';
+ } else {
+ return 'राति';
+ }
+ },
+ calendar : {
+ sameDay : '[आज] LT',
+ nextDay : '[भोलि] LT',
+ nextWeek : '[आउँदो] dddd[,] LT',
+ lastDay : '[हिजो] LT',
+ lastWeek : '[गएको] dddd[,] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sमा',
+ past : '%s अगाडि',
+ s : 'केही क्षण',
+ m : 'एक मिनेट',
+ mm : '%d मिनेट',
+ h : 'एक घण्टा',
+ hh : '%d घण्टा',
+ d : 'एक दिन',
+ dd : '%d दिन',
+ M : 'एक महिना',
+ MM : '%d महिना',
+ y : 'एक बर्ष',
+ yy : '%d बर्ष'
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl-be.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl-be.js
new file mode 100644
index 00000000000..159eee3871f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl-be.js
@@ -0,0 +1,77 @@
+//! moment.js locale configuration
+//! locale : Dutch (Belgium) [nl-be]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+import moment from '../moment';
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+export default moment.defineLocale('nl-be', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex,
+ monthsShortRegex: monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl.js
new file mode 100644
index 00000000000..0988cfe6a9e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nl.js
@@ -0,0 +1,77 @@
+//! moment.js locale configuration
+//! locale : Dutch [nl]
+//! author : Joris Röling : https://github.com/jorisroling
+//! author : Jacob Middag : https://github.com/middagj
+
+import moment from '../moment';
+
+var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
+ monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
+
+var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];
+var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
+
+export default moment.defineLocale('nl', {
+ months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
+ monthsShort : function (m, format) {
+ if (/-MMM-/.test(format)) {
+ return monthsShortWithoutDots[m.month()];
+ } else {
+ return monthsShortWithDots[m.month()];
+ }
+ },
+
+ monthsRegex: monthsRegex,
+ monthsShortRegex: monthsRegex,
+ monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,
+ monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
+
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
+ weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
+ weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD-MM-YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[vandaag om] LT',
+ nextDay: '[morgen om] LT',
+ nextWeek: 'dddd [om] LT',
+ lastDay: '[gisteren om] LT',
+ lastWeek: '[afgelopen] dddd [om] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'over %s',
+ past : '%s geleden',
+ s : 'een paar seconden',
+ m : 'één minuut',
+ mm : '%d minuten',
+ h : 'één uur',
+ hh : '%d uur',
+ d : 'één dag',
+ dd : '%d dagen',
+ M : 'één maand',
+ MM : '%d maanden',
+ y : 'één jaar',
+ yy : '%d jaar'
+ },
+ ordinalParse: /\d{1,2}(ste|de)/,
+ ordinal : function (number) {
+ return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nn.js
new file mode 100644
index 00000000000..13ecbca43aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/nn.js
@@ -0,0 +1,51 @@
+//! moment.js locale configuration
+//! locale : Nynorsk [nn]
+//! author : https://github.com/mechuwind
+
+import moment from '../moment';
+
+export default moment.defineLocale('nn', {
+ months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
+ weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
+ weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),
+ weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY [kl.] H:mm',
+ LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[I dag klokka] LT',
+ nextDay: '[I morgon klokka] LT',
+ nextWeek: 'dddd [klokka] LT',
+ lastDay: '[I går klokka] LT',
+ lastWeek: '[Føregåande] dddd [klokka] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : '%s sidan',
+ s : 'nokre sekund',
+ m : 'eit minutt',
+ mm : '%d minutt',
+ h : 'ein time',
+ hh : '%d timar',
+ d : 'ein dag',
+ dd : '%d dagar',
+ M : 'ein månad',
+ MM : '%d månader',
+ y : 'eit år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pa-in.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pa-in.js
new file mode 100644
index 00000000000..78da521659b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pa-in.js
@@ -0,0 +1,115 @@
+//! moment.js locale configuration
+//! locale : Punjabi (India) [pa-in]
+//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '੧',
+ '2': '੨',
+ '3': '੩',
+ '4': '੪',
+ '5': '੫',
+ '6': '੬',
+ '7': '੭',
+ '8': '੮',
+ '9': '੯',
+ '0': '੦'
+},
+numberMap = {
+ '੧': '1',
+ '੨': '2',
+ '੩': '3',
+ '੪': '4',
+ '੫': '5',
+ '੬': '6',
+ '੭': '7',
+ '੮': '8',
+ '੯': '9',
+ '੦': '0'
+};
+
+export default moment.defineLocale('pa-in', {
+ // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.
+ months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),
+ weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),
+ weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm ਵਜੇ',
+ LTS : 'A h:mm:ss ਵਜੇ',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'
+ },
+ calendar : {
+ sameDay : '[ਅਜ] LT',
+ nextDay : '[ਕਲ] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[ਕਲ] LT',
+ lastWeek : '[ਪਿਛਲੇ] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s ਵਿੱਚ',
+ past : '%s ਪਿਛਲੇ',
+ s : 'ਕੁਝ ਸਕਿੰਟ',
+ m : 'ਇਕ ਮਿੰਟ',
+ mm : '%d ਮਿੰਟ',
+ h : 'ਇੱਕ ਘੰਟਾ',
+ hh : '%d ਘੰਟੇ',
+ d : 'ਇੱਕ ਦਿਨ',
+ dd : '%d ਦਿਨ',
+ M : 'ਇੱਕ ਮਹੀਨਾ',
+ MM : '%d ਮਹੀਨੇ',
+ y : 'ਇੱਕ ਸਾਲ',
+ yy : '%d ਸਾਲ'
+ },
+ preparse: function (string) {
+ return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
+ // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
+ meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ਰਾਤ') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ਸਵੇਰ') {
+ return hour;
+ } else if (meridiem === 'ਦੁਪਹਿਰ') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'ਸ਼ਾਮ') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ਰਾਤ';
+ } else if (hour < 10) {
+ return 'ਸਵੇਰ';
+ } else if (hour < 17) {
+ return 'ਦੁਪਹਿਰ';
+ } else if (hour < 20) {
+ return 'ਸ਼ਾਮ';
+ } else {
+ return 'ਰਾਤ';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pl.js
new file mode 100644
index 00000000000..9934a5e6873
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pl.js
@@ -0,0 +1,95 @@
+//! moment.js locale configuration
+//! locale : Polish [pl]
+//! author : Rafal Hirsz : https://github.com/evoL
+
+import moment from '../moment';
+
+var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
+ monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
+function plural(n) {
+ return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
+}
+function translate(number, withoutSuffix, key) {
+ var result = number + ' ';
+ switch (key) {
+ case 'm':
+ return withoutSuffix ? 'minuta' : 'minutę';
+ case 'mm':
+ return result + (plural(number) ? 'minuty' : 'minut');
+ case 'h':
+ return withoutSuffix ? 'godzina' : 'godzinę';
+ case 'hh':
+ return result + (plural(number) ? 'godziny' : 'godzin');
+ case 'MM':
+ return result + (plural(number) ? 'miesiące' : 'miesięcy');
+ case 'yy':
+ return result + (plural(number) ? 'lata' : 'lat');
+ }
+}
+
+export default moment.defineLocale('pl', {
+ months : function (momentToFormat, format) {
+ if (format === '') {
+ // Hack: if format empty we know this is used to generate
+ // RegExp by moment. Give then back both valid forms of months
+ // in RegExp ready format.
+ return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
+ } else if (/D MMMM/.test(format)) {
+ return monthsSubjective[momentToFormat.month()];
+ } else {
+ return monthsNominative[momentToFormat.month()];
+ }
+ },
+ monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
+ weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
+ weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
+ weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Dziś o] LT',
+ nextDay: '[Jutro o] LT',
+ nextWeek: '[W] dddd [o] LT',
+ lastDay: '[Wczoraj o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[W zeszłą niedzielę o] LT';
+ case 3:
+ return '[W zeszłą środę o] LT';
+ case 6:
+ return '[W zeszłą sobotę o] LT';
+ default:
+ return '[W zeszły] dddd [o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : '%s temu',
+ s : 'kilka sekund',
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : '1 dzień',
+ dd : '%d dni',
+ M : 'miesiąc',
+ MM : translate,
+ y : 'rok',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt-br.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt-br.js
new file mode 100644
index 00000000000..6e42d1ef123
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt-br.js
@@ -0,0 +1,52 @@
+//! moment.js locale configuration
+//! locale : Portuguese (Brazil) [pt-br]
+//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
+
+import moment from '../moment';
+
+export default moment.defineLocale('pt-br', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : '%s atrás',
+ s : 'poucos segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº'
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt.js
new file mode 100644
index 00000000000..b6ab969c86f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/pt.js
@@ -0,0 +1,56 @@
+//! moment.js locale configuration
+//! locale : Portuguese [pt]
+//! author : Jefferson : https://github.com/jalex79
+
+import moment from '../moment';
+
+export default moment.defineLocale('pt', {
+ months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
+ weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D [de] MMMM [de] YYYY',
+ LLL : 'D [de] MMMM [de] YYYY HH:mm',
+ LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hoje às] LT',
+ nextDay: '[Amanhã às] LT',
+ nextWeek: 'dddd [às] LT',
+ lastDay: '[Ontem às] LT',
+ lastWeek: function () {
+ return (this.day() === 0 || this.day() === 6) ?
+ '[Último] dddd [às] LT' : // Saturday + Sunday
+ '[Última] dddd [às] LT'; // Monday - Friday
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'em %s',
+ past : 'há %s',
+ s : 'segundos',
+ m : 'um minuto',
+ mm : '%d minutos',
+ h : 'uma hora',
+ hh : '%d horas',
+ d : 'um dia',
+ dd : '%d dias',
+ M : 'um mês',
+ MM : '%d meses',
+ y : 'um ano',
+ yy : '%d anos'
+ },
+ ordinalParse: /\d{1,2}º/,
+ ordinal : '%dº',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ro.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ro.js
new file mode 100644
index 00000000000..444eebad7b0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ro.js
@@ -0,0 +1,66 @@
+//! moment.js locale configuration
+//! locale : Romanian [ro]
+//! author : Vlad Gurdiga : https://github.com/gurdiga
+//! author : Valentin Agachi : https://github.com/avaly
+
+import moment from '../moment';
+
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': 'minute',
+ 'hh': 'ore',
+ 'dd': 'zile',
+ 'MM': 'luni',
+ 'yy': 'ani'
+ },
+ separator = ' ';
+ if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
+ separator = ' de ';
+ }
+ return number + separator + format[key];
+}
+
+export default moment.defineLocale('ro', {
+ months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
+ monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
+ weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
+ weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY H:mm',
+ LLLL : 'dddd, D MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[azi la] LT',
+ nextDay: '[mâine la] LT',
+ nextWeek: 'dddd [la] LT',
+ lastDay: '[ieri la] LT',
+ lastWeek: '[fosta] dddd [la] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'peste %s',
+ past : '%s în urmă',
+ s : 'câteva secunde',
+ m : 'un minut',
+ mm : relativeTimeWithPlural,
+ h : 'o oră',
+ hh : relativeTimeWithPlural,
+ d : 'o zi',
+ dd : relativeTimeWithPlural,
+ M : 'o lună',
+ MM : relativeTimeWithPlural,
+ y : 'un an',
+ yy : relativeTimeWithPlural
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ru.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ru.js
new file mode 100644
index 00000000000..2f10d6749c1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ru.js
@@ -0,0 +1,173 @@
+//! moment.js locale configuration
+//! locale : Russian [ru]
+//! author : Viktorminator : https://github.com/Viktorminator
+//! Author : Menelion Elensúle : https://github.com/Oire
+//! author : Коренберг Марк : https://github.com/socketpair
+
+import moment from '../moment';
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
+ 'hh': 'час_часа_часов',
+ 'dd': 'день_дня_дней',
+ 'MM': 'месяц_месяца_месяцев',
+ 'yy': 'год_года_лет'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'минута' : 'минуту';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];
+
+// http://new.gramota.ru/spravka/rules/139-prop : § 103
+// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
+// CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
+export default moment.defineLocale('ru', {
+ months : {
+ format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),
+ standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')
+ },
+ monthsShort : {
+ // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку ?
+ format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),
+ standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')
+ },
+ weekdays : {
+ standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
+ format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),
+ isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/
+ },
+ weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
+ monthsParse : monthsParse,
+ longMonthsParse : monthsParse,
+ shortMonthsParse : monthsParse,
+
+ // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
+ monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // копия предыдущего
+ monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
+
+ // полные названия с падежами
+ monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
+
+ // Выражение, которое соотвествует только сокращённым формам
+ monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY г.',
+ LLL : 'D MMMM YYYY г., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY г., HH:mm'
+ },
+ calendar : {
+ sameDay: '[Сегодня в] LT',
+ nextDay: '[Завтра в] LT',
+ lastDay: '[Вчера в] LT',
+ nextWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В следующее] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В следующий] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В следующую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ lastWeek: function (now) {
+ if (now.week() !== this.week()) {
+ switch (this.day()) {
+ case 0:
+ return '[В прошлое] dddd [в] LT';
+ case 1:
+ case 2:
+ case 4:
+ return '[В прошлый] dddd [в] LT';
+ case 3:
+ case 5:
+ case 6:
+ return '[В прошлую] dddd [в] LT';
+ }
+ } else {
+ if (this.day() === 2) {
+ return '[Во] dddd [в] LT';
+ } else {
+ return '[В] dddd [в] LT';
+ }
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'через %s',
+ past : '%s назад',
+ s : 'несколько секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : 'час',
+ hh : relativeTimeWithPlural,
+ d : 'день',
+ dd : relativeTimeWithPlural,
+ M : 'месяц',
+ MM : relativeTimeWithPlural,
+ y : 'год',
+ yy : relativeTimeWithPlural
+ },
+ meridiemParse: /ночи|утра|дня|вечера/i,
+ isPM : function (input) {
+ return /^(дня|вечера)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночи';
+ } else if (hour < 12) {
+ return 'утра';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечера';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го|я)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ case 'w':
+ case 'W':
+ return number + '-я';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/se.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/se.js
new file mode 100644
index 00000000000..af6a01c31d6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/se.js
@@ -0,0 +1,51 @@
+//! moment.js locale configuration
+//! locale : Northern Sami [se]
+//! authors : Bård Rolstad Henriksen : https://github.com/karamell
+
+
+import moment from '../moment';
+
+export default moment.defineLocale('se', {
+ months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),
+ monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),
+ weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),
+ weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
+ weekdaysMin : 's_v_m_g_d_b_L'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'MMMM D. [b.] YYYY',
+ LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',
+ LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'
+ },
+ calendar : {
+ sameDay: '[otne ti] LT',
+ nextDay: '[ihttin ti] LT',
+ nextWeek: 'dddd [ti] LT',
+ lastDay: '[ikte ti] LT',
+ lastWeek: '[ovddit] dddd [ti] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s geažes',
+ past : 'maŋit %s',
+ s : 'moadde sekunddat',
+ m : 'okta minuhta',
+ mm : '%d minuhtat',
+ h : 'okta diimmu',
+ hh : '%d diimmut',
+ d : 'okta beaivi',
+ dd : '%d beaivvit',
+ M : 'okta mánnu',
+ MM : '%d mánut',
+ y : 'okta jahki',
+ yy : '%d jagit'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/si.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/si.js
new file mode 100644
index 00000000000..0cc2b78e5e2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/si.js
@@ -0,0 +1,61 @@
+//! moment.js locale configuration
+//! locale : Sinhalese [si]
+//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
+
+import moment from '../moment';
+
+/*jshint -W100*/
+export default moment.defineLocale('si', {
+ months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),
+ monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),
+ weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),
+ weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
+ weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'a h:mm',
+ LTS : 'a h:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'YYYY MMMM D',
+ LLL : 'YYYY MMMM D, a h:mm',
+ LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'
+ },
+ calendar : {
+ sameDay : '[අද] LT[ට]',
+ nextDay : '[හෙට] LT[ට]',
+ nextWeek : 'dddd LT[ට]',
+ lastDay : '[ඊයේ] LT[ට]',
+ lastWeek : '[පසුගිය] dddd LT[ට]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%sකින්',
+ past : '%sකට පෙර',
+ s : 'තත්පර කිහිපය',
+ m : 'මිනිත්තුව',
+ mm : 'මිනිත්තු %d',
+ h : 'පැය',
+ hh : 'පැය %d',
+ d : 'දිනය',
+ dd : 'දින %d',
+ M : 'මාසය',
+ MM : 'මාස %d',
+ y : 'වසර',
+ yy : 'වසර %d'
+ },
+ ordinalParse: /\d{1,2} වැනි/,
+ ordinal : function (number) {
+ return number + ' වැනි';
+ },
+ meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
+ isPM : function (input) {
+ return input === 'ප.ව.' || input === 'පස් වරු';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'ප.ව.' : 'පස් වරු';
+ } else {
+ return isLower ? 'පෙ.ව.' : 'පෙර වරු';
+ }
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sk.js
new file mode 100644
index 00000000000..0d5f0e04a5f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sk.js
@@ -0,0 +1,141 @@
+//! moment.js locale configuration
+//! locale : Slovak [sk]
+//! author : Martin Minka : https://github.com/k2s
+//! based on work of petrbela : https://github.com/petrbela
+
+import moment from '../moment';
+
+var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),
+ monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
+function plural(n) {
+ return (n > 1) && (n < 5);
+}
+function translate(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's': // a few seconds / in a few seconds / a few seconds ago
+ return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';
+ case 'm': // a minute / in a minute / a minute ago
+ return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');
+ case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'minúty' : 'minút');
+ } else {
+ return result + 'minútami';
+ }
+ break;
+ case 'h': // an hour / in an hour / an hour ago
+ return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');
+ case 'hh': // 9 hours / in 9 hours / 9 hours ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'hodiny' : 'hodín');
+ } else {
+ return result + 'hodinami';
+ }
+ break;
+ case 'd': // a day / in a day / a day ago
+ return (withoutSuffix || isFuture) ? 'deň' : 'dňom';
+ case 'dd': // 9 days / in 9 days / 9 days ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'dni' : 'dní');
+ } else {
+ return result + 'dňami';
+ }
+ break;
+ case 'M': // a month / in a month / a month ago
+ return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';
+ case 'MM': // 9 months / in 9 months / 9 months ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'mesiace' : 'mesiacov');
+ } else {
+ return result + 'mesiacmi';
+ }
+ break;
+ case 'y': // a year / in a year / a year ago
+ return (withoutSuffix || isFuture) ? 'rok' : 'rokom';
+ case 'yy': // 9 years / in 9 years / 9 years ago
+ if (withoutSuffix || isFuture) {
+ return result + (plural(number) ? 'roky' : 'rokov');
+ } else {
+ return result + 'rokmi';
+ }
+ break;
+ }
+}
+
+export default moment.defineLocale('sk', {
+ months : months,
+ monthsShort : monthsShort,
+ weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
+ weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),
+ weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),
+ longDateFormat : {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay: '[dnes o] LT',
+ nextDay: '[zajtra o] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[v nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[v] dddd [o] LT';
+ case 3:
+ return '[v stredu o] LT';
+ case 4:
+ return '[vo štvrtok o] LT';
+ case 5:
+ return '[v piatok o] LT';
+ case 6:
+ return '[v sobotu o] LT';
+ }
+ },
+ lastDay: '[včera o] LT',
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[minulú nedeľu o] LT';
+ case 1:
+ case 2:
+ return '[minulý] dddd [o] LT';
+ case 3:
+ return '[minulú stredu o] LT';
+ case 4:
+ case 5:
+ return '[minulý] dddd [o] LT';
+ case 6:
+ return '[minulú sobotu o] LT';
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pred %s',
+ s : translate,
+ m : translate,
+ mm : translate,
+ h : translate,
+ hh : translate,
+ d : translate,
+ dd : translate,
+ M : translate,
+ MM : translate,
+ y : translate,
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sl.js
new file mode 100644
index 00000000000..2f36d5bf375
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sl.js
@@ -0,0 +1,152 @@
+//! moment.js locale configuration
+//! locale : Slovenian [sl]
+//! author : Robert Sedovšek : https://github.com/sedovsek
+
+import moment from '../moment';
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var result = number + ' ';
+ switch (key) {
+ case 's':
+ return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';
+ case 'm':
+ return withoutSuffix ? 'ena minuta' : 'eno minuto';
+ case 'mm':
+ if (number === 1) {
+ result += withoutSuffix ? 'minuta' : 'minuto';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'minute' : 'minutami';
+ } else {
+ result += withoutSuffix || isFuture ? 'minut' : 'minutami';
+ }
+ return result;
+ case 'h':
+ return withoutSuffix ? 'ena ura' : 'eno uro';
+ case 'hh':
+ if (number === 1) {
+ result += withoutSuffix ? 'ura' : 'uro';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'uri' : 'urama';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'ure' : 'urami';
+ } else {
+ result += withoutSuffix || isFuture ? 'ur' : 'urami';
+ }
+ return result;
+ case 'd':
+ return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
+ case 'dd':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'dan' : 'dnem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
+ } else {
+ result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
+ }
+ return result;
+ case 'M':
+ return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
+ case 'MM':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
+ } else {
+ result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
+ }
+ return result;
+ case 'y':
+ return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
+ case 'yy':
+ if (number === 1) {
+ result += withoutSuffix || isFuture ? 'leto' : 'letom';
+ } else if (number === 2) {
+ result += withoutSuffix || isFuture ? 'leti' : 'letoma';
+ } else if (number < 5) {
+ result += withoutSuffix || isFuture ? 'leta' : 'leti';
+ } else {
+ result += withoutSuffix || isFuture ? 'let' : 'leti';
+ }
+ return result;
+ }
+}
+
+export default moment.defineLocale('sl', {
+ months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
+ weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
+ weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM YYYY',
+ LLL : 'D. MMMM YYYY H:mm',
+ LLLL : 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar : {
+ sameDay : '[danes ob] LT',
+ nextDay : '[jutri ob] LT',
+
+ nextWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[v] [nedeljo] [ob] LT';
+ case 3:
+ return '[v] [sredo] [ob] LT';
+ case 6:
+ return '[v] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[v] dddd [ob] LT';
+ }
+ },
+ lastDay : '[včeraj ob] LT',
+ lastWeek : function () {
+ switch (this.day()) {
+ case 0:
+ return '[prejšnjo] [nedeljo] [ob] LT';
+ case 3:
+ return '[prejšnjo] [sredo] [ob] LT';
+ case 6:
+ return '[prejšnjo] [soboto] [ob] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[prejšnji] dddd [ob] LT';
+ }
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'čez %s',
+ past : 'pred %s',
+ s : processRelativeTime,
+ m : processRelativeTime,
+ mm : processRelativeTime,
+ h : processRelativeTime,
+ hh : processRelativeTime,
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sq.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sq.js
new file mode 100644
index 00000000000..b0011c7f0bc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sq.js
@@ -0,0 +1,61 @@
+//! moment.js locale configuration
+//! locale : Albanian [sq]
+//! author : Flakërim Ismani : https://github.com/flakerimi
+//! author : Menelion Elensúle : https://github.com/Oire
+//! author : Oerd Cukalla : https://github.com/oerd
+
+import moment from '../moment';
+
+export default moment.defineLocale('sq', {
+ months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),
+ monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
+ weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),
+ weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
+ weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /PD|MD/,
+ isPM: function (input) {
+ return input.charAt(0) === 'M';
+ },
+ meridiem : function (hours, minutes, isLower) {
+ return hours < 12 ? 'PD' : 'MD';
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[Sot në] LT',
+ nextDay : '[Nesër në] LT',
+ nextWeek : 'dddd [në] LT',
+ lastDay : '[Dje në] LT',
+ lastWeek : 'dddd [e kaluar në] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'në %s',
+ past : '%s më parë',
+ s : 'disa sekonda',
+ m : 'një minutë',
+ mm : '%d minuta',
+ h : 'një orë',
+ hh : '%d orë',
+ d : 'një ditë',
+ dd : '%d ditë',
+ M : 'një muaj',
+ MM : '%d muaj',
+ y : 'një vit',
+ yy : '%d vite'
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr-cyrl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr-cyrl.js
new file mode 100644
index 00000000000..90449c1aeb2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr-cyrl.js
@@ -0,0 +1,100 @@
+//! moment.js locale configuration
+//! locale : Serbian Cyrillic [sr-cyrl]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+import moment from '../moment';
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['један минут', 'једне минуте'],
+ mm: ['минут', 'минуте', 'минута'],
+ h: ['један сат', 'једног сата'],
+ hh: ['сат', 'сата', 'сати'],
+ dd: ['дан', 'дана', 'дана'],
+ MM: ['месец', 'месеца', 'месеци'],
+ yy: ['година', 'године', 'година']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+export default moment.defineLocale('sr-cyrl', {
+ months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),
+ monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
+ weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
+ weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[данас у] LT',
+ nextDay: '[сутра у] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[у] [недељу] [у] LT';
+ case 3:
+ return '[у] [среду] [у] LT';
+ case 6:
+ return '[у] [суботу] [у] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[у] dddd [у] LT';
+ }
+ },
+ lastDay : '[јуче у] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[прошле] [недеље] [у] LT',
+ '[прошлог] [понедељка] [у] LT',
+ '[прошлог] [уторка] [у] LT',
+ '[прошле] [среде] [у] LT',
+ '[прошлог] [четвртка] [у] LT',
+ '[прошлог] [петка] [у] LT',
+ '[прошле] [суботе] [у] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : 'пре %s',
+ s : 'неколико секунди',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'дан',
+ dd : translator.translate,
+ M : 'месец',
+ MM : translator.translate,
+ y : 'годину',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr.js
new file mode 100644
index 00000000000..6716b42726a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sr.js
@@ -0,0 +1,100 @@
+//! moment.js locale configuration
+//! locale : Serbian [sr]
+//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
+
+import moment from '../moment';
+
+var translator = {
+ words: { //Different grammatical cases
+ m: ['jedan minut', 'jedne minute'],
+ mm: ['minut', 'minute', 'minuta'],
+ h: ['jedan sat', 'jednog sata'],
+ hh: ['sat', 'sata', 'sati'],
+ dd: ['dan', 'dana', 'dana'],
+ MM: ['mesec', 'meseca', 'meseci'],
+ yy: ['godina', 'godine', 'godina']
+ },
+ correctGrammaticalCase: function (number, wordKey) {
+ return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
+ },
+ translate: function (number, withoutSuffix, key) {
+ var wordKey = translator.words[key];
+ if (key.length === 1) {
+ return withoutSuffix ? wordKey[0] : wordKey[1];
+ } else {
+ return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
+ }
+ }
+};
+
+export default moment.defineLocale('sr', {
+ months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),
+ monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),
+ monthsParseExact: true,
+ weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),
+ weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
+ weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat: {
+ LT: 'H:mm',
+ LTS : 'H:mm:ss',
+ L: 'DD.MM.YYYY',
+ LL: 'D. MMMM YYYY',
+ LLL: 'D. MMMM YYYY H:mm',
+ LLLL: 'dddd, D. MMMM YYYY H:mm'
+ },
+ calendar: {
+ sameDay: '[danas u] LT',
+ nextDay: '[sutra u] LT',
+ nextWeek: function () {
+ switch (this.day()) {
+ case 0:
+ return '[u] [nedelju] [u] LT';
+ case 3:
+ return '[u] [sredu] [u] LT';
+ case 6:
+ return '[u] [subotu] [u] LT';
+ case 1:
+ case 2:
+ case 4:
+ case 5:
+ return '[u] dddd [u] LT';
+ }
+ },
+ lastDay : '[juče u] LT',
+ lastWeek : function () {
+ var lastWeekDays = [
+ '[prošle] [nedelje] [u] LT',
+ '[prošlog] [ponedeljka] [u] LT',
+ '[prošlog] [utorka] [u] LT',
+ '[prošle] [srede] [u] LT',
+ '[prošlog] [četvrtka] [u] LT',
+ '[prošlog] [petka] [u] LT',
+ '[prošle] [subote] [u] LT'
+ ];
+ return lastWeekDays[this.day()];
+ },
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'za %s',
+ past : 'pre %s',
+ s : 'nekoliko sekundi',
+ m : translator.translate,
+ mm : translator.translate,
+ h : translator.translate,
+ hh : translator.translate,
+ d : 'dan',
+ dd : translator.translate,
+ M : 'mesec',
+ MM : translator.translate,
+ y : 'godinu',
+ yy : translator.translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ss.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ss.js
new file mode 100644
index 00000000000..f6a7d0a8c5a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ss.js
@@ -0,0 +1,80 @@
+//! moment.js locale configuration
+//! locale : siSwati [ss]
+//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
+
+
+import moment from '../moment';
+
+export default moment.defineLocale('ss', {
+ months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'),
+ monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
+ weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),
+ weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
+ weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Namuhla nga] LT',
+ nextDay : '[Kusasa nga] LT',
+ nextWeek : 'dddd [nga] LT',
+ lastDay : '[Itolo nga] LT',
+ lastWeek : 'dddd [leliphelile] [nga] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'nga %s',
+ past : 'wenteka nga %s',
+ s : 'emizuzwana lomcane',
+ m : 'umzuzu',
+ mm : '%d emizuzu',
+ h : 'lihora',
+ hh : '%d emahora',
+ d : 'lilanga',
+ dd : '%d emalanga',
+ M : 'inyanga',
+ MM : '%d tinyanga',
+ y : 'umnyaka',
+ yy : '%d iminyaka'
+ },
+ meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 11) {
+ return 'ekuseni';
+ } else if (hours < 15) {
+ return 'emini';
+ } else if (hours < 19) {
+ return 'entsambama';
+ } else {
+ return 'ebusuku';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'ekuseni') {
+ return hour;
+ } else if (meridiem === 'emini') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
+ if (hour === 0) {
+ return 0;
+ }
+ return hour + 12;
+ }
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : '%d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sv.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sv.js
new file mode 100644
index 00000000000..15d1c9d99c1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sv.js
@@ -0,0 +1,60 @@
+//! moment.js locale configuration
+//! locale : Swedish [sv]
+//! author : Jens Alm : https://github.com/ulmus
+
+import moment from '../moment';
+
+export default moment.defineLocale('sv', {
+ months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
+ monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
+ weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
+ weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
+ weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'YYYY-MM-DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY [kl.] HH:mm',
+ LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Idag] LT',
+ nextDay: '[Imorgon] LT',
+ lastDay: '[Igår] LT',
+ nextWeek: '[På] dddd LT',
+ lastWeek: '[I] dddd[s] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'om %s',
+ past : 'för %s sedan',
+ s : 'några sekunder',
+ m : 'en minut',
+ mm : '%d minuter',
+ h : 'en timme',
+ hh : '%d timmar',
+ d : 'en dag',
+ dd : '%d dagar',
+ M : 'en månad',
+ MM : '%d månader',
+ y : 'ett år',
+ yy : '%d år'
+ },
+ ordinalParse: /\d{1,2}(e|a)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'e' :
+ (b === 1) ? 'a' :
+ (b === 2) ? 'a' :
+ (b === 3) ? 'e' : 'e';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sw.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sw.js
new file mode 100644
index 00000000000..a36d9dd2a96
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/sw.js
@@ -0,0 +1,50 @@
+//! moment.js locale configuration
+//! locale : Swahili [sw]
+//! author : Fahad Kassim : https://github.com/fadsel
+
+import moment from '../moment';
+
+export default moment.defineLocale('sw', {
+ months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),
+ monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
+ weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),
+ weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
+ weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[leo saa] LT',
+ nextDay : '[kesho saa] LT',
+ nextWeek : '[wiki ijayo] dddd [saat] LT',
+ lastDay : '[jana] LT',
+ lastWeek : '[wiki iliyopita] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s baadaye',
+ past : 'tokea %s',
+ s : 'hivi punde',
+ m : 'dakika moja',
+ mm : 'dakika %d',
+ h : 'saa limoja',
+ hh : 'masaa %d',
+ d : 'siku moja',
+ dd : 'masiku %d',
+ M : 'mwezi mmoja',
+ MM : 'miezi %d',
+ y : 'mwaka mmoja',
+ yy : 'miaka %d'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ta.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ta.js
new file mode 100644
index 00000000000..6be3e2e0bc6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/ta.js
@@ -0,0 +1,120 @@
+//! moment.js locale configuration
+//! locale : Tamil [ta]
+//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
+
+import moment from '../moment';
+
+var symbolMap = {
+ '1': '௧',
+ '2': '௨',
+ '3': '௩',
+ '4': '௪',
+ '5': '௫',
+ '6': '௬',
+ '7': '௭',
+ '8': '௮',
+ '9': '௯',
+ '0': '௦'
+}, numberMap = {
+ '௧': '1',
+ '௨': '2',
+ '௩': '3',
+ '௪': '4',
+ '௫': '5',
+ '௬': '6',
+ '௭': '7',
+ '௮': '8',
+ '௯': '9',
+ '௦': '0'
+};
+
+export default moment.defineLocale('ta', {
+ months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),
+ weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),
+ weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),
+ weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, HH:mm',
+ LLLL : 'dddd, D MMMM YYYY, HH:mm'
+ },
+ calendar : {
+ sameDay : '[இன்று] LT',
+ nextDay : '[நாளை] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[நேற்று] LT',
+ lastWeek : '[கடந்த வாரம்] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s இல்',
+ past : '%s முன்',
+ s : 'ஒரு சில விநாடிகள்',
+ m : 'ஒரு நிமிடம்',
+ mm : '%d நிமிடங்கள்',
+ h : 'ஒரு மணி நேரம்',
+ hh : '%d மணி நேரம்',
+ d : 'ஒரு நாள்',
+ dd : '%d நாட்கள்',
+ M : 'ஒரு மாதம்',
+ MM : '%d மாதங்கள்',
+ y : 'ஒரு வருடம்',
+ yy : '%d ஆண்டுகள்'
+ },
+ ordinalParse: /\d{1,2}வது/,
+ ordinal : function (number) {
+ return number + 'வது';
+ },
+ preparse: function (string) {
+ return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
+ return numberMap[match];
+ });
+ },
+ postformat: function (string) {
+ return string.replace(/\d/g, function (match) {
+ return symbolMap[match];
+ });
+ },
+ // refer http://ta.wikipedia.org/s/1er1
+ meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 2) {
+ return ' யாமம்';
+ } else if (hour < 6) {
+ return ' வைகறை'; // வைகறை
+ } else if (hour < 10) {
+ return ' காலை'; // காலை
+ } else if (hour < 14) {
+ return ' நண்பகல்'; // நண்பகல்
+ } else if (hour < 18) {
+ return ' எற்பாடு'; // எற்பாடு
+ } else if (hour < 22) {
+ return ' மாலை'; // மாலை
+ } else {
+ return ' யாமம்';
+ }
+ },
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'யாமம்') {
+ return hour < 2 ? hour : hour + 12;
+ } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
+ return hour;
+ } else if (meridiem === 'நண்பகல்') {
+ return hour >= 10 ? hour : hour + 12;
+ } else {
+ return hour + 12;
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/te.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/te.js
new file mode 100644
index 00000000000..d9edc388d43
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/te.js
@@ -0,0 +1,79 @@
+//! moment.js locale configuration
+//! locale : Telugu [te]
+//! author : Krishna Chaitanya Thota : https://github.com/kcthota
+
+import moment from '../moment';
+
+export default moment.defineLocale('te', {
+ months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),
+ monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),
+ weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
+ weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
+ longDateFormat : {
+ LT : 'A h:mm',
+ LTS : 'A h:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY, A h:mm',
+ LLLL : 'dddd, D MMMM YYYY, A h:mm'
+ },
+ calendar : {
+ sameDay : '[నేడు] LT',
+ nextDay : '[రేపు] LT',
+ nextWeek : 'dddd, LT',
+ lastDay : '[నిన్న] LT',
+ lastWeek : '[గత] dddd, LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s లో',
+ past : '%s క్రితం',
+ s : 'కొన్ని క్షణాలు',
+ m : 'ఒక నిమిషం',
+ mm : '%d నిమిషాలు',
+ h : 'ఒక గంట',
+ hh : '%d గంటలు',
+ d : 'ఒక రోజు',
+ dd : '%d రోజులు',
+ M : 'ఒక నెల',
+ MM : '%d నెలలు',
+ y : 'ఒక సంవత్సరం',
+ yy : '%d సంవత్సరాలు'
+ },
+ ordinalParse : /\d{1,2}వ/,
+ ordinal : '%dవ',
+ meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === 'రాత్రి') {
+ return hour < 4 ? hour : hour + 12;
+ } else if (meridiem === 'ఉదయం') {
+ return hour;
+ } else if (meridiem === 'మధ్యాహ్నం') {
+ return hour >= 10 ? hour : hour + 12;
+ } else if (meridiem === 'సాయంత్రం') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'రాత్రి';
+ } else if (hour < 10) {
+ return 'ఉదయం';
+ } else if (hour < 17) {
+ return 'మధ్యాహ్నం';
+ } else if (hour < 20) {
+ return 'సాయంత్రం';
+ } else {
+ return 'రాత్రి';
+ }
+ },
+ week : {
+ dow : 0, // Sunday is the first day of the week.
+ doy : 6 // The week that contains Jan 1st is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tet.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tet.js
new file mode 100644
index 00000000000..e048e243b83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tet.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : Tetun Dili (East Timor) [tet]
+//! author : Joshua Brooks : https://github.com/joshbrooks
+//! author : Onorio De J. Afonso : https://github.com/marobo
+
+import moment from '../moment';
+
+export default moment.defineLocale('tet', {
+ months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),
+ weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),
+ weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),
+ weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Ohin iha] LT',
+ nextDay: '[Aban iha] LT',
+ nextWeek: 'dddd [iha] LT',
+ lastDay: '[Horiseik iha] LT',
+ lastWeek: 'dddd [semana kotuk] [iha] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'iha %s',
+ past : '%s liuba',
+ s : 'minutu balun',
+ m : 'minutu ida',
+ mm : 'minutus %d',
+ h : 'horas ida',
+ hh : 'horas %d',
+ d : 'loron ida',
+ dd : 'loron %d',
+ M : 'fulan ida',
+ MM : 'fulan %d',
+ y : 'tinan ida',
+ yy : 'tinan %d'
+ },
+ ordinalParse: /\d{1,2}(st|nd|rd|th)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/th.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/th.js
new file mode 100644
index 00000000000..423f827b341
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/th.js
@@ -0,0 +1,57 @@
+//! moment.js locale configuration
+//! locale : Thai [th]
+//! author : Kridsada Thanabulpong : https://github.com/sirn
+
+import moment from '../moment';
+
+export default moment.defineLocale('th', {
+ months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),
+ monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),
+ monthsParseExact: true,
+ weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
+ weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
+ weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'H:mm',
+ LTS : 'H:mm:ss',
+ L : 'YYYY/MM/DD',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY เวลา H:mm',
+ LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'
+ },
+ meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
+ isPM: function (input) {
+ return input === 'หลังเที่ยง';
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 12) {
+ return 'ก่อนเที่ยง';
+ } else {
+ return 'หลังเที่ยง';
+ }
+ },
+ calendar : {
+ sameDay : '[วันนี้ เวลา] LT',
+ nextDay : '[พรุ่งนี้ เวลา] LT',
+ nextWeek : 'dddd[หน้า เวลา] LT',
+ lastDay : '[เมื่อวานนี้ เวลา] LT',
+ lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'อีก %s',
+ past : '%sที่แล้ว',
+ s : 'ไม่กี่วินาที',
+ m : '1 นาที',
+ mm : '%d นาที',
+ h : '1 ชั่วโมง',
+ hh : '%d ชั่วโมง',
+ d : '1 วัน',
+ dd : '%d วัน',
+ M : '1 เดือน',
+ MM : '%d เดือน',
+ y : '1 ปี',
+ yy : '%d ปี'
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tl-ph.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tl-ph.js
new file mode 100644
index 00000000000..d93f6389b72
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tl-ph.js
@@ -0,0 +1,53 @@
+//! moment.js locale configuration
+//! locale : Tagalog (Philippines) [tl-ph]
+//! author : Dan Hagman : https://github.com/hagmandan
+
+import moment from '../moment';
+
+export default moment.defineLocale('tl-ph', {
+ months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),
+ monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
+ weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),
+ weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
+ weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'MM/D/YYYY',
+ LL : 'MMMM D, YYYY',
+ LLL : 'MMMM D, YYYY HH:mm',
+ LLLL : 'dddd, MMMM DD, YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: 'LT [ngayong araw]',
+ nextDay: '[Bukas ng] LT',
+ nextWeek: 'LT [sa susunod na] dddd',
+ lastDay: 'LT [kahapon]',
+ lastWeek: 'LT [noong nakaraang] dddd',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'sa loob ng %s',
+ past : '%s ang nakalipas',
+ s : 'ilang segundo',
+ m : 'isang minuto',
+ mm : '%d minuto',
+ h : 'isang oras',
+ hh : '%d oras',
+ d : 'isang araw',
+ dd : '%d araw',
+ M : 'isang buwan',
+ MM : '%d buwan',
+ y : 'isang taon',
+ yy : '%d taon'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tlh.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tlh.js
new file mode 100644
index 00000000000..af1b08d4ba7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tlh.js
@@ -0,0 +1,110 @@
+//! moment.js locale configuration
+//! locale : Klingon [tlh]
+//! author : Dominika Kruk : https://github.com/amaranthrose
+
+import moment from '../moment';
+
+var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
+
+function translateFuture(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'leS' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'waQ' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'nem' :
+ time + ' pIq';
+ return time;
+}
+
+function translatePast(output) {
+ var time = output;
+ time = (output.indexOf('jaj') !== -1) ?
+ time.slice(0, -3) + 'Hu’' :
+ (output.indexOf('jar') !== -1) ?
+ time.slice(0, -3) + 'wen' :
+ (output.indexOf('DIS') !== -1) ?
+ time.slice(0, -3) + 'ben' :
+ time + ' ret';
+ return time;
+}
+
+function translate(number, withoutSuffix, string, isFuture) {
+ var numberNoun = numberAsNoun(number);
+ switch (string) {
+ case 'mm':
+ return numberNoun + ' tup';
+ case 'hh':
+ return numberNoun + ' rep';
+ case 'dd':
+ return numberNoun + ' jaj';
+ case 'MM':
+ return numberNoun + ' jar';
+ case 'yy':
+ return numberNoun + ' DIS';
+ }
+}
+
+function numberAsNoun(number) {
+ var hundred = Math.floor((number % 1000) / 100),
+ ten = Math.floor((number % 100) / 10),
+ one = number % 10,
+ word = '';
+ if (hundred > 0) {
+ word += numbersNouns[hundred] + 'vatlh';
+ }
+ if (ten > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';
+ }
+ if (one > 0) {
+ word += ((word !== '') ? ' ' : '') + numbersNouns[one];
+ }
+ return (word === '') ? 'pagh' : word;
+}
+
+export default moment.defineLocale('tlh', {
+ months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),
+ monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[DaHjaj] LT',
+ nextDay: '[wa’leS] LT',
+ nextWeek: 'LLL',
+ lastDay: '[wa’Hu’] LT',
+ lastWeek: 'LLL',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : translateFuture,
+ past : translatePast,
+ s : 'puS lup',
+ m : 'wa’ tup',
+ mm : translate,
+ h : 'wa’ rep',
+ hh : translate,
+ d : 'wa’ jaj',
+ dd : translate,
+ M : 'wa’ jar',
+ MM : translate,
+ y : 'wa’ DIS',
+ yy : translate
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tr.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tr.js
new file mode 100644
index 00000000000..0ae427acbe3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tr.js
@@ -0,0 +1,81 @@
+//! moment.js locale configuration
+//! locale : Turkish [tr]
+//! authors : Erhan Gundogan : https://github.com/erhangundogan,
+//! Burak Yiğit Kaya: https://github.com/BYK
+
+import moment from '../moment';
+
+var suffixes = {
+ 1: '\'inci',
+ 5: '\'inci',
+ 8: '\'inci',
+ 70: '\'inci',
+ 80: '\'inci',
+ 2: '\'nci',
+ 7: '\'nci',
+ 20: '\'nci',
+ 50: '\'nci',
+ 3: '\'üncü',
+ 4: '\'üncü',
+ 100: '\'üncü',
+ 6: '\'ncı',
+ 9: '\'uncu',
+ 10: '\'uncu',
+ 30: '\'uncu',
+ 60: '\'ıncı',
+ 90: '\'ıncı'
+};
+
+export default moment.defineLocale('tr', {
+ months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),
+ monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
+ weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),
+ weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
+ weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[bugün saat] LT',
+ nextDay : '[yarın saat] LT',
+ nextWeek : '[haftaya] dddd [saat] LT',
+ lastDay : '[dün] LT',
+ lastWeek : '[geçen hafta] dddd [saat] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : '%s sonra',
+ past : '%s önce',
+ s : 'birkaç saniye',
+ m : 'bir dakika',
+ mm : '%d dakika',
+ h : 'bir saat',
+ hh : '%d saat',
+ d : 'bir gün',
+ dd : '%d gün',
+ M : 'bir ay',
+ MM : '%d ay',
+ y : 'bir yıl',
+ yy : '%d yıl'
+ },
+ ordinalParse: /\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,
+ ordinal : function (number) {
+ if (number === 0) { // special case for zero
+ return number + '\'ıncı';
+ }
+ var a = number % 10,
+ b = number % 100 - a,
+ c = number >= 100 ? 100 : null;
+ return number + (suffixes[a] || suffixes[b] || suffixes[c]);
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzl.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzl.js
new file mode 100644
index 00000000000..d4fcdbfde2d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzl.js
@@ -0,0 +1,82 @@
+//! moment.js locale configuration
+//! locale : Talossan [tzl]
+//! author : Robin van der Vliet : https://github.com/robin0van0der0v
+//! author : Iustì Canun
+
+import moment from '../moment';
+
+// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
+// This is currently too difficult (maybe even impossible) to add.
+export default moment.defineLocale('tzl', {
+ months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),
+ monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
+ weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
+ weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
+ weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
+ longDateFormat : {
+ LT : 'HH.mm',
+ LTS : 'HH.mm.ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D. MMMM [dallas] YYYY',
+ LLL : 'D. MMMM [dallas] YYYY HH.mm',
+ LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'
+ },
+ meridiemParse: /d\'o|d\'a/i,
+ isPM : function (input) {
+ return 'd\'o' === input.toLowerCase();
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours > 11) {
+ return isLower ? 'd\'o' : 'D\'O';
+ } else {
+ return isLower ? 'd\'a' : 'D\'A';
+ }
+ },
+ calendar : {
+ sameDay : '[oxhi à] LT',
+ nextDay : '[demà à] LT',
+ nextWeek : 'dddd [à] LT',
+ lastDay : '[ieiri à] LT',
+ lastWeek : '[sür el] dddd [lasteu à] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'osprei %s',
+ past : 'ja%s',
+ s : processRelativeTime,
+ m : processRelativeTime,
+ mm : processRelativeTime,
+ h : processRelativeTime,
+ hh : processRelativeTime,
+ d : processRelativeTime,
+ dd : processRelativeTime,
+ M : processRelativeTime,
+ MM : processRelativeTime,
+ y : processRelativeTime,
+ yy : processRelativeTime
+ },
+ ordinalParse: /\d{1,2}\./,
+ ordinal : '%d.',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
+function processRelativeTime(number, withoutSuffix, key, isFuture) {
+ var format = {
+ 's': ['viensas secunds', '\'iensas secunds'],
+ 'm': ['\'n míut', '\'iens míut'],
+ 'mm': [number + ' míuts', '' + number + ' míuts'],
+ 'h': ['\'n þora', '\'iensa þora'],
+ 'hh': [number + ' þoras', '' + number + ' þoras'],
+ 'd': ['\'n ziua', '\'iensa ziua'],
+ 'dd': [number + ' ziuas', '' + number + ' ziuas'],
+ 'M': ['\'n mes', '\'iens mes'],
+ 'MM': [number + ' mesen', '' + number + ' mesen'],
+ 'y': ['\'n ar', '\'iens ar'],
+ 'yy': [number + ' ars', '' + number + ' ars']
+ };
+ return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);
+}
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm-latn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm-latn.js
new file mode 100644
index 00000000000..aaf62d70c05
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm-latn.js
@@ -0,0 +1,49 @@
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight Latin [tzm-latn]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+import moment from '../moment';
+
+export default moment.defineLocale('tzm-latn', {
+ months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),
+ weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[asdkh g] LT',
+ nextDay: '[aska g] LT',
+ nextWeek: 'dddd [g] LT',
+ lastDay: '[assant g] LT',
+ lastWeek: 'dddd [g] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'dadkh s yan %s',
+ past : 'yan %s',
+ s : 'imik',
+ m : 'minuḍ',
+ mm : '%d minuḍ',
+ h : 'saɛa',
+ hh : '%d tassaɛin',
+ d : 'ass',
+ dd : '%d ossan',
+ M : 'ayowr',
+ MM : '%d iyyirn',
+ y : 'asgas',
+ yy : '%d isgasn'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm.js
new file mode 100644
index 00000000000..663f85f4cb9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/tzm.js
@@ -0,0 +1,49 @@
+//! moment.js locale configuration
+//! locale : Central Atlas Tamazight [tzm]
+//! author : Abdel Said : https://github.com/abdelsaid
+
+import moment from '../moment';
+
+export default moment.defineLocale('tzm', {
+ months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),
+ weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS: 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
+ nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
+ nextWeek: 'dddd [ⴴ] LT',
+ lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
+ lastWeek: 'dddd [ⴴ] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
+ past : 'ⵢⴰⵏ %s',
+ s : 'ⵉⵎⵉⴽ',
+ m : 'ⵎⵉⵏⵓⴺ',
+ mm : '%d ⵎⵉⵏⵓⴺ',
+ h : 'ⵙⴰⵄⴰ',
+ hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
+ d : 'ⴰⵙⵙ',
+ dd : '%d oⵙⵙⴰⵏ',
+ M : 'ⴰⵢoⵓⵔ',
+ MM : '%d ⵉⵢⵢⵉⵔⵏ',
+ y : 'ⴰⵙⴳⴰⵙ',
+ yy : '%d ⵉⵙⴳⴰⵙⵏ'
+ },
+ week : {
+ dow : 6, // Saturday is the first day of the week.
+ doy : 12 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uk.js
new file mode 100644
index 00000000000..f5f793cfb4f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uk.js
@@ -0,0 +1,137 @@
+//! moment.js locale configuration
+//! locale : Ukrainian [uk]
+//! author : zemlanin : https://github.com/zemlanin
+//! Author : Menelion Elensúle : https://github.com/Oire
+
+import moment from '../moment';
+
+function plural(word, num) {
+ var forms = word.split('_');
+ return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
+}
+function relativeTimeWithPlural(number, withoutSuffix, key) {
+ var format = {
+ 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
+ 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
+ 'dd': 'день_дні_днів',
+ 'MM': 'місяць_місяці_місяців',
+ 'yy': 'рік_роки_років'
+ };
+ if (key === 'm') {
+ return withoutSuffix ? 'хвилина' : 'хвилину';
+ }
+ else if (key === 'h') {
+ return withoutSuffix ? 'година' : 'годину';
+ }
+ else {
+ return number + ' ' + plural(format[key], +number);
+ }
+}
+function weekdaysCaseReplace(m, format) {
+ var weekdays = {
+ 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),
+ 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),
+ 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')
+ },
+ nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ?
+ 'accusative' :
+ ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ?
+ 'genitive' :
+ 'nominative');
+ return weekdays[nounCase][m.day()];
+}
+function processHoursFunction(str) {
+ return function () {
+ return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
+ };
+}
+
+export default moment.defineLocale('uk', {
+ months : {
+ 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),
+ 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')
+ },
+ monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),
+ weekdays : weekdaysCaseReplace,
+ weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD.MM.YYYY',
+ LL : 'D MMMM YYYY р.',
+ LLL : 'D MMMM YYYY р., HH:mm',
+ LLLL : 'dddd, D MMMM YYYY р., HH:mm'
+ },
+ calendar : {
+ sameDay: processHoursFunction('[Сьогодні '),
+ nextDay: processHoursFunction('[Завтра '),
+ lastDay: processHoursFunction('[Вчора '),
+ nextWeek: processHoursFunction('[У] dddd ['),
+ lastWeek: function () {
+ switch (this.day()) {
+ case 0:
+ case 3:
+ case 5:
+ case 6:
+ return processHoursFunction('[Минулої] dddd [').call(this);
+ case 1:
+ case 2:
+ case 4:
+ return processHoursFunction('[Минулого] dddd [').call(this);
+ }
+ },
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : 'за %s',
+ past : '%s тому',
+ s : 'декілька секунд',
+ m : relativeTimeWithPlural,
+ mm : relativeTimeWithPlural,
+ h : 'годину',
+ hh : relativeTimeWithPlural,
+ d : 'день',
+ dd : relativeTimeWithPlural,
+ M : 'місяць',
+ MM : relativeTimeWithPlural,
+ y : 'рік',
+ yy : relativeTimeWithPlural
+ },
+ // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
+ meridiemParse: /ночі|ранку|дня|вечора/,
+ isPM: function (input) {
+ return /^(дня|вечора)$/.test(input);
+ },
+ meridiem : function (hour, minute, isLower) {
+ if (hour < 4) {
+ return 'ночі';
+ } else if (hour < 12) {
+ return 'ранку';
+ } else if (hour < 17) {
+ return 'дня';
+ } else {
+ return 'вечора';
+ }
+ },
+ ordinalParse: /\d{1,2}-(й|го)/,
+ ordinal: function (number, period) {
+ switch (period) {
+ case 'M':
+ case 'd':
+ case 'DDD':
+ case 'w':
+ case 'W':
+ return number + '-й';
+ case 'D':
+ return number + '-го';
+ default:
+ return number;
+ }
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 1st is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uz.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uz.js
new file mode 100644
index 00000000000..24a80e19031
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/uz.js
@@ -0,0 +1,49 @@
+//! moment.js locale configuration
+//! locale : Uzbek [uz]
+//! author : Sardor Muminov : https://github.com/muminoff
+
+import moment from '../moment';
+
+export default moment.defineLocale('uz', {
+ months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),
+ monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
+ weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
+ weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
+ weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'D MMMM YYYY, dddd HH:mm'
+ },
+ calendar : {
+ sameDay : '[Бугун соат] LT [да]',
+ nextDay : '[Эртага] LT [да]',
+ nextWeek : 'dddd [куни соат] LT [да]',
+ lastDay : '[Кеча соат] LT [да]',
+ lastWeek : '[Утган] dddd [куни соат] LT [да]',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'Якин %s ичида',
+ past : 'Бир неча %s олдин',
+ s : 'фурсат',
+ m : 'бир дакика',
+ mm : '%d дакика',
+ h : 'бир соат',
+ hh : '%d соат',
+ d : 'бир кун',
+ dd : '%d кун',
+ M : 'бир ой',
+ MM : '%d ой',
+ y : 'бир йил',
+ yy : '%d йил'
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 7 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/vi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/vi.js
new file mode 100644
index 00000000000..bbd81cada9e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/vi.js
@@ -0,0 +1,70 @@
+//! moment.js locale configuration
+//! locale : Vietnamese [vi]
+//! author : Bang Nguyen : https://github.com/bangnk
+
+import moment from '../moment';
+
+export default moment.defineLocale('vi', {
+ months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),
+ monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),
+ weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
+ weekdaysParseExact : true,
+ meridiemParse: /sa|ch/i,
+ isPM : function (input) {
+ return /^ch$/i.test(input);
+ },
+ meridiem : function (hours, minutes, isLower) {
+ if (hours < 12) {
+ return isLower ? 'sa' : 'SA';
+ } else {
+ return isLower ? 'ch' : 'CH';
+ }
+ },
+ longDateFormat : {
+ LT : 'HH:mm',
+ LTS : 'HH:mm:ss',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM [năm] YYYY',
+ LLL : 'D MMMM [năm] YYYY HH:mm',
+ LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',
+ l : 'DD/M/YYYY',
+ ll : 'D MMM YYYY',
+ lll : 'D MMM YYYY HH:mm',
+ llll : 'ddd, D MMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay: '[Hôm nay lúc] LT',
+ nextDay: '[Ngày mai lúc] LT',
+ nextWeek: 'dddd [tuần tới lúc] LT',
+ lastDay: '[Hôm qua lúc] LT',
+ lastWeek: 'dddd [tuần rồi lúc] LT',
+ sameElse: 'L'
+ },
+ relativeTime : {
+ future : '%s tới',
+ past : '%s trước',
+ s : 'vài giây',
+ m : 'một phút',
+ mm : '%d phút',
+ h : 'một giờ',
+ hh : '%d giờ',
+ d : 'một ngày',
+ dd : '%d ngày',
+ M : 'một tháng',
+ MM : '%d tháng',
+ y : 'một năm',
+ yy : '%d năm'
+ },
+ ordinalParse: /\d{1,2}/,
+ ordinal : function (number) {
+ return number;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/x-pseudo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/x-pseudo.js
new file mode 100644
index 00000000000..008359eb51c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/x-pseudo.js
@@ -0,0 +1,58 @@
+//! moment.js locale configuration
+//! locale : Pseudo [x-pseudo]
+//! author : Andrew Hood : https://github.com/andrewhood125
+
+import moment from '../moment';
+
+export default moment.defineLocale('x-pseudo', {
+ months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),
+ monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),
+ monthsParseExact : true,
+ weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),
+ weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
+ weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
+ weekdaysParseExact : true,
+ longDateFormat : {
+ LT : 'HH:mm',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY HH:mm',
+ LLLL : 'dddd, D MMMM YYYY HH:mm'
+ },
+ calendar : {
+ sameDay : '[T~ódá~ý át] LT',
+ nextDay : '[T~ómó~rró~w át] LT',
+ nextWeek : 'dddd [át] LT',
+ lastDay : '[Ý~ést~érdá~ý át] LT',
+ lastWeek : '[L~ást] dddd [át] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'í~ñ %s',
+ past : '%s á~gó',
+ s : 'á ~féw ~sécó~ñds',
+ m : 'á ~míñ~úté',
+ mm : '%d m~íñú~tés',
+ h : 'á~ñ hó~úr',
+ hh : '%d h~óúrs',
+ d : 'á ~dáý',
+ dd : '%d d~áýs',
+ M : 'á ~móñ~th',
+ MM : '%d m~óñt~hs',
+ y : 'á ~ýéár',
+ yy : '%d ý~éárs'
+ },
+ ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+ ordinal : function (number) {
+ var b = number % 10,
+ output = (~~(number % 100 / 10) === 1) ? 'th' :
+ (b === 1) ? 'st' :
+ (b === 2) ? 'nd' :
+ (b === 3) ? 'rd' : 'th';
+ return number + output;
+ },
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/yo.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/yo.js
new file mode 100644
index 00000000000..e7ee7a28642
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/yo.js
@@ -0,0 +1,50 @@
+//! moment.js locale configuration
+//! locale : Yoruba Nigeria [yo]
+//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
+
+import moment from '../moment';
+
+export default moment.defineLocale('yo', {
+ months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),
+ monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
+ weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
+ weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
+ weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
+ longDateFormat : {
+ LT : 'h:mm A',
+ LTS : 'h:mm:ss A',
+ L : 'DD/MM/YYYY',
+ LL : 'D MMMM YYYY',
+ LLL : 'D MMMM YYYY h:mm A',
+ LLLL : 'dddd, D MMMM YYYY h:mm A'
+ },
+ calendar : {
+ sameDay : '[Ònì ni] LT',
+ nextDay : '[Ọ̀la ni] LT',
+ nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT',
+ lastDay : '[Àna ni] LT',
+ lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
+ sameElse : 'L'
+ },
+ relativeTime : {
+ future : 'ní %s',
+ past : '%s kọjá',
+ s : 'ìsẹjú aayá die',
+ m : 'ìsẹjú kan',
+ mm : 'ìsẹjú %d',
+ h : 'wákati kan',
+ hh : 'wákati %d',
+ d : 'ọjọ́ kan',
+ dd : 'ọjọ́ %d',
+ M : 'osù kan',
+ MM : 'osù %d',
+ y : 'ọdún kan',
+ yy : 'ọdún %d'
+ },
+ ordinalParse : /ọjọ́\s\d{1,2}/,
+ ordinal : 'ọjọ́ %d',
+ week : {
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-cn.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-cn.js
new file mode 100644
index 00000000000..031c50e6646
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-cn.js
@@ -0,0 +1,118 @@
+//! moment.js locale configuration
+//! locale : Chinese (China) [zh-cn]
+//! author : suupic : https://github.com/suupic
+//! author : Zeno Zeng : https://github.com/zenozeng
+
+import moment from '../moment';
+
+export default moment.defineLocale('zh-cn', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah点mm分',
+ LTS : 'Ah点m分s秒',
+ L : 'YYYY-MM-DD',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah点mm分',
+ LLLL : 'YYYY年MMMD日ddddAh点mm分',
+ l : 'YYYY-MM-DD',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah点mm分',
+ llll : 'YYYY年MMMD日ddddAh点mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour: function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' ||
+ meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ } else {
+ // '中午'
+ return hour >= 11 ? hour : hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : function () {
+ return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
+ },
+ nextDay : function () {
+ return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
+ },
+ lastDay : function () {
+ return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
+ },
+ nextWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = moment().startOf('week');
+ prefix = this.diff(startOfWeek, 'days') >= 7 ? '[下]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ lastWeek : function () {
+ var startOfWeek, prefix;
+ startOfWeek = moment().startOf('week');
+ prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
+ return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
+ },
+ sameElse : 'LL'
+ },
+ ordinalParse: /\d{1,2}(日|月|周)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd':
+ case 'D':
+ case 'DDD':
+ return number + '日';
+ case 'M':
+ return number + '月';
+ case 'w':
+ case 'W':
+ return number + '周';
+ default:
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s内',
+ past : '%s前',
+ s : '几秒',
+ m : '1 分钟',
+ mm : '%d 分钟',
+ h : '1 小时',
+ hh : '%d 小时',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 个月',
+ MM : '%d 个月',
+ y : '1 年',
+ yy : '%d 年'
+ },
+ week : {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow : 1, // Monday is the first day of the week.
+ doy : 4 // The week that contains Jan 4th is the first week of the year.
+ }
+});
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-hk.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-hk.js
new file mode 100644
index 00000000000..51d385d89af
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-hk.js
@@ -0,0 +1,95 @@
+//! moment.js locale configuration
+//! locale : Chinese (Hong Kong) [zh-hk]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+//! author : Konstantin : https://github.com/skfd
+
+import moment from '../moment';
+
+export default moment.defineLocale('zh-hk', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-tw.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-tw.js
new file mode 100644
index 00000000000..577d61eb59f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/locale/zh-tw.js
@@ -0,0 +1,94 @@
+//! moment.js locale configuration
+//! locale : Chinese (Taiwan) [zh-tw]
+//! author : Ben : https://github.com/ben-lin
+//! author : Chris Lam : https://github.com/hehachris
+
+import moment from '../moment';
+
+export default moment.defineLocale('zh-tw', {
+ months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
+ monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
+ weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
+ weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),
+ weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
+ longDateFormat : {
+ LT : 'Ah點mm分',
+ LTS : 'Ah點m分s秒',
+ L : 'YYYY年MMMD日',
+ LL : 'YYYY年MMMD日',
+ LLL : 'YYYY年MMMD日Ah點mm分',
+ LLLL : 'YYYY年MMMD日ddddAh點mm分',
+ l : 'YYYY年MMMD日',
+ ll : 'YYYY年MMMD日',
+ lll : 'YYYY年MMMD日Ah點mm分',
+ llll : 'YYYY年MMMD日ddddAh點mm分'
+ },
+ meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
+ meridiemHour : function (hour, meridiem) {
+ if (hour === 12) {
+ hour = 0;
+ }
+ if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
+ return hour;
+ } else if (meridiem === '中午') {
+ return hour >= 11 ? hour : hour + 12;
+ } else if (meridiem === '下午' || meridiem === '晚上') {
+ return hour + 12;
+ }
+ },
+ meridiem : function (hour, minute, isLower) {
+ var hm = hour * 100 + minute;
+ if (hm < 600) {
+ return '凌晨';
+ } else if (hm < 900) {
+ return '早上';
+ } else if (hm < 1130) {
+ return '上午';
+ } else if (hm < 1230) {
+ return '中午';
+ } else if (hm < 1800) {
+ return '下午';
+ } else {
+ return '晚上';
+ }
+ },
+ calendar : {
+ sameDay : '[今天]LT',
+ nextDay : '[明天]LT',
+ nextWeek : '[下]ddddLT',
+ lastDay : '[昨天]LT',
+ lastWeek : '[上]ddddLT',
+ sameElse : 'L'
+ },
+ ordinalParse: /\d{1,2}(日|月|週)/,
+ ordinal : function (number, period) {
+ switch (period) {
+ case 'd' :
+ case 'D' :
+ case 'DDD' :
+ return number + '日';
+ case 'M' :
+ return number + '月';
+ case 'w' :
+ case 'W' :
+ return number + '週';
+ default :
+ return number;
+ }
+ },
+ relativeTime : {
+ future : '%s內',
+ past : '%s前',
+ s : '幾秒',
+ m : '1 分鐘',
+ mm : '%d 分鐘',
+ h : '1 小時',
+ hh : '%d 小時',
+ d : '1 天',
+ dd : '%d 天',
+ M : '1 個月',
+ MM : '%d 個月',
+ y : '1 年',
+ yy : '%d 年'
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/moment.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/moment.js
new file mode 100644
index 00000000000..859c2f9bc82
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/src/moment.js
@@ -0,0 +1,82 @@
+//! moment.js
+//! version : 2.17.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+import { hooks as moment, setHookCallback } from './lib/utils/hooks';
+
+moment.version = '2.17.1';
+
+import {
+ min,
+ max,
+ now,
+ isMoment,
+ momentPrototype as fn,
+ createUTC as utc,
+ createUnix as unix,
+ createLocal as local,
+ createInvalid as invalid,
+ createInZone as parseZone
+} from './lib/moment/moment';
+
+import {
+ getCalendarFormat
+} from './lib/moment/calendar';
+
+import {
+ defineLocale,
+ updateLocale,
+ getSetGlobalLocale as locale,
+ getLocale as localeData,
+ listLocales as locales,
+ listMonths as months,
+ listMonthsShort as monthsShort,
+ listWeekdays as weekdays,
+ listWeekdaysMin as weekdaysMin,
+ listWeekdaysShort as weekdaysShort
+} from './lib/locale/locale';
+
+import {
+ isDuration,
+ createDuration as duration,
+ getSetRelativeTimeRounding as relativeTimeRounding,
+ getSetRelativeTimeThreshold as relativeTimeThreshold
+} from './lib/duration/duration';
+
+import { normalizeUnits } from './lib/units/units';
+
+import isDate from './lib/utils/is-date';
+
+setHookCallback(local);
+
+moment.fn = fn;
+moment.min = min;
+moment.max = max;
+moment.now = now;
+moment.utc = utc;
+moment.unix = unix;
+moment.months = months;
+moment.isDate = isDate;
+moment.locale = locale;
+moment.invalid = invalid;
+moment.duration = duration;
+moment.isMoment = isMoment;
+moment.weekdays = weekdays;
+moment.parseZone = parseZone;
+moment.localeData = localeData;
+moment.isDuration = isDuration;
+moment.monthsShort = monthsShort;
+moment.weekdaysMin = weekdaysMin;
+moment.defineLocale = defineLocale;
+moment.updateLocale = updateLocale;
+moment.locales = locales;
+moment.weekdaysShort = weekdaysShort;
+moment.normalizeUnits = normalizeUnits;
+moment.relativeTimeRounding = relativeTimeRounding;
+moment.relativeTimeThreshold = relativeTimeThreshold;
+moment.calendarFormat = getCalendarFormat;
+moment.prototype = fn;
+
+export default moment;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/default.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/default.js
new file mode 100644
index 00000000000..095a78f54ba
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/default.js
@@ -0,0 +1,5 @@
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ global.moment = factory()
+}(this, (function () { 'use strict';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/locale-header.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/locale-header.js
new file mode 100644
index 00000000000..eadcc1d81f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/locale-header.js
@@ -0,0 +1,6 @@
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../moment')) :
+ typeof define === 'function' && define.amd ? define(['../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/test-header.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/test-header.js
new file mode 100644
index 00000000000..1b208a359bb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/moment/templates/test-header.js
@@ -0,0 +1,6 @@
+;(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined'
+ && typeof require === 'function' ? factory(require('../../moment')) :
+ typeof define === 'function' && define.amd ? define(['../../moment'], factory) :
+ factory(global.moment)
+}(this, (function (moment) { 'use strict';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.bower.json
new file mode 100644
index 00000000000..b353dd13762
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.bower.json
@@ -0,0 +1,90 @@
+{
+ "name": "neon-animation",
+ "description": "A system for animating Polymer-based web components",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "web-animations"
+ ],
+ "main": [
+ "neon-animated-pages.html",
+ "neon-animatable-behavior.html",
+ "neon-animation-behavior.html",
+ "neon-animation-runner-behavior.html",
+ "neon-shared-element-animatable-behavior.html",
+ "neon-shared-element-animation-behavior.html",
+ "neon-animatable.html",
+ "neon-animations.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/neon-animation"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/neon-animation",
+ "ignore": [],
+ "demos": {
+ "Demo": "demo/index.html"
+ },
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "iron-selector": "PolymerElements/iron-selector#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "app-layout": "PolymerElements/app-layout#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "paper-item": "PolymerElements/paper-item#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "iron-selector": "PolymerElements/iron-selector#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0"
+ },
+ "devDependencies": {
+ "app-layout": "PolymerElements/app-layout#^0.10.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "version": "2.2.1",
+ "_release": "2.2.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.1",
+ "commit": "e7508084d0a99cc9fedad1964efb4e69c8527629"
+ },
+ "_source": "https://github.com/PolymerElements/neon-animation.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/neon-animation"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/CODEOWNERS
new file mode 100644
index 00000000000..9ef9eb64211
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @e111077
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..08943a1e152
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/neon-animation/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.travis.yml
new file mode 100644
index 00000000000..dfdc7d99adc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+env:
+ global:
+ - secure: >-
+ coZBjQTrTsejOS2utVzo0hhyYRF40H2KoN30G44tRxVKV/0orSm1HJbvG2YDb/tmAFtEObJmNlYonu1I3G9RVncn9y69nRf8BjLHrpOIhNvesug7kPUuprj5KRoLo9O0UyIYmUh6i4YGt1aAeR/Wq/XVifSNIXnAVguzntbSmqvWJdqj8+FHmNzyo5269+tnOzTruXByrUcSZnvNgHjCYFZOY00a29cyK6fTdd0Qbzi9cvhEDfx1j6uXzYah7bdA8caunW1HvxwI+jiV8yEVySB7eku+SHA+8JJUIIZEL1iCASAqqVbTUoOxtfgbTXQRJdVAuDNj1J+AqFVtuJpJl4xvX97dF9FVQvgyLW9fpeb7rojdU0TSazBpVi7LLvocQjofp8bbAtbJ8Z0BN+/3DgM33uDTF8DeBGj2WmR+49F2oPnYh7FwjhbiOVqkOKyolqrRpK0PYczVdHusR6+cONkGcLzO9G5nakWzE9diJSW+nw9qD3bVL99ZzHK+6U7+R75KJdxj0V7VA1lkvWRlchxXrpsEoM0AQEUf97LsvkTpXPQ4Wf9XkCxFRAicSTeDijLCPy3ti0L6D6x9sBZwV5d3ODnkdxCAy2aY7g2YEWuuBDZC+W1ggQ3Xe705GwbBNk22HikA6XOVX9lb3xm7SnenfDGkFhNDzRijoGg96jU=
+ - secure: >-
+ hJ6VMaJqDh5HPdeERIqoOcdWZJTAOTeS/Lr6FLCWEOOvYPxwRi/L1pKbVuYf2ugeS2Z0TEvAS7RdfjRuC+NGFhsmpnpBlxAyJhVKcXrhHKVtoFK04xaCD2wDMkPaZiDZQRGF/H6/PyuoB4Tqss3aN/DC9eSMwY9HFfoeYRIwiJeb8Kq09pBtvoxU151VQt+jlmyCVw7rhNDTAazaCGKicgvbAtxSJ6xNswNfqOrtCYB+WW5CpUE+qqTjjbistSQJu3hjk2UwFMLJZXtJWdkcD88vNdHy3mtNZQNtE8x+ckNVqgJ98DyAN7HLUU0GvzTOiOGFfwr+bpl6Td8klR2YoQOW4ypluAetcDN9X7tKOxDQaaI8AyPLXPWi9JcESEGAeLzpfkWZ6clrQmqfLdVDsqYKPldF9m7Ozjdhq40r3qFdQAdEI29dBOKOalaZXgWnvU2wu5FBtWnBMSk89zOYC5wGR0E+wOMMMRu90LuMQY40Myhqso5iUFL5qhrn41I8ZfFi0EyOgEeKzYH3zrdo7/msEkCXxI0SKfG1CGSQSOT2luO6Xu6xIuf7qoWYKJiJQ40ObsRKn0cA4GQpNZe/dgKMRH2zzfKW6d2BSAsZGTDJG14XcDi9d/zz7djgboMjc/A6sH8L3c8BkbUa4wuyJRNu7VBZQHq5yrnHpxC6SbA=
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/README.md
new file mode 100644
index 00000000000..a8d1a4166fa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/README.md
@@ -0,0 +1,299 @@
+## Changes in 2.0
+* ⚠️ This Element is now deprecated ⚠️
+ * Please use the web animations api or CSS animations
+* Web animations polyfill is now a dev dependency
+
+# neon-animation
+
+`neon-animation` is a suite of elements and behaviors to implement pluggable animated transitions for Polymer Elements using [Web Animations](https://w3c.github.io/web-animations/).
+
+*Warning: The API may change.*
+
+* [A basic animatable element](#basic)
+* [Animation configuration](#configuration)
+ * [Animation types](#configuration-types)
+ * [Configuration properties](#configuration-properties)
+ * [Using multiple animations](#configuration-multiple)
+ * [Running animations encapsulated in children nodes](#configuration-encapsulation)
+* [Page transitions](#page-transitions)
+ * [Shared element animations](#shared-element)
+ * [Declarative page transitions](#declarative-page)
+* [Included animations](#animations)
+
+<a name="basic"></a>
+## A basic animatable element
+
+Elements that can be animated should implement the `Polymer.NeonAnimatableBehavior` behavior, or `Polymer.NeonAnimationRunnerBehavior` if they're also responsible for running an animation.
+
+```js
+Polymer({
+ is: 'my-animatable',
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+ properties: {
+ animationConfig: {
+ value: function() {
+ return {
+ // provided by neon-animation/animations/scale-down-animation.html
+ name: 'scale-down-animation',
+ node: this
+ }
+ }
+ }
+ },
+ listeners: {
+ // this event is fired when the animation finishes
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+ animate: function() {
+ // run scale-down-animation
+ this.playAnimation();
+ },
+ _onNeonAnimationFinish: function() {
+ console.log('animation done!');
+ }
+});
+```
+
+
+<a name="configuration"></a>
+## Animation configuration
+
+<a name="configuration-types"></a>
+### Animation types
+
+An element might run different animations, for example it might do something different when it enters the view and when it exits from view. You can set the `animationConfig` property to a map from an animation type to configuration.
+
+```js
+Polymer({
+ is: 'my-dialog',
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+ properties: {
+ opened: {
+ type: Boolean
+ },
+ animationConfig: {
+ value: function() {
+ return {
+ 'entry': {
+ // provided by neon-animation/animations/scale-up-animation.html
+ name: 'scale-up-animation',
+ node: this
+ },
+ 'exit': {
+ // provided by neon-animation/animations/fade-out-animation.html
+ name: 'fade-out-animation',
+ node: this
+ }
+ }
+ }
+ }
+ },
+ listeners: {
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+ show: function() {
+ this.opened = true;
+ this.style.display = 'inline-block';
+ // run scale-up-animation
+ this.playAnimation('entry');
+ },
+ hide: function() {
+ this.opened = false;
+ // run fade-out-animation
+ this.playAnimation('exit');
+ },
+ _onNeonAnimationFinish: function() {
+ if (!this.opened) {
+ this.style.display = 'none';
+ }
+ }
+});
+```
+
+
+You can also use the convenience properties `entryAnimation` and `exitAnimation` to set `entry` and `exit` animations:
+
+```js
+properties: {
+ entryAnimation: {
+ value: 'scale-up-animation'
+ },
+ exitAnimation: {
+ value: 'fade-out-animation'
+ }
+}
+```
+
+<a name="configuration-properties"></a>
+### Configuration properties
+
+You can pass additional parameters to configure an animation in the animation configuration object.
+All animations should accept the following properties:
+
+ * `name`: The name of an animation, ie. an element implementing `Polymer.NeonAnimationBehavior`.
+ * `node`: The target node to apply the animation to. Defaults to `this`.
+ * `timing`: Timing properties to use in this animation. They match the [Web Animations Animation Effect Timing interface](https://w3c.github.io/web-animations/#the-animationeffecttiming-interface). The
+ properties include the following:
+ * `duration`: The duration of the animation in milliseconds.
+ * `delay`: The delay before the start of the animation in milliseconds.
+ * `easing`: A timing function for the animation. Matches the CSS timing function values.
+
+Animations may define additional configuration properties and they are listed in their documentation.
+
+<a name="configuration-multiple"></a>
+### Using multiple animations
+
+Set the animation configuration to an array to combine animations, like this:
+
+```js
+animationConfig: {
+ value: function() {
+ return {
+ // fade-in-animation is run with a 50ms delay from slide-down-animation
+ 'entry': [{
+ name: 'slide-down-animation',
+ node: this
+ }, {
+ name: 'fade-in-animation',
+ node: this,
+ timing: {delay: 50}
+ }]
+ }
+ }
+}
+```
+
+<a name="configuration-encapsulation"></a>
+### Running animations encapsulated in children nodes
+
+You can include animations in the configuration that are encapsulated in a child element that implement `Polymer.NeonAnimatableBehavior` with the `animatable` property.
+
+```js
+animationConfig: {
+ value: function() {
+ return {
+ // run fade-in-animation on this, and the entry animation on this.$.myAnimatable
+ 'entry': [
+ {name: 'fade-in-animation', node: this},
+ {animatable: this.$.myAnimatable, type: 'entry'}
+ ]
+ }
+ }
+}
+```
+
+<a name="page-transitions"></a>
+## Page transitions
+
+*The artist formerly known as `<core-animated-pages>`*
+
+The `neon-animated-pages` element manages a set of pages to switch between, and runs animations between the page transitions. It implements the `Polymer.IronSelectableBehavior` behavior. Each child node should implement `Polymer.NeonAnimatableBehavior` and define the `entry` and `exit` animations. During a page transition, the `entry` animation is run on the new page and the `exit` animation is run on the old page.
+
+<a name="shared-element"></a>
+### Shared element animations
+
+Shared element animations work on multiple nodes. For example, a "hero" animation is used during a page transition to make two elements from separate pages appear to animate as a single element. Shared element animation configurations have an `id` property that identify they belong in the same animation. Elements containing shared elements also have a `sharedElements` property defines a map from `id` to element, the element involved with the animation.
+
+In the incoming page:
+
+```js
+properties: {
+ animationConfig: {
+ value: function() {
+ return {
+ // the incoming page defines the 'entry' animation
+ 'entry': {
+ name: 'hero-animation',
+ id: 'hero',
+ toPage: this
+ }
+ }
+ }
+ },
+ sharedElements: {
+ value: function() {
+ return {
+ 'hero': this.$.hero
+ }
+ }
+ }
+}
+```
+
+In the outgoing page:
+
+```js
+properties: {
+ animationConfig: {
+ value: function() {
+ return {
+ // the outgoing page defines the 'exit' animation
+ 'exit': {
+ name: 'hero-animation',
+ id: 'hero',
+ fromPage: this
+ }
+ }
+ }
+ },
+ sharedElements: {
+ value: function() {
+ return {
+ 'hero': this.$.otherHero
+ }
+ }
+ }
+}
+```
+
+<a name="declarative-page"></a>
+### Declarative page transitions
+
+For convenience, if you define the `entry-animation` and `exit-animation` attributes on `<neon-animated-pages>`, those animations will apply for all page transitions.
+
+For example:
+
+```js
+<neon-animated-pages id="pages" class="flex" selected="[[selected]]" entry-animation="slide-from-right-animation" exit-animation="slide-left-animation">
+ <neon-animatable>1</neon-animatable>
+ <neon-animatable>2</neon-animatable>
+ <neon-animatable>3</neon-animatable>
+ <neon-animatable>4</neon-animatable>
+ <neon-animatable>5</neon-animatable>
+</neon-animated-pages>
+```
+
+The new page will slide in from the right, and the old page slide away to the left.
+
+<a name="animations"></a>
+## Included animations
+
+Single element animations:
+
+ * `fade-in-animation` Animates opacity from `0` to `1`;
+ * `fade-out-animation` Animates opacity from `1` to `0`;
+ * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`;
+ * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`;
+ * `slide-down-animation` Animates transform from `none` to `translateY(100%)`;
+ * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`;
+ * `slide-from-top-animation` Animates transform from `translateY(-100%)` to `none`;
+ * `slide-from-bottom-animation` Animates transform from `translateY(100%)` to `none`;
+ * `slide-left-animation` Animates transform from `none` to `translateX(-100%)`;
+ * `slide-right-animation` Animates transform from `none` to `translateX(100%)`;
+ * `slide-from-left-animation` Animates transform from `translateX(-100%)` to `none`;
+ * `slide-from-right-animation` Animates transform from `translateX(100%)` to `none`;
+ * `transform-animation` Animates a custom transform.
+
+Note that there is a restriction that only one transform animation can be applied on the same element at a time. Use the custom `transform-animation` to combine transform properties.
+
+Shared element animations
+
+ * `hero-animation` Animates an element such that it looks like it scales and transforms from another element.
+ * `ripple-animation` Animates an element to full screen such that it looks like it ripples from another element.
+
+Group animations
+ * `cascaded-animation` Applys an animation to an array of elements with a delay between each.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.d.ts
new file mode 100644
index 00000000000..5bcd3a01f93
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.d.ts
@@ -0,0 +1,36 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/cascaded-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<cascaded-animation>` applies an animation on an array of elements with a delay between each.
+ * the delay defaults to 50ms.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'cascaded-animation',
+ * animation: <animation-name>,
+ * nodes: <array-of-nodes>,
+ * nodeDelay: <node-delay-in-ms>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface CascadedAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ complete(): void;
+ configure(config: {animation: string, nodes: Element[], nodeDelay?: number, timing?: object|null}): any;
+}
+
+interface HTMLElementTagNameMap {
+ "cascaded-animation": CascadedAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.html
new file mode 100644
index 00000000000..39c8713a6a1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/cascaded-animation.html
@@ -0,0 +1,94 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<cascaded-animation>` applies an animation on an array of elements with a delay between each.
+the delay defaults to 50ms.
+
+Configuration:
+```
+{
+ name: 'cascaded-animation',
+ animation: <animation-name>,
+ nodes: <array-of-nodes>,
+ nodeDelay: <node-delay-in-ms>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'cascaded-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ /**
+ * @param {{
+ * animation: string,
+ * nodes: !Array<!Element>,
+ * nodeDelay: (number|undefined),
+ * timing: (Object|undefined)
+ * }} config
+ */
+ configure: function(config) {
+ this._animations = [];
+ var nodes = config.nodes;
+ var effects = [];
+ var nodeDelay = config.nodeDelay || 50;
+
+ config.timing = config.timing || {};
+ config.timing.delay = config.timing.delay || 0;
+
+ var oldDelay = config.timing.delay;
+ var abortedConfigure;
+ for (var node, index = 0; node = nodes[index]; index++) {
+ config.timing.delay += nodeDelay;
+ config.node = node;
+
+ var animation = document.createElement(config.animation);
+ if (animation.isNeonAnimation) {
+ var effect = animation.configure(config);
+
+ this._animations.push(animation);
+ effects.push(effect);
+ } else {
+ console.warn(this.is + ':', config.animation, 'not found!');
+ abortedConfigure = true;
+ break;
+ }
+ }
+ config.timing.delay = oldDelay;
+ config.node = null;
+ // if a bad animation was configured, abort config.
+ if (abortedConfigure) {
+ return;
+ }
+
+ this._effect = new GroupEffect(effects);
+ return this._effect;
+ },
+
+ complete: function() {
+ for (var animation, index = 0; animation = this._animations[index]; index++) {
+ animation.complete(animation.config);
+ }
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.d.ts
new file mode 100644
index 00000000000..b261d804df0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.d.ts
@@ -0,0 +1,32 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/fade-in-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<fade-in-animation>` animates the opacity of an element from 0 to 1.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'fade-in-animation',
+ * node: <node>
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface FadeInAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "fade-in-animation": FadeInAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.html
new file mode 100644
index 00000000000..c18849ec909
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-in-animation.html
@@ -0,0 +1,48 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<fade-in-animation>` animates the opacity of an element from 0 to 1.
+
+Configuration:
+```
+{
+ name: 'fade-in-animation',
+ node: <node>
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'fade-in-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+ this._effect = new KeyframeEffect(node, [
+ {'opacity': '0'},
+ {'opacity': '1'}
+ ], this.timingFromConfig(config));
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.d.ts
new file mode 100644
index 00000000000..1e2f371e968
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.d.ts
@@ -0,0 +1,32 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/fade-out-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<fade-out-animation>` animates the opacity of an element from 1 to 0.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'fade-out-animation',
+ * node: <node>
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface FadeOutAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "fade-out-animation": FadeOutAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.html
new file mode 100644
index 00000000000..abd20b181b9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/fade-out-animation.html
@@ -0,0 +1,48 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<fade-out-animation>` animates the opacity of an element from 1 to 0.
+
+Configuration:
+```
+{
+ name: 'fade-out-animation',
+ node: <node>
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'fade-out-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+ this._effect = new KeyframeEffect(node, [
+ {'opacity': '1'},
+ {'opacity': '0'}
+ ], this.timingFromConfig(config));
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.d.ts
new file mode 100644
index 00000000000..fa29c92805b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.d.ts
@@ -0,0 +1,41 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/hero-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-shared-element-animation-behavior.d.ts" />
+
+/**
+ * `<hero-animation>` is a shared element animation that scales and transform an element such that it
+ * appears to be shared between two pages. Use this in `<neon-animated-pages>`. The source page
+ * should use this animation in an 'exit' animation and set the `fromPage` configuration property to
+ * itself, and the destination page should use this animation in an `entry` animation and set the
+ * `toPage` configuration property to itself. They should also define the hero elements in the
+ * `sharedElements` property (not a configuration property, see
+ * `Polymer.NeonSharedElementAnimatableBehavior`).
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'hero-animation',
+ * id: <shared-element-id>,
+ * timing: <animation-timing>,
+ * toPage: <node>, /* define for the destination page *\/
+ * fromPage: <node>, /* define for the source page *\/
+ * }
+ * ```
+ */
+interface HeroAnimationElement extends Polymer.Element, Polymer.NeonSharedElementAnimationBehavior {
+ complete(config: any): any;
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "hero-animation": HeroAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.html
new file mode 100644
index 00000000000..71488832dd8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/hero-animation.html
@@ -0,0 +1,82 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-shared-element-animation-behavior.html">
+
+<!--
+`<hero-animation>` is a shared element animation that scales and transform an element such that it
+appears to be shared between two pages. Use this in `<neon-animated-pages>`. The source page
+should use this animation in an 'exit' animation and set the `fromPage` configuration property to
+itself, and the destination page should use this animation in an `entry` animation and set the
+`toPage` configuration property to itself. They should also define the hero elements in the
+`sharedElements` property (not a configuration property, see
+`Polymer.NeonSharedElementAnimatableBehavior`).
+
+Configuration:
+```
+{
+ name: 'hero-animation',
+ id: <shared-element-id>,
+ timing: <animation-timing>,
+ toPage: <node>, /* define for the destination page */
+ fromPage: <node>, /* define for the source page */
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'hero-animation',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var shared = this.findSharedElements(config);
+ if (!shared) {
+ return;
+ }
+
+ var fromRect = shared.from.getBoundingClientRect();
+ var toRect = shared.to.getBoundingClientRect();
+
+ var deltaLeft = fromRect.left - toRect.left;
+ var deltaTop = fromRect.top - toRect.top;
+ var deltaWidth = fromRect.width / toRect.width;
+ var deltaHeight = fromRect.height / toRect.height;
+
+ this._effect = new KeyframeEffect(shared.to, [
+ {'transform': 'translate(' + deltaLeft + 'px,' + deltaTop + 'px) scale(' + deltaWidth + ',' + deltaHeight + ')'},
+ {'transform': 'none'}
+ ], this.timingFromConfig(config));
+
+ this.setPrefixedProperty(shared.to, 'transformOrigin', '0 0');
+ shared.to.style.zIndex = 10000;
+ shared.from.style.visibility = 'hidden';
+
+ return this._effect;
+ },
+
+ complete: function(config) {
+ var shared = this.findSharedElements(config);
+ if (!shared) {
+ return null;
+ }
+ shared.to.style.zIndex = '';
+ shared.from.style.visibility = '';
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.d.ts
new file mode 100644
index 00000000000..96c48ecee3c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.d.ts
@@ -0,0 +1,25 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/opaque-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<opaque-animation>` makes an element `opacity:1` for the duration of the animation. Used to prevent
+ * webkit/safari from drawing a frame before an animation for elements that animate from display:none.
+ */
+interface OpaqueAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ complete(config: any): void;
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "opaque-animation": OpaqueAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.html
new file mode 100644
index 00000000000..bfe7d6461b8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/opaque-animation.html
@@ -0,0 +1,45 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<opaque-animation>` makes an element `opacity:1` for the duration of the animation. Used to prevent
+webkit/safari from drawing a frame before an animation for elements that animate from display:none.
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'opaque-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+ this._effect = new KeyframeEffect(node, [
+ {'opacity': '1'},
+ {'opacity': '1'}
+ ], this.timingFromConfig(config));
+ node.style.opacity = '0';
+ return this._effect;
+ },
+
+ complete: function(config) {
+ config.node.style.opacity = '';
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.d.ts
new file mode 100644
index 00000000000..2e2c2e9910c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.d.ts
@@ -0,0 +1,42 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/reverse-ripple-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-shared-element-animation-behavior.d.ts" />
+
+/**
+ * `<reverse-ripple-animation>` scales and transform an element such that it appears to ripple down from this element, to either
+ * a shared element, or a screen position.
+ *
+ * If using as a shared element animation in `<neon-animated-pages>`, use this animation in an `exit`
+ * animation in the source page and in an `entry` animation in the destination page. Also, define the
+ * reverse-ripple elements in the `sharedElements` property (not a configuration property, see
+ * `Polymer.NeonSharedElementAnimatableBehavior`).
+ * If using a screen position, define the `gesture` property.
+ * Configuration:
+ * ```
+ * {
+ * name: 'reverse-ripple-animation`.
+ * id: <shared-element-id>, /* set this or gesture *\/
+ * gesture: {x: <page-x>, y: <page-y>}, /* set this or id *\/
+ * timing: <animation-timing>,
+ * toPage: <node>, /* define for the destination page *\/
+ * fromPage: <node>, /* define for the source page *\/
+ * }
+ * ```
+ */
+interface ReverseRippleAnimationElement extends Polymer.Element, Polymer.NeonSharedElementAnimationBehavior {
+ complete(): void;
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "reverse-ripple-animation": ReverseRippleAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.html
new file mode 100644
index 00000000000..c20044a7616
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/reverse-ripple-animation.html
@@ -0,0 +1,86 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-shared-element-animation-behavior.html">
+
+<!--
+`<reverse-ripple-animation>` scales and transform an element such that it appears to ripple down from this element, to either
+a shared element, or a screen position.
+
+If using as a shared element animation in `<neon-animated-pages>`, use this animation in an `exit`
+animation in the source page and in an `entry` animation in the destination page. Also, define the
+reverse-ripple elements in the `sharedElements` property (not a configuration property, see
+`Polymer.NeonSharedElementAnimatableBehavior`).
+If using a screen position, define the `gesture` property.
+Configuration:
+```
+{
+ name: 'reverse-ripple-animation`.
+ id: <shared-element-id>, /* set this or gesture */
+ gesture: {x: <page-x>, y: <page-y>}, /* set this or id */
+ timing: <animation-timing>,
+ toPage: <node>, /* define for the destination page */
+ fromPage: <node>, /* define for the source page */
+}
+```
+-->
+
+<script>
+ Polymer({
+ is: 'reverse-ripple-animation',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var shared = this.findSharedElements(config);
+ if (!shared) {
+ return null;
+ }
+
+ var translateX, translateY;
+ var fromRect = shared.from.getBoundingClientRect();
+ if (config.gesture) {
+ translateX = config.gesture.x - (fromRect.left + (fromRect.width / 2));
+ translateY = config.gesture.y - (fromRect.top + (fromRect.height / 2));
+ } else {
+ var toRect = shared.to.getBoundingClientRect();
+ translateX = (toRect.left + (toRect.width / 2)) - (fromRect.left + (fromRect.width / 2));
+ translateY = (toRect.top + (toRect.height / 2)) - (fromRect.top + (fromRect.height / 2));
+ }
+ var translate = 'translate(' + translateX + 'px,' + translateY + 'px)';
+
+ var size = Math.max(fromRect.width + Math.abs(translateX) * 2, fromRect.height + Math.abs(translateY) * 2);
+ var diameter = Math.sqrt(2 * size * size);
+ var scaleX = diameter / fromRect.width;
+ var scaleY = diameter / fromRect.height;
+ var scale = 'scale(' + scaleX + ',' + scaleY + ')';
+
+ this._effect = new KeyframeEffect(shared.from, [
+ {'transform': translate + ' ' + scale},
+ {'transform': translate + ' scale(0)'}
+ ], this.timingFromConfig(config));
+
+ this.setPrefixedProperty(shared.from, 'transformOrigin', '50% 50%');
+ shared.from.style.borderRadius = '50%';
+
+ return this._effect;
+ },
+
+ complete: function() {
+ if (this.sharedElements) {
+ this.setPrefixedProperty(this.sharedElements.from, 'transformOrigin', '');
+ this.sharedElements.from.style.borderRadius = '';
+ }
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.d.ts
new file mode 100644
index 00000000000..6b8cf5986b1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.d.ts
@@ -0,0 +1,44 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/ripple-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-shared-element-animation-behavior.d.ts" />
+
+/**
+ * `<ripple-animation>` scales and transform an element such that it appears to ripple from either
+ * a shared element, or from a screen position, to full screen.
+ *
+ * If using as a shared element animation in `<neon-animated-pages>`, use this animation in an `exit`
+ * animation in the source page and in an `entry` animation in the destination page. Also, define the
+ * hero elements in the `sharedElements` property (not a configuration property, see
+ * `Polymer.NeonSharedElementAnimatableBehavior`).
+ *
+ * If using a screen position, define the `gesture` property.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'ripple-animation`.
+ * id: <shared-element-id>, /* set this or gesture *\/
+ * gesture: {x: <page-x>, y: <page-y>}, /* set this or id *\/
+ * timing: <animation-timing>,
+ * toPage: <node>, /* define for the destination page *\/
+ * fromPage: <node>, /* define for the source page *\/
+ * }
+ * ```
+ */
+interface RippleAnimationElement extends Polymer.Element, Polymer.NeonSharedElementAnimationBehavior {
+ complete(): void;
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "ripple-animation": RippleAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.html
new file mode 100644
index 00000000000..dd8d2a8e45a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/ripple-animation.html
@@ -0,0 +1,92 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-shared-element-animation-behavior.html">
+
+<!--
+`<ripple-animation>` scales and transform an element such that it appears to ripple from either
+a shared element, or from a screen position, to full screen.
+
+If using as a shared element animation in `<neon-animated-pages>`, use this animation in an `exit`
+animation in the source page and in an `entry` animation in the destination page. Also, define the
+hero elements in the `sharedElements` property (not a configuration property, see
+`Polymer.NeonSharedElementAnimatableBehavior`).
+
+If using a screen position, define the `gesture` property.
+
+Configuration:
+```
+{
+ name: 'ripple-animation`.
+ id: <shared-element-id>, /* set this or gesture */
+ gesture: {x: <page-x>, y: <page-y>}, /* set this or id */
+ timing: <animation-timing>,
+ toPage: <node>, /* define for the destination page */
+ fromPage: <node>, /* define for the source page */
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'ripple-animation',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var shared = this.findSharedElements(config);
+ if (!shared) {
+ return null;
+ }
+
+ var translateX, translateY;
+ var toRect = shared.to.getBoundingClientRect();
+ if (config.gesture) {
+ translateX = config.gesture.x - (toRect.left + (toRect.width / 2));
+ translateY = config.gesture.y - (toRect.top + (toRect.height / 2));
+ } else {
+ var fromRect = shared.from.getBoundingClientRect();
+ translateX = (fromRect.left + (fromRect.width / 2)) - (toRect.left + (toRect.width / 2));
+ translateY = (fromRect.top + (fromRect.height / 2)) - (toRect.top + (toRect.height / 2));
+ }
+ var translate = 'translate(' + translateX + 'px,' + translateY + 'px)';
+
+ var size = Math.max(toRect.width + Math.abs(translateX) * 2, toRect.height + Math.abs(translateY) * 2);
+ var diameter = Math.sqrt(2 * size * size);
+ var scaleX = diameter / toRect.width;
+ var scaleY = diameter / toRect.height;
+ var scale = 'scale(' + scaleX + ',' + scaleY + ')';
+
+ this._effect = new KeyframeEffect(shared.to, [
+ {'transform': translate + ' scale(0)'},
+ {'transform': translate + ' ' + scale}
+ ], this.timingFromConfig(config));
+
+ this.setPrefixedProperty(shared.to, 'transformOrigin', '50% 50%');
+ shared.to.style.borderRadius = '50%';
+
+ return this._effect;
+ },
+
+ complete: function() {
+ if (this.sharedElements) {
+ this.setPrefixedProperty(this.sharedElements.to, 'transformOrigin', '');
+ this.sharedElements.to.style.borderRadius = '';
+ }
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.d.ts
new file mode 100644
index 00000000000..fd68fff3734
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.d.ts
@@ -0,0 +1,35 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/scale-down-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<scale-down-animation>` animates the scale transform of an element from 1 to 0. By default it
+ * scales in both the x and y axes.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'scale-down-animation',
+ * node: <node>,
+ * axis: 'x' | 'y' | '',
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface ScaleDownAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "scale-down-animation": ScaleDownAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.html
new file mode 100644
index 00000000000..91e40840939
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-down-animation.html
@@ -0,0 +1,64 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<scale-down-animation>` animates the scale transform of an element from 1 to 0. By default it
+scales in both the x and y axes.
+
+Configuration:
+```
+{
+ name: 'scale-down-animation',
+ node: <node>,
+ axis: 'x' | 'y' | '',
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'scale-down-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ var scaleProperty = 'scale(0, 0)';
+ if (config.axis === 'x') {
+ scaleProperty = 'scale(0, 1)';
+ } else if (config.axis === 'y') {
+ scaleProperty = 'scale(1, 0)';
+ }
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'scale(1,1)'},
+ {'transform': scaleProperty}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.d.ts
new file mode 100644
index 00000000000..23cec443eb9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.d.ts
@@ -0,0 +1,35 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/scale-up-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<scale-up-animation>` animates the scale transform of an element from 0 to 1. By default it
+ * scales in both the x and y axes.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'scale-up-animation',
+ * node: <node>,
+ * axis: 'x' | 'y' | '',
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface ScaleUpAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "scale-up-animation": ScaleUpAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.html
new file mode 100644
index 00000000000..a6c92202bb7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/scale-up-animation.html
@@ -0,0 +1,64 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<scale-up-animation>` animates the scale transform of an element from 0 to 1. By default it
+scales in both the x and y axes.
+
+Configuration:
+```
+{
+ name: 'scale-up-animation',
+ node: <node>,
+ axis: 'x' | 'y' | '',
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'scale-up-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ var scaleProperty = 'scale(0)';
+ if (config.axis === 'x') {
+ scaleProperty = 'scale(0, 1)';
+ } else if (config.axis === 'y') {
+ scaleProperty = 'scale(1, 0)';
+ }
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': scaleProperty},
+ {'transform': 'scale(1, 1)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.d.ts
new file mode 100644
index 00000000000..e03b9877558
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.d.ts
@@ -0,0 +1,34 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-down-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-down-animation>` animates the transform of an element from `none` `translateY(100%)`.
+ * The `transformOrigin` defaults to `50% 0`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-down-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideDownAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-down-animation": SlideDownAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.html
new file mode 100644
index 00000000000..cf56ae5937d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-down-animation.html
@@ -0,0 +1,58 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-down-animation>` animates the transform of an element from `none` `translateY(100%)`.
+The `transformOrigin` defaults to `50% 0`.
+
+Configuration:
+```
+{
+ name: 'slide-down-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-down-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'translateY(0%)'},
+ {'transform': 'translateY(100%)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '50% 0');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.d.ts
new file mode 100644
index 00000000000..c1fe22039a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.d.ts
@@ -0,0 +1,34 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-from-bottom-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-from-bottom-animation>` animates the transform of an element from `none` to `translateY(100%)`.
+ * The `transformOrigin` defaults to `50% 0`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-from-bottom-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideFromBottomAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-from-bottom-animation": SlideFromBottomAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.html
new file mode 100644
index 00000000000..8e7ba7635b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-bottom-animation.html
@@ -0,0 +1,58 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-from-bottom-animation>` animates the transform of an element from `none` to `translateY(100%)`.
+The `transformOrigin` defaults to `50% 0`.
+
+Configuration:
+```
+{
+ name: 'slide-from-bottom-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-from-bottom-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'translateY(100%)'},
+ {'transform': 'translateY(0)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '50% 0');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.d.ts
new file mode 100644
index 00000000000..b3f0b2e2b70
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.d.ts
@@ -0,0 +1,35 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-from-left-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-from-left-animation>` animates the transform of an element from
+ * `translateX(-100%)` to `none`.
+ * The `transformOrigin` defaults to `0 50%`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-from-left-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideFromLeftAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-from-left-animation": SlideFromLeftAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.html
new file mode 100644
index 00000000000..14d63bddede
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-left-animation.html
@@ -0,0 +1,59 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-from-left-animation>` animates the transform of an element from
+`translateX(-100%)` to `none`.
+The `transformOrigin` defaults to `0 50%`.
+
+Configuration:
+```
+{
+ name: 'slide-from-left-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-from-left-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'translateX(-100%)'},
+ {'transform': 'none'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '0 50%');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.d.ts
new file mode 100644
index 00000000000..2dea2e6a3f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.d.ts
@@ -0,0 +1,35 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-from-right-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-from-right-animation>` animates the transform of an element from
+ * `translateX(100%)` to `none`.
+ * The `transformOrigin` defaults to `0 50%`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-from-right-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideFromRightAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-from-right-animation": SlideFromRightAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.html
new file mode 100644
index 00000000000..f6190bac9a4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-right-animation.html
@@ -0,0 +1,59 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-from-right-animation>` animates the transform of an element from
+`translateX(100%)` to `none`.
+The `transformOrigin` defaults to `0 50%`.
+
+Configuration:
+```
+{
+ name: 'slide-from-right-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-from-right-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'translateX(100%)'},
+ {'transform': 'none'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '0 50%');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.d.ts
new file mode 100644
index 00000000000..7e5d47142e5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.d.ts
@@ -0,0 +1,34 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-from-top-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-from-top-animation>` animates the transform of an element from `translateY(-100%)` to
+ * `none`. The `transformOrigin` defaults to `50% 0`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-from-top-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideFromTopAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-from-top-animation": SlideFromTopAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.html
new file mode 100644
index 00000000000..cf69eaaebe5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-from-top-animation.html
@@ -0,0 +1,58 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-from-top-animation>` animates the transform of an element from `translateY(-100%)` to
+`none`. The `transformOrigin` defaults to `50% 0`.
+
+Configuration:
+```
+{
+ name: 'slide-from-top-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-from-top-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'translateY(-100%)'},
+ {'transform': 'translateY(0%)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '50% 0');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.d.ts
new file mode 100644
index 00000000000..d34e84798b4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.d.ts
@@ -0,0 +1,34 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-left-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-left-animation>` animates the transform of an element from `none` to `translateX(-100%)`.
+ * The `transformOrigin` defaults to `0 50%`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-left-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideLeftAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-left-animation": SlideLeftAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.html
new file mode 100644
index 00000000000..040cfee0744
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-left-animation.html
@@ -0,0 +1,58 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-left-animation>` animates the transform of an element from `none` to `translateX(-100%)`.
+The `transformOrigin` defaults to `0 50%`.
+
+Configuration:
+```
+{
+ name: 'slide-left-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-left-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'none'},
+ {'transform': 'translateX(-100%)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '0 50%');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.d.ts
new file mode 100644
index 00000000000..769d4c170fa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.d.ts
@@ -0,0 +1,34 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-right-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-right-animation>` animates the transform of an element from `none` to `translateX(100%)`.
+ * The `transformOrigin` defaults to `0 50%`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-right-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideRightAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-right-animation": SlideRightAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.html
new file mode 100644
index 00000000000..7a9342b11b4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-right-animation.html
@@ -0,0 +1,58 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-right-animation>` animates the transform of an element from `none` to `translateX(100%)`.
+The `transformOrigin` defaults to `0 50%`.
+
+Configuration:
+```
+{
+ name: 'slide-right-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-right-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'none'},
+ {'transform': 'translateX(100%)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '0 50%');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.d.ts
new file mode 100644
index 00000000000..4231f8a950f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.d.ts
@@ -0,0 +1,34 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/slide-up-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<slide-up-animation>` animates the transform of an element from `translateY(0)` to
+ * `translateY(-100%)`. The `transformOrigin` defaults to `50% 0`.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'slide-up-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface SlideUpAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "slide-up-animation": SlideUpAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.html
new file mode 100644
index 00000000000..eac7a377c4f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/slide-up-animation.html
@@ -0,0 +1,58 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<slide-up-animation>` animates the transform of an element from `translateY(0)` to
+`translateY(-100%)`. The `transformOrigin` defaults to `50% 0`.
+
+Configuration:
+```
+{
+ name: 'slide-up-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'slide-up-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ configure: function(config) {
+ var node = config.node;
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': 'translate(0)'},
+ {'transform': 'translateY(-100%)'}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ } else {
+ this.setPrefixedProperty(node, 'transformOrigin', '50% 0');
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.d.ts
new file mode 100644
index 00000000000..03ec4bd501e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.d.ts
@@ -0,0 +1,36 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * animations/transform-animation.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation-behavior.d.ts" />
+
+/**
+ * `<transform-animation>` animates a custom transform on an element. Use this to animate multiple
+ * transform properties, or to apply a custom transform value.
+ *
+ * Configuration:
+ * ```
+ * {
+ * name: 'transform-animation',
+ * node: <node>,
+ * transformOrigin: <transform-origin>,
+ * transformFrom: <transform-from-string>,
+ * transformTo: <transform-to-string>,
+ * timing: <animation-timing>
+ * }
+ * ```
+ */
+interface TransformAnimationElement extends Polymer.Element, Polymer.NeonAnimationBehavior {
+ configure(config: {node: Element, transformOrigin?: string, transformFrom?: string, transformTo?: string, timing?: object|null}): any;
+}
+
+interface HTMLElementTagNameMap {
+ "transform-animation": TransformAnimationElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.html
new file mode 100644
index 00000000000..84927271ad7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/animations/transform-animation.html
@@ -0,0 +1,69 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../neon-animation-behavior.html">
+
+<!--
+`<transform-animation>` animates a custom transform on an element. Use this to animate multiple
+transform properties, or to apply a custom transform value.
+
+Configuration:
+```
+{
+ name: 'transform-animation',
+ node: <node>,
+ transformOrigin: <transform-origin>,
+ transformFrom: <transform-from-string>,
+ transformTo: <transform-to-string>,
+ timing: <animation-timing>
+}
+```
+-->
+
+<script>
+
+ Polymer({
+
+ is: 'transform-animation',
+
+ behaviors: [
+ Polymer.NeonAnimationBehavior
+ ],
+
+ /**
+ * @param {{
+ * node: !Element,
+ * transformOrigin: (string|undefined),
+ * transformFrom: (string|undefined),
+ * transformTo: (string|undefined),
+ * timing: (Object|undefined)
+ * }} config
+ */
+ configure: function(config) {
+ var node = config.node;
+ var transformFrom = config.transformFrom || 'none';
+ var transformTo = config.transformTo || 'none';
+
+ this._effect = new KeyframeEffect(node, [
+ {'transform': transformFrom},
+ {'transform': transformTo}
+ ], this.timingFromConfig(config));
+
+ if (config.transformOrigin) {
+ this.setPrefixedProperty(node, 'transformOrigin', config.transformOrigin);
+ }
+
+ return this._effect;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/bower.json
new file mode 100644
index 00000000000..2dd5c0f5e39
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/bower.json
@@ -0,0 +1,80 @@
+{
+ "name": "neon-animation",
+ "description": "A system for animating Polymer-based web components",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "web-animations"
+ ],
+ "main": [
+ "neon-animated-pages.html",
+ "neon-animatable-behavior.html",
+ "neon-animation-behavior.html",
+ "neon-animation-runner-behavior.html",
+ "neon-shared-element-animatable-behavior.html",
+ "neon-shared-element-animation-behavior.html",
+ "neon-animatable.html",
+ "neon-animations.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/neon-animation"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/neon-animation",
+ "ignore": [],
+ "demos": {
+ "Demo": "demo/index.html"
+ },
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "iron-selector": "PolymerElements/iron-selector#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "app-layout": "PolymerElements/app-layout#1 - 2",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "paper-item": "PolymerElements/paper-item#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "iron-selector": "PolymerElements/iron-selector#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0"
+ },
+ "devDependencies": {
+ "app-layout": "PolymerElements/app-layout#^0.10.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/index.html
new file mode 100644
index 00000000000..ec246dbc77a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/index.html
@@ -0,0 +1,174 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: card</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../neon-animated-pages.html">
+ <link rel="import" href="../../neon-animations.html">
+ <link rel="import" href="../../../paper-styles/typography.html">
+ <link rel="import" href="x-card.html">
+ <link rel="import" href="x-cards-list.html">
+
+ <custom-style>
+ <style is="custom-style">
+
+ body {
+ padding: 15px;
+ @apply --layout-fullbleed;
+ @apply --paper-font-common-base;
+ }
+
+ neon-animated-pages {
+ height: 100%;
+ }
+
+ .large {
+ width: 100%
+ }
+
+ .button {
+ text-align: center;
+ width: 120px;
+ height: 32px;
+ line-height: 32px;
+ border-radius: 2px;
+ font-size: 0.9em;
+ background-color: #fff;
+ color: #646464;
+ }
+
+ .button.blue {
+ background-color: #4285f4;
+ color: #fff;
+ }
+
+ .button.raised {
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+ }
+
+ .button.back {
+ position: fixed;
+ top: 30px;
+ left: 30px;
+ }
+
+ .card-contents {
+ @apply --layout-vertical;
+ @apply --layout-center-center;
+ @apply --layout-fit;
+ }
+
+ .button-container {
+ @apply --layout-flex;
+ @apply --layout-horizontal;
+ @apply --layout-around-justified;
+ }
+ </style>
+ </custom-style>
+
+ </head>
+ <body>
+ <dom-bind>
+ <template is="dom-bind">
+ <neon-animated-pages id="pages" selected="0">
+ <x-cards-list id="list">
+ <div slot="div" class="card-contents">
+ <h2>Choose a subject</h2>
+ <div class="button-container large">
+ <div class="blue raised button" on-click="_onPolymerClick">
+ POLYMER
+ </div>
+ <div class="blue raised button" on-click="_onAngularClick">
+ ANGULAR
+ </div>
+ </div>
+ </div>
+ </x-cards-list>
+
+ <x-card>
+ <div slot="div" class="card-contents">
+ <div class="raised back button" on-click="_onBackClick">
+ BACK
+ </div>
+ <h2>Polymer</h2>
+ <p>
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
+ proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p>
+ </div>
+ </x-card>
+
+ <x-card>
+ <div slot="div" class="card-contents">
+ <div class="raised back button" on-click="_onBackClick">
+ BACK
+ </div>
+ <h2>Angular</h2>
+ <p>
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+ quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
+ cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
+ proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </p>
+ </div>
+ </x-card>
+
+ </neon-animated-pages>
+ </template>
+ </dom-bind>
+
+ <script>
+ var polymer2DomBind = document.querySelector('dom-bind');
+ var polymer1DomBindScope = document.querySelector('template[is="dom-bind"]');
+
+ polymer2DomBind._onPolymerClick = function(event) {
+ this.$.list.sharedElements = {
+ 'ripple': event.target,
+ 'reverse-ripple': event.target
+ };
+ this.$.pages.selected = 1;
+ };
+
+ polymer2DomBind._onAngularClick = function(event) {
+ this.$.list.sharedElements = {
+ 'ripple': event.target,
+ 'reverse-ripple': event.target
+ };
+ this.$.pages.selected = 2;
+ };
+
+ polymer2DomBind._onBackClick = function(event) {
+ this.$.pages.selected = 0;
+ };
+
+ polymer1DomBindScope._onPolymerClick = polymer2DomBind._onPolymerClick;
+ polymer1DomBindScope._onAngularClick = polymer2DomBind._onAngularClick;
+ polymer1DomBindScope._onBackClick = polymer2DomBind._onBackClick;
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-card.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-card.html
new file mode 100644
index 00000000000..12979bb1a70
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-card.html
@@ -0,0 +1,100 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+
+<dom-module id="x-card">
+ <template>
+ <style>
+ :host {
+ display: block;
+ overflow: hidden;
+ }
+ #placeholder {
+ opacity: 0;
+ background-color: grey;
+ @apply --layout-fit;
+ }
+ </style>
+
+ <div id="placeholder"></div>
+ <div id="container">
+ <slot name="div"></slot>
+ </div>
+
+ </template>
+</dom-module>
+
+<script>
+(function() {
+ Polymer({
+ is: 'x-card',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+ animationConfig: {
+ type: Object
+ },
+
+ sharedElements: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ this.animationConfig = {
+ 'entry': [{
+ name: 'ripple-animation',
+ id: 'ripple',
+ toPage: this
+ }, {
+ name: 'fade-out-animation',
+ node: this.$.placeholder,
+ timing: {
+ delay: 250
+ }
+ }, {
+ name: 'fade-in-animation',
+ node: this.$.container,
+ timing: {
+ delay: 50
+ }
+ }],
+
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this.$.container,
+ timing: {
+ duration: 0
+ }
+ }, {
+ name: 'reverse-ripple-animation',
+ id: 'reverse-ripple',
+ fromPage: this
+ }]
+ };
+
+ this.sharedElements = {
+ 'ripple': this.$.placeholder,
+ 'reverse-ripple': this.$.placeholder
+ };
+ }
+ });
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-cards-list.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-cards-list.html
new file mode 100644
index 00000000000..a3ba2ca695e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/card/x-cards-list.html
@@ -0,0 +1,81 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+
+<dom-module id="x-cards-list">
+ <template>
+ <style>
+ :host {
+ display: block;
+ overflow: hidden;
+ }
+
+ #placeholder {
+ opacity: 0;
+ background-color: grey;
+ @apply --layout-fit;
+ }
+ </style>
+
+ <div id="placeholder"></div>
+ <div id="container">
+ <slot name="div"></slot>
+ </div>
+
+ </template>
+</dom-module>
+
+<script>
+(function() {
+ Polymer({
+ is: 'x-cards-list',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ this.animationConfig = {
+ 'entry': [{
+ name: 'reverse-ripple-animation',
+ id: 'reverse-ripple',
+ toPage: this
+ }],
+
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this.$.container,
+ timing: {
+ delay: 150,
+ duration: 0
+ }
+ }, {
+ name: 'ripple-animation',
+ id: 'ripple',
+ fromPage: this
+ }]
+ };
+ }
+ });
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/declarative/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/declarative/index.html
new file mode 100644
index 00000000000..3bac789d1b2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/declarative/index.html
@@ -0,0 +1,150 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: declarative</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../../paper-styles/typography.html">
+ <link rel="import" href="../../../paper-styles/color.html">
+ <link rel="import" href="../../neon-animated-pages.html">
+ <link rel="import" href="../../neon-animatable.html">
+ <link rel="import" href="../../neon-animations.html">
+
+ <custom-style>
+ <style is="custom-style">
+ body {
+ overflow: hidden;
+ height: 100vh;
+ margin: 0px;
+ }
+
+ dom-bind {
+ height: 100%;
+ }
+
+ .toolbar {
+ position: relative;
+
+ padding: 8px;
+
+ background-color: white;
+
+ z-index: 12;
+ }
+
+ neon-animated-pages {
+ height: 100%;
+ @apply --layout-flex;
+ }
+
+ neon-animatable {
+ color: white;
+ @apply --layout-horizontal;
+ @apply --layout-center-center;
+ @apply --paper-font-display4;
+ }
+
+ /* in shady polymer1 slot element is first child */
+ neon-animatable:nth-child(1),
+ neon-animatable:nth-child(6) {
+ background: var(--paper-red-500);
+ }
+
+ neon-animatable:nth-child(2) {
+ background: var(--paper-blue-500);
+ }
+
+ neon-animatable:nth-child(3) {
+ background: var(--paper-orange-500);
+ }
+
+ neon-animatable:nth-child(4) {
+ background: var(--paper-green-500);
+ }
+
+ neon-animatable:nth-child(5) {
+ background: var(--paper-purple-500);
+ }
+
+ </style>
+ </custom-style>
+
+ </head>
+ <body>
+ <dom-bind>
+ <template is="dom-bind">
+ <div class="toolbar">
+ <button on-click="_onPrevClick">&#8678;</button>
+ <button on-click="_onNextClick">&#8680;</button>
+ <button on-click="_onUpClick">&#8679;</button>
+ <button on-click="_onDownClick">&#8681;</button>
+ </div>
+
+ <neon-animated-pages id="pages" selected="[[selected]]" entry-animation="[[entryAnimation]]" exit-animation="[[exitAnimation]]">
+ <neon-animatable>1</neon-animatable>
+ <neon-animatable>2</neon-animatable>
+ <neon-animatable>3</neon-animatable>
+ <neon-animatable>4</neon-animatable>
+ <neon-animatable>5</neon-animatable>
+ </neon-animated-pages>
+
+ </template>
+ </dom-bind>
+
+ <script>
+
+ var scope1 = document.querySelector('template[is="dom-bind"]');
+ var scope2 = document.querySelector('dom-bind');
+
+ scope1.selected = 0;
+ scope2.selected = 0;
+
+ scope1._onPrevClick = function() {
+ this.entryAnimation = 'slide-from-left-animation';
+ this.exitAnimation = 'slide-right-animation';
+ this.selected = this.selected === 0 ? 4 : (this.selected - 1);
+ }
+
+ scope1._onNextClick = function() {
+ this.entryAnimation = 'slide-from-right-animation';
+ this.exitAnimation = 'slide-left-animation';
+ this.selected = this.selected === 4 ? 0 : (this.selected + 1);
+ }
+
+ scope1._onUpClick = function() {
+ this.entryAnimation = 'slide-from-top-animation';
+ this.exitAnimation = 'slide-down-animation';
+ this.selected = this.selected === 4 ? 0 : (this.selected + 1);
+ }
+
+ scope1._onDownClick = function() {
+ this.entryAnimation = 'slide-from-bottom-animation';
+ this.exitAnimation = 'slide-up-animation';
+ this.selected = this.selected === 0 ? 4 : (this.selected - 1);
+ }
+
+ scope2._onPrevClick = scope1._onPrevClick;
+ scope2._onNextClick = scope1._onNextClick;
+ scope2._onUpClick = scope1._onUpClick;
+ scope2._onDownClick = scope1._onDownClick;
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/index.html
new file mode 100644
index 00000000000..a15bfa585ae
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/index.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animation demo: basic</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="my-animatable.html">
+ <link rel="import" href="my-dialog.html">
+
+ </head>
+ <style>
+ my-animatable {
+ margin-top: 50px;
+ }
+ </style>
+ <body>
+ <dom-bind>
+ <template is="dom-bind">
+
+ <button on-click="_onCircleButtonClick">toggle circle</button>
+ <button on-click="_onDialogButtonClick">toggle dialog</button>
+
+ <div style="text-align: center">
+ <my-dialog>Hello World!</my-dialog>
+ </div>
+
+ <my-animatable></my-animatable>
+
+ </template>
+ </dom-bind>
+
+ <script>
+
+ var scope1 = document.querySelector('template[is="dom-bind"]');
+ var scope2 = document.querySelector('dom-bind');
+
+ scope1._onCircleButtonClick = function(event) {
+ var node = document.querySelector('my-animatable');
+ if (node) {
+ node.animate();
+ }
+ };
+
+ scope1._onDialogButtonClick = function(event) {
+ var node = document.querySelector('my-dialog');
+ if (node) {
+ if (node.opened) {
+ node.hide();
+ } else {
+ node.show();
+ }
+ }
+ };
+
+ scope2._onCircleButtonClick = scope1._onCircleButtonClick;
+ scope2._onDialogButtonClick = scope1._onDialogButtonClick;
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-animatable.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-animatable.html
new file mode 100644
index 00000000000..86dcb19ea5c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-animatable.html
@@ -0,0 +1,68 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../neon-animation-runner-behavior.html">
+<link rel="import" href="../../animations/scale-down-animation.html">
+
+<dom-module id="my-animatable">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ border-radius: 50%;
+ width: 300px;
+ height: 300px;
+ background: orange;
+ }
+ </style>
+ <slot></slot>
+
+ </template>
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'my-animatable',
+
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ properties: {
+
+ animationConfig: {
+ type: Object,
+ value: function() {
+ return {
+ name: 'scale-down-animation',
+ node: this
+ }
+ }
+ }
+
+ },
+
+ listeners: {
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+
+ animate: function() {
+ this.playAnimation();
+ },
+
+ _onNeonAnimationFinish: function() {
+ console.log('animation finish!');
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-dialog.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-dialog.html
new file mode 100644
index 00000000000..5ccdff82c76
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/doc/my-dialog.html
@@ -0,0 +1,94 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-styles/shadow.html">
+<link rel="import" href="../../neon-animation-runner-behavior.html">
+<link rel="import" href="../../animations/scale-up-animation.html">
+<link rel="import" href="../../animations/fade-out-animation.html">
+
+
+<dom-module id="my-dialog">
+ <template>
+ <style>
+ :host {
+ display: none;
+ padding: 16px;
+ background: white;
+ color: black;
+ margin: 0 auto;
+ z-index: 100;
+ position: absolute;
+ @apply --shadow-elevation-2dp;
+ }
+ </style>
+ <slot></slot>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'my-dialog',
+
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ properties: {
+
+ opened: {
+ type: Boolean
+ },
+
+ animationConfig: {
+ type: Object,
+ value: function() {
+ return {
+ 'entry': [{
+ name: 'scale-up-animation',
+ node: this
+ }],
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this
+ }]
+ }
+ }
+ }
+
+ },
+
+ listeners: {
+ 'neon-animation-finish': '_onAnimationFinish'
+ },
+
+ _onAnimationFinish: function() {
+ if (!this.opened) {
+ this.style.display = '';
+ }
+ },
+
+ show: function() {
+ this.opened = true;
+ this.style.display = 'inline-block';
+ this.playAnimation('entry');
+ },
+
+ hide: function() {
+ this.opened = false;
+ this.playAnimation('exit');
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/animated-dropdown.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/animated-dropdown.html
new file mode 100644
index 00000000000..8c09f37a46e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/animated-dropdown.html
@@ -0,0 +1,90 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-styles/shadow.html">
+<link rel="import" href="../../neon-animation-runner-behavior.html">
+
+<dom-module id="animated-dropdown">
+ <template>
+ <style>
+ :host {
+ display: none;
+ padding: 16px;
+ background: white;
+ color: black;
+
+ @apply --shadow-elevation-2dp;
+ }
+ </style>
+ <slot></slot>
+ </template>
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'animated-dropdown',
+
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ properties: {
+
+ animationConfig: {
+ type: Object,
+ value: function() {
+ return {
+ 'entry': [{
+ name: 'scale-up-animation',
+ node: this,
+ transformOrigin: '0 0'
+ }],
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this
+ }]
+ }
+ }
+ },
+
+ _showing: {
+ type: Boolean,
+ value: false
+ }
+
+ },
+
+ listeners: {
+ 'neon-animation-finish': '_onAnimationFinish'
+ },
+
+ _onAnimationFinish: function() {
+ if (this._showing) {
+ } else {
+ this.style.display = '';
+ }
+ },
+
+ show: function() {
+ this.style.display = 'inline-block';
+ this._showing = true;
+ this.playAnimation('entry');
+ },
+
+ hide: function() {
+ this._showing = false;
+ this.playAnimation('exit');
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/index.html
new file mode 100644
index 00000000000..de81a322a33
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/dropdown/index.html
@@ -0,0 +1,61 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: dropdown</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../neon-animated-pages.html">
+ <link rel="import" href="../../neon-animations.html">
+ <link rel="import" href="animated-dropdown.html">
+
+ </head>
+ <body>
+
+ <dom-bind>
+ <template is="dom-bind">
+
+ <button dropdown-id="dropdown" on-click="_onButtonClick">dropdown</button>
+ <br>
+ <animated-dropdown id="dropdown" on-click="_onDropdownClick">Hello world!</animated-dropdown>
+
+ </template>
+ </dom-bind>
+
+ <script>
+
+ var scope1 = document.querySelector('template[is="dom-bind"]');
+ var scope2 = document.querySelector('dom-bind');
+
+ scope1._onButtonClick = function(event) {
+ var dropdown = document.querySelector('#' + event.target.getAttribute('dropdown-id'));
+ if (dropdown) {
+ dropdown.show();
+ }
+ };
+
+ scope1._onDropdownClick = function(event) {
+ event.target.hide();
+ };
+
+ scope2._onButtonClick = scope1._onButtonClick;
+ scope2._onDropdownClick = scope1._onDropdownClick;
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/animated-grid.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/animated-grid.html
new file mode 100644
index 00000000000..3688ace6b21
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/animated-grid.html
@@ -0,0 +1,160 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../paper-styles/typography.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+<link rel="import" href="../shared-styles.html">
+
+<dom-module id="animated-grid">
+ <template>
+ <style include="shared-styles">
+
+ :host {
+ display: block;
+ background: #000;
+ }
+
+ .tile {
+ display: inline-block;
+ float: left;
+ vertical-align: top;
+ width: calc(100% / 6);
+ height: calc(100% / 3);
+
+ @apply --paper-font-title;
+ @apply --layout-vertical;
+ @apply --layout-center-center;
+ }
+
+ .tile:nth-of-type(1) {
+ width: calc(100% / 3);
+ height: calc(100% / 3 * 2);
+ }
+
+ .tile:nth-of-type(4) {
+ width: calc(100% / 3);
+ }
+
+ .tile:nth-of-type(5) {
+ width: calc(100% / 3);
+ height: calc(100% / 3 * 2);
+ }
+
+ .tile:nth-of-type(8) {
+ width: calc(100% / 3);
+ height: calc(100% / 3);
+ }
+
+ .tile:nth-of-type(9) {
+ position: absolute;
+ top: calc(100% / 3 * 2);
+ left: 0;
+ width: calc(100% / 6);
+ height: calc(100% / 3);
+ }
+
+ .tile:nth-of-type(10) {
+ position: absolute;
+ top: calc(100% / 3 * 2);
+ left: calc(100% / 6);;
+ width: calc(100% / 6);
+ height: calc(100% / 3);
+ }
+ </style>
+
+ <template is="dom-repeat" items="[[config]]">
+ <div item="[[item]]" class$="[[_computeTileClass(item.color)]]" on-click="_onClick">
+ <span>[[item.value]]</span>
+ </div>
+ </template>
+
+ </template>
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'animated-grid',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+
+ config: {
+ type: Array,
+ value: function() {
+ return [
+ {value: 1, color: 'blue'},
+ {value: 2, color: 'red'},
+ {value: 3, color: 'blue'},
+ {value: 4, color: 'green'},
+ {value: 5, color: 'yellow'},
+ {value: 6, color: 'blue'},
+ {value: 7, color: 'red'},
+ {value: 8, color: 'green'},
+ {value: 9, color: 'yellow'},
+ {value: 10, color: 'red'}
+ ]
+ }
+ },
+
+ animationConfig: {
+ type: Object,
+ value: function() {
+ return {
+ 'exit': [{
+ name: 'ripple-animation',
+ id: 'ripple',
+ fromPage: this
+ }, {
+ name: 'hero-animation',
+ id: 'hero',
+ fromPage: this
+ }]
+ }
+ }
+ }
+
+ },
+
+ _computeTileClass: function(color) {
+ return 'tile ' + color + '-300';
+ },
+
+ _onClick: function(event) {
+ var target = Polymer.dom(event).rootTarget;
+
+ if (!target.item) {
+ target = Polymer.dom(target).parentNode;
+ }
+
+ // configure the page animation
+ this.sharedElements = {
+ 'hero': target,
+ 'ripple': target
+ };
+ this.animationConfig['exit'][0].gesture = {
+ x: event.x || event.pageX,
+ y: event.y || event.pageY
+ };
+
+ this.fire('tile-click', {
+ tile: target,
+ data: target.item
+ });
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/fullsize-page-with-card.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/fullsize-page-with-card.html
new file mode 100644
index 00000000000..8f334ec44ac
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/fullsize-page-with-card.html
@@ -0,0 +1,125 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+<link rel="import" href="../../../paper-styles/color.html">
+<link rel="import" href="../shared-styles.html">
+
+<dom-module id="fullsize-page-with-card">
+ <template>
+ <style include="shared-styles"></style>
+ <style>
+
+ :host {
+ display: block;
+ }
+
+ .fixed {
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100vh;
+ width: 100vw;
+ }
+
+ .card {
+ position: relative;
+ margin: 200px 100px 0;
+ height: 700px;
+ }
+
+ </style>
+
+ <div id="fixed" class$="[[_computeFixedBackgroundClass(color)]]"></div>
+ <div id="card" class$="[[_computeCardClass(color)]]"></div>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'fullsize-page-with-card',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+
+ color: {
+ type: String
+ },
+
+ sharedElements: {
+ type: Object
+ },
+
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ this.sharedElements = {
+ 'hero': this.$.card,
+ 'ripple': this.$.fixed
+ };
+
+ this.animationConfig = {
+ 'entry': [{
+ name: 'ripple-animation',
+ id: 'ripple',
+ toPage: this,
+ }, {
+ name: 'hero-animation',
+ id: 'hero',
+ toPage: this,
+ timing: {
+ delay: 150
+ }
+ }],
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this.$.fixed
+ }, {
+ name: 'transform-animation',
+ transformFrom: 'none',
+ transformTo: 'translate(0px,-200vh) scale(0.9,1)',
+ node: this.$.card
+ }]
+ };
+ },
+
+ _computeCardClass: function(color) {
+ var cls = 'card';
+ if (color) {
+ cls += ' ' + color + '-300';
+ }
+ return cls;
+ },
+
+ _computeFixedBackgroundClass: function(color) {
+ var cls = 'fixed';
+ if (color) {
+ cls += ' ' + color + '-100';
+ }
+ return cls;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/index.html
new file mode 100644
index 00000000000..d88ec2d7979
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/grid/index.html
@@ -0,0 +1,74 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: grid</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../neon-animated-pages.html">
+ <link rel="import" href="../../neon-animations.html">
+ <link rel="import" href="animated-grid.html">
+ <link rel="import" href="fullsize-page-with-card.html">
+
+ <custom-style>
+ <style is="custom-style">
+ body {
+ overflow: hidden;
+ @apply --layout-fullbleed;
+ }
+
+ neon-animated-pages {
+ height: 100%;
+ }
+ </style>
+ </custom-style>
+
+ </head>
+ <body>
+ <dom-bind>
+ <template is="dom-bind">
+ <neon-animated-pages id="pages" selected="0">
+ <animated-grid on-tile-click="_onTileClick"></animated-grid>
+ <fullsize-page-with-card id="fullsize-card" on-click="_onFullsizeClick">
+ </fullsize-page-with-card>
+ </neon-animated-pages>
+ </template>
+ </dom-bind>
+
+ <script>
+
+ var scope1 = document.querySelector('template[is="dom-bind"]');
+ var scope2 = document.querySelector('dom-bind');
+
+ var _onTileClick = function(event) {
+ this.$['fullsize-card'].color = event.detail.data.color;
+ this.$.pages.selected = 1;
+ };
+
+ var _onFullsizeClick = function(event) {
+ this.$.pages.selected = 0;
+ };
+
+ scope1._onTileClick = _onTileClick;
+ scope1._onFullsizeClick = _onFullsizeClick;
+ scope2._onTileClick = _onTileClick;
+ scope2._onFullsizeClick = _onFullsizeClick;
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/index.html
new file mode 100644
index 00000000000..1ca9f2d50ce
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/index.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html lang="en">
+<head>
+ <title>neon-animated pages demo</title>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="../web-animations.html">
+</head>
+<style>
+ a {
+ display: block;
+ margin-bottom: 10px;
+ }
+</style>
+<body unresolved>
+ <div class="horizontal-section-container">
+ <div>
+ <h4>Sample demos</h4>
+ <div class="horizontal-section">
+ <a href="doc/index.html">basic</a>
+ <a href="declarative/index.html">declarative</a>
+ <a href="dropdown/index.html">dropdown</a>
+ <a href="grid/index.html">grid</a>
+ <a href="list/index.html">list</a>
+ <a href="load/index.html">load</a>
+ <a href="tiles/index.html">tiles</a>
+ <a href="card/index.html">card</a>
+ </div>
+ </div>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/full-view.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/full-view.html
new file mode 100644
index 00000000000..da52eb318ba
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/full-view.html
@@ -0,0 +1,123 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../../paper-styles/shadow.html">
+<link rel="import" href="../../../app-layout/app-toolbar/app-toolbar.html">
+<link rel="import" href="../../neon-animatable-behavior.html">
+
+<dom-module id="full-view">
+ <template>
+ <style>
+ :host {
+ @apply --layout-vertical;
+ }
+
+ .main {
+ background: white;
+ @apply --layout-flex;
+ @apply --layout-scroll;
+ @apply --shadow-elevation-8dp;
+ }
+
+ .image-container {
+ position: relative;
+ width: 100%;
+ padding-bottom: 100%;
+ }
+
+ .image {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: repeating-linear-gradient(
+ 45deg,
+ #f5f5f5,
+ #f5f5f5 8px,
+ #e0e0e0 8px,
+ #e0e0e0 16px
+ );
+ }
+
+ app-toolbar {
+ color: white;
+ background-color: var(--google-blue-500);
+ }
+ </style>
+ <app-toolbar>
+ <paper-icon-button id="button" icon="clear" on-click="_onClearButtonClick"></paper-icon-button>
+ </app-toolbar>
+
+ <div id="main" class="main">
+ <div class="image-container">
+ <div class="image">
+ </div>
+ </div>
+ </div>
+
+ </template>
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'full-view',
+
+ behaviors: [
+ Polymer.NeonAnimatableBehavior
+ ],
+
+ properties: {
+
+ sharedElements: {
+ type: Object
+ },
+
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ this.sharedElements = { 'hero': this.$.main };
+ this.animationConfig = {
+ 'entry': [{
+ name: 'fade-in-animation',
+ node: this.$.button
+ }, {
+ name: 'hero-animation',
+ id: 'hero',
+ toPage: this
+ }],
+
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this.$.button
+ }, {
+ name: 'scale-down-animation',
+ node: this.$.main,
+ transformOrigin: '50% 50%',
+ axis: 'y'
+ }]
+ }
+ },
+
+ _onClearButtonClick: function() {
+ this.fire('close');
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/index.html
new file mode 100644
index 00000000000..6e100bd21f3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: list</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="list-demo.html">
+
+ </head>
+ <custom-style>
+ <style is="custom-style">
+ body {
+ @apply --layout-fullbleed;
+ }
+
+ list-demo {
+ @apply --layout-fit;
+ }
+ </style>
+ </custom-style>
+ <body>
+ <list-demo></list-demo>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-demo.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-demo.html
new file mode 100644
index 00000000000..21897e4c357
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-demo.html
@@ -0,0 +1,101 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../neon-animated-pages.html">
+<link rel="import" href="../../neon-animations.html">
+<link rel="import" href="list-view.html">
+<link rel="import" href="full-view.html">
+
+<dom-module id="list-demo">
+ <template>
+ <style>
+ :host {
+ display: block;
+ }
+ neon-animated-pages {
+ height: 100%;
+ }
+ </style>
+ <neon-animated-pages id="pages" selected="0">
+ <list-view data="[[fileData]]" on-item-click="_onItemClick"></list-view>
+ <full-view on-close="_onClose"></full-view>
+ </neon-animated-pages>
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'list-demo',
+
+ properties: {
+
+ fileData: {
+ type: Array,
+ value: function() {
+ return [
+ {fileName: 'IMG_4130.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4131.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4132.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4133.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4134.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4135.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4136.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4137.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4138.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4139.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4140.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4141.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4142.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4143.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4144.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4145.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4146.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4147.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4148.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4149.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4150.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4151.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4152.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4153.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4154.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4155.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4156.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4157.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4158.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4159.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4160.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4161.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4162.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4163.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4164.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4165.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4166.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4167.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4168.jpg', modifiedDate: 'May 12 2015'},
+ {fileName: 'IMG_4169.jpg', modifiedDate: 'May 12 2015'}
+ ]
+ }
+ }
+ },
+
+ _onItemClick: function() {
+ this.$.pages.selected = 1;
+ },
+
+ _onClose: function() {
+ this.$.pages.selected = 0;
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-view.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-view.html
new file mode 100644
index 00000000000..2620a35599b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/list/list-view.html
@@ -0,0 +1,131 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-icons/iron-icons.html">
+<link rel="import" href="../../../iron-icon/iron-icon.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../../paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../../../paper-item/paper-item.html">
+<link rel="import" href="../../../paper-item/paper-item-body.html">
+<link rel="import" href="../../../app-layout/app-toolbar/app-toolbar.html">
+<link rel="import" href="../../../paper-styles/color.html">
+<link rel="import" href="../../neon-animatable-behavior.html">
+
+<dom-module id="list-view">
+ <template>
+ <style>
+ :host {
+ @apply --layout-vertical;
+ }
+
+ .main {
+ @apply --layout-flex;
+ @apply --layout-scroll;
+ }
+
+ iron-icon {
+ color: var(--google-grey-500);
+ }
+
+ app-toolbar {
+ color: white;
+ background-color: var(--google-blue-500);
+ }
+ </style>
+ <app-toolbar>
+ <paper-icon-button id="button" icon="arrow-back"></paper-icon-button>
+ </app-toolbar>
+
+ <div class="main">
+
+ <template is="dom-repeat" items="[[data]]">
+
+ <paper-item>
+ <paper-item-body two-line>
+ <div>[[item.fileName]]</div>
+ <div secondary>[[item.modifiedDate]]</div>
+ </paper-item-body>
+ <iron-icon icon="info"></iron-icon>
+ </paper-item>
+
+ </template>
+
+ </div>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'list-view',
+
+ behaviors: [
+ Polymer.NeonAnimatableBehavior
+ ],
+
+ listeners: {
+ 'click': '_onClick'
+ },
+
+ properties: {
+
+ data: {
+ type: Array,
+ value: function() {
+ return [];
+ }
+ },
+
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ this.animationConfig = {
+ 'entry': [{
+ name: 'fade-in-animation',
+ node: this.$.button
+ }],
+
+ 'exit': [{
+ name: 'fade-out-animation',
+ node: this.$.button
+ }, {
+ name: 'hero-animation',
+ id: 'hero',
+ fromPage: this
+ }]
+ };
+ },
+
+ _onClick: function(event) {
+ var target = Polymer.dom(event).rootTarget;
+
+ // configure the page animation
+ this.sharedElements = {
+ 'hero': target,
+ };
+
+ this.fire('item-click', {
+ item: target,
+ });
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/animated-grid.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/animated-grid.html
new file mode 100644
index 00000000000..260a4395e72
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/animated-grid.html
@@ -0,0 +1,145 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+<link rel="import" href="../../../paper-styles/typography.html">
+<link rel="import" href="../../../paper-styles/color.html">
+<link rel="import" href="../shared-styles.html">
+
+<dom-module id="animated-grid">
+ <template>
+ <style include="shared-styles">
+ :host {
+ display: block;
+ background: #000;
+ }
+
+ .tile {
+ display: inline-block;
+ float: left;
+ vertical-align: top;
+ width: calc(100% / 6);
+ height: calc(100% / 3);
+
+ @apply --paper-font-title;
+ @apply --layout-vertical;
+ @apply --layout-center-center;
+ }
+
+ .tile:nth-of-type(1) {
+ width: calc(100% / 3);
+ height: calc(100% / 3 * 2);
+ }
+
+ .tile:nth-of-type(4) {
+ width: calc(100% / 3);
+ }
+
+ .tile:nth-of-type(5) {
+ width: calc(100% / 3);
+ height: calc(100% / 3 * 2);
+ }
+
+ .tile:nth-of-type(8) {
+ width: calc(100% / 3);
+ height: calc(100% / 3);
+ }
+
+ .tile:nth-of-type(9) {
+ position: absolute;
+ top: calc(100% / 3 * 2);
+ left: 0;
+ width: calc(100% / 6);
+ height: calc(100% / 3);
+ }
+
+ .tile:nth-of-type(10) {
+ position: absolute;
+ top: calc(100% / 3 * 2);
+ left: calc(100% / 6);;
+ width: calc(100% / 6);
+ height: calc(100% / 3);
+ }
+ </style>
+
+ <template is="dom-repeat" items="[[config]]">
+ <div class$="[[_computeTileClass(item.color)]]">
+ <span>[[item.value]]</span>
+ </div>
+ </template>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'animated-grid',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+
+ config: {
+ type: Array,
+ value: function() {
+ return [
+ {value: 1, color: 'blue'},
+ {value: 2, color: 'red'},
+ {value: 3, color: 'blue'},
+ {value: 4, color: 'green'},
+ {value: 5, color: 'yellow'},
+ {value: 6, color: 'blue'},
+ {value: 7, color: 'red'},
+ {value: 8, color: 'green'},
+ {value: 9, color: 'yellow'},
+ {value: 10, color: 'red'}
+ ]
+ }
+ },
+
+ animationConfig: {
+ type: Object,
+ value: function() {
+ return {
+ 'entry': [{
+ name: 'cascaded-animation',
+ animation: 'transform-animation',
+ transformFrom: 'translateY(100%)',
+ transformTo: 'none',
+ timing: {
+ delay: 50
+ }
+ }]
+ }
+ }
+ }
+
+ },
+
+ ready: function() {
+ this.async(function() {
+ var nodeList = Polymer.dom(this.root).querySelectorAll('.tile');
+ this.animationConfig['entry'][0].nodes = Array.prototype.slice.call(nodeList);
+ });
+ },
+
+ _computeTileClass: function(color) {
+ return 'tile ' + color + '-300';
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/full-page.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/full-page.html
new file mode 100644
index 00000000000..d7a789a6067
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/full-page.html
@@ -0,0 +1,82 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../neon-animatable-behavior.html">
+<link rel="import" href="../../neon-animation-runner-behavior.html">
+<link rel="import" href="../../../paper-styles/shadow.html">
+<link rel="import" href="animated-grid.html">
+
+<dom-module id="full-page">
+ <template>
+ <style>
+ :host {
+ background: black;
+ visibility: hidden;
+ @apply --layout-vertical;
+ }
+
+ .toolbar {
+ background: #9c27b0;
+ height: 72px;
+ z-index: 1;
+ @apply --shadow-elevation-2dp;
+ }
+
+ animated-grid {
+ height: calc(100% - 72px);
+ @apply --layout-flex;
+ }
+ </style>
+
+ <div id="toolbar" class="toolbar"></div>
+ <animated-grid id="grid"></animated-grid>
+
+ </template>
+</dom-module>
+
+<script>
+
+Polymer({
+
+ is: 'full-page',
+
+ behaviors: [
+ Polymer.NeonAnimatableBehavior,
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ properties: {
+
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ this.animationConfig = this.animationConfig || {
+ 'entry': [{
+ name: 'slide-from-top-animation',
+ node: this.$.toolbar
+ }, {
+ animatable: this.$.grid,
+ type: 'entry'
+ }]
+ };
+ },
+
+ show: function() {
+ this.style.visibility = 'visible';
+ this.playAnimation('entry');
+ }
+
+});
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/index.html
new file mode 100644
index 00000000000..1e1f1317b52
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/load/index.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: load</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../neon-animated-pages.html">
+ <link rel="import" href="../../neon-animations.html">
+ <link rel="import" href="full-page.html">
+
+ <custom-style>
+ <style is="custom-style">
+ body {
+ overflow: hidden;
+ @apply --layout-fullbleed;
+ }
+ full-page {
+ @apply --layout-fit;
+ }
+ </style>
+ </custom-style>
+ </head>
+ <body>
+
+ <full-page></full-page>
+
+ <script>
+
+ window.addEventListener('WebComponentsReady', function() {
+ document.querySelector('full-page').show();
+ });
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/shared-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/shared-styles.html
new file mode 100644
index 00000000000..4e48c8c4065
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/shared-styles.html
@@ -0,0 +1,47 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<dom-module id="shared-styles">
+ <template>
+ <style>
+ .red-100 {
+ background: var(--google-red-100);
+ }
+
+ .yellow-100 {
+ background: var(--google-yellow-100);
+ }
+
+ .blue-100 {
+ background: var(--google-blue-100);
+ }
+
+ .green-100 {
+ background: var(--google-green-100);
+ }
+
+ .red-300 {
+ background: var(--google-red-300);
+ }
+
+ .yellow-300 {
+ background: var(--google-yellow-300);
+ }
+
+ .blue-300 {
+ background: var(--google-blue-300);
+ }
+
+ .green-300 {
+ background: var(--google-green-300);
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/circles-page.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/circles-page.html
new file mode 100644
index 00000000000..3d7fdddca2f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/circles-page.html
@@ -0,0 +1,115 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+
+<dom-module id="circles-page">
+ <template>
+ <style>
+ :host {
+ @apply --layout-horizontal;
+ @apply --layout-center-center;
+ }
+
+ .circle {
+ display: inline-block;
+ box-sizing: border-box;
+ width: 100px;
+ height: 100px;
+ margin: 16px;
+ border-radius: 50%;
+ background: var(--color-one);
+ }
+ </style>
+
+ <div>
+ <div class="circle"></div>
+ <div class="circle"></div>
+ <div class="circle"></div>
+ <div class="circle"></div>
+ </div>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'circles-page',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ listeners: {
+ 'click': '_onClick'
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ var circles = Polymer.dom(this.root).querySelectorAll('.circle');
+ var circlesArray = Array.prototype.slice.call(circles);
+ this.animationConfig = {
+ 'entry': [{
+ name: 'cascaded-animation',
+ animation: 'scale-up-animation',
+ nodes: circlesArray
+ }],
+
+ 'exit': [{
+ name: 'hero-animation',
+ id: 'hero',
+ fromPage: this
+ }, {
+ name: 'cascaded-animation',
+ animation: 'scale-down-animation'
+ }]
+ };
+ },
+
+ _onClick: function(event) {
+ var target = Polymer.dom(event).rootTarget;
+
+ if (target.classList.contains('circle')) {
+ // configure the page animation
+ this.sharedElements = {
+ 'hero': target
+ };
+
+ var nodesToScale = [];
+ var circles = Polymer.dom(this.root).querySelectorAll('.circle');
+
+ for (var node, index = 0; node = circles[index]; index++) {
+ if (node !== event.target) {
+ nodesToScale.push(node);
+ }
+ }
+
+ this.animationConfig['exit'][1].nodes = nodesToScale;
+ this.fire('circle-click');
+ }
+ }
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/index.html
new file mode 100644
index 00000000000..3a46ab08cf4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/index.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>neon-animated-pages demo: tiles</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../web-animations.html">
+ <link rel="import" href="../../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../neon-animated-pages.html">
+ <link rel="import" href="../../neon-animations.html">
+ <link rel="import" href="../../../paper-styles/color.html">
+ <link rel="import" href="circles-page.html">
+ <link rel="import" href="squares-page.html">
+
+ <custom-style>
+ <style is="custom-style">
+ body {
+ overflow: hidden;
+ @apply --layout-fullbleed;
+ }
+ neon-animated-pages {
+ height: 100%;
+ }
+
+ :root {
+ --color-one: var(--paper-cyan-300);
+ --color-two: var(--paper-orange-500);
+ }
+ </style>
+ </custom-style>
+
+ </head>
+ <body>
+ <dom-bind>
+ <template is="dom-bind">
+
+ <neon-animated-pages id="pages" selected="0">
+ <circles-page on-circle-click="_onCircleClick"></circles-page>
+ <squares-page on-click="_onSquaresClick"></squares-page>
+ </neon-animated-pages>
+
+ </template>
+ </dom-bind>
+
+ <script>
+
+ var scope1 = document.querySelector('template[is="dom-bind"]');
+ var scope2 = document.querySelector('dom-bind');
+
+ var _onCircleClick = function(event) {
+ this.$.pages.selected = 1;
+ };
+
+ var _onSquaresClick = function(event) {
+ this.$.pages.selected = 0;
+ };
+
+ scope1._onCircleClick = _onCircleClick;
+ scope1._onSquaresClick = _onSquaresClick;
+ scope2._onCircleClick = _onCircleClick;
+ scope2._onSquaresClick = _onSquaresClick;
+
+ </script>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/squares-page.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/squares-page.html
new file mode 100644
index 00000000000..5382fb1eed3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/demo/tiles/squares-page.html
@@ -0,0 +1,102 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../polymer/polymer.html">
+<link rel="import" href="../../neon-shared-element-animatable-behavior.html">
+
+<dom-module id="squares-page">
+ <template>
+ <style>
+ .header {
+ height: 40%;
+ background: var(--color-one);
+ }
+
+ .body {
+ text-align: center;
+ padding: 8px;
+ }
+
+ .square {
+ display: inline-block;
+ width: 150px;
+ height: 150px;
+ margin: 8px;
+ background: var(--color-two);
+ }
+ </style>
+
+ <div id="header" class="header"></div>
+
+ <div class="body">
+ <div class="square"></div>
+ <div class="square"></div>
+ <div class="square"></div>
+ <div class="square"></div>
+ </div>
+
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'squares-page',
+
+ behaviors: [
+ Polymer.NeonSharedElementAnimatableBehavior
+ ],
+
+ properties: {
+
+ sharedElements: {
+ type: Object
+ },
+
+ animationConfig: {
+ type: Object
+ }
+ },
+
+ attached: function() {
+ if (this.animationConfig) {
+ return;
+ }
+
+ this.sharedElements = { 'hero': this.$.header };
+ var squares = Polymer.dom(this.root).querySelectorAll('.square');
+ var squaresArray = Array.prototype.slice.call(squares);
+ this.animationConfig = {
+ 'entry': [{
+ name: 'hero-animation',
+ id: 'hero',
+ toPage: this
+ }, {
+ name: 'cascaded-animation',
+ animation: 'transform-animation',
+ transformFrom: 'translateY(100%)',
+ nodes: squaresArray
+ }],
+
+ 'exit': [{
+ name: 'slide-up-animation',
+ node: this.$.header
+ }, {
+ name: 'cascaded-animation',
+ animation: 'transform-animation',
+ transformTo: 'translateY(60vh)',
+ nodes: squaresArray
+ }]
+ };
+ }
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/gen-tsd.json
new file mode 100644
index 00000000000..c2e13678514
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/gen-tsd.json
@@ -0,0 +1,5 @@
+{
+ "removeReferences": [
+ "../web-animations-js/web-animations-next-lite.min.d.ts"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/guides/neon-animation.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/guides/neon-animation.md
new file mode 100644
index 00000000000..69727b864ff
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/guides/neon-animation.md
@@ -0,0 +1,314 @@
+---
+title: neon-animation
+summary: "A short guide to neon-animation and neon-animated-pages"
+tags: ['animation','core-animated-pages']
+elements: ['neon-animation','neon-animated-pages']
+updated: 2015-05-26
+---
+
+# neon-animation
+
+`neon-animation` is a suite of elements and behaviors to implement pluggable animated transitions for Polymer Elements using [Web Animations](https://w3c.github.io/web-animations/).
+
+*Warning: The API may change.*
+
+* [A basic animatable element](#basic)
+* [Animation configuration](#configuration)
+ * [Animation types](#configuration-types)
+ * [Configuration properties](#configuration-properties)
+ * [Using multiple animations](#configuration-multiple)
+ * [Running animations encapsulated in children nodes](#configuration-encapsulation)
+* [Page transitions](#page-transitions)
+ * [Shared element animations](#shared-element)
+ * [Declarative page transitions](#declarative-page)
+* [Included animations](#animations)
+* [Demos](#demos)
+
+<a name="basic"></a>
+## A basic animatable element
+
+Elements that can be animated should implement the `Polymer.NeonAnimatableBehavior` behavior, or `Polymer.NeonAnimationRunnerBehavior` if they're also responsible for running an animation.
+
+```js
+Polymer({
+ is: 'my-animatable',
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+ properties: {
+ animationConfig: {
+ value: function() {
+ return {
+ // provided by neon-animation/animations/scale-down-animation.html
+ name: 'scale-down-animation',
+ node: this
+ }
+ }
+ }
+ },
+ listeners: {
+ // this event is fired when the animation finishes
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+ animate: function() {
+ // run scale-down-animation
+ this.playAnimation();
+ },
+ _onNeonAnimationFinish: function() {
+ console.log('animation done!');
+ }
+});
+```
+
+[Live demo](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/doc/basic.html)
+
+<a name="configuration"></a>
+## Animation configuration
+
+<a name="configuration-types"></a>
+### Animation types
+
+An element might run different animations, for example it might do something different when it enters the view and when it exits from view. You can set the `animationConfig` property to a map from an animation type to configuration.
+
+```js
+Polymer({
+ is: 'my-dialog',
+ behaviors: [
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+ properties: {
+ opened: {
+ type: Boolean
+ },
+ animationConfig: {
+ value: function() {
+ return {
+ 'entry': {
+ // provided by neon-animation/animations/scale-up-animation.html
+ name: 'scale-up-animation',
+ node: this
+ },
+ 'exit': {
+ // provided by neon-animation-animations/fade-out-animation.html
+ name: 'fade-out-animation',
+ node: this
+ }
+ }
+ }
+ }
+ },
+ listeners: {
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+ show: function() {
+ this.opened = true;
+ this.style.display = 'inline-block';
+ // run scale-up-animation
+ this.playAnimation('entry');
+ },
+ hide: function() {
+ this.opened = false;
+ // run fade-out-animation
+ this.playAnimation('exit');
+ },
+ _onNeonAnimationFinish: function() {
+ if (!this.opened) {
+ this.style.display = 'none';
+ }
+ }
+});
+```
+
+[Live demo](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/doc/types.html)
+
+You can also use the convenience properties `entryAnimation` and `exitAnimation` to set `entry` and `exit` animations:
+
+```js
+properties: {
+ entryAnimation: {
+ value: 'scale-up-animation'
+ },
+ exitAnimation: {
+ value: 'fade-out-animation'
+ }
+}
+```
+
+<a name="configuration-properties"></a>
+### Configuration properties
+
+You can pass additional parameters to configure an animation in the animation configuration object.
+All animations should accept the following properties:
+
+ * `name`: The name of an animation, ie. an element implementing `Polymer.NeonAnimationBehavior`.
+ * `node`: The target node to apply the animation to. Defaults to `this`.
+ * `timing`: Timing properties to use in this animation. They match the [Web Animations Animation Effect Timing interface](https://w3c.github.io/web-animations/#the-animationeffecttiming-interface). The
+ properties include the following:
+ * `duration`: The duration of the animation in milliseconds.
+ * `delay`: The delay before the start of the animation in milliseconds.
+ * `easing`: A timing function for the animation. Matches the CSS timing function values.
+
+Animations may define additional configuration properties and they are listed in their documentation.
+
+<a name="configuration-multiple"></a>
+### Using multiple animations
+
+Set the animation configuration to an array to combine animations, like this:
+
+```js
+animationConfig: {
+ value: function() {
+ return {
+ // fade-in-animation is run with a 50ms delay from slide-down-animation
+ 'entry': [{
+ name: 'slide-down-animation',
+ node: this
+ }, {
+ name: 'fade-in-animation',
+ node: this,
+ timing: {delay: 50}
+ }]
+ }
+ }
+}
+```
+
+<a name="configuration-encapsulation"></a>
+### Running animations encapsulated in children nodes
+
+You can include animations in the configuration that are encapsulated in a child element that implement `Polymer.NeonAnimatableBehavior` with the `animatable` property.
+
+```js
+animationConfig: {
+ value: function() {
+ return {
+ // run fade-in-animation on this, and the entry animation on this.$.myAnimatable
+ 'entry': [
+ {name: 'fade-in-animation', node: this},
+ {animatable: this.$.myAnimatable, type: 'entry'}
+ ]
+ }
+ }
+}
+```
+
+<a name="page-transitions"></a>
+## Page transitions
+
+*The artist formerly known as `<core-animated-pages>`*
+
+The `neon-animated-pages` element manages a set of pages to switch between, and runs animations between the page transitions. It implements the `Polymer.IronSelectableBehavior` behavior. Each child node should implement `Polymer.NeonAnimatableBehavior` and define the `entry` and `exit` animations. During a page transition, the `entry` animation is run on the new page and the `exit` animation is run on the old page.
+
+<a name="shared-element"></a>
+### Shared element animations
+
+Shared element animations work on multiple nodes. For example, a "hero" animation is used during a page transition to make two elements from separate pages appear to animate as a single element. Shared element animation configurations have an `id` property that identify they belong in the same animation. Elements containing shared elements also have a `sharedElements` property defines a map from `id` to element, the element involved with the animation.
+
+In the incoming page:
+
+```js
+properties: {
+ animationConfig: {
+ value: function() {
+ return {
+ // the incoming page defines the 'entry' animation
+ 'entry': {
+ name: 'hero-animation',
+ id: 'hero',
+ toPage: this
+ }
+ }
+ }
+ },
+ sharedElements: {
+ value: function() {
+ return {
+ 'hero': this.$.hero
+ }
+ }
+ }
+}
+```
+
+In the outgoing page:
+
+```js
+properties: {
+ animationConfig: {
+ value: function() {
+ return {
+ // the outgoing page defines the 'exit' animation
+ 'exit': {
+ name: 'hero-animation',
+ id: 'hero',
+ fromPage: this
+ }
+ }
+ }
+ },
+ sharedElements: {
+ value: function() {
+ return {
+ 'hero': this.$.otherHero
+ }
+ }
+ }
+}
+```
+
+<a name="declarative-page"></a>
+### Declarative page transitions
+
+For convenience, if you define the `entry-animation` and `exit-animation` attributes on `<neon-animated-pages>`, those animations will apply for all page transitions.
+
+For example:
+
+```js
+<neon-animated-pages id="pages" class="flex" selected="[[selected]]" entry-animation="slide-from-right-animation" exit-animation="slide-left-animation">
+ <neon-animatable>1</neon-animatable>
+ <neon-animatable>2</neon-animatable>
+ <neon-animatable>3</neon-animatable>
+ <neon-animatable>4</neon-animatable>
+ <neon-animatable>5</neon-animatable>
+</neon-animated-pages>
+```
+
+The new page will slide in from the right, and the old page slide away to the left.
+
+<a name="animations"></a>
+## Included animations
+
+Single element animations:
+
+ * `fade-in-animation` Animates opacity from `0` to `1`;
+ * `fade-out-animation` Animates opacity from `1` to `0`;
+ * `scale-down-animation` Animates transform from `scale(1)` to `scale(0)`;
+ * `scale-up-animation` Animates transform from `scale(0)` to `scale(1)`;
+ * `slide-down-animation` Animates transform from `none` to `translateY(100%)`;
+ * `slide-up-animation` Animates transform from `none` to `translateY(-100%)`;
+ * `slide-from-top-animation` Animates transform from `translateY(-100%)` to `none`;
+ * `slide-from-bottom-animation` Animates transform from `translateY(100%)` to `none`;
+ * `slide-left-animation` Animates transform from `none` to `translateX(-100%)`;
+ * `slide-right-animation` Animates transform from `none` to `translateX(100%)`;
+ * `slide-from-left-animation` Animates transform from `translateX(-100%)` to `none`;
+ * `slide-from-right-animation` Animates transform from `translateX(100%)` to `none`;
+ * `transform-animation` Animates a custom transform.
+
+Note that there is a restriction that only one transform animation can be applied on the same element at a time. Use the custom `transform-animation` to combine transform properties.
+
+Shared element animations
+
+ * `hero-animation` Animates an element such that it looks like it scales and transforms from another element.
+ * `ripple-animation` Animates an element to full screen such that it looks like it ripples from another element.
+
+Group animations
+ * `cascaded-animation` Applys an animation to an array of elements with a delay between each.
+
+<a name="demos"></a>
+## Demos
+
+ * [Grid to full screen](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/grid/index.html)
+ * [Animation on load](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/load/index.html)
+ * [List item to detail](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/list/index.html) (For narrow width)
+ * [Dots to squares](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/tiles/index.html)
+ * [Declarative](http://morethanreal.github.io/neon-animation-demo/bower_components/neon-animation/demo/declarative/index.html)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/index.html
new file mode 100644
index 00000000000..6f5feedf455
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>neon-animation</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.d.ts
new file mode 100644
index 00000000000..c59411a0588
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.d.ts
@@ -0,0 +1,53 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animatable-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.NeonAnimatableBehavior` is implemented by elements containing animations for use with
+ * elements implementing `Polymer.NeonAnimationRunnerBehavior`.
+ */
+ interface NeonAnimatableBehavior {
+
+ /**
+ * Animation configuration. See README for more info.
+ */
+ animationConfig: object|null|undefined;
+
+ /**
+ * Convenience property for setting an 'entry' animation. Do not set `animationConfig.entry`
+ * manually if using this. The animated node is set to `this` if using this property.
+ */
+ entryAnimation: string|null|undefined;
+
+ /**
+ * Convenience property for setting an 'exit' animation. Do not set `animationConfig.exit`
+ * manually if using this. The animated node is set to `this` if using this property.
+ */
+ exitAnimation: string|null|undefined;
+ _entryAnimationChanged(): void;
+ _exitAnimationChanged(): void;
+ _copyProperties(config1: any, config2: any): void;
+ _cloneConfig(config: any): any;
+ _getAnimationConfigRecursive(type: any, map: any, allConfigs: any): void;
+
+ /**
+ * An element implementing `Polymer.NeonAnimationRunnerBehavior` calls this method to configure
+ * an animation with an optional type. Elements implementing `Polymer.NeonAnimatableBehavior`
+ * should define the property `animationConfig`, which is either a configuration object
+ * or a map of animation type to array of configuration objects.
+ */
+ getAnimationConfig(type: any): any;
+ }
+
+ const NeonAnimatableBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.html
new file mode 100644
index 00000000000..f07d9c3e1f3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable-behavior.html
@@ -0,0 +1,150 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+
+ /**
+ * `Polymer.NeonAnimatableBehavior` is implemented by elements containing animations for use with
+ * elements implementing `Polymer.NeonAnimationRunnerBehavior`.
+ * @polymerBehavior
+ */
+ Polymer.NeonAnimatableBehavior = {
+
+ properties: {
+
+ /**
+ * Animation configuration. See README for more info.
+ */
+ animationConfig: {
+ type: Object
+ },
+
+ /**
+ * Convenience property for setting an 'entry' animation. Do not set `animationConfig.entry`
+ * manually if using this. The animated node is set to `this` if using this property.
+ */
+ entryAnimation: {
+ observer: '_entryAnimationChanged',
+ type: String
+ },
+
+ /**
+ * Convenience property for setting an 'exit' animation. Do not set `animationConfig.exit`
+ * manually if using this. The animated node is set to `this` if using this property.
+ */
+ exitAnimation: {
+ observer: '_exitAnimationChanged',
+ type: String
+ }
+
+ },
+
+ _entryAnimationChanged: function() {
+ this.animationConfig = this.animationConfig || {};
+ this.animationConfig['entry'] = [{
+ name: this.entryAnimation,
+ node: this
+ }];
+ },
+
+ _exitAnimationChanged: function() {
+ this.animationConfig = this.animationConfig || {};
+ this.animationConfig['exit'] = [{
+ name: this.exitAnimation,
+ node: this
+ }];
+ },
+
+ _copyProperties: function(config1, config2) {
+ // shallowly copy properties from config2 to config1
+ for (var property in config2) {
+ config1[property] = config2[property];
+ }
+ },
+
+ _cloneConfig: function(config) {
+ var clone = {
+ isClone: true
+ };
+ this._copyProperties(clone, config);
+ return clone;
+ },
+
+ _getAnimationConfigRecursive: function(type, map, allConfigs) {
+ if (!this.animationConfig) {
+ return;
+ }
+
+ if(this.animationConfig.value && typeof this.animationConfig.value === 'function') {
+ this._warn(this._logf('playAnimation', "Please put 'animationConfig' inside of your components 'properties' object instead of outside of it."));
+ return;
+ }
+
+ // type is optional
+ var thisConfig;
+ if (type) {
+ thisConfig = this.animationConfig[type];
+ } else {
+ thisConfig = this.animationConfig;
+ }
+
+ if (!Array.isArray(thisConfig)) {
+ thisConfig = [thisConfig];
+ }
+
+ // iterate animations and recurse to process configurations from child nodes
+ if (thisConfig) {
+ for (var config, index = 0; config = thisConfig[index]; index++) {
+ if (config.animatable) {
+ config.animatable._getAnimationConfigRecursive(config.type || type, map, allConfigs);
+ } else {
+ if (config.id) {
+ var cachedConfig = map[config.id];
+ if (cachedConfig) {
+ // merge configurations with the same id, making a clone lazily
+ if (!cachedConfig.isClone) {
+ map[config.id] = this._cloneConfig(cachedConfig);
+ cachedConfig = map[config.id];
+ }
+ this._copyProperties(cachedConfig, config);
+ } else {
+ // put any configs with an id into a map
+ map[config.id] = config;
+ }
+ } else {
+ allConfigs.push(config);
+ }
+ }
+ }
+ }
+ },
+
+ /**
+ * An element implementing `Polymer.NeonAnimationRunnerBehavior` calls this method to configure
+ * an animation with an optional type. Elements implementing `Polymer.NeonAnimatableBehavior`
+ * should define the property `animationConfig`, which is either a configuration object
+ * or a map of animation type to array of configuration objects.
+ */
+ getAnimationConfig: function(type) {
+ var map = {};
+ var allConfigs = [];
+ this._getAnimationConfigRecursive(type, map, allConfigs);
+ // append the configurations saved in the map to the array
+ for (var key in map) {
+ allConfigs.push(map[key]);
+ }
+ return allConfigs;
+ }
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.d.ts
new file mode 100644
index 00000000000..2cc07034719
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.d.ts
@@ -0,0 +1,32 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animatable.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-resizable-behavior/iron-resizable-behavior.d.ts" />
+/// <reference path="neon-animatable-behavior.d.ts" />
+
+/**
+ * `<neon-animatable>` is a simple container element implementing `Polymer.NeonAnimatableBehavior`. This is a convenience element for use with `<neon-animated-pages>`.
+ *
+ * ```
+ * <neon-animated-pages selected="0"
+ * entry-animation="slide-from-right-animation"
+ * exit-animation="slide-left-animation">
+ * <neon-animatable>1</neon-animatable>
+ * <neon-animatable>2</neon-animatable>
+ * </neon-animated-pages>
+ * ```
+ */
+interface NeonAnimatableElement extends Polymer.Element, Polymer.NeonAnimatableBehavior, Polymer.IronResizableBehavior {
+}
+
+interface HTMLElementTagNameMap {
+ "neon-animatable": NeonAnimatableElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.html
new file mode 100644
index 00000000000..26566fc9325
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animatable.html
@@ -0,0 +1,54 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
+<link rel="import" href="neon-animatable-behavior.html">
+
+<!--
+`<neon-animatable>` is a simple container element implementing `Polymer.NeonAnimatableBehavior`. This is a convenience element for use with `<neon-animated-pages>`.
+
+```
+<neon-animated-pages selected="0"
+ entry-animation="slide-from-right-animation"
+ exit-animation="slide-left-animation">
+ <neon-animatable>1</neon-animatable>
+ <neon-animatable>2</neon-animatable>
+</neon-animated-pages>
+```
+-->
+
+<dom-module id="neon-animatable">
+ <template>
+ <style>
+ :host {
+ display: block;
+ }
+ </style>
+
+ <slot></slot>
+ </template>
+
+</dom-module>
+
+<script>
+
+ Polymer({
+
+ is: 'neon-animatable',
+
+ behaviors: [
+ Polymer.NeonAnimatableBehavior,
+ Polymer.IronResizableBehavior
+ ]
+
+ });
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.d.ts
new file mode 100644
index 00000000000..e164ee90306
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.d.ts
@@ -0,0 +1,38 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animated-pages.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-resizable-behavior/iron-resizable-behavior.d.ts" />
+/// <reference path="../iron-selector/iron-selectable.d.ts" />
+/// <reference path="neon-animation-runner-behavior.d.ts" />
+
+/**
+ * Material design: [Meaningful transitions](https://www.google.com/design/spec/animation/meaningful-transitions.html)
+ *
+ * `neon-animated-pages` manages a set of pages and runs an animation when switching between them. Its
+ * children pages should implement `Polymer.NeonAnimatableBehavior` and define `entry` and `exit`
+ * animations to be run when switching to or switching out of the page.
+ */
+interface NeonAnimatedPagesElement extends Polymer.Element, Polymer.IronResizableBehavior, Polymer.IronSelectableBehavior, Polymer.NeonAnimationRunnerBehavior {
+ activateEvent: string|null|undefined;
+
+ /**
+ * if true, the initial page selection will also be animated according to its animation config.
+ */
+ animateInitialSelection: boolean|null|undefined;
+ _onIronSelect(event: any): void;
+ _completeSelectedChanged(oldPage?: object|null, selectedPage?: object|null): void;
+ _onNeonAnimationFinish(event: any): void;
+ _notifyPageResize(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "neon-animated-pages": NeonAnimatedPagesElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.html
new file mode 100644
index 00000000000..ddb4d707456
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animated-pages.html
@@ -0,0 +1,219 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
+<link rel="import" href="../iron-selector/iron-selectable.html">
+<link rel="import" href="neon-animation-runner-behavior.html">
+
+<!--
+Material design: [Meaningful transitions](https://www.google.com/design/spec/animation/meaningful-transitions.html)
+
+`neon-animated-pages` manages a set of pages and runs an animation when switching between them. Its
+children pages should implement `Polymer.NeonAnimatableBehavior` and define `entry` and `exit`
+animations to be run when switching to or switching out of the page.
+
+@group Neon Elements
+@element neon-animated-pages
+-->
+
+<dom-module id="neon-animated-pages">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ }
+
+ :host > ::slotted(*) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ }
+
+ :host > ::slotted(:not(.iron-selected):not(.neon-animating))
+ {
+ display: none !important;
+ }
+
+ :host > ::slotted(.neon-animating) {
+ pointer-events: none;
+ }
+ </style>
+
+ <slot id="content"></slot>
+ </template>
+
+</dom-module>
+
+<script>
+(function() {
+
+ Polymer({
+
+ is: 'neon-animated-pages',
+
+ behaviors: [
+ Polymer.IronResizableBehavior,
+ Polymer.IronSelectableBehavior,
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ properties: {
+
+ activateEvent: {
+ type: String,
+ value: ''
+ },
+
+ // if true, the initial page selection will also be animated according to its animation config.
+ animateInitialSelection: {
+ type: Boolean,
+ value: false
+ }
+
+ },
+
+ listeners: {
+ 'iron-select': '_onIronSelect',
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+
+ _onIronSelect: function(event) {
+ var selectedPage = event.detail.item;
+
+ // Only consider child elements.
+ if (this.items.indexOf(selectedPage) < 0) {
+ return;
+ }
+
+ var oldPage = this._valueToItem(this._prevSelected) || false;
+ this._prevSelected = this.selected;
+
+ // on initial load and if animateInitialSelection is negated, simply display selectedPage.
+ if (!oldPage && !this.animateInitialSelection) {
+ this._completeSelectedChanged();
+ return;
+ }
+
+ this.animationConfig = [];
+
+ // configure selectedPage animations.
+ if (this.entryAnimation) {
+ this.animationConfig.push({
+ name: this.entryAnimation,
+ node: selectedPage
+ });
+ } else {
+ if (selectedPage.getAnimationConfig) {
+ this.animationConfig.push({
+ animatable: selectedPage,
+ type: 'entry'
+ });
+ }
+ }
+
+ // configure oldPage animations iff exists.
+ if (oldPage) {
+
+ // cancel the currently running animation if one is ongoing.
+ if (oldPage.classList.contains('neon-animating')) {
+ this._squelchNextFinishEvent = true;
+ this.cancelAnimation();
+ this._completeSelectedChanged();
+ this._squelchNextFinishEvent = false;
+ }
+
+ // configure the animation.
+ if (this.exitAnimation) {
+ this.animationConfig.push({
+ name: this.exitAnimation,
+ node: oldPage
+ });
+ } else {
+ if (oldPage.getAnimationConfig) {
+ this.animationConfig.push({
+ animatable: oldPage,
+ type: 'exit'
+ });
+ }
+ }
+
+ // display the oldPage during the transition.
+ oldPage.classList.add('neon-animating');
+ }
+
+ // display the selectedPage during the transition.
+ selectedPage.classList.add('neon-animating');
+
+ // actually run the animations.
+ if (this.animationConfig.length >= 1) {
+
+ // on first load, ensure we run animations only after element is attached.
+ if (!this.isAttached) {
+ this.async(function () {
+ this.playAnimation(undefined, {
+ fromPage: null,
+ toPage: selectedPage
+ });
+ });
+
+ } else {
+ this.playAnimation(undefined, {
+ fromPage: oldPage,
+ toPage: selectedPage
+ });
+ }
+
+ } else {
+ this._completeSelectedChanged(oldPage, selectedPage);
+ }
+ },
+
+ /**
+ * @param {Object=} oldPage
+ * @param {Object=} selectedPage
+ */
+ _completeSelectedChanged: function(oldPage, selectedPage) {
+ if (selectedPage) {
+ selectedPage.classList.remove('neon-animating');
+ }
+ if (oldPage) {
+ oldPage.classList.remove('neon-animating');
+ }
+ if (!selectedPage || !oldPage) {
+ var nodes = Polymer.dom(this.$.content).getDistributedNodes();
+ for (var node, index = 0; node = nodes[index]; index++) {
+ node.classList && node.classList.remove('neon-animating');
+ }
+ }
+ this.async(this._notifyPageResize);
+ },
+
+ _onNeonAnimationFinish: function(event) {
+ if (this._squelchNextFinishEvent) {
+ this._squelchNextFinishEvent = false;
+ return;
+ }
+ this._completeSelectedChanged(event.detail.fromPage, event.detail.toPage);
+ },
+
+ _notifyPageResize: function() {
+ var selectedPage = this.selectedItem || this._valueToItem(this.selected);
+ this.resizerShouldNotify = function(element) {
+ return element == selectedPage;
+ };
+ this.notifyResize();
+ }
+ })
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.d.ts
new file mode 100644
index 00000000000..153f3145842
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.d.ts
@@ -0,0 +1,50 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animation-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Use `Polymer.NeonAnimationBehavior` to implement an animation.
+ */
+ interface NeonAnimationBehavior {
+
+ /**
+ * Defines the animation timing.
+ */
+ animationTiming: object|null|undefined;
+
+ /**
+ * Can be used to determine that elements implement this behavior.
+ *
+ */
+ isNeonAnimation: boolean;
+ created(): void;
+
+ /**
+ * Returns the animation timing by mixing in properties from `config` to the defaults defined
+ * by the animation.
+ */
+ timingFromConfig(config: any): any;
+
+ /**
+ * Sets `transform` and `transformOrigin` properties along with the prefixed versions.
+ */
+ setPrefixedProperty(node: any, property: any, value: any): void;
+
+ /**
+ * Called when the animation finishes.
+ */
+ complete(config: any): void;
+ }
+
+ const NeonAnimationBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.html
new file mode 100644
index 00000000000..e51727e5d5b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-behavior.html
@@ -0,0 +1,92 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+
+ /**
+ * Use `Polymer.NeonAnimationBehavior` to implement an animation.
+ * @polymerBehavior
+ */
+ Polymer.NeonAnimationBehavior = {
+
+ properties: {
+
+ /**
+ * Defines the animation timing.
+ */
+ animationTiming: {
+ type: Object,
+ value: function() {
+ return {
+ duration: 500,
+ easing: 'cubic-bezier(0.4, 0, 0.2, 1)',
+ fill: 'both'
+ }
+ }
+ }
+
+ },
+
+ /**
+ * Can be used to determine that elements implement this behavior.
+ */
+ isNeonAnimation: true,
+
+ /**
+ * Do any animation configuration here.
+ */
+ // configure: function(config) {
+ // },
+
+ created: function() {
+ if (!document.body.animate) {
+ console.warn('No web animations detected. This element will not' +
+ ' function without a web animations polyfill.');
+ }
+ },
+
+ /**
+ * Returns the animation timing by mixing in properties from `config` to the defaults defined
+ * by the animation.
+ */
+ timingFromConfig: function(config) {
+ if (config.timing) {
+ for (var property in config.timing) {
+ this.animationTiming[property] = config.timing[property];
+ }
+ }
+ return this.animationTiming;
+ },
+
+ /**
+ * Sets `transform` and `transformOrigin` properties along with the prefixed versions.
+ */
+ setPrefixedProperty: function(node, property, value) {
+ var map = {
+ 'transform': ['webkitTransform'],
+ 'transformOrigin': ['mozTransformOrigin', 'webkitTransformOrigin']
+ };
+ var prefixes = map[property];
+ for (var prefix, index = 0; prefix = prefixes[index]; index++) {
+ node.style[prefix] = value;
+ }
+ node.style[property] = value;
+ },
+
+ /**
+ * Called when the animation finishes.
+ */
+ complete: function(config) {}
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.d.ts
new file mode 100644
index 00000000000..162b649c780
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.d.ts
@@ -0,0 +1,36 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animation-runner-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="neon-animatable-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.NeonAnimationRunnerBehavior` adds a method to run animations.
+ */
+ interface NeonAnimationRunnerBehavior extends Polymer.NeonAnimatableBehavior {
+ _configureAnimations(configs: any): any;
+ _shouldComplete(activeEntries: any): any;
+ _complete(activeEntries: any): void;
+
+ /**
+ * Plays an animation with an optional `type`.
+ */
+ playAnimation(type?: string, cookie?: object): void;
+
+ /**
+ * Cancels the currently running animations.
+ */
+ cancelAnimation(): void;
+ }
+
+ const NeonAnimationRunnerBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.html
new file mode 100644
index 00000000000..425f8b13ad4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation-runner-behavior.html
@@ -0,0 +1,155 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="neon-animatable-behavior.html">
+
+<script>
+
+ /**
+ * `Polymer.NeonAnimationRunnerBehavior` adds a method to run animations.
+ *
+ * @polymerBehavior Polymer.NeonAnimationRunnerBehavior
+ */
+ Polymer.NeonAnimationRunnerBehaviorImpl = {
+
+ _configureAnimations: function(configs) {
+ var results = [];
+ var resultsToPlay = [];
+
+ if (configs.length > 0) {
+ for (var config, index = 0; config = configs[index]; index++) {
+ var neonAnimation = document.createElement(config.name);
+ // is this element actually a neon animation?
+ if (neonAnimation.isNeonAnimation) {
+ var result = null;
+ // Closure compiler does not work well with a try / catch here. .configure needs to be
+ // explicitly defined
+ if (!neonAnimation.configure) {
+ /**
+ * @param {Object} config
+ * @return {AnimationEffectReadOnly}
+ */
+ neonAnimation.configure = function(config) {
+ return null;
+ }
+ }
+
+ result = neonAnimation.configure(config);
+ resultsToPlay.push({ result: result, config: config });
+ } else {
+ console.warn(this.is + ':', config.name, 'not found!');
+ }
+ }
+ }
+
+ for (var i = 0; i < resultsToPlay.length; i++) {
+ var result = resultsToPlay[i].result;
+ var config = resultsToPlay[i].config;
+ // configuration or play could fail if polyfills aren't loaded
+ try {
+ // Check if we have an Effect rather than an Animation
+ if (typeof result.cancel != 'function') {
+ result = document.timeline.play(result);
+ }
+ } catch (e) {
+ result = null;
+ console.warn('Couldnt play', '(', config.name, ').', e);
+ }
+
+ if (result) {
+ results.push({
+ neonAnimation: neonAnimation,
+ config: config,
+ animation: result,
+ });
+ }
+ }
+
+ return results;
+ },
+
+ _shouldComplete: function(activeEntries) {
+ var finished = true;
+ for (var i = 0; i < activeEntries.length; i++) {
+ if (activeEntries[i].animation.playState != 'finished') {
+ finished = false;
+ break;
+ }
+ }
+ return finished;
+ },
+
+ _complete: function(activeEntries) {
+ for (var i = 0; i < activeEntries.length; i++) {
+ activeEntries[i].neonAnimation.complete(activeEntries[i].config);
+ }
+ for (var i = 0; i < activeEntries.length; i++) {
+ activeEntries[i].animation.cancel();
+ }
+ },
+
+ /**
+ * Plays an animation with an optional `type`.
+ * @param {string=} type
+ * @param {!Object=} cookie
+ */
+ playAnimation: function(type, cookie) {
+ var configs = this.getAnimationConfig(type);
+ if (!configs) {
+ return;
+ }
+ this._active = this._active || {};
+ if (this._active[type]) {
+ this._complete(this._active[type]);
+ delete this._active[type];
+ }
+
+ var activeEntries = this._configureAnimations(configs);
+
+ if (activeEntries.length == 0) {
+ this.fire('neon-animation-finish', cookie, {bubbles: false});
+ return;
+ }
+
+ this._active[type] = activeEntries;
+
+ for (var i = 0; i < activeEntries.length; i++) {
+ activeEntries[i].animation.onfinish = function() {
+ if (this._shouldComplete(activeEntries)) {
+ this._complete(activeEntries);
+ delete this._active[type];
+ this.fire('neon-animation-finish', cookie, {bubbles: false});
+ }
+ }.bind(this);
+ }
+ },
+
+ /**
+ * Cancels the currently running animations.
+ */
+ cancelAnimation: function() {
+ for (var k in this._active) {
+ var entries = this._active[k]
+
+ for (var j in entries) {
+ entries[j].animation.cancel();
+ }
+ }
+
+ this._active = {};
+ }
+ };
+
+ /** @polymerBehavior Polymer.NeonAnimationRunnerBehavior */
+ Polymer.NeonAnimationRunnerBehavior = [
+ Polymer.NeonAnimatableBehavior,
+ Polymer.NeonAnimationRunnerBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.d.ts
new file mode 100644
index 00000000000..7b02b1dac01
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.d.ts
@@ -0,0 +1,19 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animation.html
+ */
+
+/// <reference path="neon-animatable-behavior.d.ts" />
+/// <reference path="neon-animated-pages.d.ts" />
+/// <reference path="neon-animatable.d.ts" />
+/// <reference path="neon-animation-behavior.d.ts" />
+/// <reference path="neon-animation-runner-behavior.d.ts" />
+/// <reference path="neon-animations.d.ts" />
+/// <reference path="neon-shared-element-animatable-behavior.d.ts" />
+/// <reference path="neon-shared-element-animation-behavior.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.html
new file mode 100644
index 00000000000..da645048597
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animation.html
@@ -0,0 +1,18 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="neon-animatable-behavior.html">
+<link rel="import" href="neon-animated-pages.html">
+<link rel="import" href="neon-animatable.html">
+<link rel="import" href="neon-animation-behavior.html">
+<link rel="import" href="neon-animation-runner-behavior.html">
+<link rel="import" href="neon-animations.html">
+<link rel="import" href="neon-shared-element-animatable-behavior.html">
+<link rel="import" href="neon-shared-element-animation-behavior.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.d.ts
new file mode 100644
index 00000000000..0bc3ec3c56f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.d.ts
@@ -0,0 +1,30 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-animations.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="animations/cascaded-animation.d.ts" />
+/// <reference path="animations/fade-in-animation.d.ts" />
+/// <reference path="animations/fade-out-animation.d.ts" />
+/// <reference path="animations/hero-animation.d.ts" />
+/// <reference path="animations/opaque-animation.d.ts" />
+/// <reference path="animations/ripple-animation.d.ts" />
+/// <reference path="animations/reverse-ripple-animation.d.ts" />
+/// <reference path="animations/scale-down-animation.d.ts" />
+/// <reference path="animations/scale-up-animation.d.ts" />
+/// <reference path="animations/slide-from-left-animation.d.ts" />
+/// <reference path="animations/slide-from-right-animation.d.ts" />
+/// <reference path="animations/slide-from-top-animation.d.ts" />
+/// <reference path="animations/slide-from-bottom-animation.d.ts" />
+/// <reference path="animations/slide-left-animation.d.ts" />
+/// <reference path="animations/slide-right-animation.d.ts" />
+/// <reference path="animations/slide-up-animation.d.ts" />
+/// <reference path="animations/slide-down-animation.d.ts" />
+/// <reference path="animations/transform-animation.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.html
new file mode 100644
index 00000000000..67c4df4c76a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-animations.html
@@ -0,0 +1,29 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="animations/cascaded-animation.html">
+<link rel="import" href="animations/fade-in-animation.html">
+<link rel="import" href="animations/fade-out-animation.html">
+<link rel="import" href="animations/hero-animation.html">
+<link rel="import" href="animations/opaque-animation.html">
+<link rel="import" href="animations/ripple-animation.html">
+<link rel="import" href="animations/reverse-ripple-animation.html">
+<link rel="import" href="animations/scale-down-animation.html">
+<link rel="import" href="animations/scale-up-animation.html">
+<link rel="import" href="animations/slide-from-left-animation.html">
+<link rel="import" href="animations/slide-from-right-animation.html">
+<link rel="import" href="animations/slide-from-top-animation.html">
+<link rel="import" href="animations/slide-from-bottom-animation.html">
+<link rel="import" href="animations/slide-left-animation.html">
+<link rel="import" href="animations/slide-right-animation.html">
+<link rel="import" href="animations/slide-up-animation.html">
+<link rel="import" href="animations/slide-down-animation.html">
+<link rel="import" href="animations/transform-animation.html">
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.d.ts
new file mode 100644
index 00000000000..5f9ca6ed391
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.d.ts
@@ -0,0 +1,29 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-shared-element-animatable-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="neon-animatable-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Use `Polymer.NeonSharedElementAnimatableBehavior` to implement elements containing shared element
+ * animations.
+ */
+ interface NeonSharedElementAnimatableBehavior extends Polymer.NeonAnimatableBehavior {
+
+ /**
+ * A map of shared element id to node.
+ */
+ sharedElements: object|null|undefined;
+ }
+
+ const NeonSharedElementAnimatableBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.html
new file mode 100644
index 00000000000..e63173d368d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animatable-behavior.html
@@ -0,0 +1,43 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="neon-animatable-behavior.html">
+
+<script>
+
+ /**
+ * Use `Polymer.NeonSharedElementAnimatableBehavior` to implement elements containing shared element
+ * animations.
+ * @polymerBehavior Polymer.NeonSharedElementAnimatableBehavior
+ */
+ Polymer.NeonSharedElementAnimatableBehaviorImpl = {
+
+ properties: {
+
+ /**
+ * A map of shared element id to node.
+ */
+ sharedElements: {
+ type: Object,
+ value: {}
+ }
+
+ }
+
+ };
+
+ /** @polymerBehavior Polymer.NeonSharedElementAnimatableBehavior */
+ Polymer.NeonSharedElementAnimatableBehavior = [
+ Polymer.NeonAnimatableBehavior,
+ Polymer.NeonSharedElementAnimatableBehaviorImpl
+ ];
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.d.ts
new file mode 100644
index 00000000000..607ab8e280b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.d.ts
@@ -0,0 +1,33 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * neon-shared-element-animation-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="neon-animation-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Use `Polymer.NeonSharedElementAnimationBehavior` to implement shared element animations.
+ */
+ interface NeonSharedElementAnimationBehavior extends Polymer.NeonAnimationBehavior {
+
+ /**
+ * Cached copy of shared elements.
+ */
+ sharedElements: object|null|undefined;
+
+ /**
+ * Finds shared elements based on `config`.
+ */
+ findSharedElements(config: any): any;
+ }
+
+ const NeonSharedElementAnimationBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.html
new file mode 100644
index 00000000000..d8f2bdd7193
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/neon-shared-element-animation-behavior.html
@@ -0,0 +1,72 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="neon-animation-behavior.html">
+
+<script>
+
+ /**
+ * Use `Polymer.NeonSharedElementAnimationBehavior` to implement shared element animations.
+ * @polymerBehavior Polymer.NeonSharedElementAnimationBehavior
+ */
+ Polymer.NeonSharedElementAnimationBehaviorImpl = {
+
+ properties: {
+
+ /**
+ * Cached copy of shared elements.
+ */
+ sharedElements: {
+ type: Object
+ }
+
+ },
+
+ /**
+ * Finds shared elements based on `config`.
+ */
+ findSharedElements: function(config) {
+ var fromPage = config.fromPage;
+ var toPage = config.toPage;
+ if (!fromPage || !toPage) {
+ console.warn(this.is + ':', !fromPage ? 'fromPage' : 'toPage', 'is undefined!');
+ return null;
+ };
+
+ if (!fromPage.sharedElements || !toPage.sharedElements) {
+ console.warn(this.is + ':', 'sharedElements are undefined for', !fromPage.sharedElements ? fromPage : toPage);
+ return null;
+ };
+
+ var from = fromPage.sharedElements[config.id];
+ var to = toPage.sharedElements[config.id];
+
+ if (!from || !to) {
+ console.warn(this.is + ':', 'sharedElement with id', config.id, 'not found in', !from ? fromPage : toPage);
+ return null;
+ }
+
+ this.sharedElements = {
+ from: from,
+ to: to
+ };
+ return this.sharedElements;
+ }
+
+ };
+
+ /** @polymerBehavior Polymer.NeonSharedElementAnimationBehavior */
+ Polymer.NeonSharedElementAnimationBehavior = [
+ Polymer.NeonAnimationBehavior,
+ Polymer.NeonSharedElementAnimationBehaviorImpl
+ ];
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package-lock.json
new file mode 100644
index 00000000000..77dd6c5ef50
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package-lock.json
@@ -0,0 +1,974 @@
+{
+ "name": "@polymer/neon-animation",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package.json
new file mode 100644
index 00000000000..2dd963b3e8d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/neon-animation",
+ "private": true,
+ "description": "A system for animating Polymer-based web components",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/neon-animation"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.d.ts
new file mode 100644
index 00000000000..c2f6397e0fc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.d.ts
@@ -0,0 +1,10 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * web-animations.html
+ */
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.html
new file mode 100644
index 00000000000..c871854017a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/neon-animation/web-animations.html
@@ -0,0 +1,11 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<script src="../web-animations-js/web-animations-next-lite.min.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.bower.json
new file mode 100644
index 00000000000..a2f8ef18264
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.bower.json
@@ -0,0 +1,75 @@
+{
+ "name": "paper-behaviors",
+ "version": "2.1.1",
+ "description": "Common behaviors across the paper elements",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "main": [
+ "paper-button-behavior.html",
+ "paper-checked-element-behavior.html",
+ "paper-inky-focus-behavior.html"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "paper",
+ "behavior"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-behaviors"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-behaviors",
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "paper-ripple": "PolymerElements/paper-ripple#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "b955fec09e39c888b9afb932e6ee4bc4a1260f40"
+ },
+ "_source": "https://github.com/PolymerElements/paper-behaviors.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/paper-behaviors"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..0a145b76bb4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-behaviors/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.travis.yml
new file mode 100644
index 00000000000..9b65e9c7000
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/.travis.yml
@@ -0,0 +1,35 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g bower polymer-cli@next
+ - polymer install --variants
+ - sudo mv /usr/bin/google-chrome /usr/bin/google-chrome-old
+ - sudo mv /usr/bin/google-chrome-beta /usr/bin/google-chrome
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ TYkyKHfqK31bPGX+x388nfvBWtoGhD7lwYYLdunZi2pwvR2N3ngzblklwK/ADgYVDC0y+lZaJsrODvQW2cUxVdQP8p+DifXoOig5b8S2H7HFFFf83gaXv0SJ50rIaKLQmXfBdI0ICFzeQOeJ9TlKvtF3/yn/LDpYftuzgbXIyp4=
+ - secure: >-
+ eUlJabqBW3P+MRieHvRcr446jhpV2YYRfZasOh3zh2vkAVsi5R5mPJXVBwk6xP4tdNPbRo0M3boKnMHjoK8AgFolxQwXpVaoOt/oiFUsBFIUNcwKnSdfnadQa6ON5VoDmPd9UhDwES/gq7i906XkV/1jwRKKhPkx1DCyCBfuTvM=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-beta
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/README.md
new file mode 100644
index 00000000000..43475db78c6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/README.md
@@ -0,0 +1,44 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+paper-button-behavior.html paper-checked-element-behavior.html paper-inky-focus-behavior.html paper-ripple-behavior.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/paper-behaviors.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-behaviors)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/paper-behaviors)_
+
+
+<!-- No docs for Polymer.PaperButtonBehavior found. -->
+
+##Polymer.PaperCheckedElementBehavior
+
+Use `Polymer.PaperCheckedElementBehavior` to implement a custom element
+that has a `checked` property similar to `Polymer.IronCheckedElementBehavior`
+and is compatible with having a ripple effect.
+
+
+
+##Polymer.PaperInkyFocusBehavior
+
+`Polymer.PaperInkyFocusBehavior` implements a ripple when the element has keyboard focus.
+
+
+
+##Polymer.PaperRippleBehavior
+
+`Polymer.PaperRippleBehavior` dynamically implements a ripple
+when the element has focus via pointer or keyboard.
+
+NOTE: This behavior is intended to be used in conjunction with and after
+`Polymer.IronButtonState` and `Polymer.IronControlState`.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/bower.json
new file mode 100644
index 00000000000..e6437e2b9cf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/bower.json
@@ -0,0 +1,66 @@
+{
+ "name": "paper-behaviors",
+ "version": "2.1.1",
+ "description": "Common behaviors across the paper elements",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "main": [
+ "paper-button-behavior.html",
+ "paper-checked-element-behavior.html",
+ "paper-inky-focus-behavior.html"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "paper",
+ "behavior"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-behaviors"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-behaviors",
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "paper-ripple": "PolymerElements/paper-ripple#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/index.html
new file mode 100644
index 00000000000..0303fefcc2e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/index.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>paper-behaviors demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link href="paper-button.html" rel="import">
+ <link href="paper-radio-button.html" rel="import">
+
+ <style>
+ body {
+ font-family: sans-serif;
+ padding: 24px;
+ margin: 0;
+ }
+ </style>
+ </head>
+ <body unresolved>
+ <h3>Normal</h3>
+ <paper-button tabindex="0">Hello World</paper-button>
+
+ <h3>Toggles</h3>
+ <paper-button toggles tabindex="0">Hello World</paper-button>
+
+ <h3>Disabled</h3>
+ <paper-button disabled tabindex="0">Hello World</paper-button>
+
+ <h3>Radio button with focus state</h3>
+ <paper-radio-button tabindex="0" title="Radio button with focus state"></paper-radio-button>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-button.html
new file mode 100644
index 00000000000..f4d7fe02957
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-button.html
@@ -0,0 +1,63 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../paper-styles/element-styles/paper-material-styles.html">
+<link rel="import" href="../paper-button-behavior.html">
+
+<dom-module id="paper-button">
+ <template>
+ <style include="paper-material-styles">
+ :host {
+ display: inline-block;
+ position: relative;
+ background-color: #4285F4;
+ color: #fff;
+ border-radius: 3px;
+ text-transform: uppercase;
+ outline: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ }
+
+ .content {
+ border-radius: inherit;
+ padding: 16px;
+ }
+
+ :host([disabled]) {
+ background-color: #888;
+ pointer-events: none;
+ }
+
+ :host([active]),
+ :host([pressed]) {
+ background-color: #3367D6;
+ box-shadow: inset 0 3px 5px rgba(0,0,0,.2);
+ }
+ </style>
+
+ <!-- when using paper-material from paper-styles you must add a paper-material class -->
+ <div class="content paper-material" elevation$="[[elevation]]" animated>
+ <slot></slot>
+ </div>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-button',
+
+ behaviors: [Polymer.PaperButtonBehavior]
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-radio-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-radio-button.html
new file mode 100644
index 00000000000..68c27dcf6c4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/demo/paper-radio-button.html
@@ -0,0 +1,110 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../paper-checked-element-behavior.html">
+
+<dom-module id="paper-radio-button">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ white-space: nowrap;
+ }
+
+ :host(:focus) {
+ outline: none
+ }
+
+ #radioContainer {
+ display: inline-block;
+ position: relative;
+ width: 16px;
+ height: 16px;
+ cursor: pointer;
+ vertical-align: middle;
+ }
+
+ #offRadio {
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ border: solid 2px;
+ border-color: black;
+ transition: border-color 0.28s;
+ }
+
+ #onRadio {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background-color: red;
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ transition: -webkit-transform ease 0.28s;
+ transition: transform ease 0.28s;
+ }
+
+ :host([disabled]) {
+ opacity: 0.3;
+ pointer-events: none;
+ }
+
+ :host([pressed]) #offRadio,
+ :host([active]) #offRadio {
+ border-color: red;
+ }
+
+ :host([pressed]) #onRadio,
+ :host([active]) #onRadio {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ }
+
+ #ink {
+ position: absolute;
+ top: -16px;
+ left: -16px;
+ width: 48px;
+ height: 48px;
+ }
+ </style>
+
+ <div id="radioContainer">
+ <div id="offRadio"></div>
+ <div id="onRadio"></div>
+ </div>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-radio-button',
+
+ behaviors: [Polymer.PaperCheckedElementBehavior],
+
+ hostAttributes: {role: 'radio'},
+
+ ready: function() {
+ this.toggles = true;
+ },
+
+ _createRipple: function() {
+ this._rippleContainer = this.$.radioContainer;
+ return Polymer.PaperInkyFocusBehaviorImpl._createRipple.call(this);
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/index.html
new file mode 100644
index 00000000000..37184eaa0db
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page src="paper-button-behavior.html"></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package-lock.json
new file mode 100644
index 00000000000..bbedc26a0b8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-behaviors",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package.json
new file mode 100644
index 00000000000..f4082af8efc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-behaviors",
+ "private": true,
+ "description": "Common behaviors across the paper elements",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-behaviors"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.d.ts
new file mode 100644
index 00000000000..d0ed25660c0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.d.ts
@@ -0,0 +1,47 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-button-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-behaviors/iron-button-state.d.ts" />
+/// <reference path="paper-ripple-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ interface PaperButtonBehavior extends Polymer.IronButtonState, Polymer.IronControlState, Polymer.PaperRippleBehavior {
+
+ /**
+ * The z-depth of this element, from 0-5. Setting to 0 will remove the
+ * shadow, and each increasing number greater than 0 will be "deeper"
+ * than the last.
+ */
+ readonly elevation: number|null|undefined;
+ hostAttributes: object|null;
+
+ /**
+ * In addition to `IronButtonState` behavior, when space key goes down,
+ * create a ripple down effect.
+ *
+ * @param event .
+ */
+ _spaceKeyDownHandler(event: KeyboardEvent): void;
+
+ /**
+ * In addition to `IronButtonState` behavior, when space key goes up,
+ * create a ripple up effect.
+ *
+ * @param event .
+ */
+ _spaceKeyUpHandler(event: KeyboardEvent): void;
+ _calculateElevation(): void;
+ _computeKeyboardClass(receivedFocusFromKeyboard: any): void;
+ }
+
+ const PaperButtonBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.html
new file mode 100644
index 00000000000..63e07aece6f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-button-behavior.html
@@ -0,0 +1,89 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-button-state.html">
+<link rel="import" href="paper-ripple-behavior.html">
+
+<script>
+ /** @polymerBehavior Polymer.PaperButtonBehavior */
+ Polymer.PaperButtonBehaviorImpl = {
+ properties: {
+ /**
+ * The z-depth of this element, from 0-5. Setting to 0 will remove the
+ * shadow, and each increasing number greater than 0 will be "deeper"
+ * than the last.
+ *
+ * @attribute elevation
+ * @type number
+ * @default 1
+ */
+ elevation: {type: Number, reflectToAttribute: true, readOnly: true}
+ },
+
+ observers: [
+ '_calculateElevation(focused, disabled, active, pressed, receivedFocusFromKeyboard)',
+ '_computeKeyboardClass(receivedFocusFromKeyboard)'
+ ],
+
+ hostAttributes: {role: 'button', tabindex: '0', animated: true},
+
+ _calculateElevation: function() {
+ var e = 1;
+ if (this.disabled) {
+ e = 0;
+ } else if (this.active || this.pressed) {
+ e = 4;
+ } else if (this.receivedFocusFromKeyboard) {
+ e = 3;
+ }
+ this._setElevation(e);
+ },
+
+ _computeKeyboardClass: function(receivedFocusFromKeyboard) {
+ this.toggleClass('keyboard-focus', receivedFocusFromKeyboard);
+ },
+
+ /**
+ * In addition to `IronButtonState` behavior, when space key goes down,
+ * create a ripple down effect.
+ *
+ * @param {!KeyboardEvent} event .
+ */
+ _spaceKeyDownHandler: function(event) {
+ Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event);
+ // Ensure that there is at most one ripple when the space key is held down.
+ if (this.hasRipple() && this.getRipple().ripples.length < 1) {
+ this._ripple.uiDownAction();
+ }
+ },
+
+ /**
+ * In addition to `IronButtonState` behavior, when space key goes up,
+ * create a ripple up effect.
+ *
+ * @param {!KeyboardEvent} event .
+ */
+ _spaceKeyUpHandler: function(event) {
+ Polymer.IronButtonStateImpl._spaceKeyUpHandler.call(this, event);
+ if (this.hasRipple()) {
+ this._ripple.uiUpAction();
+ }
+ }
+ };
+
+ /** @polymerBehavior */
+ Polymer.PaperButtonBehavior = [
+ Polymer.IronButtonState,
+ Polymer.IronControlState,
+ Polymer.PaperRippleBehavior,
+ Polymer.PaperButtonBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.d.ts
new file mode 100644
index 00000000000..1c28837b378
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.d.ts
@@ -0,0 +1,36 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-checked-element-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-checked-element-behavior/iron-checked-element-behavior.d.ts" />
+/// <reference path="paper-inky-focus-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Use `Polymer.PaperCheckedElementBehavior` to implement a custom element
+ * that has a `checked` property similar to `Polymer.IronCheckedElementBehavior`
+ * and is compatible with having a ripple effect.
+ */
+ interface PaperCheckedElementBehavior extends Polymer.PaperInkyFocusBehavior, Polymer.IronCheckedElementBehavior {
+
+ /**
+ * Synchronizes the element's `active` and `checked` state.
+ */
+ _buttonStateChanged(): void;
+
+ /**
+ * Synchronizes the element's checked state with its ripple effect.
+ */
+ _checkedChanged(): void;
+ }
+
+ const PaperCheckedElementBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.html
new file mode 100644
index 00000000000..79812a66f48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-checked-element-behavior.html
@@ -0,0 +1,57 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-checked-element-behavior/iron-checked-element-behavior.html">
+<link rel="import" href="paper-inky-focus-behavior.html">
+
+<script>
+ /**
+ * Use `Polymer.PaperCheckedElementBehavior` to implement a custom element
+ * that has a `checked` property similar to `Polymer.IronCheckedElementBehavior`
+ * and is compatible with having a ripple effect.
+ * @polymerBehavior Polymer.PaperCheckedElementBehavior
+ */
+ Polymer.PaperCheckedElementBehaviorImpl = {
+ /**
+ * Synchronizes the element's checked state with its ripple effect.
+ */
+ _checkedChanged: function() {
+ Polymer.IronCheckedElementBehaviorImpl._checkedChanged.call(this);
+ if (this.hasRipple()) {
+ if (this.checked) {
+ this._ripple.setAttribute('checked', '');
+ } else {
+ this._ripple.removeAttribute('checked');
+ }
+ }
+ },
+
+ /**
+ * Synchronizes the element's `active` and `checked` state.
+ */
+ _buttonStateChanged: function() {
+ Polymer.PaperRippleBehavior._buttonStateChanged.call(this);
+ if (this.disabled) {
+ return;
+ }
+ if (this.isAttached) {
+ this.checked = this.active;
+ }
+ }
+ };
+
+ /** @polymerBehavior Polymer.PaperCheckedElementBehavior */
+ Polymer.PaperCheckedElementBehavior = [
+ Polymer.PaperInkyFocusBehavior,
+ Polymer.IronCheckedElementBehavior,
+ Polymer.PaperCheckedElementBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.d.ts
new file mode 100644
index 00000000000..b674ce86855
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.d.ts
@@ -0,0 +1,27 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-inky-focus-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-behaviors/iron-button-state.d.ts" />
+/// <reference path="paper-ripple-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has
+ * keyboard focus.
+ */
+ interface PaperInkyFocusBehavior extends Polymer.IronButtonState, Polymer.IronControlState, Polymer.PaperRippleBehavior {
+ _createRipple(): any;
+ _focusedChanged(receivedFocusFromKeyboard: any): void;
+ }
+
+ const PaperInkyFocusBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.html
new file mode 100644
index 00000000000..bddefd4eb64
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-inky-focus-behavior.html
@@ -0,0 +1,50 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-button-state.html">
+<link rel="import" href="paper-ripple-behavior.html">
+
+<script>
+ /**
+ * `Polymer.PaperInkyFocusBehavior` implements a ripple when the element has
+ * keyboard focus.
+ *
+ * @polymerBehavior Polymer.PaperInkyFocusBehavior
+ */
+ Polymer.PaperInkyFocusBehaviorImpl = {
+ observers: ['_focusedChanged(receivedFocusFromKeyboard)'],
+
+ _focusedChanged: function(receivedFocusFromKeyboard) {
+ if (receivedFocusFromKeyboard) {
+ this.ensureRipple();
+ }
+ if (this.hasRipple()) {
+ this._ripple.holdDown = receivedFocusFromKeyboard;
+ }
+ },
+
+ _createRipple: function() {
+ var ripple = Polymer.PaperRippleBehavior._createRipple();
+ ripple.id = 'ink';
+ ripple.setAttribute('center', '');
+ ripple.classList.add('circle');
+ return ripple;
+ }
+ };
+
+ /** @polymerBehavior Polymer.PaperInkyFocusBehavior */
+ Polymer.PaperInkyFocusBehavior = [
+ Polymer.IronButtonState,
+ Polymer.IronControlState,
+ Polymer.PaperRippleBehavior,
+ Polymer.PaperInkyFocusBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.d.ts
new file mode 100644
index 00000000000..ede7a9f28e8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.d.ts
@@ -0,0 +1,78 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-ripple-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-behaviors/iron-button-state.d.ts" />
+/// <reference path="../paper-ripple/paper-ripple.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * `Polymer.PaperRippleBehavior` dynamically implements a ripple
+ * when the element has focus via pointer or keyboard.
+ *
+ * NOTE: This behavior is intended to be used in conjunction with and after
+ * `Polymer.IronButtonState` and `Polymer.IronControlState`.
+ */
+ interface PaperRippleBehavior {
+
+ /**
+ * If true, the element will not produce a ripple effect when interacted
+ * with via the pointer.
+ */
+ noink: boolean|null|undefined;
+ _rippleContainer: Element|null|undefined;
+
+ /**
+ * Ensures a `<paper-ripple>` element is available when the element is
+ * focused.
+ */
+ _buttonStateChanged(): void;
+
+ /**
+ * In addition to the functionality provided in `IronButtonState`, ensures
+ * a ripple effect is created when the element is in a `pressed` state.
+ */
+ _downHandler(event: any): void;
+
+ /**
+ * Ensures this element contains a ripple effect. For startup efficiency
+ * the ripple effect is dynamically on demand when needed.
+ *
+ * @param optTriggeringEvent (optional) event that triggered the
+ * ripple.
+ */
+ ensureRipple(optTriggeringEvent?: Event): void;
+
+ /**
+ * Returns the `<paper-ripple>` element used by this element to create
+ * ripple effects. The element's ripple is created on demand, when
+ * necessary, and calling this method will force the
+ * ripple to be created.
+ */
+ getRipple(): any;
+
+ /**
+ * Returns true if this element currently contains a ripple effect.
+ */
+ hasRipple(): boolean;
+
+ /**
+ * Create the element's ripple effect via creating a `<paper-ripple>`.
+ * Override this method to customize the ripple element.
+ *
+ * @returns Returns a `<paper-ripple>` element.
+ */
+ _createRipple(): PaperRippleElement;
+ _noinkChanged(noink: any): void;
+ }
+
+ const PaperRippleBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.html
new file mode 100644
index 00000000000..30ff8a7598b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-behaviors/paper-ripple-behavior.html
@@ -0,0 +1,125 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-button-state.html">
+<link rel="import" href="../paper-ripple/paper-ripple.html">
+
+<script>
+ /**
+ * `Polymer.PaperRippleBehavior` dynamically implements a ripple
+ * when the element has focus via pointer or keyboard.
+ *
+ * NOTE: This behavior is intended to be used in conjunction with and after
+ * `Polymer.IronButtonState` and `Polymer.IronControlState`.
+ *
+ * @polymerBehavior Polymer.PaperRippleBehavior
+ */
+ Polymer.PaperRippleBehavior = {
+ properties: {
+ /**
+ * If true, the element will not produce a ripple effect when interacted
+ * with via the pointer.
+ */
+ noink: {type: Boolean, observer: '_noinkChanged'},
+
+ /**
+ * @type {Element|undefined}
+ */
+ _rippleContainer: {
+ type: Object,
+ }
+ },
+
+ /**
+ * Ensures a `<paper-ripple>` element is available when the element is
+ * focused.
+ */
+ _buttonStateChanged: function() {
+ if (this.focused) {
+ this.ensureRipple();
+ }
+ },
+
+ /**
+ * In addition to the functionality provided in `IronButtonState`, ensures
+ * a ripple effect is created when the element is in a `pressed` state.
+ */
+ _downHandler: function(event) {
+ Polymer.IronButtonStateImpl._downHandler.call(this, event);
+ if (this.pressed) {
+ this.ensureRipple(event);
+ }
+ },
+
+ /**
+ * Ensures this element contains a ripple effect. For startup efficiency
+ * the ripple effect is dynamically on demand when needed.
+ * @param {!Event=} optTriggeringEvent (optional) event that triggered the
+ * ripple.
+ */
+ ensureRipple: function(optTriggeringEvent) {
+ if (!this.hasRipple()) {
+ this._ripple = this._createRipple();
+ this._ripple.noink = this.noink;
+ var rippleContainer = this._rippleContainer || this.root;
+ if (rippleContainer) {
+ Polymer.dom(rippleContainer).appendChild(this._ripple);
+ }
+ if (optTriggeringEvent) {
+ // Check if the event happened inside of the ripple container
+ // Fall back to host instead of the root because distributed text
+ // nodes are not valid event targets
+ var domContainer = Polymer.dom(this._rippleContainer || this);
+ var target = Polymer.dom(optTriggeringEvent).rootTarget;
+ if (domContainer.deepContains(/** @type {Node} */ (target))) {
+ this._ripple.uiDownAction(optTriggeringEvent);
+ }
+ }
+ }
+ },
+
+ /**
+ * Returns the `<paper-ripple>` element used by this element to create
+ * ripple effects. The element's ripple is created on demand, when
+ * necessary, and calling this method will force the
+ * ripple to be created.
+ */
+ getRipple: function() {
+ this.ensureRipple();
+ return this._ripple;
+ },
+
+ /**
+ * Returns true if this element currently contains a ripple effect.
+ * @return {boolean}
+ */
+ hasRipple: function() {
+ return Boolean(this._ripple);
+ },
+
+ /**
+ * Create the element's ripple effect via creating a `<paper-ripple>`.
+ * Override this method to customize the ripple element.
+ * @return {!PaperRippleElement} Returns a `<paper-ripple>` element.
+ */
+ _createRipple: function() {
+ var element = /** @type {!PaperRippleElement} */ (
+ document.createElement('paper-ripple'));
+ return element;
+ },
+
+ _noinkChanged: function(noink) {
+ if (this.hasRipple()) {
+ this._ripple.noink = noink;
+ }
+ }
+ };
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.bower.json
new file mode 100644
index 00000000000..c7750a6eeaf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.bower.json
@@ -0,0 +1,75 @@
+{
+ "name": "paper-button",
+ "version": "2.1.1",
+ "description": "Material design button",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "paper",
+ "button"
+ ],
+ "main": "paper-button.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-button.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-button",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "82673f1f33a999eb0cd6d19bfceedb048312ebe6"
+ },
+ "_source": "https://github.com/PolymerElements/paper-button.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-button"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..48a50e98391
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-button/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.travis.yml
new file mode 100644
index 00000000000..807e8377cde
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/.travis.yml
@@ -0,0 +1,33 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ YhRb8f1f4y3Rjs5wnp4sCzIcEcL07HOBoJcEp6U/KVgIIk/sBxkxMVmZsoUeABrNbKcdE6Gn6OS2K1lFq4VThKppJ0yjvESa1p0FjmQ0Nf1xCYxc46n936xj87khZy3rrTGHxwcOY5vAa5mvNzXI4BYxjmSjmqRsQwsJBsJHWVw=
+ - secure: >-
+ eQjSTRxQKF5vyRa6yK2o+j5xWK480hHCKDh7RJQISEVhyzAaCzPZNmWf2pmaDj+ZoZZrahBcoRwOZAiVdHDaKQ+VLHbEECzV3OVV32/9DHi608BPCBdxVR2MDTtZVt3fGVhPQwCnFhwRTWtVVGx8y8HnTDMv/r4xW1OMSThPsbM=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/README.md
new file mode 100644
index 00000000000..fe6ffe26ee1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/README.md
@@ -0,0 +1,73 @@
+
+[![Build status](https://travis-ci.org/PolymerElements/paper-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-button)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://beta.webcomponents.org/element/PolymerElements/paper-button)
+
+## &lt;paper-button&gt;
+
+Material design: [Buttons](https://www.google.com/design/spec/components/buttons.html)
+
+`paper-button` is a button. When the user touches the button, a ripple effect emanates
+from the point of contact. It may be flat or raised. A raised button is styled with a
+shadow.
+
+Example:
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-button.html">
+ <link rel="import" href="../paper-styles/color.html">
+ <style is="custom-style">
+ #container {
+ display: flex;
+ }
+ paper-button {
+ font-family: 'Roboto', 'Noto', sans-serif;
+ font-weight: normal;
+ font-size: 14px;
+ -webkit-font-smoothing: antialiased;
+ }
+ paper-button.pink {
+ color: var(--paper-pink-a200);
+ --paper-button-ink-color: var(--paper-pink-a200);
+ }
+ paper-button.pink:hover {
+ background-color: var(--paper-pink-100);
+ }
+ paper-button.indigo {
+ background-color: var(--paper-indigo-500);
+ color: white;
+ --paper-button-raised-keyboard-focus: {
+ background-color: var(--paper-pink-a200) !important;
+ color: white !important;
+ };
+ }
+ paper-button.indigo:hover {
+ background-color: var(--paper-indigo-400);
+ }
+ paper-button.green {
+ background-color: var(--paper-green-500);
+ color: white;
+ }
+ paper-button.green[active] {
+ background-color: var(--paper-red-500);
+ }
+ paper-button.disabled {
+ color: white;
+ }
+ </style>
+ <div id="container">
+ <next-code-block></next-code-block>
+ </div>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-button class="pink">link</paper-button>
+<paper-button raised class="indigo">raised</paper-button>
+<paper-button toggles raised class="green">toggles</paper-button>
+<paper-button disabled class="disabled">disabled</paper-button>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/bower.json
new file mode 100644
index 00000000000..5355ae8fed8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/bower.json
@@ -0,0 +1,66 @@
+{
+ "name": "paper-button",
+ "version": "2.1.1",
+ "description": "Material design button",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "paper",
+ "button"
+ ],
+ "main": "paper-button.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-button.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-button",
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "Polymer/web-component-tester#^4.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/demo/index.html
new file mode 100644
index 00000000000..bcd1a5c6765
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/demo/index.html
@@ -0,0 +1,140 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>paper-button demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-icons/iron-icons.html">
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../paper-button.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ .vertical-section-container {
+ max-width: 500px;
+ }
+ paper-button {
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ </style>
+ </custom-style>
+</head>
+<body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>Buttons can be flat, raised, toggleable, or disabled</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button>link</paper-button>
+ <paper-button raised>raised</paper-button>
+ <paper-button toggles raised>toggles</paper-button>
+ <paper-button disabled>disabled</paper-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can have icons</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button><iron-icon icon="check"></iron-icon>link</paper-button>
+ <paper-button raised><iron-icon icon="file-download"></iron-icon>raised</paper-button>
+ <paper-button toggles raised><iron-icon icon="favorite"></iron-icon>toggles</paper-button>
+ <paper-button disabled><iron-icon icon="block"></iron-icon>disabled</paper-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can hide the ripple effect using the <i>noink</i> attribute</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button noink>link</paper-button>
+ <paper-button raised noink>raised</paper-button>
+ <paper-button toggles raised noink>toggles</paper-button>
+ <paper-button disabled noink>disabled</paper-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can be styled using custom properties</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button class="custom pink">link</paper-button>
+ <paper-button raised class="custom indigo">raised</paper-button>
+ <paper-button toggles raised class="custom green">toggles</paper-button>
+ <paper-button disabled class="custom disabled">disabled</paper-button>
+
+ <style is="custom-style">
+ paper-button.custom {
+ --paper-button-ink-color: var(--paper-pink-a200);
+ /* These could also be individually defined for each of the
+ specific css classes, but we'll just do it once as an example */
+ --paper-button-flat-keyboard-focus: {
+ background-color: var(--paper-pink-a200);
+ color: white !important;
+ };
+ --paper-button-raised-keyboard-focus: {
+ background-color: var(--paper-pink-a200) !important;
+ color: white !important;
+ };
+ }
+ paper-button.custom:hover {
+ background-color: var(--paper-indigo-100);
+ }
+ paper-button.pink {
+ color: var(--paper-pink-a200);
+
+ }
+ paper-button.indigo {
+ background-color: var(--paper-indigo-500);
+ color: white;
+ --paper-button-raised-keyboard-focus: {
+ background-color: var(--paper-pink-a200) !important;
+ color: white !important;
+ };
+ }
+ paper-button.green {
+ background-color: var(--paper-green-500);
+ color: white;
+ }
+ paper-button.green[active] {
+ background-color: var(--paper-red-500);
+ }
+ paper-button.disabled {
+ color: white;
+ }
+ </style>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can be used as a link</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <a href="https://www.polymer-project.org/" tabindex="-1">
+ <paper-button raised>Polymer Project</paper-button>
+ </a>
+ <style>
+ a paper-button,
+ a:active paper-button,
+ a:visited paper-button {
+ color: #000;
+ }
+ </style>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/index.html
new file mode 100644
index 00000000000..487bb5c38a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package-lock.json
new file mode 100644
index 00000000000..5f09191e8d0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-button",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package.json
new file mode 100644
index 00000000000..3318965b485
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-button",
+ "private": true,
+ "description": "Material design button",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-button.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.d.ts
new file mode 100644
index 00000000000..a19b01bc26f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.d.ts
@@ -0,0 +1,92 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-button.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../paper-behaviors/paper-button-behavior.d.ts" />
+/// <reference path="../paper-styles/element-styles/paper-material-styles.d.ts" />
+
+/**
+ * Material design: [Buttons](https://www.google.com/design/spec/components/buttons.html)
+ *
+ * `paper-button` is a button. When the user touches the button, a ripple effect emanates
+ * from the point of contact. It may be flat or raised. A raised button is styled with a
+ * shadow.
+ *
+ * Example:
+ *
+ * <paper-button>Flat button</paper-button>
+ * <paper-button raised>Raised button</paper-button>
+ * <paper-button noink>No ripple effect</paper-button>
+ * <paper-button toggles>Toggle-able button</paper-button>
+ *
+ * A button that has `toggles` true will remain `active` after being clicked (and
+ * will have an `active` attribute set). For more information, see the `Polymer.IronButtonState`
+ * behavior.
+ *
+ * You may use custom DOM in the button body to create a variety of buttons. For example, to
+ * create a button with an icon and some text:
+ *
+ * <paper-button>
+ * <iron-icon icon="favorite"></iron-icon>
+ * custom button content
+ * </paper-button>
+ *
+ * To use `paper-button` as a link, wrap it in an anchor tag. Since `paper-button` will already
+ * receive focus, you may want to prevent the anchor tag from receiving focus as well by setting
+ * its tabindex to -1.
+ *
+ * <a href="https://www.polymer-project.org/" tabindex="-1">
+ * <paper-button raised>Polymer Project</paper-button>
+ * </a>
+ *
+ * ### Styling
+ *
+ * Style the button with CSS as you would a normal DOM element.
+ *
+ * paper-button.fancy {
+ * background: green;
+ * color: yellow;
+ * }
+ *
+ * paper-button.fancy:hover {
+ * background: lime;
+ * }
+ *
+ * paper-button[disabled],
+ * paper-button[toggles][active] {
+ * background: red;
+ * }
+ *
+ * By default, the ripple is the same color as the foreground at 25% opacity. You may
+ * customize the color using the `--paper-button-ink-color` custom property.
+ *
+ * The following custom properties and mixins are also available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-button-ink-color` | Background color of the ripple | `Based on the button's color`
+ * `--paper-button` | Mixin applied to the button | `{}`
+ * `--paper-button-disabled` | Mixin applied to the disabled button. Note that you can also use the `paper-button[disabled]` selector | `{}`
+ * `--paper-button-flat-keyboard-focus` | Mixin applied to a flat button after it's been focused using the keyboard | `{}`
+ * `--paper-button-raised-keyboard-focus` | Mixin applied to a raised button after it's been focused using the keyboard | `{}`
+ */
+interface PaperButtonElement extends Polymer.Element, Polymer.PaperButtonBehavior {
+
+ /**
+ * If true, the button should be styled with a shadow.
+ */
+ raised: boolean|null|undefined;
+ _calculateElevation(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-button": PaperButtonElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.html
new file mode 100644
index 00000000000..bce53c7dbd9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-button/paper-button.html
@@ -0,0 +1,205 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-behaviors/paper-button-behavior.html">
+<link rel="import" href="../paper-styles/element-styles/paper-material-styles.html">
+
+<!--
+Material design: [Buttons](https://www.google.com/design/spec/components/buttons.html)
+
+`paper-button` is a button. When the user touches the button, a ripple effect emanates
+from the point of contact. It may be flat or raised. A raised button is styled with a
+shadow.
+
+Example:
+
+ <paper-button>Flat button</paper-button>
+ <paper-button raised>Raised button</paper-button>
+ <paper-button noink>No ripple effect</paper-button>
+ <paper-button toggles>Toggle-able button</paper-button>
+
+A button that has `toggles` true will remain `active` after being clicked (and
+will have an `active` attribute set). For more information, see the `Polymer.IronButtonState`
+behavior.
+
+You may use custom DOM in the button body to create a variety of buttons. For example, to
+create a button with an icon and some text:
+
+ <paper-button>
+ <iron-icon icon="favorite"></iron-icon>
+ custom button content
+ </paper-button>
+
+To use `paper-button` as a link, wrap it in an anchor tag. Since `paper-button` will already
+receive focus, you may want to prevent the anchor tag from receiving focus as well by setting
+its tabindex to -1.
+
+ <a href="https://www.polymer-project.org/" tabindex="-1">
+ <paper-button raised>Polymer Project</paper-button>
+ </a>
+
+### Styling
+
+Style the button with CSS as you would a normal DOM element.
+
+ paper-button.fancy {
+ background: green;
+ color: yellow;
+ }
+
+ paper-button.fancy:hover {
+ background: lime;
+ }
+
+ paper-button[disabled],
+ paper-button[toggles][active] {
+ background: red;
+ }
+
+By default, the ripple is the same color as the foreground at 25% opacity. You may
+customize the color using the `--paper-button-ink-color` custom property.
+
+The following custom properties and mixins are also available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-button-ink-color` | Background color of the ripple | `Based on the button's color`
+`--paper-button` | Mixin applied to the button | `{}`
+`--paper-button-disabled` | Mixin applied to the disabled button. Note that you can also use the `paper-button[disabled]` selector | `{}`
+`--paper-button-flat-keyboard-focus` | Mixin applied to a flat button after it's been focused using the keyboard | `{}`
+`--paper-button-raised-keyboard-focus` | Mixin applied to a raised button after it's been focused using the keyboard | `{}`
+
+@demo demo/index.html
+-->
+
+<dom-module id="paper-button">
+ <template strip-whitespace>
+ <style include="paper-material-styles">
+ /* Need to specify the same specificity as the styles imported from paper-material. */
+ :host {
+ @apply --layout-inline;
+ @apply --layout-center-center;
+ position: relative;
+ box-sizing: border-box;
+ min-width: 5.14em;
+ margin: 0 0.29em;
+ background: transparent;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-tap-highlight-color: transparent;
+ font: inherit;
+ text-transform: uppercase;
+ outline-width: 0;
+ border-radius: 3px;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ z-index: 0;
+ padding: 0.7em 0.57em;
+
+ @apply --paper-font-common-base;
+ @apply --paper-button;
+ }
+
+ :host([elevation="1"]) {
+ @apply --paper-material-elevation-1;
+ }
+
+ :host([elevation="2"]) {
+ @apply --paper-material-elevation-2;
+ }
+
+ :host([elevation="3"]) {
+ @apply --paper-material-elevation-3;
+ }
+
+ :host([elevation="4"]) {
+ @apply --paper-material-elevation-4;
+ }
+
+ :host([elevation="5"]) {
+ @apply --paper-material-elevation-5;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ :host([raised].keyboard-focus) {
+ font-weight: bold;
+ @apply --paper-button-raised-keyboard-focus;
+ }
+
+ :host(:not([raised]).keyboard-focus) {
+ font-weight: bold;
+ @apply --paper-button-flat-keyboard-focus;
+ }
+
+ :host([disabled]) {
+ background: #eaeaea;
+ color: #a8a8a8;
+ cursor: auto;
+ pointer-events: none;
+
+ @apply --paper-button-disabled;
+ }
+
+ :host([animated]) {
+ @apply --shadow-transition;
+ }
+
+ paper-ripple {
+ color: var(--paper-button-ink-color);
+ }
+ </style>
+
+ <slot></slot>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-button',
+
+ behaviors: [Polymer.PaperButtonBehavior],
+
+ properties: {
+ /**
+ * If true, the button should be styled with a shadow.
+ */
+ raised: {
+ type: Boolean,
+ reflectToAttribute: true,
+ value: false,
+ observer: '_calculateElevation'
+ }
+ },
+
+ _calculateElevation: function() {
+ if (!this.raised) {
+ this._setElevation(0);
+ } else {
+ Polymer.PaperButtonBehaviorImpl._calculateElevation.apply(this);
+ }
+ }
+
+ /**
+ Fired when the animation finishes.
+ This is useful if you want to wait until
+ the ripple animation finishes to perform some action.
+
+ @event transitionend
+ Event param: {{node: Object}} detail Contains the animated node.
+ */
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.bower.json
new file mode 100644
index 00000000000..a24c0b50ca6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.bower.json
@@ -0,0 +1,75 @@
+{
+ "name": "paper-checkbox",
+ "version": "2.0.4",
+ "description": "A material design checkbox",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "paper",
+ "checkbox",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-checkbox"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-checkbox",
+ "main": "paper-checkbox.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-ripple": "PolymerElements/paper-ripple#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.0.4",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.4",
+ "commit": "22cc667efc908916146bff8f4466544f82cb4cd3"
+ },
+ "_source": "https://github.com/PolymerElements/paper-checkbox.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-checkbox"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.eslintrc.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.eslintrc.json
new file mode 100644
index 00000000000..cc13518ec5d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.eslintrc.json
@@ -0,0 +1,18 @@
+{
+ "extends": "eslint:recommended",
+ "rules": {
+ "no-console": 0
+ },
+ "env": {
+ "browser": true
+ },
+ "plugins": [
+ "html"
+ ],
+ "globals": {
+ "CustomElements": false,
+ "HTMLImports": false,
+ "Polymer": false,
+ "WeakMap": false
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..3b5f5fd1edc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-checkbox/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.travis.yml
new file mode 100644
index 00000000000..bd1c674801f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ yp6I0VbSey7lRWOKQQkBU7CBvQd0hN0TZiZnbo8fzWWfOjANeDICCa/xyY2+ZM0TU5mxvehTg38mjkpRPkMm4UrsE5og49GBFqaDLk9U+Bp7fP37tDtWfT3l4VgpzSwKAdIEh8EcmUPblZxQxJlH6+HHImnPCWSKy9YvVEGirzY=
+ - secure: >-
+ XjG814z1IZBtPOsZBknOcJaqSJHjF7jWzAw1Cl9sKcmHPKSJW2a0gILdpXx2Au0KGzLzn7Z6/p6u2+rv4tbYWBq21EWgbHmn3iAF4pAZt6DgGqJpfCsNdyuKUYN8ZfLFbK3GC/js6IJDGV+zq5HxtZmwZh+eQ85bbx2xNyRKZis=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/README.md
new file mode 100644
index 00000000000..55606745259
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/README.md
@@ -0,0 +1,63 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-checkbox.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-checkbox)
+
+## &lt;paper-checkbox&gt;
+
+`paper-checkbox` is a [material design checkbox](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-checkbox).
+User can tap the checkbox to check or uncheck it. Usually you use checkboxes
+to allow user to select multiple options from a set. If you have a single
+ON/OFF option, avoid using a single checkbox and use `paper-toggle-button`
+instead.
+
+Example:
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-checkbox.html">
+ <style is="custom-style">
+ paper-checkbox {
+ font-family: 'Roboto', sans-serif;
+ margin: 24px;
+ }
+
+ paper-checkbox:first-child {
+ --primary-color: #ff5722;
+ }
+
+ paper-checkbox.styled {
+ align-self: center;
+ border: 1px solid var(--paper-green-200);
+ padding: 8px 16px;
+ --paper-checkbox-checked-color: var(--paper-green-500);
+ --paper-checkbox-checked-ink-color: var(--paper-green-500);
+ --paper-checkbox-unchecked-color: var(--paper-green-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-green-900);
+ --paper-checkbox-label-color: var(--paper-green-500);
+ --paper-checkbox-label-spacing: 0;
+ --paper-checkbox-margin: 8px 16px 8px 0;
+ --paper-checkbox-vertical-align: top;
+ }
+
+ paper-checkbox .subtitle {
+ display: block;
+ font-size: 0.8em;
+ margin-top: 2px;
+ max-width: 150px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-checkbox checked>Checked</paper-checkbox>
+<paper-checkbox class="styled">
+ Checkbox
+ <span class="subtitle">
+ With a longer label
+ </span>
+</paper-checkbox>
+<paper-checkbox disabled>Disabled</paper-checkbox>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/bower.json
new file mode 100644
index 00000000000..4d46010bbe5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/bower.json
@@ -0,0 +1,66 @@
+{
+ "name": "paper-checkbox",
+ "version": "2.0.4",
+ "description": "A material design checkbox",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "paper",
+ "checkbox",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-checkbox"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-checkbox",
+ "main": "paper-checkbox.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-ripple": "PolymerElements/paper-ripple#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-ripple": "PolymerElements/paper-ripple#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "web-component-tester": "^4.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/demo/index.html
new file mode 100644
index 00000000000..db041787537
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/demo/index.html
@@ -0,0 +1,127 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>paper-checkbox demo</title>
+
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-checkbox.html">
+ </head>
+ <body unresolved>
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ paper-checkbox {
+ display: block;
+ margin-right: 24px;
+ }
+
+ demo-snippet {
+ margin-bottom: 40px;
+ }
+ .vertical-section-container {
+ max-width: 550px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="vertical-section-container centered">
+ <h3>Checkboxes can be checked or unchecked, or disabled entirely</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-checkbox>Checkbox</paper-checkbox>
+ <paper-checkbox checked>Checkbox</paper-checkbox>
+ <paper-checkbox disabled>Disabled</paper-checkbox>
+ </template>
+ </demo-snippet>
+
+ <h3>Checkboxes can hide the ripple effect using the <i>noink</i> attribute</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-checkbox noink>Checkbox</paper-checkbox>
+ </template>
+ </demo-snippet>
+
+ <h3>Checkboxes can be styled using custom properties</h3>
+ <demo-snippet class="centered-demo small-text">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-checkbox.red {
+ --paper-checkbox-size: 2em;
+ --paper-checkbox-checked-color: var(--paper-red-500);
+ --paper-checkbox-checked-ink-color: var(--paper-red-500);
+ --paper-checkbox-unchecked-color: var(--paper-red-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-red-900);
+ --paper-checkbox-label-color: var(--paper-red-700);
+ --paper-checkbox-vertical-align: top;
+ }
+
+ paper-checkbox.green {
+ align-self: center;
+ border: 1px solid var(--paper-green-200);
+ padding: 8px 16px;
+
+ --paper-checkbox-checked-color: var(--paper-green-500);
+ --paper-checkbox-checked-ink-color: var(--paper-green-500);
+ --paper-checkbox-unchecked-color: var(--paper-green-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-green-900);
+ --paper-checkbox-label-color: var(--paper-green-700);
+ --paper-checkbox-label-spacing: 0;
+ --paper-checkbox-margin: 8px 16px 8px 0;
+ --paper-checkbox-vertical-align: top;
+ }
+
+ paper-checkbox.blue {
+ --paper-checkbox-checked-color: var(--paper-blue-500);
+ --paper-checkbox-checked-ink-color: var(--paper-blue-500);
+ --paper-checkbox-unchecked-color: var(--paper-blue-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-blue-900);
+ --paper-checkbox-label-color: var(--paper-blue-700);
+ --paper-checkbox-label-checked-color: var(--paper-blue-900);
+ }
+
+ paper-checkbox .title {
+ display: block;
+ font-size: 1.2em;
+ }
+
+ paper-checkbox .subtitle {
+ display: block;
+ font-size: 0.9em;
+ max-width: 150px;
+ }
+ </style>
+ </custom-style>
+
+ <paper-checkbox class="red">
+ <span class="title">Checkbox</span>
+ <span class="subtitle">With a subtitle</span>
+ </paper-checkbox>
+ <paper-checkbox checked class="green">
+ <span class="title">Checkbox</span>
+ <span class="subtitle">
+ With a longer subtitle that wraps to another line
+ </span>
+ </paper-checkbox>
+ <paper-checkbox class="blue">
+ <span class="title">Checkbox</span>
+ </paper-checkbox>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/index.html
new file mode 100644
index 00000000000..b368797b127
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-checkbox</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+ </head>
+ <body>
+
+ <iron-component-page></iron-component-page>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package-lock.json
new file mode 100644
index 00000000000..149d6008158
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-checkbox",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package.json
new file mode 100644
index 00000000000..440955554be
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-checkbox",
+ "private": true,
+ "description": "A material design checkbox",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-checkbox"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.d.ts
new file mode 100644
index 00000000000..e98aa49c442
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.d.ts
@@ -0,0 +1,74 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-checkbox.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../paper-styles/default-theme.d.ts" />
+/// <reference path="../paper-behaviors/paper-checked-element-behavior.d.ts" />
+
+/**
+ * Material design: [Checkbox](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-checkbox)
+ *
+ * `paper-checkbox` is a button that can be either checked or unchecked. User
+ * can tap the checkbox to check or uncheck it. Usually you use checkboxes
+ * to allow user to select multiple options from a set. If you have a single
+ * ON/OFF option, avoid using a single checkbox and use `paper-toggle-button`
+ * instead.
+ *
+ * Example:
+ *
+ * <paper-checkbox>label</paper-checkbox>
+ *
+ * <paper-checkbox checked> label</paper-checkbox>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-checkbox-unchecked-background-color` | Checkbox background color when the input is not checked | `transparent`
+ * `--paper-checkbox-unchecked-color` | Checkbox border color when the input is not checked | `--primary-text-color`
+ * `--paper-checkbox-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color`
+ * `--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--primary-color`
+ * `--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color`
+ * `--paper-checkbox-checkmark-color` | Checkmark color | `white`
+ * `--paper-checkbox-label-color` | Label color | `--primary-text-color`
+ * `--paper-checkbox-label-checked-color` | Label color when the input is checked | `--paper-checkbox-label-color`
+ * `--paper-checkbox-label-spacing` | Spacing between the label and the checkbox | `8px`
+ * `--paper-checkbox-label` | Mixin applied to the label | `{}`
+ * `--paper-checkbox-label-checked` | Mixin applied to the label when the input is checked | `{}`
+ * `--paper-checkbox-error-color` | Checkbox color when invalid | `--error-color`
+ * `--paper-checkbox-size` | Size of the checkbox | `18px`
+ * `--paper-checkbox-ink-size` | Size of the ripple | `48px`
+ * `--paper-checkbox-margin` | Margin around the checkbox container | `initial`
+ * `--paper-checkbox-vertical-align` | Vertical alignment of the checkbox container | `middle`
+ *
+ * This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+ * In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+ */
+interface PaperCheckboxElement extends Polymer.Element, Polymer.PaperCheckedElementBehavior {
+
+ /**
+ * Fired when the checked state changes.
+ */
+ ariaActiveAttribute: string|null|undefined;
+ attached(): void;
+
+ /**
+ * create ripple inside the checkboxContainer
+ */
+ _createRipple(): any;
+ _computeCheckboxClass(checked: any, invalid: any): any;
+ _computeCheckmarkClass(checked: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-checkbox": PaperCheckboxElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.html
new file mode 100644
index 00000000000..e665ec21bb3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-checkbox/paper-checkbox.html
@@ -0,0 +1,324 @@
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-behaviors/paper-checked-element-behavior.html">
+
+<!--
+Material design: [Checkbox](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-checkbox)
+
+`paper-checkbox` is a button that can be either checked or unchecked. User
+can tap the checkbox to check or uncheck it. Usually you use checkboxes
+to allow user to select multiple options from a set. If you have a single
+ON/OFF option, avoid using a single checkbox and use `paper-toggle-button`
+instead.
+
+Example:
+
+ <paper-checkbox>label</paper-checkbox>
+
+ <paper-checkbox checked> label</paper-checkbox>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-checkbox-unchecked-background-color` | Checkbox background color when the input is not checked | `transparent`
+`--paper-checkbox-unchecked-color` | Checkbox border color when the input is not checked | `--primary-text-color`
+`--paper-checkbox-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color`
+`--paper-checkbox-checked-color` | Checkbox color when the input is checked | `--primary-color`
+`--paper-checkbox-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color`
+`--paper-checkbox-checkmark-color` | Checkmark color | `white`
+`--paper-checkbox-label-color` | Label color | `--primary-text-color`
+`--paper-checkbox-label-checked-color` | Label color when the input is checked | `--paper-checkbox-label-color`
+`--paper-checkbox-label-spacing` | Spacing between the label and the checkbox | `8px`
+`--paper-checkbox-label` | Mixin applied to the label | `{}`
+`--paper-checkbox-label-checked` | Mixin applied to the label when the input is checked | `{}`
+`--paper-checkbox-error-color` | Checkbox color when invalid | `--error-color`
+`--paper-checkbox-size` | Size of the checkbox | `18px`
+`--paper-checkbox-ink-size` | Size of the ripple | `48px`
+`--paper-checkbox-margin` | Margin around the checkbox container | `initial`
+`--paper-checkbox-vertical-align` | Vertical alignment of the checkbox container | `middle`
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+@demo demo/index.html
+-->
+
+<dom-module id="paper-checkbox">
+ <template strip-whitespace>
+ <style>
+ :host {
+ display: inline-block;
+ white-space: nowrap;
+ cursor: pointer;
+ --calculated-paper-checkbox-size: var(--paper-checkbox-size, 18px);
+ /* -1px is a sentinel for the default and is replaced in `attached`. */
+ --calculated-paper-checkbox-ink-size: var(--paper-checkbox-ink-size, -1px);
+ @apply --paper-font-common-base;
+ line-height: 0;
+ -webkit-tap-highlight-color: transparent;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ :host(:focus) {
+ outline: none;
+ }
+
+ .hidden {
+ display: none;
+ }
+
+ #checkboxContainer {
+ display: inline-block;
+ position: relative;
+ width: var(--calculated-paper-checkbox-size);
+ height: var(--calculated-paper-checkbox-size);
+ min-width: var(--calculated-paper-checkbox-size);
+ margin: var(--paper-checkbox-margin, initial);
+ vertical-align: var(--paper-checkbox-vertical-align, middle);
+ background-color: var(--paper-checkbox-unchecked-background-color, transparent);
+ }
+
+ #ink {
+ position: absolute;
+
+ /* Center the ripple in the checkbox by negative offsetting it by
+ * (inkWidth - rippleWidth) / 2 */
+ top: calc(0px - (var(--calculated-paper-checkbox-ink-size) - var(--calculated-paper-checkbox-size)) / 2);
+ left: calc(0px - (var(--calculated-paper-checkbox-ink-size) - var(--calculated-paper-checkbox-size)) / 2);
+ width: var(--calculated-paper-checkbox-ink-size);
+ height: var(--calculated-paper-checkbox-ink-size);
+ color: var(--paper-checkbox-unchecked-ink-color, var(--primary-text-color));
+ opacity: 0.6;
+ pointer-events: none;
+ }
+
+ #ink:dir(rtl) {
+ right: calc(0px - (var(--calculated-paper-checkbox-ink-size) - var(--calculated-paper-checkbox-size)) / 2);
+ left: auto;
+ }
+
+ #ink[checked] {
+ color: var(--paper-checkbox-checked-ink-color, var(--primary-color));
+ }
+
+ #checkbox {
+ position: relative;
+ box-sizing: border-box;
+ height: 100%;
+ border: solid 2px;
+ border-color: var(--paper-checkbox-unchecked-color, var(--primary-text-color));
+ border-radius: 2px;
+ pointer-events: none;
+ -webkit-transition: background-color 140ms, border-color 140ms;
+ transition: background-color 140ms, border-color 140ms;
+ }
+
+ /* checkbox checked animations */
+ #checkbox.checked #checkmark {
+ -webkit-animation: checkmark-expand 140ms ease-out forwards;
+ animation: checkmark-expand 140ms ease-out forwards;
+ }
+
+ @-webkit-keyframes checkmark-expand {
+ 0% {
+ -webkit-transform: scale(0, 0) rotate(45deg);
+ }
+ 100% {
+ -webkit-transform: scale(1, 1) rotate(45deg);
+ }
+ }
+
+ @keyframes checkmark-expand {
+ 0% {
+ transform: scale(0, 0) rotate(45deg);
+ }
+ 100% {
+ transform: scale(1, 1) rotate(45deg);
+ }
+ }
+
+ #checkbox.checked {
+ background-color: var(--paper-checkbox-checked-color, var(--primary-color));
+ border-color: var(--paper-checkbox-checked-color, var(--primary-color));
+ }
+
+ #checkmark {
+ position: absolute;
+ width: 36%;
+ height: 70%;
+ border-style: solid;
+ border-top: none;
+ border-left: none;
+ border-right-width: calc(2/15 * var(--calculated-paper-checkbox-size));
+ border-bottom-width: calc(2/15 * var(--calculated-paper-checkbox-size));
+ border-color: var(--paper-checkbox-checkmark-color, white);
+ -webkit-transform-origin: 97% 86%;
+ transform-origin: 97% 86%;
+ box-sizing: content-box; /* protect against page-level box-sizing */
+ }
+
+ #checkmark:dir(rtl) {
+ -webkit-transform-origin: 50% 14%;
+ transform-origin: 50% 14%;
+ }
+
+ /* label */
+ #checkboxLabel {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ padding-left: var(--paper-checkbox-label-spacing, 8px);
+ white-space: normal;
+ line-height: normal;
+ color: var(--paper-checkbox-label-color, var(--primary-text-color));
+ @apply --paper-checkbox-label;
+ }
+
+ :host([checked]) #checkboxLabel {
+ color: var(--paper-checkbox-label-checked-color, var(--paper-checkbox-label-color, var(--primary-text-color)));
+ @apply --paper-checkbox-label-checked;
+ }
+
+ #checkboxLabel:dir(rtl) {
+ padding-right: var(--paper-checkbox-label-spacing, 8px);
+ padding-left: 0;
+ }
+
+ #checkboxLabel[hidden] {
+ display: none;
+ }
+
+ /* disabled state */
+
+ :host([disabled]) #checkbox {
+ opacity: 0.5;
+ border-color: var(--paper-checkbox-unchecked-color, var(--primary-text-color));
+ }
+
+ :host([disabled][checked]) #checkbox {
+ background-color: var(--paper-checkbox-unchecked-color, var(--primary-text-color));
+ opacity: 0.5;
+ }
+
+ :host([disabled]) #checkboxLabel {
+ opacity: 0.65;
+ }
+
+ /* invalid state */
+ #checkbox.invalid:not(.checked) {
+ border-color: var(--paper-checkbox-error-color, var(--error-color));
+ }
+ </style>
+
+ <div id="checkboxContainer">
+ <div id="checkbox" class$="[[_computeCheckboxClass(checked, invalid)]]">
+ <div id="checkmark" class$="[[_computeCheckmarkClass(checked)]]"></div>
+ </div>
+ </div>
+
+ <div id="checkboxLabel"><slot></slot></div>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-checkbox',
+
+ behaviors: [Polymer.PaperCheckedElementBehavior],
+
+ /** @private */
+ hostAttributes: {role: 'checkbox', 'aria-checked': false, tabindex: 0},
+
+ properties: {
+ /**
+ * Fired when the checked state changes due to user interaction.
+ *
+ * @event change
+ */
+
+ /**
+ * Fired when the checked state changes.
+ *
+ * @event iron-change
+ */
+ ariaActiveAttribute: {type: String, value: 'aria-checked'}
+ },
+
+ attached: function() {
+ // Wait until styles have resolved to check for the default sentinel.
+ // See polymer#4009 for more details.
+ Polymer.RenderStatus.afterNextRender(this, function() {
+ var inkSize =
+ this.getComputedStyleValue('--calculated-paper-checkbox-ink-size')
+ .trim();
+ // If unset, compute and set the default `--paper-checkbox-ink-size`.
+ if (inkSize === '-1px') {
+ var checkboxSizeText =
+ this.getComputedStyleValue('--calculated-paper-checkbox-size')
+ .trim();
+
+ var units = 'px';
+ var unitsMatches = checkboxSizeText.match(/[A-Za-z]+$/);
+ if (unitsMatches !== null) {
+ units = unitsMatches[0];
+ }
+
+ var checkboxSize = parseFloat(checkboxSizeText);
+ var defaultInkSize = (8 / 3) * checkboxSize;
+
+ if (units === 'px') {
+ defaultInkSize = Math.floor(defaultInkSize);
+
+ // The checkbox and ripple need to have the same parity so that their
+ // centers align.
+ if (defaultInkSize % 2 !== checkboxSize % 2) {
+ defaultInkSize++;
+ }
+ }
+
+ this.updateStyles({
+ '--paper-checkbox-ink-size': defaultInkSize + units,
+ });
+ }
+ });
+ },
+
+ _computeCheckboxClass: function(checked, invalid) {
+ var className = '';
+ if (checked) {
+ className += 'checked ';
+ }
+ if (invalid) {
+ className += 'invalid';
+ }
+ return className;
+ },
+
+ _computeCheckmarkClass: function(checked) {
+ return checked ? '' : 'hidden';
+ },
+
+ // create ripple inside the checkboxContainer
+ _createRipple: function() {
+ this._rippleContainer = this.$.checkboxContainer;
+ return Polymer.PaperInkyFocusBehaviorImpl._createRipple.call(this);
+ }
+
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.bower.json
new file mode 100644
index 00000000000..5a12b01e078
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.bower.json
@@ -0,0 +1,77 @@
+{
+ "name": "paper-dialog-behavior",
+ "version": "2.2.2",
+ "description": "Implements a behavior used for material design dialogs",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "dialog",
+ "overlay",
+ "behavior"
+ ],
+ "main": "paper-dialog-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-dialog-behavior"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-dialog-behavior",
+ "ignore": [],
+ "dependencies": {
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#1 - 2",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "paper-item": "PolymerElements/paper-item#1 - 2",
+ "paper-listbox": "PolymerElements/paper-listbox#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-listbox": "PolymerElements/paper-listbox#^1.1.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.2.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.2",
+ "commit": "d6d5b68bdcad2896356bf8fa9022d3e985f363e4"
+ },
+ "_source": "https://github.com/PolymerElements/paper-dialog-behavior.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/paper-dialog-behavior"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..f544977ff31
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-dialog-behavior/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.travis.yml
new file mode 100644
index 00000000000..f590d57c018
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ TJSGIyeS77tnbqO9zSa5jAThGUOwhfDTdMBXIVkjDwPqtB2u8y6QB6rerGvNpDLdWTZh6dNUByc4vHJLGKmTArbWc/XH90H7msZs3OxMlXjgILX4//QSxM4uwBwfTh44PVb/wDJxgX950qXyF646Lo9A8UwKk2JL9LBeuiO+tQs=
+ - secure: >-
+ QXJDFGdZ+94ktzeT8u1TjkgCSbku5UT+YIyOOyw4yrphg/0HSnlZ8bu5i3z9iPJu3mzxNdIXCAW7dLKfYgKK6S21o/3QWlMDuAt11wnSZLW/GWrLDTQNotFN+cLFghGuZkM3bsMp+CLjvvjZZwyK3B340g1gP66DbUQuoUYaRao=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/README.md
new file mode 100644
index 00000000000..c12ec9b3cb3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/README.md
@@ -0,0 +1,44 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-dialog-behavior.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-dialog-behavior)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/paper-dialog-behavior)
+
+## Polymer.PaperDialogBehavior
+
+Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to implement a Material Design
+dialog.
+
+For example, if `<paper-dialog-impl>` implements this behavior:
+
+```html
+<paper-dialog-impl>
+ <h2>Header</h2>
+ <div>Dialog body</div>
+ <div class="paper-dialog-buttons">
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm>Accept</paper-button>
+ </div>
+</paper-dialog-impl>
+```
+
+`paper-dialog-shared-styles.html` provide styles for a header, content area, and an action area for buttons.
+Use the `<h2>` tag for the header and the `paper-dialog-buttons` or `buttons` class for the action area. You can use the
+`paper-dialog-scrollable` element (in its own repository) if you need a scrolling content area.
+
+Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive controls to close the
+dialog. If the user dismisses the dialog with `dialog-confirm`, the `closingReason` will update
+to include `confirmed: true`.
+
+### Changes in 2.0
+- `paper-dialog-shared-styles` styles direct `h2` and `.buttons` children of the dialog because of how [`::slotted` works](https://developers.google.com/web/fundamentals/primers/shadowdom/?hl=en#stylinglightdom)
+(compound selector will select only top level nodes)
+- Removed `paper-dialog-common.css` as it's a duplicate of `paper-dialog-shared-styles.html`.
+Import the shared styles via `<style include="paper-dialog-shared-styles">` ([see example](demo/simple-dialog.html))
+
+### Accessibility
+
+This element has `role="dialog"` by default. Depending on the context, it may be more appropriate
+to override this attribute with `role="alertdialog"`.
+
+If `modal` is set, the element will prevent the focus from exiting the element.
+It will also ensure that focus remains in the dialog.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/bower.json
new file mode 100644
index 00000000000..2ee9ec372f0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/bower.json
@@ -0,0 +1,68 @@
+{
+ "name": "paper-dialog-behavior",
+ "version": "2.2.2",
+ "description": "Implements a behavior used for material design dialogs",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "dialog",
+ "overlay",
+ "behavior"
+ ],
+ "main": "paper-dialog-behavior.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-dialog-behavior"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-dialog-behavior",
+ "ignore": [],
+ "dependencies": {
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#1 - 2",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "paper-item": "PolymerElements/paper-item#1 - 2",
+ "paper-listbox": "PolymerElements/paper-listbox#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-listbox": "PolymerElements/paper-listbox#^1.1.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/index.html
new file mode 100644
index 00000000000..ae72f751892
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/index.html
@@ -0,0 +1,107 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>paper-dialog-behavior demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="simple-dialog.html">
+
+ <link rel="import" href="../../paper-button/paper-button.html">
+ <link rel="import" href="../../paper-dropdown-menu/paper-dropdown-menu-light.html">
+ <link rel="import" href="../../paper-item/paper-item.html">
+ <link rel="import" href="../../paper-listbox/paper-listbox.html">
+ <link rel="import" href="../../paper-dialog-scrollable/paper-dialog-scrollable.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles"></style></custom-style>
+</head>
+<body unresolved class="centered">
+
+ <h3>An element with <code>PaperDialogBehavior</code> can be opened, closed, toggled. Use <code>h2</code> for the title</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button raised onclick="dialog.toggle()">dialog</paper-button>
+ <simple-dialog id="dialog">
+ <h2>Dialog Title</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </simple-dialog>
+ </template>
+ </demo-snippet>
+
+ <h3>An element with <code>PaperDialogBehavior</code> can be modal. Use the attributes <code>dialog-dismiss</code> and <code>dialog-confirm</code> on the children to close it.</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button raised onclick="modalAlert.toggle()">modal alert</paper-button>
+ <simple-dialog id="modalAlert" modal role="alertdialog">
+ <h2>Alert</h2>
+ <paper-dropdown-menu-light label="Draft to discard">
+ <!--
+ support hybrid mode:
+ paper-dropdown-menu-light 1.x distributes via <content select=".dropdown-content">
+ paper-dropdown-menu-light 2.x distributes via <slot name="dropdown-content">
+ -->
+ <paper-listbox class="dropdown-content" slot="dropdown-content">
+ <paper-item>Draft 1</paper-item>
+ <paper-item>Draft 2</paper-item>
+ <paper-item>Draft 3</paper-item>
+ <paper-item>Draft 4</paper-item>
+ </paper-listbox>
+ </paper-dropdown-menu-light>
+ <div class="buttons">
+ <paper-button onclick="modalDetails.toggle()">More details</paper-button>
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm autofocus>Discard</paper-button>
+ </div>
+ </simple-dialog>
+ <simple-dialog id="modalDetails" modal>
+ <h2>Details</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <div class="buttons">
+ <paper-button dialog-confirm autofocus>OK</paper-button>
+ </div>
+ </simple-dialog>
+ </template>
+ </demo-snippet>
+
+ <h3>Use <code>paper-dialog-scrollable</code> for scrolling content</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button raised onclick="scrolling.toggle()">scrolling</paper-button>
+ <simple-dialog id="scrolling">
+ <h2>Scrolling</h2>
+ <paper-dialog-scrollable>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </paper-dialog-scrollable>
+ <div class="buttons">
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm>OK</paper-button>
+ </div>
+ </simple-dialog>
+ </template>
+ </demo-snippet>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/simple-dialog.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/simple-dialog.html
new file mode 100644
index 00000000000..c9cf072805c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/demo/simple-dialog.html
@@ -0,0 +1,28 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../paper-dialog-behavior.html">
+<link rel="import" href="../paper-dialog-shared-styles.html">
+
+<dom-module id="simple-dialog">
+ <template>
+ <style include="paper-dialog-shared-styles"></style>
+ <slot></slot>
+ </template>
+
+ <script>
+ (function() {
+ 'use strict';
+
+ Polymer({is: 'simple-dialog', behaviors: [Polymer.PaperDialogBehavior]});
+ })();
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/hero.svg
new file mode 100755
index 00000000000..d47381685f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/hero.svg
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <g>
+ <polygon points="76.7,98 79.2,98 74,91.1 74,94.4 "/>
+ <polygon points="74,81.4 74,84.7 84.1,98 86.6,98 "/>
+ <polygon points="74,71.7 74,75 91.5,98 94,98 "/>
+ <polygon points="74,62 74,65.3 98.9,98 101.4,98 "/>
+ <polygon points="94.3,79 92,79 92,76 74,52.3 74,55.6 106.2,98 108.7,98 "/>
+ <polygon points="92,69.6 92,66.3 74,42.6 74,45.9 "/>
+ <polygon points="101.7,79 99.2,79 113.6,98 116.1,98 "/>
+ <polygon points="92,59.9 92,56.6 74,32.9 74,36.2 "/>
+ <polygon points="109.1,79 106.5,79 121,98 123.5,98 "/>
+ <polygon points="92,50.2 92,47 92.1,47 77.7,28 75.2,28 "/>
+ <polygon points="116.4,79 113.9,79 128.4,98 130.9,98 "/>
+ <polygon points="97,47 99.5,47 85,28 82.5,28 "/>
+ <polygon points="123.8,79 121.3,79 135.7,98 138.2,98 "/>
+ <polygon points="104.4,47 106.9,47 92.4,28 89.9,28 "/>
+ <polygon points="131.2,79 128.7,79 143.1,98 145.6,98 "/>
+ <polygon points="132,70.4 132,73.7 150,97.4 150,94.1 "/>
+ <polygon points="111.7,47 114.2,47 99.8,28 97.3,28 "/>
+ <polygon points="132,60.7 132,64 150,87.7 150,84.3 "/>
+ <polygon points="119.1,47 121.6,47 107.2,28 104.7,28 "/>
+ <polygon points="132,51 132,54.3 150,77.9 150,74.6 "/>
+ <polygon points="114.6,28 112,28 126.5,47 129,47 "/>
+ <polygon points="121.9,28 119.4,28 150,68.2 150,64.9 "/>
+ <polygon points="129.3,28 126.8,28 150,58.5 150,55.2 "/>
+ <polygon points="136.7,28 134.2,28 150,48.8 150,45.5 "/>
+ <polygon points="144.1,28 141.5,28 150,39.1 150,35.8 "/>
+ <polygon points="150,29.4 150,28 148.9,28 "/>
+ </g>
+ <path d="M133,80H91V46h42V80z M93,78h38V48H93V78z"/>
+ <path d="M151,99H73V27h78V99z M75,97h74V29H75V97z"/>
+ <circle cx="74" cy="28" r="4"/>
+ <circle cx="150" cy="28" r="4"/>
+ <circle cx="150" cy="98" r="4"/>
+ <circle cx="74" cy="98" r="4"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/index.html
new file mode 100644
index 00000000000..af98b85acdc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-dialog-behavior</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package-lock.json
new file mode 100644
index 00000000000..a63ac52c7e2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-dialog-behavior",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package.json
new file mode 100644
index 00000000000..cd1c8e0289a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-dialog-behavior",
+ "private": true,
+ "description": "Implements a behavior used for material design dialogs",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-dialog-behavior"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.d.ts
new file mode 100644
index 00000000000..4377e52f3be
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.d.ts
@@ -0,0 +1,70 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-dialog-behavior.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-overlay-behavior/iron-overlay-behavior.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to
+ * implement a Material Design dialog.
+ *
+ * For example, if `<paper-dialog-impl>` implements this behavior:
+ *
+ * <paper-dialog-impl>
+ * <h2>Header</h2>
+ * <div>Dialog body</div>
+ * <div class="buttons">
+ * <paper-button dialog-dismiss>Cancel</paper-button>
+ * <paper-button dialog-confirm>Accept</paper-button>
+ * </div>
+ * </paper-dialog-impl>
+ *
+ * `paper-dialog-shared-styles.html` provide styles for a header, content area, and
+ * an action area for buttons. Use the `<h2>` tag for the header and the `buttons`
+ * class for the action area. You can use the `paper-dialog-scrollable` element (in
+ * its own repository) if you need a scrolling content area.
+ *
+ * Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive controls
+ * to close the dialog. If the user dismisses the dialog with `dialog-confirm`, the
+ * `closingReason` will update to include `confirmed: true`.
+ *
+ * ### Accessibility
+ *
+ * This element has `role="dialog"` by default. Depending on the context, it may be
+ * more appropriate to override this attribute with `role="alertdialog"`.
+ *
+ * If `modal` is set, the element will prevent the focus from exiting the element.
+ * It will also ensure that focus remains in the dialog.
+ *
+ *
+ */
+ interface PaperDialogBehavior extends Polymer.IronOverlayBehavior {
+
+ /**
+ * If `modal` is true, this implies `no-cancel-on-outside-click`,
+ * `no-cancel-on-esc-key` and `with-backdrop`.
+ */
+ modal: boolean|null|undefined;
+ hostAttributes: object|null;
+ ready(): void;
+ _modalChanged(modal: any, readied: any): void;
+ _updateClosingReasonConfirmed(confirmed: any): void;
+
+ /**
+ * Will dismiss the dialog if user clicked on an element with dialog-dismiss
+ * or dialog-confirm attribute.
+ */
+ _onDialogClick(event: any): void;
+ }
+
+ const PaperDialogBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.html
new file mode 100644
index 00000000000..5a65d91d634
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-behavior.html
@@ -0,0 +1,143 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-overlay-behavior/iron-overlay-behavior.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ /**
+ Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to
+ implement a Material Design dialog.
+
+ For example, if `<paper-dialog-impl>` implements this behavior:
+
+ <paper-dialog-impl>
+ <h2>Header</h2>
+ <div>Dialog body</div>
+ <div class="buttons">
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm>Accept</paper-button>
+ </div>
+ </paper-dialog-impl>
+
+ `paper-dialog-shared-styles.html` provide styles for a header, content area, and
+ an action area for buttons. Use the `<h2>` tag for the header and the `buttons`
+ class for the action area. You can use the `paper-dialog-scrollable` element (in
+ its own repository) if you need a scrolling content area.
+
+ Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive controls
+ to close the dialog. If the user dismisses the dialog with `dialog-confirm`, the
+ `closingReason` will update to include `confirmed: true`.
+
+ ### Accessibility
+
+ This element has `role="dialog"` by default. Depending on the context, it may be
+ more appropriate to override this attribute with `role="alertdialog"`.
+
+ If `modal` is set, the element will prevent the focus from exiting the element.
+ It will also ensure that focus remains in the dialog.
+
+ @hero hero.svg
+ @demo demo/index.html
+ @polymerBehavior Polymer.PaperDialogBehavior
+ */
+ Polymer.PaperDialogBehaviorImpl = {
+
+ hostAttributes: {'role': 'dialog', 'tabindex': '-1'},
+
+ properties: {
+
+ /**
+ * If `modal` is true, this implies `no-cancel-on-outside-click`,
+ * `no-cancel-on-esc-key` and `with-backdrop`.
+ */
+ modal: {type: Boolean, value: false},
+
+ __readied: {type: Boolean, value: false}
+
+ },
+
+ observers: ['_modalChanged(modal, __readied)'],
+
+ listeners: {'tap': '_onDialogClick'},
+
+ /**
+ * @return {void}
+ */
+ ready: function() {
+ // Only now these properties can be read.
+ this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;
+ this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;
+ this.__prevWithBackdrop = this.withBackdrop;
+ this.__readied = true;
+ },
+
+ _modalChanged: function(modal, readied) {
+ // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop.
+ // We need to wait for the element to be ready before we can read the
+ // properties values.
+ if (!readied) {
+ return;
+ }
+
+ if (modal) {
+ this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick;
+ this.__prevNoCancelOnEscKey = this.noCancelOnEscKey;
+ this.__prevWithBackdrop = this.withBackdrop;
+ this.noCancelOnOutsideClick = true;
+ this.noCancelOnEscKey = true;
+ this.withBackdrop = true;
+ } else {
+ // If the value was changed to false, let it false.
+ this.noCancelOnOutsideClick =
+ this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick;
+ this.noCancelOnEscKey =
+ this.noCancelOnEscKey && this.__prevNoCancelOnEscKey;
+ this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop;
+ }
+ },
+
+ _updateClosingReasonConfirmed: function(confirmed) {
+ this.closingReason = this.closingReason || {};
+ this.closingReason.confirmed = confirmed;
+ },
+
+ /**
+ * Will dismiss the dialog if user clicked on an element with dialog-dismiss
+ * or dialog-confirm attribute.
+ */
+ _onDialogClick: function(event) {
+ // Search for the element with dialog-confirm or dialog-dismiss,
+ // from the root target until this (excluded).
+ var path = Polymer.dom(event).path;
+ for (var i = 0, l = path.indexOf(this); i < l; i++) {
+ var target = path[i];
+ if (target.hasAttribute &&
+ (target.hasAttribute('dialog-dismiss') ||
+ target.hasAttribute('dialog-confirm'))) {
+ this._updateClosingReasonConfirmed(
+ target.hasAttribute('dialog-confirm'));
+ this.close();
+ event.stopPropagation();
+ break;
+ }
+ }
+ }
+
+ };
+
+ /** @polymerBehavior */
+ Polymer.PaperDialogBehavior =
+ [Polymer.IronOverlayBehavior, Polymer.PaperDialogBehaviorImpl];
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.d.ts
new file mode 100644
index 00000000000..916661e6b31
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.d.ts
@@ -0,0 +1,16 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-dialog-shared-styles.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../paper-styles/default-theme.d.ts" />
+/// <reference path="../paper-styles/typography.d.ts" />
+/// <reference path="../paper-styles/shadow.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.html
new file mode 100644
index 00000000000..da5f19d0584
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog-behavior/paper-dialog-shared-styles.html
@@ -0,0 +1,100 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-styles/typography.html">
+<link rel="import" href="../paper-styles/shadow.html">
+
+<!--
+### Styling
+
+The following custom properties and mixins are available for styling.
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-dialog-background-color` | Dialog background color | `--primary-background-color`
+`--paper-dialog-color` | Dialog foreground color | `--primary-text-color`
+`--paper-dialog` | Mixin applied to the dialog | `{}`
+`--paper-dialog-title` | Mixin applied to the title (`<h2>`) element | `{}`
+`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color`
+-->
+
+<dom-module id="paper-dialog-shared-styles">
+ <template>
+ <style>
+ :host {
+ display: block;
+ margin: 24px 40px;
+
+ background: var(--paper-dialog-background-color, var(--primary-background-color));
+ color: var(--paper-dialog-color, var(--primary-text-color));
+
+ @apply --paper-font-body1;
+ @apply --shadow-elevation-16dp;
+ @apply --paper-dialog;
+ }
+
+ :host > ::slotted(*) {
+ margin-top: 20px;
+ padding: 0 24px;
+ }
+
+ :host > ::slotted(.no-padding) {
+ padding: 0;
+ }
+
+
+ :host > ::slotted(*:first-child) {
+ margin-top: 24px;
+ }
+
+ :host > ::slotted(*:last-child) {
+ margin-bottom: 24px;
+ }
+
+ /* In 1.x, this selector was `:host > ::content h2`. In 2.x <slot> allows
+ to select direct children only, which increases the weight of this
+ selector, so we have to re-define first-child/last-child margins below. */
+ :host > ::slotted(h2) {
+ position: relative;
+ margin: 0;
+
+ @apply --paper-font-title;
+ @apply --paper-dialog-title;
+ }
+
+ /* Apply mixin again, in case it sets margin-top. */
+ :host > ::slotted(h2:first-child) {
+ margin-top: 24px;
+ @apply --paper-dialog-title;
+ }
+
+ /* Apply mixin again, in case it sets margin-bottom. */
+ :host > ::slotted(h2:last-child) {
+ margin-bottom: 24px;
+ @apply --paper-dialog-title;
+ }
+
+ :host > ::slotted(.paper-dialog-buttons),
+ :host > ::slotted(.buttons) {
+ position: relative;
+ padding: 8px 8px 8px 24px;
+ margin: 0;
+
+ color: var(--paper-dialog-button-color, var(--primary-color));
+
+ @apply --layout-horizontal;
+ @apply --layout-end-justified;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.bower.json
new file mode 100644
index 00000000000..57975bdc113
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.bower.json
@@ -0,0 +1,78 @@
+{
+ "name": "paper-dialog",
+ "description": "A Material Design dialog",
+ "version": "2.1.1",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "dialog",
+ "overlay"
+ ],
+ "main": "paper-dialog.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-dialog"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-dialog",
+ "ignore": [],
+ "dependencies": {
+ "neon-animation": "PolymerElements/neon-animation#1 - 2",
+ "paper-dialog-behavior": "PolymerElements/paper-dialog-behavior#1 - 2",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#1 - 2",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#1 - 2",
+ "paper-item": "PolymerElements/paper-item#1 - 2",
+ "paper-listbox": "PolymerElements/paper-listbox#1 - 2",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "neon-animation": "PolymerElements/neon-animation#^1.0.0",
+ "paper-dialog-behavior": "PolymerElements/paper-dialog-behavior#^1.0.0",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.7.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-listbox": "PolymerElements/paper-listbox#^1.0.0",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "c6089263a75db91d2e33b5478030487d35f2ec04"
+ },
+ "_source": "https://github.com/PolymerElements/paper-dialog.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-dialog"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..823a0209b55
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-dialog/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.travis.yml
new file mode 100644
index 00000000000..5d978c755dc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ QgTx1GfP8J91Uzv03iETT60WI0ZhgvbT5tFkDp53oeQrNvXwZMCDN9BE+LsvE+3WJdhwV//gD3B72y+nSTa89UGSHwXaLiXPxL1OW7B/36X0ri1yPVVW9TJNramsVmjkFbjqbD6txUPE/j2STYIxGueng3R/bzt/Vx/ZjHnTJSVkyfQ0HCmMvgVvKBzP6wHHoggXcXeRhViQUbHW2v32Ptj2lw/qukQxv0rggugz/m+4miLFMEtAFlSJ+9Q4rA8pXMgrDJbd7T7BPNs9yeP0rVNab+dRE0wMkv0iRk0cL1ZPH/FB5F6everMc/7zc3mCEVXJM0fbj1XQVM640C413ncpDz/zK24e3lew4Erf7Ld9dl/xWRr60zBvGfFHz5JSBzL4/OsvnRFHfpxd6nwyVJhjv9uqyGNNqaDZ1AaPZ/ZCVDq+7KyJhM/Pug18cEzcDhUc0u5SIdjLnaiqgqAx0axAUdGPAN9Ssb58kDaqgt38VfoCc7ki/Qsk84ylxVu10vAeK4piklUb/PtR0gTKQ4GcYWnwZBgTlSthRFheOEp5BSDsKXi8Y2UCb/FJr1+oMbjbHLKnKvq7UDaLXXXKfvF1RjF1npgtYw4HBbHQ8Rsr7ZT2gU/85UDfpTgFNlpRWwajpEGQ7eK/CKQZnE8eGy+DR0KNuXxBkZpW5xOyq4g=
+ - secure: >-
+ GzJ6KvrESPTW2J2fqjTq4tXzaSLdjVuWHp4LV7isIBQk5qeh0l+AN/ZRzYj63AdhKBeQG68lLMayV/GFtJsKkLQWn1xZzxVjwdpWQjwnKWtoGYkwdHzuY6FNfLL9FTIGu5G6RCmfFfTDsUHkhSXW+cBaN7nJWtojXAOrr+9ivfU6acfoON8RN8m5N2o5uVJgwwlveYnCYayRHC50neHOVC1IzQlagW9TdpKMqHeg0XpSFhdjQua3ETiAiQDjpQz1BeNZh+/DjnlV08zAx64bjZTh441100HRP0qg4/Y6IcX/qCiRdQHYBvIAoka+ZySPu1zYfvn+7eJYwQ4shSuElKX9y6g+uk3g5djJJ7yoKIQnsYlO1yPB0E8fvIhP2K/ZCwXK86snR+pIfrpVudQy4RZObuvyJIqxmaUjlTg1zU/S0ZNqOnXtqO6pG6YNH1JpAt0Bdzy7hT/q44ROlBPYuZK8shzzLa4KBr3Rb7kknyi5YXempGjhLnUFFd+gGQUkfqoDmyLreDyO95Ch8+YOcTjAzWh/yrEw1of0l/an9TxtWjnFaioJDcVS/dQphufMHgxyushDaocm/My06ZNWfwe69IbH7lqdDn9aW8hdn9cgIKw/sNqVtksN0/tnoURD/8wuHmepzsCR7xs9NrAozaynK+NdPfDdUtLRjtcEy0A=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/README.md
new file mode 100644
index 00000000000..d1e6b2bebc8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/README.md
@@ -0,0 +1,65 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-dialog.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-dialog)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/paper-dialog)
+
+## &lt;paper-dialog&gt;
+
+Material design: [Dialogs](https://www.google.com/design/spec/components/dialogs.html)
+
+`<paper-dialog>` is a dialog with Material Design styling and optional animations when it is
+opened or closed. It provides styles for a header, content area, and an action area for buttons.
+You can use the `<paper-dialog-scrollable>` element (in its own repository) if you need a scrolling
+content area. To autofocus a specific child element after opening the dialog, give it the `autofocus`
+attribute. See `Polymer.PaperDialogBehavior` and `Polymer.IronOverlayBehavior` for specifics.
+
+For example, the following code implements a dialog with a header, scrolling content area and
+buttons. Focus will be given to the `dialog-confirm` button when the dialog is opened.
+
+```html
+<paper-dialog>
+ <h2>Header</h2>
+ <paper-dialog-scrollable>
+ Lorem ipsum...
+ </paper-dialog-scrollable>
+ <div class="buttons">
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm autofocus>Accept</paper-button>
+ </div>
+</paper-dialog>
+```
+
+### Changes in 2.0
+- `paper-dialog-behavior 2.0` styles only direct `h2` and `.buttons` children of the dialog because of how [`::slotted` works](https://developers.google.com/web/fundamentals/primers/shadowdom/?hl=en#stylinglightdom)
+(compound selector will select only top level nodes)
+- `neon-animation 2.0` doesn't import the Web Animations polyfill, so you'll have to import it ([see Animations section](#Animations))
+
+### Styling
+
+See the docs for `Polymer.PaperDialogBehavior` for the custom properties available for styling
+this element.
+
+### Animations
+
+Set the `entry-animation` and/or `exit-animation` attributes to add an animation when the dialog
+is opened or closed. See the documentation in
+[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation) for more info.
+
+For example:
+
+```html
+<link rel="import" href="../neon-animation/web-animations.html">
+<link rel="import" href="../neon-animation/animations/scale-up-animation.html">
+<link rel="import" href="../neon-animation/animations/fade-out-animation.html">
+
+<paper-dialog entry-animation="scale-up-animation"
+ exit-animation="fade-out-animation">
+ <h2>Header</h2>
+ <div>Dialog body</div>
+</paper-dialog>
+```
+
+### Accessibility
+
+See the docs for `Polymer.PaperDialogBehavior` for accessibility features implemented by this
+element.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/bower.json
new file mode 100644
index 00000000000..bca919ab9ba
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/bower.json
@@ -0,0 +1,69 @@
+{
+ "name": "paper-dialog",
+ "description": "A Material Design dialog",
+ "version": "2.1.1",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "dialog",
+ "overlay"
+ ],
+ "main": "paper-dialog.html",
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-dialog"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-dialog",
+ "ignore": [],
+ "dependencies": {
+ "neon-animation": "PolymerElements/neon-animation#1 - 2",
+ "paper-dialog-behavior": "PolymerElements/paper-dialog-behavior#1 - 2",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#1 - 2",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#1 - 2",
+ "paper-item": "PolymerElements/paper-item#1 - 2",
+ "paper-listbox": "PolymerElements/paper-listbox#1 - 2",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "neon-animation": "PolymerElements/neon-animation#^1.0.0",
+ "paper-dialog-behavior": "PolymerElements/paper-dialog-behavior#^1.0.0",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.7.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "paper-dialog-scrollable": "PolymerElements/paper-dialog-scrollable#^1.0.0",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-listbox": "PolymerElements/paper-listbox#^1.0.0",
+ "web-animations-js": "web-animations/web-animations-js#^2.2.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/demo/index.html
new file mode 100644
index 00000000000..d332d912b5c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/demo/index.html
@@ -0,0 +1,230 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>paper-dialog demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../paper-dialog.html">
+ <link rel="import" href="../../paper-button/paper-button.html">
+ <link rel="import" href="../../paper-dialog-scrollable/paper-dialog-scrollable.html">
+ <link rel="import" href="../../neon-animation/web-animations.html">
+ <link rel="import" href="../../neon-animation/neon-animations.html">
+ <link rel="import" href="../../paper-dropdown-menu/paper-dropdown-menu-light.html">
+ <link rel="import" href="../../paper-listbox/paper-listbox.html">
+ <link rel="import" href="../../paper-item/paper-item.html">
+
+
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles">
+ .centered {
+ min-width: 500px;
+ }
+
+ demo-snippet {
+ --demo-snippet-code: {
+ max-height: 250px;
+ }
+ }
+ </style></custom-style>
+
+</head>
+
+<body unresolved class="centered">
+ <h3>Dialog layouts</h3>
+ <demo-snippet>
+ <template>
+ <paper-button raised onclick="dialog.open()">plain dialog</paper-button>
+ <paper-button raised onclick="modal.open()">modal dialog</paper-button>
+ <paper-button raised onclick="scrolling.open()">scrolling dialog</paper-button>
+ <paper-button raised onclick="actions.open()">dialog with actions</paper-button>
+ <paper-button raised onclick="dropdownDialog.open()">dialog with dropdown</paper-button>
+ <paper-button raised onclick="nested.open()">dialog with nested dialog</paper-button>
+
+ <paper-dialog id="dialog">
+ <h2>Dialog Title</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </paper-dialog>
+
+ <paper-dialog id="scrolling">
+ <h2>Scrolling</h2>
+ <paper-dialog-scrollable>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </paper-dialog-scrollable>
+ <div class="buttons">
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm autofocus>OK</paper-button>
+ </div>
+ </paper-dialog>
+
+ <paper-dialog id="actions">
+ <h2>Dialog Title</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <div class="buttons">
+ <paper-button>More Info...</paper-button>
+ <paper-button dialog-dismiss>Decline</paper-button>
+ <paper-button dialog-confirm autofocus>Accept</paper-button>
+ </div>
+ </paper-dialog>
+
+ <paper-dialog id="modal" modal>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
+ <div class="buttons">
+ <paper-button dialog-confirm autofocus>Tap me to close</paper-button>
+ </div>
+ </paper-dialog>
+
+ <paper-dialog id="dropdownDialog">
+ <h2>Dialog Title</h2>
+ <paper-dropdown-menu-light label="Value">
+ <!--
+ support hybrid mode:
+ paper-dropdown-menu-light 1.x distributes via <content select=".dropdown-content">
+ paper-dropdown-menu-light 2.x distributes via <slot name="dropdown-content">
+ -->
+ <paper-listbox class="dropdown-content" slot="dropdown-content">
+ <paper-item>1</paper-item>
+ <paper-item>2</paper-item>
+ <paper-item>3</paper-item>
+ <paper-item>4</paper-item>
+ <paper-item>5</paper-item>
+ <paper-item>6</paper-item>
+ <paper-item>7</paper-item>
+ <paper-item>8</paper-item>
+ <paper-item>9</paper-item>
+ <paper-item>10</paper-item>
+ </paper-listbox>
+ </paper-dropdown-menu-light>
+ </paper-dialog>
+
+ <paper-dialog id="nested">
+ <h2>Dialog Title</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <div class="buttons">
+ <paper-button onclick="innerDialog.open()">Open nested dialog</paper-button>
+ </div>
+ </paper-dialog>
+
+ <paper-dialog id="innerDialog">
+ <h2>Dialog Title</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
+ </paper-dialog>
+ </template>
+ </demo-snippet>
+
+ <h3>Styling and positioning</h3>
+ <demo-snippet>
+ <template>
+ <style>
+ paper-dialog.colored {
+ border: 2px solid;
+ border-color: #4caf50;
+ background-color: #f1f8e9;
+ color: #4caf50;
+ }
+
+ paper-dialog.size-position {
+ position: fixed;
+ top: 16px;
+ right: 16px;
+ width: 300px;
+ height: 300px;
+ overflow: auto;
+ }
+ </style>
+ <paper-button raised onclick="colors.open()">colors</paper-button>
+ <paper-button raised onclick="position.open()">size &amp; position</paper-button>
+
+ <paper-dialog id="colors" class="colored">
+ <h2>Custom Colors</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
+ dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </paper-dialog>
+
+ <paper-dialog id="position" class="size-position">
+ <h2>Custom Size &amp; Position</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
+ dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </paper-dialog>
+ </template>
+ </demo-snippet>
+
+ <h3>Position with <code>positionTarget</code></h3>
+ <demo-snippet>
+ <template>
+ <style is="custom-style">
+ #alignedDialog {
+ margin: 0;
+ }
+ </style>
+ <paper-button raised onclick="openBy(this)">Open</paper-button>
+ <paper-button raised onclick="openBy(this)">Open</paper-button>
+ <paper-button raised onclick="openBy(this)">Open</paper-button>
+
+ <paper-dialog id="alignedDialog" no-overlap horizontal-align="left" vertical-align="top">
+ <h2>Aligned dialog</h2>
+ <paper-dialog-scrollable>
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
+ dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+ </paper-dialog-scrollable>
+ </paper-dialog>
+
+ <script>
+ function openBy(element) {
+ alignedDialog.positionTarget = element;
+ alignedDialog.open();
+ }
+ </script>
+ </template>
+ </demo-snippet>
+
+ <h3>Transitions with neon-animation</h3>
+ <demo-snippet>
+ <template>
+ <paper-button raised onclick="animated.open()">open</paper-button>
+ <paper-dialog id="animated" entry-animation="scale-up-animation" exit-animation="fade-out-animation" with-backdrop>
+ <h2>Dialog Title</h2>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute
+ irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </paper-dialog>
+ </template>
+ </demo-snippet>
+
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/hero.svg
new file mode 100755
index 00000000000..713329b8470
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/hero.svg
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <g>
+ <polygon points="0,124 0,126 2,126 "/>
+ <polygon points="0,111.6 0,114.4 11.6,126 14.4,126 "/>
+ <polygon points="0,99.1 0,101.9 24.1,126 26.9,126 "/>
+ <polygon points="0,86.6 0,89.5 36.5,126 39.4,126 "/>
+ <polygon points="0,74.2 0,77 49,126 51.8,126 "/>
+ <polygon points="0,61.7 0,64.5 61.5,126 64.3,126 "/>
+ <polygon points="0,49.2 0,52.1 73.9,126 76.8,126 "/>
+ <polygon points="0,36.8 0,39.6 86.4,126 89.2,126 "/>
+ <polygon points="0,24.3 0,27.1 98.9,126 101.7,126 "/>
+ <polygon points="75.2,87 74,87 74,85.8 0,11.8 0,14.7 111.3,126 114.2,126 "/>
+ <polygon points="87.6,87 84.8,87 123.8,126 126.6,126 "/>
+ <polygon points="74,76.2 74,73.4 0.6,0 0,0 0,2.2 "/>
+ <polygon points="74,63.7 74,60.9 13.1,0 10.3,0 "/>
+ <polygon points="100.1,87 97.3,87 136.3,126 139.1,126 "/>
+ <polygon points="112.6,87 109.7,87 148.7,126 151.6,126 "/>
+ <polygon points="74,51.3 74,48.4 25.6,0 22.7,0 "/>
+ <polygon points="125,87 122.2,87 161.2,126 164,126 "/>
+ <polygon points="74.2,39 77,39 38,0 35.2,0 "/>
+ <polygon points="86.7,39 89.5,39 50.5,0 47.7,0 "/>
+ <polygon points="137.5,87 134.7,87 173.7,126 176.5,126 "/>
+ <polygon points="150,87 147.1,87 186.1,126 189,126 "/>
+ <polygon points="99.1,39 102,39 63,0 60.1,0 "/>
+ <polygon points="150,74.6 150,77.4 198.6,126 201.4,126 "/>
+ <polygon points="111.6,39 114.4,39 75.4,0 72.6,0 "/>
+ <polygon points="150,62.1 150,64.9 211.1,126 213.9,126 "/>
+ <polygon points="124.1,39 126.9,39 87.9,0 85.1,0 "/>
+ <polygon points="100.3,0 97.5,0 136.5,39 139.3,39 "/>
+ <polygon points="150,49.7 150,52.5 223.5,126 225,126 225,124.7 "/>
+ <polygon points="112.8,0 110,0 149,39 150,39 150,40 225,115 225,112.2 "/>
+ <polygon points="125.3,0 122.5,0 225,102.5 225,99.7 "/>
+ <polygon points="137.7,0 134.9,0 225,90.1 225,87.3 "/>
+ <polygon points="150.2,0 147.4,0 225,77.6 225,74.8 "/>
+ <polygon points="162.7,0 159.8,0 225,65.2 225,62.3 "/>
+ <polygon points="175.1,0 172.3,0 225,52.7 225,49.9 "/>
+ <polygon points="187.6,0 184.8,0 225,40.2 225,37.4 "/>
+ <polygon points="200.1,0 197.2,0 225,27.8 225,24.9 "/>
+ <polygon points="212.5,0 209.7,0 225,15.3 225,12.5 "/>
+ <polygon points="225,0 222.2,0 225,2.8 225,0 "/>
+ </g>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+ <path d="M151,88H73V38h78V88z M75,86h74V40H75V86z"/>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/index.html
new file mode 100644
index 00000000000..6304b8dc641
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-dialog</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package-lock.json
new file mode 100644
index 00000000000..8d41a624459
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package-lock.json
@@ -0,0 +1,1196 @@
+{
+ "name": "@polymer/paper-dialog",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.1.tgz",
+ "integrity": "sha512-N0rNp+F8Cp0iQ40i3Lx3onWnRXMnfMosR9WFE+IHMF4k5Fv2toRYz77EZMEPPZCz1tzFmCUelHxvxpdssT9oCw==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.2",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.7.tgz",
+ "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.7"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz",
+ "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.2.tgz",
+ "integrity": "sha512-hICrJJ5zUI7hnEBBluE2169CG3Xnn4D5HPeLkMjbiOyneSLTUX5Wz1d4FSi3xALUtzulIBStSt0S2tLXs8eVrg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.102",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.40",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.9.0",
+ "resolve": "1.5.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.9.0.tgz",
+ "integrity": "sha512-WPOqlV2W/M4Ni40QIqYSv8PE7H4rjiPm1KEf02QPtjZOGlAC4Rv7e6UJ1Ke1O70WT5bydcsEn3LViFIqYpVOJw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.102",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package.json
new file mode 100644
index 00000000000..74415a17d2c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/paper-dialog",
+ "private": true,
+ "description": "A Material Design dialog",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-dialog"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.1",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.d.ts
new file mode 100644
index 00000000000..0be18119e23
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.d.ts
@@ -0,0 +1,74 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-dialog.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../neon-animation/neon-animation-runner-behavior.d.ts" />
+/// <reference path="../paper-dialog-behavior/paper-dialog-behavior.d.ts" />
+/// <reference path="../paper-dialog-behavior/paper-dialog-shared-styles.d.ts" />
+
+/**
+ * Material design: [Dialogs](https://www.google.com/design/spec/components/dialogs.html)
+ *
+ * `<paper-dialog>` is a dialog with Material Design styling and optional animations when it is
+ * opened or closed. It provides styles for a header, content area, and an action area for buttons.
+ * You can use the `<paper-dialog-scrollable>` element (in its own repository) if you need a scrolling
+ * content area. To autofocus a specific child element after opening the dialog, give it the `autofocus`
+ * attribute. See `Polymer.PaperDialogBehavior` and `Polymer.IronOverlayBehavior` for specifics.
+ *
+ * For example, the following code implements a dialog with a header, scrolling content area and
+ * buttons. Focus will be given to the `dialog-confirm` button when the dialog is opened.
+ *
+ * <paper-dialog>
+ * <h2>Header</h2>
+ * <paper-dialog-scrollable>
+ * Lorem ipsum...
+ * </paper-dialog-scrollable>
+ * <div class="buttons">
+ * <paper-button dialog-dismiss>Cancel</paper-button>
+ * <paper-button dialog-confirm autofocus>Accept</paper-button>
+ * </div>
+ * </paper-dialog>
+ *
+ * ### Styling
+ *
+ * See the docs for `Polymer.PaperDialogBehavior` for the custom properties available for styling
+ * this element.
+ *
+ * ### Animations
+ *
+ * Set the `entry-animation` and/or `exit-animation` attributes to add an animation when the dialog
+ * is opened or closed. See the documentation in
+ * [PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation) for more info.
+ *
+ * For example:
+ *
+ * <link rel="import" href="components/neon-animation/animations/scale-up-animation.html">
+ * <link rel="import" href="components/neon-animation/animations/fade-out-animation.html">
+ *
+ * <paper-dialog entry-animation="scale-up-animation"
+ * exit-animation="fade-out-animation">
+ * <h2>Header</h2>
+ * <div>Dialog body</div>
+ * </paper-dialog>
+ *
+ * ### Accessibility
+ *
+ * See the docs for `Polymer.PaperDialogBehavior` for accessibility features implemented by this
+ * element.
+ */
+interface PaperDialogElement extends Polymer.Element, Polymer.PaperDialogBehavior, Polymer.NeonAnimationRunnerBehavior {
+ _renderOpened(): void;
+ _renderClosed(): void;
+ _onNeonAnimationFinish(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-dialog": PaperDialogElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.html
new file mode 100644
index 00000000000..82874670131
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-dialog/paper-dialog.html
@@ -0,0 +1,109 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../neon-animation/neon-animation-runner-behavior.html">
+<link rel="import" href="../paper-dialog-behavior/paper-dialog-behavior.html">
+<link rel="import" href="../paper-dialog-behavior/paper-dialog-shared-styles.html">
+<!--
+Material design: [Dialogs](https://www.google.com/design/spec/components/dialogs.html)
+
+`<paper-dialog>` is a dialog with Material Design styling and optional animations when it is
+opened or closed. It provides styles for a header, content area, and an action area for buttons.
+You can use the `<paper-dialog-scrollable>` element (in its own repository) if you need a scrolling
+content area. To autofocus a specific child element after opening the dialog, give it the `autofocus`
+attribute. See `Polymer.PaperDialogBehavior` and `Polymer.IronOverlayBehavior` for specifics.
+
+For example, the following code implements a dialog with a header, scrolling content area and
+buttons. Focus will be given to the `dialog-confirm` button when the dialog is opened.
+
+ <paper-dialog>
+ <h2>Header</h2>
+ <paper-dialog-scrollable>
+ Lorem ipsum...
+ </paper-dialog-scrollable>
+ <div class="buttons">
+ <paper-button dialog-dismiss>Cancel</paper-button>
+ <paper-button dialog-confirm autofocus>Accept</paper-button>
+ </div>
+ </paper-dialog>
+
+### Styling
+
+See the docs for `Polymer.PaperDialogBehavior` for the custom properties available for styling
+this element.
+
+### Animations
+
+Set the `entry-animation` and/or `exit-animation` attributes to add an animation when the dialog
+is opened or closed. See the documentation in
+[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation) for more info.
+
+For example:
+
+ <link rel="import" href="components/neon-animation/animations/scale-up-animation.html">
+ <link rel="import" href="components/neon-animation/animations/fade-out-animation.html">
+
+ <paper-dialog entry-animation="scale-up-animation"
+ exit-animation="fade-out-animation">
+ <h2>Header</h2>
+ <div>Dialog body</div>
+ </paper-dialog>
+
+### Accessibility
+
+See the docs for `Polymer.PaperDialogBehavior` for accessibility features implemented by this
+element.
+
+@group Paper Elements
+@element paper-dialog
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-dialog">
+ <template>
+ <style include="paper-dialog-shared-styles"></style>
+ <slot></slot>
+ </template>
+</dom-module>
+
+<script>
+Polymer({
+ is: 'paper-dialog',
+
+ behaviors: [
+ Polymer.PaperDialogBehavior,
+ Polymer.NeonAnimationRunnerBehavior
+ ],
+
+ listeners: {
+ 'neon-animation-finish': '_onNeonAnimationFinish'
+ },
+
+ _renderOpened: function() {
+ this.cancelAnimation();
+ this.playAnimation('entry');
+ },
+
+ _renderClosed: function() {
+ this.cancelAnimation();
+ this.playAnimation('exit');
+ },
+
+ _onNeonAnimationFinish: function() {
+ if (this.opened) {
+ this._finishRenderOpened();
+ } else {
+ this._finishRenderClosed();
+ }
+ }
+});
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.bower.json
new file mode 100644
index 00000000000..db0230cb866
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.bower.json
@@ -0,0 +1,71 @@
+{
+ "name": "paper-icon-button",
+ "private": true,
+ "version": "2.2.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "A material design icon button",
+ "main": [
+ "paper-icon-button.html"
+ ],
+ "author": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "button",
+ "icon",
+ "control"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-icon-button.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/paper-icon-button",
+ "_release": "2.2.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.0",
+ "commit": "bb7d6980b48866c63cd9466d155a8beabc8058d9"
+ },
+ "_source": "https://github.com/PolymerElements/paper-icon-button.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-icon-button"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..c80193d9f2a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-icon-button/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.travis.yml
new file mode 100644
index 00000000000..3f775b36e72
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ HdHTMNdAamEtP+Nl5/mL2X7IKba4p2+ljpDSnvkA6gyoLzrWRZAyUjJxGjVRutQejTa8ZLOGXnBYKugSIMrGv8cblvngbhEmIHd2HBnPjd140KNwtsCtzPRDMdJMrvekVOXgpCkecmGq9G/j0WOoOnYY9oJrHB5dFy0y7LfPy6w=
+ - secure: >-
+ XjZRR/HW23UneacknoaYle/dg2Diupr9p9UOWLR7w6ejvwIP99nUF0Bh4trZkUiXBBt29HOBoETwBTMizDHNg8vKe544EgR26Fq4Lwk5EuEHy3xeyroiHlwc56ZC9Obye1kdM3QjU6rzJ7F9NuRL2E0ttgZjt/OnM+vKx3kqGOY=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/README.md
new file mode 100644
index 00000000000..0fe349c4e0c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/README.md
@@ -0,0 +1,92 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+paper-icon-button-light.html paper-icon-button.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/paper-icon-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-icon-button)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/paper-icon-button)_
+
+
+## &lt;paper-icon-button&gt;
+
+Material design: [Icon toggles](https://www.google.com/design/spec/components/buttons.html#buttons-toggle-buttons)
+
+`paper-icon-button` is a button with an image placed at the center. When the user touches
+the button, a ripple effect emanates from the center of the button.
+
+`paper-icon-button` does not include a default icon set. To use icons from the default
+set, include `PolymerElements/iron-icons/iron-icons.html`, and use the `icon` attribute to specify which icon
+from the icon set to use.
+
+<!---
+```html
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-icon-button.html">
+ <link rel="import" href="../iron-icons/iron-icons.html">
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-icon-button icon="favorite"></paper-icon-button>
+<paper-icon-button icon="menu"></paper-icon-button>
+<paper-icon-button icon="star"></paper-icon-button>
+```
+
+See [`iron-iconset`](https://github.com/PolymerElements/iron-iconset) for more information about
+how to use a custom icon set.
+
+Example:
+
+```html
+<link href="path/to/iron-icons/iron-icons.html" rel="import">
+
+<paper-icon-button icon="favorite"></paper-icon-button>
+<paper-icon-button src="star.png"></paper-icon-button>
+```
+
+To use `paper-icon-button` as a link, wrap it in an anchor tag. Since `paper-icon-button`
+will already receive focus, you may want to prevent the anchor tag from receiving focus
+as well by setting its tabindex to -1.
+
+```html
+<a href="https://www.polymer-project.org" tabindex="-1">
+ <paper-icon-button icon="polymer"></paper-icon-button>
+</a>
+```
+
+### Styling
+
+Style the button with CSS as you would a normal DOM element. If you are using the icons
+provided by `iron-icons`, they will inherit the foreground color of the button.
+
+```html
+/* make a red "favorite" button */
+<paper-icon-button icon="favorite" style="color: red;"></paper-icon-button>
+```
+
+By default, the ripple is the same color as the foreground at 25% opacity. You may
+customize the color using the `--paper-icon-button-ink-color` custom property.
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-icon-button-disabled-text` | The color of the disabled button | `--disabled-text-color` |
+| `--paper-icon-button-ink-color` | Selected/focus ripple color | `--primary-text-color` |
+| `--paper-icon-button` | Mixin for a button | `{}` |
+| `--paper-icon-button-disabled` | Mixin for a disabled button | `{}` |
+| `--paper-icon-button-hover` | Mixin for button on hover | `{}` |
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/bower.json
new file mode 100644
index 00000000000..9f3da88a85b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/bower.json
@@ -0,0 +1,61 @@
+{
+ "name": "paper-icon-button",
+ "private": true,
+ "version": "2.2.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "A material design icon button",
+ "main": [
+ "paper-icon-button.html"
+ ],
+ "author": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "button",
+ "icon",
+ "control"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-icon-button.git"
+ },
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "ignore": [],
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/index.html
new file mode 100644
index 00000000000..9347d9346f6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/index.html
@@ -0,0 +1,111 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>paper-icon-button demo</title>
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-icons/iron-icons.html">
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-icon-button.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ paper-icon-button {
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ </style>
+ </custom-style>
+ </head>
+ <body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>Buttons can use iron-icons or external images, and can be disabled</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-icon-button icon="favorite" title="heart"></paper-icon-button>
+ <paper-icon-button src="https://assets-cdn.github.com/images/modules/logos_page/Octocat.png" alt="octocat" title="octocat"></paper-icon-button>
+ <paper-icon-button disabled icon="reply" title="reply"></paper-icon-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can hide the ripple effect using the <i>noink</i> attribute</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-icon-button noink icon="find-in-page" title="find"></paper-icon-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can be styled using regular CSS and custom properties</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-icon-button.pink {
+ color: var(--paper-pink-500);
+ --paper-icon-button-ink-color: var(--paper-indigo-500);
+ }
+ paper-icon-button.pink:hover {
+ background-color: var(--paper-pink-500);
+ color: white;
+ }
+ paper-icon-button.blue {
+ --paper-icon-button-ink-color: var(--paper-orange-500);
+ background-color: var(--paper-light-blue-500);
+ color: white;
+ border-radius: 3px;
+ padding: 2px;
+ }
+ </style>
+ </custom-style>
+ <paper-icon-button icon="favorite" title="heart" class="pink"></paper-icon-button>
+ <paper-icon-button icon="flight-takeoff" title="take off" class="blue"></paper-icon-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can be resized</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-icon-button.giant {
+ width: 100px;
+ height: 100px;
+ }
+ </style>
+ </custom-style>
+ <paper-icon-button icon="alarm-on" title="wake up" class="giant"></paper-icon-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Buttons can be used as a link</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <a href="https://www.polymer-project.org" tabindex="-1">
+ <paper-icon-button icon="polymer"></paper-icon-button>
+ </a>
+ <custom-style>
+ <style is="custom-style">
+ a paper-icon-button,
+ a:active paper-icon-button,
+ a:visited paper-icon-button {
+ color: #000000;
+ }
+ </style>
+ </custom-style>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/paper-icon-button-light.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/paper-icon-button-light.html
new file mode 100644
index 00000000000..7437b251556
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/demo/paper-icon-button-light.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>paper-icon-button-light demo</title>
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-icon/iron-icon.html">
+ <link rel="import" href="../../iron-icons/iron-icons.html">
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-icon-button-light.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles"></style>
+ </custom-style>
+ </head>
+ <body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>paper-icon-button-light can contain iron-icons or external images and can be disabled</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-icon-button-light {
+ width: 40px;
+ height: 40px;
+ margin: 10px;
+ }
+ paper-icon-button-light img {
+ width: 24px;
+ height: 24px;
+ }
+ </style>
+ </custom-style>
+
+ <paper-icon-button-light>
+ <button title="heart">
+ <iron-icon icon="favorite"></iron-icon>
+ </button>
+ </paper-icon-button-light>
+
+ <paper-icon-button-light>
+ <button title="octocat">
+ <img src="https://assets-cdn.github.com/images/modules/logos_page/Octocat.png" alt="octocat">
+ </button>
+ </paper-icon-button-light>
+
+ <paper-icon-button-light>
+ <button title="reply" disabled>
+ <iron-icon icon="reply"></iron-icon>
+ </button>
+ </paper-icon-button-light>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/index.html
new file mode 100644
index 00000000000..78f963c7e89
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/index.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <script src="../webcomponentsjs/webcomponents.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package-lock.json
new file mode 100644
index 00000000000..bd317fe2c58
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package-lock.json
@@ -0,0 +1,983 @@
+{
+ "name": "@polymer/paper-icon-button",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.9.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.9.0.tgz",
+ "integrity": "sha512-WPOqlV2W/M4Ni40QIqYSv8PE7H4rjiPm1KEf02QPtjZOGlAC4Rv7e6UJ1Ke1O70WT5bydcsEn3LViFIqYpVOJw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package.json
new file mode 100644
index 00000000000..3923985b2d4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/paper-icon-button",
+ "private": true,
+ "description": "A material design icon button",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-icon-button.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.d.ts
new file mode 100644
index 00000000000..49271d7dc49
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.d.ts
@@ -0,0 +1,50 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-icon-button-light.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../paper-behaviors/paper-ripple-behavior.d.ts" />
+
+/**
+ * This is a lighter version of `paper-icon-button`. Its goal is performance, not
+ * developer ergonomics, so as a result it has fewer features than `paper-icon-button`
+ * itself. To use it, you must distribute a `button` containing the `iron-icon` you
+ * want to use:
+ *
+ * <link rel="import" href="../iron-icon/iron-icon.html">
+ * <link rel="import" href="../paper-icon-button/paper-icon-button-light.html">
+ * <link rel="import" href="../iron-icons/iron-icons.html">
+ *
+ * <paper-icon-button-light>
+ * <button title="heart">
+ * <iron-icon icon="favorite"></iron-icon>
+ * </button>
+ * </paper-icon-button-light>
+ *
+ * Note that this button is assumed to be distributed at the startup of
+ * `paper-icon-button-light`. Dynamically adding a `button` to this element is
+ * not supported.
+ *
+ * The `title`/`disabled` etc. attributes go on the distributed button, not on the wrapper.
+ *
+ * The following custom properties and mixins are also available for styling:
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-icon-button-light-ripple` | Mixin applied to the paper ripple | `{}`
+ */
+interface PaperIconButtonLightElement extends Polymer.Element, Polymer.PaperRippleBehavior {
+ ensureRipple(...var_args: any[]): void;
+ ready(): void;
+ _rippleDown(): void;
+ _rippleUp(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-icon-button-light": PaperIconButtonLightElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.html
new file mode 100644
index 00000000000..25c9e92daed
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button-light.html
@@ -0,0 +1,130 @@
+<!--
+@license
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-behaviors/paper-ripple-behavior.html">
+
+<!--
+This is a lighter version of `paper-icon-button`. Its goal is performance, not
+developer ergonomics, so as a result it has fewer features than `paper-icon-button`
+itself. To use it, you must distribute a `button` containing the `iron-icon` you
+want to use:
+
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../paper-icon-button/paper-icon-button-light.html">
+<link rel="import" href="../iron-icons/iron-icons.html">
+
+<paper-icon-button-light>
+ <button title="heart">
+ <iron-icon icon="favorite"></iron-icon>
+ </button>
+</paper-icon-button-light>
+
+Note that this button is assumed to be distributed at the startup of
+`paper-icon-button-light`. Dynamically adding a `button` to this element is
+not supported.
+
+The `title`/`disabled` etc. attributes go on the distributed button, not on the wrapper.
+
+The following custom properties and mixins are also available for styling:
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-icon-button-light-ripple` | Mixin applied to the paper ripple | `{}`
+
+@group Paper Elements
+@element paper-icon-button-light
+@demo demo/paper-icon-button-light.html
+-->
+
+<dom-module id="paper-icon-button-light">
+ <template strip-whitespace>
+ <style>
+ :host {
+ display: inline-block;
+ position: relative;
+ width: 24px;
+ height: 24px;
+ }
+
+ paper-ripple {
+ opacity: 0.6;
+ color: currentColor;
+ @apply(--paper-icon-button-light-ripple);
+ }
+
+ :host > ::slotted(button) {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ background: none;
+ border: none;
+ outline: none;
+ vertical-align: middle;
+ color: inherit;
+ cursor: pointer;
+ /* NOTE: Both values are needed, since some phones require the value to be `transparent`. */
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-tap-highlight-color: transparent;
+ }
+ :host > ::slotted(button[disabled]) {
+ color: #9b9b9b;
+ pointer-events: none;
+ cursor: auto;
+ }
+ </style>
+ <slot></slot>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-icon-button-light',
+
+ behaviors: [
+ Polymer.PaperRippleBehavior
+ ],
+
+ ready: function() {
+ Polymer.RenderStatus.afterNextRender(this, () => {
+ // Add lazy host listeners
+ this.addEventListener('down', this._rippleDown.bind(this));
+ this.addEventListener('up', this._rippleUp.bind(this));
+
+ // Assume the button has already been distributed.
+ var button = this.getEffectiveChildren()[0];
+ this._rippleContainer = button;
+
+ // We need to set the focus/blur listeners on the distributed button,
+ // not the host, since the host isn't focusable.
+ button.addEventListener('focus', this._rippleDown.bind(this));
+ button.addEventListener('blur', this._rippleUp.bind(this));
+ });
+ },
+ _rippleDown: function() {
+ this.getRipple().uiDownAction();
+ },
+ _rippleUp: function() {
+ this.getRipple().uiUpAction();
+ },
+ /**
+ * @param {...*} var_args
+ */
+ ensureRipple: function(var_args) {
+ var lastRipple = this._ripple;
+ Polymer.PaperRippleBehavior.ensureRipple.apply(this, arguments);
+ if (this._ripple && this._ripple !== lastRipple) {
+ this._ripple.center = true;
+ this._ripple.classList.add('circle');
+ }
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.d.ts
new file mode 100644
index 00000000000..6c0ad02c0a4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.d.ts
@@ -0,0 +1,92 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-icon-button.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../paper-behaviors/paper-inky-focus-behavior.d.ts" />
+/// <reference path="../paper-styles/default-theme.d.ts" />
+
+/**
+ * Material design: [Icon toggles](https://www.google.com/design/spec/components/buttons.html#buttons-toggle-buttons)
+ *
+ * `paper-icon-button` is a button with an image placed at the center. When the user touches
+ * the button, a ripple effect emanates from the center of the button.
+ *
+ * `paper-icon-button` does not include a default icon set. To use icons from the default
+ * set, include `PolymerElements/iron-icons/iron-icons.html`, and use the `icon` attribute to specify which icon
+ * from the icon set to use.
+ *
+ * <paper-icon-button icon="menu"></paper-icon-button>
+ *
+ * See [`iron-iconset`](iron-iconset) for more information about
+ * how to use a custom icon set.
+ *
+ * Example:
+ *
+ * <link href="path/to/iron-icons/iron-icons.html" rel="import">
+ *
+ * <paper-icon-button icon="favorite"></paper-icon-button>
+ * <paper-icon-button src="star.png"></paper-icon-button>
+ *
+ * To use `paper-icon-button` as a link, wrap it in an anchor tag. Since `paper-icon-button`
+ * will already receive focus, you may want to prevent the anchor tag from receiving focus
+ * as well by setting its tabindex to -1.
+ *
+ * <a href="https://www.polymer-project.org" tabindex="-1">
+ * <paper-icon-button icon="polymer"></paper-icon-button>
+ * </a>
+ *
+ * ### Styling
+ *
+ * Style the button with CSS as you would a normal DOM element. If you are using the icons
+ * provided by `iron-icons`, they will inherit the foreground color of the button.
+ *
+ * /* make a red "favorite" button *\/
+ * <paper-icon-button icon="favorite" style="color: red;"></paper-icon-button>
+ *
+ * By default, the ripple is the same color as the foreground at 25% opacity. You may
+ * customize the color using the `--paper-icon-button-ink-color` custom property.
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-icon-button-disabled-text` | The color of the disabled button | `--disabled-text-color`
+ * `--paper-icon-button-ink-color` | Selected/focus ripple color | `--primary-text-color`
+ * `--paper-icon-button` | Mixin for a button | `{}`
+ * `--paper-icon-button-disabled` | Mixin for a disabled button | `{}`
+ * `--paper-icon-button-hover` | Mixin for button on hover | `{}`
+ */
+interface PaperIconButtonElement extends Polymer.Element, Polymer.PaperInkyFocusBehavior {
+
+ /**
+ * The URL of an image for the icon. If the src property is specified,
+ * the icon property should not be.
+ */
+ src: string|null|undefined;
+
+ /**
+ * Specifies the icon name or index in the set of icons available in
+ * the icon's icon set. If the icon property is specified,
+ * the src property should not be.
+ */
+ icon: string|null|undefined;
+
+ /**
+ * Specifies the alternate text for the button, for accessibility.
+ */
+ alt: string|null|undefined;
+ hostAttributes: object|null;
+ _altChanged(newValue: any, oldValue: any): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-icon-button": PaperIconButtonElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.html
new file mode 100644
index 00000000000..3d857202aa5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-icon-button/paper-icon-button.html
@@ -0,0 +1,181 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../paper-behaviors/paper-inky-focus-behavior.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+
+<!--
+Material design: [Icon toggles](https://www.google.com/design/spec/components/buttons.html#buttons-toggle-buttons)
+
+`paper-icon-button` is a button with an image placed at the center. When the user touches
+the button, a ripple effect emanates from the center of the button.
+
+`paper-icon-button` does not include a default icon set. To use icons from the default
+set, include `PolymerElements/iron-icons/iron-icons.html`, and use the `icon` attribute to specify which icon
+from the icon set to use.
+
+ <paper-icon-button icon="menu"></paper-icon-button>
+
+See [`iron-iconset`](iron-iconset) for more information about
+how to use a custom icon set.
+
+Example:
+
+ <link href="path/to/iron-icons/iron-icons.html" rel="import">
+
+ <paper-icon-button icon="favorite"></paper-icon-button>
+ <paper-icon-button src="star.png"></paper-icon-button>
+
+To use `paper-icon-button` as a link, wrap it in an anchor tag. Since `paper-icon-button`
+will already receive focus, you may want to prevent the anchor tag from receiving focus
+as well by setting its tabindex to -1.
+
+ <a href="https://www.polymer-project.org" tabindex="-1">
+ <paper-icon-button icon="polymer"></paper-icon-button>
+ </a>
+
+### Styling
+
+Style the button with CSS as you would a normal DOM element. If you are using the icons
+provided by `iron-icons`, they will inherit the foreground color of the button.
+
+ /* make a red "favorite" button */
+ <paper-icon-button icon="favorite" style="color: red;"></paper-icon-button>
+
+By default, the ripple is the same color as the foreground at 25% opacity. You may
+customize the color using the `--paper-icon-button-ink-color` custom property.
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-icon-button-disabled-text` | The color of the disabled button | `--disabled-text-color`
+`--paper-icon-button-ink-color` | Selected/focus ripple color | `--primary-text-color`
+`--paper-icon-button` | Mixin for a button | `{}`
+`--paper-icon-button-disabled` | Mixin for a disabled button | `{}`
+`--paper-icon-button-hover` | Mixin for button on hover | `{}`
+
+@group Paper Elements
+@element paper-icon-button
+@demo demo/index.html
+-->
+
+<dom-module id="paper-icon-button">
+ <template strip-whitespace>
+ <style>
+ :host {
+ display: inline-block;
+ position: relative;
+ padding: 8px;
+ outline: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ z-index: 0;
+ line-height: 1;
+
+ width: 40px;
+ height: 40px;
+
+ /* NOTE: Both values are needed, since some phones require the value to be `transparent`. */
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-tap-highlight-color: transparent;
+
+ /* Because of polymer/2558, this style has lower specificity than * */
+ box-sizing: border-box !important;
+
+ @apply --paper-icon-button;
+ }
+
+ :host #ink {
+ color: var(--paper-icon-button-ink-color, var(--primary-text-color));
+ opacity: 0.6;
+ }
+
+ :host([disabled]) {
+ color: var(--paper-icon-button-disabled-text, var(--disabled-text-color));
+ pointer-events: none;
+ cursor: auto;
+
+ @apply --paper-icon-button-disabled;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ :host(:hover) {
+ @apply --paper-icon-button-hover;
+ }
+
+ iron-icon {
+ --iron-icon-width: 100%;
+ --iron-icon-height: 100%;
+ }
+ </style>
+
+ <iron-icon id="icon" src="[[src]]" icon="[[icon]]" alt$="[[alt]]"></iron-icon>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-icon-button',
+
+ hostAttributes: {
+ role: 'button',
+ tabindex: '0'
+ },
+
+ behaviors: [
+ Polymer.PaperInkyFocusBehavior
+ ],
+
+ properties: {
+ /**
+ * The URL of an image for the icon. If the src property is specified,
+ * the icon property should not be.
+ */
+ src: {
+ type: String
+ },
+
+ /**
+ * Specifies the icon name or index in the set of icons available in
+ * the icon's icon set. If the icon property is specified,
+ * the src property should not be.
+ */
+ icon: {
+ type: String
+ },
+
+ /**
+ * Specifies the alternate text for the button, for accessibility.
+ */
+ alt: {
+ type: String,
+ observer: "_altChanged"
+ }
+ },
+
+ _altChanged: function(newValue, oldValue) {
+ var label = this.getAttribute('aria-label');
+
+ // Don't stomp over a user-set aria-label.
+ if (!label || oldValue == label) {
+ this.setAttribute('aria-label', newValue);
+ }
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.bower.json
new file mode 100644
index 00000000000..00b2757adfb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.bower.json
@@ -0,0 +1,93 @@
+{
+ "name": "paper-input",
+ "version": "2.0.5",
+ "description": "Material design text fields",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "input"
+ ],
+ "main": [
+ "paper-input.html",
+ "paper-textarea.html",
+ "paper-input-behavior.html",
+ "paper-input-container.html",
+ "paper-input-error.html",
+ "paper-input-addon-behavior.html",
+ "paper-input-char-counter.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-input.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-input",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#1 - 2",
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-input": "PolymerElements/iron-input#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.0",
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-input": "PolymerElements/iron-input#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.4",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.0.5",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.5",
+ "commit": "f64825d59dda77bc9808c244ca15dd11649d1512"
+ },
+ "_source": "https://github.com/PolymerElements/paper-input.git",
+ "_target": "~2.0",
+ "_originalSource": "PolymerElements/paper-input"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..99b9301c95f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-input/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.travis.yml
new file mode 100644
index 00000000000..8c8c18209f2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/.travis.yml
@@ -0,0 +1,27 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+env:
+ global:
+ - secure: >-
+ Hg2KIEhKqOw0J8ZW2C3Pdgp5N4HD/f9jhdluH0tiYRCU4I/jf5grQuA3ohqsbqnJKV5l06gWVIDCdxBDwDEH0h8v9uUG5z/i2diiuLQc94SLQu8kWKkUPDOx+pUyXmfRKj6KnaRTotTLFrwlyuKDi9OfGjQbLZWTvmJUWoFwh4g=
+ - secure: >-
+ U6/Hp/V0ezT/yxeP2bv4S99LSLScKEaOfYwQUbe0+v5dPbN5XZaCUS6iSbNP2K8Mtb1UQUEyL8uN6Zn+khFlJ8/KJshppJ6HJi235CykahBhh9/Cv7EapgDUoss14ntE8EKpm6Ijo4LvVyPVmhgqKk9wP5ykDFtvhoKD4C3guVU=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test -l chrome
+ - xvfb-run polymer test -l firefox
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/README.md
new file mode 100644
index 00000000000..4b24d6fd308
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/README.md
@@ -0,0 +1,44 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-input.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-input)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://beta.webcomponents.org/element/PolymerElements/paper-input)
+
+## &lt;paper-input&gt;
+
+Material design: [Text fields](https://www.google.com/design/spec/components/text-fields.html)
+
+`<paper-input>` is a single-line text field with Material Design styling.
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-input.html">
+ <link rel="import" href="../iron-icons/iron-icons.html">
+ <style>
+ paper-input {
+ max-width: 400px;
+ margin: auto;
+ }
+ iron-icon, div[suffix] {
+ color: hsl(0, 0%, 50%);
+ margin-right: 12px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-input always-float-label label="Floating label"></paper-input>
+<paper-input label="username">
+ <iron-icon icon="mail" slot="prefix"></iron-icon>
+ <div slot="suffix">@email.com</div>
+</paper-input>
+```
+
+### Changes in 2.0
+- Distribution is now done with slots, so things have changed because of that (before: <label>foo</label>, now <label slot="label">foo</label>; same for input, prefix and suffix)
+- Since type extensions are not available, any use of `<input is="iron-input">` has been replaced by `<iron-input><input></iron-input>`. See [iron-input](https://github.com/PolymerElements/iron-input) for more details about that change
+- `prevent-invalid-input` and `allowed-pattern` had to be always used together; deleted `prevent-invalid-input`, so that only `allowed-pattern` is needed
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/all-imports.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/all-imports.html
new file mode 100644
index 00000000000..0f457718644
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/all-imports.html
@@ -0,0 +1,12 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="paper-input.html">
+<link rel="import" href="paper-textarea.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/bower.json
new file mode 100644
index 00000000000..d2703e8af8f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/bower.json
@@ -0,0 +1,84 @@
+{
+ "name": "paper-input",
+ "version": "2.0.5",
+ "description": "Material design text fields",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "input"
+ ],
+ "main": [
+ "paper-input.html",
+ "paper-textarea.html",
+ "paper-input-behavior.html",
+ "paper-input-container.html",
+ "paper-input-error.html",
+ "paper-input-addon-behavior.html",
+ "paper-input-char-counter.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-input.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-input",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#1 - 2",
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-input": "PolymerElements/iron-input#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-autogrow-textarea": "PolymerElements/iron-autogrow-textarea#^1.0.0",
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-input": "PolymerElements/iron-input#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.4",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "iron-validator-behavior": "PolymerElements/iron-validator-behavior#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/index.html
new file mode 100644
index 00000000000..73f417453aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/index.html
@@ -0,0 +1,156 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>paper-input demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-icon/iron-icon.html">
+ <link rel="import" href="../../iron-icons/iron-icons.html">
+ <link rel="import" href="../../paper-icon-button/paper-icon-button.html">
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../paper-input-container.html">
+ <link rel="import" href="../paper-input-error.html">
+ <link rel="import" href="../paper-input.html">
+ <link rel="import" href="../paper-textarea.html">
+ <link rel="import" href="ssn-input.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ paper-input {
+ display: block;
+ }
+
+ button {
+ width: 70px;
+ }
+
+ paper-icon-button {
+ color: var(--paper-red-300);
+ --paper-icon-button-ink-color: var(--paper-red-a100);
+ width: 23px; /* 15px + 2*4px for padding */
+ height: 23px;
+ padding: 0px 4px;
+ }
+
+ iron-icon {
+ padding-right: 5px;
+ }
+
+ #inputForValidation {
+ display: inline-block;
+ width: calc(100% - 75px);
+ }
+
+ demo-snippet.horizontal {
+ --demo-snippet-demo: {
+ @apply --layout-horizontal;
+ @apply --layout-justified;
+ @apply --layout-wrap;
+ }
+ }
+ demo-snippet.horizontal paper-input {
+ display: inline-block;
+ }
+ </style>
+ </custom-style>
+</head>
+<body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>Inputs can have different types, and be disabled</h3>
+ <demo-snippet>
+ <template>
+ <paper-input label="text input"></paper-input>
+ <paper-input label="text input" value="pre-filled"></paper-input>
+ <paper-textarea label="autoresizing textarea input"></paper-textarea>
+ <paper-input label="password input" type="password"></paper-input>
+ <paper-input label="disabled input" disabled value="batman"></paper-input>
+ </template>
+ </demo-snippet>
+
+ <h3>Inputs can have character counters</h3>
+ <demo-snippet>
+ <template>
+ <paper-input label="simple character counter" char-counter></paper-input>
+ <paper-input label="input with at most 10 characters" char-counter maxlength="10"></paper-input>
+ </template>
+ </demo-snippet>
+
+ <h3>The label can have different floating states</h3>
+ <demo-snippet>
+ <template>
+ <paper-input label="this label floats after typing"></paper-input>
+ <paper-input label="this label is always floating" always-float-label></paper-input>
+ <paper-input label="this label never floats" no-label-float></paper-input>
+ <paper-input label="this label is always floating" always-float-label placeholder="placeholder text"></paper-input>
+ </template>
+ </demo-snippet>
+
+ <h3>Inputs can validate automatically or on demand, and can have custom error messages</h3>
+ <demo-snippet>
+ <template>
+ <paper-input label="this input requires some text" required auto-validate error-message="needs some text!"></paper-input>
+ <paper-input label="this input requires letters only" auto-validate pattern="[a-zA-Z]*" error-message="letters only!"></paper-input>
+ <paper-input label="this input requires letters only" auto-validate pattern="[a-zA-Z]*" error-message="letters only!" value="pre-filled 123"></paper-input>
+ <paper-input label="this input will only let you type letters" auto-validate allowed-pattern="[a-zA-Z]"></paper-input>
+ <paper-input id="inputForValidation" required label="this input is manually validated" pattern="[a-zA-Z]*" error-message="letters only!"></paper-input>
+
+ <button onclick="validate()">Validate!</button>
+ </template>
+ </demo-snippet>
+
+ <h3>Inputs can have prefixes and suffixes</h3>
+ <demo-snippet class="horizontal">
+ <template>
+ <paper-input label="total" type="number">
+ <div slot="prefix">$</div>
+ </paper-input>
+
+ <paper-input label="username" id="inputWithButton">
+ <iron-icon icon="mail" slot="prefix"></iron-icon>
+ <div slot="suffix">@email.com</div>
+ <paper-icon-button slot="suffix" onclick="clearInput()"
+ icon="clear" alt="clear" title="clear">
+ </paper-icon-button>
+ </paper-input>
+ </template>
+ </demo-snippet>
+
+ <h3>Inputs can have custom logic</h3>
+ <demo-snippet>
+ <template>
+ <paper-input-container always-float-label auto-validate attr-for-value="value">
+ <label slot="label">Social Security Number</label>
+ <ssn-input class="paper-input-input" slot="input"></ssn-input>
+ <paper-input-error slot="add-on">SSN invalid!</paper-input-error>
+ </paper-input-container>
+ </template>
+ </demo-snippet>
+ </div>
+
+ <script>
+ function validate() {
+ document.getElementById('inputForValidation').validate();
+ }
+
+ function clearInput() {
+ document.getElementById('inputWithButton').value = '';
+ }
+ </script>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-input.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-input.html
new file mode 100644
index 00000000000..6d9270d1f8c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-input.html
@@ -0,0 +1,128 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-input/iron-input.html">
+<link rel="import" href="../../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="ssn-validator.html">
+
+<dom-module id="ssn-input">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ input {
+ font: inherit;
+ outline: none;
+ box-shadow: none;
+ border: none;
+ width: auto;
+ text-align: center;
+ }
+
+ .container {
+ @apply --layout-horizontal;
+ }
+ </style>
+
+ <ssn-validator></ssn-validator>
+ <div class="container">
+ <!-- To make the demo work with the hybrid element, we need to conditionally
+ load different templates: in 2.0 we lost is=, so the example same template
+ can't be used with iron-input 1.0 and 2.0.
+
+ You as a user of paper-input or paper-input-container don't
+ need to do this, unless you are trying to vend an element that uses
+ paper-input or paper-input-container _and_ works in both Polymer 1.0 or 2.0
+ -->
+ <span id="template-placeholder"></span>
+ </div>
+ </template>
+
+ <template id="v0">
+ <input is="iron-input" bind-value="{{_ssn1}}" maxlength="3" size="3" aria-label="First 3 digits of social security number">
+ -
+ <input is="iron-input" bind-value="{{_ssn2}}" maxlength="2" size="2" aria-label="Middle 2 digits of social security number">
+ -
+ <input is="iron-input" bind-value="{{_ssn3}}" maxlength="4" size="4" aria-label="Last 4 digits of social security number">
+ </template>
+
+ <template id="v1">
+ <iron-input bind-value="{{_ssn1}}" aria-label="First 3 digits of social security number">
+ <input maxlength="3" size="3">
+ </iron-input>
+ -
+ <iron-input bind-value="{{_ssn2}}" aria-label="Middle 2 digits of social security number">
+ <input maxlength="2" size="2">
+ </iron-input>
+ -
+ <iron-input bind-value="{{_ssn3}}" aria-label="Last 4 digits of social security number">
+ <input maxlength="4" size="4">
+ </iron-input>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'ssn-input',
+
+ behaviors: [
+ Polymer.IronValidatableBehavior
+ ],
+
+ properties: {
+ value: {
+ notify: true,
+ type: String
+ },
+
+ _ssn1: {
+ type: String,
+ value: ''
+ },
+
+ _ssn2: {
+ type: String,
+ value: ''
+ },
+
+ _ssn3: {
+ type: String,
+ value: ''
+ },
+
+ validator: {
+ type: String,
+ value: 'ssn-validator'
+ }
+ },
+
+ observers: [
+ '_computeValue(_ssn1,_ssn2,_ssn3)'
+ ],
+
+ _computeValue: function(ssn1, ssn2, ssn3) {
+ this.value = ssn1.trim() + '-' + ssn2.trim() + '-' + ssn3.trim();
+ },
+
+ beforeRegister: function() {
+ var template = Polymer.DomModule.import('ssn-input', 'template');
+ var version = Polymer.Element ? 'v1' : 'v0';
+ var inputTemplate = Polymer.DomModule.import('ssn-input', 'template#' + version);
+ var inputPlaceholder = template.content.querySelector('#template-placeholder');
+ inputPlaceholder.parentNode.replaceChild(inputTemplate.content, inputPlaceholder);
+ },
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-validator.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-validator.html
new file mode 100644
index 00000000000..e45365b51b2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/demo/ssn-validator.html
@@ -0,0 +1,27 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../../iron-validator-behavior/iron-validator-behavior.html">
+
+<script>
+ Polymer({
+ is: 'ssn-validator',
+
+ behaviors: [
+ Polymer.IronValidatorBehavior
+ ],
+
+ validate: function(value) {
+ // this regex validates incomplete ssn's (by design)
+ return !value || value.match(/^[0-9]{0,3}-[0-9]{0,2}-[0-9]{0,4}$/);
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/hero.svg
new file mode 100755
index 00000000000..146ffeac67c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/hero.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <rect x="49" y="53" width="2" height="18"/>
+ <path d="M188,78H37V44h151V78z M39,76h147V46H39V76z"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/index.html
new file mode 100644
index 00000000000..e6c9fadcee5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <title>paper-input</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page src="all-imports.html"></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-addon-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-addon-behavior.html
new file mode 100644
index 00000000000..7cc2a2a8797
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-addon-behavior.html
@@ -0,0 +1,44 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<script>
+
+ /**
+ * Use `Polymer.PaperInputAddonBehavior` to implement an add-on for `<paper-input-container>`. A
+ * add-on appears below the input, and may display information based on the input value and
+ * validity such as a character counter or an error message.
+ * @polymerBehavior
+ */
+ Polymer.PaperInputAddonBehavior = {
+ attached: function() {
+ // Workaround for https://github.com/webcomponents/shadydom/issues/96
+ Polymer.dom.flush();
+ this.fire('addon-attached');
+ },
+
+ /**
+ * The function called by `<paper-input-container>` when the input value or validity changes.
+ * @param {{
+ * inputElement: (Element|undefined),
+ * value: (string|undefined),
+ * invalid: boolean
+ * }} state -
+ * inputElement: The input element.
+ * value: The input value.
+ * invalid: True if the input value is invalid.
+ */
+ update: function(state) {
+ }
+
+ };
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-behavior.html
new file mode 100644
index 00000000000..566dc58e2e8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-behavior.html
@@ -0,0 +1,566 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+
+<script>
+
+ // Generate unique, monotonically increasing IDs for labels (needed by
+ // aria-labelledby) and add-ons.
+ Polymer.PaperInputHelper = {};
+ Polymer.PaperInputHelper.NextLabelID = 1;
+ Polymer.PaperInputHelper.NextAddonID = 1;
+
+ /**
+ * Use `Polymer.PaperInputBehavior` to implement inputs with `<paper-input-container>`. This
+ * behavior is implemented by `<paper-input>`. It exposes a number of properties from
+ * `<paper-input-container>` and `<input is="iron-input">` and they should be bound in your
+ * template.
+ *
+ * The input element can be accessed by the `inputElement` property if you need to access
+ * properties or methods that are not exposed.
+ * @polymerBehavior Polymer.PaperInputBehavior
+ */
+ Polymer.PaperInputBehaviorImpl = {
+
+ properties: {
+ /**
+ * Fired when the input changes due to user interaction.
+ *
+ * @event change
+ */
+
+ /**
+ * The label for this input. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * `<label>`'s content and `hidden` property, e.g.
+ * `<label hidden$="[[!label]]">[[label]]</label>` in your `template`
+ */
+ label: {
+ type: String
+ },
+
+ /**
+ * The value for this input. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<iron-input>`'s `bindValue`
+ * property, or the value property of your input that is `notify:true`.
+ */
+ value: {
+ notify: true,
+ type: String
+ },
+
+ /**
+ * Set to true to disable this input. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * both the `<paper-input-container>`'s and the input's `disabled` property.
+ */
+ disabled: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Returns true if the value is invalid. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to both the
+ * `<paper-input-container>`'s and the input's `invalid` property.
+ *
+ * If `autoValidate` is true, the `invalid` attribute is managed automatically,
+ * which can clobber attempts to manage it manually.
+ */
+ invalid: {
+ type: Boolean,
+ value: false,
+ notify: true
+ },
+
+ /**
+ * Set this to specify the pattern allowed by `preventInvalidInput`. If
+ * you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `allowedPattern`
+ * property.
+ */
+ allowedPattern: {
+ type: String
+ },
+
+ /**
+ * The type of the input. The supported types are the
+ * [native input's types](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_<input>_types).
+ * If you're using PaperInputBehavior to implement your own paper-input-like element,
+ * bind this to the (Polymer 1) `<input is="iron-input">`'s or (Polymer 2)
+ * `<iron-input>`'s `type` property.
+ */
+ type: {
+ type: String
+ },
+
+ /**
+ * The datalist of the input (if any). This should match the id of an existing `<datalist>`.
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `list` property.
+ */
+ list: {
+ type: String
+ },
+
+ /**
+ * A pattern to validate the `input` with. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<input is="iron-input">`'s `pattern` property.
+ */
+ pattern: {
+ type: String
+ },
+
+ /**
+ * Set to true to mark the input as required. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<input is="iron-input">`'s `required` property.
+ */
+ required: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * The error message to display when the input is invalid. If you're using
+ * PaperInputBehavior to implement your own paper-input-like element,
+ * bind this to the `<paper-input-error>`'s content, if using.
+ */
+ errorMessage: {
+ type: String
+ },
+
+ /**
+ * Set to true to show a character counter.
+ */
+ charCounter: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Set to true to disable the floating label. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<paper-input-container>`'s `noLabelFloat` property.
+ */
+ noLabelFloat: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Set to true to always float the label. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<paper-input-container>`'s `alwaysFloatLabel` property.
+ */
+ alwaysFloatLabel: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Set to true to auto-validate the input value. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<paper-input-container>`'s `autoValidate` property.
+ */
+ autoValidate: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Name of the validator to use. If you're using PaperInputBehavior to
+ * implement your own paper-input-like element, bind this to
+ * the `<input is="iron-input">`'s `validator` property.
+ */
+ validator: {
+ type: String
+ },
+
+ // HTMLInputElement attributes for binding if needed
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `autocomplete` property.
+ */
+ autocomplete: {
+ type: String,
+ value: 'off'
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `autofocus` property.
+ */
+ autofocus: {
+ type: Boolean,
+ observer: '_autofocusChanged'
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `inputmode` property.
+ */
+ inputmode: {
+ type: String
+ },
+
+ /**
+ * The minimum length of the input value.
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `minlength` property.
+ */
+ minlength: {
+ type: Number
+ },
+
+ /**
+ * The maximum length of the input value.
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `maxlength` property.
+ */
+ maxlength: {
+ type: Number
+ },
+
+ /**
+ * The minimum (numeric or date-time) input value.
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `min` property.
+ */
+ min: {
+ type: String
+ },
+
+ /**
+ * The maximum (numeric or date-time) input value.
+ * Can be a String (e.g. `"2000-01-01"`) or a Number (e.g. `2`).
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `max` property.
+ */
+ max: {
+ type: String
+ },
+
+ /**
+ * Limits the numeric or date-time increments.
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `step` property.
+ */
+ step: {
+ type: String
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `name` property.
+ */
+ name: {
+ type: String
+ },
+
+ /**
+ * A placeholder string in addition to the label. If this is set, the label will always float.
+ */
+ placeholder: {
+ type: String,
+ // need to set a default so _computeAlwaysFloatLabel is run
+ value: ''
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `readonly` property.
+ */
+ readonly: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `size` property.
+ */
+ size: {
+ type: Number
+ },
+
+ // Nonstandard attributes for binding if needed
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `autocapitalize` property.
+ */
+ autocapitalize: {
+ type: String,
+ value: 'none'
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `autocorrect` property.
+ */
+ autocorrect: {
+ type: String,
+ value: 'off'
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `autosave` property,
+ * used with type=search.
+ */
+ autosave: {
+ type: String
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `results` property,
+ * used with type=search.
+ */
+ results: {
+ type: Number
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the `<input is="iron-input">`'s `accept` property,
+ * used with type=file.
+ */
+ accept: {
+ type: String
+ },
+
+ /**
+ * If you're using PaperInputBehavior to implement your own paper-input-like
+ * element, bind this to the`<input is="iron-input">`'s `multiple` property,
+ * used with type=file.
+ */
+ multiple: {
+ type: Boolean
+ },
+
+ _ariaDescribedBy: {
+ type: String,
+ value: ''
+ },
+
+ _ariaLabelledBy: {
+ type: String,
+ value: ''
+ }
+
+ },
+
+ listeners: {
+ 'addon-attached': '_onAddonAttached',
+ },
+
+ keyBindings: {
+ 'shift+tab:keydown': '_onShiftTabDown'
+ },
+
+ hostAttributes: {
+ tabindex: 0
+ },
+
+ /**
+ * Returns a reference to the input element.
+ */
+ get inputElement() {
+ return this.$.input;
+ },
+
+ /**
+ * Returns a reference to the focusable element.
+ */
+ get _focusableElement() {
+ return this.inputElement;
+ },
+
+ created: function() {
+ // These types have some default placeholder text; overlapping
+ // the label on top of it looks terrible. Auto-float the label in this case.
+ this._typesThatHaveText = ["date", "datetime", "datetime-local", "month",
+ "time", "week", "file"];
+ },
+
+ attached: function() {
+ this._updateAriaLabelledBy();
+
+ // In the 2.0 version of the element, this is handled in `onIronInputReady`,
+ // i.e. after the native input has finished distributing. In the 1.0 version,
+ // the input is in the shadow tree, so it's already available.
+ if (!Polymer.Element && this.inputElement &&
+ this._typesThatHaveText.indexOf(this.inputElement.type) !== -1) {
+ this.alwaysFloatLabel = true;
+ }
+ },
+
+ _appendStringWithSpace: function(str, more) {
+ if (str) {
+ str = str + ' ' + more;
+ } else {
+ str = more;
+ }
+ return str;
+ },
+
+ _onAddonAttached: function(event) {
+ var target = Polymer.dom(event).rootTarget;
+ if (target.id) {
+ this._ariaDescribedBy = this._appendStringWithSpace(this._ariaDescribedBy, target.id);
+ } else {
+ var id = 'paper-input-add-on-' + Polymer.PaperInputHelper.NextAddonID++;
+ target.id = id;
+ this._ariaDescribedBy = this._appendStringWithSpace(this._ariaDescribedBy, id);
+ }
+ },
+
+ /**
+ * Validates the input element and sets an error style if needed.
+ *
+ * @return {boolean}
+ */
+ validate: function() {
+ return this.inputElement.validate();
+ },
+
+ /**
+ * Forward focus to inputElement. Overriden from IronControlState.
+ */
+ _focusBlurHandler: function(event) {
+ Polymer.IronControlState._focusBlurHandler.call(this, event);
+
+ // Forward the focus to the nested input.
+ if (this.focused && !this._shiftTabPressed && this._focusableElement) {
+ this._focusableElement.focus();
+ }
+ },
+
+ /**
+ * Handler that is called when a shift+tab keypress is detected by the menu.
+ *
+ * @param {CustomEvent} event A key combination event.
+ */
+ _onShiftTabDown: function(event) {
+ var oldTabIndex = this.getAttribute('tabindex');
+ this._shiftTabPressed = true;
+ this.setAttribute('tabindex', '-1');
+ this.async(function() {
+ this.setAttribute('tabindex', oldTabIndex);
+ this._shiftTabPressed = false;
+ }, 1);
+ },
+
+ /**
+ * If `autoValidate` is true, then validates the element.
+ */
+ _handleAutoValidate: function() {
+ if (this.autoValidate)
+ this.validate();
+ },
+
+ /**
+ * Restores the cursor to its original position after updating the value.
+ * @param {string} newValue The value that should be saved.
+ */
+ updateValueAndPreserveCaret: function(newValue) {
+ // Not all elements might have selection, and even if they have the
+ // right properties, accessing them might throw an exception (like for
+ // <input type=number>)
+ try {
+ var start = this.inputElement.selectionStart;
+ this.value = newValue;
+
+ // The cursor automatically jumps to the end after re-setting the value,
+ // so restore it to its original position.
+ this.inputElement.selectionStart = start;
+ this.inputElement.selectionEnd = start;
+ } catch (e) {
+ // Just set the value and give up on the caret.
+ this.value = newValue;
+ }
+ },
+
+ _computeAlwaysFloatLabel: function(alwaysFloatLabel, placeholder) {
+ return placeholder || alwaysFloatLabel;
+ },
+
+ _updateAriaLabelledBy: function() {
+ var label = Polymer.dom(this.root).querySelector('label');
+ if (!label) {
+ this._ariaLabelledBy = '';
+ return;
+ }
+ var labelledBy;
+ if (label.id) {
+ labelledBy = label.id;
+ } else {
+ labelledBy = 'paper-input-label-' + Polymer.PaperInputHelper.NextLabelID++;
+ label.id = labelledBy;
+ }
+ this._ariaLabelledBy = labelledBy;
+ },
+
+ _onChange:function(event) {
+ // In the Shadow DOM, the `change` event is not leaked into the
+ // ancestor tree, so we must do this manually.
+ // See https://w3c.github.io/webcomponents/spec/shadow/#events-that-are-not-leaked-into-ancestor-trees.
+ if (this.shadowRoot) {
+ this.fire(event.type, {sourceEvent: event}, {
+ node: this,
+ bubbles: event.bubbles,
+ cancelable: event.cancelable
+ });
+ }
+ },
+
+ _autofocusChanged: function() {
+ // Firefox doesn't respect the autofocus attribute if it's applied after
+ // the page is loaded (Chrome/WebKit do respect it), preventing an
+ // autofocus attribute specified in markup from taking effect when the
+ // element is upgraded. As a workaround, if the autofocus property is set,
+ // and the focus hasn't already been moved elsewhere, we take focus.
+ if (this.autofocus && this._focusableElement) {
+
+ // In IE 11, the default document.activeElement can be the page's
+ // outermost html element, but there are also cases (under the
+ // polyfill?) in which the activeElement is not a real HTMLElement, but
+ // just a plain object. We identify the latter case as having no valid
+ // activeElement.
+ var activeElement = document.activeElement;
+ var isActiveElementValid = activeElement instanceof HTMLElement;
+
+ // Has some other element has already taken the focus?
+ var isSomeElementActive = isActiveElementValid &&
+ activeElement !== document.body &&
+ activeElement !== document.documentElement; /* IE 11 */
+ if (!isSomeElementActive) {
+ // No specific element has taken the focus yet, so we can take it.
+ this._focusableElement.focus();
+ }
+ }
+ }
+ };
+
+ /** @polymerBehavior */
+ Polymer.PaperInputBehavior = [
+ Polymer.IronControlState,
+ Polymer.IronA11yKeysBehavior,
+ Polymer.PaperInputBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-char-counter.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-char-counter.html
new file mode 100644
index 00000000000..f08c0be045c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-char-counter.html
@@ -0,0 +1,99 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-styles/typography.html">
+<link rel="import" href="paper-input-addon-behavior.html">
+
+<!--
+`<paper-input-char-counter>` is a character counter for use with `<paper-input-container>`. It
+shows the number of characters entered in the input and the max length if it is specified.
+
+ <paper-input-container>
+ <input maxlength="20">
+ <paper-input-char-counter></paper-input-char-counter>
+ </paper-input-container>
+
+### Styling
+
+The following mixin is available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-input-char-counter` | Mixin applied to the element | `{}`
+-->
+
+<dom-module id="paper-input-char-counter">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ float: right;
+
+ @apply --paper-font-caption;
+ @apply --paper-input-char-counter;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ :host(:dir(rtl)) {
+ float: left;
+ }
+ </style>
+
+ <span>[[_charCounterStr]]</span>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-input-char-counter',
+
+ behaviors: [
+ Polymer.PaperInputAddonBehavior
+ ],
+
+ properties: {
+ _charCounterStr: {
+ type: String,
+ value: '0'
+ }
+ },
+
+ /**
+ * This overrides the update function in PaperInputAddonBehavior.
+ * @param {{
+ * inputElement: (Element|undefined),
+ * value: (string|undefined),
+ * invalid: boolean
+ * }} state -
+ * inputElement: The input element.
+ * value: The input value.
+ * invalid: True if the input value is invalid.
+ */
+ update: function(state) {
+ if (!state.inputElement) {
+ return;
+ }
+
+ state.value = state.value || '';
+
+ var counter = state.value.toString().length.toString();
+
+ if (state.inputElement.hasAttribute('maxlength')) {
+ counter += '/' + state.inputElement.getAttribute('maxlength');
+ }
+
+ this._charCounterStr = counter;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-container.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-container.html
new file mode 100644
index 00000000000..adf1c966fd1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-container.html
@@ -0,0 +1,682 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-styles/typography.html">
+
+<!--
+`<paper-input-container>` is a container for a `<label>`, an `<iron-input>` or
+`<textarea>` and optional add-on elements such as an error message or character
+counter, used to implement Material Design text fields.
+
+For example:
+
+ <paper-input-container>
+ <label slot="label">Your name</label>
+ <iron-input slot="input">
+ <input>
+ </iron-input>
+ // In Polymer 1.0, you would use `<input is="iron-input" slot="input">` instead of the above.
+ </paper-input-container>
+
+You can style the nested `<input>` however you want; if you want it to look like a
+Material Design input, you can style it with the --paper-input-container-shared-input-style mixin.
+
+Do not wrap `<paper-input-container>` around elements that already include it, such as `<paper-input>`.
+Doing so may cause events to bounce infinitely between the container and its contained element.
+
+### Listening for input changes
+
+By default, it listens for changes on the `bind-value` attribute on its children nodes and perform
+tasks such as auto-validating and label styling when the `bind-value` changes. You can configure
+the attribute it listens to with the `attr-for-value` attribute.
+
+### Using a custom input element
+
+You can use a custom input element in a `<paper-input-container>`, for example to implement a
+compound input field like a social security number input. The custom input element should have the
+`paper-input-input` class, have a `notify:true` value property and optionally implements
+`Polymer.IronValidatableBehavior` if it is validatable.
+
+ <paper-input-container attr-for-value="ssn-value">
+ <label slot="label">Social security number</label>
+ <ssn-input slot="input" class="paper-input-input"></ssn-input>
+ </paper-input-container>
+
+
+If you're using a `<paper-input-container>` imperatively, it's important to make sure
+that you attach its children (the `iron-input` and the optional `label`) before you
+attach the `<paper-input-container>` itself, so that it can be set up correctly.
+
+### Validation
+
+If the `auto-validate` attribute is set, the input container will validate the input and update
+the container styling when the input value changes.
+
+### Add-ons
+
+Add-ons are child elements of a `<paper-input-container>` with the `add-on` attribute and
+implements the `Polymer.PaperInputAddonBehavior` behavior. They are notified when the input value
+or validity changes, and may implement functionality such as error messages or character counters.
+They appear at the bottom of the input.
+
+### Prefixes and suffixes
+These are child elements of a `<paper-input-container>` with the `prefix`
+or `suffix` attribute, and are displayed inline with the input, before or after.
+
+ <paper-input-container>
+ <div slot="prefix">$</div>
+ <label slot="label">Total</label>
+ <iron-input slot="input">
+ <input>
+ </iron-input>
+ // In Polymer 1.0, you would use `<input is="iron-input" slot="input">` instead of the above.
+ <paper-icon-button slot="suffix" icon="clear"></paper-icon-button>
+ </paper-input-container>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-input-container-color` | Label and underline color when the input is not focused | `--secondary-text-color`
+`--paper-input-container-focus-color` | Label and underline color when the input is focused | `--primary-color`
+`--paper-input-container-invalid-color` | Label and underline color when the input is is invalid | `--error-color`
+`--paper-input-container-input-color` | Input foreground color | `--primary-text-color`
+`--paper-input-container` | Mixin applied to the container | `{}`
+`--paper-input-container-disabled` | Mixin applied to the container when it's disabled | `{}`
+`--paper-input-container-label` | Mixin applied to the label | `{}`
+`--paper-input-container-label-focus` | Mixin applied to the label when the input is focused | `{}`
+`--paper-input-container-label-floating` | Mixin applied to the label when floating | `{}`
+`--paper-input-container-input` | Mixin applied to the input | `{}`
+`--paper-input-container-input-disabled` | Mixin applied to the input when the component is disabled | `{}`
+`--paper-input-container-input-focus` | Mixin applied to the input when focused | `{}`
+`--paper-input-container-input-invalid` | Mixin applied to the input when invalid | `{}`
+`--paper-input-container-input-webkit-spinner` | Mixin applied to the webkit spinner | `{}`
+`--paper-input-container-input-webkit-clear` | Mixin applied to the webkit clear button | `{}`
+`--paper-input-container-ms-clear` | Mixin applied to the Internet Explorer clear button | `{}`
+`--paper-input-container-underline` | Mixin applied to the underline | `{}`
+`--paper-input-container-underline-focus` | Mixin applied to the underline when the input is focused | `{}`
+`--paper-input-container-underline-disabled` | Mixin applied to the underline when the input is disabled | `{}`
+`--paper-input-prefix` | Mixin applied to the input prefix | `{}`
+`--paper-input-suffix` | Mixin applied to the input suffix | `{}`
+
+This element is `display:block` by default, but you can set the `inline` attribute to make it
+`display:inline-block`.
+-->
+
+<dom-module id="paper-input-container">
+ <template>
+ <style>
+ :host {
+ display: block;
+ padding: 8px 0;
+
+ --paper-input-container-shared-input-style: {
+ position: relative; /* to make a stacking context */
+ outline: none;
+ box-shadow: none;
+ padding: 0;
+ width: 100%;
+ max-width: 100%;
+ background: transparent;
+ border: none;
+ color: var(--paper-input-container-input-color, var(--primary-text-color));
+ -webkit-appearance: none;
+ text-align: inherit;
+ vertical-align: bottom;
+
+ @apply --paper-font-subhead;
+ };
+
+ @apply --paper-input-container;
+ }
+
+ :host([inline]) {
+ display: inline-block;
+ }
+
+ :host([disabled]) {
+ pointer-events: none;
+ opacity: 0.33;
+
+ @apply --paper-input-container-disabled;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ [hidden] {
+ display: none !important;
+ }
+
+ .floated-label-placeholder {
+ @apply --paper-font-caption;
+ }
+
+ .underline {
+ height: 2px;
+ position: relative;
+ }
+
+ .focused-line {
+ @apply --layout-fit;
+ border-bottom: 2px solid var(--paper-input-container-focus-color, var(--primary-color));
+
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+ -webkit-transform: scale3d(0,1,1);
+ transform: scale3d(0,1,1);
+
+ @apply --paper-input-container-underline-focus;
+ }
+
+ .underline.is-highlighted .focused-line {
+ -webkit-transform: none;
+ transform: none;
+ -webkit-transition: -webkit-transform 0.25s;
+ transition: transform 0.25s;
+
+ @apply --paper-transition-easing;
+ }
+
+ .underline.is-invalid .focused-line {
+ border-color: var(--paper-input-container-invalid-color, var(--error-color));
+ -webkit-transform: none;
+ transform: none;
+ -webkit-transition: -webkit-transform 0.25s;
+ transition: transform 0.25s;
+
+ @apply --paper-transition-easing;
+ }
+
+ .unfocused-line {
+ @apply --layout-fit;
+ border-bottom: 1px solid var(--paper-input-container-color, var(--secondary-text-color));
+ @apply --paper-input-container-underline;
+ }
+
+ :host([disabled]) .unfocused-line {
+ border-bottom: 1px dashed;
+ border-color: var(--paper-input-container-color, var(--secondary-text-color));
+ @apply --paper-input-container-underline-disabled;
+ }
+
+ .input-wrapper {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+ position: relative;
+ }
+
+ .input-content {
+ @apply --layout-flex-auto;
+ @apply --layout-relative;
+ max-width: 100%;
+ }
+
+ .input-content ::slotted(label),
+ .input-content ::slotted(.paper-input-label) {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ font: inherit;
+ color: var(--paper-input-container-color, var(--secondary-text-color));
+ -webkit-transition: -webkit-transform 0.25s, width 0.25s;
+ transition: transform 0.25s, width 0.25s;
+ -webkit-transform-origin: left top;
+ transform-origin: left top;
+ /* Fix for safari not focusing 0-height date/time inputs with -webkit-apperance: none; */
+ min-height: 1px;
+
+ @apply --paper-font-common-nowrap;
+ @apply --paper-font-subhead;
+ @apply --paper-input-container-label;
+ @apply --paper-transition-easing;
+ }
+
+ .input-content.label-is-floating ::slotted(label),
+ .input-content.label-is-floating ::slotted(.paper-input-label) {
+ -webkit-transform: translateY(-75%) scale(0.75);
+ transform: translateY(-75%) scale(0.75);
+
+ /* Since we scale to 75/100 of the size, we actually have 100/75 of the
+ original space now available */
+ width: 133%;
+
+ @apply --paper-input-container-label-floating;
+ }
+
+ :host(:dir(rtl)) .input-content.label-is-floating ::slotted(label),
+ :host(:dir(rtl)) .input-content.label-is-floating ::slotted(.paper-input-label) {
+ right: 0;
+ left: auto;
+ -webkit-transform-origin: right top;
+ transform-origin: right top;
+ }
+
+ .input-content.label-is-highlighted ::slotted(label),
+ .input-content.label-is-highlighted ::slotted(.paper-input-label) {
+ color: var(--paper-input-container-focus-color, var(--primary-color));
+
+ @apply --paper-input-container-label-focus;
+ }
+
+ .input-content.is-invalid ::slotted(label),
+ .input-content.is-invalid ::slotted(.paper-input-label) {
+ color: var(--paper-input-container-invalid-color, var(--error-color));
+ }
+
+ .input-content.label-is-hidden ::slotted(label),
+ .input-content.label-is-hidden ::slotted(.paper-input-label) {
+ visibility: hidden;
+ }
+
+ .input-content ::slotted(iron-input) {
+ @apply --paper-input-container-shared-input-style;
+ }
+
+ .input-content ::slotted(input),
+ .input-content ::slotted(textarea),
+ .input-content ::slotted(iron-autogrow-textarea),
+ .input-content ::slotted(.paper-input-input) {
+ @apply --paper-input-container-shared-input-style;
+ @apply --paper-input-container-input;
+ }
+
+ .input-content ::slotted(input)::-webkit-outer-spin-button,
+ .input-content ::slotted(input)::-webkit-inner-spin-button {
+ @apply --paper-input-container-input-webkit-spinner;
+ }
+
+ .input-content.focused ::slotted(input),
+ .input-content.focused ::slotted(textarea),
+ .input-content.focused ::slotted(iron-autogrow-textarea),
+ .input-content.focused ::slotted(.paper-input-input) {
+ @apply --paper-input-container-input-focus;
+ }
+
+ .input-content.is-invalid ::slotted(input),
+ .input-content.is-invalid ::slotted(textarea),
+ .input-content.is-invalid ::slotted(iron-autogrow-textarea),
+ .input-content.is-invalid ::slotted(.paper-input-input) {
+ @apply --paper-input-container-input-invalid;
+ }
+
+ .prefix ::slotted(*) {
+ display: inline-block;
+ @apply --paper-font-subhead;
+ @apply --layout-flex-none;
+ @apply --paper-input-prefix;
+ }
+
+ .suffix ::slotted(*) {
+ display: inline-block;
+ @apply --paper-font-subhead;
+ @apply --layout-flex-none;
+
+ @apply --paper-input-suffix;
+ }
+
+ /* Firefox sets a min-width on the input, which can cause layout issues */
+ .input-content ::slotted(input) {
+ min-width: 0;
+ }
+
+ .input-content ::slotted(textarea) {
+ resize: none;
+ }
+
+ .add-on-content {
+ position: relative;
+ }
+
+ .add-on-content.is-invalid ::slotted(*) {
+ color: var(--paper-input-container-invalid-color, var(--error-color));
+ }
+
+ .add-on-content.is-highlighted ::slotted(*) {
+ color: var(--paper-input-container-focus-color, var(--primary-color));
+ }
+ </style>
+
+ <div class="floated-label-placeholder" aria-hidden="true" hidden="[[noLabelFloat]]">&nbsp;</div>
+
+ <div class="input-wrapper">
+ <span class="prefix"><slot name="prefix"></slot></span>
+
+ <div class$="[[_computeInputContentClass(noLabelFloat,alwaysFloatLabel,focused,invalid,_inputHasContent)]]" id="labelAndInputContainer">
+ <slot name="label"></slot>
+ <slot name="input"></slot>
+ </div>
+
+ <span class="suffix"><slot name="suffix"></slot></span>
+ </div>
+
+ <div class$="[[_computeUnderlineClass(focused,invalid)]]">
+ <div class="unfocused-line"></div>
+ <div class="focused-line"></div>
+ </div>
+
+ <div class$="[[_computeAddOnContentClass(focused,invalid)]]">
+ <slot name="add-on"></slot>
+ </div>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-input-container',
+
+ properties: {
+ /**
+ * Set to true to disable the floating label. The label disappears when the input value is
+ * not null.
+ */
+ noLabelFloat: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * Set to true to always float the floating label.
+ */
+ alwaysFloatLabel: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * The attribute to listen for value changes on.
+ */
+ attrForValue: {
+ type: String,
+ value: 'bind-value'
+ },
+
+ /**
+ * Set to true to auto-validate the input value when it changes.
+ */
+ autoValidate: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * True if the input is invalid. This property is set automatically when the input value
+ * changes if auto-validating, or when the `iron-input-validate` event is heard from a child.
+ */
+ invalid: {
+ observer: '_invalidChanged',
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * True if the input has focus.
+ */
+ focused: {
+ readOnly: true,
+ type: Boolean,
+ value: false,
+ notify: true
+ },
+
+ _addons: {
+ type: Array
+ // do not set a default value here intentionally - it will be initialized lazily when a
+ // distributed child is attached, which may occur before configuration for this element
+ // in polyfill.
+ },
+
+ _inputHasContent: {
+ type: Boolean,
+ value: false
+ },
+
+ _inputSelector: {
+ type: String,
+ value: 'input,iron-input,textarea,.paper-input-input'
+ },
+
+ _boundOnFocus: {
+ type: Function,
+ value: function() {
+ return this._onFocus.bind(this);
+ }
+ },
+
+ _boundOnBlur: {
+ type: Function,
+ value: function() {
+ return this._onBlur.bind(this);
+ }
+ },
+
+ _boundOnInput: {
+ type: Function,
+ value: function() {
+ return this._onInput.bind(this);
+ }
+ },
+
+ _boundValueChanged: {
+ type: Function,
+ value: function() {
+ return this._onValueChanged.bind(this);
+ }
+ }
+ },
+
+ listeners: {
+ 'addon-attached': '_onAddonAttached',
+ 'iron-input-validate': '_onIronInputValidate'
+ },
+
+ get _valueChangedEvent() {
+ return this.attrForValue + '-changed';
+ },
+
+ get _propertyForValue() {
+ return Polymer.CaseMap.dashToCamelCase(this.attrForValue);
+ },
+
+ get _inputElement() {
+ return Polymer.dom(this).querySelector(this._inputSelector);
+ },
+
+ get _inputElementValue() {
+ return this._inputElement[this._propertyForValue] || this._inputElement.value;
+ },
+
+ ready: function() {
+ if (!this._addons) {
+ this._addons = [];
+ }
+ this.addEventListener('focus', this._boundOnFocus, true);
+ this.addEventListener('blur', this._boundOnBlur, true);
+ },
+
+ attached: function() {
+ if (this.attrForValue) {
+ this._inputElement.addEventListener(this._valueChangedEvent, this._boundValueChanged);
+ } else {
+ this.addEventListener('input', this._onInput);
+ }
+
+ // Only validate when attached if the input already has a value.
+ if (this._inputElementValue && this._inputElementValue != '') {
+ this._handleValueAndAutoValidate(this._inputElement);
+ } else {
+ this._handleValue(this._inputElement);
+ }
+ },
+
+ _onAddonAttached: function(event) {
+ if (!this._addons) {
+ this._addons = [];
+ }
+ var target = event.target;
+ if (this._addons.indexOf(target) === -1) {
+ this._addons.push(target);
+ if (this.isAttached) {
+ this._handleValue(this._inputElement);
+ }
+ }
+ },
+
+ _onFocus: function() {
+ this._setFocused(true);
+ },
+
+ _onBlur: function() {
+ this._setFocused(false);
+ this._handleValueAndAutoValidate(this._inputElement);
+ },
+
+ _onInput: function(event) {
+ this._handleValueAndAutoValidate(event.target);
+ },
+
+ _onValueChanged: function(event) {
+ var input = event.target;
+
+ // Problem: if the input is required but has no text entered, we should
+ // only validate it on blur (so that an empty form doesn't come up red
+ // immediately; however, in this handler, we don't know whether this is
+ // the booting up value or a value in the future. I am assuming that the
+ // case we care about manifests itself when the value is undefined.
+ // If this causes future problems, we need to do something like track whether
+ // the iron-input-ready event has fired, and this handler came before that.
+
+ if (input.value === undefined) {
+ return;
+ }
+
+ this._handleValueAndAutoValidate(event.target);
+ },
+
+ _handleValue: function(inputElement) {
+ var value = this._inputElementValue;
+
+ // type="number" hack needed because this.value is empty until it's valid
+ if (value || value === 0 || (inputElement.type === 'number' && !inputElement.checkValidity())) {
+ this._inputHasContent = true;
+ } else {
+ this._inputHasContent = false;
+ }
+
+ this.updateAddons({
+ inputElement: inputElement,
+ value: value,
+ invalid: this.invalid
+ });
+ },
+
+ _handleValueAndAutoValidate: function(inputElement) {
+ if (this.autoValidate && inputElement) {
+ var valid;
+
+ if (inputElement.validate) {
+ valid = inputElement.validate(this._inputElementValue);
+ } else {
+ valid = inputElement.checkValidity();
+ }
+ this.invalid = !valid;
+ }
+
+ // Call this last to notify the add-ons.
+ this._handleValue(inputElement);
+ },
+
+ _onIronInputValidate: function(event) {
+ this.invalid = this._inputElement.invalid;
+ },
+
+ _invalidChanged: function() {
+ if (this._addons) {
+ this.updateAddons({invalid: this.invalid});
+ }
+ },
+
+ /**
+ * Call this to update the state of add-ons.
+ * @param {Object} state Add-on state.
+ */
+ updateAddons: function(state) {
+ for (var addon, index = 0; addon = this._addons[index]; index++) {
+ addon.update(state);
+ }
+ },
+
+ _computeInputContentClass: function(noLabelFloat, alwaysFloatLabel, focused, invalid, _inputHasContent) {
+ var cls = 'input-content';
+ if (!noLabelFloat) {
+ var label = this.querySelector('label');
+
+ if (alwaysFloatLabel || _inputHasContent) {
+ cls += ' label-is-floating';
+ // If the label is floating, ignore any offsets that may have been
+ // applied from a prefix element.
+ this.$.labelAndInputContainer.style.position = 'static';
+
+ if (invalid) {
+ cls += ' is-invalid';
+ } else if (focused) {
+ cls += " label-is-highlighted";
+ }
+ } else {
+ // When the label is not floating, it should overlap the input element.
+ if (label) {
+ this.$.labelAndInputContainer.style.position = 'relative';
+ }
+ if (invalid) {
+ cls += ' is-invalid';
+ }
+ }
+ } else {
+ if (_inputHasContent) {
+ cls += ' label-is-hidden';
+ }
+ if (invalid) {
+ cls += ' is-invalid';
+ }
+ }
+ if (focused) {
+ cls += ' focused';
+ }
+ return cls;
+ },
+
+ _computeUnderlineClass: function(focused, invalid) {
+ var cls = 'underline';
+ if (invalid) {
+ cls += ' is-invalid';
+ } else if (focused) {
+ cls += ' is-highlighted'
+ }
+ return cls;
+ },
+
+ _computeAddOnContentClass: function(focused, invalid) {
+ var cls = 'add-on-content';
+ if (invalid) {
+ cls += ' is-invalid';
+ } else if (focused) {
+ cls += ' is-highlighted'
+ }
+ return cls;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-error.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-error.html
new file mode 100644
index 00000000000..63f2421e6c1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input-error.html
@@ -0,0 +1,94 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-styles/typography.html">
+<link rel="import" href="paper-input-addon-behavior.html">
+
+<!--
+`<paper-input-error>` is an error message for use with `<paper-input-container>`. The error is
+displayed when the `<paper-input-container>` is `invalid`.
+
+ <paper-input-container>
+ <input pattern="[0-9]*">
+ <paper-input-error slot="add-on">Only numbers are allowed!</paper-input-error>
+ </paper-input-container>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-input-container-invalid-color` | The foreground color of the error | `--error-color`
+`--paper-input-error` | Mixin applied to the error | `{}`
+-->
+
+<dom-module id="paper-input-error">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ visibility: hidden;
+
+ color: var(--paper-input-container-invalid-color, var(--error-color));
+
+ @apply --paper-font-caption;
+ @apply --paper-input-error;
+ position: absolute;
+ left:0;
+ right:0;
+ }
+
+ :host([invalid]) {
+ visibility: visible;
+ };
+ </style>
+
+ <slot></slot>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-input-error',
+
+ behaviors: [
+ Polymer.PaperInputAddonBehavior
+ ],
+
+ properties: {
+ /**
+ * True if the error is showing.
+ */
+ invalid: {
+ readOnly: true,
+ reflectToAttribute: true,
+ type: Boolean
+ }
+ },
+
+ /**
+ * This overrides the update function in PaperInputAddonBehavior.
+ * @param {{
+ * inputElement: (Element|undefined),
+ * value: (string|undefined),
+ * invalid: boolean
+ * }} state -
+ * inputElement: The input element.
+ * value: The input value.
+ * invalid: True if the input value is invalid.
+ */
+ update: function(state) {
+ this._setInvalid(state.invalid);
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input.html
new file mode 100644
index 00000000000..f230466ba29
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-input.html
@@ -0,0 +1,316 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-form-element-behavior/iron-form-element-behavior.html">
+<link rel="import" href="../iron-input/iron-input.html">
+<link rel="import" href="paper-input-behavior.html">
+<link rel="import" href="paper-input-char-counter.html">
+<link rel="import" href="paper-input-container.html">
+<link rel="import" href="paper-input-error.html">
+
+<!--
+Material design: [Text fields](https://www.google.com/design/spec/components/text-fields.html)
+
+`<paper-input>` is a single-line text field with Material Design styling.
+
+ <paper-input label="Input label"></paper-input>
+
+It may include an optional error message or character counter.
+
+ <paper-input error-message="Invalid input!" label="Input label"></paper-input>
+ <paper-input char-counter label="Input label"></paper-input>
+
+It can also include custom prefix or suffix elements, which are displayed
+before or after the text input itself. In order for an element to be
+considered as a prefix, it must have the `prefix` attribute (and similarly
+for `suffix`).
+
+ <paper-input label="total">
+ <div prefix>$</div>
+ <paper-icon-button slot="suffix" icon="clear"></paper-icon-button>
+ </paper-input>
+
+A `paper-input` can use the native `type=search` or `type=file` features.
+However, since we can't control the native styling of the input (search icon,
+file button, date placeholder, etc.), in these cases the label will be
+automatically floated. The `placeholder` attribute can still be used for
+additional informational text.
+
+ <paper-input label="search!" type="search"
+ placeholder="search for cats" autosave="test" results="5">
+ </paper-input>
+
+See `Polymer.PaperInputBehavior` for more API docs.
+
+### Focus
+
+To focus a paper-input, you can call the native `focus()` method as long as the
+paper input has a tab index. Similarly, `blur()` will blur the element.
+
+### Styling
+
+See `Polymer.PaperInputContainer` for a list of custom properties used to
+style this element.
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-input-container-ms-clear` | Mixin applied to the Internet Explorer reveal button (the eyeball) | {}
+
+@group Paper Elements
+@element paper-input
+@hero hero.svg
+@demo demo/index.html
+
+-->
+
+<dom-module id="paper-input">
+ <template>
+ <style>
+ :host {
+ display: block;
+ }
+
+ :host([focused]) {
+ outline: none;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ input {
+ position: relative; /* to make a stacking context */
+ outline: none;
+ box-shadow: none;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ max-width: 100%;
+ background: transparent;
+ border: none;
+ color: var(--paper-input-container-input-color, var(--primary-text-color));
+ -webkit-appearance: none;
+ text-align: inherit;
+ vertical-align: bottom;
+
+ /* Firefox sets a min-width on the input, which can cause layout issues */
+ min-width: 0;
+
+ @apply --paper-font-subhead;
+ @apply --paper-input-container-input;
+ }
+
+ input:disabled {
+ @apply --paper-input-container-input-disabled;
+ }
+
+ input::-webkit-outer-spin-button,
+ input::-webkit-inner-spin-button {
+ @apply --paper-input-container-input-webkit-spinner;
+ }
+
+ input::-webkit-clear-button {
+ @apply --paper-input-container-input-webkit-clear;
+ }
+
+ input::-webkit-input-placeholder {
+ color: var(--paper-input-container-color, var(--secondary-text-color));
+ }
+
+ input:-moz-placeholder {
+ color: var(--paper-input-container-color, var(--secondary-text-color));
+ }
+
+ input::-moz-placeholder {
+ color: var(--paper-input-container-color, var(--secondary-text-color));
+ }
+
+ input::-ms-clear {
+ @apply --paper-input-container-ms-clear;
+ }
+
+ input::-ms-reveal {
+ @apply --paper-input-container-ms-reveal;
+ }
+
+ input:-ms-input-placeholder {
+ color: var(--paper-input-container-color, var(--secondary-text-color));
+ }
+
+ label {
+ pointer-events: none;
+ }
+ </style>
+
+ <paper-input-container id="container"
+ no-label-float="[[noLabelFloat]]"
+ always-float-label="[[_computeAlwaysFloatLabel(alwaysFloatLabel,placeholder)]]"
+ auto-validate$="[[autoValidate]]"
+ disabled$="[[disabled]]"
+ invalid="[[invalid]]">
+
+ <slot name="prefix" slot="prefix"></slot>
+
+ <label hidden$="[[!label]]" aria-hidden="true" for="input" slot="label">[[label]]</label>
+
+ <span id="template-placeholder"></span>
+
+ <slot name="suffix" slot="suffix"></slot>
+
+ <template is="dom-if" if="[[errorMessage]]">
+ <paper-input-error aria-live="assertive" slot="add-on">[[errorMessage]]</paper-input-error>
+ </template>
+
+ <template is="dom-if" if="[[charCounter]]">
+ <paper-input-char-counter slot="add-on"></paper-input-char-counter>
+ </template>
+
+ </paper-input-container>
+ </template>
+
+ <!-- This is a fresh new hell to make this element hybrid. Basically, in 2.0
+ we lost is=, so the example same template can't be used with iron-input 1.0 and 2.0.
+ Expect some conditional code (especially in the tests).
+ -->
+ <template id="v0">
+ <input is="iron-input" id="input" slot="input"
+ aria-labelledby$="[[_ariaLabelledBy]]"
+ aria-describedby$="[[_ariaDescribedBy]]"
+ disabled$="[[disabled]]"
+ title$="[[title]]"
+ bind-value="{{value}}"
+ invalid="{{invalid}}"
+ prevent-invalid-input="[[preventInvalidInput]]"
+ allowed-pattern="[[allowedPattern]]"
+ validator="[[validator]]"
+ type$="[[type]]"
+ pattern$="[[pattern]]"
+ required$="[[required]]"
+ autocomplete$="[[autocomplete]]"
+ autofocus$="[[autofocus]]"
+ inputmode$="[[inputmode]]"
+ minlength$="[[minlength]]"
+ maxlength$="[[maxlength]]"
+ min$="[[min]]"
+ max$="[[max]]"
+ step$="[[step]]"
+ name$="[[name]]"
+ placeholder$="[[placeholder]]"
+ readonly$="[[readonly]]"
+ list$="[[list]]"
+ size$="[[size]]"
+ autocapitalize$="[[autocapitalize]]"
+ autocorrect$="[[autocorrect]]"
+ on-change="_onChange"
+ tabindex$="[[tabIndex]]"
+ autosave$="[[autosave]]"
+ results$="[[results]]"
+ accept$="[[accept]]"
+ multiple$="[[multiple]]">
+ </template>
+
+ <template id="v1">
+ <!-- Need to bind maxlength so that the paper-input-char-counter works correctly -->
+ <iron-input bind-value="{{value}}" id="input" slot="input"
+ maxlength$="[[maxlength]]"
+ allowed-pattern="[[allowedPattern]]"
+ invalid="{{invalid}}"
+ validator="[[validator]]">
+ <input id="nativeInput"
+ aria-labelledby$="[[_ariaLabelledBy]]"
+ aria-describedby$="[[_ariaDescribedBy]]"
+ disabled$="[[disabled]]"
+ title$="[[title]]"
+ type$="[[type]]"
+ pattern$="[[pattern]]"
+ required$="[[required]]"
+ autocomplete$="[[autocomplete]]"
+ autofocus$="[[autofocus]]"
+ inputmode$="[[inputmode]]"
+ minlength$="[[minlength]]"
+ maxlength$="[[maxlength]]"
+ min$="[[min]]"
+ max$="[[max]]"
+ step$="[[step]]"
+ name$="[[name]]"
+ placeholder$="[[placeholder]]"
+ readonly$="[[readonly]]"
+ list$="[[list]]"
+ size$="[[size]]"
+ autocapitalize$="[[autocapitalize]]"
+ autocorrect$="[[autocorrect]]"
+ on-change="_onChange"
+ tabindex$="[[tabIndex]]"
+ autosave$="[[autosave]]"
+ results$="[[results]]"
+ accept$="[[accept]]"
+ multiple$="[[multiple]]">
+ </iron-input>
+ </template>
+
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-input',
+
+ behaviors: [
+ Polymer.PaperInputBehavior,
+ Polymer.IronFormElementBehavior
+ ],
+
+ beforeRegister: function() {
+ // We need to tell which kind of of template to stamp based on
+ // what kind of `iron-input` we got, but because of polyfills and
+ // custom elements differences between v0 and v1, the safest bet is
+ // to check a particular method we know the iron-input#2.x can have.
+ // If it doesn't have it, then it's an iron-input#1.x.
+ var ironInput = document.createElement('iron-input');
+ var version = typeof ironInput._initSlottedInput == 'function' ? 'v1' : 'v0';
+ var template = Polymer.DomModule.import('paper-input', 'template');
+ var inputTemplate = Polymer.DomModule.import('paper-input', 'template#' + version);
+ var inputPlaceholder = template.content.querySelector('#template-placeholder');
+ if (inputPlaceholder) {
+ inputPlaceholder.parentNode.replaceChild(inputTemplate.content, inputPlaceholder);
+ }
+ // else it's already been processed, probably in superclass
+ },
+
+ /**
+ * Returns a reference to the focusable element. Overridden from PaperInputBehavior
+ * to correctly focus the native input.
+ */
+ get _focusableElement() {
+ return Polymer.Element ? this.inputElement._inputElement : this.inputElement;
+ },
+
+ // Note: This event is only available in the 1.0 version of this element.
+ // In 2.0, the functionality of `_onIronInputReady` is done in
+ // PaperInputBehavior::attached.
+ listeners: {
+ 'iron-input-ready': '_onIronInputReady'
+ },
+
+ _onIronInputReady: function() {
+ if (this.inputElement &&
+ this._typesThatHaveText.indexOf(this.$.nativeInput.type) !== -1) {
+ this.alwaysFloatLabel = true;
+ }
+
+ // Only validate when attached if the input already has a value.
+ if (!!this.inputElement.bindValue) {
+ this.$.container._handleValueAndAutoValidate(this.inputElement);
+ }
+ },
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-textarea.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-textarea.html
new file mode 100644
index 00000000000..9416c621e75
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-input/paper-textarea.html
@@ -0,0 +1,165 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-autogrow-textarea/iron-autogrow-textarea.html">
+<link rel="import" href="../iron-form-element-behavior/iron-form-element-behavior.html">
+<link rel="import" href="paper-input-behavior.html">
+<link rel="import" href="paper-input-char-counter.html">
+<link rel="import" href="paper-input-container.html">
+<link rel="import" href="paper-input-error.html">
+
+<!--
+`<paper-textarea>` is a multi-line text field with Material Design styling.
+
+ <paper-textarea label="Textarea label"></paper-textarea>
+
+See `Polymer.PaperInputBehavior` for more API docs.
+
+### Validation
+
+Currently only `required` and `maxlength` validation is supported.
+
+### Styling
+
+See `Polymer.PaperInputContainer` for a list of custom properties used to
+style this element.
+-->
+
+<dom-module id="paper-textarea">
+ <template>
+ <style>
+ :host {
+ display: block;
+ }
+
+ :host([hidden]) {
+ display: none !important;
+ }
+
+ label {
+ pointer-events: none;
+ }
+ </style>
+
+ <paper-input-container no-label-float$="[[noLabelFloat]]"
+ always-float-label="[[_computeAlwaysFloatLabel(alwaysFloatLabel,placeholder)]]"
+ auto-validate$="[[autoValidate]]"
+ disabled$="[[disabled]]"
+ invalid="[[invalid]]">
+
+ <label hidden$="[[!label]]" aria-hidden="true" for="input" slot="label">[[label]]</label>
+
+ <iron-autogrow-textarea id="input" class="paper-input-input" slot="input"
+ aria-labelledby$="[[_ariaLabelledBy]]"
+ aria-describedby$="[[_ariaDescribedBy]]"
+ bind-value="{{value}}"
+ invalid="{{invalid}}"
+ validator$="[[validator]]"
+ disabled$="[[disabled]]"
+ autocomplete$="[[autocomplete]]"
+ autofocus$="[[autofocus]]"
+ inputmode$="[[inputmode]]"
+ name$="[[name]]"
+ placeholder$="[[placeholder]]"
+ readonly$="[[readonly]]"
+ required$="[[required]]"
+ minlength$="[[minlength]]"
+ maxlength$="[[maxlength]]"
+ autocapitalize$="[[autocapitalize]]"
+ rows$="[[rows]]"
+ max-rows$="[[maxRows]]"
+ on-change="_onChange"></iron-autogrow-textarea>
+
+ <template is="dom-if" if="[[errorMessage]]">
+ <paper-input-error aria-live="assertive" slot="add-on">[[errorMessage]]</paper-input-error>
+ </template>
+
+ <template is="dom-if" if="[[charCounter]]">
+ <paper-input-char-counter slot="add-on"></paper-input-char-counter>
+ </template>
+
+ </paper-input-container>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-textarea',
+
+ behaviors: [
+ Polymer.PaperInputBehavior,
+ Polymer.IronFormElementBehavior,
+ ],
+
+ properties: {
+ _ariaLabelledBy: {
+ observer: '_ariaLabelledByChanged',
+ type: String,
+ },
+
+ _ariaDescribedBy: {
+ observer: '_ariaDescribedByChanged',
+ type: String,
+ },
+
+ /**
+ * The initial number of rows.
+ *
+ * @attribute rows
+ * @type number
+ * @default 1
+ */
+ rows: {
+ type: Number,
+ value: 1,
+ },
+
+ /**
+ * The maximum number of rows this element can grow to until it
+ * scrolls. 0 means no maximum.
+ *
+ * @attribute maxRows
+ * @type number
+ * @default 0
+ */
+ maxRows: {
+ type: Number,
+ value: 0,
+ },
+ },
+
+ get selectionStart() {
+ return this.$.input.textarea.selectionStart;
+ },
+ set selectionStart(start) {
+ this.$.input.textarea.selectionStart = start;
+ },
+
+ get selectionEnd() {
+ return this.$.input.textarea.selectionEnd;
+ },
+ set selectionEnd(end) {
+ this.$.input.textarea.selectionEnd = end;
+ },
+
+ _ariaLabelledByChanged: function(ariaLabelledBy) {
+ this.$.input.textarea.setAttribute('aria-labelledby', ariaLabelledBy);
+ },
+
+ _ariaDescribedByChanged: function(ariaDescribedBy) {
+ this.$.input.textarea.setAttribute('aria-describedby', ariaDescribedBy);
+ },
+
+ get _focusableElement() {
+ return this.$.input.textarea;
+ },
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.bower.json
new file mode 100644
index 00000000000..35f1877e7e0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.bower.json
@@ -0,0 +1,81 @@
+{
+ "name": "paper-item",
+ "version": "2.0.0",
+ "description": "A material-design styled list item",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "item"
+ ],
+ "main": [
+ "paper-item.html",
+ "paper-icon-item.html",
+ "paper-item-body.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-item"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-item",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-input": "PolymerElements/paper-input#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-input": "PolymerElements/paper-input#^1.1.22"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.0.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.0.0",
+ "commit": "07910f6f76e1042286e931da923bff8ceabc3dc6"
+ },
+ "_source": "https://github.com/PolymerElements/paper-item.git",
+ "_target": "~2.0",
+ "_originalSource": "PolymerElements/paper-item"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..c38fb3e543a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-item/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.travis.yml
new file mode 100644
index 00000000000..8b74dcffe62
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/.travis.yml
@@ -0,0 +1,26 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+env:
+ global:
+ - secure: >-
+ L1TRyuZxs3duna5l8uOs3l5OsS0s8hWzTh2J6T7yryOFkwI3giar8O3p9DmQk8+yB45r1J6iJVBqhwaYP9A2ZOh/2J6zfXACCkFvFfDZQA3A3QGQf5SynQyoG7RpvHdm9qMymIKAPbbPzM1f1uyN79R0vfNXW+q3OziWyARI9Zo=
+ - secure: >-
+ IqEh0JXayftVmAwAkyytSmONzK9BuhECFLURSri6wowjkGaYN+76m6hry1tWxoW9cdkgKX5l9WPekBtKtSJsB+jYIJTUtl258j+bktiSFK9laBH+97NOcCC8n0tNdgMO/CCF4cX//eWaelPnCjriJv6evdefVdrkImSZflWYmsc=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/README.md
new file mode 100644
index 00000000000..5148d84e47e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/README.md
@@ -0,0 +1,163 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+paper-icon-item.html paper-item-behavior.html paper-item-body.html paper-item.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/paper-item.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-item)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/paper-item)_
+
+
+## &lt;paper-item&gt;
+
+Material design: [Lists](https://www.google.com/design/spec/components/lists.html)
+
+`<paper-item>` is an interactive list item. By default, it is a horizontal flexbox.
+
+```html
+<paper-item>Item</paper-item>
+```
+
+Use this element with `<paper-item-body>` to make Material Design styled two-line and three-line
+items.
+
+```html
+<paper-item>
+ <paper-item-body two-line>
+ <div>Show your status</div>
+ <div secondary>Your status is visible to everyone</div>
+ </paper-item-body>
+ <iron-icon icon="warning"></iron-icon>
+</paper-item>
+```
+
+To use `paper-item` as a link, wrap it in an anchor tag. Since `paper-item` will
+already receive focus, you may want to prevent the anchor tag from receiving
+focus as well by setting its tabindex to -1.
+
+```html
+<a href="https://www.polymer-project.org/" tabindex="-1">
+ <paper-item raised>Polymer Project</paper-item>
+</a>
+```
+
+If you are concerned about performance and want to use `paper-item` in a `paper-listbox`
+with many items, you can just use a native `button` with the `paper-item` class
+applied (provided you have correctly included the shared styles):
+
+```html
+<style is="custom-style" include="paper-item-shared-styles"></style>
+
+<paper-listbox>
+ <button class="paper-item" role="option">Inbox</button>
+ <button class="paper-item" role="option">Starred</button>
+ <button class="paper-item" role="option">Sent mail</button>
+</paper-listbox>
+```
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-item-min-height` | Minimum height of the item | `48px` |
+| `--paper-item` | Mixin applied to the item | `{}` |
+| `--paper-item-selected-weight` | The font weight of a selected item | `bold` |
+| `--paper-item-selected` | Mixin applied to selected paper-items | `{}` |
+| `--paper-item-disabled-color` | The color for disabled paper-items | `--disabled-text-color` |
+| `--paper-item-disabled` | Mixin applied to disabled paper-items | `{}` |
+| `--paper-item-focused` | Mixin applied to focused paper-items | `{}` |
+| `--paper-item-focused-before` | Mixin applied to :before focused paper-items | `{}` |
+
+### Accessibility
+
+This element has `role="listitem"` by default. Depending on usage, it may be more appropriate to set
+`role="menuitem"`, `role="menuitemcheckbox"` or `role="menuitemradio"`.
+
+```html
+<paper-item role="menuitemcheckbox">
+ <paper-item-body>
+ Show your status
+ </paper-item-body>
+ <paper-checkbox></paper-checkbox>
+</paper-item>
+```
+
+
+
+## &lt;paper-icon-item&gt;
+
+`<paper-icon-item>` is a convenience element to make an item with icon. It is an interactive list
+item with a fixed-width icon area, according to Material Design. This is useful if the icons are of
+varying widths, but you want the item bodies to line up. Use this like a `<paper-item>`. The child
+node with the attribute `item-icon` is placed in the icon area.
+
+```html
+<paper-icon-item>
+ <iron-icon icon="favorite" item-icon></iron-icon>
+ Favorite
+</paper-icon-item>
+<paper-icon-item>
+ <div class="avatar" item-icon></div>
+ Avatar
+</paper-icon-item>
+```
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-item-icon-width` | Width of the icon area | `56px` |
+| `--paper-item-icon` | Mixin applied to the icon area | `{}` |
+| `--paper-icon-item` | Mixin applied to the item | `{}` |
+| `--paper-item-selected-weight` | The font weight of a selected item | `bold` |
+| `--paper-item-selected` | Mixin applied to selected paper-items | `{}` |
+| `--paper-item-disabled-color` | The color for disabled paper-items | `--disabled-text-color` |
+| `--paper-item-disabled` | Mixin applied to disabled paper-items | `{}` |
+| `--paper-item-focused` | Mixin applied to focused paper-items | `{}` |
+| `--paper-item-focused-before` | Mixin applied to :before focused paper-items | `{}` |
+
+
+
+## &lt;paper-item-body&gt;
+
+Use `<paper-item-body>` in a `<paper-item>` or `<paper-icon-item>` to make two- or
+three- line items. It is a flex item that is a vertical flexbox.
+
+```html
+<paper-item>
+ <paper-item-body two-line>
+ <div>Show your status</div>
+ <div secondary>Your status is visible to everyone</div>
+ </paper-item-body>
+</paper-item>
+```
+
+The child elements with the `secondary` attribute is given secondary text styling.
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-item-body-two-line-min-height` | Minimum height of a two-line item | `72px` |
+| `--paper-item-body-three-line-min-height` | Minimum height of a three-line item | `88px` |
+| `--paper-item-body-secondary-color` | Foreground color for the `secondary` area | `--secondary-text-color` |
+| `--paper-item-body-secondary` | Mixin applied to the `secondary` area | `{}` |
+
+
+
+<!-- No docs for Polymer.PaperItemBehavior found. -->
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/all-imports.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/all-imports.html
new file mode 100644
index 00000000000..4b1583fe410
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/all-imports.html
@@ -0,0 +1,13 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="paper-item.html">
+<link rel="import" href="paper-item-body.html">
+<link rel="import" href="paper-icon-item.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/bower.json
new file mode 100644
index 00000000000..2aa61f4a0ac
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/bower.json
@@ -0,0 +1,72 @@
+{
+ "name": "paper-item",
+ "version": "2.0.0",
+ "description": "A material-design styled list item",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "item"
+ ],
+ "main": [
+ "paper-item.html",
+ "paper-icon-item.html",
+ "paper-item-body.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-item"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-item",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-icons": "PolymerElements/iron-icons#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-input": "PolymerElements/paper-input#1 - 2"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-input": "PolymerElements/paper-input#^1.1.22"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/demo/index.html
new file mode 100644
index 00000000000..3da7ec291f9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/demo/index.html
@@ -0,0 +1,197 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>paper-item demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-icon/iron-icon.html">
+ <link rel="import" href="../../iron-icons/iron-icons.html">
+ <link rel="import" href="../../iron-icons/communication-icons.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../paper-icon-button/paper-icon-button.html">
+ <link rel="import" href="../paper-icon-item.html">
+ <link rel="import" href="../paper-item.html">
+ <link rel="import" href="../paper-item-body.html">
+ <link rel="import" href="../../paper-styles/color.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ div[role="listbox"] {
+ border: 1px solid #e5e5e5;
+ }
+ .avatar {
+ display: inline-block;
+ box-sizing: border-box;
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ background: var(--paper-amber-500);
+ }
+
+ .blue {
+ background-color: var(--paper-light-blue-300);
+ }
+ </style>
+ </custom-style>
+</head>
+<body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>Paper-items are simple list elements, ideally used in a paper-listbox or
+ an element with <i>role="listbox"</i></h3>
+ <demo-snippet>
+ <template>
+ <div role="listbox">
+ <paper-item>Inbox</paper-item>
+ <paper-item>Starred</paper-item>
+ <paper-item>Sent mail</paper-item>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h3>They can be styled using custom properties</h3>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-item.fancy {
+ --paper-item-focused: {
+ background: var(--paper-amber-500);
+ font-weight: bold;
+ };
+ --paper-item-focused-before: {
+ opacity: 0;
+ };
+ }
+ </style>
+ </custom-style>
+ <div role="listbox">
+ <paper-item class="fancy">Inbox</paper-item>
+ <paper-item class="fancy">Starred</paper-item>
+ <paper-item class="fancy">Sent mail</paper-item>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h3>To add a leading element, use a paper-icon-item with a <code>slot="item-icon"</code>
+ attribute in webcomponents v1. This leading image can be an iron-icon, or any other regular element.</h3>
+ <demo-snippet>
+ <template>
+ <div role="listbox">
+ <paper-icon-item>
+ <iron-icon icon="inbox" slot="item-icon"></iron-icon>
+ Inbox
+ </paper-icon-item>
+ <paper-icon-item>
+ <iron-icon icon="star" slot="item-icon"></iron-icon>
+ Starred
+ </paper-icon-item>
+ <paper-icon-item>
+ <div class="avatar blue" slot="item-icon"></div>
+ Alphonso Engelking
+ </paper-icon-item>
+ <paper-icon-item>
+ <div class="avatar" slot="item-icon"></div>
+ Angela Decker
+ </paper-icon-item>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h3>For two-line items, use a paper-item-body inside a paper-item or paper-icon-item</h3>
+ <demo-snippet>
+ <template>
+ <div role="listbox">
+ <paper-item>
+ <paper-item-body two-line>
+ <div>Profile Photo</div>
+ <div secondary>Change your Google+ profile photo</div>
+ </paper-item-body>
+ </paper-item>
+ <paper-icon-item>
+ <iron-icon icon="communication:phone" slot="item-icon">
+ </iron-icon>
+ <paper-item-body two-line>
+ <div>(650) 555-1234</div>
+ <div secondary>Mobile</div>
+ </paper-item-body>
+ </paper-icon-item>
+ <paper-icon-item>
+ <div class="avatar blue" slot="item-icon"></div>
+ <paper-item-body two-line>
+ <div>Alphonso Engelking</div>
+ <div secondary>Change photo</div>
+ </paper-item-body>
+ </paper-icon-item>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h3>Complex layouts are usually a combination of all these elements</h3>
+ <demo-snippet>
+ <template>
+ <div role="listbox">
+ <paper-icon-item>
+ <div class="avatar blue" slot="item-icon"></div>
+ <paper-item-body two-line>
+ <div>Photos</div>
+ <div secondary>Jan 9, 2014</div>
+ </paper-item-body>
+ <paper-icon-button icon="star" alt="favourite this!">
+ </paper-icon-button>
+ </paper-icon-item>
+ <paper-icon-item>
+ <div class="avatar" slot="item-icon"></div>
+ <paper-item-body two-line>
+ <div>Recipes</div>
+ <div secondary>Jan 17, 2014</div>
+ </paper-item-body>
+ <paper-icon-button icon="star" alt="favourite this!">
+ </paper-icon-button>
+ </paper-icon-item>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h3>Paper-items can be used as links</h3>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ .paper-item-link {
+ color: inherit;
+ text-decoration: none;
+ }
+ </style>
+ </custom-style>
+ <div role="listbox">
+ <a class="paper-item-link" href="#inbox" tabindex="-1">
+ <paper-item>Inbox</paper-item>
+ </a>
+ <a class="paper-item-link" href="#starred" tabindex="-1">
+ <paper-item>Starred</paper-item>
+ </a>
+ <a class="paper-item-link" href="#sent" tabindex="-1">
+ <paper-item>Sent mail</paper-item>
+ </a>
+ </div>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/index.html
new file mode 100644
index 00000000000..b409ed121cd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/index.html
@@ -0,0 +1,30 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<!doctype html>
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-item</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page src="all-imports.html"></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-icon-item.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-icon-item.html
new file mode 100644
index 00000000000..44581ed5d45
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-icon-item.html
@@ -0,0 +1,86 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-styles/typography.html">
+<link rel="import" href="paper-item-behavior.html">
+<link rel="import" href="paper-item-shared-styles.html">
+
+<!--
+`<paper-icon-item>` is a convenience element to make an item with icon. It is an interactive list
+item with a fixed-width icon area, according to Material Design. This is useful if the icons are of
+varying widths, but you want the item bodies to line up. Use this like a `<paper-item>`. The child
+node with the slot name `item-icon` is placed in the icon area.
+
+ <paper-icon-item>
+ <iron-icon icon="favorite" slot="item-icon"></iron-icon>
+ Favorite
+ </paper-icon-item>
+ <paper-icon-item>
+ <div class="avatar" slot="item-icon"></div>
+ Avatar
+ </paper-icon-item>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+------------------------------|------------------------------------------------|----------
+`--paper-item-icon-width` | Width of the icon area | `56px`
+`--paper-item-icon` | Mixin applied to the icon area | `{}`
+`--paper-icon-item` | Mixin applied to the item | `{}`
+`--paper-item-selected-weight`| The font weight of a selected item | `bold`
+`--paper-item-selected` | Mixin applied to selected paper-items | `{}`
+`--paper-item-disabled-color` | The color for disabled paper-items | `--disabled-text-color`
+`--paper-item-disabled` | Mixin applied to disabled paper-items | `{}`
+`--paper-item-focused` | Mixin applied to focused paper-items | `{}`
+`--paper-item-focused-before` | Mixin applied to :before focused paper-items | `{}`
+-->
+
+<dom-module id="paper-icon-item">
+ <template>
+ <style include="paper-item-shared-styles"></style>
+ <style>
+ :host {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+ @apply --paper-font-subhead;
+
+ @apply --paper-item;
+ @apply --paper-icon-item;
+ }
+
+ .content-icon {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+
+ width: var(--paper-item-icon-width, 56px);
+ @apply --paper-item-icon;
+ }
+ </style>
+
+ <div id="contentIcon" class="content-icon">
+ <slot name="item-icon"></slot>
+ </div>
+ <slot></slot>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-icon-item',
+
+ behaviors: [
+ Polymer.PaperItemBehavior
+ ]
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-behavior.html
new file mode 100644
index 00000000000..f97b262b737
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-behavior.html
@@ -0,0 +1,36 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-button-state.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+
+<!--
+`PaperItemBehavior` is a convenience behavior shared by <paper-item> and
+<paper-icon-item> that manages the shared control states and attributes of
+the items.
+-->
+
+<script>
+ /** @polymerBehavior Polymer.PaperItemBehavior */
+ Polymer.PaperItemBehaviorImpl = {
+ hostAttributes: {
+ role: 'option',
+ tabindex: '0'
+ }
+ };
+
+ /** @polymerBehavior */
+ Polymer.PaperItemBehavior = [
+ Polymer.IronButtonState,
+ Polymer.IronControlState,
+ Polymer.PaperItemBehaviorImpl
+ ];
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-body.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-body.html
new file mode 100644
index 00000000000..4f5079f77f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-body.html
@@ -0,0 +1,83 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-styles/typography.html">
+
+<!--
+Use `<paper-item-body>` in a `<paper-item>` or `<paper-icon-item>` to make two- or
+three- line items. It is a flex item that is a vertical flexbox.
+
+ <paper-item>
+ <paper-item-body two-line>
+ <div>Show your status</div>
+ <div secondary>Your status is visible to everyone</div>
+ </paper-item-body>
+ </paper-item>
+
+The child elements with the `secondary` attribute is given secondary text styling.
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-item-body-two-line-min-height` | Minimum height of a two-line item | `72px`
+`--paper-item-body-three-line-min-height` | Minimum height of a three-line item | `88px`
+`--paper-item-body-secondary-color` | Foreground color for the `secondary` area | `--secondary-text-color`
+`--paper-item-body-secondary` | Mixin applied to the `secondary` area | `{}`
+
+-->
+
+<dom-module id="paper-item-body">
+ <template>
+ <style>
+ :host {
+ overflow: hidden; /* needed for text-overflow: ellipsis to work on ff */
+ @apply --layout-vertical;
+ @apply --layout-center-justified;
+ @apply --layout-flex;
+ }
+
+ :host([two-line]) {
+ min-height: var(--paper-item-body-two-line-min-height, 72px);
+ }
+
+ :host([three-line]) {
+ min-height: var(--paper-item-body-three-line-min-height, 88px);
+ }
+
+ :host > ::slotted(*) {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ :host > ::slotted([secondary]) {
+ @apply --paper-font-body1;
+
+ color: var(--paper-item-body-secondary-color, var(--secondary-text-color));
+
+ @apply --paper-item-body-secondary;
+ }
+ </style>
+
+ <slot></slot>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-item-body'
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-shared-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-shared-styles.html
new file mode 100644
index 00000000000..bc7aba678d7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item-shared-styles.html
@@ -0,0 +1,70 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-styles/color.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-styles/typography.html">
+
+<dom-module id="paper-item-shared-styles">
+ <template>
+ <style>
+ :host, .paper-item {
+ display: block;
+ position: relative;
+ min-height: var(--paper-item-min-height, 48px);
+ padding: 0px 16px;
+ }
+
+ .paper-item {
+ @apply --paper-font-subhead;
+ border:none;
+ outline: none;
+ background: white;
+ width: 100%;
+ text-align: left;
+ }
+
+ :host([hidden]), .paper-item[hidden] {
+ display: none !important;
+ }
+
+ :host(.iron-selected), .paper-item.iron-selected {
+ font-weight: var(--paper-item-selected-weight, bold);
+
+ @apply --paper-item-selected;
+ }
+
+ :host([disabled]), .paper-item[disabled] {
+ color: var(--paper-item-disabled-color, var(--disabled-text-color));
+
+ @apply --paper-item-disabled;
+ }
+
+ :host(:focus), .paper-item:focus {
+ position: relative;
+ outline: 0;
+
+ @apply --paper-item-focused;
+ }
+
+ :host(:focus):before, .paper-item:focus:before {
+ @apply --layout-fit;
+
+ background: currentColor;
+ content: '';
+ opacity: var(--dark-divider-opacity);
+ pointer-events: none;
+
+ @apply --paper-item-focused-before;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item.html
new file mode 100644
index 00000000000..6c8946f0e03
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-item/paper-item.html
@@ -0,0 +1,110 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="paper-item-behavior.html">
+<link rel="import" href="paper-item-shared-styles.html">
+
+<!--
+Material design: [Lists](https://www.google.com/design/spec/components/lists.html)
+
+`<paper-item>` is an interactive list item. By default, it is a horizontal flexbox.
+
+ <paper-item>Item</paper-item>
+
+Use this element with `<paper-item-body>` to make Material Design styled two-line and three-line
+items.
+
+ <paper-item>
+ <paper-item-body two-line>
+ <div>Show your status</div>
+ <div secondary>Your status is visible to everyone</div>
+ </paper-item-body>
+ <iron-icon icon="warning"></iron-icon>
+ </paper-item>
+
+To use `paper-item` as a link, wrap it in an anchor tag. Since `paper-item` will
+already receive focus, you may want to prevent the anchor tag from receiving
+focus as well by setting its tabindex to -1.
+
+ <a href="https://www.polymer-project.org/" tabindex="-1">
+ <paper-item raised>Polymer Project</paper-item>
+ </a>
+
+If you are concerned about performance and want to use `paper-item` in a `paper-listbox`
+with many items, you can just use a native `button` with the `paper-item` class
+applied (provided you have correctly included the shared styles):
+
+ <style is="custom-style" include="paper-item-shared-styles"></style>
+
+ <paper-listbox>
+ <button class="paper-item" role="option">Inbox</button>
+ <button class="paper-item" role="option">Starred</button>
+ <button class="paper-item" role="option">Sent mail</button>
+ </paper-listbox>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+------------------------------|----------------------------------------------|----------
+`--paper-item-min-height` | Minimum height of the item | `48px`
+`--paper-item` | Mixin applied to the item | `{}`
+`--paper-item-selected-weight`| The font weight of a selected item | `bold`
+`--paper-item-selected` | Mixin applied to selected paper-items | `{}`
+`--paper-item-disabled-color` | The color for disabled paper-items | `--disabled-text-color`
+`--paper-item-disabled` | Mixin applied to disabled paper-items | `{}`
+`--paper-item-focused` | Mixin applied to focused paper-items | `{}`
+`--paper-item-focused-before` | Mixin applied to :before focused paper-items | `{}`
+
+### Accessibility
+
+This element has `role="listitem"` by default. Depending on usage, it may be more appropriate to set
+`role="menuitem"`, `role="menuitemcheckbox"` or `role="menuitemradio"`.
+
+ <paper-item role="menuitemcheckbox">
+ <paper-item-body>
+ Show your status
+ </paper-item-body>
+ <paper-checkbox></paper-checkbox>
+ </paper-item>
+
+@group Paper Elements
+@element paper-item
+@demo demo/index.html
+-->
+
+<dom-module id="paper-item">
+ <template>
+ <style include="paper-item-shared-styles"></style>
+ <style>
+ :host {
+ @apply --layout-horizontal;
+ @apply --layout-center;
+ @apply --paper-font-subhead;
+
+ @apply --paper-item;
+ }
+ </style>
+ <slot></slot>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-item',
+
+ behaviors: [
+ Polymer.PaperItemBehavior
+ ]
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.bower.json
new file mode 100644
index 00000000000..cb70fbf0ceb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.bower.json
@@ -0,0 +1,63 @@
+{
+ "name": "paper-material",
+ "version": "2.1.0",
+ "description": "A material design container that looks like a lifted sheet of paper",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "paper",
+ "container"
+ ],
+ "main": "paper-material.html",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-material"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-material",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "7bce7d98daa7cdf25de6ba7596090266ca0f7bb5"
+ },
+ "_source": "https://github.com/PolymerElements/paper-material.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/paper-material"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/CODEOWNERS
new file mode 100644
index 00000000000..cc86f1ec217
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @notwaldorf
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..43d220da155
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-material/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.travis.yml
new file mode 100644
index 00000000000..2ea87628a28
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ R8lCIZgsXsGs5DyUoTfZn0SyVglnf0RKyMQhr11/EtOlhAYA2LmGr9W0EpxsJ/+jyobIcmPMQ/MEpqcE4ZfkJNb3mwKYPfEcbD6zlQ/uDK7JX64r5ErPxynMn7cEUbhPkbmX0Kp5i7NK39cR9STth9gHN66Bfoq1Eoju0GFZ0no=
+ - secure: >-
+ KgR0+L67emjn9JkzZoyHkuY24OzRdX5NmHaKiOI2mpKF3XqTSzVRCLdlw1yL9D7apRAhrxFRqv0+Y0kJb44KZWUYl2kckZI85psSMx42Oj6SXgLwa+SNZ8FA/BIetSEYPtmXZTvcPlZwEWqulkagfYN3nw8ugo5Vno75piPtcLs=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+ sauce_connect: true
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/README.md
new file mode 100644
index 00000000000..7ddb364d187
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/README.md
@@ -0,0 +1,34 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+paper-material.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/paper-material.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-material)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/paper-material)_
+
+⚠️ As of the 2.0 release, this element is **deprecated** in favour of the shared styles in [`PolymerElements/paper-styles`](https://github.com/PolymerElements/paper-styles/blob/master/element-styles/paper-material-styles.html). Please see the implementation of [`PolymerElements/paper-button`](https://github.com/PolymerElements/paper-button/blob/master/paper-button.html#L114) for an example.
+
+## &lt;paper-material&gt;
+
+Material design: [Cards](https://www.google.com/design/spec/components/cards.html)
+
+`paper-material` is a container that renders two shadows on top of each other to
+create the effect of a lifted piece of paper.
+
+Example:
+
+```html
+<paper-material elevation="1">
+ ... content ...
+</paper-material>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/bower.json
new file mode 100644
index 00000000000..edc5623307d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/bower.json
@@ -0,0 +1,54 @@
+{
+ "name": "paper-material",
+ "version": "2.0.0",
+ "description": "A material design container that looks like a lifted sheet of paper",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "web-component",
+ "polymer",
+ "paper",
+ "container"
+ ],
+ "main": "paper-material.html",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-material"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-material",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/demo/index.html
new file mode 100644
index 00000000000..f5dce5f7d32
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/demo/index.html
@@ -0,0 +1,85 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <title>paper-material demo</title>
+
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-material.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ paper-material {
+ display: inline-block;
+ background: white;
+ box-sizing: border-box;
+ margin: 8px;
+ padding: 16px;
+ border-radius: 2px;
+ }
+ </style>
+ </custom-style>
+</head>
+<body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>Paper-materials can have different elevations</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-material elevation="0">0</paper-material>
+ <paper-material elevation="1">1</paper-material>
+ <paper-material elevation="2">2</paper-material>
+ <paper-material elevation="3">3</paper-material>
+ <paper-material elevation="4">4</paper-material>
+ <paper-material elevation="5">5</paper-material>
+ </template>
+ </demo-snippet>
+
+ <h3>Changes in elevation can be animated. Tap each of these boxes!</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <style>
+ #a1, #a2 { cursor: pointer; }
+ </style>
+ <div>
+ <paper-material elevation="0" animated id="a1">animated</paper-material>
+ <paper-material elevation="3" id="a2">not animated</paper-material>
+ </div>
+ <script>
+ window.addEventListener('WebComponentsReady', function() {
+ a1.addEventListener('click', _onTap);
+ a2.addEventListener('click', _onTap);
+ });
+ function _onTap(e) {
+ var target = e.target;
+ if (!target.down) {
+ target.elevation += 1;
+ if (target.elevation === 5) {
+ target.down = true;
+ }
+ } else {
+ target.elevation -= 1;
+ if (target.elevation === 0) {
+ target.down = false;
+ }
+ }
+ };
+ </script>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/index.html
new file mode 100644
index 00000000000..7209e6d0952
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-material</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package-lock.json
new file mode 100644
index 00000000000..58b1477ec47
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package-lock.json
@@ -0,0 +1,986 @@
+{
+ "name": "@polymer/paper-material",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.1.1.tgz",
+ "integrity": "sha512-rUfH6USpiPYSHl2dC+/rGb3RYK8LPyqNhiuZCLv13F0fhYr01jdTogGuSphEoSLklm1gKRsDsrfZq7OvpzPYEg==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.1",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.10"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.97",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.97.tgz",
+ "integrity": "sha512-k3CDdCq8Uv8AZ7/bmGSSvlwbPDPhkkckSq8Y9ndXowv86m3k07PjG98SigpjVAY9EyHV9kiFldEV306xh4gkig==",
+ "dev": true
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.10",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.10.tgz",
+ "integrity": "sha1-9vCd15PdL0IomsAdoCb8q6ZfGYw=",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.97",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "2.2.3",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz",
+ "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.7.tgz",
+ "integrity": "sha512-jNhbkxPtt9xbzvihfA0OavjJbpCIyTDSmwE03BVXgCKcz9lwNsq4cg2wsNkY4Av5eH35ttBArhYtVJa6CIrg2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.1.tgz",
+ "integrity": "sha512-gRJDcIjFSzMcmG/GrJlgL0wWoAxr11mVzCq32bjka0endupm9meLwvoJUKc4HDeFiEIB2X3GvNrhF5cKO4Bd4A==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.7",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package.json
new file mode 100644
index 00000000000..14d5f9496ec
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/paper-material",
+ "private": true,
+ "description": "A material design container that looks like a lifted sheet of paper",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-material"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.d.ts
new file mode 100644
index 00000000000..2d6838a9c93
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-material-shared-styles.html
+ */
+
+/// <reference path="../paper-styles/shadow.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.html
new file mode 100644
index 00000000000..3d1313cf34c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material-shared-styles.html
@@ -0,0 +1,42 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../paper-styles/shadow.html">
+
+<dom-module id="paper-material-shared-styles">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: relative;
+ }
+
+ :host([elevation="1"]) {
+ @apply --shadow-elevation-2dp;
+ }
+
+ :host([elevation="2"]) {
+ @apply --shadow-elevation-4dp;
+ }
+
+ :host([elevation="3"]) {
+ @apply --shadow-elevation-6dp;
+ }
+
+ :host([elevation="4"]) {
+ @apply --shadow-elevation-8dp;
+ }
+
+ :host([elevation="5"]) {
+ @apply --shadow-elevation-16dp;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.d.ts
new file mode 100644
index 00000000000..702968cec28
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.d.ts
@@ -0,0 +1,45 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-material.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../paper-styles/shadow.d.ts" />
+/// <reference path="paper-material-shared-styles.d.ts" />
+
+/**
+ * Material design: [Cards](https://www.google.com/design/spec/components/cards.html)
+ *
+ * `paper-material` is a container that renders two shadows on top of each other to
+ * create the effect of a lifted piece of paper.
+ *
+ * Example:
+ *
+ * <paper-material elevation="1">
+ * ... content ...
+ * </paper-material>
+ */
+interface PaperMaterialElement extends Polymer.Element {
+
+ /**
+ * The z-depth of this element, from 0-5. Setting to 0 will remove the
+ * shadow, and each increasing number greater than 0 will be "deeper"
+ * than the last.
+ */
+ elevation: number|null|undefined;
+
+ /**
+ * Set this to true to animate the shadow when setting a new
+ * `elevation` value.
+ */
+ animated: boolean|null|undefined;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-material": PaperMaterialElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.html
new file mode 100644
index 00000000000..3618f3eed0e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-material/paper-material.html
@@ -0,0 +1,81 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-styles/shadow.html">
+<link rel="import" href="paper-material-shared-styles.html">
+
+<!--
+Material design: [Cards](https://www.google.com/design/spec/components/cards.html)
+
+`paper-material` is a container that renders two shadows on top of each other to
+create the effect of a lifted piece of paper.
+
+Example:
+
+ <paper-material elevation="1">
+ ... content ...
+ </paper-material>
+
+@group Paper Elements
+@demo demo/index.html
+-->
+
+<dom-module id="paper-material">
+ <template>
+ <style include="paper-material-shared-styles"></style>
+ <style>
+ :host([animated]) {
+ @apply --shadow-transition;
+ }
+ :host {
+ @apply --paper-material;
+ }
+ </style>
+
+ <slot></slot>
+ </template>
+</dom-module>
+<script>
+ Polymer({
+ is: 'paper-material',
+
+ properties: {
+ /**
+ * The z-depth of this element, from 0-5. Setting to 0 will remove the
+ * shadow, and each increasing number greater than 0 will be "deeper"
+ * than the last.
+ *
+ * @attribute elevation
+ * @type number
+ * @default 1
+ */
+ elevation: {
+ type: Number,
+ reflectToAttribute: true,
+ value: 1
+ },
+
+ /**
+ * Set this to true to animate the shadow when setting a new
+ * `elevation` value.
+ *
+ * @attribute animated
+ * @type boolean
+ * @default false
+ */
+ animated: {
+ type: Boolean,
+ reflectToAttribute: true,
+ value: false
+ }
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.bower.json
new file mode 100644
index 00000000000..8c9c8ff9126
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.bower.json
@@ -0,0 +1,65 @@
+{
+ "name": "paper-progress",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "A material design progress bar",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "progress",
+ "loading"
+ ],
+ "main": "paper-progress.html",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-progress.git"
+ },
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-range-behavior": "PolymerElements/iron-range-behavior#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-range-behavior": "PolymerElements/iron-range-behavior#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/paper-progress",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "ea1cd8dc30ece12f83d0eaaebc2df4e1fa05f0b6"
+ },
+ "_source": "https://github.com/PolymerElements/paper-progress.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-progress"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..09b5a1e5dbc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-progress/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.travis.yml
new file mode 100644
index 00000000000..79bb8769627
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ H1BFM+lOHi3yosJV4VpeDHO/N33EeAeQqKbWMAiGfbjMmVUa2Y9gQzpIONMtO09KMTZMw0dlE3GYNLnc44JXlnSvmp34Fh8KpxOz4BxlbIj2aw/M99FWxRAJYpV+BWWKhwwuFq6DctATljcdfvYyHxpjCAFjTIMCCAHtdVrowlxMlivu/BSlBlZ4HR0OfHr7l8PAC1hSieWr5Rpk0PMcQ6B0nEhSTRgGdxEwADnkOL3Sx966vNv3qxwIML29UrZ3mFdfrgnfwdNZTivjDaRhY4tUu7bw5vP8c4PeVR7lalhVBse5J4xKo7Xw80To+bm/0Hyo4ZgZPzEbq0EAIszRnwRo/d4YiFGkyIgFHJ8a/v2h3BWxW+9W51nKsQcFijitu2pMhKC9ankRxL23TK0rtYff6hj/bCwtfy/965PzZgiAeBgcQUZ25+unOc11VAyIEGUZeLAqzulMOn2LAcvSrVEVGpb90whvVxfG3T8hkFbIrPtD3TWrtvt4ul/25pe+eLNET2DUTqrPFfizthyaGFfavykA6PPGI58AFD2EnFmaD9eJC/eCP34FAZec8G2yMbXOYxg6B40Z1ezHo8j7jzbekEJBsHVegpart9YSxQwx5b95SsqlPbyhdLLHIZIzT9dSfbS/l0YFUYbejeMM5koi1qdqXVCdCMpbwS61WA8=
+ - secure: >-
+ KZek5eiBlb80rC3C0pgb39C4mWskrGJdxV0Xp9WBAnJQkXN4fvKgB5QOIGVV8yP/aM824zv/nj1Z61MWcjKw5kYJBon0Hw4Qemk7KJh7kde5bhg+3dWcdfv8Hhz9wuVGxqmZ01N8LWat+dRzEqY5ZawFQ+P2M/FXxxwKKsH3GKpjgjN2G8u7nadD2p4hDIBmVVGK0dqDZDOg+YZ+jEdGyWTbjeVOnktvb6dDfcKm52VIpcgAvqa8CCFFwTE3lFrHK4UdiqxFW2YcIB1lgJADJ1B2wAjL0cuf97uu8jaCpCGMeQXz5/XH5SxLA8ah/6GV7C37+WlEPeyallUUbSn05m/xYVFEMvrw/04bFQUyiwt9/rdqA8OLNOUwIEk9hMWC3LkooE2LTLs4l1OKN2x9OuTGPTU2f4LrH4z32zSChxjI/4fqCFwDJs6MBfQFIlpV1e6F1YOvPLPOtBLLTVK1n1KeXeY9HSvk+f5lxRwS4VFZ1oG6+a/l+MoB2HMUmhEn0Wa+KS2qk5Yfea/UIlvi8IuA7zsXoeYkBuwIT7VJVdU0Oebfkam4jWR6qYs/QQF/MchzungKchhwyhsSzQvCuaHJhdA6D1L0oqkXRpPouJwkcvGu9z+wf+zPfh3h065Trg7tC4DYHnXRSTF0ocO3H+EfImRSP5jsgPz0gMl4iI0=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/README.md
new file mode 100644
index 00000000000..3eb090c31b9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/README.md
@@ -0,0 +1,49 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-progress.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-progress)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/paper-progress)
+
+## &lt;paper-progress&gt;
+
+Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html)
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../paper-styles/color.html">
+ <link rel="import" href="paper-progress.html">
+ <style is="custom-style">
+ paper-progress {
+ display: block;
+ width: 100%;
+ margin: 20px 0;
+ }
+ paper-progress.slow {
+ --paper-progress-indeterminate-cycle-duration: 5s;
+ }
+ paper-progress.blue {
+ --paper-progress-active-color: var(--paper-light-blue-500);
+ --paper-progress-secondary-color: var(--paper-light-blue-100);
+ }
+ paper-progress.red {
+ --paper-progress-active-color: var(--paper-red-500);
+ --paper-progress-secondary-color: var(--paper-red-100);
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-progress indeterminate class="blue"></paper-progress>
+<paper-progress indeterminate class="slow red"></paper-progress>
+<paper-progress value="40" secondary-progress="80"></paper-progress>
+```
+
+The progress bars are for situations where the percentage completed can be
+determined. They give users a quick sense of how much longer an operation
+will take.
+
+There is also a secondary progress which is useful for displaying intermediate
+progress, such as the buffer level during a streaming playback progress bar.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/bower.json
new file mode 100644
index 00000000000..54567a62059
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/bower.json
@@ -0,0 +1,55 @@
+{
+ "name": "paper-progress",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "A material design progress bar",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "progress",
+ "loading"
+ ],
+ "main": "paper-progress.html",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-progress.git"
+ },
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-range-behavior": "PolymerElements/iron-range-behavior#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-range-behavior": "PolymerElements/iron-range-behavior#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/demo/index.html
new file mode 100644
index 00000000000..51c71102821
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/demo/index.html
@@ -0,0 +1,132 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<!doctype html>
+<html>
+<head>
+ <title>paper-progress demo</title>
+
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../paper-styles/color.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-progress.html">
+ <link rel="import" href="../../paper-button/paper-button.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ paper-progress {
+ display: block;
+ width: 100%;
+ margin: 20px 0;
+ }
+ paper-button {
+ display: inline-block;
+ padding: 5px;
+ }
+ </style>
+ </custom-style>
+
+</head>
+<body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>paper-progress can be imperatively controlled</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <p>Once started, loops 5 times before stopping.
+ <!-- View the source code to see the contents of startProgress() -->
+ <paper-button raised onclick="startProgress();" id="start">Start</paper-button>
+ </p>
+ <paper-progress id="progress"></paper-progress>
+ </template>
+ </demo-snippet>
+
+ <h3>paper-progress can be indeterminate with a custom duration</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-progress.slow {
+ --paper-progress-indeterminate-cycle-duration: 20s;
+ }
+ </style>
+ </custom-style>
+ <paper-progress indeterminate></paper-progress>
+ <paper-progress indeterminate class="slow"></paper-progress>
+ </template>
+ </demo-snippet>
+
+ <h3>It can be styled using custom properties</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-progress.blue {
+ --paper-progress-active-color: var(--paper-light-blue-500);
+ --paper-progress-secondary-color: var(--paper-light-blue-100);
+ }
+
+ paper-progress.red {
+ --paper-progress-active-color: var(--paper-red-500);
+ --paper-progress-secondary-color: var(--paper-red-100);
+ }
+
+ paper-progress.green {
+ --paper-progress-active-color: var(--paper-light-green-500);
+ --paper-progress-secondary-color: var(--paper-light-green-100);
+ }
+ </style>
+ </custom-style>
+ <paper-progress value="800" min="100" max="1000" class="red"></paper-progress>
+ <paper-progress value="60" class="green"></paper-progress>
+ <paper-progress value="40" secondary-progress="80" class="blue"></paper-progress>
+ </template>
+ </demo-snippet>
+ </div>
+
+ <script>
+ var progress, button;
+ var repeat, maxRepeat = 5, animating = false;
+
+ function nextProgress() {
+ animating = true;
+ if (progress.value < progress.max) {
+ progress.value += (progress.step || 1);
+ } else {
+ if (++repeat >= maxRepeat) {
+ animating = false;
+ button.disabled = false;
+ return;
+ }
+ progress.value = progress.min;
+ }
+ requestAnimationFrame(nextProgress);
+ }
+
+ function startProgress() {
+ repeat = 0;
+ progress.value = progress.min;
+ button.disabled = true;
+ if (!animating) {
+ nextProgress();
+ }
+ }
+
+ window.addEventListener('WebComponentsReady', function() {
+ progress = document.querySelector('paper-progress');
+ button = document.querySelector('paper-button');
+ });
+ </script>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/hero.svg
new file mode 100755
index 00000000000..dc422a4912a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/hero.svg
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <rect x="57" y="59" width="20" height="2"/>
+ <rect x="38" y="59" width="11" height="2"/>
+ <rect x="84" y="59" width="40" height="2"/>
+ <rect x="133" y="59" width="54" height="2"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/index.html
new file mode 100644
index 00000000000..225e3dd93df
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/index.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <title>paper-progress</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package-lock.json
new file mode 100644
index 00000000000..1c6a85c7fca
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-progress",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package.json
new file mode 100644
index 00000000000..efcfca5e8ed
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-progress",
+ "private": true,
+ "description": "A material design progress bar",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-progress.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.d.ts
new file mode 100644
index 00000000000..71978799fd5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.d.ts
@@ -0,0 +1,117 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-progress.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../iron-range-behavior/iron-range-behavior.d.ts" />
+/// <reference path="../paper-styles/color.d.ts" />
+
+/**
+ * Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html)
+ *
+ * The progress bars are for situations where the percentage completed can be
+ * determined. They give users a quick sense of how much longer an operation
+ * will take.
+ *
+ * Example:
+ *
+ * <paper-progress value="10"></paper-progress>
+ *
+ * There is also a secondary progress which is useful for displaying intermediate
+ * progress, such as the buffer level during a streaming playback progress bar.
+ *
+ * Example:
+ *
+ * <paper-progress value="10" secondary-progress="30"></paper-progress>
+ *
+ * ### Styling progress bar:
+ *
+ * To change the active progress bar color:
+ *
+ * paper-progress {
+ * --paper-progress-active-color: #e91e63;
+ * }
+ *
+ * To change the secondary progress bar color:
+ *
+ * paper-progress {
+ * --paper-progress-secondary-color: #f8bbd0;
+ * }
+ *
+ * To change the progress bar background color:
+ *
+ * paper-progress {
+ * --paper-progress-container-color: #64ffda;
+ * }
+ *
+ * Add the class `transiting` to a paper-progress to animate the progress bar when
+ * the value changed. You can also customize the transition:
+ *
+ * paper-progress {
+ * --paper-progress-transition-duration: 0.08s;
+ * --paper-progress-transition-timing-function: ease;
+ * --paper-progress-transition-delay: 0s;
+ * }
+ *
+ * To change the duration of the indeterminate cycle:
+ *
+ * paper-progress {
+ * --paper-progress-indeterminate-cycle-duration: 2s;
+ * }
+ *
+ * The following mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * -------------------------------------------------|---------------------------------------------|--------------
+ * `--paper-progress-container` | Mixin applied to container | `{}`
+ * `--paper-progress-transition-duration` | Duration of the transition | `0.08s`
+ * `--paper-progress-transition-timing-function` | The timing function for the transition | `ease`
+ * `--paper-progress-transition-delay` | delay for the transition | `0s`
+ * `--paper-progress-container-color` | Color of the container | `--google-grey-300`
+ * `--paper-progress-active-color` | The color of the active bar | `--google-green-500`
+ * `--paper-progress-secondary-color` | The color of the secondary bar | `--google-green-100`
+ * `--paper-progress-disabled-active-color` | The color of the active bar if disabled | `--google-grey-500`
+ * `--paper-progress-disabled-secondary-color` | The color of the secondary bar if disabled | `--google-grey-300`
+ * `--paper-progress-height` | The height of the progress bar | `4px`
+ * `--paper-progress-indeterminate-cycle-duration` | Duration of an indeterminate cycle | `2s`
+ */
+interface PaperProgressElement extends Polymer.Element, Polymer.IronRangeBehavior {
+
+ /**
+ * The number that represents the current secondary progress.
+ */
+ secondaryProgress: number|null|undefined;
+
+ /**
+ * The secondary ratio
+ */
+ readonly secondaryRatio: number|null|undefined;
+
+ /**
+ * Use an indeterminate progress indicator.
+ */
+ indeterminate: boolean|null|undefined;
+
+ /**
+ * True if the progress is disabled.
+ */
+ disabled: boolean|null|undefined;
+ hostAttributes: object|null;
+ _toggleIndeterminate(indeterminate: any): void;
+ _transformProgress(progress: any, ratio: any): void;
+ _mainRatioChanged(ratio: any): void;
+ _progressChanged(secondaryProgress: any, value: any, min: any, max: any, indeterminate: any): void;
+ _disabledChanged(disabled: any): void;
+ _hideSecondaryProgress(secondaryRatio: any): any;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-progress": PaperProgressElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.html
new file mode 100644
index 00000000000..c190e14ec70
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-progress/paper-progress.html
@@ -0,0 +1,345 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../iron-range-behavior/iron-range-behavior.html">
+<link rel="import" href="../paper-styles/color.html">
+
+<!--
+Material design: [Progress & activity](https://www.google.com/design/spec/components/progress-activity.html)
+
+The progress bars are for situations where the percentage completed can be
+determined. They give users a quick sense of how much longer an operation
+will take.
+
+Example:
+
+ <paper-progress value="10"></paper-progress>
+
+There is also a secondary progress which is useful for displaying intermediate
+progress, such as the buffer level during a streaming playback progress bar.
+
+Example:
+
+ <paper-progress value="10" secondary-progress="30"></paper-progress>
+
+### Styling progress bar:
+
+To change the active progress bar color:
+
+ paper-progress {
+ --paper-progress-active-color: #e91e63;
+ }
+
+To change the secondary progress bar color:
+
+ paper-progress {
+ --paper-progress-secondary-color: #f8bbd0;
+ }
+
+To change the progress bar background color:
+
+ paper-progress {
+ --paper-progress-container-color: #64ffda;
+ }
+
+Add the class `transiting` to a paper-progress to animate the progress bar when
+the value changed. You can also customize the transition:
+
+ paper-progress {
+ --paper-progress-transition-duration: 0.08s;
+ --paper-progress-transition-timing-function: ease;
+ --paper-progress-transition-delay: 0s;
+ }
+
+To change the duration of the indeterminate cycle:
+
+ paper-progress {
+ --paper-progress-indeterminate-cycle-duration: 2s;
+ }
+
+The following mixins are available for styling:
+
+Custom property | Description | Default
+-------------------------------------------------|---------------------------------------------|--------------
+`--paper-progress-container` | Mixin applied to container | `{}`
+`--paper-progress-transition-duration` | Duration of the transition | `0.08s`
+`--paper-progress-transition-timing-function` | The timing function for the transition | `ease`
+`--paper-progress-transition-delay` | delay for the transition | `0s`
+`--paper-progress-container-color` | Color of the container | `--google-grey-300`
+`--paper-progress-active-color` | The color of the active bar | `--google-green-500`
+`--paper-progress-secondary-color` | The color of the secondary bar | `--google-green-100`
+`--paper-progress-disabled-active-color` | The color of the active bar if disabled | `--google-grey-500`
+`--paper-progress-disabled-secondary-color` | The color of the secondary bar if disabled | `--google-grey-300`
+`--paper-progress-height` | The height of the progress bar | `4px`
+`--paper-progress-indeterminate-cycle-duration` | Duration of an indeterminate cycle | `2s`
+
+@group Paper Elements
+@element paper-progress
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-progress">
+ <template>
+ <style>
+ :host {
+ display: block;
+ width: 200px;
+ position: relative;
+ overflow: hidden;
+ }
+
+ :host([hidden]), [hidden] {
+ display: none !important;
+ }
+
+ #progressContainer {
+ @apply --paper-progress-container;
+ position: relative;
+ }
+
+ #progressContainer,
+ /* the stripe for the indeterminate animation*/
+ .indeterminate::after {
+ height: var(--paper-progress-height, 4px);
+ }
+
+ #primaryProgress,
+ #secondaryProgress,
+ .indeterminate::after {
+ @apply --layout-fit;
+ }
+
+ #progressContainer,
+ .indeterminate::after {
+ background: var(--paper-progress-container-color, var(--google-grey-300));
+ }
+
+ :host(.transiting) #primaryProgress,
+ :host(.transiting) #secondaryProgress {
+ -webkit-transition-property: -webkit-transform;
+ transition-property: transform;
+
+ /* Duration */
+ -webkit-transition-duration: var(--paper-progress-transition-duration, 0.08s);
+ transition-duration: var(--paper-progress-transition-duration, 0.08s);
+
+ /* Timing function */
+ -webkit-transition-timing-function: var(--paper-progress-transition-timing-function, ease);
+ transition-timing-function: var(--paper-progress-transition-timing-function, ease);
+
+ /* Delay */
+ -webkit-transition-delay: var(--paper-progress-transition-delay, 0s);
+ transition-delay: var(--paper-progress-transition-delay, 0s);
+ }
+
+ #primaryProgress,
+ #secondaryProgress {
+ @apply --layout-fit;
+ -webkit-transform-origin: left center;
+ transform-origin: left center;
+ -webkit-transform: scaleX(0);
+ transform: scaleX(0);
+ will-change: transform;
+ }
+
+ #primaryProgress {
+ background: var(--paper-progress-active-color, var(--google-green-500));
+ }
+
+ #secondaryProgress {
+ background: var(--paper-progress-secondary-color, var(--google-green-100));
+ }
+
+ :host([disabled]) #primaryProgress {
+ background: var(--paper-progress-disabled-active-color, var(--google-grey-500));
+ }
+
+ :host([disabled]) #secondaryProgress {
+ background: var(--paper-progress-disabled-secondary-color, var(--google-grey-300));
+ }
+
+ :host(:not([disabled])) #primaryProgress.indeterminate {
+ -webkit-transform-origin: right center;
+ transform-origin: right center;
+ -webkit-animation: indeterminate-bar var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;
+ animation: indeterminate-bar var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;
+ }
+
+ :host(:not([disabled])) #primaryProgress.indeterminate::after {
+ content: "";
+ -webkit-transform-origin: center center;
+ transform-origin: center center;
+
+ -webkit-animation: indeterminate-splitter var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;
+ animation: indeterminate-splitter var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;
+ }
+
+ @-webkit-keyframes indeterminate-bar {
+ 0% {
+ -webkit-transform: scaleX(1) translateX(-100%);
+ }
+ 50% {
+ -webkit-transform: scaleX(1) translateX(0%);
+ }
+ 75% {
+ -webkit-transform: scaleX(1) translateX(0%);
+ -webkit-animation-timing-function: cubic-bezier(.28,.62,.37,.91);
+ }
+ 100% {
+ -webkit-transform: scaleX(0) translateX(0%);
+ }
+ }
+
+ @-webkit-keyframes indeterminate-splitter {
+ 0% {
+ -webkit-transform: scaleX(.75) translateX(-125%);
+ }
+ 30% {
+ -webkit-transform: scaleX(.75) translateX(-125%);
+ -webkit-animation-timing-function: cubic-bezier(.42,0,.6,.8);
+ }
+ 90% {
+ -webkit-transform: scaleX(.75) translateX(125%);
+ }
+ 100% {
+ -webkit-transform: scaleX(.75) translateX(125%);
+ }
+ }
+
+ @keyframes indeterminate-bar {
+ 0% {
+ transform: scaleX(1) translateX(-100%);
+ }
+ 50% {
+ transform: scaleX(1) translateX(0%);
+ }
+ 75% {
+ transform: scaleX(1) translateX(0%);
+ animation-timing-function: cubic-bezier(.28,.62,.37,.91);
+ }
+ 100% {
+ transform: scaleX(0) translateX(0%);
+ }
+ }
+
+ @keyframes indeterminate-splitter {
+ 0% {
+ transform: scaleX(.75) translateX(-125%);
+ }
+ 30% {
+ transform: scaleX(.75) translateX(-125%);
+ animation-timing-function: cubic-bezier(.42,0,.6,.8);
+ }
+ 90% {
+ transform: scaleX(.75) translateX(125%);
+ }
+ 100% {
+ transform: scaleX(.75) translateX(125%);
+ }
+ }
+ </style>
+
+ <div id="progressContainer">
+ <div id="secondaryProgress" hidden$="[[_hideSecondaryProgress(secondaryRatio)]]"></div>
+ <div id="primaryProgress"></div>
+ </div>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-progress',
+
+ behaviors: [Polymer.IronRangeBehavior],
+
+ properties: {
+ /**
+ * The number that represents the current secondary progress.
+ */
+ secondaryProgress: {type: Number, value: 0},
+
+ /**
+ * The secondary ratio
+ */
+ secondaryRatio: {type: Number, value: 0, readOnly: true},
+
+ /**
+ * Use an indeterminate progress indicator.
+ */
+ indeterminate:
+ {type: Boolean, value: false, observer: '_toggleIndeterminate'},
+
+ /**
+ * True if the progress is disabled.
+ */
+ disabled: {
+ type: Boolean,
+ value: false,
+ reflectToAttribute: true,
+ observer: '_disabledChanged'
+ }
+ },
+
+ observers:
+ ['_progressChanged(secondaryProgress, value, min, max, indeterminate)'],
+
+ hostAttributes: {role: 'progressbar'},
+
+ _toggleIndeterminate: function(indeterminate) {
+ // If we use attribute/class binding, the animation sometimes doesn't
+ // translate properly on Safari 7.1. So instead, we toggle the class here in
+ // the update method.
+ this.toggleClass('indeterminate', indeterminate, this.$.primaryProgress);
+ },
+
+ _transformProgress: function(progress, ratio) {
+ var transform = 'scaleX(' + (ratio / 100) + ')';
+ progress.style.transform = progress.style.webkitTransform = transform;
+ },
+
+ _mainRatioChanged: function(ratio) {
+ this._transformProgress(this.$.primaryProgress, ratio);
+ },
+
+ _progressChanged: function(
+ secondaryProgress, value, min, max, indeterminate) {
+ secondaryProgress = this._clampValue(secondaryProgress);
+ value = this._clampValue(value);
+
+ var secondaryRatio = this._calcRatio(secondaryProgress) * 100;
+ var mainRatio = this._calcRatio(value) * 100;
+
+ this._setSecondaryRatio(secondaryRatio);
+ this._transformProgress(this.$.secondaryProgress, secondaryRatio);
+ this._transformProgress(this.$.primaryProgress, mainRatio);
+
+ this.secondaryProgress = secondaryProgress;
+
+ if (indeterminate) {
+ this.removeAttribute('aria-valuenow');
+ } else {
+ this.setAttribute('aria-valuenow', value);
+ }
+ this.setAttribute('aria-valuemin', min);
+ this.setAttribute('aria-valuemax', max);
+ },
+
+ _disabledChanged: function(disabled) {
+ this.setAttribute('aria-disabled', disabled ? 'true' : 'false');
+ },
+
+ _hideSecondaryProgress: function(secondaryRatio) {
+ return secondaryRatio === 0;
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.bower.json
new file mode 100644
index 00000000000..25f9e0849be
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.bower.json
@@ -0,0 +1,70 @@
+{
+ "name": "paper-radio-button",
+ "version": "2.1.0",
+ "description": "A material design radio button",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "radio",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-radio-button"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-radio-button",
+ "main": "paper-radio-button.html",
+ "ignore": [],
+ "dependencies": {
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#~1.3.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "bc1f13bc1fe808de374041e3552b33d242edcf0f"
+ },
+ "_source": "https://github.com/PolymerElements/paper-radio-button.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/paper-radio-button"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..0a8739ed14f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-radio-button/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.travis.yml
new file mode 100644
index 00000000000..64719b89c83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ GigwuEaV52dS0ZJk4iaUTWOW7zZTtD/j3KqPny9XS71GxDFve3KKAXvhPCHHKuZwsOKWJ3JnBIXDgEVxHwkS6jUVAEVPDrmF6OZxs5rkRTDFeGKVfoYzCkssj6NE+/XnDMOF5gFdRuI4ZBS/kMB9OASeNsH84wgkMazh9GPu9Lk=
+ - secure: >-
+ EURQh/CaC+RBsHTw5xbyZAFPc6cgQQWFFvp35A8ZHTLvHrhAIybnBb/wisGpPyulSZUd72wdIMNxaUAmP9bniwLs94tzmqbDuBtgZ4a1IPHIm9qGzn7q4JMU2mUYriP/HDIc9Liu6nfccrf7YgYrYKVupu72WU5FktvyWedUj7w=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/README.md
new file mode 100644
index 00000000000..f2e69c55f74
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/README.md
@@ -0,0 +1,38 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-radio-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-radio-button)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/paper-radio-button)
+
+## &lt;paper-radio-button&gt;
+
+Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
+
+`paper-radio-button` is a button that can be either checked or unchecked.
+User can tap the radio button to check or uncheck it.
+
+Use a `<paper-radio-group>` to group a set of radio buttons. When radio buttons
+are inside a radio group, exactly one radio button in the group can be checked
+at any time.
+
+Example:
+
+```html
+<paper-radio-button></paper-radio-button>
+<paper-radio-button>Item label</paper-radio-button>
+```
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-radio-button-unchecked-background-color` | Radio button background color when the input is not checked | `transparent` |
+| `--paper-radio-button-unchecked-color` | Radio button color when the input is not checked | `--primary-text-color` |
+| `--paper-radio-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color` |
+| `--paper-radio-button-checked-color` | Radio button color when the input is checked | `--primary-color` |
+| `--paper-radio-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color` |
+| `--paper-radio-button-size` | Size of the radio button | `16px` |
+| `--paper-radio-button-label-color` | Label color | `--primary-text-color` |
+| `--paper-radio-button-label-spacing` | Spacing between the label and the button | `10px` |
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/bower.json
new file mode 100644
index 00000000000..f47d9aca749
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/bower.json
@@ -0,0 +1,61 @@
+{
+ "name": "paper-radio-button",
+ "version": "2.1.0",
+ "description": "A material design radio button",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "radio",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-radio-button"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-radio-button",
+ "main": "paper-radio-button.html",
+ "ignore": [],
+ "dependencies": {
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#~1.3.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/demo/index.html
new file mode 100644
index 00000000000..63a6db5506e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/demo/index.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+ <title>paper-radio-button demo</title>
+
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-radio-button.html">
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ .vertical-section-container {
+ max-width: 630px;
+ }
+
+ paper-radio-button {
+ margin-right: 24px;
+ }
+ </style>
+ </custom-style>
+</head>
+<body unresolved>
+ <div class="vertical-section-container centered">
+ <h3>Radio buttons can be checked or unchecked, or disabled entirely</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-radio-button>Radio</paper-radio-button>
+ <paper-radio-button checked>Radio</paper-radio-button>
+ <paper-radio-button disabled>Disabled</paper-radio-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Radio buttons can hide the ripple effect using the <i>noink</i> attribute</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-radio-button noink>Radio</paper-radio-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Radio buttons can be styled using custom properties</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-radio-button.red {
+ --paper-radio-button-checked-color: var(--paper-red-500);
+ --paper-radio-button-checked-ink-color: var(--paper-red-500);
+ --paper-radio-button-unchecked-color: var(--paper-red-900);
+ --paper-radio-button-unchecked-ink-color: var(--paper-red-900);
+ --paper-radio-button-label-color: var(--paper-red-500);
+ }
+ paper-radio-button.green {
+ --paper-radio-button-checked-color: var(--paper-green-500);
+ --paper-radio-button-checked-ink-color: var(--paper-green-500);
+ --paper-radio-button-unchecked-color: var(--paper-green-900);
+ --paper-radio-button-unchecked-ink-color: var(--paper-green-900);
+ --paper-radio-button-label-color: var(--paper-green-500);
+ }
+ </style>
+ </custom-style>
+
+ <paper-radio-button class="red">Radio</paper-radio-button>
+ <paper-radio-button checked class="green">Radio</paper-radio-button>
+ </template>
+ </demo-snippet>
+ </div>
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/hero.svg
new file mode 100755
index 00000000000..7fbac94dd72
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/hero.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <g>
+ <circle cx="112.5" cy="63" r="8"/>
+ <path d="M112.5,80c-9.4,0-17-7.6-17-17s7.6-17,17-17s17,7.6,17,17S121.9,80,112.5,80z M112.5,48c-8.3,0-15,6.7-15,15s6.7,15,15,15
+ s15-6.7,15-15S120.8,48,112.5,48z"/>
+ </g>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/index.html
new file mode 100644
index 00000000000..04b0c661ba1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-radio-button</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package-lock.json
new file mode 100644
index 00000000000..cbeca9b0927
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package-lock.json
@@ -0,0 +1,983 @@
+{
+ "name": "@polymer/paper-radio-button",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.9.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.9.0.tgz",
+ "integrity": "sha512-WPOqlV2W/M4Ni40QIqYSv8PE7H4rjiPm1KEf02QPtjZOGlAC4Rv7e6UJ1Ke1O70WT5bydcsEn3LViFIqYpVOJw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package.json
new file mode 100644
index 00000000000..564544d4dea
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/paper-radio-button",
+ "private": true,
+ "description": "A material design radio button",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-radio-button"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.d.ts
new file mode 100644
index 00000000000..bf0924627dc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.d.ts
@@ -0,0 +1,62 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-radio-button.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../paper-behaviors/paper-checked-element-behavior.d.ts" />
+/// <reference path="../paper-styles/default-theme.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+
+/**
+ * Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
+ *
+ * `paper-radio-button` is a button that can be either checked or unchecked.
+ * User can tap the radio button to check or uncheck it.
+ *
+ * Use a `<paper-radio-group>` to group a set of radio buttons. When radio buttons
+ * are inside a radio group, exactly one radio button in the group can be checked
+ * at any time.
+ *
+ * Example:
+ *
+ * <paper-radio-button></paper-radio-button>
+ * <paper-radio-button>Item label</paper-radio-button>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-radio-button-unchecked-background-color` | Radio button background color when the input is not checked | `transparent`
+ * `--paper-radio-button-unchecked-color` | Radio button color when the input is not checked | `--primary-text-color`
+ * `--paper-radio-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color`
+ * `--paper-radio-button-checked-color` | Radio button color when the input is checked | `--primary-color`
+ * `--paper-radio-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color`
+ * `--paper-radio-button-size` | Size of the radio button | `16px`
+ * `--paper-radio-button-ink-size` | Size of the ripple | `48px`
+ * `--paper-radio-button-label-color` | Label color | `--primary-text-color`
+ * `--paper-radio-button-label-spacing` | Spacing between the label and the button | `10px`
+ * `--paper-radio-button-radio-container` | A mixin applied to the internal radio container | `{}`
+ * `--paper-radio-button-label` | A mixin applied to the internal label | `{}`
+ * `--paper-radio-button-label-checked` | A mixin applied to the internal label when the radio button is checked | `{}`
+ *
+ * This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+ * In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+ */
+interface PaperRadioButtonElement extends Polymer.Element, Polymer.PaperCheckedElementBehavior {
+ ariaActiveAttribute: string|null|undefined;
+ hostAttributes: object|null;
+ attached(): void;
+ ready(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-radio-button": PaperRadioButtonElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.html
new file mode 100644
index 00000000000..726c80fe374
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-button/paper-radio-button.html
@@ -0,0 +1,252 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../paper-behaviors/paper-checked-element-behavior.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+
+<!--
+Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
+
+`paper-radio-button` is a button that can be either checked or unchecked.
+User can tap the radio button to check or uncheck it.
+
+Use a `<paper-radio-group>` to group a set of radio buttons. When radio buttons
+are inside a radio group, exactly one radio button in the group can be checked
+at any time.
+
+Example:
+
+ <paper-radio-button></paper-radio-button>
+ <paper-radio-button>Item label</paper-radio-button>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-radio-button-unchecked-background-color` | Radio button background color when the input is not checked | `transparent`
+`--paper-radio-button-unchecked-color` | Radio button color when the input is not checked | `--primary-text-color`
+`--paper-radio-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--primary-text-color`
+`--paper-radio-button-checked-color` | Radio button color when the input is checked | `--primary-color`
+`--paper-radio-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color`
+`--paper-radio-button-size` | Size of the radio button | `16px`
+`--paper-radio-button-ink-size` | Size of the ripple | `48px`
+`--paper-radio-button-label-color` | Label color | `--primary-text-color`
+`--paper-radio-button-label-spacing` | Spacing between the label and the button | `10px`
+`--paper-radio-button-radio-container` | A mixin applied to the internal radio container | `{}`
+`--paper-radio-button-label` | A mixin applied to the internal label | `{}`
+`--paper-radio-button-label-checked` | A mixin applied to the internal label when the radio button is checked | `{}`
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+@group Paper Elements
+@element paper-radio-button
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-radio-button">
+ <template strip-whitespace>
+ <style>
+ :host {
+ display: inline-block;
+ line-height: 0;
+ white-space: nowrap;
+ cursor: pointer;
+ @apply --paper-font-common-base;
+ --calculated-paper-radio-button-size: var(--paper-radio-button-size, 16px);
+ /* -1px is a sentinel for the default and is replace in `attached`. */
+ --calculated-paper-radio-button-ink-size: var(--paper-radio-button-ink-size, -1px);
+ }
+
+ :host(:focus) {
+ outline: none;
+ }
+
+ #radioContainer {
+ @apply --layout-inline;
+ @apply --layout-center-center;
+ position: relative;
+ width: var(--calculated-paper-radio-button-size);
+ height: var(--calculated-paper-radio-button-size);
+ vertical-align: middle;
+
+ @apply --paper-radio-button-radio-container;
+ }
+
+ #ink {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ right: auto;
+ width: var(--calculated-paper-radio-button-ink-size);
+ height: var(--calculated-paper-radio-button-ink-size);
+ color: var(--paper-radio-button-unchecked-ink-color, var(--primary-text-color));
+ opacity: 0.6;
+ pointer-events: none;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ }
+
+ #ink[checked] {
+ color: var(--paper-radio-button-checked-ink-color, var(--primary-color));
+ }
+
+ #offRadio, #onRadio {
+ position: absolute;
+ box-sizing: border-box;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ }
+
+ #offRadio {
+ border: 2px solid var(--paper-radio-button-unchecked-color, var(--primary-text-color));
+ background-color: var(--paper-radio-button-unchecked-background-color, transparent);
+ transition: border-color 0.28s;
+ }
+
+ #onRadio {
+ background-color: var(--paper-radio-button-checked-color, var(--primary-color));
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ transition: -webkit-transform ease 0.28s;
+ transition: transform ease 0.28s;
+ will-change: transform;
+ }
+
+ :host([checked]) #offRadio {
+ border-color: var(--paper-radio-button-checked-color, var(--primary-color));
+ }
+
+ :host([checked]) #onRadio {
+ -webkit-transform: scale(0.5);
+ transform: scale(0.5);
+ }
+
+ #radioLabel {
+ line-height: normal;
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin-left: var(--paper-radio-button-label-spacing, 10px);
+ white-space: normal;
+ color: var(--paper-radio-button-label-color, var(--primary-text-color));
+
+ @apply --paper-radio-button-label;
+ }
+
+ :host([checked]) #radioLabel {
+ @apply --paper-radio-button-label-checked;
+ }
+
+ #radioLabel:dir(rtl) {
+ margin-left: 0;
+ margin-right: var(--paper-radio-button-label-spacing, 10px);
+ }
+
+ #radioLabel[hidden] {
+ display: none;
+ }
+
+ /* disabled state */
+
+ :host([disabled]) #offRadio {
+ border-color: var(--paper-radio-button-unchecked-color, var(--primary-text-color));
+ opacity: 0.5;
+ }
+
+ :host([disabled][checked]) #onRadio {
+ background-color: var(--paper-radio-button-unchecked-color, var(--primary-text-color));
+ opacity: 0.5;
+ }
+
+ :host([disabled]) #radioLabel {
+ /* slightly darker than the button, so that it's readable */
+ opacity: 0.65;
+ }
+ </style>
+
+ <div id="radioContainer">
+ <div id="offRadio"></div>
+ <div id="onRadio"></div>
+ </div>
+
+ <div id="radioLabel"><slot></slot></div>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-radio-button',
+
+ behaviors: [
+ Polymer.PaperCheckedElementBehavior
+ ],
+
+ hostAttributes: {
+ role: 'radio',
+ 'aria-checked': false,
+ tabindex: 0
+ },
+
+ properties: {
+ /**
+ * Fired when the checked state changes due to user interaction.
+ *
+ * @event change
+ */
+
+ /**
+ * Fired when the checked state changes.
+ *
+ * @event iron-change
+ */
+
+ ariaActiveAttribute: {
+ type: String,
+ value: 'aria-checked'
+ }
+ },
+
+ ready: function() {
+ this._rippleContainer = this.$.radioContainer;
+ },
+
+ attached: function() {
+ // Wait until styles have resolved to check for the default sentinel.
+ // See polymer#4009 for more details.
+ Polymer.RenderStatus.afterNextRender(this, function() {
+ var inkSize = this.getComputedStyleValue('--calculated-paper-radio-button-ink-size').trim();
+ // If unset, compute and set the default `--paper-radio-button-ink-size`.
+ if (inkSize === '-1px') {
+ var size = parseFloat(this.getComputedStyleValue('--calculated-paper-radio-button-size').trim());
+ var defaultInkSize = Math.floor(3 * size);
+
+ // The button and ripple need to have the same parity so that their
+ // centers align.
+ if (defaultInkSize % 2 !== size % 2) {
+ defaultInkSize++;
+ }
+
+ this.updateStyles({
+ '--paper-radio-button-ink-size': defaultInkSize + 'px',
+ });
+ }
+ });
+ },
+ })
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.bower.json
new file mode 100644
index 00000000000..771c9af5cbd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.bower.json
@@ -0,0 +1,70 @@
+{
+ "name": "paper-radio-group",
+ "version": "2.2.0",
+ "description": "A group of material design radio buttons",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "radio",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-radio-group.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-radio-group",
+ "main": "paper-radio-group.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#1 - 2",
+ "paper-radio-button": "PolymerElements/paper-radio-button#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.1.7",
+ "paper-radio-button": "PolymerElements/paper-radio-button#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.2.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.2.0",
+ "commit": "b541ea1ff757fefa131c23f7312e3e40390fe6b1"
+ },
+ "_source": "https://github.com/PolymerElements/paper-radio-group.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-radio-group"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..c30f8cf1997
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-radio-group/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.travis.yml
new file mode 100644
index 00000000000..50cefe662e3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/.travis.yml
@@ -0,0 +1,29 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+env:
+ global:
+ - secure: >-
+ MERTTM+t9rMsIccJ4em6ocmNYm1w1r2Zy9qRxhdM1ya0xT2dAlV7UZY7t1jZ4MEdvqtTro1oEzfUr0zgD/mwBJUxLAB0RLRIbYAJEAfngaUUMgbbIgj3yLUZ/bZCvPtfhDPA1W/VsyldhUGCxojzgJthWgAoqWRj6jFX6X+QeWw=
+ - secure: >-
+ FvMxnNJsGlUg31KGuGjb0PpWHYFlMf9UPFzmLcFQAbc0kiWVoOl5adCfnv3yySf9EAKnolO02zR3K8KcCBQJ0SpWBlQ1pIgEdOxTXtWQRhlKHttKkj5L2X+qYAw4q5z0sy7lvb0VIjIOceabhvTTcnYmaF+OcrrVxd90ZpIckvk=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/README.md
new file mode 100644
index 00000000000..c13751ff1b3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/README.md
@@ -0,0 +1,49 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-radio-group.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-radio-group)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/paper-radio-group)_
+
+
+## &lt;paper-radio-group&gt;
+
+Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
+
+`paper-radio-group` allows user to select at most one radio button from a set.
+Checking one radio button that belongs to a radio group unchecks any
+previously checked radio button within the same group. Use
+`selected` to get or set the selected radio button.
+
+The <paper-radio-buttons> inside the group must have the `name` attribute
+set.
+
+Example:
+
+```html
+<paper-radio-group selected="small">
+ <paper-radio-button name="small">Small</paper-radio-button>
+ <paper-radio-button name="medium">Medium</paper-radio-button>
+ <paper-radio-button name="large">Large</paper-radio-button>
+</paper-radio-group>
+```
+
+Radio-button-groups can be made optional, and allow zero buttons to be selected:
+
+```html
+<paper-radio-group selected="small" allow-empty-selection>
+ <paper-radio-button name="small">Small</paper-radio-button>
+ <paper-radio-button name="medium">Medium</paper-radio-button>
+ <paper-radio-button name="large">Large</paper-radio-button>
+</paper-radio-group>
+```
+
+See <a href="paper-radio-button">paper-radio-button</a> for more
+information about `paper-radio-button`.
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-radio-group-item-padding` | The padding of the item | `12px` |
+
+### Notable breaking changes between 1.x and 2.x (hybrid):
+
+IronSelectableBehavior and IronMultiSelectableBehavior, which are used by
+paper-radio-group, introduce multiple breaking changes. Please see the README
+for those behaviors for more detail.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/bower.json
new file mode 100644
index 00000000000..283ed552b93
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/bower.json
@@ -0,0 +1,61 @@
+{
+ "name": "paper-radio-group",
+ "version": "2.2.0",
+ "description": "A group of material design radio buttons",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "radio",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-radio-group.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-radio-group",
+ "main": "paper-radio-group.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#1 - 2",
+ "paper-radio-button": "PolymerElements/paper-radio-button#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.1.7",
+ "paper-radio-button": "PolymerElements/paper-radio-button#^1.0.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/demo/index.html
new file mode 100644
index 00000000000..d42f2154b6b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/demo/index.html
@@ -0,0 +1,76 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>paper-radio-group demo</title>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../paper-radio-button/paper-radio-button.html">
+ <link rel="import" href="../paper-radio-group.html">
+ </head>
+ <body unresolved>
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ .vertical-section-container {
+ max-width: 500px;
+ }
+
+ label {
+ align-self: center;
+ }
+ </style>
+ </custom-style>
+
+ <div class="vertical-section-container centered">
+ <h3>A paper-radio-group allows only one item to be selected</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <label id="label1">Dinosaurs:</label>
+ <paper-radio-group aria-labelledby="label1">
+ <paper-radio-button name="a">allosaurus</paper-radio-button>
+ <paper-radio-button name="b">brontosaurus</paper-radio-button>
+ <paper-radio-button name="d" disabled>diplodocus</paper-radio-button>
+ </paper-radio-group>
+ </template>
+ </demo-snippet>
+
+ <h3>It can have an initial selection</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <label id="label2">Dinosaurs:</label>
+ <paper-radio-group selected="b" aria-labelledby="label2">
+ <paper-radio-button name="a">allosaurus</paper-radio-button>
+ <paper-radio-button name="b">brontosaurus</paper-radio-button>
+ <paper-radio-button name="d" disabled>diplodocus</paper-radio-button>
+ </paper-radio-group>
+ </template>
+ </demo-snippet>
+
+ <h3>It can optionally allow items to be deselected</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <label id="label3">Dinosaurs:</label>
+ <paper-radio-group selected="b" allow-empty-selection aria-labelledby="label3">
+ <paper-radio-button name="a">allosaurus</paper-radio-button>
+ <paper-radio-button name="b">brontosaurus</paper-radio-button>
+ <paper-radio-button name="d" disabled>diplodocus</paper-radio-button>
+ </paper-radio-group>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/hero.svg
new file mode 100755
index 00000000000..fc78ba76b87
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/hero.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <g>
+ <circle cx="112.5" cy="41" r="8"/>
+ <path d="M112.5,58c-9.4,0-17-7.6-17-17s7.6-17,17-17s17,7.6,17,17S121.9,58,112.5,58z M112.5,26c-8.3,0-15,6.7-15,15s6.7,15,15,15
+ s15-6.7,15-15S120.8,26,112.5,26z"/>
+ <circle cx="112.5" cy="85" r="8"/>
+ <path d="M112.5,102c-9.4,0-17-7.6-17-17s7.6-17,17-17s17,7.6,17,17S121.9,102,112.5,102z M112.5,70c-8.3,0-15,6.7-15,15
+ s6.7,15,15,15s15-6.7,15-15S120.8,70,112.5,70z"/>
+ </g>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/index.html
new file mode 100644
index 00000000000..966c717248e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/index.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-radio-group</title>
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../polymer/polymer.html">
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+ </head>
+ <body>
+
+ <iron-component-page></iron-component-page>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package-lock.json
new file mode 100644
index 00000000000..8dc05bda10f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package-lock.json
@@ -0,0 +1,983 @@
+{
+ "name": "@polymer/paper-radio-group",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz",
+ "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.6"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.3",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz",
+ "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.9.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.9.0.tgz",
+ "integrity": "sha512-WPOqlV2W/M4Ni40QIqYSv8PE7H4rjiPm1KEf02QPtjZOGlAC4Rv7e6UJ1Ke1O70WT5bydcsEn3LViFIqYpVOJw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package.json
new file mode 100644
index 00000000000..c3aa5e289af
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/paper-radio-group",
+ "private": true,
+ "description": "A group of material design radio buttons",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-radio-group.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.d.ts
new file mode 100644
index 00000000000..28f0fd77bf8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.d.ts
@@ -0,0 +1,86 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-radio-group.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts" />
+/// <reference path="../iron-menu-behavior/iron-menubar-behavior.d.ts" />
+/// <reference path="../paper-radio-button/paper-radio-button.d.ts" />
+
+/**
+ * Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
+ *
+ * `paper-radio-group` allows user to select at most one radio button from a set.
+ * Checking one radio button that belongs to a radio group unchecks any
+ * previously checked radio button within the same group. Use
+ * `selected` to get or set the selected radio button.
+ *
+ * The <paper-radio-buttons> inside the group must have the `name` attribute
+ * set.
+ *
+ * Example:
+ *
+ * <paper-radio-group selected="small">
+ * <paper-radio-button name="small">Small</paper-radio-button>
+ * <paper-radio-button name="medium">Medium</paper-radio-button>
+ * <paper-radio-button name="large">Large</paper-radio-button>
+ * </paper-radio-group>
+ *
+ * Radio-button-groups can be made optional, and allow zero buttons to be selected:
+ *
+ * <paper-radio-group selected="small" allow-empty-selection>
+ * <paper-radio-button name="small">Small</paper-radio-button>
+ * <paper-radio-button name="medium">Medium</paper-radio-button>
+ * <paper-radio-button name="large">Large</paper-radio-button>
+ * </paper-radio-group>
+ *
+ * See <a href="paper-radio-button">paper-radio-button</a> for more
+ * information about `paper-radio-button`.
+ *
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-radio-group-item-padding` | The padding of the item | `12px`
+ */
+interface PaperRadioGroupElement extends Polymer.Element, Polymer.IronMenubarBehavior {
+
+ /**
+ * Overriden from Polymer.IronSelectableBehavior
+ */
+ attrForSelected: string|null|undefined;
+
+ /**
+ * Overriden from Polymer.IronSelectableBehavior
+ */
+ selectable: string|null|undefined;
+
+ /**
+ * Overriden from Polymer.IronSelectableBehavior
+ */
+ selectedAttribute: string|null|undefined;
+
+ /**
+ * If true, radio-buttons can be deselected
+ */
+ allowEmptySelection: boolean|null|undefined;
+
+ /**
+ * Selects the given value.
+ */
+ select(value: any): void;
+ _onUpKey(event: any): void;
+ _onDownKey(event: any): void;
+ _onLeftKey(event: any): void;
+ _onRightKey(event: any): void;
+ _activateFocusedItem(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-radio-group": PaperRadioGroupElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.html
new file mode 100644
index 00000000000..4d4c346370a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-radio-group/paper-radio-group.html
@@ -0,0 +1,185 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+<link rel="import" href="../iron-menu-behavior/iron-menubar-behavior.html">
+<link rel="import" href="../paper-radio-button/paper-radio-button.html">
+
+<!--
+Material design: [Radio button](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button)
+
+`paper-radio-group` allows user to select at most one radio button from a set.
+Checking one radio button that belongs to a radio group unchecks any
+previously checked radio button within the same group. Use
+`selected` to get or set the selected radio button.
+
+The <paper-radio-buttons> inside the group must have the `name` attribute
+set.
+
+Example:
+
+ <paper-radio-group selected="small">
+ <paper-radio-button name="small">Small</paper-radio-button>
+ <paper-radio-button name="medium">Medium</paper-radio-button>
+ <paper-radio-button name="large">Large</paper-radio-button>
+ </paper-radio-group>
+
+Radio-button-groups can be made optional, and allow zero buttons to be selected:
+
+ <paper-radio-group selected="small" allow-empty-selection>
+ <paper-radio-button name="small">Small</paper-radio-button>
+ <paper-radio-button name="medium">Medium</paper-radio-button>
+ <paper-radio-button name="large">Large</paper-radio-button>
+ </paper-radio-group>
+
+See <a href="paper-radio-button">paper-radio-button</a> for more
+information about `paper-radio-button`.
+
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-radio-group-item-padding` | The padding of the item | `12px`
+
+@group Paper Elements
+@element paper-radio-group
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-radio-group">
+ <template>
+ <style>
+ :host {
+ display: inline-block;
+ }
+
+ :host ::slotted(*) {
+ padding: var(--paper-radio-group-item-padding, 12px);
+ }
+ </style>
+
+ <slot></slot>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+ is: 'paper-radio-group',
+
+ behaviors: [
+ Polymer.IronMenubarBehavior
+ ],
+
+ /** @private */
+ hostAttributes: {
+ role: 'radiogroup',
+ },
+
+ properties: {
+ /**
+ * Fired when the radio group selection changes.
+ *
+ * @event paper-radio-group-changed
+ */
+
+ /**
+ * Overriden from Polymer.IronSelectableBehavior
+ */
+ attrForSelected: {
+ type: String,
+ value: 'name'
+ },
+
+ /**
+ * Overriden from Polymer.IronSelectableBehavior
+ */
+ selectedAttribute: {
+ type: String,
+ value: 'checked'
+ },
+
+ /**
+ * Overriden from Polymer.IronSelectableBehavior
+ */
+ selectable: {
+ type: String,
+ value: 'paper-radio-button'
+ },
+
+ /**
+ * If true, radio-buttons can be deselected
+ */
+ allowEmptySelection: {
+ type: Boolean,
+ value: false
+ }
+ },
+
+ /**
+ * Selects the given value.
+ */
+ select: function(value) {
+ var newItem = this._valueToItem(value);
+ if (newItem && newItem.hasAttribute('disabled')) {
+ return;
+ }
+
+ if (this.selected) {
+ var oldItem = this._valueToItem(this.selected);
+
+ if (this.selected == value) {
+ // If deselecting is allowed we'll have to apply an empty selection.
+ // Otherwise, we should force the selection to stay and make this
+ // action a no-op.
+ if (this.allowEmptySelection) {
+ value = '';
+ } else {
+ if (oldItem)
+ oldItem.checked = true;
+ return;
+ }
+ }
+
+ if (oldItem)
+ oldItem.checked = false;
+ }
+
+ Polymer.IronSelectableBehavior.select.apply(this, [value]);
+ this.fire('paper-radio-group-changed');
+ },
+
+ _activateFocusedItem: function() {
+ this._itemActivate(this._valueForItem(this.focusedItem), this.focusedItem);
+ },
+
+ _onUpKey: function(event) {
+ this._focusPrevious();
+ event.preventDefault();
+ this._activateFocusedItem();
+ },
+
+ _onDownKey: function(event) {
+ this._focusNext();
+ event.preventDefault();
+ this._activateFocusedItem();
+ },
+
+ _onLeftKey: function(event) {
+ Polymer.IronMenubarBehaviorImpl._onLeftKey.apply(this, arguments);
+ this._activateFocusedItem();
+ },
+
+ _onRightKey: function(event) {
+ Polymer.IronMenubarBehaviorImpl._onRightKey.apply(this, arguments);
+ this._activateFocusedItem();
+ }
+ });
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.bower.json
new file mode 100644
index 00000000000..c3b272a384b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.bower.json
@@ -0,0 +1,67 @@
+{
+ "name": "paper-ripple",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Adds a material design ripple to any container",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "ripple"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-ripple.git"
+ },
+ "main": "paper-ripple.html",
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-icon": "polymerelements/iron-icon#1 - 2",
+ "iron-icons": "polymerelements/iron-icons#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "iron-icons": "polymerelements/iron-icons#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/paper-ripple",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "6791ef2bb264e5ee314add5b0199c3d9562623c9"
+ },
+ "_source": "https://github.com/PolymerElements/paper-ripple.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/paper-ripple"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..689423dad14
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-ripple/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.travis.yml
new file mode 100644
index 00000000000..694626c6ac9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ eLNXQngbn6nHUirBVQAroarZUJHGZAj8sqSJaxRBqaL08//nzaOpnzuavYUeNSJ1fOnbL95jS5yZJy8+oCUW0a6BCXZUHJCrj/N6ywG4KpgPYQnUZVnpvsLdXZJuq4L4l5jYL1GsPydMePfAlrDpSu+QzEc1+C0q7sprxsbHbbQ=
+ - secure: >-
+ YLIZR4/tqr25Ty+daEdTInLVXoV/lSwagZCGMfT84SgHj94UYHr9u9Te3tNDeI8I83Kq1PSUn1kKE6ptT+EjuGhTDsyLx2IboVDtNlngDIo5GTSO1RBBzIlHRIb2eMS6om9cfLiOEWM3gFS/Mos/VYO3/A3ZSLE5BcNFagij724=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/README.md
new file mode 100644
index 00000000000..ac5f392643a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/README.md
@@ -0,0 +1,40 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-ripple.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-ripple)
+
+## &lt;paper-ripple&gt;
+
+Material design: [Surface reaction](https://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-reaction)
+
+`paper-ripple` provides a visual effect that other paper elements can
+use to simulate a rippling effect emanating from the point of contact. The
+effect can be visualized as a concentric circle with motion.
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-ripple.html">
+ <style is="custom-style">
+ div {
+ height: 100px;
+ width: 100%;
+ box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24);
+ }
+
+ paper-ripple {
+ color: #4285f4;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<div style="position: relative">
+ <paper-ripple></paper-ripple>
+</div
+```
+
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/bower.json
new file mode 100644
index 00000000000..2ab2f1a8dd1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/bower.json
@@ -0,0 +1,57 @@
+{
+ "name": "paper-ripple",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Adds a material design ripple to any container",
+ "private": true,
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "ripple"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-ripple.git"
+ },
+ "main": "paper-ripple.html",
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#1 - 2",
+ "iron-icon": "polymerelements/iron-icon#1 - 2",
+ "iron-icons": "polymerelements/iron-icons#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "polymerelements/iron-component-page#^1.0.0",
+ "iron-icon": "polymerelements/iron-icon#^1.0.0",
+ "iron-icons": "polymerelements/iron-icons#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/demo/index.html
new file mode 100644
index 00000000000..58a7d0d1bf9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/demo/index.html
@@ -0,0 +1,405 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<!doctype html>
+<html>
+
+<head>
+ <title>paper-ripple demo</title>
+
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-icons/iron-icons.html">
+ <link rel="import" href="../../iron-icon/iron-icon.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../paper-ripple.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles">
+
+ demo-snippet {
+ --demo-snippet-code: {
+ max-height: 250px;
+ }
+ }
+
+ /* Button */
+ .button {
+ display: inline-block;
+ position: relative;
+ width: 80px;
+ height: 32px;
+ line-height: 32px;
+ border-radius: 2px;
+ font-size: 0.9em;
+ background-color: #fff;
+ color: #646464;
+ margin: 10px;
+ }
+
+ .button > paper-ripple {
+ border-radius: 2px;
+ overflow: hidden;
+ }
+
+ .button.narrow {
+ width: 60px;
+ }
+
+ .button.grey {
+ background-color: #eee;
+ }
+
+ .button.blue {
+ background-color: #4285f4;
+ color: #fff;
+ }
+
+ .button.green {
+ background-color: #0f9d58;
+ color: #fff;
+ }
+
+ .button.raised {
+ transition: box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ transition-delay: 0.2s;
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+ }
+
+ .button.raised:active {
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2);
+ transition-delay: 0s;
+ }
+
+ /* Icon Button */
+ .icon-button {
+ position: relative;
+ display: inline-block;
+ width: 56px;
+ height: 56px;
+ }
+
+ .icon-button > iron-icon {
+ margin: 16px;
+ transition: -webkit-transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ }
+
+ .icon-button:hover > iron-icon {
+ -webkit-transform: scale(1.2);
+ transform: scale(1.2);
+ }
+
+ .icon-button > paper-ripple {
+ overflow: hidden;
+ color: #646464;
+ }
+
+ .icon-button.red > iron-icon {
+ --iron-icon-fill-color: #db4437;
+ }
+
+ .icon-button.red > paper-ripple {
+ color: #db4437;
+ }
+
+ .icon-button.blue > iron-icon {
+ --iron-icon-fill-color: #4285f4;
+ }
+
+ .icon-button.blue > paper-ripple {
+ color: #4285f4;
+ }
+
+ /* FAB */
+ .fab {
+ position: relative;
+ display: inline-block;
+ width: 56px;
+ height: 56px;
+ border-radius: 50%;
+ color: #fff;
+ overflow: hidden;
+ transition: box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
+ transition-delay: 0.2s;
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+ margin: 10px;
+ }
+
+ .fab.red {
+ background-color: #d23f31;
+ }
+
+ .fab.blue {
+ background-color: #4285f4;
+ }
+
+ .fab.green {
+ background-color: #0f9d58;
+ }
+
+ .fab:active {
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2);
+ transition-delay: 0s;
+ }
+
+ .fab > iron-icon {
+ margin: 16px;
+ }
+
+ .fab > iron-icon {
+ --iron-icon-fill-color: #fff;
+ }
+
+ /* Menu */
+ .menu {
+ display: inline-block;
+ width: 180px;
+ margin: 10px;
+ background-color: #fff;
+ box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2);
+ }
+
+ .item {
+ position: relative;
+ height: 48px;
+ line-height: 48px;
+ color: #646464;
+ font-size: 0.9em;
+ }
+
+ .menu.blue > .item {
+ color: #4285f4;
+ }
+
+ /* Card, Dialog */
+ .card, .dialog {
+ position: relative;
+ display: inline-block;
+ width: 240px;
+ height: 240px;
+ vertical-align: top;
+ background-color: #fff;
+ box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24);
+ margin: 10px;
+ }
+
+ .dialog {
+ box-sizing: border-box;
+ padding: 16px;
+ }
+
+ .dialog > .content {
+ height: 170px;
+ font-size: 0.9em;
+ }
+
+ .dialog > .content > .title {
+ font-size: 1.3em;
+ }
+
+ .dialog > .button {
+ float: right;
+ }
+
+ .card.image {
+ background: url(http://lorempixel.com/300/240/nature/);
+ color: #fff;
+ }
+
+ /* Misc */
+ .center {
+ text-align: center;
+ }
+
+ .label {
+ padding: 0 16px;
+ }
+
+ .label-blue {
+ color: #4285f4;
+ }
+
+ .label-red {
+ color: #d23f31;
+ }
+ </style></custom-style>
+</head>
+
+<body unresolved class="centered">
+
+ <demo-snippet class="centered-demo">
+ <template>
+ <div class="button raised">
+ <div class="center" tabindex="1">SUBMIT</div>
+ <paper-ripple></paper-ripple>
+ </div>
+
+ <div class="button raised">
+ <div class="center" tabindex="1">NO INK</div>
+ <paper-ripple noink></paper-ripple>
+ </div>
+
+ <div class="button raised grey">
+ <div class="center" tabindex="1">CANCEL</div>
+ <paper-ripple></paper-ripple>
+ </div>
+
+ <div class="button raised blue">
+ <div class="center" tabindex="1">COMPOSE</div>
+ <paper-ripple></paper-ripple>
+ </div>
+
+ <div class="button raised green">
+ <div class="center" tabindex="1">OK</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <demo-snippet class="centered-demo">
+ <template>
+ <div class="button raised grey narrow">
+ <div class="center" tabindex="1">+1</div>
+ <paper-ripple></paper-ripple>
+ </div>
+
+ <div class="button raised grey narrow label-blue">
+ <div class="center" tabindex="1">+1</div>
+ <paper-ripple></paper-ripple>
+ </div>
+
+ <div class="button raised grey narrow label-red">
+ <div class="center" tabindex="1">+1</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <demo-snippet class="centered-demo">
+ <template>
+ <div class="icon-button">
+ <iron-icon icon="menu" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+
+ <div class="icon-button">
+ <iron-icon icon="more-vert" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+
+ <div class="icon-button red">
+ <iron-icon icon="delete" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+
+ <div class="icon-button blue">
+ <iron-icon icon="account-box" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <demo-snippet class="centered-demo">
+ <template>
+ <div class="fab red">
+ <iron-icon icon="add" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+
+ <div class="fab blue">
+ <iron-icon icon="mail" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+
+ <div class="fab green">
+ <iron-icon icon="create" tabindex="1"></iron-icon>
+ <paper-ripple class="circle" recenters></paper-ripple>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <demo-snippet class="centered-demo">
+ <template>
+ <div class="menu">
+ <div class="item">
+ <div class="label" tabindex="1">Mark as unread</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ <div class="item">
+ <div class="label" tabindex="1">Mark as important</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ <div class="item">
+ <div class="label" tabindex="1">Add to Tasks</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ <div class="item">
+ <div class="label" tabindex="1">Create event</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ </div>
+
+ <div class="menu blue">
+ <div class="item">
+ <div class="label" tabindex="1">Import</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ <div class="item">
+ <div class="label" tabindex="1">Export</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ <div class="item">
+ <div class="label" tabindex="1">Print</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ <div class="item">
+ <div class="label" tabindex="1">Restore contacts</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <demo-snippet class="centered-demo">
+ <template>
+ <div class="dialog">
+ <div class="content">
+ <div class="title">Permission</div>
+ <br>
+ <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</div>
+ </div>
+
+ <div class="button label-blue">
+ <div class="center" tabindex="1">ACCEPT</div>
+ <paper-ripple></paper-ripple>
+ </div>
+
+ <div class="button">
+ <div class="center" tabindex="1">DECLINE</div>
+ <paper-ripple></paper-ripple>
+ </div>
+ </div>
+
+ <div class="card" tabindex="1">
+ <paper-ripple recenters></paper-ripple>
+ </div>
+
+ <div class="card image" tabindex="1">
+ <paper-ripple recenters></paper-ripple>
+ </div>
+ </template>
+ </demo-snippet>
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/hero.svg
new file mode 100755
index 00000000000..f8a872f1e63
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/hero.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <path d="M175,81H49V45h126V81z M51,79h122V47H51V79z"/>
+ <g>
+ <defs>
+ <rect id="SVGID_5_" x="50" y="46" width="124" height="34"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_5_" overflow="visible"/>
+ </clipPath>
+ <circle opacity="0.5" clip-path="url(#SVGID_2_)" cx="84.4" cy="62.7" r="41.9"/>
+ <circle opacity="0.6" clip-path="url(#SVGID_2_)" cx="84.4" cy="62.7" r="26.3"/>
+ <circle opacity="0.6" clip-path="url(#SVGID_2_)" cx="66.4" cy="62.7" r="26.3"/>
+ </g>
+ <circle cx="50" cy="80" r="4"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/index.html
new file mode 100644
index 00000000000..e552b0bb955
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>paper-ripple</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package-lock.json
new file mode 100644
index 00000000000..127fbe41a27
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-ripple",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package.json
new file mode 100644
index 00000000000..1f5cc75894e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-ripple",
+ "private": true,
+ "description": "Adds a material design ripple to any container",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-ripple.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.d.ts
new file mode 100644
index 00000000000..88f5a613347
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.d.ts
@@ -0,0 +1,171 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-ripple.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.d.ts" />
+
+/**
+ * Material design: [Surface reaction](https://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-reaction)
+ *
+ * `paper-ripple` provides a visual effect that other paper elements can
+ * use to simulate a rippling effect emanating from the point of contact. The
+ * effect can be visualized as a concentric circle with motion.
+ *
+ * Example:
+ *
+ * <div style="position:relative">
+ * <paper-ripple></paper-ripple>
+ * </div>
+ *
+ * Note, it's important that the parent container of the ripple be relative position, otherwise
+ * the ripple will emanate outside of the desired container.
+ *
+ * `paper-ripple` listens to "mousedown" and "mouseup" events so it would display ripple
+ * effect when touches on it. You can also defeat the default behavior and
+ * manually route the down and up actions to the ripple element. Note that it is
+ * important if you call `downAction()` you will have to make sure to call
+ * `upAction()` so that `paper-ripple` would end the animation loop.
+ *
+ * Example:
+ *
+ * <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple>
+ * ...
+ * downAction: function(e) {
+ * this.$.ripple.downAction(e.detail);
+ * },
+ * upAction: function(e) {
+ * this.$.ripple.upAction();
+ * }
+ *
+ * Styling ripple effect:
+ *
+ * Use CSS color property to style the ripple:
+ *
+ * paper-ripple {
+ * color: #4285f4;
+ * }
+ *
+ * Note that CSS color property is inherited so it is not required to set it on
+ * the `paper-ripple` element directly.
+ *
+ * By default, the ripple is centered on the point of contact. Apply the `recenters`
+ * attribute to have the ripple grow toward the center of its container.
+ *
+ * <paper-ripple recenters></paper-ripple>
+ *
+ * You can also center the ripple inside its container from the start.
+ *
+ * <paper-ripple center></paper-ripple>
+ *
+ * Apply `circle` class to make the rippling effect within a circle.
+ *
+ * <paper-ripple class="circle"></paper-ripple>
+ */
+interface PaperRippleElement extends Polymer.Element, Polymer.IronA11yKeysBehavior {
+ keyBindings: object;
+
+ /**
+ * The initial opacity set on the wave.
+ */
+ initialOpacity: number|null|undefined;
+
+ /**
+ * How fast (opacity per second) the wave fades out.
+ */
+ opacityDecayVelocity: number|null|undefined;
+
+ /**
+ * If true, ripples will exhibit a gravitational pull towards
+ * the center of their container as they fade away.
+ */
+ recenters: boolean|null|undefined;
+
+ /**
+ * If true, ripples will center inside its container
+ */
+ center: boolean|null|undefined;
+
+ /**
+ * A list of the visual ripples.
+ */
+ ripples: any[]|null|undefined;
+
+ /**
+ * True when there are visible ripples animating within the
+ * element.
+ */
+ readonly animating: boolean|null|undefined;
+
+ /**
+ * If true, the ripple will remain in the "down" state until `holdDown`
+ * is set to false again.
+ */
+ holdDown: boolean|null|undefined;
+
+ /**
+ * If true, the ripple will not generate a ripple effect
+ * via pointer interaction.
+ * Calling ripple's imperative api like `simulatedRipple` will
+ * still generate the ripple effect.
+ */
+ noink: boolean|null|undefined;
+ _animating: boolean|null|undefined;
+ _boundAnimate: Function|null|undefined;
+ readonly target: any;
+ readonly shouldKeepAnimating: any;
+ attached(): void;
+ detached(): void;
+ simulatedRipple(): void;
+
+ /**
+ * Provokes a ripple down effect via a UI event,
+ * respecting the `noink` property.
+ */
+ uiDownAction(event?: Event|null): void;
+
+ /**
+ * Provokes a ripple down effect via a UI event,
+ * *not* respecting the `noink` property.
+ */
+ downAction(event?: Event|null): void;
+
+ /**
+ * Provokes a ripple up effect via a UI event,
+ * respecting the `noink` property.
+ */
+ uiUpAction(event?: Event|null): void;
+
+ /**
+ * Provokes a ripple up effect via a UI event,
+ * *not* respecting the `noink` property.
+ */
+ upAction(event?: Event|null): void;
+ onAnimationComplete(): void;
+ addRipple(): any;
+ removeRipple(ripple: any): void;
+
+ /**
+ * This conflicts with Element#antimate().
+ * https://developer.mozilla.org/en-US/docs/Web/API/Element/animate
+ */
+ animate(): void;
+ _onEnterKeydown(): void;
+ _onSpaceKeydown(): void;
+ _onSpaceKeyup(): void;
+
+ /**
+ * effect.
+ */
+ _holdDownChanged(newVal: any, oldVal: any): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-ripple": PaperRippleElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.html
new file mode 100644
index 00000000000..e7ea501169b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-ripple/paper-ripple.html
@@ -0,0 +1,729 @@
+<!--
+@license
+Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-keys-behavior/iron-a11y-keys-behavior.html">
+
+<!--
+Material design: [Surface reaction](https://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-surface-reaction)
+
+`paper-ripple` provides a visual effect that other paper elements can
+use to simulate a rippling effect emanating from the point of contact. The
+effect can be visualized as a concentric circle with motion.
+
+Example:
+
+ <div style="position:relative">
+ <paper-ripple></paper-ripple>
+ </div>
+
+Note, it's important that the parent container of the ripple be relative position, otherwise
+the ripple will emanate outside of the desired container.
+
+`paper-ripple` listens to "mousedown" and "mouseup" events so it would display ripple
+effect when touches on it. You can also defeat the default behavior and
+manually route the down and up actions to the ripple element. Note that it is
+important if you call `downAction()` you will have to make sure to call
+`upAction()` so that `paper-ripple` would end the animation loop.
+
+Example:
+
+ <paper-ripple id="ripple" style="pointer-events: none;"></paper-ripple>
+ ...
+ downAction: function(e) {
+ this.$.ripple.downAction(e.detail);
+ },
+ upAction: function(e) {
+ this.$.ripple.upAction();
+ }
+
+Styling ripple effect:
+
+ Use CSS color property to style the ripple:
+
+ paper-ripple {
+ color: #4285f4;
+ }
+
+ Note that CSS color property is inherited so it is not required to set it on
+ the `paper-ripple` element directly.
+
+By default, the ripple is centered on the point of contact. Apply the `recenters`
+attribute to have the ripple grow toward the center of its container.
+
+ <paper-ripple recenters></paper-ripple>
+
+You can also center the ripple inside its container from the start.
+
+ <paper-ripple center></paper-ripple>
+
+Apply `circle` class to make the rippling effect within a circle.
+
+ <paper-ripple class="circle"></paper-ripple>
+
+@group Paper Elements
+@element paper-ripple
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-ripple">
+
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: absolute;
+ border-radius: inherit;
+ overflow: hidden;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+
+ /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers,
+ * creating a node (with a position:absolute) in the middle of an event
+ * handler "interrupts" that event handler (which happens when the
+ * ripple is created on demand) */
+ pointer-events: none;
+ }
+
+ :host([animating]) {
+ /* This resolves a rendering issue in Chrome (as of 40) where the
+ ripple is not properly clipped by its parent (which may have
+ rounded corners). See: http://jsbin.com/temexa/4
+
+ Note: We only apply this style conditionally. Otherwise, the browser
+ will create a new compositing layer for every ripple element on the
+ page, and that would be bad. */
+ -webkit-transform: translate(0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ #background,
+ #waves,
+ .wave-container,
+ .wave {
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+
+ #background,
+ .wave {
+ opacity: 0;
+ }
+
+ #waves,
+ .wave {
+ overflow: hidden;
+ }
+
+ .wave-container,
+ .wave {
+ border-radius: 50%;
+ }
+
+ :host(.circle) #background,
+ :host(.circle) #waves {
+ border-radius: 50%;
+ }
+
+ :host(.circle) .wave-container {
+ overflow: hidden;
+ }
+ </style>
+
+ <div id="background"></div>
+ <div id="waves"></div>
+ </template>
+</dom-module>
+<script>
+ (function() {
+ 'use strict';
+
+ var Utility = {
+ distance: function(x1, y1, x2, y2) {
+ var xDelta = (x1 - x2);
+ var yDelta = (y1 - y2);
+
+ return Math.sqrt(xDelta * xDelta + yDelta * yDelta);
+ },
+
+ now: window.performance && window.performance.now ?
+ window.performance.now.bind(window.performance) :
+ Date.now
+ };
+
+ /**
+ * @param {HTMLElement} element
+ * @constructor
+ */
+ function ElementMetrics(element) {
+ this.element = element;
+ this.width = this.boundingRect.width;
+ this.height = this.boundingRect.height;
+
+ this.size = Math.max(this.width, this.height);
+ }
+
+ ElementMetrics.prototype = {
+ get boundingRect() {
+ return this.element.getBoundingClientRect();
+ },
+
+ furthestCornerDistanceFrom: function(x, y) {
+ var topLeft = Utility.distance(x, y, 0, 0);
+ var topRight = Utility.distance(x, y, this.width, 0);
+ var bottomLeft = Utility.distance(x, y, 0, this.height);
+ var bottomRight = Utility.distance(x, y, this.width, this.height);
+
+ return Math.max(topLeft, topRight, bottomLeft, bottomRight);
+ }
+ };
+
+ /**
+ * @param {HTMLElement} element
+ * @constructor
+ */
+ function Ripple(element) {
+ this.element = element;
+ this.color = window.getComputedStyle(element).color;
+
+ this.wave = document.createElement('div');
+ this.waveContainer = document.createElement('div');
+ this.wave.style.backgroundColor = this.color;
+ this.wave.classList.add('wave');
+ this.waveContainer.classList.add('wave-container');
+ Polymer.dom(this.waveContainer).appendChild(this.wave);
+
+ this.resetInteractionState();
+ }
+
+ Ripple.MAX_RADIUS = 300;
+
+ Ripple.prototype = {
+ get recenters() {
+ return this.element.recenters;
+ },
+
+ get center() {
+ return this.element.center;
+ },
+
+ get mouseDownElapsed() {
+ var elapsed;
+
+ if (!this.mouseDownStart) {
+ return 0;
+ }
+
+ elapsed = Utility.now() - this.mouseDownStart;
+
+ if (this.mouseUpStart) {
+ elapsed -= this.mouseUpElapsed;
+ }
+
+ return elapsed;
+ },
+
+ get mouseUpElapsed() {
+ return this.mouseUpStart ? Utility.now() - this.mouseUpStart : 0;
+ },
+
+ get mouseDownElapsedSeconds() {
+ return this.mouseDownElapsed / 1000;
+ },
+
+ get mouseUpElapsedSeconds() {
+ return this.mouseUpElapsed / 1000;
+ },
+
+ get mouseInteractionSeconds() {
+ return this.mouseDownElapsedSeconds + this.mouseUpElapsedSeconds;
+ },
+
+ get initialOpacity() {
+ return this.element.initialOpacity;
+ },
+
+ get opacityDecayVelocity() {
+ return this.element.opacityDecayVelocity;
+ },
+
+ get radius() {
+ var width2 = this.containerMetrics.width * this.containerMetrics.width;
+ var height2 = this.containerMetrics.height * this.containerMetrics.height;
+ var waveRadius =
+ Math.min(Math.sqrt(width2 + height2), Ripple.MAX_RADIUS) * 1.1 + 5;
+
+ var duration = 1.1 - 0.2 * (waveRadius / Ripple.MAX_RADIUS);
+ var timeNow = this.mouseInteractionSeconds / duration;
+ var size = waveRadius * (1 - Math.pow(80, -timeNow));
+
+ return Math.abs(size);
+ },
+
+ get opacity() {
+ if (!this.mouseUpStart) {
+ return this.initialOpacity;
+ }
+
+ return Math.max(
+ 0,
+ this.initialOpacity -
+ this.mouseUpElapsedSeconds * this.opacityDecayVelocity);
+ },
+
+ get outerOpacity() {
+ // Linear increase in background opacity, capped at the opacity
+ // of the wavefront (waveOpacity).
+ var outerOpacity = this.mouseUpElapsedSeconds * 0.3;
+ var waveOpacity = this.opacity;
+
+ return Math.max(0, Math.min(outerOpacity, waveOpacity));
+ },
+
+ get isOpacityFullyDecayed() {
+ return this.opacity < 0.01 &&
+ this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
+ },
+
+ get isRestingAtMaxRadius() {
+ return this.opacity >= this.initialOpacity &&
+ this.radius >= Math.min(this.maxRadius, Ripple.MAX_RADIUS);
+ },
+
+ get isAnimationComplete() {
+ return this.mouseUpStart ? this.isOpacityFullyDecayed :
+ this.isRestingAtMaxRadius;
+ },
+
+ get translationFraction() {
+ return Math.min(
+ 1, this.radius / this.containerMetrics.size * 2 / Math.sqrt(2));
+ },
+
+ get xNow() {
+ if (this.xEnd) {
+ return this.xStart + this.translationFraction * (this.xEnd - this.xStart);
+ }
+
+ return this.xStart;
+ },
+
+ get yNow() {
+ if (this.yEnd) {
+ return this.yStart + this.translationFraction * (this.yEnd - this.yStart);
+ }
+
+ return this.yStart;
+ },
+
+ get isMouseDown() {
+ return this.mouseDownStart && !this.mouseUpStart;
+ },
+
+ resetInteractionState: function() {
+ this.maxRadius = 0;
+ this.mouseDownStart = 0;
+ this.mouseUpStart = 0;
+
+ this.xStart = 0;
+ this.yStart = 0;
+ this.xEnd = 0;
+ this.yEnd = 0;
+ this.slideDistance = 0;
+
+ this.containerMetrics = new ElementMetrics(this.element);
+ },
+
+ draw: function() {
+ var scale;
+ var dx;
+ var dy;
+
+ this.wave.style.opacity = this.opacity;
+
+ scale = this.radius / (this.containerMetrics.size / 2);
+ dx = this.xNow - (this.containerMetrics.width / 2);
+ dy = this.yNow - (this.containerMetrics.height / 2);
+
+
+ // 2d transform for safari because of border-radius and overflow:hidden
+ // clipping bug. https://bugs.webkit.org/show_bug.cgi?id=98538
+ this.waveContainer.style.webkitTransform =
+ 'translate(' + dx + 'px, ' + dy + 'px)';
+ this.waveContainer.style.transform =
+ 'translate3d(' + dx + 'px, ' + dy + 'px, 0)';
+ this.wave.style.webkitTransform = 'scale(' + scale + ',' + scale + ')';
+ this.wave.style.transform = 'scale3d(' + scale + ',' + scale + ',1)';
+ },
+
+ /** @param {Event=} event */
+ downAction: function(event) {
+ var xCenter = this.containerMetrics.width / 2;
+ var yCenter = this.containerMetrics.height / 2;
+
+ this.resetInteractionState();
+ this.mouseDownStart = Utility.now();
+
+ if (this.center) {
+ this.xStart = xCenter;
+ this.yStart = yCenter;
+ this.slideDistance =
+ Utility.distance(this.xStart, this.yStart, this.xEnd, this.yEnd);
+ } else {
+ this.xStart = event ?
+ event.detail.x - this.containerMetrics.boundingRect.left :
+ this.containerMetrics.width / 2;
+ this.yStart = event ?
+ event.detail.y - this.containerMetrics.boundingRect.top :
+ this.containerMetrics.height / 2;
+ }
+
+ if (this.recenters) {
+ this.xEnd = xCenter;
+ this.yEnd = yCenter;
+ this.slideDistance =
+ Utility.distance(this.xStart, this.yStart, this.xEnd, this.yEnd);
+ }
+
+ this.maxRadius = this.containerMetrics.furthestCornerDistanceFrom(
+ this.xStart, this.yStart);
+
+ this.waveContainer.style.top =
+ (this.containerMetrics.height - this.containerMetrics.size) / 2 + 'px';
+ this.waveContainer.style.left =
+ (this.containerMetrics.width - this.containerMetrics.size) / 2 + 'px';
+
+ this.waveContainer.style.width = this.containerMetrics.size + 'px';
+ this.waveContainer.style.height = this.containerMetrics.size + 'px';
+ },
+
+ /** @param {Event=} event */
+ upAction: function(event) {
+ if (!this.isMouseDown) {
+ return;
+ }
+
+ this.mouseUpStart = Utility.now();
+ },
+
+ remove: function() {
+ Polymer.dom(this.waveContainer.parentNode).removeChild(this.waveContainer);
+ }
+ };
+
+ Polymer({
+ is: 'paper-ripple',
+
+ behaviors: [Polymer.IronA11yKeysBehavior],
+
+ properties: {
+ /**
+ * The initial opacity set on the wave.
+ *
+ * @attribute initialOpacity
+ * @type number
+ * @default 0.25
+ */
+ initialOpacity: {type: Number, value: 0.25},
+
+ /**
+ * How fast (opacity per second) the wave fades out.
+ *
+ * @attribute opacityDecayVelocity
+ * @type number
+ * @default 0.8
+ */
+ opacityDecayVelocity: {type: Number, value: 0.8},
+
+ /**
+ * If true, ripples will exhibit a gravitational pull towards
+ * the center of their container as they fade away.
+ *
+ * @attribute recenters
+ * @type boolean
+ * @default false
+ */
+ recenters: {type: Boolean, value: false},
+
+ /**
+ * If true, ripples will center inside its container
+ *
+ * @attribute recenters
+ * @type boolean
+ * @default false
+ */
+ center: {type: Boolean, value: false},
+
+ /**
+ * A list of the visual ripples.
+ *
+ * @attribute ripples
+ * @type Array
+ * @default []
+ */
+ ripples: {
+ type: Array,
+ value: function() {
+ return [];
+ }
+ },
+
+ /**
+ * True when there are visible ripples animating within the
+ * element.
+ */
+ animating:
+ {type: Boolean, readOnly: true, reflectToAttribute: true, value: false},
+
+ /**
+ * If true, the ripple will remain in the "down" state until `holdDown`
+ * is set to false again.
+ */
+ holdDown: {type: Boolean, value: false, observer: '_holdDownChanged'},
+
+ /**
+ * If true, the ripple will not generate a ripple effect
+ * via pointer interaction.
+ * Calling ripple's imperative api like `simulatedRipple` will
+ * still generate the ripple effect.
+ */
+ noink: {type: Boolean, value: false},
+
+ _animating: {type: Boolean},
+
+ _boundAnimate: {
+ type: Function,
+ value: function() {
+ return this.animate.bind(this);
+ }
+ }
+ },
+
+ get target() {
+ return this.keyEventTarget;
+ },
+
+ /**
+ * @type {!Object}
+ */
+ keyBindings: {
+ 'enter:keydown': '_onEnterKeydown',
+ 'space:keydown': '_onSpaceKeydown',
+ 'space:keyup': '_onSpaceKeyup'
+ },
+
+ attached: function() {
+ // Set up a11yKeysBehavior to listen to key events on the target,
+ // so that space and enter activate the ripple even if the target doesn't
+ // handle key events. The key handlers deal with `noink` themselves.
+ if (this.parentNode.nodeType == 11) { // DOCUMENT_FRAGMENT_NODE
+ this.keyEventTarget = Polymer.dom(this).getOwnerRoot().host;
+ } else {
+ this.keyEventTarget = this.parentNode;
+ }
+ var keyEventTarget = /** @type {!EventTarget} */ (this.keyEventTarget);
+ this.listen(keyEventTarget, 'up', 'uiUpAction');
+ this.listen(keyEventTarget, 'down', 'uiDownAction');
+ },
+
+ detached: function() {
+ this.unlisten(this.keyEventTarget, 'up', 'uiUpAction');
+ this.unlisten(this.keyEventTarget, 'down', 'uiDownAction');
+ this.keyEventTarget = null;
+ },
+
+ get shouldKeepAnimating() {
+ for (var index = 0; index < this.ripples.length; ++index) {
+ if (!this.ripples[index].isAnimationComplete) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ simulatedRipple: function() {
+ this.downAction(null);
+
+ // Please see polymer/polymer#1305
+ this.async(function() {
+ this.upAction();
+ }, 1);
+ },
+
+ /**
+ * Provokes a ripple down effect via a UI event,
+ * respecting the `noink` property.
+ * @param {Event=} event
+ */
+ uiDownAction: function(event) {
+ if (!this.noink) {
+ this.downAction(event);
+ }
+ },
+
+ /**
+ * Provokes a ripple down effect via a UI event,
+ * *not* respecting the `noink` property.
+ * @param {Event=} event
+ */
+ downAction: function(event) {
+ if (this.holdDown && this.ripples.length > 0) {
+ return;
+ }
+
+ var ripple = this.addRipple();
+
+ ripple.downAction(event);
+
+ if (!this._animating) {
+ this._animating = true;
+ this.animate();
+ }
+ },
+
+ /**
+ * Provokes a ripple up effect via a UI event,
+ * respecting the `noink` property.
+ * @param {Event=} event
+ */
+ uiUpAction: function(event) {
+ if (!this.noink) {
+ this.upAction(event);
+ }
+ },
+
+ /**
+ * Provokes a ripple up effect via a UI event,
+ * *not* respecting the `noink` property.
+ * @param {Event=} event
+ */
+ upAction: function(event) {
+ if (this.holdDown) {
+ return;
+ }
+
+ this.ripples.forEach(function(ripple) {
+ ripple.upAction(event);
+ });
+
+ this._animating = true;
+ this.animate();
+ },
+
+ onAnimationComplete: function() {
+ this._animating = false;
+ this.$.background.style.backgroundColor = null;
+ this.fire('transitionend');
+ },
+
+ addRipple: function() {
+ var ripple = new Ripple(this);
+
+ Polymer.dom(this.$.waves).appendChild(ripple.waveContainer);
+ this.$.background.style.backgroundColor = ripple.color;
+ this.ripples.push(ripple);
+
+ this._setAnimating(true);
+
+ return ripple;
+ },
+
+ removeRipple: function(ripple) {
+ var rippleIndex = this.ripples.indexOf(ripple);
+
+ if (rippleIndex < 0) {
+ return;
+ }
+
+ this.ripples.splice(rippleIndex, 1);
+
+ ripple.remove();
+
+ if (!this.ripples.length) {
+ this._setAnimating(false);
+ }
+ },
+
+ /**
+ * This conflicts with Element#antimate().
+ * https://developer.mozilla.org/en-US/docs/Web/API/Element/animate
+ * @suppress {checkTypes}
+ */
+ animate: function() {
+ if (!this._animating) {
+ return;
+ }
+ var index;
+ var ripple;
+
+ for (index = 0; index < this.ripples.length; ++index) {
+ ripple = this.ripples[index];
+
+ ripple.draw();
+
+ this.$.background.style.opacity = ripple.outerOpacity;
+
+ if (ripple.isOpacityFullyDecayed && !ripple.isRestingAtMaxRadius) {
+ this.removeRipple(ripple);
+ }
+ }
+
+ if (!this.shouldKeepAnimating && this.ripples.length === 0) {
+ this.onAnimationComplete();
+ } else {
+ window.requestAnimationFrame(this._boundAnimate);
+ }
+ },
+
+ _onEnterKeydown: function() {
+ this.uiDownAction();
+ this.async(this.uiUpAction, 1);
+ },
+
+ _onSpaceKeydown: function() {
+ this.uiDownAction();
+ },
+
+ _onSpaceKeyup: function() {
+ this.uiUpAction();
+ },
+
+ // note: holdDown does not respect noink since it can be a focus based
+ // effect.
+ _holdDownChanged: function(newVal, oldVal) {
+ if (oldVal === undefined) {
+ return;
+ }
+ if (newVal) {
+ this.downAction();
+ } else {
+ this.upAction();
+ }
+ }
+
+ /**
+ Fired when the animation finishes.
+ This is useful if you want to wait until
+ the ripple animation finishes to perform some action.
+
+ @event transitionend
+ @param {{node: Object}} detail Contains the animated node.
+ */
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/.bower.json
new file mode 100644
index 00000000000..5ddd498d825
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/.bower.json
@@ -0,0 +1,64 @@
+{
+ "name": "paper-styles",
+ "version": "2.1.0",
+ "description": "Common (global) styles for Material Design elements.",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-component",
+ "polymer",
+ "style"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-styles.git"
+ },
+ "main": "paper-styles.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/polymerelements/paper-styles/",
+ "ignore": [
+ "/.*"
+ ],
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.1",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.0",
+ "commit": "fc4b85ab853f107fc8bb18ea6cda1c2e9ac5a75f"
+ },
+ "_source": "https://github.com/PolymerElements/paper-styles.git",
+ "_target": "1 - 2",
+ "_originalSource": "PolymerElements/paper-styles"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/README.md
new file mode 100644
index 00000000000..e8b9c6c645a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/README.md
@@ -0,0 +1,50 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+paper-styles.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/paper-styles.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-styles)
+
+_[Demo and API docs](https://elements.polymer-project.org/elements/paper-styles)_
+
+
+## &lt;paper-styles&gt;
+
+The `<paper-styles>` component provides simple ways to use Material Design CSS styles
+in your application. The following imports are available:
+
+1. [color.html](https://github.com/PolymerElements/paper-styles/blob/master/color.html):
+a complete list of the colors defined in the Material Design [palette](https://www.google.com/design/spec/style/color.html)
+
+
+1. [default-theme.html](https://github.com/PolymerElements/paper-styles/blob/master/default-theme.html): text,
+background and accent colors that match the default Material Design theme
+
+
+1. [shadow.html](https://github.com/PolymerElements/paper-styles/blob/master/shadow.html): Material Design
+[elevation](https://www.google.com/design/spec/what-is-material/elevation-shadows.html) and shadow styles
+
+
+1. [typography.html](https://github.com/PolymerElements/paper-styles/blob/master/typography.html):
+Material Design [font](http://www.google.com/design/spec/style/typography.html#typography-styles) styles and sizes
+
+
+1. [demo-pages.html](https://github.com/PolymerElements/paper-styles/blob/master/demo-pages.html): generic styles
+used in the PolymerElements demo pages
+
+
+We recommend importing each of these individual files, and using the style mixins
+available in each ones, rather than the aggregated `paper-styles.html` as a whole.
+
+## Changes in 2.0
+- removed deprecated `/deep/` styles. Files removed: `classes/shadow-layout.html`, `demo.css`.
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/bower.json
new file mode 100644
index 00000000000..2d1e3de0ddc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/bower.json
@@ -0,0 +1,55 @@
+{
+ "name": "paper-styles",
+ "version": "2.0.0",
+ "description": "Common (global) styles for Material Design elements.",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-component",
+ "polymer",
+ "style"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-styles.git"
+ },
+ "main": "paper-styles.html",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/polymerelements/paper-styles/",
+ "ignore": [
+ "/.*"
+ ],
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.1",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0",
+ "web-component-tester": "^6.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "font-roboto": "PolymerElements/font-roboto#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.d.ts
new file mode 100644
index 00000000000..5639596cda3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * classes/global.html
+ */
+
+/// <reference path="../paper-styles-classes.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.html
new file mode 100644
index 00000000000..229875f3f6f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/global.html
@@ -0,0 +1,94 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../paper-styles-classes.html">
+
+<!--
+Note that this file probably doesn't do what you expect it to do. It's not
+a `<style is=custom-style include="..."` type of style include, which mean
+these styles will only apply to the main document, regardless of where
+you import this file.
+-->
+
+<style>
+/* Mixins */
+
+/* [paper-font] */
+body {
+ font-family: 'Roboto', 'Noto', sans-serif;
+ -webkit-font-smoothing: antialiased; /* OS X subpixel AA bleed bug */
+}
+
+/* [paper-font=display2] */
+h1 {
+ font-size: 45px;
+ font-weight: 400;
+ letter-spacing: -.018em;
+ line-height: 48px;
+}
+
+/* [paper-font=display1] */
+h2 {
+ font-size: 34px;
+ font-weight: 400;
+ letter-spacing: -.01em;
+ line-height: 40px;
+}
+
+/* [paper-font=headline] */
+h3 {
+ font-size: 24px;
+ font-weight: 400;
+ letter-spacing: -.012em;
+ line-height: 32px;
+}
+
+/* [paper-font=subhead] */
+h4 {
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 24px;
+}
+
+/* [paper-font=body2] */
+h5, h6 {
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 24px;
+}
+
+/* [paper-font=button] */
+a {
+ font-size: 14px;
+ font-weight: 500;
+ letter-spacing: 0.018em;
+ line-height: 24px;
+ text-transform: uppercase;
+}
+
+/* Overrides */
+
+body, a {
+ color: #212121;
+}
+
+h1, h2, h3, h4, h5, h6, p {
+ margin: 0 0 20px 0;
+}
+
+h1, h2, h3, h4, h5, h6, a {
+ text-rendering: optimizeLegibility;
+}
+
+a {
+ text-decoration: none;
+}
+
+</style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.d.ts
new file mode 100644
index 00000000000..7a4a394112e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.d.ts
@@ -0,0 +1,10 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * classes/shadow.html
+ */
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.html
new file mode 100644
index 00000000000..5ab04b14fe5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/shadow.html
@@ -0,0 +1,60 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<!--
+Note that this file probably doesn't do what you expect it to do. It's not
+a `<style is=custom-style include="..."` type of style include, which mean
+these styles will only apply to the main document, regardless of where
+you import this file.
+
+For a set of styles that can be applied to an element, check paper-styles/shadow.html.
+-->
+<style>
+.shadow-transition {
+ transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.shadow-elevation-2dp {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 5px 0 rgba(0, 0, 0, 0.12),
+ 0 3px 1px -2px rgba(0, 0, 0, 0.2);
+}
+
+.shadow-elevation-3dp {
+ box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 8px 0 rgba(0, 0, 0, 0.12),
+ 0 3px 3px -2px rgba(0, 0, 0, 0.4);
+}
+
+.shadow-elevation-4dp {
+ box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 10px 0 rgba(0, 0, 0, 0.12),
+ 0 2px 4px -1px rgba(0, 0, 0, 0.4);
+}
+
+.shadow-elevation-6dp {
+ box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 18px 0 rgba(0, 0, 0, 0.12),
+ 0 3px 5px -1px rgba(0, 0, 0, 0.4);
+}
+
+.shadow-elevation-8dp {
+ box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),
+ 0 3px 14px 2px rgba(0, 0, 0, 0.12),
+ 0 5px 5px -3px rgba(0, 0, 0, 0.4);
+}
+
+.shadow-elevation-16dp {
+ box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),
+ 0 6px 30px 5px rgba(0, 0, 0, 0.12),
+ 0 8px 10px -5px rgba(0, 0, 0, 0.4);
+}
+
+</style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.d.ts
new file mode 100644
index 00000000000..9a1d8bef616
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * classes/typography.html
+ */
+
+/// <reference path="../../font-roboto/roboto.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.html
new file mode 100644
index 00000000000..5586adc46c9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/classes/typography.html
@@ -0,0 +1,164 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../font-roboto/roboto.html">
+
+<!--
+Note that this file probably doesn't do what you expect it to do. It's not
+a `<style is=custom-style include="..."` type of style include, which mean
+these styles will only apply to the main document, regardless of where
+you import this file.
+
+For a set of styles that can be applied to an element, check paper-styles/typography.html.
+-->
+<style>
+
+.paper-font-display4,
+.paper-font-display3,
+.paper-font-display2,
+.paper-font-display1,
+.paper-font-headline,
+.paper-font-title,
+.paper-font-subhead,
+.paper-font-body2,
+.paper-font-body1,
+.paper-font-caption,
+.paper-font-menu,
+.paper-font-button {
+ font-family: 'Roboto', 'Noto', sans-serif;
+ -webkit-font-smoothing: antialiased; /* OS X subpixel AA bleed bug */
+}
+
+.paper-font-code2,
+.paper-font-code1 {
+ font-family: 'Roboto Mono', 'Consolas', 'Menlo', monospace;
+ -webkit-font-smoothing: antialiased; /* OS X subpixel AA bleed bug */
+}
+
+/* Opt for better kerning for headers & other short labels. */
+.paper-font-display4,
+.paper-font-display3,
+.paper-font-display2,
+.paper-font-display1,
+.paper-font-headline,
+.paper-font-title,
+.paper-font-subhead,
+.paper-font-menu,
+.paper-font-button {
+ text-rendering: optimizeLegibility;
+}
+
+/*
+"Line wrapping only applies to Body, Subhead, Headline, and the smaller Display
+styles. All other styles should exist as single lines."
+*/
+.paper-font-display4,
+.paper-font-display3,
+.paper-font-title,
+.paper-font-caption,
+.paper-font-menu,
+.paper-font-button {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.paper-font-display4 {
+ font-size: 112px;
+ font-weight: 300;
+ letter-spacing: -.044em;
+ line-height: 120px;
+}
+
+.paper-font-display3 {
+ font-size: 56px;
+ font-weight: 400;
+ letter-spacing: -.026em;
+ line-height: 60px;
+}
+
+.paper-font-display2 {
+ font-size: 45px;
+ font-weight: 400;
+ letter-spacing: -.018em;
+ line-height: 48px;
+}
+
+.paper-font-display1 {
+ font-size: 34px;
+ font-weight: 400;
+ letter-spacing: -.01em;
+ line-height: 40px;
+}
+
+.paper-font-headline {
+ font-size: 24px;
+ font-weight: 400;
+ letter-spacing: -.012em;
+ line-height: 32px;
+}
+
+.paper-font-title {
+ font-size: 20px;
+ font-weight: 500;
+ line-height: 28px;
+}
+
+.paper-font-subhead {
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 24px;
+}
+
+.paper-font-body2 {
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 24px;
+}
+
+.paper-font-body1 {
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 20px;
+}
+
+.paper-font-caption {
+ font-size: 12px;
+ font-weight: 400;
+ letter-spacing: 0.011em;
+ line-height: 20px;
+}
+
+.paper-font-menu {
+ font-size: 13px;
+ font-weight: 500;
+ line-height: 24px;
+}
+
+.paper-font-button {
+ font-size: 14px;
+ font-weight: 500;
+ letter-spacing: 0.018em;
+ line-height: 24px;
+ text-transform: uppercase;
+}
+
+.paper-font-code2 {
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 20px;
+}
+
+.paper-font-code1 {
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 20px;
+}
+
+</style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.d.ts
new file mode 100644
index 00000000000..2e25e740b05
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * color.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.html
new file mode 100644
index 00000000000..67eae3e27e8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/color.html
@@ -0,0 +1,334 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<custom-style>
+ <style is="custom-style">
+ html {
+
+ /* Material Design color palette for Google products */
+
+ --google-red-100: #f4c7c3;
+ --google-red-300: #e67c73;
+ --google-red-500: #db4437;
+ --google-red-700: #c53929;
+
+ --google-blue-100: #c6dafc;
+ --google-blue-300: #7baaf7;
+ --google-blue-500: #4285f4;
+ --google-blue-700: #3367d6;
+
+ --google-green-100: #b7e1cd;
+ --google-green-300: #57bb8a;
+ --google-green-500: #0f9d58;
+ --google-green-700: #0b8043;
+
+ --google-yellow-100: #fce8b2;
+ --google-yellow-300: #f7cb4d;
+ --google-yellow-500: #f4b400;
+ --google-yellow-700: #f09300;
+
+ --google-grey-100: #f5f5f5;
+ --google-grey-300: #e0e0e0;
+ --google-grey-500: #9e9e9e;
+ --google-grey-700: #616161;
+
+ /* Material Design color palette from online spec document */
+
+ --paper-red-50: #ffebee;
+ --paper-red-100: #ffcdd2;
+ --paper-red-200: #ef9a9a;
+ --paper-red-300: #e57373;
+ --paper-red-400: #ef5350;
+ --paper-red-500: #f44336;
+ --paper-red-600: #e53935;
+ --paper-red-700: #d32f2f;
+ --paper-red-800: #c62828;
+ --paper-red-900: #b71c1c;
+ --paper-red-a100: #ff8a80;
+ --paper-red-a200: #ff5252;
+ --paper-red-a400: #ff1744;
+ --paper-red-a700: #d50000;
+
+ --paper-pink-50: #fce4ec;
+ --paper-pink-100: #f8bbd0;
+ --paper-pink-200: #f48fb1;
+ --paper-pink-300: #f06292;
+ --paper-pink-400: #ec407a;
+ --paper-pink-500: #e91e63;
+ --paper-pink-600: #d81b60;
+ --paper-pink-700: #c2185b;
+ --paper-pink-800: #ad1457;
+ --paper-pink-900: #880e4f;
+ --paper-pink-a100: #ff80ab;
+ --paper-pink-a200: #ff4081;
+ --paper-pink-a400: #f50057;
+ --paper-pink-a700: #c51162;
+
+ --paper-purple-50: #f3e5f5;
+ --paper-purple-100: #e1bee7;
+ --paper-purple-200: #ce93d8;
+ --paper-purple-300: #ba68c8;
+ --paper-purple-400: #ab47bc;
+ --paper-purple-500: #9c27b0;
+ --paper-purple-600: #8e24aa;
+ --paper-purple-700: #7b1fa2;
+ --paper-purple-800: #6a1b9a;
+ --paper-purple-900: #4a148c;
+ --paper-purple-a100: #ea80fc;
+ --paper-purple-a200: #e040fb;
+ --paper-purple-a400: #d500f9;
+ --paper-purple-a700: #aa00ff;
+
+ --paper-deep-purple-50: #ede7f6;
+ --paper-deep-purple-100: #d1c4e9;
+ --paper-deep-purple-200: #b39ddb;
+ --paper-deep-purple-300: #9575cd;
+ --paper-deep-purple-400: #7e57c2;
+ --paper-deep-purple-500: #673ab7;
+ --paper-deep-purple-600: #5e35b1;
+ --paper-deep-purple-700: #512da8;
+ --paper-deep-purple-800: #4527a0;
+ --paper-deep-purple-900: #311b92;
+ --paper-deep-purple-a100: #b388ff;
+ --paper-deep-purple-a200: #7c4dff;
+ --paper-deep-purple-a400: #651fff;
+ --paper-deep-purple-a700: #6200ea;
+
+ --paper-indigo-50: #e8eaf6;
+ --paper-indigo-100: #c5cae9;
+ --paper-indigo-200: #9fa8da;
+ --paper-indigo-300: #7986cb;
+ --paper-indigo-400: #5c6bc0;
+ --paper-indigo-500: #3f51b5;
+ --paper-indigo-600: #3949ab;
+ --paper-indigo-700: #303f9f;
+ --paper-indigo-800: #283593;
+ --paper-indigo-900: #1a237e;
+ --paper-indigo-a100: #8c9eff;
+ --paper-indigo-a200: #536dfe;
+ --paper-indigo-a400: #3d5afe;
+ --paper-indigo-a700: #304ffe;
+
+ --paper-blue-50: #e3f2fd;
+ --paper-blue-100: #bbdefb;
+ --paper-blue-200: #90caf9;
+ --paper-blue-300: #64b5f6;
+ --paper-blue-400: #42a5f5;
+ --paper-blue-500: #2196f3;
+ --paper-blue-600: #1e88e5;
+ --paper-blue-700: #1976d2;
+ --paper-blue-800: #1565c0;
+ --paper-blue-900: #0d47a1;
+ --paper-blue-a100: #82b1ff;
+ --paper-blue-a200: #448aff;
+ --paper-blue-a400: #2979ff;
+ --paper-blue-a700: #2962ff;
+
+ --paper-light-blue-50: #e1f5fe;
+ --paper-light-blue-100: #b3e5fc;
+ --paper-light-blue-200: #81d4fa;
+ --paper-light-blue-300: #4fc3f7;
+ --paper-light-blue-400: #29b6f6;
+ --paper-light-blue-500: #03a9f4;
+ --paper-light-blue-600: #039be5;
+ --paper-light-blue-700: #0288d1;
+ --paper-light-blue-800: #0277bd;
+ --paper-light-blue-900: #01579b;
+ --paper-light-blue-a100: #80d8ff;
+ --paper-light-blue-a200: #40c4ff;
+ --paper-light-blue-a400: #00b0ff;
+ --paper-light-blue-a700: #0091ea;
+
+ --paper-cyan-50: #e0f7fa;
+ --paper-cyan-100: #b2ebf2;
+ --paper-cyan-200: #80deea;
+ --paper-cyan-300: #4dd0e1;
+ --paper-cyan-400: #26c6da;
+ --paper-cyan-500: #00bcd4;
+ --paper-cyan-600: #00acc1;
+ --paper-cyan-700: #0097a7;
+ --paper-cyan-800: #00838f;
+ --paper-cyan-900: #006064;
+ --paper-cyan-a100: #84ffff;
+ --paper-cyan-a200: #18ffff;
+ --paper-cyan-a400: #00e5ff;
+ --paper-cyan-a700: #00b8d4;
+
+ --paper-teal-50: #e0f2f1;
+ --paper-teal-100: #b2dfdb;
+ --paper-teal-200: #80cbc4;
+ --paper-teal-300: #4db6ac;
+ --paper-teal-400: #26a69a;
+ --paper-teal-500: #009688;
+ --paper-teal-600: #00897b;
+ --paper-teal-700: #00796b;
+ --paper-teal-800: #00695c;
+ --paper-teal-900: #004d40;
+ --paper-teal-a100: #a7ffeb;
+ --paper-teal-a200: #64ffda;
+ --paper-teal-a400: #1de9b6;
+ --paper-teal-a700: #00bfa5;
+
+ --paper-green-50: #e8f5e9;
+ --paper-green-100: #c8e6c9;
+ --paper-green-200: #a5d6a7;
+ --paper-green-300: #81c784;
+ --paper-green-400: #66bb6a;
+ --paper-green-500: #4caf50;
+ --paper-green-600: #43a047;
+ --paper-green-700: #388e3c;
+ --paper-green-800: #2e7d32;
+ --paper-green-900: #1b5e20;
+ --paper-green-a100: #b9f6ca;
+ --paper-green-a200: #69f0ae;
+ --paper-green-a400: #00e676;
+ --paper-green-a700: #00c853;
+
+ --paper-light-green-50: #f1f8e9;
+ --paper-light-green-100: #dcedc8;
+ --paper-light-green-200: #c5e1a5;
+ --paper-light-green-300: #aed581;
+ --paper-light-green-400: #9ccc65;
+ --paper-light-green-500: #8bc34a;
+ --paper-light-green-600: #7cb342;
+ --paper-light-green-700: #689f38;
+ --paper-light-green-800: #558b2f;
+ --paper-light-green-900: #33691e;
+ --paper-light-green-a100: #ccff90;
+ --paper-light-green-a200: #b2ff59;
+ --paper-light-green-a400: #76ff03;
+ --paper-light-green-a700: #64dd17;
+
+ --paper-lime-50: #f9fbe7;
+ --paper-lime-100: #f0f4c3;
+ --paper-lime-200: #e6ee9c;
+ --paper-lime-300: #dce775;
+ --paper-lime-400: #d4e157;
+ --paper-lime-500: #cddc39;
+ --paper-lime-600: #c0ca33;
+ --paper-lime-700: #afb42b;
+ --paper-lime-800: #9e9d24;
+ --paper-lime-900: #827717;
+ --paper-lime-a100: #f4ff81;
+ --paper-lime-a200: #eeff41;
+ --paper-lime-a400: #c6ff00;
+ --paper-lime-a700: #aeea00;
+
+ --paper-yellow-50: #fffde7;
+ --paper-yellow-100: #fff9c4;
+ --paper-yellow-200: #fff59d;
+ --paper-yellow-300: #fff176;
+ --paper-yellow-400: #ffee58;
+ --paper-yellow-500: #ffeb3b;
+ --paper-yellow-600: #fdd835;
+ --paper-yellow-700: #fbc02d;
+ --paper-yellow-800: #f9a825;
+ --paper-yellow-900: #f57f17;
+ --paper-yellow-a100: #ffff8d;
+ --paper-yellow-a200: #ffff00;
+ --paper-yellow-a400: #ffea00;
+ --paper-yellow-a700: #ffd600;
+
+ --paper-amber-50: #fff8e1;
+ --paper-amber-100: #ffecb3;
+ --paper-amber-200: #ffe082;
+ --paper-amber-300: #ffd54f;
+ --paper-amber-400: #ffca28;
+ --paper-amber-500: #ffc107;
+ --paper-amber-600: #ffb300;
+ --paper-amber-700: #ffa000;
+ --paper-amber-800: #ff8f00;
+ --paper-amber-900: #ff6f00;
+ --paper-amber-a100: #ffe57f;
+ --paper-amber-a200: #ffd740;
+ --paper-amber-a400: #ffc400;
+ --paper-amber-a700: #ffab00;
+
+ --paper-orange-50: #fff3e0;
+ --paper-orange-100: #ffe0b2;
+ --paper-orange-200: #ffcc80;
+ --paper-orange-300: #ffb74d;
+ --paper-orange-400: #ffa726;
+ --paper-orange-500: #ff9800;
+ --paper-orange-600: #fb8c00;
+ --paper-orange-700: #f57c00;
+ --paper-orange-800: #ef6c00;
+ --paper-orange-900: #e65100;
+ --paper-orange-a100: #ffd180;
+ --paper-orange-a200: #ffab40;
+ --paper-orange-a400: #ff9100;
+ --paper-orange-a700: #ff6500;
+
+ --paper-deep-orange-50: #fbe9e7;
+ --paper-deep-orange-100: #ffccbc;
+ --paper-deep-orange-200: #ffab91;
+ --paper-deep-orange-300: #ff8a65;
+ --paper-deep-orange-400: #ff7043;
+ --paper-deep-orange-500: #ff5722;
+ --paper-deep-orange-600: #f4511e;
+ --paper-deep-orange-700: #e64a19;
+ --paper-deep-orange-800: #d84315;
+ --paper-deep-orange-900: #bf360c;
+ --paper-deep-orange-a100: #ff9e80;
+ --paper-deep-orange-a200: #ff6e40;
+ --paper-deep-orange-a400: #ff3d00;
+ --paper-deep-orange-a700: #dd2c00;
+
+ --paper-brown-50: #efebe9;
+ --paper-brown-100: #d7ccc8;
+ --paper-brown-200: #bcaaa4;
+ --paper-brown-300: #a1887f;
+ --paper-brown-400: #8d6e63;
+ --paper-brown-500: #795548;
+ --paper-brown-600: #6d4c41;
+ --paper-brown-700: #5d4037;
+ --paper-brown-800: #4e342e;
+ --paper-brown-900: #3e2723;
+
+ --paper-grey-50: #fafafa;
+ --paper-grey-100: #f5f5f5;
+ --paper-grey-200: #eeeeee;
+ --paper-grey-300: #e0e0e0;
+ --paper-grey-400: #bdbdbd;
+ --paper-grey-500: #9e9e9e;
+ --paper-grey-600: #757575;
+ --paper-grey-700: #616161;
+ --paper-grey-800: #424242;
+ --paper-grey-900: #212121;
+
+ --paper-blue-grey-50: #eceff1;
+ --paper-blue-grey-100: #cfd8dc;
+ --paper-blue-grey-200: #b0bec5;
+ --paper-blue-grey-300: #90a4ae;
+ --paper-blue-grey-400: #78909c;
+ --paper-blue-grey-500: #607d8b;
+ --paper-blue-grey-600: #546e7a;
+ --paper-blue-grey-700: #455a64;
+ --paper-blue-grey-800: #37474f;
+ --paper-blue-grey-900: #263238;
+
+ /* opacity for dark text on a light background */
+ --dark-divider-opacity: 0.12;
+ --dark-disabled-opacity: 0.38; /* or hint text or icon */
+ --dark-secondary-opacity: 0.54;
+ --dark-primary-opacity: 0.87;
+
+ /* opacity for light text on a dark background */
+ --light-divider-opacity: 0.12;
+ --light-disabled-opacity: 0.3; /* or hint text or icon */
+ --light-secondary-opacity: 0.7;
+ --light-primary-opacity: 1.0;
+
+ }
+
+ </style>
+</custom-style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.d.ts
new file mode 100644
index 00000000000..2833b80c6b8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * default-theme.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="color.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.html
new file mode 100644
index 00000000000..8242076e26a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/default-theme.html
@@ -0,0 +1,71 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="color.html">
+
+<!-- Taken from https://www.google.com/design/spec/style/color.html#color-ui-color-application -->
+
+<custom-style>
+ <style is="custom-style">
+ html {
+ /*
+ * You can use these generic variables in your elements for easy theming.
+ * For example, if all your elements use `--primary-text-color` as its main
+ * color, then switching from a light to a dark theme is just a matter of
+ * changing the value of `--primary-text-color` in your application.
+ */
+ --primary-text-color: var(--light-theme-text-color);
+ --primary-background-color: var(--light-theme-background-color);
+ --secondary-text-color: var(--light-theme-secondary-color);
+ --disabled-text-color: var(--light-theme-disabled-color);
+ --divider-color: var(--light-theme-divider-color);
+ --error-color: var(--paper-deep-orange-a700);
+
+ /*
+ * Primary and accent colors. Also see color.html for more colors.
+ */
+ --primary-color: var(--paper-indigo-500);
+ --light-primary-color: var(--paper-indigo-100);
+ --dark-primary-color: var(--paper-indigo-700);
+
+ --accent-color: var(--paper-pink-a200);
+ --light-accent-color: var(--paper-pink-a100);
+ --dark-accent-color: var(--paper-pink-a400);
+
+
+ /*
+ * Material Design Light background theme
+ */
+ --light-theme-background-color: #ffffff;
+ --light-theme-base-color: #000000;
+ --light-theme-text-color: var(--paper-grey-900);
+ --light-theme-secondary-color: #737373; /* for secondary text and icons */
+ --light-theme-disabled-color: #9b9b9b; /* disabled/hint text */
+ --light-theme-divider-color: #dbdbdb;
+
+ /*
+ * Material Design Dark background theme
+ */
+ --dark-theme-background-color: var(--paper-grey-900);
+ --dark-theme-base-color: #ffffff;
+ --dark-theme-text-color: #ffffff;
+ --dark-theme-secondary-color: #bcbcbc; /* for secondary text and icons */
+ --dark-theme-disabled-color: #646464; /* disabled/hint text */
+ --dark-theme-divider-color: #3c3c3c;
+
+ /*
+ * Deprecated values because of their confusing names.
+ */
+ --text-primary-color: var(--dark-theme-text-color);
+ --default-primary-color: var(--primary-color);
+ }
+ </style>
+</custom-style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.d.ts
new file mode 100644
index 00000000000..6e3790db39b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.d.ts
@@ -0,0 +1,16 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * demo-pages.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="color.d.ts" />
+/// <reference path="typography.d.ts" />
+/// <reference path="shadow.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.html
new file mode 100644
index 00000000000..4e5e0c72a9b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo-pages.html
@@ -0,0 +1,80 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="color.html">
+<link rel="import" href="typography.html">
+<link rel="import" href="shadow.html">
+
+<!--
+Note that this file probably doesn't do what you expect it to do. It's not
+a `<style is=custom-style include="..."` type of style include, which mean
+these styles will only apply to the main document, regardless of where
+you import this file.
+
+For a set of styles that can be applied to an element,
+check iron-demo-helpers/demo-pages-shared-styles.html.
+-->
+<custom-style>
+ <style is="custom-style">
+ body {
+ @apply --paper-font-common-base;
+ font-size: 14px;
+ margin: 0;
+ padding: 24px;
+ background-color: var(--paper-grey-50);
+ }
+
+ .horizontal-section-container {
+ @apply --layout-horizontal;
+ @apply --layout-center-justified;
+ @apply --layout-wrap;
+ }
+
+ .vertical-section-container {
+ @apply --layout-vertical;
+ @apply --center-justified;
+ }
+
+ .horizontal-section {
+ background-color: white;
+ padding: 24px;
+ margin-right: 24px;
+ min-width: 200px;
+
+ @apply --shadow-elevation-2dp;
+ }
+
+ .vertical-section {
+ background-color: white;
+ padding: 24px;
+ margin: 0 24px 24px 24px;
+
+ @apply --shadow-elevation-2dp;
+ }
+
+ .centered {
+ max-width: 400px;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ code {
+ color: var(--google-grey-700);
+ }
+
+ /* TODO: remove this hack and use horizontal-section-container instead */
+ body > div.layout.horizontal.center-justified {
+ @apply --layout-wrap;
+ }
+ </style>
+</custom-style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo/index.html
new file mode 100644
index 00000000000..b97ff9309f5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/demo/index.html
@@ -0,0 +1,232 @@
+<!doctype html>
+
+<!--
+ @license
+ Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+ <head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+
+ <title>paper-styles demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../color.html">
+ <link rel="import" href="../shadow.html">
+ <link rel="import" href="../typography.html">
+ <link rel="import" href="../default-theme.html">
+ <link rel="import" href="../element-styles/paper-item-styles.html">
+ <link rel="import" href="../element-styles/paper-material-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ </head>
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ .redlines {
+ background: linear-gradient(0deg, transparent, transparent 3.5px, rgba(255,0,0,0.2) 3.5px, rgba(255,0,0,0.2) 4px);
+ background-size: 100% 4px;
+ }
+ </style>
+ </custom-style>
+
+ <body unresolved>
+ <div class="vertical-section-container centered">
+ <h4>typography.html</h4>
+ <demo-snippet>
+ <template>
+ <div class="redlines">
+ <div class="paper-font-display4">Display 4</div>
+ <div class="paper-font-display3">Display 3</div>
+ <div class="paper-font-display2">Display 2</div>
+ <div class="paper-font-display1">Display 1</div>
+ <div class="paper-font-headline">Headline</div>
+ <div class="paper-font-title">Title</div>
+ <div class="paper-font-subhead">Subhead</div>
+ <div class="paper-font-body2">Body 2</div>
+ <div class="paper-font-body1">Body 1</div>
+ <div class="paper-font-caption">Caption</div>
+ <div class="paper-font-menu">Menu</div>
+ <div class="paper-font-button">Button</div>
+ </div>
+
+ <p class="redlines paper-font-body1">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi
+ tincidunt dui sit amet mi auctor, ac gravida magna aliquam. Fusce quis
+ purus elementum, tempus nisi vel, volutpat nulla. Vestibulum mollis
+ dictum tellus, vulputate porttitor arcu. Curabitur imperdiet risus id
+ egestas accumsan. Donec lectus felis, dignissim id iaculis sit amet,
+ faucibus in leo.
+ </p>
+
+ <p class="redlines paper-font-body2">
+ Mauris id urna ac ante ultrices commodo a imperdiet elit. Vivamus
+ interdum neque magna, eget dapibus est auctor et. Donec accumsan
+ libero nec augue scelerisque, ac egestas ante tincidunt. Proin
+ sollicitudin, mi eget sagittis mollis, arcu orci scelerisque turpis, a
+ sollicitudin tellus quam non sapien.
+ </p>
+
+ <custom-style>
+ <style is="custom-style">
+ .paper-font-display4 { @apply --paper-font-display4; }
+ .paper-font-display3 { @apply --paper-font-display3; }
+ .paper-font-display2 { @apply --paper-font-display2; }
+ .paper-font-display1 { @apply --paper-font-display1; }
+ .paper-font-headline { @apply --paper-font-headline; }
+ .paper-font-title { @apply --paper-font-title; }
+ .paper-font-subhead { @apply --paper-font-subhead; }
+ .paper-font-body2 { @apply --paper-font-body2; }
+ .paper-font-body1 { @apply --paper-font-body1; }
+ .paper-font-caption { @apply --paper-font-caption; }
+ .paper-font-menu { @apply --paper-font-menu; }
+ .paper-font-button { @apply --paper-font-button; }
+ </style>
+ </custom-style>
+ </template>
+ </demo-snippet>
+
+ <h4>shadow.html</h4>
+ <demo-snippet>
+ <template>
+ <div class="shadow shadow-2dp">2dp</div>
+ <div class="shadow shadow-3dp">3dp</div>
+ <div class="shadow shadow-4dp">4dp</div>
+ <div class="shadow shadow-6dp">6dp</div>
+ <div class="shadow shadow-8dp">8dp</div>
+ <div class="shadow shadow-12dp">12dp</div>
+ <div class="shadow shadow-16dp">16dp</div>
+
+ <custom-style>
+ <style is="custom-style">
+ .shadow-2dp { @apply --shadow-elevation-2dp; }
+ .shadow-3dp { @apply --shadow-elevation-3dp; }
+ .shadow-4dp { @apply --shadow-elevation-4dp; }
+ .shadow-6dp { @apply --shadow-elevation-6dp; }
+ .shadow-8dp { @apply --shadow-elevation-8dp; }
+ .shadow-12dp { @apply --shadow-elevation-12dp; }
+ .shadow-16dp { @apply --shadow-elevation-16dp; }
+ .shadow {
+ display: inline-block;
+ padding: 8px;
+ margin: 16px;
+ height: 50px;
+ width: 50px;
+ }
+ </style>
+ </custom-style>
+ </template>
+ </demo-snippet>
+
+ <h4>default-theme.html</h4>
+ <demo-snippet>
+ <template>
+ <div>
+ <div class="toolbar">Title</div>
+ <div class="item">
+ <div class="fab">+</div>
+ <div class="primary">Primary text</div>
+ <div class="secondary">Secondary text</div>
+ </div>
+ <div class="disabled-item">Disabled</div>
+ </div>
+
+ <custom-style>
+ <style is="custom-style">
+ .toolbar {
+ height: 144px;
+ padding: 16px;
+ background: var(--default-primary-color);
+ color: var(--text-primary-color);
+ @apply --paper-font-display1;
+ }
+
+ .item, .disabled-item {
+ position: relative;
+ padding: 8px;
+ border: 1px solid;
+ border-color: var(--divider-color);
+ border-top: 0;
+ }
+
+ .item .primary {
+ color: var(--primary-text-color);
+ @apply --paper-font-body2;
+ }
+
+ .item .secondary {
+ color: var(--secondary-text-color);
+ @apply --paper-font-body1;
+ }
+
+ .disabled-item {
+ color: var(--disabled-text-color);
+ @apply --paper-font-body2;
+ }
+
+ .fab {
+ position: absolute;
+ box-sizing: border-box;
+ padding: 8px;
+ width: 56px;
+ height: 56px;
+ right: 16px;
+ top: -28px;
+ border-radius: 50%;
+ text-align: center;
+
+ background: var(--accent-color);
+ color: var(--text-primary-color);
+ @apply --paper-font-display1;
+ }
+ </style>
+ </custom-style>
+ </template>
+ </demo-snippet>
+
+ <h4>Element shared styles: paper-material</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style" include="paper-material-styles">
+ .paper-material {
+ padding: 16px;
+ margin: 0 16px;
+ display: inline-block;
+ }
+ </style>
+ </custom-style>
+
+ <div class="paper-material" elevation="1">1</div>
+ <div class="paper-material" elevation="2">2</div>
+ <div class="paper-material" elevation="3">3</div>
+ <div class="paper-material" elevation="4">4</div>
+ <div class="paper-material" elevation="5">5</div>
+ </template>
+ </demo-snippet>
+
+ <h4>Element shared styles: paper-item</h4>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style" include="paper-item-styles"></style>
+ </custom-style>
+
+ <button class="paper-item" role="option">Inbox</button>
+ <button class="paper-item" role="option">Starred</button>
+ <button class="paper-item" role="option">Sent mail</button>
+ </template>
+ </demo-snippet>
+
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.d.ts
new file mode 100644
index 00000000000..08f62109ea3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.d.ts
@@ -0,0 +1,15 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * element-styles/paper-item-styles.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../color.d.ts" />
+/// <reference path="../default-theme.d.ts" />
+/// <reference path="../typography.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.html
new file mode 100644
index 00000000000..7c539d2e481
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-item-styles.html
@@ -0,0 +1,91 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../color.html">
+<link rel="import" href="../default-theme.html">
+<link rel="import" href="../typography.html">
+
+<!--
+Material design: [Lists](https://www.google.com/design/spec/components/lists.html)
+
+Shared styles for a native `button` to be used as an item in a `paper-listbox` element:
+
+ <custom-style>
+ <style is="custom-style" include="paper-item-styles"></style>
+ </custom-style>
+
+ <paper-listbox>
+ <button class="paper-item" role="option">Inbox</button>
+ <button class="paper-item" role="option">Starred</button>
+ <button class="paper-item" role="option">Sent mail</button>
+ </paper-listbox>
+
+@group Paper Elements
+@demo demo/index.html
+-->
+
+<dom-module id="paper-item-styles">
+ <template>
+ <style>
+ :host, html {
+ --paper-item: {
+ display: block;
+ position: relative;
+ min-height: var(--paper-item-min-height, 48px);
+ padding: 0px 16px;
+ @apply --paper-font-subhead;
+ border:none;
+ outline: none;
+ background: white;
+ width: 100%;
+ text-align: left;
+ };
+ }
+
+ .paper-item {
+ @apply --paper-item;
+ }
+
+ .paper-item[hidden] {
+ display: none !important;
+ }
+
+ .paper-item.iron-selected {
+ font-weight: var(--paper-item-selected-weight, bold);
+ @apply --paper-item-selected;
+ }
+
+ .paper-item[disabled] {
+ color: var(--paper-item-disabled-color, var(--disabled-text-color));
+ @apply --paper-item-disabled;
+ }
+
+ .paper-item:focus {
+ position: relative;
+ outline: 0;
+ @apply --paper-item-focused;
+ }
+
+ .paper-item:focus:before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: currentColor;
+ content: '';
+ opacity: var(--dark-divider-opacity);
+ pointer-events: none;
+ @apply --paper-item-focused-before;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.d.ts
new file mode 100644
index 00000000000..1c190dd2bb1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * element-styles/paper-material-styles.html
+ */
+
+/// <reference path="../../polymer/types/polymer.d.ts" />
+/// <reference path="../shadow.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.html
new file mode 100644
index 00000000000..8f5f63704f9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/element-styles/paper-material-styles.html
@@ -0,0 +1,78 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer/polymer.html">
+<link rel="import" href="../shadow.html">
+
+<!--
+Material design: [Cards](https://www.google.com/design/spec/components/cards.html)
+
+Shared styles that you can apply to an element to renders two shadows on top
+of each other,that create the effect of a lifted piece of paper.
+
+Example:
+
+ <custom-style>
+ <style is="custom-style" include="paper-material-styles"></style>
+ </custom-style>
+
+ <div class="paper-material" elevation="1">
+ ... content ...
+ </div>
+
+@group Paper Elements
+@demo demo/index.html
+-->
+
+<dom-module id="paper-material-styles">
+ <template>
+ <style>
+ :host, html {
+ --paper-material: {
+ display: block;
+ position: relative;
+ };
+ --paper-material-elevation-1: {
+ @apply --shadow-elevation-2dp;
+ };
+ --paper-material-elevation-2: {
+ @apply --shadow-elevation-4dp;
+ };
+ --paper-material-elevation-3: {
+ @apply --shadow-elevation-6dp;
+ };
+ --paper-material-elevation-4: {
+ @apply --shadow-elevation-8dp;
+ };
+ --paper-material-elevation-5: {
+ @apply --shadow-elevation-16dp;
+ };
+ }
+ :host(.paper-material), .paper-material {
+ @apply --paper-material;
+ }
+ :host(.paper-material[elevation="1"]), .paper-material[elevation="1"] {
+ @apply --paper-material-elevation-1;
+ }
+ :host(.paper-material[elevation="2"]), .paper-material[elevation="2"] {
+ @apply --paper-material-elevation-2;
+ }
+ :host(.paper-material[elevation="3"]), .paper-material[elevation="3"] {
+ @apply --paper-material-elevation-3;
+ }
+ :host(.paper-material[elevation="4"]), .paper-material[elevation="4"] {
+ @apply --paper-material-elevation-4;
+ }
+ :host(.paper-material[elevation="5"]), .paper-material[elevation="5"] {
+ @apply --paper-material-elevation-5;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/gen-tsd.json
new file mode 100644
index 00000000000..f6d8c975068
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/gen-tsd.json
@@ -0,0 +1,5 @@
+{
+ "excludeIdentifiers": [
+ "paper-styles"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/index.html
new file mode 100644
index 00000000000..8e96ebe00c0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/index.html
@@ -0,0 +1,24 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>paper-styles</title>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package-lock.json
new file mode 100644
index 00000000000..be61cfe4a26
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package-lock.json
@@ -0,0 +1,984 @@
+{
+ "name": "@polymer/paper-styles",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.1.1.tgz",
+ "integrity": "sha512-rUfH6USpiPYSHl2dC+/rGb3RYK8LPyqNhiuZCLv13F0fhYr01jdTogGuSphEoSLklm1gKRsDsrfZq7OvpzPYEg==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.1",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.10"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz",
+ "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.7.tgz",
+ "integrity": "sha512-jNhbkxPtt9xbzvihfA0OavjJbpCIyTDSmwE03BVXgCKcz9lwNsq4cg2wsNkY4Av5eH35ttBArhYtVJa6CIrg2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.4.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "bower": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.2.tgz",
+ "integrity": "sha1-rfU1KcjUrwLvJPuNU0HBQZ0z4vc=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.1.tgz",
+ "integrity": "sha512-gRJDcIjFSzMcmG/GrJlgL0wWoAxr11mVzCq32bjka0endupm9meLwvoJUKc4HDeFiEIB2X3GvNrhF5cKO4Bd4A==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.7",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.10",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.10.tgz",
+ "integrity": "sha1-9vCd15PdL0IomsAdoCb8q6ZfGYw=",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "2.2.3",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package.json
new file mode 100644
index 00000000000..569754043d9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "@polymer/paper-styles",
+ "private": true,
+ "description": "Common (global) styles for Material Design elements.",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-styles.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir ."
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.d.ts
new file mode 100644
index 00000000000..21ab1e8213f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-styles-classes.html
+ */
+
+/// <reference path="classes/typography.d.ts" />
+/// <reference path="classes/shadow.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.html
new file mode 100644
index 00000000000..9fe0fd0d90e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles-classes.html
@@ -0,0 +1,22 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<!--
+Note that these files probably don't do what you expect them to do. None have
+a `<style is=custom-style include="..."` type of style include, which mean
+these styles will only apply to the main document, regardless of where
+you import this file.
+
+For a set of styles that can be applied to an element,
+check paper-styles.html.
+-->
+
+<link rel="import" href="classes/typography.html">
+<link rel="import" href="classes/shadow.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.d.ts
new file mode 100644
index 00000000000..bd5e60a1304
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.d.ts
@@ -0,0 +1,16 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-styles.html
+ */
+
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="color.d.ts" />
+/// <reference path="default-theme.d.ts" />
+/// <reference path="shadow.d.ts" />
+/// <reference path="typography.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.html
new file mode 100644
index 00000000000..1a4aca1370d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/paper-styles.html
@@ -0,0 +1,42 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<!--
+The `<paper-styles>` component provides simple ways to use Material Design CSS styles
+in your application. The following imports are available:
+
+1. [color.html](https://github.com/PolymerElements/paper-styles/blob/master/color.html):
+a complete list of the colors defined in the Material Design [palette](https://www.google.com/design/spec/style/color.html)
+
+2. [default-theme.html](https://github.com/PolymerElements/paper-styles/blob/master/default-theme.html): text,
+background and accent colors that match the default Material Design theme
+
+3. [shadow.html](https://github.com/PolymerElements/paper-styles/blob/master/shadow.html): Material Design
+[elevation](https://www.google.com/design/spec/what-is-material/elevation-shadows.html) and shadow styles
+
+4. [typography.html](https://github.com/PolymerElements/paper-styles/blob/master/typography.html):
+Material Design [font](http://www.google.com/design/spec/style/typography.html#typography-styles) styles and sizes
+
+5. [demo-pages.html](https://github.com/PolymerElements/paper-styles/blob/master/demo-pages.html): generic styles
+used in the PolymerElements demo pages
+
+We recommend importing each of these individual files, and using the style mixins
+available in each ones, rather than the aggregated `paper-styles.html` as a whole.
+
+@group Paper Elements
+@pseudoElement paper-styles
+@demo demo/index.html
+-->
+
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="color.html">
+<link rel="import" href="default-theme.html">
+<link rel="import" href="shadow.html">
+<link rel="import" href="typography.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.d.ts
new file mode 100644
index 00000000000..0add44f9a84
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * shadow.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.html
new file mode 100644
index 00000000000..0e4e3cb4318
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/shadow.html
@@ -0,0 +1,76 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+
+<custom-style>
+ <style is="custom-style">
+ html {
+
+ --shadow-transition: {
+ transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
+ };
+
+ --shadow-none: {
+ box-shadow: none;
+ };
+
+ /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */
+
+ --shadow-elevation-2dp: {
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 5px 0 rgba(0, 0, 0, 0.12),
+ 0 3px 1px -2px rgba(0, 0, 0, 0.2);
+ };
+
+ --shadow-elevation-3dp: {
+ box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 8px 0 rgba(0, 0, 0, 0.12),
+ 0 3px 3px -2px rgba(0, 0, 0, 0.4);
+ };
+
+ --shadow-elevation-4dp: {
+ box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 10px 0 rgba(0, 0, 0, 0.12),
+ 0 2px 4px -1px rgba(0, 0, 0, 0.4);
+ };
+
+ --shadow-elevation-6dp: {
+ box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),
+ 0 1px 18px 0 rgba(0, 0, 0, 0.12),
+ 0 3px 5px -1px rgba(0, 0, 0, 0.4);
+ };
+
+ --shadow-elevation-8dp: {
+ box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),
+ 0 3px 14px 2px rgba(0, 0, 0, 0.12),
+ 0 5px 5px -3px rgba(0, 0, 0, 0.4);
+ };
+
+ --shadow-elevation-12dp: {
+ box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14),
+ 0 4px 22px 3px rgba(0, 0, 0, 0.12),
+ 0 6px 7px -4px rgba(0, 0, 0, 0.4);
+ };
+
+ --shadow-elevation-16dp: {
+ box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),
+ 0 6px 30px 5px rgba(0, 0, 0, 0.12),
+ 0 8px 10px -5px rgba(0, 0, 0, 0.4);
+ };
+
+ --shadow-elevation-24dp: {
+ box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14),
+ 0 9px 46px 8px rgba(0, 0, 0, 0.12),
+ 0 11px 15px -7px rgba(0, 0, 0, 0.4);
+ };
+ }
+ </style>
+</custom-style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.d.ts
new file mode 100644
index 00000000000..17a7f44b1e0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.d.ts
@@ -0,0 +1,13 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * typography.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../font-roboto/roboto.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.html
new file mode 100644
index 00000000000..689ae979895
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-styles/typography.html
@@ -0,0 +1,178 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../font-roboto/roboto.html">
+
+<!--
+Typographic styles are provided matching the Material Design standard styles:
+http://www.google.com/design/spec/style/typography.html#typography-standard-styles
+
+Note that these are English/Latin centric styles. You may need to further adjust
+line heights and weights for CJK typesetting. See the notes in the Material
+Design typography section.
+-->
+<custom-style>
+ <style is="custom-style">
+ html {
+
+ /* Shared Styles */
+ --paper-font-common-base: {
+ font-family: 'Roboto', 'Noto', sans-serif;
+ -webkit-font-smoothing: antialiased;
+ };
+
+ --paper-font-common-code: {
+ font-family: 'Roboto Mono', 'Consolas', 'Menlo', monospace;
+ -webkit-font-smoothing: antialiased;
+ };
+
+ --paper-font-common-expensive-kerning: {
+ text-rendering: optimizeLegibility;
+ };
+
+ --paper-font-common-nowrap: {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ };
+
+ /* Material Font Styles */
+
+ --paper-font-display4: {
+ @apply --paper-font-common-base;
+ @apply --paper-font-common-nowrap;
+
+ font-size: 112px;
+ font-weight: 300;
+ letter-spacing: -.044em;
+ line-height: 120px;
+ };
+
+ --paper-font-display3: {
+ @apply --paper-font-common-base;
+ @apply --paper-font-common-nowrap;
+
+ font-size: 56px;
+ font-weight: 400;
+ letter-spacing: -.026em;
+ line-height: 60px;
+ };
+
+ --paper-font-display2: {
+ @apply --paper-font-common-base;
+
+ font-size: 45px;
+ font-weight: 400;
+ letter-spacing: -.018em;
+ line-height: 48px;
+ };
+
+ --paper-font-display1: {
+ @apply --paper-font-common-base;
+
+ font-size: 34px;
+ font-weight: 400;
+ letter-spacing: -.01em;
+ line-height: 40px;
+ };
+
+ --paper-font-headline: {
+ @apply --paper-font-common-base;
+
+ font-size: 24px;
+ font-weight: 400;
+ letter-spacing: -.012em;
+ line-height: 32px;
+ };
+
+ --paper-font-title: {
+ @apply --paper-font-common-base;
+ @apply --paper-font-common-nowrap;
+
+ font-size: 20px;
+ font-weight: 500;
+ line-height: 28px;
+ };
+
+ --paper-font-subhead: {
+ @apply --paper-font-common-base;
+
+ font-size: 16px;
+ font-weight: 400;
+ line-height: 24px;
+ };
+
+ --paper-font-body2: {
+ @apply --paper-font-common-base;
+
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 24px;
+ };
+
+ --paper-font-body1: {
+ @apply --paper-font-common-base;
+
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 20px;
+ };
+
+ --paper-font-caption: {
+ @apply --paper-font-common-base;
+ @apply --paper-font-common-nowrap;
+
+ font-size: 12px;
+ font-weight: 400;
+ letter-spacing: 0.011em;
+ line-height: 20px;
+ };
+
+ --paper-font-menu: {
+ @apply --paper-font-common-base;
+ @apply --paper-font-common-nowrap;
+
+ font-size: 13px;
+ font-weight: 500;
+ line-height: 24px;
+ };
+
+ --paper-font-button: {
+ @apply --paper-font-common-base;
+ @apply --paper-font-common-nowrap;
+
+ font-size: 14px;
+ font-weight: 500;
+ letter-spacing: 0.018em;
+ line-height: 24px;
+ text-transform: uppercase;
+ };
+
+ --paper-font-code2: {
+ @apply --paper-font-common-code;
+
+ font-size: 14px;
+ font-weight: 700;
+ line-height: 20px;
+ };
+
+ --paper-font-code1: {
+ @apply --paper-font-common-code;
+
+ font-size: 14px;
+ font-weight: 500;
+ line-height: 20px;
+ };
+
+ }
+
+ </style>
+</custom-style>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.bower.json
new file mode 100644
index 00000000000..ba455a7f1f2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.bower.json
@@ -0,0 +1,82 @@
+{
+ "name": "paper-tabs",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Material design tabs",
+ "private": true,
+ "main": "paper-tabs.html",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "tabs",
+ "control"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-tabs.git"
+ },
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#1 - 2",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#1 - 2",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-pages": "PolymerElements/iron-pages#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#^1.0.0",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.1.0",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-pages": "PolymerElements/iron-pages#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/paper-tabs",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "efae86af2401b8744f355acf7c7a78037ccfc787"
+ },
+ "_source": "https://github.com/PolymerElements/paper-tabs.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-tabs"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..655302e8def
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-tabs/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.travis.yml
new file mode 100644
index 00000000000..fe7b9ace629
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+dist: trusty
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+env:
+ global:
+ - secure: >-
+ KEzThhoQ3Aq9kSZIuCzyi6MtYbzxB67JSs2t9CebYoXgW49k3q7Uh/KMUHz8RM04hSa7k2gDGf1Spr4jkXpItHn037aW/Bd+95l49my8pSJvHLEQR8KO/b+FSH/Tu+wKXAm4xk4Mp+vESOxIWap1JXHxSJnoa0EqKyYCeKVVkMI=
+ - secure: >-
+ dhfUH2Sx4rC089kHVtjggaGRMdEa0UHa9ksC5buMk5XBI2GriRE+D3/1N7tBxg4f2HcVbi1+7jTIRHz+xYvypuXCr/9Bh7zh19KhBjrMdFYPZwy3fK3O9xfrypwpldFq1Q3mFcJ3p5sfqHjKvvWlGf/lffqQY5rVr8UI86Lklac=
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/README.md
new file mode 100644
index 00000000000..6117fbc4929
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/README.md
@@ -0,0 +1,52 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-tabs.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-tabs)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://beta.webcomponents.org/element/PolymerElements/paper-tabs)
+
+## &lt;paper-tabs&gt;
+
+Material design: [Tabs](https://www.google.com/design/spec/components/tabs.html)
+
+`paper-tabs` makes it easy to explore and switch between different views or functional aspects of
+an app, or to browse categorized data sets.
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-tabs.html">
+ <style>
+ body {
+ margin: 0;
+ display: flex;
+ align-items: flex-end;
+ height: 80px;
+ background: #009688;
+ color: white;
+ }
+ paper-tabs {
+ font-family: 'Roboto', 'Noto', sans-serif;
+ -webkit-font-smoothing: antialiased;
+ width: 100%;
+ text-transform: uppercase;
+ margin-bottom: 1px;
+ }
+ </style>
+ <next-code-block></next-code-block>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-tabs selected="0" scrollable>
+ <paper-tab>The first tab</paper-tab>
+ <paper-tab>Tab two</paper-tab>
+ <paper-tab>The third tab</paper-tab>
+ <paper-tab>Fourth tab</paper-tab>
+</paper-tabs>
+```
+
+### Notable breaking changes between 1.x and 2.x (hybrid):
+
+IronSelectableBehavior and IronMultiSelectableBehavior, which are used by
+paper-tabs, introduce multiple breaking changes. Please see the README for those
+behaviors for more detail.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/bower.json
new file mode 100644
index 00000000000..fb7bd006b41
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/bower.json
@@ -0,0 +1,72 @@
+{
+ "name": "paper-tabs",
+ "version": "2.1.1",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "Material design tabs",
+ "private": true,
+ "main": "paper-tabs.html",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "tabs",
+ "control"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-tabs.git"
+ },
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-icon": "PolymerElements/iron-icon#1 - 2",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#1 - 2",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#1 - 2",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-icon-button": "PolymerElements/paper-icon-button#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-pages": "PolymerElements/iron-pages#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-iconset-svg": "PolymerElements/iron-iconset-svg#^1.0.0",
+ "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.1.0",
+ "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-pages": "PolymerElements/iron-pages#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/demo/index.html
new file mode 100644
index 00000000000..cff790b0481
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/demo/index.html
@@ -0,0 +1,318 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<html>
+ <head>
+
+ <title>paper-tabs demo</title>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-flex-layout/iron-flex-layout.html">
+ <link rel="import" href="../../iron-pages/iron-pages.html">
+ <link rel="import" href="../../paper-styles/typography.html">
+ <link rel="import" href="../paper-tab.html">
+ <link rel="import" href="../paper-tabs.html">
+
+ </head>
+ <body unresolved>
+
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ #container {
+ max-width: 600px;
+ }
+
+ paper-tabs {
+ background-color: var(--paper-blue-900);
+ color: #fff;
+ }
+ </style>
+ </custom-style>
+
+ <div id="container" class="vertical-section-container centered">
+
+ <h3>Plain <code>paper-tabs</code>.</h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0">
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>The <code>no-bar</code> attribute disables the selection bar.</h3>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-tabs[no-bar] paper-tab.iron-selected {
+ color: #ffff8d;
+ }
+ </style>
+ </custom-style>
+
+ <paper-tabs id="plain-tabs" selected="0" no-bar>
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ The <code>no-slide</code> attribute prevents the selection bar from
+ animating when the selection changes.
+ </h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0" no-slide>
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ The <code>noink</code> attribute disables the ink ripple animation seen
+ when the user activates a tab (by clicking, tapping, etc.).
+ </h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0" noink>
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ The <code>scrollable</code> attribute causes the tabs to scroll, rather
+ than compress, when there is not enough space. Arrow buttons appear when
+ any of the tabs are not completely visible.
+ </h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0" scrollable>
+ <paper-tab>NUMBER ONE ITEM</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>THE THIRD ITEM</paper-tab>
+ <paper-tab>THE ITEM FOUR</paper-tab>
+ <paper-tab>FIFTH</paper-tab>
+ <paper-tab>THE SIXTH TAB</paper-tab>
+ <paper-tab>NUMBER SEVEN</paper-tab>
+ <paper-tab>EIGHT</paper-tab>
+ <paper-tab>NUMBER NINE</paper-tab>
+ <paper-tab>THE TENTH</paper-tab>
+ <paper-tab>THE ITEM ELEVEN</paper-tab>
+ <paper-tab>TWELFTH ITEM</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ The <code>fit-container</code> attribute causes scrollable tabs to
+ stretch to fit their container if the tabs don't need to scroll.
+ </h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0" scrollable fit-container>
+ <paper-tab>NUMBER ONE ITEM</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>THE THIRD ITEM</paper-tab>
+ </paper-tabs>
+ <br>
+ <paper-tabs selected="0" scrollable fit-container style="width: 50%;">
+ <paper-tab>NUMBER ONE ITEM</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>THE THIRD ITEM</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Tab layout is affected by the writing direction of the surrounding area.
+ </h3>
+ <demo-snippet>
+ <template>
+ <div dir="rtl">
+ <paper-tabs selected="0">
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ &nbsp;
+ <paper-tabs selected="0" scrollable>
+ <paper-tab>NUMBER ONE ITEM</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>THE THIRD ITEM</paper-tab>
+ <paper-tab>THE ITEM FOUR</paper-tab>
+ <paper-tab>FIFTH</paper-tab>
+ <paper-tab>THE SIXTH TAB</paper-tab>
+ <paper-tab>NUMBER SEVEN</paper-tab>
+ <paper-tab>EIGHT</paper-tab>
+ <paper-tab>NUMBER NINE</paper-tab>
+ <paper-tab>THE TENTH</paper-tab>
+ <paper-tab>THE ITEM ELEVEN</paper-tab>
+ <paper-tab>TWELFTH ITEM</paper-tab>
+ </paper-tabs>
+ </div>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use the <code>align-bottom</code> attribute when your tabs are
+ positioned below the content they control. The selection bar will be
+ shown at the top of the tabs.
+ </h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0" align-bottom>
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use the <code>link</code> attribute when a <code>paper-tab</code>
+ contains a link. The link will fill the entire tab. <code>paper-tabs</code>
+ implements its own tabindexing and keyboard focus patterns so an anchor
+ placed inside should set <code>tabindex="-1"</code>.
+ </h3>
+ <demo-snippet>
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-tab[link] a {
+ /* These mixins (from iron-flex-layout) center the link text. */
+ @apply --layout-horizontal;
+ @apply --layout-center-center;
+ color: #fff;
+ text-decoration: none;
+ }
+ </style>
+ </custom-style>
+
+ <paper-tabs selected="0">
+ <paper-tab link>
+ <a href="#item1" tabindex="-1">ITEM ONE</a>
+ </paper-tab>
+ <paper-tab link>
+ <a href="#item2" tabindex="-1">ITEM TWO</a>
+ </paper-tab>
+ <paper-tab link>
+ <a href="#item3" tabindex="-1">ITEM THREE</a>
+ </paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use <code>autoselect</code> to enable automatic tab selection.
+ </h3>
+ <demo-snippet>
+ <template>
+ <paper-tabs selected="0" autoselect>
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <h3>
+ Use <code>autoselect-delay</code> to adjust the delay between the last
+ keyup event and when the tab is automatically selected (when
+ <code>autoselect</code> is true).
+ </h3>
+ <demo-snippet>
+ <template>
+ <h4>
+ <code>autoselect-delay="0"</code>
+ </h4>
+ <paper-tabs selected="0" no-slide autoselect autoselect-delay="0">
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+
+ <h4>
+ <code>autoselect-delay="1000"</code>
+ </h4>
+ <paper-tabs selected="0" autoselect autoselect-delay="1000">
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </demo-snippet>
+
+ <!--
+ Nested templates are not supported in IE, meaning they can't be used in a
+ demo-snippet. See Polymer/polymer#2495 for more details.
+ -->
+ <!--
+ <h3>J. Bound Selection</h3>
+ <demo-snippet>
+ <template>
+ <template is="dom-bind">
+ <h2>Current Tab: <span>[[selected]]</span></h2>
+ <paper-tabs selected="{{selected}}">
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ </template>
+ </template>
+ </demo-snippet>
+
+ <h3>K. Controlling content</h3>
+ <demo-snippet>
+ <template>
+ <style is="custom-style">
+ iron-pages {
+ border: 1px solid #ccc;
+ border-top: none;
+ padding: 8px;
+ }
+ </style>
+
+ <template is="dom-bind">
+ <paper-tabs selected="{{selected}}">
+ <paper-tab>ITEM ONE</paper-tab>
+ <paper-tab>ITEM TWO</paper-tab>
+ <paper-tab>ITEM THREE</paper-tab>
+ </paper-tabs>
+ <iron-pages selected="{{selected}}">
+ <div>CONTENT ONE</div>
+ <div>CONTENT TWO</div>
+ <div>CONTENT THREE</div>
+ </iron-pages>
+ </template>
+ </template>
+ </demo-snippet>
+ -->
+
+ </div>
+
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/hero.svg
new file mode 100755
index 00000000000..bfcbdac2590
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/hero.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <path d="M188,78H37V44h151V78z M39,76h147V46H39V76z"/>
+ <polygon points="66,64.8 60.6,56.8 55.3,64.8 49.2,55.6 50.8,54.4 55.3,61.2 60.6,53.2 66,61.2 71.3,53.2 77.4,62.4 75.8,63.6
+ 71.3,56.8 "/>
+ <rect x="149" y="58" width="26" height="2"/>
+ <rect x="99" y="58" width="26" height="2"/>
+ <rect x="38" y="72" width="50" height="4"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/index.html
new file mode 100644
index 00000000000..f618702fdde
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/index.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <title>paper-tabs</title>
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page sources='["paper-tabs.html", "paper-tab.html"]'></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package-lock.json
new file mode 100644
index 00000000000..60282e0c3f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-tabs",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package.json
new file mode 100644
index 00000000000..5744b398d94
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-tabs",
+ "private": true,
+ "description": "Material design tabs",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-tabs.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.1.1",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.d.ts
new file mode 100644
index 00000000000..650dd5607d5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.d.ts
@@ -0,0 +1,58 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-tab.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-behaviors/iron-button-state.d.ts" />
+/// <reference path="../iron-behaviors/iron-control-state.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../paper-behaviors/paper-ripple-behavior.d.ts" />
+
+/**
+ * `paper-tab` is styled to look like a tab. It should be used in conjunction with
+ * `paper-tabs`.
+ *
+ * Example:
+ *
+ * <paper-tabs selected="0">
+ * <paper-tab>TAB 1</paper-tab>
+ * <paper-tab>TAB 2</paper-tab>
+ * <paper-tab>TAB 3</paper-tab>
+ * </paper-tabs>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-tab-ink` | Ink color | `--paper-yellow-a100`
+ * `--paper-tab` | Mixin applied to the tab | `{}`
+ * `--paper-tab-content` | Mixin applied to the tab content | `{}`
+ * `--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}`
+ *
+ * This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+ * In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+ */
+interface PaperTabElement extends Polymer.Element, Polymer.IronControlState, Polymer.IronButtonState, Polymer.PaperRippleBehavior {
+
+ /**
+ * If true, the tab will forward keyboard clicks (enter/space) to
+ * the first anchor element found in its descendants
+ */
+ link: boolean|null|undefined;
+ readonly _parentNoink: any;
+ attached(): void;
+ _updateNoink(): void;
+ _onTap(event: any): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-tab": PaperTabElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.html
new file mode 100644
index 00000000000..08d4617ebff
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tab.html
@@ -0,0 +1,168 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-behaviors/iron-button-state.html">
+<link rel="import" href="../iron-behaviors/iron-control-state.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-behaviors/paper-ripple-behavior.html">
+
+<!--
+`paper-tab` is styled to look like a tab. It should be used in conjunction with
+`paper-tabs`.
+
+Example:
+
+ <paper-tabs selected="0">
+ <paper-tab>TAB 1</paper-tab>
+ <paper-tab>TAB 2</paper-tab>
+ <paper-tab>TAB 3</paper-tab>
+ </paper-tabs>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-tab-ink` | Ink color | `--paper-yellow-a100`
+`--paper-tab` | Mixin applied to the tab | `{}`
+`--paper-tab-content` | Mixin applied to the tab content | `{}`
+`--paper-tab-content-unselected` | Mixin applied to the tab content when the tab is not selected | `{}`
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+-->
+
+<dom-module id="paper-tab">
+ <template>
+ <style>
+ :host {
+ @apply --layout-inline;
+ @apply --layout-center;
+ @apply --layout-center-justified;
+ @apply --layout-flex-auto;
+
+ position: relative;
+ padding: 0 12px;
+ overflow: hidden;
+ cursor: pointer;
+ vertical-align: middle;
+
+ @apply --paper-font-common-base;
+ @apply --paper-tab;
+ }
+
+ :host(:focus) {
+ outline: none;
+ }
+
+ :host([link]) {
+ padding: 0;
+ }
+
+ .tab-content {
+ height: 100%;
+ transform: translateZ(0);
+ -webkit-transform: translateZ(0);
+ transition: opacity 0.1s cubic-bezier(0.4, 0.0, 1, 1);
+ @apply --layout-horizontal;
+ @apply --layout-center-center;
+ @apply --layout-flex-auto;
+ @apply --paper-tab-content;
+ }
+
+ :host(:not(.iron-selected)) > .tab-content {
+ opacity: 0.8;
+
+ @apply --paper-tab-content-unselected;
+ }
+
+ :host(:focus) .tab-content {
+ opacity: 1;
+ font-weight: 700;
+ }
+
+ paper-ripple {
+ color: var(--paper-tab-ink, var(--paper-yellow-a100));
+ }
+
+ .tab-content > ::slotted(a) {
+ @apply --layout-flex-auto;
+
+ height: 100%;
+ }
+ </style>
+
+ <div class="tab-content">
+ <slot></slot>
+ </div>
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-tab',
+
+ behaviors: [
+ Polymer.IronControlState,
+ Polymer.IronButtonState,
+ Polymer.PaperRippleBehavior
+ ],
+
+ properties: {
+
+ /**
+ * If true, the tab will forward keyboard clicks (enter/space) to
+ * the first anchor element found in its descendants
+ */
+ link: {type: Boolean, value: false, reflectToAttribute: true}
+
+ },
+
+ /** @private */
+ hostAttributes: {role: 'tab'},
+
+ listeners: {down: '_updateNoink', tap: '_onTap'},
+
+ attached: function() {
+ this._updateNoink();
+ },
+
+ get _parentNoink() {
+ var parent = Polymer.dom(this).parentNode;
+ return !!parent && !!parent.noink;
+ },
+
+ _updateNoink: function() {
+ this.noink = !!this.noink || !!this._parentNoink;
+ },
+
+ _onTap: function(event) {
+ if (this.link) {
+ var anchor = this.queryEffectiveChildren('a');
+
+ if (!anchor) {
+ return;
+ }
+
+ // Don't get stuck in a loop delegating
+ // the listener from the child anchor
+ if (event.target === anchor) {
+ return;
+ }
+
+ anchor.click();
+ }
+ }
+
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.d.ts
new file mode 100644
index 00000000000..438ec1902d6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.d.ts
@@ -0,0 +1,12 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-tabs-icons.html
+ */
+
+/// <reference path="../iron-iconset-svg/iron-iconset-svg.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.html
new file mode 100644
index 00000000000..c299046a63b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs-icons.html
@@ -0,0 +1,18 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../iron-iconset-svg/iron-iconset-svg.html">
+
+<iron-iconset-svg name="paper-tabs" size="24">
+<svg><defs>
+<g id="chevron-left"><path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/></g>
+<g id="chevron-right"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></g>
+</defs></svg>
+</iron-iconset-svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.d.ts
new file mode 100644
index 00000000000..d49a5d736b3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.d.ts
@@ -0,0 +1,210 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-tabs.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../iron-icon/iron-icon.d.ts" />
+/// <reference path="../iron-menu-behavior/iron-menubar-behavior.d.ts" />
+/// <reference path="../iron-resizable-behavior/iron-resizable-behavior.d.ts" />
+/// <reference path="../paper-icon-button/paper-icon-button.d.ts" />
+/// <reference path="../paper-styles/color.d.ts" />
+/// <reference path="paper-tabs-icons.d.ts" />
+/// <reference path="paper-tab.d.ts" />
+
+/**
+ * Material design: [Tabs](https://www.google.com/design/spec/components/tabs.html)
+ *
+ * `paper-tabs` makes it easy to explore and switch between different views or functional aspects of
+ * an app, or to browse categorized data sets.
+ *
+ * Use `selected` property to get or set the selected tab.
+ *
+ * Example:
+ *
+ * <paper-tabs selected="0">
+ * <paper-tab>TAB 1</paper-tab>
+ * <paper-tab>TAB 2</paper-tab>
+ * <paper-tab>TAB 3</paper-tab>
+ * </paper-tabs>
+ *
+ * See <a href="?active=paper-tab">paper-tab</a> for more information about
+ * `paper-tab`.
+ *
+ * A common usage for `paper-tabs` is to use it along with `iron-pages` to switch
+ * between different views.
+ *
+ * <paper-tabs selected="{{selected}}">
+ * <paper-tab>Tab 1</paper-tab>
+ * <paper-tab>Tab 2</paper-tab>
+ * <paper-tab>Tab 3</paper-tab>
+ * </paper-tabs>
+ *
+ * <iron-pages selected="{{selected}}">
+ * <div>Page 1</div>
+ * <div>Page 2</div>
+ * <div>Page 3</div>
+ * </iron-pages>
+ *
+ *
+ * To use links in tabs, add `link` attribute to `paper-tab` and put an `<a>`
+ * element in `paper-tab` with a `tabindex` of -1.
+ *
+ * Example:
+ *
+ * <pre><code>
+ * &lt;style is="custom-style">
+ * .link {
+ * &#64;apply --layout-horizontal;
+ * &#64;apply --layout-center-center;
+ * }
+ * &lt;/style>
+ *
+ * &lt;paper-tabs selected="0">
+ * &lt;paper-tab link>
+ * &lt;a href="#link1" class="link" tabindex="-1">TAB ONE&lt;/a>
+ * &lt;/paper-tab>
+ * &lt;paper-tab link>
+ * &lt;a href="#link2" class="link" tabindex="-1">TAB TWO&lt;/a>
+ * &lt;/paper-tab>
+ * &lt;paper-tab link>
+ * &lt;a href="#link3" class="link" tabindex="-1">TAB THREE&lt;/a>
+ * &lt;/paper-tab>
+ * &lt;/paper-tabs>
+ * </code></pre>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-tabs-selection-bar-color` | Color for the selection bar | `--paper-yellow-a100`
+ * `--paper-tabs-selection-bar` | Mixin applied to the selection bar | `{}`
+ * `--paper-tabs` | Mixin applied to the tabs | `{}`
+ * `--paper-tabs-content` | Mixin applied to the content container of tabs | `{}`
+ * `--paper-tabs-container` | Mixin applied to the layout container of tabs | `{}`
+ */
+interface PaperTabsElement extends Polymer.Element, Polymer.IronResizableBehavior, Polymer.IronMenubarBehavior {
+ selectable: string|null|undefined;
+ keyBindings: object;
+
+ /**
+ * If true, ink ripple effect is disabled. When this property is changed,
+ * all descendant `<paper-tab>` elements have their `noink` property
+ * changed to the new value as well.
+ */
+ noink: boolean|null|undefined;
+
+ /**
+ * If true, the bottom bar to indicate the selected tab will not be shown.
+ */
+ noBar: boolean|null|undefined;
+
+ /**
+ * If true, the slide effect for the bottom bar is disabled.
+ */
+ noSlide: boolean|null|undefined;
+
+ /**
+ * If true, tabs are scrollable and the tab width is based on the label
+ * width.
+ */
+ scrollable: boolean|null|undefined;
+
+ /**
+ * If true, tabs expand to fit their container. This currently only applies
+ * when scrollable is true.
+ */
+ fitContainer: boolean|null|undefined;
+
+ /**
+ * If true, dragging on the tabs to scroll is disabled.
+ */
+ disableDrag: boolean|null|undefined;
+
+ /**
+ * If true, scroll buttons (left/right arrow) will be hidden for scrollable
+ * tabs.
+ */
+ hideScrollButtons: boolean|null|undefined;
+
+ /**
+ * If true, the tabs are aligned to bottom (the selection bar appears at the
+ * top).
+ */
+ alignBottom: boolean|null|undefined;
+
+ /**
+ * If true, tabs are automatically selected when focused using the
+ * keyboard.
+ */
+ autoselect: boolean|null|undefined;
+
+ /**
+ * The delay (in milliseconds) between when the user stops interacting
+ * with the tabs through the keyboard and when the focused item is
+ * automatically selected (if `autoselect` is true).
+ */
+ autoselectDelay: number|null|undefined;
+ _step: number|null|undefined;
+ _holdDelay: number|null|undefined;
+ _leftHidden: boolean|null|undefined;
+ _rightHidden: boolean|null|undefined;
+ _previousTab: object|null|undefined;
+ readonly _tabContainerScrollSize: any;
+ created(): void;
+ detached(): void;
+ _activateHandler(): void;
+ ready(): void;
+ _noinkChanged(noink: any): void;
+ _setNoinkAttribute(element: any): void;
+ _removeNoinkAttribute(element: any): void;
+ _computeScrollButtonClass(hideThisButton: any, scrollable: any, hideScrollButtons: any): any;
+ _computeTabsContentClass(scrollable: any, fitContainer: any): any;
+ _computeSelectionBarClass(noBar: any, alignBottom: any): any;
+ _onTabSizingChanged(): void;
+ _onIronSelect(event: any): void;
+ _onIronDeselect(event: any): void;
+
+ /**
+ * Activates an item after a delay (in milliseconds).
+ */
+ _scheduleActivation(item: any, delay: any): void;
+
+ /**
+ * Activates the last item given to `_scheduleActivation`.
+ */
+ _delayedActivationHandler(): void;
+
+ /**
+ * Cancels a previously scheduled item activation made with
+ * `_scheduleActivation`.
+ */
+ _cancelPendingActivation(): void;
+ _onArrowKeyup(event: any): void;
+ _onBlurCapture(event: any): void;
+ _scroll(e: any, detail: any): void;
+ _down(e: any): void;
+ _affectScroll(dx: any): void;
+ _onLeftScrollButtonDown(): void;
+ _onRightScrollButtonDown(): void;
+ _onScrollButtonUp(): void;
+ _scrollToLeft(): void;
+ _scrollToRight(): void;
+ _tabChanged(tab: any, old: any): void;
+ _scrollToSelectedIfNeeded(tabWidth: any, tabOffsetLeft: any): void;
+ _calcPercent(w: any, w0: any): any;
+ _positionBar(width: any, left: any): void;
+ _onBarTransitionEnd(e: any): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-tabs": PaperTabsElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.html
new file mode 100644
index 00000000000..5cb5a559c9b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-tabs/paper-tabs.html
@@ -0,0 +1,614 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../iron-icon/iron-icon.html">
+<link rel="import" href="../iron-menu-behavior/iron-menubar-behavior.html">
+<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
+<link rel="import" href="../paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../paper-styles/color.html">
+<link rel="import" href="paper-tabs-icons.html">
+<link rel="import" href="paper-tab.html">
+
+<!--
+Material design: [Tabs](https://www.google.com/design/spec/components/tabs.html)
+
+`paper-tabs` makes it easy to explore and switch between different views or functional aspects of
+an app, or to browse categorized data sets.
+
+Use `selected` property to get or set the selected tab.
+
+Example:
+
+ <paper-tabs selected="0">
+ <paper-tab>TAB 1</paper-tab>
+ <paper-tab>TAB 2</paper-tab>
+ <paper-tab>TAB 3</paper-tab>
+ </paper-tabs>
+
+See <a href="?active=paper-tab">paper-tab</a> for more information about
+`paper-tab`.
+
+A common usage for `paper-tabs` is to use it along with `iron-pages` to switch
+between different views.
+
+ <paper-tabs selected="{{selected}}">
+ <paper-tab>Tab 1</paper-tab>
+ <paper-tab>Tab 2</paper-tab>
+ <paper-tab>Tab 3</paper-tab>
+ </paper-tabs>
+
+ <iron-pages selected="{{selected}}">
+ <div>Page 1</div>
+ <div>Page 2</div>
+ <div>Page 3</div>
+ </iron-pages>
+
+
+To use links in tabs, add `link` attribute to `paper-tab` and put an `<a>`
+element in `paper-tab` with a `tabindex` of -1.
+
+Example:
+
+<pre><code>
+&lt;style is="custom-style">
+ .link {
+ &#64;apply --layout-horizontal;
+ &#64;apply --layout-center-center;
+ }
+&lt;/style>
+
+&lt;paper-tabs selected="0">
+ &lt;paper-tab link>
+ &lt;a href="#link1" class="link" tabindex="-1">TAB ONE&lt;/a>
+ &lt;/paper-tab>
+ &lt;paper-tab link>
+ &lt;a href="#link2" class="link" tabindex="-1">TAB TWO&lt;/a>
+ &lt;/paper-tab>
+ &lt;paper-tab link>
+ &lt;a href="#link3" class="link" tabindex="-1">TAB THREE&lt;/a>
+ &lt;/paper-tab>
+&lt;/paper-tabs>
+</code></pre>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-tabs-selection-bar-color` | Color for the selection bar | `--paper-yellow-a100`
+`--paper-tabs-selection-bar` | Mixin applied to the selection bar | `{}`
+`--paper-tabs` | Mixin applied to the tabs | `{}`
+`--paper-tabs-content` | Mixin applied to the content container of tabs | `{}`
+`--paper-tabs-container` | Mixin applied to the layout container of tabs | `{}`
+
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-tabs">
+ <template>
+ <style>
+ :host {
+ @apply --layout;
+ @apply --layout-center;
+
+ height: 48px;
+ font-size: 14px;
+ font-weight: 500;
+ overflow: hidden;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+
+ /* NOTE: Both values are needed, since some phones require the value to be `transparent`. */
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ -webkit-tap-highlight-color: transparent;
+
+ @apply --paper-tabs;
+ }
+
+ :host(:dir(rtl)) {
+ @apply --layout-horizontal-reverse;
+ }
+
+ #tabsContainer {
+ position: relative;
+ height: 100%;
+ white-space: nowrap;
+ overflow: hidden;
+ @apply --layout-flex-auto;
+ @apply --paper-tabs-container;
+ }
+
+ #tabsContent {
+ height: 100%;
+ -moz-flex-basis: auto;
+ -ms-flex-basis: auto;
+ flex-basis: auto;
+ @apply --paper-tabs-content;
+ }
+
+ #tabsContent.scrollable {
+ position: absolute;
+ white-space: nowrap;
+ }
+
+ #tabsContent:not(.scrollable),
+ #tabsContent.scrollable.fit-container {
+ @apply --layout-horizontal;
+ }
+
+ #tabsContent.scrollable.fit-container {
+ min-width: 100%;
+ }
+
+ #tabsContent.scrollable.fit-container > ::slotted(*) {
+ /* IE - prevent tabs from compressing when they should scroll. */
+ -ms-flex: 1 0 auto;
+ -webkit-flex: 1 0 auto;
+ flex: 1 0 auto;
+ }
+
+ .hidden {
+ display: none;
+ }
+
+ .not-visible {
+ opacity: 0;
+ cursor: default;
+ }
+
+ paper-icon-button {
+ width: 48px;
+ height: 48px;
+ padding: 12px;
+ margin: 0 4px;
+ }
+
+ #selectionBar {
+ position: absolute;
+ height: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ border-bottom: 2px solid var(--paper-tabs-selection-bar-color, var(--paper-yellow-a100));
+ -webkit-transform: scale(0);
+ transform: scale(0);
+ -webkit-transform-origin: left center;
+ transform-origin: left center;
+ transition: -webkit-transform;
+ transition: transform;
+
+ @apply --paper-tabs-selection-bar;
+ }
+
+ #selectionBar.align-bottom {
+ top: 0;
+ bottom: auto;
+ }
+
+ #selectionBar.expand {
+ transition-duration: 0.15s;
+ transition-timing-function: cubic-bezier(0.4, 0.0, 1, 1);
+ }
+
+ #selectionBar.contract {
+ transition-duration: 0.18s;
+ transition-timing-function: cubic-bezier(0.0, 0.0, 0.2, 1);
+ }
+
+ #tabsContent > ::slotted(:not(#selectionBar)) {
+ height: 100%;
+ }
+ </style>
+
+ <paper-icon-button icon="paper-tabs:chevron-left" class$="[[_computeScrollButtonClass(_leftHidden, scrollable, hideScrollButtons)]]" on-up="_onScrollButtonUp" on-down="_onLeftScrollButtonDown" tabindex="-1"></paper-icon-button>
+
+ <div id="tabsContainer" on-track="_scroll" on-down="_down">
+ <div id="tabsContent" class$="[[_computeTabsContentClass(scrollable, fitContainer)]]">
+ <div id="selectionBar" class$="[[_computeSelectionBarClass(noBar, alignBottom)]]"
+ on-transitionend="_onBarTransitionEnd"></div>
+ <slot></slot>
+ </div>
+ </div>
+
+ <paper-icon-button icon="paper-tabs:chevron-right" class$="[[_computeScrollButtonClass(_rightHidden, scrollable, hideScrollButtons)]]" on-up="_onScrollButtonUp" on-down="_onRightScrollButtonDown" tabindex="-1"></paper-icon-button>
+
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-tabs',
+
+ behaviors: [Polymer.IronResizableBehavior, Polymer.IronMenubarBehavior],
+
+ properties: {
+ /**
+ * If true, ink ripple effect is disabled. When this property is changed,
+ * all descendant `<paper-tab>` elements have their `noink` property
+ * changed to the new value as well.
+ */
+ noink: {type: Boolean, value: false, observer: '_noinkChanged'},
+
+ /**
+ * If true, the bottom bar to indicate the selected tab will not be shown.
+ */
+ noBar: {type: Boolean, value: false},
+
+ /**
+ * If true, the slide effect for the bottom bar is disabled.
+ */
+ noSlide: {type: Boolean, value: false},
+
+ /**
+ * If true, tabs are scrollable and the tab width is based on the label
+ * width.
+ */
+ scrollable: {type: Boolean, value: false},
+
+ /**
+ * If true, tabs expand to fit their container. This currently only applies
+ * when scrollable is true.
+ */
+ fitContainer: {type: Boolean, value: false},
+
+ /**
+ * If true, dragging on the tabs to scroll is disabled.
+ */
+ disableDrag: {type: Boolean, value: false},
+
+ /**
+ * If true, scroll buttons (left/right arrow) will be hidden for scrollable
+ * tabs.
+ */
+ hideScrollButtons: {type: Boolean, value: false},
+
+ /**
+ * If true, the tabs are aligned to bottom (the selection bar appears at the
+ * top).
+ */
+ alignBottom: {type: Boolean, value: false},
+
+ selectable: {type: String, value: 'paper-tab'},
+
+ /**
+ * If true, tabs are automatically selected when focused using the
+ * keyboard.
+ */
+ autoselect: {type: Boolean, value: false},
+
+ /**
+ * The delay (in milliseconds) between when the user stops interacting
+ * with the tabs through the keyboard and when the focused item is
+ * automatically selected (if `autoselect` is true).
+ */
+ autoselectDelay: {type: Number, value: 0},
+
+ _step: {type: Number, value: 10},
+
+ _holdDelay: {type: Number, value: 1},
+
+ _leftHidden: {type: Boolean, value: false},
+
+ _rightHidden: {type: Boolean, value: false},
+
+ _previousTab: {type: Object}
+ },
+
+ /** @private */
+ hostAttributes: {role: 'tablist'},
+
+ listeners: {
+ 'iron-resize': '_onTabSizingChanged',
+ 'iron-items-changed': '_onTabSizingChanged',
+ 'iron-select': '_onIronSelect',
+ 'iron-deselect': '_onIronDeselect'
+ },
+
+ /**
+ * @type {!Object}
+ */
+ keyBindings: {'left:keyup right:keyup': '_onArrowKeyup'},
+
+ created: function() {
+ this._holdJob = null;
+ this._pendingActivationItem = undefined;
+ this._pendingActivationTimeout = undefined;
+ this._bindDelayedActivationHandler =
+ this._delayedActivationHandler.bind(this);
+ this.addEventListener('blur', this._onBlurCapture.bind(this), true);
+ },
+
+ ready: function() {
+ this.setScrollDirection('y', this.$.tabsContainer);
+ },
+
+ detached: function() {
+ this._cancelPendingActivation();
+ },
+
+ _noinkChanged: function(noink) {
+ var childTabs = Polymer.dom(this).querySelectorAll('paper-tab');
+ childTabs.forEach(
+ noink ? this._setNoinkAttribute : this._removeNoinkAttribute);
+ },
+
+ _setNoinkAttribute: function(element) {
+ element.setAttribute('noink', '');
+ },
+
+ _removeNoinkAttribute: function(element) {
+ element.removeAttribute('noink');
+ },
+
+ _computeScrollButtonClass: function(
+ hideThisButton, scrollable, hideScrollButtons) {
+ if (!scrollable || hideScrollButtons) {
+ return 'hidden';
+ }
+
+ if (hideThisButton) {
+ return 'not-visible';
+ }
+
+ return '';
+ },
+
+ _computeTabsContentClass: function(scrollable, fitContainer) {
+ return scrollable ? 'scrollable' + (fitContainer ? ' fit-container' : '') :
+ ' fit-container';
+ },
+
+ _computeSelectionBarClass: function(noBar, alignBottom) {
+ if (noBar) {
+ return 'hidden';
+ } else if (alignBottom) {
+ return 'align-bottom';
+ }
+
+ return '';
+ },
+
+ // TODO(cdata): Add `track` response back in when gesture lands.
+
+ _onTabSizingChanged: function() {
+ this.debounce('_onTabSizingChanged', function() {
+ this._scroll();
+ this._tabChanged(this.selectedItem);
+ }, 10);
+ },
+
+ _onIronSelect: function(event) {
+ this._tabChanged(event.detail.item, this._previousTab);
+ this._previousTab = event.detail.item;
+ this.cancelDebouncer('tab-changed');
+ },
+
+ _onIronDeselect: function(event) {
+ this.debounce('tab-changed', function() {
+ this._tabChanged(null, this._previousTab);
+ this._previousTab = null;
+ // See polymer/polymer#1305
+ }, 1);
+ },
+
+ _activateHandler: function() {
+ // Cancel item activations scheduled by keyboard events when any other
+ // action causes an item to be activated (e.g. clicks).
+ this._cancelPendingActivation();
+
+ Polymer.IronMenuBehaviorImpl._activateHandler.apply(this, arguments);
+ },
+
+ /**
+ * Activates an item after a delay (in milliseconds).
+ */
+ _scheduleActivation: function(item, delay) {
+ this._pendingActivationItem = item;
+ this._pendingActivationTimeout =
+ this.async(this._bindDelayedActivationHandler, delay);
+ },
+
+ /**
+ * Activates the last item given to `_scheduleActivation`.
+ */
+ _delayedActivationHandler: function() {
+ var item = this._pendingActivationItem;
+ this._pendingActivationItem = undefined;
+ this._pendingActivationTimeout = undefined;
+ item.fire(this.activateEvent, null, {bubbles: true, cancelable: true});
+ },
+
+ /**
+ * Cancels a previously scheduled item activation made with
+ * `_scheduleActivation`.
+ */
+ _cancelPendingActivation: function() {
+ if (this._pendingActivationTimeout !== undefined) {
+ this.cancelAsync(this._pendingActivationTimeout);
+ this._pendingActivationItem = undefined;
+ this._pendingActivationTimeout = undefined;
+ }
+ },
+
+ _onArrowKeyup: function(event) {
+ if (this.autoselect) {
+ this._scheduleActivation(this.focusedItem, this.autoselectDelay);
+ }
+ },
+
+ _onBlurCapture: function(event) {
+ // Cancel a scheduled item activation (if any) when that item is
+ // blurred.
+ if (event.target === this._pendingActivationItem) {
+ this._cancelPendingActivation();
+ }
+ },
+
+ get _tabContainerScrollSize() {
+ return Math.max(
+ 0, this.$.tabsContainer.scrollWidth - this.$.tabsContainer.offsetWidth);
+ },
+
+ _scroll: function(e, detail) {
+ if (!this.scrollable) {
+ return;
+ }
+
+ var ddx = (detail && -detail.ddx) || 0;
+ this._affectScroll(ddx);
+ },
+
+ _down: function(e) {
+ // go one beat async to defeat IronMenuBehavior
+ // autorefocus-on-no-selection timeout
+ this.async(function() {
+ if (this._defaultFocusAsync) {
+ this.cancelAsync(this._defaultFocusAsync);
+ this._defaultFocusAsync = null;
+ }
+ }, 1);
+ },
+
+ _affectScroll: function(dx) {
+ this.$.tabsContainer.scrollLeft += dx;
+
+ var scrollLeft = this.$.tabsContainer.scrollLeft;
+
+ this._leftHidden = scrollLeft === 0;
+ this._rightHidden = scrollLeft === this._tabContainerScrollSize;
+ },
+
+ _onLeftScrollButtonDown: function() {
+ this._scrollToLeft();
+ this._holdJob = setInterval(this._scrollToLeft.bind(this), this._holdDelay);
+ },
+
+ _onRightScrollButtonDown: function() {
+ this._scrollToRight();
+ this._holdJob =
+ setInterval(this._scrollToRight.bind(this), this._holdDelay);
+ },
+
+ _onScrollButtonUp: function() {
+ clearInterval(this._holdJob);
+ this._holdJob = null;
+ },
+
+ _scrollToLeft: function() {
+ this._affectScroll(-this._step);
+ },
+
+ _scrollToRight: function() {
+ this._affectScroll(this._step);
+ },
+
+ _tabChanged: function(tab, old) {
+ if (!tab) {
+ // Remove the bar without animation.
+ this.$.selectionBar.classList.remove('expand');
+ this.$.selectionBar.classList.remove('contract');
+ this._positionBar(0, 0);
+ return;
+ }
+
+ var r = this.$.tabsContent.getBoundingClientRect();
+ var w = r.width;
+ var tabRect = tab.getBoundingClientRect();
+ var tabOffsetLeft = tabRect.left - r.left;
+
+ this._pos = {
+ width: this._calcPercent(tabRect.width, w),
+ left: this._calcPercent(tabOffsetLeft, w)
+ };
+
+ if (this.noSlide || old == null) {
+ // Position the bar without animation.
+ this.$.selectionBar.classList.remove('expand');
+ this.$.selectionBar.classList.remove('contract');
+ this._positionBar(this._pos.width, this._pos.left);
+ return;
+ }
+
+ var oldRect = old.getBoundingClientRect();
+ var oldIndex = this.items.indexOf(old);
+ var index = this.items.indexOf(tab);
+ var m = 5;
+
+ // bar animation: expand
+ this.$.selectionBar.classList.add('expand');
+
+ var moveRight = oldIndex < index;
+ var isRTL = this._isRTL;
+ if (isRTL) {
+ moveRight = !moveRight;
+ }
+
+ if (moveRight) {
+ this._positionBar(
+ this._calcPercent(tabRect.left + tabRect.width - oldRect.left, w) - m,
+ this._left);
+ } else {
+ this._positionBar(
+ this._calcPercent(oldRect.left + oldRect.width - tabRect.left, w) - m,
+ this._calcPercent(tabOffsetLeft, w) + m);
+ }
+
+ if (this.scrollable) {
+ this._scrollToSelectedIfNeeded(tabRect.width, tabOffsetLeft);
+ }
+ },
+
+ _scrollToSelectedIfNeeded: function(tabWidth, tabOffsetLeft) {
+ var l = tabOffsetLeft - this.$.tabsContainer.scrollLeft;
+ if (l < 0) {
+ this.$.tabsContainer.scrollLeft += l;
+ } else {
+ l += (tabWidth - this.$.tabsContainer.offsetWidth);
+ if (l > 0) {
+ this.$.tabsContainer.scrollLeft += l;
+ }
+ }
+ },
+
+ _calcPercent: function(w, w0) {
+ return 100 * w / w0;
+ },
+
+ _positionBar: function(width, left) {
+ width = width || 0;
+ left = left || 0;
+
+ this._width = width;
+ this._left = left;
+ this.transform(
+ 'translateX(' + left + '%) scaleX(' + (width / 100) + ')',
+ this.$.selectionBar);
+ },
+
+ _onBarTransitionEnd: function(e) {
+ var cl = this.$.selectionBar.classList;
+ // bar animation: expand -> contract
+ if (cl.contains('expand')) {
+ cl.remove('expand');
+ cl.add('contract');
+ this._positionBar(this._pos.width, this._pos.left);
+ // bar animation done
+ } else if (cl.contains('contract')) {
+ cl.remove('contract');
+ }
+ }
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.bower.json
new file mode 100644
index 00000000000..f6e66325d07
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.bower.json
@@ -0,0 +1,70 @@
+{
+ "name": "paper-toast",
+ "version": "2.1.1",
+ "description": "A material design notification toast",
+ "private": true,
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "toast",
+ "notification"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-toast.git"
+ },
+ "main": "paper-toast.html",
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#1 - 2",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#^1.0.0",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.9",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.1.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "homepage": "https://github.com/PolymerElements/paper-toast",
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "23c7d30cf8511c8669ae872eeb648a1245c3cf01"
+ },
+ "_source": "https://github.com/PolymerElements/paper-toast.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-toast"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/CODEOWNERS
new file mode 100644
index 00000000000..c5097c0c903
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @valdrinkoshi
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..9251e7f2e0a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-toast/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.travis.yml
new file mode 100644
index 00000000000..a30e72481be
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ fg+1RZ1aJQfxiM42iXvK8hj8L9RN8zX6IEjhuxFgNcgBY786DCyy9CIn1Gz4esv+4ZXyJfLyCbzGi8NMrzc6j3nbmewRKf3/zkX5NI4at82EvlkkN8Bcp7z+AV871LyLeV5q94waiR6+9/2LHega+F96pyl/4SAKxk2Gmh3BuPk=
+ - secure: >-
+ VkX13Tu1Ojr/2ZRXRORize8w4tlNo2bBUYEbEDF/RtcoxQeTffjAigmZ1q4Z/eZaA41JI/Fh90HUzZRg9V0W+TGT3t6htK9zxZq9zygM6sHVpOayxGInEW1TcMSM3QlcRI+3y8xUeCgpCmBmLLLI8K+HENRi1trg4C2HJk4JCN8=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/README.md
new file mode 100644
index 00000000000..79727aa246b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/README.md
@@ -0,0 +1,67 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-toast.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-toast)
+[![Published on webcomponents.org](https://img.shields.io/badge/webcomponents.org-published-blue.svg)](https://www.webcomponents.org/element/PolymerElements/paper-toast)
+
+## &lt;paper-toast&gt;
+
+Material design: [Snackbars & toasts](https://www.google.com/design/spec/components/snackbars-toasts.html)
+
+`paper-toast` provides a subtle notification toast. Only one `paper-toast` will
+be visible on screen.
+
+Use `opened` to show the toast:
+
+Example:
+
+```html
+<paper-toast text="Hello world!" opened></paper-toast>
+```
+
+Also `open()` or `show()` can be used to show the toast:
+
+Example:
+
+```html
+<paper-button on-click="openToast">Open Toast</paper-button>
+<paper-toast id="toast" text="Hello world!"></paper-toast>
+
+...
+
+openToast: function() {
+ this.$.toast.open();
+}
+```
+
+Set `duration` to 0, a negative number or Infinity to persist the toast on screen:
+
+Example:
+
+```html
+<paper-toast text="Terms and conditions" opened duration="0">
+ <a href="#">Show more</a>
+</paper-toast>
+```
+
+`<paper-toast>` is affected by the [stacking context](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context) of its container. Adding `<paper-toast>` inside elements that create a new stacking context - e.g. `<app-drawer>`, `<app-layout>` or `<iron-list>` - might result in toasts partially obstructed or clipped. Add `<paper-toast>` to the top level (`<body>`) element, outside the structure, e.g.:
+
+```html
+ <!-- ... -->
+ </app-drawer-layout>
+ <paper-toast id="toast"></paper-toast>
+</template>
+```
+
+You can then use custom events to communicate with it from within child components, using `addEventListener` and `dispatchEvent`.
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+| Custom property | Description | Default |
+| --- | --- | --- |
+| `--paper-toast-background-color` | The paper-toast background-color | `#323232` |
+| `--paper-toast-color` | The paper-toast color | `#f1f1f1` |
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/bower.json
new file mode 100644
index 00000000000..960829653f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/bower.json
@@ -0,0 +1,60 @@
+{
+ "name": "paper-toast",
+ "version": "2.1.1",
+ "description": "A material design notification toast",
+ "private": true,
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "toast",
+ "notification"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-toast.git"
+ },
+ "main": "paper-toast.html",
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#1 - 2",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#1 - 2",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#1 - 2",
+ "polymer": "Polymer/polymer#1.9 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "paper-button": "PolymerElements/paper-button#1 - 2",
+ "test-fixture": "PolymerElements/test-fixture#^3.0.0-rc.1",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "iron-a11y-announcer": "PolymerElements/iron-a11y-announcer#^1.0.0",
+ "iron-overlay-behavior": "PolymerElements/iron-overlay-behavior#^1.0.9",
+ "iron-fit-behavior": "PolymerElements/iron-fit-behavior#^1.1.0",
+ "polymer": "Polymer/polymer#^1.9"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "ignore": [],
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/demo/index.html
new file mode 100644
index 00000000000..06df145a59c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/demo/index.html
@@ -0,0 +1,96 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+
+<head>
+ <title>paper-toast</title>
+
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../paper-toast.html">
+ <link rel="import" href="../../paper-button/paper-button.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+
+ <custom-style><style is="custom-style" include="demo-pages-shared-styles"></style></custom-style>
+
+</head>
+
+<body unresolved class="centered">
+ <h3>Toast auto-closes after 3 seconds. Only one toast per time will be visible</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-button raised onclick="toast0.open()">Default toast</paper-button>
+ <paper-toast id="toast0" text="This toast auto-closes after 3 seconds"></paper-toast>
+ </template>
+ </demo-snippet>
+
+ <h3>Toast does not auto-close when <code>duration</code> is negative, <code>0</code>, or <code>Infinity</code></h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <style>
+ .yellow-button {
+ text-transform: none;
+ color: #eeff41;
+ }
+ </style>
+
+ <paper-button raised onclick="toast1.open()">Persistent toast</paper-button>
+
+ <paper-toast id="toast1" duration="0" text="This toast will stay opened until you close it, or open another toast.">
+ <paper-button onclick="toast1.toggle()" class="yellow-button">Close now!</paper-button>
+ </paper-toast>
+ </template>
+ </demo-snippet>
+
+ <h3>Toast can be styled</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style><style is="custom-style">
+ #toast2 {
+ --paper-toast-background-color: red;
+ --paper-toast-color: white;
+ }
+ </style></custom-style>
+
+ <paper-button raised onclick="toast2.open()">Styled toast</paper-button>
+
+ <paper-toast id="toast2" class="fit-bottom" text="This toast is red and fits bottom!"></paper-toast>
+ </template>
+ </demo-snippet>
+
+ <h3>Toast can fit into any element</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <style>
+ #container {
+ padding: 100px;
+ border: 1px solid gray;
+ }
+ </style>
+ <div id="container">
+ <paper-button raised onclick="toast3.open()">Open toast</paper-button>
+ </div>
+ <paper-toast id="toast3" class="fit-bottom" text="This toast fits into the container."></paper-toast>
+
+ <script>
+ toast3.fitInto = container;
+ </script>
+
+ </template>
+ </demo-snippet>
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/hero.svg
new file mode 100755
index 00000000000..bfdc1808bdd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/hero.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <path d="M164,114H13V88h151V114z M15,112h147V90H15V112z"/>
+ <rect x="26" y="100" width="79" height="2"/>
+ <rect x="135" y="100" width="16" height="2"/>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/index.html
new file mode 100644
index 00000000000..487bb5c38a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package-lock.json
new file mode 100644
index 00000000000..93e2a3e7e6e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-toast",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package.json
new file mode 100644
index 00000000000..8b9362b1455
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-toast",
+ "private": true,
+ "description": "A material design notification toast",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-toast.git"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.d.ts
new file mode 100644
index 00000000000..ad3b8ee5850
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.d.ts
@@ -0,0 +1,151 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-toast.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-a11y-announcer/iron-a11y-announcer.d.ts" />
+/// <reference path="../iron-overlay-behavior/iron-overlay-behavior.d.ts" />
+
+/**
+ * Material design: [Snackbars & toasts](https://www.google.com/design/spec/components/snackbars-toasts.html)
+ *
+ * `paper-toast` provides a subtle notification toast. Only one `paper-toast` will
+ * be visible on screen.
+ *
+ * Use `opened` to show the toast:
+ *
+ * Example:
+ *
+ * <paper-toast text="Hello world!" opened></paper-toast>
+ *
+ * Also `open()` or `show()` can be used to show the toast:
+ *
+ * Example:
+ *
+ * <paper-button on-click="openToast">Open Toast</paper-button>
+ * <paper-toast id="toast" text="Hello world!"></paper-toast>
+ *
+ * ...
+ *
+ * openToast: function() {
+ * this.$.toast.open();
+ * }
+ *
+ * Set `duration` to 0, a negative number or Infinity to persist the toast on screen:
+ *
+ * Example:
+ *
+ * <paper-toast text="Terms and conditions" opened duration="0">
+ * <a href="#">Show more</a>
+ * </paper-toast>
+ *
+ *
+ * ### Styling
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-toast-background-color` | The paper-toast background-color | `#323232`
+ * `--paper-toast-color` | The paper-toast color | `#f1f1f1`
+ *
+ * This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+ * In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+ */
+interface PaperToastElement extends Polymer.Element, Polymer.IronOverlayBehavior {
+
+ /**
+ * The element to fit `this` into.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ fitInto: object|null|undefined;
+
+ /**
+ * The orientation against which to align the dropdown content
+ * horizontally relative to `positionTarget`.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ horizontalAlign: string|null|undefined;
+
+ /**
+ * The orientation against which to align the dropdown content
+ * vertically relative to `positionTarget`.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ verticalAlign: string|null|undefined;
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ * Set to true to disable auto-focusing the toast or child nodes with
+ * the `autofocus` attribute` when the overlay is opened.
+ */
+ noAutoFocus: boolean|null|undefined;
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ * Set to false to enable closing of the toast by clicking outside it.
+ */
+ noCancelOnOutsideClick: boolean|null|undefined;
+
+ /**
+ * The duration in milliseconds to show the toast.
+ * Set to `0`, a negative number, or `Infinity`, to disable the
+ * toast auto-closing.
+ */
+ duration: number|null|undefined;
+
+ /**
+ * The text to display in the toast.
+ */
+ text: string|null|undefined;
+
+ /**
+ * Read-only. Deprecated. Use `opened` from `IronOverlayBehavior`.
+ */
+ readonly visible: any;
+
+ /**
+ * Read-only. Can auto-close if duration is a positive finite number.
+ */
+ readonly _canAutoClose: any;
+ created(): void;
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ * Called when the value of `opened` changes.
+ */
+ _openedChanged(): void;
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
+ _renderOpened(): void;
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
+ _renderClosed(): void;
+
+ /**
+ * Show the toast. Without arguments, this is the same as `open()` from
+ * `IronOverlayBehavior`.
+ *
+ * @param properties Properties to be set before opening the toast.
+ * e.g. `toast.show('hello')` or `toast.show({text: 'hello', duration: 3000})`
+ */
+ show(properties?: object|string|null): void;
+
+ /**
+ * Hide the toast. Same as `close()` from `IronOverlayBehavior`.
+ */
+ hide(): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-toast": PaperToastElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.html
new file mode 100644
index 00000000000..3a2db467f1b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toast/paper-toast.html
@@ -0,0 +1,299 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-a11y-announcer/iron-a11y-announcer.html">
+<link rel="import" href="../iron-overlay-behavior/iron-overlay-behavior.html">
+
+<!--
+Material design: [Snackbars & toasts](https://www.google.com/design/spec/components/snackbars-toasts.html)
+
+`paper-toast` provides a subtle notification toast. Only one `paper-toast` will
+be visible on screen.
+
+Use `opened` to show the toast:
+
+Example:
+
+ <paper-toast text="Hello world!" opened></paper-toast>
+
+Also `open()` or `show()` can be used to show the toast:
+
+Example:
+
+ <paper-button on-click="openToast">Open Toast</paper-button>
+ <paper-toast id="toast" text="Hello world!"></paper-toast>
+
+ ...
+
+ openToast: function() {
+ this.$.toast.open();
+ }
+
+Set `duration` to 0, a negative number or Infinity to persist the toast on screen:
+
+Example:
+
+ <paper-toast text="Terms and conditions" opened duration="0">
+ <a href="#">Show more</a>
+ </paper-toast>
+
+
+### Styling
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-toast-background-color` | The paper-toast background-color | `#323232`
+`--paper-toast-color` | The paper-toast color | `#f1f1f1`
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+@group Paper Elements
+@element paper-toast
+@demo demo/index.html
+@hero hero.svg
+-->
+
+<dom-module id="paper-toast">
+ <template>
+ <style>
+ :host {
+ display: block;
+ position: fixed;
+ background-color: var(--paper-toast-background-color, #323232);
+ color: var(--paper-toast-color, #f1f1f1);
+ min-height: 48px;
+ min-width: 288px;
+ padding: 16px 24px;
+ box-sizing: border-box;
+ box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+ border-radius: 2px;
+ margin: 12px;
+ font-size: 14px;
+ cursor: default;
+ -webkit-transition: -webkit-transform 0.3s, opacity 0.3s;
+ transition: transform 0.3s, opacity 0.3s;
+ opacity: 0;
+ -webkit-transform: translateY(100px);
+ transform: translateY(100px);
+ @apply --paper-font-common-base;
+ }
+
+ :host(.capsule) {
+ border-radius: 24px;
+ }
+
+ :host(.fit-bottom) {
+ width: 100%;
+ min-width: 0;
+ border-radius: 0;
+ margin: 0;
+ }
+
+ :host(.paper-toast-open) {
+ opacity: 1;
+ -webkit-transform: translateY(0px);
+ transform: translateY(0px);
+ }
+ </style>
+
+ <span id="label">{{text}}</span>
+ <slot></slot>
+ </template>
+
+ <script>
+ (function() {
+ 'use strict';
+
+ // Keeps track of the toast currently opened.
+ var currentToast = null;
+
+ Polymer({
+ is: 'paper-toast',
+
+ behaviors: [Polymer.IronOverlayBehavior],
+
+ properties: {
+ /**
+ * The element to fit `this` into.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ fitInto: {type: Object, value: window, observer: '_onFitIntoChanged'},
+
+ /**
+ * The orientation against which to align the dropdown content
+ * horizontally relative to `positionTarget`.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ horizontalAlign: {type: String, value: 'left'},
+
+ /**
+ * The orientation against which to align the dropdown content
+ * vertically relative to `positionTarget`.
+ * Overridden from `Polymer.IronFitBehavior`.
+ */
+ verticalAlign: {type: String, value: 'bottom'},
+
+ /**
+ * The duration in milliseconds to show the toast.
+ * Set to `0`, a negative number, or `Infinity`, to disable the
+ * toast auto-closing.
+ */
+ duration: {type: Number, value: 3000},
+
+ /**
+ * The text to display in the toast.
+ */
+ text: {type: String, value: ''},
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ * Set to false to enable closing of the toast by clicking outside it.
+ */
+ noCancelOnOutsideClick: {type: Boolean, value: true},
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ * Set to true to disable auto-focusing the toast or child nodes with
+ * the `autofocus` attribute` when the overlay is opened.
+ */
+ noAutoFocus: {type: Boolean, value: true}
+ },
+
+ listeners: {'transitionend': '__onTransitionEnd'},
+
+ /**
+ * Read-only. Deprecated. Use `opened` from `IronOverlayBehavior`.
+ * @property visible
+ * @deprecated
+ */
+ get visible() {
+ Polymer.Base._warn('`visible` is deprecated, use `opened` instead');
+ return this.opened;
+ },
+
+ /**
+ * Read-only. Can auto-close if duration is a positive finite number.
+ * @property _canAutoClose
+ */
+ get _canAutoClose() {
+ return this.duration > 0 && this.duration !== Infinity;
+ },
+
+ created: function() {
+ this._autoClose = null;
+ Polymer.IronA11yAnnouncer.requestAvailability();
+ },
+
+ /**
+ * Show the toast. Without arguments, this is the same as `open()` from
+ * `IronOverlayBehavior`.
+ * @param {(Object|string)=} properties Properties to be set before opening the toast.
+ * e.g. `toast.show('hello')` or `toast.show({text: 'hello', duration: 3000})`
+ */
+ show: function(properties) {
+ if (typeof properties == 'string') {
+ properties = {text: properties};
+ }
+ for (var property in properties) {
+ if (property.indexOf('_') === 0) {
+ Polymer.Base._warn(
+ 'The property "' + property + '" is private and was not set.');
+ } else if (property in this) {
+ this[property] = properties[property];
+ } else {
+ Polymer.Base._warn('The property "' + property + '" is not valid.');
+ }
+ }
+ this.open();
+ },
+
+ /**
+ * Hide the toast. Same as `close()` from `IronOverlayBehavior`.
+ */
+ hide: function() {
+ this.close();
+ },
+
+ /**
+ * Called on transitions of the toast, indicating a finished animation
+ * @private
+ */
+ __onTransitionEnd: function(e) {
+ // there are different transitions that are happening when opening and
+ // closing the toast. The last one so far is for `opacity`.
+ // This marks the end of the transition, so we check for this to determine
+ // if this is the correct event.
+ if (e && e.target === this && e.propertyName === 'opacity') {
+ if (this.opened) {
+ this._finishRenderOpened();
+ } else {
+ this._finishRenderClosed();
+ }
+ }
+ },
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ * Called when the value of `opened` changes.
+ */
+ _openedChanged: function() {
+ if (this._autoClose !== null) {
+ this.cancelAsync(this._autoClose);
+ this._autoClose = null;
+ }
+ if (this.opened) {
+ if (currentToast && currentToast !== this) {
+ currentToast.close();
+ }
+ currentToast = this;
+ this.fire('iron-announce', {text: this.text});
+ if (this._canAutoClose) {
+ this._autoClose = this.async(this.close, this.duration);
+ }
+ } else if (currentToast === this) {
+ currentToast = null;
+ }
+ Polymer.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments);
+ },
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
+ _renderOpened: function() {
+ this.classList.add('paper-toast-open');
+ },
+
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
+ _renderClosed: function() {
+ this.classList.remove('paper-toast-open');
+ },
+
+ /**
+ * @private
+ */
+ _onFitIntoChanged: function(fitInto) {
+ this.positionTarget = fitInto;
+ }
+
+ /**
+ * Fired when `paper-toast` is opened.
+ *
+ * @event 'iron-announce'
+ * @param {{text: string}} detail Contains text that will be announced.
+ */
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.bower.json
new file mode 100644
index 00000000000..3a7e5aaef3e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.bower.json
@@ -0,0 +1,70 @@
+{
+ "name": "paper-toggle-button",
+ "version": "2.1.1",
+ "description": "A material design toggle button control",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "toggle",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-toggle-button"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-toggle-button",
+ "main": "paper-toggle-button.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ },
+ "_release": "2.1.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.1.1",
+ "commit": "f2825e1b736df465b4a172ac5d33ac655e9e0e80"
+ },
+ "_source": "https://github.com/PolymerElements/paper-toggle-button.git",
+ "_target": "^2.0.0",
+ "_originalSource": "paper-toggle-button"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/CODEOWNERS
new file mode 100644
index 00000000000..0d8c0ad6b48
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+* @bicknellr
+/.travis.yml @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..f2323bdbb8c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/paper-toggle-button/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.travis.yml
new file mode 100644
index 00000000000..6007c9468a7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/.travis.yml
@@ -0,0 +1,32 @@
+language: node_js
+sudo: required
+before_script:
+ - npm install -g polymer-cli
+ - polymer install --variants
+ - >-
+ npm run update-types && git diff --exit-code || (echo -e
+ '\n\033[31mERROR:\033[0m Typings are stale. Please run "npm run
+ update-types".' && false)
+ - >-
+ npm run format && git diff --exit-code || (echo -e '\n\033[31mERROR:\033[0m
+ Project is not formatted. Please run "npm run format".' && false)
+env:
+ global:
+ - secure: >-
+ Z9YLaTbrBSMCxoeqWI1cK5WFOfA1Cz4rCUhXo4l1WDnQBVcbVEQn6V7BsF9TByrTD4H4f4Gn2SZT8tKA7u5xVZn1I0djzpotogHzqOJ0zQi5krtNczTWIFe3F/fMnNxouAZxvAtkefdH+hXZJHwqlhoHYaoWw6kE7a9EYlV2x48=
+ - secure: >-
+ Gdkk92VJJPn8uZ3TRvzMd3tI2ilaqxcFePIVtgnMLc0SKUyYGgTmUghPJ1MDGXa152ejN4c9ydTrU68Wka9yAYRirR2K1W/i6ma4Lz7vX077IhufBjfuXMasP3X7OPGJhIdvHINkpEVrySO5kcDVjCXXq91utWv+2pRQSNdjNKQ=
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - >-
+ if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default';
+ fi
+dist: trusty
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/README.md
new file mode 100644
index 00000000000..9aae694a9a8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/README.md
@@ -0,0 +1,32 @@
+[![Build status](https://travis-ci.org/PolymerElements/paper-toggle-button.svg?branch=master)](https://travis-ci.org/PolymerElements/paper-toggle-button)
+
+## &lt;paper-toggle-button&gt;
+
+Material design: [Switch](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-switch)
+
+`paper-toggle-button` provides a ON/OFF switch that user can toggle the state
+by tapping or by dragging the switch.
+
+<!---
+```
+<custom-element-demo>
+ <template>
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="paper-toggle-button.html">
+ <style is="custom-style">
+ #container {
+ padding: 16px;
+ display: flex;
+ }
+ </style>
+ <div id="container">
+ <next-code-block></next-code-block>
+ </div>
+ </template>
+</custom-element-demo>
+```
+-->
+```html
+<paper-toggle-button checked></paper-toggle-button>
+<paper-toggle-button disabled></paper-toggle-button>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/bower.json
new file mode 100644
index 00000000000..437832a5690
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/bower.json
@@ -0,0 +1,61 @@
+{
+ "name": "paper-toggle-button",
+ "version": "2.1.1",
+ "description": "A material design toggle button control",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "keywords": [
+ "web-components",
+ "polymer",
+ "toggle",
+ "control"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-toggle-button"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/paper-toggle-button",
+ "main": "paper-toggle-button.html",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#1.9 - 2",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#1 - 2",
+ "paper-behaviors": "PolymerElements/paper-behaviors#1 - 2",
+ "paper-styles": "PolymerElements/paper-styles#1 - 2"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#1 - 2",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#1 - 2",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#1 - 2",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#1 - 2",
+ "web-component-tester": "^6.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0"
+ },
+ "variants": {
+ "1.x": {
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.9",
+ "iron-checked-element-behavior": "PolymerElements/iron-checked-element-behavior#^1.0.0",
+ "paper-behaviors": "PolymerElements/paper-behaviors#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.1.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^1.0.0",
+ "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
+ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0",
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "resolutions": {
+ "webcomponentsjs": "^0.7"
+ }
+ }
+ },
+ "resolutions": {
+ "webcomponentsjs": "^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/demo/index.html
new file mode 100644
index 00000000000..b7c82c1d42f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/demo/index.html
@@ -0,0 +1,88 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <title>paper-toggle-button demo</title>
+
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <meta name="mobile-web-app-capable" content="yes">
+ <meta name="apple-mobile-web-app-capable" content="yes">
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../paper-styles/demo-pages.html">
+ <link rel="import" href="../paper-toggle-button.html">
+ </head>
+ <body unresolved>
+ <custom-style>
+ <style is="custom-style" include="demo-pages-shared-styles">
+ .vertical-section-container {
+ max-width: 500px;
+ }
+
+ paper-toggle-button {
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ </style>
+ </custom-style>
+
+ <div class="vertical-section-container centered">
+ <h3>Toggle buttons can be checked and disabled</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-toggle-button>Toggle</paper-toggle-button>
+ <paper-toggle-button checked>Toggle</paper-toggle-button>
+ <paper-toggle-button disabled>Disabled</paper-toggle-button>
+ <paper-toggle-button invalid>Invalid</paper-toggle-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Toggle buttons can hide the ripple effect using the <i>noink</i> attribute</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <paper-toggle-button noink>Toggle</paper-toggle-button>
+ </template>
+ </demo-snippet>
+
+ <h3>Toggle buttons can be styled using custom properties</h3>
+ <demo-snippet class="centered-demo">
+ <template>
+ <custom-style>
+ <style is="custom-style">
+ paper-toggle-button.green {
+ --paper-toggle-button-checked-bar-color: var(--paper-green-500);
+ --paper-toggle-button-checked-button-color: var(--paper-green-500);
+ --paper-toggle-button-checked-ink-color: var(--paper-green-500);
+ --paper-toggle-button-unchecked-bar-color: var(--paper-teal-500);
+ --paper-toggle-button-unchecked-button-color: var(--paper-teal-500);
+ --paper-toggle-button-unchecked-ink-color: var(--paper-teal-500);
+ }
+ paper-toggle-button.pink {
+ --paper-toggle-button-checked-bar-color: var(--paper-pink-500);
+ --paper-toggle-button-checked-button-color: var(--paper-pink-500);
+ --paper-toggle-button-checked-ink-color: var(--paper-pink-500);
+ --paper-toggle-button-unchecked-bar-color: var(--paper-indigo-900);
+ --paper-toggle-button-unchecked-button-color: var(--paper-indigo-900);
+ --paper-toggle-button-unchecked-ink-color: var(--paper-indigo-900);
+ }
+ </style>
+ </custom-style>
+
+ <paper-toggle-button class="green">Toggle</paper-toggle-button>
+ <paper-toggle-button checked class="pink">Toggle</paper-toggle-button>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/hero.svg b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/hero.svg
new file mode 100755
index 00000000000..21607b28280
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/hero.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 225 126" enable-background="new 0 0 225 126" xml:space="preserve">
+<g id="background" display="none">
+ <rect display="inline" fill="#B0BEC5" width="225" height="126"/>
+</g>
+<g id="label">
+</g>
+<g id="art">
+ <g>
+ <circle cx="123.8" cy="63" r="15.7"/>
+ <path d="M123,77H98.5c-7.7,0-14-6.3-14-14s6.3-14,14-14H123c7.7,0,14,6.3,14,14S130.7,77,123,77z M98.5,51c-6.6,0-12,5.4-12,12
+ s5.4,12,12,12H123c6.6,0,12-5.4,12-12s-5.4-12-12-12H98.5z"/>
+ </g>
+ <g id="ic_x5F_add_x0D_">
+ </g>
+</g>
+<g id="Guides">
+</g>
+</svg>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/index.html
new file mode 100644
index 00000000000..487bb5c38a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/index.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package-lock.json
new file mode 100644
index 00000000000..36b2f2f5b6b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package-lock.json
@@ -0,0 +1,2388 @@
+{
+ "name": "@polymer/paper-toggle-button",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@mrmlnc/readdir-enhanced": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "dev": true,
+ "requires": {
+ "call-me-maybe": "1.0.1",
+ "glob-to-regexp": "0.3.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.2.tgz",
+ "integrity": "sha512-9P946+nIkSm+761v3oxH/QVgJozhsInldKY3h8AVstdXkA8W0Fij84pqsFv1nrRuPGj4Pv71crzoZpFnLkNmKQ==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.1",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "5.0.4",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.1",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.14",
+ "vscode-uri": "1.0.3"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.1.tgz",
+ "integrity": "sha512-h3wnflb+jMTipvbbZnClgA2BexrT4w0GcfoCz5qyxd0IRsbqhLSyesM6mqZTAnhbVmhyTm5tuxfRu9R+8l+lGw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "9.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.4.tgz",
+ "integrity": "sha512-Awg4BcUYiZtNKoveGOu654JVPt11V/KIC77iBz8NweyoOAZpz5rUJfPDwwD+ajfTs2HndbTCEB8IuLfX9m/mmw==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/resolve": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.6.tgz",
+ "integrity": "sha512-g+Rg8uMWY76oYTyaL+m7ZcblqF/oj7pE6uEUyACluJx4zcop1Lk14qQiocdEkEVMDFm6DmKpxJhsER+ZuTwG3g==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "@types/winston": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.9.tgz",
+ "integrity": "sha512-zzruYOEtNgfS3SBjcij1F6HlH6My5n8WrBNhP3fzaRM22ba70QBC2ATs18jGr88Fy43c0z8vFJv5wJankfxv2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "9.6.4"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz",
+ "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-7.0.0-beta.3.tgz",
+ "integrity": "sha512-flMsJ9eSpShupt2Gwpka84DoMePvE4HlDObzdEc+1iNkacv3+NHlsJ7dMKmbnVA/AT22UhcGEBHwbJLoXWBO6Q==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.2",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-7.0.0-beta.3.tgz",
+ "integrity": "sha512-iMWYqwDarQOVlEGcK1MfbtK9vrFGs5Z4UQsdASJUHdhBp918EM5kndwriiIbhUX8gr2B/CEV/udJkFTrHsjdMQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "7.0.0-beta.3",
+ "babel-template": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-7.0.0-beta.3.tgz",
+ "integrity": "sha512-ZkYFRMWKx1c9fUW72YNM3eieBG701CMbLjmLLWmJTTPc0F0kddS9Fwok26EAmndUAgD6kFdh7ms3PH94MdGuGQ==",
+ "dev": true,
+ "requires": {
+ "babel-types": "7.0.0-beta.3"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.5",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-7.0.0-beta.3.tgz",
+ "integrity": "sha512-urJduLja89kSDGqY8ryw8iIwQnMl30IvhMtMNmDD7vBX0l0oylaLgK+7df/9ODX9vR/PhXuif6HYl5HlzAKXMg==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-traverse": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-7.0.0-beta.3.tgz",
+ "integrity": "sha512-xyh/aPYuedMAfQlSj2kjHjsEmY5/Dpxs576L05DySAVMrV+ADX6l4mTOLysAEGwJfkePJlDLhFuS6SKaxv1V7w==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "7.0.0-beta.3",
+ "babel-helper-function-name": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.27",
+ "debug": "3.1.0",
+ "globals": "10.4.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.27",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.27.tgz",
+ "integrity": "sha512-ksRx+r8eFIfdt63MCgLc9VxGL7W3jcyveQvMpNMVHgW+eb9mq3Xbm45FLCNkw8h92RvoNp4uuiwzcCEwxjDBZg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "7.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-7.0.0-beta.3.tgz",
+ "integrity": "sha512-36k8J+byAe181OmCMawGhw+DtKO7AwexPVtsPXoMfAkjtZgoCX3bEuHWfdE5sYxRM8dojvtG/+O08M0Z/YDC6w==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "babylon": {
+ "version": "7.0.0-beta.44",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz",
+ "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "bower": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.4.tgz",
+ "integrity": "sha1-54dqB23rgTf30GUl3F6MZtuC8oo=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "call-me-maybe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
+ "dev": true
+ },
+ "cancel-token": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/cancel-token/-/cancel-token-0.1.1.tgz",
+ "integrity": "sha1-wYGXZ0uxyEwdaTPr8V2NWlznm08=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ }
+ },
+ "clang-format": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.2.3.tgz",
+ "integrity": "sha512-x90Hac4ERacGDcZSvHKK58Ga0STuMD+Doi5g0iG2zf7wlJef5Huvhs/3BvMRFxwRYyYSdl6mpQNrtfMxE8MQzw==",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "glob": "7.1.2",
+ "resolve": "1.7.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.4.tgz",
+ "integrity": "sha512-h17lBwC5bl5RdukPbXji75+cg2/Qbny6kGsmLoy34s9DNH90RwRvJKb+VU5j4YY9HzYl7twLaOWDJQ4b9U+p/Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "chalk": "2.3.2",
+ "table-layout": "0.4.3",
+ "typical": "2.6.1"
+ }
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
+ "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.2",
+ "parse5": "4.0.0"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.0.tgz",
+ "integrity": "sha512-4F75PTznkNtSKs2pbhtBwRkw8sRwa7LfXx5XaQJOe4IQ6yTjceLDTwM5gj1s80R2t/5WeDC1gVfm3jLE+l39Tw==",
+ "dev": true,
+ "requires": {
+ "@mrmlnc/readdir-enhanced": "2.2.1",
+ "glob-parent": "3.1.0",
+ "is-glob": "4.0.0",
+ "merge2": "1.2.1",
+ "micromatch": "3.1.10"
+ }
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "glob-to-regexp": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-10.4.0.tgz",
+ "integrity": "sha512-uNUtxIZpGyuaq+5BqGGQHsL4wUlJAXRqOm6g3Y48/CWNGTLONgBibI0lh6lGxjR2HljFYUfszb+mk4WkgMntsA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonschema": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.4.tgz",
+ "integrity": "sha512-lz1nOH69GbsVHeVgEdvyavc/33oymY1AZwtePMiMj4HZPMbP5OIKK3zT9INMWjwua/V4Z4yq7wSlBbSG+g4AEw==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "merge2": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz",
+ "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.9",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.14",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.14.tgz",
+ "integrity": "sha512-1Zh/smUWMrjBB7NFUk8i7EAnjO81PqhI0/RzMMy9VgAbPQ6jOROwFX71T02CgpkZYa0O66Ybl7G3+4+0S1aF1Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/is-windows": "0.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.105",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.6",
+ "babel-generator": "6.26.1",
+ "babel-traverse": "7.0.0-beta.3",
+ "babel-types": "7.0.0-beta.3",
+ "babylon": "7.0.0-beta.44",
+ "cancel-token": "0.1.1",
+ "chalk": "1.1.3",
+ "clone": "2.1.2",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "is-windows": "1.0.2",
+ "jsonschema": "1.2.4",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "path-is-inside": "1.0.2",
+ "polymer-project-config": "3.13.0",
+ "resolve": "1.7.0",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.3",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.13.0.tgz",
+ "integrity": "sha512-0E1iSOpo2xFMvMomSDFl48J8IOUWmM+sfHGJSQSVfIu8GXDgz2TVraad+rEMZDbj8uxiRFvQZyouHhikxhVFpQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.105",
+ "jsonschema": "1.2.4",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.105",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.105.tgz",
+ "integrity": "sha512-fMIbw7iw91TSInS3b2DtDse5VaQEZqs0oTjvRNIFHnoHbnji+dLwpzL1L6dYGL39RzDNPHM/Off+VNcMk4ahwQ==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "resolve": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.0.tgz",
+ "integrity": "sha512-QdgZ5bjR1WAlpLaO5yHepFvC+o3rCr6wpfE2tpJNMkXdulf2jKomQBdNRQITF3ZKHNlT71syG98yQP03gasgnA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.1.0",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "table-layout": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.3.tgz",
+ "integrity": "sha512-MIhflPM38ejKrFwWwC3P9x3eHvMo5G5AmNo29Qtz2HpBl5KD2GCcmOErjgNtUQLv/qaqVDagfJY3rJLPDvEgLg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.3.tgz",
+ "integrity": "sha1-Yxvb9xbcyrDmUpGo3CXCMjIIWlI=",
+ "dev": true
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "webmat": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/webmat/-/webmat-0.2.0.tgz",
+ "integrity": "sha512-xf2iHrssbbTofFwxvrdtgSxILQ8ledlpeDc76fNkTEL76gGnxCB/YA69UF498+UPfYIDvVnk9Qt2E7MJOApacA==",
+ "dev": true,
+ "requires": {
+ "clang-format": "1.2.3",
+ "dom5": "3.0.0",
+ "fast-glob": "2.2.0",
+ "parse5": "4.0.0"
+ }
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package.json
new file mode 100644
index 00000000000..e38173eeb19
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "@polymer/paper-toggle-button",
+ "private": true,
+ "description": "A material design toggle button control",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/paper-toggle-button"
+ },
+ "license": "BSD-3-Clause",
+ "devDependencies": {
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "bower": "^1.8.0",
+ "webmat": "^0.2.0"
+ },
+ "scripts": {
+ "update-types": "bower install && gen-typescript-declarations --deleteExisting --outDir .",
+ "format": "webmat && npm run update-types"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.d.ts
new file mode 100644
index 00000000000..6584a2bb3d6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.d.ts
@@ -0,0 +1,69 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * paper-toggle-button.html
+ */
+
+/// <reference path="../polymer/types/polymer.d.ts" />
+/// <reference path="../iron-flex-layout/iron-flex-layout.d.ts" />
+/// <reference path="../paper-styles/color.d.ts" />
+/// <reference path="../paper-styles/default-theme.d.ts" />
+/// <reference path="../paper-behaviors/paper-checked-element-behavior.d.ts" />
+
+/**
+ * Material design: [Switch](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-switch)
+ *
+ * `paper-toggle-button` provides a ON/OFF switch that user can toggle the state
+ * by tapping or by dragging the switch.
+ *
+ * Example:
+ *
+ * <paper-toggle-button></paper-toggle-button>
+ *
+ * ### Styling
+ *
+ * The following custom properties and mixins are available for styling:
+ *
+ * Custom property | Description | Default
+ * ----------------|-------------|----------
+ * `--paper-toggle-button-unchecked-bar-color` | Slider color when the input is not checked | `#000000`
+ * `--paper-toggle-button-unchecked-button-color` | Button color when the input is not checked | `--paper-grey-50`
+ * `--paper-toggle-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--dark-primary-color`
+ * `--paper-toggle-button-checked-bar-color` | Slider button color when the input is checked | `--primary-color`
+ * `--paper-toggle-button-checked-button-color` | Button color when the input is checked | `--primary-color`
+ * `--paper-toggle-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color`
+ * `--paper-toggle-button-invalid-bar-color` | Slider button color when the input is invalid | `--error-color`
+ * `--paper-toggle-button-invalid-button-color` | Button color when the input is invalid | `--error-color`
+ * `--paper-toggle-button-invalid-ink-color` | Selected/focus ripple color when the input is invalid | `--error-color`
+ * `--paper-toggle-button-unchecked-bar` | Mixin applied to the slider when the input is not checked | `{}`
+ * `--paper-toggle-button-unchecked-button` | Mixin applied to the slider button when the input is not checked | `{}`
+ * `--paper-toggle-button-unchecked-ink` | Mixin applied to the ripple when the input is not checked | `{}`
+ * `--paper-toggle-button-checked-bar` | Mixin applied to the slider when the input is checked | `{}`
+ * `--paper-toggle-button-checked-button` | Mixin applied to the slider button when the input is checked | `{}`
+ * `--paper-toggle-button-checked-ink` | Mixin applied to the ripple when the input is checked | `{}`
+ * `--paper-toggle-button-label-color` | Label color | `--primary-text-color`
+ * `--paper-toggle-button-label-spacing` | Spacing between the label and the button | `8px`
+ *
+ * This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+ * In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+ */
+interface PaperToggleButtonElement extends Polymer.Element, Polymer.PaperCheckedElementBehavior {
+ attached(): void;
+
+ /**
+ * customize the element's ripple
+ */
+ _createRipple(): any;
+ _ontrack(event: any): void;
+ _trackStart(track: any): void;
+ _trackMove(track: any): void;
+ _trackEnd(track: any): void;
+}
+
+interface HTMLElementTagNameMap {
+ "paper-toggle-button": PaperToggleButtonElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.html
new file mode 100644
index 00000000000..b7f1f564e7f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/paper-toggle-button/paper-toggle-button.html
@@ -0,0 +1,280 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../paper-styles/color.html">
+<link rel="import" href="../paper-styles/default-theme.html">
+<link rel="import" href="../paper-behaviors/paper-checked-element-behavior.html">
+
+<!--
+Material design: [Switch](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-switch)
+
+`paper-toggle-button` provides a ON/OFF switch that user can toggle the state
+by tapping or by dragging the switch.
+
+Example:
+
+ <paper-toggle-button></paper-toggle-button>
+
+### Styling
+
+The following custom properties and mixins are available for styling:
+
+Custom property | Description | Default
+----------------|-------------|----------
+`--paper-toggle-button-unchecked-bar-color` | Slider color when the input is not checked | `#000000`
+`--paper-toggle-button-unchecked-button-color` | Button color when the input is not checked | `--paper-grey-50`
+`--paper-toggle-button-unchecked-ink-color` | Selected/focus ripple color when the input is not checked | `--dark-primary-color`
+`--paper-toggle-button-checked-bar-color` | Slider button color when the input is checked | `--primary-color`
+`--paper-toggle-button-checked-button-color` | Button color when the input is checked | `--primary-color`
+`--paper-toggle-button-checked-ink-color` | Selected/focus ripple color when the input is checked | `--primary-color`
+`--paper-toggle-button-invalid-bar-color` | Slider button color when the input is invalid | `--error-color`
+`--paper-toggle-button-invalid-button-color` | Button color when the input is invalid | `--error-color`
+`--paper-toggle-button-invalid-ink-color` | Selected/focus ripple color when the input is invalid | `--error-color`
+`--paper-toggle-button-unchecked-bar` | Mixin applied to the slider when the input is not checked | `{}`
+`--paper-toggle-button-unchecked-button` | Mixin applied to the slider button when the input is not checked | `{}`
+`--paper-toggle-button-unchecked-ink` | Mixin applied to the ripple when the input is not checked | `{}`
+`--paper-toggle-button-checked-bar` | Mixin applied to the slider when the input is checked | `{}`
+`--paper-toggle-button-checked-button` | Mixin applied to the slider button when the input is checked | `{}`
+`--paper-toggle-button-checked-ink` | Mixin applied to the ripple when the input is checked | `{}`
+`--paper-toggle-button-label-color` | Label color | `--primary-text-color`
+`--paper-toggle-button-label-spacing` | Spacing between the label and the button | `8px`
+
+This element applies the mixin `--paper-font-common-base` but does not import `paper-styles/typography.html`.
+In order to apply the `Roboto` font to this element, make sure you've imported `paper-styles/typography.html`.
+
+@group Paper Elements
+@element paper-toggle-button
+@hero hero.svg
+@demo demo/index.html
+-->
+
+<dom-module id="paper-toggle-button">
+ <template strip-whitespace>
+
+ <style>
+ :host {
+ display: inline-block;
+ @apply --layout-horizontal;
+ @apply --layout-center;
+ @apply --paper-font-common-base;
+ }
+
+ :host([disabled]) {
+ pointer-events: none;
+ }
+
+ :host(:focus) {
+ outline:none;
+ }
+
+ .toggle-bar {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ border-radius: 8px;
+ pointer-events: none;
+ opacity: 0.4;
+ transition: background-color linear .08s;
+ background-color: var(--paper-toggle-button-unchecked-bar-color, #000000);
+
+ @apply --paper-toggle-button-unchecked-bar;
+ }
+
+ .toggle-button {
+ position: absolute;
+ top: -3px;
+ left: 0;
+ height: 20px;
+ width: 20px;
+ border-radius: 50%;
+ box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.6);
+ transition: -webkit-transform linear .08s, background-color linear .08s;
+ transition: transform linear .08s, background-color linear .08s;
+ will-change: transform;
+ background-color: var(--paper-toggle-button-unchecked-button-color, var(--paper-grey-50));
+
+ @apply --paper-toggle-button-unchecked-button;
+ }
+
+ .toggle-button.dragging {
+ -webkit-transition: none;
+ transition: none;
+ }
+
+ :host([checked]:not([disabled])) .toggle-bar {
+ opacity: 0.5;
+ background-color: var(--paper-toggle-button-checked-bar-color, var(--primary-color));
+
+ @apply --paper-toggle-button-checked-bar;
+ }
+
+ :host([disabled]) .toggle-bar {
+ background-color: #000;
+ opacity: 0.12;
+ }
+
+ :host([checked]) .toggle-button {
+ -webkit-transform: translate(16px, 0);
+ transform: translate(16px, 0);
+ }
+
+ :host([checked]:not([disabled])) .toggle-button {
+ background-color: var(--paper-toggle-button-checked-button-color, var(--primary-color));
+
+ @apply --paper-toggle-button-checked-button;
+ }
+
+ :host([disabled]) .toggle-button {
+ background-color: #bdbdbd;
+ opacity: 1;
+ }
+
+ .toggle-ink {
+ position: absolute;
+ top: -14px;
+ left: -14px;
+ right: auto;
+ bottom: auto;
+ width: 48px;
+ height: 48px;
+ opacity: 0.5;
+ pointer-events: none;
+ color: var(--paper-toggle-button-unchecked-ink-color, var(--primary-text-color));
+
+ @apply --paper-toggle-button-unchecked-ink;
+ }
+
+ :host([checked]) .toggle-ink {
+ color: var(--paper-toggle-button-checked-ink-color, var(--primary-color));
+
+ @apply --paper-toggle-button-checked-ink;
+ }
+
+ .toggle-container {
+ display: inline-block;
+ position: relative;
+ width: 36px;
+ height: 14px;
+ /* The toggle button has an absolute position of -3px; The extra 1px
+ /* accounts for the toggle button shadow box. */
+ margin: 4px 1px;
+ }
+
+ .toggle-label {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ padding-left: var(--paper-toggle-button-label-spacing, 8px);
+ pointer-events: none;
+ color: var(--paper-toggle-button-label-color, var(--primary-text-color));
+ }
+
+ /* invalid state */
+ :host([invalid]) .toggle-bar {
+ background-color: var(--paper-toggle-button-invalid-bar-color, var(--error-color));
+ }
+
+ :host([invalid]) .toggle-button {
+ background-color: var(--paper-toggle-button-invalid-button-color, var(--error-color));
+ }
+
+ :host([invalid]) .toggle-ink {
+ color: var(--paper-toggle-button-invalid-ink-color, var(--error-color));
+ }
+ </style>
+
+ <div class="toggle-container">
+ <div id="toggleBar" class="toggle-bar"></div>
+ <div id="toggleButton" class="toggle-button"></div>
+ </div>
+
+ <div class="toggle-label"><slot></slot></div>
+
+ </template>
+
+ <script>
+ Polymer({
+ is: 'paper-toggle-button',
+
+ behaviors: [Polymer.PaperCheckedElementBehavior],
+
+ /** @private */
+ hostAttributes: {role: 'button', 'aria-pressed': 'false', tabindex: 0},
+
+ properties: {
+ /**
+ * Fired when the checked state changes due to user interaction.
+ *
+ * @event change
+ */
+ /**
+ * Fired when the checked state changes.
+ *
+ * @event iron-change
+ */
+ },
+
+ listeners: {track: '_ontrack'},
+
+ attached: function() {
+ Polymer.RenderStatus.afterNextRender(this, function() {
+ Polymer.Gestures.setTouchAction(this, 'pan-y');
+ });
+ },
+
+ _ontrack: function(event) {
+ var track = event.detail;
+ if (track.state === 'start') {
+ this._trackStart(track);
+ } else if (track.state === 'track') {
+ this._trackMove(track);
+ } else if (track.state === 'end') {
+ this._trackEnd(track);
+ }
+ },
+
+ _trackStart: function(track) {
+ this._width = this.$.toggleBar.offsetWidth / 2;
+ /*
+ * keep an track-only check state to keep the dragging behavior smooth
+ * while toggling activations
+ */
+ this._trackChecked = this.checked;
+ this.$.toggleButton.classList.add('dragging');
+ },
+
+ _trackMove: function(track) {
+ var dx = track.dx;
+ this._x = Math.min(
+ this._width, Math.max(0, this._trackChecked ? this._width + dx : dx));
+ this.translate3d(this._x + 'px', 0, 0, this.$.toggleButton);
+ this._userActivate(this._x > (this._width / 2));
+ },
+
+ _trackEnd: function(track) {
+ this.$.toggleButton.classList.remove('dragging');
+ this.transform('', this.$.toggleButton);
+ },
+
+ // customize the element's ripple
+ _createRipple: function() {
+ this._rippleContainer = this.$.toggleButton;
+ var ripple = Polymer.PaperRippleBehavior._createRipple();
+ ripple.id = 'ink';
+ ripple.setAttribute('recenters', '');
+ ripple.classList.add('circle', 'toggle-ink');
+ return ripple;
+ }
+
+ });
+ </script>
+</dom-module>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/.bower.json
new file mode 100644
index 00000000000..7fcc39951e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/.bower.json
@@ -0,0 +1,47 @@
+{
+ "name": "polymer-redux",
+ "authors": [
+ "Christopher Turner <turner296@gmail.com>"
+ ],
+ "description": "Polymer bindings for Redux.",
+ "main": "polymer-redux.html",
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ],
+ "keywords": [
+ "redux",
+ "polymer",
+ "reducer",
+ "state",
+ "web-components"
+ ],
+ "license": "MIT",
+ "homepage": "https://github.com/tur-nr/polymer-redux",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "dependencies": {
+ "polymer": "^2.0.0"
+ },
+ "devDependencies": {
+ "web-component-tester": "^6.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^2.0.0",
+ "vaadin-combo-box": "^2.0.0-alpha4"
+ },
+ "version": "1.0.5",
+ "_release": "1.0.5",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.0.5",
+ "commit": "c587d5e12776e28e7c32bb6a182b228a2f115842"
+ },
+ "_source": "https://github.com/tur-nr/polymer-redux.git",
+ "_target": "^1.0.0",
+ "_originalSource": "polymer-redux"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/LICENSE
new file mode 100644
index 00000000000..616a8a8dc34
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Christopher Turner
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/bower.json
new file mode 100644
index 00000000000..edd90f4b59a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/bower.json
@@ -0,0 +1,37 @@
+{
+ "name": "polymer-redux",
+ "authors": [
+ "Christopher Turner <turner296@gmail.com>"
+ ],
+ "description": "Polymer bindings for Redux.",
+ "main": "polymer-redux.html",
+ "moduleType": [
+ "amd",
+ "globals",
+ "node"
+ ],
+ "keywords": [
+ "redux",
+ "polymer",
+ "reducer",
+ "state",
+ "web-components"
+ ],
+ "license": "MIT",
+ "homepage": "https://github.com/tur-nr/polymer-redux",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "dependencies": {
+ "polymer": "^2.0.0"
+ },
+ "devDependencies": {
+ "web-component-tester": "^6.0.0",
+ "iron-demo-helpers": "PolymerElements/iron-demo-helpers#^2.0.0",
+ "vaadin-combo-box": "^2.0.0-alpha4"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/async.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/async.html
new file mode 100644
index 00000000000..303f4338f1d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/async.html
@@ -0,0 +1,123 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Polymer Redux, Async Demo</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <script src="../../../node_modules/redux/dist/redux.js"></script>
+ <script src="../../../node_modules/redux-thunk/dist/redux-thunk.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+
+ <link rel="import" href="../polymer-redux.html">
+
+ <style is="custom-style" include="demo-pages-shared-styles">
+ </style>
+ </head>
+ <body>
+
+ <div class="vertical-section-container">
+ <h3>Polymer Redux, Async Demo</h3>
+ <demo-snippet>
+ <template>
+ <!-- redux setup -->
+ <script>
+ var reducer = function(state, action) {
+ state = state || { counter: 0 };
+ var counter = state.counter;
+ if (action.type === 'INCREMENT') {
+ ++counter;
+ } else if (action.type === 'DOUBLE') {
+ counter += counter;
+ }
+ return {
+ counter: counter,
+ };
+ };
+ var store = Redux.createStore(
+ reducer,
+ Redux.applyMiddleware(ReduxThunk.default)
+ );
+ var ReduxBehavior = PolymerRedux(store);
+ var AsyncBehavior = {
+ actions: {
+ double: function() {
+ return function(dispatch) {
+ setTimeout(function() {
+ dispatch({ type: 'DOUBLE' });
+ }, 1000);
+ };
+ }
+ },
+ };
+ </script>
+
+ <!-- friends list module -->
+ <dom-module id="x-counter">
+ <template>
+ <p>
+ Counter value:
+ <span>[[counter]]</span>
+ </p>
+ <button on-click="incrementClick">Increment</button>
+ <button on-click="increment200Click">Increment (0.2s)</button>
+ <button on-click="increment500Click">Increment (0.5s)</button>
+ <button on-click="increment1000Click">Increment (1.0s)</button>
+ <button on-click="double1000Click">Double (1.0s)</button>
+ </template>
+ <script>
+ Polymer({
+ is: 'x-counter',
+ behaviors: [ ReduxBehavior, AsyncBehavior ],
+ actions: {
+ increment: function(ms) {
+ if (ms) {
+ return function(dispatch) {
+ setTimeout(function() {
+ return dispatch('increment');
+ }, ms);
+ };
+ }
+ return {
+ type: 'INCREMENT',
+ };
+ }
+ },
+ properties: {
+ counter: {
+ type: Number,
+ statePath: 'counter',
+ }
+ },
+ incrementClick: function() {
+ return this.dispatch('increment');
+ },
+ increment200Click: function() {
+ return this.dispatch('increment', 200);
+ },
+ increment500Click: function() {
+ return this.dispatch('increment', 500);
+ },
+ increment1000Click: function() {
+ return this.dispatch(function(dispatch) {
+ setTimeout(function() {
+ dispatch('increment');
+ }, 1000);
+ });
+ },
+ double1000Click: function() {
+ this.dispatch('double');
+ }
+ });
+ </script>
+ </dom-module>
+
+ <!-- demo -->
+ <x-counter></x-counter>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/behaviors.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/behaviors.html
new file mode 100644
index 00000000000..5d5d29d033a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/behaviors.html
@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Polymer Redux, Behaviors Demo</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <script src="../../../node_modules/redux/dist/redux.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+
+ <link rel="import" href="../polymer-redux.html">
+
+ <style is="custom-style" include="demo-pages-shared-styles">
+ </style>
+ </head>
+ <body>
+
+ <div class="vertical-section-container">
+ <h3>Polymer Redux, Behaviors Demo</h3>
+ <demo-snippet>
+ <template>
+ <!-- redux setup -->
+ <script>
+ const reducer = (state, action) => {
+ return {
+ foo: 'i am foo',
+ bar: 'i am bar',
+ baz: 'i am baz'
+ }
+ }
+ const store = Redux.createStore(reducer);
+ const ReduxBehavior = PolymerRedux(store);
+
+ const FooBarBehavior = {
+ properties: {
+ foo: {
+ type: String,
+ statePath: 'bar'
+ },
+ bar: {
+ type: String,
+ statePath: 'bar'
+ }
+ }
+ };
+
+ const CombinedBehavior = [ReduxBehavior, FooBarBehavior];
+ </script>
+
+ <!-- friends list module -->
+ <dom-module id="behavior-demo">
+ <template>
+ <p>Foo: <em>[[foo]]</em></p>
+ <p>Bar: <em>[[bar]]</em></p>
+ <p>Baz: <em>[[baz]]</em></p>
+ </template>
+ <script>
+ Polymer({
+ is: 'behavior-demo',
+ behaviors: [ CombinedBehavior ],
+ properties: {
+ foo: {
+ type: String,
+ statePath: 'foo'
+ },
+ baz: {
+ type: String,
+ notify: true,
+ statePath: 'baz'
+ }
+ }
+ });
+ </script>
+ </dom-module>
+
+ <!-- demo -->
+ <behavior-demo></behavior-demo>
+ </template>
+ </demo-snippet>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/index.html
new file mode 100644
index 00000000000..2ca6916ccf5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/index.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>polymer-redux Demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="./message-mixin.html">
+ </head>
+ <body>
+ <dom-module id="my-element">
+ <template>
+ <p>[[message]]</p>
+ <button on-click="handleUpdateMessage">Update message</button>
+ </template>
+ <script>
+ class MyElement extends MessageMixin(Polymer.Element) {
+ static get is() { return 'my-element'; }
+
+ handleUpdateMessage() {
+ this.dispatch('updateMessage', 'Nothing changes by staying the same, quite literally.');
+ }
+ }
+ window.customElements.define(MyElement.is, MyElement);
+ </script>
+ </dom-module>
+ <my-element></my-element>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/message-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/message-mixin.html
new file mode 100644
index 00000000000..661906a0c12
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/message-mixin.html
@@ -0,0 +1,24 @@
+<link rel="import" href="./redux-mixin.html">
+<script>
+ MessageMixin = Parent => class MessageMixin extends ReduxMixin(Parent) {
+ static get properties() {
+ return {
+ message: {
+ type: String,
+ statePath: 'message'
+ }
+ };
+ }
+
+ static get actions() {
+ return {
+ updateMessage(message) {
+ return {
+ type: 'UPDATE_MESSAGE',
+ message
+ }
+ }
+ };
+ }
+ };
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/observing.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/observing.html
new file mode 100644
index 00000000000..c2f85c5f35b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/observing.html
@@ -0,0 +1,70 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+
+ <title>polymer-redux Demo</title>
+
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+
+ <link rel="import" href="./redux-mixin.html">
+ </head>
+ <body>
+ <dom-module id="parent-element">
+ <template>
+ <child-element bar="{{foo}}"></child-element>
+ </template>
+ <script>
+ class ParentElement extends ReduxMixin(Polymer.Element) {
+ static get is() { return 'parent-element'; }
+
+ static get properties() {
+ return {
+ foo: {
+ type: String,
+ observer: '_observeFoo'
+ },
+ baz: {
+ type: String,
+ statePath: 'foo'
+ }
+ };
+ }
+
+ _observeFoo(current, previous) {
+ console.assert(this.baz !== undefined);
+ }
+ }
+ window.customElements.define(ParentElement.is, ParentElement);
+ </script>
+ </dom-module>
+ <dom-module id="child-element">
+ <script>
+ class ChildElement extends ReduxMixin(Polymer.Element) {
+ static get is() { return 'child-element'; }
+
+ static get properties() {
+ return {
+ foo: {
+ type: String,
+ statePath: 'message',
+ observer: '_observeFoo'
+ },
+ bar: {
+ type: String,
+ notify: true,
+ }
+ };
+ }
+
+ _observeFoo(current, previous) {
+ this.bar = this.foo;
+ }
+ }
+ window.customElements.define(ChildElement.is, ChildElement);
+ </script>
+ </dom-module>
+ <parent-element></parent-element>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/ready-state.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/ready-state.html
new file mode 100644
index 00000000000..0ccaa93367d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/ready-state.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<html>
+ <head>
+ <title>Polymer Redux, Ready State</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
+ <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
+ <script src="../../../node_modules/redux/dist/redux.js"></script>
+
+ <link rel="import" href="../../iron-demo-helpers/demo-pages-shared-styles.html">
+ <link rel="import" href="../../iron-demo-helpers/demo-snippet.html">
+ <link rel="import" href="../../vaadin-combo-box/vaadin-combo-box.html">
+
+ <link rel="import" href="../polymer-redux.html">
+
+ <style is="custom-style" include="demo-pages-shared-styles">
+ </style>
+ </head>
+ <body>
+
+ <div class="vertical-section-container">
+ <h3>Polymer Redux, Ready State</h3>
+ <demo-snippet>
+ <template>
+ <!-- friends list module -->
+ <dom-module id="friend-picker">
+ <template>
+ <h3>Choose a Friend:</h3>
+ <vaadin-combo-box id="friend-list"
+ items="[[list]]"
+ on-change="onFriendChange">
+ </vaadin-combo-box>
+ <template is="dom-if" if="[[friend]]">
+ <p>You choose: [[friend]].</p>
+ </template>
+ </template>
+ </dom-module>
+ <!-- demo -->
+ <friend-picker></friend-picker>
+ </template>
+ </demo-snippet>
+ <script>
+ // redux setup
+ const initialState = {
+ friends: ['Adam', 'Beth', 'Carl', 'Denise'],
+ chosenFriend: 'Beth',
+ };
+ const reducer = (state, action) => {
+ if (!state) return initialState;
+
+ switch (action.type) {
+ case 'CHOOSE_FRIEND':
+ return Object.assign({}, state, {
+ chosenFriend: action.friend
+ });
+ }
+
+ return state;
+ }
+ const store = Redux.createStore(
+ reducer,
+ window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
+ );
+ const ReduxBehavior = PolymerRedux(store);
+
+ Polymer({
+ is: 'friend-picker',
+ behaviors: [ ReduxBehavior ],
+ properties: {
+ list: {
+ type: Array,
+ statePath: 'friends'
+ },
+ friend: {
+ type: String,
+ statePath: 'chosenFriend'
+ }
+ },
+ actions: {
+ chooseFriend: function(friend) {
+ return {
+ type: 'CHOOSE_FRIEND',
+ friend: friend
+ };
+ }
+ },
+ onFriendChange: function() {
+ this.dispatch('chooseFriend', this.$['friend-list'].value);
+ }
+ });
+ </script>
+ </div>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/redux-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/redux-mixin.html
new file mode 100644
index 00000000000..01902220aec
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/demo/redux-mixin.html
@@ -0,0 +1,22 @@
+<link rel="import" href="../polymer-redux.html">
+<script src="../node_modules/redux/dist/redux.js"></script>
+<script>
+ const initial = {
+ message: 'Hello from PolymerRedux',
+ foo: 'I am a Foo',
+ bar: 'I just got Bar\'d'
+ };
+ const reducer = (state = initial, action) => {
+ switch (action.type) {
+ case 'UPDATE_MESSAGE':
+ return Object.assign({}, state, {
+ message: action.message
+ });
+
+ default:
+ return state;
+ }
+ };
+ const store = Redux.createStore(reducer);
+ ReduxMixin = PolymerRedux(store);
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/dist/polymer-redux.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/dist/polymer-redux.html
new file mode 100644
index 00000000000..fd592d46a0d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/dist/polymer-redux.html
@@ -0,0 +1,256 @@
+<script type="text/javascript">var PolymerRedux = (function () {
+'use strict';
+
+var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+var win;
+
+if (typeof window !== "undefined") {
+ win = window;
+} else if (typeof commonjsGlobal !== "undefined") {
+ win = commonjsGlobal;
+} else if (typeof self !== "undefined") {
+ win = self;
+} else {
+ win = {};
+}
+
+var window_1 = win;
+
+var console_1 = console;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+// Expose globals
+var CustomEvent = window_1.CustomEvent;
+var Polymer = window_1.Polymer;
+
+/**
+ * Polymer Redux
+ *
+ * Creates a Class mixin for decorating Elements with a given Redux store.
+ *
+ * @polymerMixin
+ *
+ * @param {Object} store Redux store.
+ * @return {Function} Class mixin.
+ */
+
+function PolymerRedux(store) {
+ if (!store) {
+ throw new TypeError('PolymerRedux: expecting a redux store.');
+ } else if (!['getState', 'dispatch', 'subscribe'].every(function (k) {
+ return typeof store[k] === 'function';
+ })) {
+ throw new TypeError('PolymerRedux: invalid store object.');
+ }
+
+ var subscribers = new Map();
+
+ /**
+ * Binds element's properties to state changes from the Redux store.
+ *
+ * @example
+ * const update = bind(el, props) // set bindings
+ * update(state) // manual update
+ *
+ * @private
+ * @param {HTMLElement} element
+ * @param {Object} properties
+ * @return {Function} Update function.
+ */
+ var bind = function bind(element, properties) {
+ var bindings = Object.keys(properties).filter(function (name) {
+ var property = properties[name];
+ if (Object.prototype.hasOwnProperty.call(property, 'statePath')) {
+ if (!property.readOnly && property.notify) {
+ console_1.warn('PolymerRedux: <' + element.constructor.is + '>.' + name + ' has "notify" enabled, two-way bindings goes against Redux\'s paradigm');
+ }
+ return true;
+ }
+ return false;
+ });
+
+ /**
+ * Updates an element's properties with the given state.
+ *
+ * @private
+ * @param {Object} state
+ */
+ var update = function update(state) {
+ var propertiesChanged = false;
+ bindings.forEach(function (name) {
+ // Perhaps .reduce() to a boolean?
+ var statePath = properties[name].statePath;
+
+ var value = typeof statePath === 'function' ? statePath.call(element, state) : Polymer.Path.get(state, statePath);
+
+ var changed = element._setPendingPropertyOrPath(name, value, true);
+ propertiesChanged = propertiesChanged || changed;
+ });
+ if (propertiesChanged) {
+ element._invalidateProperties();
+ }
+ };
+
+ // Redux listener
+ var unsubscribe = store.subscribe(function () {
+ var detail = store.getState();
+ update(detail);
+
+ element.dispatchEvent(new CustomEvent('state-changed', { detail: detail }));
+ });
+
+ subscribers.set(element, unsubscribe);
+ update(store.getState());
+
+ return update;
+ };
+
+ /**
+ * Unbinds an element from state changes in the Redux store.
+ *
+ * @private
+ * @param {HTMLElement} element
+ */
+ var unbind = function unbind(element) {
+ var off = subscribers.get(element);
+ if (typeof off === 'function') {
+ off();
+ }
+ };
+
+ /**
+ * Merges a property's object value using the defaults way.
+ *
+ * @private
+ * @param {Object} what Initial prototype
+ * @param {String} which Property to collect.
+ * @return {Object} the collected values
+ */
+ var collect = function collect(what, which) {
+ var res = {};
+ while (what) {
+ res = _extends({}, what[which], res); // Respect prototype priority
+ what = Object.getPrototypeOf(what);
+ }
+ return res;
+ };
+
+ /**
+ * ReduxMixin
+ *
+ * @example
+ * const ReduxMixin = PolymerRedux(store)
+ * class Foo extends ReduxMixin(Polymer.Element) { }
+ *
+ * @polymerMixinClass
+ *
+ * @param {Polymer.Element} parent The polymer parent element.
+ * @return {Function} PolymerRedux mixed class.
+ */
+ return function (parent) {
+ return class ReduxMixin extends parent {
+ constructor() {
+ super();
+
+ // Collect the action creators first as property changes trigger
+ // dispatches from observers, see #65, #66, #67
+ var actions = collect(this.constructor, 'actions');
+ Object.defineProperty(this, '_reduxActions', {
+ configurable: true,
+ value: actions
+ });
+ }
+
+ connectedCallback() {
+ var properties = collect(this.constructor, 'properties');
+ bind(this, properties);
+ super.connectedCallback();
+ }
+
+ disconnectedCallback() {
+ unbind(this);
+ super.disconnectedCallback();
+ }
+
+ /**
+ * Dispatches an action to the Redux store.
+ *
+ * @example
+ * element.dispatch({ type: 'ACTION' })
+ *
+ * @example
+ * element.dispatch('actionCreator', 'foo', 'bar')
+ *
+ * @example
+ * element.dispatch((dispatch) => {
+ * dispatch({ type: 'MIDDLEWARE'})
+ * })
+ *
+ * @param {...*} args
+ * @return {Object} The action.
+ */
+ dispatch() {
+ var _this = this;
+
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ var actions = this._reduxActions;
+
+ // Action creator
+ var action = args[0];
+
+ if (typeof action === 'string') {
+ if (typeof actions[action] !== 'function') {
+ throw new TypeError('PolymerRedux: <' + this.constructor.is + '> invalid action creator "' + action + '"');
+ }
+ action = actions[action].apply(actions, _toConsumableArray(args.slice(1)));
+ }
+
+ // Proxy async dispatch
+ if (typeof action === 'function') {
+ var originalAction = action;
+ action = function action() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ // Replace redux dispatch
+ args.splice(0, 1, function () {
+ return _this.dispatch.apply(_this, arguments);
+ });
+ return originalAction.apply(undefined, args);
+ };
+
+ // Copy props from the original action to the proxy.
+ // see https://github.com/tur-nr/polymer-redux/issues/98
+ Object.keys(originalAction).forEach(function (prop) {
+ action[prop] = originalAction[prop];
+ });
+ }
+
+ return store.dispatch(action);
+ }
+
+ /**
+ * Gets the current state in the Redux store.
+ *
+ * @return {*}
+ */
+ getState() {
+ return store.getState();
+ }
+ };
+ };
+}
+
+return PolymerRedux;
+
+}());
+</script>
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/gulpfile.babel.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/gulpfile.babel.js
new file mode 100644
index 00000000000..b7d9f51e0e7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/gulpfile.babel.js
@@ -0,0 +1,80 @@
+import {writeFile, mkdirSync} from 'fs';
+import gulp from 'gulp';
+import del from 'del';
+import sequence from 'run-sequence';
+import {rollup} from 'rollup';
+import nodeResolve from 'rollup-plugin-node-resolve';
+import commonjs from 'rollup-plugin-commonjs';
+import babelRollup from 'rollup-plugin-babel';
+import {Bundler} from 'polymer-bundler';
+import {serialize} from 'parse5';
+import pify from 'pify';
+
+gulp.task('default', ['dist']);
+
+gulp.task('clean', () => del(['lib', 'dist']));
+
+gulp.task('build', done => sequence(['clean'], ['build:lib', 'build:copy'], done));
+
+gulp.task('build:lib', () => {
+ return rollup({
+ entry: 'src/index.js',
+ plugins: [
+ nodeResolve({
+ jsnext: true,
+ main: true
+ }),
+ commonjs({
+ include: 'node_modules/**'
+ }),
+ babelRollup({
+ babelrc: false,
+ presets: [['env', {
+ targets: {
+ browsers: [
+ 'last 2 versions',
+ 'not ie 10'
+ ]
+ },
+ modules: false,
+ exclude: [
+ 'transform-es2015-classes'
+ ]
+ }]],
+ plugins: [
+ 'transform-object-assign'
+ ]
+ })
+ ]
+ }).then(bundle => {
+ return bundle.write({
+ format: 'iife',
+ moduleName: 'PolymerRedux',
+ dest: 'lib/index.js'
+ });
+ });
+});
+
+gulp.task('build:copy', () => gulp.src(['src/**.html']).pipe(gulp.dest('lib')));
+
+gulp.task('dist', ['build'], () => {
+ const entry = 'lib/index.html';
+ const b = new Bundler({
+ inlineScripts: true
+ });
+
+ return b.generateManifest([entry])
+ .then(manifest => b.bundle(manifest))
+ .then(bundles => {
+ const {ast} = bundles.documents.get(entry);
+ const html = serialize(ast);
+
+ mkdirSync('dist');
+
+ return pify(writeFile)('dist/polymer-redux.html', `${html}\n`);
+ });
+});
+
+gulp.task('develop', ['dist'], () => {
+ gulp.watch(['src/**/*'], ['dist']);
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/index.html
new file mode 100644
index 00000000000..4a18039f5fc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/index.html
@@ -0,0 +1,14 @@
+<!doctype html>
+
+<html>
+ <head>
+ <title>polymer-redux</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+ </head>
+ <body>
+ <iron-component-page src="polymer-redux.html"></iron-component-page>
+ </body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.html
new file mode 100644
index 00000000000..62550945d54
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.html
@@ -0,0 +1 @@
+<script type="text/javascript" src="index.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.js
new file mode 100644
index 00000000000..528f8746918
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/lib/index.js
@@ -0,0 +1,254 @@
+var PolymerRedux = (function () {
+'use strict';
+
+var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+var win;
+
+if (typeof window !== "undefined") {
+ win = window;
+} else if (typeof commonjsGlobal !== "undefined") {
+ win = commonjsGlobal;
+} else if (typeof self !== "undefined") {
+ win = self;
+} else {
+ win = {};
+}
+
+var window_1 = win;
+
+var console_1 = console;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
+
+// Expose globals
+var CustomEvent = window_1.CustomEvent;
+var Polymer = window_1.Polymer;
+
+/**
+ * Polymer Redux
+ *
+ * Creates a Class mixin for decorating Elements with a given Redux store.
+ *
+ * @polymerMixin
+ *
+ * @param {Object} store Redux store.
+ * @return {Function} Class mixin.
+ */
+
+function PolymerRedux(store) {
+ if (!store) {
+ throw new TypeError('PolymerRedux: expecting a redux store.');
+ } else if (!['getState', 'dispatch', 'subscribe'].every(function (k) {
+ return typeof store[k] === 'function';
+ })) {
+ throw new TypeError('PolymerRedux: invalid store object.');
+ }
+
+ var subscribers = new Map();
+
+ /**
+ * Binds element's properties to state changes from the Redux store.
+ *
+ * @example
+ * const update = bind(el, props) // set bindings
+ * update(state) // manual update
+ *
+ * @private
+ * @param {HTMLElement} element
+ * @param {Object} properties
+ * @return {Function} Update function.
+ */
+ var bind = function bind(element, properties) {
+ var bindings = Object.keys(properties).filter(function (name) {
+ var property = properties[name];
+ if (Object.prototype.hasOwnProperty.call(property, 'statePath')) {
+ if (!property.readOnly && property.notify) {
+ console_1.warn('PolymerRedux: <' + element.constructor.is + '>.' + name + ' has "notify" enabled, two-way bindings goes against Redux\'s paradigm');
+ }
+ return true;
+ }
+ return false;
+ });
+
+ /**
+ * Updates an element's properties with the given state.
+ *
+ * @private
+ * @param {Object} state
+ */
+ var update = function update(state) {
+ var propertiesChanged = false;
+ bindings.forEach(function (name) {
+ // Perhaps .reduce() to a boolean?
+ var statePath = properties[name].statePath;
+
+ var value = typeof statePath === 'function' ? statePath.call(element, state) : Polymer.Path.get(state, statePath);
+
+ var changed = element._setPendingPropertyOrPath(name, value, true);
+ propertiesChanged = propertiesChanged || changed;
+ });
+ if (propertiesChanged) {
+ element._invalidateProperties();
+ }
+ };
+
+ // Redux listener
+ var unsubscribe = store.subscribe(function () {
+ var detail = store.getState();
+ update(detail);
+
+ element.dispatchEvent(new CustomEvent('state-changed', { detail: detail }));
+ });
+
+ subscribers.set(element, unsubscribe);
+ update(store.getState());
+
+ return update;
+ };
+
+ /**
+ * Unbinds an element from state changes in the Redux store.
+ *
+ * @private
+ * @param {HTMLElement} element
+ */
+ var unbind = function unbind(element) {
+ var off = subscribers.get(element);
+ if (typeof off === 'function') {
+ off();
+ }
+ };
+
+ /**
+ * Merges a property's object value using the defaults way.
+ *
+ * @private
+ * @param {Object} what Initial prototype
+ * @param {String} which Property to collect.
+ * @return {Object} the collected values
+ */
+ var collect = function collect(what, which) {
+ var res = {};
+ while (what) {
+ res = _extends({}, what[which], res); // Respect prototype priority
+ what = Object.getPrototypeOf(what);
+ }
+ return res;
+ };
+
+ /**
+ * ReduxMixin
+ *
+ * @example
+ * const ReduxMixin = PolymerRedux(store)
+ * class Foo extends ReduxMixin(Polymer.Element) { }
+ *
+ * @polymerMixinClass
+ *
+ * @param {Polymer.Element} parent The polymer parent element.
+ * @return {Function} PolymerRedux mixed class.
+ */
+ return function (parent) {
+ return class ReduxMixin extends parent {
+ constructor() {
+ super();
+
+ // Collect the action creators first as property changes trigger
+ // dispatches from observers, see #65, #66, #67
+ var actions = collect(this.constructor, 'actions');
+ Object.defineProperty(this, '_reduxActions', {
+ configurable: true,
+ value: actions
+ });
+ }
+
+ connectedCallback() {
+ var properties = collect(this.constructor, 'properties');
+ bind(this, properties);
+ super.connectedCallback();
+ }
+
+ disconnectedCallback() {
+ unbind(this);
+ super.disconnectedCallback();
+ }
+
+ /**
+ * Dispatches an action to the Redux store.
+ *
+ * @example
+ * element.dispatch({ type: 'ACTION' })
+ *
+ * @example
+ * element.dispatch('actionCreator', 'foo', 'bar')
+ *
+ * @example
+ * element.dispatch((dispatch) => {
+ * dispatch({ type: 'MIDDLEWARE'})
+ * })
+ *
+ * @param {...*} args
+ * @return {Object} The action.
+ */
+ dispatch() {
+ var _this = this;
+
+ for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ var actions = this._reduxActions;
+
+ // Action creator
+ var action = args[0];
+
+ if (typeof action === 'string') {
+ if (typeof actions[action] !== 'function') {
+ throw new TypeError('PolymerRedux: <' + this.constructor.is + '> invalid action creator "' + action + '"');
+ }
+ action = actions[action].apply(actions, _toConsumableArray(args.slice(1)));
+ }
+
+ // Proxy async dispatch
+ if (typeof action === 'function') {
+ var originalAction = action;
+ action = function action() {
+ for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ args[_key2] = arguments[_key2];
+ }
+
+ // Replace redux dispatch
+ args.splice(0, 1, function () {
+ return _this.dispatch.apply(_this, arguments);
+ });
+ return originalAction.apply(undefined, args);
+ };
+
+ // Copy props from the original action to the proxy.
+ // see https://github.com/tur-nr/polymer-redux/issues/98
+ Object.keys(originalAction).forEach(function (prop) {
+ action[prop] = originalAction[prop];
+ });
+ }
+
+ return store.dispatch(action);
+ }
+
+ /**
+ * Gets the current state in the Redux store.
+ *
+ * @return {*}
+ */
+ getState() {
+ return store.getState();
+ }
+ };
+ };
+}
+
+return PolymerRedux;
+
+}());
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/package.json
new file mode 100644
index 00000000000..e412993b6b6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/package.json
@@ -0,0 +1,108 @@
+{
+ "name": "polymer-redux",
+ "version": "1.0.5",
+ "description": "Polymer bindings for Redux.",
+ "main": "lib/polymer-redux.js",
+ "module": "src/index.js",
+ "jsnext:main": "src/index.js",
+ "scripts": {
+ "build": "gulp",
+ "pretest": "npm run build && npm run lint",
+ "test": "jest && polymer test",
+ "lint": "xo && polymer lint --root=$(pwd)/lib"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/tur-nr/polymer-redux.git"
+ },
+ "keywords": [
+ "redux",
+ "polymer",
+ "reducer",
+ "state",
+ "web-components"
+ ],
+ "author": "Christopher Turner <turner296@gmail.com>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/tur-nr/polymer-redux/issues"
+ },
+ "homepage": "https://github.com/tur-nr/polymer-redux#readme",
+ "dependencies": {
+ "global": "^4.3.1"
+ },
+ "devDependencies": {
+ "babel-jest": "^19.0.0",
+ "babel-plugin-external-helpers": "^6.8.0",
+ "babel-plugin-transform-object-assign": "^6.22.0",
+ "babel-plugin-transform-object-rest-spread": "^6.23.0",
+ "babel-preset-env": "^1.2.2",
+ "babel-register": "^6.24.0",
+ "bower": "^1.5.2",
+ "coveralls": "^2.11.9",
+ "del": "^2.2.2",
+ "gulp": "^3.9.1",
+ "jest": "^19.0.2",
+ "parse5": "^3.0.2",
+ "pify": "^2.3.0",
+ "polymer-bundler": "^2.0.1",
+ "polymer-cli": "^1.1.0",
+ "redux": "^3.0.5",
+ "redux-thunk": "^2.2.0",
+ "rollup": "^0.36.0",
+ "rollup-plugin-babel": "^2.6.1",
+ "rollup-plugin-commonjs": "^8.0.2",
+ "rollup-plugin-node-resolve": "^2.0.0",
+ "run-sequence": "^1.2.2",
+ "xo": "^0.18.0"
+ },
+ "xo": {
+ "next": true,
+ "ignore": [
+ "dist/**",
+ "lib/**",
+ "test/**"
+ ],
+ "overrides": [
+ {
+ "files": "gulpfile.babel.js",
+ "rules": {
+ "indent": [
+ "error",
+ "tab",
+ {
+ "MemberExpression": 1
+ }
+ ]
+ }
+ },
+ {
+ "files": "src/*.js",
+ "envs": [
+ "browser"
+ ]
+ },
+ {
+ "files": "test/**.spec.js",
+ "envs": [
+ "jest"
+ ],
+ "rules": {
+ "new-cap": "off",
+ "max-nested-callbacks": "off"
+ }
+ }
+ ]
+ },
+ "jest": {
+ "collectCoverage": true,
+ "collectCoverageFrom": [
+ "src/**.js"
+ ],
+ "resetMocks": true,
+ "testMatch": [
+ "**/test/?(*.)spec.js"
+ ],
+ "verbose": true
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer-redux.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer-redux.html
new file mode 100644
index 00000000000..3065e63e427
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer-redux.html
@@ -0,0 +1,2 @@
+<link rel="import" href="../polymer/polymer-element.html">
+<link rel="import" href="./dist/polymer-redux.html">
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer.json
new file mode 100644
index 00000000000..ef1ca6787a9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/polymer.json
@@ -0,0 +1,5 @@
+{
+ "lint": {
+ "rules": ["polymer-2"]
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/readme.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/readme.md
new file mode 100644
index 00000000000..850f13cc2e0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/readme.md
@@ -0,0 +1,103 @@
+# Polymer Redux
+
+[![Build Status](https://travis-ci.org/tur-nr/polymer-redux.svg?branch=master)](https://travis-ci.org/tur-nr/polymer-redux)
+[![Coverage Status](https://coveralls.io/repos/github/tur-nr/polymer-redux/badge.svg?branch=master)](https://coveralls.io/github/tur-nr/polymer-redux?branch=master)
+
+Polymer bindings for Redux. Bind store state to properties and dispatch
+actions from within Polymer Elements.
+
+Polymer is a modern library for creating Web Components within an application.
+Redux is a state container for managing predictable data. Binding the two
+libraries together allows developers to create powerful and complex
+applications faster and simpler. This approach allows the components you build
+with Polymer to be more focused on functionality than the applications state.
+
+## Installation
+
+```bash
+bower install --save polymer-redux
+```
+
+## Example
+
+```javascript
+// Create a Redux store
+const store = Redux.createStore((state = {}, action) => state)
+
+// Create the PolymerRedux mixin
+const ReduxMixin = PolymerRedux(store)
+
+// Bind Elements using the mixin
+class MyElement extends ReduxMixin(Polymer.Element) {
+ static get is() {
+ return 'my-element'
+ }
+
+ connectedCallback() {
+ super.connectedCallback();
+ const state = this.getState();
+ }
+}
+
+// Define your Element
+customElements.define(MyElement.is, MyElement)
+```
+
+Now `MyElement` has a connection to the Redux store and can bind properties to
+it's state and dispatch actions.
+
+## Documentation
+
+See the documentation page: [https://tur-nr.github.io/polymer-redux/docs](https://tur-nr.github.io/polymer-redux/docs).
+
+## API
+
+#### PolymerRedux
+
+##### `new PolymerRedux(<store>)`
+
+* `store` Object, Redux store.
+
+Returns a `ReduxMixin` function.
+
+#### Redux Mixin
+
+These methods are available on the instance of the component, the element.
+
+##### `#getState()`
+
+Returns current store's state.
+
+##### `#dispatch(<name>, [args, ...])`
+
+* `name` String, action name in the actions list.
+* `arg...` *, Arguments to pass to action function.
+
+Returns the action object.
+
+
+##### `#dispatch(<fn>)`
+
+* `fn` Function, Redux middleware dispatch function.
+
+Returns the action object.
+
+
+##### `#dispatch(<action>)`
+
+* `action` Object, the action object.
+
+Returns the action object.
+
+
+#### Events
+
+##### `state-changed`
+
+Fires when the store's state has changed.
+
+## License
+
+[MIT](LICENSE)
+
+Copyright (c) 2017 [Christopher Turner](https://github.com/tur-nr)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.html
new file mode 100644
index 00000000000..62550945d54
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.html
@@ -0,0 +1 @@
+<script type="text/javascript" src="index.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.js
new file mode 100644
index 00000000000..c3c759d3962
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/src/index.js
@@ -0,0 +1,212 @@
+import window from 'global/window';
+import console from 'global/console';
+
+// Expose globals
+const {CustomEvent, Polymer} = window;
+
+/**
+ * Polymer Redux
+ *
+ * Creates a Class mixin for decorating Elements with a given Redux store.
+ *
+ * @polymerMixin
+ *
+ * @param {Object} store Redux store.
+ * @return {Function} Class mixin.
+ */
+export default function PolymerRedux(store) {
+ if (!store) {
+ throw new TypeError('PolymerRedux: expecting a redux store.');
+ } else if (!['getState', 'dispatch', 'subscribe'].every(k => typeof store[k] === 'function')) {
+ throw new TypeError('PolymerRedux: invalid store object.');
+ }
+
+ const subscribers = new Map();
+
+ /**
+ * Binds element's properties to state changes from the Redux store.
+ *
+ * @example
+ * const update = bind(el, props) // set bindings
+ * update(state) // manual update
+ *
+ * @private
+ * @param {HTMLElement} element
+ * @param {Object} properties
+ * @return {Function} Update function.
+ */
+ const bind = (element, properties) => {
+ const bindings = Object.keys(properties)
+ .filter(name => {
+ const property = properties[name];
+ if (Object.prototype.hasOwnProperty.call(property, 'statePath')) {
+ if (!property.readOnly && property.notify) {
+ console.warn(`PolymerRedux: <${element.constructor.is}>.${name} has "notify" enabled, two-way bindings goes against Redux's paradigm`);
+ }
+ return true;
+ }
+ return false;
+ });
+
+ /**
+ * Updates an element's properties with the given state.
+ *
+ * @private
+ * @param {Object} state
+ */
+ const update = state => {
+ let propertiesChanged = false;
+ bindings.forEach(name => { // Perhaps .reduce() to a boolean?
+ const {statePath} = properties[name];
+ const value = (typeof statePath === 'function') ?
+ statePath.call(element, state) :
+ Polymer.Path.get(state, statePath);
+
+ const changed = element._setPendingPropertyOrPath(name, value, true);
+ propertiesChanged = propertiesChanged || changed;
+ });
+ if (propertiesChanged) {
+ element._invalidateProperties();
+ }
+ };
+
+ // Redux listener
+ const unsubscribe = store.subscribe(() => {
+ const detail = store.getState();
+ update(detail);
+
+ element.dispatchEvent(new CustomEvent('state-changed', {detail}));
+ });
+
+ subscribers.set(element, unsubscribe);
+ update(store.getState());
+
+ return update;
+ };
+
+ /**
+ * Unbinds an element from state changes in the Redux store.
+ *
+ * @private
+ * @param {HTMLElement} element
+ */
+ const unbind = element => {
+ const off = subscribers.get(element);
+ if (typeof off === 'function') {
+ off();
+ }
+ };
+
+ /**
+ * Merges a property's object value using the defaults way.
+ *
+ * @private
+ * @param {Object} what Initial prototype
+ * @param {String} which Property to collect.
+ * @return {Object} the collected values
+ */
+ const collect = (what, which) => {
+ let res = {};
+ while (what) {
+ res = Object.assign({}, what[which], res); // Respect prototype priority
+ what = Object.getPrototypeOf(what);
+ }
+ return res;
+ };
+
+ /**
+ * ReduxMixin
+ *
+ * @example
+ * const ReduxMixin = PolymerRedux(store)
+ * class Foo extends ReduxMixin(Polymer.Element) { }
+ *
+ * @polymerMixinClass
+ *
+ * @param {Polymer.Element} parent The polymer parent element.
+ * @return {Function} PolymerRedux mixed class.
+ */
+ return parent => class ReduxMixin extends parent {
+ constructor() {
+ super();
+
+ // Collect the action creators first as property changes trigger
+ // dispatches from observers, see #65, #66, #67
+ const actions = collect(this.constructor, 'actions');
+ Object.defineProperty(this, '_reduxActions', {
+ configurable: true,
+ value: actions
+ });
+ }
+
+ connectedCallback() {
+ const properties = collect(this.constructor, 'properties');
+ bind(this, properties);
+ super.connectedCallback();
+ }
+
+ disconnectedCallback() {
+ unbind(this);
+ super.disconnectedCallback();
+ }
+
+ /**
+ * Dispatches an action to the Redux store.
+ *
+ * @example
+ * element.dispatch({ type: 'ACTION' })
+ *
+ * @example
+ * element.dispatch('actionCreator', 'foo', 'bar')
+ *
+ * @example
+ * element.dispatch((dispatch) => {
+ * dispatch({ type: 'MIDDLEWARE'})
+ * })
+ *
+ * @param {...*} args
+ * @return {Object} The action.
+ */
+ dispatch(...args) {
+ const actions = this._reduxActions;
+
+ // Action creator
+ let [action] = args;
+ if (typeof action === 'string') {
+ if (typeof actions[action] !== 'function') {
+ throw new TypeError(`PolymerRedux: <${this.constructor.is}> invalid action creator "${action}"`);
+ }
+ action = actions[action](...args.slice(1));
+ }
+
+ // Proxy async dispatch
+ if (typeof action === 'function') {
+ const originalAction = action;
+ action = (...args) => {
+ // Replace redux dispatch
+ args.splice(0, 1, (...args) => {
+ return this.dispatch(...args);
+ });
+ return originalAction(...args);
+ };
+
+ // Copy props from the original action to the proxy.
+ // see https://github.com/tur-nr/polymer-redux/issues/98
+ Object.keys(originalAction).forEach(prop => {
+ action[prop] = originalAction[prop];
+ });
+ }
+
+ return store.dispatch(action);
+ }
+
+ /**
+ * Gets the current state in the Redux store.
+ *
+ * @return {*}
+ */
+ getState() {
+ return store.getState();
+ }
+ };
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/wct.conf.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/wct.conf.json
new file mode 100644
index 00000000000..bdf8891c943
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/wct.conf.json
@@ -0,0 +1,7 @@
+{
+ "plugins": {
+ "local": {
+ "browsers": ["chrome"]
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/yarn.lock b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/yarn.lock
new file mode 100644
index 00000000000..6ba3ad976f6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer-redux/yarn.lock
@@ -0,0 +1,7838 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@types/assert@0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/assert/-/assert-0.0.29.tgz#8e562785baa5abda7c04a49f6665eae7431928d3"
+
+"@types/babel-core@^6.7.14":
+ version "6.7.14"
+ resolved "https://registry.yarnpkg.com/@types/babel-core/-/babel-core-6.7.14.tgz#a08c900a98e8987c1a98d2ea4fa0a1805a7d131f"
+ dependencies:
+ "@types/babel-template" "*"
+ "@types/babel-traverse" "*"
+ "@types/babel-types" "*"
+
+"@types/babel-template@*":
+ version "6.7.14"
+ resolved "https://registry.yarnpkg.com/@types/babel-template/-/babel-template-6.7.14.tgz#8088a56f9d697d620d3d079c3ef66025b7a08d02"
+ dependencies:
+ "@types/babel-types" "*"
+ "@types/babylon" "*"
+
+"@types/babel-traverse@*":
+ version "6.7.16"
+ resolved "https://registry.yarnpkg.com/@types/babel-traverse/-/babel-traverse-6.7.16.tgz#52f475893b8633f653499d745302fa5572a7bd05"
+ dependencies:
+ "@types/babel-types" "*"
+
+"@types/babel-types@*":
+ version "6.7.16"
+ resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-6.7.16.tgz#e2602896636858a0067971f7ca4bb8678038293f"
+
+"@types/babylon@*":
+ version "6.16.1"
+ resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.1.tgz#e4d10ab9e43a73703a17c6f41438bede28769340"
+ dependencies:
+ "@types/babel-types" "*"
+
+"@types/bluebird@*":
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.4.tgz#f120162b04fd6d55e10346d7e2e96eed462b02cf"
+
+"@types/body-parser@0.0.33":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-0.0.33.tgz#33ca1498fc37e51c5df0c81cae34569e7041e025"
+ dependencies:
+ "@types/express" "*"
+
+"@types/chai-subset@^1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.0.tgz#74ceccef3b2fc2da7391b713deb72fe9a7e5f782"
+ dependencies:
+ "@types/chai" "*"
+
+"@types/chai@*", "@types/chai@^3.4.34":
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.5.2.tgz#c11cd2817d3a401b7ba0f5a420f35c56139b1c1e"
+
+"@types/chalk@^0.4.28", "@types/chalk@^0.4.30", "@types/chalk@^0.4.31":
+ version "0.4.31"
+ resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9"
+
+"@types/clean-css@*":
+ version "3.4.30"
+ resolved "https://registry.yarnpkg.com/@types/clean-css/-/clean-css-3.4.30.tgz#0052c136f5248002428e3638b37de4a39818641d"
+
+"@types/clone@^0.1.29", "@types/clone@^0.1.30":
+ version "0.1.30"
+ resolved "https://registry.yarnpkg.com/@types/clone/-/clone-0.1.30.tgz#e7365648c1b42136a59c7d5040637b3b5c83b614"
+
+"@types/compression@^0.0.33":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/compression/-/compression-0.0.33.tgz#95dc733a2339aa846381d7f1377792d2553dc27d"
+ dependencies:
+ "@types/express" "*"
+
+"@types/content-type@^1.0.33":
+ version "1.0.33"
+ resolved "https://registry.yarnpkg.com/@types/content-type/-/content-type-1.0.33.tgz#171849e4652dcd589c3e4ab72b81f26e87915758"
+
+"@types/cssbeautify@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@types/cssbeautify/-/cssbeautify-0.3.1.tgz#8e0bee8f7decb952250da0caebe05e30591c17ef"
+
+"@types/del@^2.2.31":
+ version "2.2.32"
+ resolved "https://registry.yarnpkg.com/@types/del/-/del-2.2.32.tgz#4d54df0ed3017435e6b1995df0292957787fc6b2"
+ dependencies:
+ "@types/glob" "*"
+
+"@types/doctrine@^0.0.1":
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.1.tgz#b999f2d9f7b43cabe0a1a2f39bc203bc7dcada9d"
+
+"@types/escodegen@^0.0.2":
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.2.tgz#7cea41ab242e910eb10f65ae18aeba459d66b35f"
+
+"@types/estree@0.0.34", "@types/estree@^0.0.34":
+ version "0.0.34"
+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.34.tgz#aa7af69a3a91922171ee411b3c9d8f6beb4af321"
+
+"@types/express-serve-static-core@*":
+ version "4.0.45"
+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.0.45.tgz#71bb1f87d7187482d0d8851f5b294458e1c78667"
+ dependencies:
+ "@types/node" "*"
+
+"@types/express@*", "@types/express@^4.0.30", "@types/express@^4.0.33":
+ version "4.0.35"
+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.0.35.tgz#6267c7b60a51fac473467b3c4a02cd1e441805fe"
+ dependencies:
+ "@types/express-serve-static-core" "*"
+ "@types/serve-static" "*"
+
+"@types/fast-levenshtein@0.0.1":
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/@types/fast-levenshtein/-/fast-levenshtein-0.0.1.tgz#3a3615cf173645c8fca58d051e4e32824e4bd286"
+
+"@types/findup-sync@^0.3.29":
+ version "0.3.29"
+ resolved "https://registry.yarnpkg.com/@types/findup-sync/-/findup-sync-0.3.29.tgz#ec0c80597e5ed157282207e762ca7254cad57632"
+ dependencies:
+ "@types/minimatch" "*"
+
+"@types/form-data@*":
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8"
+ dependencies:
+ "@types/node" "*"
+
+"@types/freeport@^1.0.19":
+ version "1.0.21"
+ resolved "https://registry.yarnpkg.com/@types/freeport/-/freeport-1.0.21.tgz#73f6543ed67d3ca3fff97b985591598b7092066f"
+
+"@types/glob-stream@*":
+ version "3.1.30"
+ resolved "https://registry.yarnpkg.com/@types/glob-stream/-/glob-stream-3.1.30.tgz#b853990b40a4cfe6a80ec0d2fadf68d8060f78b1"
+ dependencies:
+ "@types/glob" "*"
+ "@types/node" "*"
+
+"@types/glob@*", "@types/glob@^5.0.30":
+ version "5.0.30"
+ resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.30.tgz#1026409c5625a8689074602808d082b2867b8a51"
+ dependencies:
+ "@types/minimatch" "*"
+ "@types/node" "*"
+
+"@types/grunt@^0.4.20":
+ version "0.4.21"
+ resolved "https://registry.yarnpkg.com/@types/grunt/-/grunt-0.4.21.tgz#8e002fc3b5d6b4d0ba0adc24cf77e988c854750e"
+ dependencies:
+ "@types/node" "*"
+
+"@types/gulp-if@0.0.30":
+ version "0.0.30"
+ resolved "https://registry.yarnpkg.com/@types/gulp-if/-/gulp-if-0.0.30.tgz#21a564af1aabc80dff2d195fa66cd3f8864aec21"
+ dependencies:
+ "@types/node" "*"
+ "@types/vinyl" "*"
+
+"@types/gulp@^3.8.32":
+ version "3.8.32"
+ resolved "https://registry.yarnpkg.com/@types/gulp/-/gulp-3.8.32.tgz#83c59c681cc233d1ec7f82d269555566fa133156"
+ dependencies:
+ "@types/node" "*"
+ "@types/orchestrator" "*"
+ "@types/vinyl" "*"
+
+"@types/html-minifier@^1.1.30":
+ version "1.1.30"
+ resolved "https://registry.yarnpkg.com/@types/html-minifier/-/html-minifier-1.1.30.tgz#3b3817c27df23922f7b5aa87eff45b3ab934aec9"
+ dependencies:
+ "@types/clean-css" "*"
+ "@types/relateurl" "*"
+ "@types/uglify-js" "*"
+
+"@types/inquirer@*", "@types/inquirer@0.0.32":
+ version "0.0.32"
+ resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-0.0.32.tgz#a4a08e83741c500a7c3c8e7776014f7f8a65870d"
+ dependencies:
+ "@types/rx" "*"
+ "@types/through" "*"
+
+"@types/launchpad@^0.6.0":
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/@types/launchpad/-/launchpad-0.6.0.tgz#37296109b7f277f6e6c5fd7e0c0706bc918fbb51"
+
+"@types/lodash@^4.14.38":
+ version "4.14.64"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.64.tgz#979cf3a3d4a368670840bf9b3e448dc33ffe84ee"
+
+"@types/merge-stream@^1.0.28":
+ version "1.0.28"
+ resolved "https://registry.yarnpkg.com/@types/merge-stream/-/merge-stream-1.0.28.tgz#7cabfaaab6c64d51e3410d95e17dd9061e413532"
+ dependencies:
+ "@types/node" "*"
+
+"@types/mime@*", "@types/mime@0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
+
+"@types/minimatch@*", "@types/minimatch@^2.0.29":
+ version "2.0.29"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
+
+"@types/mocha@^2.2.32":
+ version "2.2.41"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.41.tgz#e27cf0817153eb9f2713b2d3f6c68f1e1c3ca608"
+
+"@types/multer@0.0.32":
+ version "0.0.32"
+ resolved "https://registry.yarnpkg.com/@types/multer/-/multer-0.0.32.tgz#f89c751227dc20b7c933c309a3e7467c499fcdec"
+ dependencies:
+ "@types/express" "*"
+
+"@types/mz@0.0.29":
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/@types/mz/-/mz-0.0.29.tgz#bc24728c649973f1c7851e9033f9ce525668c27b"
+ dependencies:
+ "@types/bluebird" "*"
+ "@types/node" "*"
+
+"@types/mz@0.0.31", "@types/mz@^0.0.31":
+ version "0.0.31"
+ resolved "https://registry.yarnpkg.com/@types/mz/-/mz-0.0.31.tgz#a4d80c082fefe71e40a7c0f07d1e6555bbbc7b52"
+ dependencies:
+ "@types/node" "*"
+
+"@types/node@*", "@types/node@6.0.*", "@types/node@^6", "@types/node@^6.0.0", "@types/node@^6.0.31", "@types/node@^6.0.41", "@types/node@^6.0.46", "@types/node@^6.0.73":
+ version "6.0.73"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.73.tgz#85dc4bb6f125377c75ddd2519a1eeb63f0a4ed70"
+
+"@types/node@4.0.30", "@types/node@^4.0.30":
+ version "4.0.30"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-4.0.30.tgz#553f490ed3030311620f88003e7abfc0edcb301e"
+
+"@types/node@^4.2.3":
+ version "4.2.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-4.2.8.tgz#26fd8fbc5b5ec7822614d950e237956ee92b88cd"
+
+"@types/nomnom@0.0.28":
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/@types/nomnom/-/nomnom-0.0.28.tgz#2d8968528ad7a9738dd0a6a3dfe5cdfdb8ac7974"
+
+"@types/opn@^3.0.28":
+ version "3.0.28"
+ resolved "https://registry.yarnpkg.com/@types/opn/-/opn-3.0.28.tgz#097d0d1c9b5749573a5d96df132387bb6d02118a"
+ dependencies:
+ "@types/node" "*"
+
+"@types/orchestrator@*":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@types/orchestrator/-/orchestrator-0.3.0.tgz#bf84a1699c9330d4fe89cd81263e8fc09fb32978"
+ dependencies:
+ "@types/node" "*"
+ "@types/q" "^0"
+
+"@types/parse5@^0.0.31":
+ version "0.0.31"
+ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-0.0.31.tgz#e827a493a443b156e1b582a2e4c3bdc0040f2ee7"
+ dependencies:
+ "@types/node" "6.0.*"
+
+"@types/parse5@^2.2.32", "@types/parse5@^2.2.34":
+ version "2.2.34"
+ resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-2.2.34.tgz#e3870a10e82735a720f62d71dcd183ba78ef3a9d"
+ dependencies:
+ "@types/node" "*"
+
+"@types/pem@^1.8.1":
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/@types/pem/-/pem-1.9.2.tgz#cd0b195d161dffbcb0aa88fa9fd94b24dd2af10b"
+
+"@types/q@^0":
+ version "0.0.34"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.34.tgz#e5d3a54e7a56309d904cdf1dc34f61ac595fae2e"
+
+"@types/relateurl@*":
+ version "0.2.28"
+ resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.28.tgz#6bda7db8653fa62643f5ee69e9f69c11a392e3a6"
+
+"@types/request@0.0.39":
+ version "0.0.39"
+ resolved "https://registry.yarnpkg.com/@types/request/-/request-0.0.39.tgz#168b96cf4253c5d54d403f746f82ee7aed47ce2c"
+ dependencies:
+ "@types/form-data" "*"
+ "@types/node" "*"
+
+"@types/resolve@0.0.4":
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.4.tgz#9b586d65a947dea88c4bc24da0b905fe9520a0d5"
+ dependencies:
+ "@types/node" "*"
+
+"@types/rx-core-binding@*":
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/@types/rx-core-binding/-/rx-core-binding-4.0.3.tgz#74261d1df5ab9eafa697ed9e8243999787cc87ae"
+ dependencies:
+ "@types/rx-core" "*"
+
+"@types/rx-core@*":
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/@types/rx-core/-/rx-core-4.0.3.tgz#0b3354b1238cedbe2b74f6326f139dbc7a591d60"
+
+"@types/rx-lite-aggregates@*":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-aggregates/-/rx-lite-aggregates-4.0.2.tgz#5876da596bc9501f614a8a44998cf3f6cb74f433"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-async@*":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-async/-/rx-lite-async-4.0.1.tgz#fbc85d52ef380b95c9c609f55c5b96500eeb16aa"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-backpressure@*":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-backpressure/-/rx-lite-backpressure-4.0.2.tgz#2a1e69a7e884527c5c207a36305a4a360964b8e2"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-coincidence@*":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-coincidence/-/rx-lite-coincidence-4.0.2.tgz#05e535c39fa38d70c926c94a6196697024c8b16b"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-experimental@*":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-experimental/-/rx-lite-experimental-4.0.1.tgz#c532f5cbdf3f2c15da16ded8930d1b2984023cbd"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-joinpatterns@*":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-joinpatterns/-/rx-lite-joinpatterns-4.0.1.tgz#f70fe370518a8432f29158cc92ffb56b4e4afc3e"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-testing@*":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-testing/-/rx-lite-testing-4.0.1.tgz#21b19d11f4dfd6ffef5a9d1648e9c8879bfe21e9"
+ dependencies:
+ "@types/rx-lite-virtualtime" "*"
+
+"@types/rx-lite-time@*":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-time/-/rx-lite-time-4.0.2.tgz#787eacd686c49ca941e72ebbe8b91890240882f9"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite-virtualtime@*":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite-virtualtime/-/rx-lite-virtualtime-4.0.2.tgz#950add6228aa17c033ff98f7e67d082596cd7c33"
+ dependencies:
+ "@types/rx-lite" "*"
+
+"@types/rx-lite@*":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@types/rx-lite/-/rx-lite-4.0.4.tgz#710ebf89d0a2d596c21047d91b1242bcef51c30b"
+ dependencies:
+ "@types/rx-core" "*"
+ "@types/rx-core-binding" "*"
+
+"@types/rx@*":
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/@types/rx/-/rx-4.1.1.tgz#598fc94a56baed975f194574e0f572fd8e627a48"
+ dependencies:
+ "@types/rx-core" "*"
+ "@types/rx-core-binding" "*"
+ "@types/rx-lite" "*"
+ "@types/rx-lite-aggregates" "*"
+ "@types/rx-lite-async" "*"
+ "@types/rx-lite-backpressure" "*"
+ "@types/rx-lite-coincidence" "*"
+ "@types/rx-lite-experimental" "*"
+ "@types/rx-lite-joinpatterns" "*"
+ "@types/rx-lite-testing" "*"
+ "@types/rx-lite-time" "*"
+ "@types/rx-lite-virtualtime" "*"
+
+"@types/semver@^5.3.30":
+ version "5.3.31"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.3.31.tgz#b999d7d935f43f5207b01b00d3de20852f4ca75f"
+
+"@types/serve-static@*", "@types/serve-static@^1.7.31":
+ version "1.7.31"
+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.7.31.tgz#15456de8d98d6b4cff31be6c6af7492ae63f521a"
+ dependencies:
+ "@types/express-serve-static-core" "*"
+ "@types/mime" "*"
+
+"@types/sinon-chai@^2.7.27":
+ version "2.7.27"
+ resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-2.7.27.tgz#eb7729058ddf253a6979e559bb2b491084969aa1"
+ dependencies:
+ "@types/chai" "*"
+ "@types/sinon" "*"
+
+"@types/sinon@*", "@types/sinon@^1.16.31":
+ version "1.16.36"
+ resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-1.16.36.tgz#74bb6ed7928597c1b3fb1b009005e94dc6eae357"
+
+"@types/socket.io@^1.4.27":
+ version "1.4.29"
+ resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-1.4.29.tgz#86a6b3a9ab78cf9a900ceef85b9b68b6bea86712"
+ dependencies:
+ "@types/node" "*"
+
+"@types/source-map@*":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@types/source-map/-/source-map-0.5.0.tgz#dd34bbd8e32fe4e74f2e3d8ac07f8aa5b45a47ac"
+
+"@types/spdy@^3.4.1":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/@types/spdy/-/spdy-3.4.1.tgz#5e87b2c2be841746c283b2b4e1a32c786114e84c"
+
+"@types/temp@^0.8.28":
+ version "0.8.29"
+ resolved "https://registry.yarnpkg.com/@types/temp/-/temp-0.8.29.tgz#c3cdc113e3c138f90e5e970d51e41b0b7f62678d"
+ dependencies:
+ "@types/node" "*"
+
+"@types/through@*":
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.28.tgz#1effa9a6d00fb48572b4cc9f44df25b0100db7fc"
+ dependencies:
+ "@types/node" "*"
+
+"@types/ua-parser-js@^0.7.30":
+ version "0.7.30"
+ resolved "https://registry.yarnpkg.com/@types/ua-parser-js/-/ua-parser-js-0.7.30.tgz#9096e5552ff02f8d018a17efac69b4dc75083f8b"
+
+"@types/uglify-js@*":
+ version "2.6.28"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-2.6.28.tgz#1499b48ca3a44132250b318cdde25b8f45f0c616"
+ dependencies:
+ "@types/source-map" "*"
+
+"@types/update-notifier@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/update-notifier/-/update-notifier-1.0.1.tgz#47e8f007c6b5bcafbe427332e3b6b433cdc18ddc"
+
+"@types/vinyl-fs@0.0.28":
+ version "0.0.28"
+ resolved "https://registry.yarnpkg.com/@types/vinyl-fs/-/vinyl-fs-0.0.28.tgz#4663017bc802c6570eae4f3409fd5cabf97cbfde"
+ dependencies:
+ "@types/glob-stream" "*"
+ "@types/node" "*"
+ "@types/vinyl" "*"
+
+"@types/vinyl@*", "@types/vinyl@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.0.tgz#fd213bf7f4136dde21fe1895500b12c186f8c268"
+ dependencies:
+ "@types/node" "*"
+
+"@types/which@^1.0.27":
+ version "1.0.28"
+ resolved "https://registry.yarnpkg.com/@types/which/-/which-1.0.28.tgz#016e387629b8817bed653fe32eab5d11279c8df6"
+
+"@types/winston@^2.2.0":
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/@types/winston/-/winston-2.3.2.tgz#c162547cb47c0b8a450e681bb9fa7041cd80edfa"
+ dependencies:
+ "@types/node" "*"
+
+"@types/yeoman-generator@^1.0.0":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@types/yeoman-generator/-/yeoman-generator-1.0.2.tgz#132de401554ca4a16e07e83750565cafe0982362"
+ dependencies:
+ "@types/inquirer" "*"
+
+abab@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
+
+abbrev@1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
+
+accepts@1.3.3, accepts@~1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
+ dependencies:
+ mime-types "~2.1.11"
+ negotiator "0.6.1"
+
+accessibility-developer-tools@^2.10.0:
+ version "2.12.0"
+ resolved "https://registry.yarnpkg.com/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz#3da0cce9d6ec6373964b84f35db7cfc3df7ab514"
+
+acorn-globals@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
+ dependencies:
+ acorn "^4.0.4"
+
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.4:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+
+acorn@^4.0.1, acorn@^4.0.4:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+
+acorn@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
+
+adm-zip@~0.4.3:
+ version "0.4.7"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1"
+
+after@0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
+
+agent-base@2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
+ dependencies:
+ extend "~3.0.0"
+ semver "~5.0.1"
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.7.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+align-text@^0.1.1, align-text@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ dependencies:
+ kind-of "^3.0.2"
+ longest "^1.0.1"
+ repeat-string "^1.5.2"
+
+amdefine@>=0.0.4:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+
+ansi-align@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba"
+ dependencies:
+ string-width "^1.0.1"
+
+ansi-align@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
+ dependencies:
+ string-width "^2.0.0"
+
+ansi-escape-sequences@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz#1c18394b6af9b76ff9a63509fa497669fd2ce53e"
+ dependencies:
+ array-back "^1.0.3"
+
+ansi-escapes@^1.1.0, ansi-escapes@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
+ansi-styles@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1"
+ dependencies:
+ color-convert "^1.0.0"
+
+ansi-styles@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
+
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+
+anymatch@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
+ dependencies:
+ arrify "^1.0.0"
+ micromatch "^2.1.5"
+
+append-field@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/append-field/-/append-field-0.1.0.tgz#6ddc58fa083c7bc545d3c5995b2830cc2366d44a"
+
+append-transform@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+ dependencies:
+ default-require-extensions "^1.0.0"
+
+archiver-utils@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174"
+ dependencies:
+ glob "^7.0.0"
+ graceful-fs "^4.1.0"
+ lazystream "^1.0.0"
+ lodash "^4.8.0"
+ normalize-path "^2.0.0"
+ readable-stream "^2.0.0"
+
+archiver@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/archiver/-/archiver-1.3.0.tgz#4f2194d6d8f99df3f531e6881f14f15d55faaf22"
+ dependencies:
+ archiver-utils "^1.3.0"
+ async "^2.0.0"
+ buffer-crc32 "^0.2.1"
+ glob "^7.0.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"
+ tar-stream "^1.5.0"
+ walkdir "^0.0.11"
+ zip-stream "^1.1.0"
+
+archy@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
+
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
+arr-diff@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ dependencies:
+ arr-flatten "^1.0.1"
+
+arr-flatten@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1"
+
+array-back@^1.0.3, array-back@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b"
+ dependencies:
+ typical "^2.6.0"
+
+array-differ@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
+
+array-equal@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+
+array-find-index@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+
+array-flatten@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1, array-uniq@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array-unique@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+
+arraybuffer.slice@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca"
+
+arrify@^1.0.0, arrify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
+asap@~2.0.3:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f"
+
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
+assertion-error@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c"
+
+async@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.2.1.tgz#a4816a17cd5ff516dfa2c7698a453369b9790de0"
+
+async@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.0.1.tgz#b709cc0280a9c36f09f4536be823c838a9049e25"
+ dependencies:
+ lodash "^4.8.0"
+
+async@^1.4.0, async@^1.5.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+async@^2.0.0, async@^2.0.1, async@^2.1.2, async@^2.1.4:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.4.1.tgz#62a56b279c98a11d0987096a01cc3eeb8eb7bbd7"
+ dependencies:
+ lodash "^4.14.0"
+
+async@~0.2.9:
+ version "0.2.10"
+ resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
+
+async@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+
+babel-code-frame@^6.16.0, babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+babel-core@6, babel-core@^6.0.0, babel-core@^6.18.2, babel-core@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-generator "^6.24.1"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+ babylon "^6.11.0"
+ convert-source-map "^1.1.0"
+ debug "^2.1.1"
+ json5 "^0.5.0"
+ lodash "^4.2.0"
+ minimatch "^3.0.2"
+ path-is-absolute "^1.0.0"
+ private "^0.1.6"
+ slash "^1.0.0"
+ source-map "^0.5.0"
+
+babel-generator@^6.18.0, babel-generator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497"
+ dependencies:
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+ detect-indent "^4.0.0"
+ jsesc "^1.3.0"
+ lodash "^4.2.0"
+ source-map "^0.5.0"
+ trim-right "^1.0.1"
+
+babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+ dependencies:
+ babel-helper-explode-assignable-expression "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-call-delegate@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+ dependencies:
+ babel-helper-hoist-variables "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-define-map@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+ lodash "^4.2.0"
+
+babel-helper-evaluate-path@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.0.3.tgz#1d103ac9d4a59e5d431842212f151785f7ac547b"
+
+babel-helper-explode-assignable-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-flip-expressions@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.0.2.tgz#7bab2cf61162bc92703e9b298ef512bcf77d6787"
+
+babel-helper-function-name@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+ dependencies:
+ babel-helper-get-function-arity "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-get-function-arity@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-hoist-variables@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-is-nodes-equiv@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684"
+
+babel-helper-is-void-0@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.0.1.tgz#ed74553b883e68226ae45f989a99b02c190f105a"
+
+babel-helper-mark-eval-scopes@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.1.1.tgz#4554345edf9f2549427bd2098e530253f8af2992"
+
+babel-helper-optimise-call-expression@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-helper-regex@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+ lodash "^4.2.0"
+
+babel-helper-remap-async-to-generator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-remove-or-void@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.1.1.tgz#9d7e1856dc6fafcb41b283a416730dc1844f66d7"
+
+babel-helper-replace-supers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+ dependencies:
+ babel-helper-optimise-call-expression "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-helper-to-multiple-sequence-expressions@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.0.3.tgz#c789a0faccd2669c51234be2cea7a3e5a0573c25"
+
+babel-helpers@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-jest@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-plugin-istanbul "^4.0.0"
+ babel-preset-jest "^19.0.0"
+
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-check-es2015-constants@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-external-helpers@^6.22.0, babel-plugin-external-helpers@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-istanbul@^4.0.0:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587"
+ dependencies:
+ find-up "^2.1.0"
+ istanbul-lib-instrument "^1.7.2"
+ test-exclude "^4.1.1"
+
+babel-plugin-jest-hoist@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea"
+
+babel-plugin-minify-constant-folding@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.0.3.tgz#a511e839562489811987a7a503c43c312c40138a"
+ dependencies:
+ babel-helper-evaluate-path "^0.0.3"
+
+babel-plugin-minify-dead-code-elimination@^0.1.2:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.1.6.tgz#c5471346fb0a1046863fd765c784cba97d7b22e3"
+ dependencies:
+ babel-helper-mark-eval-scopes "^0.1.1"
+ babel-helper-remove-or-void "^0.1.1"
+ lodash.some "^4.6.0"
+
+babel-plugin-minify-flip-comparisons@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.0.2.tgz#7d0953aa5876ede6118966bda9edecc63bf346ab"
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-minify-guarded-expressions@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.0.4.tgz#957104a760e6a7ffd967005a7a11621bb42fd11c"
+ dependencies:
+ babel-helper-flip-expressions "^0.0.2"
+
+babel-plugin-minify-infinity@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.0.3.tgz#4cc99b61d12b434ce80ad675103335c589cba9a1"
+
+babel-plugin-minify-mangle-names@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.0.6.tgz#7311e82292d5add93ca80c4ecfbde9e8a9730a43"
+
+babel-plugin-minify-numeric-literals@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.0.1.tgz#9597e6c31154d7daf3744d0bd417c144b275bd53"
+
+babel-plugin-minify-replace@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.0.1.tgz#5d5aea7cb9899245248d1ee9ce7a2fe556a8facc"
+
+babel-plugin-minify-simplify@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.0.6.tgz#1d50899b29c3c4503eaefb98365cc5f7a84aedfe"
+ dependencies:
+ babel-helper-flip-expressions "^0.0.2"
+ babel-helper-is-nodes-equiv "^0.0.1"
+ babel-helper-to-multiple-sequence-expressions "^0.0.3"
+
+babel-plugin-minify-type-constructors@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.0.3.tgz#ab59c1ad835b6b6e8e932b875d4df4dc393d9d26"
+ dependencies:
+ babel-helper-is-void-0 "^0.0.1"
+
+babel-plugin-syntax-async-functions@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+
+babel-plugin-syntax-exponentiation-operator@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+
+babel-plugin-syntax-object-rest-spread@^6.8.0:
+ version "6.13.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+
+babel-plugin-syntax-trailing-function-commas@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+
+babel-plugin-transform-async-to-generator@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+ dependencies:
+ babel-helper-remap-async-to-generator "^6.24.1"
+ babel-plugin-syntax-async-functions "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-arrow-functions@^6.22.0, babel-plugin-transform-es2015-arrow-functions@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoped-functions@^6.22.0, babel-plugin-transform-es2015-block-scoped-functions@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-block-scoping@^6.18.0, babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+ lodash "^4.2.0"
+
+babel-plugin-transform-es2015-classes@^6.18.0, babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+ dependencies:
+ babel-helper-define-map "^6.24.1"
+ babel-helper-function-name "^6.24.1"
+ babel-helper-optimise-call-expression "^6.24.1"
+ babel-helper-replace-supers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1, babel-plugin-transform-es2015-computed-properties@^6.8.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-destructuring@^6.19.0, babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1, babel-plugin-transform-es2015-duplicate-keys@^6.8.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-for-of@^6.18.0, babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1, babel-plugin-transform-es2015-function-name@^6.9.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+ dependencies:
+ babel-helper-function-name "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-literals@^6.22.0, babel-plugin-transform-es2015-literals@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+ dependencies:
+ babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe"
+ dependencies:
+ babel-plugin-transform-strict-mode "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+ dependencies:
+ babel-helper-hoist-variables "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+ dependencies:
+ babel-plugin-transform-es2015-modules-amd "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+
+babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1, babel-plugin-transform-es2015-object-super@^6.8.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+ dependencies:
+ babel-helper-replace-supers "^6.24.1"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-parameters@^6.18.0, babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+ dependencies:
+ babel-helper-call-delegate "^6.24.1"
+ babel-helper-get-function-arity "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-template "^6.24.1"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-shorthand-properties@^6.18.0, babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1, babel-plugin-transform-es2015-sticky-regex@^6.8.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+ dependencies:
+ babel-helper-regex "^6.24.1"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-es2015-template-literals@^6.22.0, babel-plugin-transform-es2015-template-literals@^6.8.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-typeof-symbol@^6.18.0, babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-es2015-unicode-regex@^6.11.0, babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+ dependencies:
+ babel-helper-regex "^6.24.1"
+ babel-runtime "^6.22.0"
+ regexpu-core "^2.0.0"
+
+babel-plugin-transform-exponentiation-operator@^6.22.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+ dependencies:
+ babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
+ babel-plugin-syntax-exponentiation-operator "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-inline-consecutive-adds@^0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.0.2.tgz#a58fcecfc09c08fbf9373a5a3e70746c03d01fc1"
+
+babel-plugin-transform-member-expression-literals@^6.8.1:
+ version "6.8.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.3.tgz#4eefa7fa1d3a86d05ac220bc3fdf96d5ed1835d6"
+
+babel-plugin-transform-merge-sibling-variables@^6.8.1:
+ version "6.8.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.4.tgz#813a433f2d8c6989ee3a9c5e0cb46d3752d367a9"
+
+babel-plugin-transform-minify-booleans@^6.8.0:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.2.tgz#8451579f706e702c1e1ab2756de5c8ea369cf07c"
+
+babel-plugin-transform-object-assign@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz#f99d2f66f1a0b0d498e346c5359684740caa20ba"
+ dependencies:
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-object-rest-spread@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.23.0.tgz#875d6bc9be761c58a2ae3feee5dc4895d8c7f921"
+ dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.8.0"
+ babel-runtime "^6.22.0"
+
+babel-plugin-transform-property-literals@^6.8.1:
+ version "6.8.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.3.tgz#0dcd2ecf0486c54c23f84817f911c4ab0e8d4b99"
+
+babel-plugin-transform-regenerator@^6.16.1, babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418"
+ dependencies:
+ regenerator-transform "0.9.11"
+
+babel-plugin-transform-regexp-constructors@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.0.5.tgz#74d95e0c567e6fc1d9c699a084894d40de8e581d"
+
+babel-plugin-transform-remove-console@^6.8.0:
+ version "6.8.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.3.tgz#313441720324ad20af0fb009fa59e8102364626b"
+
+babel-plugin-transform-remove-debugger@^6.8.0:
+ version "6.8.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.3.tgz#5064f2d843b77ce660ebaa7760be30eb925bb93f"
+
+babel-plugin-transform-remove-undefined@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.0.4.tgz#cc75be04b9bbd7bb2005272cc160b4d08692d77c"
+
+babel-plugin-transform-simplify-comparison-operators@^6.8.1:
+ version "6.8.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.3.tgz#2e47e11e5f8dc33e97476e0263151d5fd57e1c4c"
+
+babel-plugin-transform-strict-mode@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+
+babel-plugin-transform-undefined-to-void@^6.8.0:
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.2.tgz#fe2b1d294eb05e87524eb93724dea6e2c3d66fa1"
+
+babel-preset-babili@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/babel-preset-babili/-/babel-preset-babili-0.0.10.tgz#59118924b77b898eecd8f75a5b97d694719443ff"
+ dependencies:
+ babel-plugin-minify-constant-folding "^0.0.3"
+ babel-plugin-minify-dead-code-elimination "^0.1.2"
+ babel-plugin-minify-flip-comparisons "^0.0.2"
+ babel-plugin-minify-guarded-expressions "^0.0.4"
+ babel-plugin-minify-infinity "^0.0.3"
+ babel-plugin-minify-mangle-names "^0.0.6"
+ babel-plugin-minify-numeric-literals "^0.0.1"
+ babel-plugin-minify-replace "^0.0.1"
+ babel-plugin-minify-simplify "^0.0.6"
+ babel-plugin-minify-type-constructors "^0.0.3"
+ babel-plugin-transform-inline-consecutive-adds "^0.0.2"
+ babel-plugin-transform-member-expression-literals "^6.8.1"
+ babel-plugin-transform-merge-sibling-variables "^6.8.1"
+ babel-plugin-transform-minify-booleans "^6.8.0"
+ babel-plugin-transform-property-literals "^6.8.1"
+ babel-plugin-transform-regexp-constructors "^0.0.5"
+ babel-plugin-transform-remove-console "^6.8.0"
+ babel-plugin-transform-remove-debugger "^6.8.0"
+ babel-plugin-transform-remove-undefined "^0.0.4"
+ babel-plugin-transform-simplify-comparison-operators "^6.8.1"
+ babel-plugin-transform-undefined-to-void "^6.8.0"
+ lodash.isplainobject "^4.0.6"
+
+babel-preset-env@^1.2.2:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.5.1.tgz#d2eca6af179edf27cdc305a84820f601b456dd0b"
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-syntax-trailing-function-commas "^6.22.0"
+ babel-plugin-transform-async-to-generator "^6.22.0"
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoping "^6.23.0"
+ babel-plugin-transform-es2015-classes "^6.23.0"
+ babel-plugin-transform-es2015-computed-properties "^6.22.0"
+ babel-plugin-transform-es2015-destructuring "^6.23.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
+ babel-plugin-transform-es2015-for-of "^6.23.0"
+ babel-plugin-transform-es2015-function-name "^6.22.0"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.22.0"
+ babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
+ babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
+ babel-plugin-transform-es2015-modules-umd "^6.23.0"
+ babel-plugin-transform-es2015-object-super "^6.22.0"
+ babel-plugin-transform-es2015-parameters "^6.23.0"
+ babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.22.0"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.22.0"
+ babel-plugin-transform-exponentiation-operator "^6.22.0"
+ babel-plugin-transform-regenerator "^6.22.0"
+ browserslist "^2.1.2"
+ invariant "^2.2.2"
+ semver "^5.3.0"
+
+babel-preset-es2015@^6.18.0:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
+ dependencies:
+ babel-plugin-check-es2015-constants "^6.22.0"
+ babel-plugin-transform-es2015-arrow-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
+ babel-plugin-transform-es2015-block-scoping "^6.24.1"
+ babel-plugin-transform-es2015-classes "^6.24.1"
+ babel-plugin-transform-es2015-computed-properties "^6.24.1"
+ babel-plugin-transform-es2015-destructuring "^6.22.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
+ babel-plugin-transform-es2015-for-of "^6.22.0"
+ babel-plugin-transform-es2015-function-name "^6.24.1"
+ babel-plugin-transform-es2015-literals "^6.22.0"
+ babel-plugin-transform-es2015-modules-amd "^6.24.1"
+ babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
+ babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
+ babel-plugin-transform-es2015-modules-umd "^6.24.1"
+ babel-plugin-transform-es2015-object-super "^6.24.1"
+ babel-plugin-transform-es2015-parameters "^6.24.1"
+ babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
+ babel-plugin-transform-es2015-spread "^6.22.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.24.1"
+ babel-plugin-transform-es2015-template-literals "^6.22.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.24.1"
+ babel-plugin-transform-regenerator "^6.24.1"
+
+babel-preset-jest@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396"
+ dependencies:
+ babel-plugin-jest-hoist "^19.0.0"
+
+babel-register@^6.24.0, babel-register@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f"
+ dependencies:
+ babel-core "^6.24.1"
+ babel-runtime "^6.22.0"
+ core-js "^2.4.0"
+ home-or-tmp "^2.0.0"
+ lodash "^4.2.0"
+ mkdirp "^0.5.1"
+ source-map-support "^0.4.2"
+
+babel-runtime@^6.18.0, babel-runtime@^6.22.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
+babel-template@^6.16.0, babel-template@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333"
+ dependencies:
+ babel-runtime "^6.22.0"
+ babel-traverse "^6.24.1"
+ babel-types "^6.24.1"
+ babylon "^6.11.0"
+ lodash "^4.2.0"
+
+babel-traverse@^6.18.0, babel-traverse@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+ babylon "^6.15.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
+babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975"
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
+babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0:
+ version "6.17.2"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c"
+
+backo2@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
+base64-arraybuffer@0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
+
+base64-js@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
+
+base64id@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
+
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
+beeper@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
+
+better-assert@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
+ dependencies:
+ callsite "1.0.0"
+
+"binaryextensions@1 || 2":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz#1e637488b35b58bda5f4774bf96a5212a8c90755"
+
+bl@^1.0.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
+ dependencies:
+ readable-stream "^2.0.5"
+
+blob@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
+
+body-parser@^1.14.2:
+ version "1.17.2"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.2.tgz#f8892abc8f9e627d42aedafbca66bf5ab99104ee"
+ dependencies:
+ bytes "2.4.0"
+ content-type "~1.0.2"
+ debug "2.6.7"
+ depd "~1.1.0"
+ http-errors "~1.6.1"
+ iconv-lite "0.4.15"
+ on-finished "~2.3.0"
+ qs "6.4.0"
+ raw-body "~2.2.0"
+ type-is "~1.6.15"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
+bower-json@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/bower-json/-/bower-json-0.8.1.tgz#96c14723241ae6466a9c52e16caa32623a883843"
+ dependencies:
+ deep-extend "^0.4.0"
+ ext-name "^3.0.0"
+ graceful-fs "^4.1.3"
+ intersect "^1.0.1"
+
+bower-logger@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/bower-logger/-/bower-logger-0.2.2.tgz#39be07e979b2fc8e03a94634205ed9422373d381"
+
+bower@1.8.0, bower@^1.5.2:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/bower/-/bower-1.8.0.tgz#55dbebef0ad9155382d9e9d3e497c1372345b44a"
+
+boxen@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6"
+ dependencies:
+ ansi-align "^1.1.0"
+ camelcase "^2.1.0"
+ chalk "^1.1.1"
+ cli-boxes "^1.0.0"
+ filled-array "^1.0.0"
+ object-assign "^4.0.1"
+ repeating "^2.0.0"
+ string-width "^1.0.1"
+ widest-line "^1.0.0"
+
+boxen@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102"
+ dependencies:
+ ansi-align "^2.0.0"
+ camelcase "^4.0.0"
+ chalk "^1.1.1"
+ cli-boxes "^1.0.0"
+ string-width "^2.0.0"
+ term-size "^0.1.0"
+ widest-line "^1.0.0"
+
+brace-expansion@^1.0.0, brace-expansion@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
+braces@^1.8.2:
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ dependencies:
+ expand-range "^1.8.1"
+ preserve "^0.2.0"
+ repeat-element "^1.1.2"
+
+browser-resolve@^1.11.0, browser-resolve@^1.11.2:
+ version "1.11.2"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ dependencies:
+ resolve "1.1.7"
+
+browser-stdout@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
+
+browserify-zlib@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
+ dependencies:
+ pako "~0.2.0"
+
+browserslist@^2.1.2:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053"
+ dependencies:
+ caniuse-lite "^1.0.30000670"
+ electron-to-chromium "^1.3.11"
+
+browserstack@^1.2.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.0.tgz#b565425ad62ed72c1082a1eb979d5313c7d4754f"
+ dependencies:
+ https-proxy-agent "1.0.0"
+
+bser@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
+ dependencies:
+ node-int64 "^0.4.0"
+
+bser@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
+ dependencies:
+ node-int64 "^0.4.0"
+
+buf-compare@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a"
+
+buffer-crc32@^0.2.1, buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+
+buffer-shims@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+
+builtin-modules@^1.0.0, builtin-modules@^1.1.0, builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
+busboy@^0.2.11:
+ version "0.2.14"
+ resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453"
+ dependencies:
+ dicer "0.2.5"
+ readable-stream "1.1.x"
+
+bytes@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070"
+
+bytes@2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
+
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
+callsite@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
+callsites@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+
+camel-case@3.0.x:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.1.1"
+
+camelcase-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ dependencies:
+ camelcase "^2.0.0"
+ map-obj "^1.0.0"
+
+camelcase@^1.0.2:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+
+camelcase@^2.0.0, camelcase@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+
+camelcase@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+
+camelcase@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+
+caniuse-lite@^1.0.30000670:
+ version "1.0.30000676"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000676.tgz#1e962123f48073f0c51c4ea0651dd64d25786498"
+
+capture-stack-trace@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+
+caseless@~0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+
+center-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ dependencies:
+ align-text "^0.1.3"
+ lazy-cache "^1.0.3"
+
+chai@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
+ dependencies:
+ assertion-error "^1.0.1"
+ deep-eql "^0.1.3"
+ type-detect "^1.0.0"
+
+chalk@*, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+chalk@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
+ dependencies:
+ ansi-styles "~1.0.0"
+ has-color "~0.1.0"
+ strip-ansi "~0.1.0"
+
+chownr@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
+
+ci-info@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
+
+circular-json@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
+
+class-extend@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/class-extend/-/class-extend-0.1.2.tgz#8057a82b00f53f82a5d62c50ef8cffdec6fabc34"
+ dependencies:
+ object-assign "^2.0.0"
+
+clean-css@4.1.x:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.3.tgz#07cfe8980edb20d455ddc23aadcf1e04c6e509ce"
+ dependencies:
+ source-map "0.5.x"
+
+cleankill@^1.0.0, cleankill@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cleankill/-/cleankill-1.0.3.tgz#e7419bd24abc07f2d182d3a09a935c1bcdede6bd"
+
+cli-boxes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-table@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
+ dependencies:
+ colors "1.0.3"
+
+cli-width@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+
+cliui@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ dependencies:
+ center-align "^0.1.1"
+ right-align "^0.1.1"
+ wordwrap "0.0.2"
+
+cliui@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+ wrap-ansi "^2.0.0"
+
+clone-buffer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
+
+clone-stats@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
+
+clone-stats@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
+
+clone@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
+
+clone@^1.0.0, clone@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+
+clone@^2.0.0, clone@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
+
+cloneable-readable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117"
+ dependencies:
+ inherits "^2.0.1"
+ process-nextick-args "^1.0.6"
+ through2 "^2.0.1"
+
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+color-convert@^1.0.0:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
+ dependencies:
+ color-name "^1.1.1"
+
+color-name@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d"
+
+colors@1.0.3, colors@1.0.x:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+command-line-args@^3.0.0, command-line-args@^3.0.1:
+ version "3.0.5"
+ resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-3.0.5.tgz#5bd4ad45e7983e5c1344918e40280ee2693c5ac0"
+ dependencies:
+ array-back "^1.0.4"
+ feature-detect-es6 "^1.3.1"
+ find-replace "^1.0.2"
+ typical "^2.6.0"
+
+command-line-commands@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/command-line-commands/-/command-line-commands-1.0.4.tgz#034f9b167b5188afbdcf6b2efbb150fc8442c32b"
+ dependencies:
+ array-back "^1.0.3"
+ feature-detect-es6 "^1.3.1"
+
+command-line-usage@^3.0.1, command-line-usage@^3.0.3, command-line-usage@^3.0.5:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-3.0.8.tgz#b6a20978c1b383477f5c11a529428b880bfe0f4d"
+ dependencies:
+ ansi-escape-sequences "^3.0.0"
+ array-back "^1.0.3"
+ feature-detect-es6 "^1.3.1"
+ table-layout "^0.3.0"
+ typical "^2.6.0"
+
+commander@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d"
+
+commander@2.9.0, commander@2.9.x, commander@^2.9.0, commander@~2.9.0:
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
+ dependencies:
+ graceful-readlink ">= 1.0.0"
+
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+
+component-bind@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
+
+component-emitter@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
+
+component-emitter@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+
+component-inherit@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
+
+compress-commons@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.0.tgz#58587092ef20d37cb58baf000112c9278ff73b9f"
+ dependencies:
+ buffer-crc32 "^0.2.1"
+ crc32-stream "^2.0.0"
+ normalize-path "^2.0.0"
+ readable-stream "^2.0.0"
+
+compressible@~2.0.8:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.10.tgz#feda1c7f7617912732b29bf8cf26252a20b9eecd"
+ dependencies:
+ mime-db ">= 1.27.0 < 2"
+
+compression@^1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3"
+ dependencies:
+ accepts "~1.3.3"
+ bytes "2.3.0"
+ compressible "~2.0.8"
+ debug "~2.2.0"
+ on-headers "~1.0.1"
+ vary "~1.1.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.4.7, concat-stream@^1.5.0, concat-stream@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+configstore@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1"
+ dependencies:
+ dot-prop "^3.0.0"
+ graceful-fs "^4.1.2"
+ mkdirp "^0.5.0"
+ object-assign "^4.0.1"
+ os-tmpdir "^1.0.0"
+ osenv "^0.1.0"
+ uuid "^2.0.1"
+ write-file-atomic "^1.1.2"
+ xdg-basedir "^2.0.0"
+
+configstore@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1"
+ dependencies:
+ dot-prop "^4.1.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+
+content-disposition@0.5.2:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+
+content-type-parser@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
+
+content-type@^1.0.2, content-type@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed"
+
+convert-source-map@^1.1.0, convert-source-map@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
+
+cookie-signature@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+
+core-assert@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f"
+ dependencies:
+ buf-compare "^1.0.0"
+ is-error "^2.2.0"
+
+core-js@^2.0.0, core-js@^2.4.0, core-js@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+
+coveralls@^2.11.9:
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178"
+ dependencies:
+ js-yaml "3.6.1"
+ lcov-parse "0.0.10"
+ log-driver "1.2.5"
+ minimist "1.2.0"
+ request "2.79.0"
+
+crc32-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4"
+ dependencies:
+ crc "^3.4.4"
+ readable-stream "^2.0.0"
+
+crc@3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/crc/-/crc-3.2.1.tgz#5d9c8fb77a245cd5eca291e5d2d005334bab0082"
+
+crc@^3.4.4:
+ version "3.4.4"
+ resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b"
+
+create-error-class@^3.0.0, create-error-class@^3.0.1:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ dependencies:
+ capture-stack-trace "^1.0.0"
+
+cross-spawn-async@^2.1.1:
+ version "2.2.5"
+ resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc"
+ dependencies:
+ lru-cache "^4.0.0"
+ which "^1.2.8"
+
+cross-spawn@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41"
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+cross-spawn@^5.0.1:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+
+css-slam@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/css-slam/-/css-slam-1.2.1.tgz#2467e5aecb7e989bd04f656011dd1cf8eb3e7165"
+ dependencies:
+ command-line-args "^3.0.1"
+ command-line-usage "^3.0.5"
+ dom5 "^1.3.1"
+ shady-css-parser "0.0.8"
+
+cssbeautify@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cssbeautify/-/cssbeautify-0.3.1.tgz#12dd1f734035c2e6faca67dcbdcef74e42811397"
+
+cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
+
+"cssstyle@>= 0.2.37 < 0.3.0":
+ version "0.2.37"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ dependencies:
+ cssom "0.3.x"
+
+currently-unhandled@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ dependencies:
+ array-find-index "^1.0.1"
+
+cycle@1.0.x:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
+
+d@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ dependencies:
+ es5-ext "^0.10.9"
+
+dargs@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+dateformat@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17"
+
+debug@2, debug@^2.0.0, debug@^2.1.0, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3, debug@^2.6.8:
+ version "2.6.8"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
+ dependencies:
+ ms "2.0.0"
+
+debug@2.2.0, debug@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
+debug@2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
+ dependencies:
+ ms "0.7.2"
+
+debug@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
+ dependencies:
+ ms "0.7.2"
+
+debug@2.6.7:
+ version "2.6.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e"
+ dependencies:
+ ms "2.0.0"
+
+debug@~2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.3.tgz#ce8ab1b5ee8fbee2bfa3b633cab93d366b63418e"
+ dependencies:
+ ms "0.7.0"
+
+decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+
+deep-assign@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-1.0.0.tgz#b092743be8427dc621ea0067cdec7e70dd19f37b"
+ dependencies:
+ is-obj "^1.0.0"
+
+deep-eql@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
+ dependencies:
+ type-detect "0.1.1"
+
+deep-extend@^0.4.0, deep-extend@~0.4.0, deep-extend@~0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+deep-strict-equal@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz#4a078147a8ab57f6a0d4f5547243cd22f44eb4e4"
+ dependencies:
+ core-assert "^0.2.0"
+
+default-require-extensions@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+ dependencies:
+ strip-bom "^2.0.0"
+
+defaults@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ dependencies:
+ clone "^1.0.2"
+
+del@^2.0.2, del@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ globby "^5.0.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ rimraf "^2.2.8"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
+depd@1.1.0, depd@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3"
+
+depd@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa"
+
+deprecated@^0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
+
+destroy@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.3.tgz#b433b4724e71fd8551d9885174851c5fc377e2c9"
+
+destroy@~1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+
+detect-conflict@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e"
+
+detect-file@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63"
+ dependencies:
+ fs-exists-sync "^0.1.0"
+
+detect-indent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ dependencies:
+ repeating "^2.0.0"
+
+detect-indent@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
+
+detect-node@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
+
+dicer@0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f"
+ dependencies:
+ readable-stream "1.1.x"
+ streamsearch "0.1.2"
+
+diff@3.2.0, diff@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
+
+diff@^2.1.2:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99"
+
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+dom-urls@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e"
+ dependencies:
+ urijs "^1.16.1"
+
+dom-walk@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
+
+dom5@^1.3.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/dom5/-/dom5-1.3.6.tgz#a7088a9fc5f3b08dc9f6eda4c7abaeb241945e0d"
+ dependencies:
+ "@types/clone" "^0.1.29"
+ "@types/node" "^4.0.30"
+ "@types/parse5" "^0.0.31"
+ clone "^1.0.2"
+ parse5 "^1.4.1"
+
+dom5@^2.0.0, dom5@^2.0.1, dom5@^2.1.0, dom5@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/dom5/-/dom5-2.3.0.tgz#f8204975bd0dacbbe5b58a8a93ffc1fed0ffcd2a"
+ dependencies:
+ "@types/clone" "^0.1.29"
+ "@types/node" "^6.0.0"
+ "@types/parse5" "^2.2.32"
+ clone "^2.1.0"
+ parse5 "^2.2.2"
+
+dot-prop@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+ dependencies:
+ is-obj "^1.0.0"
+
+dot-prop@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1"
+ dependencies:
+ is-obj "^1.0.0"
+
+duplexer2@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
+ dependencies:
+ readable-stream "~1.1.9"
+
+duplexer2@^0.1.2, duplexer2@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
+ dependencies:
+ readable-stream "^2.0.2"
+
+duplexer3@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+
+duplexify@^3.1.2, duplexify@^3.2.0, duplexify@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604"
+ dependencies:
+ end-of-stream "1.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+ stream-shift "^1.0.0"
+
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+editions@^1.1.1:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.3.tgz#0907101bdda20fac3cbe334c27cbd0688dc99a5b"
+
+ee-first@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.0.tgz#6a0d7c6221e490feefd92ec3f441c9ce8cd097f4"
+
+ee-first@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+
+ejs@^2.3.1:
+ version "2.5.6"
+ resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.6.tgz#479636bfa3fe3b1debd52087f0acb204b4f19c88"
+
+electron-to-chromium@^1.3.11:
+ version "1.3.13"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz#1b3a5eace6e087bb5e257a100b0cbfe81b2891fc"
+
+encodeurl@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
+
+end-of-stream@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e"
+ dependencies:
+ once "~1.3.0"
+
+end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
+ dependencies:
+ once "^1.4.0"
+
+end-of-stream@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
+ dependencies:
+ once "~1.3.0"
+
+ends-with@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/ends-with/-/ends-with-0.2.0.tgz#2f9da98d57a50cfda4571ce4339000500f4e6b8a"
+
+engine.io-client@~1.8.4:
+ version "1.8.4"
+ resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.4.tgz#9fe85dee25853ca6babe25bd2ad68710863e91c2"
+ dependencies:
+ component-emitter "1.2.1"
+ component-inherit "0.0.3"
+ debug "2.3.3"
+ engine.io-parser "1.3.2"
+ has-cors "1.1.0"
+ indexof "0.0.1"
+ parsejson "0.0.3"
+ parseqs "0.0.5"
+ parseuri "0.0.5"
+ ws "1.1.2"
+ xmlhttprequest-ssl "1.5.3"
+ yeast "0.1.2"
+
+engine.io-parser@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a"
+ dependencies:
+ after "0.8.2"
+ arraybuffer.slice "0.0.6"
+ base64-arraybuffer "0.1.5"
+ blob "0.0.4"
+ has-binary "0.1.7"
+ wtf-8 "1.0.0"
+
+engine.io@~1.8.4:
+ version "1.8.4"
+ resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.4.tgz#77bce12b80e5d60429337fec3b0daf691ebc9003"
+ dependencies:
+ accepts "1.3.3"
+ base64id "1.0.0"
+ cookie "0.3.1"
+ debug "2.3.3"
+ engine.io-parser "1.3.2"
+ ws "1.1.4"
+
+enhance-visitors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/enhance-visitors/-/enhance-visitors-1.0.0.tgz#aa945d05da465672a1ebd38fee2ed3da8518e95a"
+ dependencies:
+ lodash "^4.13.1"
+
+"errno@>=0.1.1 <0.2.0-0":
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
+ dependencies:
+ prr "~0.0.0"
+
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
+error@^7.0.2:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02"
+ dependencies:
+ string-template "~0.2.1"
+ xtend "~4.0.0"
+
+es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.22"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.22.tgz#1876c51f990769c112c781ea3ebe89f84fd39071"
+ dependencies:
+ es6-iterator "2"
+ es6-symbol "~3.1"
+
+es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-symbol "^3.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+es6-promise@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc"
+
+es6-promise@^4.0.5:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0"
+
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
+escape-html@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.1.tgz#181a286ead397a39a92857cfb1d43052e356bff0"
+
+escape-html@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+
+escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+escodegen@^1.6.1, escodegen@^1.7.0:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
+ dependencies:
+ esprima "^2.7.1"
+ estraverse "^1.9.1"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.2.0"
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-config-xo@^0.18.0:
+ version "0.18.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.18.2.tgz#0a157120875619929e735ffd6b185c41e8a187af"
+
+eslint-formatter-pretty@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-formatter-pretty/-/eslint-formatter-pretty-1.1.0.tgz#ab4d06da02fed8c13ae9f0dc540a433ef7ed6f5e"
+ dependencies:
+ ansi-escapes "^1.4.0"
+ chalk "^1.1.3"
+ log-symbols "^1.0.2"
+ plur "^2.1.2"
+ string-width "^2.0.0"
+
+eslint-import-resolver-node@^0.2.0:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
+ dependencies:
+ debug "^2.2.0"
+ object-assign "^4.0.1"
+ resolve "^1.1.6"
+
+eslint-module-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce"
+ dependencies:
+ debug "2.2.0"
+ pkg-dir "^1.0.0"
+
+eslint-plugin-ava@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-4.2.0.tgz#12e4664659c1fae7895fa3f346c313ceb8907c77"
+ dependencies:
+ arrify "^1.0.1"
+ deep-strict-equal "^0.2.0"
+ enhance-visitors "^1.0.0"
+ espree "^3.1.3"
+ espurify "^1.5.0"
+ multimatch "^2.1.0"
+ pkg-up "^1.0.0"
+ req-all "^1.0.0"
+
+eslint-plugin-import@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.3.0.tgz#37c801e0ada0e296cbdf20c3f393acb5b52af36b"
+ dependencies:
+ builtin-modules "^1.1.1"
+ contains-path "^0.1.0"
+ debug "^2.2.0"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.2.0"
+ eslint-module-utils "^2.0.0"
+ has "^1.0.1"
+ lodash.cond "^4.3.0"
+ minimatch "^3.0.3"
+ read-pkg-up "^2.0.0"
+
+eslint-plugin-no-use-extend-native@^0.3.2:
+ version "0.3.12"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.3.12.tgz#3ad9a00c2df23b5d7f7f6be91550985a4ab701ea"
+ dependencies:
+ is-get-set-prop "^1.0.0"
+ is-js-type "^2.0.0"
+ is-obj-prop "^1.0.0"
+ is-proto-prop "^1.0.0"
+
+eslint-plugin-promise@^3.4.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca"
+
+eslint-plugin-unicorn@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-2.1.1.tgz#3e9294366799b715e16a6df89159495b68930cb3"
+ dependencies:
+ lodash.camelcase "^4.1.1"
+ lodash.kebabcase "^4.0.1"
+ lodash.snakecase "^4.0.1"
+ lodash.upperfirst "^4.2.0"
+ req-all "^1.0.0"
+
+eslint@^3.18.0:
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.5.2"
+ debug "^2.1.1"
+ doctrine "^2.0.0"
+ escope "^3.6.0"
+ espree "^3.4.0"
+ esquery "^1.0.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~2.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.1.3, espree@^3.1.7, espree@^3.4.0:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374"
+ dependencies:
+ acorn "^5.0.1"
+ acorn-jsx "^3.0.0"
+
+esprima@^2.6.0, esprima@^2.7.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+
+esprima@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+espurify@^1.5.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226"
+ dependencies:
+ core-js "^2.0.0"
+
+esquery@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
+ dependencies:
+ estraverse "~4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^1.9.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
+
+estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+estraverse@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
+
+estree-walker@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e"
+
+estree-walker@^0.3.0:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+etag@~1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.5.1.tgz#54c50de04ee42695562925ac566588291be7e9ea"
+ dependencies:
+ crc "3.2.1"
+
+etag@~1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8"
+
+etag@~1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051"
+
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+eventemitter3@1.x.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
+
+exec-sh@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10"
+ dependencies:
+ merge "^1.1.3"
+
+execa@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3"
+ dependencies:
+ cross-spawn-async "^2.1.1"
+ is-stream "^1.1.0"
+ npm-run-path "^1.0.0"
+ object-assign "^4.0.1"
+ path-key "^1.0.0"
+ strip-eof "^1.0.0"
+
+execa@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-0.5.1.tgz#de3fb85cb8d6e91c85bcbceb164581785cb57b36"
+ dependencies:
+ cross-spawn "^4.0.0"
+ get-stream "^2.2.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
+expand-brackets@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ dependencies:
+ is-posix-bracket "^0.1.0"
+
+expand-range@^1.8.1:
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ dependencies:
+ fill-range "^2.1.0"
+
+expand-tilde@^1.2.1, expand-tilde@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
+ dependencies:
+ os-homedir "^1.0.1"
+
+express@^4.8.5:
+ version "4.15.3"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.15.3.tgz#bab65d0f03aa80c358408972fc700f916944b662"
+ dependencies:
+ accepts "~1.3.3"
+ array-flatten "1.1.1"
+ content-disposition "0.5.2"
+ content-type "~1.0.2"
+ cookie "0.3.1"
+ cookie-signature "1.0.6"
+ debug "2.6.7"
+ depd "~1.1.0"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.0"
+ finalhandler "~1.0.3"
+ fresh "0.5.0"
+ merge-descriptors "1.0.1"
+ methods "~1.1.2"
+ on-finished "~2.3.0"
+ parseurl "~1.3.1"
+ path-to-regexp "0.1.7"
+ proxy-addr "~1.1.4"
+ qs "6.4.0"
+ range-parser "~1.2.0"
+ send "0.15.3"
+ serve-static "1.12.3"
+ setprototypeof "1.0.3"
+ statuses "~1.3.1"
+ type-is "~1.6.15"
+ utils-merge "1.0.0"
+ vary "~1.1.1"
+
+ext-list@^2.0.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.1.tgz#ba045fac10c92300b4e0606269e4988ddc572b1e"
+ dependencies:
+ mime-db "^1.28.0"
+
+ext-name@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-3.0.0.tgz#07e4418737cb1f513c32c6ea48d8b8c8e0471abb"
+ dependencies:
+ ends-with "^0.2.0"
+ ext-list "^2.0.0"
+ meow "^3.1.0"
+ sort-keys-length "^1.0.0"
+
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend@3, extend@^3.0.0, extend@~3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+
+external-editor@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-1.1.1.tgz#12d7b0db850f7ff7e7081baf4005700060c4600b"
+ dependencies:
+ extend "^3.0.0"
+ spawn-sync "^1.0.15"
+ tmp "^0.0.29"
+
+extglob@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ dependencies:
+ is-extglob "^1.0.0"
+
+extsprintf@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
+
+eyes@0.1.x:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
+
+fancy-log@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
+ dependencies:
+ chalk "^1.1.1"
+ time-stamp "^1.0.0"
+
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
+fb-watchman@^1.8.0:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383"
+ dependencies:
+ bser "1.0.2"
+
+fb-watchman@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+ dependencies:
+ bser "^2.0.0"
+
+fd-slicer@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+ dependencies:
+ pend "~1.2.0"
+
+feature-detect-es6@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/feature-detect-es6/-/feature-detect-es6-1.3.1.tgz#f888736af9cb0c91f55663bfa4762eb96ee7047f"
+ dependencies:
+ array-back "^1.0.3"
+
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+filename-regex@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+
+fileset@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+ dependencies:
+ glob "^7.0.3"
+ minimatch "^3.0.3"
+
+fill-range@^2.1.0:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ dependencies:
+ is-number "^2.1.0"
+ isobject "^2.0.0"
+ randomatic "^1.1.3"
+ repeat-element "^1.1.2"
+ repeat-string "^1.5.2"
+
+filled-array@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
+
+finalhandler@~1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89"
+ dependencies:
+ debug "2.6.7"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ on-finished "~2.3.0"
+ parseurl "~1.3.1"
+ statuses "~1.3.1"
+ unpipe "~1.0.0"
+
+find-index@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
+
+find-port@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/find-port/-/find-port-1.0.1.tgz#db084a6cbf99564d99869ae79fbdecf66e8a185c"
+ dependencies:
+ async "~0.2.9"
+
+find-replace@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0"
+ dependencies:
+ array-back "^1.0.4"
+ test-value "^2.1.0"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0, find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+findup-sync@^0.4.2, findup-sync@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12"
+ dependencies:
+ detect-file "^0.1.0"
+ is-glob "^2.0.1"
+ micromatch "^2.3.7"
+ resolve-dir "^0.1.0"
+
+fined@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97"
+ dependencies:
+ expand-tilde "^1.2.1"
+ lodash.assignwith "^4.0.7"
+ lodash.isempty "^4.2.1"
+ lodash.isplainobject "^4.0.4"
+ lodash.isstring "^4.0.1"
+ lodash.pick "^4.2.1"
+ parse-filepath "^1.0.1"
+
+first-chunk-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
+
+first-chunk-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70"
+ dependencies:
+ readable-stream "^2.0.2"
+
+flagged-respawn@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
+
+flat-cache@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
+follow-redirects@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-0.0.7.tgz#34b90bab2a911aa347571da90f22bd36ecd8a919"
+ dependencies:
+ debug "^2.2.0"
+ stream-consume "^0.1.0"
+
+for-in@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+
+for-own@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ dependencies:
+ for-in "^1.0.1"
+
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+fork-stream@^0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70"
+
+form-data@~2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+formatio@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9"
+ dependencies:
+ samsam "~1.1"
+
+forwarded@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363"
+
+freeport@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/freeport/-/freeport-1.0.5.tgz#255e8ab84170c33ba85d990e821ae5f4a1a9bc5d"
+
+fresh@0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.4.tgz#3582499206c9723714190edd74b4604feb4a614c"
+
+fresh@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f"
+
+fresh@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
+
+fs-exists-sync@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+function-bind@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
+
+gaze@^0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
+ dependencies:
+ globule "~0.1.0"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ dependencies:
+ is-property "^1.0.0"
+
+get-caller-file@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+
+get-set-props@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-set-props/-/get-set-props-0.1.0.tgz#998475c178445686d0b32246da5df8dbcfbe8ea3"
+
+get-stdin@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+
+get-stdin@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+
+get-stream@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
+ dependencies:
+ object-assign "^4.0.1"
+ pinkie-promise "^2.0.0"
+
+get-stream@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
+gh-got@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-5.0.0.tgz#ee95be37106fd8748a96f8d1db4baea89e1bfa8a"
+ dependencies:
+ got "^6.2.0"
+ is-plain-obj "^1.1.0"
+
+github-username@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/github-username/-/github-username-3.0.0.tgz#0a772219b3130743429f2456d0bdd3db55dce7b1"
+ dependencies:
+ gh-got "^5.0.0"
+
+github@^7.2.1:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/github/-/github-7.3.2.tgz#fe10cde6964352c5d91e11a7616d26d5ffb6f87b"
+ dependencies:
+ follow-redirects "0.0.7"
+ https-proxy-agent "^1.0.0"
+ mime "^1.2.11"
+ netrc "^0.1.4"
+
+glob-base@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ dependencies:
+ glob-parent "^2.0.0"
+ is-glob "^2.0.0"
+
+glob-parent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ dependencies:
+ is-glob "^2.0.0"
+
+glob-parent@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
+glob-stream@^3.1.5:
+ version "3.1.18"
+ resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
+ dependencies:
+ glob "^4.3.1"
+ glob2base "^0.0.12"
+ minimatch "^2.0.1"
+ ordered-read-streams "^0.1.0"
+ through2 "^0.6.1"
+ unique-stream "^1.0.0"
+
+glob-stream@^5.3.2:
+ version "5.3.5"
+ resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22"
+ dependencies:
+ extend "^3.0.0"
+ glob "^5.0.3"
+ glob-parent "^3.0.0"
+ micromatch "^2.3.7"
+ ordered-read-streams "^0.3.0"
+ through2 "^0.6.0"
+ to-absolute-glob "^0.1.1"
+ unique-stream "^2.0.2"
+
+glob-watcher@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
+ dependencies:
+ gaze "^0.5.1"
+
+glob2base@^0.0.12:
+ version "0.0.12"
+ resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
+ dependencies:
+ find-index "^0.1.1"
+
+glob@7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.2"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^4.3.1:
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-4.3.5.tgz#80fbb08ca540f238acce5d11d1e9bc41e75173d3"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^2.0.1"
+ once "^1.3.0"
+
+glob@^5.0.3:
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^6.0.1:
+ version "6.0.4"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+ dependencies:
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "2 || 3"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@~3.1.21:
+ version "3.1.21"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
+ dependencies:
+ graceful-fs "~1.2.0"
+ inherits "1"
+ minimatch "~0.2.11"
+
+global-modules@^0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
+ dependencies:
+ global-prefix "^0.1.4"
+ is-windows "^0.2.0"
+
+global-prefix@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f"
+ dependencies:
+ homedir-polyfill "^1.0.0"
+ ini "^1.3.4"
+ is-windows "^0.2.0"
+ which "^1.2.12"
+
+global@^4.3.1:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
+ dependencies:
+ min-document "^2.19.0"
+ process "~0.5.1"
+
+globals@^9.0.0, globals@^9.14.0:
+ version "9.17.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286"
+
+globby@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^6.0.1"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globby@^6.0.0, globby@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ dependencies:
+ array-union "^1.0.1"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+globule@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
+ dependencies:
+ glob "~3.1.21"
+ lodash "~1.0.1"
+ minimatch "~0.2.11"
+
+glogg@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
+ dependencies:
+ sparkles "^1.0.0"
+
+got@^5.0.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
+ dependencies:
+ create-error-class "^3.0.1"
+ duplexer2 "^0.1.4"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ node-status-codes "^1.0.0"
+ object-assign "^4.0.1"
+ parse-json "^2.1.0"
+ pinkie-promise "^2.0.0"
+ read-all-stream "^3.0.0"
+ readable-stream "^2.0.5"
+ timed-out "^3.0.0"
+ unzip-response "^1.0.2"
+ url-parse-lax "^1.0.0"
+
+got@^6.2.0, got@^6.7.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ dependencies:
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
+ is-redirect "^1.0.0"
+ is-retry-allowed "^1.0.0"
+ is-stream "^1.0.0"
+ lowercase-keys "^1.0.0"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
+ url-parse-lax "^1.0.0"
+
+graceful-fs@^3.0.0:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
+ dependencies:
+ natives "^1.1.0"
+
+graceful-fs@^4.0.0, graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+graceful-fs@~1.2.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
+
+"graceful-readlink@>= 1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
+
+grouped-queue@^0.3.0:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c"
+ dependencies:
+ lodash "^4.17.2"
+
+growl@1.9.2:
+ version "1.9.2"
+ resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+
+gulp-if@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/gulp-if/-/gulp-if-2.0.2.tgz#a497b7e7573005041caa2bc8b7dda3c80444d629"
+ dependencies:
+ gulp-match "^1.0.3"
+ ternary-stream "^2.0.1"
+ through2 "^2.0.1"
+
+gulp-match@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.0.3.tgz#91c7c0d7f29becd6606d57d80a7f8776a87aba8e"
+ dependencies:
+ minimatch "^3.0.3"
+
+gulp-sourcemaps@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c"
+ dependencies:
+ convert-source-map "^1.1.1"
+ graceful-fs "^4.1.2"
+ strip-bom "^2.0.0"
+ through2 "^2.0.0"
+ vinyl "^1.0.0"
+
+gulp-util@*, gulp-util@^3.0.0:
+ version "3.0.8"
+ resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
+ dependencies:
+ array-differ "^1.0.0"
+ array-uniq "^1.0.2"
+ beeper "^1.0.0"
+ chalk "^1.0.0"
+ dateformat "^2.0.0"
+ fancy-log "^1.1.0"
+ gulplog "^1.0.0"
+ has-gulplog "^0.1.0"
+ lodash._reescape "^3.0.0"
+ lodash._reevaluate "^3.0.0"
+ lodash._reinterpolate "^3.0.0"
+ lodash.template "^3.0.0"
+ minimist "^1.1.0"
+ multipipe "^0.1.2"
+ object-assign "^3.0.0"
+ replace-ext "0.0.1"
+ through2 "^2.0.0"
+ vinyl "^0.5.0"
+
+gulp@^3.9.1:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4"
+ dependencies:
+ archy "^1.0.0"
+ chalk "^1.0.0"
+ deprecated "^0.0.1"
+ gulp-util "^3.0.0"
+ interpret "^1.0.0"
+ liftoff "^2.1.0"
+ minimist "^1.1.0"
+ orchestrator "^0.3.0"
+ pretty-hrtime "^1.0.0"
+ semver "^4.1.0"
+ tildify "^1.0.0"
+ v8flags "^2.0.2"
+ vinyl-fs "^0.3.0"
+
+gulplog@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
+ dependencies:
+ glogg "^1.0.0"
+
+gunzip-maybe@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.0.tgz#7d8316c8d0571e1d08a5a79e46fff0afe8172b19"
+ dependencies:
+ browserify-zlib "^0.1.4"
+ is-deflate "^1.0.0"
+ is-gzip "^1.0.0"
+ peek-stream "^1.1.0"
+ pumpify "^1.3.3"
+ through2 "^2.0.3"
+
+handle-thing@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
+
+handlebars@^4.0.3:
+ version "4.0.10"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f"
+ dependencies:
+ async "^1.4.0"
+ optimist "^0.6.1"
+ source-map "^0.4.4"
+ optionalDependencies:
+ uglify-js "^2.6"
+
+har-validator@~2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+ dependencies:
+ chalk "^1.1.1"
+ commander "^2.9.0"
+ is-my-json-valid "^2.12.4"
+ pinkie-promise "^2.0.0"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has-binary@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
+ dependencies:
+ isarray "0.0.1"
+
+has-color@~0.1.0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
+
+has-cors@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
+
+has-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+
+has-flag@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+
+has-gulplog@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
+ dependencies:
+ sparkles "^1.0.0"
+
+has@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+ dependencies:
+ function-bind "^1.0.2"
+
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+he@1.1.x:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
+home-or-tmp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.1"
+
+homedir-polyfill@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
+ dependencies:
+ parse-passwd "^1.0.0"
+
+hosted-git-info@^2.1.4:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67"
+
+hpack.js@^2.1.6:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ dependencies:
+ inherits "^2.0.1"
+ obuf "^1.0.0"
+ readable-stream "^2.0.1"
+ wbuf "^1.1.0"
+
+html-encoding-sniffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
+ dependencies:
+ whatwg-encoding "^1.0.1"
+
+html-minifier@^3.0.1:
+ version "3.5.2"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.2.tgz#d73bc3ff448942408818ce609bf3fb0ea7ef4eb7"
+ dependencies:
+ camel-case "3.0.x"
+ clean-css "4.1.x"
+ commander "2.9.x"
+ he "1.1.x"
+ ncname "1.0.x"
+ param-case "2.1.x"
+ relateurl "0.2.x"
+ uglify-js "3.0.x"
+
+http-deceiver@^1.2.7:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+
+http-errors@~1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750"
+ dependencies:
+ inherits "2.0.3"
+ setprototypeof "1.0.2"
+ statuses ">= 1.3.1 < 2"
+
+http-errors@~1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257"
+ dependencies:
+ depd "1.1.0"
+ inherits "2.0.3"
+ setprototypeof "1.0.3"
+ statuses ">= 1.3.1 < 2"
+
+http-proxy-middleware@^0.17.2:
+ version "0.17.4"
+ resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
+ dependencies:
+ http-proxy "^1.16.2"
+ is-glob "^3.1.0"
+ lodash "^4.17.2"
+ micromatch "^2.3.11"
+
+http-proxy@^1.16.2:
+ version "1.16.2"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+ dependencies:
+ eventemitter3 "1.x.x"
+ requires-port "1.x.x"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
+https-proxy-agent@1.0.0, https-proxy-agent@^1.0.0, https-proxy-agent@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
+ dependencies:
+ agent-base "2"
+ debug "2"
+ extend "3"
+
+iconv-lite@0.4.13:
+ version "0.4.13"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
+
+iconv-lite@0.4.15:
+ version "0.4.15"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+
+ignore@^3.2.0, ignore@^3.2.6:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indexof@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
+inherits@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+
+ini@^1.3.4, ini@~1.3.0:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+inquirer@^1.0.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-1.2.3.tgz#4dec6f32f37ef7bb0b2ed3f1d1a5c3f545074918"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ external-editor "^1.1.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ mute-stream "0.0.6"
+ pinkie-promise "^2.0.0"
+ run-async "^2.2.0"
+ rx "^4.1.0"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+interpret@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
+
+intersect@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/intersect/-/intersect-1.0.1.tgz#332650e10854d8c0ac58c192bdc27a8bf7e7a30c"
+
+invariant@^2.2.0, invariant@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+ dependencies:
+ loose-envify "^1.0.0"
+
+invert-kv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+
+ipaddr.js@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec"
+
+irregular-plurals@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac"
+
+is-absolute@^0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f"
+ dependencies:
+ is-relative "^0.1.0"
+
+is-absolute@^0.2.3:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
+ dependencies:
+ is-relative "^0.2.1"
+ is-windows "^0.2.0"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-buffer@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc"
+
+is-builtin-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ dependencies:
+ builtin-modules "^1.0.0"
+
+is-ci@^1.0.9:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+ dependencies:
+ ci-info "^1.0.0"
+
+is-deflate@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14"
+
+is-dotfile@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+
+is-equal-shallow@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ dependencies:
+ is-primitive "^2.0.0"
+
+is-error@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.1.tgz#684a96d84076577c98f4cdb40c6d26a5123bf19c"
+
+is-extendable@^0.1.0, is-extendable@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+
+is-extglob@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+
+is-extglob@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
+is-get-set-prop@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz#2731877e4d78a6a69edcce6bb9d68b0779e76312"
+ dependencies:
+ get-set-props "^0.1.0"
+ lowercase-keys "^1.0.0"
+
+is-glob@^2.0.0, is-glob@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ dependencies:
+ is-extglob "^1.0.0"
+
+is-glob@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ dependencies:
+ is-extglob "^2.1.0"
+
+is-gzip@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
+
+is-js-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-js-type/-/is-js-type-2.0.0.tgz#73617006d659b4eb4729bba747d28782df0f7e22"
+ dependencies:
+ js-types "^1.0.0"
+
+is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-npm@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+
+is-number@^2.0.2, is-number@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ dependencies:
+ kind-of "^3.0.2"
+
+is-obj-prop@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-obj-prop/-/is-obj-prop-1.0.0.tgz#b34de79c450b8d7c73ab2cdf67dc875adb85f80e"
+ dependencies:
+ lowercase-keys "^1.0.0"
+ obj-props "^1.0.0"
+
+is-obj@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-plain-obj@^1.0.0, is-plain-obj@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+
+is-posix-bracket@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+
+is-primitive@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+
+is-promise@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-proto-prop@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-proto-prop/-/is-proto-prop-1.0.0.tgz#b3951f95c089924fb5d4fcda6542ab3e83e2b220"
+ dependencies:
+ lowercase-keys "^1.0.0"
+ proto-props "^0.2.0"
+
+is-redirect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+
+is-relative@^0.1.0:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82"
+
+is-relative@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
+ dependencies:
+ is-unc-path "^0.1.1"
+
+is-resolvable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+ dependencies:
+ tryit "^1.0.1"
+
+is-retry-allowed@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+
+is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
+is-unc-path@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
+ dependencies:
+ unc-path-regex "^0.1.0"
+
+is-utf8@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+
+is-valid-glob@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe"
+
+is-windows@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+
+isobject@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ dependencies:
+ isarray "1.0.0"
+
+isstream@0.1.x, isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
+istanbul-api@^1.1.0-alpha.1:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.9.tgz#2827920d380d4286d857d57a2968a841db8a7ec8"
+ dependencies:
+ async "^2.1.4"
+ fileset "^2.0.2"
+ istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-hook "^1.0.7"
+ istanbul-lib-instrument "^1.7.2"
+ istanbul-lib-report "^1.1.1"
+ istanbul-lib-source-maps "^1.2.1"
+ istanbul-reports "^1.1.1"
+ js-yaml "^3.7.0"
+ mkdirp "^0.5.1"
+ once "^1.4.0"
+
+istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+
+istanbul-lib-hook@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc"
+ dependencies:
+ append-transform "^0.4.0"
+
+istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.2.tgz#6014b03d3470fb77638d5802508c255c06312e56"
+ dependencies:
+ babel-generator "^6.18.0"
+ babel-template "^6.16.0"
+ babel-traverse "^6.18.0"
+ babel-types "^6.18.0"
+ babylon "^6.13.0"
+ istanbul-lib-coverage "^1.1.1"
+ semver "^5.3.0"
+
+istanbul-lib-report@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9"
+ dependencies:
+ istanbul-lib-coverage "^1.1.1"
+ mkdirp "^0.5.1"
+ path-parse "^1.0.5"
+ supports-color "^3.1.2"
+
+istanbul-lib-source-maps@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c"
+ dependencies:
+ debug "^2.6.3"
+ istanbul-lib-coverage "^1.1.1"
+ mkdirp "^0.5.1"
+ rimraf "^2.6.1"
+ source-map "^0.5.3"
+
+istanbul-reports@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e"
+ dependencies:
+ handlebars "^4.0.3"
+
+istextorbinary@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.1.0.tgz#dbed2a6f51be2f7475b68f89465811141b758874"
+ dependencies:
+ binaryextensions "1 || 2"
+ editions "^1.1.1"
+ textextensions "1 || 2"
+
+jest-changed-files@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824"
+
+jest-cli@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443"
+ dependencies:
+ ansi-escapes "^1.4.0"
+ callsites "^2.0.0"
+ chalk "^1.1.1"
+ graceful-fs "^4.1.6"
+ is-ci "^1.0.9"
+ istanbul-api "^1.1.0-alpha.1"
+ istanbul-lib-coverage "^1.0.0"
+ istanbul-lib-instrument "^1.1.1"
+ jest-changed-files "^19.0.2"
+ jest-config "^19.0.2"
+ jest-environment-jsdom "^19.0.2"
+ jest-haste-map "^19.0.0"
+ jest-jasmine2 "^19.0.2"
+ jest-message-util "^19.0.0"
+ jest-regex-util "^19.0.0"
+ jest-resolve-dependencies "^19.0.0"
+ jest-runtime "^19.0.2"
+ jest-snapshot "^19.0.2"
+ jest-util "^19.0.2"
+ micromatch "^2.3.11"
+ node-notifier "^5.0.1"
+ slash "^1.0.0"
+ string-length "^1.0.1"
+ throat "^3.0.0"
+ which "^1.1.1"
+ worker-farm "^1.3.1"
+ yargs "^6.3.0"
+
+jest-config@^19.0.2:
+ version "19.0.4"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.4.tgz#42980211d46417e91ca7abffd086c270234f73fd"
+ dependencies:
+ chalk "^1.1.1"
+ jest-environment-jsdom "^19.0.2"
+ jest-environment-node "^19.0.2"
+ jest-jasmine2 "^19.0.2"
+ jest-regex-util "^19.0.0"
+ jest-resolve "^19.0.2"
+ jest-validate "^19.0.2"
+ pretty-format "^19.0.0"
+
+jest-diff@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c"
+ dependencies:
+ chalk "^1.1.3"
+ diff "^3.0.0"
+ jest-matcher-utils "^19.0.0"
+ pretty-format "^19.0.0"
+
+jest-environment-jsdom@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3"
+ dependencies:
+ jest-mock "^19.0.0"
+ jest-util "^19.0.2"
+ jsdom "^9.11.0"
+
+jest-environment-node@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b"
+ dependencies:
+ jest-mock "^19.0.0"
+ jest-util "^19.0.2"
+
+jest-file-exists@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8"
+
+jest-haste-map@^19.0.0:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.2.tgz#286484c3a16e86da7872b0877c35dce30c3d6f07"
+ dependencies:
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.1.6"
+ micromatch "^2.3.11"
+ sane "~1.5.0"
+ worker-farm "^1.3.1"
+
+jest-jasmine2@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73"
+ dependencies:
+ graceful-fs "^4.1.6"
+ jest-matcher-utils "^19.0.0"
+ jest-matchers "^19.0.0"
+ jest-message-util "^19.0.0"
+ jest-snapshot "^19.0.2"
+
+jest-matcher-utils@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d"
+ dependencies:
+ chalk "^1.1.3"
+ pretty-format "^19.0.0"
+
+jest-matchers@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754"
+ dependencies:
+ jest-diff "^19.0.0"
+ jest-matcher-utils "^19.0.0"
+ jest-message-util "^19.0.0"
+ jest-regex-util "^19.0.0"
+
+jest-message-util@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416"
+ dependencies:
+ chalk "^1.1.1"
+ micromatch "^2.3.11"
+
+jest-mock@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01"
+
+jest-regex-util@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691"
+
+jest-resolve-dependencies@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee"
+ dependencies:
+ jest-file-exists "^19.0.0"
+
+jest-resolve@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c"
+ dependencies:
+ browser-resolve "^1.11.2"
+ jest-haste-map "^19.0.0"
+ resolve "^1.2.0"
+
+jest-runtime@^19.0.2:
+ version "19.0.3"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330"
+ dependencies:
+ babel-core "^6.0.0"
+ babel-jest "^19.0.0"
+ babel-plugin-istanbul "^4.0.0"
+ chalk "^1.1.3"
+ graceful-fs "^4.1.6"
+ jest-config "^19.0.2"
+ jest-file-exists "^19.0.0"
+ jest-haste-map "^19.0.0"
+ jest-regex-util "^19.0.0"
+ jest-resolve "^19.0.2"
+ jest-util "^19.0.2"
+ json-stable-stringify "^1.0.1"
+ micromatch "^2.3.11"
+ strip-bom "3.0.0"
+ yargs "^6.3.0"
+
+jest-snapshot@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b"
+ dependencies:
+ chalk "^1.1.3"
+ jest-diff "^19.0.0"
+ jest-file-exists "^19.0.0"
+ jest-matcher-utils "^19.0.0"
+ jest-util "^19.0.2"
+ natural-compare "^1.4.0"
+ pretty-format "^19.0.0"
+
+jest-util@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41"
+ dependencies:
+ chalk "^1.1.1"
+ graceful-fs "^4.1.6"
+ jest-file-exists "^19.0.0"
+ jest-message-util "^19.0.0"
+ jest-mock "^19.0.0"
+ jest-validate "^19.0.2"
+ leven "^2.0.0"
+ mkdirp "^0.5.1"
+
+jest-validate@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c"
+ dependencies:
+ chalk "^1.1.1"
+ jest-matcher-utils "^19.0.0"
+ leven "^2.0.0"
+ pretty-format "^19.0.0"
+
+jest@^19.0.2:
+ version "19.0.2"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10"
+ dependencies:
+ jest-cli "^19.0.2"
+
+jodid25519@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
+ dependencies:
+ jsbn "~0.1.0"
+
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+
+js-types@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/js-types/-/js-types-1.0.0.tgz#d242e6494ed572ad3c92809fc8bed7f7687cbf03"
+
+js-yaml@3.6.1, js-yaml@^3.5.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^2.6.0"
+
+js-yaml@^3.7.0:
+ version "3.8.4"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^3.1.1"
+
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
+jsdom@^9.11.0:
+ version "9.12.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
+ dependencies:
+ abab "^1.0.3"
+ acorn "^4.0.4"
+ acorn-globals "^3.1.0"
+ array-equal "^1.0.0"
+ content-type-parser "^1.0.1"
+ cssom ">= 0.3.2 < 0.4.0"
+ cssstyle ">= 0.2.37 < 0.3.0"
+ escodegen "^1.6.1"
+ html-encoding-sniffer "^1.0.1"
+ nwmatcher ">= 1.3.9 < 2.0.0"
+ parse5 "^1.5.1"
+ request "^2.79.0"
+ sax "^1.2.1"
+ symbol-tree "^3.2.1"
+ tough-cookie "^2.3.2"
+ webidl-conversions "^4.0.0"
+ whatwg-encoding "^1.0.1"
+ whatwg-url "^4.3.0"
+ xml-name-validator "^2.0.1"
+
+jsesc@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+
+jsesc@~0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
+json3@3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+
+json5@^0.5.0:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
+jsonschema@^1.1.0, jsonschema@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.1.1.tgz#3cede8e3e411d377872eefbc9fdf26383cbc3ed9"
+
+jsprim@^1.2.2:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.0.2"
+ json-schema "0.2.3"
+ verror "1.3.6"
+
+kind-of@^3.0.2:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ dependencies:
+ is-buffer "^1.1.5"
+
+latest-version@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
+ dependencies:
+ package-json "^2.0.0"
+
+latest-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
+ dependencies:
+ package-json "^4.0.0"
+
+launchpad@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/launchpad/-/launchpad-0.6.0.tgz#6a122deaa3cbd7b9bedc13e7c8dd20a90951aaa3"
+ dependencies:
+ async "^2.0.1"
+ browserstack "^1.2.0"
+ debug "^2.2.0"
+ plist "^2.0.1"
+ q "^1.4.1"
+ underscore "^1.8.3"
+
+lazy-cache@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
+
+lazy-req@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
+
+lazy-req@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4"
+
+lazystream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
+ dependencies:
+ readable-stream "^2.0.5"
+
+lcid@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ dependencies:
+ invert-kv "^1.0.0"
+
+lcov-parse@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3"
+
+leven@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+liftoff@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
+ dependencies:
+ extend "^3.0.0"
+ findup-sync "^0.4.2"
+ fined "^1.0.1"
+ flagged-respawn "^0.3.2"
+ lodash.isplainobject "^4.0.4"
+ lodash.isstring "^4.0.1"
+ lodash.mapvalues "^4.4.0"
+ rechoir "^0.6.2"
+ resolve "^1.1.7"
+
+load-json-file@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash-es@^4.2.1:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
+
+lodash._baseassign@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash.keys "^3.0.0"
+
+lodash._basecopy@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
+
+lodash._basecreate@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821"
+
+lodash._basetostring@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
+
+lodash._basevalues@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
+
+lodash._getnative@^3.0.0:
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
+
+lodash._isiterateecall@^3.0.0:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
+
+lodash._reescape@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
+
+lodash._reevaluate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
+
+lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
+
+lodash._root@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
+
+lodash.assignwith@^4.0.7:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb"
+
+lodash.camelcase@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+
+lodash.cond@^4.3.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+
+lodash.create@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7"
+ dependencies:
+ lodash._baseassign "^3.0.0"
+ lodash._basecreate "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+
+lodash.defaults@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+
+lodash.escape@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
+ dependencies:
+ lodash._root "^3.0.0"
+
+lodash.isarguments@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
+
+lodash.isarray@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
+
+lodash.isempty@^4.2.1:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
+
+lodash.isequal@^4.0.0, lodash.isequal@^4.4.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+
+lodash.isplainobject@^4.0.4, lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+
+lodash.kebabcase@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
+
+lodash.keys@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
+ dependencies:
+ lodash._getnative "^3.0.0"
+ lodash.isarguments "^3.0.0"
+ lodash.isarray "^3.0.0"
+
+lodash.mapvalues@^4.4.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
+
+lodash.pick@^4.2.1:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+
+lodash.restparam@^3.0.0:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
+
+lodash.snakecase@^4.0.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
+
+lodash.some@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
+
+lodash.template@^3.0.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
+ dependencies:
+ lodash._basecopy "^3.0.0"
+ lodash._basetostring "^3.0.0"
+ lodash._basevalues "^3.0.0"
+ lodash._isiterateecall "^3.0.0"
+ lodash._reinterpolate "^3.0.0"
+ lodash.escape "^3.0.0"
+ lodash.keys "^3.0.0"
+ lodash.restparam "^3.0.0"
+ lodash.templatesettings "^3.0.0"
+
+lodash.template@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+ lodash.templatesettings "^4.0.0"
+
+lodash.templatesettings@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
+ dependencies:
+ lodash._reinterpolate "^3.0.0"
+ lodash.escape "^3.0.0"
+
+lodash.templatesettings@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ dependencies:
+ lodash._reinterpolate "~3.0.0"
+
+lodash.upperfirst@^4.2.0:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
+
+lodash@3.9.3:
+ version "3.9.3"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.9.3.tgz#0159e86832feffc6d61d852b12a953b99496bd32"
+
+lodash@4.16.2:
+ version "4.16.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.2.tgz#3e626db827048a699281a8a125226326cfc0e652"
+
+lodash@^3.0.0, lodash@^3.0.1:
+ version "3.10.1"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
+
+lodash@^4.0.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.16.6, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.8.0:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+lodash@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
+
+log-driver@1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056"
+
+log-symbols@^1.0.1, log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ dependencies:
+ chalk "^1.0.0"
+
+lolex@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31"
+
+longest@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+
+loose-envify@^1.0.0, loose-envify@^1.1.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+ dependencies:
+ js-tokens "^3.0.0"
+
+loud-rejection@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ dependencies:
+ currently-unhandled "^0.4.1"
+ signal-exit "^3.0.0"
+
+lower-case@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+
+lowercase-keys@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+
+lru-cache@2:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
+
+lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
+ dependencies:
+ pseudomap "^1.0.1"
+ yallist "^2.0.0"
+
+magic-string@^0.19.0:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201"
+ dependencies:
+ vlq "^0.2.1"
+
+make-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
+ dependencies:
+ pify "^2.3.0"
+
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ dependencies:
+ tmpl "1.0.x"
+
+map-cache@^0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+
+map-obj@^1.0.0, map-obj@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+
+media-typer@0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+
+mem-fs-editor@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz#dd0a6eaf2bb8a6b37740067aa549eb530105af9f"
+ dependencies:
+ commondir "^1.0.1"
+ deep-extend "^0.4.0"
+ ejs "^2.3.1"
+ glob "^7.0.3"
+ globby "^6.1.0"
+ mkdirp "^0.5.0"
+ multimatch "^2.0.0"
+ rimraf "^2.2.8"
+ through2 "^2.0.0"
+ vinyl "^2.0.1"
+
+mem-fs@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc"
+ dependencies:
+ through2 "^2.0.0"
+ vinyl "^1.1.0"
+ vinyl-file "^2.0.0"
+
+meow@^3.1.0, meow@^3.4.2, meow@^3.7.0:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ dependencies:
+ camelcase-keys "^2.0.0"
+ decamelize "^1.1.2"
+ loud-rejection "^1.0.0"
+ map-obj "^1.0.1"
+ minimist "^1.1.3"
+ normalize-package-data "^2.3.4"
+ object-assign "^4.0.1"
+ read-pkg-up "^1.0.1"
+ redent "^1.0.0"
+ trim-newlines "^1.0.0"
+
+merge-descriptors@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+
+merge-stream@^1.0.0, merge-stream@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
+ dependencies:
+ readable-stream "^2.0.1"
+
+merge@^1.1.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
+
+methods@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+
+micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7:
+ version "2.3.11"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ dependencies:
+ arr-diff "^2.0.0"
+ array-unique "^0.2.1"
+ braces "^1.8.2"
+ expand-brackets "^0.1.4"
+ extglob "^0.3.1"
+ filename-regex "^2.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.1"
+ kind-of "^3.0.2"
+ normalize-path "^2.0.1"
+ object.omit "^2.0.0"
+ parse-glob "^3.0.4"
+ regex-cache "^0.4.2"
+
+"mime-db@>= 1.27.0 < 2", mime-db@^1.28.0:
+ version "1.28.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.28.0.tgz#fedd349be06d2865b7fc57d837c6de4f17d7ac3c"
+
+mime-db@~1.27.0:
+ version "1.27.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
+
+mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
+ version "2.1.15"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
+ dependencies:
+ mime-db "~1.27.0"
+
+mime@1.2.11:
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
+
+mime@1.3.4:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+
+mime@^1.2.11, mime@^1.3.4:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
+
+min-document@^2.19.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
+ dependencies:
+ dom-walk "^0.1.0"
+
+minimalistic-assert@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+
+minimatch-all@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/minimatch-all/-/minimatch-all-1.1.0.tgz#40c496a27a2e128d19bf758e76bb01a0c7145787"
+ dependencies:
+ minimatch "^3.0.2"
+
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^2.0.1:
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
+ dependencies:
+ brace-expansion "^1.0.0"
+
+minimatch@~0.2.11:
+ version "0.2.14"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
+ dependencies:
+ lru-cache "2"
+ sigmund "~1.0.0"
+
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.0.tgz#cdf225e8898f840a258ded44fc91776770afdc93"
+
+minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+mkdirp@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
+mocha@^3.1.2:
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.4.2.tgz#d0ef4d332126dbf18d0d640c9b382dd48be97594"
+ dependencies:
+ browser-stdout "1.3.0"
+ commander "2.9.0"
+ debug "2.6.0"
+ diff "3.2.0"
+ escape-string-regexp "1.0.5"
+ glob "7.1.1"
+ growl "1.9.2"
+ json3 "3.3.2"
+ lodash.create "3.1.1"
+ mkdirp "0.5.1"
+ supports-color "3.1.2"
+
+ms@0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.0.tgz#865be94c2e7397ad8a57da6a633a6e2f30798b83"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
+ms@0.7.2:
+ version "0.7.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+
+multer@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/multer/-/multer-1.3.0.tgz#092b2670f6846fa4914965efc8cf94c20fec6cd2"
+ dependencies:
+ append-field "^0.1.0"
+ busboy "^0.2.11"
+ concat-stream "^1.5.0"
+ mkdirp "^0.5.1"
+ object-assign "^3.0.0"
+ on-finished "^2.3.0"
+ type-is "^1.6.4"
+ xtend "^4.0.0"
+
+multimatch@^2.0.0, multimatch@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
+ dependencies:
+ array-differ "^1.0.0"
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ minimatch "^3.0.0"
+
+multipipe@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
+ dependencies:
+ duplexer2 "0.0.2"
+
+multipipe@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-1.0.2.tgz#cc13efd833c9cda99f224f868461b8e1a3fd939d"
+ dependencies:
+ duplexer2 "^0.1.2"
+ object-assign "^4.1.0"
+
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+
+mute-stream@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.6.tgz#48962b19e169fd1dfc240b3f1e7317627bbc47db"
+
+mz@^2.4.0, mz@^2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce"
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
+natives@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
+ncname@1.0.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
+ dependencies:
+ xml-char-classes "^1.0.0"
+
+negotiator@0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+
+netrc@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/netrc/-/netrc-0.1.4.tgz#6be94fcaca8d77ade0a9670dc460914c94472444"
+
+no-case@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081"
+ dependencies:
+ lower-case "^1.1.1"
+
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+
+node-notifier@^5.0.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff"
+ dependencies:
+ growly "^1.3.0"
+ semver "^5.3.0"
+ shellwords "^0.1.0"
+ which "^1.2.12"
+
+node-status-codes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
+
+nodegit-promise@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/nodegit-promise/-/nodegit-promise-4.0.0.tgz#5722b184f2df7327161064a791d2e842c9167b34"
+ dependencies:
+ asap "~2.0.3"
+
+nomnom@^1.8.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7"
+ dependencies:
+ chalk "~0.4.0"
+ underscore "~1.6.0"
+
+nopt@^3.0.1:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
+ dependencies:
+ abbrev "1"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb"
+ dependencies:
+ hosted-git-info "^2.1.4"
+ is-builtin-module "^1.0.0"
+ semver "2 || 3 || 4 || 5"
+ validate-npm-package-license "^3.0.1"
+
+normalize-path@^2.0.0, normalize-path@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ dependencies:
+ remove-trailing-separator "^1.0.1"
+
+npm-run-path@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f"
+ dependencies:
+ path-key "^1.0.0"
+
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ dependencies:
+ path-key "^2.0.0"
+
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+"nwmatcher@>= 1.3.9 < 2.0.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.0.tgz#b4389362170e7ef9798c3c7716d80ebc0106fccf"
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
+obj-props@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/obj-props/-/obj-props-1.1.0.tgz#626313faa442befd4a44e9a02c3cb6bde937b511"
+
+object-assign@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
+
+object-assign@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
+
+object-assign@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
+
+object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+
+object-component@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
+
+object.omit@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ dependencies:
+ for-own "^0.1.4"
+ is-extendable "^0.1.1"
+
+obuf@^1.0.0, obuf@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e"
+
+on-finished@^2.3.0, on-finished@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ dependencies:
+ ee-first "1.1.1"
+
+on-finished@~2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.2.1.tgz#5c85c1cc36299f78029653f667f27b6b99ebc029"
+ dependencies:
+ ee-first "1.1.0"
+
+on-headers@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+once@~1.3.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
+opn@^3.0.2:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-3.0.3.tgz#b6d99e7399f78d65c3baaffef1fb288e9b85243a"
+ dependencies:
+ object-assign "^4.0.1"
+
+optimist@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
+optionator@^0.8.1, optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+options@>=0.0.5:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
+
+orchestrator@^0.3.0:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
+ dependencies:
+ end-of-stream "~0.1.5"
+ sequencify "~0.0.7"
+ stream-consume "~0.1.0"
+
+ordered-read-streams@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
+
+ordered-read-streams@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b"
+ dependencies:
+ is-stream "^1.0.1"
+ readable-stream "^2.0.1"
+
+os-homedir@^1.0.0, os-homedir@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+os-locale@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ dependencies:
+ lcid "^1.0.0"
+
+os-shim@^0.1.2:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
+
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+
+osenv@^0.1.0:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+package-json@^2.0.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
+ dependencies:
+ got "^5.0.0"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+package-json@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
+ dependencies:
+ got "^6.7.1"
+ registry-auth-token "^3.0.1"
+ registry-url "^3.0.3"
+ semver "^5.1.0"
+
+pako@~0.2.0:
+ version "0.2.9"
+ resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+
+param-case@2.1.x:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ dependencies:
+ no-case "^2.2.0"
+
+parse-filepath@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73"
+ dependencies:
+ is-absolute "^0.2.3"
+ map-cache "^0.2.0"
+ path-root "^0.1.1"
+
+parse-glob@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ dependencies:
+ glob-base "^0.3.0"
+ is-dotfile "^1.0.0"
+ is-extglob "^1.0.0"
+ is-glob "^2.0.0"
+
+parse-json@^2.1.0, parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+
+parse5@^1.4.1, parse5@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+
+parse5@^2.2.1, parse5@^2.2.2, parse5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-2.2.3.tgz#0c4fc41c1000c5e6b93d48b03f8083837834e9f6"
+
+parse5@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510"
+ dependencies:
+ "@types/node" "^6.0.46"
+
+parsejson@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseqs@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseuri@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
+ dependencies:
+ better-assert "~1.0.0"
+
+parseurl@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
+path-key@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af"
+
+path-key@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
+path-posix@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/path-posix/-/path-posix-1.0.0.tgz#06b26113f56beab042545a23bfa88003ccac260f"
+
+path-root-regex@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
+
+path-root@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
+ dependencies:
+ path-root-regex "^0.1.0"
+
+path-to-regexp@0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+
+path-to-regexp@^1.0.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ dependencies:
+ isarray "0.0.1"
+
+path-type@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ dependencies:
+ pify "^2.0.0"
+
+peek-stream@^1.1.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.2.tgz#97eb76365bcfd8c89e287f55c8b69d4c3e9bcc52"
+ dependencies:
+ duplexify "^3.5.0"
+ through2 "^2.0.3"
+
+pem@^1.8.3:
+ version "1.9.7"
+ resolved "https://registry.yarnpkg.com/pem/-/pem-1.9.7.tgz#d387f996f292c7c9dea639a535805e74cb503161"
+ dependencies:
+ os-tmpdir "^1.0.1"
+ which "^1.2.4"
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+
+pify@^2.0.0, pify@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-conf@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
+ dependencies:
+ find-up "^2.0.0"
+ load-json-file "^2.0.0"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-up@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
+ dependencies:
+ find-up "^1.0.0"
+
+plist@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/plist/-/plist-2.1.0.tgz#57ccdb7a0821df21831217a3cad54e3e146a1025"
+ dependencies:
+ base64-js "1.2.0"
+ xmlbuilder "8.2.2"
+ xmldom "0.1.x"
+
+plur@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
+ dependencies:
+ irregular-plurals "^1.0.0"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
+plylog@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/plylog/-/plylog-0.4.0.tgz#d8e0cecc4cfe6c34d1109e0e9daaa26fee8d4b73"
+ dependencies:
+ winston "^2.2.0"
+
+plylog@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/plylog/-/plylog-0.5.0.tgz#c976eba1d80d2dd991005d7c110daf874154788f"
+ dependencies:
+ "@types/node" "^4.2.3"
+ "@types/winston" "^2.2.0"
+ winston "^2.2.0"
+
+polymer-analyzer@^2.0.0, polymer-analyzer@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/polymer-analyzer/-/polymer-analyzer-2.0.2.tgz#2c1d8711d3674b4db8a08e11b382217c6b042f44"
+ dependencies:
+ "@types/chai-subset" "^1.3.0"
+ "@types/chalk" "^0.4.30"
+ "@types/clone" "^0.1.30"
+ "@types/cssbeautify" "^0.3.1"
+ "@types/doctrine" "^0.0.1"
+ "@types/escodegen" "^0.0.2"
+ "@types/estree" "^0.0.34"
+ "@types/node" "^6.0.0"
+ "@types/parse5" "^2.2.34"
+ chalk "^1.1.3"
+ clone "^2.0.0"
+ cssbeautify "^0.3.1"
+ doctrine "^2.0.0"
+ dom5 "^2.1.0"
+ escodegen "^1.7.0"
+ espree "^3.1.7"
+ estraverse "^4.2.0"
+ jsonschema "^1.1.0"
+ parse5 "^2.2.1"
+ shady-css-parser "0.0.8"
+ strip-indent "^2.0.0"
+ typescript "^2.2.0"
+
+polymer-build@^1.1.0, polymer-build@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/polymer-build/-/polymer-build-1.5.0.tgz#55631d3da8ffd0cefd62a5f6565a71614910ea84"
+ dependencies:
+ "@types/mz" "0.0.31"
+ "@types/node" "^6.0.73"
+ "@types/parse5" "^2.2.32"
+ "@types/vinyl" "^2.0.0"
+ "@types/vinyl-fs" "0.0.28"
+ dom5 "^2.2.0"
+ multipipe "^1.0.2"
+ mz "^2.6.0"
+ parse5 "^2.2.2"
+ plylog "^0.5.0"
+ polymer-analyzer "^2.0.1"
+ polymer-bundler "^2.0.0"
+ polymer-project-config "^3.0.0"
+ sw-precache "^5.1.1"
+ vinyl "^1.1.1"
+ vinyl-fs "^2.4.3"
+
+polymer-bundler@^2.0.0, polymer-bundler@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/polymer-bundler/-/polymer-bundler-2.0.1.tgz#c5b8e78fffe0c789b9d123cd999ad7cdad6bb50d"
+ dependencies:
+ clone "^2.1.0"
+ command-line-args "^3.0.1"
+ command-line-usage "^3.0.3"
+ dom5 "^2.2.0"
+ es6-promise "^2.1.0"
+ espree "^3.4.0"
+ mkdirp "^0.5.1"
+ nopt "^3.0.1"
+ parse5 "^2.2.2"
+ path-posix "^1.0.0"
+ polymer-analyzer "^2.0.0"
+ source-map "^0.5.6"
+
+polymer-cli@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/polymer-cli/-/polymer-cli-1.1.0.tgz#bac1c8510b8fc58b85787f4bb184e5e8149c8172"
+ dependencies:
+ "@types/babel-core" "^6.7.14"
+ "@types/chalk" "^0.4.31"
+ "@types/del" "^2.2.31"
+ "@types/findup-sync" "^0.3.29"
+ "@types/gulp-if" "0.0.30"
+ "@types/html-minifier" "^1.1.30"
+ "@types/inquirer" "0.0.32"
+ "@types/merge-stream" "^1.0.28"
+ "@types/mz" "^0.0.31"
+ "@types/request" "0.0.39"
+ "@types/resolve" "0.0.4"
+ "@types/semver" "^5.3.30"
+ "@types/temp" "^0.8.28"
+ "@types/update-notifier" "^1.0.0"
+ "@types/vinyl" "^2.0.0"
+ "@types/vinyl-fs" "0.0.28"
+ "@types/yeoman-generator" "^1.0.0"
+ babel-core "^6.24.1"
+ babel-plugin-external-helpers "^6.22.0"
+ babel-preset-babili "0.0.10"
+ babel-preset-es2015 "^6.18.0"
+ bower "1.8.0"
+ bower-json "^0.8.1"
+ bower-logger "^0.2.2"
+ chalk "^1.1.3"
+ command-line-args "^3.0.0"
+ command-line-commands "^1.0.3"
+ command-line-usage "^3.0.1"
+ css-slam "^1.1.0"
+ del "^2.2.2"
+ findup-sync "^0.4.2"
+ github "^7.2.1"
+ gulp-if "^2.0.0"
+ gunzip-maybe "^1.3.1"
+ html-minifier "^3.0.1"
+ inquirer "^1.0.2"
+ merge-stream "^1.0.1"
+ mz "^2.6.0"
+ plylog "^0.4.0"
+ polymer-analyzer "^2.0.0"
+ polymer-build "^1.5.0"
+ polymer-linter "^2.0.2"
+ polymer-project-config "^3.2.1"
+ polyserve "^0.19.0"
+ request "^2.72.0"
+ semver "^5.3.0"
+ tar-fs "^1.12.0"
+ temp "^0.8.3"
+ update-notifier "^1.0.0"
+ vinyl "^1.1.1"
+ vinyl-fs "^2.4.3"
+ web-component-tester "^6.0.0"
+ yeoman-environment "^1.5.2"
+ yeoman-generator "^1.0.1"
+
+polymer-linter@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/polymer-linter/-/polymer-linter-2.0.2.tgz#8e8c3a52bdae7015b3f30c8e92065dfa2762360f"
+ dependencies:
+ "@types/estree" "0.0.34"
+ "@types/fast-levenshtein" "0.0.1"
+ "@types/node" "^6"
+ "@types/parse5" "^2.2.34"
+ dom5 "^2.0.0"
+ estraverse "^4.2.0"
+ fast-levenshtein "^2.0.6"
+ parse5 "^2.2.1"
+ polymer-analyzer "^2.0.0"
+ strip-indent "^2.0.0"
+
+polymer-project-config@^3.0.0, polymer-project-config@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/polymer-project-config/-/polymer-project-config-3.2.1.tgz#e880e1a4dba436de9ecd85ed421742f6f3e0d1a2"
+ dependencies:
+ "@types/node" "^6.0.41"
+ jsonschema "^1.1.1"
+ minimatch-all "^1.1.0"
+ plylog "^0.5.0"
+
+polyserve@^0.19.0:
+ version "0.19.1"
+ resolved "https://registry.yarnpkg.com/polyserve/-/polyserve-0.19.1.tgz#76b28dc076866d6cf8657796f65a2e1e956812a5"
+ dependencies:
+ "@types/assert" "0.0.29"
+ "@types/babel-core" "^6.7.14"
+ "@types/compression" "^0.0.33"
+ "@types/content-type" "^1.0.33"
+ "@types/express" "^4.0.33"
+ "@types/mime" "0.0.29"
+ "@types/mz" "0.0.29"
+ "@types/node" "^6.0.0"
+ "@types/opn" "^3.0.28"
+ "@types/parse5" "^2.2.34"
+ "@types/pem" "^1.8.1"
+ "@types/serve-static" "^1.7.31"
+ "@types/spdy" "^3.4.1"
+ "@types/ua-parser-js" "^0.7.30"
+ babel-core "^6.18.2"
+ babel-plugin-transform-es2015-arrow-functions "^6.8.0"
+ babel-plugin-transform-es2015-block-scoped-functions "^6.8.0"
+ babel-plugin-transform-es2015-block-scoping "^6.18.0"
+ babel-plugin-transform-es2015-classes "^6.18.0"
+ babel-plugin-transform-es2015-computed-properties "^6.8.0"
+ babel-plugin-transform-es2015-destructuring "^6.19.0"
+ babel-plugin-transform-es2015-duplicate-keys "^6.8.0"
+ babel-plugin-transform-es2015-for-of "^6.18.0"
+ babel-plugin-transform-es2015-function-name "^6.9.0"
+ babel-plugin-transform-es2015-literals "^6.8.0"
+ babel-plugin-transform-es2015-object-super "^6.8.0"
+ babel-plugin-transform-es2015-parameters "^6.18.0"
+ babel-plugin-transform-es2015-shorthand-properties "^6.18.0"
+ babel-plugin-transform-es2015-spread "^6.8.0"
+ babel-plugin-transform-es2015-sticky-regex "^6.8.0"
+ babel-plugin-transform-es2015-template-literals "^6.8.0"
+ babel-plugin-transform-es2015-typeof-symbol "^6.18.0"
+ babel-plugin-transform-es2015-unicode-regex "^6.11.0"
+ babel-plugin-transform-regenerator "^6.16.1"
+ command-line-args "^3.0.1"
+ command-line-usage "^3.0.3"
+ compression "^1.6.2"
+ content-type "^1.0.2"
+ dom5 "^2.0.1"
+ express "^4.8.5"
+ find-port "^1.0.1"
+ http-proxy-middleware "^0.17.2"
+ lru-cache "^4.0.2"
+ mime "^1.3.4"
+ mz "^2.4.0"
+ opn "^3.0.2"
+ parse5 "^2.2.3"
+ pem "^1.8.3"
+ polymer-build "^1.1.0"
+ resolve "^1.0.0"
+ send "^0.14.1"
+ spdy "^3.3.3"
+ ua-parser-js "^0.7.12"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
+prepend-http@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+
+preserve@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+
+pretty-bytes@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+
+pretty-format@^19.0.0:
+ version "19.0.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84"
+ dependencies:
+ ansi-styles "^3.0.0"
+
+pretty-hrtime@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
+
+private@^0.1.6:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
+
+process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+
+process@~0.5.1:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+
+progress@1.1.8, progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
+promisify-node@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/promisify-node/-/promisify-node-0.4.0.tgz#32803874ec411784e4786c339902a87a179a469c"
+ dependencies:
+ nodegit-promise "~4.0.0"
+ object-assign "^4.0.1"
+
+proto-props@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/proto-props/-/proto-props-0.2.1.tgz#5e01dc2675a0de9abfa76e799dfa334d6f483f4b"
+
+proxy-addr@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.4.tgz#27e545f6960a44a627d9b44467e35c1b6b4ce2f3"
+ dependencies:
+ forwarded "~0.1.0"
+ ipaddr.js "1.3.0"
+
+prr@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
+
+pseudomap@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+
+pump@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51"
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.3.5.tgz#1b671c619940abcaeac0ad0e3a3c164be760993b"
+ dependencies:
+ duplexify "^3.1.2"
+ inherits "^2.0.1"
+ pump "^1.0.0"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
+q@1.4.1, q@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
+
+qs@6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+
+qs@~6.3.0:
+ version "6.3.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
+
+randomatic@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
+ dependencies:
+ is-number "^2.0.2"
+ kind-of "^3.0.2"
+
+range-parser@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175"
+
+range-parser@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+
+raw-body@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96"
+ dependencies:
+ bytes "2.4.0"
+ iconv-lite "0.4.15"
+ unpipe "1.0.0"
+
+rc@^1.0.1, rc@^1.1.6:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
+ dependencies:
+ deep-extend "~0.4.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+read-all-stream@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
+ dependencies:
+ pinkie-promise "^2.0.0"
+ readable-stream "^2.0.0"
+
+read-chunk@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.0.0.tgz#3246e877829116cec059674c4d5f300f7a9261f3"
+ dependencies:
+ pify "^2.3.0"
+
+read-pkg-up@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ dependencies:
+ find-up "^1.0.0"
+ read-pkg "^1.0.0"
+
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
+read-pkg@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ dependencies:
+ load-json-file "^1.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^1.0.0"
+
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
+readable-stream@1.1.x, readable-stream@~1.1.9:
+ version "1.1.14"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+"readable-stream@>=1.0.33-1 <1.1.0-0":
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9:
+ version "2.2.9"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8"
+ dependencies:
+ buffer-shims "~1.0.0"
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ string_decoder "~1.0.0"
+ util-deprecate "~1.0.1"
+
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ dependencies:
+ resolve "^1.1.6"
+
+redent@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ dependencies:
+ indent-string "^2.1.0"
+ strip-indent "^1.0.1"
+
+reduce-flatten@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-1.0.1.tgz#258c78efd153ddf93cb561237f61184f3696e327"
+
+redux-thunk@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
+
+redux@^3.0.5:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d"
+ dependencies:
+ lodash "^4.2.1"
+ lodash-es "^4.2.1"
+ loose-envify "^1.1.0"
+ symbol-observable "^1.0.2"
+
+regenerate@^1.2.1:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+
+regenerator-runtime@^0.10.0:
+ version "0.10.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+
+regenerator-transform@0.9.11:
+ version "0.9.11"
+ resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283"
+ dependencies:
+ babel-runtime "^6.18.0"
+ babel-types "^6.19.0"
+ private "^0.1.6"
+
+regex-cache@^0.4.2:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
+ dependencies:
+ is-equal-shallow "^0.1.3"
+ is-primitive "^2.0.0"
+
+regexpu-core@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+ dependencies:
+ regenerate "^1.2.1"
+ regjsgen "^0.2.0"
+ regjsparser "^0.1.4"
+
+registry-auth-token@^3.0.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006"
+ dependencies:
+ rc "^1.1.6"
+ safe-buffer "^5.0.1"
+
+registry-url@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ dependencies:
+ rc "^1.0.1"
+
+regjsgen@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+
+regjsparser@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+ dependencies:
+ jsesc "~0.5.0"
+
+relateurl@0.2.x:
+ version "0.2.7"
+ resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+
+remove-trailing-separator@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4"
+
+repeat-element@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+
+repeat-string@^1.5.2:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+replace-ext@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
+
+replace-ext@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
+
+req-all@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/req-all/-/req-all-1.0.0.tgz#d128569451c340b432409c656cf166260cd2628d"
+
+request@2.79.0, request@^2.53.0, request@^2.72.0, request@^2.79.0:
+ version "2.79.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.11.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~2.0.6"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ qs "~6.3.0"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "~0.4.1"
+ uuid "^3.0.0"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+
+require-main-filename@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
+requires-port@1.x.x:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+
+resolve-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-1.0.0.tgz#4eaeea41ed040d1702457df64a42b2b07d246f9f"
+ dependencies:
+ resolve-from "^2.0.0"
+
+resolve-dir@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
+ dependencies:
+ expand-tilde "^1.2.2"
+ global-modules "^0.2.3"
+
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
+resolve-from@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
+
+resolve@1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+
+resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
+ dependencies:
+ path-parse "^1.0.5"
+
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
+right-align@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ dependencies:
+ align-text "^0.1.1"
+
+rimraf@^2.2.0, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
+ dependencies:
+ glob "^7.0.5"
+
+rimraf@~2.2.6:
+ version "2.2.8"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582"
+
+rollup-plugin-babel@^2.6.1:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57"
+ dependencies:
+ babel-core "6"
+ babel-plugin-transform-es2015-classes "^6.9.0"
+ object-assign "^4.1.0"
+ rollup-pluginutils "^1.5.0"
+
+rollup-plugin-commonjs@^8.0.2:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.0.2.tgz#98b1589bfe32a6c0f67790b60c0b499972afed89"
+ dependencies:
+ acorn "^4.0.1"
+ estree-walker "^0.3.0"
+ magic-string "^0.19.0"
+ resolve "^1.1.7"
+ rollup-pluginutils "^2.0.1"
+
+rollup-plugin-node-resolve@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz#cbb783b0d15b02794d58915350b2f0d902b8ddc8"
+ dependencies:
+ browser-resolve "^1.11.0"
+ builtin-modules "^1.1.0"
+ resolve "^1.1.6"
+
+rollup-pluginutils@^1.5.0:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408"
+ dependencies:
+ estree-walker "^0.2.1"
+ minimatch "^3.0.2"
+
+rollup-pluginutils@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0"
+ dependencies:
+ estree-walker "^0.3.0"
+ micromatch "^2.3.11"
+
+rollup@^0.36.0:
+ version "0.36.4"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.36.4.tgz#a224494c5386c1d73d38f7bb86f69f5eb011a3d2"
+ dependencies:
+ source-map-support "^0.4.0"
+
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+run-async@^2.0.0, run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ dependencies:
+ is-promise "^2.1.0"
+
+run-sequence@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/run-sequence/-/run-sequence-1.2.2.tgz#5095a0bebe98733b0140bd08dd80ec030ddacdeb"
+ dependencies:
+ chalk "*"
+ gulp-util "*"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
+rx@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
+
+safe-buffer@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
+
+samsam@1.1.2, samsam@~1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
+
+sane@~1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3"
+ dependencies:
+ anymatch "^1.3.0"
+ exec-sh "^0.2.0"
+ fb-watchman "^1.8.0"
+ minimatch "^3.0.2"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+ watch "~0.10.0"
+
+sauce-connect-launcher@^1.0.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.2.tgz#7346cc8fbdc443191323439b0733451f5f3521f2"
+ dependencies:
+ adm-zip "~0.4.3"
+ async "^2.1.2"
+ https-proxy-agent "~1.0.0"
+ lodash "^4.16.6"
+ rimraf "^2.5.4"
+
+sax@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
+
+select-hose@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+
+selenium-standalone@^5.8.0:
+ version "5.11.2"
+ resolved "https://registry.yarnpkg.com/selenium-standalone/-/selenium-standalone-5.11.2.tgz#724ccaa72fb26f3711e0e20989e478c4133df844"
+ dependencies:
+ async "1.2.1"
+ commander "2.6.0"
+ lodash "3.9.3"
+ minimist "1.1.0"
+ mkdirp "0.5.0"
+ progress "1.1.8"
+ request "2.79.0"
+ tar-stream "1.5.2"
+ urijs "1.16.1"
+ which "1.1.1"
+ yauzl "^2.5.0"
+
+semver-diff@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ dependencies:
+ semver "^5.0.3"
+
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
+
+semver@^4.1.0:
+ version "4.3.6"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
+
+semver@~5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
+
+send@0.15.3:
+ version "0.15.3"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309"
+ dependencies:
+ debug "2.6.7"
+ depd "~1.1.0"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.8.0"
+ fresh "0.5.0"
+ http-errors "~1.6.1"
+ mime "1.3.4"
+ ms "2.0.0"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.1"
+
+send@^0.11.1:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.11.1.tgz#1beabfd42f9e2709f99028af3078ac12b47092d5"
+ dependencies:
+ debug "~2.1.1"
+ depd "~1.0.0"
+ destroy "1.0.3"
+ escape-html "1.0.1"
+ etag "~1.5.1"
+ fresh "0.2.4"
+ mime "1.2.11"
+ ms "0.7.0"
+ on-finished "~2.2.0"
+ range-parser "~1.0.2"
+
+send@^0.14.1:
+ version "0.14.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.14.2.tgz#39b0438b3f510be5dc6f667a11f71689368cdeef"
+ dependencies:
+ debug "~2.2.0"
+ depd "~1.1.0"
+ destroy "~1.0.4"
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ etag "~1.7.0"
+ fresh "0.3.0"
+ http-errors "~1.5.1"
+ mime "1.3.4"
+ ms "0.7.2"
+ on-finished "~2.3.0"
+ range-parser "~1.2.0"
+ statuses "~1.3.1"
+
+sequencify@~0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
+
+serve-static@1.12.3:
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.3.tgz#9f4ba19e2f3030c547f8af99107838ec38d5b1e2"
+ dependencies:
+ encodeurl "~1.0.1"
+ escape-html "~1.0.3"
+ parseurl "~1.3.1"
+ send "0.15.3"
+
+server-destroy@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd"
+
+serviceworker-cache-polyfill@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb"
+
+set-blocking@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+
+setprototypeof@1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08"
+
+setprototypeof@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+
+shady-css-parser@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/shady-css-parser/-/shady-css-parser-0.0.8.tgz#01eec5a6b9ec8e47edbda91b44dfe591279ea0d1"
+
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
+shebang-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+
+shelljs@^0.7.0, shelljs@^0.7.5:
+ version "0.7.7"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
+shellwords@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14"
+
+sigmund@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
+
+signal-exit@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+
+sinon-chai@^2.6.0:
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-2.10.0.tgz#6ab3008bb8cae9929e744d766574b4cf35f34b5b"
+
+sinon@^1.11.1:
+ version "1.17.7"
+ resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf"
+ dependencies:
+ formatio "1.1.1"
+ lolex "1.3.2"
+ samsam "1.1.2"
+ util ">=0.10.3 <1"
+
+slash@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
+slide@^1.1.5:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
+socket.io-adapter@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b"
+ dependencies:
+ debug "2.3.3"
+ socket.io-parser "2.3.1"
+
+socket.io-client@1.7.4:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz#ec9f820356ed99ef6d357f0756d648717bdd4281"
+ dependencies:
+ backo2 "1.0.2"
+ component-bind "1.0.0"
+ component-emitter "1.2.1"
+ debug "2.3.3"
+ engine.io-client "~1.8.4"
+ has-binary "0.1.7"
+ indexof "0.0.1"
+ object-component "0.0.3"
+ parseuri "0.0.5"
+ socket.io-parser "2.3.1"
+ to-array "0.1.4"
+
+socket.io-parser@2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0"
+ dependencies:
+ component-emitter "1.1.2"
+ debug "2.2.0"
+ isarray "0.0.1"
+ json3 "3.3.2"
+
+socket.io@^1.3.7:
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz#2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00"
+ dependencies:
+ debug "2.3.3"
+ engine.io "~1.8.4"
+ has-binary "0.1.7"
+ object-assign "4.1.0"
+ socket.io-adapter "0.5.0"
+ socket.io-client "1.7.4"
+ socket.io-parser "2.3.1"
+
+sort-keys-length@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188"
+ dependencies:
+ sort-keys "^1.0.0"
+
+sort-keys@^1.0.0, sort-keys@^1.1.1, sort-keys@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ dependencies:
+ is-plain-obj "^1.0.0"
+
+source-map-support@^0.4.0, source-map-support@^0.4.2:
+ version "0.4.15"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
+ dependencies:
+ source-map "^0.5.6"
+
+source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
+
+source-map@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
+ dependencies:
+ amdefine ">=0.0.4"
+
+source-map@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
+ dependencies:
+ amdefine ">=0.0.4"
+
+sparkles@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
+
+spawn-sync@^1.0.15:
+ version "1.0.15"
+ resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
+ dependencies:
+ concat-stream "^1.4.7"
+ os-shim "^0.1.2"
+
+spdx-correct@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+ dependencies:
+ spdx-license-ids "^1.0.2"
+
+spdx-expression-parse@~1.0.0:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+
+spdx-license-ids@^1.0.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+
+spdy-transport@^2.0.18:
+ version "2.0.20"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d"
+ dependencies:
+ debug "^2.6.8"
+ detect-node "^2.0.3"
+ hpack.js "^2.1.6"
+ obuf "^1.1.1"
+ readable-stream "^2.2.9"
+ safe-buffer "^5.0.1"
+ wbuf "^1.7.2"
+
+spdy@^3.3.3:
+ version "3.4.7"
+ resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
+ dependencies:
+ debug "^2.6.8"
+ handle-thing "^1.2.5"
+ http-deceiver "^1.2.7"
+ safe-buffer "^5.0.1"
+ select-hose "^2.0.0"
+ spdy-transport "^2.0.18"
+
+sprintf-js@^1.0.3, sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
+sshpk@^1.7.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jodid25519 "^1.0.0"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+stack-trace@0.0.x:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+
+stacky@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/stacky/-/stacky-1.3.1.tgz#3f117e5187b9a73d23f876d69f05c85b11804a12"
+ dependencies:
+ chalk "^1.1.1"
+ lodash "^3.0.0"
+
+"statuses@>= 1.3.1 < 2", statuses@~1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+
+stream-consume@^0.1.0, stream-consume@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f"
+
+stream-shift@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
+
+streamsearch@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
+
+string-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
+ dependencies:
+ strip-ansi "^3.0.0"
+
+string-template@~0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add"
+
+string-width@^1.0.1, string-width@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+string_decoder@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+stringstream@~0.0.4:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-ansi@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
+
+strip-bom-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee"
+ dependencies:
+ first-chunk-stream "^1.0.0"
+ strip-bom "^2.0.0"
+
+strip-bom-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca"
+ dependencies:
+ first-chunk-stream "^2.0.0"
+ strip-bom "^2.0.0"
+
+strip-bom@3.0.0, strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-bom@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
+ dependencies:
+ first-chunk-stream "^1.0.0"
+ is-utf8 "^0.2.0"
+
+strip-bom@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ dependencies:
+ is-utf8 "^0.2.0"
+
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+
+strip-indent@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ dependencies:
+ get-stdin "^4.0.1"
+
+strip-indent@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+supports-color@3.1.2, supports-color@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5"
+ dependencies:
+ has-flag "^1.0.0"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+sw-precache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.1.1.tgz#928720957463e55ed56777e177c4699f35ec59b6"
+ dependencies:
+ dom-urls "^1.1.0"
+ es6-promise "^4.0.5"
+ glob "^7.1.1"
+ lodash.defaults "^4.2.0"
+ lodash.template "^4.4.0"
+ meow "^3.7.0"
+ mkdirp "^0.5.1"
+ pretty-bytes "^4.0.2"
+ sw-toolbox "^3.4.0"
+ update-notifier "^1.0.3"
+
+sw-toolbox@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5"
+ dependencies:
+ path-to-regexp "^1.0.1"
+ serviceworker-cache-polyfill "^4.0.0"
+
+symbol-observable@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
+
+symbol-tree@^3.2.1:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+
+table-layout@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-0.3.0.tgz#6ee20dc483db371b3e5c87f704ed2f7c799d2c9a"
+ dependencies:
+ array-back "^1.0.3"
+ core-js "^2.4.1"
+ deep-extend "~0.4.1"
+ feature-detect-es6 "^1.3.1"
+ typical "^2.6.0"
+ wordwrapjs "^2.0.0-0"
+
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
+tar-fs@^1.12.0:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.15.2.tgz#761f5b32932c7b39461a60d537faea0d8084830c"
+ dependencies:
+ chownr "^1.0.1"
+ mkdirp "^0.5.1"
+ pump "^1.0.0"
+ tar-stream "^1.1.2"
+
+tar-stream@1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.2.tgz#fbc6c6e83c1a19d4cb48c7d96171fc248effc7bf"
+ dependencies:
+ bl "^1.0.0"
+ end-of-stream "^1.0.0"
+ readable-stream "^2.0.0"
+ xtend "^4.0.0"
+
+tar-stream@^1.1.2, tar-stream@^1.5.0:
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.4.tgz#36549cf04ed1aee9b2a30c0143252238daf94016"
+ dependencies:
+ bl "^1.0.0"
+ end-of-stream "^1.0.0"
+ readable-stream "^2.0.0"
+ xtend "^4.0.0"
+
+temp@^0.8.1, temp@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
+ dependencies:
+ os-tmpdir "^1.0.0"
+ rimraf "~2.2.6"
+
+term-size@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca"
+ dependencies:
+ execa "^0.4.0"
+
+ternary-stream@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-2.0.1.tgz#064e489b4b5bf60ba6a6b7bc7f2f5c274ecf8269"
+ dependencies:
+ duplexify "^3.5.0"
+ fork-stream "^0.0.4"
+ merge-stream "^1.0.0"
+ through2 "^2.0.1"
+
+test-exclude@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+ dependencies:
+ arrify "^1.0.1"
+ micromatch "^2.3.11"
+ object-assign "^4.1.0"
+ read-pkg-up "^1.0.1"
+ require-main-filename "^1.0.1"
+
+test-fixture@PolymerElements/test-fixture:
+ version "3.0.0-rc.1"
+ resolved "https://codeload.github.com/PolymerElements/test-fixture/tar.gz/26118ef0467501c33c02316e7016a2837baba10f"
+
+test-value@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291"
+ dependencies:
+ array-back "^1.0.3"
+ typical "^2.6.0"
+
+text-table@^0.2.0, text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
+"textextensions@1 || 2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-1.0.2.tgz#65486393ee1f2bb039a60cbba05b0b68bd9501d2"
+
+the-argv@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/the-argv/-/the-argv-1.0.0.tgz#0084705005730dd84db755253c931ae398db9522"
+
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839"
+ dependencies:
+ any-promise "^1.0.0"
+
+throat@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6"
+
+through2-filter@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec"
+ dependencies:
+ through2 "~2.0.0"
+ xtend "~4.0.0"
+
+through2@^0.6.0, through2@^0.6.1:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+ dependencies:
+ readable-stream ">=1.0.33-1 <1.1.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
+
+through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
+ dependencies:
+ readable-stream "^2.1.5"
+ xtend "~4.0.1"
+
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
+tildify@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
+ dependencies:
+ os-homedir "^1.0.0"
+
+time-stamp@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
+
+timed-out@^3.0.0:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
+
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+
+tmp@^0.0.29:
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0"
+ dependencies:
+ os-tmpdir "~1.0.1"
+
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+
+to-absolute-glob@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f"
+ dependencies:
+ extend-shallow "^2.0.1"
+
+to-array@0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
+
+to-fast-properties@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+
+tough-cookie@^2.3.2, tough-cookie@~2.3.0:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
+ dependencies:
+ punycode "^1.4.1"
+
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+
+trim-newlines@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+
+trim-right@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+
+tryit@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+
+tunnel-agent@~0.4.1:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+type-detect@0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822"
+
+type-detect@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
+
+type-is@^1.6.4, type-is@~1.6.15:
+ version "1.6.15"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+ dependencies:
+ media-typer "0.3.0"
+ mime-types "~2.1.15"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
+typescript@^2.2.0:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.4.tgz#3d38321828231e434f287514959c37a82b629f42"
+
+typical@^2.6.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d"
+
+ua-parser-js@^0.7.12:
+ version "0.7.12"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb"
+
+uglify-js@3.0.x:
+ version "3.0.14"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.14.tgz#2697af126fd215aac556facb1edfb17875204760"
+ dependencies:
+ commander "~2.9.0"
+ source-map "~0.5.1"
+
+uglify-js@^2.6:
+ version "2.8.27"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c"
+ dependencies:
+ source-map "~0.5.1"
+ yargs "~3.10.0"
+ optionalDependencies:
+ uglify-to-browserify "~1.0.0"
+
+uglify-to-browserify@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+
+ultron@1.0.x:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"
+
+unc-path-regex@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
+
+underscore.string@3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db"
+ dependencies:
+ sprintf-js "^1.0.3"
+ util-deprecate "^1.0.2"
+
+underscore@^1.8.3:
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
+
+underscore@~1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
+
+unique-stream@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
+
+unique-stream@^2.0.2:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369"
+ dependencies:
+ json-stable-stringify "^1.0.0"
+ through2-filter "^2.0.0"
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ dependencies:
+ crypto-random-string "^1.0.0"
+
+unpipe@1.0.0, unpipe@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+
+untildify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/untildify/-/untildify-2.1.0.tgz#17eb2807987f76952e9c0485fc311d06a826a2e0"
+ dependencies:
+ os-homedir "^1.0.0"
+
+unzip-response@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
+
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+
+update-notifier@^1.0.0, update-notifier@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a"
+ dependencies:
+ boxen "^0.6.0"
+ chalk "^1.0.0"
+ configstore "^2.0.0"
+ is-npm "^1.0.0"
+ latest-version "^2.0.0"
+ lazy-req "^1.1.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^2.0.0"
+
+update-notifier@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9"
+ dependencies:
+ boxen "^1.0.0"
+ chalk "^1.0.0"
+ configstore "^3.0.0"
+ is-npm "^1.0.0"
+ latest-version "^3.0.0"
+ lazy-req "^2.0.0"
+ semver-diff "^2.0.0"
+ xdg-basedir "^3.0.0"
+
+upper-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+
+urijs@1.16.1, urijs@^1.16.1:
+ version "1.16.1"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.16.1.tgz#859ad31890f5f9528727be89f1932c94fb4731e2"
+
+url-parse-lax@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ dependencies:
+ prepend-http "^1.0.1"
+
+user-home@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ dependencies:
+ os-homedir "^1.0.0"
+
+util-deprecate@^1.0.2, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+
+"util@>=0.10.3 <1":
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ dependencies:
+ inherits "2.0.1"
+
+utils-merge@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
+
+uuid@^2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+
+uuid@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
+
+v8flags@^2.0.2:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
+ dependencies:
+ user-home "^1.1.1"
+
+vali-date@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6"
+
+validate-npm-package-license@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ dependencies:
+ spdx-correct "~1.0.0"
+ spdx-expression-parse "~1.0.0"
+
+vargs@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff"
+
+vary@~1.1.0, vary@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
+
+verror@1.3.6:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
+ dependencies:
+ extsprintf "1.0.2"
+
+vinyl-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a"
+ dependencies:
+ graceful-fs "^4.1.2"
+ pify "^2.3.0"
+ pinkie-promise "^2.0.0"
+ strip-bom "^2.0.0"
+ strip-bom-stream "^2.0.0"
+ vinyl "^1.1.0"
+
+vinyl-fs@^0.3.0:
+ version "0.3.14"
+ resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
+ dependencies:
+ defaults "^1.0.0"
+ glob-stream "^3.1.5"
+ glob-watcher "^0.0.6"
+ graceful-fs "^3.0.0"
+ mkdirp "^0.5.0"
+ strip-bom "^1.0.0"
+ through2 "^0.6.1"
+ vinyl "^0.4.0"
+
+vinyl-fs@^2.4.3:
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239"
+ dependencies:
+ duplexify "^3.2.0"
+ glob-stream "^5.3.2"
+ graceful-fs "^4.0.0"
+ gulp-sourcemaps "1.6.0"
+ is-valid-glob "^0.3.0"
+ lazystream "^1.0.0"
+ lodash.isequal "^4.0.0"
+ merge-stream "^1.0.0"
+ mkdirp "^0.5.0"
+ object-assign "^4.0.0"
+ readable-stream "^2.0.4"
+ strip-bom "^2.0.0"
+ strip-bom-stream "^1.0.0"
+ through2 "^2.0.0"
+ through2-filter "^2.0.0"
+ vali-date "^1.0.0"
+ vinyl "^1.0.0"
+
+vinyl@^0.4.0:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
+ dependencies:
+ clone "^0.2.0"
+ clone-stats "^0.0.1"
+
+vinyl@^0.5.0:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
+ dependencies:
+ clone "^1.0.0"
+ clone-stats "^0.0.1"
+ replace-ext "0.0.1"
+
+vinyl@^1.0.0, vinyl@^1.1.0, vinyl@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
+ dependencies:
+ clone "^1.0.0"
+ clone-stats "^0.0.1"
+ replace-ext "0.0.1"
+
+vinyl@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c"
+ dependencies:
+ clone "^1.0.0"
+ clone-buffer "^1.0.0"
+ clone-stats "^1.0.0"
+ cloneable-readable "^1.0.0"
+ is-stream "^1.1.0"
+ remove-trailing-separator "^1.0.1"
+ replace-ext "^1.0.0"
+
+vlq@^0.2.1:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1"
+
+walkdir@^0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.11.tgz#a16d025eb931bd03b52f308caed0f40fcebe9532"
+
+walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ dependencies:
+ makeerror "1.0.x"
+
+watch@~0.10.0:
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
+
+wbuf@^1.1.0, wbuf@^1.7.2:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe"
+ dependencies:
+ minimalistic-assert "^1.0.0"
+
+wct-local@^2.0.15:
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/wct-local/-/wct-local-2.0.15.tgz#b5e3758e32e5d70c54d129fd6571d7cc14cf31e2"
+ dependencies:
+ "@types/chalk" "^0.4.28"
+ "@types/express" "^4.0.30"
+ "@types/freeport" "^1.0.19"
+ "@types/launchpad" "^0.6.0"
+ "@types/node" "^6.0.31"
+ "@types/which" "^1.0.27"
+ chalk "^1.1.1"
+ cleankill "^1.0.3"
+ freeport "^1.0.4"
+ launchpad "^0.6.0"
+ promisify-node "^0.4.0"
+ selenium-standalone "^5.8.0"
+ which "^1.0.8"
+
+wct-sauce@^2.0.0-pre.1:
+ version "2.0.0-pre.1"
+ resolved "https://registry.yarnpkg.com/wct-sauce/-/wct-sauce-2.0.0-pre.1.tgz#3b804607c550a0325de9137f3316be9562c06035"
+ dependencies:
+ chalk "^1.1.1"
+ cleankill "^1.0.0"
+ lodash "^3.0.1"
+ request "^2.53.0"
+ sauce-connect-launcher "^1.0.0"
+ temp "^0.8.1"
+ uuid "^2.0.1"
+
+wd@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/wd/-/wd-1.2.0.tgz#4112c4657eca5af593ebc060d54b80caeea04807"
+ dependencies:
+ archiver "1.3.0"
+ async "2.0.1"
+ lodash "4.16.2"
+ mkdirp "^0.5.1"
+ q "1.4.1"
+ request "2.79.0"
+ underscore.string "3.3.4"
+ vargs "0.1.0"
+
+web-component-tester@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/web-component-tester/-/web-component-tester-6.0.0.tgz#6abc08eafd7113a9ccf7873c225e9ccffd207523"
+ dependencies:
+ "@types/body-parser" "0.0.33"
+ "@types/chai" "^3.4.34"
+ "@types/chalk" "^0.4.31"
+ "@types/express" "^4.0.33"
+ "@types/glob" "^5.0.30"
+ "@types/grunt" "^0.4.20"
+ "@types/gulp" "^3.8.32"
+ "@types/lodash" "^4.14.38"
+ "@types/mime" "0.0.29"
+ "@types/minimatch" "^2.0.29"
+ "@types/mocha" "^2.2.32"
+ "@types/multer" "0.0.32"
+ "@types/node" "4.0.30"
+ "@types/nomnom" "0.0.28"
+ "@types/semver" "^5.3.30"
+ "@types/sinon" "^1.16.31"
+ "@types/sinon-chai" "^2.7.27"
+ "@types/socket.io" "^1.4.27"
+ accessibility-developer-tools "^2.10.0"
+ async "^1.5.0"
+ body-parser "^1.14.2"
+ chai "^3.2.0"
+ chalk "^1.1.1"
+ cleankill "^1.0.0"
+ express "^4.8.5"
+ findup-sync "^0.4.3"
+ glob "^7.1.1"
+ lodash "^3.0.1"
+ mocha "^3.1.2"
+ multer "^1.1.0"
+ nomnom "^1.8.1"
+ polyserve "^0.19.0"
+ promisify-node "^0.4.0"
+ resolve "^1.0.0"
+ semver "^5.3.0"
+ send "^0.11.1"
+ server-destroy "^1.0.1"
+ sinon "^1.11.1"
+ sinon-chai "^2.6.0"
+ socket.io "^1.3.7"
+ stacky "^1.3.1"
+ test-fixture PolymerElements/test-fixture
+ wd "^1.0.0"
+ optionalDependencies:
+ update-notifier "^1.0.0"
+ wct-local "^2.0.15"
+ wct-sauce "^2.0.0-pre.1"
+
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+
+webidl-conversions@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0"
+
+whatwg-encoding@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
+ dependencies:
+ iconv-lite "0.4.13"
+
+whatwg-url@^4.3.0:
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0"
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+which-module@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+
+which@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.1.1.tgz#9ce512459946166e12c083f08ec073380fc8cbbb"
+ dependencies:
+ is-absolute "^0.1.7"
+
+which@^1.0.8, which@^1.1.1, which@^1.2.12, which@^1.2.4, which@^1.2.8, which@^1.2.9:
+ version "1.2.14"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5"
+ dependencies:
+ isexe "^2.0.0"
+
+widest-line@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
+ dependencies:
+ string-width "^1.0.1"
+
+window-size@0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+
+winston@^2.2.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/winston/-/winston-2.3.1.tgz#0b48420d978c01804cf0230b648861598225a119"
+ dependencies:
+ async "~1.0.0"
+ colors "1.0.x"
+ cycle "1.0.x"
+ eyes "0.1.x"
+ isstream "0.1.x"
+ stack-trace "0.0.x"
+
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+wordwrapjs@^2.0.0-0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-2.0.0.tgz#ab55f695e6118da93858fdd70c053d1c5e01ac20"
+ dependencies:
+ array-back "^1.0.3"
+ feature-detect-es6 "^1.3.1"
+ reduce-flatten "^1.0.1"
+ typical "^2.6.0"
+
+worker-farm@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff"
+ dependencies:
+ errno ">=0.1.1 <0.2.0-0"
+ xtend ">=4.0.0 <4.1.0-0"
+
+wrap-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ dependencies:
+ string-width "^1.0.1"
+ strip-ansi "^3.0.1"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write-file-atomic@^1.1.2:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write-file-atomic@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.1.0.tgz#1769f4b551eedce419f0505deae2e26763542d37"
+ dependencies:
+ graceful-fs "^4.1.11"
+ imurmurhash "^0.1.4"
+ slide "^1.1.5"
+
+write-json-file@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.2.0.tgz#51862506bbb3b619eefab7859f1fd6c6d0530876"
+ dependencies:
+ detect-indent "^5.0.0"
+ graceful-fs "^4.1.2"
+ make-dir "^1.0.0"
+ pify "^2.0.0"
+ sort-keys "^1.1.1"
+ write-file-atomic "^2.0.0"
+
+write-pkg@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-2.1.0.tgz#353aa44c39c48c21440f5c08ce6abd46141c9c08"
+ dependencies:
+ sort-keys "^1.1.2"
+ write-json-file "^2.0.0"
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
+ws@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+ws@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61"
+ dependencies:
+ options ">=0.0.5"
+ ultron "1.0.x"
+
+wtf-8@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"
+
+xdg-basedir@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
+ dependencies:
+ os-homedir "^1.0.0"
+
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+
+xml-char-classes@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+
+xml-name-validator@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+
+xmlbuilder@8.2.2:
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773"
+
+xmldom@0.1.x:
+ version "0.1.27"
+ resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"
+
+xmlhttprequest-ssl@1.5.3:
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d"
+
+xo-init@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/xo-init/-/xo-init-0.5.0.tgz#8e28dec79676cc5e042fde5fd8f710e2646b0e36"
+ dependencies:
+ arrify "^1.0.0"
+ execa "^0.5.0"
+ minimist "^1.1.3"
+ path-exists "^3.0.0"
+ read-pkg-up "^2.0.0"
+ the-argv "^1.0.0"
+ write-pkg "^2.0.0"
+
+xo@^0.18.0:
+ version "0.18.2"
+ resolved "https://registry.yarnpkg.com/xo/-/xo-0.18.2.tgz#92a42eb02a4fb149dfea5518021914f5aac84ff0"
+ dependencies:
+ arrify "^1.0.0"
+ debug "^2.2.0"
+ deep-assign "^1.0.0"
+ eslint "^3.18.0"
+ eslint-config-xo "^0.18.0"
+ eslint-formatter-pretty "^1.0.0"
+ eslint-plugin-ava "^4.2.0"
+ eslint-plugin-import "^2.0.0"
+ eslint-plugin-no-use-extend-native "^0.3.2"
+ eslint-plugin-promise "^3.4.0"
+ eslint-plugin-unicorn "^2.1.0"
+ get-stdin "^5.0.0"
+ globby "^6.0.0"
+ has-flag "^2.0.0"
+ ignore "^3.2.6"
+ lodash.isequal "^4.4.0"
+ meow "^3.4.2"
+ multimatch "^2.1.0"
+ path-exists "^3.0.0"
+ pkg-conf "^2.0.0"
+ resolve-cwd "^1.0.0"
+ resolve-from "^2.0.0"
+ slash "^1.0.0"
+ update-notifier "^2.1.0"
+ xo-init "^0.5.0"
+
+"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+
+y18n@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+
+yallist@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+yargs-parser@^4.2.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ dependencies:
+ camelcase "^3.0.0"
+
+yargs@^6.3.0:
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ dependencies:
+ camelcase "^3.0.0"
+ cliui "^3.2.0"
+ decamelize "^1.1.1"
+ get-caller-file "^1.0.1"
+ os-locale "^1.4.0"
+ read-pkg-up "^1.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^1.0.1"
+ set-blocking "^2.0.0"
+ string-width "^1.0.2"
+ which-module "^1.0.0"
+ y18n "^3.2.1"
+ yargs-parser "^4.2.0"
+
+yargs@~3.10.0:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ dependencies:
+ camelcase "^1.0.2"
+ cliui "^2.1.0"
+ decamelize "^1.0.0"
+ window-size "0.1.0"
+
+yauzl@^2.5.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.8.0.tgz#79450aff22b2a9c5a41ef54e02db907ccfbf9ee2"
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.0.1"
+
+yeast@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
+
+yeoman-environment@^1.1.0, yeoman-environment@^1.5.2:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-1.6.6.tgz#cd85fa67d156060e440d7807d7ef7cf0d2d1d671"
+ dependencies:
+ chalk "^1.0.0"
+ debug "^2.0.0"
+ diff "^2.1.2"
+ escape-string-regexp "^1.0.2"
+ globby "^4.0.0"
+ grouped-queue "^0.3.0"
+ inquirer "^1.0.2"
+ lodash "^4.11.1"
+ log-symbols "^1.0.1"
+ mem-fs "^1.1.0"
+ text-table "^0.2.0"
+ untildify "^2.0.0"
+
+yeoman-generator@^1.0.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-1.1.1.tgz#40c2b4f6cdfbe05e1952fdd72933f0d8925dbdf5"
+ dependencies:
+ async "^2.0.0"
+ chalk "^1.0.0"
+ class-extend "^0.1.0"
+ cli-table "^0.3.1"
+ cross-spawn "^5.0.1"
+ dargs "^5.1.0"
+ dateformat "^2.0.0"
+ debug "^2.1.0"
+ detect-conflict "^1.0.0"
+ error "^7.0.2"
+ find-up "^2.1.0"
+ github-username "^3.0.0"
+ glob "^7.0.3"
+ istextorbinary "^2.1.0"
+ lodash "^4.11.1"
+ mem-fs-editor "^3.0.0"
+ minimist "^1.2.0"
+ mkdirp "^0.5.0"
+ path-exists "^3.0.0"
+ path-is-absolute "^1.0.0"
+ pretty-bytes "^4.0.2"
+ read-chunk "^2.0.0"
+ read-pkg-up "^2.0.0"
+ rimraf "^2.2.0"
+ run-async "^2.0.0"
+ shelljs "^0.7.0"
+ text-table "^0.2.0"
+ through2 "^2.0.0"
+ user-home "^2.0.0"
+ yeoman-environment "^1.1.0"
+
+zip-stream@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.1.1.tgz#5216b48bbb4d2651f64d5c6e6f09eb4a7399d557"
+ dependencies:
+ archiver-utils "^1.3.0"
+ compress-commons "^1.1.0"
+ lodash "^4.8.0"
+ readable-stream "^2.0.0"
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/.bower.json
new file mode 100644
index 00000000000..4bc7494e1d7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/.bower.json
@@ -0,0 +1,46 @@
+{
+ "name": "polymer",
+ "main": [
+ "polymer.html"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "ignore": [
+ "/.*",
+ "/test/",
+ "/util/",
+ "gulpfile.js",
+ "CONTRIBUTING.md",
+ "CHANGELOG.md"
+ ],
+ "authors": [
+ "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Polymer/polymer.git"
+ },
+ "dependencies": {
+ "shadycss": "webcomponents/shadycss#^v1.1.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^v1.1.0"
+ },
+ "devDependencies": {
+ "web-component-tester": "^6.0.0",
+ "test-fixture": "PolymerElements/test-fixture#3.0.0-rc.1",
+ "iron-component-page": "PolymerElements/iron-component-page#^3.0.1"
+ },
+ "private": true,
+ "resolutions": {
+ "test-fixture": "3.0.0-rc.1"
+ },
+ "homepage": "https://github.com/Polymer/polymer",
+ "version": "2.6.0",
+ "_release": "2.6.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.6.0",
+ "commit": "00d510f17a19b5b2ffed2fab5c2220b562b69b4f"
+ },
+ "_source": "https://github.com/Polymer/polymer.git",
+ "_target": "^2.0.0",
+ "_originalSource": "Polymer/polymer"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/LICENSE.txt b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/LICENSE.txt
new file mode 100644
index 00000000000..87c683b8e83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/LICENSE.txt
@@ -0,0 +1,27 @@
+// Copyright (c) 2017 The Polymer Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/README.md
new file mode 100644
index 00000000000..2cfffd68c4c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/README.md
@@ -0,0 +1,522 @@
+# Polymer
+
+[![Build Status](https://travis-ci.org/Polymer/polymer.svg?branch=master)](https://travis-ci.org/Polymer/polymer)
+
+Polymer lets you build encapsulated, reusable elements that work just like standard HTML elements, to use in building web applications.
+
+```html
+<!-- Polyfill Web Components for older browsers -->
+<script src="webcomponentsjs/webcomponents-lite.js"></script>
+
+<!-- Import element -->
+<link rel="import" href="google-map.html">
+
+<!-- Use element -->
+<google-map latitude="37.790" longitude="-122.390"></google-map>
+```
+
+Check out [polymer-project.org](https://www.polymer-project.org) for all of the library documentation, including getting started guides, tutorials, developer reference, and more.
+
+Or if you'd just like to download the library, check out our [releases page](https://github.com/polymer/polymer/releases).
+
+## Polymer 2.0 is out!
+
+Polymer 2.0 is released, and will be the future focus of Polymer development going forward. We intend to keep the 2.x public API stable barring critical issues. For background and migration information on the 2.x see the [2.0 documentation](https://www.polymer-project.org/2.0/docs/about_20) on the website or the [2.0 section below](#2-0), and we welcome your feedback via [issues](https://github.com/Polymer/polymer/issues/new) or [Slack](https://polymer-slack.herokuapp.com/).
+
+**To evaluate Polymer 2.0**, please point your bower at the latest `2.0.0` tag for polymer, and be sure load to the `webcomponentsjs/webcomponents-lite.js` or `webcomponentsjs/webcomponents-loader.js` polyfills from the latest `v1.0.0` tag of [`webcomponentsjs`](https://github.com/webcomponents/webcomponentsjs).
+
+👀 **Looking for Polymer v1.x?** Please see the [the v1 branch](https://github.com/Polymer/polymer/tree/1.x).
+
+⁉️ **Looking to use Polymer with npm?** Polymer 1.x and 2.x both use `bower` for version management, but v3 and on will use `npm`. Please see our [v3 announcement](https://www.polymer-project.org/blog/2017-08-22-npm-modules.html) and [v3 hand-on](https://www.polymer-project.org/blog/2017-08-23-hands-on-30-preview.html) to use a preview version of v3.
+Versions before 3.0 are also published to npm "as-is" and are generally unsupported. These packages are for advanced users who configure their own tooling to work around the differences between Bower and npm packages, like package folder layout.
+
+## Overview
+
+Polymer is a lightweight library built on top of the web standards-based [Web Components](http://webcomponents.org/) APIs, and makes it easier to build your very own custom HTML elements. Creating reusable custom elements - and using elements built by others - can make building complex web applications easier and more efficient. By being based on the Web Components API's built in the browser (or [polyfilled](https://github.com/webcomponents/webcomponentsjs) where needed), Polymer elements are interoperable at the browser level, and can be used with other frameworks or libraries that work with modern browsers.
+
+Among many ways to leverage custom elements, they can be particularly useful for building reusable UI components. Instead of continually re-building a specific navigation bar or button in different frameworks and for different projects, you can define this element once using Polymer, and then reuse it throughout your project or in any future project.
+
+Polymer provides a declarative syntax to easily create your own custom elements, using all standard web technologies - define the structure of the element with HTML, style it with CSS, and add interactions to the element with JavaScript.
+
+Polymer also provides optional two-way data-binding, meaning:
+
+1. When properties in the model for an element get updated, the element can update itself in response.
+2. When the element is updated internally, the changes can be propagated back to the model.
+
+Polymer is designed to be flexible, lightweight, and close to the web platform - the library doesn't invent complex new abstractions and magic, but uses the best features of the web platform in straightforward ways to simply sugar the creation of custom elements.
+
+In addition to the Polymer library for building your own custom elements, the Polymer project includes a collection of [pre-built elements](https://elements.polymer-project.org) that you can drop on a page and use immediately, or use as starting points for your own custom elements.
+
+## Polymer in 1 Minute
+
+Polymer adds convenient features to make it easy to build complex elements:
+
+**Basic custom element without Polymer:**
+
+```js
+// Standard custom element that Extends HTMLElement
+class MyElement extends HTMLElement {
+ constructor() {
+ super();
+ console.log('my-element was created!');
+ }
+}
+
+// Register custom element class with browser
+customElements.define('my-element', MyElement);
+```
+
+```html
+<!-- use the element -->
+<my-element></my-element>
+```
+
+**Custom element using Polymer**
+
+```html
+<!-- Define template that your element will use -->
+<dom-module id="my-simple-namecard">
+ <template>
+ <div>
+ Hi! My name is <span>Jane</span>
+ </div>
+ </template>
+</dom-module>
+```
+
+```js
+// Custom element that extends Polymer base class
+class MySimpleNamecard extends Polymer.Element {
+
+ // Stamp template from this dom-module into element's shadow DOM:
+ static get is() { return 'my-simple-namecard'; }
+
+}
+
+// Register custom element class with browser
+customElements.define(MySimpleNamecard.is, MySimpleNamecard);
+```
+
+**Configure properties on your element...**
+
+```js
+// Create an element that takes a property
+class MyPropertyNamecard extends Polymer.Element {
+
+ static get is() { return 'my-property-namecard'; }
+
+ // Define property/attribute API:
+ static get properties() {
+ return {
+ myName: {
+ type: String,
+ observer: 'myNameChanged'
+ }
+ };
+ }
+
+ myNameChanged(myName) {
+ this.textContent = 'Hi! My name is ' + myName;
+ }
+
+}
+
+customElements.define(MyPropertyNamecard.is, MyPropertyNamecard);
+```
+
+**...and have them set using declarative attributes**
+
+```html
+<!-- using the element -->
+<my-property-namecard my-name="Jim"></my-property-namecard>
+```
+
+> Hi! My name is Jim
+
+**Bind data into your element using the familiar mustache-syntax**
+
+```html
+<!-- Define template with bindings -->
+<dom-module id="my-bound-namecard">
+ <template>
+ <div>
+ Hi! My name is <span>[[myName]]</span>
+ </div>
+ </template>
+</dom-module>
+```
+```js
+class MyBoundNamecard extends Polymer.Element {
+
+ static get is() { return 'my-bound-namecard'; }
+
+ static get properties() {
+ return {
+ myName: String
+ };
+ }
+
+}
+
+customElements.define(MyBoundNamecard.is, MyBoundNamecard);
+```
+
+```html
+<!-- using the element -->
+<my-bound-namecard my-name="Josh"></my-bound-namecard>
+```
+
+> Hi! My name is Josh
+
+**Style the internals of your element, without the style leaking out**
+
+```html
+<!-- Add style to your element -->
+<dom-module id="my-styled-namecard">
+ <template>
+ <style>
+ /* This would be crazy without webcomponents, but with shadow DOM */
+ /* it only applies to this element's private "shadow DOM" */
+ span {
+ font-weight: bold;
+ }
+ </style>
+
+ <div>
+ Hi! My name is <span>{{myName}}</span>
+ </div>
+ </template>
+</dom-module>
+```
+```js
+class MyStyledNamecard extends Polymer.Element {
+
+ static get is() { return 'my-styled-namecard'; }
+
+ static get properties() {
+ return {
+ myName: String
+ };
+ }
+
+}
+
+customElements.define(MyStyledNamecard.is, MyStyledNamecard);
+```
+```html
+<!-- using the element -->
+<my-styled-namecard my-name="Jesse"></my-styled-namecard>
+```
+
+> Hi! My name is **Jesse**
+
+**and so much more!**
+
+Web components are an incredibly powerful new set of primitives baked into the web platform, and open up a whole new world of possibility when it comes to componentizing front-end code and easily creating powerful, immersive, app-like experiences on the web.
+
+By being based on Web Components, elements built with Polymer are:
+
+* Built from the platform up
+* Self-contained
+* Don't require an overarching framework - are interoperable across frameworks
+* Re-usable
+
+## Contributing
+
+The Polymer team loves contributions from the community! Take a look at our [contributing guide](CONTRIBUTING.md) for more information on how to contribute.
+
+## Communicating with the Polymer team
+
+Beyond GitHub, we try to have a variety of different lines of communication available:
+
+* [Blog](https://blog.polymer-project.org/)
+* [Twitter](https://twitter.com/polymer)
+* [Google+ community](https://plus.google.com/communities/115626364525706131031)
+* [Mailing list](https://groups.google.com/forum/#!forum/polymer-dev)
+* [Slack channel](https://bit.ly/polymerslack)
+
+# License
+
+The Polymer library uses a BSD-like license that is available [here](./LICENSE.txt)
+
+-----------
+
+<a name="release-candidate"></a>
+<a name="2-0"></a>
+# Polymer 2.0
+
+Polymer 2.0 is a major new release of Polymer that is compatible with the latest web components standards and web platform APIs, and makes significant improvements over the 1.x version of the library. The following section provides context and migration information for existing users of Polymer 1.x:
+
+## Goals of Polymer 2.0
+
+1. **Take advantage of native "v1" Web Components implementations across browsers.**
+
+ The primary goal of the Polymer 2.0 release is to take advantage of native, cross-browser support for Web Components.
+
+ Polymer 1.x is built on top of the so-called "v0" Web Components specs, which are supported natively only in Google Chrome; using Polymer in other browsers has always required the use of polyfills.
+
+ Beginning this fall, multiple browsers will be shipping native implementations of the new "v1" specs for Shadow DOM and Custom Elements, yielding better web components performance and reducing the need for polyfills.
+
+ Polymer 2.0 features full support for the v1 specs, taking advantage of native browser implementations where they are available and depending on updated v1 polyfills from [webcomponentsjs](https://github.com/webcomponents/webcomponentsjs) where necessary.
+
+ Polymer 2.0 also embraces the new ES-class-based mechanism for defining custom elements, bringing idiomatic Polymer style closer to "vanilla" custom element authoring.
+
+1. **Provide a smooth migration path from Polymer 1.x.**
+
+ Our second major goal is to provide as easy a transition as possible for developers who have built elements and apps with Polymer 1.x, making Polymer 2.0 a sturdy bridge to the future.
+
+ To upgrade, you will need to make some changes to your 1.x-based elements and apps. These changes are necessitated by both the v0-to-v1 spec transition and a handful of key improvements in Polymer itself (see our remaining goals, below).
+
+ However, we've taken care to limit the number of changes that are strictly required and to ease the process of upgrading:
+
+ * Polymer 2.0 introduces a new [ES6 class-based syntax](#20-es6-class-based-syntax), but we've provided a [lightweight compatibility layer](#10-compatibility-layer) allowing you to upgrade your 1.x code with minimal modifications. Depending on your needs, you can either take advantage of the compatibility layer or jump straight to idiomatic 2.0 style.
+
+ * Before releasing Polymer 2.0, we'll also provide an upgrade tool to automate as many of the changes (both required and recommended) as possible.
+
+ * Finally, we're working on guidelines for building and testing "hybrid" elements that will run in both Polymer 1.x and Polymer 2.0. We plan to ship hybrid versions of all of the elements that we provide, easing the transition for developers who use them. Third-party element providers may also choose to ship hybrid elements.
+
+ * If you have an especially large app or constraints that don't allow for an all-at-once upgrade, you can also use hybrid elements to migrate your app from 1.x to 2.0 in piecewise fashion: update your elements to hybrid form, individually or in batches, while running against Polymer 1.x; then cut over to Polymer 2.0 when all of your elements have been updated.
+
+1. **Eliminate leaky abstractions.**
+
+ Seamless interoperability is one of Web Components' major selling points. Generally speaking, web components "just work" anywhere you use HTML elements. To use them, you need only be aware of their public attributes, properties, methods and events; you don't need to know anything about their inner workings. This means you can easily mix standard HTML elements, third-party elements and elements you've defined yourself.
+
+ Unfortunately, there are a couple of cases in Polymer 1.x (the `Polymer.dom` API and the `set`/`notifyPath` API) where implementation details of Polymer-based elements leak out, requiring users of the elements to interact with them in non-standard ways. These "leaks" were by design – compromises we chose to make in the interest of performance – but in hindsight we aren't happy with the tradeoff.
+
+ In Polymer 2.0 we've found ways to eliminate these leaky abstractions without unduly compromising performance, which means that your Polymer 2.x-based elements will be indistinguishable from "vanilla" elements from a consumer's point of view (unless you leak implementation details of your own).
+
+1. **Make targeted improvements to the Polymer data system.**
+
+ Based on developer feedback and observations of Polymer apps in the wild, we've also made some key improvements to Polymer's data system. These changes are designed to make it easier to reason about and debug the propagation of data through and between elements:
+
+ * Changes are now batched, and the effects of those changes are run in well-defined order.
+ * We ensure that multi-property observers run exactly once per turn for any set of changes to dependencies (removing the [multi-property undefined rule](https://www.polymer-project.org/1.0/docs/devguide/observers#multi-property-observers)).
+ * To add compatibility with more approaches to state management, we now provide a mixin (and legacy behavior) to skip dirty-checking properties whose values are objects or arrays and always consider them dirty, causing their side effects to run.
+
+1. **Improve factoring of Polymer and the polyfills**
+
+ We've done major refactoring of Polymer and the webcomponentsjs polyfills to improve efficiency, utility and flexibility:
+
+ * The "Shady DOM" shim that was part of Polymer 1.x has been factored out of Polymer and added to the webcomponentsjs polyfills, along with the related shim for CSS Custom Properties. (As noted above, the Shady DOM shim no longer exposes an alternative API but instead patches the native DOM API for transparent usage).
+
+ * Polymer itself has been internally factored into several loosely coupled libraries.
+
+ * The new `Polymer.Element` class extends from the native `HTMLElement` and mixes in functionality from these libraries.
+
+ * The idiomatic way of using Polymer 2.0 (assuming you're not using the 1.x compatibility layer) is to define your own custom elements that subclass `Polymer.Element`, using standard ES class definition syntax.
+
+ * If you're interested in using pieces of Polymer's functionality in _a la carte_ fashion, you can try defining your own base element class, utilizing a subset of the libraries. For now, this use case should be considered experimental, as the factoring of libraries is subject to change and is not part of the official Polymer 2.0 API.
+
+## 1.0 Compatibility Layer
+Polymer 2.0 retains the existing `polymer/polymer.html` import that current Polymer 1.0 users can continue to import, which strives to provide a very minimally-breaking change for code written to the Polymer 1.0 API. For the most part, existing users upgrading to Polymer 2.0 will only need to adapt existing code to be compliant with the V1 Shadow DOM API related to content distribution and styling, as well as minor breaking changes introduced due to changes in the V1 Custom Elements spec and data-layer improvements listed [below](#breaking-changes).
+
+## 2.0 ES6 Class-based Syntax
+With the widespread adoption of ES6 in browsers, as well as the requirement that V1 Custom Elements be defined as ES6 class extensions of `HTMLElement`, Polymer 2.0 shifts its primary API for defining new elements to an ES6 class-centric syntax. Using this syntax, users will extend `Polymer.Element` (a subclass of `HTMLElement`), which provides meta-programming for most of the same features of Polymer 1.0 based on static configuration data supplied on the class definition.
+
+Basic syntax looks like this:
+
+```html
+<!-- Load the Polymer.Element base class -->
+<link rel="import" href="bower_components/polymer/polymer-element.html">
+```
+
+```js
+// Extend Polymer.Element base class
+class MyElement extends Polymer.Element {
+ static get is() { return 'my-element'; }
+ static get properties() { return { /* properties metadata */ } }
+ static get observers() { return [ /* observer descriptors */ ] }
+ constructor() {
+ super();
+ ...
+ }
+ connectedCallback() {
+ super.connectedCallback();
+ ...
+ }
+ ...
+}
+
+// Register custom element definition using standard platform API
+customElements.define(MyElement.is, MyElement);
+```
+
+Users can then leverage native subclassing support provided by ES6 to extend and customize existing elements defined using ES6 syntax:
+
+```js
+// Subclass existing element
+class MyElementSubclass extends MyElement {
+ static get is() { return 'my-element-subclass'; }
+ static get properties() { return { /* properties metadata */ } }
+ static get observers() { return [ /* observer descriptors */ ] }
+ constructor() {
+ super();
+ ...
+ }
+ ...
+}
+
+// Register custom element definition using standard platform API
+customElements.define(MyElementSubclass.is, MyElementSubclass);
+```
+
+Below are the general steps for defining a custom element using this new syntax:
+
+* Extend from `Polymer.Element`. This class provides the minimal surface area to integrate with 2.0's data binding system. It provides only standard custom element lifecycle with the addition of `ready`. (You can apply the `Polymer.LegacyElementMixin` to get all of the Polymer 1.0 element API, but since most of this API was rarely used, this should not often be needed.)
+* Implement "behaviors" as [mixins that return class expressions](http://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/) and apply to the base class you are extending from.
+* Property metadata (`properties`) and multi-property/wildcard observers (`observers`) should be put on the class as static getters, but otherwise match the 1.x syntax.
+* In order to provide a template to stamp into the element's shadow DOM, either define a static `is` getter that returns the id of a `dom-module` containing the element's template, or else provide a static `template` getter that returns a template to stamp. The `template` getter may either return an HTMLTemplateElement or a string containing HTML which will be parsed into a template.
+* `listeners` and `hostAttributes` have been removed from element metadata; listeners and attributes should be installed using standard platform API (`this.addEventListener`, `this.setAttribute`) how and when needed (e.g. in `connectedCallback`). For convenience `_ensureAttribute` is available that sets an attribute if and only if the element does not yet have that attribute, to match `hostAttribute` semantics.
+
+Note that `Polymer.Element` provides a cleaner base class void of a lot of sugared utility API that present on elements defined with `Polymer()`, such as `fire`, `transform`, etc. With web platform surface area becoming far more stable across browsers, we intend to hew towards sugaring less and embracing the raw platform API more. So when using `Polymer.Element`, instead of using the legacy `this.fire('some-event')` API, simply use the equivalent platform API's such as `this.dispatchEvent(new CustomEvent('some-event', {bubbles: true})`. #usetheplatform
+
+See below for a visual guide on migrating Polymer 1.0's declarative syntax to the ES6 class syntax in Polymer 2.0:
+
+![Difference in Polymer 1.0 and Polymer 2.0 element definition](img/migration.png)
+
+## Polyfills
+
+Polymer 2.0 has been developed alongside and tested with a new suite of V1-spec compatible polyfills for Custom Elements and Shadow DOM. Polymer 2.0 is compatible the latest releases of [`webcomponentsjs/webcomponents-lite.js`](https://github.com/webcomponents/webcomponentsjs), which is included as a bower dependency to Polymer 2.x.
+
+## Breaking Changes
+Below is a list of intentional breaking changes made in Polymer 2.0, along with their rationale/justification and migration guidance. If you find changes that broke existing code not documented here, please [file an issue](https://github.com/Polymer/polymer/issues/new) and we'll investigate to determine whether they are expected/intentional or not.
+
+
+### Polymer.dom
+On browsers that lack native V1 Shadow DOM support, Polymer 2.0 is designed to be used with the new [V1 Shady DOM shim](https://github.com/webcomponents/shadydom), which patches native DOM API as necessary to be mostly equivalent to native Shadow DOM. This removes the requirement to use the `Polymer.dom` API when interacting with the DOM. `Polymer.dom` can be eliminated for elements targeting Polymer 2.0, in favor of the native DOM API's.
+
+Note that `Polymer.dom` is still provided in the `polymer.html` backward-compatibility layer which simply facades the native API, but usage of it in 2.0 can be removed. Note that `Polymer.dom` will no longer return `Array`s for API's where the platform returns e.g. `NodeList`'s, so code may need to be updated to avoid direct use of array methods.
+
+### V1 Shadow DOM
+Polymer 2.0 elements will stamp their templates into shadow roots created using V1's `attachShadow({mode: 'open'})` by default. As such, user code related to scoped styling, distribution, and events must be adapted to native V1 API. For a great writeup on all Shadow DOM V1 spec changes, [see this writeup](http://hayato.io/2016/shadowdomv1/). Required changes for V1 are summarized below:
+
+#### Distribution
+* <a name="breaking-slot"></a>`<content>` insertion points must be changed to `<slot>`
+* <a name="breaking-slot-name"></a>Insertion points that selected content via `<content select="...">` must be changed to named slots: `<slot name="...">`
+* <a name="breaking-slot-slot"></a>Selection of distributed content into named slots must use `slot="..."` rather than tag/class/attributes selected by `<content>`
+* <a name="breaking-redistribution"></a>Re-distributing content by placing a `<slot>` into an element that itself has named slots requires placing a `name` attribute on the `<slot>` to indicate what content _it_ selects from its host children, and placing a `slot` attribute to indicate where its selected content should be slotted into its parent
+* <a name="breaking-async-distribution"></a>In the V1 "Shady DOM" shim, initial distribution of children into `<slot>` is asynchronous (microtask) to creating the `shadowRoot`, meaning distribution occurs after observers/`ready` (in Polymer 1.0's shim, initial distribution occurred before `ready`). In order to force distribution synchronously, call `ShadyDOM.flush()`.
+* <a name="breaking-observe-nodes-flush"></a>Calling `Polymer.dom.flush` no longer results in callbacks registered with `Polymer.dom.observeNodes` being called. Instead, the object returned from `Polymer.dom.observeNodes` now contains a `flush` method which can be used to immediately call the registered callback if any changes are pending.
+
+#### Scoped styling
+
+* <a name="breaking-styling-content"></a>`::content` CSS pseudo-selectors must be changed to `::slotted`, and may only target immediate children and use no descendant selectors
+* <a name="breaking-styling-host-context"></a>`:host-context()` pseudo-selectors have been removed. These were primarily useful for writing bi-directional rules (e.g. `:host-context([dir=rtl])`); these should be replaced with the [new `:dir(rtl)` selector](https://developer.mozilla.org/en-US/docs/Web/CSS/:dir), which we plan to polyfill in the [styling shim](https://github.com/webcomponents/shadycss) soon
+* <a name="breaking-deep"></a>The previously deprecated `/deep/` and `::shadow` selectors have been completely removed from V1 native support and must not be used (use [CSS custom properties](https://www.polymer-project.org/1.0/docs/devguide/styling#custom-css-properties) to customize styling instead)
+
+#### Scoped events
+
+* <a name="breaking-event-localTarget"></a>Code using `Polymer.dom(event).localTarget` should change to the V1 standard API `event.target`
+* <a name="breaking-event-path"></a>Code using `Polymer.dom(event).path` (aka V0 `event.path`) should change to the V1 standard API `event.composedPath()`
+* <a name="breaking-event-rootTarget"></a>Code using `Polymer.dom(event).rootTarget` (aka V0 `event.path[0]`) should change to the V1 standard API `event.composedPath()[0]`
+
+### V1 Custom Elements
+Polymer 2.0 elements will target the V1 Custom Elements API, which primarily changes the "created" step to actually invoke the `class` constructor, imposes new restrictions on what can be done in the `constructor` (previously `createdCallback`), and introduces different callback names.
+
+* <a name="breaking-callbacks"></a>Changes to callback names:
+ * When using `Polymer({...})` from the compatibility layer, all callbacks should use legacy Polymer API names (`created`, `attached`, `detached`, `attributeChanged`)
+ * When extending from `Polymer.Element`, users should override the V1 standard callback names and call `super()`:
+ * `created` changes to `constructor`
+ * `attached` changes to `connectedCallback`
+ * `detached` changes to `disconnectedCallback`
+ * `attributeChanged` changes to `attributeChangedCallback`
+* <a name="breaking-attributes"></a>The V1 Custom Elements spec forbids reading attributes, children, or parent information from the DOM API in the `constructor` (or `created` when using the legacy API). Likewise, attributes and children may not be added in the `constructor`. Any such work must be deferred (e.g. until `connectedCallback` or microtask/`setTimeout`/`requestAnimationFrame`).
+* <a name="breaking-is"></a>Polymer will no longer produce type-extension elements (aka `is="..."`). Although they are still included in the V1 Custom Elements [spec](https://html.spec.whatwg.org/#custom-elements-customized-builtin-example) and scheduled for implementation in Chrome, because Apple [has stated](https://github.com/w3c/webcomponents/issues/509#issuecomment-233419167) it will not implement `is`, we will not be encouraging its use to avoid indefinite reliance on the Custom Elements polyfill. Instead, a wrapper custom element can surround a native element, e.g. `<a is="my-anchor">...</a>` could become `<my-anchor><a>...</a></my-anchor>`. Users will need to change existing `is` elements where necessary.
+* <a name="breaking-templates"></a>All template type extensions provided by Polymer have now been changed to standard custom elements that take a `<template>` in their light dom, e.g.
+
+ ```html
+ <template is="dom-repeat" items="{{items}}">...</template>
+ ```
+
+ should change to
+
+ ```html
+ <dom-repeat items="{{items}}">
+ <template>...</template>
+ </dom-repeat>
+ ```
+
+ For the time being, Polymer (both legacy and class API) will automatically wrap template extensions used in Polymer element templates during template processing for backward-compatibility, although we may decide to remove this auto-wrapping in the future. Templates used in the main document must be manually wrapped.
+* <a name="breaking-custom-style"></a>The `custom-style` element has also been changed to a standard custom element that must wrap a style element e.g.
+
+ ```html
+ <style is="custom-style">...</style>
+ ```
+
+ should change to
+
+ ```html
+ <custom-style>
+ <style>...</style>
+ </custom-style>
+ ```
+
+### CSS Custom Property Shim
+Polymer 2.0 will continue to use a [shim](https://github.com/webcomponents/shadycss) to provide limited [CSS Custom Properties](#https://www.polymer-project.org/1.0/docs/devguide/styling#custom-css-properties) support on browsers that do not yet natively support custom properties, to allow an element to expose a custom styling API. The following changes have been made in the shim that Polymer 2.0 will use:
+
+* <a name="breaking-css-native"></a>The shim will now always use native CSS Custom Properties by default on browsers that implement them (this was opt-in in 1.0). The shim will perform a one-time transformation of stylesheets containing [CSS Custom Property mixins](https://www.polymer-project.org/1.0/docs/devguide/styling#custom-css-mixins) to leverage individual native CSS properties where possible for better performance. This introduces [some limitations](https://github.com/webcomponents/shadycss#custom-properties-and-apply) to be aware of.
+* <a name="breaking-css-syntax"></a>The following invalid styling syntax was previously accepted by the 1.0 custom property shim. In order to support native CSS Custom Properties, rules should be correct to use only natively valid syntax:
+ * `:root {}`
+ * Should be `:host > * {}` (in a shadow root)
+ * Should be `html {}` (in main document)
+ * Thus, cannot share old `:root` styles for use in both main document and shadow root
+ * `var(--a, --b)`
+ * Should be `var(--a, var(--b))`
+ * `@apply(--foo)`
+ * Should be `@apply --foo;`
+* <a name="breaking-customStyle"></a>`element.customStyle` as an object that can be assigned to has been removed; use `element.updateStyles({...})` instead.
+* <a name="breaking-style-location"></a>`<style>` inside of a `<dom-module>`, but outside of `<template>` is no longer supported.
+
+### Data system
+* <a name="breaking-data-init"></a>An element's template is not stamped & data system not initialized (observers, bindings, etc.) until the element has been connected to the main document. This is a direct result of the V1 changes that prevent reading attributes in the constructor.
+* <a name="breaking-data-batching"></a>Propagation of data through the binding system is now batched, such that multi-property computing functions and observers run once with a set of coherent changes. Single property accessors still propagate data synchronously, although there is a new `setProperties({...})` API on Polymer elements that can be used to propagate multiple values as a coherent set.
+* <a name="breaking-notify-order"></a>Property change notification event dispatch (`notify: true`) occurs after all other side effects of a property change occurs. In 1.x notification happened after binding side effects, but before observers, which was counter-intuitive. This rationalizes the concept of upward notification to ensure it happens after _all_ local and downward side-effects based on the change occur. Concretely, the order of effect processing in 2.x is as follows:
+ 1. computed properties (`computed`)
+ 1. template bindings (both property bindngs `[[...]]` and computed bindings `[[compute(...)]]`, including any side-effects on child elements for the bound property/attribute changes)
+ 1. attribute reflection (`reflectToAttribute: true`)
+ 1. observers (both single-property `observer` and multi-property `observers`)
+ 1. property-changed event notification (`notify: true`, including any side-effects on host elements for the bound property changes)
+* <a name="breaking-method-args"></a>Multi-property observers, computed methods, and computed bindings are now called once at initialization if any arguments are defined (and will see `undefined` for any undefined arguments). As such, the [1.x rule requiring all properties of a multi-property observer to be defined](https://www.polymer-project.org/1.0/docs/devguide/observers#multi-property-observers) no longer applies, as this was a major source of confusion and unintended consequences. Subsequently setting multi-property method arguments will cause the method to be called once for each property changed via accessors, or once per batch of changes via `setProperties({...})`.
+* <a name="breaking-dynamic-functions"> Declaring a method name used as an observer or computing function in the `properties` block causes the method property itself to become a dependency for any effects it is used in, meaning the effect for that method will run whenever the method is set, similar to 1.x. However, due to removing the `undefined` rule noted above, in 2.x if such a method exists when the element is created, it will run with initial values of arguments, even in the case some or all arguments are `undefined`.
+* <a name="breaking-binding-notifications">‘notify’ events are no longer fired when value changes _as result of binding from host_, as a major performance optimization over 1.x behavior. Use cases such as `<my-el foo="{{bar}}" on-foo-changed="fooChanged">` are no longer supported. In this case you should simply user a `bar` observer in the host. Use cases such as dynamically adding a `property-changed` event listener on for properties bound by an element's host by an actor other than the host are no longer supported.
+* <a name="breaking-properties-deserialization"></a>In order for a property to be deserialized from its attribute, it must be declared in the `properties` metadata object.
+* <a name="breaking-collection"></a>The `Polymer.Collection` and associated key-based path and splice notification for arrays has been eliminated. See [explanation here](https://github.com/Polymer/polymer/pull/3970#issue-178203286) for more details.
+* <a name="feature-mutable-data"></a>While not a breaking change, Polymer now ships with a `Polymer.MutableData` mixin (and legacy `Polymer.MutableDataBehavior` behavior) to provide more options for managing data. By default, `Polymer.PropertyEffects` performs strict dirty checking on objects, which means that any deep modifications to an object or array will not be propagated unless "immutable" data patterns are used (i.e. all object references from the root to the mutation were changed). Polymer also provides a proprietary data mutation and path notification API (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient mutation and notification of deep changes in an object graph to all elements bound to the same object graph. In cases where neither immutable patterns or the data mutation API can be used, applying this mixin will cause Polymer to skip dirty checking for objects and arrays and always consider them to be "dirty". This allows a user to make a deep modification to a bound object graph, and then either simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath` (e.g. `this.notifyPath('items')`) to update the tree. Note that all elements that wish to be updated based on deep mutations must apply this mixin or otherwise skip strict dirty checking for objects/arrays.
+
+### Removed API
+* <a name="breaking-instanceof"></a>`Polymer.instanceof` and `Polymer.isInstance`: no longer needed, use
+`instanceof` and `instanceof Polymer.Element` instead.
+* <a name="breaking-dom-module"></a>`dom-module`: Removed ability to use `is` and `name` attribute to
+configure the module name. The only supported declarative way set the module
+id is to use `id`.
+* <a name="breaking-getPropertyInfo"></a>`element.getPropertyInfo`: This api returned unexpected information some of the time and was rarely used.
+* <a name="breaking-getNativePrototype"></a>`element.getNativePrototype`: Removed because it is no longer needed for internal code and was unused by users.
+* <a name="breaking-beforeRegister"></a>`element.beforeRegister`: This was originally added for metadata compatibility with ES6 classes. We now prefer users create ES6 classes by extending `Polymer.Element`, specifying metadata in the static `properties`, `observers`, and `is` properties. For legacy use via `Polymer({...})`, dynamic effects may still be added by using `beforeRegister` but it is now equivalent to the `registered` lifecycle method. An element's `is` property cannot be set in `beforeRegister` as it could in Polymer 1.x.
+* <a name="breaking-attributeFollows"></a>`element.attributeFollows`: Removed due to disuse.
+* <a name="breaking-classFollows"></a>`element.classFollows`: Removed due to disuse.
+* <a name="breaking-copyOwnProperty"></a>`element.copyOwnProperty`: Removed due to disuse.
+* <a name="breaking-listeners"></a>`listeners`: Removed ability to use `id.event` to add listeners to elements in local dom. Use declarative template event handlers instead.
+* <a name="breaking-protected"></a>Methods starting with `_` are not guaranteed to exist (most have been removed)
+
+### Other
+* <a name="breaking-transpiling"></a>Polymer 2.0 uses ES2015 syntax, and can be run without transpilation in current Chrome, Safari 10, Safari Technology Preview, Firefox, and Edge. Transpilation is required to run in IE11 and Safari 9 (as well as Edge for high reliability, due to certain [bugs](https://github.com/Microsoft/ChakraCore/issues/1496) in their ES6 implementation). The [`polymer-cli`](https://github.com/Polymer/polymer-cli) tools such as `polymer serve` and `polymer build` have built-in support for transpiling when needed.
+* <a name="breaking-deferred-attach"></a>The `attached` legacy callback is no longer deferred until first render time; it now runs at the time of the native `connectedCallback`, which may be before styles have resolved and measurement is possible. Instead when measurement is needed use `Polymer.RenderStatus.beforeNextRender`.
+* <a name="breaking-created-timing"></a>The legacy `created` callback is no longer called before default values in `properties` have been set. As such, you should not rely on properties set in `created` from within `value` functions that define property defaults. However, you can now set _any_ property defaults within the `created` callback (in 1.0 this was forbidden for observed properties) in lieu of using the `value` function in `properties`.
+* <a name="breaking-boolean-attribute-binidng"></a>Binding a default value of `false` via an _attribute binding_ to a boolean property will not override a default `true` property of the target, due to the semantics of boolean attributes. In general, property binding should always be used when possible, and will avoid such situations.
+* <a name="breaking-lazyRegister"></a>`lazyRegister` option removed and all meta-programming (parsing template, creating accessors on prototype, etc.) is deferred until the first instance of the element is created
+* <a name="breaking-hostAttributes-class"></a>In Polymer 1.x, the `class` attribute was explicitly blacklisted from `hostAttributes` and never serialized. This is no longer the case using the 2.0 legacy API.
+* <a name="breaking-url-changes"></a>In Polymer 1.x, URLs in attributes and styles inside element templates were re-written to be relative to the element HTMLImport. Based on user feedback, we are changing this behavior.
+
+ Two new properties are being added to `Polymer.Element`: `importPath` and `rootPath`. The `importPath` property is a static getter on the element class that defaults to the element HTMLImport document URL and is overridable. It may be useful to override `importPath` when an element `template` is not retrieved from a `dom-module` or the element is not defined using an HTMLImport. The `rootPath` property is set to the value of `Polymer.rootPath` which is globally settable and defaults to the main document URL. It may be useful to set `Polymer.rootPath` to provide a stable application mount path when using client side routing. URL's in styles are re-written to be relative to the `importPath` property. Inside element templates, URLs in element attributes are *no longer* re-written. Instead, they should be bound using `importPath` and `rootPath` where appropriate. For example:
+
+ A Polymer 1.x template that included:
+
+ ```html
+ <img src="foo.jpg">
+ ```
+
+ in Polymer 2.x should be:
+
+ ```html
+ <img src$="[[importPath]]foo.jpg">
+ ```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/bower.json
new file mode 100644
index 00000000000..ae2bcf5033c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/bower.json
@@ -0,0 +1,35 @@
+{
+ "name": "polymer",
+ "main": [
+ "polymer.html"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "ignore": [
+ "/.*",
+ "/test/",
+ "/util/",
+ "gulpfile.js",
+ "CONTRIBUTING.md",
+ "CHANGELOG.md"
+ ],
+ "authors": [
+ "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Polymer/polymer.git"
+ },
+ "dependencies": {
+ "shadycss": "webcomponents/shadycss#^v1.1.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^v1.1.0"
+ },
+ "devDependencies": {
+ "web-component-tester": "^6.0.0",
+ "test-fixture": "PolymerElements/test-fixture#3.0.0-rc.1",
+ "iron-component-page": "PolymerElements/iron-component-page#^3.0.1"
+ },
+ "private": true,
+ "resolutions": {
+ "test-fixture": "3.0.0-rc.1"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/closure-types.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/closure-types.js
new file mode 100644
index 00000000000..c8b38c77e3b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/closure-types.js
@@ -0,0 +1,1402 @@
+/**
+ * @fileoverview Generated typings for Polymer mixins
+ * @externs
+ *
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+/* eslint-disable */
+/**
+* @interface
+*/
+function Polymer_PropertiesChanged(){}
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created; the
+ protected `_setProperty` function must be used to set the property
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._createPropertyAccessor = function(property, readOnly){};
+/**
+* @param {string} property Name of the property
+*/
+Polymer_PropertiesChanged.prototype._addPropertyToAttributeMap = function(property){};
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._definePropertyAccessor = function(property, readOnly){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype.ready = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._initializeProperties = function(){};
+/**
+* @param {Object} props Bag of property values that were overwritten
+ when creating property accessors.
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._initializeInstanceProperties = function(props){};
+/**
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._setProperty = function(property, value){};
+/**
+* @param {string} property Name of property
+* @return {*}
+*/
+Polymer_PropertiesChanged.prototype._getProperty = function(property){};
+/**
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @param {boolean=} ext Not used here; affordance for closure
+* @return {boolean}
+*/
+Polymer_PropertiesChanged.prototype._setPendingProperty = function(property, value, ext){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._invalidateProperties = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._enableProperties = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._flushProperties = function(){};
+/**
+* @param {!Object} currentProps Bag of all current accessor values
+* @param {!Object} changedProps Bag of properties changed since the last
+ call to `_propertiesChanged`
+* @param {!Object} oldProps Bag of previous values for each property
+ in `changedProps`
+* @return {boolean}
+*/
+Polymer_PropertiesChanged.prototype._shouldPropertiesChange = function(currentProps, changedProps, oldProps){};
+/**
+* @param {!Object} currentProps Bag of all current accessor values
+* @param {!Object} changedProps Bag of properties changed since the last
+ call to `_propertiesChanged`
+* @param {!Object} oldProps Bag of previous values for each property
+ in `changedProps`
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+/**
+* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
+* @return {boolean}
+*/
+Polymer_PropertiesChanged.prototype._shouldPropertyChange = function(property, value, old){};
+/**
+* @param {string} name Name of attribute that changed
+* @param {?string} old Old attribute value
+* @param {?string} value New attribute value
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype.attributeChangedCallback = function(name, old, value){};
+/**
+* @param {string} attribute Name of attribute to deserialize.
+* @param {?string} value of the attribute.
+* @param {*=} type type to deserialize to, defaults to the value
+returned from `typeForProperty`
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._attributeToProperty = function(attribute, value, type){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect to.
+* @param {*=} value Property value to refect.
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._propertyToAttribute = function(property, attribute, value){};
+/**
+* @param {Element} node Element to set attribute to.
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
+* @return {void}
+*/
+Polymer_PropertiesChanged.prototype._valueToNodeAttribute = function(node, value, attribute){};
+/**
+* @param {*} value Property value to serialize.
+* @return {(string | undefined)}
+*/
+Polymer_PropertiesChanged.prototype._serializeValue = function(value){};
+/**
+* @param {?string} value Value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
+*/
+Polymer_PropertiesChanged.prototype._deserializeValue = function(value, type){};
+/**
+* @param {!Object} props Object whose keys are names of accessors.
+* @return {void}
+*/
+Polymer_PropertiesChanged.createProperties = function(props){};
+/**
+* @param {string} property Property to convert
+* @return {string}
+*/
+Polymer_PropertiesChanged.attributeNameForProperty = function(property){};
+/**
+* @param {string} name Name of property
+*/
+Polymer_PropertiesChanged.typeForProperty = function(name){};
+/**
+* @interface
+* @extends {Polymer_PropertiesChanged}
+*/
+function Polymer_PropertyAccessors(){}
+/**
+* @param {string} property Name of the property
+* @param {boolean=} readOnly When true, no setter is created
+
+When calling on a prototype, any overwritten values are saved in
+`__dataProto`, and it is up to the subclasser to decide how/when
+to set those properties back into the accessor. When calling on an
+instance, the overwritten value is set via `_setPendingProperty`,
+and the user should call `_invalidateProperties` or `_flushProperties`
+for the values to take effect.
+* @return {void}
+*/
+Polymer_PropertyAccessors.prototype._definePropertyAccessor = function(property, readOnly){};
+/**
+* @return {void}
+*/
+Polymer_PropertyAccessors.prototype._initializeProperties = function(){};
+/**
+* @param {*} value Property value to serialize.
+* @return {(string | undefined)}
+*/
+Polymer_PropertyAccessors.prototype._serializeValue = function(value){};
+/**
+* @param {?string} value Attribute value to deserialize.
+* @param {*=} type Type to deserialize the string to.
+* @return {*}
+*/
+Polymer_PropertyAccessors.prototype._deserializeValue = function(value, type){};
+/**
+* @param {Object} props Bag of property values that were overwritten
+ when creating property accessors.
+* @return {void}
+*/
+Polymer_PropertyAccessors.prototype._initializeProtoProperties = function(props){};
+/**
+* @param {string} attribute Name of attribute to ensure is set.
+* @param {string} value of the attribute.
+* @return {void}
+*/
+Polymer_PropertyAccessors.prototype._ensureAttribute = function(attribute, value){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyAccessors.prototype._hasAccessor = function(property){};
+/**
+* @param {string} prop Property name
+* @return {boolean}
+*/
+Polymer_PropertyAccessors.prototype._isPropertyPending = function(prop){};
+/**
+* @param {string} property Property to convert
+* @return {string}
+*/
+Polymer_PropertyAccessors.attributeNameForProperty = function(property){};
+/**
+* @return {void}
+*/
+Polymer_PropertyAccessors.createPropertiesForAttributes = function(){};
+/**
+* @interface
+*/
+function Polymer_TemplateStamp(){}
+/**
+* @param {!HTMLTemplateElement} template Template to stamp
+* @return {!StampedTemplate}
+*/
+Polymer_TemplateStamp.prototype._stampTemplate = function(template){};
+/**
+* @param {!Node} node Node to add listener on
+* @param {string} eventName Name of event
+* @param {string} methodName Name of method
+* @param {*=} context Context the method will be called on (defaults
+ to `node`)
+* @return {Function}
+*/
+Polymer_TemplateStamp.prototype._addMethodEventListenerToNode = function(node, eventName, methodName, context){};
+/**
+* @param {!Node} node Node to add event listener to
+* @param {string} eventName Name of event
+* @param {function (!Event): void} handler Listener function to add
+* @return {void}
+*/
+Polymer_TemplateStamp.prototype._addEventListenerToNode = function(node, eventName, handler){};
+/**
+* @param {Node} node Node to remove event listener from
+* @param {string} eventName Name of event
+* @param {function (!Event): void} handler Listener function to remove
+* @return {void}
+*/
+Polymer_TemplateStamp.prototype._removeEventListenerFromNode = function(node, eventName, handler){};
+/**
+* @param {!HTMLTemplateElement} template Template to parse
+* @param {TemplateInfo=} outerTemplateInfo Template metadata from the outer
+ template, for parsing nested templates
+* @return {!TemplateInfo}
+*/
+Polymer_TemplateStamp._parseTemplate = function(template, outerTemplateInfo){};
+/**
+* @param {*} template
+* @param {*} templateInfo
+* @param {*} nodeInfo
+*/
+Polymer_TemplateStamp._parseTemplateContent = function(template, templateInfo, nodeInfo){};
+/**
+* @param {Node} node Node to parse
+* @param {!TemplateInfo} templateInfo Template metadata for current template
+* @param {!NodeInfo} nodeInfo Node metadata for current template.
+* @return {boolean}
+*/
+Polymer_TemplateStamp._parseTemplateNode = function(node, templateInfo, nodeInfo){};
+/**
+* @param {Node} root Root node whose `childNodes` will be parsed
+* @param {!TemplateInfo} templateInfo Template metadata for current template
+* @param {!NodeInfo} nodeInfo Node metadata for current template.
+* @return {void}
+*/
+Polymer_TemplateStamp._parseTemplateChildNodes = function(root, templateInfo, nodeInfo){};
+/**
+* @param {HTMLTemplateElement} node Node to parse (a <template>)
+* @param {TemplateInfo} outerTemplateInfo Template metadata for current template
+ that includes the template `node`
+* @param {!NodeInfo} nodeInfo Node metadata for current template.
+* @return {boolean}
+*/
+Polymer_TemplateStamp._parseTemplateNestedTemplate = function(node, outerTemplateInfo, nodeInfo){};
+/**
+* @param {Element} node Node to parse
+* @param {TemplateInfo} templateInfo Template metadata for current template
+* @param {NodeInfo} nodeInfo Node metadata for current template.
+* @return {boolean}
+*/
+Polymer_TemplateStamp._parseTemplateNodeAttributes = function(node, templateInfo, nodeInfo){};
+/**
+* @param {Element} node Node to parse
+* @param {!TemplateInfo} templateInfo Template metadata for current template
+* @param {!NodeInfo} nodeInfo Node metadata for current template.
+* @param {string} name Attribute name
+* @param {string} value Attribute value
+* @return {boolean}
+*/
+Polymer_TemplateStamp._parseTemplateNodeAttribute = function(node, templateInfo, nodeInfo, name, value){};
+/**
+* @param {HTMLTemplateElement} template Template to retrieve `content` for
+* @return {DocumentFragment}
+*/
+Polymer_TemplateStamp._contentForTemplate = function(template){};
+/**
+* @interface
+* @extends {Polymer_TemplateStamp}
+* @extends {Polymer_PropertyAccessors}
+*/
+function Polymer_PropertyEffects(){}
+/** @type {boolean} */
+Polymer_PropertyEffects.prototype.__dataClientsReady;
+
+/** @type {Array} */
+Polymer_PropertyEffects.prototype.__dataPendingClients;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__dataToNotify;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__dataLinkedPaths;
+
+/** @type {boolean} */
+Polymer_PropertyEffects.prototype.__dataHasPaths;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__dataCompoundStorage;
+
+/** @type {Polymer_PropertyEffects} */
+Polymer_PropertyEffects.prototype.__dataHost;
+
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__dataTemp;
+
+/** @type {boolean} */
+Polymer_PropertyEffects.prototype.__dataClientsInitialized;
+
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__data;
+
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__dataPending;
+
+/** @type {!Object} */
+Polymer_PropertyEffects.prototype.__dataOld;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__computeEffects;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__reflectEffects;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__notifyEffects;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__propagateEffects;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__observeEffects;
+
+/** @type {Object} */
+Polymer_PropertyEffects.prototype.__readOnly;
+
+/** @type {!TemplateInfo} */
+Polymer_PropertyEffects.prototype.__templateInfo;
+
+/**
+* @override
+* @param {!HTMLTemplateElement} template Template to stamp
+* @return {!StampedTemplate}
+*/
+Polymer_PropertyEffects.prototype._stampTemplate = function(template){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.ready = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._initializeProperties = function(){};
+/**
+* @override
+* @param {Object} props Properties to initialize on the instance
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._initializeInstanceProperties = function(props){};
+/**
+* @override
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._setProperty = function(property, value){};
+/**
+* @override
+* @param {string} property Name of the property
+* @param {*} value Value to set
+* @param {boolean=} shouldNotify True if property should fire notification
+ event (applies only for `notify: true` properties)
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._setPendingProperty = function(property, value, shouldNotify){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._invalidateProperties = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._flushProperties = function(){};
+/**
+* @param {!Object} currentProps Bag of all current accessor values
+* @param {!Object} changedProps Bag of properties changed since the last
+ call to `_propertiesChanged`
+* @param {!Object} oldProps Bag of previous values for each property
+ in `changedProps`
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._propertiesChanged = function(currentProps, changedProps, oldProps){};
+/**
+* @override
+* @param {Object} props Properties to initialize on the prototype
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._initializeProtoProperties = function(props){};
+/**
+* @param {string} property Property that should trigger the effect
+* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
+* @param {Object=} effect Effect metadata object
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._addPropertyEffect = function(property, type, effect){};
+/**
+* @param {string} property Property the effect was associated with
+* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
+* @param {Object=} effect Effect metadata object to remove
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._removePropertyEffect = function(property, type, effect){};
+/**
+* @param {string} property Property name
+* @param {string=} type Effect type, from this.PROPERTY_EFFECT_TYPES
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._hasPropertyEffect = function(property, type){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._hasReadOnlyEffect = function(property){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._hasNotifyEffect = function(property){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._hasReflectEffect = function(property){};
+/**
+* @param {string} property Property name
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._hasComputedEffect = function(property){};
+/**
+* @param {(string | !Array.<(number | string)>)} path Path to set
+* @param {*} value Value to set
+* @param {boolean=} shouldNotify Set to true if this change should
+ cause a property notification event dispatch
+* @param {boolean=} isPathNotification If the path being set is a path
+ notification of an already changed value, as opposed to a request
+ to set and notify the change. In the latter `false` case, a dirty
+ check is performed and then the value is set to the path before
+ enqueuing the pending property change.
+* @return {boolean}
+*/
+Polymer_PropertyEffects.prototype._setPendingPropertyOrPath = function(path, value, shouldNotify, isPathNotification){};
+/**
+* @param {!Node} node The node to set a property on
+* @param {string} prop The property to set
+* @param {*} value The value to set
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._setUnmanagedPropertyToNode = function(node, prop, value){};
+/**
+* @param {Object} client PropertyEffects client to enqueue
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._enqueueClient = function(client){};
+/**
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._flushClients = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._readyClients = function(){};
+/**
+* @param {Object} props Bag of one or more key-value pairs whose key is
+ a property and value is the new value to set for that property.
+* @param {boolean=} setReadOnly When true, any private values set in
+ `props` will be set. By default, `setProperties` will not set
+ `readOnly: true` root properties.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.setProperties = function(props, setReadOnly){};
+/**
+* @param {Object} changedProps Bag of changed properties
+* @param {Object} oldProps Bag of previous values for changed properties
+* @param {boolean} hasPaths True with `props` contains one or more paths
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._propagatePropertyChanges = function(changedProps, oldProps, hasPaths){};
+/**
+* @param {(string | !Array.<(string | number)>)} to Target path to link.
+* @param {(string | !Array.<(string | number)>)} from Source path to link.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.linkPaths = function(to, from){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Target path to unlink.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.unlinkPaths = function(path){};
+/**
+* @param {string} path Path that should be notified.
+* @param {Array} splices Array of splice records indicating ordered
+ changes that occurred to the array. Each record should have the
+ following fields:
+ * index: index at which the change occurred
+ * removed: array of items that were removed from this index
+ * addedCount: number of new items added at this index
+ * object: a reference to the array in question
+ * type: the string literal 'splice'
+
+ Note that splice records _must_ be normalized such that they are
+ reported in index order (raw results from `Object.observe` are not
+ ordered and must be normalized/merged before notifying).
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.notifySplices = function(path, splices){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to the value
+ to read. The path may be specified as a string (e.g. `foo.bar.baz`)
+ or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that
+ bracketed expressions are not supported; string-based path parts
+ *must* be separated by dots. Note that when dereferencing array
+ indices, the index may be used as a dotted part directly
+ (e.g. `users.12.name` or `['users', 12, 'name']`).
+* @param {Object=} root Root object from which the path is evaluated.
+* @return {*}
+*/
+Polymer_PropertyEffects.prototype.get = function(path, root){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to the value
+ to write. The path may be specified as a string (e.g. `'foo.bar.baz'`)
+ or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that
+ bracketed expressions are not supported; string-based path parts
+ *must* be separated by dots. Note that when dereferencing array
+ indices, the index may be used as a dotted part directly
+ (e.g. `'users.12.name'` or `['users', 12, 'name']`).
+* @param {*} value Value to set at the specified path.
+* @param {Object=} root Root object from which the path is evaluated.
+ When specified, no notification will occur.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.set = function(path, value, root){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to array.
+* @param {...*} items Items to push onto array
+* @return {number}
+*/
+Polymer_PropertyEffects.prototype.push = function(path, items){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to array.
+* @return {*}
+*/
+Polymer_PropertyEffects.prototype.pop = function(path){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to array.
+* @param {number} start Index from which to start removing/inserting.
+* @param {number} deleteCount Number of items to remove.
+* @param {...*} items Items to insert into array.
+* @return {Array}
+*/
+Polymer_PropertyEffects.prototype.splice = function(path, start, deleteCount, items){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to array.
+* @return {*}
+*/
+Polymer_PropertyEffects.prototype.shift = function(path){};
+/**
+* @param {(string | !Array.<(string | number)>)} path Path to array.
+* @param {...*} items Items to insert info array
+* @return {number}
+*/
+Polymer_PropertyEffects.prototype.unshift = function(path, items){};
+/**
+* @param {string} path Path that should be notified.
+* @param {*=} value Value at the path (optional).
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype.notifyPath = function(path, value){};
+/**
+* @param {string} property Property name
+* @param {boolean=} protectedSetter Creates a custom protected setter
+ when `true`.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._createReadOnlyProperty = function(property, protectedSetter){};
+/**
+* @param {string} property Property name
+* @param {(string | function (*, *))} method Function or name of observer method to call
+* @param {boolean=} dynamicFn Whether the method name should be included as
+ a dependency to the effect.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._createPropertyObserver = function(property, method, dynamicFn){};
+/**
+* @param {string} expression Method expression
+* @param {(boolean | Object)=} dynamicFn Boolean or object map indicating
+ whether method names should be included as a dependency to the effect.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._createMethodObserver = function(expression, dynamicFn){};
+/**
+* @param {string} property Property name
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._createNotifyingProperty = function(property){};
+/**
+* @param {string} property Property name
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._createReflectedProperty = function(property){};
+/**
+* @param {string} property Name of computed property to set
+* @param {string} expression Method expression
+* @param {(boolean | Object)=} dynamicFn Boolean or object map indicating
+ whether method names should be included as a dependency to the effect.
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._createComputedProperty = function(property, expression, dynamicFn){};
+/**
+* @param {!HTMLTemplateElement} template Template containing binding
+ bindings
+* @param {boolean=} instanceBinding When false (default), performs
+ "prototypical" binding of the template and overwrites any previously
+ bound template for the class. When true (as passed from
+ `_stampTemplate`), the template info is instanced and linked into
+ the list of bound templates.
+* @return {!TemplateInfo}
+*/
+Polymer_PropertyEffects.prototype._bindTemplate = function(template, instanceBinding){};
+/**
+* @param {!StampedTemplate} dom DocumentFragment previously returned
+ from `_stampTemplate` associated with the nodes to be removed
+* @return {void}
+*/
+Polymer_PropertyEffects.prototype._removeBoundDom = function(dom){};
+/**
+* @override
+* @param {Node} node Node to parse
+* @param {TemplateInfo} templateInfo Template metadata for current template
+* @param {NodeInfo} nodeInfo Node metadata for current template node
+* @return {boolean}
+*/
+Polymer_PropertyEffects._parseTemplateNode = function(node, templateInfo, nodeInfo){};
+/**
+* @override
+* @param {Node} node Node to parse
+* @param {TemplateInfo} templateInfo Template metadata for current template
+* @param {NodeInfo} nodeInfo Node metadata for current template node
+* @return {boolean}
+*/
+Polymer_PropertyEffects._parseTemplateNestedTemplate = function(node, templateInfo, nodeInfo){};
+/**
+* @override
+* @param {Element} node Node to parse
+* @param {TemplateInfo} templateInfo Template metadata for current template
+* @param {NodeInfo} nodeInfo Node metadata for current template node
+* @param {string} name Attribute name
+* @param {string} value Attribute value
+* @return {boolean}
+*/
+Polymer_PropertyEffects._parseTemplateNodeAttribute = function(node, templateInfo, nodeInfo, name, value){};
+/**
+* @param {string} property Property that should trigger the effect
+* @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
+* @param {Object=} effect Effect metadata object
+* @return {void}
+*/
+Polymer_PropertyEffects.addPropertyEffect = function(property, type, effect){};
+/**
+* @param {string} property Property name
+* @param {(string | function (*, *))} method Function or name of observer method to call
+* @param {boolean=} dynamicFn Whether the method name should be included as
+ a dependency to the effect.
+* @return {void}
+*/
+Polymer_PropertyEffects.createPropertyObserver = function(property, method, dynamicFn){};
+/**
+* @param {string} expression Method expression
+* @param {(boolean | Object)=} dynamicFn Boolean or object map indicating
+* @return {void}
+*/
+Polymer_PropertyEffects.createMethodObserver = function(expression, dynamicFn){};
+/**
+* @param {string} property Property name
+* @return {void}
+*/
+Polymer_PropertyEffects.createNotifyingProperty = function(property){};
+/**
+* @param {string} property Property name
+* @param {boolean=} protectedSetter Creates a custom protected setter
+ when `true`.
+* @return {void}
+*/
+Polymer_PropertyEffects.createReadOnlyProperty = function(property, protectedSetter){};
+/**
+* @param {string} property Property name
+* @return {void}
+*/
+Polymer_PropertyEffects.createReflectedProperty = function(property){};
+/**
+* @param {string} property Name of computed property to set
+* @param {string} expression Method expression
+* @param {(boolean | Object)=} dynamicFn Boolean or object map indicating whether
+ method names should be included as a dependency to the effect.
+* @return {void}
+*/
+Polymer_PropertyEffects.createComputedProperty = function(property, expression, dynamicFn){};
+/**
+* @param {!HTMLTemplateElement} template Template containing binding
+ bindings
+* @return {!TemplateInfo}
+*/
+Polymer_PropertyEffects.bindTemplate = function(template){};
+/**
+* @param {Object} templateInfo Template metadata to add effect to
+* @param {string} prop Property that should trigger the effect
+* @param {Object=} effect Effect metadata object
+* @return {void}
+*/
+Polymer_PropertyEffects._addTemplatePropertyEffect = function(templateInfo, prop, effect){};
+/**
+* @param {string} text Text to parse from attribute or textContent
+* @param {Object} templateInfo Current template metadata
+* @return {Array.<!BindingPart>}
+*/
+Polymer_PropertyEffects._parseBindings = function(text, templateInfo){};
+/**
+* @param {this} inst Element that should be used as scope for
+ binding dependencies
+* @param {BindingPart} part Binding part metadata
+* @param {string} path Property/path that triggered this effect
+* @param {Object} props Bag of current property changes
+* @param {Object} oldProps Bag of previous values for changed properties
+* @param {boolean} hasPaths True with `props` contains one or more paths
+* @return {*}
+*/
+Polymer_PropertyEffects._evaluateBinding = function(inst, part, path, props, oldProps, hasPaths){};
+/**
+* @interface
+* @extends {Polymer_PropertiesChanged}
+*/
+function Polymer_PropertiesMixin(){}
+/**
+* @override
+* @return {void}
+*/
+Polymer_PropertiesMixin.prototype._initializeProperties = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesMixin.prototype.connectedCallback = function(){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesMixin.prototype.disconnectedCallback = function(){};
+/**
+* @param {string} name Name of property
+* @return {*}
+*/
+Polymer_PropertiesMixin.typeForProperty = function(name){};
+/**
+* @return {void}
+*/
+Polymer_PropertiesMixin.finalize = function(){};
+/**
+* @return {undefined}
+*/
+Polymer_PropertiesMixin._finalizeClass = function(){};
+/**
+* @interface
+* @extends {Polymer_PropertyEffects}
+* @extends {Polymer_PropertiesMixin}
+*/
+function Polymer_ElementMixin(){}
+/** @type {HTMLTemplateElement} */
+Polymer_ElementMixin.prototype._template;
+
+/** @type {string} */
+Polymer_ElementMixin.prototype._importPath;
+
+/** @type {string} */
+Polymer_ElementMixin.prototype.rootPath;
+
+/** @type {string} */
+Polymer_ElementMixin.prototype.importPath;
+
+/** @type {(StampedTemplate | HTMLElement | ShadowRoot)} */
+Polymer_ElementMixin.prototype.root;
+
+/** @type {!Object.<string, !Element>} */
+Polymer_ElementMixin.prototype.$;
+
+/**
+* @override
+* @return {void}
+*/
+Polymer_ElementMixin.prototype.ready = function(){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_ElementMixin.prototype._initializeProperties = function(){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_ElementMixin.prototype._readyClients = function(){};
+/**
+* @return {void}
+*/
+Polymer_ElementMixin.prototype.connectedCallback = function(){};
+/**
+* @param {StampedTemplate} dom to attach to the element.
+* @return {ShadowRoot}
+*/
+Polymer_ElementMixin.prototype._attachDom = function(dom){};
+/**
+* @param {Object=} properties Bag of custom property key/values to
+ apply to this element.
+* @return {void}
+*/
+Polymer_ElementMixin.prototype.updateStyles = function(properties){};
+/**
+* @param {string} url URL to resolve.
+* @param {string=} base Optional base URL to resolve against, defaults
+to the element's `importPath`
+* @return {string}
+*/
+Polymer_ElementMixin.prototype.resolveUrl = function(url, base){};
+/**
+* @override
+*/
+Polymer_ElementMixin._parseTemplateContent = function(template, templateInfo, nodeInfo){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_ElementMixin.createProperties = function(props){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_ElementMixin._finalizeClass = function(){};
+/**
+* @param {Object} observers Array of observer descriptors for
+ this class
+* @param {Object} dynamicFns Object containing keys for any properties
+ that are functions and should trigger the effect when the function
+ reference is changed
+* @return {void}
+*/
+Polymer_ElementMixin.createObservers = function(observers, dynamicFns){};
+/**
+* @param {string} cssText Text containing styling to process
+* @param {string} baseURI Base URI to rebase CSS paths against
+* @return {string}
+*/
+Polymer_ElementMixin._processStyleText = function(cssText, baseURI){};
+/**
+* @param {string} is Tag name (or type extension name) for this element
+* @return {void}
+*/
+Polymer_ElementMixin._finalizeTemplate = function(is){};
+/**
+* @interface
+*/
+function Polymer_GestureEventListeners(){}
+/**
+* @param {!Node} node Node to add event listener to
+* @param {string} eventName Name of event
+* @param {function (!Event): void} handler Listener function to add
+* @return {void}
+*/
+Polymer_GestureEventListeners.prototype._addEventListenerToNode = function(node, eventName, handler){};
+/**
+* @param {!Node} node Node to remove event listener from
+* @param {string} eventName Name of event
+* @param {function (!Event): void} handler Listener function to remove
+* @return {void}
+*/
+Polymer_GestureEventListeners.prototype._removeEventListenerFromNode = function(node, eventName, handler){};
+/**
+* @interface
+* @extends {Polymer_PropertyAccessors}
+*/
+function Polymer_DirMixin(){}
+/** @type {boolean} */
+Polymer_DirMixin.prototype.__autoDirOptOut;
+
+/**
+* @return {void}
+*/
+Polymer_DirMixin.prototype.ready = function(){};
+/**
+* @return {void}
+*/
+Polymer_DirMixin.prototype.connectedCallback = function(){};
+/**
+* @return {void}
+*/
+Polymer_DirMixin.prototype.disconnectedCallback = function(){};
+/**
+* @override
+*/
+Polymer_DirMixin._processStyleText = function(cssText, baseURI){};
+/**
+* @param {string} text CSS text to replace DIR
+* @return {string}
+*/
+Polymer_DirMixin._replaceDirInCssText = function(text){};
+/**
+* @interface
+* @extends {Polymer_ElementMixin}
+* @extends {Polymer_GestureEventListeners}
+*/
+function Polymer_LegacyElementMixin(){}
+/** @type {boolean} */
+Polymer_LegacyElementMixin.prototype.isAttached;
+
+/** @type {WeakMap.<!Element, !Object.<string, !Function>>} */
+Polymer_LegacyElementMixin.prototype.__boundListeners;
+
+/** @type {Object.<string, Function>} */
+Polymer_LegacyElementMixin.prototype._debouncers;
+
+/**
+* @override
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.ready = function(){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._initializeProperties = function(){};
+/**
+* @override
+* @param {string} name Name of attribute.
+* @param {?string} old Old value of attribute.
+* @param {?string} value Current value of attribute.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.attributeChangedCallback = function(name, old, value){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.connectedCallback = function(){};
+/**
+* @override
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.disconnectedCallback = function(){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.created = function(){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.attached = function(){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.detached = function(){};
+/**
+* @param {string} name Name of attribute.
+* @param {?string} old Old value of attribute.
+* @param {?string} value Current value of attribute.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.attributeChanged = function(name, old, value){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._registered = function(){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._ensureAttributes = function(){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._applyListeners = function(){};
+/**
+* @param {*} value Value to deserialize
+* @return {(string | undefined)}
+*/
+Polymer_LegacyElementMixin.prototype.serialize = function(value){};
+/**
+* @param {string} value String to deserialize
+* @param {*} type Type to deserialize the string to
+* @return {*}
+*/
+Polymer_LegacyElementMixin.prototype.deserialize = function(value, type){};
+/**
+* @param {string} property Property name to reflect.
+* @param {string=} attribute Attribute name to reflect.
+* @param {*=} value Property value to reflect.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.reflectPropertyToAttribute = function(property, attribute, value){};
+/**
+* @param {*} value Value to serialize.
+* @param {string} attribute Attribute name to serialize to.
+* @param {Element} node Element to set attribute to.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.serializeValueToAttribute = function(value, attribute, node){};
+/**
+* @param {Object} prototype Target object to copy properties to.
+* @param {Object} api Source object to copy properties from.
+* @return {Object}
+*/
+Polymer_LegacyElementMixin.prototype.extend = function(prototype, api){};
+/**
+* @param {!Object} target Target object to copy properties to.
+* @param {!Object} source Source object to copy properties from.
+* @return {!Object}
+*/
+Polymer_LegacyElementMixin.prototype.mixin = function(target, source){};
+/**
+* @param {Object} object The object on which to set the prototype.
+* @param {Object} prototype The prototype that will be set on the given
+`object`.
+* @return {Object}
+*/
+Polymer_LegacyElementMixin.prototype.chainObject = function(object, prototype){};
+/**
+* @param {HTMLTemplateElement} template HTML template element to instance.
+* @return {!DocumentFragment}
+*/
+Polymer_LegacyElementMixin.prototype.instanceTemplate = function(template){};
+/**
+* @param {string} type Name of event type.
+* @param {*=} detail Detail value containing event-specific
+ payload.
+* @param {{bubbles: (boolean | undefined), cancelable: (boolean | undefined), composed: (boolean | undefined)}=} options Object specifying options. These may include:
+ `bubbles` (boolean, defaults to `true`),
+ `cancelable` (boolean, defaults to false), and
+ `node` on which to fire the event (HTMLElement, defaults to `this`).
+* @return {!Event}
+*/
+Polymer_LegacyElementMixin.prototype.fire = function(type, detail, options){};
+/**
+* @param {Element} node Element to add event listener to.
+* @param {string} eventName Name of event to listen for.
+* @param {string} methodName Name of handler method on `this` to call.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.listen = function(node, eventName, methodName){};
+/**
+* @param {Element} node Element to remove event listener from.
+* @param {string} eventName Name of event to stop listening to.
+* @param {string} methodName Name of handler method on `this` to not call
+ anymore.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.unlisten = function(node, eventName, methodName){};
+/**
+* @param {string=} direction Direction to allow scrolling
+Defaults to `all`.
+* @param {Element=} node Element to apply scroll direction setting.
+Defaults to `this`.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.setScrollDirection = function(direction, node){};
+/**
+* @param {string} slctr Selector to run on this local DOM scope
+* @return {Element}
+*/
+Polymer_LegacyElementMixin.prototype.$$ = function(slctr){};
+/**
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.distributeContent = function(){};
+/**
+* @return {!Array.<!Node>}
+*/
+Polymer_LegacyElementMixin.prototype.getEffectiveChildNodes = function(){};
+/**
+* @param {string} selector Selector to run.
+* @return {!Array.<!Node>}
+*/
+Polymer_LegacyElementMixin.prototype.queryDistributedElements = function(selector){};
+/**
+* @return {!Array.<!Node>}
+*/
+Polymer_LegacyElementMixin.prototype.getEffectiveChildren = function(){};
+/**
+* @return {string}
+*/
+Polymer_LegacyElementMixin.prototype.getEffectiveTextContent = function(){};
+/**
+* @param {string} selector Selector to run.
+* @return {Node}
+*/
+Polymer_LegacyElementMixin.prototype.queryEffectiveChildren = function(selector){};
+/**
+* @param {string} selector Selector to run.
+* @return {!Array.<!Node>}
+*/
+Polymer_LegacyElementMixin.prototype.queryAllEffectiveChildren = function(selector){};
+/**
+* @param {string=} slctr CSS selector to choose the desired
+ `<slot>`. Defaults to `content`.
+* @return {!Array.<!Node>}
+*/
+Polymer_LegacyElementMixin.prototype.getContentChildNodes = function(slctr){};
+/**
+* @param {string=} slctr CSS selector to choose the desired
+ `<content>`. Defaults to `content`.
+* @return {!Array.<!HTMLElement>}
+*/
+Polymer_LegacyElementMixin.prototype.getContentChildren = function(slctr){};
+/**
+* @param {?Node} node The element to be checked.
+* @return {boolean}
+*/
+Polymer_LegacyElementMixin.prototype.isLightDescendant = function(node){};
+/**
+* @param {!Element} node The element to be checked.
+* @return {boolean}
+*/
+Polymer_LegacyElementMixin.prototype.isLocalDescendant = function(node){};
+/**
+* @param {*} container Unused
+* @param {*} shouldObserve Unused
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.scopeSubtree = function(container, shouldObserve){};
+/**
+* @param {string} property The css property name.
+* @return {string}
+*/
+Polymer_LegacyElementMixin.prototype.getComputedStyleValue = function(property){};
+/**
+* @param {string} jobName String to identify the debounce job.
+* @param {function (): void} callback Function that is called (with `this`
+ context) when the wait time elapses.
+* @param {number} wait Optional wait time in milliseconds (ms) after the
+ last signal that must elapse before invoking `callback`
+* @return {!Object}
+*/
+Polymer_LegacyElementMixin.prototype.debounce = function(jobName, callback, wait){};
+/**
+* @param {string} jobName The name of the debouncer started with `debounce`
+* @return {boolean}
+*/
+Polymer_LegacyElementMixin.prototype.isDebouncerActive = function(jobName){};
+/**
+* @param {string} jobName The name of the debouncer started with `debounce`
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.flushDebouncer = function(jobName){};
+/**
+* @param {string} jobName The name of the debouncer started with `debounce`
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.cancelDebouncer = function(jobName){};
+/**
+* @param {!Function} callback The callback function to run, bound to `this`.
+* @param {number=} waitTime Time to wait before calling the
+ `callback`. If unspecified or 0, the callback will be run at microtask
+ timing (before paint).
+* @return {number}
+*/
+Polymer_LegacyElementMixin.prototype.async = function(callback, waitTime){};
+/**
+* @param {number} handle Handle returned from original `async` call to
+ cancel.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.cancelAsync = function(handle){};
+/**
+* @param {string} tag HTML element tag to create.
+* @param {Object=} props Object of properties to configure on the
+ instance.
+* @return {!Element}
+*/
+Polymer_LegacyElementMixin.prototype.create = function(tag, props){};
+/**
+* @param {string} href URL to document to load.
+* @param {?function (!Event): void=} onload Callback to notify when an import successfully
+ loaded.
+* @param {?function (!ErrorEvent): void=} onerror Callback to notify when an import
+ unsuccessfully loaded.
+* @param {boolean=} optAsync True if the import should be loaded `async`.
+ Defaults to `false`.
+* @return {!HTMLLinkElement}
+*/
+Polymer_LegacyElementMixin.prototype.importHref = function(href, onload, onerror, optAsync){};
+/**
+* @param {string} selector Selector to test.
+* @param {!Element=} node Element to test the selector against.
+* @return {boolean}
+*/
+Polymer_LegacyElementMixin.prototype.elementMatches = function(selector, node){};
+/**
+* @param {string} name HTML attribute name
+* @param {boolean=} bool Boolean to force the attribute on or off.
+ When unspecified, the state of the attribute will be reversed.
+* @param {Element=} node Node to target. Defaults to `this`.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.toggleAttribute = function(name, bool, node){};
+/**
+* @param {string} name CSS class name
+* @param {boolean=} bool Boolean to force the class on or off.
+ When unspecified, the state of the class will be reversed.
+* @param {Element=} node Node to target. Defaults to `this`.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.toggleClass = function(name, bool, node){};
+/**
+* @param {string} transformText Transform setting.
+* @param {Element=} node Element to apply the transform to.
+Defaults to `this`
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.transform = function(transformText, node){};
+/**
+* @param {number} x X offset.
+* @param {number} y Y offset.
+* @param {number} z Z offset.
+* @param {Element=} node Element to apply the transform to.
+Defaults to `this`.
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype.translate3d = function(x, y, z, node){};
+/**
+* @param {(string | !Array.<(number | string)>)} arrayOrPath Path to array from which to remove the item
+ (or the array itself).
+* @param {*} item Item to remove.
+* @return {Array}
+*/
+Polymer_LegacyElementMixin.prototype.arrayDelete = function(arrayOrPath, item){};
+/**
+* @param {string} level One of 'log', 'warn', 'error'
+* @param {Array} args Array of strings or objects to log
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._logger = function(level, args){};
+/**
+* @param {...*} args Array of strings or objects to log
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._log = function(args){};
+/**
+* @param {...*} args Array of strings or objects to log
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._warn = function(args){};
+/**
+* @param {...*} args Array of strings or objects to log
+* @return {void}
+*/
+Polymer_LegacyElementMixin.prototype._error = function(args){};
+/**
+* @param {string} methodName Method name to associate with message
+* @param {...*} args Array of strings or objects to log
+* @return {Array}
+*/
+Polymer_LegacyElementMixin.prototype._logf = function(methodName, args){};
+/**
+* @interface
+*/
+function Polymer_MutableData(){}
+/**
+* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
+* @return {boolean}
+*/
+Polymer_MutableData.prototype._shouldPropertyChange = function(property, value, old){};
+/**
+* @interface
+*/
+function Polymer_OptionalMutableData(){}
+/** @type {boolean} */
+Polymer_OptionalMutableData.prototype.mutableData;
+
+/**
+* @param {string} property Property name
+* @param {*} value New property value
+* @param {*} old Previous property value
+* @return {boolean}
+*/
+Polymer_OptionalMutableData.prototype._shouldPropertyChange = function(property, value, old){};
+/**
+* @interface
+* @extends {Polymer_ElementMixin}
+*/
+function Polymer_ArraySelectorMixin(){}
+/** @type {Array} */
+Polymer_ArraySelectorMixin.prototype.items;
+
+/** @type {boolean} */
+Polymer_ArraySelectorMixin.prototype.multi;
+
+/** @type {?(Object | Array.<!Object>)} */
+Polymer_ArraySelectorMixin.prototype.selected;
+
+/** @type {?Object} */
+Polymer_ArraySelectorMixin.prototype.selectedItem;
+
+/** @type {boolean} */
+Polymer_ArraySelectorMixin.prototype.toggle;
+
+/**
+* @return {void}
+*/
+Polymer_ArraySelectorMixin.prototype.clearSelection = function(){};
+/**
+* @param {*} item Item from `items` array to test
+* @return {boolean}
+*/
+Polymer_ArraySelectorMixin.prototype.isSelected = function(item){};
+/**
+* @param {number} idx Index from `items` array to test
+* @return {boolean}
+*/
+Polymer_ArraySelectorMixin.prototype.isIndexSelected = function(idx){};
+/**
+* @param {*} item Item from `items` array to deselect
+* @return {void}
+*/
+Polymer_ArraySelectorMixin.prototype.deselect = function(item){};
+/**
+* @param {number} idx Index from `items` array to deselect
+* @return {void}
+*/
+Polymer_ArraySelectorMixin.prototype.deselectIndex = function(idx){};
+/**
+* @param {*} item Item from `items` array to select
+* @return {void}
+*/
+Polymer_ArraySelectorMixin.prototype.select = function(item){};
+/**
+* @param {number} idx Index from `items` array to select
+* @return {void}
+*/
+Polymer_ArraySelectorMixin.prototype.selectIndex = function(idx){};
+/**
+* @interface
+* @extends {Polymer_ElementMixin}
+*/
+function Polymer_DisableUpgradeMixin(){}
+/**
+* @override
+*/
+Polymer_DisableUpgradeMixin.prototype._initializeProperties = function(){};
+/**
+* @override
+*/
+Polymer_DisableUpgradeMixin.prototype._enableProperties = function(){};
+/**
+* @override
+*/
+Polymer_DisableUpgradeMixin.prototype.attributeChangedCallback = function(name, old, value){};
+/**
+* @override
+*/
+Polymer_DisableUpgradeMixin.prototype.connectedCallback = function(){};
+/**
+* @override
+*/
+Polymer_DisableUpgradeMixin.prototype.disconnectedCallback = function(){}; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-externs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-externs.js
new file mode 100644
index 00000000000..0a86620b691
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-externs.js
@@ -0,0 +1,112 @@
+/**
+ * @fileoverview Externs for Polymer Pass and external Polymer API
+ * @externs
+ *
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+/* eslint-disable */
+
+/**
+ * @typedef {{
+ * type: !Function,
+ * value: *,
+ * readOnly: (boolean | undefined),
+ * computed: (string | undefined),
+ * reflectToAttribute: (boolean | undefined),
+ * notify: (boolean | undefined),
+ * observer: (string | function(*,*) | undefined)
+ * }}
+ */
+let PolymerElementPropertiesMeta;
+
+/**
+ * @typedef {Object<string, !PolymerElementPropertiesMeta>}
+ */
+let PolymerElementProperties;
+
+let PolymerInit = function(){};
+/** @type {string} */
+PolymerInit.prototype.is;
+/** @type {(string | undefined)} */
+PolymerInit.prototype.extends;
+/** @type {(!PolymerElementProperties | undefined)} */
+PolymerInit.prototype.properties;
+/** @type {(!Array<string> | undefined)} */
+PolymerInit.prototype.observers;
+/** @type {(!HTMLTemplateElement | string | undefined)} */
+PolymerInit.prototype.template;
+/** @type {(!Object<string, *> | undefined)} */
+PolymerInit.prototype.hostAttributes;
+/** @type {(!Object<string, string> | undefined)} */
+PolymerInit.prototype.listeners;
+
+let PolymerElementConstructor = function (){};
+/** @type {(string | undefined)} */
+PolymerElementConstructor.is;
+/** @type {(string | undefined)} */
+PolymerElementConstructor.extends;
+/** @type {(!PolymerElementProperties | undefined)} */
+PolymerElementConstructor.properties;
+/** @type {(!Array<string> | undefined)} */
+PolymerElementConstructor.observers;
+/** @type {(!HTMLTemplateElement | string | undefined)} */
+PolymerElementConstructor.template;
+
+let PropertiesMixinConstructor = function (){};
+/** @type {(!PolymerElementProperties | undefined)} */
+PropertiesMixinConstructor.properties;
+
+/**
+ * @param {!PolymerInit} init
+ * @return {!function(new:HTMLElement)}
+ */
+function Polymer(init){}
+
+/** @type {PolymerElementProperties} */
+Polymer.ElementProperties;
+
+/**
+ * @type {(function(*,string,string,Node):*)|undefined}
+ */
+Polymer.sanitizeDOMValue;
+
+/**
+ * @param {string} string
+ * @param {Object} obj
+ * @return {string}
+ */
+function JSCompiler_renameProperty(string, obj) {}
+
+/** @record */
+function PolymerTelemetry(){}
+/** @type {number} */
+PolymerTelemetry.instanceCount;
+/** @type {Array<HTMLElement>} */
+PolymerTelemetry.registrations;
+/** @type {function(HTMLElement)} */
+PolymerTelemetry._regLog;
+/** @type {function(HTMLElement)} */
+PolymerTelemetry.register;
+/** @type {function(HTMLElement)} */
+PolymerTelemetry.dumpRegistrations;;
+
+/** @type {PolymerTelemetry} */
+Polymer.telemetry;
+
+/** @type {string} */
+Polymer.version;
+
+// nb. This is explicitly 'var', as Closure Compiler checks that this is the case.
+/**
+ * @constructor
+ * @extends {HTMLElement}
+ * @implements {Polymer_LegacyElementMixin}
+ */
+var PolymerElement = Polymer.LegacyElementMixin();
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-shared-types.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-shared-types.js
new file mode 100644
index 00000000000..274f60351d1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-shared-types.js
@@ -0,0 +1,165 @@
+/**
+ * @fileoverview Internal shared types for Polymer
+ *
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+/* eslint-disable no-unused-vars, strict, valid-jsdoc */
+
+/**
+ * @constructor
+ * @extends {DocumentFragment}
+ */
+function StampedTemplate() { }
+/** @type {boolean} */
+StampedTemplate.prototype.__noInsertionPoint;
+/** @type {!Array<!Node>} */
+StampedTemplate.prototype.nodeList;
+/** @type {!Object<string, !Element>} */
+StampedTemplate.prototype.$;
+/** @type {!TemplateInfo | undefined} */
+StampedTemplate.prototype.templateInfo;
+
+/** @interface */
+function NodeInfo() { }
+/** @type {string} */
+NodeInfo.prototype.id;
+/** @type {!Array<{name: string, value: string}>}*/
+NodeInfo.prototype.events;
+/** @type {boolean} */
+NodeInfo.prototype.hasInsertionPoint;
+/** @type {!TemplateInfo} */
+NodeInfo.prototype.templateInfo;
+/** @type {!NodeInfo} */
+NodeInfo.prototype.parentInfo;
+/** @type {number} */
+NodeInfo.prototype.parentIndex;
+/** @type {number} */
+NodeInfo.prototype.infoIndex;
+/** @type {!Array<!Binding>} */
+NodeInfo.prototype.bindings;
+
+/** @interface */
+function TemplateInfo() { }
+/** @type {!Array<!NodeInfo>} */
+TemplateInfo.prototype.nodeInfoList;
+/** @type {!Array<!Node>} */
+TemplateInfo.prototype.nodeList;
+/** @type {boolean} */
+TemplateInfo.prototype.stripWhitespace;
+/** @type {boolean | undefined} */
+TemplateInfo.prototype.hasInsertionPoint;
+/** @type {!Object} */
+TemplateInfo.prototype.hostProps;
+/** @type {!Object} */
+TemplateInfo.prototype.propertyEffects;
+/** @type {TemplateInfo | undefined} */
+TemplateInfo.prototype.nextTemplateInfo;
+/** @type {TemplateInfo | undefined} */
+TemplateInfo.prototype.previousTemplateInfo;
+/** @type {!Array<!Node>} */
+TemplateInfo.prototype.childNodes;
+/** @type {boolean} */
+TemplateInfo.prototype.wasPreBound;
+
+/**
+ * type for HTMLTemplateElement with `_templateInfo`
+ *
+ * @constructor
+ * @extends {HTMLTemplateElement}
+ */
+function HTMLTemplateElementWithInfo() { }
+/** @type {TemplateInfo} */
+HTMLTemplateElementWithInfo.prototype._templateInfo;
+
+/**
+ * @typedef {{
+ * literal: string,
+ * compoundIndex: (number | undefined)
+ * }}
+ */
+let LiteralBindingPart;
+
+/**
+ * @typedef {{
+ * literal: boolean,
+ * name: string,
+ * value: (string | number),
+ * rootProperty: (string | undefined),
+ * structured: (boolean | undefined),
+ * wildcard: (boolean | undefined)
+ * }}
+ */
+let MethodArg;
+
+/**
+ * @typedef {{
+ * methodName: string,
+ * static: boolean,
+ * args: !Array<!MethodArg>,
+ * dynamicFn: (boolean | undefined),
+ * }}
+ */
+let MethodSignature;
+
+/**
+ * @typedef {{
+ * mode: string,
+ * negate: boolean,
+ * source: string,
+ * dependencies: !Array<(!MethodArg|string)>,
+ * customEvent: boolean,
+ * signature: Object,
+ * event: string
+ * }}
+ */
+let ExpressionBindingPart;
+
+/**
+ * @typedef {LiteralBindingPart | ExpressionBindingPart}
+ */
+let BindingPart;
+
+/**
+ * @typedef {{
+ * kind: string,
+ * target: string,
+ * parts: Array<!BindingPart>,
+ * literal: (string | undefined),
+ * isCompound: boolean,
+ * listenerEvent: (string | undefined),
+ * listenerNegate: (boolean | undefined)
+ * }}
+ */
+let Binding;
+
+/**
+ * @typedef {{
+ * path: string
+ * }}
+ */
+let PathInfo;
+
+/**
+ * @typedef {{
+ * forwardHostProp: (function(string, *) | undefined),
+ * instanceProps: (Object | undefined),
+ * mutableData: (boolean | undefined),
+ * notifyInstanceProp: (function(*, string, *) | undefined),
+ * parentModel: (boolean | undefined)
+ * }}
+ */
+let TemplatizeOptions;
+
+/** @record */
+function AsyncInterface(){}
+/** @type {function(!Function, number=): number} */
+AsyncInterface.prototype.run;
+/** @type {function(number): void} */
+AsyncInterface.prototype.cancel;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-types.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-types.html
new file mode 100644
index 00000000000..bc7abad6366
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/polymer-internal-types.html
@@ -0,0 +1,11 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<!-- internal shared types for closure pass -->
+<script src="polymer-internal-shared-types.js"></script> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/webcomponents-externs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/webcomponents-externs.js
new file mode 100644
index 00000000000..8bcf4cede57
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/externs/webcomponents-externs.js
@@ -0,0 +1,64 @@
+/**
+ * @fileoverview Externs for webcomponents polyfills
+ * @externs
+ *
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+/* eslint-disable */
+
+let HTMLImports = {
+ /**
+ * @param {function()} callback
+ */
+ whenReady(callback){},
+ /**
+ * @param {Element} element
+ * @returns {Document} document
+ */
+ importForElement(element){}
+};
+
+window.HTMLImports = HTMLImports;
+
+let ShadyDOM = {
+ inUse: false,
+ flush(){},
+ /**
+ * @param {!Node} target
+ * @param {function(Array<MutationRecord>, MutationObserver)} callback
+ * @return {MutationObserver}
+ */
+ observeChildren(target, callback){},
+ /**
+ * @param {MutationObserver} observer
+ */
+ unobserveChildren(observer){},
+ /**
+ * @param {Node} node
+ */
+ patch(node){}
+};
+
+window.ShadyDOM = ShadyDOM;
+
+let WebComponents = {};
+window.WebComponents = WebComponents;
+
+/** @type {Element} */
+HTMLElement.prototype._activeElement;
+
+/**
+ * @param {HTMLTemplateElement} template
+ */
+HTMLTemplateElement.decorate = function(template){};
+
+/**
+ * @param {function(function())} cb callback
+ */
+CustomElementRegistry.prototype.polyfillWrapFlushCallback = function(cb){};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/gen-tsd.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/gen-tsd.json
new file mode 100644
index 00000000000..3d3a5e71348
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/gen-tsd.json
@@ -0,0 +1,23 @@
+{
+ "excludeFiles": [
+ "dist/**",
+ "externs/**",
+ "gulpfile.js",
+ "test/**",
+ "util/**",
+ "index.html"
+ ],
+ "removeReferences": [
+ "../shadycss/apply-shim.d.ts",
+ "../shadycss/custom-style-interface.d.ts"
+ ],
+ "addReferences": {
+ "lib/utils/boot.d.ts": [
+ "extra-types.d.ts"
+ ]
+ },
+ "renameTypes": {
+ "Polymer_PropertyEffects": "Polymer.PropertyEffects",
+ "Element": "_Element"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/img/migration.png b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/img/migration.png
new file mode 100644
index 00000000000..b410b1c266b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/img/migration.png
Binary files differ
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/index.html
new file mode 100644
index 00000000000..fc969123587
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/index.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<!--
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+<head>
+
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../webcomponentsjs/webcomponents-lite.js"></script>
+ <link rel="import" href="../iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/array-selector.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/array-selector.html
new file mode 100644
index 00000000000..436983a0163
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/array-selector.html
@@ -0,0 +1,440 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer-element.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/array-splice.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * Element mixin for recording dynamic associations between item paths in a
+ * master `items` array and a `selected` array such that path changes to the
+ * master array (at the host) element or elsewhere via data-binding) are
+ * correctly propagated to items in the selected array and vice-versa.
+ *
+ * The `items` property accepts an array of user data, and via the
+ * `select(item)` and `deselect(item)` API, updates the `selected` property
+ * which may be bound to other parts of the application, and any changes to
+ * sub-fields of `selected` item(s) will be kept in sync with items in the
+ * `items` array. When `multi` is false, `selected` is a property
+ * representing the last selected item. When `multi` is true, `selected`
+ * is an array of multiply selected items.
+ *
+ * @polymer
+ * @mixinFunction
+ * @appliesMixin Polymer.ElementMixin
+ * @memberof Polymer
+ * @summary Element mixin for recording dynamic associations between item paths in a
+ * master `items` array and a `selected` array
+ */
+ let ArraySelectorMixin = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @constructor
+ * @extends {superClass}
+ * @implements {Polymer_ElementMixin}
+ */
+ let elementBase = Polymer.ElementMixin(superClass);
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_ArraySelectorMixin}
+ * @unrestricted
+ */
+ class ArraySelectorMixin extends elementBase {
+
+ static get properties() {
+
+ return {
+
+ /**
+ * An array containing items from which selection will be made.
+ */
+ items: {
+ type: Array,
+ },
+
+ /**
+ * When `true`, multiple items may be selected at once (in this case,
+ * `selected` is an array of currently selected items). When `false`,
+ * only one item may be selected at a time.
+ */
+ multi: {
+ type: Boolean,
+ value: false,
+ },
+
+ /**
+ * When `multi` is true, this is an array that contains any selected.
+ * When `multi` is false, this is the currently selected item, or `null`
+ * if no item is selected.
+ * @type {?(Object|Array<!Object>)}
+ */
+ selected: {
+ type: Object,
+ notify: true
+ },
+
+ /**
+ * When `multi` is false, this is the currently selected item, or `null`
+ * if no item is selected.
+ * @type {?Object}
+ */
+ selectedItem: {
+ type: Object,
+ notify: true
+ },
+
+ /**
+ * When `true`, calling `select` on an item that is already selected
+ * will deselect the item.
+ */
+ toggle: {
+ type: Boolean,
+ value: false
+ }
+
+ };
+ }
+
+ static get observers() {
+ return ['__updateSelection(multi, items.*)'];
+ }
+
+ constructor() {
+ super();
+ this.__lastItems = null;
+ this.__lastMulti = null;
+ this.__selectedMap = null;
+ }
+
+ __updateSelection(multi, itemsInfo) {
+ let path = itemsInfo.path;
+ if (path == 'items') {
+ // Case 1 - items array changed, so diff against previous array and
+ // deselect any removed items and adjust selected indices
+ let newItems = itemsInfo.base || [];
+ let lastItems = this.__lastItems;
+ let lastMulti = this.__lastMulti;
+ if (multi !== lastMulti) {
+ this.clearSelection();
+ }
+ if (lastItems) {
+ let splices = Polymer.ArraySplice.calculateSplices(newItems, lastItems);
+ this.__applySplices(splices);
+ }
+ this.__lastItems = newItems;
+ this.__lastMulti = multi;
+ } else if (itemsInfo.path == 'items.splices') {
+ // Case 2 - got specific splice information describing the array mutation:
+ // deselect any removed items and adjust selected indices
+ this.__applySplices(itemsInfo.value.indexSplices);
+ } else {
+ // Case 3 - an array element was changed, so deselect the previous
+ // item for that index if it was previously selected
+ let part = path.slice('items.'.length);
+ let idx = parseInt(part, 10);
+ if ((part.indexOf('.') < 0) && part == idx) {
+ this.__deselectChangedIdx(idx);
+ }
+ }
+ }
+
+ __applySplices(splices) {
+ let selected = this.__selectedMap;
+ // Adjust selected indices and mark removals
+ for (let i=0; i<splices.length; i++) {
+ let s = splices[i];
+ selected.forEach((idx, item) => {
+ if (idx < s.index) {
+ // no change
+ } else if (idx >= s.index + s.removed.length) {
+ // adjust index
+ selected.set(item, idx + s.addedCount - s.removed.length);
+ } else {
+ // remove index
+ selected.set(item, -1);
+ }
+ });
+ for (let j=0; j<s.addedCount; j++) {
+ let idx = s.index + j;
+ if (selected.has(this.items[idx])) {
+ selected.set(this.items[idx], idx);
+ }
+ }
+ }
+ // Update linked paths
+ this.__updateLinks();
+ // Remove selected items that were removed from the items array
+ let sidx = 0;
+ selected.forEach((idx, item) => {
+ if (idx < 0) {
+ if (this.multi) {
+ this.splice('selected', sidx, 1);
+ } else {
+ this.selected = this.selectedItem = null;
+ }
+ selected.delete(item);
+ } else {
+ sidx++;
+ }
+ });
+ }
+
+ __updateLinks() {
+ this.__dataLinkedPaths = {};
+ if (this.multi) {
+ let sidx = 0;
+ this.__selectedMap.forEach(idx => {
+ if (idx >= 0) {
+ this.linkPaths('items.' + idx, 'selected.' + sidx++);
+ }
+ });
+ } else {
+ this.__selectedMap.forEach(idx => {
+ this.linkPaths('selected', 'items.' + idx);
+ this.linkPaths('selectedItem', 'items.' + idx);
+ });
+ }
+ }
+
+ /**
+ * Clears the selection state.
+ * @return {void}
+ */
+ clearSelection() {
+ // Unbind previous selection
+ this.__dataLinkedPaths = {};
+ // The selected map stores 3 pieces of information:
+ // key: items array object
+ // value: items array index
+ // order: selected array index
+ this.__selectedMap = new Map();
+ // Initialize selection
+ this.selected = this.multi ? [] : null;
+ this.selectedItem = null;
+ }
+
+ /**
+ * Returns whether the item is currently selected.
+ *
+ * @param {*} item Item from `items` array to test
+ * @return {boolean} Whether the item is selected
+ */
+ isSelected(item) {
+ return this.__selectedMap.has(item);
+ }
+
+ /**
+ * Returns whether the item is currently selected.
+ *
+ * @param {number} idx Index from `items` array to test
+ * @return {boolean} Whether the item is selected
+ */
+ isIndexSelected(idx) {
+ return this.isSelected(this.items[idx]);
+ }
+
+ __deselectChangedIdx(idx) {
+ let sidx = this.__selectedIndexForItemIndex(idx);
+ if (sidx >= 0) {
+ let i = 0;
+ this.__selectedMap.forEach((idx, item) => {
+ if (sidx == i++) {
+ this.deselect(item);
+ }
+ });
+ }
+ }
+
+ __selectedIndexForItemIndex(idx) {
+ let selected = this.__dataLinkedPaths['items.' + idx];
+ if (selected) {
+ return parseInt(selected.slice('selected.'.length), 10);
+ }
+ }
+
+ /**
+ * Deselects the given item if it is already selected.
+ *
+ * @param {*} item Item from `items` array to deselect
+ * @return {void}
+ */
+ deselect(item) {
+ let idx = this.__selectedMap.get(item);
+ if (idx >= 0) {
+ this.__selectedMap.delete(item);
+ let sidx;
+ if (this.multi) {
+ sidx = this.__selectedIndexForItemIndex(idx);
+ }
+ this.__updateLinks();
+ if (this.multi) {
+ this.splice('selected', sidx, 1);
+ } else {
+ this.selected = this.selectedItem = null;
+ }
+ }
+ }
+
+ /**
+ * Deselects the given index if it is already selected.
+ *
+ * @param {number} idx Index from `items` array to deselect
+ * @return {void}
+ */
+ deselectIndex(idx) {
+ this.deselect(this.items[idx]);
+ }
+
+ /**
+ * Selects the given item. When `toggle` is true, this will automatically
+ * deselect the item if already selected.
+ *
+ * @param {*} item Item from `items` array to select
+ * @return {void}
+ */
+ select(item) {
+ this.selectIndex(this.items.indexOf(item));
+ }
+
+ /**
+ * Selects the given index. When `toggle` is true, this will automatically
+ * deselect the item if already selected.
+ *
+ * @param {number} idx Index from `items` array to select
+ * @return {void}
+ */
+ selectIndex(idx) {
+ let item = this.items[idx];
+ if (!this.isSelected(item)) {
+ if (!this.multi) {
+ this.__selectedMap.clear();
+ }
+ this.__selectedMap.set(item, idx);
+ this.__updateLinks();
+ if (this.multi) {
+ this.push('selected', item);
+ } else {
+ this.selected = this.selectedItem = item;
+ }
+ } else if (this.toggle) {
+ this.deselectIndex(idx);
+ }
+ }
+
+ }
+
+ return ArraySelectorMixin;
+
+ });
+
+ // export mixin
+ Polymer.ArraySelectorMixin = ArraySelectorMixin;
+
+ /**
+ * @constructor
+ * @extends {Polymer.Element}
+ * @implements {Polymer_ArraySelectorMixin}
+ */
+ let baseArraySelector = ArraySelectorMixin(Polymer.Element);
+
+ /**
+ * Element implementing the `Polymer.ArraySelector` mixin, which records
+ * dynamic associations between item paths in a master `items` array and a
+ * `selected` array such that path changes to the master array (at the host)
+ * element or elsewhere via data-binding) are correctly propagated to items
+ * in the selected array and vice-versa.
+ *
+ * The `items` property accepts an array of user data, and via the
+ * `select(item)` and `deselect(item)` API, updates the `selected` property
+ * which may be bound to other parts of the application, and any changes to
+ * sub-fields of `selected` item(s) will be kept in sync with items in the
+ * `items` array. When `multi` is false, `selected` is a property
+ * representing the last selected item. When `multi` is true, `selected`
+ * is an array of multiply selected items.
+ *
+ * Example:
+ *
+ * ```html
+ * <dom-module id="employee-list">
+ *
+ * <template>
+ *
+ * <div> Employee list: </div>
+ * <dom-repeat id="employeeList" items="{{employees}}">
+ * <template>
+ * <div>First name: <span>{{item.first}}</span></div>
+ * <div>Last name: <span>{{item.last}}</span></div>
+ * <button on-click="toggleSelection">Select</button>
+ * </template>
+ * </dom-repeat>
+ *
+ * <array-selector id="selector" items="{{employees}}" selected="{{selected}}" multi toggle></array-selector>
+ *
+ * <div> Selected employees: </div>
+ * <dom-repeat items="{{selected}}">
+ * <template>
+ * <div>First name: <span>{{item.first}}</span></div>
+ * <div>Last name: <span>{{item.last}}</span></div>
+ * </template>
+ * </dom-repeat>
+ *
+ * </template>
+ *
+ * </dom-module>
+ * ```
+ *
+ * ```js
+ *class EmployeeList extends Polymer.Element {
+ * static get is() { return 'employee-list'; }
+ * static get properties() {
+ * return {
+ * employees: {
+ * value() {
+ * return [
+ * {first: 'Bob', last: 'Smith'},
+ * {first: 'Sally', last: 'Johnson'},
+ * ...
+ * ];
+ * }
+ * }
+ * };
+ * }
+ * toggleSelection(e) {
+ * let item = this.$.employeeList.itemForElement(e.target);
+ * this.$.selector.select(item);
+ * }
+ *}
+ * ```
+ *
+ * @polymer
+ * @customElement
+ * @extends {baseArraySelector}
+ * @appliesMixin Polymer.ArraySelectorMixin
+ * @memberof Polymer
+ * @summary Custom element that links paths between an input `items` array and
+ * an output `selected` item or array based on calls to its selection API.
+ */
+ class ArraySelector extends baseArraySelector {
+ // Not needed to find template; can be removed once the analyzer
+ // can find the tag name from customElements.define call
+ static get is() { return 'array-selector'; }
+ }
+ customElements.define(ArraySelector.is, ArraySelector);
+ Polymer.ArraySelector = ArraySelector;
+
+})();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/custom-style.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/custom-style.html
new file mode 100644
index 00000000000..67c3f657e5b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/custom-style.html
@@ -0,0 +1,114 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../../../shadycss/custom-style-interface.html">
+<link rel="import" href="../utils/style-gather.html">
+<script>
+(function() {
+ 'use strict';
+
+ const attr = 'include';
+
+ const CustomStyleInterface = window.ShadyCSS.CustomStyleInterface;
+
+ /**
+ * Custom element for defining styles in the main document that can take
+ * advantage of [shady DOM](https://github.com/webcomponents/shadycss) shims
+ * for style encapsulation, custom properties, and custom mixins.
+ *
+ * - Document styles defined in a `<custom-style>` are shimmed to ensure they
+ * do not leak into local DOM when running on browsers without native
+ * Shadow DOM.
+ * - Custom properties can be defined in a `<custom-style>`. Use the `html` selector
+ * to define custom properties that apply to all custom elements.
+ * - Custom mixins can be defined in a `<custom-style>`, if you import the optional
+ * [apply shim](https://github.com/webcomponents/shadycss#about-applyshim)
+ * (`shadycss/apply-shim.html`).
+ *
+ * To use:
+ *
+ * - Import `custom-style.html`.
+ * - Place a `<custom-style>` element in the main document, wrapping an inline `<style>` tag that
+ * contains the CSS rules you want to shim.
+ *
+ * For example:
+ *
+ * ```html
+ * <!-- import apply shim--only required if using mixins -->
+ * <link rel="import" href="bower_components/shadycss/apply-shim.html">
+ * <!-- import custom-style element -->
+ * <link rel="import" href="bower_components/polymer/lib/elements/custom-style.html">
+ *
+ * <custom-style>
+ * <style>
+ * html {
+ * --custom-color: blue;
+ * --custom-mixin: {
+ * font-weight: bold;
+ * color: red;
+ * };
+ * }
+ * </style>
+ * </custom-style>
+ * ```
+ *
+ * @customElement
+ * @extends HTMLElement
+ * @memberof Polymer
+ * @summary Custom element for defining styles in the main document that can
+ * take advantage of Polymer's style scoping and custom properties shims.
+ */
+ class CustomStyle extends HTMLElement {
+ constructor() {
+ super();
+ this._style = null;
+ CustomStyleInterface.addCustomStyle(this);
+ }
+ /**
+ * Returns the light-DOM `<style>` child this element wraps. Upon first
+ * call any style modules referenced via the `include` attribute will be
+ * concatenated to this element's `<style>`.
+ *
+ * @return {HTMLStyleElement} This element's light-DOM `<style>`
+ */
+ getStyle() {
+ if (this._style) {
+ return this._style;
+ }
+ const style = /** @type {HTMLStyleElement} */(this.querySelector('style'));
+ if (!style) {
+ return null;
+ }
+ this._style = style;
+ const include = style.getAttribute(attr);
+ if (include) {
+ style.removeAttribute(attr);
+ style.textContent = Polymer.StyleGather.cssFromModules(include) + style.textContent;
+ }
+ /*
+ HTML Imports styling the main document are deprecated in Chrome
+ https://crbug.com/523952
+
+ If this element is not in the main document, then it must be in an HTML Import document.
+ In that case, move the custom style to the main document.
+
+ The ordering of `<custom-style>` should stay the same as when loaded by HTML Imports, but there may be odd
+ cases of ordering w.r.t the main document styles.
+ */
+ if (this.ownerDocument !== window.document) {
+ window.document.head.appendChild(this);
+ }
+ return this._style;
+ }
+ }
+
+ window.customElements.define('custom-style', CustomStyle);
+ Polymer.CustomStyle = CustomStyle;
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-bind.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-bind.html
new file mode 100644
index 00000000000..8b64cca385d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-bind.html
@@ -0,0 +1,139 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../mixins/property-effects.html">
+<link rel="import" href="../mixins/mutable-data.html">
+<link rel="import" href="../mixins/gesture-event-listeners.html">
+
+<script>
+
+ (function() {
+ 'use strict';
+
+ /**
+ * @constructor
+ * @extends {HTMLElement}
+ * @implements {Polymer_PropertyEffects}
+ * @implements {Polymer_OptionalMutableData}
+ * @implements {Polymer_GestureEventListeners}
+ */
+ const domBindBase =
+ Polymer.GestureEventListeners(
+ Polymer.OptionalMutableData(
+ Polymer.PropertyEffects(HTMLElement)));
+
+ /**
+ * Custom element to allow using Polymer's template features (data binding,
+ * declarative event listeners, etc.) in the main document without defining
+ * a new custom element.
+ *
+ * `<template>` tags utilizing bindings may be wrapped with the `<dom-bind>`
+ * element, which will immediately stamp the wrapped template into the main
+ * document and bind elements to the `dom-bind` element itself as the
+ * binding scope.
+ *
+ * @polymer
+ * @customElement
+ * @appliesMixin Polymer.PropertyEffects
+ * @appliesMixin Polymer.OptionalMutableData
+ * @appliesMixin Polymer.GestureEventListeners
+ * @extends {domBindBase}
+ * @memberof Polymer
+ * @summary Custom element to allow using Polymer's template features (data
+ * binding, declarative event listeners, etc.) in the main document.
+ */
+ class DomBind extends domBindBase {
+
+ static get observedAttributes() { return ['mutable-data']; }
+
+ constructor() {
+ super();
+ this.root = null;
+ this.$ = null;
+ this.__children = null;
+ }
+
+ /** @return {void} */
+ attributeChangedCallback() {
+ // assumes only one observed attribute
+ this.mutableData = true;
+ }
+
+ /** @return {void} */
+ connectedCallback() {
+ this.style.display = 'none';
+ this.render();
+ }
+
+ /** @return {void} */
+ disconnectedCallback() {
+ this.__removeChildren();
+ }
+
+ __insertChildren() {
+ this.parentNode.insertBefore(this.root, this);
+ }
+
+ __removeChildren() {
+ if (this.__children) {
+ for (let i=0; i<this.__children.length; i++) {
+ this.root.appendChild(this.__children[i]);
+ }
+ }
+ }
+
+ /**
+ * Forces the element to render its content. This is typically only
+ * necessary to call if HTMLImports with the async attribute are used.
+ * @return {void}
+ */
+ render() {
+ let template;
+ if (!this.__children) {
+ template = /** @type {HTMLTemplateElement} */(template || this.querySelector('template'));
+ if (!template) {
+ // Wait until childList changes and template should be there by then
+ let observer = new MutationObserver(() => {
+ template = /** @type {HTMLTemplateElement} */(this.querySelector('template'));
+ if (template) {
+ observer.disconnect();
+ this.render();
+ } else {
+ throw new Error('dom-bind requires a <template> child');
+ }
+ });
+ observer.observe(this, {childList: true});
+ return;
+ }
+ this.root = this._stampTemplate(template);
+ this.$ = this.root.$;
+ this.__children = [];
+ for (let n=this.root.firstChild; n; n=n.nextSibling) {
+ this.__children[this.__children.length] = n;
+ }
+ this._enableProperties();
+ }
+ this.__insertChildren();
+ this.dispatchEvent(new CustomEvent('dom-change', {
+ bubbles: true,
+ composed: true
+ }));
+ }
+
+ }
+
+ customElements.define('dom-bind', DomBind);
+
+ Polymer.DomBind = DomBind;
+
+ })();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-if.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-if.html
new file mode 100644
index 00000000000..527ede86ae0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-if.html
@@ -0,0 +1,288 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer-element.html">
+<link rel="import" href="../utils/templatize.html">
+<link rel="import" href="../utils/debounce.html">
+<link rel="import" href="../utils/flush.html">
+
+<script>
+
+(function() {
+ 'use strict';
+
+ /**
+ * The `<dom-if>` element will stamp a light-dom `<template>` child when
+ * the `if` property becomes truthy, and the template can use Polymer
+ * data-binding and declarative event features when used in the context of
+ * a Polymer element's template.
+ *
+ * When `if` becomes falsy, the stamped content is hidden but not
+ * removed from dom. When `if` subsequently becomes truthy again, the content
+ * is simply re-shown. This approach is used due to its favorable performance
+ * characteristics: the expense of creating template content is paid only
+ * once and lazily.
+ *
+ * Set the `restamp` property to true to force the stamped content to be
+ * created / destroyed when the `if` condition changes.
+ *
+ * @customElement
+ * @polymer
+ * @extends Polymer.Element
+ * @memberof Polymer
+ * @summary Custom element that conditionally stamps and hides or removes
+ * template content based on a boolean flag.
+ */
+ class DomIf extends Polymer.Element {
+
+ // Not needed to find template; can be removed once the analyzer
+ // can find the tag name from customElements.define call
+ static get is() { return 'dom-if'; }
+
+ static get template() { return null; }
+
+ static get properties() {
+
+ return {
+
+ /**
+ * Fired whenever DOM is added or removed/hidden by this template (by
+ * default, rendering occurs lazily). To force immediate rendering, call
+ * `render`.
+ *
+ * @event dom-change
+ */
+
+ /**
+ * A boolean indicating whether this template should stamp.
+ */
+ if: {
+ type: Boolean,
+ observer: '__debounceRender'
+ },
+
+ /**
+ * When true, elements will be removed from DOM and discarded when `if`
+ * becomes false and re-created and added back to the DOM when `if`
+ * becomes true. By default, stamped elements will be hidden but left
+ * in the DOM when `if` becomes false, which is generally results
+ * in better performance.
+ */
+ restamp: {
+ type: Boolean,
+ observer: '__debounceRender'
+ }
+
+ };
+
+ }
+
+ constructor() {
+ super();
+ this.__renderDebouncer = null;
+ this.__invalidProps = null;
+ this.__instance = null;
+ this._lastIf = false;
+ this.__ctor = null;
+ }
+
+ __debounceRender() {
+ // Render is async for 2 reasons:
+ // 1. To eliminate dom creation trashing if user code thrashes `if` in the
+ // same turn. This was more common in 1.x where a compound computed
+ // property could result in the result changing multiple times, but is
+ // mitigated to a large extent by batched property processing in 2.x.
+ // 2. To avoid double object propagation when a bag including values bound
+ // to the `if` property as well as one or more hostProps could enqueue
+ // the <dom-if> to flush before the <template>'s host property
+ // forwarding. In that scenario creating an instance would result in
+ // the host props being set once, and then the enqueued changes on the
+ // template would set properties a second time, potentially causing an
+ // object to be set to an instance more than once. Creating the
+ // instance async from flushing data ensures this doesn't happen. If
+ // we wanted a sync option in the future, simply having <dom-if> flush
+ // (or clear) its template's pending host properties before creating
+ // the instance would also avoid the problem.
+ this.__renderDebouncer = Polymer.Debouncer.debounce(
+ this.__renderDebouncer
+ , Polymer.Async.microTask
+ , () => this.__render());
+ Polymer.enqueueDebouncer(this.__renderDebouncer);
+ }
+
+ /**
+ * @return {void}
+ */
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ if (!this.parentNode ||
+ (this.parentNode.nodeType == Node.DOCUMENT_FRAGMENT_NODE &&
+ !this.parentNode.host)) {
+ this.__teardownInstance();
+ }
+ }
+
+ /**
+ * @return {void}
+ */
+ connectedCallback() {
+ super.connectedCallback();
+ this.style.display = 'none';
+ if (this.if) {
+ this.__debounceRender();
+ }
+ }
+
+ /**
+ * Forces the element to render its content. Normally rendering is
+ * asynchronous to a provoking change. This is done for efficiency so
+ * that multiple changes trigger only a single render. The render method
+ * should be called if, for example, template rendering is required to
+ * validate application state.
+ * @return {void}
+ */
+ render() {
+ Polymer.flush();
+ }
+
+ __render() {
+ if (this.if) {
+ if (!this.__ensureInstance()) {
+ // No template found yet
+ return;
+ }
+ this._showHideChildren();
+ } else if (this.restamp) {
+ this.__teardownInstance();
+ }
+ if (!this.restamp && this.__instance) {
+ this._showHideChildren();
+ }
+ if (this.if != this._lastIf) {
+ this.dispatchEvent(new CustomEvent('dom-change', {
+ bubbles: true,
+ composed: true
+ }));
+ this._lastIf = this.if;
+ }
+ }
+
+ __ensureInstance() {
+ let parentNode = this.parentNode;
+ // Guard against element being detached while render was queued
+ if (parentNode) {
+ if (!this.__ctor) {
+ let template = /** @type {HTMLTemplateElement} */(this.querySelector('template'));
+ if (!template) {
+ // Wait until childList changes and template should be there by then
+ let observer = new MutationObserver(() => {
+ if (this.querySelector('template')) {
+ observer.disconnect();
+ this.__render();
+ } else {
+ throw new Error('dom-if requires a <template> child');
+ }
+ });
+ observer.observe(this, {childList: true});
+ return false;
+ }
+ this.__ctor = Polymer.Templatize.templatize(template, this, {
+ // dom-if templatizer instances require `mutable: true`, as
+ // `__syncHostProperties` relies on that behavior to sync objects
+ mutableData: true,
+ /**
+ * @param {string} prop Property to forward
+ * @param {*} value Value of property
+ * @this {this}
+ */
+ forwardHostProp: function(prop, value) {
+ if (this.__instance) {
+ if (this.if) {
+ this.__instance.forwardHostProp(prop, value);
+ } else {
+ // If we have an instance but are squelching host property
+ // forwarding due to if being false, note the invalidated
+ // properties so `__syncHostProperties` can sync them the next
+ // time `if` becomes true
+ this.__invalidProps = this.__invalidProps || Object.create(null);
+ this.__invalidProps[Polymer.Path.root(prop)] = true;
+ }
+ }
+ }
+ });
+ }
+ if (!this.__instance) {
+ this.__instance = new this.__ctor();
+ parentNode.insertBefore(this.__instance.root, this);
+ } else {
+ this.__syncHostProperties();
+ let c$ = this.__instance.children;
+ if (c$ && c$.length) {
+ // Detect case where dom-if was re-attached in new position
+ let lastChild = this.previousSibling;
+ if (lastChild !== c$[c$.length-1]) {
+ for (let i=0, n; (i<c$.length) && (n=c$[i]); i++) {
+ parentNode.insertBefore(n, this);
+ }
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ __syncHostProperties() {
+ let props = this.__invalidProps;
+ if (props) {
+ for (let prop in props) {
+ this.__instance._setPendingProperty(prop, this.__dataHost[prop]);
+ }
+ this.__invalidProps = null;
+ this.__instance._flushProperties();
+ }
+ }
+
+ __teardownInstance() {
+ if (this.__instance) {
+ let c$ = this.__instance.children;
+ if (c$ && c$.length) {
+ // use first child parent, for case when dom-if may have been detached
+ let parent = c$[0].parentNode;
+ for (let i=0, n; (i<c$.length) && (n=c$[i]); i++) {
+ parent.removeChild(n);
+ }
+ }
+ this.__instance = null;
+ this.__invalidProps = null;
+ }
+ }
+
+ /**
+ * Shows or hides the template instance top level child elements. For
+ * text nodes, `textContent` is removed while "hidden" and replaced when
+ * "shown."
+ * @return {void}
+ * @protected
+ */
+ _showHideChildren() {
+ let hidden = this.__hideTemplateChildren__ || !this.if;
+ if (this.__instance) {
+ this.__instance._showHideChildren(hidden);
+ }
+ }
+
+ }
+
+ customElements.define(DomIf.is, DomIf);
+
+ Polymer.DomIf = DomIf;
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-module.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-module.html
new file mode 100644
index 00000000000..3ca593b1a91
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-module.html
@@ -0,0 +1,143 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/resolve-url.html">
+<script>
+(function() {
+ 'use strict';
+
+ let modules = {};
+ let lcModules = {};
+ function findModule(id) {
+ return modules[id] || lcModules[id.toLowerCase()];
+ }
+
+ function styleOutsideTemplateCheck(inst) {
+ if (inst.querySelector('style')) {
+ console.warn('dom-module %s has style outside template', inst.id);
+ }
+ }
+
+ /**
+ * The `dom-module` element registers the dom it contains to the name given
+ * by the module's id attribute. It provides a unified database of dom
+ * accessible via its static `import` API.
+ *
+ * A key use case of `dom-module` is for providing custom element `<template>`s
+ * via HTML imports that are parsed by the native HTML parser, that can be
+ * relocated during a bundling pass and still looked up by `id`.
+ *
+ * Example:
+ *
+ * <dom-module id="foo">
+ * <img src="stuff.png">
+ * </dom-module>
+ *
+ * Then in code in some other location that cannot access the dom-module above
+ *
+ * let img = customElements.get('dom-module').import('foo', 'img');
+ *
+ * @customElement
+ * @extends HTMLElement
+ * @memberof Polymer
+ * @summary Custom element that provides a registry of relocatable DOM content
+ * by `id` that is agnostic to bundling.
+ * @unrestricted
+ */
+ class DomModule extends HTMLElement {
+
+ static get observedAttributes() { return ['id']; }
+
+ /**
+ * Retrieves the element specified by the css `selector` in the module
+ * registered by `id`. For example, this.import('foo', 'img');
+ * @param {string} id The id of the dom-module in which to search.
+ * @param {string=} selector The css selector by which to find the element.
+ * @return {Element} Returns the element which matches `selector` in the
+ * module registered at the specified `id`.
+ */
+ static import(id, selector) {
+ if (id) {
+ let m = findModule(id);
+ if (m && selector) {
+ return m.querySelector(selector);
+ }
+ return m;
+ }
+ return null;
+ }
+
+ /**
+ * @param {string} name Name of attribute.
+ * @param {?string} old Old value of attribute.
+ * @param {?string} value Current value of attribute.
+ * @return {void}
+ */
+ attributeChangedCallback(name, old, value) {
+ if (old !== value) {
+ this.register();
+ }
+ }
+
+ /**
+ * The absolute URL of the original location of this `dom-module`.
+ *
+ * This value will differ from this element's `ownerDocument` in the
+ * following ways:
+ * - Takes into account any `assetpath` attribute added during bundling
+ * to indicate the original location relative to the bundled location
+ * - Uses the HTMLImports polyfill's `importForElement` API to ensure
+ * the path is relative to the import document's location since
+ * `ownerDocument` is not currently polyfilled
+ */
+ get assetpath() {
+ // Don't override existing assetpath.
+ if (!this.__assetpath) {
+ // note: assetpath set via an attribute must be relative to this
+ // element's location; accomodate polyfilled HTMLImports
+ const owner = window.HTMLImports && HTMLImports.importForElement ?
+ HTMLImports.importForElement(this) || document : this.ownerDocument;
+ const url = Polymer.ResolveUrl.resolveUrl(
+ this.getAttribute('assetpath') || '', owner.baseURI);
+ this.__assetpath = Polymer.ResolveUrl.pathFromUrl(url);
+ }
+ return this.__assetpath;
+ }
+
+ /**
+ * Registers the dom-module at a given id. This method should only be called
+ * when a dom-module is imperatively created. For
+ * example, `document.createElement('dom-module').register('foo')`.
+ * @param {string=} id The id at which to register the dom-module.
+ * @return {void}
+ */
+ register(id) {
+ id = id || this.id;
+ if (id) {
+ this.id = id;
+ // store id separate from lowercased id so that
+ // in all cases mixedCase id will stored distinctly
+ // and lowercase version is a fallback
+ modules[id] = this;
+ lcModules[id.toLowerCase()] = this;
+ styleOutsideTemplateCheck(this);
+ }
+ }
+ }
+
+ DomModule.prototype['modules'] = modules;
+
+ customElements.define('dom-module', DomModule);
+
+ // export
+ Polymer.DomModule = DomModule;
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-repeat.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-repeat.html
new file mode 100644
index 00000000000..f14f88f7a77
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/elements/dom-repeat.html
@@ -0,0 +1,738 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../polymer-element.html">
+<link rel="import" href="../utils/templatize.html">
+<link rel="import" href="../utils/debounce.html">
+<link rel="import" href="../utils/flush.html">
+<link rel="import" href="../mixins/mutable-data.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ let TemplateInstanceBase = Polymer.TemplateInstanceBase; // eslint-disable-line
+
+ /**
+ * @constructor
+ * @implements {Polymer_OptionalMutableData}
+ * @extends {Polymer.Element}
+ */
+ const domRepeatBase = Polymer.OptionalMutableData(Polymer.Element);
+
+ /**
+ * The `<dom-repeat>` element will automatically stamp and binds one instance
+ * of template content to each object in a user-provided array.
+ * `dom-repeat` accepts an `items` property, and one instance of the template
+ * is stamped for each item into the DOM at the location of the `dom-repeat`
+ * element. The `item` property will be set on each instance's binding
+ * scope, thus templates should bind to sub-properties of `item`.
+ *
+ * Example:
+ *
+ * ```html
+ * <dom-module id="employee-list">
+ *
+ * <template>
+ *
+ * <div> Employee list: </div>
+ * <dom-repeat items="{{employees}}">
+ * <template>
+ * <div>First name: <span>{{item.first}}</span></div>
+ * <div>Last name: <span>{{item.last}}</span></div>
+ * </template>
+ * </dom-repeat>
+ *
+ * </template>
+ *
+ * </dom-module>
+ * ```
+ *
+ * With the following custom element definition:
+ *
+ * ```js
+ * class EmployeeList extends Polymer.Element {
+ * static get is() { return 'employee-list'; }
+ * static get properties() {
+ * return {
+ * employees: {
+ * value() {
+ * return [
+ * {first: 'Bob', last: 'Smith'},
+ * {first: 'Sally', last: 'Johnson'},
+ * ...
+ * ];
+ * }
+ * }
+ * };
+ * }
+ * }
+ * ```
+ *
+ * Notifications for changes to items sub-properties will be forwarded to template
+ * instances, which will update via the normal structured data notification system.
+ *
+ * Mutations to the `items` array itself should be made using the Array
+ * mutation API's on `Polymer.Base` (`push`, `pop`, `splice`, `shift`,
+ * `unshift`), and template instances will be kept in sync with the data in the
+ * array.
+ *
+ * Events caught by event handlers within the `dom-repeat` template will be
+ * decorated with a `model` property, which represents the binding scope for
+ * each template instance. The model is an instance of Polymer.Base, and should
+ * be used to manipulate data on the instance, for example
+ * `event.model.set('item.checked', true);`.
+ *
+ * Alternatively, the model for a template instance for an element stamped by
+ * a `dom-repeat` can be obtained using the `modelForElement` API on the
+ * `dom-repeat` that stamped it, for example
+ * `this.$.domRepeat.modelForElement(event.target).set('item.checked', true);`.
+ * This may be useful for manipulating instance data of event targets obtained
+ * by event handlers on parents of the `dom-repeat` (event delegation).
+ *
+ * A view-specific filter/sort may be applied to each `dom-repeat` by supplying a
+ * `filter` and/or `sort` property. This may be a string that names a function on
+ * the host, or a function may be assigned to the property directly. The functions
+ * should implemented following the standard `Array` filter/sort API.
+ *
+ * In order to re-run the filter or sort functions based on changes to sub-fields
+ * of `items`, the `observe` property may be set as a space-separated list of
+ * `item` sub-fields that should cause a re-filter/sort when modified. If
+ * the filter or sort function depends on properties not contained in `items`,
+ * the user should observe changes to those properties and call `render` to update
+ * the view based on the dependency change.
+ *
+ * For example, for an `dom-repeat` with a filter of the following:
+ *
+ * ```js
+ * isEngineer(item) {
+ * return item.type == 'engineer' || item.manager.type == 'engineer';
+ * }
+ * ```
+ *
+ * Then the `observe` property should be configured as follows:
+ *
+ * ```html
+ * <dom-repeat items="{{employees}}" filter="isEngineer" observe="type manager.type">
+ * ```
+ *
+ * @customElement
+ * @polymer
+ * @memberof Polymer
+ * @extends {domRepeatBase}
+ * @appliesMixin Polymer.OptionalMutableData
+ * @summary Custom element for stamping instance of a template bound to
+ * items in an array.
+ */
+ class DomRepeat extends domRepeatBase {
+
+ // Not needed to find template; can be removed once the analyzer
+ // can find the tag name from customElements.define call
+ static get is() { return 'dom-repeat'; }
+
+ static get template() { return null; }
+
+ static get properties() {
+
+ /**
+ * Fired whenever DOM is added or removed by this template (by
+ * default, rendering occurs lazily). To force immediate rendering, call
+ * `render`.
+ *
+ * @event dom-change
+ */
+ return {
+
+ /**
+ * An array containing items determining how many instances of the template
+ * to stamp and that that each template instance should bind to.
+ */
+ items: {
+ type: Array
+ },
+
+ /**
+ * The name of the variable to add to the binding scope for the array
+ * element associated with a given template instance.
+ */
+ as: {
+ type: String,
+ value: 'item'
+ },
+
+ /**
+ * The name of the variable to add to the binding scope with the index
+ * of the instance in the sorted and filtered list of rendered items.
+ * Note, for the index in the `this.items` array, use the value of the
+ * `itemsIndexAs` property.
+ */
+ indexAs: {
+ type: String,
+ value: 'index'
+ },
+
+ /**
+ * The name of the variable to add to the binding scope with the index
+ * of the instance in the `this.items` array. Note, for the index of
+ * this instance in the sorted and filtered list of rendered items,
+ * use the value of the `indexAs` property.
+ */
+ itemsIndexAs: {
+ type: String,
+ value: 'itemsIndex'
+ },
+
+ /**
+ * A function that should determine the sort order of the items. This
+ * property should either be provided as a string, indicating a method
+ * name on the element's host, or else be an actual function. The
+ * function should match the sort function passed to `Array.sort`.
+ * Using a sort function has no effect on the underlying `items` array.
+ */
+ sort: {
+ type: Function,
+ observer: '__sortChanged'
+ },
+
+ /**
+ * A function that can be used to filter items out of the view. This
+ * property should either be provided as a string, indicating a method
+ * name on the element's host, or else be an actual function. The
+ * function should match the sort function passed to `Array.filter`.
+ * Using a filter function has no effect on the underlying `items` array.
+ */
+ filter: {
+ type: Function,
+ observer: '__filterChanged'
+ },
+
+ /**
+ * When using a `filter` or `sort` function, the `observe` property
+ * should be set to a space-separated list of the names of item
+ * sub-fields that should trigger a re-sort or re-filter when changed.
+ * These should generally be fields of `item` that the sort or filter
+ * function depends on.
+ */
+ observe: {
+ type: String,
+ observer: '__observeChanged'
+ },
+
+ /**
+ * When using a `filter` or `sort` function, the `delay` property
+ * determines a debounce time in ms after a change to observed item
+ * properties that must pass before the filter or sort is re-run.
+ * This is useful in rate-limiting shuffling of the view when
+ * item changes may be frequent.
+ */
+ delay: Number,
+
+ /**
+ * Count of currently rendered items after `filter` (if any) has been applied.
+ * If "chunking mode" is enabled, `renderedItemCount` is updated each time a
+ * set of template instances is rendered.
+ *
+ */
+ renderedItemCount: {
+ type: Number,
+ notify: true,
+ readOnly: true
+ },
+
+ /**
+ * Defines an initial count of template instances to render after setting
+ * the `items` array, before the next paint, and puts the `dom-repeat`
+ * into "chunking mode". The remaining items will be created and rendered
+ * incrementally at each animation frame therof until all instances have
+ * been rendered.
+ */
+ initialCount: {
+ type: Number,
+ observer: '__initializeChunking'
+ },
+
+ /**
+ * When `initialCount` is used, this property defines a frame rate (in
+ * fps) to target by throttling the number of instances rendered each
+ * frame to not exceed the budget for the target frame rate. The
+ * framerate is effectively the number of `requestAnimationFrame`s that
+ * it tries to allow to actually fire in a given second. It does this
+ * by measuring the time between `rAF`s and continuously adjusting the
+ * number of items created each `rAF` to maintain the target framerate.
+ * Setting this to a higher number allows lower latency and higher
+ * throughput for event handlers and other tasks, but results in a
+ * longer time for the remaining items to complete rendering.
+ */
+ targetFramerate: {
+ type: Number,
+ value: 20
+ },
+
+ _targetFrameTime: {
+ type: Number,
+ computed: '__computeFrameTime(targetFramerate)'
+ }
+
+ };
+
+ }
+
+ static get observers() {
+ return [ '__itemsChanged(items.*)' ];
+ }
+
+ constructor() {
+ super();
+ this.__instances = [];
+ this.__limit = Infinity;
+ this.__pool = [];
+ this.__renderDebouncer = null;
+ this.__itemsIdxToInstIdx = {};
+ this.__chunkCount = null;
+ this.__lastChunkTime = null;
+ this.__sortFn = null;
+ this.__filterFn = null;
+ this.__observePaths = null;
+ this.__ctor = null;
+ this.__isDetached = true;
+ this.template = null;
+ }
+
+ /**
+ * @return {void}
+ */
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ this.__isDetached = true;
+ for (let i=0; i<this.__instances.length; i++) {
+ this.__detachInstance(i);
+ }
+ }
+
+ /**
+ * @return {void}
+ */
+ connectedCallback() {
+ super.connectedCallback();
+ this.style.display = 'none';
+ // only perform attachment if the element was previously detached.
+ if (this.__isDetached) {
+ this.__isDetached = false;
+ let parent = this.parentNode;
+ for (let i=0; i<this.__instances.length; i++) {
+ this.__attachInstance(i, parent);
+ }
+ }
+ }
+
+ __ensureTemplatized() {
+ // Templatizing (generating the instance constructor) needs to wait
+ // until ready, since won't have its template content handed back to
+ // it until then
+ if (!this.__ctor) {
+ let template = this.template = /** @type {HTMLTemplateElement} */(this.querySelector('template'));
+ if (!template) {
+ // // Wait until childList changes and template should be there by then
+ let observer = new MutationObserver(() => {
+ if (this.querySelector('template')) {
+ observer.disconnect();
+ this.__render();
+ } else {
+ throw new Error('dom-repeat requires a <template> child');
+ }
+ });
+ observer.observe(this, {childList: true});
+ return false;
+ }
+ // Template instance props that should be excluded from forwarding
+ let instanceProps = {};
+ instanceProps[this.as] = true;
+ instanceProps[this.indexAs] = true;
+ instanceProps[this.itemsIndexAs] = true;
+ this.__ctor = Polymer.Templatize.templatize(template, this, {
+ mutableData: this.mutableData,
+ parentModel: true,
+ instanceProps: instanceProps,
+ /**
+ * @this {this}
+ * @param {string} prop Property to set
+ * @param {*} value Value to set property to
+ */
+ forwardHostProp: function(prop, value) {
+ let i$ = this.__instances;
+ for (let i=0, inst; (i<i$.length) && (inst=i$[i]); i++) {
+ inst.forwardHostProp(prop, value);
+ }
+ },
+ /**
+ * @this {this}
+ * @param {Object} inst Instance to notify
+ * @param {string} prop Property to notify
+ * @param {*} value Value to notify
+ */
+ notifyInstanceProp: function(inst, prop, value) {
+ if (Polymer.Path.matches(this.as, prop)) {
+ let idx = inst[this.itemsIndexAs];
+ if (prop == this.as) {
+ this.items[idx] = value;
+ }
+ let path = Polymer.Path.translate(this.as, 'items.' + idx, prop);
+ this.notifyPath(path, value);
+ }
+ }
+ });
+ }
+ return true;
+ }
+
+ __getMethodHost() {
+ // Technically this should be the owner of the outermost template.
+ // In shadow dom, this is always getRootNode().host, but we can
+ // approximate this via cooperation with our dataHost always setting
+ // `_methodHost` as long as there were bindings (or id's) on this
+ // instance causing it to get a dataHost.
+ return this.__dataHost._methodHost || this.__dataHost;
+ }
+
+ __functionFromPropertyValue(functionOrMethodName) {
+ if (typeof functionOrMethodName === 'string') {
+ let methodName = functionOrMethodName;
+ let obj = this.__getMethodHost();
+ return function() { return obj[methodName].apply(obj, arguments); };
+ }
+
+ return functionOrMethodName;
+ }
+
+ __sortChanged(sort) {
+ this.__sortFn = this.__functionFromPropertyValue(sort);
+ if (this.items) { this.__debounceRender(this.__render); }
+ }
+
+ __filterChanged(filter) {
+ this.__filterFn = this.__functionFromPropertyValue(filter);
+ if (this.items) { this.__debounceRender(this.__render); }
+ }
+
+ __computeFrameTime(rate) {
+ return Math.ceil(1000/rate);
+ }
+
+ __initializeChunking() {
+ if (this.initialCount) {
+ this.__limit = this.initialCount;
+ this.__chunkCount = this.initialCount;
+ this.__lastChunkTime = performance.now();
+ }
+ }
+
+ __tryRenderChunk() {
+ // Debounced so that multiple calls through `_render` between animation
+ // frames only queue one new rAF (e.g. array mutation & chunked render)
+ if (this.items && this.__limit < this.items.length) {
+ this.__debounceRender(this.__requestRenderChunk);
+ }
+ }
+
+ __requestRenderChunk() {
+ requestAnimationFrame(()=>this.__renderChunk());
+ }
+
+ __renderChunk() {
+ // Simple auto chunkSize throttling algorithm based on feedback loop:
+ // measure actual time between frames and scale chunk count by ratio
+ // of target/actual frame time
+ let currChunkTime = performance.now();
+ let ratio = this._targetFrameTime / (currChunkTime - this.__lastChunkTime);
+ this.__chunkCount = Math.round(this.__chunkCount * ratio) || 1;
+ this.__limit += this.__chunkCount;
+ this.__lastChunkTime = currChunkTime;
+ this.__debounceRender(this.__render);
+ }
+
+ __observeChanged() {
+ this.__observePaths = this.observe &&
+ this.observe.replace('.*', '.').split(' ');
+ }
+
+ __itemsChanged(change) {
+ if (this.items && !Array.isArray(this.items)) {
+ console.warn('dom-repeat expected array for `items`, found', this.items);
+ }
+ // If path was to an item (e.g. 'items.3' or 'items.3.foo'), forward the
+ // path to that instance synchronously (returns false for non-item paths)
+ if (!this.__handleItemPath(change.path, change.value)) {
+ // Otherwise, the array was reset ('items') or spliced ('items.splices'),
+ // so queue a full refresh
+ this.__initializeChunking();
+ this.__debounceRender(this.__render);
+ }
+ }
+
+ __handleObservedPaths(path) {
+ // Handle cases where path changes should cause a re-sort/filter
+ if (this.__sortFn || this.__filterFn) {
+ if (!path) {
+ // Always re-render if the item itself changed
+ this.__debounceRender(this.__render, this.delay);
+ } else if (this.__observePaths) {
+ // Otherwise, re-render if the path changed matches an observed path
+ let paths = this.__observePaths;
+ for (let i=0; i<paths.length; i++) {
+ if (path.indexOf(paths[i]) === 0) {
+ this.__debounceRender(this.__render, this.delay);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @param {function(this:DomRepeat)} fn Function to debounce.
+ * @param {number=} delay Delay in ms to debounce by.
+ */
+ __debounceRender(fn, delay = 0) {
+ this.__renderDebouncer = Polymer.Debouncer.debounce(
+ this.__renderDebouncer
+ , delay > 0 ? Polymer.Async.timeOut.after(delay) : Polymer.Async.microTask
+ , fn.bind(this));
+ Polymer.enqueueDebouncer(this.__renderDebouncer);
+ }
+
+ /**
+ * Forces the element to render its content. Normally rendering is
+ * asynchronous to a provoking change. This is done for efficiency so
+ * that multiple changes trigger only a single render. The render method
+ * should be called if, for example, template rendering is required to
+ * validate application state.
+ * @return {void}
+ */
+ render() {
+ // Queue this repeater, then flush all in order
+ this.__debounceRender(this.__render);
+ Polymer.flush();
+ }
+
+ __render() {
+ if (!this.__ensureTemplatized()) {
+ // No template found yet
+ return;
+ }
+ this.__applyFullRefresh();
+ // Reset the pool
+ // TODO(kschaaf): Reuse pool across turns and nested templates
+ // Now that objects/arrays are re-evaluated when set, we can safely
+ // reuse pooled instances across turns, however we still need to decide
+ // semantics regarding how long to hold, how many to hold, etc.
+ this.__pool.length = 0;
+ // Set rendered item count
+ this._setRenderedItemCount(this.__instances.length);
+ // Notify users
+ this.dispatchEvent(new CustomEvent('dom-change', {
+ bubbles: true,
+ composed: true
+ }));
+ // Check to see if we need to render more items
+ this.__tryRenderChunk();
+ }
+
+ __applyFullRefresh() {
+ let items = this.items || [];
+ let isntIdxToItemsIdx = new Array(items.length);
+ for (let i=0; i<items.length; i++) {
+ isntIdxToItemsIdx[i] = i;
+ }
+ // Apply user filter
+ if (this.__filterFn) {
+ isntIdxToItemsIdx = isntIdxToItemsIdx.filter((i, idx, array) =>
+ this.__filterFn(items[i], idx, array));
+ }
+ // Apply user sort
+ if (this.__sortFn) {
+ isntIdxToItemsIdx.sort((a, b) => this.__sortFn(items[a], items[b]));
+ }
+ // items->inst map kept for item path forwarding
+ const itemsIdxToInstIdx = this.__itemsIdxToInstIdx = {};
+ let instIdx = 0;
+ // Generate instances and assign items
+ const limit = Math.min(isntIdxToItemsIdx.length, this.__limit);
+ for (; instIdx<limit; instIdx++) {
+ let inst = this.__instances[instIdx];
+ let itemIdx = isntIdxToItemsIdx[instIdx];
+ let item = items[itemIdx];
+ itemsIdxToInstIdx[itemIdx] = instIdx;
+ if (inst) {
+ inst._setPendingProperty(this.as, item);
+ inst._setPendingProperty(this.indexAs, instIdx);
+ inst._setPendingProperty(this.itemsIndexAs, itemIdx);
+ inst._flushProperties();
+ } else {
+ this.__insertInstance(item, instIdx, itemIdx);
+ }
+ }
+ // Remove any extra instances from previous state
+ for (let i=this.__instances.length-1; i>=instIdx; i--) {
+ this.__detachAndRemoveInstance(i);
+ }
+ }
+
+ __detachInstance(idx) {
+ let inst = this.__instances[idx];
+ for (let i=0; i<inst.children.length; i++) {
+ let el = inst.children[i];
+ inst.root.appendChild(el);
+ }
+ return inst;
+ }
+
+ __attachInstance(idx, parent) {
+ let inst = this.__instances[idx];
+ parent.insertBefore(inst.root, this);
+ }
+
+ __detachAndRemoveInstance(idx) {
+ let inst = this.__detachInstance(idx);
+ if (inst) {
+ this.__pool.push(inst);
+ }
+ this.__instances.splice(idx, 1);
+ }
+
+ __stampInstance(item, instIdx, itemIdx) {
+ let model = {};
+ model[this.as] = item;
+ model[this.indexAs] = instIdx;
+ model[this.itemsIndexAs] = itemIdx;
+ return new this.__ctor(model);
+ }
+
+ __insertInstance(item, instIdx, itemIdx) {
+ let inst = this.__pool.pop();
+ if (inst) {
+ // TODO(kschaaf): If the pool is shared across turns, hostProps
+ // need to be re-set to reused instances in addition to item
+ inst._setPendingProperty(this.as, item);
+ inst._setPendingProperty(this.indexAs, instIdx);
+ inst._setPendingProperty(this.itemsIndexAs, itemIdx);
+ inst._flushProperties();
+ } else {
+ inst = this.__stampInstance(item, instIdx, itemIdx);
+ }
+ let beforeRow = this.__instances[instIdx + 1];
+ let beforeNode = beforeRow ? beforeRow.children[0] : this;
+ this.parentNode.insertBefore(inst.root, beforeNode);
+ this.__instances[instIdx] = inst;
+ return inst;
+ }
+
+ // Implements extension point from Templatize mixin
+ /**
+ * Shows or hides the template instance top level child elements. For
+ * text nodes, `textContent` is removed while "hidden" and replaced when
+ * "shown."
+ * @param {boolean} hidden Set to true to hide the children;
+ * set to false to show them.
+ * @return {void}
+ * @protected
+ */
+ _showHideChildren(hidden) {
+ for (let i=0; i<this.__instances.length; i++) {
+ this.__instances[i]._showHideChildren(hidden);
+ }
+ }
+
+ // Called as a side effect of a host items.<key>.<path> path change,
+ // responsible for notifying item.<path> changes to inst for key
+ __handleItemPath(path, value) {
+ let itemsPath = path.slice(6); // 'items.'.length == 6
+ let dot = itemsPath.indexOf('.');
+ let itemsIdx = dot < 0 ? itemsPath : itemsPath.substring(0, dot);
+ // If path was index into array...
+ if (itemsIdx == parseInt(itemsIdx, 10)) {
+ let itemSubPath = dot < 0 ? '' : itemsPath.substring(dot+1);
+ // If the path is observed, it will trigger a full refresh
+ this.__handleObservedPaths(itemSubPath);
+ // Note, even if a rull refresh is triggered, always do the path
+ // notification because unless mutableData is used for dom-repeat
+ // and all elements in the instance subtree, a full refresh may
+ // not trigger the proper update.
+ let instIdx = this.__itemsIdxToInstIdx[itemsIdx];
+ let inst = this.__instances[instIdx];
+ if (inst) {
+ let itemPath = this.as + (itemSubPath ? '.' + itemSubPath : '');
+ // This is effectively `notifyPath`, but avoids some of the overhead
+ // of the public API
+ inst._setPendingPropertyOrPath(itemPath, value, false, true);
+ inst._flushProperties();
+ }
+ return true;
+ }
+ }
+
+ /**
+ * Returns the item associated with a given element stamped by
+ * this `dom-repeat`.
+ *
+ * Note, to modify sub-properties of the item,
+ * `modelForElement(el).set('item.<sub-prop>', value)`
+ * should be used.
+ *
+ * @param {!HTMLElement} el Element for which to return the item.
+ * @return {*} Item associated with the element.
+ */
+ itemForElement(el) {
+ let instance = this.modelForElement(el);
+ return instance && instance[this.as];
+ }
+
+ /**
+ * Returns the inst index for a given element stamped by this `dom-repeat`.
+ * If `sort` is provided, the index will reflect the sorted order (rather
+ * than the original array order).
+ *
+ * @param {!HTMLElement} el Element for which to return the index.
+ * @return {?number} Row index associated with the element (note this may
+ * not correspond to the array index if a user `sort` is applied).
+ */
+ indexForElement(el) {
+ let instance = this.modelForElement(el);
+ return instance && instance[this.indexAs];
+ }
+
+ /**
+ * Returns the template "model" associated with a given element, which
+ * serves as the binding scope for the template instance the element is
+ * contained in. A template model is an instance of `Polymer.Base`, and
+ * should be used to manipulate data associated with this template instance.
+ *
+ * Example:
+ *
+ * let model = modelForElement(el);
+ * if (model.index < 10) {
+ * model.set('item.checked', true);
+ * }
+ *
+ * @param {!HTMLElement} el Element for which to return a template model.
+ * @return {TemplateInstanceBase} Model representing the binding scope for
+ * the element.
+ */
+ modelForElement(el) {
+ return Polymer.Templatize.modelForElement(this.template, el);
+ }
+
+ }
+
+ customElements.define(DomRepeat.is, DomRepeat);
+
+ Polymer.DomRepeat = DomRepeat;
+
+})();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/class.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/class.html
new file mode 100644
index 00000000000..afe838cc575
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/class.html
@@ -0,0 +1,376 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="legacy-element-mixin.html">
+<script>
+
+ (function() {
+
+ 'use strict';
+
+ let metaProps = {
+ attached: true,
+ detached: true,
+ ready: true,
+ created: true,
+ beforeRegister: true,
+ registered: true,
+ attributeChanged: true,
+ // meta objects
+ behaviors: true
+ };
+
+ /**
+ * Applies a "legacy" behavior or array of behaviors to the provided class.
+ *
+ * Note: this method will automatically also apply the `Polymer.LegacyElementMixin`
+ * to ensure that any legacy behaviors can rely on legacy Polymer API on
+ * the underlying element.
+ *
+ * @template T
+ * @param {!Object|!Array<!Object>} behaviors Behavior object or array of behaviors.
+ * @param {function(new:T)} klass Element class.
+ * @return {function(new:T)} Returns a new Element class extended by the
+ * passed in `behaviors` and also by `Polymer.LegacyElementMixin`.
+ * @memberof Polymer
+ * @suppress {invalidCasts, checkTypes}
+ */
+ function mixinBehaviors(behaviors, klass) {
+ if (!behaviors) {
+ klass = /** @type {HTMLElement} */(klass); // eslint-disable-line no-self-assign
+ return klass;
+ }
+ // NOTE: ensure the behavior is extending a class with
+ // legacy element api. This is necessary since behaviors expect to be able
+ // to access 1.x legacy api.
+ klass = Polymer.LegacyElementMixin(klass);
+ if (!Array.isArray(behaviors)) {
+ behaviors = [behaviors];
+ }
+ let superBehaviors = klass.prototype.behaviors;
+ // get flattened, deduped list of behaviors *not* already on super class
+ behaviors = flattenBehaviors(behaviors, null, superBehaviors);
+ // mixin new behaviors
+ klass = _mixinBehaviors(behaviors, klass);
+ if (superBehaviors) {
+ behaviors = superBehaviors.concat(behaviors);
+ }
+ // Set behaviors on prototype for BC...
+ klass.prototype.behaviors = behaviors;
+ return klass;
+ }
+
+ // NOTE:
+ // 1.x
+ // Behaviors were mixed in *in reverse order* and de-duped on the fly.
+ // The rule was that behavior properties were copied onto the element
+ // prototype if and only if the property did not already exist.
+ // Given: Polymer{ behaviors: [A, B, C, A, B]}, property copy order was:
+ // (1), B, (2), A, (3) C. This means prototype properties win over
+ // B properties win over A win over C. This mirrors what would happen
+ // with inheritance if element extended B extended A extended C.
+ //
+ // Again given, Polymer{ behaviors: [A, B, C, A, B]}, the resulting
+ // `behaviors` array was [C, A, B].
+ // Behavior lifecycle methods were called in behavior array order
+ // followed by the element, e.g. (1) C.created, (2) A.created,
+ // (3) B.created, (4) element.created. There was no support for
+ // super, and "super-behavior" methods were callable only by name).
+ //
+ // 2.x
+ // Behaviors are made into proper mixins which live in the
+ // element's prototype chain. Behaviors are placed in the element prototype
+ // eldest to youngest and de-duped youngest to oldest:
+ // So, first [A, B, C, A, B] becomes [C, A, B] then,
+ // the element prototype becomes (oldest) (1) Polymer.Element, (2) class(C),
+ // (3) class(A), (4) class(B), (5) class(Polymer({...})).
+ // Result:
+ // This means element properties win over B properties win over A win
+ // over C. (same as 1.x)
+ // If lifecycle is called (super then me), order is
+ // (1) C.created, (2) A.created, (3) B.created, (4) element.created
+ // (again same as 1.x)
+ function _mixinBehaviors(behaviors, klass) {
+ for (let i=0; i<behaviors.length; i++) {
+ let b = behaviors[i];
+ if (b) {
+ klass = Array.isArray(b) ? _mixinBehaviors(b, klass) :
+ GenerateClassFromInfo(b, klass);
+ }
+ }
+ return klass;
+ }
+
+ /**
+ * @param {Array} behaviors List of behaviors to flatten.
+ * @param {Array=} list Target list to flatten behaviors into.
+ * @param {Array=} exclude List of behaviors to exclude from the list.
+ * @return {!Array} Returns the list of flattened behaviors.
+ */
+ function flattenBehaviors(behaviors, list, exclude) {
+ list = list || [];
+ for (let i=behaviors.length-1; i >= 0; i--) {
+ let b = behaviors[i];
+ if (b) {
+ if (Array.isArray(b)) {
+ flattenBehaviors(b, list);
+ } else {
+ // dedup
+ if (list.indexOf(b) < 0 && (!exclude || exclude.indexOf(b) < 0)) {
+ list.unshift(b);
+ }
+ }
+ } else {
+ console.warn('behavior is null, check for missing or 404 import');
+ }
+ }
+ return list;
+ }
+
+ /**
+ * @param {!PolymerInit} info Polymer info object
+ * @param {function(new:HTMLElement)} Base base class to extend with info object
+ * @return {function(new:HTMLElement)} Generated class
+ * @suppress {checkTypes}
+ * @private
+ */
+ function GenerateClassFromInfo(info, Base) {
+
+ class PolymerGenerated extends Base {
+
+ static get properties() {
+ return info.properties;
+ }
+
+ static get observers() {
+ return info.observers;
+ }
+
+ /**
+ * @return {HTMLTemplateElement} template for this class
+ */
+ static get template() {
+ // get template first from any imperative set in `info._template`
+ return info._template ||
+ // next look in dom-module associated with this element's is.
+ Polymer.DomModule && Polymer.DomModule.import(this.is, 'template') ||
+ // next look for superclass template (note: use superclass symbol
+ // to ensure correct `this.is`)
+ Base.template ||
+ // finally fall back to `_template` in element's prototype.
+ this.prototype._template ||
+ null;
+ }
+
+ /**
+ * @return {void}
+ */
+ created() {
+ super.created();
+ if (info.created) {
+ info.created.call(this);
+ }
+ }
+
+ /**
+ * @return {void}
+ */
+ _registered() {
+ super._registered();
+ /* NOTE: `beforeRegister` is called here for bc, but the behavior
+ is different than in 1.x. In 1.0, the method was called *after*
+ mixing prototypes together but *before* processing of meta-objects.
+ However, dynamic effects can still be set here and can be done either
+ in `beforeRegister` or `registered`. It is no longer possible to set
+ `is` in `beforeRegister` as you could in 1.x.
+ */
+ if (info.beforeRegister) {
+ info.beforeRegister.call(Object.getPrototypeOf(this));
+ }
+ if (info.registered) {
+ info.registered.call(Object.getPrototypeOf(this));
+ }
+ }
+
+ /**
+ * @return {void}
+ */
+ _applyListeners() {
+ super._applyListeners();
+ if (info.listeners) {
+ for (let l in info.listeners) {
+ this._addMethodEventListenerToNode(this, l, info.listeners[l]);
+ }
+ }
+ }
+
+ // note: exception to "super then me" rule;
+ // do work before calling super so that super attributes
+ // only apply if not already set.
+ /**
+ * @return {void}
+ */
+ _ensureAttributes() {
+ if (info.hostAttributes) {
+ for (let a in info.hostAttributes) {
+ this._ensureAttribute(a, info.hostAttributes[a]);
+ }
+ }
+ super._ensureAttributes();
+ }
+
+ /**
+ * @return {void}
+ */
+ ready() {
+ super.ready();
+ if (info.ready) {
+ info.ready.call(this);
+ }
+ }
+
+ /**
+ * @return {void}
+ */
+ attached() {
+ super.attached();
+ if (info.attached) {
+ info.attached.call(this);
+ }
+ }
+
+ /**
+ * @return {void}
+ */
+ detached() {
+ super.detached();
+ if (info.detached) {
+ info.detached.call(this);
+ }
+ }
+
+ /**
+ * Implements native Custom Elements `attributeChangedCallback` to
+ * set an attribute value to a property via `_attributeToProperty`.
+ *
+ * @param {string} name Name of attribute that changed
+ * @param {?string} old Old attribute value
+ * @param {?string} value New attribute value
+ * @return {void}
+ */
+ attributeChanged(name, old, value) {
+ super.attributeChanged(name, old, value);
+ if (info.attributeChanged) {
+ info.attributeChanged.call(this, name, old, value);
+ }
+ }
+ }
+
+ PolymerGenerated.generatedFrom = info;
+
+ for (let p in info) {
+ // NOTE: cannot copy `metaProps` methods onto prototype at least because
+ // `super.ready` must be called and is not included in the user fn.
+ if (!(p in metaProps)) {
+ let pd = Object.getOwnPropertyDescriptor(info, p);
+ if (pd) {
+ Object.defineProperty(PolymerGenerated.prototype, p, pd);
+ }
+ }
+ }
+
+ return PolymerGenerated;
+ }
+
+ /**
+ * Generates a class that extends `Polymer.LegacyElement` based on the
+ * provided info object. Metadata objects on the `info` object
+ * (`properties`, `observers`, `listeners`, `behaviors`, `is`) are used
+ * for Polymer's meta-programming systems, and any functions are copied
+ * to the generated class.
+ *
+ * Valid "metadata" values are as follows:
+ *
+ * `is`: String providing the tag name to register the element under. In
+ * addition, if a `dom-module` with the same id exists, the first template
+ * in that `dom-module` will be stamped into the shadow root of this element,
+ * with support for declarative event listeners (`on-...`), Polymer data
+ * bindings (`[[...]]` and `{{...}}`), and id-based node finding into
+ * `this.$`.
+ *
+ * `properties`: Object describing property-related metadata used by Polymer
+ * features (key: property names, value: object containing property metadata).
+ * Valid keys in per-property metadata include:
+ * - `type` (String|Number|Object|Array|...): Used by
+ * `attributeChangedCallback` to determine how string-based attributes
+ * are deserialized to JavaScript property values.
+ * - `notify` (boolean): Causes a change in the property to fire a
+ * non-bubbling event called `<property>-changed`. Elements that have
+ * enabled two-way binding to the property use this event to observe changes.
+ * - `readOnly` (boolean): Creates a getter for the property, but no setter.
+ * To set a read-only property, use the private setter method
+ * `_setProperty(property, value)`.
+ * - `observer` (string): Observer method name that will be called when
+ * the property changes. The arguments of the method are
+ * `(value, previousValue)`.
+ * - `computed` (string): String describing method and dependent properties
+ * for computing the value of this property (e.g. `'computeFoo(bar, zot)'`).
+ * Computed properties are read-only by default and can only be changed
+ * via the return value of the computing method.
+ *
+ * `observers`: Array of strings describing multi-property observer methods
+ * and their dependent properties (e.g. `'observeABC(a, b, c)'`).
+ *
+ * `listeners`: Object describing event listeners to be added to each
+ * instance of this element (key: event name, value: method name).
+ *
+ * `behaviors`: Array of additional `info` objects containing metadata
+ * and callbacks in the same format as the `info` object here which are
+ * merged into this element.
+ *
+ * `hostAttributes`: Object listing attributes to be applied to the host
+ * once created (key: attribute name, value: attribute value). Values
+ * are serialized based on the type of the value. Host attributes should
+ * generally be limited to attributes such as `tabIndex` and `aria-...`.
+ * Attributes in `hostAttributes` are only applied if a user-supplied
+ * attribute is not already present (attributes in markup override
+ * `hostAttributes`).
+ *
+ * In addition, the following Polymer-specific callbacks may be provided:
+ * - `registered`: called after first instance of this element,
+ * - `created`: called during `constructor`
+ * - `attached`: called during `connectedCallback`
+ * - `detached`: called during `disconnectedCallback`
+ * - `ready`: called before first `attached`, after all properties of
+ * this element have been propagated to its template and all observers
+ * have run
+ *
+ * @param {!PolymerInit} info Object containing Polymer metadata and functions
+ * to become class methods.
+ * @return {function(new:HTMLElement)} Generated class
+ * @memberof Polymer
+ */
+ Polymer.Class = function(info) {
+ if (!info) {
+ console.warn('Polymer.Class requires `info` argument');
+ }
+ let klass = GenerateClassFromInfo(info, info.behaviors ?
+ // note: mixinBehaviors ensures `LegacyElementMixin`.
+ mixinBehaviors(info.behaviors, HTMLElement) :
+ Polymer.LegacyElementMixin(HTMLElement));
+ // decorate klass with registration info
+ klass.is = info.is;
+ return klass;
+ };
+
+ Polymer.mixinBehaviors = mixinBehaviors;
+
+ })();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/legacy-element-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/legacy-element-mixin.html
new file mode 100644
index 00000000000..7306c651407
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/legacy-element-mixin.html
@@ -0,0 +1,1003 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../../../shadycss/apply-shim.html">
+<link rel="import" href="../mixins/element-mixin.html">
+<link rel="import" href="../mixins/gesture-event-listeners.html">
+<link rel="import" href="../mixins/dir-mixin.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/import-href.html">
+<link rel="import" href="../utils/render-status.html">
+<link rel="import" href="../utils/unresolved.html">
+<link rel="import" href="polymer.dom.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ let styleInterface = window.ShadyCSS;
+
+ /**
+ * Element class mixin that provides Polymer's "legacy" API intended to be
+ * backward-compatible to the greatest extent possible with the API
+ * found on the Polymer 1.x `Polymer.Base` prototype applied to all elements
+ * defined using the `Polymer({...})` function.
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.ElementMixin
+ * @appliesMixin Polymer.GestureEventListeners
+ * @property isAttached {boolean} Set to `true` in this element's
+ * `connectedCallback` and `false` in `disconnectedCallback`
+ * @memberof Polymer
+ * @summary Element class mixin that provides Polymer's "legacy" API
+ */
+ Polymer.LegacyElementMixin = Polymer.dedupingMixin((base) => {
+
+ /**
+ * @constructor
+ * @extends {base}
+ * @implements {Polymer_ElementMixin}
+ * @implements {Polymer_GestureEventListeners}
+ * @implements {Polymer_DirMixin}
+ */
+ const legacyElementBase = Polymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)));
+
+ /**
+ * Map of simple names to touch action names
+ * @dict
+ */
+ const DIRECTION_MAP = {
+ 'x': 'pan-x',
+ 'y': 'pan-y',
+ 'none': 'none',
+ 'all': 'auto'
+ };
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @extends {legacyElementBase}
+ * @implements {Polymer_LegacyElementMixin}
+ * @unrestricted
+ */
+ class LegacyElement extends legacyElementBase {
+
+ constructor() {
+ super();
+ /** @type {boolean} */
+ this.isAttached;
+ /** @type {WeakMap<!Element, !Object<string, !Function>>} */
+ this.__boundListeners;
+ /** @type {Object<string, Function>} */
+ this._debouncers;
+ // Ensure listeners are applied immediately so that they are
+ // added before declarative event listeners. This allows an element to
+ // decorate itself via an event prior to any declarative listeners
+ // seeing the event. Note, this ensures compatibility with 1.x ordering.
+ this._applyListeners();
+ }
+
+ /**
+ * Legacy callback called during the `constructor`, for overriding
+ * by the user.
+ * @return {void}
+ */
+ created() {}
+
+ /**
+ * Provides an implementation of `connectedCallback`
+ * which adds Polymer legacy API's `attached` method.
+ * @return {void}
+ * @override
+ */
+ connectedCallback() {
+ super.connectedCallback();
+ this.isAttached = true;
+ this.attached();
+ }
+
+ /**
+ * Legacy callback called during `connectedCallback`, for overriding
+ * by the user.
+ * @return {void}
+ */
+ attached() {}
+
+ /**
+ * Provides an implementation of `disconnectedCallback`
+ * which adds Polymer legacy API's `detached` method.
+ * @return {void}
+ * @override
+ */
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ this.isAttached = false;
+ this.detached();
+ }
+
+ /**
+ * Legacy callback called during `disconnectedCallback`, for overriding
+ * by the user.
+ * @return {void}
+ */
+ detached() {}
+
+ /**
+ * Provides an override implementation of `attributeChangedCallback`
+ * which adds the Polymer legacy API's `attributeChanged` method.
+ * @param {string} name Name of attribute.
+ * @param {?string} old Old value of attribute.
+ * @param {?string} value Current value of attribute.
+ * @return {void}
+ * @override
+ */
+ attributeChangedCallback(name, old, value) {
+ if (old !== value) {
+ super.attributeChangedCallback(name, old, value);
+ this.attributeChanged(name, old, value);
+ }
+ }
+
+ /**
+ * Legacy callback called during `attributeChangedChallback`, for overriding
+ * by the user.
+ * @param {string} name Name of attribute.
+ * @param {?string} old Old value of attribute.
+ * @param {?string} value Current value of attribute.
+ * @return {void}
+ */
+ attributeChanged(name, old, value) {} // eslint-disable-line no-unused-vars
+
+ /**
+ * Overrides the default `Polymer.PropertyEffects` implementation to
+ * add support for class initialization via the `_registered` callback.
+ * This is called only when the first instance of the element is created.
+ *
+ * @return {void}
+ * @override
+ * @suppress {invalidCasts}
+ */
+ _initializeProperties() {
+ let proto = Object.getPrototypeOf(this);
+ if (!proto.hasOwnProperty('__hasRegisterFinished')) {
+ proto.__hasRegisterFinished = true;
+ this._registered();
+ }
+ super._initializeProperties();
+ this.root = /** @type {HTMLElement} */(this);
+ this.created();
+ }
+
+ /**
+ * Called automatically when an element is initializing.
+ * Users may override this method to perform class registration time
+ * work. The implementation should ensure the work is performed
+ * only once for the class.
+ * @protected
+ * @return {void}
+ */
+ _registered() {}
+
+ /**
+ * Overrides the default `Polymer.PropertyEffects` implementation to
+ * add support for installing `hostAttributes` and `listeners`.
+ *
+ * @return {void}
+ * @override
+ */
+ ready() {
+ this._ensureAttributes();
+ super.ready();
+ }
+
+ /**
+ * Ensures an element has required attributes. Called when the element
+ * is being readied via `ready`. Users should override to set the
+ * element's required attributes. The implementation should be sure
+ * to check and not override existing attributes added by
+ * the user of the element. Typically, setting attributes should be left
+ * to the element user and not done here; reasonable exceptions include
+ * setting aria roles and focusability.
+ * @protected
+ * @return {void}
+ */
+ _ensureAttributes() {}
+
+ /**
+ * Adds element event listeners. Called when the element
+ * is being readied via `ready`. Users should override to
+ * add any required element event listeners.
+ * In performance critical elements, the work done here should be kept
+ * to a minimum since it is done before the element is rendered. In
+ * these elements, consider adding listeners asynchronously so as not to
+ * block render.
+ * @protected
+ * @return {void}
+ */
+ _applyListeners() {}
+
+ /**
+ * Converts a typed JavaScript value to a string.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features. To customize
+ * how properties are serialized to attributes for attribute bindings and
+ * `reflectToAttribute: true` properties as well as this method, override
+ * the `_serializeValue` method provided by `Polymer.PropertyAccessors`.
+ *
+ * @param {*} value Value to deserialize
+ * @return {string | undefined} Serialized value
+ */
+ serialize(value) {
+ return this._serializeValue(value);
+ }
+
+ /**
+ * Converts a string to a typed JavaScript value.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features. To customize
+ * how attributes are deserialized to properties for in
+ * `attributeChangedCallback`, override `_deserializeValue` method
+ * provided by `Polymer.PropertyAccessors`.
+ *
+ * @param {string} value String to deserialize
+ * @param {*} type Type to deserialize the string to
+ * @return {*} Returns the deserialized value in the `type` given.
+ */
+ deserialize(value, type) {
+ return this._deserializeValue(value, type);
+ }
+
+ /**
+ * Serializes a property to its associated attribute.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features.
+ *
+ * @param {string} property Property name to reflect.
+ * @param {string=} attribute Attribute name to reflect.
+ * @param {*=} value Property value to reflect.
+ * @return {void}
+ */
+ reflectPropertyToAttribute(property, attribute, value) {
+ this._propertyToAttribute(property, attribute, value);
+ }
+
+ /**
+ * Sets a typed value to an HTML attribute on a node.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features.
+ *
+ * @param {*} value Value to serialize.
+ * @param {string} attribute Attribute name to serialize to.
+ * @param {Element} node Element to set attribute to.
+ * @return {void}
+ */
+ serializeValueToAttribute(value, attribute, node) {
+ this._valueToNodeAttribute(/** @type {Element} */ (node || this), value, attribute);
+ }
+
+ /**
+ * Copies own properties (including accessor descriptors) from a source
+ * object to a target object.
+ *
+ * @param {Object} prototype Target object to copy properties to.
+ * @param {Object} api Source object to copy properties from.
+ * @return {Object} prototype object that was passed as first argument.
+ */
+ extend(prototype, api) {
+ if (!(prototype && api)) {
+ return prototype || api;
+ }
+ let n$ = Object.getOwnPropertyNames(api);
+ for (let i=0, n; (i<n$.length) && (n=n$[i]); i++) {
+ let pd = Object.getOwnPropertyDescriptor(api, n);
+ if (pd) {
+ Object.defineProperty(prototype, n, pd);
+ }
+ }
+ return prototype;
+ }
+
+ /**
+ * Copies props from a source object to a target object.
+ *
+ * Note, this method uses a simple `for...in` strategy for enumerating
+ * properties. To ensure only `ownProperties` are copied from source
+ * to target and that accessor implementations are copied, use `extend`.
+ *
+ * @param {!Object} target Target object to copy properties to.
+ * @param {!Object} source Source object to copy properties from.
+ * @return {!Object} Target object that was passed as first argument.
+ */
+ mixin(target, source) {
+ for (let i in source) {
+ target[i] = source[i];
+ }
+ return target;
+ }
+
+ /**
+ * Sets the prototype of an object.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features.
+ * @param {Object} object The object on which to set the prototype.
+ * @param {Object} prototype The prototype that will be set on the given
+ * `object`.
+ * @return {Object} Returns the given `object` with its prototype set
+ * to the given `prototype` object.
+ */
+ chainObject(object, prototype) {
+ if (object && prototype && object !== prototype) {
+ object.__proto__ = prototype;
+ }
+ return object;
+ }
+
+ /* **** Begin Template **** */
+
+ /**
+ * Calls `importNode` on the `content` of the `template` specified and
+ * returns a document fragment containing the imported content.
+ *
+ * @param {HTMLTemplateElement} template HTML template element to instance.
+ * @return {!DocumentFragment} Document fragment containing the imported
+ * template content.
+ */
+ instanceTemplate(template) {
+ let content = this.constructor._contentForTemplate(template);
+ let dom = /** @type {!DocumentFragment} */
+ (document.importNode(content, true));
+ return dom;
+ }
+
+ /* **** Begin Events **** */
+
+
+
+ /**
+ * Dispatches a custom event with an optional detail value.
+ *
+ * @param {string} type Name of event type.
+ * @param {*=} detail Detail value containing event-specific
+ * payload.
+ * @param {{ bubbles: (boolean|undefined), cancelable: (boolean|undefined), composed: (boolean|undefined) }=}
+ * options Object specifying options. These may include:
+ * `bubbles` (boolean, defaults to `true`),
+ * `cancelable` (boolean, defaults to false), and
+ * `node` on which to fire the event (HTMLElement, defaults to `this`).
+ * @return {!Event} The new event that was fired.
+ */
+ fire(type, detail, options) {
+ options = options || {};
+ detail = (detail === null || detail === undefined) ? {} : detail;
+ let event = new Event(type, {
+ bubbles: options.bubbles === undefined ? true : options.bubbles,
+ cancelable: Boolean(options.cancelable),
+ composed: options.composed === undefined ? true: options.composed
+ });
+ event.detail = detail;
+ let node = options.node || this;
+ node.dispatchEvent(event);
+ return event;
+ }
+
+ /**
+ * Convenience method to add an event listener on a given element,
+ * late bound to a named method on this element.
+ *
+ * @param {Element} node Element to add event listener to.
+ * @param {string} eventName Name of event to listen for.
+ * @param {string} methodName Name of handler method on `this` to call.
+ * @return {void}
+ */
+ listen(node, eventName, methodName) {
+ node = /** @type {!Element} */ (node || this);
+ let hbl = this.__boundListeners ||
+ (this.__boundListeners = new WeakMap());
+ let bl = hbl.get(node);
+ if (!bl) {
+ bl = {};
+ hbl.set(node, bl);
+ }
+ let key = eventName + methodName;
+ if (!bl[key]) {
+ bl[key] = this._addMethodEventListenerToNode(
+ node, eventName, methodName, this);
+ }
+ }
+
+ /**
+ * Convenience method to remove an event listener from a given element,
+ * late bound to a named method on this element.
+ *
+ * @param {Element} node Element to remove event listener from.
+ * @param {string} eventName Name of event to stop listening to.
+ * @param {string} methodName Name of handler method on `this` to not call
+ anymore.
+ * @return {void}
+ */
+ unlisten(node, eventName, methodName) {
+ node = /** @type {!Element} */ (node || this);
+ let bl = this.__boundListeners && this.__boundListeners.get(node);
+ let key = eventName + methodName;
+ let handler = bl && bl[key];
+ if (handler) {
+ this._removeEventListenerFromNode(node, eventName, handler);
+ bl[key] = null;
+ }
+ }
+
+ /**
+ * Override scrolling behavior to all direction, one direction, or none.
+ *
+ * Valid scroll directions:
+ * - 'all': scroll in any direction
+ * - 'x': scroll only in the 'x' direction
+ * - 'y': scroll only in the 'y' direction
+ * - 'none': disable scrolling for this node
+ *
+ * @param {string=} direction Direction to allow scrolling
+ * Defaults to `all`.
+ * @param {Element=} node Element to apply scroll direction setting.
+ * Defaults to `this`.
+ * @return {void}
+ */
+ setScrollDirection(direction, node) {
+ Polymer.Gestures.setTouchAction(/** @type {Element} */ (node || this), DIRECTION_MAP[direction] || 'auto');
+ }
+ /* **** End Events **** */
+
+ /**
+ * Convenience method to run `querySelector` on this local DOM scope.
+ *
+ * This function calls `Polymer.dom(this.root).querySelector(slctr)`.
+ *
+ * @param {string} slctr Selector to run on this local DOM scope
+ * @return {Element} Element found by the selector, or null if not found.
+ */
+ $$(slctr) {
+ return this.root.querySelector(slctr);
+ }
+
+ /**
+ * Return the element whose local dom within which this element
+ * is contained. This is a shorthand for
+ * `this.getRootNode().host`.
+ * @this {Element}
+ */
+ get domHost() {
+ let root = this.getRootNode();
+ return (root instanceof DocumentFragment) ? /** @type {ShadowRoot} */ (root).host : root;
+ }
+
+ /**
+ * Force this element to distribute its children to its local dom.
+ * This should not be necessary as of Polymer 2.0.2 and is provided only
+ * for backwards compatibility.
+ * @return {void}
+ */
+ distributeContent() {
+ if (window.ShadyDOM && this.shadowRoot) {
+ ShadyDOM.flush();
+ }
+ }
+
+ /**
+ * Returns a list of nodes that are the effective childNodes. The effective
+ * childNodes list is the same as the element's childNodes except that
+ * any `<content>` elements are replaced with the list of nodes distributed
+ * to the `<content>`, the result of its `getDistributedNodes` method.
+ * @return {!Array<!Node>} List of effective child nodes.
+ * @suppress {invalidCasts} LegacyElementMixin must be applied to an HTMLElement
+ */
+ getEffectiveChildNodes() {
+ const thisEl = /** @type {Element} */ (this);
+ const domApi = /** @type {Polymer.DomApi} */(Polymer.dom(thisEl));
+ return domApi.getEffectiveChildNodes();
+ }
+
+ /**
+ * Returns a list of nodes distributed within this element that match
+ * `selector`. These can be dom children or elements distributed to
+ * children that are insertion points.
+ * @param {string} selector Selector to run.
+ * @return {!Array<!Node>} List of distributed elements that match selector.
+ * @suppress {invalidCasts} LegacyElementMixin must be applied to an HTMLElement
+ */
+ queryDistributedElements(selector) {
+ const thisEl = /** @type {Element} */ (this);
+ const domApi = /** @type {Polymer.DomApi} */(Polymer.dom(thisEl));
+ return domApi.queryDistributedElements(selector);
+ }
+
+ /**
+ * Returns a list of elements that are the effective children. The effective
+ * children list is the same as the element's children except that
+ * any `<content>` elements are replaced with the list of elements
+ * distributed to the `<content>`.
+ *
+ * @return {!Array<!Node>} List of effective children.
+ */
+ getEffectiveChildren() {
+ let list = this.getEffectiveChildNodes();
+ return list.filter(function(/** @type {!Node} */ n) {
+ return (n.nodeType === Node.ELEMENT_NODE);
+ });
+ }
+
+ /**
+ * Returns a string of text content that is the concatenation of the
+ * text content's of the element's effective childNodes (the elements
+ * returned by <a href="#getEffectiveChildNodes>getEffectiveChildNodes</a>.
+ *
+ * @return {string} List of effective children.
+ */
+ getEffectiveTextContent() {
+ let cn = this.getEffectiveChildNodes();
+ let tc = [];
+ for (let i=0, c; (c = cn[i]); i++) {
+ if (c.nodeType !== Node.COMMENT_NODE) {
+ tc.push(c.textContent);
+ }
+ }
+ return tc.join('');
+ }
+
+ /**
+ * Returns the first effective childNode within this element that
+ * match `selector`. These can be dom child nodes or elements distributed
+ * to children that are insertion points.
+ * @param {string} selector Selector to run.
+ * @return {Node} First effective child node that matches selector.
+ */
+ queryEffectiveChildren(selector) {
+ let e$ = this.queryDistributedElements(selector);
+ return e$ && e$[0];
+ }
+
+ /**
+ * Returns a list of effective childNodes within this element that
+ * match `selector`. These can be dom child nodes or elements distributed
+ * to children that are insertion points.
+ * @param {string} selector Selector to run.
+ * @return {!Array<!Node>} List of effective child nodes that match selector.
+ */
+ queryAllEffectiveChildren(selector) {
+ return this.queryDistributedElements(selector);
+ }
+
+ /**
+ * Returns a list of nodes distributed to this element's `<slot>`.
+ *
+ * If this element contains more than one `<slot>` in its local DOM,
+ * an optional selector may be passed to choose the desired content.
+ *
+ * @param {string=} slctr CSS selector to choose the desired
+ * `<slot>`. Defaults to `content`.
+ * @return {!Array<!Node>} List of distributed nodes for the `<slot>`.
+ */
+ getContentChildNodes(slctr) {
+ let content = this.root.querySelector(slctr || 'slot');
+ return content ? /** @type {Polymer.DomApi} */(Polymer.dom(content)).getDistributedNodes() : [];
+ }
+
+ /**
+ * Returns a list of element children distributed to this element's
+ * `<slot>`.
+ *
+ * If this element contains more than one `<slot>` in its
+ * local DOM, an optional selector may be passed to choose the desired
+ * content. This method differs from `getContentChildNodes` in that only
+ * elements are returned.
+ *
+ * @param {string=} slctr CSS selector to choose the desired
+ * `<content>`. Defaults to `content`.
+ * @return {!Array<!HTMLElement>} List of distributed nodes for the
+ * `<slot>`.
+ * @suppress {invalidCasts}
+ */
+ getContentChildren(slctr) {
+ let children = /** @type {!Array<!HTMLElement>} */(this.getContentChildNodes(slctr).filter(function(n) {
+ return (n.nodeType === Node.ELEMENT_NODE);
+ }));
+ return children;
+ }
+
+ /**
+ * Checks whether an element is in this element's light DOM tree.
+ *
+ * @param {?Node} node The element to be checked.
+ * @return {boolean} true if node is in this element's light DOM tree.
+ * @suppress {invalidCasts} LegacyElementMixin must be applied to an HTMLElement
+ */
+ isLightDescendant(node) {
+ const thisNode = /** @type {Node} */ (this);
+ return thisNode !== node && thisNode.contains(node) &&
+ thisNode.getRootNode() === node.getRootNode();
+ }
+
+ /**
+ * Checks whether an element is in this element's local DOM tree.
+ *
+ * @param {!Element} node The element to be checked.
+ * @return {boolean} true if node is in this element's local DOM tree.
+ */
+ isLocalDescendant(node) {
+ return this.root === node.getRootNode();
+ }
+
+ /**
+ * No-op for backwards compatibility. This should now be handled by
+ * ShadyCss library.
+ * @param {*} container Unused
+ * @param {*} shouldObserve Unused
+ * @return {void}
+ */
+ scopeSubtree(container, shouldObserve) { // eslint-disable-line no-unused-vars
+ }
+
+ /**
+ * Returns the computed style value for the given property.
+ * @param {string} property The css property name.
+ * @return {string} Returns the computed css property value for the given
+ * `property`.
+ * @suppress {invalidCasts} LegacyElementMixin must be applied to an HTMLElement
+ */
+ getComputedStyleValue(property) {
+ return styleInterface.getComputedStyleValue(/** @type {!Element} */(this), property);
+ }
+
+ // debounce
+
+ /**
+ * Call `debounce` to collapse multiple requests for a named task into
+ * one invocation which is made after the wait time has elapsed with
+ * no new request. If no wait time is given, the callback will be called
+ * at microtask timing (guaranteed before paint).
+ *
+ * debouncedClickAction(e) {
+ * // will not call `processClick` more than once per 100ms
+ * this.debounce('click', function() {
+ * this.processClick();
+ * } 100);
+ * }
+ *
+ * @param {string} jobName String to identify the debounce job.
+ * @param {function():void} callback Function that is called (with `this`
+ * context) when the wait time elapses.
+ * @param {number} wait Optional wait time in milliseconds (ms) after the
+ * last signal that must elapse before invoking `callback`
+ * @return {!Object} Returns a debouncer object on which exists the
+ * following methods: `isActive()` returns true if the debouncer is
+ * active; `cancel()` cancels the debouncer if it is active;
+ * `flush()` immediately invokes the debounced callback if the debouncer
+ * is active.
+ */
+ debounce(jobName, callback, wait) {
+ this._debouncers = this._debouncers || {};
+ return this._debouncers[jobName] = Polymer.Debouncer.debounce(
+ this._debouncers[jobName]
+ , wait > 0 ? Polymer.Async.timeOut.after(wait) : Polymer.Async.microTask
+ , callback.bind(this));
+ }
+
+ /**
+ * Returns whether a named debouncer is active.
+ *
+ * @param {string} jobName The name of the debouncer started with `debounce`
+ * @return {boolean} Whether the debouncer is active (has not yet fired).
+ */
+ isDebouncerActive(jobName) {
+ this._debouncers = this._debouncers || {};
+ let debouncer = this._debouncers[jobName];
+ return !!(debouncer && debouncer.isActive());
+ }
+
+ /**
+ * Immediately calls the debouncer `callback` and inactivates it.
+ *
+ * @param {string} jobName The name of the debouncer started with `debounce`
+ * @return {void}
+ */
+ flushDebouncer(jobName) {
+ this._debouncers = this._debouncers || {};
+ let debouncer = this._debouncers[jobName];
+ if (debouncer) {
+ debouncer.flush();
+ }
+ }
+
+ /**
+ * Cancels an active debouncer. The `callback` will not be called.
+ *
+ * @param {string} jobName The name of the debouncer started with `debounce`
+ * @return {void}
+ */
+ cancelDebouncer(jobName) {
+ this._debouncers = this._debouncers || {};
+ let debouncer = this._debouncers[jobName];
+ if (debouncer) {
+ debouncer.cancel();
+ }
+ }
+
+ /**
+ * Runs a callback function asynchronously.
+ *
+ * By default (if no waitTime is specified), async callbacks are run at
+ * microtask timing, which will occur before paint.
+ *
+ * @param {!Function} callback The callback function to run, bound to `this`.
+ * @param {number=} waitTime Time to wait before calling the
+ * `callback`. If unspecified or 0, the callback will be run at microtask
+ * timing (before paint).
+ * @return {number} Handle that may be used to cancel the async job.
+ */
+ async(callback, waitTime) {
+ return waitTime > 0 ? Polymer.Async.timeOut.run(callback.bind(this), waitTime) :
+ ~Polymer.Async.microTask.run(callback.bind(this));
+ }
+
+ /**
+ * Cancels an async operation started with `async`.
+ *
+ * @param {number} handle Handle returned from original `async` call to
+ * cancel.
+ * @return {void}
+ */
+ cancelAsync(handle) {
+ handle < 0 ? Polymer.Async.microTask.cancel(~handle) :
+ Polymer.Async.timeOut.cancel(handle);
+ }
+
+ // other
+
+ /**
+ * Convenience method for creating an element and configuring it.
+ *
+ * @param {string} tag HTML element tag to create.
+ * @param {Object=} props Object of properties to configure on the
+ * instance.
+ * @return {!Element} Newly created and configured element.
+ */
+ create(tag, props) {
+ let elt = document.createElement(tag);
+ if (props) {
+ if (elt.setProperties) {
+ elt.setProperties(props);
+ } else {
+ for (let n in props) {
+ elt[n] = props[n];
+ }
+ }
+ }
+ return elt;
+ }
+
+ /**
+ * Convenience method for importing an HTML document imperatively.
+ *
+ * This method creates a new `<link rel="import">` element with
+ * the provided URL and appends it to the document to start loading.
+ * In the `onload` callback, the `import` property of the `link`
+ * element will contain the imported document contents.
+ *
+ * @param {string} href URL to document to load.
+ * @param {?function(!Event):void=} onload Callback to notify when an import successfully
+ * loaded.
+ * @param {?function(!ErrorEvent):void=} onerror Callback to notify when an import
+ * unsuccessfully loaded.
+ * @param {boolean=} optAsync True if the import should be loaded `async`.
+ * Defaults to `false`.
+ * @return {!HTMLLinkElement} The link element for the URL to be loaded.
+ */
+ importHref(href, onload, onerror, optAsync) { // eslint-disable-line no-unused-vars
+ let loadFn = onload ? onload.bind(this) : null;
+ let errorFn = onerror ? onerror.bind(this) : null;
+ return Polymer.importHref(href, loadFn, errorFn, optAsync);
+ }
+
+ /**
+ * Polyfill for Element.prototype.matches, which is sometimes still
+ * prefixed.
+ *
+ * @param {string} selector Selector to test.
+ * @param {!Element=} node Element to test the selector against.
+ * @return {boolean} Whether the element matches the selector.
+ */
+ elementMatches(selector, node) {
+ return Polymer.dom.matchesSelector(/** @type {!Element} */ (node || this), selector);
+ }
+
+ /**
+ * Toggles an HTML attribute on or off.
+ *
+ * @param {string} name HTML attribute name
+ * @param {boolean=} bool Boolean to force the attribute on or off.
+ * When unspecified, the state of the attribute will be reversed.
+ * @param {Element=} node Node to target. Defaults to `this`.
+ * @return {void}
+ */
+ toggleAttribute(name, bool, node) {
+ node = /** @type {Element} */ (node || this);
+ if (arguments.length == 1) {
+ bool = !node.hasAttribute(name);
+ }
+ if (bool) {
+ node.setAttribute(name, '');
+ } else {
+ node.removeAttribute(name);
+ }
+ }
+
+
+ /**
+ * Toggles a CSS class on or off.
+ *
+ * @param {string} name CSS class name
+ * @param {boolean=} bool Boolean to force the class on or off.
+ * When unspecified, the state of the class will be reversed.
+ * @param {Element=} node Node to target. Defaults to `this`.
+ * @return {void}
+ */
+ toggleClass(name, bool, node) {
+ node = /** @type {Element} */ (node || this);
+ if (arguments.length == 1) {
+ bool = !node.classList.contains(name);
+ }
+ if (bool) {
+ node.classList.add(name);
+ } else {
+ node.classList.remove(name);
+ }
+ }
+
+ /**
+ * Cross-platform helper for setting an element's CSS `transform` property.
+ *
+ * @param {string} transformText Transform setting.
+ * @param {Element=} node Element to apply the transform to.
+ * Defaults to `this`
+ * @return {void}
+ */
+ transform(transformText, node) {
+ node = /** @type {Element} */ (node || this);
+ node.style.webkitTransform = transformText;
+ node.style.transform = transformText;
+ }
+
+ /**
+ * Cross-platform helper for setting an element's CSS `translate3d`
+ * property.
+ *
+ * @param {number} x X offset.
+ * @param {number} y Y offset.
+ * @param {number} z Z offset.
+ * @param {Element=} node Element to apply the transform to.
+ * Defaults to `this`.
+ * @return {void}
+ */
+ translate3d(x, y, z, node) {
+ node = /** @type {Element} */ (node || this);
+ this.transform('translate3d(' + x + ',' + y + ',' + z + ')', node);
+ }
+
+ /**
+ * Removes an item from an array, if it exists.
+ *
+ * If the array is specified by path, a change notification is
+ * generated, so that observers, data bindings and computed
+ * properties watching that path can update.
+ *
+ * If the array is passed directly, **no change
+ * notification is generated**.
+ *
+ * @param {string | !Array<number|string>} arrayOrPath Path to array from which to remove the item
+ * (or the array itself).
+ * @param {*} item Item to remove.
+ * @return {Array} Array containing item removed.
+ */
+ arrayDelete(arrayOrPath, item) {
+ let index;
+ if (Array.isArray(arrayOrPath)) {
+ index = arrayOrPath.indexOf(item);
+ if (index >= 0) {
+ return arrayOrPath.splice(index, 1);
+ }
+ } else {
+ let arr = Polymer.Path.get(this, arrayOrPath);
+ index = arr.indexOf(item);
+ if (index >= 0) {
+ return this.splice(arrayOrPath, index, 1);
+ }
+ }
+ return null;
+ }
+
+ // logging
+
+ /**
+ * Facades `console.log`/`warn`/`error` as override point.
+ *
+ * @param {string} level One of 'log', 'warn', 'error'
+ * @param {Array} args Array of strings or objects to log
+ * @return {void}
+ */
+ _logger(level, args) {
+ // accept ['foo', 'bar'] and [['foo', 'bar']]
+ if (Array.isArray(args) && args.length === 1 && Array.isArray(args[0])) {
+ args = args[0];
+ }
+ switch(level) {
+ case 'log':
+ case 'warn':
+ case 'error':
+ console[level](...args);
+ }
+ }
+
+ /**
+ * Facades `console.log` as an override point.
+ *
+ * @param {...*} args Array of strings or objects to log
+ * @return {void}
+ */
+ _log(...args) {
+ this._logger('log', args);
+ }
+
+ /**
+ * Facades `console.warn` as an override point.
+ *
+ * @param {...*} args Array of strings or objects to log
+ * @return {void}
+ */
+ _warn(...args) {
+ this._logger('warn', args);
+ }
+
+ /**
+ * Facades `console.error` as an override point.
+ *
+ * @param {...*} args Array of strings or objects to log
+ * @return {void}
+ */
+ _error(...args) {
+ this._logger('error', args);
+ }
+
+ /**
+ * Formats a message using the element type an a method name.
+ *
+ * @param {string} methodName Method name to associate with message
+ * @param {...*} args Array of strings or objects to log
+ * @return {Array} Array with formatting information for `console`
+ * logging.
+ */
+ _logf(methodName, ...args) {
+ return ['[%s::%s]', this.is, methodName, ...args];
+ }
+
+ }
+
+ LegacyElement.prototype.is = '';
+
+ return LegacyElement;
+
+ });
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/mutable-data-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/mutable-data-behavior.html
new file mode 100644
index 00000000000..0d666131919
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/mutable-data-behavior.html
@@ -0,0 +1,161 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../mixins/mutable-data.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ let mutablePropertyChange;
+ /** @suppress {missingProperties} */
+ (() => {
+ mutablePropertyChange = Polymer.MutableData._mutablePropertyChange;
+ })();
+
+ /**
+ * Legacy element behavior to skip strict dirty-checking for objects and arrays,
+ * (always consider them to be "dirty") for use on legacy API Polymer elements.
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will cause Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must apply this behavior or enable the
+ * `Polymer.OptionalMutableDataBehavior`.
+ *
+ * In order to make the dirty check strategy configurable, see
+ * `Polymer.OptionalMutableDataBehavior`.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse as opposed to using strict dirty checking with immutable
+ * patterns or Polymer's path notification API.
+ *
+ * @polymerBehavior
+ * @memberof Polymer
+ * @summary Behavior to skip strict dirty-checking for objects and
+ * arrays
+ */
+ Polymer.MutableDataBehavior = {
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to provide option for skipping
+ * strict equality checking for Objects and Arrays.
+ *
+ * This method pulls the value to dirty check against from the `__dataTemp`
+ * cache (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param {string} property Property name
+ * @param {*} value New property value
+ * @param {*} old Previous property value
+ * @return {boolean} Whether the property should be considered a change
+ * @protected
+ */
+ _shouldPropertyChange(property, value, old) {
+ return mutablePropertyChange(this, property, value, old, true);
+ }
+ };
+
+ /**
+ * Legacy element behavior to add the optional ability to skip strict
+ * dirty-checking for objects and arrays (always consider them to be
+ * "dirty") by setting a `mutable-data` attribute on an element instance.
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will allow Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must enable this behavior or apply the
+ * `Polymer.OptionalMutableDataBehavior`.
+ *
+ * While this behavior adds the ability to forgo Object/Array dirty checking,
+ * the `mutableData` flag defaults to false and must be set on the instance.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse by relying on `mutableData: true` as opposed to using
+ * strict dirty checking with immutable patterns or Polymer's path notification
+ * API.
+ *
+ * @polymerBehavior
+ * @memberof Polymer
+ * @summary Behavior to optionally skip strict dirty-checking for objects and
+ * arrays
+ */
+ Polymer.OptionalMutableDataBehavior = {
+
+ properties: {
+ /**
+ * Instance-level flag for configuring the dirty-checking strategy
+ * for this element. When true, Objects and Arrays will skip dirty
+ * checking, otherwise strict equality checking will be used.
+ */
+ mutableData: Boolean
+ },
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to skip strict equality checking
+ * for Objects and Arrays.
+ *
+ * Pulls the value to dirty check against from the `__dataTemp` cache
+ * (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param {string} property Property name
+ * @param {*} value New property value
+ * @param {*} old Previous property value
+ * @return {boolean} Whether the property should be considered a change
+ * @this {this}
+ * @protected
+ */
+ _shouldPropertyChange(property, value, old) {
+ return mutablePropertyChange(this, property, value, old, this.mutableData);
+ }
+ };
+
+})();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer-fn.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer-fn.html
new file mode 100644
index 00000000000..80106a89ed7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer-fn.html
@@ -0,0 +1,50 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="class.html">
+
+<script>
+
+ (function() {
+ 'use strict';
+
+ /**
+ * Legacy class factory and registration helper for defining Polymer
+ * elements.
+ *
+ * This method is equivalent to
+ * `customElements.define(info.is, Polymer.Class(info));`
+ *
+ * See `Polymer.Class` for details on valid legacy metadata format for `info`.
+ *
+ * @global
+ * @override
+ * @function Polymer
+ * @param {!PolymerInit} info Object containing Polymer metadata and functions
+ * to become class methods.
+ * @return {function(new: HTMLElement)} Generated class
+ * @suppress {duplicate, invalidCasts, checkTypes}
+ */
+ window.Polymer._polymerFn = function(info) {
+ // if input is a `class` (aka a function with a prototype), use the prototype
+ // remember that the `constructor` will never be called
+ let klass;
+ if (typeof info === 'function') {
+ klass = info;
+ } else {
+ klass = Polymer.Class(info);
+ }
+ customElements.define(klass.is, /** @type {!HTMLElement} */(klass));
+ return klass;
+ };
+
+ })();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer.dom.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer.dom.html
new file mode 100644
index 00000000000..5417f12e142
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/polymer.dom.html
@@ -0,0 +1,405 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/settings.html">
+<link rel="import" href="../utils/flattened-nodes-observer.html">
+<link rel="import" href="../utils/flush.html">
+<script>
+(function() {
+ 'use strict';
+
+ const p = Element.prototype;
+ /**
+ * @const {function(this:Node, string): boolean}
+ */
+ const normalizedMatchesSelector = p.matches || p.matchesSelector ||
+ p.mozMatchesSelector || p.msMatchesSelector ||
+ p.oMatchesSelector || p.webkitMatchesSelector;
+
+ /**
+ * Cross-platform `element.matches` shim.
+ *
+ * @function matchesSelector
+ * @memberof Polymer.dom
+ * @param {!Node} node Node to check selector against
+ * @param {string} selector Selector to match
+ * @return {boolean} True if node matched selector
+ */
+ const matchesSelector = function(node, selector) {
+ return normalizedMatchesSelector.call(node, selector);
+ };
+
+ /**
+ * Node API wrapper class returned from `Polymer.dom.(target)` when
+ * `target` is a `Node`.
+ *
+ * @memberof Polymer
+ */
+ class DomApi {
+
+ /**
+ * @param {Node} node Node for which to create a Polymer.dom helper object.
+ */
+ constructor(node) {
+ this.node = node;
+ }
+
+ /**
+ * Returns an instance of `Polymer.FlattenedNodesObserver` that
+ * listens for node changes on this element.
+ *
+ * @param {function(!Element, { target: !Element, addedNodes: !Array<!Element>, removedNodes: !Array<!Element> }):void} callback Called when direct or distributed children
+ * of this element changes
+ * @return {!Polymer.FlattenedNodesObserver} Observer instance
+ */
+ observeNodes(callback) {
+ return new Polymer.FlattenedNodesObserver(this.node, callback);
+ }
+
+ /**
+ * Disconnects an observer previously created via `observeNodes`
+ *
+ * @param {!Polymer.FlattenedNodesObserver} observerHandle Observer instance
+ * to disconnect.
+ * @return {void}
+ */
+ unobserveNodes(observerHandle) {
+ observerHandle.disconnect();
+ }
+
+ /**
+ * Provided as a backwards-compatible API only. This method does nothing.
+ * @return {void}
+ */
+ notifyObserver() {}
+
+ /**
+ * Returns true if the provided node is contained with this element's
+ * light-DOM children or shadow root, including any nested shadow roots
+ * of children therein.
+ *
+ * @param {Node} node Node to test
+ * @return {boolean} Returns true if the given `node` is contained within
+ * this element's light or shadow DOM.
+ */
+ deepContains(node) {
+ if (this.node.contains(node)) {
+ return true;
+ }
+ let n = node;
+ let doc = node.ownerDocument;
+ // walk from node to `this` or `document`
+ while (n && n !== doc && n !== this.node) {
+ // use logical parentnode, or native ShadowRoot host
+ n = n.parentNode || n.host;
+ }
+ return n === this.node;
+ }
+
+ /**
+ * Returns the root node of this node. Equivalent to `getRoodNode()`.
+ *
+ * @return {Node} Top most element in the dom tree in which the node
+ * exists. If the node is connected to a document this is either a
+ * shadowRoot or the document; otherwise, it may be the node
+ * itself or a node or document fragment containing it.
+ */
+ getOwnerRoot() {
+ return this.node.getRootNode();
+ }
+
+ /**
+ * For slot elements, returns the nodes assigned to the slot; otherwise
+ * an empty array. It is equivalent to `<slot>.addignedNodes({flatten:true})`.
+ *
+ * @return {!Array<!Node>} Array of assigned nodes
+ */
+ getDistributedNodes() {
+ return (this.node.localName === 'slot') ?
+ this.node.assignedNodes({flatten: true}) :
+ [];
+ }
+
+ /**
+ * Returns an array of all slots this element was distributed to.
+ *
+ * @return {!Array<!HTMLSlotElement>} Description
+ */
+ getDestinationInsertionPoints() {
+ let ip$ = [];
+ let n = this.node.assignedSlot;
+ while (n) {
+ ip$.push(n);
+ n = n.assignedSlot;
+ }
+ return ip$;
+ }
+
+ /**
+ * Calls `importNode` on the `ownerDocument` for this node.
+ *
+ * @param {!Node} node Node to import
+ * @param {boolean} deep True if the node should be cloned deeply during
+ * import
+ * @return {Node} Clone of given node imported to this owner document
+ */
+ importNode(node, deep) {
+ let doc = this.node instanceof Document ? this.node :
+ this.node.ownerDocument;
+ return doc.importNode(node, deep);
+ }
+
+ /**
+ * @return {!Array<!Node>} Returns a flattened list of all child nodes and
+ * nodes assigned to child slots.
+ */
+ getEffectiveChildNodes() {
+ return Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node);
+ }
+
+ /**
+ * Returns a filtered list of flattened child elements for this element based
+ * on the given selector.
+ *
+ * @param {string} selector Selector to filter nodes against
+ * @return {!Array<!HTMLElement>} List of flattened child elements
+ */
+ queryDistributedElements(selector) {
+ let c$ = this.getEffectiveChildNodes();
+ let list = [];
+ for (let i=0, l=c$.length, c; (i<l) && (c=c$[i]); i++) {
+ if ((c.nodeType === Node.ELEMENT_NODE) &&
+ matchesSelector(c, selector)) {
+ list.push(c);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * For shadow roots, returns the currently focused element within this
+ * shadow root.
+ *
+ * @return {Node|undefined} Currently focused element
+ */
+ get activeElement() {
+ let node = this.node;
+ return node._activeElement !== undefined ? node._activeElement : node.activeElement;
+ }
+ }
+
+ function forwardMethods(proto, methods) {
+ for (let i=0; i < methods.length; i++) {
+ let method = methods[i];
+ /* eslint-disable valid-jsdoc */
+ proto[method] = /** @this {DomApi} */ function() {
+ return this.node[method].apply(this.node, arguments);
+ };
+ /* eslint-enable */
+ }
+ }
+
+ function forwardReadOnlyProperties(proto, properties) {
+ for (let i=0; i < properties.length; i++) {
+ let name = properties[i];
+ Object.defineProperty(proto, name, {
+ get: function() {
+ const domApi = /** @type {DomApi} */(this);
+ return domApi.node[name];
+ },
+ configurable: true
+ });
+ }
+ }
+
+ function forwardProperties(proto, properties) {
+ for (let i=0; i < properties.length; i++) {
+ let name = properties[i];
+ Object.defineProperty(proto, name, {
+ get: function() {
+ const domApi = /** @type {DomApi} */(this);
+ return domApi.node[name];
+ },
+ set: function(value) {
+ /** @type {DomApi} */ (this).node[name] = value;
+ },
+ configurable: true
+ });
+ }
+ }
+
+ forwardMethods(DomApi.prototype, [
+ 'cloneNode', 'appendChild', 'insertBefore', 'removeChild',
+ 'replaceChild', 'setAttribute', 'removeAttribute',
+ 'querySelector', 'querySelectorAll'
+ ]);
+
+ forwardReadOnlyProperties(DomApi.prototype, [
+ 'parentNode', 'firstChild', 'lastChild',
+ 'nextSibling', 'previousSibling', 'firstElementChild',
+ 'lastElementChild', 'nextElementSibling', 'previousElementSibling',
+ 'childNodes', 'children', 'classList'
+ ]);
+
+ forwardProperties(DomApi.prototype, [
+ 'textContent', 'innerHTML'
+ ]);
+
+
+ /**
+ * Event API wrapper class returned from `Polymer.dom.(target)` when
+ * `target` is an `Event`.
+ */
+ class EventApi {
+ constructor(event) {
+ this.event = event;
+ }
+
+ /**
+ * Returns the first node on the `composedPath` of this event.
+ *
+ * @return {!EventTarget} The node this event was dispatched to
+ */
+ get rootTarget() {
+ return this.event.composedPath()[0];
+ }
+
+ /**
+ * Returns the local (re-targeted) target for this event.
+ *
+ * @return {!EventTarget} The local (re-targeted) target for this event.
+ */
+ get localTarget() {
+ return this.event.target;
+ }
+
+ /**
+ * Returns the `composedPath` for this event.
+ * @return {!Array<!EventTarget>} The nodes this event propagated through
+ */
+ get path() {
+ return this.event.composedPath();
+ }
+ }
+
+ Polymer.DomApi = DomApi;
+
+ /**
+ * @function
+ * @param {boolean=} deep
+ * @return {!Node}
+ */
+ Polymer.DomApi.prototype.cloneNode;
+ /**
+ * @function
+ * @param {!Node} node
+ * @return {!Node}
+ */
+ Polymer.DomApi.prototype.appendChild;
+ /**
+ * @function
+ * @param {!Node} newChild
+ * @param {Node} refChild
+ * @return {!Node}
+ */
+ Polymer.DomApi.prototype.insertBefore;
+ /**
+ * @function
+ * @param {!Node} node
+ * @return {!Node}
+ */
+ Polymer.DomApi.prototype.removeChild;
+ /**
+ * @function
+ * @param {!Node} oldChild
+ * @param {!Node} newChild
+ * @return {!Node}
+ */
+ Polymer.DomApi.prototype.replaceChild;
+ /**
+ * @function
+ * @param {string} name
+ * @param {string} value
+ * @return {void}
+ */
+ Polymer.DomApi.prototype.setAttribute;
+ /**
+ * @function
+ * @param {string} name
+ * @return {void}
+ */
+ Polymer.DomApi.prototype.removeAttribute;
+ /**
+ * @function
+ * @param {string} selector
+ * @return {?Element}
+ */
+ Polymer.DomApi.prototype.querySelector;
+ /**
+ * @function
+ * @param {string} selector
+ * @return {!NodeList<!Element>}
+ */
+ Polymer.DomApi.prototype.querySelectorAll;
+
+ /**
+ * Legacy DOM and Event manipulation API wrapper factory used to abstract
+ * differences between native Shadow DOM and "Shady DOM" when polyfilling on
+ * older browsers.
+ *
+ * Note that in Polymer 2.x use of `Polymer.dom` is no longer required and
+ * in the majority of cases simply facades directly to the standard native
+ * API.
+ *
+ * @namespace
+ * @summary Legacy DOM and Event manipulation API wrapper factory used to
+ * abstract differences between native Shadow DOM and "Shady DOM."
+ * @memberof Polymer
+ * @param {(Node|Event)=} obj Node or event to operate on
+ * @return {!DomApi|!EventApi} Wrapper providing either node API or event API
+ */
+ Polymer.dom = function(obj) {
+ obj = obj || document;
+ if (!obj.__domApi) {
+ let helper;
+ if (obj instanceof Event) {
+ helper = new EventApi(obj);
+ } else {
+ helper = new DomApi(obj);
+ }
+ obj.__domApi = helper;
+ }
+ return obj.__domApi;
+ };
+
+ Polymer.dom.matchesSelector = matchesSelector;
+
+ /**
+ * Forces several classes of asynchronously queued tasks to flush:
+ * - Debouncers added via `Polymer.enqueueDebouncer`
+ * - ShadyDOM distribution
+ *
+ * This method facades to `Polymer.flush`.
+ *
+ * @memberof Polymer.dom
+ */
+ Polymer.dom.flush = Polymer.flush;
+
+ /**
+ * Adds a `Polymer.Debouncer` to a list of globally flushable tasks.
+ *
+ * This method facades to `Polymer.enqueueDebouncer`.
+ *
+ * @memberof Polymer.dom
+ * @param {Polymer.Debouncer} debouncer Debouncer to enqueue
+ */
+ Polymer.dom.addDebouncer = Polymer.enqueueDebouncer;
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/templatizer-behavior.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/templatizer-behavior.html
new file mode 100644
index 00000000000..05ad62d0d49
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/legacy/templatizer-behavior.html
@@ -0,0 +1,151 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/templatize.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ let TemplateInstanceBase = Polymer.TemplateInstanceBase; // eslint-disable-line
+
+ /**
+ * @typedef {{
+ * _templatizerTemplate: HTMLTemplateElement,
+ * _parentModel: boolean,
+ * _instanceProps: Object,
+ * _forwardHostPropV2: Function,
+ * _notifyInstancePropV2: Function,
+ * ctor: TemplateInstanceBase
+ * }}
+ */
+ let TemplatizerUser; // eslint-disable-line
+
+ /**
+ * The `Polymer.Templatizer` behavior adds methods to generate instances of
+ * templates that are each managed by an anonymous `Polymer.PropertyEffects`
+ * instance where data-bindings in the stamped template content are bound to
+ * accessors on itself.
+ *
+ * This behavior is provided in Polymer 2.x as a hybrid-element convenience
+ * only. For non-hybrid usage, the `Polymer.Templatize` library
+ * should be used instead.
+ *
+ * Example:
+ *
+ * // Get a template from somewhere, e.g. light DOM
+ * let template = this.querySelector('template');
+ * // Prepare the template
+ * this.templatize(template);
+ * // Instance the template with an initial data model
+ * let instance = this.stamp({myProp: 'initial'});
+ * // Insert the instance's DOM somewhere, e.g. light DOM
+ * Polymer.dom(this).appendChild(instance.root);
+ * // Changing a property on the instance will propagate to bindings
+ * // in the template
+ * instance.myProp = 'new value';
+ *
+ * Users of `Templatizer` may need to implement the following abstract
+ * API's to determine how properties and paths from the host should be
+ * forwarded into to instances:
+ *
+ * _forwardHostPropV2: function(prop, value)
+ *
+ * Likewise, users may implement these additional abstract API's to determine
+ * how instance-specific properties that change on the instance should be
+ * forwarded out to the host, if necessary.
+ *
+ * _notifyInstancePropV2: function(inst, prop, value)
+ *
+ * In order to determine which properties are instance-specific and require
+ * custom notification via `_notifyInstanceProp`, define an `_instanceProps`
+ * object containing keys for each instance prop, for example:
+ *
+ * _instanceProps: {
+ * item: true,
+ * index: true
+ * }
+ *
+ * Any properties used in the template that are not defined in _instanceProp
+ * will be forwarded out to the Templatize `owner` automatically.
+ *
+ * Users may also implement the following abstract function to show or
+ * hide any DOM generated using `stamp`:
+ *
+ * _showHideChildren: function(shouldHide)
+ *
+ * Note that some callbacks are suffixed with `V2` in the Polymer 2.x behavior
+ * as the implementations will need to differ from the callbacks required
+ * by the 1.x Templatizer API due to changes in the `TemplateInstance` API
+ * between versions 1.x and 2.x.
+ *
+ * @polymerBehavior
+ */
+ Polymer.Templatizer = {
+
+ /**
+ * Generates an anonymous `TemplateInstance` class (stored as `this.ctor`)
+ * for the provided template. This method should be called once per
+ * template to prepare an element for stamping the template, followed
+ * by `stamp` to create new instances of the template.
+ *
+ * @param {!HTMLTemplateElement} template Template to prepare
+ * @param {boolean=} mutableData When `true`, the generated class will skip
+ * strict dirty-checking for objects and arrays (always consider them to
+ * be "dirty"). Defaults to false.
+ * @return {void}
+ * @this {TemplatizerUser}
+ */
+ templatize(template, mutableData) {
+ this._templatizerTemplate = template;
+ this.ctor = Polymer.Templatize.templatize(template, this, {
+ mutableData: Boolean(mutableData),
+ parentModel: this._parentModel,
+ instanceProps: this._instanceProps,
+ forwardHostProp: this._forwardHostPropV2,
+ notifyInstanceProp: this._notifyInstancePropV2
+ });
+ },
+
+ /**
+ * Creates an instance of the template prepared by `templatize`. The object
+ * returned is an instance of the anonymous class generated by `templatize`
+ * whose `root` property is a document fragment containing newly cloned
+ * template content, and which has property accessors corresponding to
+ * properties referenced in template bindings.
+ *
+ * @param {Object=} model Object containing initial property values to
+ * populate into the template bindings.
+ * @return {TemplateInstanceBase} Returns the created instance of
+ * the template prepared by `templatize`.
+ * @this {TemplatizerUser}
+ */
+ stamp(model) {
+ return new this.ctor(model);
+ },
+
+ /**
+ * Returns the template "model" (`TemplateInstance`) associated with
+ * a given element, which serves as the binding scope for the template
+ * instance the element is contained in. A template model should be used
+ * to manipulate data associated with this template instance.
+ *
+ * @param {HTMLElement} el Element for which to return a template model.
+ * @return {TemplateInstanceBase} Model representing the binding scope for
+ * the element.
+ * @this {TemplatizerUser}
+ */
+ modelForElement(el) {
+ return Polymer.Templatize.modelForElement(this._templatizerTemplate, el);
+ }
+ };
+
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/dir-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/dir-mixin.html
new file mode 100644
index 00000000000..68db35d5fef
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/dir-mixin.html
@@ -0,0 +1,181 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="property-accessors.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ const HOST_DIR = /:host\(:dir\((ltr|rtl)\)\)/g;
+ const HOST_DIR_REPLACMENT = ':host([dir="$1"])';
+
+ const EL_DIR = /([\s\w-#\.\[\]\*]*):dir\((ltr|rtl)\)/g;
+ const EL_DIR_REPLACMENT = ':host([dir="$2"]) $1';
+
+ /**
+ * @type {!Array<!Polymer_DirMixin>}
+ */
+ const DIR_INSTANCES = [];
+
+ /** @type {MutationObserver} */
+ let observer = null;
+
+ let DOCUMENT_DIR = '';
+
+ function getRTL() {
+ DOCUMENT_DIR = document.documentElement.getAttribute('dir');
+ }
+
+ /**
+ * @param {!Polymer_DirMixin} instance Instance to set RTL status on
+ */
+ function setRTL(instance) {
+ if (!instance.__autoDirOptOut) {
+ const el = /** @type {!HTMLElement} */(instance);
+ el.setAttribute('dir', DOCUMENT_DIR);
+ }
+ }
+
+ function updateDirection() {
+ getRTL();
+ DOCUMENT_DIR = document.documentElement.getAttribute('dir');
+ for (let i = 0; i < DIR_INSTANCES.length; i++) {
+ setRTL(DIR_INSTANCES[i]);
+ }
+ }
+
+ function takeRecords() {
+ if (observer && observer.takeRecords().length) {
+ updateDirection();
+ }
+ }
+
+ /**
+ * Element class mixin that allows elements to use the `:dir` CSS Selector to have
+ * text direction specific styling.
+ *
+ * With this mixin, any stylesheet provided in the template will transform `:dir` into
+ * `:host([dir])` and sync direction with the page via the element's `dir` attribute.
+ *
+ * Elements can opt out of the global page text direction by setting the `dir` attribute
+ * directly in `ready()` or in HTML.
+ *
+ * Caveats:
+ * - Applications must set `<html dir="ltr">` or `<html dir="rtl">` to sync direction
+ * - Automatic left-to-right or right-to-left styling is sync'd with the `<html>` element only.
+ * - Changing `dir` at runtime is supported.
+ * - Opting out of the global direction styling is permanent
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.PropertyAccessors
+ * @memberof Polymer
+ */
+ Polymer.DirMixin = Polymer.dedupingMixin((base) => {
+
+ if (!observer) {
+ getRTL();
+ observer = new MutationObserver(updateDirection);
+ observer.observe(document.documentElement, {attributes: true, attributeFilter: ['dir']});
+ }
+
+ /**
+ * @constructor
+ * @extends {base}
+ * @implements {Polymer_PropertyAccessors}
+ */
+ const elementBase = Polymer.PropertyAccessors(base);
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_DirMixin}
+ */
+ class Dir extends elementBase {
+
+ /**
+ * @override
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static _processStyleText(cssText, baseURI) {
+ cssText = super._processStyleText(cssText, baseURI);
+ cssText = this._replaceDirInCssText(cssText);
+ return cssText;
+ }
+
+ /**
+ * Replace `:dir` in the given CSS text
+ *
+ * @param {string} text CSS text to replace DIR
+ * @return {string} Modified CSS
+ */
+ static _replaceDirInCssText(text) {
+ let replacedText = text;
+ replacedText = replacedText.replace(HOST_DIR, HOST_DIR_REPLACMENT);
+ replacedText = replacedText.replace(EL_DIR, EL_DIR_REPLACMENT);
+ if (text !== replacedText) {
+ this.__activateDir = true;
+ }
+ return replacedText;
+ }
+
+ constructor() {
+ super();
+ /** @type {boolean} */
+ this.__autoDirOptOut = false;
+ }
+
+ /**
+ * @suppress {invalidCasts} Closure doesn't understand that `this` is an HTMLElement
+ * @return {void}
+ */
+ ready() {
+ super.ready();
+ this.__autoDirOptOut = /** @type {!HTMLElement} */(this).hasAttribute('dir');
+ }
+
+ /**
+ * @suppress {missingProperties} If it exists on elementBase, it can be super'd
+ * @return {void}
+ */
+ connectedCallback() {
+ if (elementBase.prototype.connectedCallback) {
+ super.connectedCallback();
+ }
+ if (this.constructor.__activateDir) {
+ takeRecords();
+ DIR_INSTANCES.push(this);
+ setRTL(this);
+ }
+ }
+
+ /**
+ * @suppress {missingProperties} If it exists on elementBase, it can be super'd
+ * @return {void}
+ */
+ disconnectedCallback() {
+ if (elementBase.prototype.disconnectedCallback) {
+ super.disconnectedCallback();
+ }
+ if (this.constructor.__activateDir) {
+ const idx = DIR_INSTANCES.indexOf(this);
+ if (idx > -1) {
+ DIR_INSTANCES.splice(idx, 1);
+ }
+ }
+ }
+ }
+
+ Dir.__activateDir = false;
+
+ return Dir;
+ });
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/disable-upgrade-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/disable-upgrade-mixin.html
new file mode 100644
index 00000000000..a94418214e6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/disable-upgrade-mixin.html
@@ -0,0 +1,116 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="element-mixin.html">
+<script>
+(function() {
+ 'use strict';
+
+ const DISABLED_ATTR = 'disable-upgrade';
+
+ /**
+ * Element class mixin that allows the element to boot up in a non-enabled
+ * state when the `disable-upgrade` attribute is present. This mixin is
+ * designed to be used with element classes like Polymer.Element that perform
+ * initial startup work when they are first connected. When the
+ * `disable-upgrade` attribute is removed, if the element is connected, it
+ * boots up and "enables" as it otherwise would; if it is not connected, the
+ * element boots up when it is next connected.
+ *
+ * Using `disable-upgrade` with Polymer.Element prevents any data propagation
+ * to the element, any element DOM from stamping, or any work done in
+ * connected/disconnctedCallback from occuring, but it does not prevent work
+ * done in the element constructor.
+ *
+ * Note, this mixin must be applied on top of any element class that
+ * itself implements a `connectedCallback` so that it can control the work
+ * done in `connectedCallback`. For example,
+ *
+ * MyClass = Polymer.DisableUpgradeMixin(class extends BaseClass {...});
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.ElementMixin
+ * @memberof Polymer
+ */
+ Polymer.DisableUpgradeMixin = Polymer.dedupingMixin((base) => {
+
+ /**
+ * @constructor
+ * @extends {base}
+ * @implements {Polymer_ElementMixin}
+ */
+ const superClass = Polymer.ElementMixin(base);
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_DisableUpgradeMixin}
+ */
+ class DisableUpgradeClass extends superClass {
+
+ /** @override */
+ static get observedAttributes() {
+ return super.observedAttributes.concat(DISABLED_ATTR);
+ }
+
+ /** @override */
+ attributeChangedCallback(name, old, value) {
+ if (name == DISABLED_ATTR) {
+ if (!this.__dataEnabled && value == null && this.isConnected) {
+ super.connectedCallback();
+ }
+ } else {
+ super.attributeChangedCallback(name, old, value);
+ }
+ }
+
+ /*
+ NOTE: cannot gate on attribute because this is called before
+ attributes are delivered. Therefore, we stub this out and
+ call `super._initializeProperties()` manually.
+ */
+ /** @override */
+ _initializeProperties() {}
+
+ // prevent user code in connected from running
+ /** @override */
+ connectedCallback() {
+ if (this.__dataEnabled || !this.hasAttribute(DISABLED_ATTR)) {
+ super.connectedCallback();
+ }
+ }
+
+ // prevent element from turning on properties
+ /** @override */
+ _enableProperties() {
+ if (!this.hasAttribute(DISABLED_ATTR)) {
+ if (!this.__dataEnabled) {
+ super._initializeProperties();
+ }
+ super._enableProperties();
+ }
+ }
+
+ // only go if "enabled"
+ /** @override */
+ disconnectedCallback() {
+ if (this.__dataEnabled) {
+ super.disconnectedCallback();
+ }
+ }
+
+ }
+
+ return DisableUpgradeClass;
+
+ });
+
+})();
+
+</script> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/element-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/element-mixin.html
new file mode 100644
index 00000000000..d83946cef2f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/element-mixin.html
@@ -0,0 +1,739 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/settings.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/style-gather.html">
+<link rel="import" href="../utils/resolve-url.html">
+<link rel="import" href="../elements/dom-module.html">
+<link rel="import" href="property-effects.html">
+<link rel="import" href="properties-mixin.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * Element class mixin that provides the core API for Polymer's meta-programming
+ * features including template stamping, data-binding, attribute deserialization,
+ * and property change observation.
+ *
+ * Subclassers may provide the following static getters to return metadata
+ * used to configure Polymer's features for the class:
+ *
+ * - `static get is()`: When the template is provided via a `dom-module`,
+ * users should return the `dom-module` id from a static `is` getter. If
+ * no template is needed or the template is provided directly via the
+ * `template` getter, there is no need to define `is` for the element.
+ *
+ * - `static get template()`: Users may provide the template directly (as
+ * opposed to via `dom-module`) by implementing a static `template` getter.
+ * The getter may return an `HTMLTemplateElement` or a string, which will
+ * automatically be parsed into a template.
+ *
+ * - `static get properties()`: Should return an object describing
+ * property-related metadata used by Polymer features (key: property name
+ * value: object containing property metadata). Valid keys in per-property
+ * metadata include:
+ * - `type` (String|Number|Object|Array|...): Used by
+ * `attributeChangedCallback` to determine how string-based attributes
+ * are deserialized to JavaScript property values.
+ * - `notify` (boolean): Causes a change in the property to fire a
+ * non-bubbling event called `<property>-changed`. Elements that have
+ * enabled two-way binding to the property use this event to observe changes.
+ * - `readOnly` (boolean): Creates a getter for the property, but no setter.
+ * To set a read-only property, use the private setter method
+ * `_setProperty(property, value)`.
+ * - `observer` (string): Observer method name that will be called when
+ * the property changes. The arguments of the method are
+ * `(value, previousValue)`.
+ * - `computed` (string): String describing method and dependent properties
+ * for computing the value of this property (e.g. `'computeFoo(bar, zot)'`).
+ * Computed properties are read-only by default and can only be changed
+ * via the return value of the computing method.
+ *
+ * - `static get observers()`: Array of strings describing multi-property
+ * observer methods and their dependent properties (e.g.
+ * `'observeABC(a, b, c)'`).
+ *
+ * The base class provides default implementations for the following standard
+ * custom element lifecycle callbacks; users may override these, but should
+ * call the super method to ensure
+ * - `constructor`: Run when the element is created or upgraded
+ * - `connectedCallback`: Run each time the element is connected to the
+ * document
+ * - `disconnectedCallback`: Run each time the element is disconnected from
+ * the document
+ * - `attributeChangedCallback`: Run each time an attribute in
+ * `observedAttributes` is set or removed (note: this element's default
+ * `observedAttributes` implementation will automatically return an array
+ * of dash-cased attributes based on `properties`)
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.PropertyEffects
+ * @appliesMixin Polymer.PropertiesMixin
+ * @memberof Polymer
+ * @property rootPath {string} Set to the value of `Polymer.rootPath`,
+ * which defaults to the main document path
+ * @property importPath {string} Set to the value of the class's static
+ * `importPath` property, which defaults to the path of this element's
+ * `dom-module` (when `is` is used), but can be overridden for other
+ * import strategies.
+ * @summary Element class mixin that provides the core API for Polymer's
+ * meta-programming features.
+ */
+ Polymer.ElementMixin = Polymer.dedupingMixin(base => {
+
+ /**
+ * @constructor
+ * @extends {base}
+ * @implements {Polymer_PropertyEffects}
+ * @implements {Polymer_PropertiesMixin}
+ */
+ const polymerElementBase = Polymer.PropertiesMixin(Polymer.PropertyEffects(base));
+
+ /**
+ * Returns a list of properties with default values.
+ * This list is created as an optimization since it is a subset of
+ * the list returned from `_properties`.
+ * This list is used in `_initializeProperties` to set property defaults.
+ *
+ * @param {PolymerElementConstructor} constructor Element class
+ * @return {PolymerElementProperties} Flattened properties for this class
+ * that have default values
+ * @private
+ */
+ function propertyDefaults(constructor) {
+ if (!constructor.hasOwnProperty(
+ JSCompiler_renameProperty('__propertyDefaults', constructor))) {
+ constructor.__propertyDefaults = null;
+ let props = constructor._properties;
+ for (let p in props) {
+ let info = props[p];
+ if ('value' in info) {
+ constructor.__propertyDefaults = constructor.__propertyDefaults || {};
+ constructor.__propertyDefaults[p] = info;
+ }
+ }
+ }
+ return constructor.__propertyDefaults;
+ }
+
+ /**
+ * Returns a memoized version of the the `observers` array.
+ * @param {PolymerElementConstructor} constructor Element class
+ * @return {Array} Array containing own observers for the given class
+ * @protected
+ */
+ function ownObservers(constructor) {
+ if (!constructor.hasOwnProperty(
+ JSCompiler_renameProperty('__ownObservers', constructor))) {
+ constructor.__ownObservers =
+ constructor.hasOwnProperty(JSCompiler_renameProperty('observers', constructor)) ?
+ /** @type {PolymerElementConstructor} */ (constructor).observers : null;
+ }
+ return constructor.__ownObservers;
+ }
+
+ /**
+ * Creates effects for a property.
+ *
+ * Note, once a property has been set to
+ * `readOnly`, `computed`, `reflectToAttribute`, or `notify`
+ * these values may not be changed. For example, a subclass cannot
+ * alter these settings. However, additional `observers` may be added
+ * by subclasses.
+ *
+ * The info object should may contain property metadata as follows:
+ *
+ * * `type`: {function} type to which an attribute matching the property
+ * is deserialized. Note the property is camel-cased from a dash-cased
+ * attribute. For example, 'foo-bar' attribute is deserialized to a
+ * property named 'fooBar'.
+ *
+ * * `readOnly`: {boolean} creates a readOnly property and
+ * makes a private setter for the private of the form '_setFoo' for a
+ * property 'foo',
+ *
+ * * `computed`: {string} creates a computed property. A computed property
+ * also automatically is set to `readOnly: true`. The value is calculated
+ * by running a method and arguments parsed from the given string. For
+ * example 'compute(foo)' will compute a given property when the
+ * 'foo' property changes by executing the 'compute' method. This method
+ * must return the computed value.
+ *
+ * * `reflectToAttribute`: {boolean} If true, the property value is reflected
+ * to an attribute of the same name. Note, the attribute is dash-cased
+ * so a property named 'fooBar' is reflected as 'foo-bar'.
+ *
+ * * `notify`: {boolean} sends a non-bubbling notification event when
+ * the property changes. For example, a property named 'foo' sends an
+ * event named 'foo-changed' with `event.detail` set to the value of
+ * the property.
+ *
+ * * observer: {string} name of a method that runs when the property
+ * changes. The arguments of the method are (value, previousValue).
+ *
+ * Note: Users may want control over modifying property
+ * effects via subclassing. For example, a user might want to make a
+ * reflectToAttribute property not do so in a subclass. We've chosen to
+ * disable this because it leads to additional complication.
+ * For example, a readOnly effect generates a special setter. If a subclass
+ * disables the effect, the setter would fail unexpectedly.
+ * Based on feedback, we may want to try to make effects more malleable
+ * and/or provide an advanced api for manipulating them.
+ * Also consider adding warnings when an effect cannot be changed.
+ *
+ * @param {!PolymerElement} proto Element class prototype to add accessors
+ * and effects to
+ * @param {string} name Name of the property.
+ * @param {Object} info Info object from which to create property effects.
+ * Supported keys:
+ * @param {Object} allProps Flattened map of all properties defined in this
+ * element (including inherited properties)
+ * @return {void}
+ * @private
+ */
+ function createPropertyFromConfig(proto, name, info, allProps) {
+ // computed forces readOnly...
+ if (info.computed) {
+ info.readOnly = true;
+ }
+ // Note, since all computed properties are readOnly, this prevents
+ // adding additional computed property effects (which leads to a confusing
+ // setup where multiple triggers for setting a property)
+ // While we do have `hasComputedEffect` this is set on the property's
+ // dependencies rather than itself.
+ if (info.computed && !proto._hasReadOnlyEffect(name)) {
+ proto._createComputedProperty(name, info.computed, allProps);
+ }
+ if (info.readOnly && !proto._hasReadOnlyEffect(name)) {
+ proto._createReadOnlyProperty(name, !info.computed);
+ }
+ if (info.reflectToAttribute && !proto._hasReflectEffect(name)) {
+ proto._createReflectedProperty(name);
+ }
+ if (info.notify && !proto._hasNotifyEffect(name)) {
+ proto._createNotifyingProperty(name);
+ }
+ // always add observer
+ if (info.observer) {
+ proto._createPropertyObserver(name, info.observer, allProps[info.observer]);
+ }
+ // always create the mapping from attribute back to property for deserialization.
+ proto._addPropertyToAttributeMap(name);
+ }
+
+ /**
+ * Process all style elements in the element template. Styles with the
+ * `include` attribute are processed such that any styles in
+ * the associated "style modules" are included in the element template.
+ * @param {PolymerElementConstructor} klass Element class
+ * @param {!HTMLTemplateElement} template Template to process
+ * @param {string} is Name of element
+ * @param {string} baseURI Base URI for element
+ * @private
+ */
+ function processElementStyles(klass, template, is, baseURI) {
+ const templateStyles = template.content.querySelectorAll('style');
+ const stylesWithImports = Polymer.StyleGather.stylesFromTemplate(template);
+ // insert styles from <link rel="import" type="css"> at the top of the template
+ const linkedStyles = Polymer.StyleGather.stylesFromModuleImports(is);
+ const firstTemplateChild = template.content.firstElementChild;
+ for (let idx = 0; idx < linkedStyles.length; idx++) {
+ let s = linkedStyles[idx];
+ s.textContent = klass._processStyleText(s.textContent, baseURI);
+ template.content.insertBefore(s, firstTemplateChild);
+ }
+ // keep track of the last "concrete" style in the template we have encountered
+ let templateStyleIndex = 0;
+ // ensure all gathered styles are actually in this template.
+ for (let i = 0; i < stylesWithImports.length; i++) {
+ let s = stylesWithImports[i];
+ let templateStyle = templateStyles[templateStyleIndex];
+ // if the style is not in this template, it's been "included" and
+ // we put a clone of it in the template before the style that included it
+ if (templateStyle !== s) {
+ s = s.cloneNode(true);
+ templateStyle.parentNode.insertBefore(s, templateStyle);
+ } else {
+ templateStyleIndex++;
+ }
+ s.textContent = klass._processStyleText(s.textContent, baseURI);
+ }
+ if (window.ShadyCSS) {
+ window.ShadyCSS.prepareTemplate(template, is);
+ }
+ }
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @unrestricted
+ * @implements {Polymer_ElementMixin}
+ */
+ class PolymerElement extends polymerElementBase {
+
+ /**
+ * Override of PropertiesMixin _finalizeClass to create observers and
+ * find the template.
+ * @return {void}
+ * @protected
+ * @override
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static _finalizeClass() {
+ super._finalizeClass();
+ if (this.hasOwnProperty(
+ JSCompiler_renameProperty('is', this)) && this.is) {
+ Polymer.telemetry.register(this.prototype);
+ }
+ const observers = ownObservers(this);
+ if (observers) {
+ this.createObservers(observers, this._properties);
+ }
+ // note: create "working" template that is finalized at instance time
+ let template = /** @type {PolymerElementConstructor} */ (this).template;
+ if (template) {
+ if (typeof template === 'string') {
+ let t = document.createElement('template');
+ t.innerHTML = template;
+ template = t;
+ } else {
+ template = template.cloneNode(true);
+ }
+ }
+
+ this.prototype._template = template;
+ }
+
+ /**
+ * Override of PropertiesChanged createProperties to create accessors
+ * and property effects for all of the properties.
+ * @return {void}
+ * @protected
+ * @override
+ */
+ static createProperties(props) {
+ for (let p in props) {
+ createPropertyFromConfig(this.prototype, p, props[p], props);
+ }
+ }
+
+ /**
+ * Creates observers for the given `observers` array.
+ * Leverages `PropertyEffects` to create observers.
+ * @param {Object} observers Array of observer descriptors for
+ * this class
+ * @param {Object} dynamicFns Object containing keys for any properties
+ * that are functions and should trigger the effect when the function
+ * reference is changed
+ * @return {void}
+ * @protected
+ */
+ static createObservers(observers, dynamicFns) {
+ const proto = this.prototype;
+ for (let i=0; i < observers.length; i++) {
+ proto._createMethodObserver(observers[i], dynamicFns);
+ }
+ }
+
+ /**
+ * Returns the template that will be stamped into this element's shadow root.
+ *
+ * If a `static get is()` getter is defined, the default implementation
+ * will return the first `<template>` in a `dom-module` whose `id`
+ * matches this element's `is`.
+ *
+ * Users may override this getter to return an arbitrary template
+ * (in which case the `is` getter is unnecessary). The template returned
+ * may be either an `HTMLTemplateElement` or a string that will be
+ * automatically parsed into a template.
+ *
+ * Note that when subclassing, if the super class overrode the default
+ * implementation and the subclass would like to provide an alternate
+ * template via a `dom-module`, it should override this getter and
+ * return `Polymer.DomModule.import(this.is, 'template')`.
+ *
+ * If a subclass would like to modify the super class template, it should
+ * clone it rather than modify it in place. If the getter does expensive
+ * work such as cloning/modifying a template, it should memoize the
+ * template for maximum performance:
+ *
+ * let memoizedTemplate;
+ * class MySubClass extends MySuperClass {
+ * static get template() {
+ * if (!memoizedTemplate) {
+ * memoizedTemplate = super.template.cloneNode(true);
+ * let subContent = document.createElement('div');
+ * subContent.textContent = 'This came from MySubClass';
+ * memoizedTemplate.content.appendChild(subContent);
+ * }
+ * return memoizedTemplate;
+ * }
+ * }
+ *
+ * @return {HTMLTemplateElement|string} Template to be stamped
+ */
+ static get template() {
+ if (!this.hasOwnProperty(JSCompiler_renameProperty('_template', this))) {
+ this._template = Polymer.DomModule && Polymer.DomModule.import(
+ /** @type {PolymerElementConstructor}*/ (this).is, 'template') ||
+ // note: implemented so a subclass can retrieve the super
+ // template; call the super impl this way so that `this` points
+ // to the superclass.
+ Object.getPrototypeOf(/** @type {PolymerElementConstructor}*/ (this).prototype).constructor.template;
+ }
+ return this._template;
+ }
+
+ /**
+ * Path matching the url from which the element was imported.
+ * This path is used to resolve url's in template style cssText.
+ * The `importPath` property is also set on element instances and can be
+ * used to create bindings relative to the import path.
+ * Defaults to the path matching the url containing a `dom-module` element
+ * matching this element's static `is` property.
+ * Note, this path should contain a trailing `/`.
+ *
+ * @return {string} The import path for this element class
+ */
+ static get importPath() {
+ if (!this.hasOwnProperty(JSCompiler_renameProperty('_importPath', this))) {
+ const module = Polymer.DomModule && Polymer.DomModule.import(/** @type {PolymerElementConstructor} */ (this).is);
+ this._importPath = module ? module.assetpath : '' ||
+ Object.getPrototypeOf(/** @type {PolymerElementConstructor}*/ (this).prototype).constructor.importPath;
+ }
+ return this._importPath;
+ }
+
+ constructor() {
+ super();
+ /** @type {HTMLTemplateElement} */
+ this._template;
+ /** @type {string} */
+ this._importPath;
+ /** @type {string} */
+ this.rootPath;
+ /** @type {string} */
+ this.importPath;
+ /** @type {StampedTemplate | HTMLElement | ShadowRoot} */
+ this.root;
+ /** @type {!Object<string, !Element>} */
+ this.$;
+ }
+
+ /**
+ * Overrides the default `Polymer.PropertyAccessors` to ensure class
+ * metaprogramming related to property accessors and effects has
+ * completed (calls `finalize`).
+ *
+ * It also initializes any property defaults provided via `value` in
+ * `properties` metadata.
+ *
+ * @return {void}
+ * @override
+ * @suppress {invalidCasts}
+ */
+ _initializeProperties() {
+ Polymer.telemetry.instanceCount++;
+ this.constructor.finalize();
+ const importPath = this.constructor.importPath;
+ // note: finalize template when we have access to `localName` to
+ // avoid dependence on `is` for polyfilling styling.
+ this.constructor._finalizeTemplate(/** @type {!HTMLElement} */(this).localName);
+ super._initializeProperties();
+ // set path defaults
+ this.rootPath = Polymer.rootPath;
+ this.importPath = importPath;
+ // apply property defaults...
+ let p$ = propertyDefaults(this.constructor);
+ if (!p$) {
+ return;
+ }
+ for (let p in p$) {
+ let info = p$[p];
+ // Don't set default value if there is already an own property, which
+ // happens when a `properties` property with default but no effects had
+ // a property set (e.g. bound) by its host before upgrade
+ if (!this.hasOwnProperty(p)) {
+ let value = typeof info.value == 'function' ?
+ info.value.call(this) :
+ info.value;
+ // Set via `_setProperty` if there is an accessor, to enable
+ // initializing readOnly property defaults
+ if (this._hasAccessor(p)) {
+ this._setPendingProperty(p, value, true);
+ } else {
+ this[p] = value;
+ }
+ }
+ }
+ }
+
+ /**
+ * Gather style text for a style element in the template.
+ *
+ * @param {string} cssText Text containing styling to process
+ * @param {string} baseURI Base URI to rebase CSS paths against
+ * @return {string} The processed CSS text
+ * @protected
+ */
+ static _processStyleText(cssText, baseURI) {
+ return Polymer.ResolveUrl.resolveCss(cssText, baseURI);
+ }
+
+ /**
+ * Configures an element `proto` to function with a given `template`.
+ * The element name `is` and extends `ext` must be specified for ShadyCSS
+ * style scoping.
+ *
+ * @param {string} is Tag name (or type extension name) for this element
+ * @return {void}
+ * @protected
+ */
+ static _finalizeTemplate(is) {
+ /** @const {HTMLTemplateElement} */
+ const template = this.prototype._template;
+ if (template && !template.__polymerFinalized) {
+ template.__polymerFinalized = true;
+ const importPath = this.importPath;
+ const baseURI = importPath ? Polymer.ResolveUrl.resolveUrl(importPath) : '';
+ // e.g. support `include="module-name"`, and ShadyCSS
+ processElementStyles(this, template, is, baseURI);
+ this.prototype._bindTemplate(template);
+ }
+ }
+
+ /**
+ * Provides a default implementation of the standard Custom Elements
+ * `connectedCallback`.
+ *
+ * The default implementation enables the property effects system and
+ * flushes any pending properties, and updates shimmed CSS properties
+ * when using the ShadyCSS scoping/custom properties polyfill.
+ *
+ * @suppress {missingProperties, invalidCasts} Super may or may not implement the callback
+ * @return {void}
+ */
+ connectedCallback() {
+ if (window.ShadyCSS && this._template) {
+ window.ShadyCSS.styleElement(/** @type {!HTMLElement} */(this));
+ }
+ super.connectedCallback();
+ }
+
+ /**
+ * Stamps the element template.
+ *
+ * @return {void}
+ * @override
+ */
+ ready() {
+ if (this._template) {
+ this.root = this._stampTemplate(this._template);
+ this.$ = this.root.$;
+ }
+ super.ready();
+ }
+
+ /**
+ * Implements `PropertyEffects`'s `_readyClients` call. Attaches
+ * element dom by calling `_attachDom` with the dom stamped from the
+ * element's template via `_stampTemplate`. Note that this allows
+ * client dom to be attached to the element prior to any observers
+ * running.
+ *
+ * @return {void}
+ * @override
+ */
+ _readyClients() {
+ if (this._template) {
+ this.root = this._attachDom(/** @type {StampedTemplate} */(this.root));
+ }
+ // The super._readyClients here sets the clients initialized flag.
+ // We must wait to do this until after client dom is created/attached
+ // so that this flag can be checked to prevent notifications fired
+ // during this process from being handled before clients are ready.
+ super._readyClients();
+ }
+
+
+ /**
+ * Attaches an element's stamped dom to itself. By default,
+ * this method creates a `shadowRoot` and adds the dom to it.
+ * However, this method may be overridden to allow an element
+ * to put its dom in another location.
+ *
+ * @throws {Error}
+ * @suppress {missingReturn}
+ * @param {StampedTemplate} dom to attach to the element.
+ * @return {ShadowRoot} node to which the dom has been attached.
+ */
+ _attachDom(dom) {
+ if (this.attachShadow) {
+ if (dom) {
+ if (!this.shadowRoot) {
+ this.attachShadow({mode: 'open'});
+ }
+ this.shadowRoot.appendChild(dom);
+ return this.shadowRoot;
+ }
+ return null;
+ } else {
+ throw new Error('ShadowDOM not available. ' +
+ // TODO(sorvell): move to compile-time conditional when supported
+ 'Polymer.Element can create dom as children instead of in ' +
+ 'ShadowDOM by setting `this.root = this;\` before \`ready\`.');
+ }
+ }
+
+ /**
+ * When using the ShadyCSS scoping and custom property shim, causes all
+ * shimmed styles in this element (and its subtree) to be updated
+ * based on current custom property values.
+ *
+ * The optional parameter overrides inline custom property styles with an
+ * object of properties where the keys are CSS properties, and the values
+ * are strings.
+ *
+ * Example: `this.updateStyles({'--color': 'blue'})`
+ *
+ * These properties are retained unless a value of `null` is set.
+ *
+ * Note: This function does not support updating CSS mixins.
+ * You can not dynamically change the value of an `@apply`.
+ *
+ * @param {Object=} properties Bag of custom property key/values to
+ * apply to this element.
+ * @return {void}
+ * @suppress {invalidCasts}
+ */
+ updateStyles(properties) {
+ if (window.ShadyCSS) {
+ window.ShadyCSS.styleSubtree(/** @type {!HTMLElement} */(this), properties);
+ }
+ }
+
+ /**
+ * Rewrites a given URL relative to a base URL. The base URL defaults to
+ * the original location of the document containing the `dom-module` for
+ * this element. This method will return the same URL before and after
+ * bundling.
+ *
+ * Note that this function performs no resolution for URLs that start
+ * with `/` (absolute URLs) or `#` (hash identifiers). For general purpose
+ * URL resolution, use `window.URL`.
+ *
+ * @param {string} url URL to resolve.
+ * @param {string=} base Optional base URL to resolve against, defaults
+ * to the element's `importPath`
+ * @return {string} Rewritten URL relative to base
+ */
+ resolveUrl(url, base) {
+ if (!base && this.importPath) {
+ base = Polymer.ResolveUrl.resolveUrl(this.importPath);
+ }
+ return Polymer.ResolveUrl.resolveUrl(url, base);
+ }
+
+ /**
+ * Overrides `PropertyAccessors` to add map of dynamic functions on
+ * template info, for consumption by `PropertyEffects` template binding
+ * code. This map determines which method templates should have accessors
+ * created for them.
+ *
+ * @override
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static _parseTemplateContent(template, templateInfo, nodeInfo) {
+ templateInfo.dynamicFns = templateInfo.dynamicFns || this._properties;
+ return super._parseTemplateContent(template, templateInfo, nodeInfo);
+ }
+
+ }
+
+ return PolymerElement;
+ });
+
+ /**
+ * Provides basic tracking of element definitions (registrations) and
+ * instance counts.
+ *
+ * @namespace
+ * @summary Provides basic tracking of element definitions (registrations) and
+ * instance counts.
+ */
+ Polymer.telemetry = {
+ /**
+ * Total number of Polymer element instances created.
+ * @type {number}
+ */
+ instanceCount: 0,
+ /**
+ * Array of Polymer element classes that have been finalized.
+ * @type {Array<Polymer.Element>}
+ */
+ registrations: [],
+ /**
+ * @param {!PolymerElementConstructor} prototype Element prototype to log
+ * @this {this}
+ * @private
+ */
+ _regLog: function(prototype) {
+ console.log('[' + prototype.is + ']: registered');
+ },
+ /**
+ * Registers a class prototype for telemetry purposes.
+ * @param {HTMLElement} prototype Element prototype to register
+ * @this {this}
+ * @protected
+ */
+ register: function(prototype) {
+ this.registrations.push(prototype);
+ Polymer.log && this._regLog(prototype);
+ },
+ /**
+ * Logs all elements registered with an `is` to the console.
+ * @public
+ * @this {this}
+ */
+ dumpRegistrations: function() {
+ this.registrations.forEach(this._regLog);
+ }
+ };
+
+ /**
+ * When using the ShadyCSS scoping and custom property shim, causes all
+ * shimmed `styles` (via `custom-style`) in the document (and its subtree)
+ * to be updated based on current custom property values.
+ *
+ * The optional parameter overrides inline custom property styles with an
+ * object of properties where the keys are CSS properties, and the values
+ * are strings.
+ *
+ * Example: `Polymer.updateStyles({'--color': 'blue'})`
+ *
+ * These properties are retained unless a value of `null` is set.
+ *
+ * @param {Object=} props Bag of custom property key/values to
+ * apply to the document.
+ * @return {void}
+ */
+ Polymer.updateStyles = function(props) {
+ if (window.ShadyCSS) {
+ window.ShadyCSS.styleDocument(props);
+ }
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/gesture-event-listeners.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/gesture-event-listeners.html
new file mode 100644
index 00000000000..9ad4f12c8ba
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/gesture-event-listeners.html
@@ -0,0 +1,83 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/gestures.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ /**
+ * @const {Polymer.Gestures}
+ */
+ const gestures = Polymer.Gestures;
+
+ /**
+ * Element class mixin that provides API for adding Polymer's cross-platform
+ * gesture events to nodes.
+ *
+ * The API is designed to be compatible with override points implemented
+ * in `Polymer.TemplateStamp` such that declarative event listeners in
+ * templates will support gesture events when this mixin is applied along with
+ * `Polymer.TemplateStamp`.
+ *
+ * @mixinFunction
+ * @polymer
+ * @memberof Polymer
+ * @summary Element class mixin that provides API for adding Polymer's cross-platform
+ * gesture events to nodes
+ */
+ Polymer.GestureEventListeners = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_GestureEventListeners}
+ */
+ class GestureEventListeners extends superClass {
+
+ /**
+ * Add the event listener to the node if it is a gestures event.
+ *
+ * @param {!Node} node Node to add event listener to
+ * @param {string} eventName Name of event
+ * @param {function(!Event):void} handler Listener function to add
+ * @return {void}
+ */
+ _addEventListenerToNode(node, eventName, handler) {
+ if (!gestures.addListener(node, eventName, handler)) {
+ super._addEventListenerToNode(node, eventName, handler);
+ }
+ }
+
+ /**
+ * Remove the event listener to the node if it is a gestures event.
+ *
+ * @param {!Node} node Node to remove event listener from
+ * @param {string} eventName Name of event
+ * @param {function(!Event):void} handler Listener function to remove
+ * @return {void}
+ */
+ _removeEventListenerFromNode(node, eventName, handler) {
+ if (!gestures.removeListener(node, eventName, handler)) {
+ super._removeEventListenerFromNode(node, eventName, handler);
+ }
+ }
+
+ }
+
+ return GestureEventListeners;
+
+ });
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/mutable-data.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/mutable-data.html
new file mode 100644
index 00000000000..d5b1587b6d9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/mutable-data.html
@@ -0,0 +1,205 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/mixin.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ // Common implementation for mixin & behavior
+ function mutablePropertyChange(inst, property, value, old, mutableData) {
+ let isObject;
+ if (mutableData) {
+ isObject = (typeof value === 'object' && value !== null);
+ // Pull `old` for Objects from temp cache, but treat `null` as a primitive
+ if (isObject) {
+ old = inst.__dataTemp[property];
+ }
+ }
+ // Strict equality check, but return false for NaN===NaN
+ let shouldChange = (old !== value && (old === old || value === value));
+ // Objects are stored in temporary cache (cleared at end of
+ // turn), which is used for dirty-checking
+ if (isObject && shouldChange) {
+ inst.__dataTemp[property] = value;
+ }
+ return shouldChange;
+ }
+
+ /**
+ * Element class mixin to skip strict dirty-checking for objects and arrays
+ * (always consider them to be "dirty"), for use on elements utilizing
+ * `Polymer.PropertyEffects`
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will cause Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must apply this mixin or enable the
+ * `Polymer.OptionalMutableData` mixin.
+ *
+ * In order to make the dirty check strategy configurable, see
+ * `Polymer.OptionalMutableData`.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse as opposed to using strict dirty checking with immutable
+ * patterns or Polymer's path notification API.
+ *
+ * @mixinFunction
+ * @polymer
+ * @memberof Polymer
+ * @summary Element class mixin to skip strict dirty-checking for objects
+ * and arrays
+ */
+ Polymer.MutableData = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_MutableData}
+ */
+ class MutableData extends superClass {
+ /**
+ * Overrides `Polymer.PropertyEffects` to provide option for skipping
+ * strict equality checking for Objects and Arrays.
+ *
+ * This method pulls the value to dirty check against from the `__dataTemp`
+ * cache (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param {string} property Property name
+ * @param {*} value New property value
+ * @param {*} old Previous property value
+ * @return {boolean} Whether the property should be considered a change
+ * @protected
+ */
+ _shouldPropertyChange(property, value, old) {
+ return mutablePropertyChange(this, property, value, old, true);
+ }
+
+ }
+
+ return MutableData;
+
+ });
+
+
+ /**
+ * Element class mixin to add the optional ability to skip strict
+ * dirty-checking for objects and arrays (always consider them to be
+ * "dirty") by setting a `mutable-data` attribute on an element instance.
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will allow Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must enable this mixin or apply the
+ * `Polymer.MutableData` mixin.
+ *
+ * While this mixin adds the ability to forgo Object/Array dirty checking,
+ * the `mutableData` flag defaults to false and must be set on the instance.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse by relying on `mutableData: true` as opposed to using
+ * strict dirty checking with immutable patterns or Polymer's path notification
+ * API.
+ *
+ * @mixinFunction
+ * @polymer
+ * @memberof Polymer
+ * @summary Element class mixin to optionally skip strict dirty-checking
+ * for objects and arrays
+ */
+ Polymer.OptionalMutableData = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @mixinClass
+ * @polymer
+ * @implements {Polymer_OptionalMutableData}
+ */
+ class OptionalMutableData extends superClass {
+
+ static get properties() {
+ return {
+ /**
+ * Instance-level flag for configuring the dirty-checking strategy
+ * for this element. When true, Objects and Arrays will skip dirty
+ * checking, otherwise strict equality checking will be used.
+ */
+ mutableData: Boolean
+ };
+ }
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to provide option for skipping
+ * strict equality checking for Objects and Arrays.
+ *
+ * When `this.mutableData` is true on this instance, this method
+ * pulls the value to dirty check against from the `__dataTemp` cache
+ * (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param {string} property Property name
+ * @param {*} value New property value
+ * @param {*} old Previous property value
+ * @return {boolean} Whether the property should be considered a change
+ * @protected
+ */
+ _shouldPropertyChange(property, value, old) {
+ return mutablePropertyChange(this, property, value, old, this.mutableData);
+ }
+ }
+
+ return OptionalMutableData;
+
+ });
+
+ // Export for use by legacy behavior
+ Polymer.MutableData._mutablePropertyChange = mutablePropertyChange;
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-changed.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-changed.html
new file mode 100644
index 00000000000..000c1374afc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-changed.html
@@ -0,0 +1,534 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/async.html">
+
+<script>
+ (function () {
+
+ 'use strict';
+
+ /** @const {!AsyncInterface} */
+ const microtask = Polymer.Async.microTask;
+
+ /**
+ * Element class mixin that provides basic meta-programming for creating one
+ * or more property accessors (getter/setter pair) that enqueue an async
+ * (batched) `_propertiesChanged` callback.
+ *
+ * For basic usage of this mixin, call `MyClass.createProperties(props)`
+ * once at class definition time to create property accessors for properties
+ * named in props, implement `_propertiesChanged` to react as desired to
+ * property changes, and implement `static get observedAttributes()` and
+ * include lowercase versions of any property names that should be set from
+ * attributes. Last, call `this._enableProperties()` in the element's
+ * `connectedCallback` to enable the accessors.
+ *
+ * @mixinFunction
+ * @polymer
+ * @memberof Polymer
+ * @summary Element class mixin for reacting to property changes from
+ * generated property accessors.
+ */
+ Polymer.PropertiesChanged = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @extends {superClass}
+ * @implements {Polymer_PropertiesChanged}
+ * @unrestricted
+ */
+ class PropertiesChanged extends superClass {
+
+ /**
+ * Creates property accessors for the given property names.
+ * @param {!Object} props Object whose keys are names of accessors.
+ * @return {void}
+ * @protected
+ */
+ static createProperties(props) {
+ const proto = this.prototype;
+ for (let prop in props) {
+ // don't stomp an existing accessor
+ if (!(prop in proto)) {
+ proto._createPropertyAccessor(prop);
+ }
+ }
+ }
+
+ /**
+ * Returns an attribute name that corresponds to the given property.
+ * The attribute name is the lowercased property name. Override to
+ * customize this mapping.
+ * @param {string} property Property to convert
+ * @return {string} Attribute name corresponding to the given property.
+ *
+ * @protected
+ */
+ static attributeNameForProperty(property) {
+ return property.toLowerCase();
+ }
+
+ /**
+ * Override point to provide a type to which to deserialize a value to
+ * a given property.
+ * @param {string} name Name of property
+ *
+ * @protected
+ */
+ static typeForProperty(name) { } //eslint-disable-line no-unused-vars
+
+ /**
+ * Creates a setter/getter pair for the named property with its own
+ * local storage. The getter returns the value in the local storage,
+ * and the setter calls `_setProperty`, which updates the local storage
+ * for the property and enqueues a `_propertiesChanged` callback.
+ *
+ * This method may be called on a prototype or an instance. Calling
+ * this method may overwrite a property value that already exists on
+ * the prototype/instance by creating the accessor.
+ *
+ * @param {string} property Name of the property
+ * @param {boolean=} readOnly When true, no setter is created; the
+ * protected `_setProperty` function must be used to set the property
+ * @return {void}
+ * @protected
+ */
+ _createPropertyAccessor(property, readOnly) {
+ this._addPropertyToAttributeMap(property);
+ if (!this.hasOwnProperty('__dataHasAccessor')) {
+ this.__dataHasAccessor = Object.assign({}, this.__dataHasAccessor);
+ }
+ if (!this.__dataHasAccessor[property]) {
+ this.__dataHasAccessor[property] = true;
+ this._definePropertyAccessor(property, readOnly);
+ }
+ }
+
+ /**
+ * Adds the given `property` to a map matching attribute names
+ * to property names, using `attributeNameForProperty`. This map is
+ * used when deserializing attribute values to properties.
+ *
+ * @param {string} property Name of the property
+ */
+ _addPropertyToAttributeMap(property) {
+ if (!this.hasOwnProperty('__dataAttributes')) {
+ this.__dataAttributes = Object.assign({}, this.__dataAttributes);
+ }
+ if (!this.__dataAttributes[property]) {
+ const attr = this.constructor.attributeNameForProperty(property);
+ this.__dataAttributes[attr] = property;
+ }
+ }
+
+ /**
+ * Defines a property accessor for the given property.
+ * @param {string} property Name of the property
+ * @param {boolean=} readOnly When true, no setter is created
+ * @return {void}
+ */
+ _definePropertyAccessor(property, readOnly) {
+ Object.defineProperty(this, property, {
+ /* eslint-disable valid-jsdoc */
+ /** @this {PropertiesChanged} */
+ get() {
+ return this._getProperty(property);
+ },
+ /** @this {PropertiesChanged} */
+ set: readOnly ? function () {} : function (value) {
+ this._setProperty(property, value);
+ }
+ /* eslint-enable */
+ });
+ }
+
+ constructor() {
+ super();
+ this.__dataEnabled = false;
+ this.__dataReady = false;
+ this.__dataInvalid = false;
+ this.__data = {};
+ this.__dataPending = null;
+ this.__dataOld = null;
+ this.__dataInstanceProps = null;
+ this.__serializing = false;
+ this._initializeProperties();
+ }
+
+ /**
+ * Lifecycle callback called when properties are enabled via
+ * `_enableProperties`.
+ *
+ * Users may override this function to implement behavior that is
+ * dependent on the element having its property data initialized, e.g.
+ * from defaults (initialized from `constructor`, `_initializeProperties`),
+ * `attributeChangedCallback`, or values propagated from host e.g. via
+ * bindings. `super.ready()` must be called to ensure the data system
+ * becomes enabled.
+ *
+ * @return {void}
+ * @public
+ */
+ ready() {
+ this.__dataReady = true;
+ this._flushProperties();
+ }
+
+ /**
+ * Initializes the local storage for property accessors.
+ *
+ * Provided as an override point for performing any setup work prior
+ * to initializing the property accessor system.
+ *
+ * @return {void}
+ * @protected
+ */
+ _initializeProperties() {
+ // Capture instance properties; these will be set into accessors
+ // during first flush. Don't set them here, since we want
+ // these to overwrite defaults/constructor assignments
+ for (let p in this.__dataHasAccessor) {
+ if (this.hasOwnProperty(p)) {
+ this.__dataInstanceProps = this.__dataInstanceProps || {};
+ this.__dataInstanceProps[p] = this[p];
+ delete this[p];
+ }
+ }
+ }
+
+ /**
+ * Called at ready time with bag of instance properties that overwrote
+ * accessors when the element upgraded.
+ *
+ * The default implementation sets these properties back into the
+ * setter at ready time. This method is provided as an override
+ * point for customizing or providing more efficient initialization.
+ *
+ * @param {Object} props Bag of property values that were overwritten
+ * when creating property accessors.
+ * @return {void}
+ * @protected
+ */
+ _initializeInstanceProperties(props) {
+ Object.assign(this, props);
+ }
+
+ /**
+ * Updates the local storage for a property (via `_setPendingProperty`)
+ * and enqueues a `_proeprtiesChanged` callback.
+ *
+ * @param {string} property Name of the property
+ * @param {*} value Value to set
+ * @return {void}
+ * @protected
+ */
+ _setProperty(property, value) {
+ if (this._setPendingProperty(property, value)) {
+ this._invalidateProperties();
+ }
+ }
+
+ /**
+ * Returns the value for the given property.
+ * @param {string} property Name of property
+ * @return {*} Value for the given property
+ * @protected
+ */
+ _getProperty(property) {
+ return this.__data[property];
+ }
+
+ /* eslint-disable no-unused-vars */
+ /**
+ * Updates the local storage for a property, records the previous value,
+ * and adds it to the set of "pending changes" that will be passed to the
+ * `_propertiesChanged` callback. This method does not enqueue the
+ * `_propertiesChanged` callback.
+ *
+ * @param {string} property Name of the property
+ * @param {*} value Value to set
+ * @param {boolean=} ext Not used here; affordance for closure
+ * @return {boolean} Returns true if the property changed
+ * @protected
+ */
+ _setPendingProperty(property, value, ext) {
+ let old = this.__data[property];
+ let changed = this._shouldPropertyChange(property, value, old);
+ if (changed) {
+ if (!this.__dataPending) {
+ this.__dataPending = {};
+ this.__dataOld = {};
+ }
+ // Ensure old is captured from the last turn
+ if (this.__dataOld && !(property in this.__dataOld)) {
+ this.__dataOld[property] = old;
+ }
+ this.__data[property] = value;
+ this.__dataPending[property] = value;
+ }
+ return changed;
+ }
+ /* eslint-enable */
+
+ /**
+ * Marks the properties as invalid, and enqueues an async
+ * `_propertiesChanged` callback.
+ *
+ * @return {void}
+ * @protected
+ */
+ _invalidateProperties() {
+ if (!this.__dataInvalid && this.__dataReady) {
+ this.__dataInvalid = true;
+ microtask.run(() => {
+ if (this.__dataInvalid) {
+ this.__dataInvalid = false;
+ this._flushProperties();
+ }
+ });
+ }
+ }
+
+ /**
+ * Call to enable property accessor processing. Before this method is
+ * called accessor values will be set but side effects are
+ * queued. When called, any pending side effects occur immediately.
+ * For elements, generally `connectedCallback` is a normal spot to do so.
+ * It is safe to call this method multiple times as it only turns on
+ * property accessors once.
+ *
+ * @return {void}
+ * @protected
+ */
+ _enableProperties() {
+ if (!this.__dataEnabled) {
+ this.__dataEnabled = true;
+ if (this.__dataInstanceProps) {
+ this._initializeInstanceProperties(this.__dataInstanceProps);
+ this.__dataInstanceProps = null;
+ }
+ this.ready();
+ }
+ }
+
+ /**
+ * Calls the `_propertiesChanged` callback with the current set of
+ * pending changes (and old values recorded when pending changes were
+ * set), and resets the pending set of changes. Generally, this method
+ * should not be called in user code.
+ *
+ * @return {void}
+ * @protected
+ */
+ _flushProperties() {
+ const props = this.__data;
+ const changedProps = this.__dataPending;
+ const old = this.__dataOld;
+ if (this._shouldPropertiesChange(props, changedProps, old)) {
+ this.__dataPending = null;
+ this.__dataOld = null;
+ this._propertiesChanged(props, changedProps, old);
+ }
+ }
+
+ /**
+ * Called in `_flushProperties` to determine if `_propertiesChanged`
+ * should be called. The default implementation returns true if
+ * properties are pending. Override to customize when
+ * `_propertiesChanged` is called.
+ * @param {!Object} currentProps Bag of all current accessor values
+ * @param {!Object} changedProps Bag of properties changed since the last
+ * call to `_propertiesChanged`
+ * @param {!Object} oldProps Bag of previous values for each property
+ * in `changedProps`
+ * @return {boolean} true if changedProps is truthy
+ */
+ _shouldPropertiesChange(currentProps, changedProps, oldProps) { // eslint-disable-line no-unused-vars
+ return Boolean(changedProps);
+ }
+
+ /**
+ * Callback called when any properties with accessors created via
+ * `_createPropertyAccessor` have been set.
+ *
+ * @param {!Object} currentProps Bag of all current accessor values
+ * @param {!Object} changedProps Bag of properties changed since the last
+ * call to `_propertiesChanged`
+ * @param {!Object} oldProps Bag of previous values for each property
+ * in `changedProps`
+ * @return {void}
+ * @protected
+ */
+ _propertiesChanged(currentProps, changedProps, oldProps) { // eslint-disable-line no-unused-vars
+ }
+
+ /**
+ * Method called to determine whether a property value should be
+ * considered as a change and cause the `_propertiesChanged` callback
+ * to be enqueued.
+ *
+ * The default implementation returns `true` if a strict equality
+ * check fails. The method always returns false for `NaN`.
+ *
+ * Override this method to e.g. provide stricter checking for
+ * Objects/Arrays when using immutable patterns.
+ *
+ * @param {string} property Property name
+ * @param {*} value New property value
+ * @param {*} old Previous property value
+ * @return {boolean} Whether the property should be considered a change
+ * and enqueue a `_proeprtiesChanged` callback
+ * @protected
+ */
+ _shouldPropertyChange(property, value, old) {
+ return (
+ // Strict equality check
+ (old !== value &&
+ // This ensures (old==NaN, value==NaN) always returns false
+ (old === old || value === value))
+ );
+ }
+
+ /**
+ * Implements native Custom Elements `attributeChangedCallback` to
+ * set an attribute value to a property via `_attributeToProperty`.
+ *
+ * @param {string} name Name of attribute that changed
+ * @param {?string} old Old attribute value
+ * @param {?string} value New attribute value
+ * @return {void}
+ * @suppress {missingProperties} Super may or may not implement the callback
+ */
+ attributeChangedCallback(name, old, value) {
+ if (old !== value) {
+ this._attributeToProperty(name, value);
+ }
+ if (super.attributeChangedCallback) {
+ super.attributeChangedCallback(name, old, value);
+ }
+ }
+
+ /**
+ * Deserializes an attribute to its associated property.
+ *
+ * This method calls the `_deserializeValue` method to convert the string to
+ * a typed value.
+ *
+ * @param {string} attribute Name of attribute to deserialize.
+ * @param {?string} value of the attribute.
+ * @param {*=} type type to deserialize to, defaults to the value
+ * returned from `typeForProperty`
+ * @return {void}
+ */
+ _attributeToProperty(attribute, value, type) {
+ if (!this.__serializing) {
+ const map = this.__dataAttributes;
+ const property = map && map[attribute] || attribute;
+ this[property] = this._deserializeValue(value, type ||
+ this.constructor.typeForProperty(property));
+ }
+ }
+
+ /**
+ * Serializes a property to its associated attribute.
+ *
+ * @suppress {invalidCasts} Closure can't figure out `this` is an element.
+ *
+ * @param {string} property Property name to reflect.
+ * @param {string=} attribute Attribute name to reflect to.
+ * @param {*=} value Property value to refect.
+ * @return {void}
+ */
+ _propertyToAttribute(property, attribute, value) {
+ this.__serializing = true;
+ value = (arguments.length < 3) ? this[property] : value;
+ this._valueToNodeAttribute(/** @type {!HTMLElement} */(this), value,
+ attribute || this.constructor.attributeNameForProperty(property));
+ this.__serializing = false;
+ }
+
+ /**
+ * Sets a typed value to an HTML attribute on a node.
+ *
+ * This method calls the `_serializeValue` method to convert the typed
+ * value to a string. If the `_serializeValue` method returns `undefined`,
+ * the attribute will be removed (this is the default for boolean
+ * type `false`).
+ *
+ * @param {Element} node Element to set attribute to.
+ * @param {*} value Value to serialize.
+ * @param {string} attribute Attribute name to serialize to.
+ * @return {void}
+ */
+ _valueToNodeAttribute(node, value, attribute) {
+ const str = this._serializeValue(value);
+ if (str === undefined) {
+ node.removeAttribute(attribute);
+ } else {
+ node.setAttribute(attribute, str);
+ }
+ }
+
+ /**
+ * Converts a typed JavaScript value to a string.
+ *
+ * This method is called when setting JS property values to
+ * HTML attributes. Users may override this method to provide
+ * serialization for custom types.
+ *
+ * @param {*} value Property value to serialize.
+ * @return {string | undefined} String serialized from the provided
+ * property value.
+ */
+ _serializeValue(value) {
+ switch (typeof value) {
+ case 'boolean':
+ return value ? '' : undefined;
+ default:
+ return value != null ? value.toString() : undefined;
+ }
+ }
+
+ /**
+ * Converts a string to a typed JavaScript value.
+ *
+ * This method is called when reading HTML attribute values to
+ * JS properties. Users may override this method to provide
+ * deserialization for custom `type`s. Types for `Boolean`, `String`,
+ * and `Number` convert attributes to the expected types.
+ *
+ * @param {?string} value Value to deserialize.
+ * @param {*=} type Type to deserialize the string to.
+ * @return {*} Typed value deserialized from the provided string.
+ */
+ _deserializeValue(value, type) {
+ switch (type) {
+ case Boolean:
+ return (value !== null);
+ case Number:
+ return Number(value);
+ default:
+ return value;
+ }
+ }
+
+ }
+
+ return PropertiesChanged;
+ });
+
+
+ })();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-mixin.html
new file mode 100644
index 00000000000..782311bb8eb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/properties-mixin.html
@@ -0,0 +1,230 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../mixins/properties-changed.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * Creates a copy of `props` with each property normalized such that
+ * upgraded it is an object with at least a type property { type: Type}.
+ *
+ * @param {Object} props Properties to normalize
+ * @return {Object} Copy of input `props` with normalized properties that
+ * are in the form {type: Type}
+ * @private
+ */
+ function normalizeProperties(props) {
+ const output = {};
+ for (let p in props) {
+ const o = props[p];
+ output[p] = (typeof o === 'function') ? {type: o} : o;
+ }
+ return output;
+ }
+
+ /**
+ * Mixin that provides a minimal starting point to using the PropertiesChanged
+ * mixin by providing a mechanism to declare properties in a static
+ * getter (e.g. static get properties() { return { foo: String } }). Changes
+ * are reported via the `_propertiesChanged` method.
+ *
+ * This mixin provides no specific support for rendering. Users are expected
+ * to create a ShadowRoot and put content into it and update it in whatever
+ * way makes sense. This can be done in reaction to properties changing by
+ * implementing `_propertiesChanged`.
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.PropertiesChanged
+ * @memberof Polymer
+ * @summary Mixin that provides a minimal starting point for using
+ * the PropertiesChanged mixin by providing a declarative `properties` object.
+ */
+ Polymer.PropertiesMixin = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @constructor
+ * @extends {superClass}
+ * @implements {Polymer_PropertiesChanged}
+ */
+ const base = Polymer.PropertiesChanged(superClass);
+
+ /**
+ * Returns the super class constructor for the given class, if it is an
+ * instance of the PropertiesMixin.
+ *
+ * @param {!PropertiesMixinConstructor} constructor PropertiesMixin constructor
+ * @return {PropertiesMixinConstructor} Super class constructor
+ */
+ function superPropertiesClass(constructor) {
+ const superCtor = Object.getPrototypeOf(constructor);
+
+ // Note, the `PropertiesMixin` class below only refers to the class
+ // generated by this call to the mixin; the instanceof test only works
+ // because the mixin is deduped and guaranteed only to apply once, hence
+ // all constructors in a proto chain will see the same `PropertiesMixin`
+ return (superCtor.prototype instanceof PropertiesMixin) ?
+ /** @type {PropertiesMixinConstructor} */ (superCtor) : null;
+ }
+
+ /**
+ * Returns a memoized version of the `properties` object for the
+ * given class. Properties not in object format are converted to at
+ * least {type}.
+ *
+ * @param {PropertiesMixinConstructor} constructor PropertiesMixin constructor
+ * @return {Object} Memoized properties object
+ */
+ function ownProperties(constructor) {
+ if (!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties', constructor))) {
+ let props = null;
+
+ if (constructor.hasOwnProperty(JSCompiler_renameProperty('properties', constructor)) && constructor.properties) {
+ props = normalizeProperties(constructor.properties);
+ }
+
+ constructor.__ownProperties = props;
+ }
+ return constructor.__ownProperties;
+ }
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @extends {base}
+ * @implements {Polymer_PropertiesMixin}
+ * @unrestricted
+ */
+ class PropertiesMixin extends base {
+
+ /**
+ * Implements standard custom elements getter to observes the attributes
+ * listed in `properties`.
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static get observedAttributes() {
+ const props = this._properties;
+ return props ? Object.keys(props).map(p => this.attributeNameForProperty(p)) : [];
+ }
+
+ /**
+ * Finalizes an element definition, including ensuring any super classes
+ * are also finalized. This includes ensuring property
+ * accessors exist on the element prototype. This method calls
+ * `_finalizeClass` to finalize each constructor in the prototype chain.
+ * @return {void}
+ */
+ static finalize() {
+ if (!this.hasOwnProperty(JSCompiler_renameProperty('__finalized', this))) {
+ const superCtor = superPropertiesClass(/** @type {PropertiesMixinConstructor} */(this));
+ if (superCtor) {
+ superCtor.finalize();
+ }
+ this.__finalized = true;
+ this._finalizeClass();
+ }
+ }
+
+ /**
+ * Finalize an element class. This includes ensuring property
+ * accessors exist on the element prototype. This method is called by
+ * `finalize` and finalizes the class constructor.
+ *
+ * @protected
+ */
+ static _finalizeClass() {
+ const props = ownProperties(/** @type {PropertiesMixinConstructor} */(this));
+ if (props) {
+ this.createProperties(props);
+ }
+ }
+
+ /**
+ * Returns a memoized version of all properties, including those inherited
+ * from super classes. Properties not in object format are converted to
+ * at least {type}.
+ *
+ * @return {Object} Object containing properties for this class
+ * @protected
+ */
+ static get _properties() {
+ if (!this.hasOwnProperty(
+ JSCompiler_renameProperty('__properties', this))) {
+ const superCtor = superPropertiesClass(/** @type {PropertiesMixinConstructor} */(this));
+ this.__properties = Object.assign({},
+ superCtor && superCtor._properties,
+ ownProperties(/** @type {PropertiesMixinConstructor} */(this)));
+ }
+ return this.__properties;
+ }
+
+ /**
+ * Overrides `PropertiesChanged` method to return type specified in the
+ * static `properties` object for the given property.
+ * @param {string} name Name of property
+ * @return {*} Type to which to deserialize attribute
+ *
+ * @protected
+ */
+ static typeForProperty(name) {
+ const info = this._properties[name];
+ return info && info.type;
+ }
+
+ /**
+ * Overrides `PropertiesChanged` method and adds a call to
+ * `finalize` which lazily configures the element's property accessors.
+ * @override
+ * @return {void}
+ */
+ _initializeProperties() {
+ this.constructor.finalize();
+ super._initializeProperties();
+ }
+
+ /**
+ * Called when the element is added to a document.
+ * Calls `_enableProperties` to turn on property system from
+ * `PropertiesChanged`.
+ * @suppress {missingProperties} Super may or may not implement the callback
+ * @return {void}
+ */
+ connectedCallback() {
+ if (super.connectedCallback) {
+ super.connectedCallback();
+ }
+ this._enableProperties();
+ }
+
+ /**
+ * Called when the element is removed from a document
+ * @suppress {missingProperties} Super may or may not implement the callback
+ * @return {void}
+ */
+ disconnectedCallback() {
+ if (super.disconnectedCallback) {
+ super.disconnectedCallback();
+ }
+ }
+
+ }
+
+ return PropertiesMixin;
+
+ });
+
+})();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-accessors.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-accessors.html
new file mode 100644
index 00000000000..f26f467b12f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-accessors.html
@@ -0,0 +1,322 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/case-map.html">
+<link rel="import" href="properties-changed.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ let caseMap = Polymer.CaseMap;
+
+ // Save map of native properties; this forms a blacklist or properties
+ // that won't have their values "saved" by `saveAccessorValue`, since
+ // reading from an HTMLElement accessor from the context of a prototype throws
+ const nativeProperties = {};
+ let proto = HTMLElement.prototype;
+ while (proto) {
+ let props = Object.getOwnPropertyNames(proto);
+ for (let i=0; i<props.length; i++) {
+ nativeProperties[props[i]] = true;
+ }
+ proto = Object.getPrototypeOf(proto);
+ }
+
+ /**
+ * Used to save the value of a property that will be overridden with
+ * an accessor. If the `model` is a prototype, the values will be saved
+ * in `__dataProto`, and it's up to the user (or downstream mixin) to
+ * decide how/when to set these values back into the accessors.
+ * If `model` is already an instance (it has a `__data` property), then
+ * the value will be set as a pending property, meaning the user should
+ * call `_invalidateProperties` or `_flushProperties` to take effect
+ *
+ * @param {Object} model Prototype or instance
+ * @param {string} property Name of property
+ * @return {void}
+ * @private
+ */
+ function saveAccessorValue(model, property) {
+ // Don't read/store value for any native properties since they could throw
+ if (!nativeProperties[property]) {
+ let value = model[property];
+ if (value !== undefined) {
+ if (model.__data) {
+ // Adding accessor to instance; update the property
+ // It is the user's responsibility to call _flushProperties
+ model._setPendingProperty(property, value);
+ } else {
+ // Adding accessor to proto; save proto's value for instance-time use
+ if (!model.__dataProto) {
+ model.__dataProto = {};
+ } else if (!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto', model))) {
+ model.__dataProto = Object.create(model.__dataProto);
+ }
+ model.__dataProto[property] = value;
+ }
+ }
+ }
+ }
+
+ /**
+ * Element class mixin that provides basic meta-programming for creating one
+ * or more property accessors (getter/setter pair) that enqueue an async
+ * (batched) `_propertiesChanged` callback.
+ *
+ * For basic usage of this mixin:
+ *
+ * - Declare attributes to observe via the standard `static get observedAttributes()`. Use
+ * `dash-case` attribute names to represent `camelCase` property names.
+ * - Implement the `_propertiesChanged` callback on the class.
+ * - Call `MyClass.createPropertiesForAttributes()` **once** on the class to generate
+ * property accessors for each observed attribute. This must be called before the first
+ * instance is created, for example, by calling it before calling `customElements.define`.
+ * It can also be called lazily from the element's `constructor`, as long as it's guarded so
+ * that the call is only made once, when the first instance is created.
+ * - Call `this._enableProperties()` in the element's `connectedCallback` to enable
+ * the accessors.
+ *
+ * Any `observedAttributes` will automatically be
+ * deserialized via `attributeChangedCallback` and set to the associated
+ * property using `dash-case`-to-`camelCase` convention.
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.PropertiesChanged
+ * @memberof Polymer
+ * @summary Element class mixin for reacting to property changes from
+ * generated property accessors.
+ */
+ Polymer.PropertyAccessors = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @constructor
+ * @extends {superClass}
+ * @implements {Polymer_PropertiesChanged}
+ * @unrestricted
+ */
+ const base = Polymer.PropertiesChanged(superClass);
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_PropertyAccessors}
+ * @extends {base}
+ * @unrestricted
+ */
+ class PropertyAccessors extends base {
+
+ /**
+ * Generates property accessors for all attributes in the standard
+ * static `observedAttributes` array.
+ *
+ * Attribute names are mapped to property names using the `dash-case` to
+ * `camelCase` convention
+ *
+ * @return {void}
+ */
+ static createPropertiesForAttributes() {
+ let a$ = this.observedAttributes;
+ for (let i=0; i < a$.length; i++) {
+ this.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a$[i]));
+ }
+ }
+
+ /**
+ * Returns an attribute name that corresponds to the given property.
+ * By default, converts camel to dash case, e.g. `fooBar` to `foo-bar`.
+ * @param {string} property Property to convert
+ * @return {string} Attribute name corresponding to the given property.
+ *
+ * @protected
+ */
+ static attributeNameForProperty(property) {
+ return caseMap.camelToDashCase(property);
+ }
+
+ /**
+ * Overrides PropertiesChanged implementation to initialize values for
+ * accessors created for values that already existed on the element
+ * prototype.
+ *
+ * @return {void}
+ * @protected
+ */
+ _initializeProperties() {
+ if (this.__dataProto) {
+ this._initializeProtoProperties(this.__dataProto);
+ this.__dataProto = null;
+ }
+ super._initializeProperties();
+ }
+
+ /**
+ * Called at instance time with bag of properties that were overwritten
+ * by accessors on the prototype when accessors were created.
+ *
+ * The default implementation sets these properties back into the
+ * setter at instance time. This method is provided as an override
+ * point for customizing or providing more efficient initialization.
+ *
+ * @param {Object} props Bag of property values that were overwritten
+ * when creating property accessors.
+ * @return {void}
+ * @protected
+ */
+ _initializeProtoProperties(props) {
+ for (let p in props) {
+ this._setProperty(p, props[p]);
+ }
+ }
+
+ /**
+ * Ensures the element has the given attribute. If it does not,
+ * assigns the given value to the attribute.
+ *
+ * @suppress {invalidCasts} Closure can't figure out `this` is infact an element
+ *
+ * @param {string} attribute Name of attribute to ensure is set.
+ * @param {string} value of the attribute.
+ * @return {void}
+ */
+ _ensureAttribute(attribute, value) {
+ const el = /** @type {!HTMLElement} */(this);
+ if (!el.hasAttribute(attribute)) {
+ this._valueToNodeAttribute(el, value, attribute);
+ }
+ }
+
+ /**
+ * Overrides PropertiesChanged implemention to serialize objects as JSON.
+ *
+ * @param {*} value Property value to serialize.
+ * @return {string | undefined} String serialized from the provided property value.
+ */
+ _serializeValue(value) {
+ /* eslint-disable no-fallthrough */
+ switch (typeof value) {
+ case 'object':
+ if (value instanceof Date) {
+ return value.toString();
+ } else if (value) {
+ try {
+ return JSON.stringify(value);
+ } catch(x) {
+ return '';
+ }
+ }
+
+ default:
+ return super._serializeValue(value);
+ }
+ }
+
+ /**
+ * Converts a string to a typed JavaScript value.
+ *
+ * This method is called by Polymer when reading HTML attribute values to
+ * JS properties. Users may override this method on Polymer element
+ * prototypes to provide deserialization for custom `type`s. Note,
+ * the `type` argument is the value of the `type` field provided in the
+ * `properties` configuration object for a given property, and is
+ * by convention the constructor for the type to deserialize.
+ *
+ *
+ * @param {?string} value Attribute value to deserialize.
+ * @param {*=} type Type to deserialize the string to.
+ * @return {*} Typed value deserialized from the provided string.
+ */
+ _deserializeValue(value, type) {
+ /**
+ * @type {*}
+ */
+ let outValue;
+ switch (type) {
+ case Object:
+ try {
+ outValue = JSON.parse(/** @type {string} */(value));
+ } catch(x) {
+ // allow non-JSON literals like Strings and Numbers
+ outValue = value;
+ }
+ break;
+ case Array:
+ try {
+ outValue = JSON.parse(/** @type {string} */(value));
+ } catch(x) {
+ outValue = null;
+ console.warn(`Polymer::Attributes: couldn't decode Array as JSON: ${value}`);
+ }
+ break;
+ case Date:
+ outValue = isNaN(value) ? String(value) : Number(value);
+ outValue = new Date(outValue);
+ break;
+ default:
+ outValue = super._deserializeValue(value, type);
+ break;
+ }
+ return outValue;
+ }
+ /* eslint-enable no-fallthrough */
+
+ /**
+ * Overrides PropertiesChanged implementation to save existing prototype
+ * property value so that it can be reset.
+ * @param {string} property Name of the property
+ * @param {boolean=} readOnly When true, no setter is created
+ *
+ * When calling on a prototype, any overwritten values are saved in
+ * `__dataProto`, and it is up to the subclasser to decide how/when
+ * to set those properties back into the accessor. When calling on an
+ * instance, the overwritten value is set via `_setPendingProperty`,
+ * and the user should call `_invalidateProperties` or `_flushProperties`
+ * for the values to take effect.
+ * @protected
+ * @return {void}
+ */
+ _definePropertyAccessor(property, readOnly) {
+ saveAccessorValue(this, property);
+ super._definePropertyAccessor(property, readOnly);
+ }
+
+ /**
+ * Returns true if this library created an accessor for the given property.
+ *
+ * @param {string} property Property name
+ * @return {boolean} True if an accessor was created
+ */
+ _hasAccessor(property) {
+ return this.__dataHasAccessor && this.__dataHasAccessor[property];
+ }
+
+ /**
+ * Returns true if the specified property has a pending change.
+ *
+ * @param {string} prop Property name
+ * @return {boolean} True if property has a pending change
+ * @protected
+ */
+ _isPropertyPending(prop) {
+ return Boolean(this.__dataPending && (prop in this.__dataPending));
+ }
+
+ }
+
+ return PropertyAccessors;
+
+ });
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-effects.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-effects.html
new file mode 100644
index 00000000000..0feb7c9e410
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/property-effects.html
@@ -0,0 +1,2808 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/mixin.html">
+<link rel="import" href="../utils/path.html">
+<!-- for notify, reflect -->
+<link rel="import" href="../utils/case-map.html">
+<link rel="import" href="property-accessors.html">
+<!-- for annotated effects -->
+<link rel="import" href="template-stamp.html">
+
+
+<script>
+(function() {
+
+ 'use strict';
+
+ /** @const {Object} */
+ const CaseMap = Polymer.CaseMap;
+
+ // Monotonically increasing unique ID used for de-duping effects triggered
+ // from multiple properties in the same turn
+ let dedupeId = 0;
+
+ /**
+ * Property effect types; effects are stored on the prototype using these keys
+ * @enum {string}
+ */
+ const TYPES = {
+ COMPUTE: '__computeEffects',
+ REFLECT: '__reflectEffects',
+ NOTIFY: '__notifyEffects',
+ PROPAGATE: '__propagateEffects',
+ OBSERVE: '__observeEffects',
+ READ_ONLY: '__readOnly'
+ };
+
+ /** @const {string} */
+ const capitalAttributeRegex = /[A-Z]/;
+
+ /**
+ * @typedef {{
+ * name: (string | undefined),
+ * structured: (boolean | undefined),
+ * wildcard: (boolean | undefined)
+ * }}
+ */
+ let DataTrigger; //eslint-disable-line no-unused-vars
+
+ /**
+ * @typedef {{
+ * info: ?,
+ * trigger: (!DataTrigger | undefined),
+ * fn: (!Function | undefined)
+ * }}
+ */
+ let DataEffect; //eslint-disable-line no-unused-vars
+
+ let PropertyEffectsType; //eslint-disable-line no-unused-vars
+
+ /**
+ * Ensures that the model has an own-property map of effects for the given type.
+ * The model may be a prototype or an instance.
+ *
+ * Property effects are stored as arrays of effects by property in a map,
+ * by named type on the model. e.g.
+ *
+ * __computeEffects: {
+ * foo: [ ... ],
+ * bar: [ ... ]
+ * }
+ *
+ * If the model does not yet have an effect map for the type, one is created
+ * and returned. If it does, but it is not an own property (i.e. the
+ * prototype had effects), the the map is deeply cloned and the copy is
+ * set on the model and returned, ready for new effects to be added.
+ *
+ * @param {Object} model Prototype or instance
+ * @param {string} type Property effect type
+ * @return {Object} The own-property map of effects for the given type
+ * @private
+ */
+ function ensureOwnEffectMap(model, type) {
+ let effects = model[type];
+ if (!effects) {
+ effects = model[type] = {};
+ } else if (!model.hasOwnProperty(type)) {
+ effects = model[type] = Object.create(model[type]);
+ for (let p in effects) {
+ let protoFx = effects[p];
+ let instFx = effects[p] = Array(protoFx.length);
+ for (let i=0; i<protoFx.length; i++) {
+ instFx[i] = protoFx[i];
+ }
+ }
+ }
+ return effects;
+ }
+
+ // -- effects ----------------------------------------------
+
+ /**
+ * Runs all effects of a given type for the given set of property changes
+ * on an instance.
+ *
+ * @param {!PropertyEffectsType} inst The instance with effects to run
+ * @param {Object} effects Object map of property-to-Array of effects
+ * @param {Object} props Bag of current property changes
+ * @param {Object=} oldProps Bag of previous values for changed properties
+ * @param {boolean=} hasPaths True with `props` contains one or more paths
+ * @param {*=} extraArgs Additional metadata to pass to effect function
+ * @return {boolean} True if an effect ran for this property
+ * @private
+ */
+ function runEffects(inst, effects, props, oldProps, hasPaths, extraArgs) {
+ if (effects) {
+ let ran = false;
+ let id = dedupeId++;
+ for (let prop in props) {
+ if (runEffectsForProperty(inst, effects, id, prop, props, oldProps, hasPaths, extraArgs)) {
+ ran = true;
+ }
+ }
+ return ran;
+ }
+ return false;
+ }
+
+ /**
+ * Runs a list of effects for a given property.
+ *
+ * @param {!PropertyEffectsType} inst The instance with effects to run
+ * @param {Object} effects Object map of property-to-Array of effects
+ * @param {number} dedupeId Counter used for de-duping effects
+ * @param {string} prop Name of changed property
+ * @param {*} props Changed properties
+ * @param {*} oldProps Old properties
+ * @param {boolean=} hasPaths True with `props` contains one or more paths
+ * @param {*=} extraArgs Additional metadata to pass to effect function
+ * @return {boolean} True if an effect ran for this property
+ * @private
+ */
+ function runEffectsForProperty(inst, effects, dedupeId, prop, props, oldProps, hasPaths, extraArgs) {
+ let ran = false;
+ let rootProperty = hasPaths ? Polymer.Path.root(prop) : prop;
+ let fxs = effects[rootProperty];
+ if (fxs) {
+ for (let i=0, l=fxs.length, fx; (i<l) && (fx=fxs[i]); i++) {
+ if ((!fx.info || fx.info.lastRun !== dedupeId) &&
+ (!hasPaths || pathMatchesTrigger(prop, fx.trigger))) {
+ if (fx.info) {
+ fx.info.lastRun = dedupeId;
+ }
+ fx.fn(inst, prop, props, oldProps, fx.info, hasPaths, extraArgs);
+ ran = true;
+ }
+ }
+ }
+ return ran;
+ }
+
+ /**
+ * Determines whether a property/path that has changed matches the trigger
+ * criteria for an effect. A trigger is a descriptor with the following
+ * structure, which matches the descriptors returned from `parseArg`.
+ * e.g. for `foo.bar.*`:
+ * ```
+ * trigger: {
+ * name: 'a.b',
+ * structured: true,
+ * wildcard: true
+ * }
+ * ```
+ * If no trigger is given, the path is deemed to match.
+ *
+ * @param {string} path Path or property that changed
+ * @param {DataTrigger} trigger Descriptor
+ * @return {boolean} Whether the path matched the trigger
+ */
+ function pathMatchesTrigger(path, trigger) {
+ if (trigger) {
+ let triggerPath = trigger.name;
+ return (triggerPath == path) ||
+ (trigger.structured && Polymer.Path.isAncestor(triggerPath, path)) ||
+ (trigger.wildcard && Polymer.Path.isDescendant(triggerPath, path));
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Implements the "observer" effect.
+ *
+ * Calls the method with `info.methodName` on the instance, passing the
+ * new and old values.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {string} property Name of property
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {?} info Effect metadata
+ * @return {void}
+ * @private
+ */
+ function runObserverEffect(inst, property, props, oldProps, info) {
+ let fn = typeof info.method === "string" ? inst[info.method] : info.method;
+ let changedProp = info.property;
+ if (fn) {
+ fn.call(inst, inst.__data[changedProp], oldProps[changedProp]);
+ } else if (!info.dynamicFn) {
+ console.warn('observer method `' + info.method + '` not defined');
+ }
+ }
+
+ /**
+ * Runs "notify" effects for a set of changed properties.
+ *
+ * This method differs from the generic `runEffects` method in that it
+ * will dispatch path notification events in the case that the property
+ * changed was a path and the root property for that path didn't have a
+ * "notify" effect. This is to maintain 1.0 behavior that did not require
+ * `notify: true` to ensure object sub-property notifications were
+ * sent.
+ *
+ * @param {!PropertyEffectsType} inst The instance with effects to run
+ * @param {Object} notifyProps Bag of properties to notify
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @return {void}
+ * @private
+ */
+ function runNotifyEffects(inst, notifyProps, props, oldProps, hasPaths) {
+ // Notify
+ let fxs = inst[TYPES.NOTIFY];
+ let notified;
+ let id = dedupeId++;
+ // Try normal notify effects; if none, fall back to try path notification
+ for (let prop in notifyProps) {
+ if (notifyProps[prop]) {
+ if (fxs && runEffectsForProperty(inst, fxs, id, prop, props, oldProps, hasPaths)) {
+ notified = true;
+ } else if (hasPaths && notifyPath(inst, prop, props)) {
+ notified = true;
+ }
+ }
+ }
+ // Flush host if we actually notified and host was batching
+ // And the host has already initialized clients; this prevents
+ // an issue with a host observing data changes before clients are ready.
+ let host;
+ if (notified && (host = inst.__dataHost) && host._invalidateProperties) {
+ host._invalidateProperties();
+ }
+ }
+
+ /**
+ * Dispatches {property}-changed events with path information in the detail
+ * object to indicate a sub-path of the property was changed.
+ *
+ * @param {!PropertyEffectsType} inst The element from which to fire the event
+ * @param {string} path The path that was changed
+ * @param {Object} props Bag of current property changes
+ * @return {boolean} Returns true if the path was notified
+ * @private
+ */
+ function notifyPath(inst, path, props) {
+ let rootProperty = Polymer.Path.root(path);
+ if (rootProperty !== path) {
+ let eventName = Polymer.CaseMap.camelToDashCase(rootProperty) + '-changed';
+ dispatchNotifyEvent(inst, eventName, props[path], path);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Dispatches {property}-changed events to indicate a property (or path)
+ * changed.
+ *
+ * @param {!PropertyEffectsType} inst The element from which to fire the event
+ * @param {string} eventName The name of the event to send ('{property}-changed')
+ * @param {*} value The value of the changed property
+ * @param {string | null | undefined} path If a sub-path of this property changed, the path
+ * that changed (optional).
+ * @return {void}
+ * @private
+ * @suppress {invalidCasts}
+ */
+ function dispatchNotifyEvent(inst, eventName, value, path) {
+ let detail = {
+ value: value,
+ queueProperty: true
+ };
+ if (path) {
+ detail.path = path;
+ }
+ /** @type {!HTMLElement} */(inst).dispatchEvent(new CustomEvent(eventName, { detail }));
+ }
+
+ /**
+ * Implements the "notify" effect.
+ *
+ * Dispatches a non-bubbling event named `info.eventName` on the instance
+ * with a detail object containing the new `value`.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {string} property Name of property
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {?} info Effect metadata
+ * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @return {void}
+ * @private
+ */
+ function runNotifyEffect(inst, property, props, oldProps, info, hasPaths) {
+ let rootProperty = hasPaths ? Polymer.Path.root(property) : property;
+ let path = rootProperty != property ? property : null;
+ let value = path ? Polymer.Path.get(inst, path) : inst.__data[property];
+ if (path && value === undefined) {
+ value = props[property]; // specifically for .splices
+ }
+ dispatchNotifyEvent(inst, info.eventName, value, path);
+ }
+
+ /**
+ * Handler function for 2-way notification events. Receives context
+ * information captured in the `addNotifyListener` closure from the
+ * `__notifyListeners` metadata.
+ *
+ * Sets the value of the notified property to the host property or path. If
+ * the event contained path information, translate that path to the host
+ * scope's name for that path first.
+ *
+ * @param {CustomEvent} event Notification event (e.g. '<property>-changed')
+ * @param {!PropertyEffectsType} inst Host element instance handling the notification event
+ * @param {string} fromProp Child element property that was bound
+ * @param {string} toPath Host property/path that was bound
+ * @param {boolean} negate Whether the binding was negated
+ * @return {void}
+ * @private
+ */
+ function handleNotification(event, inst, fromProp, toPath, negate) {
+ let value;
+ let detail = /** @type {Object} */(event.detail);
+ let fromPath = detail && detail.path;
+ if (fromPath) {
+ toPath = Polymer.Path.translate(fromProp, toPath, fromPath);
+ value = detail && detail.value;
+ } else {
+ value = event.target[fromProp];
+ }
+ value = negate ? !value : value;
+ if (!inst[TYPES.READ_ONLY] || !inst[TYPES.READ_ONLY][toPath]) {
+ if (inst._setPendingPropertyOrPath(toPath, value, true, Boolean(fromPath))
+ && (!detail || !detail.queueProperty)) {
+ inst._invalidateProperties();
+ }
+ }
+ }
+
+ /**
+ * Implements the "reflect" effect.
+ *
+ * Sets the attribute named `info.attrName` to the given property value.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {string} property Name of property
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {?} info Effect metadata
+ * @return {void}
+ * @private
+ */
+ function runReflectEffect(inst, property, props, oldProps, info) {
+ let value = inst.__data[property];
+ if (Polymer.sanitizeDOMValue) {
+ value = Polymer.sanitizeDOMValue(value, info.attrName, 'attribute', /** @type {Node} */(inst));
+ }
+ inst._propertyToAttribute(property, info.attrName, value);
+ }
+
+ /**
+ * Runs "computed" effects for a set of changed properties.
+ *
+ * This method differs from the generic `runEffects` method in that it
+ * continues to run computed effects based on the output of each pass until
+ * there are no more newly computed properties. This ensures that all
+ * properties that will be computed by the initial set of changes are
+ * computed before other effects (binding propagation, observers, and notify)
+ * run.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {!Object} changedProps Bag of changed properties
+ * @param {!Object} oldProps Bag of previous values for changed properties
+ * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @return {void}
+ * @private
+ */
+ function runComputedEffects(inst, changedProps, oldProps, hasPaths) {
+ let computeEffects = inst[TYPES.COMPUTE];
+ if (computeEffects) {
+ let inputProps = changedProps;
+ while (runEffects(inst, computeEffects, inputProps, oldProps, hasPaths)) {
+ Object.assign(oldProps, inst.__dataOld);
+ Object.assign(changedProps, inst.__dataPending);
+ inputProps = inst.__dataPending;
+ inst.__dataPending = null;
+ }
+ }
+ }
+
+ /**
+ * Implements the "computed property" effect by running the method with the
+ * values of the arguments specified in the `info` object and setting the
+ * return value to the computed property specified.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {string} property Name of property
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {?} info Effect metadata
+ * @return {void}
+ * @private
+ */
+ function runComputedEffect(inst, property, props, oldProps, info) {
+ let result = runMethodEffect(inst, property, props, oldProps, info);
+ let computedProp = info.methodInfo;
+ if (inst.__dataHasAccessor && inst.__dataHasAccessor[computedProp]) {
+ inst._setPendingProperty(computedProp, result, true);
+ } else {
+ inst[computedProp] = result;
+ }
+ }
+
+ /**
+ * Computes path changes based on path links set up using the `linkPaths`
+ * API.
+ *
+ * @param {!PropertyEffectsType} inst The instance whose props are changing
+ * @param {string | !Array<(string|number)>} path Path that has changed
+ * @param {*} value Value of changed path
+ * @return {void}
+ * @private
+ */
+ function computeLinkedPaths(inst, path, value) {
+ let links = inst.__dataLinkedPaths;
+ if (links) {
+ let link;
+ for (let a in links) {
+ let b = links[a];
+ if (Polymer.Path.isDescendant(a, path)) {
+ link = Polymer.Path.translate(a, b, path);
+ inst._setPendingPropertyOrPath(link, value, true, true);
+ } else if (Polymer.Path.isDescendant(b, path)) {
+ link = Polymer.Path.translate(b, a, path);
+ inst._setPendingPropertyOrPath(link, value, true, true);
+ }
+ }
+ }
+ }
+
+ // -- bindings ----------------------------------------------
+
+ /**
+ * Adds binding metadata to the current `nodeInfo`, and binding effects
+ * for all part dependencies to `templateInfo`.
+ *
+ * @param {Function} constructor Class that `_parseTemplate` is currently
+ * running on
+ * @param {TemplateInfo} templateInfo Template metadata for current template
+ * @param {NodeInfo} nodeInfo Node metadata for current template node
+ * @param {string} kind Binding kind, either 'property', 'attribute', or 'text'
+ * @param {string} target Target property name
+ * @param {!Array<!BindingPart>} parts Array of binding part metadata
+ * @param {string=} literal Literal text surrounding binding parts (specified
+ * only for 'property' bindings, since these must be initialized as part
+ * of boot-up)
+ * @return {void}
+ * @private
+ */
+ function addBinding(constructor, templateInfo, nodeInfo, kind, target, parts, literal) {
+ // Create binding metadata and add to nodeInfo
+ nodeInfo.bindings = nodeInfo.bindings || [];
+ let /** Binding */ binding = { kind, target, parts, literal, isCompound: (parts.length !== 1) };
+ nodeInfo.bindings.push(binding);
+ // Add listener info to binding metadata
+ if (shouldAddListener(binding)) {
+ let {event, negate} = binding.parts[0];
+ binding.listenerEvent = event || (CaseMap.camelToDashCase(target) + '-changed');
+ binding.listenerNegate = negate;
+ }
+ // Add "propagate" property effects to templateInfo
+ let index = templateInfo.nodeInfoList.length;
+ for (let i=0; i<binding.parts.length; i++) {
+ let part = binding.parts[i];
+ part.compoundIndex = i;
+ addEffectForBindingPart(constructor, templateInfo, binding, part, index);
+ }
+ }
+
+ /**
+ * Adds property effects to the given `templateInfo` for the given binding
+ * part.
+ *
+ * @param {Function} constructor Class that `_parseTemplate` is currently
+ * running on
+ * @param {TemplateInfo} templateInfo Template metadata for current template
+ * @param {!Binding} binding Binding metadata
+ * @param {!BindingPart} part Binding part metadata
+ * @param {number} index Index into `nodeInfoList` for this node
+ * @return {void}
+ */
+ function addEffectForBindingPart(constructor, templateInfo, binding, part, index) {
+ if (!part.literal) {
+ if (binding.kind === 'attribute' && binding.target[0] === '-') {
+ console.warn('Cannot set attribute ' + binding.target +
+ ' because "-" is not a valid attribute starting character');
+ } else {
+ let dependencies = part.dependencies;
+ let info = { index, binding, part, evaluator: constructor };
+ for (let j=0; j<dependencies.length; j++) {
+ let trigger = dependencies[j];
+ if (typeof trigger == 'string') {
+ trigger = parseArg(trigger);
+ trigger.wildcard = true;
+ }
+ constructor._addTemplatePropertyEffect(templateInfo, trigger.rootProperty, {
+ fn: runBindingEffect,
+ info, trigger
+ });
+ }
+ }
+ }
+ }
+
+ /**
+ * Implements the "binding" (property/path binding) effect.
+ *
+ * Note that binding syntax is overridable via `_parseBindings` and
+ * `_evaluateBinding`. This method will call `_evaluateBinding` for any
+ * non-literal parts returned from `_parseBindings`. However,
+ * there is no support for _path_ bindings via custom binding parts,
+ * as this is specific to Polymer's path binding syntax.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {string} path Name of property
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {?} info Effect metadata
+ * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @param {Array} nodeList List of nodes associated with `nodeInfoList` template
+ * metadata
+ * @return {void}
+ * @private
+ */
+ function runBindingEffect(inst, path, props, oldProps, info, hasPaths, nodeList) {
+ let node = nodeList[info.index];
+ let binding = info.binding;
+ let part = info.part;
+ // Subpath notification: transform path and set to client
+ // e.g.: foo="{{obj.sub}}", path: 'obj.sub.prop', set 'foo.prop'=obj.sub.prop
+ if (hasPaths && part.source && (path.length > part.source.length) &&
+ (binding.kind == 'property') && !binding.isCompound &&
+ node.__isPropertyEffectsClient &&
+ node.__dataHasAccessor && node.__dataHasAccessor[binding.target]) {
+ let value = props[path];
+ path = Polymer.Path.translate(part.source, binding.target, path);
+ if (node._setPendingPropertyOrPath(path, value, false, true)) {
+ inst._enqueueClient(node);
+ }
+ } else {
+ let value = info.evaluator._evaluateBinding(inst, part, path, props, oldProps, hasPaths);
+ // Propagate value to child
+ applyBindingValue(inst, node, binding, part, value);
+ }
+ }
+
+ /**
+ * Sets the value for an "binding" (binding) effect to a node,
+ * either as a property or attribute.
+ *
+ * @param {!PropertyEffectsType} inst The instance owning the binding effect
+ * @param {Node} node Target node for binding
+ * @param {!Binding} binding Binding metadata
+ * @param {!BindingPart} part Binding part metadata
+ * @param {*} value Value to set
+ * @return {void}
+ * @private
+ */
+ function applyBindingValue(inst, node, binding, part, value) {
+ value = computeBindingValue(node, value, binding, part);
+ if (Polymer.sanitizeDOMValue) {
+ value = Polymer.sanitizeDOMValue(value, binding.target, binding.kind, node);
+ }
+ if (binding.kind == 'attribute') {
+ // Attribute binding
+ inst._valueToNodeAttribute(/** @type {Element} */(node), value, binding.target);
+ } else {
+ // Property binding
+ let prop = binding.target;
+ if (node.__isPropertyEffectsClient &&
+ node.__dataHasAccessor && node.__dataHasAccessor[prop]) {
+ if (!node[TYPES.READ_ONLY] || !node[TYPES.READ_ONLY][prop]) {
+ if (node._setPendingProperty(prop, value)) {
+ inst._enqueueClient(node);
+ }
+ }
+ } else {
+ inst._setUnmanagedPropertyToNode(node, prop, value);
+ }
+ }
+ }
+
+ /**
+ * Transforms an "binding" effect value based on compound & negation
+ * effect metadata, as well as handling for special-case properties
+ *
+ * @param {Node} node Node the value will be set to
+ * @param {*} value Value to set
+ * @param {!Binding} binding Binding metadata
+ * @param {!BindingPart} part Binding part metadata
+ * @return {*} Transformed value to set
+ * @private
+ */
+ function computeBindingValue(node, value, binding, part) {
+ if (binding.isCompound) {
+ let storage = node.__dataCompoundStorage[binding.target];
+ storage[part.compoundIndex] = value;
+ value = storage.join('');
+ }
+ if (binding.kind !== 'attribute') {
+ // Some browsers serialize `undefined` to `"undefined"`
+ if (binding.target === 'textContent' ||
+ (binding.target === 'value' &&
+ (node.localName === 'input' || node.localName === 'textarea'))) {
+ value = value == undefined ? '' : value;
+ }
+ }
+ return value;
+ }
+
+ /**
+ * Returns true if a binding's metadata meets all the requirements to allow
+ * 2-way binding, and therefore a `<property>-changed` event listener should be
+ * added:
+ * - used curly braces
+ * - is a property (not attribute) binding
+ * - is not a textContent binding
+ * - is not compound
+ *
+ * @param {!Binding} binding Binding metadata
+ * @return {boolean} True if 2-way listener should be added
+ * @private
+ */
+ function shouldAddListener(binding) {
+ return Boolean(binding.target) &&
+ binding.kind != 'attribute' &&
+ binding.kind != 'text' &&
+ !binding.isCompound &&
+ binding.parts[0].mode === '{';
+ }
+
+ /**
+ * Setup compound binding storage structures, notify listeners, and dataHost
+ * references onto the bound nodeList.
+ *
+ * @param {!PropertyEffectsType} inst Instance that bas been previously bound
+ * @param {TemplateInfo} templateInfo Template metadata
+ * @return {void}
+ * @private
+ */
+ function setupBindings(inst, templateInfo) {
+ // Setup compound storage, dataHost, and notify listeners
+ let {nodeList, nodeInfoList} = templateInfo;
+ if (nodeInfoList.length) {
+ for (let i=0; i < nodeInfoList.length; i++) {
+ let info = nodeInfoList[i];
+ let node = nodeList[i];
+ let bindings = info.bindings;
+ if (bindings) {
+ for (let i=0; i<bindings.length; i++) {
+ let binding = bindings[i];
+ setupCompoundStorage(node, binding);
+ addNotifyListener(node, inst, binding);
+ }
+ }
+ node.__dataHost = inst;
+ }
+ }
+ }
+
+ /**
+ * Initializes `__dataCompoundStorage` local storage on a bound node with
+ * initial literal data for compound bindings, and sets the joined
+ * literal parts to the bound property.
+ *
+ * When changes to compound parts occur, they are first set into the compound
+ * storage array for that property, and then the array is joined to result in
+ * the final value set to the property/attribute.
+ *
+ * @param {Node} node Bound node to initialize
+ * @param {Binding} binding Binding metadata
+ * @return {void}
+ * @private
+ */
+ function setupCompoundStorage(node, binding) {
+ if (binding.isCompound) {
+ // Create compound storage map
+ let storage = node.__dataCompoundStorage ||
+ (node.__dataCompoundStorage = {});
+ let parts = binding.parts;
+ // Copy literals from parts into storage for this binding
+ let literals = new Array(parts.length);
+ for (let j=0; j<parts.length; j++) {
+ literals[j] = parts[j].literal;
+ }
+ let target = binding.target;
+ storage[target] = literals;
+ // Configure properties with their literal parts
+ if (binding.literal && binding.kind == 'property') {
+ node[target] = binding.literal;
+ }
+ }
+ }
+
+ /**
+ * Adds a 2-way binding notification event listener to the node specified
+ *
+ * @param {Object} node Child element to add listener to
+ * @param {!PropertyEffectsType} inst Host element instance to handle notification event
+ * @param {Binding} binding Binding metadata
+ * @return {void}
+ * @private
+ */
+ function addNotifyListener(node, inst, binding) {
+ if (binding.listenerEvent) {
+ let part = binding.parts[0];
+ node.addEventListener(binding.listenerEvent, function(e) {
+ handleNotification(e, inst, binding.target, part.source, part.negate);
+ });
+ }
+ }
+
+ // -- for method-based effects (complexObserver & computed) --------------
+
+ /**
+ * Adds property effects for each argument in the method signature (and
+ * optionally, for the method name if `dynamic` is true) that calls the
+ * provided effect function.
+ *
+ * @param {Element | Object} model Prototype or instance
+ * @param {!MethodSignature} sig Method signature metadata
+ * @param {string} type Type of property effect to add
+ * @param {Function} effectFn Function to run when arguments change
+ * @param {*=} methodInfo Effect-specific information to be included in
+ * method effect metadata
+ * @param {boolean|Object=} dynamicFn Boolean or object map indicating whether
+ * method names should be included as a dependency to the effect. Note,
+ * defaults to true if the signature is static (sig.static is true).
+ * @return {void}
+ * @private
+ */
+ function createMethodEffect(model, sig, type, effectFn, methodInfo, dynamicFn) {
+ dynamicFn = sig.static || (dynamicFn &&
+ (typeof dynamicFn !== 'object' || dynamicFn[sig.methodName]));
+ let info = {
+ methodName: sig.methodName,
+ args: sig.args,
+ methodInfo,
+ dynamicFn
+ };
+ for (let i=0, arg; (i<sig.args.length) && (arg=sig.args[i]); i++) {
+ if (!arg.literal) {
+ model._addPropertyEffect(arg.rootProperty, type, {
+ fn: effectFn, info: info, trigger: arg
+ });
+ }
+ }
+ if (dynamicFn) {
+ model._addPropertyEffect(sig.methodName, type, {
+ fn: effectFn, info: info
+ });
+ }
+ }
+
+ /**
+ * Calls a method with arguments marshaled from properties on the instance
+ * based on the method signature contained in the effect metadata.
+ *
+ * Multi-property observers, computed properties, and inline computing
+ * functions call this function to invoke the method, then use the return
+ * value accordingly.
+ *
+ * @param {!PropertyEffectsType} inst The instance the effect will be run on
+ * @param {string} property Name of property
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {?} info Effect metadata
+ * @return {*} Returns the return value from the method invocation
+ * @private
+ */
+ function runMethodEffect(inst, property, props, oldProps, info) {
+ // Instances can optionally have a _methodHost which allows redirecting where
+ // to find methods. Currently used by `templatize`.
+ let context = inst._methodHost || inst;
+ let fn = context[info.methodName];
+ if (fn) {
+ let args = marshalArgs(inst.__data, info.args, property, props);
+ return fn.apply(context, args);
+ } else if (!info.dynamicFn) {
+ console.warn('method `' + info.methodName + '` not defined');
+ }
+ }
+
+ const emptyArray = [];
+
+ // Regular expressions used for binding
+ const IDENT = '(?:' + '[a-zA-Z_$][\\w.:$\\-*]*' + ')';
+ const NUMBER = '(?:' + '[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?' + ')';
+ const SQUOTE_STRING = '(?:' + '\'(?:[^\'\\\\]|\\\\.)*\'' + ')';
+ const DQUOTE_STRING = '(?:' + '"(?:[^"\\\\]|\\\\.)*"' + ')';
+ const STRING = '(?:' + SQUOTE_STRING + '|' + DQUOTE_STRING + ')';
+ const ARGUMENT = '(?:(' + IDENT + '|' + NUMBER + '|' + STRING + ')\\s*' + ')';
+ const ARGUMENTS = '(?:' + ARGUMENT + '(?:,\\s*' + ARGUMENT + ')*' + ')';
+ const ARGUMENT_LIST = '(?:' + '\\(\\s*' +
+ '(?:' + ARGUMENTS + '?' + ')' +
+ '\\)\\s*' + ')';
+ const BINDING = '(' + IDENT + '\\s*' + ARGUMENT_LIST + '?' + ')'; // Group 3
+ const OPEN_BRACKET = '(\\[\\[|{{)' + '\\s*';
+ const CLOSE_BRACKET = '(?:]]|}})';
+ const NEGATE = '(?:(!)\\s*)?'; // Group 2
+ const EXPRESSION = OPEN_BRACKET + NEGATE + BINDING + CLOSE_BRACKET;
+ const bindingRegex = new RegExp(EXPRESSION, "g");
+
+ /**
+ * Create a string from binding parts of all the literal parts
+ *
+ * @param {!Array<BindingPart>} parts All parts to stringify
+ * @return {string} String made from the literal parts
+ */
+ function literalFromParts(parts) {
+ let s = '';
+ for (let i=0; i<parts.length; i++) {
+ let literal = parts[i].literal;
+ s += literal || '';
+ }
+ return s;
+ }
+
+ /**
+ * Parses an expression string for a method signature, and returns a metadata
+ * describing the method in terms of `methodName`, `static` (whether all the
+ * arguments are literals), and an array of `args`
+ *
+ * @param {string} expression The expression to parse
+ * @return {?MethodSignature} The method metadata object if a method expression was
+ * found, otherwise `undefined`
+ * @private
+ */
+ function parseMethod(expression) {
+ // tries to match valid javascript property names
+ let m = expression.match(/([^\s]+?)\(([\s\S]*)\)/);
+ if (m) {
+ let methodName = m[1];
+ let sig = { methodName, static: true, args: emptyArray };
+ if (m[2].trim()) {
+ // replace escaped commas with comma entity, split on un-escaped commas
+ let args = m[2].replace(/\\,/g, '&comma;').split(',');
+ return parseArgs(args, sig);
+ } else {
+ return sig;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Parses an array of arguments and sets the `args` property of the supplied
+ * signature metadata object. Sets the `static` property to false if any
+ * argument is a non-literal.
+ *
+ * @param {!Array<string>} argList Array of argument names
+ * @param {!MethodSignature} sig Method signature metadata object
+ * @return {!MethodSignature} The updated signature metadata object
+ * @private
+ */
+ function parseArgs(argList, sig) {
+ sig.args = argList.map(function(rawArg) {
+ let arg = parseArg(rawArg);
+ if (!arg.literal) {
+ sig.static = false;
+ }
+ return arg;
+ }, this);
+ return sig;
+ }
+
+ /**
+ * Parses an individual argument, and returns an argument metadata object
+ * with the following fields:
+ *
+ * {
+ * value: 'prop', // property/path or literal value
+ * literal: false, // whether argument is a literal
+ * structured: false, // whether the property is a path
+ * rootProperty: 'prop', // the root property of the path
+ * wildcard: false // whether the argument was a wildcard '.*' path
+ * }
+ *
+ * @param {string} rawArg The string value of the argument
+ * @return {!MethodArg} Argument metadata object
+ * @private
+ */
+ function parseArg(rawArg) {
+ // clean up whitespace
+ let arg = rawArg.trim()
+ // replace comma entity with comma
+ .replace(/&comma;/g, ',')
+ // repair extra escape sequences; note only commas strictly need
+ // escaping, but we allow any other char to be escaped since its
+ // likely users will do this
+ .replace(/\\(.)/g, '\$1')
+ ;
+ // basic argument descriptor
+ let a = {
+ name: arg,
+ value: '',
+ literal: false
+ };
+ // detect literal value (must be String or Number)
+ let fc = arg[0];
+ if (fc === '-') {
+ fc = arg[1];
+ }
+ if (fc >= '0' && fc <= '9') {
+ fc = '#';
+ }
+ switch(fc) {
+ case "'":
+ case '"':
+ a.value = arg.slice(1, -1);
+ a.literal = true;
+ break;
+ case '#':
+ a.value = Number(arg);
+ a.literal = true;
+ break;
+ }
+ // if not literal, look for structured path
+ if (!a.literal) {
+ a.rootProperty = Polymer.Path.root(arg);
+ // detect structured path (has dots)
+ a.structured = Polymer.Path.isPath(arg);
+ if (a.structured) {
+ a.wildcard = (arg.slice(-2) == '.*');
+ if (a.wildcard) {
+ a.name = arg.slice(0, -2);
+ }
+ }
+ }
+ return a;
+ }
+
+ /**
+ * Gather the argument values for a method specified in the provided array
+ * of argument metadata.
+ *
+ * The `path` and `value` arguments are used to fill in wildcard descriptor
+ * when the method is being called as a result of a path notification.
+ *
+ * @param {Object} data Instance data storage object to read properties from
+ * @param {!Array<!MethodArg>} args Array of argument metadata
+ * @param {string} path Property/path name that triggered the method effect
+ * @param {Object} props Bag of current property changes
+ * @return {Array<*>} Array of argument values
+ * @private
+ */
+ function marshalArgs(data, args, path, props) {
+ let values = [];
+ for (let i=0, l=args.length; i<l; i++) {
+ let arg = args[i];
+ let name = arg.name;
+ let v;
+ if (arg.literal) {
+ v = arg.value;
+ } else {
+ if (arg.structured) {
+ v = Polymer.Path.get(data, name);
+ // when data is not stored e.g. `splices`
+ if (v === undefined) {
+ v = props[name];
+ }
+ } else {
+ v = data[name];
+ }
+ }
+ if (arg.wildcard) {
+ // Only send the actual path changed info if the change that
+ // caused the observer to run matched the wildcard
+ let baseChanged = (name.indexOf(path + '.') === 0);
+ let matches = (path.indexOf(name) === 0 && !baseChanged);
+ values[i] = {
+ path: matches ? path : name,
+ value: matches ? props[path] : v,
+ base: v
+ };
+ } else {
+ values[i] = v;
+ }
+ }
+ return values;
+ }
+
+ // data api
+
+ /**
+ * Sends array splice notifications (`.splices` and `.length`)
+ *
+ * Note: this implementation only accepts normalized paths
+ *
+ * @param {!PropertyEffectsType} inst Instance to send notifications to
+ * @param {Array} array The array the mutations occurred on
+ * @param {string} path The path to the array that was mutated
+ * @param {Array} splices Array of splice records
+ * @return {void}
+ * @private
+ */
+ function notifySplices(inst, array, path, splices) {
+ let splicesPath = path + '.splices';
+ inst.notifyPath(splicesPath, { indexSplices: splices });
+ inst.notifyPath(path + '.length', array.length);
+ // Null here to allow potentially large splice records to be GC'ed.
+ inst.__data[splicesPath] = {indexSplices: null};
+ }
+
+ /**
+ * Creates a splice record and sends an array splice notification for
+ * the described mutation
+ *
+ * Note: this implementation only accepts normalized paths
+ *
+ * @param {!PropertyEffectsType} inst Instance to send notifications to
+ * @param {Array} array The array the mutations occurred on
+ * @param {string} path The path to the array that was mutated
+ * @param {number} index Index at which the array mutation occurred
+ * @param {number} addedCount Number of added items
+ * @param {Array} removed Array of removed items
+ * @return {void}
+ * @private
+ */
+ function notifySplice(inst, array, path, index, addedCount, removed) {
+ notifySplices(inst, array, path, [{
+ index: index,
+ addedCount: addedCount,
+ removed: removed,
+ object: array,
+ type: 'splice'
+ }]);
+ }
+
+ /**
+ * Returns an upper-cased version of the string.
+ *
+ * @param {string} name String to uppercase
+ * @return {string} Uppercased string
+ * @private
+ */
+ function upper(name) {
+ return name[0].toUpperCase() + name.substring(1);
+ }
+
+ /**
+ * Element class mixin that provides meta-programming for Polymer's template
+ * binding and data observation (collectively, "property effects") system.
+ *
+ * This mixin uses provides the following key static methods for adding
+ * property effects to an element class:
+ * - `addPropertyEffect`
+ * - `createPropertyObserver`
+ * - `createMethodObserver`
+ * - `createNotifyingProperty`
+ * - `createReadOnlyProperty`
+ * - `createReflectedProperty`
+ * - `createComputedProperty`
+ * - `bindTemplate`
+ *
+ * Each method creates one or more property accessors, along with metadata
+ * used by this mixin's implementation of `_propertiesChanged` to perform
+ * the property effects.
+ *
+ * Underscored versions of the above methods also exist on the element
+ * prototype for adding property effects on instances at runtime.
+ *
+ * Note that this mixin overrides several `PropertyAccessors` methods, in
+ * many cases to maintain guarantees provided by the Polymer 1.x features;
+ * notably it changes property accessors to be synchronous by default
+ * whereas the default when using `PropertyAccessors` standalone is to be
+ * async by default.
+ *
+ * @mixinFunction
+ * @polymer
+ * @appliesMixin Polymer.TemplateStamp
+ * @appliesMixin Polymer.PropertyAccessors
+ * @memberof Polymer
+ * @summary Element class mixin that provides meta-programming for Polymer's
+ * template binding and data observation system.
+ */
+ Polymer.PropertyEffects = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @constructor
+ * @extends {superClass}
+ * @implements {Polymer_PropertyAccessors}
+ * @implements {Polymer_TemplateStamp}
+ * @unrestricted
+ */
+ const propertyEffectsBase = Polymer.TemplateStamp(Polymer.PropertyAccessors(superClass));
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_PropertyEffects}
+ * @extends {propertyEffectsBase}
+ * @unrestricted
+ */
+ class PropertyEffects extends propertyEffectsBase {
+
+ constructor() {
+ super();
+ /** @type {boolean} */
+ // Used to identify users of this mixin, ala instanceof
+ this.__isPropertyEffectsClient = true;
+ /** @type {number} */
+ // NOTE: used to track re-entrant calls to `_flushProperties`
+ // path changes dirty check against `__dataTemp` only during one "turn"
+ // and are cleared when `__dataCounter` returns to 0.
+ this.__dataCounter = 0;
+ /** @type {boolean} */
+ this.__dataClientsReady;
+ /** @type {Array} */
+ this.__dataPendingClients;
+ /** @type {Object} */
+ this.__dataToNotify;
+ /** @type {Object} */
+ this.__dataLinkedPaths;
+ /** @type {boolean} */
+ this.__dataHasPaths;
+ /** @type {Object} */
+ this.__dataCompoundStorage;
+ /** @type {Polymer_PropertyEffects} */
+ this.__dataHost;
+ /** @type {!Object} */
+ this.__dataTemp;
+ /** @type {boolean} */
+ this.__dataClientsInitialized;
+ /** @type {!Object} */
+ this.__data;
+ /** @type {!Object} */
+ this.__dataPending;
+ /** @type {!Object} */
+ this.__dataOld;
+ /** @type {Object} */
+ this.__computeEffects;
+ /** @type {Object} */
+ this.__reflectEffects;
+ /** @type {Object} */
+ this.__notifyEffects;
+ /** @type {Object} */
+ this.__propagateEffects;
+ /** @type {Object} */
+ this.__observeEffects;
+ /** @type {Object} */
+ this.__readOnly;
+ /** @type {!TemplateInfo} */
+ this.__templateInfo;
+ }
+
+ get PROPERTY_EFFECT_TYPES() {
+ return TYPES;
+ }
+
+ /**
+ * @return {void}
+ */
+ _initializeProperties() {
+ super._initializeProperties();
+ hostStack.registerHost(this);
+ this.__dataClientsReady = false;
+ this.__dataPendingClients = null;
+ this.__dataToNotify = null;
+ this.__dataLinkedPaths = null;
+ this.__dataHasPaths = false;
+ // May be set on instance prior to upgrade
+ this.__dataCompoundStorage = this.__dataCompoundStorage || null;
+ this.__dataHost = this.__dataHost || null;
+ this.__dataTemp = {};
+ this.__dataClientsInitialized = false;
+ }
+
+ /**
+ * Overrides `Polymer.PropertyAccessors` implementation to provide a
+ * more efficient implementation of initializing properties from
+ * the prototype on the instance.
+ *
+ * @override
+ * @param {Object} props Properties to initialize on the prototype
+ * @return {void}
+ */
+ _initializeProtoProperties(props) {
+ this.__data = Object.create(props);
+ this.__dataPending = Object.create(props);
+ this.__dataOld = {};
+ }
+
+ /**
+ * Overrides `Polymer.PropertyAccessors` implementation to avoid setting
+ * `_setProperty`'s `shouldNotify: true`.
+ *
+ * @override
+ * @param {Object} props Properties to initialize on the instance
+ * @return {void}
+ */
+ _initializeInstanceProperties(props) {
+ let readOnly = this[TYPES.READ_ONLY];
+ for (let prop in props) {
+ if (!readOnly || !readOnly[prop]) {
+ this.__dataPending = this.__dataPending || {};
+ this.__dataOld = this.__dataOld || {};
+ this.__data[prop] = this.__dataPending[prop] = props[prop];
+ }
+ }
+ }
+
+ // Prototype setup ----------------------------------------
+
+ /**
+ * Equivalent to static `addPropertyEffect` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} property Property that should trigger the effect
+ * @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @param {Object=} effect Effect metadata object
+ * @return {void}
+ * @protected
+ */
+ _addPropertyEffect(property, type, effect) {
+ this._createPropertyAccessor(property, type == TYPES.READ_ONLY);
+ // effects are accumulated into arrays per property based on type
+ let effects = ensureOwnEffectMap(this, type)[property];
+ if (!effects) {
+ effects = this[type][property] = [];
+ }
+ effects.push(effect);
+ }
+
+ /**
+ * Removes the given property effect.
+ *
+ * @param {string} property Property the effect was associated with
+ * @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @param {Object=} effect Effect metadata object to remove
+ * @return {void}
+ */
+ _removePropertyEffect(property, type, effect) {
+ let effects = ensureOwnEffectMap(this, type)[property];
+ let idx = effects.indexOf(effect);
+ if (idx >= 0) {
+ effects.splice(idx, 1);
+ }
+ }
+
+ /**
+ * Returns whether the current prototype/instance has a property effect
+ * of a certain type.
+ *
+ * @param {string} property Property name
+ * @param {string=} type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @return {boolean} True if the prototype/instance has an effect of this type
+ * @protected
+ */
+ _hasPropertyEffect(property, type) {
+ let effects = this[type];
+ return Boolean(effects && effects[property]);
+ }
+
+ /**
+ * Returns whether the current prototype/instance has a "read only"
+ * accessor for the given property.
+ *
+ * @param {string} property Property name
+ * @return {boolean} True if the prototype/instance has an effect of this type
+ * @protected
+ */
+ _hasReadOnlyEffect(property) {
+ return this._hasPropertyEffect(property, TYPES.READ_ONLY);
+ }
+
+ /**
+ * Returns whether the current prototype/instance has a "notify"
+ * property effect for the given property.
+ *
+ * @param {string} property Property name
+ * @return {boolean} True if the prototype/instance has an effect of this type
+ * @protected
+ */
+ _hasNotifyEffect(property) {
+ return this._hasPropertyEffect(property, TYPES.NOTIFY);
+ }
+
+ /**
+ * Returns whether the current prototype/instance has a "reflect to attribute"
+ * property effect for the given property.
+ *
+ * @param {string} property Property name
+ * @return {boolean} True if the prototype/instance has an effect of this type
+ * @protected
+ */
+ _hasReflectEffect(property) {
+ return this._hasPropertyEffect(property, TYPES.REFLECT);
+ }
+
+ /**
+ * Returns whether the current prototype/instance has a "computed"
+ * property effect for the given property.
+ *
+ * @param {string} property Property name
+ * @return {boolean} True if the prototype/instance has an effect of this type
+ * @protected
+ */
+ _hasComputedEffect(property) {
+ return this._hasPropertyEffect(property, TYPES.COMPUTE);
+ }
+
+ // Runtime ----------------------------------------
+
+ /**
+ * Sets a pending property or path. If the root property of the path in
+ * question had no accessor, the path is set, otherwise it is enqueued
+ * via `_setPendingProperty`.
+ *
+ * This function isolates relatively expensive functionality necessary
+ * for the public API (`set`, `setProperties`, `notifyPath`, and property
+ * change listeners via {{...}} bindings), such that it is only done
+ * when paths enter the system, and not at every propagation step. It
+ * also sets a `__dataHasPaths` flag on the instance which is used to
+ * fast-path slower path-matching code in the property effects host paths.
+ *
+ * `path` can be a path string or array of path parts as accepted by the
+ * public API.
+ *
+ * @param {string | !Array<number|string>} path Path to set
+ * @param {*} value Value to set
+ * @param {boolean=} shouldNotify Set to true if this change should
+ * cause a property notification event dispatch
+ * @param {boolean=} isPathNotification If the path being set is a path
+ * notification of an already changed value, as opposed to a request
+ * to set and notify the change. In the latter `false` case, a dirty
+ * check is performed and then the value is set to the path before
+ * enqueuing the pending property change.
+ * @return {boolean} Returns true if the property/path was enqueued in
+ * the pending changes bag.
+ * @protected
+ */
+ _setPendingPropertyOrPath(path, value, shouldNotify, isPathNotification) {
+ if (isPathNotification ||
+ Polymer.Path.root(Array.isArray(path) ? path[0] : path) !== path) {
+ // Dirty check changes being set to a path against the actual object,
+ // since this is the entry point for paths into the system; from here
+ // the only dirty checks are against the `__dataTemp` cache to prevent
+ // duplicate work in the same turn only. Note, if this was a notification
+ // of a change already set to a path (isPathNotification: true),
+ // we always let the change through and skip the `set` since it was
+ // already dirty checked at the point of entry and the underlying
+ // object has already been updated
+ if (!isPathNotification) {
+ let old = Polymer.Path.get(this, path);
+ path = /** @type {string} */ (Polymer.Path.set(this, path, value));
+ // Use property-accessor's simpler dirty check
+ if (!path || !super._shouldPropertyChange(path, value, old)) {
+ return false;
+ }
+ }
+ this.__dataHasPaths = true;
+ if (this._setPendingProperty(/**@type{string}*/(path), value, shouldNotify)) {
+ computeLinkedPaths(this, path, value);
+ return true;
+ }
+ } else {
+ if (this.__dataHasAccessor && this.__dataHasAccessor[path]) {
+ return this._setPendingProperty(/**@type{string}*/(path), value, shouldNotify);
+ } else {
+ this[path] = value;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Applies a value to a non-Polymer element/node's property.
+ *
+ * The implementation makes a best-effort at binding interop:
+ * Some native element properties have side-effects when
+ * re-setting the same value (e.g. setting `<input>.value` resets the
+ * cursor position), so we do a dirty-check before setting the value.
+ * However, for better interop with non-Polymer custom elements that
+ * accept objects, we explicitly re-set object changes coming from the
+ * Polymer world (which may include deep object changes without the
+ * top reference changing), erring on the side of providing more
+ * information.
+ *
+ * Users may override this method to provide alternate approaches.
+ *
+ * @param {!Node} node The node to set a property on
+ * @param {string} prop The property to set
+ * @param {*} value The value to set
+ * @return {void}
+ * @protected
+ */
+ _setUnmanagedPropertyToNode(node, prop, value) {
+ // It is a judgment call that resetting primitives is
+ // "bad" and resettings objects is also "good"; alternatively we could
+ // implement a whitelist of tag & property values that should never
+ // be reset (e.g. <input>.value && <select>.value)
+ if (value !== node[prop] || typeof value == 'object') {
+ node[prop] = value;
+ }
+ }
+
+ /**
+ * Overrides the `PropertiesChanged` implementation to introduce special
+ * dirty check logic depending on the property & value being set:
+ *
+ * 1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})
+ * Stored in `__dataTemp`, dirty checked against `__dataTemp`
+ * 2. Object set to simple property (e.g. 'prop': {...})
+ * Stored in `__dataTemp` and `__data`, dirty checked against
+ * `__dataTemp` by default implementation of `_shouldPropertyChange`
+ * 3. Primitive value set to simple property (e.g. 'prop': 42)
+ * Stored in `__data`, dirty checked against `__data`
+ *
+ * The dirty-check is important to prevent cycles due to two-way
+ * notification, but paths and objects are only dirty checked against any
+ * previous value set during this turn via a "temporary cache" that is
+ * cleared when the last `_propertiesChanged` exits. This is so:
+ * a. any cached array paths (e.g. 'array.3.prop') may be invalidated
+ * due to array mutations like shift/unshift/splice; this is fine
+ * since path changes are dirty-checked at user entry points like `set`
+ * b. dirty-checking for objects only lasts one turn to allow the user
+ * to mutate the object in-place and re-set it with the same identity
+ * and have all sub-properties re-propagated in a subsequent turn.
+ *
+ * The temp cache is not necessarily sufficient to prevent invalid array
+ * paths, since a splice can happen during the same turn (with pathological
+ * user code); we could introduce a "fixup" for temporarily cached array
+ * paths if needed: https://github.com/Polymer/polymer/issues/4227
+ *
+ * @override
+ * @param {string} property Name of the property
+ * @param {*} value Value to set
+ * @param {boolean=} shouldNotify True if property should fire notification
+ * event (applies only for `notify: true` properties)
+ * @return {boolean} Returns true if the property changed
+ */
+ _setPendingProperty(property, value, shouldNotify) {
+ let isPath = this.__dataHasPaths && Polymer.Path.isPath(property);
+ let prevProps = isPath ? this.__dataTemp : this.__data;
+ if (this._shouldPropertyChange(property, value, prevProps[property])) {
+ if (!this.__dataPending) {
+ this.__dataPending = {};
+ this.__dataOld = {};
+ }
+ // Ensure old is captured from the last turn
+ if (!(property in this.__dataOld)) {
+ this.__dataOld[property] = this.__data[property];
+ }
+ // Paths are stored in temporary cache (cleared at end of turn),
+ // which is used for dirty-checking, all others stored in __data
+ if (isPath) {
+ this.__dataTemp[property] = value;
+ } else {
+ this.__data[property] = value;
+ }
+ // All changes go into pending property bag, passed to _propertiesChanged
+ this.__dataPending[property] = value;
+ // Track properties that should notify separately
+ if (isPath || (this[TYPES.NOTIFY] && this[TYPES.NOTIFY][property])) {
+ this.__dataToNotify = this.__dataToNotify || {};
+ this.__dataToNotify[property] = shouldNotify;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Overrides base implementation to ensure all accessors set `shouldNotify`
+ * to true, for per-property notification tracking.
+ *
+ * @override
+ * @param {string} property Name of the property
+ * @param {*} value Value to set
+ * @return {void}
+ */
+ _setProperty(property, value) {
+ if (this._setPendingProperty(property, value, true)) {
+ this._invalidateProperties();
+ }
+ }
+
+ /**
+ * Overrides `PropertyAccessor`'s default async queuing of
+ * `_propertiesChanged`: if `__dataReady` is false (has not yet been
+ * manually flushed), the function no-ops; otherwise flushes
+ * `_propertiesChanged` synchronously.
+ *
+ * @override
+ * @return {void}
+ */
+ _invalidateProperties() {
+ if (this.__dataReady) {
+ this._flushProperties();
+ }
+ }
+
+ /**
+ * Enqueues the given client on a list of pending clients, whose
+ * pending property changes can later be flushed via a call to
+ * `_flushClients`.
+ *
+ * @param {Object} client PropertyEffects client to enqueue
+ * @return {void}
+ * @protected
+ */
+ _enqueueClient(client) {
+ this.__dataPendingClients = this.__dataPendingClients || [];
+ if (client !== this) {
+ this.__dataPendingClients.push(client);
+ }
+ }
+
+ /**
+ * Overrides superclass implementation.
+ *
+ * @return {void}
+ * @protected
+ */
+ _flushProperties() {
+ this.__dataCounter++;
+ super._flushProperties();
+ this.__dataCounter--;
+ }
+
+ /**
+ * Flushes any clients previously enqueued via `_enqueueClient`, causing
+ * their `_flushProperties` method to run.
+ *
+ * @return {void}
+ * @protected
+ */
+ _flushClients() {
+ if (!this.__dataClientsReady) {
+ this.__dataClientsReady = true;
+ this._readyClients();
+ // Override point where accessors are turned on; importantly,
+ // this is after clients have fully readied, providing a guarantee
+ // that any property effects occur only after all clients are ready.
+ this.__dataReady = true;
+ } else {
+ this.__enableOrFlushClients();
+ }
+ }
+
+ // NOTE: We ensure clients either enable or flush as appropriate. This
+ // handles two corner cases:
+ // (1) clients flush properly when connected/enabled before the host
+ // enables; e.g.
+ // (a) Templatize stamps with no properties and does not flush and
+ // (b) the instance is inserted into dom and
+ // (c) then the instance flushes.
+ // (2) clients enable properly when not connected/enabled when the host
+ // flushes; e.g.
+ // (a) a template is runtime stamped and not yet connected/enabled
+ // (b) a host sets a property, causing stamped dom to flush
+ // (c) the stamped dom enables.
+ __enableOrFlushClients() {
+ let clients = this.__dataPendingClients;
+ if (clients) {
+ this.__dataPendingClients = null;
+ for (let i=0; i < clients.length; i++) {
+ let client = clients[i];
+ if (!client.__dataEnabled) {
+ client._enableProperties();
+ } else if (client.__dataPending) {
+ client._flushProperties();
+ }
+ }
+ }
+ }
+
+ /**
+ * Perform any initial setup on client dom. Called before the first
+ * `_flushProperties` call on client dom and before any element
+ * observers are called.
+ *
+ * @return {void}
+ * @protected
+ */
+ _readyClients() {
+ this.__enableOrFlushClients();
+ }
+
+ /**
+ * Sets a bag of property changes to this instance, and
+ * synchronously processes all effects of the properties as a batch.
+ *
+ * Property names must be simple properties, not paths. Batched
+ * path propagation is not supported.
+ *
+ * @param {Object} props Bag of one or more key-value pairs whose key is
+ * a property and value is the new value to set for that property.
+ * @param {boolean=} setReadOnly When true, any private values set in
+ * `props` will be set. By default, `setProperties` will not set
+ * `readOnly: true` root properties.
+ * @return {void}
+ * @public
+ */
+ setProperties(props, setReadOnly) {
+ for (let path in props) {
+ if (setReadOnly || !this[TYPES.READ_ONLY] || !this[TYPES.READ_ONLY][path]) {
+ //TODO(kschaaf): explicitly disallow paths in setProperty?
+ // wildcard observers currently only pass the first changed path
+ // in the `info` object, and you could do some odd things batching
+ // paths, e.g. {'foo.bar': {...}, 'foo': null}
+ this._setPendingPropertyOrPath(path, props[path], true);
+ }
+ }
+ this._invalidateProperties();
+ }
+
+ /**
+ * Overrides `PropertyAccessors` so that property accessor
+ * side effects are not enabled until after client dom is fully ready.
+ * Also calls `_flushClients` callback to ensure client dom is enabled
+ * that was not enabled as a result of flushing properties.
+ *
+ * @override
+ * @return {void}
+ */
+ ready() {
+ // It is important that `super.ready()` is not called here as it
+ // immediately turns on accessors. Instead, we wait until `readyClients`
+ // to enable accessors to provide a guarantee that clients are ready
+ // before processing any accessors side effects.
+ this._flushProperties();
+ // If no data was pending, `_flushProperties` will not `flushClients`
+ // so ensure this is done.
+ if (!this.__dataClientsReady) {
+ this._flushClients();
+ }
+ // Before ready, client notifications do not trigger _flushProperties.
+ // Therefore a flush is necessary here if data has been set.
+ if (this.__dataPending) {
+ this._flushProperties();
+ }
+ }
+
+ /**
+ * Implements `PropertyAccessors`'s properties changed callback.
+ *
+ * Runs each class of effects for the batch of changed properties in
+ * a specific order (compute, propagate, reflect, observe, notify).
+ *
+ * @param {!Object} currentProps Bag of all current accessor values
+ * @param {!Object} changedProps Bag of properties changed since the last
+ * call to `_propertiesChanged`
+ * @param {!Object} oldProps Bag of previous values for each property
+ * in `changedProps`
+ * @return {void}
+ */
+ _propertiesChanged(currentProps, changedProps, oldProps) {
+ // ----------------------------
+ // let c = Object.getOwnPropertyNames(changedProps || {});
+ // window.debug && console.group(this.localName + '#' + this.id + ': ' + c);
+ // if (window.debug) { debugger; }
+ // ----------------------------
+ let hasPaths = this.__dataHasPaths;
+ this.__dataHasPaths = false;
+ // Compute properties
+ runComputedEffects(this, changedProps, oldProps, hasPaths);
+ // Clear notify properties prior to possible reentry (propagate, observe),
+ // but after computing effects have a chance to add to them
+ let notifyProps = this.__dataToNotify;
+ this.__dataToNotify = null;
+ // Propagate properties to clients
+ this._propagatePropertyChanges(changedProps, oldProps, hasPaths);
+ // Flush clients
+ this._flushClients();
+ // Reflect properties
+ runEffects(this, this[TYPES.REFLECT], changedProps, oldProps, hasPaths);
+ // Observe properties
+ runEffects(this, this[TYPES.OBSERVE], changedProps, oldProps, hasPaths);
+ // Notify properties to host
+ if (notifyProps) {
+ runNotifyEffects(this, notifyProps, changedProps, oldProps, hasPaths);
+ }
+ // Clear temporary cache at end of turn
+ if (this.__dataCounter == 1) {
+ this.__dataTemp = {};
+ }
+ // ----------------------------
+ // window.debug && console.groupEnd(this.localName + '#' + this.id + ': ' + c);
+ // ----------------------------
+ }
+
+ /**
+ * Called to propagate any property changes to stamped template nodes
+ * managed by this element.
+ *
+ * @param {Object} changedProps Bag of changed properties
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @return {void}
+ * @protected
+ */
+ _propagatePropertyChanges(changedProps, oldProps, hasPaths) {
+ if (this[TYPES.PROPAGATE]) {
+ runEffects(this, this[TYPES.PROPAGATE], changedProps, oldProps, hasPaths);
+ }
+ let templateInfo = this.__templateInfo;
+ while (templateInfo) {
+ runEffects(this, templateInfo.propertyEffects, changedProps, oldProps,
+ hasPaths, templateInfo.nodeList);
+ templateInfo = templateInfo.nextTemplateInfo;
+ }
+ }
+
+ /**
+ * Aliases one data path as another, such that path notifications from one
+ * are routed to the other.
+ *
+ * @param {string | !Array<string|number>} to Target path to link.
+ * @param {string | !Array<string|number>} from Source path to link.
+ * @return {void}
+ * @public
+ */
+ linkPaths(to, from) {
+ to = Polymer.Path.normalize(to);
+ from = Polymer.Path.normalize(from);
+ this.__dataLinkedPaths = this.__dataLinkedPaths || {};
+ this.__dataLinkedPaths[to] = from;
+ }
+
+ /**
+ * Removes a data path alias previously established with `_linkPaths`.
+ *
+ * Note, the path to unlink should be the target (`to`) used when
+ * linking the paths.
+ *
+ * @param {string | !Array<string|number>} path Target path to unlink.
+ * @return {void}
+ * @public
+ */
+ unlinkPaths(path) {
+ path = Polymer.Path.normalize(path);
+ if (this.__dataLinkedPaths) {
+ delete this.__dataLinkedPaths[path];
+ }
+ }
+
+ /**
+ * Notify that an array has changed.
+ *
+ * Example:
+ *
+ * this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];
+ * ...
+ * this.items.splice(1, 1, {name: 'Sam'});
+ * this.items.push({name: 'Bob'});
+ * this.notifySplices('items', [
+ * { index: 1, removed: [{name: 'Todd'}], addedCount: 1, object: this.items, type: 'splice' },
+ * { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}
+ * ]);
+ *
+ * @param {string} path Path that should be notified.
+ * @param {Array} splices Array of splice records indicating ordered
+ * changes that occurred to the array. Each record should have the
+ * following fields:
+ * * index: index at which the change occurred
+ * * removed: array of items that were removed from this index
+ * * addedCount: number of new items added at this index
+ * * object: a reference to the array in question
+ * * type: the string literal 'splice'
+ *
+ * Note that splice records _must_ be normalized such that they are
+ * reported in index order (raw results from `Object.observe` are not
+ * ordered and must be normalized/merged before notifying).
+ * @return {void}
+ * @public
+ */
+ notifySplices(path, splices) {
+ let info = {path: ''};
+ let array = /** @type {Array} */(Polymer.Path.get(this, path, info));
+ notifySplices(this, array, info.path, splices);
+ }
+
+ /**
+ * Convenience method for reading a value from a path.
+ *
+ * Note, if any part in the path is undefined, this method returns
+ * `undefined` (this method does not throw when dereferencing undefined
+ * paths).
+ *
+ * @param {(string|!Array<(string|number)>)} path Path to the value
+ * to read. The path may be specified as a string (e.g. `foo.bar.baz`)
+ * or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that
+ * bracketed expressions are not supported; string-based path parts
+ * *must* be separated by dots. Note that when dereferencing array
+ * indices, the index may be used as a dotted part directly
+ * (e.g. `users.12.name` or `['users', 12, 'name']`).
+ * @param {Object=} root Root object from which the path is evaluated.
+ * @return {*} Value at the path, or `undefined` if any part of the path
+ * is undefined.
+ * @public
+ */
+ get(path, root) {
+ return Polymer.Path.get(root || this, path);
+ }
+
+ /**
+ * Convenience method for setting a value to a path and notifying any
+ * elements bound to the same path.
+ *
+ * Note, if any part in the path except for the last is undefined,
+ * this method does nothing (this method does not throw when
+ * dereferencing undefined paths).
+ *
+ * @param {(string|!Array<(string|number)>)} path Path to the value
+ * to write. The path may be specified as a string (e.g. `'foo.bar.baz'`)
+ * or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that
+ * bracketed expressions are not supported; string-based path parts
+ * *must* be separated by dots. Note that when dereferencing array
+ * indices, the index may be used as a dotted part directly
+ * (e.g. `'users.12.name'` or `['users', 12, 'name']`).
+ * @param {*} value Value to set at the specified path.
+ * @param {Object=} root Root object from which the path is evaluated.
+ * When specified, no notification will occur.
+ * @return {void}
+ * @public
+ */
+ set(path, value, root) {
+ if (root) {
+ Polymer.Path.set(root, path, value);
+ } else {
+ if (!this[TYPES.READ_ONLY] || !this[TYPES.READ_ONLY][/** @type {string} */(path)]) {
+ if (this._setPendingPropertyOrPath(path, value, true)) {
+ this._invalidateProperties();
+ }
+ }
+ }
+ }
+
+ /**
+ * Adds items onto the end of the array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.push`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param {string | !Array<string|number>} path Path to array.
+ * @param {...*} items Items to push onto array
+ * @return {number} New length of the array.
+ * @public
+ */
+ push(path, ...items) {
+ let info = {path: ''};
+ let array = /** @type {Array}*/(Polymer.Path.get(this, path, info));
+ let len = array.length;
+ let ret = array.push(...items);
+ if (items.length) {
+ notifySplice(this, array, info.path, len, items.length, []);
+ }
+ return ret;
+ }
+
+ /**
+ * Removes an item from the end of array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.pop`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param {string | !Array<string|number>} path Path to array.
+ * @return {*} Item that was removed.
+ * @public
+ */
+ pop(path) {
+ let info = {path: ''};
+ let array = /** @type {Array} */(Polymer.Path.get(this, path, info));
+ let hadLength = Boolean(array.length);
+ let ret = array.pop();
+ if (hadLength) {
+ notifySplice(this, array, info.path, array.length, 0, [ret]);
+ }
+ return ret;
+ }
+
+ /**
+ * Starting from the start index specified, removes 0 or more items
+ * from the array and inserts 0 or more new items in their place.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.splice`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param {string | !Array<string|number>} path Path to array.
+ * @param {number} start Index from which to start removing/inserting.
+ * @param {number} deleteCount Number of items to remove.
+ * @param {...*} items Items to insert into array.
+ * @return {Array} Array of removed items.
+ * @public
+ */
+ splice(path, start, deleteCount, ...items) {
+ let info = {path : ''};
+ let array = /** @type {Array} */(Polymer.Path.get(this, path, info));
+ // Normalize fancy native splice handling of crazy start values
+ if (start < 0) {
+ start = array.length - Math.floor(-start);
+ } else if (start) {
+ start = Math.floor(start);
+ }
+ // array.splice does different things based on the number of arguments
+ // you pass in. Therefore, array.splice(0) and array.splice(0, undefined)
+ // do different things. In the former, the whole array is cleared. In the
+ // latter, no items are removed.
+ // This means that we need to detect whether 1. one of the arguments
+ // is actually passed in and then 2. determine how many arguments
+ // we should pass on to the native array.splice
+ //
+ let ret;
+ // Omit any additional arguments if they were not passed in
+ if (arguments.length === 2) {
+ ret = array.splice(start);
+ // Either start was undefined and the others were defined, but in this
+ // case we can safely pass on all arguments
+ //
+ // Note: this includes the case where none of the arguments were passed in,
+ // e.g. this.splice('array'). However, if both start and deleteCount
+ // are undefined, array.splice will not modify the array (as expected)
+ } else {
+ ret = array.splice(start, deleteCount, ...items);
+ }
+ // At the end, check whether any items were passed in (e.g. insertions)
+ // or if the return array contains items (e.g. deletions).
+ // Only notify if items were added or deleted.
+ if (items.length || ret.length) {
+ notifySplice(this, array, info.path, start, items.length, ret);
+ }
+ return ret;
+ }
+
+ /**
+ * Removes an item from the beginning of array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.pop`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param {string | !Array<string|number>} path Path to array.
+ * @return {*} Item that was removed.
+ * @public
+ */
+ shift(path) {
+ let info = {path: ''};
+ let array = /** @type {Array} */(Polymer.Path.get(this, path, info));
+ let hadLength = Boolean(array.length);
+ let ret = array.shift();
+ if (hadLength) {
+ notifySplice(this, array, info.path, 0, 0, [ret]);
+ }
+ return ret;
+ }
+
+ /**
+ * Adds items onto the beginning of the array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.push`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param {string | !Array<string|number>} path Path to array.
+ * @param {...*} items Items to insert info array
+ * @return {number} New length of the array.
+ * @public
+ */
+ unshift(path, ...items) {
+ let info = {path: ''};
+ let array = /** @type {Array} */(Polymer.Path.get(this, path, info));
+ let ret = array.unshift(...items);
+ if (items.length) {
+ notifySplice(this, array, info.path, 0, items.length, []);
+ }
+ return ret;
+ }
+
+ /**
+ * Notify that a path has changed.
+ *
+ * Example:
+ *
+ * this.item.user.name = 'Bob';
+ * this.notifyPath('item.user.name');
+ *
+ * @param {string} path Path that should be notified.
+ * @param {*=} value Value at the path (optional).
+ * @return {void}
+ * @public
+ */
+ notifyPath(path, value) {
+ /** @type {string} */
+ let propPath;
+ if (arguments.length == 1) {
+ // Get value if not supplied
+ let info = {path: ''};
+ value = Polymer.Path.get(this, path, info);
+ propPath = info.path;
+ } else if (Array.isArray(path)) {
+ // Normalize path if needed
+ propPath = Polymer.Path.normalize(path);
+ } else {
+ propPath = /** @type{string} */(path);
+ }
+ if (this._setPendingPropertyOrPath(propPath, value, true, true)) {
+ this._invalidateProperties();
+ }
+ }
+
+ /**
+ * Equivalent to static `createReadOnlyProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} property Property name
+ * @param {boolean=} protectedSetter Creates a custom protected setter
+ * when `true`.
+ * @return {void}
+ * @protected
+ */
+ _createReadOnlyProperty(property, protectedSetter) {
+ this._addPropertyEffect(property, TYPES.READ_ONLY);
+ if (protectedSetter) {
+ this['_set' + upper(property)] = /** @this {PropertyEffects} */function(value) {
+ this._setProperty(property, value);
+ };
+ }
+ }
+
+ /**
+ * Equivalent to static `createPropertyObserver` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} property Property name
+ * @param {string|function(*,*)} method Function or name of observer method to call
+ * @param {boolean=} dynamicFn Whether the method name should be included as
+ * a dependency to the effect.
+ * @return {void}
+ * @protected
+ */
+ _createPropertyObserver(property, method, dynamicFn) {
+ let info = { property, method, dynamicFn: Boolean(dynamicFn) };
+ this._addPropertyEffect(property, TYPES.OBSERVE, {
+ fn: runObserverEffect, info, trigger: {name: property}
+ });
+ if (dynamicFn) {
+ this._addPropertyEffect(/** @type {string} */(method), TYPES.OBSERVE, {
+ fn: runObserverEffect, info, trigger: {name: method}
+ });
+ }
+ }
+
+ /**
+ * Equivalent to static `createMethodObserver` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} expression Method expression
+ * @param {boolean|Object=} dynamicFn Boolean or object map indicating
+ * whether method names should be included as a dependency to the effect.
+ * @return {void}
+ * @protected
+ */
+ _createMethodObserver(expression, dynamicFn) {
+ let sig = parseMethod(expression);
+ if (!sig) {
+ throw new Error("Malformed observer expression '" + expression + "'");
+ }
+ createMethodEffect(this, sig, TYPES.OBSERVE, runMethodEffect, null, dynamicFn);
+ }
+
+ /**
+ * Equivalent to static `createNotifyingProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} property Property name
+ * @return {void}
+ * @protected
+ */
+ _createNotifyingProperty(property) {
+ this._addPropertyEffect(property, TYPES.NOTIFY, {
+ fn: runNotifyEffect,
+ info: {
+ eventName: CaseMap.camelToDashCase(property) + '-changed',
+ property: property
+ }
+ });
+ }
+
+ /**
+ * Equivalent to static `createReflectedProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} property Property name
+ * @return {void}
+ * @protected
+ */
+ _createReflectedProperty(property) {
+ let attr = this.constructor.attributeNameForProperty(property);
+ if (attr[0] === '-') {
+ console.warn('Property ' + property + ' cannot be reflected to attribute ' +
+ attr + ' because "-" is not a valid starting attribute name. Use a lowercase first letter for the property instead.');
+ } else {
+ this._addPropertyEffect(property, TYPES.REFLECT, {
+ fn: runReflectEffect,
+ info: {
+ attrName: attr
+ }
+ });
+ }
+ }
+
+ /**
+ * Equivalent to static `createComputedProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param {string} property Name of computed property to set
+ * @param {string} expression Method expression
+ * @param {boolean|Object=} dynamicFn Boolean or object map indicating
+ * whether method names should be included as a dependency to the effect.
+ * @return {void}
+ * @protected
+ */
+ _createComputedProperty(property, expression, dynamicFn) {
+ let sig = parseMethod(expression);
+ if (!sig) {
+ throw new Error("Malformed computed expression '" + expression + "'");
+ }
+ createMethodEffect(this, sig, TYPES.COMPUTE, runComputedEffect, property, dynamicFn);
+ }
+
+ // -- static class methods ------------
+
+ /**
+ * Ensures an accessor exists for the specified property, and adds
+ * to a list of "property effects" that will run when the accessor for
+ * the specified property is set. Effects are grouped by "type", which
+ * roughly corresponds to a phase in effect processing. The effect
+ * metadata should be in the following form:
+ *
+ * {
+ * fn: effectFunction, // Reference to function to call to perform effect
+ * info: { ... } // Effect metadata passed to function
+ * trigger: { // Optional triggering metadata; if not provided
+ * name: string // the property is treated as a wildcard
+ * structured: boolean
+ * wildcard: boolean
+ * }
+ * }
+ *
+ * Effects are called from `_propertiesChanged` in the following order by
+ * type:
+ *
+ * 1. COMPUTE
+ * 2. PROPAGATE
+ * 3. REFLECT
+ * 4. OBSERVE
+ * 5. NOTIFY
+ *
+ * Effect functions are called with the following signature:
+ *
+ * effectFunction(inst, path, props, oldProps, info, hasPaths)
+ *
+ * @param {string} property Property that should trigger the effect
+ * @param {string} type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @param {Object=} effect Effect metadata object
+ * @return {void}
+ * @protected
+ */
+ static addPropertyEffect(property, type, effect) {
+ this.prototype._addPropertyEffect(property, type, effect);
+ }
+
+ /**
+ * Creates a single-property observer for the given property.
+ *
+ * @param {string} property Property name
+ * @param {string|function(*,*)} method Function or name of observer method to call
+ * @param {boolean=} dynamicFn Whether the method name should be included as
+ * a dependency to the effect.
+ * @return {void}
+ * @protected
+ */
+ static createPropertyObserver(property, method, dynamicFn) {
+ this.prototype._createPropertyObserver(property, method, dynamicFn);
+ }
+
+ /**
+ * Creates a multi-property "method observer" based on the provided
+ * expression, which should be a string in the form of a normal JavaScript
+ * function signature: `'methodName(arg1, [..., argn])'`. Each argument
+ * should correspond to a property or path in the context of this
+ * prototype (or instance), or may be a literal string or number.
+ *
+ * @param {string} expression Method expression
+ * @param {boolean|Object=} dynamicFn Boolean or object map indicating
+ * @return {void}
+ * whether method names should be included as a dependency to the effect.
+ * @protected
+ */
+ static createMethodObserver(expression, dynamicFn) {
+ this.prototype._createMethodObserver(expression, dynamicFn);
+ }
+
+ /**
+ * Causes the setter for the given property to dispatch `<property>-changed`
+ * events to notify of changes to the property.
+ *
+ * @param {string} property Property name
+ * @return {void}
+ * @protected
+ */
+ static createNotifyingProperty(property) {
+ this.prototype._createNotifyingProperty(property);
+ }
+
+ /**
+ * Creates a read-only accessor for the given property.
+ *
+ * To set the property, use the protected `_setProperty` API.
+ * To create a custom protected setter (e.g. `_setMyProp()` for
+ * property `myProp`), pass `true` for `protectedSetter`.
+ *
+ * Note, if the property will have other property effects, this method
+ * should be called first, before adding other effects.
+ *
+ * @param {string} property Property name
+ * @param {boolean=} protectedSetter Creates a custom protected setter
+ * when `true`.
+ * @return {void}
+ * @protected
+ */
+ static createReadOnlyProperty(property, protectedSetter) {
+ this.prototype._createReadOnlyProperty(property, protectedSetter);
+ }
+
+ /**
+ * Causes the setter for the given property to reflect the property value
+ * to a (dash-cased) attribute of the same name.
+ *
+ * @param {string} property Property name
+ * @return {void}
+ * @protected
+ */
+ static createReflectedProperty(property) {
+ this.prototype._createReflectedProperty(property);
+ }
+
+ /**
+ * Creates a computed property whose value is set to the result of the
+ * method described by the given `expression` each time one or more
+ * arguments to the method changes. The expression should be a string
+ * in the form of a normal JavaScript function signature:
+ * `'methodName(arg1, [..., argn])'`
+ *
+ * @param {string} property Name of computed property to set
+ * @param {string} expression Method expression
+ * @param {boolean|Object=} dynamicFn Boolean or object map indicating whether
+ * method names should be included as a dependency to the effect.
+ * @return {void}
+ * @protected
+ */
+ static createComputedProperty(property, expression, dynamicFn) {
+ this.prototype._createComputedProperty(property, expression, dynamicFn);
+ }
+
+ /**
+ * Parses the provided template to ensure binding effects are created
+ * for them, and then ensures property accessors are created for any
+ * dependent properties in the template. Binding effects for bound
+ * templates are stored in a linked list on the instance so that
+ * templates can be efficiently stamped and unstamped.
+ *
+ * @param {!HTMLTemplateElement} template Template containing binding
+ * bindings
+ * @return {!TemplateInfo} Template metadata object
+ * @protected
+ */
+ static bindTemplate(template) {
+ return this.prototype._bindTemplate(template);
+ }
+
+ // -- binding ----------------------------------------------
+
+ /**
+ * Equivalent to static `bindTemplate` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * This method may be called on the prototype (for prototypical template
+ * binding, to avoid creating accessors every instance) once per prototype,
+ * and will be called with `runtimeBinding: true` by `_stampTemplate` to
+ * create and link an instance of the template metadata associated with a
+ * particular stamping.
+ *
+ * @param {!HTMLTemplateElement} template Template containing binding
+ * bindings
+ * @param {boolean=} instanceBinding When false (default), performs
+ * "prototypical" binding of the template and overwrites any previously
+ * bound template for the class. When true (as passed from
+ * `_stampTemplate`), the template info is instanced and linked into
+ * the list of bound templates.
+ * @return {!TemplateInfo} Template metadata object; for `runtimeBinding`,
+ * this is an instance of the prototypical template info
+ * @protected
+ */
+ _bindTemplate(template, instanceBinding) {
+ let templateInfo = this.constructor._parseTemplate(template);
+ let wasPreBound = this.__templateInfo == templateInfo;
+ // Optimization: since this is called twice for proto-bound templates,
+ // don't attempt to recreate accessors if this template was pre-bound
+ if (!wasPreBound) {
+ for (let prop in templateInfo.propertyEffects) {
+ this._createPropertyAccessor(prop);
+ }
+ }
+ if (instanceBinding) {
+ // For instance-time binding, create instance of template metadata
+ // and link into list of templates if necessary
+ templateInfo = /** @type {!TemplateInfo} */(Object.create(templateInfo));
+ templateInfo.wasPreBound = wasPreBound;
+ if (!wasPreBound && this.__templateInfo) {
+ let last = this.__templateInfoLast || this.__templateInfo;
+ this.__templateInfoLast = last.nextTemplateInfo = templateInfo;
+ templateInfo.previousTemplateInfo = last;
+ return templateInfo;
+ }
+ }
+ return this.__templateInfo = templateInfo;
+ }
+
+ /**
+ * Adds a property effect to the given template metadata, which is run
+ * at the "propagate" stage of `_propertiesChanged` when the template
+ * has been bound to the element via `_bindTemplate`.
+ *
+ * The `effect` object should match the format in `_addPropertyEffect`.
+ *
+ * @param {Object} templateInfo Template metadata to add effect to
+ * @param {string} prop Property that should trigger the effect
+ * @param {Object=} effect Effect metadata object
+ * @return {void}
+ * @protected
+ */
+ static _addTemplatePropertyEffect(templateInfo, prop, effect) {
+ let hostProps = templateInfo.hostProps = templateInfo.hostProps || {};
+ hostProps[prop] = true;
+ let effects = templateInfo.propertyEffects = templateInfo.propertyEffects || {};
+ let propEffects = effects[prop] = effects[prop] || [];
+ propEffects.push(effect);
+ }
+
+ /**
+ * Stamps the provided template and performs instance-time setup for
+ * Polymer template features, including data bindings, declarative event
+ * listeners, and the `this.$` map of `id`'s to nodes. A document fragment
+ * is returned containing the stamped DOM, ready for insertion into the
+ * DOM.
+ *
+ * This method may be called more than once; however note that due to
+ * `shadycss` polyfill limitations, only styles from templates prepared
+ * using `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped
+ * to the shadow root and support CSS custom properties), and note that
+ * `ShadyCSS.prepareTemplate` may only be called once per element. As such,
+ * any styles required by in runtime-stamped templates must be included
+ * in the main element template.
+ *
+ * @param {!HTMLTemplateElement} template Template to stamp
+ * @return {!StampedTemplate} Cloned template content
+ * @override
+ * @protected
+ */
+ _stampTemplate(template) {
+ // Ensures that created dom is `_enqueueClient`'d to this element so
+ // that it can be flushed on next call to `_flushProperties`
+ hostStack.beginHosting(this);
+ let dom = super._stampTemplate(template);
+ hostStack.endHosting(this);
+ let templateInfo = /** @type {!TemplateInfo} */(this._bindTemplate(template, true));
+ // Add template-instance-specific data to instanced templateInfo
+ templateInfo.nodeList = dom.nodeList;
+ // Capture child nodes to allow unstamping of non-prototypical templates
+ if (!templateInfo.wasPreBound) {
+ let nodes = templateInfo.childNodes = [];
+ for (let n=dom.firstChild; n; n=n.nextSibling) {
+ nodes.push(n);
+ }
+ }
+ dom.templateInfo = templateInfo;
+ // Setup compound storage, 2-way listeners, and dataHost for bindings
+ setupBindings(this, templateInfo);
+ // Flush properties into template nodes if already booted
+ if (this.__dataReady) {
+ runEffects(this, templateInfo.propertyEffects, this.__data, null,
+ false, templateInfo.nodeList);
+ }
+ return dom;
+ }
+
+ /**
+ * Removes and unbinds the nodes previously contained in the provided
+ * DocumentFragment returned from `_stampTemplate`.
+ *
+ * @param {!StampedTemplate} dom DocumentFragment previously returned
+ * from `_stampTemplate` associated with the nodes to be removed
+ * @return {void}
+ * @protected
+ */
+ _removeBoundDom(dom) {
+ // Unlink template info
+ let templateInfo = dom.templateInfo;
+ if (templateInfo.previousTemplateInfo) {
+ templateInfo.previousTemplateInfo.nextTemplateInfo =
+ templateInfo.nextTemplateInfo;
+ }
+ if (templateInfo.nextTemplateInfo) {
+ templateInfo.nextTemplateInfo.previousTemplateInfo =
+ templateInfo.previousTemplateInfo;
+ }
+ if (this.__templateInfoLast == templateInfo) {
+ this.__templateInfoLast = templateInfo.previousTemplateInfo;
+ }
+ templateInfo.previousTemplateInfo = templateInfo.nextTemplateInfo = null;
+ // Remove stamped nodes
+ let nodes = templateInfo.childNodes;
+ for (let i=0; i<nodes.length; i++) {
+ let node = nodes[i];
+ node.parentNode.removeChild(node);
+ }
+ }
+
+ /**
+ * Overrides default `TemplateStamp` implementation to add support for
+ * parsing bindings from `TextNode`'s' `textContent`. A `bindings`
+ * array is added to `nodeInfo` and populated with binding metadata
+ * with information capturing the binding target, and a `parts` array
+ * with one or more metadata objects capturing the source(s) of the
+ * binding.
+ *
+ * @override
+ * @param {Node} node Node to parse
+ * @param {TemplateInfo} templateInfo Template metadata for current template
+ * @param {NodeInfo} nodeInfo Node metadata for current template node
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ * @protected
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static _parseTemplateNode(node, templateInfo, nodeInfo) {
+ let noted = super._parseTemplateNode(node, templateInfo, nodeInfo);
+ if (node.nodeType === Node.TEXT_NODE) {
+ let parts = this._parseBindings(node.textContent, templateInfo);
+ if (parts) {
+ // Initialize the textContent with any literal parts
+ // NOTE: default to a space here so the textNode remains; some browsers
+ // (IE) omit an empty textNode following cloneNode/importNode.
+ node.textContent = literalFromParts(parts) || ' ';
+ addBinding(this, templateInfo, nodeInfo, 'text', 'textContent', parts);
+ noted = true;
+ }
+ }
+ return noted;
+ }
+
+ /**
+ * Overrides default `TemplateStamp` implementation to add support for
+ * parsing bindings from attributes. A `bindings`
+ * array is added to `nodeInfo` and populated with binding metadata
+ * with information capturing the binding target, and a `parts` array
+ * with one or more metadata objects capturing the source(s) of the
+ * binding.
+ *
+ * @override
+ * @param {Element} node Node to parse
+ * @param {TemplateInfo} templateInfo Template metadata for current template
+ * @param {NodeInfo} nodeInfo Node metadata for current template node
+ * @param {string} name Attribute name
+ * @param {string} value Attribute value
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ * @protected
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static _parseTemplateNodeAttribute(node, templateInfo, nodeInfo, name, value) {
+ let parts = this._parseBindings(value, templateInfo);
+ if (parts) {
+ // Attribute or property
+ let origName = name;
+ let kind = 'property';
+ // The only way we see a capital letter here is if the attr has
+ // a capital letter in it per spec. In this case, to make sure
+ // this binding works, we go ahead and make the binding to the attribute.
+ if (capitalAttributeRegex.test(name)) {
+ kind = 'attribute';
+ } else if (name[name.length-1] == '$') {
+ name = name.slice(0, -1);
+ kind = 'attribute';
+ }
+ // Initialize attribute bindings with any literal parts
+ let literal = literalFromParts(parts);
+ if (literal && kind == 'attribute') {
+ node.setAttribute(name, literal);
+ }
+ // Clear attribute before removing, since IE won't allow removing
+ // `value` attribute if it previously had a value (can't
+ // unconditionally set '' before removing since attributes with `$`
+ // can't be set using setAttribute)
+ if (node.localName === 'input' && origName === 'value') {
+ node.setAttribute(origName, '');
+ }
+ // Remove annotation
+ node.removeAttribute(origName);
+ // Case hackery: attributes are lower-case, but bind targets
+ // (properties) are case sensitive. Gambit is to map dash-case to
+ // camel-case: `foo-bar` becomes `fooBar`.
+ // Attribute bindings are excepted.
+ if (kind === 'property') {
+ name = Polymer.CaseMap.dashToCamelCase(name);
+ }
+ addBinding(this, templateInfo, nodeInfo, kind, name, parts, literal);
+ return true;
+ } else {
+ return super._parseTemplateNodeAttribute(node, templateInfo, nodeInfo, name, value);
+ }
+ }
+
+ /**
+ * Overrides default `TemplateStamp` implementation to add support for
+ * binding the properties that a nested template depends on to the template
+ * as `_host_<property>`.
+ *
+ * @override
+ * @param {Node} node Node to parse
+ * @param {TemplateInfo} templateInfo Template metadata for current template
+ * @param {NodeInfo} nodeInfo Node metadata for current template node
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ * @protected
+ * @suppress {missingProperties} Interfaces in closure do not inherit statics, but classes do
+ */
+ static _parseTemplateNestedTemplate(node, templateInfo, nodeInfo) {
+ let noted = super._parseTemplateNestedTemplate(node, templateInfo, nodeInfo);
+ // Merge host props into outer template and add bindings
+ let hostProps = nodeInfo.templateInfo.hostProps;
+ let mode = '{';
+ for (let source in hostProps) {
+ let parts = [{ mode, source, dependencies: [source] }];
+ addBinding(this, templateInfo, nodeInfo, 'property', '_host_' + source, parts);
+ }
+ return noted;
+ }
+
+ /**
+ * Called to parse text in a template (either attribute values or
+ * textContent) into binding metadata.
+ *
+ * Any overrides of this method should return an array of binding part
+ * metadata representing one or more bindings found in the provided text
+ * and any "literal" text in between. Any non-literal parts will be passed
+ * to `_evaluateBinding` when any dependencies change. The only required
+ * fields of each "part" in the returned array are as follows:
+ *
+ * - `dependencies` - Array containing trigger metadata for each property
+ * that should trigger the binding to update
+ * - `literal` - String containing text if the part represents a literal;
+ * in this case no `dependencies` are needed
+ *
+ * Additional metadata for use by `_evaluateBinding` may be provided in
+ * each part object as needed.
+ *
+ * The default implementation handles the following types of bindings
+ * (one or more may be intermixed with literal strings):
+ * - Property binding: `[[prop]]`
+ * - Path binding: `[[object.prop]]`
+ * - Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`
+ * - Two-way property or path bindings (supports negation):
+ * `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`
+ * - Inline computed method (supports negation):
+ * `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`
+ *
+ * @param {string} text Text to parse from attribute or textContent
+ * @param {Object} templateInfo Current template metadata
+ * @return {Array<!BindingPart>} Array of binding part metadata
+ * @protected
+ */
+ static _parseBindings(text, templateInfo) {
+ let parts = [];
+ let lastIndex = 0;
+ let m;
+ // Example: "literal1{{prop}}literal2[[!compute(foo,bar)]]final"
+ // Regex matches:
+ // Iteration 1: Iteration 2:
+ // m[1]: '{{' '[['
+ // m[2]: '' '!'
+ // m[3]: 'prop' 'compute(foo,bar)'
+ while ((m = bindingRegex.exec(text)) !== null) {
+ // Add literal part
+ if (m.index > lastIndex) {
+ parts.push({literal: text.slice(lastIndex, m.index)});
+ }
+ // Add binding part
+ let mode = m[1][0];
+ let negate = Boolean(m[2]);
+ let source = m[3].trim();
+ let customEvent = false, notifyEvent = '', colon = -1;
+ if (mode == '{' && (colon = source.indexOf('::')) > 0) {
+ notifyEvent = source.substring(colon + 2);
+ source = source.substring(0, colon);
+ customEvent = true;
+ }
+ let signature = parseMethod(source);
+ let dependencies = [];
+ if (signature) {
+ // Inline computed function
+ let {args, methodName} = signature;
+ for (let i=0; i<args.length; i++) {
+ let arg = args[i];
+ if (!arg.literal) {
+ dependencies.push(arg);
+ }
+ }
+ let dynamicFns = templateInfo.dynamicFns;
+ if (dynamicFns && dynamicFns[methodName] || signature.static) {
+ dependencies.push(methodName);
+ signature.dynamicFn = true;
+ }
+ } else {
+ // Property or path
+ dependencies.push(source);
+ }
+ parts.push({
+ source, mode, negate, customEvent, signature, dependencies,
+ event: notifyEvent
+ });
+ lastIndex = bindingRegex.lastIndex;
+ }
+ // Add a final literal part
+ if (lastIndex && lastIndex < text.length) {
+ let literal = text.substring(lastIndex);
+ if (literal) {
+ parts.push({
+ literal: literal
+ });
+ }
+ }
+ if (parts.length) {
+ return parts;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Called to evaluate a previously parsed binding part based on a set of
+ * one or more changed dependencies.
+ *
+ * @param {this} inst Element that should be used as scope for
+ * binding dependencies
+ * @param {BindingPart} part Binding part metadata
+ * @param {string} path Property/path that triggered this effect
+ * @param {Object} props Bag of current property changes
+ * @param {Object} oldProps Bag of previous values for changed properties
+ * @param {boolean} hasPaths True with `props` contains one or more paths
+ * @return {*} Value the binding part evaluated to
+ * @protected
+ */
+ static _evaluateBinding(inst, part, path, props, oldProps, hasPaths) {
+ let value;
+ if (part.signature) {
+ value = runMethodEffect(inst, path, props, oldProps, part.signature);
+ } else if (path != part.source) {
+ value = Polymer.Path.get(inst, part.source);
+ } else {
+ if (hasPaths && Polymer.Path.isPath(path)) {
+ value = Polymer.Path.get(inst, path);
+ } else {
+ value = inst.__data[path];
+ }
+ }
+ if (part.negate) {
+ value = !value;
+ }
+ return value;
+ }
+
+ }
+
+ // make a typing for closure :P
+ PropertyEffectsType = PropertyEffects;
+
+ return PropertyEffects;
+ });
+
+ /**
+ * Helper api for enqueuing client dom created by a host element.
+ *
+ * By default elements are flushed via `_flushProperties` when
+ * `connectedCallback` is called. Elements attach their client dom to
+ * themselves at `ready` time which results from this first flush.
+ * This provides an ordering guarantee that the client dom an element
+ * creates is flushed before the element itself (i.e. client `ready`
+ * fires before host `ready`).
+ *
+ * However, if `_flushProperties` is called *before* an element is connected,
+ * as for example `Templatize` does, this ordering guarantee cannot be
+ * satisfied because no elements are connected. (Note: Bound elements that
+ * receive data do become enqueued clients and are properly ordered but
+ * unbound elements are not.)
+ *
+ * To maintain the desired "client before host" ordering guarantee for this
+ * case we rely on the "host stack. Client nodes registers themselves with
+ * the creating host element when created. This ensures that all client dom
+ * is readied in the proper order, maintaining the desired guarantee.
+ *
+ * @private
+ */
+ let hostStack = {
+
+ stack: [],
+
+ /**
+ * @param {*} inst Instance to add to hostStack
+ * @return {void}
+ * @this {hostStack}
+ */
+ registerHost(inst) {
+ if (this.stack.length) {
+ let host = this.stack[this.stack.length-1];
+ host._enqueueClient(inst);
+ }
+ },
+
+ /**
+ * @param {*} inst Instance to begin hosting
+ * @return {void}
+ * @this {hostStack}
+ */
+ beginHosting(inst) {
+ this.stack.push(inst);
+ },
+
+ /**
+ * @param {*} inst Instance to end hosting
+ * @return {void}
+ * @this {hostStack}
+ */
+ endHosting(inst) {
+ let stackLen = this.stack.length;
+ if (stackLen && this.stack[stackLen-1] == inst) {
+ this.stack.pop();
+ }
+ }
+
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/template-stamp.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/template-stamp.html
new file mode 100644
index 00000000000..c6fbe947292
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/mixins/template-stamp.html
@@ -0,0 +1,491 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/mixin.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ // 1.x backwards-compatible auto-wrapper for template type extensions
+ // This is a clear layering violation and gives favored-nation status to
+ // dom-if and dom-repeat templates. This is a conceit we're choosing to keep
+ // a.) to ease 1.x backwards-compatibility due to loss of `is`, and
+ // b.) to maintain if/repeat capability in parser-constrained elements
+ // (e.g. table, select) in lieu of native CE type extensions without
+ // massive new invention in this space (e.g. directive system)
+ const templateExtensions = {
+ 'dom-if': true,
+ 'dom-repeat': true
+ };
+ function wrapTemplateExtension(node) {
+ let is = node.getAttribute('is');
+ if (is && templateExtensions[is]) {
+ let t = node;
+ t.removeAttribute('is');
+ node = t.ownerDocument.createElement(is);
+ t.parentNode.replaceChild(node, t);
+ node.appendChild(t);
+ while(t.attributes.length) {
+ node.setAttribute(t.attributes[0].name, t.attributes[0].value);
+ t.removeAttribute(t.attributes[0].name);
+ }
+ }
+ return node;
+ }
+
+ function findTemplateNode(root, nodeInfo) {
+ // recursively ascend tree until we hit root
+ let parent = nodeInfo.parentInfo && findTemplateNode(root, nodeInfo.parentInfo);
+ // unwind the stack, returning the indexed node at each level
+ if (parent) {
+ // note: marginally faster than indexing via childNodes
+ // (http://jsperf.com/childnodes-lookup)
+ for (let n=parent.firstChild, i=0; n; n=n.nextSibling) {
+ if (nodeInfo.parentIndex === i++) {
+ return n;
+ }
+ }
+ } else {
+ return root;
+ }
+ }
+
+ // construct `$` map (from id annotations)
+ function applyIdToMap(inst, map, node, nodeInfo) {
+ if (nodeInfo.id) {
+ map[nodeInfo.id] = node;
+ }
+ }
+
+ // install event listeners (from event annotations)
+ function applyEventListener(inst, node, nodeInfo) {
+ if (nodeInfo.events && nodeInfo.events.length) {
+ for (let j=0, e$=nodeInfo.events, e; (j<e$.length) && (e=e$[j]); j++) {
+ inst._addMethodEventListenerToNode(node, e.name, e.value, inst);
+ }
+ }
+ }
+
+ // push configuration references at configure time
+ function applyTemplateContent(inst, node, nodeInfo) {
+ if (nodeInfo.templateInfo) {
+ node._templateInfo = nodeInfo.templateInfo;
+ }
+ }
+
+ function createNodeEventHandler(context, eventName, methodName) {
+ // Instances can optionally have a _methodHost which allows redirecting where
+ // to find methods. Currently used by `templatize`.
+ context = context._methodHost || context;
+ let handler = function(e) {
+ if (context[methodName]) {
+ context[methodName](e, e.detail);
+ } else {
+ console.warn('listener method `' + methodName + '` not defined');
+ }
+ };
+ return handler;
+ }
+
+ /**
+ * Element mixin that provides basic template parsing and stamping, including
+ * the following template-related features for stamped templates:
+ *
+ * - Declarative event listeners (`on-eventname="listener"`)
+ * - Map of node id's to stamped node instances (`this.$.id`)
+ * - Nested template content caching/removal and re-installation (performance
+ * optimization)
+ *
+ * @mixinFunction
+ * @polymer
+ * @memberof Polymer
+ * @summary Element class mixin that provides basic template parsing and stamping
+ */
+ Polymer.TemplateStamp = Polymer.dedupingMixin(superClass => {
+
+ /**
+ * @polymer
+ * @mixinClass
+ * @implements {Polymer_TemplateStamp}
+ */
+ class TemplateStamp extends superClass {
+
+ /**
+ * Scans a template to produce template metadata.
+ *
+ * Template-specific metadata are stored in the object returned, and node-
+ * specific metadata are stored in objects in its flattened `nodeInfoList`
+ * array. Only nodes in the template that were parsed as nodes of
+ * interest contain an object in `nodeInfoList`. Each `nodeInfo` object
+ * contains an `index` (`childNodes` index in parent) and optionally
+ * `parent`, which points to node info of its parent (including its index).
+ *
+ * The template metadata object returned from this method has the following
+ * structure (many fields optional):
+ *
+ * ```js
+ * {
+ * // Flattened list of node metadata (for nodes that generated metadata)
+ * nodeInfoList: [
+ * {
+ * // `id` attribute for any nodes with id's for generating `$` map
+ * id: {string},
+ * // `on-event="handler"` metadata
+ * events: [
+ * {
+ * name: {string}, // event name
+ * value: {string}, // handler method name
+ * }, ...
+ * ],
+ * // Notes when the template contained a `<slot>` for shady DOM
+ * // optimization purposes
+ * hasInsertionPoint: {boolean},
+ * // For nested `<template>`` nodes, nested template metadata
+ * templateInfo: {object}, // nested template metadata
+ * // Metadata to allow efficient retrieval of instanced node
+ * // corresponding to this metadata
+ * parentInfo: {number}, // reference to parent nodeInfo>
+ * parentIndex: {number}, // index in parent's `childNodes` collection
+ * infoIndex: {number}, // index of this `nodeInfo` in `templateInfo.nodeInfoList`
+ * },
+ * ...
+ * ],
+ * // When true, the template had the `strip-whitespace` attribute
+ * // or was nested in a template with that setting
+ * stripWhitespace: {boolean},
+ * // For nested templates, nested template content is moved into
+ * // a document fragment stored here; this is an optimization to
+ * // avoid the cost of nested template cloning
+ * content: {DocumentFragment}
+ * }
+ * ```
+ *
+ * This method kicks off a recursive treewalk as follows:
+ *
+ * ```
+ * _parseTemplate <---------------------+
+ * _parseTemplateContent |
+ * _parseTemplateNode <------------|--+
+ * _parseTemplateNestedTemplate --+ |
+ * _parseTemplateChildNodes ---------+
+ * _parseTemplateNodeAttributes
+ * _parseTemplateNodeAttribute
+ *
+ * ```
+ *
+ * These methods may be overridden to add custom metadata about templates
+ * to either `templateInfo` or `nodeInfo`.
+ *
+ * Note that this method may be destructive to the template, in that
+ * e.g. event annotations may be removed after being noted in the
+ * template metadata.
+ *
+ * @param {!HTMLTemplateElement} template Template to parse
+ * @param {TemplateInfo=} outerTemplateInfo Template metadata from the outer
+ * template, for parsing nested templates
+ * @return {!TemplateInfo} Parsed template metadata
+ */
+ static _parseTemplate(template, outerTemplateInfo) {
+ // since a template may be re-used, memo-ize metadata
+ if (!template._templateInfo) {
+ let templateInfo = template._templateInfo = {};
+ templateInfo.nodeInfoList = [];
+ templateInfo.stripWhiteSpace =
+ (outerTemplateInfo && outerTemplateInfo.stripWhiteSpace) ||
+ template.hasAttribute('strip-whitespace');
+ this._parseTemplateContent(template, templateInfo, {parent: null});
+ }
+ return template._templateInfo;
+ }
+
+ static _parseTemplateContent(template, templateInfo, nodeInfo) {
+ return this._parseTemplateNode(template.content, templateInfo, nodeInfo);
+ }
+
+ /**
+ * Parses template node and adds template and node metadata based on
+ * the current node, and its `childNodes` and `attributes`.
+ *
+ * This method may be overridden to add custom node or template specific
+ * metadata based on this node.
+ *
+ * @param {Node} node Node to parse
+ * @param {!TemplateInfo} templateInfo Template metadata for current template
+ * @param {!NodeInfo} nodeInfo Node metadata for current template.
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ static _parseTemplateNode(node, templateInfo, nodeInfo) {
+ let noted;
+ let element = /** @type {Element} */(node);
+ if (element.localName == 'template' && !element.hasAttribute('preserve-content')) {
+ noted = this._parseTemplateNestedTemplate(element, templateInfo, nodeInfo) || noted;
+ } else if (element.localName === 'slot') {
+ // For ShadyDom optimization, indicating there is an insertion point
+ templateInfo.hasInsertionPoint = true;
+ }
+ if (element.firstChild) {
+ noted = this._parseTemplateChildNodes(element, templateInfo, nodeInfo) || noted;
+ }
+ if (element.hasAttributes && element.hasAttributes()) {
+ noted = this._parseTemplateNodeAttributes(element, templateInfo, nodeInfo) || noted;
+ }
+ return noted;
+ }
+
+ /**
+ * Parses template child nodes for the given root node.
+ *
+ * This method also wraps whitelisted legacy template extensions
+ * (`is="dom-if"` and `is="dom-repeat"`) with their equivalent element
+ * wrappers, collapses text nodes, and strips whitespace from the template
+ * if the `templateInfo.stripWhitespace` setting was provided.
+ *
+ * @param {Node} root Root node whose `childNodes` will be parsed
+ * @param {!TemplateInfo} templateInfo Template metadata for current template
+ * @param {!NodeInfo} nodeInfo Node metadata for current template.
+ * @return {void}
+ */
+ static _parseTemplateChildNodes(root, templateInfo, nodeInfo) {
+ if (root.localName === 'script' || root.localName === 'style') {
+ return;
+ }
+ for (let node=root.firstChild, parentIndex=0, next; node; node=next) {
+ // Wrap templates
+ if (node.localName == 'template') {
+ node = wrapTemplateExtension(node);
+ }
+ // collapse adjacent textNodes: fixes an IE issue that can cause
+ // text nodes to be inexplicably split =(
+ // note that root.normalize() should work but does not so we do this
+ // manually.
+ next = node.nextSibling;
+ if (node.nodeType === Node.TEXT_NODE) {
+ let /** Node */ n = next;
+ while (n && (n.nodeType === Node.TEXT_NODE)) {
+ node.textContent += n.textContent;
+ next = n.nextSibling;
+ root.removeChild(n);
+ n = next;
+ }
+ // optionally strip whitespace
+ if (templateInfo.stripWhiteSpace && !node.textContent.trim()) {
+ root.removeChild(node);
+ continue;
+ }
+ }
+ let childInfo = { parentIndex, parentInfo: nodeInfo };
+ if (this._parseTemplateNode(node, templateInfo, childInfo)) {
+ childInfo.infoIndex = templateInfo.nodeInfoList.push(/** @type {!NodeInfo} */(childInfo)) - 1;
+ }
+ // Increment if not removed
+ if (node.parentNode) {
+ parentIndex++;
+ }
+ }
+ }
+
+ /**
+ * Parses template content for the given nested `<template>`.
+ *
+ * Nested template info is stored as `templateInfo` in the current node's
+ * `nodeInfo`. `template.content` is removed and stored in `templateInfo`.
+ * It will then be the responsibility of the host to set it back to the
+ * template and for users stamping nested templates to use the
+ * `_contentForTemplate` method to retrieve the content for this template
+ * (an optimization to avoid the cost of cloning nested template content).
+ *
+ * @param {HTMLTemplateElement} node Node to parse (a <template>)
+ * @param {TemplateInfo} outerTemplateInfo Template metadata for current template
+ * that includes the template `node`
+ * @param {!NodeInfo} nodeInfo Node metadata for current template.
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ static _parseTemplateNestedTemplate(node, outerTemplateInfo, nodeInfo) {
+ let templateInfo = this._parseTemplate(node, outerTemplateInfo);
+ let content = templateInfo.content =
+ node.content.ownerDocument.createDocumentFragment();
+ content.appendChild(node.content);
+ nodeInfo.templateInfo = templateInfo;
+ return true;
+ }
+
+ /**
+ * Parses template node attributes and adds node metadata to `nodeInfo`
+ * for nodes of interest.
+ *
+ * @param {Element} node Node to parse
+ * @param {TemplateInfo} templateInfo Template metadata for current template
+ * @param {NodeInfo} nodeInfo Node metadata for current template.
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ static _parseTemplateNodeAttributes(node, templateInfo, nodeInfo) {
+ // Make copy of original attribute list, since the order may change
+ // as attributes are added and removed
+ let noted = false;
+ let attrs = Array.from(node.attributes);
+ for (let i=attrs.length-1, a; (a=attrs[i]); i--) {
+ noted = this._parseTemplateNodeAttribute(node, templateInfo, nodeInfo, a.name, a.value) || noted;
+ }
+ return noted;
+ }
+
+ /**
+ * Parses a single template node attribute and adds node metadata to
+ * `nodeInfo` for attributes of interest.
+ *
+ * This implementation adds metadata for `on-event="handler"` attributes
+ * and `id` attributes.
+ *
+ * @param {Element} node Node to parse
+ * @param {!TemplateInfo} templateInfo Template metadata for current template
+ * @param {!NodeInfo} nodeInfo Node metadata for current template.
+ * @param {string} name Attribute name
+ * @param {string} value Attribute value
+ * @return {boolean} `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ static _parseTemplateNodeAttribute(node, templateInfo, nodeInfo, name, value) {
+ // events (on-*)
+ if (name.slice(0, 3) === 'on-') {
+ node.removeAttribute(name);
+ nodeInfo.events = nodeInfo.events || [];
+ nodeInfo.events.push({
+ name: name.slice(3),
+ value
+ });
+ return true;
+ }
+ // static id
+ else if (name === 'id') {
+ nodeInfo.id = value;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns the `content` document fragment for a given template.
+ *
+ * For nested templates, Polymer performs an optimization to cache nested
+ * template content to avoid the cost of cloning deeply nested templates.
+ * This method retrieves the cached content for a given template.
+ *
+ * @param {HTMLTemplateElement} template Template to retrieve `content` for
+ * @return {DocumentFragment} Content fragment
+ */
+ static _contentForTemplate(template) {
+ let templateInfo = /** @type {HTMLTemplateElementWithInfo} */ (template)._templateInfo;
+ return (templateInfo && templateInfo.content) || template.content;
+ }
+
+ /**
+ * Clones the provided template content and returns a document fragment
+ * containing the cloned dom.
+ *
+ * The template is parsed (once and memoized) using this library's
+ * template parsing features, and provides the following value-added
+ * features:
+ * * Adds declarative event listeners for `on-event="handler"` attributes
+ * * Generates an "id map" for all nodes with id's under `$` on returned
+ * document fragment
+ * * Passes template info including `content` back to templates as
+ * `_templateInfo` (a performance optimization to avoid deep template
+ * cloning)
+ *
+ * Note that the memoized template parsing process is destructive to the
+ * template: attributes for bindings and declarative event listeners are
+ * removed after being noted in notes, and any nested `<template>.content`
+ * is removed and stored in notes as well.
+ *
+ * @param {!HTMLTemplateElement} template Template to stamp
+ * @return {!StampedTemplate} Cloned template content
+ */
+ _stampTemplate(template) {
+ // Polyfill support: bootstrap the template if it has not already been
+ if (template && !template.content &&
+ window.HTMLTemplateElement && HTMLTemplateElement.decorate) {
+ HTMLTemplateElement.decorate(template);
+ }
+ let templateInfo = this.constructor._parseTemplate(template);
+ let nodeInfo = templateInfo.nodeInfoList;
+ let content = templateInfo.content || template.content;
+ let dom = /** @type {DocumentFragment} */ (document.importNode(content, true));
+ // NOTE: ShadyDom optimization indicating there is an insertion point
+ dom.__noInsertionPoint = !templateInfo.hasInsertionPoint;
+ let nodes = dom.nodeList = new Array(nodeInfo.length);
+ dom.$ = {};
+ for (let i=0, l=nodeInfo.length, info; (i<l) && (info=nodeInfo[i]); i++) {
+ let node = nodes[i] = findTemplateNode(dom, info);
+ applyIdToMap(this, dom.$, node, info);
+ applyTemplateContent(this, node, info);
+ applyEventListener(this, node, info);
+ }
+ dom = /** @type {!StampedTemplate} */(dom); // eslint-disable-line no-self-assign
+ return dom;
+ }
+
+ /**
+ * Adds an event listener by method name for the event provided.
+ *
+ * This method generates a handler function that looks up the method
+ * name at handling time.
+ *
+ * @param {!Node} node Node to add listener on
+ * @param {string} eventName Name of event
+ * @param {string} methodName Name of method
+ * @param {*=} context Context the method will be called on (defaults
+ * to `node`)
+ * @return {Function} Generated handler function
+ */
+ _addMethodEventListenerToNode(node, eventName, methodName, context) {
+ context = context || node;
+ let handler = createNodeEventHandler(context, eventName, methodName);
+ this._addEventListenerToNode(node, eventName, handler);
+ return handler;
+ }
+
+ /**
+ * Override point for adding custom or simulated event handling.
+ *
+ * @param {!Node} node Node to add event listener to
+ * @param {string} eventName Name of event
+ * @param {function(!Event):void} handler Listener function to add
+ * @return {void}
+ */
+ _addEventListenerToNode(node, eventName, handler) {
+ node.addEventListener(eventName, handler);
+ }
+
+ /**
+ * Override point for adding custom or simulated event handling.
+ *
+ * @param {Node} node Node to remove event listener from
+ * @param {string} eventName Name of event
+ * @param {function(!Event):void} handler Listener function to remove
+ * @return {void}
+ */
+ _removeEventListenerFromNode(node, eventName, handler) {
+ node.removeEventListener(eventName, handler);
+ }
+
+ }
+
+ return TemplateStamp;
+
+ });
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/array-splice.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/array-splice.html
new file mode 100644
index 00000000000..43420d47113
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/array-splice.html
@@ -0,0 +1,316 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+<script>
+(function() {
+
+ 'use strict';
+
+ function newSplice(index, removed, addedCount) {
+ return {
+ index: index,
+ removed: removed,
+ addedCount: addedCount
+ };
+ }
+
+ const EDIT_LEAVE = 0;
+ const EDIT_UPDATE = 1;
+ const EDIT_ADD = 2;
+ const EDIT_DELETE = 3;
+
+ // Note: This function is *based* on the computation of the Levenshtein
+ // "edit" distance. The one change is that "updates" are treated as two
+ // edits - not one. With Array splices, an update is really a delete
+ // followed by an add. By retaining this, we optimize for "keeping" the
+ // maximum array items in the original array. For example:
+ //
+ // 'xxxx123' -> '123yyyy'
+ //
+ // With 1-edit updates, the shortest path would be just to update all seven
+ // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This
+ // leaves the substring '123' intact.
+ function calcEditDistances(current, currentStart, currentEnd,
+ old, oldStart, oldEnd) {
+ // "Deletion" columns
+ let rowCount = oldEnd - oldStart + 1;
+ let columnCount = currentEnd - currentStart + 1;
+ let distances = new Array(rowCount);
+
+ // "Addition" rows. Initialize null column.
+ for (let i = 0; i < rowCount; i++) {
+ distances[i] = new Array(columnCount);
+ distances[i][0] = i;
+ }
+
+ // Initialize null row
+ for (let j = 0; j < columnCount; j++)
+ distances[0][j] = j;
+
+ for (let i = 1; i < rowCount; i++) {
+ for (let j = 1; j < columnCount; j++) {
+ if (equals(current[currentStart + j - 1], old[oldStart + i - 1]))
+ distances[i][j] = distances[i - 1][j - 1];
+ else {
+ let north = distances[i - 1][j] + 1;
+ let west = distances[i][j - 1] + 1;
+ distances[i][j] = north < west ? north : west;
+ }
+ }
+ }
+
+ return distances;
+ }
+
+ // This starts at the final weight, and walks "backward" by finding
+ // the minimum previous weight recursively until the origin of the weight
+ // matrix.
+ function spliceOperationsFromEditDistances(distances) {
+ let i = distances.length - 1;
+ let j = distances[0].length - 1;
+ let current = distances[i][j];
+ let edits = [];
+ while (i > 0 || j > 0) {
+ if (i == 0) {
+ edits.push(EDIT_ADD);
+ j--;
+ continue;
+ }
+ if (j == 0) {
+ edits.push(EDIT_DELETE);
+ i--;
+ continue;
+ }
+ let northWest = distances[i - 1][j - 1];
+ let west = distances[i - 1][j];
+ let north = distances[i][j - 1];
+
+ let min;
+ if (west < north)
+ min = west < northWest ? west : northWest;
+ else
+ min = north < northWest ? north : northWest;
+
+ if (min == northWest) {
+ if (northWest == current) {
+ edits.push(EDIT_LEAVE);
+ } else {
+ edits.push(EDIT_UPDATE);
+ current = northWest;
+ }
+ i--;
+ j--;
+ } else if (min == west) {
+ edits.push(EDIT_DELETE);
+ i--;
+ current = west;
+ } else {
+ edits.push(EDIT_ADD);
+ j--;
+ current = north;
+ }
+ }
+
+ edits.reverse();
+ return edits;
+ }
+
+ /**
+ * Splice Projection functions:
+ *
+ * A splice map is a representation of how a previous array of items
+ * was transformed into a new array of items. Conceptually it is a list of
+ * tuples of
+ *
+ * <index, removed, addedCount>
+ *
+ * which are kept in ascending index order of. The tuple represents that at
+ * the |index|, |removed| sequence of items were removed, and counting forward
+ * from |index|, |addedCount| items were added.
+ */
+
+ /**
+ * Lacking individual splice mutation information, the minimal set of
+ * splices can be synthesized given the previous state and final state of an
+ * array. The basic approach is to calculate the edit distance matrix and
+ * choose the shortest path through it.
+ *
+ * Complexity: O(l * p)
+ * l: The length of the current array
+ * p: The length of the old array
+ *
+ * @param {!Array} current The current "changed" array for which to
+ * calculate splices.
+ * @param {number} currentStart Starting index in the `current` array for
+ * which splices are calculated.
+ * @param {number} currentEnd Ending index in the `current` array for
+ * which splices are calculated.
+ * @param {!Array} old The original "unchanged" array to compare `current`
+ * against to determine splices.
+ * @param {number} oldStart Starting index in the `old` array for
+ * which splices are calculated.
+ * @param {number} oldEnd Ending index in the `old` array for
+ * which splices are calculated.
+ * @return {!Array} Returns an array of splice record objects. Each of these
+ * contains: `index` the location where the splice occurred; `removed`
+ * the array of removed items from this location; `addedCount` the number
+ * of items added at this location.
+ */
+ function calcSplices(current, currentStart, currentEnd,
+ old, oldStart, oldEnd) {
+ let prefixCount = 0;
+ let suffixCount = 0;
+ let splice;
+
+ let minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
+ if (currentStart == 0 && oldStart == 0)
+ prefixCount = sharedPrefix(current, old, minLength);
+
+ if (currentEnd == current.length && oldEnd == old.length)
+ suffixCount = sharedSuffix(current, old, minLength - prefixCount);
+
+ currentStart += prefixCount;
+ oldStart += prefixCount;
+ currentEnd -= suffixCount;
+ oldEnd -= suffixCount;
+
+ if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)
+ return [];
+
+ if (currentStart == currentEnd) {
+ splice = newSplice(currentStart, [], 0);
+ while (oldStart < oldEnd)
+ splice.removed.push(old[oldStart++]);
+
+ return [ splice ];
+ } else if (oldStart == oldEnd)
+ return [ newSplice(currentStart, [], currentEnd - currentStart) ];
+
+ let ops = spliceOperationsFromEditDistances(
+ calcEditDistances(current, currentStart, currentEnd,
+ old, oldStart, oldEnd));
+
+ splice = undefined;
+ let splices = [];
+ let index = currentStart;
+ let oldIndex = oldStart;
+ for (let i = 0; i < ops.length; i++) {
+ switch(ops[i]) {
+ case EDIT_LEAVE:
+ if (splice) {
+ splices.push(splice);
+ splice = undefined;
+ }
+
+ index++;
+ oldIndex++;
+ break;
+ case EDIT_UPDATE:
+ if (!splice)
+ splice = newSplice(index, [], 0);
+
+ splice.addedCount++;
+ index++;
+
+ splice.removed.push(old[oldIndex]);
+ oldIndex++;
+ break;
+ case EDIT_ADD:
+ if (!splice)
+ splice = newSplice(index, [], 0);
+
+ splice.addedCount++;
+ index++;
+ break;
+ case EDIT_DELETE:
+ if (!splice)
+ splice = newSplice(index, [], 0);
+
+ splice.removed.push(old[oldIndex]);
+ oldIndex++;
+ break;
+ }
+ }
+
+ if (splice) {
+ splices.push(splice);
+ }
+ return splices;
+ }
+
+ function sharedPrefix(current, old, searchLength) {
+ for (let i = 0; i < searchLength; i++)
+ if (!equals(current[i], old[i]))
+ return i;
+ return searchLength;
+ }
+
+ function sharedSuffix(current, old, searchLength) {
+ let index1 = current.length;
+ let index2 = old.length;
+ let count = 0;
+ while (count < searchLength && equals(current[--index1], old[--index2]))
+ count++;
+
+ return count;
+ }
+
+ function calculateSplices(current, previous) {
+ return calcSplices(current, 0, current.length, previous, 0,
+ previous.length);
+ }
+
+ function equals(currentValue, previousValue) {
+ return currentValue === previousValue;
+ }
+
+ /**
+ * @namespace
+ * @memberof Polymer
+ * @summary Module that provides utilities for diffing arrays.
+ */
+ Polymer.ArraySplice = {
+ /**
+ * Returns an array of splice records indicating the minimum edits required
+ * to transform the `previous` array into the `current` array.
+ *
+ * Splice records are ordered by index and contain the following fields:
+ * - `index`: index where edit started
+ * - `removed`: array of removed items from this index
+ * - `addedCount`: number of items added at this index
+ *
+ * This function is based on the Levenshtein "minimum edit distance"
+ * algorithm. Note that updates are treated as removal followed by addition.
+ *
+ * The worst-case time complexity of this algorithm is `O(l * p)`
+ * l: The length of the current array
+ * p: The length of the previous array
+ *
+ * However, the worst-case complexity is reduced by an `O(n)` optimization
+ * to detect any shared prefix & suffix between the two arrays and only
+ * perform the more expensive minimum edit distance calculation over the
+ * non-shared portions of the arrays.
+ *
+ * @function
+ * @memberof Polymer.ArraySplice
+ * @param {!Array} current The "changed" array for which splices will be
+ * calculated.
+ * @param {!Array} previous The "unchanged" original array to compare
+ * `current` against to determine the splices.
+ * @return {!Array} Returns an array of splice record objects. Each of these
+ * contains: `index` the location where the splice occurred; `removed`
+ * the array of removed items from this location; `addedCount` the number
+ * of items added at this location.
+ */
+ calculateSplices
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/async.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/async.html
new file mode 100644
index 00000000000..4ddd961c6fc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/async.html
@@ -0,0 +1,216 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ // Microtask implemented using Mutation Observer
+ let microtaskCurrHandle = 0;
+ let microtaskLastHandle = 0;
+ let microtaskCallbacks = [];
+ let microtaskNodeContent = 0;
+ let microtaskNode = document.createTextNode('');
+ new window.MutationObserver(microtaskFlush).observe(microtaskNode, {characterData: true});
+
+ function microtaskFlush() {
+ const len = microtaskCallbacks.length;
+ for (let i = 0; i < len; i++) {
+ let cb = microtaskCallbacks[i];
+ if (cb) {
+ try {
+ cb();
+ } catch (e) {
+ setTimeout(() => { throw e; });
+ }
+ }
+ }
+ microtaskCallbacks.splice(0, len);
+ microtaskLastHandle += len;
+ }
+
+ /**
+ * Module that provides a number of strategies for enqueuing asynchronous
+ * tasks. Each sub-module provides a standard `run(fn)` interface that returns a
+ * handle, and a `cancel(handle)` interface for canceling async tasks before
+ * they run.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module that provides a number of strategies for enqueuing asynchronous
+ * tasks.
+ */
+ Polymer.Async = {
+
+ /**
+ * Async interface wrapper around `setTimeout`.
+ *
+ * @namespace
+ * @memberof Polymer.Async
+ * @summary Async interface wrapper around `setTimeout`.
+ */
+ timeOut: {
+ /**
+ * Returns a sub-module with the async interface providing the provided
+ * delay.
+ *
+ * @memberof Polymer.Async.timeOut
+ * @param {number=} delay Time to wait before calling callbacks in ms
+ * @return {!AsyncInterface} An async timeout interface
+ */
+ after(delay) {
+ return {
+ run(fn) { return window.setTimeout(fn, delay); },
+ cancel(handle) {
+ window.clearTimeout(handle);
+ }
+ };
+ },
+ /**
+ * Enqueues a function called in the next task.
+ *
+ * @memberof Polymer.Async.timeOut
+ * @param {!Function} fn Callback to run
+ * @param {number=} delay Delay in milliseconds
+ * @return {number} Handle used for canceling task
+ */
+ run(fn, delay) {
+ return window.setTimeout(fn, delay);
+ },
+ /**
+ * Cancels a previously enqueued `timeOut` callback.
+ *
+ * @memberof Polymer.Async.timeOut
+ * @param {number} handle Handle returned from `run` of callback to cancel
+ * @return {void}
+ */
+ cancel(handle) {
+ window.clearTimeout(handle);
+ }
+ },
+
+ /**
+ * Async interface wrapper around `requestAnimationFrame`.
+ *
+ * @namespace
+ * @memberof Polymer.Async
+ * @summary Async interface wrapper around `requestAnimationFrame`.
+ */
+ animationFrame: {
+ /**
+ * Enqueues a function called at `requestAnimationFrame` timing.
+ *
+ * @memberof Polymer.Async.animationFrame
+ * @param {function(number):void} fn Callback to run
+ * @return {number} Handle used for canceling task
+ */
+ run(fn) {
+ return window.requestAnimationFrame(fn);
+ },
+ /**
+ * Cancels a previously enqueued `animationFrame` callback.
+ *
+ * @memberof Polymer.Async.animationFrame
+ * @param {number} handle Handle returned from `run` of callback to cancel
+ * @return {void}
+ */
+ cancel(handle) {
+ window.cancelAnimationFrame(handle);
+ }
+ },
+
+ /**
+ * Async interface wrapper around `requestIdleCallback`. Falls back to
+ * `setTimeout` on browsers that do not support `requestIdleCallback`.
+ *
+ * @namespace
+ * @memberof Polymer.Async
+ * @summary Async interface wrapper around `requestIdleCallback`.
+ */
+ idlePeriod: {
+ /**
+ * Enqueues a function called at `requestIdleCallback` timing.
+ *
+ * @memberof Polymer.Async.idlePeriod
+ * @param {function(!IdleDeadline):void} fn Callback to run
+ * @return {number} Handle used for canceling task
+ */
+ run(fn) {
+ return window.requestIdleCallback ?
+ window.requestIdleCallback(fn) :
+ window.setTimeout(fn, 16);
+ },
+ /**
+ * Cancels a previously enqueued `idlePeriod` callback.
+ *
+ * @memberof Polymer.Async.idlePeriod
+ * @param {number} handle Handle returned from `run` of callback to cancel
+ * @return {void}
+ */
+ cancel(handle) {
+ window.cancelIdleCallback ?
+ window.cancelIdleCallback(handle) :
+ window.clearTimeout(handle);
+ }
+ },
+
+ /**
+ * Async interface for enqueuing callbacks that run at microtask timing.
+ *
+ * Note that microtask timing is achieved via a single `MutationObserver`,
+ * and thus callbacks enqueued with this API will all run in a single
+ * batch, and not interleaved with other microtasks such as promises.
+ * Promises are avoided as an implementation choice for the time being
+ * due to Safari bugs that cause Promises to lack microtask guarantees.
+ *
+ * @namespace
+ * @memberof Polymer.Async
+ * @summary Async interface for enqueuing callbacks that run at microtask
+ * timing.
+ */
+ microTask: {
+
+ /**
+ * Enqueues a function called at microtask timing.
+ *
+ * @memberof Polymer.Async.microTask
+ * @param {!Function=} callback Callback to run
+ * @return {number} Handle used for canceling task
+ */
+ run(callback) {
+ microtaskNode.textContent = microtaskNodeContent++;
+ microtaskCallbacks.push(callback);
+ return microtaskCurrHandle++;
+ },
+
+ /**
+ * Cancels a previously enqueued `microTask` callback.
+ *
+ * @memberof Polymer.Async.microTask
+ * @param {number} handle Handle returned from `run` of callback to cancel
+ * @return {void}
+ */
+ cancel(handle) {
+ const idx = handle - microtaskLastHandle;
+ if (idx >= 0) {
+ if (!microtaskCallbacks[idx]) {
+ throw new Error('invalid async handle: ' + handle);
+ }
+ microtaskCallbacks[idx] = null;
+ }
+ }
+
+ }
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/boot.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/boot.html
new file mode 100644
index 00000000000..0426caa6562
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/boot.html
@@ -0,0 +1,65 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<script>
+(function() {
+ 'use strict';
+
+ const userPolymer = window.Polymer;
+
+ /**
+ * @namespace Polymer
+ * @summary Polymer is a lightweight library built on top of the web
+ * standards-based Web Components API's, and makes it easy to build your
+ * own custom HTML elements.
+ * @param {!PolymerInit} info Prototype for the custom element. It must contain
+ * an `is` property to specify the element name. Other properties populate
+ * the element prototype. The `properties`, `observers`, `hostAttributes`,
+ * and `listeners` properties are processed to create element features.
+ * @return {!Object} Returns a custom element class for the given provided
+ * prototype `info` object. The name of the element if given by `info.is`.
+ */
+ window.Polymer = function(info) {
+ return window.Polymer._polymerFn(info);
+ };
+
+ // support user settings on the Polymer object
+ if (userPolymer) {
+ Object.assign(Polymer, userPolymer);
+ }
+
+ // To be plugged by legacy implementation if loaded
+ /* eslint-disable valid-jsdoc */
+ /**
+ * @param {!PolymerInit} info Prototype for the custom element. It must contain
+ * an `is` property to specify the element name. Other properties populate
+ * the element prototype. The `properties`, `observers`, `hostAttributes`,
+ * and `listeners` properties are processed to create element features.
+ * @return {!Object} Returns a custom element class for the given provided
+ * prototype `info` object. The name of the element if given by `info.is`.
+ */
+ window.Polymer._polymerFn = function(info) { // eslint-disable-line no-unused-vars
+ throw new Error('Load polymer.html to use the Polymer() function.');
+ };
+ /* eslint-enable */
+
+ window.Polymer.version = '2.6.0';
+
+ /* eslint-disable no-unused-vars */
+ /*
+ When using Closure Compiler, JSCompiler_renameProperty(property, object) is replaced by the munged name for object[property]
+ We cannot alias this function, so we have to use a small shim that has the same behavior when not compiling.
+ */
+ window.JSCompiler_renameProperty = function(prop, obj) {
+ return prop;
+ };
+ /* eslint-enable */
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/case-map.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/case-map.html
new file mode 100644
index 00000000000..b1b44cdafe2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/case-map.html
@@ -0,0 +1,64 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+<script>
+(function() {
+ 'use strict';
+
+ const caseMap = {};
+ const DASH_TO_CAMEL = /-[a-z]/g;
+ const CAMEL_TO_DASH = /([A-Z])/g;
+
+ /**
+ * Module with utilities for converting between "dash-case" and "camelCase"
+ * identifiers.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module that provides utilities for converting between "dash-case"
+ * and "camelCase".
+ */
+ const CaseMap = {
+
+ /**
+ * Converts "dash-case" identifier (e.g. `foo-bar-baz`) to "camelCase"
+ * (e.g. `fooBarBaz`).
+ *
+ * @memberof Polymer.CaseMap
+ * @param {string} dash Dash-case identifier
+ * @return {string} Camel-case representation of the identifier
+ */
+ dashToCamelCase(dash) {
+ return caseMap[dash] || (
+ caseMap[dash] = dash.indexOf('-') < 0 ? dash : dash.replace(DASH_TO_CAMEL,
+ (m) => m[1].toUpperCase()
+ )
+ );
+ },
+
+ /**
+ * Converts "camelCase" identifier (e.g. `fooBarBaz`) to "dash-case"
+ * (e.g. `foo-bar-baz`).
+ *
+ * @memberof Polymer.CaseMap
+ * @param {string} camel Camel-case identifier
+ * @return {string} Dash-case representation of the identifier
+ */
+ camelToDashCase(camel) {
+ return caseMap[camel] || (
+ caseMap[camel] = camel.replace(CAMEL_TO_DASH, '-$1').toLowerCase()
+ );
+ }
+
+ };
+
+ Polymer.CaseMap = CaseMap;
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/debounce.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/debounce.html
new file mode 100644
index 00000000000..8344af328f8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/debounce.html
@@ -0,0 +1,118 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+<link rel="import" href="mixin.html">
+<link rel="import" href="async.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * @summary Collapse multiple callbacks into one invocation after a timer.
+ * @memberof Polymer
+ */
+ class Debouncer {
+ constructor() {
+ this._asyncModule = null;
+ this._callback = null;
+ this._timer = null;
+ }
+ /**
+ * Sets the scheduler; that is, a module with the Async interface,
+ * a callback and optional arguments to be passed to the run function
+ * from the async module.
+ *
+ * @param {!AsyncInterface} asyncModule Object with Async interface.
+ * @param {function()} callback Callback to run.
+ * @return {void}
+ */
+ setConfig(asyncModule, callback) {
+ this._asyncModule = asyncModule;
+ this._callback = callback;
+ this._timer = this._asyncModule.run(() => {
+ this._timer = null;
+ this._callback();
+ });
+ }
+ /**
+ * Cancels an active debouncer and returns a reference to itself.
+ *
+ * @return {void}
+ */
+ cancel() {
+ if (this.isActive()) {
+ this._asyncModule.cancel(this._timer);
+ this._timer = null;
+ }
+ }
+ /**
+ * Flushes an active debouncer and returns a reference to itself.
+ *
+ * @return {void}
+ */
+ flush() {
+ if (this.isActive()) {
+ this.cancel();
+ this._callback();
+ }
+ }
+ /**
+ * Returns true if the debouncer is active.
+ *
+ * @return {boolean} True if active.
+ */
+ isActive() {
+ return this._timer != null;
+ }
+ /**
+ * Creates a debouncer if no debouncer is passed as a parameter
+ * or it cancels an active debouncer otherwise. The following
+ * example shows how a debouncer can be called multiple times within a
+ * microtask and "debounced" such that the provided callback function is
+ * called once. Add this method to a custom element:
+ *
+ * _debounceWork() {
+ * this._debounceJob = Polymer.Debouncer.debounce(this._debounceJob,
+ * Polymer.Async.microTask, () => {
+ * this._doWork();
+ * });
+ * }
+ *
+ * If the `_debounceWork` method is called multiple times within the same
+ * microtask, the `_doWork` function will be called only once at the next
+ * microtask checkpoint.
+ *
+ * Note: In testing it is often convenient to avoid asynchrony. To accomplish
+ * this with a debouncer, you can use `Polymer.enqueueDebouncer` and
+ * `Polymer.flush`. For example, extend the above example by adding
+ * `Polymer.enqueueDebouncer(this._debounceJob)` at the end of the
+ * `_debounceWork` method. Then in a test, call `Polymer.flush` to ensure
+ * the debouncer has completed.
+ *
+ * @param {Debouncer?} debouncer Debouncer object.
+ * @param {!AsyncInterface} asyncModule Object with Async interface
+ * @param {function()} callback Callback to run.
+ * @return {!Debouncer} Returns a debouncer object.
+ */
+ static debounce(debouncer, asyncModule, callback) {
+ if (debouncer instanceof Debouncer) {
+ debouncer.cancel();
+ } else {
+ debouncer = new Debouncer();
+ }
+ debouncer.setConfig(asyncModule, callback);
+ return debouncer;
+ }
+ }
+
+ Polymer.Debouncer = Debouncer;
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flattened-nodes-observer.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flattened-nodes-observer.html
new file mode 100644
index 00000000000..2273b1604f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flattened-nodes-observer.html
@@ -0,0 +1,312 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/array-splice.html">
+<link rel="import" href="../utils/async.html">
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * Returns true if `node` is a slot element
+ * @param {Node} node Node to test.
+ * @return {boolean} Returns true if the given `node` is a slot
+ * @private
+ */
+ function isSlot(node) {
+ return (node.localName === 'slot');
+ }
+
+ /**
+ * Class that listens for changes (additions or removals) to
+ * "flattened nodes" on a given `node`. The list of flattened nodes consists
+ * of a node's children and, for any children that are `<slot>` elements,
+ * the expanded flattened list of `assignedNodes`.
+ * For example, if the observed node has children `<a></a><slot></slot><b></b>`
+ * and the `<slot>` has one `<div>` assigned to it, then the flattened
+ * nodes list is `<a></a><div></div><b></b>`. If the `<slot>` has other
+ * `<slot>` elements assigned to it, these are flattened as well.
+ *
+ * The provided `callback` is called whenever any change to this list
+ * of flattened nodes occurs, where an addition or removal of a node is
+ * considered a change. The `callback` is called with one argument, an object
+ * containing an array of any `addedNodes` and `removedNodes`.
+ *
+ * Note: the callback is called asynchronous to any changes
+ * at a microtask checkpoint. This is because observation is performed using
+ * `MutationObserver` and the `<slot>` element's `slotchange` event which
+ * are asynchronous.
+ *
+ * An example:
+ * ```js
+ * class TestSelfObserve extends Polymer.Element {
+ * static get is() { return 'test-self-observe';}
+ * connectedCallback() {
+ * super.connectedCallback();
+ * this._observer = new Polymer.FlattenedNodesObserver(this, (info) => {
+ * this.info = info;
+ * });
+ * }
+ * disconnectedCallback() {
+ * super.disconnectedCallback();
+ * this._observer.disconnect();
+ * }
+ * }
+ * customElements.define(TestSelfObserve.is, TestSelfObserve);
+ * ```
+ *
+ * @memberof Polymer
+ * @summary Class that listens for changes (additions or removals) to
+ * "flattened nodes" on a given `node`.
+ */
+ class FlattenedNodesObserver {
+
+ /**
+ * Returns the list of flattened nodes for the given `node`.
+ * This list consists of a node's children and, for any children
+ * that are `<slot>` elements, the expanded flattened list of `assignedNodes`.
+ * For example, if the observed node has children `<a></a><slot></slot><b></b>`
+ * and the `<slot>` has one `<div>` assigned to it, then the flattened
+ * nodes list is `<a></a><div></div><b></b>`. If the `<slot>` has other
+ * `<slot>` elements assigned to it, these are flattened as well.
+ *
+ * @param {HTMLElement|HTMLSlotElement} node The node for which to return the list of flattened nodes.
+ * @return {Array} The list of flattened nodes for the given `node`.
+ */
+ static getFlattenedNodes(node) {
+ if (isSlot(node)) {
+ node = /** @type {HTMLSlotElement} */(node); // eslint-disable-line no-self-assign
+ return node.assignedNodes({flatten: true});
+ } else {
+ return Array.from(node.childNodes).map((node) => {
+ if (isSlot(node)) {
+ node = /** @type {HTMLSlotElement} */(node); // eslint-disable-line no-self-assign
+ return node.assignedNodes({flatten: true});
+ } else {
+ return [node];
+ }
+ }).reduce((a, b) => a.concat(b), []);
+ }
+ }
+
+ /**
+ * @param {Element} target Node on which to listen for changes.
+ * @param {?function(!Element, { target: !Element, addedNodes: !Array<!Element>, removedNodes: !Array<!Element> }):void} callback Function called when there are additions
+ * or removals from the target's list of flattened nodes.
+ */
+ constructor(target, callback) {
+ /**
+ * @type {MutationObserver}
+ * @private
+ */
+ this._shadyChildrenObserver = null;
+ /**
+ * @type {MutationObserver}
+ * @private
+ */
+ this._nativeChildrenObserver = null;
+ this._connected = false;
+ /**
+ * @type {Element}
+ * @private
+ */
+ this._target = target;
+ this.callback = callback;
+ this._effectiveNodes = [];
+ this._observer = null;
+ this._scheduled = false;
+ /**
+ * @type {function()}
+ * @private
+ */
+ this._boundSchedule = () => {
+ this._schedule();
+ };
+ this.connect();
+ this._schedule();
+ }
+
+ /**
+ * Activates an observer. This method is automatically called when
+ * a `FlattenedNodesObserver` is created. It should only be called to
+ * re-activate an observer that has been deactivated via the `disconnect` method.
+ *
+ * @return {void}
+ */
+ connect() {
+ if (isSlot(this._target)) {
+ this._listenSlots([this._target]);
+ } else if (this._target.children) {
+ this._listenSlots(this._target.children);
+ if (window.ShadyDOM) {
+ this._shadyChildrenObserver =
+ ShadyDOM.observeChildren(this._target, (mutations) => {
+ this._processMutations(mutations);
+ });
+ } else {
+ this._nativeChildrenObserver =
+ new MutationObserver((mutations) => {
+ this._processMutations(mutations);
+ });
+ this._nativeChildrenObserver.observe(this._target, {childList: true});
+ }
+ }
+ this._connected = true;
+ }
+
+ /**
+ * Deactivates the flattened nodes observer. After calling this method
+ * the observer callback will not be called when changes to flattened nodes
+ * occur. The `connect` method may be subsequently called to reactivate
+ * the observer.
+ *
+ * @return {void}
+ */
+ disconnect() {
+ if (isSlot(this._target)) {
+ this._unlistenSlots([this._target]);
+ } else if (this._target.children) {
+ this._unlistenSlots(this._target.children);
+ if (window.ShadyDOM && this._shadyChildrenObserver) {
+ ShadyDOM.unobserveChildren(this._shadyChildrenObserver);
+ this._shadyChildrenObserver = null;
+ } else if (this._nativeChildrenObserver) {
+ this._nativeChildrenObserver.disconnect();
+ this._nativeChildrenObserver = null;
+ }
+ }
+ this._connected = false;
+ }
+
+ /**
+ * @return {void}
+ * @private
+ */
+ _schedule() {
+ if (!this._scheduled) {
+ this._scheduled = true;
+ Polymer.Async.microTask.run(() => this.flush());
+ }
+ }
+
+ /**
+ * @param {Array<MutationRecord>} mutations Mutations signaled by the mutation observer
+ * @return {void}
+ * @private
+ */
+ _processMutations(mutations) {
+ this._processSlotMutations(mutations);
+ this.flush();
+ }
+
+ /**
+ * @param {Array<MutationRecord>} mutations Mutations signaled by the mutation observer
+ * @return {void}
+ * @private
+ */
+ _processSlotMutations(mutations) {
+ if (mutations) {
+ for (let i=0; i < mutations.length; i++) {
+ let mutation = mutations[i];
+ if (mutation.addedNodes) {
+ this._listenSlots(mutation.addedNodes);
+ }
+ if (mutation.removedNodes) {
+ this._unlistenSlots(mutation.removedNodes);
+ }
+ }
+ }
+ }
+
+ /**
+ * Flushes the observer causing any pending changes to be immediately
+ * delivered the observer callback. By default these changes are delivered
+ * asynchronously at the next microtask checkpoint.
+ *
+ * @return {boolean} Returns true if any pending changes caused the observer
+ * callback to run.
+ */
+ flush() {
+ if (!this._connected) {
+ return false;
+ }
+ if (window.ShadyDOM) {
+ ShadyDOM.flush();
+ }
+ if (this._nativeChildrenObserver) {
+ this._processSlotMutations(this._nativeChildrenObserver.takeRecords());
+ } else if (this._shadyChildrenObserver) {
+ this._processSlotMutations(this._shadyChildrenObserver.takeRecords());
+ }
+ this._scheduled = false;
+ let info = {
+ target: this._target,
+ addedNodes: [],
+ removedNodes: []
+ };
+ let newNodes = this.constructor.getFlattenedNodes(this._target);
+ let splices = Polymer.ArraySplice.calculateSplices(newNodes,
+ this._effectiveNodes);
+ // process removals
+ for (let i=0, s; (i<splices.length) && (s=splices[i]); i++) {
+ for (let j=0, n; (j < s.removed.length) && (n=s.removed[j]); j++) {
+ info.removedNodes.push(n);
+ }
+ }
+ // process adds
+ for (let i=0, s; (i<splices.length) && (s=splices[i]); i++) {
+ for (let j=s.index; j < s.index + s.addedCount; j++) {
+ info.addedNodes.push(newNodes[j]);
+ }
+ }
+ // update cache
+ this._effectiveNodes = newNodes;
+ let didFlush = false;
+ if (info.addedNodes.length || info.removedNodes.length) {
+ didFlush = true;
+ this.callback.call(this._target, info);
+ }
+ return didFlush;
+ }
+
+ /**
+ * @param {!Array<Element|Node>|!NodeList<Node>} nodeList Nodes that could change
+ * @return {void}
+ * @private
+ */
+ _listenSlots(nodeList) {
+ for (let i=0; i < nodeList.length; i++) {
+ let n = nodeList[i];
+ if (isSlot(n)) {
+ n.addEventListener('slotchange', this._boundSchedule);
+ }
+ }
+ }
+
+ /**
+ * @param {!Array<Element|Node>|!NodeList<Node>} nodeList Nodes that could change
+ * @return {void}
+ * @private
+ */
+ _unlistenSlots(nodeList) {
+ for (let i=0; i < nodeList.length; i++) {
+ let n = nodeList[i];
+ if (isSlot(n)) {
+ n.removeEventListener('slotchange', this._boundSchedule);
+ }
+ }
+ }
+
+ }
+
+ Polymer.FlattenedNodesObserver = FlattenedNodesObserver;
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flush.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flush.html
new file mode 100644
index 00000000000..3feaad61661
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/flush.html
@@ -0,0 +1,62 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+<script>
+(function() {
+ 'use strict';
+
+ let debouncerQueue = [];
+
+ /**
+ * Adds a `Polymer.Debouncer` to a list of globally flushable tasks.
+ *
+ * @memberof Polymer
+ * @param {!Polymer.Debouncer} debouncer Debouncer to enqueue
+ * @return {void}
+ */
+ Polymer.enqueueDebouncer = function(debouncer) {
+ debouncerQueue.push(debouncer);
+ };
+
+ function flushDebouncers() {
+ const didFlush = Boolean(debouncerQueue.length);
+ while (debouncerQueue.length) {
+ try {
+ debouncerQueue.shift().flush();
+ } catch(e) {
+ setTimeout(() => {
+ throw e;
+ });
+ }
+ }
+ return didFlush;
+ }
+
+ /**
+ * Forces several classes of asynchronously queued tasks to flush:
+ * - Debouncers added via `enqueueDebouncer`
+ * - ShadyDOM distribution
+ *
+ * @memberof Polymer
+ * @return {void}
+ */
+ Polymer.flush = function() {
+ let shadyDOM, debouncers;
+ do {
+ shadyDOM = window.ShadyDOM && ShadyDOM.flush();
+ if (window.ShadyCSS && window.ShadyCSS.ScopingShim) {
+ window.ShadyCSS.ScopingShim.flush();
+ }
+ debouncers = flushDebouncers();
+ } while (shadyDOM || debouncers);
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/gestures.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/gestures.html
new file mode 100644
index 00000000000..2a05daa462e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/gestures.html
@@ -0,0 +1,1093 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+<link rel="import" href="async.html">
+<link rel="import" href="debounce.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ // detect native touch action support
+ let HAS_NATIVE_TA = typeof document.head.style.touchAction === 'string';
+ let GESTURE_KEY = '__polymerGestures';
+ let HANDLED_OBJ = '__polymerGesturesHandled';
+ let TOUCH_ACTION = '__polymerGesturesTouchAction';
+ // radius for tap and track
+ let TAP_DISTANCE = 25;
+ let TRACK_DISTANCE = 5;
+ // number of last N track positions to keep
+ let TRACK_LENGTH = 2;
+
+ // Disabling "mouse" handlers for 2500ms is enough
+ let MOUSE_TIMEOUT = 2500;
+ let MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'click'];
+ // an array of bitmask values for mapping MouseEvent.which to MouseEvent.buttons
+ let MOUSE_WHICH_TO_BUTTONS = [0, 1, 4, 2];
+ let MOUSE_HAS_BUTTONS = (function() {
+ try {
+ return new MouseEvent('test', {buttons: 1}).buttons === 1;
+ } catch (e) {
+ return false;
+ }
+ })();
+
+ /**
+ * @param {string} name Possible mouse event name
+ * @return {boolean} true if mouse event, false if not
+ */
+ function isMouseEvent(name) {
+ return MOUSE_EVENTS.indexOf(name) > -1;
+ }
+
+ /* eslint no-empty: ["error", { "allowEmptyCatch": true }] */
+ // check for passive event listeners
+ let SUPPORTS_PASSIVE = false;
+ (function() {
+ try {
+ let opts = Object.defineProperty({}, 'passive', {get() {SUPPORTS_PASSIVE = true;}});
+ window.addEventListener('test', null, opts);
+ window.removeEventListener('test', null, opts);
+ } catch(e) {}
+ })();
+
+ /**
+ * Generate settings for event listeners, dependant on `Polymer.passiveTouchGestures`
+ *
+ * @param {string} eventName Event name to determine if `{passive}` option is needed
+ * @return {{passive: boolean} | undefined} Options to use for addEventListener and removeEventListener
+ */
+ function PASSIVE_TOUCH(eventName) {
+ if (isMouseEvent(eventName) || eventName === 'touchend') {
+ return;
+ }
+ if (HAS_NATIVE_TA && SUPPORTS_PASSIVE && Polymer.passiveTouchGestures) {
+ return {passive: true};
+ } else {
+ return;
+ }
+ }
+
+ // Check for touch-only devices
+ let IS_TOUCH_ONLY = navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);
+
+ let GestureRecognizer = function(){}; // eslint-disable-line no-unused-vars
+ /** @type {function(): void} */
+ GestureRecognizer.prototype.reset;
+ /** @type {function(MouseEvent): void | undefined} */
+ GestureRecognizer.prototype.mousedown;
+ /** @type {(function(MouseEvent): void | undefined)} */
+ GestureRecognizer.prototype.mousemove;
+ /** @type {(function(MouseEvent): void | undefined)} */
+ GestureRecognizer.prototype.mouseup;
+ /** @type {(function(TouchEvent): void | undefined)} */
+ GestureRecognizer.prototype.touchstart;
+ /** @type {(function(TouchEvent): void | undefined)} */
+ GestureRecognizer.prototype.touchmove;
+ /** @type {(function(TouchEvent): void | undefined)} */
+ GestureRecognizer.prototype.touchend;
+ /** @type {(function(MouseEvent): void | undefined)} */
+ GestureRecognizer.prototype.click;
+
+ // keep track of any labels hit by the mouseCanceller
+ /** @type {!Array<!HTMLLabelElement>} */
+ const clickedLabels = [];
+
+ /** @type {!Object<boolean>} */
+ const labellable = {
+ 'button': true,
+ 'input': true,
+ 'keygen': true,
+ 'meter': true,
+ 'output': true,
+ 'textarea': true,
+ 'progress': true,
+ 'select': true
+ };
+
+ /**
+ * @param {HTMLElement} el Element to check labelling status
+ * @return {boolean} element can have labels
+ */
+ function canBeLabelled(el) {
+ return labellable[el.localName] || false;
+ }
+
+ /**
+ * @param {HTMLElement} el Element that may be labelled.
+ * @return {!Array<!HTMLLabelElement>} Relevant label for `el`
+ */
+ function matchingLabels(el) {
+ let labels = [...(/** @type {HTMLInputElement} */(el).labels || [])];
+ // IE doesn't have `labels` and Safari doesn't populate `labels`
+ // if element is in a shadowroot.
+ // In this instance, finding the non-ancestor labels is enough,
+ // as the mouseCancellor code will handle ancstor labels
+ if (!labels.length) {
+ labels = [];
+ let root = el.getRootNode();
+ // if there is an id on `el`, check for all labels with a matching `for` attribute
+ if (el.id) {
+ let matching = root.querySelectorAll(`label[for = ${el.id}]`);
+ for (let i = 0; i < matching.length; i++) {
+ labels.push(/** @type {!HTMLLabelElement} */(matching[i]));
+ }
+ }
+ }
+ return labels;
+ }
+
+ // touch will make synthetic mouse events
+ // `preventDefault` on touchend will cancel them,
+ // but this breaks `<input>` focus and link clicks
+ // disable mouse handlers for MOUSE_TIMEOUT ms after
+ // a touchend to ignore synthetic mouse events
+ let mouseCanceller = function(mouseEvent) {
+ // Check for sourceCapabilities, used to distinguish synthetic events
+ // if mouseEvent did not come from a device that fires touch events,
+ // it was made by a real mouse and should be counted
+ // http://wicg.github.io/InputDeviceCapabilities/#dom-inputdevicecapabilities-firestouchevents
+ let sc = mouseEvent.sourceCapabilities;
+ if (sc && !sc.firesTouchEvents) {
+ return;
+ }
+ // skip synthetic mouse events
+ mouseEvent[HANDLED_OBJ] = {skip: true};
+ // disable "ghost clicks"
+ if (mouseEvent.type === 'click') {
+ let clickFromLabel = false;
+ let path = mouseEvent.composedPath && mouseEvent.composedPath();
+ if (path) {
+ for (let i = 0; i < path.length; i++) {
+ if (path[i].nodeType === Node.ELEMENT_NODE) {
+ if (path[i].localName === 'label') {
+ clickedLabels.push(path[i]);
+ } else if (canBeLabelled(path[i])) {
+ let ownerLabels = matchingLabels(path[i]);
+ // check if one of the clicked labels is labelling this element
+ for (let j = 0; j < ownerLabels.length; j++) {
+ clickFromLabel = clickFromLabel || clickedLabels.indexOf(ownerLabels[j]) > -1;
+ }
+ }
+ }
+ if (path[i] === POINTERSTATE.mouse.target) {
+ return;
+ }
+ }
+ }
+ // if one of the clicked labels was labelling the target element,
+ // this is not a ghost click
+ if (clickFromLabel) {
+ return;
+ }
+ mouseEvent.preventDefault();
+ mouseEvent.stopPropagation();
+ }
+ };
+
+ /**
+ * @param {boolean=} setup True to add, false to remove.
+ * @return {void}
+ */
+ function setupTeardownMouseCanceller(setup) {
+ let events = IS_TOUCH_ONLY ? ['click'] : MOUSE_EVENTS;
+ for (let i = 0, en; i < events.length; i++) {
+ en = events[i];
+ if (setup) {
+ // reset clickLabels array
+ clickedLabels.length = 0;
+ document.addEventListener(en, mouseCanceller, true);
+ } else {
+ document.removeEventListener(en, mouseCanceller, true);
+ }
+ }
+ }
+
+ function ignoreMouse(e) {
+ if (!POINTERSTATE.mouse.mouseIgnoreJob) {
+ setupTeardownMouseCanceller(true);
+ }
+ let unset = function() {
+ setupTeardownMouseCanceller();
+ POINTERSTATE.mouse.target = null;
+ POINTERSTATE.mouse.mouseIgnoreJob = null;
+ };
+ POINTERSTATE.mouse.target = e.composedPath()[0];
+ POINTERSTATE.mouse.mouseIgnoreJob = Polymer.Debouncer.debounce(
+ POINTERSTATE.mouse.mouseIgnoreJob
+ , Polymer.Async.timeOut.after(MOUSE_TIMEOUT)
+ , unset);
+ }
+
+ /**
+ * @param {MouseEvent} ev event to test for left mouse button down
+ * @return {boolean} has left mouse button down
+ */
+ function hasLeftMouseButton(ev) {
+ let type = ev.type;
+ // exit early if the event is not a mouse event
+ if (!isMouseEvent(type)) {
+ return false;
+ }
+ // ev.button is not reliable for mousemove (0 is overloaded as both left button and no buttons)
+ // instead we use ev.buttons (bitmask of buttons) or fall back to ev.which (deprecated, 0 for no buttons, 1 for left button)
+ if (type === 'mousemove') {
+ // allow undefined for testing events
+ let buttons = ev.buttons === undefined ? 1 : ev.buttons;
+ if ((ev instanceof window.MouseEvent) && !MOUSE_HAS_BUTTONS) {
+ buttons = MOUSE_WHICH_TO_BUTTONS[ev.which] || 0;
+ }
+ // buttons is a bitmask, check that the left button bit is set (1)
+ return Boolean(buttons & 1);
+ } else {
+ // allow undefined for testing events
+ let button = ev.button === undefined ? 0 : ev.button;
+ // ev.button is 0 in mousedown/mouseup/click for left button activation
+ return button === 0;
+ }
+ }
+
+ function isSyntheticClick(ev) {
+ if (ev.type === 'click') {
+ // ev.detail is 0 for HTMLElement.click in most browsers
+ if (ev.detail === 0) {
+ return true;
+ }
+ // in the worst case, check that the x/y position of the click is within
+ // the bounding box of the target of the event
+ // Thanks IE 10 >:(
+ let t = Gestures._findOriginalTarget(ev);
+ // make sure the target of the event is an element so we can use getBoundingClientRect,
+ // if not, just assume it is a synthetic click
+ if (!t.nodeType || /** @type {Element} */(t).nodeType !== Node.ELEMENT_NODE) {
+ return true;
+ }
+ let bcr = /** @type {Element} */(t).getBoundingClientRect();
+ // use page x/y to account for scrolling
+ let x = ev.pageX, y = ev.pageY;
+ // ev is a synthetic click if the position is outside the bounding box of the target
+ return !((x >= bcr.left && x <= bcr.right) && (y >= bcr.top && y <= bcr.bottom));
+ }
+ return false;
+ }
+
+ let POINTERSTATE = {
+ mouse: {
+ target: null,
+ mouseIgnoreJob: null
+ },
+ touch: {
+ x: 0,
+ y: 0,
+ id: -1,
+ scrollDecided: false
+ }
+ };
+
+ function firstTouchAction(ev) {
+ let ta = 'auto';
+ let path = ev.composedPath && ev.composedPath();
+ if (path) {
+ for (let i = 0, n; i < path.length; i++) {
+ n = path[i];
+ if (n[TOUCH_ACTION]) {
+ ta = n[TOUCH_ACTION];
+ break;
+ }
+ }
+ }
+ return ta;
+ }
+
+ function trackDocument(stateObj, movefn, upfn) {
+ stateObj.movefn = movefn;
+ stateObj.upfn = upfn;
+ document.addEventListener('mousemove', movefn);
+ document.addEventListener('mouseup', upfn);
+ }
+
+ function untrackDocument(stateObj) {
+ document.removeEventListener('mousemove', stateObj.movefn);
+ document.removeEventListener('mouseup', stateObj.upfn);
+ stateObj.movefn = null;
+ stateObj.upfn = null;
+ }
+
+ // use a document-wide touchend listener to start the ghost-click prevention mechanism
+ // Use passive event listeners, if supported, to not affect scrolling performance
+ document.addEventListener('touchend', ignoreMouse, SUPPORTS_PASSIVE ? {passive: true} : false);
+
+ /**
+ * Module for adding listeners to a node for the following normalized
+ * cross-platform "gesture" events:
+ * - `down` - mouse or touch went down
+ * - `up` - mouse or touch went up
+ * - `tap` - mouse click or finger tap
+ * - `track` - mouse drag or touch move
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module for adding cross-platform gesture event listeners.
+ */
+ const Gestures = {
+ gestures: {},
+ recognizers: [],
+
+ /**
+ * Finds the element rendered on the screen at the provided coordinates.
+ *
+ * Similar to `document.elementFromPoint`, but pierces through
+ * shadow roots.
+ *
+ * @memberof Polymer.Gestures
+ * @param {number} x Horizontal pixel coordinate
+ * @param {number} y Vertical pixel coordinate
+ * @return {Element} Returns the deepest shadowRoot inclusive element
+ * found at the screen position given.
+ */
+ deepTargetFind: function(x, y) {
+ let node = document.elementFromPoint(x, y);
+ let next = node;
+ // this code path is only taken when native ShadowDOM is used
+ // if there is a shadowroot, it may have a node at x/y
+ // if there is not a shadowroot, exit the loop
+ while (next && next.shadowRoot && !window.ShadyDOM) {
+ // if there is a node at x/y in the shadowroot, look deeper
+ let oldNext = next;
+ next = next.shadowRoot.elementFromPoint(x, y);
+ // on Safari, elementFromPoint may return the shadowRoot host
+ if (oldNext === next) {
+ break;
+ }
+ if (next) {
+ node = next;
+ }
+ }
+ return node;
+ },
+ /**
+ * a cheaper check than ev.composedPath()[0];
+ *
+ * @private
+ * @param {Event} ev Event.
+ * @return {EventTarget} Returns the event target.
+ */
+ _findOriginalTarget: function(ev) {
+ // shadowdom
+ if (ev.composedPath) {
+ const targets = /** @type {!Array<!EventTarget>} */(ev.composedPath());
+ // It shouldn't be, but sometimes targets is empty (window on Safari).
+ return targets.length > 0 ? targets[0] : ev.target;
+ }
+ // shadydom
+ return ev.target;
+ },
+
+ /**
+ * @private
+ * @param {Event} ev Event.
+ * @return {void}
+ */
+ _handleNative: function(ev) {
+ let handled;
+ let type = ev.type;
+ let node = ev.currentTarget;
+ let gobj = node[GESTURE_KEY];
+ if (!gobj) {
+ return;
+ }
+ let gs = gobj[type];
+ if (!gs) {
+ return;
+ }
+ if (!ev[HANDLED_OBJ]) {
+ ev[HANDLED_OBJ] = {};
+ if (type.slice(0, 5) === 'touch') {
+ ev = /** @type {TouchEvent} */(ev); // eslint-disable-line no-self-assign
+ let t = ev.changedTouches[0];
+ if (type === 'touchstart') {
+ // only handle the first finger
+ if (ev.touches.length === 1) {
+ POINTERSTATE.touch.id = t.identifier;
+ }
+ }
+ if (POINTERSTATE.touch.id !== t.identifier) {
+ return;
+ }
+ if (!HAS_NATIVE_TA) {
+ if (type === 'touchstart' || type === 'touchmove') {
+ Gestures._handleTouchAction(ev);
+ }
+ }
+ }
+ }
+ handled = ev[HANDLED_OBJ];
+ // used to ignore synthetic mouse events
+ if (handled.skip) {
+ return;
+ }
+ // reset recognizer state
+ for (let i = 0, r; i < Gestures.recognizers.length; i++) {
+ r = Gestures.recognizers[i];
+ if (gs[r.name] && !handled[r.name]) {
+ if (r.flow && r.flow.start.indexOf(ev.type) > -1 && r.reset) {
+ r.reset();
+ }
+ }
+ }
+ // enforce gesture recognizer order
+ for (let i = 0, r; i < Gestures.recognizers.length; i++) {
+ r = Gestures.recognizers[i];
+ if (gs[r.name] && !handled[r.name]) {
+ handled[r.name] = true;
+ r[type](ev);
+ }
+ }
+ },
+
+ /**
+ * @private
+ * @param {TouchEvent} ev Event.
+ * @return {void}
+ */
+ _handleTouchAction: function(ev) {
+ let t = ev.changedTouches[0];
+ let type = ev.type;
+ if (type === 'touchstart') {
+ POINTERSTATE.touch.x = t.clientX;
+ POINTERSTATE.touch.y = t.clientY;
+ POINTERSTATE.touch.scrollDecided = false;
+ } else if (type === 'touchmove') {
+ if (POINTERSTATE.touch.scrollDecided) {
+ return;
+ }
+ POINTERSTATE.touch.scrollDecided = true;
+ let ta = firstTouchAction(ev);
+ let prevent = false;
+ let dx = Math.abs(POINTERSTATE.touch.x - t.clientX);
+ let dy = Math.abs(POINTERSTATE.touch.y - t.clientY);
+ if (!ev.cancelable) {
+ // scrolling is happening
+ } else if (ta === 'none') {
+ prevent = true;
+ } else if (ta === 'pan-x') {
+ prevent = dy > dx;
+ } else if (ta === 'pan-y') {
+ prevent = dx > dy;
+ }
+ if (prevent) {
+ ev.preventDefault();
+ } else {
+ Gestures.prevent('track');
+ }
+ }
+ },
+
+ /**
+ * Adds an event listener to a node for the given gesture type.
+ *
+ * @memberof Polymer.Gestures
+ * @param {!Node} node Node to add listener on
+ * @param {string} evType Gesture type: `down`, `up`, `track`, or `tap`
+ * @param {!function(!Event):void} handler Event listener function to call
+ * @return {boolean} Returns true if a gesture event listener was added.
+ * @this {Gestures}
+ */
+ addListener: function(node, evType, handler) {
+ if (this.gestures[evType]) {
+ this._add(node, evType, handler);
+ return true;
+ }
+ return false;
+ },
+
+ /**
+ * Removes an event listener from a node for the given gesture type.
+ *
+ * @memberof Polymer.Gestures
+ * @param {!Node} node Node to remove listener from
+ * @param {string} evType Gesture type: `down`, `up`, `track`, or `tap`
+ * @param {!function(!Event):void} handler Event listener function previously passed to
+ * `addListener`.
+ * @return {boolean} Returns true if a gesture event listener was removed.
+ * @this {Gestures}
+ */
+ removeListener: function(node, evType, handler) {
+ if (this.gestures[evType]) {
+ this._remove(node, evType, handler);
+ return true;
+ }
+ return false;
+ },
+
+ /**
+ * automate the event listeners for the native events
+ *
+ * @private
+ * @param {!HTMLElement} node Node on which to add the event.
+ * @param {string} evType Event type to add.
+ * @param {function(!Event)} handler Event handler function.
+ * @return {void}
+ * @this {Gestures}
+ */
+ _add: function(node, evType, handler) {
+ let recognizer = this.gestures[evType];
+ let deps = recognizer.deps;
+ let name = recognizer.name;
+ let gobj = node[GESTURE_KEY];
+ if (!gobj) {
+ node[GESTURE_KEY] = gobj = {};
+ }
+ for (let i = 0, dep, gd; i < deps.length; i++) {
+ dep = deps[i];
+ // don't add mouse handlers on iOS because they cause gray selection overlays
+ if (IS_TOUCH_ONLY && isMouseEvent(dep) && dep !== 'click') {
+ continue;
+ }
+ gd = gobj[dep];
+ if (!gd) {
+ gobj[dep] = gd = {_count: 0};
+ }
+ if (gd._count === 0) {
+ node.addEventListener(dep, this._handleNative, PASSIVE_TOUCH(dep));
+ }
+ gd[name] = (gd[name] || 0) + 1;
+ gd._count = (gd._count || 0) + 1;
+ }
+ node.addEventListener(evType, handler);
+ if (recognizer.touchAction) {
+ this.setTouchAction(node, recognizer.touchAction);
+ }
+ },
+
+ /**
+ * automate event listener removal for native events
+ *
+ * @private
+ * @param {!HTMLElement} node Node on which to remove the event.
+ * @param {string} evType Event type to remove.
+ * @param {function(Event?)} handler Event handler function.
+ * @return {void}
+ * @this {Gestures}
+ */
+ _remove: function(node, evType, handler) {
+ let recognizer = this.gestures[evType];
+ let deps = recognizer.deps;
+ let name = recognizer.name;
+ let gobj = node[GESTURE_KEY];
+ if (gobj) {
+ for (let i = 0, dep, gd; i < deps.length; i++) {
+ dep = deps[i];
+ gd = gobj[dep];
+ if (gd && gd[name]) {
+ gd[name] = (gd[name] || 1) - 1;
+ gd._count = (gd._count || 1) - 1;
+ if (gd._count === 0) {
+ node.removeEventListener(dep, this._handleNative, PASSIVE_TOUCH(dep));
+ }
+ }
+ }
+ }
+ node.removeEventListener(evType, handler);
+ },
+
+ /**
+ * Registers a new gesture event recognizer for adding new custom
+ * gesture event types.
+ *
+ * @memberof Polymer.Gestures
+ * @param {!GestureRecognizer} recog Gesture recognizer descriptor
+ * @return {void}
+ * @this {Gestures}
+ */
+ register: function(recog) {
+ this.recognizers.push(recog);
+ for (let i = 0; i < recog.emits.length; i++) {
+ this.gestures[recog.emits[i]] = recog;
+ }
+ },
+
+ /**
+ * @private
+ * @param {string} evName Event name.
+ * @return {Object} Returns the gesture for the given event name.
+ * @this {Gestures}
+ */
+ _findRecognizerByEvent: function(evName) {
+ for (let i = 0, r; i < this.recognizers.length; i++) {
+ r = this.recognizers[i];
+ for (let j = 0, n; j < r.emits.length; j++) {
+ n = r.emits[j];
+ if (n === evName) {
+ return r;
+ }
+ }
+ }
+ return null;
+ },
+
+ /**
+ * Sets scrolling direction on node.
+ *
+ * This value is checked on first move, thus it should be called prior to
+ * adding event listeners.
+ *
+ * @memberof Polymer.Gestures
+ * @param {!Element} node Node to set touch action setting on
+ * @param {string} value Touch action value
+ * @return {void}
+ */
+ setTouchAction: function(node, value) {
+ if (HAS_NATIVE_TA) {
+ // NOTE: add touchAction async so that events can be added in
+ // custom element constructors. Otherwise we run afoul of custom
+ // elements restriction against settings attributes (style) in the
+ // constructor.
+ Polymer.Async.microTask.run(() => {
+ node.style.touchAction = value;
+ });
+ }
+ node[TOUCH_ACTION] = value;
+ },
+
+ /**
+ * Dispatches an event on the `target` element of `type` with the given
+ * `detail`.
+ * @private
+ * @param {!EventTarget} target The element on which to fire an event.
+ * @param {string} type The type of event to fire.
+ * @param {!Object=} detail The detail object to populate on the event.
+ * @return {void}
+ */
+ _fire: function(target, type, detail) {
+ let ev = new Event(type, { bubbles: true, cancelable: true, composed: true });
+ ev.detail = detail;
+ target.dispatchEvent(ev);
+ // forward `preventDefault` in a clean way
+ if (ev.defaultPrevented) {
+ let preventer = detail.preventer || detail.sourceEvent;
+ if (preventer && preventer.preventDefault) {
+ preventer.preventDefault();
+ }
+ }
+ },
+
+ /**
+ * Prevents the dispatch and default action of the given event name.
+ *
+ * @memberof Polymer.Gestures
+ * @param {string} evName Event name.
+ * @return {void}
+ * @this {Gestures}
+ */
+ prevent: function(evName) {
+ let recognizer = this._findRecognizerByEvent(evName);
+ if (recognizer.info) {
+ recognizer.info.prevent = true;
+ }
+ },
+
+ /**
+ * Reset the 2500ms timeout on processing mouse input after detecting touch input.
+ *
+ * Touch inputs create synthesized mouse inputs anywhere from 0 to 2000ms after the touch.
+ * This method should only be called during testing with simulated touch inputs.
+ * Calling this method in production may cause duplicate taps or other Gestures.
+ *
+ * @memberof Polymer.Gestures
+ * @return {void}
+ */
+ resetMouseCanceller: function() {
+ if (POINTERSTATE.mouse.mouseIgnoreJob) {
+ POINTERSTATE.mouse.mouseIgnoreJob.flush();
+ }
+ }
+ };
+
+ /* eslint-disable valid-jsdoc */
+
+ Gestures.register({
+ name: 'downup',
+ deps: ['mousedown', 'touchstart', 'touchend'],
+ flow: {
+ start: ['mousedown', 'touchstart'],
+ end: ['mouseup', 'touchend']
+ },
+ emits: ['down', 'up'],
+
+ info: {
+ movefn: null,
+ upfn: null
+ },
+
+ /**
+ * @this {GestureRecognizer}
+ * @return {void}
+ */
+ reset: function() {
+ untrackDocument(this.info);
+ },
+
+ /**
+ * @this {GestureRecognizer}
+ * @param {MouseEvent} e
+ * @return {void}
+ */
+ mousedown: function(e) {
+ if (!hasLeftMouseButton(e)) {
+ return;
+ }
+ let t = Gestures._findOriginalTarget(e);
+ let self = this;
+ let movefn = function movefn(e) {
+ if (!hasLeftMouseButton(e)) {
+ self._fire('up', t, e);
+ untrackDocument(self.info);
+ }
+ };
+ let upfn = function upfn(e) {
+ if (hasLeftMouseButton(e)) {
+ self._fire('up', t, e);
+ }
+ untrackDocument(self.info);
+ };
+ trackDocument(this.info, movefn, upfn);
+ this._fire('down', t, e);
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchstart: function(e) {
+ this._fire('down', Gestures._findOriginalTarget(e), e.changedTouches[0], e);
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchend: function(e) {
+ this._fire('up', Gestures._findOriginalTarget(e), e.changedTouches[0], e);
+ },
+ /**
+ * @param {string} type
+ * @param {!EventTarget} target
+ * @param {Event} event
+ * @param {Function} preventer
+ * @return {void}
+ */
+ _fire: function(type, target, event, preventer) {
+ Gestures._fire(target, type, {
+ x: event.clientX,
+ y: event.clientY,
+ sourceEvent: event,
+ preventer: preventer,
+ prevent: function(e) {
+ return Gestures.prevent(e);
+ }
+ });
+ }
+ });
+
+ Gestures.register({
+ name: 'track',
+ touchAction: 'none',
+ deps: ['mousedown', 'touchstart', 'touchmove', 'touchend'],
+ flow: {
+ start: ['mousedown', 'touchstart'],
+ end: ['mouseup', 'touchend']
+ },
+ emits: ['track'],
+
+ info: {
+ x: 0,
+ y: 0,
+ state: 'start',
+ started: false,
+ moves: [],
+ /** @this {GestureRecognizer} */
+ addMove: function(move) {
+ if (this.moves.length > TRACK_LENGTH) {
+ this.moves.shift();
+ }
+ this.moves.push(move);
+ },
+ movefn: null,
+ upfn: null,
+ prevent: false
+ },
+
+ /**
+ * @this {GestureRecognizer}
+ * @return {void}
+ */
+ reset: function() {
+ this.info.state = 'start';
+ this.info.started = false;
+ this.info.moves = [];
+ this.info.x = 0;
+ this.info.y = 0;
+ this.info.prevent = false;
+ untrackDocument(this.info);
+ },
+
+ /**
+ * @this {GestureRecognizer}
+ * @param {number} x
+ * @param {number} y
+ * @return {boolean}
+ */
+ hasMovedEnough: function(x, y) {
+ if (this.info.prevent) {
+ return false;
+ }
+ if (this.info.started) {
+ return true;
+ }
+ let dx = Math.abs(this.info.x - x);
+ let dy = Math.abs(this.info.y - y);
+ return (dx >= TRACK_DISTANCE || dy >= TRACK_DISTANCE);
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {MouseEvent} e
+ * @return {void}
+ */
+ mousedown: function(e) {
+ if (!hasLeftMouseButton(e)) {
+ return;
+ }
+ let t = Gestures._findOriginalTarget(e);
+ let self = this;
+ let movefn = function movefn(e) {
+ let x = e.clientX, y = e.clientY;
+ if (self.hasMovedEnough(x, y)) {
+ // first move is 'start', subsequent moves are 'move', mouseup is 'end'
+ self.info.state = self.info.started ? (e.type === 'mouseup' ? 'end' : 'track') : 'start';
+ if (self.info.state === 'start') {
+ // if and only if tracking, always prevent tap
+ Gestures.prevent('tap');
+ }
+ self.info.addMove({x: x, y: y});
+ if (!hasLeftMouseButton(e)) {
+ // always _fire "end"
+ self.info.state = 'end';
+ untrackDocument(self.info);
+ }
+ self._fire(t, e);
+ self.info.started = true;
+ }
+ };
+ let upfn = function upfn(e) {
+ if (self.info.started) {
+ movefn(e);
+ }
+
+ // remove the temporary listeners
+ untrackDocument(self.info);
+ };
+ // add temporary document listeners as mouse retargets
+ trackDocument(this.info, movefn, upfn);
+ this.info.x = e.clientX;
+ this.info.y = e.clientY;
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchstart: function(e) {
+ let ct = e.changedTouches[0];
+ this.info.x = ct.clientX;
+ this.info.y = ct.clientY;
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchmove: function(e) {
+ let t = Gestures._findOriginalTarget(e);
+ let ct = e.changedTouches[0];
+ let x = ct.clientX, y = ct.clientY;
+ if (this.hasMovedEnough(x, y)) {
+ if (this.info.state === 'start') {
+ // if and only if tracking, always prevent tap
+ Gestures.prevent('tap');
+ }
+ this.info.addMove({x: x, y: y});
+ this._fire(t, ct);
+ this.info.state = 'track';
+ this.info.started = true;
+ }
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchend: function(e) {
+ let t = Gestures._findOriginalTarget(e);
+ let ct = e.changedTouches[0];
+ // only trackend if track was started and not aborted
+ if (this.info.started) {
+ // reset started state on up
+ this.info.state = 'end';
+ this.info.addMove({x: ct.clientX, y: ct.clientY});
+ this._fire(t, ct, e);
+ }
+ },
+
+ /**
+ * @this {GestureRecognizer}
+ * @param {!EventTarget} target
+ * @param {Touch} touch
+ * @return {void}
+ */
+ _fire: function(target, touch) {
+ let secondlast = this.info.moves[this.info.moves.length - 2];
+ let lastmove = this.info.moves[this.info.moves.length - 1];
+ let dx = lastmove.x - this.info.x;
+ let dy = lastmove.y - this.info.y;
+ let ddx, ddy = 0;
+ if (secondlast) {
+ ddx = lastmove.x - secondlast.x;
+ ddy = lastmove.y - secondlast.y;
+ }
+ Gestures._fire(target, 'track', {
+ state: this.info.state,
+ x: touch.clientX,
+ y: touch.clientY,
+ dx: dx,
+ dy: dy,
+ ddx: ddx,
+ ddy: ddy,
+ sourceEvent: touch,
+ hover: function() {
+ return Gestures.deepTargetFind(touch.clientX, touch.clientY);
+ }
+ });
+ }
+
+ });
+
+ Gestures.register({
+ name: 'tap',
+ deps: ['mousedown', 'click', 'touchstart', 'touchend'],
+ flow: {
+ start: ['mousedown', 'touchstart'],
+ end: ['click', 'touchend']
+ },
+ emits: ['tap'],
+ info: {
+ x: NaN,
+ y: NaN,
+ prevent: false
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @return {void}
+ */
+ reset: function() {
+ this.info.x = NaN;
+ this.info.y = NaN;
+ this.info.prevent = false;
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {MouseEvent} e
+ * @return {void}
+ */
+ save: function(e) {
+ this.info.x = e.clientX;
+ this.info.y = e.clientY;
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {MouseEvent} e
+ * @return {void}
+ */
+ mousedown: function(e) {
+ if (hasLeftMouseButton(e)) {
+ this.save(e);
+ }
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {MouseEvent} e
+ * @return {void}
+ */
+ click: function(e) {
+ if (hasLeftMouseButton(e)) {
+ this.forward(e);
+ }
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchstart: function(e) {
+ this.save(e.changedTouches[0], e);
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {TouchEvent} e
+ * @return {void}
+ */
+ touchend: function(e) {
+ this.forward(e.changedTouches[0], e);
+ },
+ /**
+ * @this {GestureRecognizer}
+ * @param {Event | Touch} e
+ * @param {Event=} preventer
+ * @return {void}
+ */
+ forward: function(e, preventer) {
+ let dx = Math.abs(e.clientX - this.info.x);
+ let dy = Math.abs(e.clientY - this.info.y);
+ // find original target from `preventer` for TouchEvents, or `e` for MouseEvents
+ let t = Gestures._findOriginalTarget(/** @type {Event} */(preventer || e));
+ if (!t || t.disabled) {
+ return;
+ }
+ // dx,dy can be NaN if `click` has been simulated and there was no `down` for `start`
+ if (isNaN(dx) || isNaN(dy) || (dx <= TAP_DISTANCE && dy <= TAP_DISTANCE) || isSyntheticClick(e)) {
+ // prevent taps from being generated if an event has canceled them
+ if (!this.info.prevent) {
+ Gestures._fire(t, 'tap', {
+ x: e.clientX,
+ y: e.clientY,
+ sourceEvent: e,
+ preventer: preventer
+ });
+ }
+ }
+ }
+ });
+
+ /* eslint-enable valid-jsdoc */
+
+ /** @deprecated */
+ Gestures.findOriginalTarget = Gestures._findOriginalTarget;
+
+ /** @deprecated */
+ Gestures.add = Gestures.addListener;
+
+ /** @deprecated */
+ Gestures.remove = Gestures.removeListener;
+
+ Polymer.Gestures = Gestures;
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/html-tag.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/html-tag.html
new file mode 100644
index 00000000000..79028525b02
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/html-tag.html
@@ -0,0 +1,129 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+<script>
+ (function() {
+ 'use strict';
+
+ /**
+ * Class representing a static string value which can be used to filter
+ * strings by asseting that they have been created via this class. The
+ * `value` property returns the string passed to the constructor.
+ */
+ class LiteralString {
+ constructor(string) {
+ /** @type {string} */
+ this.value = string.toString();
+ }
+ /**
+ * @return {string} LiteralString string value
+ */
+ toString() {
+ return this.value;
+ }
+ }
+
+ /**
+ * @param {*} value Object to stringify into HTML
+ * @return {string} HTML stringified form of `obj`
+ */
+ function literalValue(value) {
+ if (value instanceof LiteralString) {
+ return /** @type {!LiteralString} */(value).value;
+ } else {
+ throw new Error(`non-literal value passed to Polymer.htmlLiteral: ${value}`);
+ }
+ }
+
+ /**
+ * @param {*} value Object to stringify into HTML
+ * @return {string} HTML stringified form of `obj`
+ */
+ function htmlValue(value) {
+ if (value instanceof HTMLTemplateElement) {
+ return /** @type {!HTMLTemplateElement } */(value).innerHTML;
+ } else if (value instanceof LiteralString) {
+ return literalValue(value);
+ } else {
+ throw new Error(`non-template value passed to Polymer.html: ${value}`);
+ }
+ }
+
+ /**
+ * A template literal tag that creates an HTML <template> element from the
+ * contents of the string.
+ *
+ * This allows you to write a Polymer Template in JavaScript.
+ *
+ * Templates can be composed by interpolating `HTMLTemplateElement`s in
+ * expressions in the JavaScript template literal. The nested template's
+ * `innerHTML` is included in the containing template. The only other
+ * values allowed in expressions are those returned from `Polymer.htmlLiteral`
+ * which ensures only literal values from JS source ever reach the HTML, to
+ * guard against XSS risks.
+ *
+ * All other values are disallowed in expressions to help prevent XSS
+ * attacks; however, `Polymer.htmlLiteral` can be used to compose static
+ * string values into templates. This is useful to compose strings into
+ * places that do not accept html, like the css text of a `style`
+ * element.
+ *
+ * Example:
+ *
+ * static get template() {
+ * return Polymer.html`
+ * <style>:host{ content:"..." }</style>
+ * <div class="shadowed">${this.partialTemplate}</div>
+ * ${super.template}
+ * `;
+ * }
+ * static get partialTemplate() { return Polymer.html`<span>Partial!</span>`; }
+ *
+ * @memberof Polymer
+ * @param {!ITemplateArray} strings Constant parts of tagged template literal
+ * @param {...*} values Variable parts of tagged template literal
+ * @return {!HTMLTemplateElement} Constructed HTMLTemplateElement
+ */
+ Polymer.html = function html(strings, ...values) {
+ const template = /** @type {!HTMLTemplateElement} */(document.createElement('template'));
+ template.innerHTML = values.reduce((acc, v, idx) =>
+ acc + htmlValue(v) + strings[idx + 1], strings[0]);
+ return template;
+ };
+
+ /**
+ * An html literal tag that can be used with `Polymer.html` to compose.
+ * a literal string.
+ *
+ * Example:
+ *
+ * static get template() {
+ * return Polymer.html`
+ * <style>
+ * :host { display: block; }
+ * ${styleTemplate}
+ * </style>
+ * <div class="shadowed">${staticValue}</div>
+ * ${super.template}
+ * `;
+ * }
+ * static get styleTemplate() { return Polymer.htmlLiteral`.shadowed { background: gray; }`; }
+ *
+ * @memberof Polymer
+ * @param {!ITemplateArray} strings Constant parts of tagged template literal
+ * @param {...*} values Variable parts of tagged template literal
+ * @return {!LiteralString} Constructed literal string
+ */
+ Polymer.htmlLiteral = function(strings, ...values) {
+ return new LiteralString(values.reduce((acc, v, idx) =>
+ acc + literalValue(v) + strings[idx + 1], strings[0]));
+ };
+ })();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/import-href.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/import-href.html
new file mode 100644
index 00000000000..80d354bc774
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/import-href.html
@@ -0,0 +1,107 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="boot.html">
+
+<script>
+
+(function() {
+
+ 'use strict';
+
+ // run a callback when HTMLImports are ready or immediately if
+ // this api is not available.
+ function whenImportsReady(cb) {
+ if (window.HTMLImports) {
+ HTMLImports.whenReady(cb);
+ } else {
+ cb();
+ }
+ }
+
+ /**
+ * Convenience method for importing an HTML document imperatively.
+ *
+ * This method creates a new `<link rel="import">` element with
+ * the provided URL and appends it to the document to start loading.
+ * In the `onload` callback, the `import` property of the `link`
+ * element will contain the imported document contents.
+ *
+ * @memberof Polymer
+ * @param {string} href URL to document to load.
+ * @param {?function(!Event):void=} onload Callback to notify when an import successfully
+ * loaded.
+ * @param {?function(!ErrorEvent):void=} onerror Callback to notify when an import
+ * unsuccessfully loaded.
+ * @param {boolean=} optAsync True if the import should be loaded `async`.
+ * Defaults to `false`.
+ * @return {!HTMLLinkElement} The link element for the URL to be loaded.
+ */
+ Polymer.importHref = function(href, onload, onerror, optAsync) {
+ let link = /** @type {HTMLLinkElement} */
+ (document.head.querySelector('link[href="' + href + '"][import-href]'));
+ if (!link) {
+ link = /** @type {HTMLLinkElement} */ (document.createElement('link'));
+ link.rel = 'import';
+ link.href = href;
+ link.setAttribute('import-href', '');
+ }
+ // always ensure link has `async` attribute if user specified one,
+ // even if it was previously not async. This is considered less confusing.
+ if (optAsync) {
+ link.setAttribute('async', '');
+ }
+ // NOTE: the link may now be in 3 states: (1) pending insertion,
+ // (2) inflight, (3) already loaded. In each case, we need to add
+ // event listeners to process callbacks.
+ let cleanup = function() {
+ link.removeEventListener('load', loadListener);
+ link.removeEventListener('error', errorListener);
+ };
+ let loadListener = function(event) {
+ cleanup();
+ // In case of a successful load, cache the load event on the link so
+ // that it can be used to short-circuit this method in the future when
+ // it is called with the same href param.
+ link.__dynamicImportLoaded = true;
+ if (onload) {
+ whenImportsReady(() => {
+ onload(event);
+ });
+ }
+ };
+ let errorListener = function(event) {
+ cleanup();
+ // In case of an error, remove the link from the document so that it
+ // will be automatically created again the next time `importHref` is
+ // called.
+ if (link.parentNode) {
+ link.parentNode.removeChild(link);
+ }
+ if (onerror) {
+ whenImportsReady(() => {
+ onerror(event);
+ });
+ }
+ };
+ link.addEventListener('load', loadListener);
+ link.addEventListener('error', errorListener);
+ if (link.parentNode == null) {
+ document.head.appendChild(link);
+ // if the link already loaded, dispatch a fake load event
+ // so that listeners are called and get a proper event argument.
+ } else if (link.__dynamicImportLoaded) {
+ link.dispatchEvent(new Event('load'));
+ }
+ return link;
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/mixin.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/mixin.html
new file mode 100644
index 00000000000..e97b3e21237
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/mixin.html
@@ -0,0 +1,78 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="boot.html">
+
+<script>
+
+(function() {
+
+ 'use strict';
+
+ // unique global id for deduping mixins.
+ let dedupeId = 0;
+
+ /**
+ * @constructor
+ * @extends {Function}
+ */
+ function MixinFunction(){}
+ /** @type {(WeakMap | undefined)} */
+ MixinFunction.prototype.__mixinApplications;
+ /** @type {(Object | undefined)} */
+ MixinFunction.prototype.__mixinSet;
+
+ /* eslint-disable valid-jsdoc */
+ /**
+ * Wraps an ES6 class expression mixin such that the mixin is only applied
+ * if it has not already been applied its base argument. Also memoizes mixin
+ * applications.
+ *
+ * @memberof Polymer
+ * @template T
+ * @param {T} mixin ES6 class expression mixin to wrap
+ * @return {T}
+ * @suppress {invalidCasts}
+ */
+ Polymer.dedupingMixin = function(mixin) {
+ let mixinApplications = /** @type {!MixinFunction} */(mixin).__mixinApplications;
+ if (!mixinApplications) {
+ mixinApplications = new WeakMap();
+ /** @type {!MixinFunction} */(mixin).__mixinApplications = mixinApplications;
+ }
+ // maintain a unique id for each mixin
+ let mixinDedupeId = dedupeId++;
+ function dedupingMixin(base) {
+ let baseSet = /** @type {!MixinFunction} */(base).__mixinSet;
+ if (baseSet && baseSet[mixinDedupeId]) {
+ return base;
+ }
+ let map = mixinApplications;
+ let extended = map.get(base);
+ if (!extended) {
+ extended = /** @type {!Function} */(mixin)(base);
+ map.set(base, extended);
+ }
+ // copy inherited mixin set from the extended class, or the base class
+ // NOTE: we avoid use of Set here because some browser (IE11)
+ // cannot extend a base Set via the constructor.
+ let mixinSet = Object.create(/** @type {!MixinFunction} */(extended).__mixinSet || baseSet || null);
+ mixinSet[mixinDedupeId] = true;
+ /** @type {!MixinFunction} */(extended).__mixinSet = mixinSet;
+ return extended;
+ }
+
+ return /** @type {T} */ (dedupingMixin);
+ };
+ /* eslint-enable valid-jsdoc */
+
+})();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/path.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/path.html
new file mode 100644
index 00000000000..924c9d0abb3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/path.html
@@ -0,0 +1,284 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="boot.html">
+
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * Module with utilities for manipulating structured data path strings.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module with utilities for manipulating structured data path strings.
+ */
+ const Path = {
+
+ /**
+ * Returns true if the given string is a structured data path (has dots).
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isPath('foo.bar.baz') // true
+ * Polymer.Path.isPath('foo') // false
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string} path Path string
+ * @return {boolean} True if the string contained one or more dots
+ */
+ isPath: function(path) {
+ return path.indexOf('.') >= 0;
+ },
+
+ /**
+ * Returns the root property name for the given path.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.root('foo.bar.baz') // 'foo'
+ * Polymer.Path.root('foo') // 'foo'
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string} path Path string
+ * @return {string} Root property name
+ */
+ root: function(path) {
+ let dotIndex = path.indexOf('.');
+ if (dotIndex === -1) {
+ return path;
+ }
+ return path.slice(0, dotIndex);
+ },
+
+ /**
+ * Given `base` is `foo.bar`, `foo` is an ancestor, `foo.bar` is not
+ * Returns true if the given path is an ancestor of the base path.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isAncestor('foo.bar', 'foo') // true
+ * Polymer.Path.isAncestor('foo.bar', 'foo.bar') // false
+ * Polymer.Path.isAncestor('foo.bar', 'foo.bar.baz') // false
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string} base Path string to test against.
+ * @param {string} path Path string to test.
+ * @return {boolean} True if `path` is an ancestor of `base`.
+ */
+ isAncestor: function(base, path) {
+ // base.startsWith(path + '.');
+ return base.indexOf(path + '.') === 0;
+ },
+
+ /**
+ * Given `base` is `foo.bar`, `foo.bar.baz` is an descendant
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isDescendant('foo.bar', 'foo.bar.baz') // true
+ * Polymer.Path.isDescendant('foo.bar', 'foo.bar') // false
+ * Polymer.Path.isDescendant('foo.bar', 'foo') // false
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string} base Path string to test against.
+ * @param {string} path Path string to test.
+ * @return {boolean} True if `path` is a descendant of `base`.
+ */
+ isDescendant: function(base, path) {
+ // path.startsWith(base + '.');
+ return path.indexOf(base + '.') === 0;
+ },
+
+ /**
+ * Replaces a previous base path with a new base path, preserving the
+ * remainder of the path.
+ *
+ * User must ensure `path` has a prefix of `base`.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.translate('foo.bar', 'zot', 'foo.bar.baz') // 'zot.baz'
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string} base Current base string to remove
+ * @param {string} newBase New base string to replace with
+ * @param {string} path Path to translate
+ * @return {string} Translated string
+ */
+ translate: function(base, newBase, path) {
+ return newBase + path.slice(base.length);
+ },
+
+ /**
+ * @param {string} base Path string to test against
+ * @param {string} path Path string to test
+ * @return {boolean} True if `path` is equal to `base`
+ * @this {Path}
+ */
+ matches: function(base, path) {
+ return (base === path) ||
+ this.isAncestor(base, path) ||
+ this.isDescendant(base, path);
+ },
+
+ /**
+ * Converts array-based paths to flattened path. String-based paths
+ * are returned as-is.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.normalize(['foo.bar', 0, 'baz']) // 'foo.bar.0.baz'
+ * Polymer.Path.normalize('foo.bar.0.baz') // 'foo.bar.0.baz'
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string | !Array<string|number>} path Input path
+ * @return {string} Flattened path
+ */
+ normalize: function(path) {
+ if (Array.isArray(path)) {
+ let parts = [];
+ for (let i=0; i<path.length; i++) {
+ let args = path[i].toString().split('.');
+ for (let j=0; j<args.length; j++) {
+ parts.push(args[j]);
+ }
+ }
+ return parts.join('.');
+ } else {
+ return path;
+ }
+ },
+
+ /**
+ * Splits a path into an array of property names. Accepts either arrays
+ * of path parts or strings.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.split(['foo.bar', 0, 'baz']) // ['foo', 'bar', '0', 'baz']
+ * Polymer.Path.split('foo.bar.0.baz') // ['foo', 'bar', '0', 'baz']
+ * ```
+ *
+ * @memberof Polymer.Path
+ * @param {string | !Array<string|number>} path Input path
+ * @return {!Array<string>} Array of path parts
+ * @this {Path}
+ * @suppress {checkTypes}
+ */
+ split: function(path) {
+ if (Array.isArray(path)) {
+ return this.normalize(path).split('.');
+ }
+ return path.toString().split('.');
+ },
+
+ /**
+ * Reads a value from a path. If any sub-property in the path is `undefined`,
+ * this method returns `undefined` (will never throw.
+ *
+ * @memberof Polymer.Path
+ * @param {Object} root Object from which to dereference path from
+ * @param {string | !Array<string|number>} path Path to read
+ * @param {Object=} info If an object is provided to `info`, the normalized
+ * (flattened) path will be set to `info.path`.
+ * @return {*} Value at path, or `undefined` if the path could not be
+ * fully dereferenced.
+ * @this {Path}
+ */
+ get: function(root, path, info) {
+ let prop = root;
+ let parts = this.split(path);
+ // Loop over path parts[0..n-1] and dereference
+ for (let i=0; i<parts.length; i++) {
+ if (!prop) {
+ return;
+ }
+ let part = parts[i];
+ prop = prop[part];
+ }
+ if (info) {
+ info.path = parts.join('.');
+ }
+ return prop;
+ },
+
+ /**
+ * Sets a value to a path. If any sub-property in the path is `undefined`,
+ * this method will no-op.
+ *
+ * @memberof Polymer.Path
+ * @param {Object} root Object from which to dereference path from
+ * @param {string | !Array<string|number>} path Path to set
+ * @param {*} value Value to set to path
+ * @return {string | undefined} The normalized version of the input path
+ * @this {Path}
+ */
+ set: function(root, path, value) {
+ let prop = root;
+ let parts = this.split(path);
+ let last = parts[parts.length-1];
+ if (parts.length > 1) {
+ // Loop over path parts[0..n-2] and dereference
+ for (let i=0; i<parts.length-1; i++) {
+ let part = parts[i];
+ prop = prop[part];
+ if (!prop) {
+ return;
+ }
+ }
+ // Set value to object at end of path
+ prop[last] = value;
+ } else {
+ // Simple property set
+ prop[path] = value;
+ }
+ return parts.join('.');
+ }
+
+ };
+
+ /**
+ * Returns true if the given string is a structured data path (has dots).
+ *
+ * This function is deprecated. Use `Polymer.Path.isPath` instead.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isDeep('foo.bar.baz') // true
+ * Polymer.Path.isDeep('foo') // false
+ * ```
+ *
+ * @deprecated
+ * @memberof Polymer.Path
+ * @param {string} path Path string
+ * @return {boolean} True if the string contained one or more dots
+ */
+ Path.isDeep = Path.isPath;
+
+ Polymer.Path = Path;
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html
new file mode 100644
index 00000000000..151f74ebc05
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/render-status.html
@@ -0,0 +1,133 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+
+<script>
+(function() {
+
+ 'use strict';
+
+ let scheduled = false;
+ let beforeRenderQueue = [];
+ let afterRenderQueue = [];
+
+ function schedule() {
+ scheduled = true;
+ // before next render
+ requestAnimationFrame(function() {
+ scheduled = false;
+ flushQueue(beforeRenderQueue);
+ // after the render
+ setTimeout(function() {
+ runQueue(afterRenderQueue);
+ });
+ });
+ }
+
+ function flushQueue(queue) {
+ while (queue.length) {
+ callMethod(queue.shift());
+ }
+ }
+
+ function runQueue(queue) {
+ for (let i=0, l=queue.length; i < l; i++) {
+ callMethod(queue.shift());
+ }
+ }
+
+ function callMethod(info) {
+ const context = info[0];
+ const callback = info[1];
+ const args = info[2];
+ try {
+ callback.apply(context, args);
+ } catch(e) {
+ setTimeout(() => {
+ throw e;
+ });
+ }
+ }
+
+ function flush() {
+ while (beforeRenderQueue.length || afterRenderQueue.length) {
+ flushQueue(beforeRenderQueue);
+ flushQueue(afterRenderQueue);
+ }
+ scheduled = false;
+ }
+
+ /**
+ * Module for scheduling flushable pre-render and post-render tasks.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module for scheduling flushable pre-render and post-render tasks.
+ */
+ Polymer.RenderStatus = {
+
+ /**
+ * Enqueues a callback which will be run before the next render, at
+ * `requestAnimationFrame` timing.
+ *
+ * This method is useful for enqueuing work that requires DOM measurement,
+ * since measurement may not be reliable in custom element callbacks before
+ * the first render, as well as for batching measurement tasks in general.
+ *
+ * Tasks in this queue may be flushed by calling `Polymer.RenderStatus.flush()`.
+ *
+ * @memberof Polymer.RenderStatus
+ * @param {*} context Context object the callback function will be bound to
+ * @param {function(...*):void} callback Callback function
+ * @param {!Array=} args An array of arguments to call the callback function with
+ * @return {void}
+ */
+ beforeNextRender: function(context, callback, args) {
+ if (!scheduled) {
+ schedule();
+ }
+ beforeRenderQueue.push([context, callback, args]);
+ },
+
+ /**
+ * Enqueues a callback which will be run after the next render, equivalent
+ * to one task (`setTimeout`) after the next `requestAnimationFrame`.
+ *
+ * This method is useful for tuning the first-render performance of an
+ * element or application by deferring non-critical work until after the
+ * first paint. Typical non-render-critical work may include adding UI
+ * event listeners and aria attributes.
+ *
+ * @memberof Polymer.RenderStatus
+ * @param {*} context Context object the callback function will be bound to
+ * @param {function(...*):void} callback Callback function
+ * @param {!Array=} args An array of arguments to call the callback function with
+ * @return {void}
+ */
+ afterNextRender: function(context, callback, args) {
+ if (!scheduled) {
+ schedule();
+ }
+ afterRenderQueue.push([context, callback, args]);
+ },
+
+ /**
+ * Flushes all `beforeNextRender` tasks, followed by all `afterNextRender`
+ * tasks.
+ *
+ * @memberof Polymer.RenderStatus
+ * @return {void}
+ */
+ flush: flush
+
+ };
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/resolve-url.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/resolve-url.html
new file mode 100644
index 00000000000..6d061a826e4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/resolve-url.html
@@ -0,0 +1,112 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="boot.html">
+
+<script>
+
+ (function() {
+ 'use strict';
+
+ let CSS_URL_RX = /(url\()([^)]*)(\))/g;
+ let ABS_URL = /(^\/)|(^#)|(^[\w-\d]*:)/;
+ let workingURL;
+ let resolveDoc;
+ /**
+ * Resolves the given URL against the provided `baseUri'.
+ *
+ * Note that this function performs no resolution for URLs that start
+ * with `/` (absolute URLs) or `#` (hash identifiers). For general purpose
+ * URL resolution, use `window.URL`.
+ *
+ * @memberof Polymer.ResolveUrl
+ * @param {string} url Input URL to resolve
+ * @param {?string=} baseURI Base URI to resolve the URL against
+ * @return {string} resolved URL
+ */
+ function resolveUrl(url, baseURI) {
+ if (url && ABS_URL.test(url)) {
+ return url;
+ }
+ // Lazy feature detection.
+ if (workingURL === undefined) {
+ workingURL = false;
+ try {
+ const u = new URL('b', 'http://a');
+ u.pathname = 'c%20d';
+ workingURL = (u.href === 'http://a/c%20d');
+ } catch (e) {
+ // silently fail
+ }
+ }
+ if (!baseURI) {
+ baseURI = document.baseURI || window.location.href;
+ }
+ if (workingURL) {
+ return (new URL(url, baseURI)).href;
+ }
+ // Fallback to creating an anchor into a disconnected document.
+ if (!resolveDoc) {
+ resolveDoc = document.implementation.createHTMLDocument('temp');
+ resolveDoc.base = resolveDoc.createElement('base');
+ resolveDoc.head.appendChild(resolveDoc.base);
+ resolveDoc.anchor = resolveDoc.createElement('a');
+ resolveDoc.body.appendChild(resolveDoc.anchor);
+ }
+ resolveDoc.base.href = baseURI;
+ resolveDoc.anchor.href = url;
+ return resolveDoc.anchor.href || url;
+
+ }
+
+ /**
+ * Resolves any relative URL's in the given CSS text against the provided
+ * `ownerDocument`'s `baseURI`.
+ *
+ * @memberof Polymer.ResolveUrl
+ * @param {string} cssText CSS text to process
+ * @param {string} baseURI Base URI to resolve the URL against
+ * @return {string} Processed CSS text with resolved URL's
+ */
+ function resolveCss(cssText, baseURI) {
+ return cssText.replace(CSS_URL_RX, function(m, pre, url, post) {
+ return pre + '\'' +
+ resolveUrl(url.replace(/["']/g, ''), baseURI) +
+ '\'' + post;
+ });
+ }
+
+ /**
+ * Returns a path from a given `url`. The path includes the trailing
+ * `/` from the url.
+ *
+ * @memberof Polymer.ResolveUrl
+ * @param {string} url Input URL to transform
+ * @return {string} resolved path
+ */
+ function pathFromUrl(url) {
+ return url.substring(0, url.lastIndexOf('/') + 1);
+ }
+
+ /**
+ * Module with utilities for resolving relative URL's.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module with utilities for resolving relative URL's.
+ */
+ Polymer.ResolveUrl = {
+ resolveCss: resolveCss,
+ resolveUrl: resolveUrl,
+ pathFromUrl: pathFromUrl
+ };
+
+ })();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/settings.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/settings.html
new file mode 100644
index 00000000000..5b0dc42039d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/settings.html
@@ -0,0 +1,118 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="../utils/boot.html">
+<link rel="import" href="../utils/resolve-url.html">
+
+<script>
+/** @suppress {deprecated} */
+(function() {
+ 'use strict';
+
+ /**
+ * Sets the global, legacy settings.
+ *
+ * @deprecated
+ * @namespace
+ * @memberof Polymer
+ */
+ Polymer.Settings = Polymer.Settings || {};
+
+ Polymer.Settings.useShadow = !(window.ShadyDOM);
+ Polymer.Settings.useNativeCSSProperties =
+ Boolean(!window.ShadyCSS || window.ShadyCSS.nativeCss);
+ Polymer.Settings.useNativeCustomElements =
+ !(window.customElements.polyfillWrapFlushCallback);
+
+
+ /**
+ * Globally settable property that is automatically assigned to
+ * `Polymer.ElementMixin` instances, useful for binding in templates to
+ * make URL's relative to an application's root. Defaults to the main
+ * document URL, but can be overridden by users. It may be useful to set
+ * `Polymer.rootPath` to provide a stable application mount path when
+ * using client side routing.
+ *
+ * @memberof Polymer
+ */
+ let rootPath = Polymer.rootPath ||
+ Polymer.ResolveUrl.pathFromUrl(document.baseURI || window.location.href);
+
+ Polymer.rootPath = rootPath;
+
+ /**
+ * Sets the global rootPath property used by `Polymer.ElementMixin` and
+ * available via `Polymer.rootPath`.
+ *
+ * @memberof Polymer
+ * @param {string} path The new root path
+ * @return {void}
+ */
+ Polymer.setRootPath = function(path) {
+ Polymer.rootPath = path;
+ };
+
+ /**
+ * A global callback used to sanitize any value before inserting it into the DOM. The callback signature is:
+ *
+ * Polymer = {
+ * sanitizeDOMValue: function(value, name, type, node) { ... }
+ * }
+ *
+ * Where:
+ *
+ * `value` is the value to sanitize.
+ * `name` is the name of an attribute or property (for example, href).
+ * `type` indicates where the value is being inserted: one of property, attribute, or text.
+ * `node` is the node where the value is being inserted.
+ *
+ * @type {(function(*,string,string,Node):*)|undefined}
+ * @memberof Polymer
+ */
+ let sanitizeDOMValue = Polymer.sanitizeDOMValue;
+
+ // This is needed for tooling
+ Polymer.sanitizeDOMValue = sanitizeDOMValue;
+
+ /**
+ * Sets the global sanitizeDOMValue available via `Polymer.sanitizeDOMValue`.
+ *
+ * @memberof Polymer
+ * @param {(function(*,string,string,Node):*)|undefined} newSanitizeDOMValue the global sanitizeDOMValue callback
+ * @return {void}
+ */
+ Polymer.setSanitizeDOMValue = function(newSanitizeDOMValue) {
+ Polymer.sanitizeDOMValue = newSanitizeDOMValue;
+ };
+
+ /**
+ * Globally settable property to make Polymer Gestures use passive TouchEvent listeners when recognizing gestures.
+ * When set to `true`, gestures made from touch will not be able to prevent scrolling, allowing for smoother
+ * scrolling performance.
+ * Defaults to `false` for backwards compatibility.
+ *
+ * @memberof Polymer
+ */
+ let passiveTouchGestures = false;
+
+ Polymer.passiveTouchGestures = passiveTouchGestures;
+
+ /**
+ * Sets `passiveTouchGestures` globally for all elements using Polymer Gestures.
+ *
+ * @memberof Polymer
+ * @param {boolean} usePassive enable or disable passive touch gestures globally
+ * @return {void}
+ */
+ Polymer.setPassiveTouchGestures = function(usePassive) {
+ Polymer.passiveTouchGestures = usePassive;
+ };
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/style-gather.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/style-gather.html
new file mode 100644
index 00000000000..3b0a48da6a8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/style-gather.html
@@ -0,0 +1,299 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="resolve-url.html">
+<script>
+(function() {
+ 'use strict';
+
+ const MODULE_STYLE_LINK_SELECTOR = 'link[rel=import][type~=css]';
+ const INCLUDE_ATTR = 'include';
+ const SHADY_UNSCOPED_ATTR = 'shady-unscoped';
+
+ function importModule(moduleId) {
+ const /** Polymer.DomModule */ PolymerDomModule = customElements.get('dom-module');
+ if (!PolymerDomModule) {
+ return null;
+ }
+ return PolymerDomModule.import(moduleId);
+ }
+
+ function styleForImport(importDoc) {
+ // NOTE: polyfill affordance.
+ // under the HTMLImports polyfill, there will be no 'body',
+ // but the import pseudo-doc can be used directly.
+ let container = importDoc.body ? importDoc.body : importDoc;
+ const importCss = Polymer.ResolveUrl.resolveCss(container.textContent,
+ importDoc.baseURI);
+ const style = document.createElement('style');
+ style.textContent = importCss;
+ return style;
+ }
+
+ /** @typedef {{assetpath: string}} */
+ let templateWithAssetPath; // eslint-disable-line no-unused-vars
+
+ /**
+ * Module with utilities for collection CSS text from `<templates>`, external
+ * stylesheets, and `dom-module`s.
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module with utilities for collection CSS text from various sources.
+ */
+ const StyleGather = {
+
+ /**
+ * Returns a list of <style> elements in a space-separated list of `dom-module`s.
+ *
+ * @memberof Polymer.StyleGather
+ * @param {string} moduleIds List of dom-module id's within which to
+ * search for css.
+ * @return {!Array<!HTMLStyleElement>} Array of contained <style> elements
+ * @this {StyleGather}
+ */
+ stylesFromModules(moduleIds) {
+ const modules = moduleIds.trim().split(/\s+/);
+ const styles = [];
+ for (let i=0; i < modules.length; i++) {
+ styles.push(...this.stylesFromModule(modules[i]));
+ }
+ return styles;
+ },
+
+ /**
+ * Returns a list of <style> elements in a given `dom-module`.
+ * Styles in a `dom-module` can come either from `<style>`s within the
+ * first `<template>`, or else from one or more
+ * `<link rel="import" type="css">` links outside the template.
+ *
+ * @memberof Polymer.StyleGather
+ * @param {string} moduleId dom-module id to gather styles from
+ * @return {!Array<!HTMLStyleElement>} Array of contained styles.
+ * @this {StyleGather}
+ */
+ stylesFromModule(moduleId) {
+ const m = importModule(moduleId);
+
+ if (!m) {
+ console.warn('Could not find style data in module named', moduleId);
+ return [];
+ }
+
+ if (m._styles === undefined) {
+ const styles = [];
+ // module imports: <link rel="import" type="css">
+ styles.push(...this._stylesFromModuleImports(m));
+ // include css from the first template in the module
+ const template = m.querySelector('template');
+ if (template) {
+ styles.push(...this.stylesFromTemplate(template,
+ /** @type {templateWithAssetPath} */(m).assetpath));
+ }
+
+ m._styles = styles;
+ }
+
+ return m._styles;
+ },
+
+ /**
+ * Returns the `<style>` elements within a given template.
+ *
+ * @memberof Polymer.StyleGather
+ * @param {!HTMLTemplateElement} template Template to gather styles from
+ * @param {string} baseURI baseURI for style content
+ * @return {!Array<!HTMLStyleElement>} Array of styles
+ * @this {StyleGather}
+ */
+ stylesFromTemplate(template, baseURI) {
+ if (!template._styles) {
+ const styles = [];
+ // if element is a template, get content from its .content
+ const e$ = template.content.querySelectorAll('style');
+ for (let i=0; i < e$.length; i++) {
+ let e = e$[i];
+ // support style sharing by allowing styles to "include"
+ // other dom-modules that contain styling
+ let include = e.getAttribute(INCLUDE_ATTR);
+ if (include) {
+ styles.push(...this.stylesFromModules(include).filter(function(item, index, self) {
+ return self.indexOf(item) === index;
+ }));
+ }
+ if (baseURI) {
+ e.textContent = Polymer.ResolveUrl.resolveCss(e.textContent, baseURI);
+ }
+ styles.push(e);
+ }
+ template._styles = styles;
+ }
+ return template._styles;
+ },
+
+ /**
+ * Returns a list of <style> elements from stylesheets loaded via `<link rel="import" type="css">` links within the specified `dom-module`.
+ *
+ * @memberof Polymer.StyleGather
+ * @param {string} moduleId Id of `dom-module` to gather CSS from
+ * @return {!Array<!HTMLStyleElement>} Array of contained styles.
+ * @this {StyleGather}
+ */
+ stylesFromModuleImports(moduleId) {
+ let m = importModule(moduleId);
+ return m ? this._stylesFromModuleImports(m) : [];
+ },
+
+ /**
+ * @memberof Polymer.StyleGather
+ * @this {StyleGather}
+ * @param {!HTMLElement} module dom-module element that could contain `<link rel="import" type="css">` styles
+ * @return {!Array<!HTMLStyleElement>} Array of contained styles
+ */
+ _stylesFromModuleImports(module) {
+ const styles = [];
+ const p$ = module.querySelectorAll(MODULE_STYLE_LINK_SELECTOR);
+ for (let i=0; i < p$.length; i++) {
+ let p = p$[i];
+ if (p.import) {
+ const importDoc = p.import;
+ const unscoped = p.hasAttribute(SHADY_UNSCOPED_ATTR);
+ if (unscoped && !importDoc._unscopedStyle) {
+ const style = styleForImport(importDoc);
+ style.setAttribute(SHADY_UNSCOPED_ATTR, '');
+ importDoc._unscopedStyle = style;
+ } else if (!importDoc._style) {
+ importDoc._style = styleForImport(importDoc);
+ }
+ styles.push(unscoped ? importDoc._unscopedStyle : importDoc._style);
+ }
+ }
+ return styles;
+ },
+
+ /**
+ *
+ * Returns CSS text of styles in a space-separated list of `dom-module`s.
+ * Note: This method is deprecated, use `stylesFromModules` instead.
+ *
+ * @deprecated
+ * @memberof Polymer.StyleGather
+ * @param {string} moduleIds List of dom-module id's within which to
+ * search for css.
+ * @return {string} Concatenated CSS content from specified `dom-module`s
+ * @this {StyleGather}
+ */
+ cssFromModules(moduleIds) {
+ let modules = moduleIds.trim().split(/\s+/);
+ let cssText = '';
+ for (let i=0; i < modules.length; i++) {
+ cssText += this.cssFromModule(modules[i]);
+ }
+ return cssText;
+ },
+
+ /**
+ * Returns CSS text of styles in a given `dom-module`. CSS in a `dom-module`
+ * can come either from `<style>`s within the first `<template>`, or else
+ * from one or more `<link rel="import" type="css">` links outside the
+ * template.
+ *
+ * Any `<styles>` processed are removed from their original location.
+ * Note: This method is deprecated, use `styleFromModule` instead.
+ *
+ * @deprecated
+ * @memberof Polymer.StyleGather
+ * @param {string} moduleId dom-module id to gather styles from
+ * @return {string} Concatenated CSS content from specified `dom-module`
+ * @this {StyleGather}
+ */
+ cssFromModule(moduleId) {
+ let m = importModule(moduleId);
+ if (m && m._cssText === undefined) {
+ // module imports: <link rel="import" type="css">
+ let cssText = this._cssFromModuleImports(m);
+ // include css from the first template in the module
+ let t = m.querySelector('template');
+ if (t) {
+ cssText += this.cssFromTemplate(t,
+ /** @type {templateWithAssetPath} */(m).assetpath);
+ }
+ m._cssText = cssText || null;
+ }
+ if (!m) {
+ console.warn('Could not find style data in module named', moduleId);
+ }
+ return m && m._cssText || '';
+ },
+
+ /**
+ * Returns CSS text of `<styles>` within a given template.
+ *
+ * Any `<styles>` processed are removed from their original location.
+ * Note: This method is deprecated, use `styleFromTemplate` instead.
+ *
+ * @deprecated
+ * @memberof Polymer.StyleGather
+ * @param {!HTMLTemplateElement} template Template to gather styles from
+ * @param {string} baseURI Base URI to resolve the URL against
+ * @return {string} Concatenated CSS content from specified template
+ * @this {StyleGather}
+ */
+ cssFromTemplate(template, baseURI) {
+ let cssText = '';
+ const e$ = this.stylesFromTemplate(template, baseURI);
+ // if element is a template, get content from its .content
+ for (let i=0; i < e$.length; i++) {
+ let e = e$[i];
+ if (e.parentNode) {
+ e.parentNode.removeChild(e);
+ }
+ cssText += e.textContent;
+ }
+ return cssText;
+ },
+
+ /**
+ * Returns CSS text from stylesheets loaded via `<link rel="import" type="css">`
+ * links within the specified `dom-module`.
+ *
+ * Note: This method is deprecated, use `stylesFromModuleImports` instead.
+ *
+ * @deprecated
+ *
+ * @memberof Polymer.StyleGather
+ * @param {string} moduleId Id of `dom-module` to gather CSS from
+ * @return {string} Concatenated CSS content from links in specified `dom-module`
+ * @this {StyleGather}
+ */
+ cssFromModuleImports(moduleId) {
+ let m = importModule(moduleId);
+ return m ? this._cssFromModuleImports(m) : '';
+ },
+
+ /**
+ * @deprecated
+ * @memberof Polymer.StyleGather
+ * @this {StyleGather}
+ * @param {!HTMLElement} module dom-module element that could contain `<link rel="import" type="css">` styles
+ * @return {string} Concatenated CSS content from links in the dom-module
+ */
+ _cssFromModuleImports(module) {
+ let cssText = '';
+ let styles = this._stylesFromModuleImports(module);
+ for (let i=0; i < styles.length; i++) {
+ cssText += styles[i].textContent;
+ }
+ return cssText;
+ }
+ };
+
+ Polymer.StyleGather = StyleGather;
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/templatize.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/templatize.html
new file mode 100644
index 00000000000..67b4a531795
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/templatize.html
@@ -0,0 +1,579 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<link rel="import" href="boot.html">
+<link rel="import" href="../mixins/property-effects.html">
+<link rel="import" href="../mixins/mutable-data.html">
+
+<script>
+ (function() {
+ 'use strict';
+
+ // Base class for HTMLTemplateElement extension that has property effects
+ // machinery for propagating host properties to children. This is an ES5
+ // class only because Babel (incorrectly) requires super() in the class
+ // constructor even though no `this` is used and it returns an instance.
+ let newInstance = null;
+ /**
+ * @constructor
+ * @extends {HTMLTemplateElement}
+ */
+ function HTMLTemplateElementExtension() { return newInstance; }
+ HTMLTemplateElementExtension.prototype = Object.create(HTMLTemplateElement.prototype, {
+ constructor: {
+ value: HTMLTemplateElementExtension,
+ writable: true
+ }
+ });
+ /**
+ * @constructor
+ * @implements {Polymer_PropertyEffects}
+ * @extends {HTMLTemplateElementExtension}
+ */
+ const DataTemplate = Polymer.PropertyEffects(HTMLTemplateElementExtension);
+ /**
+ * @constructor
+ * @implements {Polymer_MutableData}
+ * @extends {DataTemplate}
+ */
+ const MutableDataTemplate = Polymer.MutableData(DataTemplate);
+
+ // Applies a DataTemplate subclass to a <template> instance
+ function upgradeTemplate(template, constructor) {
+ newInstance = template;
+ Object.setPrototypeOf(template, constructor.prototype);
+ new constructor();
+ newInstance = null;
+ }
+
+ // Base class for TemplateInstance's
+ /**
+ * @constructor
+ * @implements {Polymer_PropertyEffects}
+ */
+ const base = Polymer.PropertyEffects(class {});
+
+ /**
+ * @polymer
+ * @customElement
+ * @appliesMixin Polymer.PropertyEffects
+ * @unrestricted
+ */
+ class TemplateInstanceBase extends base {
+ constructor(props) {
+ super();
+ this._configureProperties(props);
+ this.root = this._stampTemplate(this.__dataHost);
+ // Save list of stamped children
+ let children = this.children = [];
+ for (let n = this.root.firstChild; n; n=n.nextSibling) {
+ children.push(n);
+ n.__templatizeInstance = this;
+ }
+ if (this.__templatizeOwner &&
+ this.__templatizeOwner.__hideTemplateChildren__) {
+ this._showHideChildren(true);
+ }
+ // Flush props only when props are passed if instance props exist
+ // or when there isn't instance props.
+ let options = this.__templatizeOptions;
+ if ((props && options.instanceProps) || !options.instanceProps) {
+ this._enableProperties();
+ }
+ }
+ /**
+ * Configure the given `props` by calling `_setPendingProperty`. Also
+ * sets any properties stored in `__hostProps`.
+ * @private
+ * @param {Object} props Object of property name-value pairs to set.
+ * @return {void}
+ */
+ _configureProperties(props) {
+ let options = this.__templatizeOptions;
+ if (options.forwardHostProp) {
+ for (let hprop in this.__hostProps) {
+ this._setPendingProperty(hprop, this.__dataHost['_host_' + hprop]);
+ }
+ }
+ // Any instance props passed in the constructor will overwrite host props;
+ // normally this would be a user error but we don't specifically filter them
+ for (let iprop in props) {
+ this._setPendingProperty(iprop, props[iprop]);
+ }
+ }
+ /**
+ * Forwards a host property to this instance. This method should be
+ * called on instances from the `options.forwardHostProp` callback
+ * to propagate changes of host properties to each instance.
+ *
+ * Note this method enqueues the change, which are flushed as a batch.
+ *
+ * @param {string} prop Property or path name
+ * @param {*} value Value of the property to forward
+ * @return {void}
+ */
+ forwardHostProp(prop, value) {
+ if (this._setPendingPropertyOrPath(prop, value, false, true)) {
+ this.__dataHost._enqueueClient(this);
+ }
+ }
+
+ /**
+ * Override point for adding custom or simulated event handling.
+ *
+ * @param {!Node} node Node to add event listener to
+ * @param {string} eventName Name of event
+ * @param {function(!Event):void} handler Listener function to add
+ * @return {void}
+ */
+ _addEventListenerToNode(node, eventName, handler) {
+ if (this._methodHost && this.__templatizeOptions.parentModel) {
+ // If this instance should be considered a parent model, decorate
+ // events this template instance as `model`
+ this._methodHost._addEventListenerToNode(node, eventName, (e) => {
+ e.model = this;
+ handler(e);
+ });
+ } else {
+ // Otherwise delegate to the template's host (which could be)
+ // another template instance
+ let templateHost = this.__dataHost.__dataHost;
+ if (templateHost) {
+ templateHost._addEventListenerToNode(node, eventName, handler);
+ }
+ }
+ }
+ /**
+ * Shows or hides the template instance top level child elements. For
+ * text nodes, `textContent` is removed while "hidden" and replaced when
+ * "shown."
+ * @param {boolean} hide Set to true to hide the children;
+ * set to false to show them.
+ * @return {void}
+ * @protected
+ */
+ _showHideChildren(hide) {
+ let c = this.children;
+ for (let i=0; i<c.length; i++) {
+ let n = c[i];
+ // Ignore non-changes
+ if (Boolean(hide) != Boolean(n.__hideTemplateChildren__)) {
+ if (n.nodeType === Node.TEXT_NODE) {
+ if (hide) {
+ n.__polymerTextContent__ = n.textContent;
+ n.textContent = '';
+ } else {
+ n.textContent = n.__polymerTextContent__;
+ }
+ // remove and replace slot
+ } else if (n.localName === 'slot') {
+ if (hide) {
+ n.__polymerReplaced__ = document.createComment('hidden-slot');
+ n.parentNode.replaceChild(n.__polymerReplaced__, n);
+ } else {
+ const replace = n.__polymerReplaced__;
+ if (replace) {
+ replace.parentNode.replaceChild(n, replace);
+ }
+ }
+ }
+
+ else if (n.style) {
+ if (hide) {
+ n.__polymerDisplay__ = n.style.display;
+ n.style.display = 'none';
+ } else {
+ n.style.display = n.__polymerDisplay__;
+ }
+ }
+ }
+ n.__hideTemplateChildren__ = hide;
+ if (n._showHideChildren) {
+ n._showHideChildren(hide);
+ }
+ }
+ }
+ /**
+ * Overrides default property-effects implementation to intercept
+ * textContent bindings while children are "hidden" and cache in
+ * private storage for later retrieval.
+ *
+ * @param {!Node} node The node to set a property on
+ * @param {string} prop The property to set
+ * @param {*} value The value to set
+ * @return {void}
+ * @protected
+ */
+ _setUnmanagedPropertyToNode(node, prop, value) {
+ if (node.__hideTemplateChildren__ &&
+ node.nodeType == Node.TEXT_NODE && prop == 'textContent') {
+ node.__polymerTextContent__ = value;
+ } else {
+ super._setUnmanagedPropertyToNode(node, prop, value);
+ }
+ }
+ /**
+ * Find the parent model of this template instance. The parent model
+ * is either another templatize instance that had option `parentModel: true`,
+ * or else the host element.
+ *
+ * @return {!Polymer_PropertyEffects} The parent model of this instance
+ */
+ get parentModel() {
+ let model = this.__parentModel;
+ if (!model) {
+ let options;
+ model = this;
+ do {
+ // A template instance's `__dataHost` is a <template>
+ // `model.__dataHost.__dataHost` is the template's host
+ model = model.__dataHost.__dataHost;
+ } while ((options = model.__templatizeOptions) && !options.parentModel);
+ this.__parentModel = model;
+ }
+ return model;
+ }
+
+ /**
+ * Stub of HTMLElement's `dispatchEvent`, so that effects that may
+ * dispatch events safely no-op.
+ *
+ * @param {Event} event Event to dispatch
+ * @return {boolean} Always true.
+ */
+ dispatchEvent(event) { // eslint-disable-line no-unused-vars
+ return true;
+ }
+ }
+
+ /** @type {!DataTemplate} */
+ TemplateInstanceBase.prototype.__dataHost;
+ /** @type {!TemplatizeOptions} */
+ TemplateInstanceBase.prototype.__templatizeOptions;
+ /** @type {!Polymer_PropertyEffects} */
+ TemplateInstanceBase.prototype._methodHost;
+ /** @type {!Object} */
+ TemplateInstanceBase.prototype.__templatizeOwner;
+ /** @type {!Object} */
+ TemplateInstanceBase.prototype.__hostProps;
+
+ /**
+ * @constructor
+ * @extends {TemplateInstanceBase}
+ * @implements {Polymer_MutableData}
+ */
+ const MutableTemplateInstanceBase = Polymer.MutableData(TemplateInstanceBase);
+
+ function findMethodHost(template) {
+ // Technically this should be the owner of the outermost template.
+ // In shadow dom, this is always getRootNode().host, but we can
+ // approximate this via cooperation with our dataHost always setting
+ // `_methodHost` as long as there were bindings (or id's) on this
+ // instance causing it to get a dataHost.
+ let templateHost = template.__dataHost;
+ return templateHost && templateHost._methodHost || templateHost;
+ }
+
+ /* eslint-disable valid-jsdoc */
+ /**
+ * @suppress {missingProperties} class.prototype is not defined for some reason
+ */
+ function createTemplatizerClass(template, templateInfo, options) {
+ // Anonymous class created by the templatize
+ let base = options.mutableData ?
+ MutableTemplateInstanceBase : TemplateInstanceBase;
+ /**
+ * @constructor
+ * @extends {base}
+ * @private
+ */
+ let klass = class extends base { };
+ klass.prototype.__templatizeOptions = options;
+ klass.prototype._bindTemplate(template);
+ addNotifyEffects(klass, template, templateInfo, options);
+ return klass;
+ }
+
+ /**
+ * @suppress {missingProperties} class.prototype is not defined for some reason
+ */
+ function addPropagateEffects(template, templateInfo, options) {
+ let userForwardHostProp = options.forwardHostProp;
+ if (userForwardHostProp) {
+ // Provide data API and property effects on memoized template class
+ let klass = templateInfo.templatizeTemplateClass;
+ if (!klass) {
+ let base = options.mutableData ? MutableDataTemplate : DataTemplate;
+ klass = templateInfo.templatizeTemplateClass =
+ class TemplatizedTemplate extends base {};
+ // Add template - >instances effects
+ // and host <- template effects
+ let hostProps = templateInfo.hostProps;
+ for (let prop in hostProps) {
+ klass.prototype._addPropertyEffect('_host_' + prop,
+ klass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE,
+ {fn: createForwardHostPropEffect(prop, userForwardHostProp)});
+ klass.prototype._createNotifyingProperty('_host_' + prop);
+ }
+ }
+ upgradeTemplate(template, klass);
+ // Mix any pre-bound data into __data; no need to flush this to
+ // instances since they pull from the template at instance-time
+ if (template.__dataProto) {
+ // Note, generally `__dataProto` could be chained, but it's guaranteed
+ // to not be since this is a vanilla template we just added effects to
+ Object.assign(template.__data, template.__dataProto);
+ }
+ // Clear any pending data for performance
+ template.__dataTemp = {};
+ template.__dataPending = null;
+ template.__dataOld = null;
+ template._enableProperties();
+ }
+ }
+ /* eslint-enable valid-jsdoc */
+
+ function createForwardHostPropEffect(hostProp, userForwardHostProp) {
+ return function forwardHostProp(template, prop, props) {
+ userForwardHostProp.call(template.__templatizeOwner,
+ prop.substring('_host_'.length), props[prop]);
+ };
+ }
+
+ function addNotifyEffects(klass, template, templateInfo, options) {
+ let hostProps = templateInfo.hostProps || {};
+ for (let iprop in options.instanceProps) {
+ delete hostProps[iprop];
+ let userNotifyInstanceProp = options.notifyInstanceProp;
+ if (userNotifyInstanceProp) {
+ klass.prototype._addPropertyEffect(iprop,
+ klass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY,
+ {fn: createNotifyInstancePropEffect(iprop, userNotifyInstanceProp)});
+ }
+ }
+ if (options.forwardHostProp && template.__dataHost) {
+ for (let hprop in hostProps) {
+ klass.prototype._addPropertyEffect(hprop,
+ klass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY,
+ {fn: createNotifyHostPropEffect()});
+ }
+ }
+ }
+
+ function createNotifyInstancePropEffect(instProp, userNotifyInstanceProp) {
+ return function notifyInstanceProp(inst, prop, props) {
+ userNotifyInstanceProp.call(inst.__templatizeOwner,
+ inst, prop, props[prop]);
+ };
+ }
+
+ function createNotifyHostPropEffect() {
+ return function notifyHostProp(inst, prop, props) {
+ inst.__dataHost._setPendingPropertyOrPath('_host_' + prop, props[prop], true, true);
+ };
+ }
+
+ /**
+ * Module for preparing and stamping instances of templates that utilize
+ * Polymer's data-binding and declarative event listener features.
+ *
+ * Example:
+ *
+ * // Get a template from somewhere, e.g. light DOM
+ * let template = this.querySelector('template');
+ * // Prepare the template
+ * let TemplateClass = Polymer.Templatize.templatize(template);
+ * // Instance the template with an initial data model
+ * let instance = new TemplateClass({myProp: 'initial'});
+ * // Insert the instance's DOM somewhere, e.g. element's shadow DOM
+ * this.shadowRoot.appendChild(instance.root);
+ * // Changing a property on the instance will propagate to bindings
+ * // in the template
+ * instance.myProp = 'new value';
+ *
+ * The `options` dictionary passed to `templatize` allows for customizing
+ * features of the generated template class, including how outer-scope host
+ * properties should be forwarded into template instances, how any instance
+ * properties added into the template's scope should be notified out to
+ * the host, and whether the instance should be decorated as a "parent model"
+ * of any event handlers.
+ *
+ * // Customize property forwarding and event model decoration
+ * let TemplateClass = Polymer.Templatize.templatize(template, this, {
+ * parentModel: true,
+ * forwardHostProp(property, value) {...},
+ * instanceProps: {...},
+ * notifyInstanceProp(instance, property, value) {...},
+ * });
+ *
+ * @namespace
+ * @memberof Polymer
+ * @summary Module for preparing and stamping instances of templates
+ * utilizing Polymer templating features.
+ */
+ Polymer.Templatize = {
+
+ /**
+ * Returns an anonymous `Polymer.PropertyEffects` class bound to the
+ * `<template>` provided. Instancing the class will result in the
+ * template being stamped into a document fragment stored as the instance's
+ * `root` property, after which it can be appended to the DOM.
+ *
+ * Templates may utilize all Polymer data-binding features as well as
+ * declarative event listeners. Event listeners and inline computing
+ * functions in the template will be called on the host of the template.
+ *
+ * The constructor returned takes a single argument dictionary of initial
+ * property values to propagate into template bindings. Additionally
+ * host properties can be forwarded in, and instance properties can be
+ * notified out by providing optional callbacks in the `options` dictionary.
+ *
+ * Valid configuration in `options` are as follows:
+ *
+ * - `forwardHostProp(property, value)`: Called when a property referenced
+ * in the template changed on the template's host. As this library does
+ * not retain references to templates instanced by the user, it is the
+ * templatize owner's responsibility to forward host property changes into
+ * user-stamped instances. The `instance.forwardHostProp(property, value)`
+ * method on the generated class should be called to forward host
+ * properties into the template to prevent unnecessary property-changed
+ * notifications. Any properties referenced in the template that are not
+ * defined in `instanceProps` will be notified up to the template's host
+ * automatically.
+ * - `instanceProps`: Dictionary of property names that will be added
+ * to the instance by the templatize owner. These properties shadow any
+ * host properties, and changes within the template to these properties
+ * will result in `notifyInstanceProp` being called.
+ * - `mutableData`: When `true`, the generated class will skip strict
+ * dirty-checking for objects and arrays (always consider them to be
+ * "dirty").
+ * - `notifyInstanceProp(instance, property, value)`: Called when
+ * an instance property changes. Users may choose to call `notifyPath`
+ * on e.g. the owner to notify the change.
+ * - `parentModel`: When `true`, events handled by declarative event listeners
+ * (`on-event="handler"`) will be decorated with a `model` property pointing
+ * to the template instance that stamped it. It will also be returned
+ * from `instance.parentModel` in cases where template instance nesting
+ * causes an inner model to shadow an outer model.
+ *
+ * All callbacks are called bound to the `owner`. Any context
+ * needed for the callbacks (such as references to `instances` stamped)
+ * should be stored on the `owner` such that they can be retrieved via
+ * `this`.
+ *
+ * When `options.forwardHostProp` is declared as an option, any properties
+ * referenced in the template will be automatically forwarded from the host of
+ * the `<template>` to instances, with the exception of any properties listed in
+ * the `options.instanceProps` object. `instanceProps` are assumed to be
+ * managed by the owner of the instances, either passed into the constructor
+ * or set after the fact. Note, any properties passed into the constructor will
+ * always be set to the instance (regardless of whether they would normally
+ * be forwarded from the host).
+ *
+ * Note that `templatize()` can be run only once for a given `<template>`.
+ * Further calls will result in an error. Also, there is a special
+ * behavior if the template was duplicated through a mechanism such as
+ * `<dom-repeat>` or `<test-fixture>`. In this case, all calls to
+ * `templatize()` return the same class for all duplicates of a template.
+ * The class returned from `templatize()` is generated only once using
+ * the `options` from the first call. This means that any `options`
+ * provided to subsequent calls will be ignored. Therefore, it is very
+ * important not to close over any variables inside the callbacks. Also,
+ * arrow functions must be avoided because they bind the outer `this`.
+ * Inside the callbacks, any contextual information can be accessed
+ * through `this`, which points to the `owner`.
+ *
+ * @memberof Polymer.Templatize
+ * @param {!HTMLTemplateElement} template Template to templatize
+ * @param {Polymer_PropertyEffects=} owner Owner of the template instances;
+ * any optional callbacks will be bound to this owner.
+ * @param {Object=} options Options dictionary (see summary for details)
+ * @return {function(new:TemplateInstanceBase)} Generated class bound to the template
+ * provided
+ * @suppress {invalidCasts}
+ */
+ templatize(template, owner, options) {
+ options = /** @type {!TemplatizeOptions} */(options || {});
+ if (template.__templatizeOwner) {
+ throw new Error('A <template> can only be templatized once');
+ }
+ template.__templatizeOwner = owner;
+ const ctor = owner ? owner.constructor : TemplateInstanceBase;
+ let templateInfo = ctor._parseTemplate(template);
+ // Get memoized base class for the prototypical template, which
+ // includes property effects for binding template & forwarding
+ let baseClass = templateInfo.templatizeInstanceClass;
+ if (!baseClass) {
+ baseClass = createTemplatizerClass(template, templateInfo, options);
+ templateInfo.templatizeInstanceClass = baseClass;
+ }
+ // Host property forwarding must be installed onto template instance
+ addPropagateEffects(template, templateInfo, options);
+ // Subclass base class and add reference for this specific template
+ /** @private */
+ let klass = class TemplateInstance extends baseClass {};
+ klass.prototype._methodHost = findMethodHost(template);
+ klass.prototype.__dataHost = template;
+ klass.prototype.__templatizeOwner = owner;
+ klass.prototype.__hostProps = templateInfo.hostProps;
+ klass = /** @type {function(new:TemplateInstanceBase)} */(klass); //eslint-disable-line no-self-assign
+ return klass;
+ },
+
+ /**
+ * Returns the template "model" associated with a given element, which
+ * serves as the binding scope for the template instance the element is
+ * contained in. A template model is an instance of
+ * `TemplateInstanceBase`, and should be used to manipulate data
+ * associated with this template instance.
+ *
+ * Example:
+ *
+ * let model = modelForElement(el);
+ * if (model.index < 10) {
+ * model.set('item.checked', true);
+ * }
+ *
+ * @memberof Polymer.Templatize
+ * @param {HTMLTemplateElement} template The model will be returned for
+ * elements stamped from this template
+ * @param {Node=} node Node for which to return a template model.
+ * @return {TemplateInstanceBase} Template instance representing the
+ * binding scope for the element
+ */
+ modelForElement(template, node) {
+ let model;
+ while (node) {
+ // An element with a __templatizeInstance marks the top boundary
+ // of a scope; walk up until we find one, and then ensure that
+ // its __dataHost matches `this`, meaning this dom-repeat stamped it
+ if ((model = node.__templatizeInstance)) {
+ // Found an element stamped by another template; keep walking up
+ // from its __dataHost
+ if (model.__dataHost != template) {
+ node = model.__dataHost;
+ } else {
+ return model;
+ }
+ } else {
+ // Still in a template scope, keep going up until
+ // a __templatizeInstance is found
+ node = node.parentNode;
+ }
+ }
+ return null;
+ }
+ };
+
+ Polymer.TemplateInstanceBase = TemplateInstanceBase;
+
+ })();
+
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/unresolved.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/unresolved.html
new file mode 100644
index 00000000000..6c8752a97f2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/lib/utils/unresolved.html
@@ -0,0 +1,31 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<script>
+(function() {
+ 'use strict';
+
+ // unresolved
+
+ function resolve() {
+ document.body.removeAttribute('unresolved');
+ }
+
+ if (window.WebComponents) {
+ window.addEventListener('WebComponentsReady', resolve);
+ } else {
+ if (document.readyState === 'interactive' || document.readyState === 'complete') {
+ resolve();
+ } else {
+ window.addEventListener('DOMContentLoaded', resolve);
+ }
+ }
+
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package-lock.json
new file mode 100644
index 00000000000..ebb58f4e7a0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package-lock.json
@@ -0,0 +1,10899 @@
+{
+ "name": "@polymer/polymer",
+ "version": "2.6.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@polymer/gen-closure-declarations": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-closure-declarations/-/gen-closure-declarations-0.4.0.tgz",
+ "integrity": "sha512-gRDYxL/2nko1dJDIS+l+nc7BBzIz4x5LF+X+fskXcoiH+2A4PdCBeQXbCSpq9Dne5iig6MIr7GaK+Z3Y+5STCA==",
+ "dev": true,
+ "requires": {
+ "escodegen": "1.9.0",
+ "polymer-analyzer": "2.7.0"
+ }
+ },
+ "@polymer/gen-typescript-declarations": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@polymer/gen-typescript-declarations/-/gen-typescript-declarations-1.2.0.tgz",
+ "integrity": "sha512-a5DFXI3TdZSVOMH4608LVaBLmcr+mwM2+B8OSBiB9WFNCtdqzUXwtB5We6vBzrThXlO4uRo7d2pEqjNXMAlEkA==",
+ "dev": true,
+ "requires": {
+ "@types/doctrine": "0.0.3",
+ "@types/fs-extra": "5.0.0",
+ "@types/glob": "5.0.35",
+ "command-line-args": "5.0.2",
+ "command-line-usage": "4.1.0",
+ "doctrine": "2.1.0",
+ "escodegen": "1.9.0",
+ "fs-extra": "5.0.0",
+ "glob": "7.1.2",
+ "minimatch": "3.0.4",
+ "polymer-analyzer": "3.0.0-pre.12"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha1-6JLSk8ksnB0/mvcsFaVU+8fgiVo=",
+ "dev": true
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "polymer-analyzer": {
+ "version": "3.0.0-pre.12",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-3.0.0-pre.12.tgz",
+ "integrity": "sha512-QQL70IC85hI6q9uQeresEMcT1Qf8YR/zDe1qG8WWeeFAZk8z0lmzUpsfcAWz+bM4wpDdXrtd4HitIs4p0CHl/w==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2",
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "babel-generator": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "3.0.0",
+ "indent": "0.0.2",
+ "jsonschema": "1.2.2",
+ "minimatch": "3.0.4",
+ "parse5": "4.0.0",
+ "polymer-project-config": "3.8.1",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0",
+ "vscode-uri": "1.0.1"
+ },
+ "dependencies": {
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "@polymer/sinonjs": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/@polymer/sinonjs/-/sinonjs-1.17.1.tgz",
+ "integrity": "sha512-/U8F/cOTrbF2iVVYgINYmvKbtbexs+89Q3v8AaHADRYabTg7aOZGOb0RyWpOI+sUJt04kj63U4FwMhzW5r4wZA==",
+ "dev": true
+ },
+ "@polymer/test-fixture": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-0.0.3.tgz",
+ "integrity": "sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk=",
+ "dev": true
+ },
+ "@types/assert": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/assert/-/assert-0.0.29.tgz",
+ "integrity": "sha1-jlYnhbqlq9p8BKSfZmXq50MZKNM=",
+ "dev": true
+ },
+ "@types/babel-core": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.3.tgz",
+ "integrity": "sha512-OlUjfM+Qv+XwcaucEiekBIhfAYe4q4ruvQZZcCkOtQZ27Hykxm1LLY2s0mE6LtP9XQt6x+TUvS70KW2e8Mz0ZA==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-template": "6.25.0",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-template": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.0.tgz",
+ "integrity": "sha512-TtyfVlrprX92xSuKa8D//7vFz5kBJODBw5IQ1hQXehqO+me26vt1fyNxOZyXhUq2a7jRyT72V8p68IyH4NEZNA==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2",
+ "@types/babylon": "6.16.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/babel-types": {
+ "version": "6.25.2",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-6.25.2.tgz",
+ "integrity": "sha512-+3bMuktcY4a70a0KZc8aPJlEOArPuAKQYHU5ErjkOqGJdx8xuEEVK6nWogqigBOJ8nKPxRpyCUDTCPmZ3bUxGA==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "6.25.2"
+ }
+ },
+ "@types/bluebird": {
+ "version": "3.5.20",
+ "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.20.tgz",
+ "integrity": "sha512-Wk41MVdF+cHBfVXj/ufUHJeO3BlIQr1McbHZANErMykaCWeDSZbH5erGjNBw2/3UlRdSxZbLfSuQTzFmPOYFsA==",
+ "dev": true
+ },
+ "@types/body-parser": {
+ "version": "1.16.8",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz",
+ "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==",
+ "dev": true,
+ "requires": {
+ "@types/express": "4.11.0",
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/compression": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/compression/-/compression-0.0.33.tgz",
+ "integrity": "sha1-ldxzOiM5qoRjgdfxN3eS0lU9wn0=",
+ "dev": true,
+ "requires": {
+ "@types/express": "4.11.0"
+ }
+ },
+ "@types/content-type": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/content-type/-/content-type-1.1.2.tgz",
+ "integrity": "sha512-w2d7fBCYbCBUBTGtkC4JfX1FicTtgEmq7wTTjc7rC5RA/JdB1Bi7o88nKzUqAnIIBXJVmq0n4tTmF3PJN8QqCg==",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/escodegen": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.2.tgz",
+ "integrity": "sha1-fOpBqyQukQ6xD2WuGK66RZ1ms18=",
+ "dev": true
+ },
+ "@types/estraverse": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estraverse/-/estraverse-0.0.6.tgz",
+ "integrity": "sha1-Zp9833KreX5hJfjQD+0z1M8wwiE=",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.37"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.37",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.37.tgz",
+ "integrity": "sha512-1IT6vNpmU9w18P3v6mN9idv18z5KPVTi4t7+rU9VLnkxo0LCam8IXy/eSVzOaQ1Wpabra2cN3A8K/SliPK/Suw==",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/express": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.0.tgz",
+ "integrity": "sha512-N1Wdp3v4KmdO3W/CM7KXrDwM4xcVZjlHF2dAOs7sNrTUX8PY3G4n9NkaHlfjGFEfgFeHmRRjywoBd4VkujDs9w==",
+ "dev": true,
+ "requires": {
+ "@types/body-parser": "1.16.8",
+ "@types/express-serve-static-core": "4.11.1",
+ "@types/serve-static": "1.13.1"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz",
+ "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/freeport": {
+ "version": "1.0.21",
+ "resolved": "https://registry.npmjs.org/@types/freeport/-/freeport-1.0.21.tgz",
+ "integrity": "sha1-c/ZUPtZ9PKP/+XuYVZFZi3CSBm8=",
+ "dev": true,
+ "optional": true
+ },
+ "@types/fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "5.0.35",
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/launchpad": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/launchpad/-/launchpad-0.6.0.tgz",
+ "integrity": "sha1-NylhCbfyd/bmxf1+DAcGvJGPu1E=",
+ "dev": true,
+ "optional": true
+ },
+ "@types/mime": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz",
+ "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/mz": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.31.tgz",
+ "integrity": "sha1-pNgMCC/v5x5Ap8DwfR5lVbu8e1I=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ },
+ "@types/opn": {
+ "version": "3.0.28",
+ "resolved": "https://registry.npmjs.org/@types/opn/-/opn-3.0.28.tgz",
+ "integrity": "sha1-CX0NHJtXSVc6XZbfEyOHu20CEYo=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/pem": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@types/pem/-/pem-1.9.3.tgz",
+ "integrity": "sha512-+hHbGi9PAyHVeRdMJN6yNuMWoshJ+7oTqYuhBB1/vHq0Tfu46ucbvgxmhwBfe0GCiJZvCa20VHhHsA0mY5W6hQ==",
+ "dev": true
+ },
+ "@types/serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==",
+ "dev": true,
+ "requires": {
+ "@types/express-serve-static-core": "4.11.1",
+ "@types/mime": "0.0.29"
+ }
+ },
+ "@types/spdy": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.4.tgz",
+ "integrity": "sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/ua-parser-js": {
+ "version": "0.7.32",
+ "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
+ "integrity": "sha512-+z7Q72Mlnq6SFkQYHzLg2Z70pIsgRVzgx1b5PV8eUv5uaZ/zoqIs45XnhtToW4gTeX4FbjIP49nhIjyvPF4rPg==",
+ "dev": true
+ },
+ "@types/vinyl": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz",
+ "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/vinyl-fs": {
+ "version": "0.0.28",
+ "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-0.0.28.tgz",
+ "integrity": "sha1-RmMBe8gCxlcOrk80Cf1cq/l8v94=",
+ "dev": true,
+ "requires": {
+ "@types/glob-stream": "6.1.0",
+ "@types/node": "6.0.96",
+ "@types/vinyl": "2.0.2"
+ }
+ },
+ "@types/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@types/winston": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.7.tgz",
+ "integrity": "sha512-jNhbkxPtt9xbzvihfA0OavjJbpCIyTDSmwE03BVXgCKcz9lwNsq4cg2wsNkY4Av5eH35ttBArhYtVJa6CIrg2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@webcomponents/shadycss": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.1.1.tgz",
+ "integrity": "sha512-7iVMw1HU0e5tTxL1OIqw/RBGmnYuz1HUNd7t1UYq7VmoBOl5Zm4g3spUBSksyd97SiXauFlXAeSpA0/in9k+dw==",
+ "dev": true
+ },
+ "@webcomponents/webcomponentsjs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz",
+ "integrity": "sha512-7toNyVlrl7vJnY3PU0eXIK1KWq8phfnEe1IwOdCMxkIl/BfUkUB2aaVs45R0LSx1qxHRnkqj0vlGtskUvKkNkA==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "accessibility-developer-tools": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz",
+ "integrity": "sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz",
+ "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "adm-zip": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
+ "dev": true,
+ "optional": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extend": "3.0.1",
+ "semver": "5.0.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+ "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "ansi-colors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.0.1.tgz",
+ "integrity": "sha512-yopkAU0ZD/WQ56Tms3xLn6jRuX3SyUMAVi0FdmDIbmmnHW3jHiI1sQFdUl3gfVddjnrsP3Y6ywFKvCRopvoVIA==",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.0.tgz",
+ "integrity": "sha512-v+0wW9Wezwsyb0uF4aBVCjmSqit3Ru7PZFziGF0o2KwTvN2zWfTi3BRLq9EkJFdg3eBbyERXGTntVpBxH1J68Q==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "append-field": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz",
+ "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=",
+ "dev": true
+ },
+ "archiver": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
+ "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "1.3.0",
+ "async": "2.6.0",
+ "buffer-crc32": "0.2.13",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "readable-stream": "2.3.3",
+ "tar-stream": "1.5.2",
+ "walkdir": "0.0.11",
+ "zip-stream": "1.2.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ }
+ }
+ },
+ "archiver-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
+ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lazystream": "1.0.0",
+ "lodash": "4.17.4",
+ "normalize-path": "2.1.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "argv-tools": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz",
+ "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1"
+ },
+ "dependencies": {
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz",
+ "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
+ "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-evaluate-path": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.2.0.tgz",
+ "integrity": "sha512-0EK9TUKMxHL549hWDPkQoS7R0Ozg1CDLheVBHYds2B2qoAvmr9ejY3zOXFsrICK73TN7bPhU14PBeKc8jcBTwg==",
+ "dev": true
+ },
+ "babel-helper-flip-expressions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.2.0.tgz",
+ "integrity": "sha512-rAsPA1pWBc7e2E6HepkP2e1sXugT+Oq/VCqhyuHJ8aJ2d/ifwnJfd4Qxjm21qlW43AN8tqaeByagKK6wECFMSw==",
+ "dev": true
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-is-nodes-equiv": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
+ "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
+ "dev": true
+ },
+ "babel-helper-is-void-0": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.2.0.tgz",
+ "integrity": "sha512-Axj1AYuD0E3Dl7nT3KxROP7VekEofz3XtEljzURf3fABalLpr8PamtgLFt+zuxtaCxRf9iuZmbAMMYWri5Bazw==",
+ "dev": true
+ },
+ "babel-helper-mark-eval-scopes": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.2.0.tgz",
+ "integrity": "sha512-KJuwrOUcHbvbh6he4xRXZFLaivK9DF9o3CrvpWnK1Wp0B+1ANYABXBMgwrnNFIDK/AvicxQ9CNr8wsgivlp4Aw==",
+ "dev": true
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remove-or-void": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.2.0.tgz",
+ "integrity": "sha512-1Z41upf/XR+PwY7Nd+F15Jo5BiQi5205ZXUuKed3yoyQgDkMyoM7vAdjEJS/T+M6jy32sXjskMUgms4zeiVtRA==",
+ "dev": true
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-to-multiple-sequence-expressions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.2.0.tgz",
+ "integrity": "sha512-ij9lpfdP3+Zc/7kNwa+NXbTrUlsYEWPwt/ugmQO0qflzLrveTIkbfOqQztvitk81aG5NblYDQXDlRohzu3oa8Q==",
+ "dev": true
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-minify-builtins": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz",
+ "integrity": "sha512-4i+8ntaS8gwVUcOz5y+zE+55OVOl2nTbmHV51D4wAIiKcRI8U5K//ip1GHfhsgk/NJrrHK7h97Oy5jpqt0Iixg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-constant-folding": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.2.0.tgz",
+ "integrity": "sha512-B3ffQBEUQ8ydlIkYv2MkZtTCbV7FAkWAV7NkyhcXlGpD10PaCxNGQ/B9oguXGowR1m16Q5nGhvNn8Pkn1MO6Hw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-dead-code-elimination": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.2.0.tgz",
+ "integrity": "sha512-zE7y3pRyzA4zK5nBou0kTcwUTSQ/AiFrynt1cIEYN7vcO2gS9ZFZoI0aO9JYLUdct5fsC1vfB35408yrzTyVfg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0",
+ "babel-helper-mark-eval-scopes": "0.2.0",
+ "babel-helper-remove-or-void": "0.2.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "babel-plugin-minify-flip-comparisons": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.2.0.tgz",
+ "integrity": "sha512-QOqXSEmD/LhT3LpM1WCyzAGcQZYYKJF7oOHvS6QbpomHenydrV53DMdPX2mK01icBExKZcJAHF209wvDBa+CSg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-guarded-expressions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.2.0.tgz",
+ "integrity": "sha512-5+NSPdRQ9mnrHaA+zFj+D5OzmSiv90EX5zGH6cWQgR/OUqmCHSDqgTRPFvOctgpo8MJyO7Rt7ajs2UfLnlAwYg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-infinity": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.2.0.tgz",
+ "integrity": "sha512-U694vrla1lN6vDHWGrR832t3a/A2eh+kyl019LxEE2+sS4VTydyOPRsAOIYAdJegWRA4cMX1lm9azAN0cLIr8g==",
+ "dev": true
+ },
+ "babel-plugin-minify-mangle-names": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.2.0.tgz",
+ "integrity": "sha512-Gixuak1/CO7VCdjn15/8Bxe/QsAtDG4zPbnsNoe1mIJGCIH/kcmSjFhMlGJtXDQZd6EKzeMfA5WmX9+jvGRefw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-mark-eval-scopes": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-numeric-literals": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.2.0.tgz",
+ "integrity": "sha512-VcLpb+r1YS7+RIOXdRsFVLLqoh22177USpHf+JM/g1nZbzdqENmfd5v534MLAbRErhbz6SyK+NQViVzVtBxu8g==",
+ "dev": true
+ },
+ "babel-plugin-minify-replace": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.2.0.tgz",
+ "integrity": "sha512-SEW6zoSVxh3OH6E1LCgyhhTWMnCv+JIRu5h5IlJDA11tU4ZeSF7uPQcO4vN/o52+FssRB26dmzJ/8D+z0QPg5Q==",
+ "dev": true
+ },
+ "babel-plugin-minify-simplify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.2.0.tgz",
+ "integrity": "sha512-Mj3Mwy2zVosMfXDWXZrQH5/uMAyfJdmDQ1NVqit+ArbHC3LlXVzptuyC1JxTyai/wgFvjLaichm/7vSUshkWqw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "0.2.0",
+ "babel-helper-is-nodes-equiv": "0.0.1",
+ "babel-helper-to-multiple-sequence-expressions": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-type-constructors": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.2.0.tgz",
+ "integrity": "sha512-NiOvvA9Pq6bki6nP4BayXwT5GZadw7DJFDDzHmkpnOQpENWe8RtHtKZM44MG1R6EQ5XxgbLdsdhswIzTkFlO5g==",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "0.2.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-inline-consecutive-adds": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.2.0.tgz",
+ "integrity": "sha512-GlhOuLOQ28ua9prg0hT33HslCrEmz9xWXy9ZNZSACppCyRxxRW+haYtRgm7uYXCcd0q8ggCWD2pfWEJp5iiZfQ==",
+ "dev": true
+ },
+ "babel-plugin-transform-member-expression-literals": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.5.tgz",
+ "integrity": "sha512-Ux3ligf+ukzWaCbBYOstDuFBhRgMiJHlpJBKV4P47qtzVkd0lg1ddPj9fqIJqAM0n+CvxipyrZrnNnw3CdtQCg==",
+ "dev": true
+ },
+ "babel-plugin-transform-merge-sibling-variables": {
+ "version": "6.8.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.6.tgz",
+ "integrity": "sha512-o5Jioq553HtEAUN5uty7ELJMenXIxHI3PIs1yLqYWYQwP6mg6IPVAJ+U7i4zr9XGF/kb2RGsdehglGTV+vngqA==",
+ "dev": true
+ },
+ "babel-plugin-transform-minify-booleans": {
+ "version": "6.8.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.3.tgz",
+ "integrity": "sha512-bPbUhkeN2Nc0KH0/A19GwQGj8w+CvdJzyu8t59VoEDgsNMQ9Bopzi5DrVkrSsVjbYUaZpzq/DYLrH+wD5K2Tig==",
+ "dev": true
+ },
+ "babel-plugin-transform-property-literals": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.5.tgz",
+ "integrity": "sha512-MmiQsQ5AcIaRZMJD0zY5C4H3xuHm06/nWgtOsz7AXV44VEIXIlPiJ39IFYJ4Qx67/fEm8zJAedzR8t+B7d10Bg==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-regexp-constructors": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.2.0.tgz",
+ "integrity": "sha512-7IsQ6aQx6LAaOqy97/PthTf+5Nx9grZww3r6E62IdWe76Yr8KsuwVjxzqSPQvESJqTE3EMADQ9S0RtwWDGNG9Q==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-console": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.5.tgz",
+ "integrity": "sha512-uuCKvtweCyIvvC8fi92EcWRtO2Kt5KMNMRK6BhpDXdeb3sxvGM7453RSmgeu4DlKns3OlvY9Ep5Q9m5a7RQAgg==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-debugger": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.5.tgz",
+ "integrity": "sha512-InDQDdHPOLJKM+G6oXrEesf+P29QFBmcTXID+TAvZziVz+38xe2VO/Bn3FcRcRtnOOycbgsJkUNp9jIK+ist6g==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-undefined": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.2.0.tgz",
+ "integrity": "sha512-O8v57tPMHkp89kA4ZfQEYds/pzgvz/QYerBJjIuL5/Jc7RnvMVRA5gJY9zFKP7WayW8WOSBV4vh8Y8FJRio+ow==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0"
+ }
+ },
+ "babel-plugin-transform-simplify-comparison-operators": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.5.tgz",
+ "integrity": "sha512-B3HlBZb+Uq86nRj5yNPO6pJ3noEdqHvzYkEYoUWtrsWTv48ZIRatYlumoOiif/v8llF13YjYjx9zhyznDx+N9g==",
+ "dev": true
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-undefined-to-void": {
+ "version": "6.8.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.3.tgz",
+ "integrity": "sha512-goYwp8dMrzHD6x9GjZ2M85Mk2vxf1h85CnUgAjfftUnlJvzF4uj5MrbReHBTbjQ96C8CuRzvhYZ3tv8H3Sc1ZA==",
+ "dev": true
+ },
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-minify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz",
+ "integrity": "sha512-mR8Q44RmMzm18bM2Lqd9uiPopzk5GDCtVuquNbLFmX6lOKnqWoenaNBxnWW0UhBFC75lEHTIgNGCbnsRI0pJVw==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-minify-builtins": "0.2.0",
+ "babel-plugin-minify-constant-folding": "0.2.0",
+ "babel-plugin-minify-dead-code-elimination": "0.2.0",
+ "babel-plugin-minify-flip-comparisons": "0.2.0",
+ "babel-plugin-minify-guarded-expressions": "0.2.0",
+ "babel-plugin-minify-infinity": "0.2.0",
+ "babel-plugin-minify-mangle-names": "0.2.0",
+ "babel-plugin-minify-numeric-literals": "0.2.0",
+ "babel-plugin-minify-replace": "0.2.0",
+ "babel-plugin-minify-simplify": "0.2.0",
+ "babel-plugin-minify-type-constructors": "0.2.0",
+ "babel-plugin-transform-inline-consecutive-adds": "0.2.0",
+ "babel-plugin-transform-member-expression-literals": "6.8.5",
+ "babel-plugin-transform-merge-sibling-variables": "6.8.6",
+ "babel-plugin-transform-minify-booleans": "6.8.3",
+ "babel-plugin-transform-property-literals": "6.8.5",
+ "babel-plugin-transform-regexp-constructors": "0.2.0",
+ "babel-plugin-transform-remove-console": "6.8.5",
+ "babel-plugin-transform-remove-debugger": "6.8.5",
+ "babel-plugin-transform-remove-undefined": "0.2.0",
+ "babel-plugin-transform-simplify-comparison-operators": "6.8.5",
+ "babel-plugin-transform-undefined-to-void": "6.8.3",
+ "lodash.isplainobject": "4.0.6"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.3",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.0",
+ "pascalcase": "0.1.1"
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
+ "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
+ "dev": true,
+ "optional": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "binaryextensions": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz",
+ "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=",
+ "dev": true
+ },
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.15"
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.3.0",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz",
+ "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.1",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.1"
+ }
+ },
+ "browser-capabilities": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/browser-capabilities/-/browser-capabilities-0.2.2.tgz",
+ "integrity": "sha512-iS5g9+yT/T7jr9BTjDi5Hu2soieyce457ad+fdp6uDlYp6pacX7ZG/nYtCZ+KQiMCxRfbd65OhAg7GbVJ3RcBw==",
+ "dev": true,
+ "requires": {
+ "@types/ua-parser-js": "0.7.32",
+ "ua-parser-js": "0.7.17"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browserstack": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.0.tgz",
+ "integrity": "sha1-tWVCWtYu1ywQgqHrl51TE8fUdU8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "https-proxy-agent": "1.0.0"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
+ "dev": true,
+ "requires": {
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.1.0",
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.7"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
+ "dev": true
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "cleankill": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cleankill/-/cleankill-2.0.0.tgz",
+ "integrity": "sha1-WYMN/ItBHVPccq0J1Fp46jMWGpE=",
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "process-nextick-args": "1.0.7",
+ "through2": "2.0.3"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "command-line-args": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz",
+ "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==",
+ "dev": true,
+ "requires": {
+ "argv-tools": "0.1.1",
+ "array-back": "2.0.0",
+ "find-replace": "2.0.1",
+ "lodash.camelcase": "4.3.0",
+ "typical": "2.6.1"
+ },
+ "dependencies": {
+ "find-replace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz",
+ "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "test-value": "3.0.0"
+ }
+ },
+ "test-value": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz",
+ "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "command-line-usage": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz",
+ "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "4.0.0",
+ "array-back": "2.0.0",
+ "table-layout": "0.4.2",
+ "typical": "2.6.1"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "compress-commons": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
+ "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "crc32-stream": "2.0.0",
+ "normalize-path": "2.1.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "compressible": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
+ "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz",
+ "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "3.0.0",
+ "compressible": "2.0.12",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "configstore": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz",
+ "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.1.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.3.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz",
+ "integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII=",
+ "dev": true
+ },
+ "crc32-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
+ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
+ "dev": true,
+ "requires": {
+ "crc": "3.5.0",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "crc": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz",
+ "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=",
+ "dev": true
+ }
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ }
+ }
+ },
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.7"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.0.tgz",
+ "integrity": "sha1-bvSgmwX5iw41jW2T1Mo8rsZnKAM=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ }
+ }
+ },
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
+ "dicer": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+ "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "streamsearch": "0.1.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "dom-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz",
+ "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=",
+ "dev": true,
+ "requires": {
+ "urijs": "1.19.0"
+ }
+ },
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz",
+ "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz",
+ "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ }
+ }
+ },
+ "engine.io": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz",
+ "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
+ "uws": "0.14.5",
+ "ws": "3.3.3"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz",
+ "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
+ "yeast": "0.1.2"
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary2": "1.0.2"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es6-promise": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz",
+ "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ }
+ },
+ "eslint": {
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.16.0.tgz",
+ "integrity": "sha512-YVXV4bDhNoHHcv0qzU4Meof7/P26B4EuaktMi5L1Tnt52Aov85KmYA8c5D+xyZr/BkhvwUqr011jDSD/QTULxg==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.1.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0",
+ "espree": "3.5.2",
+ "esquery": "1.0.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "11.2.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.1.0",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.5.0",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.2.0.tgz",
+ "integrity": "sha512-RDC7Tj17I/56wpVvCVLSXtnn2Fo6CQZ9vaj+ARn+qlzm/ozbKQZe+j9fvHZCbSq+4JSGjTpKEt7p/AA1IKXRFA==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "eslint-plugin-html": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.2.tgz",
+ "integrity": "sha512-CrQd0F8GWdNWnu4PFrYZl+LjUCXNVy2h0uhDMtnf/7VKc9HRcnkXSrlg0BSGfptZPSzmwnnwCaREAa9+fnQhYw==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "3.9.2"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.3.0",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
+ "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ },
+ "dependencies": {
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
+ "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.0",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.2",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.1",
+ "serve-static": "1.13.1",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "0.1.1",
+ "color-support": "1.1.3",
+ "time-stamp": "1.1.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+ "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pend": "1.2.0"
+ }
+ },
+ "feature-detect-es6": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.4.0.tgz",
+ "integrity": "sha512-7OnRV38WLydGuGcdm/fGk2SG9uo5ljslBSbPhCfEW5Gl0lX/IliaAVXYiYUBcI0UHTbepqO4T1SkJ74K8gtcDg==",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "find-port": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-port/-/find-port-1.0.1.tgz",
+ "integrity": "sha1-2whKbL+ZVk2Zhprnn73s9m6KGFw=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "find-replace": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
+ "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "test-value": "2.1.0"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "1.0.0",
+ "is-glob": "3.1.0",
+ "micromatch": "3.1.5",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "is-plain-object": "2.0.4",
+ "object.defaults": "1.1.0",
+ "object.pick": "1.3.0",
+ "parse-filepath": "1.0.2"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ },
+ "dependencies": {
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "fork-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz",
+ "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "freeport": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/freeport/-/freeport-1.0.5.tgz",
+ "integrity": "sha1-JV6KuEFwwzuoXZkOghrl9KGpvF0=",
+ "dev": true,
+ "optional": true
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-exists-sync": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
+ "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
+ "dev": true
+ },
+ "fs-extra": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz",
+ "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "4.0.0",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "0.1.0"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "4.5.3",
+ "glob2base": "0.0.12",
+ "minimatch": "2.0.10",
+ "ordered-read-streams": "0.1.0",
+ "through2": "0.6.5",
+ "unique-stream": "1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "2.0.10",
+ "once": "1.4.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "0.5.2"
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "0.1.1"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "1.0.2",
+ "is-windows": "1.0.1",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "1.0.1",
+ "which": "1.3.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "3.1.21",
+ "lodash": "1.0.2",
+ "minimatch": "0.2.14"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "1.2.3",
+ "inherits": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "google-closure-compiler": {
+ "version": "20180204.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20180204.0.0.tgz",
+ "integrity": "sha1-sJf/t1DGXKB6LaRp12xVHTuOIaM=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "vinyl": "2.1.0",
+ "vinyl-sourcemaps-apply": "0.2.1"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "1.0.0",
+ "chalk": "1.1.3",
+ "deprecated": "0.0.1",
+ "gulp-util": "3.0.8",
+ "interpret": "1.1.0",
+ "liftoff": "2.5.0",
+ "minimist": "1.2.0",
+ "orchestrator": "0.3.8",
+ "pretty-hrtime": "1.0.3",
+ "semver": "4.3.6",
+ "tildify": "1.2.0",
+ "v8flags": "2.1.1",
+ "vinyl-fs": "0.3.14"
+ }
+ },
+ "gulp-babel": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-6.1.3.tgz",
+ "integrity": "sha512-tm15R3rt4gO59WXCuqrwf4QXJM9VIJC+0J2NPYSC6xZn+cZRD5y5RPGAiHaDxCJq7Rz5BDljlrk3cEjWADF+wQ==",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "object-assign": "4.1.1",
+ "plugin-error": "1.0.1",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl-sourcemaps-apply": "0.2.1"
+ },
+ "dependencies": {
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-eslint": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp-eslint/-/gulp-eslint-4.0.2.tgz",
+ "integrity": "sha512-fcFUQzFsN6dJ6KZlG+qPOEkqfcevRUXgztkYCvhNvJeSvOicC8ucutN4qR/ID8LmNZx9YPIkBzazTNnVvbh8wg==",
+ "dev": true,
+ "requires": {
+ "eslint": "4.16.0",
+ "fancy-log": "1.3.2",
+ "plugin-error": "1.0.1"
+ }
+ },
+ "gulp-if": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz",
+ "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=",
+ "dev": true,
+ "requires": {
+ "gulp-match": "1.0.3",
+ "ternary-stream": "2.0.1",
+ "through2": "2.0.3"
+ }
+ },
+ "gulp-match": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz",
+ "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "gulp-replace": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.6.1.tgz",
+ "integrity": "sha1-Eb+Mj85TPjPi9qjy9DC5VboL4GY=",
+ "dev": true,
+ "requires": {
+ "istextorbinary": "1.0.2",
+ "readable-stream": "2.3.3",
+ "replacestream": "4.0.3"
+ }
+ },
+ "gulp-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gulp-size/-/gulp-size-3.0.0.tgz",
+ "integrity": "sha1-yxrI5rqD3t5SQwxH/QOTJPAD/4I=",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.1",
+ "fancy-log": "1.3.2",
+ "gzip-size": "4.1.0",
+ "plugin-error": "0.1.2",
+ "pretty-bytes": "4.0.2",
+ "stream-counter": "1.0.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-slice": "0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
+ "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.2.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "1.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "0.1.1",
+ "ansi-red": "0.1.1",
+ "arr-diff": "1.1.0",
+ "arr-union": "2.1.0",
+ "extend-shallow": "1.1.4"
+ }
+ },
+ "supports-color": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
+ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.5.1",
+ "graceful-fs": "4.1.11",
+ "strip-bom": "2.0.0",
+ "through2": "2.0.3",
+ "vinyl": "1.2.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "vinyl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "1.0.0",
+ "array-uniq": "1.0.3",
+ "beeper": "1.1.1",
+ "chalk": "1.1.3",
+ "dateformat": "2.2.0",
+ "fancy-log": "1.3.2",
+ "gulplog": "1.0.0",
+ "has-gulplog": "0.1.0",
+ "lodash._reescape": "3.0.0",
+ "lodash._reevaluate": "3.0.0",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.template": "3.6.2",
+ "minimist": "1.2.0",
+ "multipipe": "0.1.2",
+ "object-assign": "3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl": "0.5.3"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ }
+ }
+ },
+ "gulp-vulcanize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/gulp-vulcanize/-/gulp-vulcanize-7.0.0.tgz",
+ "integrity": "sha512-SnyChu0+DbCK7QWN0UStPKEG8igkv0feLfx25jLAbrEULTHmvUPhx1BF3vYz6SsA32Azxp5UoU6jNI4Q8PzBPQ==",
+ "dev": true,
+ "requires": {
+ "plugin-error": "0.1.2",
+ "safe-buffer": "5.1.1",
+ "through2": "2.0.3",
+ "vulcanize": "1.16.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-slice": "0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "1.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "0.1.1",
+ "ansi-red": "0.1.1",
+ "arr-diff": "1.1.0",
+ "arr-union": "2.1.0",
+ "extend-shallow": "1.1.4"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "1.0.1"
+ }
+ },
+ "gzip-size": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz",
+ "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1",
+ "pify": "3.0.0"
+ }
+ },
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.9.0",
+ "is-my-json-valid": "2.17.1",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz",
+ "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+ "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
+ "dev": true
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "wbuf": "1.7.2"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.1",
+ "domutils": "1.6.2",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.4",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1"
+ }
+ },
+ "hydrolysis": {
+ "version": "1.25.0",
+ "resolved": "https://registry.npmjs.org/hydrolysis/-/hydrolysis-1.25.0.tgz",
+ "integrity": "sha1-pPsUo3oeA7DbUtiqpXxoInKhTYQ=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0",
+ "babel-polyfill": "6.26.0",
+ "doctrine": "0.7.2",
+ "dom5": "1.1.0",
+ "escodegen": "1.9.0",
+ "espree": "3.5.2",
+ "estraverse": "3.1.0",
+ "path-is-absolute": "1.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz",
+ "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=",
+ "dev": true,
+ "requires": {
+ "esutils": "1.1.6",
+ "isarray": "0.0.1"
+ }
+ },
+ "dom5": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-1.1.0.tgz",
+ "integrity": "sha1-Ogx3AMCDq0xNJpOKeLDwxtzDd5Q=",
+ "dev": true,
+ "requires": {
+ "parse5": "1.5.1"
+ }
+ },
+ "estraverse": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz",
+ "integrity": "sha1-FeKKRGuLgrxwDMyLlseK9NoNbLo=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz",
+ "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/indent/-/indent-0.0.2.tgz",
+ "integrity": "sha1-jHnwgBkFWbaHA0uEx676l9WpEdk=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "ipaddr.js": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
+ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "1.0.0",
+ "is-windows": "1.0.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz",
+ "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-odd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz",
+ "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "1.0.0"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-valid-glob": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
+ "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz",
+ "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "istextorbinary": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz",
+ "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=",
+ "dev": true,
+ "requires": {
+ "binaryextensions": "1.0.1",
+ "textextensions": "1.0.2"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "requires": {
+ "package-json": "4.0.1"
+ }
+ },
+ "launchpad": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/launchpad/-/launchpad-0.7.0.tgz",
+ "integrity": "sha1-9CfTwOFehp7hVROCi6/vwW+ce8M=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.6.0",
+ "browserstack": "1.5.0",
+ "debug": "2.6.9",
+ "plist": "2.1.0",
+ "q": "1.5.1",
+ "underscore": "1.8.3"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "lazy-cache": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
+ "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=",
+ "dev": true,
+ "requires": {
+ "set-getter": "0.1.0"
+ }
+ },
+ "lazypipe": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazypipe/-/lazypipe-1.0.1.tgz",
+ "integrity": "sha1-FHGu9rN6NA1Rw030Rpnc7wZMGUA=",
+ "dev": true,
+ "requires": {
+ "stream-combiner": "0.2.2"
+ }
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "findup-sync": "2.0.0",
+ "fined": "1.1.0",
+ "flagged-respawn": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "object.map": "1.0.1",
+ "rechoir": "0.6.2",
+ "resolve": "1.5.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.padend": {
+ "version": "4.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz",
+ "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash._basetostring": "3.0.1",
+ "lodash._basevalues": "3.0.0",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0",
+ "lodash.keys": "3.1.2",
+ "lodash.restparam": "3.6.1",
+ "lodash.templatesettings": "3.1.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0"
+ }
+ },
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
+ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "dev": true,
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz",
+ "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "md5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
+ "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+ "dev": true,
+ "requires": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "1.1.6"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz",
+ "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.0",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.7",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz",
+ "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz",
+ "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "multer": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz",
+ "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=",
+ "dev": true,
+ "requires": {
+ "append-field": "0.1.0",
+ "busboy": "0.2.14",
+ "concat-stream": "1.6.0",
+ "mkdirp": "0.5.1",
+ "object-assign": "3.0.0",
+ "on-finished": "2.3.0",
+ "type-is": "1.6.15",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0",
+ "object-assign": "4.1.1",
+ "thenify-all": "1.6.0"
+ }
+ },
+ "nanomatch": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz",
+ "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "is-odd": "1.0.0",
+ "kind-of": "5.1.0",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.0",
+ "snapdragon": "0.8.1",
+ "to-regex": "3.0.1"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "natives": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz",
+ "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "nodegit-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nodegit-promise/-/nodegit-promise-4.0.0.tgz",
+ "integrity": "sha1-VyKxhPLfcycWEGSnkdLoQskWezQ=",
+ "dev": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "nomnom": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+ "dev": true,
+ "requires": {
+ "chalk": "0.4.0",
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+ "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "1.0.0",
+ "has-color": "0.1.7",
+ "strip-ansi": "0.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+ "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=",
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "4.3.6",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "1.0.1",
+ "array-slice": "1.1.0",
+ "for-own": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "make-iterator": "1.0.0"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ }
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz",
+ "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.1.0"
+ }
+ },
+ "opn": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz",
+ "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "0.1.5",
+ "sequencify": "0.0.7",
+ "stream-consume": "0.1.0"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0",
+ "semver": "5.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ }
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "1.0.0",
+ "map-cache": "0.2.2",
+ "path-root": "0.1.1"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-posix": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz",
+ "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "0.1.2"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ }
+ }
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
+ "pem": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/pem/-/pem-1.12.3.tgz",
+ "integrity": "sha512-hT7GwvQL35+0iqgYUl8vn5I5pAVR0HcJas07TXL8bNaR4c5kAFRquk4ZqQk1F9YMcQOr6WjGdY5OnDC0RBnzig==",
+ "dev": true,
+ "requires": {
+ "md5": "2.2.1",
+ "os-tmpdir": "1.0.2",
+ "safe-buffer": "5.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true,
+ "optional": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "plist": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
+ "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "base64-js": "1.2.0",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.27"
+ }
+ },
+ "plugin-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "1.0.1",
+ "arr-diff": "4.0.0",
+ "arr-union": "3.1.0",
+ "extend-shallow": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.7",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-2.7.0.tgz",
+ "integrity": "sha512-yD5FYQ8thX/2vHTaEgTtCs/NSG3ko4VlEb0IjM/PFsu03lHNHnpadC1NGwKyvI9vOjcFhnw4mDEVW0lbxLo8Eg==",
+ "dev": true,
+ "requires": {
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/escodegen": "0.0.2",
+ "@types/estraverse": "0.0.6",
+ "@types/estree": "0.0.37",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "escodegen": "1.9.0",
+ "espree": "3.5.2",
+ "estraverse": "4.2.0",
+ "jsonschema": "1.2.2",
+ "parse5": "2.2.3",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0"
+ },
+ "dependencies": {
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ }
+ }
+ },
+ "polymer-build": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/polymer-build/-/polymer-build-2.1.1.tgz",
+ "integrity": "sha512-SW6gxS0UPz864jECKMXPEdtq3549xzludPAQpxEqeDz6pSAeY/AFDWRG78Gw+z+mS2KES16Wwkc9IdMagBj3FQ==",
+ "dev": true,
+ "requires": {
+ "@types/mz": "0.0.31",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "@types/vinyl": "2.0.2",
+ "@types/vinyl-fs": "0.0.28",
+ "dom5": "2.3.0",
+ "multipipe": "1.0.2",
+ "mz": "2.7.0",
+ "parse5": "2.2.3",
+ "plylog": "0.5.0",
+ "polymer-analyzer": "2.7.0",
+ "polymer-bundler": "3.1.1",
+ "polymer-project-config": "3.8.1",
+ "sw-precache": "5.2.1",
+ "vinyl": "1.2.0",
+ "vinyl-fs": "2.4.4"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-stream": {
+ "version": "5.3.5",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
+ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "glob": "5.0.15",
+ "glob-parent": "3.1.0",
+ "micromatch": "2.3.11",
+ "ordered-read-streams": "0.3.0",
+ "through2": "0.6.5",
+ "to-absolute-glob": "0.1.1",
+ "unique-stream": "2.2.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "multipipe": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz",
+ "integrity": "sha1-zBPv2DPJzamfIk+GhGG44aP9k50=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.1.4",
+ "object-assign": "4.1.1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
+ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
+ "dev": true,
+ "requires": {
+ "is-stream": "1.1.0",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
+ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "1.0.1",
+ "through2-filter": "2.0.0"
+ }
+ },
+ "vinyl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-fs": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
+ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.3",
+ "glob-stream": "5.3.5",
+ "graceful-fs": "4.1.11",
+ "gulp-sourcemaps": "1.6.0",
+ "is-valid-glob": "0.3.0",
+ "lazystream": "1.0.0",
+ "lodash.isequal": "4.5.0",
+ "merge-stream": "1.0.1",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1",
+ "readable-stream": "2.3.3",
+ "strip-bom": "2.0.0",
+ "strip-bom-stream": "1.0.0",
+ "through2": "2.0.3",
+ "through2-filter": "2.0.0",
+ "vali-date": "1.0.0",
+ "vinyl": "1.2.0"
+ }
+ }
+ }
+ },
+ "polymer-bundler": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/polymer-bundler/-/polymer-bundler-3.1.1.tgz",
+ "integrity": "sha512-a/MItYr/rTRZ8Ymj5npmoAAm89RC5hRh4yz8bs22GyMn+NlE7HqJ4EzLrPkyRWlOyBhbhYFPx2Zot8PlaWXvmQ==",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "dom5": "2.3.0",
+ "espree": "3.5.2",
+ "mkdirp": "0.5.1",
+ "parse5": "2.2.3",
+ "polymer-analyzer": "2.7.0",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "ansi-escape-sequences": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz",
+ "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ }
+ },
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-args": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz",
+ "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "find-replace": "1.0.3",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-3.0.8.tgz",
+ "integrity": "sha1-tqIJeMGzg0d/XBGlKUKLiAv+D00=",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "3.0.0",
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "table-layout": "0.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ }
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.3.0.tgz",
+ "integrity": "sha1-buINxIPbNxs+XIf3BO0vfHmdLJo=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "core-js": "2.5.3",
+ "deep-extend": "0.4.2",
+ "feature-detect-es6": "1.4.0",
+ "typical": "2.6.1",
+ "wordwrapjs": "2.0.0"
+ }
+ },
+ "wordwrapjs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-2.0.0.tgz",
+ "integrity": "sha1-q1X2leYRjak4WP3XDAU9HF4BrCA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.8.1.tgz",
+ "integrity": "sha512-MLvnM9gexFWg7nynY24eHZG6NLXocmk718sVds/sx2CAJ6iihhC0JMhhOIa6jnad9KQrHyGl/cs3mMRaaub5Fg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ }
+ },
+ "polyserve": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/polyserve/-/polyserve-0.23.0.tgz",
+ "integrity": "sha512-ijzCbFttKG1F0hMTWWIzMoo+sxsfpXctoHFigw2ViBcvUt/aUBfJCUTHPKHhi/3zAgtw5Ej3SgoIOY9LflpXAw==",
+ "dev": true,
+ "requires": {
+ "@types/assert": "0.0.29",
+ "@types/babel-core": "6.25.3",
+ "@types/babylon": "6.16.2",
+ "@types/compression": "0.0.33",
+ "@types/content-type": "1.1.2",
+ "@types/express": "4.11.0",
+ "@types/mime": "0.0.29",
+ "@types/mz": "0.0.29",
+ "@types/node": "8.5.9",
+ "@types/opn": "3.0.28",
+ "@types/parse5": "2.2.34",
+ "@types/pem": "1.9.3",
+ "@types/serve-static": "1.13.1",
+ "@types/spdy": "3.4.4",
+ "@types/ua-parser-js": "0.7.32",
+ "babel-core": "6.26.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "babylon": "6.18.0",
+ "browser-capabilities": "0.2.2",
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "compression": "1.7.1",
+ "content-type": "1.0.4",
+ "dom5": "2.3.0",
+ "express": "4.16.2",
+ "find-port": "1.0.1",
+ "http-proxy-middleware": "0.17.4",
+ "lru-cache": "4.1.1",
+ "mime": "1.4.1",
+ "mz": "2.7.0",
+ "opn": "3.0.3",
+ "parse5": "2.2.3",
+ "pem": "1.12.3",
+ "polymer-build": "2.1.1",
+ "requirejs": "2.3.5",
+ "resolve": "1.5.0",
+ "send": "0.14.2",
+ "spdy": "3.4.7"
+ },
+ "dependencies": {
+ "@types/mz": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.29.tgz",
+ "integrity": "sha1-vCRyjGSZc/HHhR6QM/nOUlZowns=",
+ "dev": true,
+ "requires": {
+ "@types/bluebird": "3.5.20",
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/node": {
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.9.tgz",
+ "integrity": "sha512-s+c3AjymyAccTI4hcgNFK4mToH8l+hyPDhu4LIkn71lRy56FLijGu00fyLgldjM/846Pmk9N4KFUs2P8GDs0pA==",
+ "dev": true
+ },
+ "ansi-escape-sequences": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz",
+ "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ }
+ },
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-args": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz",
+ "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "find-replace": "1.0.3",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-3.0.8.tgz",
+ "integrity": "sha1-tqIJeMGzg0d/XBGlKUKLiAv+D00=",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "3.0.0",
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "table-layout": "0.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.101",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz",
+ "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.2",
+ "statuses": "1.3.1"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.14.2.tgz",
+ "integrity": "sha1-ObBDiz9RC+Xcb2Z6EfcWiTaM3u8=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "1.5.1",
+ "mime": "1.3.4",
+ "ms": "0.7.2",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz",
+ "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ },
+ "table-layout": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.3.0.tgz",
+ "integrity": "sha1-buINxIPbNxs+XIf3BO0vfHmdLJo=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "core-js": "2.5.3",
+ "deep-extend": "0.4.2",
+ "feature-detect-es6": "1.4.0",
+ "typical": "2.6.1",
+ "wordwrapjs": "2.0.0"
+ }
+ },
+ "wordwrapjs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-2.0.0.tgz",
+ "integrity": "sha1-q1X2leYRjak4WP3XDAU9HF4BrCA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+ "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "promisify-node": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/promisify-node/-/promisify-node-0.4.0.tgz",
+ "integrity": "sha1-MoA4dOxBF4TkeGwzmQKoeheaRpw=",
+ "dev": true,
+ "requires": {
+ "nodegit-promise": "4.0.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
+ "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.5.2"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.4.tgz",
+ "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=",
+ "dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ },
+ "dependencies": {
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ }
+ }
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz",
+ "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.4"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "replacestream": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
+ "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.2.1"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ }
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "requirejs": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz",
+ "integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "global-modules": "1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "run-sequence": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz",
+ "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "fancy-log": "1.3.2",
+ "plugin-error": "0.1.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-slice": "0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "1.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "0.1.1",
+ "ansi-red": "0.1.1",
+ "arr-diff": "1.1.0",
+ "arr-union": "2.1.0",
+ "extend-shallow": "1.1.4"
+ }
+ }
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ },
+ "sauce-connect-launcher": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.3.tgz",
+ "integrity": "sha1-0vkxrXro/avxlopEDnsgQXrKf4Y=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "adm-zip": "0.4.7",
+ "async": "2.6.0",
+ "https-proxy-agent": "1.0.0",
+ "lodash": "4.17.4",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ }
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selenium-standalone": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.12.0.tgz",
+ "integrity": "sha1-eJcw2wmhBfHM4SxkJNeV0RxUO9Q=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.6.0",
+ "commander": "2.9.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "lodash": "4.17.4",
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "progress": "2.0.0",
+ "request": "2.79.0",
+ "tar-stream": "1.5.2",
+ "urijs": "1.19.0",
+ "which": "1.3.0",
+ "yauzl": "2.9.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "5.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ }
+ }
+ },
+ "send": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.11.1.tgz",
+ "integrity": "sha1-G+q/1C+eJwn5kCivMHisErRwktU=",
+ "dev": true,
+ "requires": {
+ "debug": "2.1.3",
+ "depd": "1.0.1",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.1",
+ "etag": "1.5.1",
+ "fresh": "0.2.4",
+ "mime": "1.2.11",
+ "ms": "0.7.0",
+ "on-finished": "2.2.1",
+ "range-parser": "1.0.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
+ "integrity": "sha1-zoqxte6PvuK/o7Yzyrk9NmtjQY4=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.0"
+ }
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
+ "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz",
+ "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz",
+ "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz",
+ "integrity": "sha1-VMUN4E7kJpVWKSWsVmWIKRvn6eo=",
+ "dev": true,
+ "requires": {
+ "crc": "3.2.1"
+ }
+ },
+ "fresh": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz",
+ "integrity": "sha1-NYJJkgbJcjcUGQ7ddLRgT+tKYUw=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz",
+ "integrity": "sha1-hlvpTC5zl62KV9pqYzpuLzB5i4M=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz",
+ "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+ "dev": true
+ }
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.1"
+ },
+ "dependencies": {
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+ "dev": true
+ },
+ "serviceworker-cache-polyfill": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz",
+ "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=",
+ "dev": true
+ },
+ "set-getter": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz",
+ "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=",
+ "dev": true,
+ "requires": {
+ "to-object-path": "0.3.0"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sinon": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz",
+ "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==",
+ "dev": true,
+ "requires": {
+ "diff": "3.2.0",
+ "formatio": "1.2.0",
+ "lolex": "1.6.0",
+ "native-promise-only": "0.8.1",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.3.0",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.7"
+ }
+ },
+ "sinon-chai": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz",
+ "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz",
+ "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "2.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "socket.io": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "engine.io": "3.1.4",
+ "socket.io-adapter": "1.1.1",
+ "socket.io-client": "2.0.4",
+ "socket.io-parser": "3.1.2"
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.4",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "3.1.2",
+ "to-array": "0.1.4"
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz",
+ "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "has-binary2": "1.0.2",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.0.3",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.2"
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ }
+ },
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "stacky": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/stacky/-/stacky-1.3.1.tgz",
+ "integrity": "sha1-PxF+UYe5pz0j+HbWnwXIWxGAShI=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "lodash": "3.10.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ }
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ },
+ "stream-combiner": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz",
+ "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1",
+ "through": "2.3.8"
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz",
+ "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=",
+ "dev": true
+ },
+ "stream-counter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz",
+ "integrity": "sha1-kc8lac5NxQYf6816yyY5SloRR1E=",
+ "dev": true
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
+ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "sw-precache": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz",
+ "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==",
+ "dev": true,
+ "requires": {
+ "dom-urls": "1.1.0",
+ "es6-promise": "4.2.4",
+ "glob": "7.1.2",
+ "lodash.defaults": "4.2.0",
+ "lodash.template": "4.4.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "pretty-bytes": "4.0.2",
+ "sw-toolbox": "3.6.0",
+ "update-notifier": "2.3.0"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.templatesettings": "4.1.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0"
+ }
+ },
+ "pretty-bytes": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+ "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
+ "dev": true
+ }
+ }
+ },
+ "sw-toolbox": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz",
+ "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=",
+ "dev": true,
+ "requires": {
+ "path-to-regexp": "1.7.0",
+ "serviceworker-cache-polyfill": "4.0.0"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "table-layout": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.2.tgz",
+ "integrity": "sha512-tygyl5+eSHj4chpq5Zfy6cpc7MOUBClAW9ozghFH7hg9bAUzShOYn+/vUzTRkKOSLJWKfgYtP2tAU2c0oAD8eg==",
+ "dev": true,
+ "requires": {
+ "array-back": "2.0.0",
+ "deep-extend": "0.5.0",
+ "lodash.padend": "4.6.1",
+ "typical": "2.6.1",
+ "wordwrapjs": "3.0.0"
+ }
+ },
+ "tar-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz",
+ "integrity": "sha1-+8bG6DwaGdTLSMfZYXH8JI7/x78=",
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "end-of-stream": "1.4.1",
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "temp": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-tmpdir": "1.0.2",
+ "rimraf": "2.2.8"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0"
+ }
+ },
+ "ternary-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz",
+ "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.3",
+ "fork-stream": "0.0.4",
+ "merge-stream": "1.0.1",
+ "through2": "2.0.3"
+ }
+ },
+ "test-value": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
+ "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "typical": "2.6.1"
+ },
+ "dependencies": {
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ }
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "textextensions": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz",
+ "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI=",
+ "dev": true
+ },
+ "thenify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
+ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "dev": true,
+ "requires": {
+ "thenify": "3.3.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "through2-filter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
+ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-absolute-glob": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
+ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1"
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz",
+ "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "regex-not": "1.0.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.7.tgz",
+ "integrity": "sha512-4Rh17pAMVdMWzktddFhISRnUnFIStObtUMNGzDwlA6w/77bmGv3aBbRdCmQR6IjzfkTo9otnW+2K/cDRhKSxDA==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz",
+ "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz",
+ "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=",
+ "dev": true,
+ "requires": {
+ "boxen": "1.3.0",
+ "chalk": "2.3.0",
+ "configstore": "3.1.1",
+ "import-lazy": "2.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "urijs": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.0.tgz",
+ "integrity": "sha512-Qs2odXn0hST5VSPVjpi73CMqtbAoanahaqWBujGU+IyMrMqpWcIhDewxQRhCkmqYxuyvICDcSuLdv2O7ncWBGw==",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ }
+ },
+ "use": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz",
+ "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "lazy-cache": "2.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "dev": true
+ },
+ "uws": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz",
+ "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=",
+ "dev": true,
+ "optional": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "vali-date": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
+ "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "vargs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz",
+ "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "clone-buffer": "1.0.0",
+ "clone-stats": "1.0.0",
+ "cloneable-readable": "1.0.0",
+ "remove-trailing-separator": "1.1.0",
+ "replace-ext": "1.0.0"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3",
+ "glob-stream": "3.1.18",
+ "glob-watcher": "0.0.6",
+ "graceful-fs": "3.0.11",
+ "mkdirp": "0.5.1",
+ "strip-bom": "1.0.0",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "1.1.1"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "vscode-uri": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.1.tgz",
+ "integrity": "sha1-Eahr7+rDxKo+wIYjZRo8gabQu8g=",
+ "dev": true
+ },
+ "vulcanize": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/vulcanize/-/vulcanize-1.16.0.tgz",
+ "integrity": "sha512-TYlFljSc896b5+0FmMiw0JAMrHNBiHx0IAFC/dQR3Dxdb9Nx43ohm6wMWTlPXQn4sk/0WkqfgoAA6SLxyvPCLQ==",
+ "dev": true,
+ "requires": {
+ "dom5": "1.3.6",
+ "es6-promise": "2.3.0",
+ "hydrolysis": "1.25.0",
+ "nopt": "3.0.6",
+ "path-posix": "1.0.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ },
+ "@types/parse5": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-0.0.31.tgz",
+ "integrity": "sha1-6Cekk6RDsVbhtYKi5MO9wAQPLuc=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.101"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.101",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz",
+ "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "dom5": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-1.3.6.tgz",
+ "integrity": "sha1-pwiKn8XzsI3J9u2kx6uuskGUXg0=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "4.2.23",
+ "@types/parse5": "0.0.31",
+ "clone": "1.0.3",
+ "parse5": "1.5.1"
+ }
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true
+ }
+ }
+ },
+ "walkdir": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
+ "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
+ "dev": true
+ },
+ "wbuf": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
+ "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "wct-local": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wct-local/-/wct-local-2.1.0.tgz",
+ "integrity": "sha512-OiMSbxp6e5tyvTbUA4VAQbw4we53EXEmekx9BbIgS/HryoQISzap5DSAE/kvpRpJ2Axt0z12d8ChxqwNflApfA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/express": "4.11.0",
+ "@types/freeport": "1.0.21",
+ "@types/launchpad": "0.6.0",
+ "@types/node": "9.4.0",
+ "@types/which": "1.3.1",
+ "chalk": "2.3.0",
+ "cleankill": "2.0.0",
+ "freeport": "1.0.5",
+ "launchpad": "0.7.0",
+ "promisify-node": "0.4.0",
+ "selenium-standalone": "6.12.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "9.4.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.0.tgz",
+ "integrity": "sha512-zkYho6/4wZyX6o9UQ8rd0ReEaiEYNNCqYFIAACe2Tf9DrYlgzWW27OigYHnnztnnZQwVRpwWmZKegFmDpinIsA==",
+ "dev": true,
+ "optional": true
+ },
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "wct-sauce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wct-sauce/-/wct-sauce-2.0.0.tgz",
+ "integrity": "sha512-amICD6iZOVJEJ4uymfdPFdk17CkSIYwHPDzDh4cH/ITYcNskZ3VB/2VPtU9ZIKuWMVdqPwfBovXcjlhn8+8idA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cleankill": "2.0.0",
+ "lodash": "3.10.1",
+ "request": "2.79.0",
+ "sauce-connect-launcher": "1.2.3",
+ "temp": "0.8.3",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true,
+ "optional": true
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "wd": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/wd/-/wd-1.5.0.tgz",
+ "integrity": "sha512-e/KpzTlhtSG3Ek0AcRz4G6PhxGsc53Nro+GkI1er9p05tWQ7W9dpGZR5SqQzGUqvbaqJCThDSAGaY7LHgi6MiA==",
+ "dev": true,
+ "requires": {
+ "archiver": "1.3.0",
+ "async": "2.0.1",
+ "lodash": "4.16.2",
+ "mkdirp": "0.5.1",
+ "q": "1.4.1",
+ "request": "2.79.0",
+ "underscore.string": "3.3.4",
+ "vargs": "0.1.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz",
+ "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.16.2"
+ }
+ },
+ "lodash": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz",
+ "integrity": "sha1-PmJtuCcEimmSgaihJSJjJs/A5lI=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+ "dev": true
+ }
+ }
+ },
+ "web-component-tester": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/web-component-tester/-/web-component-tester-6.5.0.tgz",
+ "integrity": "sha512-C8nK7mhLTGzm/3QcjBIzI5Pk3OLrEvup246Pc9stAD+sTvLWtH8tjVL+vU5KCOAdudKVnelGMbE4ICaNrl69+A==",
+ "dev": true,
+ "requires": {
+ "@polymer/sinonjs": "1.17.1",
+ "@polymer/test-fixture": "0.0.3",
+ "@webcomponents/webcomponentsjs": "1.1.0",
+ "accessibility-developer-tools": "2.12.0",
+ "async": "2.6.0",
+ "body-parser": "1.18.2",
+ "chai": "4.1.2",
+ "chalk": "1.1.3",
+ "cleankill": "2.0.0",
+ "express": "4.16.2",
+ "findup-sync": "1.0.0",
+ "glob": "7.1.2",
+ "lodash": "3.10.1",
+ "mocha": "3.5.3",
+ "multer": "1.3.0",
+ "nomnom": "1.8.1",
+ "polyserve": "0.23.0",
+ "promisify-node": "0.4.0",
+ "resolve": "1.5.0",
+ "semver": "5.5.0",
+ "send": "0.11.1",
+ "server-destroy": "1.0.1",
+ "sinon": "2.4.1",
+ "sinon-chai": "2.14.0",
+ "socket.io": "2.0.4",
+ "stacky": "1.3.1",
+ "update-notifier": "2.3.0",
+ "wct-local": "2.1.0",
+ "wct-sauce": "2.0.0",
+ "wd": "1.5.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ }
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "detect-file": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz",
+ "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=",
+ "dev": true,
+ "requires": {
+ "fs-exists-sync": "0.1.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-tilde": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
+ "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-1.0.0.tgz",
+ "integrity": "sha1-b35LV7buOkA3tEFOrt6j9Y9x4Ow=",
+ "dev": true,
+ "requires": {
+ "detect-file": "0.1.0",
+ "is-glob": "2.0.1",
+ "micromatch": "2.3.11",
+ "resolve-dir": "0.1.1"
+ }
+ },
+ "global-modules": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
+ "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
+ "dev": true,
+ "requires": {
+ "global-prefix": "0.1.5",
+ "is-windows": "0.2.0"
+ }
+ },
+ "global-prefix": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
+ "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "0.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "resolve-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
+ "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "1.2.2",
+ "global-modules": "0.2.3"
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
+ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "dev": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz",
+ "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==",
+ "dev": true,
+ "requires": {
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
+ "dev": true,
+ "optional": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
+ "dev": true,
+ "optional": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yauzl": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz",
+ "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "fd-slicer": "1.0.1"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "zip-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
+ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "1.3.0",
+ "compress-commons": "1.2.2",
+ "lodash": "4.17.4",
+ "readable-stream": "2.3.3"
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package.json
new file mode 100644
index 00000000000..6dd76ec68cb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@polymer/polymer",
+ "version": "2.6.0",
+ "description": "The Polymer library makes it easy to create your own web components. Give your element some markup and properties, and then use it on a site. Polymer provides features like dynamic templates and data binding to reduce the amount of boilerplate you need to write",
+ "main": "polymer.html",
+ "directories": {
+ "doc": "docs",
+ "test": "test"
+ },
+ "devDependencies": {
+ "@polymer/gen-closure-declarations": "^0.4.0",
+ "@polymer/gen-typescript-declarations": "^1.2.0",
+ "@webcomponents/shadycss": "^1.1.0",
+ "@webcomponents/webcomponentsjs": "^1.1.0",
+ "babel-preset-minify": "^0.2.0",
+ "del": "^3.0.0",
+ "dom5": "^3.0.0",
+ "eslint-plugin-html": "^4.0.1",
+ "fs-extra": "^5.0.0",
+ "google-closure-compiler": "^20180204.0.0",
+ "gulp": "^3.9.1",
+ "gulp-babel": "^6.1.2",
+ "gulp-eslint": "^4.0.0",
+ "gulp-if": "^2.0.1",
+ "gulp-replace": "^0.6.1",
+ "gulp-size": "^3.0.0",
+ "gulp-vulcanize": "^7.0.0",
+ "lazypipe": "^1.0.1",
+ "merge-stream": "^1.0.1",
+ "parse5": "^4.0.0",
+ "polymer-build": "^2.1.1",
+ "run-sequence": "^2.2.0",
+ "through2": "^2.0.0",
+ "web-component-tester": "^6.5.0"
+ },
+ "scripts": {
+ "build": "gulp",
+ "test": "npm run lint && wct",
+ "lint": "gulp lint",
+ "version": "gulp update-version && git add lib/utils/boot.html",
+ "update-types": "gulp update-types"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Polymer/polymer.git"
+ },
+ "author": "The Polymer Project Authors",
+ "license": "BSD-3-Clause",
+ "bugs": {
+ "url": "https://github.com/Polymer/polymer/issues"
+ },
+ "homepage": "https://github.com/Polymer/polymer",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer-element.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer-element.html
new file mode 100644
index 00000000000..aeb4a0e1937
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer-element.html
@@ -0,0 +1,44 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="lib/mixins/element-mixin.html">
+<!-- import html-tag to export html -->
+<link rel="import" href="lib/utils/html-tag.html">
+<script>
+(function() {
+ 'use strict';
+
+ /**
+ * Base class that provides the core API for Polymer's meta-programming
+ * features including template stamping, data-binding, attribute deserialization,
+ * and property change observation.
+ *
+ * @customElement
+ * @polymer
+ * @memberof Polymer
+ * @constructor
+ * @implements {Polymer_ElementMixin}
+ * @extends HTMLElement
+ * @appliesMixin Polymer.ElementMixin
+ * @summary Custom element base class that provides the core API for Polymer's
+ * key meta-programming features including template stamping, data-binding,
+ * attribute deserialization, and property change observation
+ */
+ const Element = Polymer.ElementMixin(HTMLElement);
+ /**
+ * @constructor
+ * @implements {Polymer_ElementMixin}
+ * @extends {HTMLElement}
+ */
+ Polymer.Element = Element;
+
+ // NOTE: this is here for modulizer to export `html` for the module version of this file
+ Polymer.html = Polymer.html;
+})();
+</script> \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer.html
new file mode 100644
index 00000000000..a2ceeadb0cc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/polymer.html
@@ -0,0 +1,30 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<link rel="import" href="lib/legacy/legacy-element-mixin.html">
+<link rel="import" href="lib/legacy/polymer-fn.html">
+<!-- template elements -->
+<link rel="import" href="lib/legacy/templatizer-behavior.html">
+<link rel="import" href="lib/elements/dom-bind.html">
+<link rel="import" href="lib/elements/dom-repeat.html">
+<link rel="import" href="lib/elements/dom-if.html">
+<link rel="import" href="lib/elements/array-selector.html">
+<!-- custom-style -->
+<link rel="import" href="lib/elements/custom-style.html">
+<!-- bc behaviors -->
+<link rel="import" href="lib/legacy/mutable-data-behavior.html">
+<!-- import html-tag to export html -->
+<link rel="import" href="lib/utils/html-tag.html">
+<script>
+ // bc
+ Polymer.Base = Polymer.LegacyElementMixin(HTMLElement).prototype;
+
+ // NOTE: this is here for modulizer to export `html` for the module version of this file
+ Polymer.html = Polymer.html;
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/extra-types.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/extra-types.d.ts
new file mode 100644
index 00000000000..c4d38f5fb52
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/extra-types.d.ts
@@ -0,0 +1,147 @@
+/**
+ * This file contains the types that are required for compilation of the
+ * Polymer generated type declarations, but which could not themselves be
+ * automatically generated.
+ */
+
+// Types from "externs/polymer-externs.js"
+
+interface PolymerElementPropertiesMeta {
+ type?: Function;
+ value?: any;
+ readOnly?: boolean;
+ computed?: string;
+ reflectToAttribute?: boolean;
+ notify?: boolean;
+ observer?: string|((val: any, old: any) => void);
+}
+
+type PolymerElementProperties = {
+ [key: string]: PolymerElementPropertiesMeta
+};
+
+// TODO Document these properties.
+interface PolymerInit {
+ is: string;
+ extends?: string;
+ properties?: PolymerElementProperties;
+ observers?: string[];
+ template?: HTMLTemplateElement|string;
+ hostAttributes?: {[key: string]: any};
+ listeners?: {[key: string]: string};
+}
+
+// Types from "externs/polymer-internal-shared-types.js"
+
+interface StampedTemplate extends DocumentFragment {
+ __noInsertionPoint: boolean;
+ nodeList: Node[];
+ $: {[key: string]: Node};
+ templateInfo?: TemplateInfo;
+}
+
+interface NodeInfo {
+ id: string;
+ events: {name: string, value: string}[];
+ hasInsertionPoint: boolean;
+ templateInfo: TemplateInfo;
+ parentInfo: NodeInfo;
+ parentIndex: number;
+ infoIndex: number;
+ bindings: Binding[];
+}
+
+interface TemplateInfo {
+ nodeInfoList: NodeInfo[];
+ nodeList: Node[];
+ stripWhitespace: boolean;
+ hasInsertionPoint?: boolean;
+ hostProps: Object;
+ propertyEffects: Object;
+ nextTemplateInfo?: TemplateInfo;
+ previousTemplateInfo?: TemplateInfo;
+ childNodes: Node[];
+ wasPreBound: boolean;
+}
+
+interface LiteralBindingPart {
+ literal: string;
+ compoundIndex?: number;
+}
+
+interface MethodArg {
+ literal: boolean;
+ name: string;
+ value: string|number;
+ rootProperty?: string;
+ structured?: boolean;
+ wildcard?: boolean;
+}
+
+interface MethodSignature {
+ methodName: string;
+ static: boolean;
+ args: MethodArg[];
+ dynamicFn?: boolean;
+}
+
+interface ExpressionBindingPart {
+ mode: string;
+ negate: boolean;
+ source: string;
+ dependencies: Array<MethodArg|string>;
+ customEvent: boolean;
+ signature: Object|null;
+ event: string;
+}
+
+type BindingPart = LiteralBindingPart|ExpressionBindingPart;
+
+interface Binding {
+ kind: string;
+ target: string;
+ parts: BindingPart[];
+ literal?: string;
+ isCompound: boolean;
+ listenerEvent?: string;
+ listenerNegate?: boolean;
+}
+
+interface AsyncInterface {
+ run: (fn: Function, delay?: number) => number;
+ cancel: (handle: number) => void;
+}
+
+// Types from "lib/utils/gestures.html"
+
+interface GestureRecognizer {
+ reset: () => void;
+ mousedown?: (e: MouseEvent) => void;
+ mousemove?: (e: MouseEvent) => void;
+ mouseup?: (e: MouseEvent) => void;
+ touchstart?: (e: TouchEvent) => void;
+ touchmove?: (e: TouchEvent) => void;
+ touchend?: (e: TouchEvent) => void;
+ click?: (e: MouseEvent) => void;
+}
+
+/**
+ * Not defined in the TypeScript DOM library.
+ * See https://developer.mozilla.org/en-US/docs/Web/API/IdleDeadline
+ */
+interface IdleDeadline {
+ didTimeout: boolean;
+ timeRemaining(): number;
+}
+
+/**
+ * Polymer defines its own `Element` class, shadowing the standard global
+ * `Element` class. This means that references to `Element` within the `Polymer`
+ * namespace inadvertently reference `Polymer.Element`. Here we define an alias
+ * of the global `Element`, so that we can reference it from declarations within
+ * the `Polymer` namespace.
+ *
+ * See https://github.com/Microsoft/TypeScript/issues/983 for general discussion
+ * of this shadowing problem in TypeScript.
+ */
+type _Element = Element;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/array-selector.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/array-selector.d.ts
new file mode 100644
index 00000000000..1d99ee52e4e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/array-selector.d.ts
@@ -0,0 +1,200 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/elements/array-selector.html
+ */
+
+/// <reference path="../../polymer-element.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/array-splice.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element mixin for recording dynamic associations between item paths in a
+ * master `items` array and a `selected` array such that path changes to the
+ * master array (at the host) element or elsewhere via data-binding) are
+ * correctly propagated to items in the selected array and vice-versa.
+ *
+ * The `items` property accepts an array of user data, and via the
+ * `select(item)` and `deselect(item)` API, updates the `selected` property
+ * which may be bound to other parts of the application, and any changes to
+ * sub-fields of `selected` item(s) will be kept in sync with items in the
+ * `items` array. When `multi` is false, `selected` is a property
+ * representing the last selected item. When `multi` is true, `selected`
+ * is an array of multiply selected items.
+ */
+ function ArraySelectorMixin<T extends new (...args: any[]) => {}>(base: T): T & ArraySelectorMixinConstructor & Polymer.ElementMixinConstructor & Polymer.PropertyEffectsConstructor & Polymer.TemplateStampConstructor & Polymer.PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor & Polymer.PropertiesMixinConstructor;
+
+ interface ArraySelectorMixinConstructor {
+ new(...args: any[]): ArraySelectorMixin;
+ }
+
+ interface ArraySelectorMixin {
+
+ /**
+ * An array containing items from which selection will be made.
+ */
+ items: any[]|null|undefined;
+
+ /**
+ * When `true`, multiple items may be selected at once (in this case,
+ * `selected` is an array of currently selected items). When `false`,
+ * only one item may be selected at a time.
+ */
+ multi: boolean|null|undefined;
+
+ /**
+ * When `multi` is true, this is an array that contains any selected.
+ * When `multi` is false, this is the currently selected item, or `null`
+ * if no item is selected.
+ */
+ selected: object|object[]|null;
+
+ /**
+ * When `multi` is false, this is the currently selected item, or `null`
+ * if no item is selected.
+ */
+ selectedItem: object|null;
+
+ /**
+ * When `true`, calling `select` on an item that is already selected
+ * will deselect the item.
+ */
+ toggle: boolean|null|undefined;
+
+ /**
+ * Clears the selection state.
+ */
+ clearSelection(): void;
+
+ /**
+ * Returns whether the item is currently selected.
+ *
+ * @param item Item from `items` array to test
+ * @returns Whether the item is selected
+ */
+ isSelected(item: any): boolean;
+
+ /**
+ * Returns whether the item is currently selected.
+ *
+ * @param idx Index from `items` array to test
+ * @returns Whether the item is selected
+ */
+ isIndexSelected(idx: number): boolean;
+
+ /**
+ * Deselects the given item if it is already selected.
+ *
+ * @param item Item from `items` array to deselect
+ */
+ deselect(item: any): void;
+
+ /**
+ * Deselects the given index if it is already selected.
+ *
+ * @param idx Index from `items` array to deselect
+ */
+ deselectIndex(idx: number): void;
+
+ /**
+ * Selects the given item. When `toggle` is true, this will automatically
+ * deselect the item if already selected.
+ *
+ * @param item Item from `items` array to select
+ */
+ select(item: any): void;
+
+ /**
+ * Selects the given index. When `toggle` is true, this will automatically
+ * deselect the item if already selected.
+ *
+ * @param idx Index from `items` array to select
+ */
+ selectIndex(idx: number): void;
+ }
+
+ /**
+ * Element implementing the `Polymer.ArraySelector` mixin, which records
+ * dynamic associations between item paths in a master `items` array and a
+ * `selected` array such that path changes to the master array (at the host)
+ * element or elsewhere via data-binding) are correctly propagated to items
+ * in the selected array and vice-versa.
+ *
+ * The `items` property accepts an array of user data, and via the
+ * `select(item)` and `deselect(item)` API, updates the `selected` property
+ * which may be bound to other parts of the application, and any changes to
+ * sub-fields of `selected` item(s) will be kept in sync with items in the
+ * `items` array. When `multi` is false, `selected` is a property
+ * representing the last selected item. When `multi` is true, `selected`
+ * is an array of multiply selected items.
+ *
+ * Example:
+ *
+ * ```html
+ * <dom-module id="employee-list">
+ *
+ * <template>
+ *
+ * <div> Employee list: </div>
+ * <dom-repeat id="employeeList" items="{{employees}}">
+ * <template>
+ * <div>First name: <span>{{item.first}}</span></div>
+ * <div>Last name: <span>{{item.last}}</span></div>
+ * <button on-click="toggleSelection">Select</button>
+ * </template>
+ * </dom-repeat>
+ *
+ * <array-selector id="selector" items="{{employees}}" selected="{{selected}}" multi toggle></array-selector>
+ *
+ * <div> Selected employees: </div>
+ * <dom-repeat items="{{selected}}">
+ * <template>
+ * <div>First name: <span>{{item.first}}</span></div>
+ * <div>Last name: <span>{{item.last}}</span></div>
+ * </template>
+ * </dom-repeat>
+ *
+ * </template>
+ *
+ * </dom-module>
+ * ```
+ *
+ * ```js
+ * class EmployeeList extends Polymer.Element {
+ * static get is() { return 'employee-list'; }
+ * static get properties() {
+ * return {
+ * employees: {
+ * value() {
+ * return [
+ * {first: 'Bob', last: 'Smith'},
+ * {first: 'Sally', last: 'Johnson'},
+ * ...
+ * ];
+ * }
+ * }
+ * };
+ * }
+ * toggleSelection(e) {
+ * let item = this.$.employeeList.itemForElement(e.target);
+ * this.$.selector.select(item);
+ * }
+ * }
+ * ```
+ */
+ class ArraySelector extends
+ Polymer.ArraySelectorMixin(
+ Polymer.Element) {
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "array-selector": Polymer.ArraySelector;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/custom-style.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/custom-style.d.ts
new file mode 100644
index 00000000000..a0c19a23d14
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/custom-style.d.ts
@@ -0,0 +1,71 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/elements/custom-style.html
+ */
+
+/// <reference path="../utils/style-gather.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Custom element for defining styles in the main document that can take
+ * advantage of [shady DOM](https://github.com/webcomponents/shadycss) shims
+ * for style encapsulation, custom properties, and custom mixins.
+ *
+ * - Document styles defined in a `<custom-style>` are shimmed to ensure they
+ * do not leak into local DOM when running on browsers without native
+ * Shadow DOM.
+ * - Custom properties can be defined in a `<custom-style>`. Use the `html` selector
+ * to define custom properties that apply to all custom elements.
+ * - Custom mixins can be defined in a `<custom-style>`, if you import the optional
+ * [apply shim](https://github.com/webcomponents/shadycss#about-applyshim)
+ * (`shadycss/apply-shim.html`).
+ *
+ * To use:
+ *
+ * - Import `custom-style.html`.
+ * - Place a `<custom-style>` element in the main document, wrapping an inline `<style>` tag that
+ * contains the CSS rules you want to shim.
+ *
+ * For example:
+ *
+ * ```html
+ * <!-- import apply shim--only required if using mixins -->
+ * <link rel="import" href="bower_components/shadycss/apply-shim.html">
+ * <!-- import custom-style element -->
+ * <link rel="import" href="bower_components/polymer/lib/elements/custom-style.html">
+ *
+ * <custom-style>
+ * <style>
+ * html {
+ * --custom-color: blue;
+ * --custom-mixin: {
+ * font-weight: bold;
+ * color: red;
+ * };
+ * }
+ * </style>
+ * </custom-style>
+ * ```
+ */
+ class CustomStyle extends HTMLElement {
+
+ /**
+ * Returns the light-DOM `<style>` child this element wraps. Upon first
+ * call any style modules referenced via the `include` attribute will be
+ * concatenated to this element's `<style>`.
+ *
+ * @returns This element's light-DOM `<style>`
+ */
+ getStyle(): HTMLStyleElement|null;
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "custom-style": Polymer.CustomStyle;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-bind.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-bind.d.ts
new file mode 100644
index 00000000000..716dd3f9e29
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-bind.d.ts
@@ -0,0 +1,47 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/elements/dom-bind.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../mixins/property-effects.d.ts" />
+/// <reference path="../mixins/mutable-data.d.ts" />
+/// <reference path="../mixins/gesture-event-listeners.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Custom element to allow using Polymer's template features (data binding,
+ * declarative event listeners, etc.) in the main document without defining
+ * a new custom element.
+ *
+ * `<template>` tags utilizing bindings may be wrapped with the `<dom-bind>`
+ * element, which will immediately stamp the wrapped template into the main
+ * document and bind elements to the `dom-bind` element itself as the
+ * binding scope.
+ */
+ class DomBind extends
+ Polymer.PropertyEffects(
+ Polymer.OptionalMutableData(
+ Polymer.GestureEventListeners(
+ Polymer.Element))) {
+ attributeChangedCallback(): void;
+ connectedCallback(): void;
+ disconnectedCallback(): void;
+
+ /**
+ * Forces the element to render its content. This is typically only
+ * necessary to call if HTMLImports with the async attribute are used.
+ */
+ render(): void;
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "dom-bind": Polymer.DomBind;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-if.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-if.d.ts
new file mode 100644
index 00000000000..53348545d91
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-if.d.ts
@@ -0,0 +1,71 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/elements/dom-if.html
+ */
+
+/// <reference path="../../polymer-element.d.ts" />
+/// <reference path="../utils/templatize.d.ts" />
+/// <reference path="../utils/debounce.d.ts" />
+/// <reference path="../utils/flush.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * The `<dom-if>` element will stamp a light-dom `<template>` child when
+ * the `if` property becomes truthy, and the template can use Polymer
+ * data-binding and declarative event features when used in the context of
+ * a Polymer element's template.
+ *
+ * When `if` becomes falsy, the stamped content is hidden but not
+ * removed from dom. When `if` subsequently becomes truthy again, the content
+ * is simply re-shown. This approach is used due to its favorable performance
+ * characteristics: the expense of creating template content is paid only
+ * once and lazily.
+ *
+ * Set the `restamp` property to true to force the stamped content to be
+ * created / destroyed when the `if` condition changes.
+ */
+ class DomIf extends Polymer.Element {
+
+ /**
+ * A boolean indicating whether this template should stamp.
+ */
+ if: boolean|null|undefined;
+
+ /**
+ * When true, elements will be removed from DOM and discarded when `if`
+ * becomes false and re-created and added back to the DOM when `if`
+ * becomes true. By default, stamped elements will be hidden but left
+ * in the DOM when `if` becomes false, which is generally results
+ * in better performance.
+ */
+ restamp: boolean|null|undefined;
+ connectedCallback(): void;
+ disconnectedCallback(): void;
+
+ /**
+ * Forces the element to render its content. Normally rendering is
+ * asynchronous to a provoking change. This is done for efficiency so
+ * that multiple changes trigger only a single render. The render method
+ * should be called if, for example, template rendering is required to
+ * validate application state.
+ */
+ render(): void;
+
+ /**
+ * Shows or hides the template instance top level child elements. For
+ * text nodes, `textContent` is removed while "hidden" and replaced when
+ * "shown."
+ */
+ _showHideChildren(): void;
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "dom-if": Polymer.DomIf;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-module.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-module.d.ts
new file mode 100644
index 00000000000..7229968d42a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-module.d.ts
@@ -0,0 +1,82 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/elements/dom-module.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/resolve-url.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * The `dom-module` element registers the dom it contains to the name given
+ * by the module's id attribute. It provides a unified database of dom
+ * accessible via its static `import` API.
+ *
+ * A key use case of `dom-module` is for providing custom element `<template>`s
+ * via HTML imports that are parsed by the native HTML parser, that can be
+ * relocated during a bundling pass and still looked up by `id`.
+ *
+ * Example:
+ *
+ * <dom-module id="foo">
+ * <img src="stuff.png">
+ * </dom-module>
+ *
+ * Then in code in some other location that cannot access the dom-module above
+ *
+ * let img = customElements.get('dom-module').import('foo', 'img');
+ */
+ class DomModule extends HTMLElement {
+
+ /**
+ * The absolute URL of the original location of this `dom-module`.
+ *
+ * This value will differ from this element's `ownerDocument` in the
+ * following ways:
+ * - Takes into account any `assetpath` attribute added during bundling
+ * to indicate the original location relative to the bundled location
+ * - Uses the HTMLImports polyfill's `importForElement` API to ensure
+ * the path is relative to the import document's location since
+ * `ownerDocument` is not currently polyfilled
+ *
+ */
+ readonly assetpath: any;
+
+ /**
+ * Retrieves the element specified by the css `selector` in the module
+ * registered by `id`. For example, this.import('foo', 'img');
+ *
+ * @param id The id of the dom-module in which to search.
+ * @param selector The css selector by which to find the element.
+ * @returns Returns the element which matches `selector` in the
+ * module registered at the specified `id`.
+ */
+ static import(id: string, selector?: string): _Element|null;
+
+ /**
+ * @param name Name of attribute.
+ * @param old Old value of attribute.
+ * @param value Current value of attribute.
+ */
+ attributeChangedCallback(name: string, old: string|null, value: string|null): void;
+
+ /**
+ * Registers the dom-module at a given id. This method should only be called
+ * when a dom-module is imperatively created. For
+ * example, `document.createElement('dom-module').register('foo')`.
+ *
+ * @param id The id at which to register the dom-module.
+ */
+ register(id?: string): void;
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "dom-module": Polymer.DomModule;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-repeat.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-repeat.d.ts
new file mode 100644
index 00000000000..db3c543b73d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/elements/dom-repeat.d.ts
@@ -0,0 +1,282 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/elements/dom-repeat.html
+ */
+
+/// <reference path="../../polymer-element.d.ts" />
+/// <reference path="../utils/templatize.d.ts" />
+/// <reference path="../utils/debounce.d.ts" />
+/// <reference path="../utils/flush.d.ts" />
+/// <reference path="../mixins/mutable-data.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * The `<dom-repeat>` element will automatically stamp and binds one instance
+ * of template content to each object in a user-provided array.
+ * `dom-repeat` accepts an `items` property, and one instance of the template
+ * is stamped for each item into the DOM at the location of the `dom-repeat`
+ * element. The `item` property will be set on each instance's binding
+ * scope, thus templates should bind to sub-properties of `item`.
+ *
+ * Example:
+ *
+ * ```html
+ * <dom-module id="employee-list">
+ *
+ * <template>
+ *
+ * <div> Employee list: </div>
+ * <dom-repeat items="{{employees}}">
+ * <template>
+ * <div>First name: <span>{{item.first}}</span></div>
+ * <div>Last name: <span>{{item.last}}</span></div>
+ * </template>
+ * </dom-repeat>
+ *
+ * </template>
+ *
+ * </dom-module>
+ * ```
+ *
+ * With the following custom element definition:
+ *
+ * ```js
+ * class EmployeeList extends Polymer.Element {
+ * static get is() { return 'employee-list'; }
+ * static get properties() {
+ * return {
+ * employees: {
+ * value() {
+ * return [
+ * {first: 'Bob', last: 'Smith'},
+ * {first: 'Sally', last: 'Johnson'},
+ * ...
+ * ];
+ * }
+ * }
+ * };
+ * }
+ * }
+ * ```
+ *
+ * Notifications for changes to items sub-properties will be forwarded to template
+ * instances, which will update via the normal structured data notification system.
+ *
+ * Mutations to the `items` array itself should be made using the Array
+ * mutation API's on `Polymer.Base` (`push`, `pop`, `splice`, `shift`,
+ * `unshift`), and template instances will be kept in sync with the data in the
+ * array.
+ *
+ * Events caught by event handlers within the `dom-repeat` template will be
+ * decorated with a `model` property, which represents the binding scope for
+ * each template instance. The model is an instance of Polymer.Base, and should
+ * be used to manipulate data on the instance, for example
+ * `event.model.set('item.checked', true);`.
+ *
+ * Alternatively, the model for a template instance for an element stamped by
+ * a `dom-repeat` can be obtained using the `modelForElement` API on the
+ * `dom-repeat` that stamped it, for example
+ * `this.$.domRepeat.modelForElement(event.target).set('item.checked', true);`.
+ * This may be useful for manipulating instance data of event targets obtained
+ * by event handlers on parents of the `dom-repeat` (event delegation).
+ *
+ * A view-specific filter/sort may be applied to each `dom-repeat` by supplying a
+ * `filter` and/or `sort` property. This may be a string that names a function on
+ * the host, or a function may be assigned to the property directly. The functions
+ * should implemented following the standard `Array` filter/sort API.
+ *
+ * In order to re-run the filter or sort functions based on changes to sub-fields
+ * of `items`, the `observe` property may be set as a space-separated list of
+ * `item` sub-fields that should cause a re-filter/sort when modified. If
+ * the filter or sort function depends on properties not contained in `items`,
+ * the user should observe changes to those properties and call `render` to update
+ * the view based on the dependency change.
+ *
+ * For example, for an `dom-repeat` with a filter of the following:
+ *
+ * ```js
+ * isEngineer(item) {
+ * return item.type == 'engineer' || item.manager.type == 'engineer';
+ * }
+ * ```
+ *
+ * Then the `observe` property should be configured as follows:
+ *
+ * ```html
+ * <dom-repeat items="{{employees}}" filter="isEngineer" observe="type manager.type">
+ * ```
+ */
+ class DomRepeat extends
+ Polymer.OptionalMutableData(
+ Polymer.Element) {
+
+ /**
+ * An array containing items determining how many instances of the template
+ * to stamp and that that each template instance should bind to.
+ */
+ items: any[]|null|undefined;
+
+ /**
+ * The name of the variable to add to the binding scope for the array
+ * element associated with a given template instance.
+ */
+ as: string|null|undefined;
+
+ /**
+ * The name of the variable to add to the binding scope with the index
+ * of the instance in the sorted and filtered list of rendered items.
+ * Note, for the index in the `this.items` array, use the value of the
+ * `itemsIndexAs` property.
+ */
+ indexAs: string|null|undefined;
+
+ /**
+ * The name of the variable to add to the binding scope with the index
+ * of the instance in the `this.items` array. Note, for the index of
+ * this instance in the sorted and filtered list of rendered items,
+ * use the value of the `indexAs` property.
+ */
+ itemsIndexAs: string|null|undefined;
+
+ /**
+ * A function that should determine the sort order of the items. This
+ * property should either be provided as a string, indicating a method
+ * name on the element's host, or else be an actual function. The
+ * function should match the sort function passed to `Array.sort`.
+ * Using a sort function has no effect on the underlying `items` array.
+ */
+ sort: Function|null|undefined;
+
+ /**
+ * A function that can be used to filter items out of the view. This
+ * property should either be provided as a string, indicating a method
+ * name on the element's host, or else be an actual function. The
+ * function should match the sort function passed to `Array.filter`.
+ * Using a filter function has no effect on the underlying `items` array.
+ */
+ filter: Function|null|undefined;
+
+ /**
+ * When using a `filter` or `sort` function, the `observe` property
+ * should be set to a space-separated list of the names of item
+ * sub-fields that should trigger a re-sort or re-filter when changed.
+ * These should generally be fields of `item` that the sort or filter
+ * function depends on.
+ */
+ observe: string|null|undefined;
+
+ /**
+ * When using a `filter` or `sort` function, the `delay` property
+ * determines a debounce time in ms after a change to observed item
+ * properties that must pass before the filter or sort is re-run.
+ * This is useful in rate-limiting shuffling of the view when
+ * item changes may be frequent.
+ */
+ delay: number|null|undefined;
+
+ /**
+ * Count of currently rendered items after `filter` (if any) has been applied.
+ * If "chunking mode" is enabled, `renderedItemCount` is updated each time a
+ * set of template instances is rendered.
+ */
+ readonly renderedItemCount: number|null|undefined;
+
+ /**
+ * Defines an initial count of template instances to render after setting
+ * the `items` array, before the next paint, and puts the `dom-repeat`
+ * into "chunking mode". The remaining items will be created and rendered
+ * incrementally at each animation frame therof until all instances have
+ * been rendered.
+ */
+ initialCount: number|null|undefined;
+
+ /**
+ * When `initialCount` is used, this property defines a frame rate (in
+ * fps) to target by throttling the number of instances rendered each
+ * frame to not exceed the budget for the target frame rate. The
+ * framerate is effectively the number of `requestAnimationFrame`s that
+ * it tries to allow to actually fire in a given second. It does this
+ * by measuring the time between `rAF`s and continuously adjusting the
+ * number of items created each `rAF` to maintain the target framerate.
+ * Setting this to a higher number allows lower latency and higher
+ * throughput for event handlers and other tasks, but results in a
+ * longer time for the remaining items to complete rendering.
+ */
+ targetFramerate: number|null|undefined;
+ readonly _targetFrameTime: number|null|undefined;
+ disconnectedCallback(): void;
+ connectedCallback(): void;
+
+ /**
+ * Forces the element to render its content. Normally rendering is
+ * asynchronous to a provoking change. This is done for efficiency so
+ * that multiple changes trigger only a single render. The render method
+ * should be called if, for example, template rendering is required to
+ * validate application state.
+ */
+ render(): void;
+
+ /**
+ * Shows or hides the template instance top level child elements. For
+ * text nodes, `textContent` is removed while "hidden" and replaced when
+ * "shown."
+ *
+ * @param hidden Set to true to hide the children;
+ * set to false to show them.
+ */
+ _showHideChildren(hidden: boolean): void;
+
+ /**
+ * Returns the item associated with a given element stamped by
+ * this `dom-repeat`.
+ *
+ * Note, to modify sub-properties of the item,
+ * `modelForElement(el).set('item.<sub-prop>', value)`
+ * should be used.
+ *
+ * @param el Element for which to return the item.
+ * @returns Item associated with the element.
+ */
+ itemForElement(el: HTMLElement): any;
+
+ /**
+ * Returns the inst index for a given element stamped by this `dom-repeat`.
+ * If `sort` is provided, the index will reflect the sorted order (rather
+ * than the original array order).
+ *
+ * @param el Element for which to return the index.
+ * @returns Row index associated with the element (note this may
+ * not correspond to the array index if a user `sort` is applied).
+ */
+ indexForElement(el: HTMLElement): number|null;
+
+ /**
+ * Returns the template "model" associated with a given element, which
+ * serves as the binding scope for the template instance the element is
+ * contained in. A template model is an instance of `Polymer.Base`, and
+ * should be used to manipulate data associated with this template instance.
+ *
+ * Example:
+ *
+ * let model = modelForElement(el);
+ * if (model.index < 10) {
+ * model.set('item.checked', true);
+ * }
+ *
+ * @param el Element for which to return a template model.
+ * @returns Model representing the binding scope for
+ * the element.
+ */
+ modelForElement(el: HTMLElement): TemplateInstanceBase|null;
+ }
+}
+
+interface HTMLElementTagNameMap {
+ "dom-repeat": Polymer.DomRepeat;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/class.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/class.d.ts
new file mode 100644
index 00000000000..df52a92a2be
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/class.d.ts
@@ -0,0 +1,115 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/legacy/class.html
+ */
+
+/// <reference path="legacy-element-mixin.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Applies a "legacy" behavior or array of behaviors to the provided class.
+ *
+ * Note: this method will automatically also apply the `Polymer.LegacyElementMixin`
+ * to ensure that any legacy behaviors can rely on legacy Polymer API on
+ * the underlying element.
+ *
+ * @returns Returns a new Element class extended by the
+ * passed in `behaviors` and also by `Polymer.LegacyElementMixin`.
+ */
+ function mixinBehaviors<T>(behaviors: object|object[], klass: {new(): T}): {new(): T};
+
+
+ /**
+ * Generates a class that extends `Polymer.LegacyElement` based on the
+ * provided info object. Metadata objects on the `info` object
+ * (`properties`, `observers`, `listeners`, `behaviors`, `is`) are used
+ * for Polymer's meta-programming systems, and any functions are copied
+ * to the generated class.
+ *
+ * Valid "metadata" values are as follows:
+ *
+ * `is`: String providing the tag name to register the element under. In
+ * addition, if a `dom-module` with the same id exists, the first template
+ * in that `dom-module` will be stamped into the shadow root of this element,
+ * with support for declarative event listeners (`on-...`), Polymer data
+ * bindings (`[[...]]` and `{{...}}`), and id-based node finding into
+ * `this.$`.
+ *
+ * `properties`: Object describing property-related metadata used by Polymer
+ * features (key: property names, value: object containing property metadata).
+ * Valid keys in per-property metadata include:
+ * - `type` (String|Number|Object|Array|...): Used by
+ * `attributeChangedCallback` to determine how string-based attributes
+ * are deserialized to JavaScript property values.
+ * - `notify` (boolean): Causes a change in the property to fire a
+ * non-bubbling event called `<property>-changed`. Elements that have
+ * enabled two-way binding to the property use this event to observe changes.
+ * - `readOnly` (boolean): Creates a getter for the property, but no setter.
+ * To set a read-only property, use the private setter method
+ * `_setProperty(property, value)`.
+ * - `observer` (string): Observer method name that will be called when
+ * the property changes. The arguments of the method are
+ * `(value, previousValue)`.
+ * - `computed` (string): String describing method and dependent properties
+ * for computing the value of this property (e.g. `'computeFoo(bar, zot)'`).
+ * Computed properties are read-only by default and can only be changed
+ * via the return value of the computing method.
+ *
+ * `observers`: Array of strings describing multi-property observer methods
+ * and their dependent properties (e.g. `'observeABC(a, b, c)'`).
+ *
+ * `listeners`: Object describing event listeners to be added to each
+ * instance of this element (key: event name, value: method name).
+ *
+ * `behaviors`: Array of additional `info` objects containing metadata
+ * and callbacks in the same format as the `info` object here which are
+ * merged into this element.
+ *
+ * `hostAttributes`: Object listing attributes to be applied to the host
+ * once created (key: attribute name, value: attribute value). Values
+ * are serialized based on the type of the value. Host attributes should
+ * generally be limited to attributes such as `tabIndex` and `aria-...`.
+ * Attributes in `hostAttributes` are only applied if a user-supplied
+ * attribute is not already present (attributes in markup override
+ * `hostAttributes`).
+ *
+ * In addition, the following Polymer-specific callbacks may be provided:
+ * - `registered`: called after first instance of this element,
+ * - `created`: called during `constructor`
+ * - `attached`: called during `connectedCallback`
+ * - `detached`: called during `disconnectedCallback`
+ * - `ready`: called before first `attached`, after all properties of
+ * this element have been propagated to its template and all observers
+ * have run
+ *
+ * @returns Generated class
+ */
+ function Class(info: PolymerInit): {new(): HTMLElement};
+}
+
+declare class PolymerGenerated {
+ created(): void;
+ _registered(): void;
+ _applyListeners(): void;
+ _ensureAttributes(): void;
+ ready(): void;
+ attached(): void;
+ detached(): void;
+
+ /**
+ * Implements native Custom Elements `attributeChangedCallback` to
+ * set an attribute value to a property via `_attributeToProperty`.
+ *
+ * @param name Name of attribute that changed
+ * @param old Old attribute value
+ * @param value New attribute value
+ */
+ attributeChanged(name: string, old: string|null, value: string|null): void;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/legacy-element-mixin.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/legacy-element-mixin.d.ts
new file mode 100644
index 00000000000..cfe91646787
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/legacy-element-mixin.d.ts
@@ -0,0 +1,634 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/legacy/legacy-element-mixin.html
+ */
+
+/// <reference path="../mixins/element-mixin.d.ts" />
+/// <reference path="../mixins/gesture-event-listeners.d.ts" />
+/// <reference path="../mixins/dir-mixin.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/import-href.d.ts" />
+/// <reference path="../utils/render-status.d.ts" />
+/// <reference path="../utils/unresolved.d.ts" />
+/// <reference path="polymer.dom.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that provides Polymer's "legacy" API intended to be
+ * backward-compatible to the greatest extent possible with the API
+ * found on the Polymer 1.x `Polymer.Base` prototype applied to all elements
+ * defined using the `Polymer({...})` function.
+ */
+ function LegacyElementMixin<T extends new (...args: any[]) => {}>(base: T): T & LegacyElementMixinConstructor & Polymer.ElementMixinConstructor & Polymer.PropertyEffectsConstructor & Polymer.TemplateStampConstructor & Polymer.PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor & Polymer.PropertiesMixinConstructor & Polymer.GestureEventListenersConstructor;
+
+ interface LegacyElementMixinConstructor {
+ new(...args: any[]): LegacyElementMixin;
+ }
+
+ interface LegacyElementMixin {
+ isAttached: boolean;
+ _debouncers: {[key: string]: Function|null};
+
+ /**
+ * Return the element whose local dom within which this element
+ * is contained. This is a shorthand for
+ * `this.getRootNode().host`.
+ */
+ readonly domHost: any;
+
+ /**
+ * Overrides the default `Polymer.PropertyEffects` implementation to
+ * add support for installing `hostAttributes` and `listeners`.
+ */
+ ready(): void;
+
+ /**
+ * Overrides the default `Polymer.PropertyEffects` implementation to
+ * add support for class initialization via the `_registered` callback.
+ * This is called only when the first instance of the element is created.
+ */
+ _initializeProperties(): void;
+
+ /**
+ * Provides an override implementation of `attributeChangedCallback`
+ * which adds the Polymer legacy API's `attributeChanged` method.
+ *
+ * @param name Name of attribute.
+ * @param old Old value of attribute.
+ * @param value Current value of attribute.
+ */
+ attributeChangedCallback(name: string, old: string|null, value: string|null): void;
+
+ /**
+ * Provides an implementation of `connectedCallback`
+ * which adds Polymer legacy API's `attached` method.
+ */
+ connectedCallback(): void;
+
+ /**
+ * Provides an implementation of `disconnectedCallback`
+ * which adds Polymer legacy API's `detached` method.
+ */
+ disconnectedCallback(): void;
+
+ /**
+ * Legacy callback called during the `constructor`, for overriding
+ * by the user.
+ */
+ created(): void;
+
+ /**
+ * Legacy callback called during `connectedCallback`, for overriding
+ * by the user.
+ */
+ attached(): void;
+
+ /**
+ * Legacy callback called during `disconnectedCallback`, for overriding
+ * by the user.
+ */
+ detached(): void;
+
+ /**
+ * Legacy callback called during `attributeChangedChallback`, for overriding
+ * by the user.
+ *
+ * @param name Name of attribute.
+ * @param old Old value of attribute.
+ * @param value Current value of attribute.
+ */
+ attributeChanged(name: string, old: string|null, value: string|null): void;
+
+ /**
+ * Called automatically when an element is initializing.
+ * Users may override this method to perform class registration time
+ * work. The implementation should ensure the work is performed
+ * only once for the class.
+ */
+ _registered(): void;
+
+ /**
+ * Ensures an element has required attributes. Called when the element
+ * is being readied via `ready`. Users should override to set the
+ * element's required attributes. The implementation should be sure
+ * to check and not override existing attributes added by
+ * the user of the element. Typically, setting attributes should be left
+ * to the element user and not done here; reasonable exceptions include
+ * setting aria roles and focusability.
+ */
+ _ensureAttributes(): void;
+
+ /**
+ * Adds element event listeners. Called when the element
+ * is being readied via `ready`. Users should override to
+ * add any required element event listeners.
+ * In performance critical elements, the work done here should be kept
+ * to a minimum since it is done before the element is rendered. In
+ * these elements, consider adding listeners asynchronously so as not to
+ * block render.
+ */
+ _applyListeners(): void;
+
+ /**
+ * Converts a typed JavaScript value to a string.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features. To customize
+ * how properties are serialized to attributes for attribute bindings and
+ * `reflectToAttribute: true` properties as well as this method, override
+ * the `_serializeValue` method provided by `Polymer.PropertyAccessors`.
+ *
+ * @param value Value to deserialize
+ * @returns Serialized value
+ */
+ serialize(value: any): string|undefined;
+
+ /**
+ * Converts a string to a typed JavaScript value.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features. To customize
+ * how attributes are deserialized to properties for in
+ * `attributeChangedCallback`, override `_deserializeValue` method
+ * provided by `Polymer.PropertyAccessors`.
+ *
+ * @param value String to deserialize
+ * @param type Type to deserialize the string to
+ * @returns Returns the deserialized value in the `type` given.
+ */
+ deserialize(value: string, type: any): any;
+
+ /**
+ * Serializes a property to its associated attribute.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features.
+ *
+ * @param property Property name to reflect.
+ * @param attribute Attribute name to reflect.
+ * @param value Property value to reflect.
+ */
+ reflectPropertyToAttribute(property: string, attribute?: string, value?: any): void;
+
+ /**
+ * Sets a typed value to an HTML attribute on a node.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features.
+ *
+ * @param value Value to serialize.
+ * @param attribute Attribute name to serialize to.
+ * @param node Element to set attribute to.
+ */
+ serializeValueToAttribute(value: any, attribute: string, node: _Element|null): void;
+
+ /**
+ * Copies own properties (including accessor descriptors) from a source
+ * object to a target object.
+ *
+ * @param prototype Target object to copy properties to.
+ * @param api Source object to copy properties from.
+ * @returns prototype object that was passed as first argument.
+ */
+ extend(prototype: object|null, api: object|null): object|null;
+
+ /**
+ * Copies props from a source object to a target object.
+ *
+ * Note, this method uses a simple `for...in` strategy for enumerating
+ * properties. To ensure only `ownProperties` are copied from source
+ * to target and that accessor implementations are copied, use `extend`.
+ *
+ * @param target Target object to copy properties to.
+ * @param source Source object to copy properties from.
+ * @returns Target object that was passed as first argument.
+ */
+ mixin(target: object, source: object): object;
+
+ /**
+ * Sets the prototype of an object.
+ *
+ * Note this method is provided as backward-compatible legacy API
+ * only. It is not directly called by any Polymer features.
+ *
+ * @param object The object on which to set the prototype.
+ * @param prototype The prototype that will be set on the given
+ * `object`.
+ * @returns Returns the given `object` with its prototype set
+ * to the given `prototype` object.
+ */
+ chainObject(object: object|null, prototype: object|null): object|null;
+
+ /**
+ * Calls `importNode` on the `content` of the `template` specified and
+ * returns a document fragment containing the imported content.
+ *
+ * @param template HTML template element to instance.
+ * @returns Document fragment containing the imported
+ * template content.
+ */
+ instanceTemplate(template: HTMLTemplateElement|null): DocumentFragment;
+
+ /**
+ * Dispatches a custom event with an optional detail value.
+ *
+ * @param type Name of event type.
+ * @param detail Detail value containing event-specific
+ * payload.
+ * @param options Object specifying options. These may include:
+ * `bubbles` (boolean, defaults to `true`),
+ * `cancelable` (boolean, defaults to false), and
+ * `node` on which to fire the event (HTMLElement, defaults to `this`).
+ * @returns The new event that was fired.
+ */
+ fire(type: string, detail?: any, options?: {bubbles?: boolean, cancelable?: boolean, composed?: boolean}): Event;
+
+ /**
+ * Convenience method to add an event listener on a given element,
+ * late bound to a named method on this element.
+ *
+ * @param node Element to add event listener to.
+ * @param eventName Name of event to listen for.
+ * @param methodName Name of handler method on `this` to call.
+ */
+ listen(node: _Element|null, eventName: string, methodName: string): void;
+
+ /**
+ * Convenience method to remove an event listener from a given element,
+ * late bound to a named method on this element.
+ *
+ * @param node Element to remove event listener from.
+ * @param eventName Name of event to stop listening to.
+ * @param methodName Name of handler method on `this` to not call
+ * anymore.
+ */
+ unlisten(node: _Element|null, eventName: string, methodName: string): void;
+
+ /**
+ * Override scrolling behavior to all direction, one direction, or none.
+ *
+ * Valid scroll directions:
+ * - 'all': scroll in any direction
+ * - 'x': scroll only in the 'x' direction
+ * - 'y': scroll only in the 'y' direction
+ * - 'none': disable scrolling for this node
+ *
+ * @param direction Direction to allow scrolling
+ * Defaults to `all`.
+ * @param node Element to apply scroll direction setting.
+ * Defaults to `this`.
+ */
+ setScrollDirection(direction?: string, node?: _Element|null): void;
+
+ /**
+ * Convenience method to run `querySelector` on this local DOM scope.
+ *
+ * This function calls `Polymer.dom(this.root).querySelector(slctr)`.
+ *
+ * @param slctr Selector to run on this local DOM scope
+ * @returns Element found by the selector, or null if not found.
+ */
+ $$(slctr: string): _Element|null;
+
+ /**
+ * Force this element to distribute its children to its local dom.
+ * This should not be necessary as of Polymer 2.0.2 and is provided only
+ * for backwards compatibility.
+ */
+ distributeContent(): void;
+
+ /**
+ * Returns a list of nodes that are the effective childNodes. The effective
+ * childNodes list is the same as the element's childNodes except that
+ * any `<content>` elements are replaced with the list of nodes distributed
+ * to the `<content>`, the result of its `getDistributedNodes` method.
+ *
+ * @returns List of effective child nodes.
+ */
+ getEffectiveChildNodes(): Node[];
+
+ /**
+ * Returns a list of nodes distributed within this element that match
+ * `selector`. These can be dom children or elements distributed to
+ * children that are insertion points.
+ *
+ * @param selector Selector to run.
+ * @returns List of distributed elements that match selector.
+ */
+ queryDistributedElements(selector: string): Node[];
+
+ /**
+ * Returns a list of elements that are the effective children. The effective
+ * children list is the same as the element's children except that
+ * any `<content>` elements are replaced with the list of elements
+ * distributed to the `<content>`.
+ *
+ * @returns List of effective children.
+ */
+ getEffectiveChildren(): Node[];
+
+ /**
+ * Returns a string of text content that is the concatenation of the
+ * text content's of the element's effective childNodes (the elements
+ * returned by <a href="#getEffectiveChildNodes>getEffectiveChildNodes</a>.
+ *
+ * @returns List of effective children.
+ */
+ getEffectiveTextContent(): string;
+
+ /**
+ * Returns the first effective childNode within this element that
+ * match `selector`. These can be dom child nodes or elements distributed
+ * to children that are insertion points.
+ *
+ * @param selector Selector to run.
+ * @returns First effective child node that matches selector.
+ */
+ queryEffectiveChildren(selector: string): Node|null;
+
+ /**
+ * Returns a list of effective childNodes within this element that
+ * match `selector`. These can be dom child nodes or elements distributed
+ * to children that are insertion points.
+ *
+ * @param selector Selector to run.
+ * @returns List of effective child nodes that match selector.
+ */
+ queryAllEffectiveChildren(selector: string): Node[];
+
+ /**
+ * Returns a list of nodes distributed to this element's `<slot>`.
+ *
+ * If this element contains more than one `<slot>` in its local DOM,
+ * an optional selector may be passed to choose the desired content.
+ *
+ * @param slctr CSS selector to choose the desired
+ * `<slot>`. Defaults to `content`.
+ * @returns List of distributed nodes for the `<slot>`.
+ */
+ getContentChildNodes(slctr?: string): Node[];
+
+ /**
+ * Returns a list of element children distributed to this element's
+ * `<slot>`.
+ *
+ * If this element contains more than one `<slot>` in its
+ * local DOM, an optional selector may be passed to choose the desired
+ * content. This method differs from `getContentChildNodes` in that only
+ * elements are returned.
+ *
+ * @param slctr CSS selector to choose the desired
+ * `<content>`. Defaults to `content`.
+ * @returns List of distributed nodes for the
+ * `<slot>`.
+ */
+ getContentChildren(slctr?: string): HTMLElement[];
+
+ /**
+ * Checks whether an element is in this element's light DOM tree.
+ *
+ * @param node The element to be checked.
+ * @returns true if node is in this element's light DOM tree.
+ */
+ isLightDescendant(node: Node|null): boolean;
+
+ /**
+ * Checks whether an element is in this element's local DOM tree.
+ *
+ * @param node The element to be checked.
+ * @returns true if node is in this element's local DOM tree.
+ */
+ isLocalDescendant(node: _Element): boolean;
+
+ /**
+ * No-op for backwards compatibility. This should now be handled by
+ * ShadyCss library.
+ *
+ * @param container Unused
+ * @param shouldObserve Unused
+ */
+ scopeSubtree(container: any, shouldObserve: any): void;
+
+ /**
+ * Returns the computed style value for the given property.
+ *
+ * @param property The css property name.
+ * @returns Returns the computed css property value for the given
+ * `property`.
+ */
+ getComputedStyleValue(property: string): string;
+
+ /**
+ * Call `debounce` to collapse multiple requests for a named task into
+ * one invocation which is made after the wait time has elapsed with
+ * no new request. If no wait time is given, the callback will be called
+ * at microtask timing (guaranteed before paint).
+ *
+ * debouncedClickAction(e) {
+ * // will not call `processClick` more than once per 100ms
+ * this.debounce('click', function() {
+ * this.processClick();
+ * } 100);
+ * }
+ *
+ * @param jobName String to identify the debounce job.
+ * @param callback Function that is called (with `this`
+ * context) when the wait time elapses.
+ * @param wait Optional wait time in milliseconds (ms) after the
+ * last signal that must elapse before invoking `callback`
+ * @returns Returns a debouncer object on which exists the
+ * following methods: `isActive()` returns true if the debouncer is
+ * active; `cancel()` cancels the debouncer if it is active;
+ * `flush()` immediately invokes the debounced callback if the debouncer
+ * is active.
+ */
+ debounce(jobName: string, callback: () => void, wait: number): object;
+
+ /**
+ * Returns whether a named debouncer is active.
+ *
+ * @param jobName The name of the debouncer started with `debounce`
+ * @returns Whether the debouncer is active (has not yet fired).
+ */
+ isDebouncerActive(jobName: string): boolean;
+
+ /**
+ * Immediately calls the debouncer `callback` and inactivates it.
+ *
+ * @param jobName The name of the debouncer started with `debounce`
+ */
+ flushDebouncer(jobName: string): void;
+
+ /**
+ * Cancels an active debouncer. The `callback` will not be called.
+ *
+ * @param jobName The name of the debouncer started with `debounce`
+ */
+ cancelDebouncer(jobName: string): void;
+
+ /**
+ * Runs a callback function asynchronously.
+ *
+ * By default (if no waitTime is specified), async callbacks are run at
+ * microtask timing, which will occur before paint.
+ *
+ * @param callback The callback function to run, bound to `this`.
+ * @param waitTime Time to wait before calling the
+ * `callback`. If unspecified or 0, the callback will be run at microtask
+ * timing (before paint).
+ * @returns Handle that may be used to cancel the async job.
+ */
+ async(callback: Function, waitTime?: number): number;
+
+ /**
+ * Cancels an async operation started with `async`.
+ *
+ * @param handle Handle returned from original `async` call to
+ * cancel.
+ */
+ cancelAsync(handle: number): void;
+
+ /**
+ * Convenience method for creating an element and configuring it.
+ *
+ * @param tag HTML element tag to create.
+ * @param props Object of properties to configure on the
+ * instance.
+ * @returns Newly created and configured element.
+ */
+ create(tag: string, props?: object|null): _Element;
+
+ /**
+ * Convenience method for importing an HTML document imperatively.
+ *
+ * This method creates a new `<link rel="import">` element with
+ * the provided URL and appends it to the document to start loading.
+ * In the `onload` callback, the `import` property of the `link`
+ * element will contain the imported document contents.
+ *
+ * @param href URL to document to load.
+ * @param onload Callback to notify when an import successfully
+ * loaded.
+ * @param onerror Callback to notify when an import
+ * unsuccessfully loaded.
+ * @param optAsync True if the import should be loaded `async`.
+ * Defaults to `false`.
+ * @returns The link element for the URL to be loaded.
+ */
+ importHref(href: string, onload?: ((p0: Event) => void)|null, onerror?: ((p0: ErrorEvent) => void)|null, optAsync?: boolean): HTMLLinkElement;
+
+ /**
+ * Polyfill for Element.prototype.matches, which is sometimes still
+ * prefixed.
+ *
+ * @param selector Selector to test.
+ * @param node Element to test the selector against.
+ * @returns Whether the element matches the selector.
+ */
+ elementMatches(selector: string, node?: _Element): boolean;
+
+ /**
+ * Toggles an HTML attribute on or off.
+ *
+ * @param name HTML attribute name
+ * @param bool Boolean to force the attribute on or off.
+ * When unspecified, the state of the attribute will be reversed.
+ * @param node Node to target. Defaults to `this`.
+ */
+ toggleAttribute(name: string, bool?: boolean, node?: _Element|null): void;
+
+ /**
+ * Toggles a CSS class on or off.
+ *
+ * @param name CSS class name
+ * @param bool Boolean to force the class on or off.
+ * When unspecified, the state of the class will be reversed.
+ * @param node Node to target. Defaults to `this`.
+ */
+ toggleClass(name: string, bool?: boolean, node?: _Element|null): void;
+
+ /**
+ * Cross-platform helper for setting an element's CSS `transform` property.
+ *
+ * @param transformText Transform setting.
+ * @param node Element to apply the transform to.
+ * Defaults to `this`
+ */
+ transform(transformText: string, node?: _Element|null): void;
+
+ /**
+ * Cross-platform helper for setting an element's CSS `translate3d`
+ * property.
+ *
+ * @param x X offset.
+ * @param y Y offset.
+ * @param z Z offset.
+ * @param node Element to apply the transform to.
+ * Defaults to `this`.
+ */
+ translate3d(x: number, y: number, z: number, node?: _Element|null): void;
+
+ /**
+ * Removes an item from an array, if it exists.
+ *
+ * If the array is specified by path, a change notification is
+ * generated, so that observers, data bindings and computed
+ * properties watching that path can update.
+ *
+ * If the array is passed directly, **no change
+ * notification is generated**.
+ *
+ * @param arrayOrPath Path to array from which to remove the item
+ * (or the array itself).
+ * @param item Item to remove.
+ * @returns Array containing item removed.
+ */
+ arrayDelete(arrayOrPath: string|Array<number|string>, item: any): any[]|null;
+
+ /**
+ * Facades `console.log`/`warn`/`error` as override point.
+ *
+ * @param level One of 'log', 'warn', 'error'
+ * @param args Array of strings or objects to log
+ */
+ _logger(level: string, args: any[]|null): void;
+
+ /**
+ * Facades `console.log` as an override point.
+ *
+ * @param args Array of strings or objects to log
+ */
+ _log(...args: any[]): void;
+
+ /**
+ * Facades `console.warn` as an override point.
+ *
+ * @param args Array of strings or objects to log
+ */
+ _warn(...args: any[]): void;
+
+ /**
+ * Facades `console.error` as an override point.
+ *
+ * @param args Array of strings or objects to log
+ */
+ _error(...args: any[]): void;
+
+ /**
+ * Formats a message using the element type an a method name.
+ *
+ * @param methodName Method name to associate with message
+ * @param args Array of strings or objects to log
+ * @returns Array with formatting information for `console`
+ * logging.
+ */
+ _logf(methodName: string, ...args: any[]): any[]|null;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/mutable-data-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/mutable-data-behavior.d.ts
new file mode 100644
index 00000000000..ea580cc881a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/mutable-data-behavior.d.ts
@@ -0,0 +1,135 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/legacy/mutable-data-behavior.html
+ */
+
+/// <reference path="../mixins/mutable-data.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Legacy element behavior to skip strict dirty-checking for objects and arrays,
+ * (always consider them to be "dirty") for use on legacy API Polymer elements.
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will cause Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must apply this behavior or enable the
+ * `Polymer.OptionalMutableDataBehavior`.
+ *
+ * In order to make the dirty check strategy configurable, see
+ * `Polymer.OptionalMutableDataBehavior`.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse as opposed to using strict dirty checking with immutable
+ * patterns or Polymer's path notification API.
+ */
+ interface MutableDataBehavior {
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to provide option for skipping
+ * strict equality checking for Objects and Arrays.
+ *
+ * This method pulls the value to dirty check against from the `__dataTemp`
+ * cache (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param property Property name
+ * @param value New property value
+ * @param old Previous property value
+ * @returns Whether the property should be considered a change
+ */
+ _shouldPropertyChange(property: string, value: any, old: any): boolean;
+ }
+
+ const MutableDataBehavior: object;
+
+ /**
+ * Legacy element behavior to add the optional ability to skip strict
+ * dirty-checking for objects and arrays (always consider them to be
+ * "dirty") by setting a `mutable-data` attribute on an element instance.
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will allow Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must enable this behavior or apply the
+ * `Polymer.OptionalMutableDataBehavior`.
+ *
+ * While this behavior adds the ability to forgo Object/Array dirty checking,
+ * the `mutableData` flag defaults to false and must be set on the instance.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse by relying on `mutableData: true` as opposed to using
+ * strict dirty checking with immutable patterns or Polymer's path notification
+ * API.
+ */
+ interface OptionalMutableDataBehavior {
+
+ /**
+ * Instance-level flag for configuring the dirty-checking strategy
+ * for this element. When true, Objects and Arrays will skip dirty
+ * checking, otherwise strict equality checking will be used.
+ */
+ mutableData: boolean|null|undefined;
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to skip strict equality checking
+ * for Objects and Arrays.
+ *
+ * Pulls the value to dirty check against from the `__dataTemp` cache
+ * (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param property Property name
+ * @param value New property value
+ * @param old Previous property value
+ * @returns Whether the property should be considered a change
+ */
+ _shouldPropertyChange(property: string, value: any, old: any): boolean;
+ }
+
+ const OptionalMutableDataBehavior: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer-fn.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer-fn.d.ts
new file mode 100644
index 00000000000..bd881fd7467
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer-fn.d.ts
@@ -0,0 +1,25 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/legacy/polymer-fn.html
+ */
+
+/// <reference path="class.d.ts" />
+
+
+/**
+ * Legacy class factory and registration helper for defining Polymer
+ * elements.
+ *
+ * This method is equivalent to
+ * `customElements.define(info.is, Polymer.Class(info));`
+ *
+ * See `Polymer.Class` for details on valid legacy metadata format for `info`.
+ *
+ * @returns Generated class
+ */
+declare function Polymer(info: PolymerInit): {new(): HTMLElement};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer.dom.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer.dom.d.ts
new file mode 100644
index 00000000000..e0992bfe64b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/polymer.dom.d.ts
@@ -0,0 +1,179 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/legacy/polymer.dom.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/settings.d.ts" />
+/// <reference path="../utils/flattened-nodes-observer.d.ts" />
+/// <reference path="../utils/flush.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Legacy DOM and Event manipulation API wrapper factory used to abstract
+ * differences between native Shadow DOM and "Shady DOM" when polyfilling on
+ * older browsers.
+ *
+ * Note that in Polymer 2.x use of `Polymer.dom` is no longer required and
+ * in the majority of cases simply facades directly to the standard native
+ * API.
+ */
+ namespace dom {
+
+
+ /**
+ * Cross-platform `element.matches` shim.
+ *
+ * @returns True if node matched selector
+ */
+ function matchesSelector(node: Node, selector: string): boolean;
+ }
+
+ /**
+ * Node API wrapper class returned from `Polymer.dom.(target)` when
+ * `target` is a `Node`.
+ */
+ class DomApi {
+
+ /**
+ * For shadow roots, returns the currently focused element within this
+ * shadow root.
+ */
+ readonly activeElement: Node|null|undefined;
+
+ /**
+ * Returns an instance of `Polymer.FlattenedNodesObserver` that
+ * listens for node changes on this element.
+ *
+ * @param callback Called when direct or distributed children
+ * of this element changes
+ * @returns Observer instance
+ */
+ observeNodes(callback: (p0: _Element, p1: {target: _Element, addedNodes: _Element[], removedNodes: _Element[]}) => void): Polymer.FlattenedNodesObserver;
+
+ /**
+ * Disconnects an observer previously created via `observeNodes`
+ *
+ * @param observerHandle Observer instance
+ * to disconnect.
+ */
+ unobserveNodes(observerHandle: Polymer.FlattenedNodesObserver): void;
+
+ /**
+ * Provided as a backwards-compatible API only. This method does nothing.
+ */
+ notifyObserver(): void;
+
+ /**
+ * Returns true if the provided node is contained with this element's
+ * light-DOM children or shadow root, including any nested shadow roots
+ * of children therein.
+ *
+ * @param node Node to test
+ * @returns Returns true if the given `node` is contained within
+ * this element's light or shadow DOM.
+ */
+ deepContains(node: Node|null): boolean;
+
+ /**
+ * Returns the root node of this node. Equivalent to `getRoodNode()`.
+ *
+ * @returns Top most element in the dom tree in which the node
+ * exists. If the node is connected to a document this is either a
+ * shadowRoot or the document; otherwise, it may be the node
+ * itself or a node or document fragment containing it.
+ */
+ getOwnerRoot(): Node|null;
+
+ /**
+ * For slot elements, returns the nodes assigned to the slot; otherwise
+ * an empty array. It is equivalent to `<slot>.addignedNodes({flatten:true})`.
+ *
+ * @returns Array of assigned nodes
+ */
+ getDistributedNodes(): Node[];
+
+ /**
+ * Returns an array of all slots this element was distributed to.
+ *
+ * @returns Description
+ */
+ getDestinationInsertionPoints(): HTMLSlotElement[];
+
+ /**
+ * Calls `importNode` on the `ownerDocument` for this node.
+ *
+ * @param node Node to import
+ * @param deep True if the node should be cloned deeply during
+ * import
+ * @returns Clone of given node imported to this owner document
+ */
+ importNode(node: Node, deep: boolean): Node|null;
+
+ /**
+ * @returns Returns a flattened list of all child nodes and
+ * nodes assigned to child slots.
+ */
+ getEffectiveChildNodes(): Node[];
+
+ /**
+ * Returns a filtered list of flattened child elements for this element based
+ * on the given selector.
+ *
+ * @param selector Selector to filter nodes against
+ * @returns List of flattened child elements
+ */
+ queryDistributedElements(selector: string): HTMLElement[];
+ cloneNode(deep?: boolean): Node;
+ appendChild(node: Node): Node;
+ insertBefore(newChild: Node, refChild: Node|null): Node;
+ removeChild(node: Node): Node;
+ replaceChild(oldChild: Node, newChild: Node): Node;
+ setAttribute(name: string, value: string): void;
+ removeAttribute(name: string): void;
+ querySelector(selector: string): _Element|null;
+ querySelectorAll(selector: string): NodeListOf<_Element>;
+ }
+
+
+ /**
+ * Legacy DOM and Event manipulation API wrapper factory used to abstract
+ * differences between native Shadow DOM and "Shady DOM" when polyfilling on
+ * older browsers.
+ *
+ * Note that in Polymer 2.x use of `Polymer.dom` is no longer required and
+ * in the majority of cases simply facades directly to the standard native
+ * API.
+ *
+ * @returns Wrapper providing either node API or event API
+ */
+ function dom(obj?: Node|Event|null): DomApi|EventApi;
+}
+
+/**
+ * Event API wrapper class returned from `Polymer.dom.(target)` when
+ * `target` is an `Event`.
+ */
+declare class EventApi {
+
+ /**
+ * Returns the first node on the `composedPath` of this event.
+ */
+ readonly rootTarget: EventTarget;
+
+ /**
+ * Returns the local (re-targeted) target for this event.
+ */
+ readonly localTarget: EventTarget;
+
+ /**
+ * Returns the `composedPath` for this event.
+ */
+ readonly path: EventTarget[];
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/templatizer-behavior.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/templatizer-behavior.d.ts
new file mode 100644
index 00000000000..81f1df4a2e6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/legacy/templatizer-behavior.d.ts
@@ -0,0 +1,116 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/legacy/templatizer-behavior.html
+ */
+
+/// <reference path="../utils/templatize.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * The `Polymer.Templatizer` behavior adds methods to generate instances of
+ * templates that are each managed by an anonymous `Polymer.PropertyEffects`
+ * instance where data-bindings in the stamped template content are bound to
+ * accessors on itself.
+ *
+ * This behavior is provided in Polymer 2.x as a hybrid-element convenience
+ * only. For non-hybrid usage, the `Polymer.Templatize` library
+ * should be used instead.
+ *
+ * Example:
+ *
+ * // Get a template from somewhere, e.g. light DOM
+ * let template = this.querySelector('template');
+ * // Prepare the template
+ * this.templatize(template);
+ * // Instance the template with an initial data model
+ * let instance = this.stamp({myProp: 'initial'});
+ * // Insert the instance's DOM somewhere, e.g. light DOM
+ * Polymer.dom(this).appendChild(instance.root);
+ * // Changing a property on the instance will propagate to bindings
+ * // in the template
+ * instance.myProp = 'new value';
+ *
+ * Users of `Templatizer` may need to implement the following abstract
+ * API's to determine how properties and paths from the host should be
+ * forwarded into to instances:
+ *
+ * _forwardHostPropV2: function(prop, value)
+ *
+ * Likewise, users may implement these additional abstract API's to determine
+ * how instance-specific properties that change on the instance should be
+ * forwarded out to the host, if necessary.
+ *
+ * _notifyInstancePropV2: function(inst, prop, value)
+ *
+ * In order to determine which properties are instance-specific and require
+ * custom notification via `_notifyInstanceProp`, define an `_instanceProps`
+ * object containing keys for each instance prop, for example:
+ *
+ * _instanceProps: {
+ * item: true,
+ * index: true
+ * }
+ *
+ * Any properties used in the template that are not defined in _instanceProp
+ * will be forwarded out to the Templatize `owner` automatically.
+ *
+ * Users may also implement the following abstract function to show or
+ * hide any DOM generated using `stamp`:
+ *
+ * _showHideChildren: function(shouldHide)
+ *
+ * Note that some callbacks are suffixed with `V2` in the Polymer 2.x behavior
+ * as the implementations will need to differ from the callbacks required
+ * by the 1.x Templatizer API due to changes in the `TemplateInstance` API
+ * between versions 1.x and 2.x.
+ */
+ interface Templatizer {
+
+ /**
+ * Generates an anonymous `TemplateInstance` class (stored as `this.ctor`)
+ * for the provided template. This method should be called once per
+ * template to prepare an element for stamping the template, followed
+ * by `stamp` to create new instances of the template.
+ *
+ * @param template Template to prepare
+ * @param mutableData When `true`, the generated class will skip
+ * strict dirty-checking for objects and arrays (always consider them to
+ * be "dirty"). Defaults to false.
+ */
+ templatize(template: HTMLTemplateElement, mutableData?: boolean): void;
+
+ /**
+ * Creates an instance of the template prepared by `templatize`. The object
+ * returned is an instance of the anonymous class generated by `templatize`
+ * whose `root` property is a document fragment containing newly cloned
+ * template content, and which has property accessors corresponding to
+ * properties referenced in template bindings.
+ *
+ * @param model Object containing initial property values to
+ * populate into the template bindings.
+ * @returns Returns the created instance of
+ * the template prepared by `templatize`.
+ */
+ stamp(model?: object|null): TemplateInstanceBase|null;
+
+ /**
+ * Returns the template "model" (`TemplateInstance`) associated with
+ * a given element, which serves as the binding scope for the template
+ * instance the element is contained in. A template model should be used
+ * to manipulate data associated with this template instance.
+ *
+ * @param el Element for which to return a template model.
+ * @returns Model representing the binding scope for
+ * the element.
+ */
+ modelForElement(el: HTMLElement|null): TemplateInstanceBase|null;
+ }
+
+ const Templatizer: object;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/dir-mixin.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/dir-mixin.d.ts
new file mode 100644
index 00000000000..58aa8136b9e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/dir-mixin.d.ts
@@ -0,0 +1,52 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/dir-mixin.html
+ */
+
+/// <reference path="property-accessors.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that allows elements to use the `:dir` CSS Selector to have
+ * text direction specific styling.
+ *
+ * With this mixin, any stylesheet provided in the template will transform `:dir` into
+ * `:host([dir])` and sync direction with the page via the element's `dir` attribute.
+ *
+ * Elements can opt out of the global page text direction by setting the `dir` attribute
+ * directly in `ready()` or in HTML.
+ *
+ * Caveats:
+ * - Applications must set `<html dir="ltr">` or `<html dir="rtl">` to sync direction
+ * - Automatic left-to-right or right-to-left styling is sync'd with the `<html>` element only.
+ * - Changing `dir` at runtime is supported.
+ * - Opting out of the global direction styling is permanent
+ */
+ function DirMixin<T extends new (...args: any[]) => {}>(base: T): T & DirMixinConstructor & Polymer.PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor;
+
+ interface DirMixinConstructor {
+ new(...args: any[]): DirMixin;
+ _processStyleText(cssText: any, baseURI: any): any;
+
+ /**
+ * Replace `:dir` in the given CSS text
+ *
+ * @param text CSS text to replace DIR
+ * @returns Modified CSS
+ */
+ _replaceDirInCssText(text: string): string;
+ }
+
+ interface DirMixin {
+ ready(): void;
+ connectedCallback(): void;
+ disconnectedCallback(): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/disable-upgrade-mixin.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/disable-upgrade-mixin.d.ts
new file mode 100644
index 00000000000..f8584219d82
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/disable-upgrade-mixin.d.ts
@@ -0,0 +1,49 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/disable-upgrade-mixin.html
+ */
+
+/// <reference path="element-mixin.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that allows the element to boot up in a non-enabled
+ * state when the `disable-upgrade` attribute is present. This mixin is
+ * designed to be used with element classes like Polymer.Element that perform
+ * initial startup work when they are first connected. When the
+ * `disable-upgrade` attribute is removed, if the element is connected, it
+ * boots up and "enables" as it otherwise would; if it is not connected, the
+ * element boots up when it is next connected.
+ *
+ * Using `disable-upgrade` with Polymer.Element prevents any data propagation
+ * to the element, any element DOM from stamping, or any work done in
+ * connected/disconnctedCallback from occuring, but it does not prevent work
+ * done in the element constructor.
+ *
+ * Note, this mixin must be applied on top of any element class that
+ * itself implements a `connectedCallback` so that it can control the work
+ * done in `connectedCallback`. For example,
+ *
+ * MyClass = Polymer.DisableUpgradeMixin(class extends BaseClass {...});
+ */
+ function DisableUpgradeMixin<T extends new (...args: any[]) => {}>(base: T): T & DisableUpgradeMixinConstructor & Polymer.ElementMixinConstructor & Polymer.PropertyEffectsConstructor & Polymer.TemplateStampConstructor & Polymer.PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor & Polymer.PropertiesMixinConstructor;
+
+ interface DisableUpgradeMixinConstructor {
+ new(...args: any[]): DisableUpgradeMixin;
+ }
+
+ interface DisableUpgradeMixin {
+ _initializeProperties(): void;
+ _enableProperties(): void;
+ attributeChangedCallback(name: any, old: any, value: any): void;
+ connectedCallback(): void;
+ disconnectedCallback(): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/element-mixin.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/element-mixin.d.ts
new file mode 100644
index 00000000000..879ca122d77
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/element-mixin.d.ts
@@ -0,0 +1,233 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/element-mixin.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/settings.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/style-gather.d.ts" />
+/// <reference path="../utils/resolve-url.d.ts" />
+/// <reference path="../elements/dom-module.d.ts" />
+/// <reference path="property-effects.d.ts" />
+/// <reference path="properties-mixin.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that provides the core API for Polymer's meta-programming
+ * features including template stamping, data-binding, attribute deserialization,
+ * and property change observation.
+ *
+ * Subclassers may provide the following static getters to return metadata
+ * used to configure Polymer's features for the class:
+ *
+ * - `static get is()`: When the template is provided via a `dom-module`,
+ * users should return the `dom-module` id from a static `is` getter. If
+ * no template is needed or the template is provided directly via the
+ * `template` getter, there is no need to define `is` for the element.
+ *
+ * - `static get template()`: Users may provide the template directly (as
+ * opposed to via `dom-module`) by implementing a static `template` getter.
+ * The getter may return an `HTMLTemplateElement` or a string, which will
+ * automatically be parsed into a template.
+ *
+ * - `static get properties()`: Should return an object describing
+ * property-related metadata used by Polymer features (key: property name
+ * value: object containing property metadata). Valid keys in per-property
+ * metadata include:
+ * - `type` (String|Number|Object|Array|...): Used by
+ * `attributeChangedCallback` to determine how string-based attributes
+ * are deserialized to JavaScript property values.
+ * - `notify` (boolean): Causes a change in the property to fire a
+ * non-bubbling event called `<property>-changed`. Elements that have
+ * enabled two-way binding to the property use this event to observe changes.
+ * - `readOnly` (boolean): Creates a getter for the property, but no setter.
+ * To set a read-only property, use the private setter method
+ * `_setProperty(property, value)`.
+ * - `observer` (string): Observer method name that will be called when
+ * the property changes. The arguments of the method are
+ * `(value, previousValue)`.
+ * - `computed` (string): String describing method and dependent properties
+ * for computing the value of this property (e.g. `'computeFoo(bar, zot)'`).
+ * Computed properties are read-only by default and can only be changed
+ * via the return value of the computing method.
+ *
+ * - `static get observers()`: Array of strings describing multi-property
+ * observer methods and their dependent properties (e.g.
+ * `'observeABC(a, b, c)'`).
+ *
+ * The base class provides default implementations for the following standard
+ * custom element lifecycle callbacks; users may override these, but should
+ * call the super method to ensure
+ * - `constructor`: Run when the element is created or upgraded
+ * - `connectedCallback`: Run each time the element is connected to the
+ * document
+ * - `disconnectedCallback`: Run each time the element is disconnected from
+ * the document
+ * - `attributeChangedCallback`: Run each time an attribute in
+ * `observedAttributes` is set or removed (note: this element's default
+ * `observedAttributes` implementation will automatically return an array
+ * of dash-cased attributes based on `properties`)
+ */
+ function ElementMixin<T extends new (...args: any[]) => {}>(base: T): T & ElementMixinConstructor & Polymer.PropertyEffectsConstructor & Polymer.TemplateStampConstructor & Polymer.PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor & Polymer.PropertiesMixinConstructor;
+
+ interface ElementMixinConstructor {
+ new(...args: any[]): ElementMixin;
+
+ /**
+ * Overrides `PropertyAccessors` to add map of dynamic functions on
+ * template info, for consumption by `PropertyEffects` template binding
+ * code. This map determines which method templates should have accessors
+ * created for them.
+ */
+ _parseTemplateContent(template: any, templateInfo: any, nodeInfo: any): any;
+
+ /**
+ * Override of PropertiesChanged createProperties to create accessors
+ * and property effects for all of the properties.
+ */
+ createProperties(props: any): void;
+
+ /**
+ * Override of PropertiesMixin _finalizeClass to create observers and
+ * find the template.
+ */
+ _finalizeClass(): void;
+
+ /**
+ * Creates observers for the given `observers` array.
+ * Leverages `PropertyEffects` to create observers.
+ *
+ * @param observers Array of observer descriptors for
+ * this class
+ * @param dynamicFns Object containing keys for any properties
+ * that are functions and should trigger the effect when the function
+ * reference is changed
+ */
+ createObservers(observers: object|null, dynamicFns: object|null): void;
+
+ /**
+ * Gather style text for a style element in the template.
+ *
+ * @param cssText Text containing styling to process
+ * @param baseURI Base URI to rebase CSS paths against
+ * @returns The processed CSS text
+ */
+ _processStyleText(cssText: string, baseURI: string): string;
+
+ /**
+ * Configures an element `proto` to function with a given `template`.
+ * The element name `is` and extends `ext` must be specified for ShadyCSS
+ * style scoping.
+ *
+ * @param is Tag name (or type extension name) for this element
+ */
+ _finalizeTemplate(is: string): void;
+ }
+
+ interface ElementMixin {
+ _template: HTMLTemplateElement|null;
+ _importPath: string;
+ rootPath: string;
+ importPath: string;
+ root: StampedTemplate|HTMLElement|ShadowRoot|null;
+ $: {[key: string]: _Element};
+
+ /**
+ * Stamps the element template.
+ */
+ ready(): void;
+
+ /**
+ * Overrides the default `Polymer.PropertyAccessors` to ensure class
+ * metaprogramming related to property accessors and effects has
+ * completed (calls `finalize`).
+ *
+ * It also initializes any property defaults provided via `value` in
+ * `properties` metadata.
+ */
+ _initializeProperties(): void;
+
+ /**
+ * Implements `PropertyEffects`'s `_readyClients` call. Attaches
+ * element dom by calling `_attachDom` with the dom stamped from the
+ * element's template via `_stampTemplate`. Note that this allows
+ * client dom to be attached to the element prior to any observers
+ * running.
+ */
+ _readyClients(): void;
+
+ /**
+ * Provides a default implementation of the standard Custom Elements
+ * `connectedCallback`.
+ *
+ * The default implementation enables the property effects system and
+ * flushes any pending properties, and updates shimmed CSS properties
+ * when using the ShadyCSS scoping/custom properties polyfill.
+ */
+ connectedCallback(): void;
+
+ /**
+ * Attaches an element's stamped dom to itself. By default,
+ * this method creates a `shadowRoot` and adds the dom to it.
+ * However, this method may be overridden to allow an element
+ * to put its dom in another location.
+ *
+ * @param dom to attach to the element.
+ * @returns node to which the dom has been attached.
+ */
+ _attachDom(dom: StampedTemplate|null): ShadowRoot|null;
+
+ /**
+ * When using the ShadyCSS scoping and custom property shim, causes all
+ * shimmed styles in this element (and its subtree) to be updated
+ * based on current custom property values.
+ *
+ * The optional parameter overrides inline custom property styles with an
+ * object of properties where the keys are CSS properties, and the values
+ * are strings.
+ *
+ * Example: `this.updateStyles({'--color': 'blue'})`
+ *
+ * These properties are retained unless a value of `null` is set.
+ *
+ * Note: This function does not support updating CSS mixins.
+ * You can not dynamically change the value of an `@apply`.
+ *
+ * @param properties Bag of custom property key/values to
+ * apply to this element.
+ */
+ updateStyles(properties?: object|null): void;
+
+ /**
+ * Rewrites a given URL relative to a base URL. The base URL defaults to
+ * the original location of the document containing the `dom-module` for
+ * this element. This method will return the same URL before and after
+ * bundling.
+ *
+ * Note that this function performs no resolution for URLs that start
+ * with `/` (absolute URLs) or `#` (hash identifiers). For general purpose
+ * URL resolution, use `window.URL`.
+ *
+ * @param url URL to resolve.
+ * @param base Optional base URL to resolve against, defaults
+ * to the element's `importPath`
+ * @returns Rewritten URL relative to base
+ */
+ resolveUrl(url: string, base?: string): string;
+ }
+
+ /**
+ * Provides basic tracking of element definitions (registrations) and
+ * instance counts.
+ */
+ namespace telemetry {
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/gesture-event-listeners.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/gesture-event-listeners.d.ts
new file mode 100644
index 00000000000..714c5e055aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/gesture-event-listeners.d.ts
@@ -0,0 +1,53 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/gesture-event-listeners.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/gestures.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that provides API for adding Polymer's cross-platform
+ * gesture events to nodes.
+ *
+ * The API is designed to be compatible with override points implemented
+ * in `Polymer.TemplateStamp` such that declarative event listeners in
+ * templates will support gesture events when this mixin is applied along with
+ * `Polymer.TemplateStamp`.
+ */
+ function GestureEventListeners<T extends new (...args: any[]) => {}>(base: T): T & GestureEventListenersConstructor;
+
+ interface GestureEventListenersConstructor {
+ new(...args: any[]): GestureEventListeners;
+ }
+
+ interface GestureEventListeners {
+
+ /**
+ * Add the event listener to the node if it is a gestures event.
+ *
+ * @param node Node to add event listener to
+ * @param eventName Name of event
+ * @param handler Listener function to add
+ */
+ _addEventListenerToNode(node: Node, eventName: string, handler: (p0: Event) => void): void;
+
+ /**
+ * Remove the event listener to the node if it is a gestures event.
+ *
+ * @param node Node to remove event listener from
+ * @param eventName Name of event
+ * @param handler Listener function to remove
+ */
+ _removeEventListenerFromNode(node: Node, eventName: string, handler: (p0: Event) => void): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/mutable-data.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/mutable-data.d.ts
new file mode 100644
index 00000000000..5859e3276be
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/mutable-data.d.ts
@@ -0,0 +1,147 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/mutable-data.html
+ */
+
+/// <reference path="../utils/mixin.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin to skip strict dirty-checking for objects and arrays
+ * (always consider them to be "dirty"), for use on elements utilizing
+ * `Polymer.PropertyEffects`
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will cause Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must apply this mixin or enable the
+ * `Polymer.OptionalMutableData` mixin.
+ *
+ * In order to make the dirty check strategy configurable, see
+ * `Polymer.OptionalMutableData`.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse as opposed to using strict dirty checking with immutable
+ * patterns or Polymer's path notification API.
+ */
+ function MutableData<T extends new (...args: any[]) => {}>(base: T): T & MutableDataConstructor;
+
+ interface MutableDataConstructor {
+ new(...args: any[]): MutableData;
+ }
+
+ interface MutableData {
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to provide option for skipping
+ * strict equality checking for Objects and Arrays.
+ *
+ * This method pulls the value to dirty check against from the `__dataTemp`
+ * cache (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param property Property name
+ * @param value New property value
+ * @param old Previous property value
+ * @returns Whether the property should be considered a change
+ */
+ _shouldPropertyChange(property: string, value: any, old: any): boolean;
+ }
+
+
+ /**
+ * Element class mixin to add the optional ability to skip strict
+ * dirty-checking for objects and arrays (always consider them to be
+ * "dirty") by setting a `mutable-data` attribute on an element instance.
+ *
+ * By default, `Polymer.PropertyEffects` performs strict dirty checking on
+ * objects, which means that any deep modifications to an object or array will
+ * not be propagated unless "immutable" data patterns are used (i.e. all object
+ * references from the root to the mutation were changed).
+ *
+ * Polymer also provides a proprietary data mutation and path notification API
+ * (e.g. `notifyPath`, `set`, and array mutation API's) that allow efficient
+ * mutation and notification of deep changes in an object graph to all elements
+ * bound to the same object graph.
+ *
+ * In cases where neither immutable patterns nor the data mutation API can be
+ * used, applying this mixin will allow Polymer to skip dirty checking for
+ * objects and arrays (always consider them to be "dirty"). This allows a
+ * user to make a deep modification to a bound object graph, and then either
+ * simply re-set the object (e.g. `this.items = this.items`) or call `notifyPath`
+ * (e.g. `this.notifyPath('items')`) to update the tree. Note that all
+ * elements that wish to be updated based on deep mutations must apply this
+ * mixin or otherwise skip strict dirty checking for objects/arrays.
+ * Specifically, any elements in the binding tree between the source of a
+ * mutation and the consumption of it must enable this mixin or apply the
+ * `Polymer.MutableData` mixin.
+ *
+ * While this mixin adds the ability to forgo Object/Array dirty checking,
+ * the `mutableData` flag defaults to false and must be set on the instance.
+ *
+ * Note, the performance characteristics of propagating large object graphs
+ * will be worse by relying on `mutableData: true` as opposed to using
+ * strict dirty checking with immutable patterns or Polymer's path notification
+ * API.
+ */
+ function OptionalMutableData<T extends new (...args: any[]) => {}>(base: T): T & OptionalMutableDataConstructor;
+
+ interface OptionalMutableDataConstructor {
+ new(...args: any[]): OptionalMutableData;
+ }
+
+ interface OptionalMutableData {
+
+ /**
+ * Instance-level flag for configuring the dirty-checking strategy
+ * for this element. When true, Objects and Arrays will skip dirty
+ * checking, otherwise strict equality checking will be used.
+ */
+ mutableData: boolean|null|undefined;
+
+ /**
+ * Overrides `Polymer.PropertyEffects` to provide option for skipping
+ * strict equality checking for Objects and Arrays.
+ *
+ * When `this.mutableData` is true on this instance, this method
+ * pulls the value to dirty check against from the `__dataTemp` cache
+ * (rather than the normal `__data` cache) for Objects. Since the temp
+ * cache is cleared at the end of a turn, this implementation allows
+ * side-effects of deep object changes to be processed by re-setting the
+ * same object (using the temp cache as an in-turn backstop to prevent
+ * cycles due to 2-way notification).
+ *
+ * @param property Property name
+ * @param value New property value
+ * @param old Previous property value
+ * @returns Whether the property should be considered a change
+ */
+ _shouldPropertyChange(property: string, value: any, old: any): boolean;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-changed.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-changed.d.ts
new file mode 100644
index 00000000000..13364e19808
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-changed.d.ts
@@ -0,0 +1,304 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/properties-changed.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/async.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that provides basic meta-programming for creating one
+ * or more property accessors (getter/setter pair) that enqueue an async
+ * (batched) `_propertiesChanged` callback.
+ *
+ * For basic usage of this mixin, call `MyClass.createProperties(props)`
+ * once at class definition time to create property accessors for properties
+ * named in props, implement `_propertiesChanged` to react as desired to
+ * property changes, and implement `static get observedAttributes()` and
+ * include lowercase versions of any property names that should be set from
+ * attributes. Last, call `this._enableProperties()` in the element's
+ * `connectedCallback` to enable the accessors.
+ */
+ function PropertiesChanged<T extends new (...args: any[]) => {}>(base: T): T & PropertiesChangedConstructor;
+
+ interface PropertiesChangedConstructor {
+ new(...args: any[]): PropertiesChanged;
+
+ /**
+ * Creates property accessors for the given property names.
+ *
+ * @param props Object whose keys are names of accessors.
+ */
+ createProperties(props: object): void;
+
+ /**
+ * Returns an attribute name that corresponds to the given property.
+ * The attribute name is the lowercased property name. Override to
+ * customize this mapping.
+ *
+ * @param property Property to convert
+ * @returns Attribute name corresponding to the given property.
+ */
+ attributeNameForProperty(property: string): string;
+
+ /**
+ * Override point to provide a type to which to deserialize a value to
+ * a given property.
+ *
+ * @param name Name of property
+ */
+ typeForProperty(name: string): void;
+ }
+
+ interface PropertiesChanged {
+
+ /**
+ * Creates a setter/getter pair for the named property with its own
+ * local storage. The getter returns the value in the local storage,
+ * and the setter calls `_setProperty`, which updates the local storage
+ * for the property and enqueues a `_propertiesChanged` callback.
+ *
+ * This method may be called on a prototype or an instance. Calling
+ * this method may overwrite a property value that already exists on
+ * the prototype/instance by creating the accessor.
+ *
+ * @param property Name of the property
+ * @param readOnly When true, no setter is created; the
+ * protected `_setProperty` function must be used to set the property
+ */
+ _createPropertyAccessor(property: string, readOnly?: boolean): void;
+
+ /**
+ * Adds the given `property` to a map matching attribute names
+ * to property names, using `attributeNameForProperty`. This map is
+ * used when deserializing attribute values to properties.
+ *
+ * @param property Name of the property
+ */
+ _addPropertyToAttributeMap(property: string): void;
+
+ /**
+ * Defines a property accessor for the given property.
+ *
+ * @param property Name of the property
+ * @param readOnly When true, no setter is created
+ */
+ _definePropertyAccessor(property: string, readOnly?: boolean): void;
+
+ /**
+ * Lifecycle callback called when properties are enabled via
+ * `_enableProperties`.
+ *
+ * Users may override this function to implement behavior that is
+ * dependent on the element having its property data initialized, e.g.
+ * from defaults (initialized from `constructor`, `_initializeProperties`),
+ * `attributeChangedCallback`, or values propagated from host e.g. via
+ * bindings. `super.ready()` must be called to ensure the data system
+ * becomes enabled.
+ */
+ ready(): void;
+
+ /**
+ * Initializes the local storage for property accessors.
+ *
+ * Provided as an override point for performing any setup work prior
+ * to initializing the property accessor system.
+ */
+ _initializeProperties(): void;
+
+ /**
+ * Called at ready time with bag of instance properties that overwrote
+ * accessors when the element upgraded.
+ *
+ * The default implementation sets these properties back into the
+ * setter at ready time. This method is provided as an override
+ * point for customizing or providing more efficient initialization.
+ *
+ * @param props Bag of property values that were overwritten
+ * when creating property accessors.
+ */
+ _initializeInstanceProperties(props: object|null): void;
+
+ /**
+ * Updates the local storage for a property (via `_setPendingProperty`)
+ * and enqueues a `_proeprtiesChanged` callback.
+ *
+ * @param property Name of the property
+ * @param value Value to set
+ */
+ _setProperty(property: string, value: any): void;
+
+ /**
+ * Returns the value for the given property.
+ *
+ * @param property Name of property
+ * @returns Value for the given property
+ */
+ _getProperty(property: string): any;
+
+ /**
+ * Updates the local storage for a property, records the previous value,
+ * and adds it to the set of "pending changes" that will be passed to the
+ * `_propertiesChanged` callback. This method does not enqueue the
+ * `_propertiesChanged` callback.
+ *
+ * @param property Name of the property
+ * @param value Value to set
+ * @param ext Not used here; affordance for closure
+ * @returns Returns true if the property changed
+ */
+ _setPendingProperty(property: string, value: any, ext?: boolean): boolean;
+
+ /**
+ * Marks the properties as invalid, and enqueues an async
+ * `_propertiesChanged` callback.
+ */
+ _invalidateProperties(): void;
+
+ /**
+ * Call to enable property accessor processing. Before this method is
+ * called accessor values will be set but side effects are
+ * queued. When called, any pending side effects occur immediately.
+ * For elements, generally `connectedCallback` is a normal spot to do so.
+ * It is safe to call this method multiple times as it only turns on
+ * property accessors once.
+ */
+ _enableProperties(): void;
+
+ /**
+ * Calls the `_propertiesChanged` callback with the current set of
+ * pending changes (and old values recorded when pending changes were
+ * set), and resets the pending set of changes. Generally, this method
+ * should not be called in user code.
+ */
+ _flushProperties(): void;
+
+ /**
+ * Called in `_flushProperties` to determine if `_propertiesChanged`
+ * should be called. The default implementation returns true if
+ * properties are pending. Override to customize when
+ * `_propertiesChanged` is called.
+ *
+ * @param currentProps Bag of all current accessor values
+ * @param changedProps Bag of properties changed since the last
+ * call to `_propertiesChanged`
+ * @param oldProps Bag of previous values for each property
+ * in `changedProps`
+ * @returns true if changedProps is truthy
+ */
+ _shouldPropertiesChange(currentProps: object, changedProps: object, oldProps: object): boolean;
+
+ /**
+ * Callback called when any properties with accessors created via
+ * `_createPropertyAccessor` have been set.
+ *
+ * @param currentProps Bag of all current accessor values
+ * @param changedProps Bag of properties changed since the last
+ * call to `_propertiesChanged`
+ * @param oldProps Bag of previous values for each property
+ * in `changedProps`
+ */
+ _propertiesChanged(currentProps: object, changedProps: object, oldProps: object): void;
+
+ /**
+ * Method called to determine whether a property value should be
+ * considered as a change and cause the `_propertiesChanged` callback
+ * to be enqueued.
+ *
+ * The default implementation returns `true` if a strict equality
+ * check fails. The method always returns false for `NaN`.
+ *
+ * Override this method to e.g. provide stricter checking for
+ * Objects/Arrays when using immutable patterns.
+ *
+ * @param property Property name
+ * @param value New property value
+ * @param old Previous property value
+ * @returns Whether the property should be considered a change
+ * and enqueue a `_proeprtiesChanged` callback
+ */
+ _shouldPropertyChange(property: string, value: any, old: any): boolean;
+
+ /**
+ * Implements native Custom Elements `attributeChangedCallback` to
+ * set an attribute value to a property via `_attributeToProperty`.
+ *
+ * @param name Name of attribute that changed
+ * @param old Old attribute value
+ * @param value New attribute value
+ */
+ attributeChangedCallback(name: string, old: string|null, value: string|null): void;
+
+ /**
+ * Deserializes an attribute to its associated property.
+ *
+ * This method calls the `_deserializeValue` method to convert the string to
+ * a typed value.
+ *
+ * @param attribute Name of attribute to deserialize.
+ * @param value of the attribute.
+ * @param type type to deserialize to, defaults to the value
+ * returned from `typeForProperty`
+ */
+ _attributeToProperty(attribute: string, value: string|null, type?: any): void;
+
+ /**
+ * Serializes a property to its associated attribute.
+ *
+ * @param property Property name to reflect.
+ * @param attribute Attribute name to reflect to.
+ * @param value Property value to refect.
+ */
+ _propertyToAttribute(property: string, attribute?: string, value?: any): void;
+
+ /**
+ * Sets a typed value to an HTML attribute on a node.
+ *
+ * This method calls the `_serializeValue` method to convert the typed
+ * value to a string. If the `_serializeValue` method returns `undefined`,
+ * the attribute will be removed (this is the default for boolean
+ * type `false`).
+ *
+ * @param node Element to set attribute to.
+ * @param value Value to serialize.
+ * @param attribute Attribute name to serialize to.
+ */
+ _valueToNodeAttribute(node: _Element|null, value: any, attribute: string): void;
+
+ /**
+ * Converts a typed JavaScript value to a string.
+ *
+ * This method is called when setting JS property values to
+ * HTML attributes. Users may override this method to provide
+ * serialization for custom types.
+ *
+ * @param value Property value to serialize.
+ * @returns String serialized from the provided
+ * property value.
+ */
+ _serializeValue(value: any): string|undefined;
+
+ /**
+ * Converts a string to a typed JavaScript value.
+ *
+ * This method is called when reading HTML attribute values to
+ * JS properties. Users may override this method to provide
+ * deserialization for custom `type`s. Types for `Boolean`, `String`,
+ * and `Number` convert attributes to the expected types.
+ *
+ * @param value Value to deserialize.
+ * @param type Type to deserialize the string to.
+ * @returns Typed value deserialized from the provided string.
+ */
+ _deserializeValue(value: string|null, type?: any): any;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-mixin.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-mixin.d.ts
new file mode 100644
index 00000000000..566cd68633f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/properties-mixin.d.ts
@@ -0,0 +1,79 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/properties-mixin.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="properties-changed.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Mixin that provides a minimal starting point to using the PropertiesChanged
+ * mixin by providing a mechanism to declare properties in a static
+ * getter (e.g. static get properties() { return { foo: String } }). Changes
+ * are reported via the `_propertiesChanged` method.
+ *
+ * This mixin provides no specific support for rendering. Users are expected
+ * to create a ShadowRoot and put content into it and update it in whatever
+ * way makes sense. This can be done in reaction to properties changing by
+ * implementing `_propertiesChanged`.
+ */
+ function PropertiesMixin<T extends new (...args: any[]) => {}>(base: T): T & PropertiesMixinConstructor & Polymer.PropertiesChangedConstructor;
+
+ interface PropertiesMixinConstructor {
+ new(...args: any[]): PropertiesMixin;
+
+ /**
+ * Overrides `PropertiesChanged` method to return type specified in the
+ * static `properties` object for the given property.
+ *
+ * @param name Name of property
+ * @returns Type to which to deserialize attribute
+ */
+ typeForProperty(name: string): any;
+
+ /**
+ * Finalizes an element definition, including ensuring any super classes
+ * are also finalized. This includes ensuring property
+ * accessors exist on the element prototype. This method calls
+ * `_finalizeClass` to finalize each constructor in the prototype chain.
+ */
+ finalize(): void;
+
+ /**
+ * Finalize an element class. This includes ensuring property
+ * accessors exist on the element prototype. This method is called by
+ * `finalize` and finalizes the class constructor.
+ */
+ _finalizeClass(): void;
+ }
+
+ interface PropertiesMixin {
+
+ /**
+ * Overrides `PropertiesChanged` method and adds a call to
+ * `finalize` which lazily configures the element's property accessors.
+ */
+ _initializeProperties(): void;
+
+ /**
+ * Called when the element is added to a document.
+ * Calls `_enableProperties` to turn on property system from
+ * `PropertiesChanged`.
+ */
+ connectedCallback(): void;
+
+ /**
+ * Called when the element is removed from a document
+ */
+ disconnectedCallback(): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-accessors.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-accessors.d.ts
new file mode 100644
index 00000000000..b4c738aca7d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-accessors.d.ts
@@ -0,0 +1,152 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/property-accessors.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/case-map.d.ts" />
+/// <reference path="properties-changed.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that provides basic meta-programming for creating one
+ * or more property accessors (getter/setter pair) that enqueue an async
+ * (batched) `_propertiesChanged` callback.
+ *
+ * For basic usage of this mixin:
+ *
+ * - Declare attributes to observe via the standard `static get observedAttributes()`. Use
+ * `dash-case` attribute names to represent `camelCase` property names.
+ * - Implement the `_propertiesChanged` callback on the class.
+ * - Call `MyClass.createPropertiesForAttributes()` **once** on the class to generate
+ * property accessors for each observed attribute. This must be called before the first
+ * instance is created, for example, by calling it before calling `customElements.define`.
+ * It can also be called lazily from the element's `constructor`, as long as it's guarded so
+ * that the call is only made once, when the first instance is created.
+ * - Call `this._enableProperties()` in the element's `connectedCallback` to enable
+ * the accessors.
+ *
+ * Any `observedAttributes` will automatically be
+ * deserialized via `attributeChangedCallback` and set to the associated
+ * property using `dash-case`-to-`camelCase` convention.
+ */
+ function PropertyAccessors<T extends new (...args: any[]) => {}>(base: T): T & PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor;
+
+ interface PropertyAccessorsConstructor {
+ new(...args: any[]): PropertyAccessors;
+
+ /**
+ * Returns an attribute name that corresponds to the given property.
+ * By default, converts camel to dash case, e.g. `fooBar` to `foo-bar`.
+ *
+ * @param property Property to convert
+ * @returns Attribute name corresponding to the given property.
+ */
+ attributeNameForProperty(property: string): string;
+
+ /**
+ * Generates property accessors for all attributes in the standard
+ * static `observedAttributes` array.
+ *
+ * Attribute names are mapped to property names using the `dash-case` to
+ * `camelCase` convention
+ */
+ createPropertiesForAttributes(): void;
+ }
+
+ interface PropertyAccessors {
+
+ /**
+ * Overrides PropertiesChanged implementation to save existing prototype
+ * property value so that it can be reset.
+ *
+ * @param property Name of the property
+ * @param readOnly When true, no setter is created
+ *
+ * When calling on a prototype, any overwritten values are saved in
+ * `__dataProto`, and it is up to the subclasser to decide how/when
+ * to set those properties back into the accessor. When calling on an
+ * instance, the overwritten value is set via `_setPendingProperty`,
+ * and the user should call `_invalidateProperties` or `_flushProperties`
+ * for the values to take effect.
+ */
+ _definePropertyAccessor(property: string, readOnly?: boolean): void;
+
+ /**
+ * Overrides PropertiesChanged implementation to initialize values for
+ * accessors created for values that already existed on the element
+ * prototype.
+ */
+ _initializeProperties(): void;
+
+ /**
+ * Overrides PropertiesChanged implemention to serialize objects as JSON.
+ *
+ * @param value Property value to serialize.
+ * @returns String serialized from the provided property value.
+ */
+ _serializeValue(value: any): string|undefined;
+
+ /**
+ * Converts a string to a typed JavaScript value.
+ *
+ * This method is called by Polymer when reading HTML attribute values to
+ * JS properties. Users may override this method on Polymer element
+ * prototypes to provide deserialization for custom `type`s. Note,
+ * the `type` argument is the value of the `type` field provided in the
+ * `properties` configuration object for a given property, and is
+ * by convention the constructor for the type to deserialize.
+ *
+ * @param value Attribute value to deserialize.
+ * @param type Type to deserialize the string to.
+ * @returns Typed value deserialized from the provided string.
+ */
+ _deserializeValue(value: string|null, type?: any): any;
+
+ /**
+ * Called at instance time with bag of properties that were overwritten
+ * by accessors on the prototype when accessors were created.
+ *
+ * The default implementation sets these properties back into the
+ * setter at instance time. This method is provided as an override
+ * point for customizing or providing more efficient initialization.
+ *
+ * @param props Bag of property values that were overwritten
+ * when creating property accessors.
+ */
+ _initializeProtoProperties(props: object|null): void;
+
+ /**
+ * Ensures the element has the given attribute. If it does not,
+ * assigns the given value to the attribute.
+ *
+ * @param attribute Name of attribute to ensure is set.
+ * @param value of the attribute.
+ */
+ _ensureAttribute(attribute: string, value: string): void;
+
+ /**
+ * Returns true if this library created an accessor for the given property.
+ *
+ * @param property Property name
+ * @returns True if an accessor was created
+ */
+ _hasAccessor(property: string): boolean;
+
+ /**
+ * Returns true if the specified property has a pending change.
+ *
+ * @param prop Property name
+ * @returns True if property has a pending change
+ */
+ _isPropertyPending(prop: string): boolean;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-effects.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-effects.d.ts
new file mode 100644
index 00000000000..572674abe38
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/property-effects.d.ts
@@ -0,0 +1,841 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/property-effects.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+/// <reference path="../utils/path.d.ts" />
+/// <reference path="../utils/case-map.d.ts" />
+/// <reference path="property-accessors.d.ts" />
+/// <reference path="template-stamp.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element class mixin that provides meta-programming for Polymer's template
+ * binding and data observation (collectively, "property effects") system.
+ *
+ * This mixin uses provides the following key static methods for adding
+ * property effects to an element class:
+ * - `addPropertyEffect`
+ * - `createPropertyObserver`
+ * - `createMethodObserver`
+ * - `createNotifyingProperty`
+ * - `createReadOnlyProperty`
+ * - `createReflectedProperty`
+ * - `createComputedProperty`
+ * - `bindTemplate`
+ *
+ * Each method creates one or more property accessors, along with metadata
+ * used by this mixin's implementation of `_propertiesChanged` to perform
+ * the property effects.
+ *
+ * Underscored versions of the above methods also exist on the element
+ * prototype for adding property effects on instances at runtime.
+ *
+ * Note that this mixin overrides several `PropertyAccessors` methods, in
+ * many cases to maintain guarantees provided by the Polymer 1.x features;
+ * notably it changes property accessors to be synchronous by default
+ * whereas the default when using `PropertyAccessors` standalone is to be
+ * async by default.
+ */
+ function PropertyEffects<T extends new (...args: any[]) => {}>(base: T): T & PropertyEffectsConstructor & Polymer.TemplateStampConstructor & Polymer.PropertyAccessorsConstructor & Polymer.PropertiesChangedConstructor;
+
+ interface PropertyEffectsConstructor {
+ new(...args: any[]): PropertyEffects;
+
+ /**
+ * Overrides default `TemplateStamp` implementation to add support for
+ * parsing bindings from `TextNode`'s' `textContent`. A `bindings`
+ * array is added to `nodeInfo` and populated with binding metadata
+ * with information capturing the binding target, and a `parts` array
+ * with one or more metadata objects capturing the source(s) of the
+ * binding.
+ *
+ * @param node Node to parse
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template node
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNode(node: Node|null, templateInfo: TemplateInfo|null, nodeInfo: NodeInfo|null): boolean;
+
+ /**
+ * Overrides default `TemplateStamp` implementation to add support for
+ * binding the properties that a nested template depends on to the template
+ * as `_host_<property>`.
+ *
+ * @param node Node to parse
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template node
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNestedTemplate(node: Node|null, templateInfo: TemplateInfo|null, nodeInfo: NodeInfo|null): boolean;
+
+ /**
+ * Overrides default `TemplateStamp` implementation to add support for
+ * parsing bindings from attributes. A `bindings`
+ * array is added to `nodeInfo` and populated with binding metadata
+ * with information capturing the binding target, and a `parts` array
+ * with one or more metadata objects capturing the source(s) of the
+ * binding.
+ *
+ * @param node Node to parse
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template node
+ * @param name Attribute name
+ * @param value Attribute value
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNodeAttribute(node: _Element|null, templateInfo: TemplateInfo|null, nodeInfo: NodeInfo|null, name: string, value: string): boolean;
+
+ /**
+ * Ensures an accessor exists for the specified property, and adds
+ * to a list of "property effects" that will run when the accessor for
+ * the specified property is set. Effects are grouped by "type", which
+ * roughly corresponds to a phase in effect processing. The effect
+ * metadata should be in the following form:
+ *
+ * {
+ * fn: effectFunction, // Reference to function to call to perform effect
+ * info: { ... } // Effect metadata passed to function
+ * trigger: { // Optional triggering metadata; if not provided
+ * name: string // the property is treated as a wildcard
+ * structured: boolean
+ * wildcard: boolean
+ * }
+ * }
+ *
+ * Effects are called from `_propertiesChanged` in the following order by
+ * type:
+ *
+ * 1. COMPUTE
+ * 2. PROPAGATE
+ * 3. REFLECT
+ * 4. OBSERVE
+ * 5. NOTIFY
+ *
+ * Effect functions are called with the following signature:
+ *
+ * effectFunction(inst, path, props, oldProps, info, hasPaths)
+ *
+ * @param property Property that should trigger the effect
+ * @param type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @param effect Effect metadata object
+ */
+ addPropertyEffect(property: string, type: string, effect?: object|null): void;
+
+ /**
+ * Creates a single-property observer for the given property.
+ *
+ * @param property Property name
+ * @param method Function or name of observer method to call
+ * @param dynamicFn Whether the method name should be included as
+ * a dependency to the effect.
+ */
+ createPropertyObserver(property: string, method: string|((p0: any, p1: any) => any), dynamicFn?: boolean): void;
+
+ /**
+ * Creates a multi-property "method observer" based on the provided
+ * expression, which should be a string in the form of a normal JavaScript
+ * function signature: `'methodName(arg1, [..., argn])'`. Each argument
+ * should correspond to a property or path in the context of this
+ * prototype (or instance), or may be a literal string or number.
+ *
+ * @param expression Method expression
+ * @param dynamicFn Boolean or object map indicating
+ * @returns whether method names should be included as a dependency to the effect.
+ */
+ createMethodObserver(expression: string, dynamicFn?: boolean|object|null): void;
+
+ /**
+ * Causes the setter for the given property to dispatch `<property>-changed`
+ * events to notify of changes to the property.
+ *
+ * @param property Property name
+ */
+ createNotifyingProperty(property: string): void;
+
+ /**
+ * Creates a read-only accessor for the given property.
+ *
+ * To set the property, use the protected `_setProperty` API.
+ * To create a custom protected setter (e.g. `_setMyProp()` for
+ * property `myProp`), pass `true` for `protectedSetter`.
+ *
+ * Note, if the property will have other property effects, this method
+ * should be called first, before adding other effects.
+ *
+ * @param property Property name
+ * @param protectedSetter Creates a custom protected setter
+ * when `true`.
+ */
+ createReadOnlyProperty(property: string, protectedSetter?: boolean): void;
+
+ /**
+ * Causes the setter for the given property to reflect the property value
+ * to a (dash-cased) attribute of the same name.
+ *
+ * @param property Property name
+ */
+ createReflectedProperty(property: string): void;
+
+ /**
+ * Creates a computed property whose value is set to the result of the
+ * method described by the given `expression` each time one or more
+ * arguments to the method changes. The expression should be a string
+ * in the form of a normal JavaScript function signature:
+ * `'methodName(arg1, [..., argn])'`
+ *
+ * @param property Name of computed property to set
+ * @param expression Method expression
+ * @param dynamicFn Boolean or object map indicating whether
+ * method names should be included as a dependency to the effect.
+ */
+ createComputedProperty(property: string, expression: string, dynamicFn?: boolean|object|null): void;
+
+ /**
+ * Parses the provided template to ensure binding effects are created
+ * for them, and then ensures property accessors are created for any
+ * dependent properties in the template. Binding effects for bound
+ * templates are stored in a linked list on the instance so that
+ * templates can be efficiently stamped and unstamped.
+ *
+ * @param template Template containing binding
+ * bindings
+ * @returns Template metadata object
+ */
+ bindTemplate(template: HTMLTemplateElement): TemplateInfo;
+
+ /**
+ * Adds a property effect to the given template metadata, which is run
+ * at the "propagate" stage of `_propertiesChanged` when the template
+ * has been bound to the element via `_bindTemplate`.
+ *
+ * The `effect` object should match the format in `_addPropertyEffect`.
+ *
+ * @param templateInfo Template metadata to add effect to
+ * @param prop Property that should trigger the effect
+ * @param effect Effect metadata object
+ */
+ _addTemplatePropertyEffect(templateInfo: object|null, prop: string, effect?: object|null): void;
+
+ /**
+ * Called to parse text in a template (either attribute values or
+ * textContent) into binding metadata.
+ *
+ * Any overrides of this method should return an array of binding part
+ * metadata representing one or more bindings found in the provided text
+ * and any "literal" text in between. Any non-literal parts will be passed
+ * to `_evaluateBinding` when any dependencies change. The only required
+ * fields of each "part" in the returned array are as follows:
+ *
+ * - `dependencies` - Array containing trigger metadata for each property
+ * that should trigger the binding to update
+ * - `literal` - String containing text if the part represents a literal;
+ * in this case no `dependencies` are needed
+ *
+ * Additional metadata for use by `_evaluateBinding` may be provided in
+ * each part object as needed.
+ *
+ * The default implementation handles the following types of bindings
+ * (one or more may be intermixed with literal strings):
+ * - Property binding: `[[prop]]`
+ * - Path binding: `[[object.prop]]`
+ * - Negated property or path bindings: `[[!prop]]` or `[[!object.prop]]`
+ * - Two-way property or path bindings (supports negation):
+ * `{{prop}}`, `{{object.prop}}`, `{{!prop}}` or `{{!object.prop}}`
+ * - Inline computed method (supports negation):
+ * `[[compute(a, 'literal', b)]]`, `[[!compute(a, 'literal', b)]]`
+ *
+ * @param text Text to parse from attribute or textContent
+ * @param templateInfo Current template metadata
+ * @returns Array of binding part metadata
+ */
+ _parseBindings(text: string, templateInfo: object|null): BindingPart[]|null;
+
+ /**
+ * Called to evaluate a previously parsed binding part based on a set of
+ * one or more changed dependencies.
+ *
+ * @param inst Element that should be used as scope for
+ * binding dependencies
+ * @param part Binding part metadata
+ * @param path Property/path that triggered this effect
+ * @param props Bag of current property changes
+ * @param oldProps Bag of previous values for changed properties
+ * @param hasPaths True with `props` contains one or more paths
+ * @returns Value the binding part evaluated to
+ */
+ _evaluateBinding(inst: this|null, part: BindingPart|null, path: string, props: object|null, oldProps: object|null, hasPaths: boolean): any;
+ }
+
+ interface PropertyEffects {
+ readonly PROPERTY_EFFECT_TYPES: any;
+
+ /**
+ * Stamps the provided template and performs instance-time setup for
+ * Polymer template features, including data bindings, declarative event
+ * listeners, and the `this.$` map of `id`'s to nodes. A document fragment
+ * is returned containing the stamped DOM, ready for insertion into the
+ * DOM.
+ *
+ * This method may be called more than once; however note that due to
+ * `shadycss` polyfill limitations, only styles from templates prepared
+ * using `ShadyCSS.prepareTemplate` will be correctly polyfilled (scoped
+ * to the shadow root and support CSS custom properties), and note that
+ * `ShadyCSS.prepareTemplate` may only be called once per element. As such,
+ * any styles required by in runtime-stamped templates must be included
+ * in the main element template.
+ *
+ * @param template Template to stamp
+ * @returns Cloned template content
+ */
+ _stampTemplate(template: HTMLTemplateElement): StampedTemplate;
+
+ /**
+ * Overrides `PropertyAccessors` so that property accessor
+ * side effects are not enabled until after client dom is fully ready.
+ * Also calls `_flushClients` callback to ensure client dom is enabled
+ * that was not enabled as a result of flushing properties.
+ */
+ ready(): void;
+ _initializeProperties(): void;
+
+ /**
+ * Overrides `Polymer.PropertyAccessors` implementation to avoid setting
+ * `_setProperty`'s `shouldNotify: true`.
+ *
+ * @param props Properties to initialize on the instance
+ */
+ _initializeInstanceProperties(props: object|null): void;
+
+ /**
+ * Overrides base implementation to ensure all accessors set `shouldNotify`
+ * to true, for per-property notification tracking.
+ *
+ * @param property Name of the property
+ * @param value Value to set
+ */
+ _setProperty(property: string, value: any): void;
+
+ /**
+ * Overrides the `PropertiesChanged` implementation to introduce special
+ * dirty check logic depending on the property & value being set:
+ *
+ * 1. Any value set to a path (e.g. 'obj.prop': 42 or 'obj.prop': {...})
+ * Stored in `__dataTemp`, dirty checked against `__dataTemp`
+ * 2. Object set to simple property (e.g. 'prop': {...})
+ * Stored in `__dataTemp` and `__data`, dirty checked against
+ * `__dataTemp` by default implementation of `_shouldPropertyChange`
+ * 3. Primitive value set to simple property (e.g. 'prop': 42)
+ * Stored in `__data`, dirty checked against `__data`
+ *
+ * The dirty-check is important to prevent cycles due to two-way
+ * notification, but paths and objects are only dirty checked against any
+ * previous value set during this turn via a "temporary cache" that is
+ * cleared when the last `_propertiesChanged` exits. This is so:
+ * a. any cached array paths (e.g. 'array.3.prop') may be invalidated
+ * due to array mutations like shift/unshift/splice; this is fine
+ * since path changes are dirty-checked at user entry points like `set`
+ * b. dirty-checking for objects only lasts one turn to allow the user
+ * to mutate the object in-place and re-set it with the same identity
+ * and have all sub-properties re-propagated in a subsequent turn.
+ *
+ * The temp cache is not necessarily sufficient to prevent invalid array
+ * paths, since a splice can happen during the same turn (with pathological
+ * user code); we could introduce a "fixup" for temporarily cached array
+ * paths if needed: https://github.com/Polymer/polymer/issues/4227
+ *
+ * @param property Name of the property
+ * @param value Value to set
+ * @param shouldNotify True if property should fire notification
+ * event (applies only for `notify: true` properties)
+ * @returns Returns true if the property changed
+ */
+ _setPendingProperty(property: string, value: any, shouldNotify?: boolean): boolean;
+
+ /**
+ * Overrides `PropertyAccessor`'s default async queuing of
+ * `_propertiesChanged`: if `__dataReady` is false (has not yet been
+ * manually flushed), the function no-ops; otherwise flushes
+ * `_propertiesChanged` synchronously.
+ */
+ _invalidateProperties(): void;
+
+ /**
+ * Overrides superclass implementation.
+ */
+ _flushProperties(): void;
+
+ /**
+ * Implements `PropertyAccessors`'s properties changed callback.
+ *
+ * Runs each class of effects for the batch of changed properties in
+ * a specific order (compute, propagate, reflect, observe, notify).
+ *
+ * @param currentProps Bag of all current accessor values
+ * @param changedProps Bag of properties changed since the last
+ * call to `_propertiesChanged`
+ * @param oldProps Bag of previous values for each property
+ * in `changedProps`
+ */
+ _propertiesChanged(currentProps: object, changedProps: object, oldProps: object): void;
+
+ /**
+ * Overrides `Polymer.PropertyAccessors` implementation to provide a
+ * more efficient implementation of initializing properties from
+ * the prototype on the instance.
+ *
+ * @param props Properties to initialize on the prototype
+ */
+ _initializeProtoProperties(props: object|null): void;
+
+ /**
+ * Equivalent to static `addPropertyEffect` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param property Property that should trigger the effect
+ * @param type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @param effect Effect metadata object
+ */
+ _addPropertyEffect(property: string, type: string, effect?: object|null): void;
+
+ /**
+ * Removes the given property effect.
+ *
+ * @param property Property the effect was associated with
+ * @param type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @param effect Effect metadata object to remove
+ */
+ _removePropertyEffect(property: string, type: string, effect?: object|null): void;
+
+ /**
+ * Returns whether the current prototype/instance has a property effect
+ * of a certain type.
+ *
+ * @param property Property name
+ * @param type Effect type, from this.PROPERTY_EFFECT_TYPES
+ * @returns True if the prototype/instance has an effect of this type
+ */
+ _hasPropertyEffect(property: string, type?: string): boolean;
+
+ /**
+ * Returns whether the current prototype/instance has a "read only"
+ * accessor for the given property.
+ *
+ * @param property Property name
+ * @returns True if the prototype/instance has an effect of this type
+ */
+ _hasReadOnlyEffect(property: string): boolean;
+
+ /**
+ * Returns whether the current prototype/instance has a "notify"
+ * property effect for the given property.
+ *
+ * @param property Property name
+ * @returns True if the prototype/instance has an effect of this type
+ */
+ _hasNotifyEffect(property: string): boolean;
+
+ /**
+ * Returns whether the current prototype/instance has a "reflect to attribute"
+ * property effect for the given property.
+ *
+ * @param property Property name
+ * @returns True if the prototype/instance has an effect of this type
+ */
+ _hasReflectEffect(property: string): boolean;
+
+ /**
+ * Returns whether the current prototype/instance has a "computed"
+ * property effect for the given property.
+ *
+ * @param property Property name
+ * @returns True if the prototype/instance has an effect of this type
+ */
+ _hasComputedEffect(property: string): boolean;
+
+ /**
+ * Sets a pending property or path. If the root property of the path in
+ * question had no accessor, the path is set, otherwise it is enqueued
+ * via `_setPendingProperty`.
+ *
+ * This function isolates relatively expensive functionality necessary
+ * for the public API (`set`, `setProperties`, `notifyPath`, and property
+ * change listeners via {{...}} bindings), such that it is only done
+ * when paths enter the system, and not at every propagation step. It
+ * also sets a `__dataHasPaths` flag on the instance which is used to
+ * fast-path slower path-matching code in the property effects host paths.
+ *
+ * `path` can be a path string or array of path parts as accepted by the
+ * public API.
+ *
+ * @param path Path to set
+ * @param value Value to set
+ * @param shouldNotify Set to true if this change should
+ * cause a property notification event dispatch
+ * @param isPathNotification If the path being set is a path
+ * notification of an already changed value, as opposed to a request
+ * to set and notify the change. In the latter `false` case, a dirty
+ * check is performed and then the value is set to the path before
+ * enqueuing the pending property change.
+ * @returns Returns true if the property/path was enqueued in
+ * the pending changes bag.
+ */
+ _setPendingPropertyOrPath(path: string|Array<number|string>, value: any, shouldNotify?: boolean, isPathNotification?: boolean): boolean;
+
+ /**
+ * Applies a value to a non-Polymer element/node's property.
+ *
+ * The implementation makes a best-effort at binding interop:
+ * Some native element properties have side-effects when
+ * re-setting the same value (e.g. setting `<input>.value` resets the
+ * cursor position), so we do a dirty-check before setting the value.
+ * However, for better interop with non-Polymer custom elements that
+ * accept objects, we explicitly re-set object changes coming from the
+ * Polymer world (which may include deep object changes without the
+ * top reference changing), erring on the side of providing more
+ * information.
+ *
+ * Users may override this method to provide alternate approaches.
+ *
+ * @param node The node to set a property on
+ * @param prop The property to set
+ * @param value The value to set
+ */
+ _setUnmanagedPropertyToNode(node: Node, prop: string, value: any): void;
+
+ /**
+ * Enqueues the given client on a list of pending clients, whose
+ * pending property changes can later be flushed via a call to
+ * `_flushClients`.
+ *
+ * @param client PropertyEffects client to enqueue
+ */
+ _enqueueClient(client: object|null): void;
+
+ /**
+ * Flushes any clients previously enqueued via `_enqueueClient`, causing
+ * their `_flushProperties` method to run.
+ */
+ _flushClients(): void;
+
+ /**
+ * Perform any initial setup on client dom. Called before the first
+ * `_flushProperties` call on client dom and before any element
+ * observers are called.
+ */
+ _readyClients(): void;
+
+ /**
+ * Sets a bag of property changes to this instance, and
+ * synchronously processes all effects of the properties as a batch.
+ *
+ * Property names must be simple properties, not paths. Batched
+ * path propagation is not supported.
+ *
+ * @param props Bag of one or more key-value pairs whose key is
+ * a property and value is the new value to set for that property.
+ * @param setReadOnly When true, any private values set in
+ * `props` will be set. By default, `setProperties` will not set
+ * `readOnly: true` root properties.
+ */
+ setProperties(props: object|null, setReadOnly?: boolean): void;
+
+ /**
+ * Called to propagate any property changes to stamped template nodes
+ * managed by this element.
+ *
+ * @param changedProps Bag of changed properties
+ * @param oldProps Bag of previous values for changed properties
+ * @param hasPaths True with `props` contains one or more paths
+ */
+ _propagatePropertyChanges(changedProps: object|null, oldProps: object|null, hasPaths: boolean): void;
+
+ /**
+ * Aliases one data path as another, such that path notifications from one
+ * are routed to the other.
+ *
+ * @param to Target path to link.
+ * @param from Source path to link.
+ */
+ linkPaths(to: string|Array<string|number>, from: string|Array<string|number>): void;
+
+ /**
+ * Removes a data path alias previously established with `_linkPaths`.
+ *
+ * Note, the path to unlink should be the target (`to`) used when
+ * linking the paths.
+ *
+ * @param path Target path to unlink.
+ */
+ unlinkPaths(path: string|Array<string|number>): void;
+
+ /**
+ * Notify that an array has changed.
+ *
+ * Example:
+ *
+ * this.items = [ {name: 'Jim'}, {name: 'Todd'}, {name: 'Bill'} ];
+ * ...
+ * this.items.splice(1, 1, {name: 'Sam'});
+ * this.items.push({name: 'Bob'});
+ * this.notifySplices('items', [
+ * { index: 1, removed: [{name: 'Todd'}], addedCount: 1, object: this.items, type: 'splice' },
+ * { index: 3, removed: [], addedCount: 1, object: this.items, type: 'splice'}
+ * ]);
+ *
+ * @param path Path that should be notified.
+ * @param splices Array of splice records indicating ordered
+ * changes that occurred to the array. Each record should have the
+ * following fields:
+ * * index: index at which the change occurred
+ * * removed: array of items that were removed from this index
+ * * addedCount: number of new items added at this index
+ * * object: a reference to the array in question
+ * * type: the string literal 'splice'
+ *
+ * Note that splice records _must_ be normalized such that they are
+ * reported in index order (raw results from `Object.observe` are not
+ * ordered and must be normalized/merged before notifying).
+ */
+ notifySplices(path: string, splices: any[]|null): void;
+
+ /**
+ * Convenience method for reading a value from a path.
+ *
+ * Note, if any part in the path is undefined, this method returns
+ * `undefined` (this method does not throw when dereferencing undefined
+ * paths).
+ *
+ * @param path Path to the value
+ * to read. The path may be specified as a string (e.g. `foo.bar.baz`)
+ * or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that
+ * bracketed expressions are not supported; string-based path parts
+ * *must* be separated by dots. Note that when dereferencing array
+ * indices, the index may be used as a dotted part directly
+ * (e.g. `users.12.name` or `['users', 12, 'name']`).
+ * @param root Root object from which the path is evaluated.
+ * @returns Value at the path, or `undefined` if any part of the path
+ * is undefined.
+ */
+ get(path: string|Array<string|number>, root?: object|null): any;
+
+ /**
+ * Convenience method for setting a value to a path and notifying any
+ * elements bound to the same path.
+ *
+ * Note, if any part in the path except for the last is undefined,
+ * this method does nothing (this method does not throw when
+ * dereferencing undefined paths).
+ *
+ * @param path Path to the value
+ * to write. The path may be specified as a string (e.g. `'foo.bar.baz'`)
+ * or an array of path parts (e.g. `['foo.bar', 'baz']`). Note that
+ * bracketed expressions are not supported; string-based path parts
+ * *must* be separated by dots. Note that when dereferencing array
+ * indices, the index may be used as a dotted part directly
+ * (e.g. `'users.12.name'` or `['users', 12, 'name']`).
+ * @param value Value to set at the specified path.
+ * @param root Root object from which the path is evaluated.
+ * When specified, no notification will occur.
+ */
+ set(path: string|Array<string|number>, value: any, root?: object|null): void;
+
+ /**
+ * Adds items onto the end of the array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.push`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param path Path to array.
+ * @param items Items to push onto array
+ * @returns New length of the array.
+ */
+ push(path: string|Array<string|number>, ...items: any[]): number;
+
+ /**
+ * Removes an item from the end of array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.pop`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param path Path to array.
+ * @returns Item that was removed.
+ */
+ pop(path: string|Array<string|number>): any;
+
+ /**
+ * Starting from the start index specified, removes 0 or more items
+ * from the array and inserts 0 or more new items in their place.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.splice`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param path Path to array.
+ * @param start Index from which to start removing/inserting.
+ * @param deleteCount Number of items to remove.
+ * @param items Items to insert into array.
+ * @returns Array of removed items.
+ */
+ splice(path: string|Array<string|number>, start: number, deleteCount: number, ...items: any[]): any[]|null;
+
+ /**
+ * Removes an item from the beginning of array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.pop`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param path Path to array.
+ * @returns Item that was removed.
+ */
+ shift(path: string|Array<string|number>): any;
+
+ /**
+ * Adds items onto the beginning of the array at the path specified.
+ *
+ * The arguments after `path` and return value match that of
+ * `Array.prototype.push`.
+ *
+ * This method notifies other paths to the same array that a
+ * splice occurred to the array.
+ *
+ * @param path Path to array.
+ * @param items Items to insert info array
+ * @returns New length of the array.
+ */
+ unshift(path: string|Array<string|number>, ...items: any[]): number;
+
+ /**
+ * Notify that a path has changed.
+ *
+ * Example:
+ *
+ * this.item.user.name = 'Bob';
+ * this.notifyPath('item.user.name');
+ *
+ * @param path Path that should be notified.
+ * @param value Value at the path (optional).
+ */
+ notifyPath(path: string, value?: any): void;
+
+ /**
+ * Equivalent to static `createReadOnlyProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param property Property name
+ * @param protectedSetter Creates a custom protected setter
+ * when `true`.
+ */
+ _createReadOnlyProperty(property: string, protectedSetter?: boolean): void;
+
+ /**
+ * Equivalent to static `createPropertyObserver` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param property Property name
+ * @param method Function or name of observer method to call
+ * @param dynamicFn Whether the method name should be included as
+ * a dependency to the effect.
+ */
+ _createPropertyObserver(property: string, method: string|((p0: any, p1: any) => any), dynamicFn?: boolean): void;
+
+ /**
+ * Equivalent to static `createMethodObserver` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param expression Method expression
+ * @param dynamicFn Boolean or object map indicating
+ * whether method names should be included as a dependency to the effect.
+ */
+ _createMethodObserver(expression: string, dynamicFn?: boolean|object|null): void;
+
+ /**
+ * Equivalent to static `createNotifyingProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param property Property name
+ */
+ _createNotifyingProperty(property: string): void;
+
+ /**
+ * Equivalent to static `createReflectedProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param property Property name
+ */
+ _createReflectedProperty(property: string): void;
+
+ /**
+ * Equivalent to static `createComputedProperty` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * @param property Name of computed property to set
+ * @param expression Method expression
+ * @param dynamicFn Boolean or object map indicating
+ * whether method names should be included as a dependency to the effect.
+ */
+ _createComputedProperty(property: string, expression: string, dynamicFn?: boolean|object|null): void;
+
+ /**
+ * Equivalent to static `bindTemplate` API but can be called on
+ * an instance to add effects at runtime. See that method for
+ * full API docs.
+ *
+ * This method may be called on the prototype (for prototypical template
+ * binding, to avoid creating accessors every instance) once per prototype,
+ * and will be called with `runtimeBinding: true` by `_stampTemplate` to
+ * create and link an instance of the template metadata associated with a
+ * particular stamping.
+ *
+ * @param template Template containing binding
+ * bindings
+ * @param instanceBinding When false (default), performs
+ * "prototypical" binding of the template and overwrites any previously
+ * bound template for the class. When true (as passed from
+ * `_stampTemplate`), the template info is instanced and linked into
+ * the list of bound templates.
+ * @returns Template metadata object; for `runtimeBinding`,
+ * this is an instance of the prototypical template info
+ */
+ _bindTemplate(template: HTMLTemplateElement, instanceBinding?: boolean): TemplateInfo;
+
+ /**
+ * Removes and unbinds the nodes previously contained in the provided
+ * DocumentFragment returned from `_stampTemplate`.
+ *
+ * @param dom DocumentFragment previously returned
+ * from `_stampTemplate` associated with the nodes to be removed
+ */
+ _removeBoundDom(dom: StampedTemplate): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/template-stamp.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/template-stamp.d.ts
new file mode 100644
index 00000000000..6019d130174
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/mixins/template-stamp.d.ts
@@ -0,0 +1,258 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/mixins/template-stamp.html
+ */
+
+/// <reference path="../utils/boot.d.ts" />
+/// <reference path="../utils/mixin.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Element mixin that provides basic template parsing and stamping, including
+ * the following template-related features for stamped templates:
+ *
+ * - Declarative event listeners (`on-eventname="listener"`)
+ * - Map of node id's to stamped node instances (`this.$.id`)
+ * - Nested template content caching/removal and re-installation (performance
+ * optimization)
+ */
+ function TemplateStamp<T extends new (...args: any[]) => {}>(base: T): T & TemplateStampConstructor;
+
+ interface TemplateStampConstructor {
+ new(...args: any[]): TemplateStamp;
+
+ /**
+ * Scans a template to produce template metadata.
+ *
+ * Template-specific metadata are stored in the object returned, and node-
+ * specific metadata are stored in objects in its flattened `nodeInfoList`
+ * array. Only nodes in the template that were parsed as nodes of
+ * interest contain an object in `nodeInfoList`. Each `nodeInfo` object
+ * contains an `index` (`childNodes` index in parent) and optionally
+ * `parent`, which points to node info of its parent (including its index).
+ *
+ * The template metadata object returned from this method has the following
+ * structure (many fields optional):
+ *
+ * ```js
+ * {
+ * // Flattened list of node metadata (for nodes that generated metadata)
+ * nodeInfoList: [
+ * {
+ * // `id` attribute for any nodes with id's for generating `$` map
+ * id: {string},
+ * // `on-event="handler"` metadata
+ * events: [
+ * {
+ * name: {string}, // event name
+ * value: {string}, // handler method name
+ * }, ...
+ * ],
+ * // Notes when the template contained a `<slot>` for shady DOM
+ * // optimization purposes
+ * hasInsertionPoint: {boolean},
+ * // For nested `<template>`` nodes, nested template metadata
+ * templateInfo: {object}, // nested template metadata
+ * // Metadata to allow efficient retrieval of instanced node
+ * // corresponding to this metadata
+ * parentInfo: {number}, // reference to parent nodeInfo>
+ * parentIndex: {number}, // index in parent's `childNodes` collection
+ * infoIndex: {number}, // index of this `nodeInfo` in `templateInfo.nodeInfoList`
+ * },
+ * ...
+ * ],
+ * // When true, the template had the `strip-whitespace` attribute
+ * // or was nested in a template with that setting
+ * stripWhitespace: {boolean},
+ * // For nested templates, nested template content is moved into
+ * // a document fragment stored here; this is an optimization to
+ * // avoid the cost of nested template cloning
+ * content: {DocumentFragment}
+ * }
+ * ```
+ *
+ * This method kicks off a recursive treewalk as follows:
+ *
+ * ```
+ * _parseTemplate <---------------------+
+ * _parseTemplateContent |
+ * _parseTemplateNode <------------|--+
+ * _parseTemplateNestedTemplate --+ |
+ * _parseTemplateChildNodes ---------+
+ * _parseTemplateNodeAttributes
+ * _parseTemplateNodeAttribute
+ *
+ * ```
+ *
+ * These methods may be overridden to add custom metadata about templates
+ * to either `templateInfo` or `nodeInfo`.
+ *
+ * Note that this method may be destructive to the template, in that
+ * e.g. event annotations may be removed after being noted in the
+ * template metadata.
+ *
+ * @param template Template to parse
+ * @param outerTemplateInfo Template metadata from the outer
+ * template, for parsing nested templates
+ * @returns Parsed template metadata
+ */
+ _parseTemplate(template: HTMLTemplateElement, outerTemplateInfo?: TemplateInfo|null): TemplateInfo;
+ _parseTemplateContent(template: any, templateInfo: any, nodeInfo: any): any;
+
+ /**
+ * Parses template node and adds template and node metadata based on
+ * the current node, and its `childNodes` and `attributes`.
+ *
+ * This method may be overridden to add custom node or template specific
+ * metadata based on this node.
+ *
+ * @param node Node to parse
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template.
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNode(node: Node|null, templateInfo: TemplateInfo, nodeInfo: NodeInfo): boolean;
+
+ /**
+ * Parses template child nodes for the given root node.
+ *
+ * This method also wraps whitelisted legacy template extensions
+ * (`is="dom-if"` and `is="dom-repeat"`) with their equivalent element
+ * wrappers, collapses text nodes, and strips whitespace from the template
+ * if the `templateInfo.stripWhitespace` setting was provided.
+ *
+ * @param root Root node whose `childNodes` will be parsed
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template.
+ */
+ _parseTemplateChildNodes(root: Node|null, templateInfo: TemplateInfo, nodeInfo: NodeInfo): void;
+
+ /**
+ * Parses template content for the given nested `<template>`.
+ *
+ * Nested template info is stored as `templateInfo` in the current node's
+ * `nodeInfo`. `template.content` is removed and stored in `templateInfo`.
+ * It will then be the responsibility of the host to set it back to the
+ * template and for users stamping nested templates to use the
+ * `_contentForTemplate` method to retrieve the content for this template
+ * (an optimization to avoid the cost of cloning nested template content).
+ *
+ * @param node Node to parse (a <template>)
+ * @param outerTemplateInfo Template metadata for current template
+ * that includes the template `node`
+ * @param nodeInfo Node metadata for current template.
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNestedTemplate(node: HTMLTemplateElement|null, outerTemplateInfo: TemplateInfo|null, nodeInfo: NodeInfo): boolean;
+
+ /**
+ * Parses template node attributes and adds node metadata to `nodeInfo`
+ * for nodes of interest.
+ *
+ * @param node Node to parse
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template.
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNodeAttributes(node: _Element|null, templateInfo: TemplateInfo|null, nodeInfo: NodeInfo|null): boolean;
+
+ /**
+ * Parses a single template node attribute and adds node metadata to
+ * `nodeInfo` for attributes of interest.
+ *
+ * This implementation adds metadata for `on-event="handler"` attributes
+ * and `id` attributes.
+ *
+ * @param node Node to parse
+ * @param templateInfo Template metadata for current template
+ * @param nodeInfo Node metadata for current template.
+ * @param name Attribute name
+ * @param value Attribute value
+ * @returns `true` if the visited node added node-specific
+ * metadata to `nodeInfo`
+ */
+ _parseTemplateNodeAttribute(node: _Element|null, templateInfo: TemplateInfo, nodeInfo: NodeInfo, name: string, value: string): boolean;
+
+ /**
+ * Returns the `content` document fragment for a given template.
+ *
+ * For nested templates, Polymer performs an optimization to cache nested
+ * template content to avoid the cost of cloning deeply nested templates.
+ * This method retrieves the cached content for a given template.
+ *
+ * @param template Template to retrieve `content` for
+ * @returns Content fragment
+ */
+ _contentForTemplate(template: HTMLTemplateElement|null): DocumentFragment|null;
+ }
+
+ interface TemplateStamp {
+
+ /**
+ * Clones the provided template content and returns a document fragment
+ * containing the cloned dom.
+ *
+ * The template is parsed (once and memoized) using this library's
+ * template parsing features, and provides the following value-added
+ * features:
+ * * Adds declarative event listeners for `on-event="handler"` attributes
+ * * Generates an "id map" for all nodes with id's under `$` on returned
+ * document fragment
+ * * Passes template info including `content` back to templates as
+ * `_templateInfo` (a performance optimization to avoid deep template
+ * cloning)
+ *
+ * Note that the memoized template parsing process is destructive to the
+ * template: attributes for bindings and declarative event listeners are
+ * removed after being noted in notes, and any nested `<template>.content`
+ * is removed and stored in notes as well.
+ *
+ * @param template Template to stamp
+ * @returns Cloned template content
+ */
+ _stampTemplate(template: HTMLTemplateElement): StampedTemplate;
+
+ /**
+ * Adds an event listener by method name for the event provided.
+ *
+ * This method generates a handler function that looks up the method
+ * name at handling time.
+ *
+ * @param node Node to add listener on
+ * @param eventName Name of event
+ * @param methodName Name of method
+ * @param context Context the method will be called on (defaults
+ * to `node`)
+ * @returns Generated handler function
+ */
+ _addMethodEventListenerToNode(node: Node, eventName: string, methodName: string, context?: any): Function|null;
+
+ /**
+ * Override point for adding custom or simulated event handling.
+ *
+ * @param node Node to add event listener to
+ * @param eventName Name of event
+ * @param handler Listener function to add
+ */
+ _addEventListenerToNode(node: Node, eventName: string, handler: (p0: Event) => void): void;
+
+ /**
+ * Override point for adding custom or simulated event handling.
+ *
+ * @param node Node to remove event listener from
+ * @param eventName Name of event
+ * @param handler Listener function to remove
+ */
+ _removeEventListenerFromNode(node: Node|null, eventName: string, handler: (p0: Event) => void): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/array-splice.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/array-splice.d.ts
new file mode 100644
index 00000000000..faeb7c3dc03
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/array-splice.d.ts
@@ -0,0 +1,49 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/array-splice.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module that provides utilities for diffing arrays.
+ */
+ namespace ArraySplice {
+
+
+ /**
+ * Returns an array of splice records indicating the minimum edits required
+ * to transform the `previous` array into the `current` array.
+ *
+ * Splice records are ordered by index and contain the following fields:
+ * - `index`: index where edit started
+ * - `removed`: array of removed items from this index
+ * - `addedCount`: number of items added at this index
+ *
+ * This function is based on the Levenshtein "minimum edit distance"
+ * algorithm. Note that updates are treated as removal followed by addition.
+ *
+ * The worst-case time complexity of this algorithm is `O(l * p)`
+ * l: The length of the current array
+ * p: The length of the previous array
+ *
+ * However, the worst-case complexity is reduced by an `O(n)` optimization
+ * to detect any shared prefix & suffix between the two arrays and only
+ * perform the more expensive minimum edit distance calculation over the
+ * non-shared portions of the arrays.
+ *
+ * @returns Returns an array of splice record objects. Each of these
+ * contains: `index` the location where the splice occurred; `removed`
+ * the array of removed items from this location; `addedCount` the number
+ * of items added at this location.
+ */
+ function calculateSplices(current: any[], previous: any[]): any[];
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/async.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/async.d.ts
new file mode 100644
index 00000000000..9588dd36c15
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/async.d.ts
@@ -0,0 +1,119 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/async.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module that provides a number of strategies for enqueuing asynchronous
+ * tasks. Each sub-module provides a standard `run(fn)` interface that returns a
+ * handle, and a `cancel(handle)` interface for canceling async tasks before
+ * they run.
+ */
+ namespace Async {
+
+ /**
+ * Async interface wrapper around `setTimeout`.
+ */
+ namespace timeOut {
+
+
+ /**
+ * Returns a sub-module with the async interface providing the provided
+ * delay.
+ *
+ * @returns An async timeout interface
+ */
+ function after(delay?: number): AsyncInterface;
+
+
+ /**
+ * Enqueues a function called in the next task.
+ *
+ * @returns Handle used for canceling task
+ */
+ function run(fn: Function, delay?: number): number;
+
+
+ /**
+ * Cancels a previously enqueued `timeOut` callback.
+ */
+ function cancel(handle: number): void;
+ }
+
+ /**
+ * Async interface wrapper around `requestAnimationFrame`.
+ */
+ namespace animationFrame {
+
+
+ /**
+ * Enqueues a function called at `requestAnimationFrame` timing.
+ *
+ * @returns Handle used for canceling task
+ */
+ function run(fn: (p0: number) => void): number;
+
+
+ /**
+ * Cancels a previously enqueued `animationFrame` callback.
+ */
+ function cancel(handle: number): void;
+ }
+
+ /**
+ * Async interface wrapper around `requestIdleCallback`. Falls back to
+ * `setTimeout` on browsers that do not support `requestIdleCallback`.
+ */
+ namespace idlePeriod {
+
+
+ /**
+ * Enqueues a function called at `requestIdleCallback` timing.
+ *
+ * @returns Handle used for canceling task
+ */
+ function run(fn: (p0: IdleDeadline) => void): number;
+
+
+ /**
+ * Cancels a previously enqueued `idlePeriod` callback.
+ */
+ function cancel(handle: number): void;
+ }
+
+ /**
+ * Async interface for enqueuing callbacks that run at microtask timing.
+ *
+ * Note that microtask timing is achieved via a single `MutationObserver`,
+ * and thus callbacks enqueued with this API will all run in a single
+ * batch, and not interleaved with other microtasks such as promises.
+ * Promises are avoided as an implementation choice for the time being
+ * due to Safari bugs that cause Promises to lack microtask guarantees.
+ */
+ namespace microTask {
+
+
+ /**
+ * Enqueues a function called at microtask timing.
+ *
+ * @returns Handle used for canceling task
+ */
+ function run(callback?: Function): number;
+
+
+ /**
+ * Cancels a previously enqueued `microTask` callback.
+ */
+ function cancel(handle: number): void;
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/boot.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/boot.d.ts
new file mode 100644
index 00000000000..4175f318465
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/boot.d.ts
@@ -0,0 +1,19 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/boot.html
+ */
+
+/// <reference path="../../extra-types.d.ts" />
+
+/**
+ * Polymer is a lightweight library built on top of the web
+ * standards-based Web Components API's, and makes it easy to build your
+ * own custom HTML elements.
+ */
+declare namespace Polymer {
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/case-map.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/case-map.d.ts
new file mode 100644
index 00000000000..9fc51175393
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/case-map.d.ts
@@ -0,0 +1,39 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/case-map.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module with utilities for converting between "dash-case" and "camelCase"
+ * identifiers.
+ */
+ namespace CaseMap {
+
+
+ /**
+ * Converts "dash-case" identifier (e.g. `foo-bar-baz`) to "camelCase"
+ * (e.g. `fooBarBaz`).
+ *
+ * @returns Camel-case representation of the identifier
+ */
+ function dashToCamelCase(dash: string): string;
+
+
+ /**
+ * Converts "camelCase" identifier (e.g. `fooBarBaz`) to "dash-case"
+ * (e.g. `foo-bar-baz`).
+ *
+ * @returns Dash-case representation of the identifier
+ */
+ function camelToDashCase(camel: string): string;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/debounce.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/debounce.d.ts
new file mode 100644
index 00000000000..d8ee1eabc26
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/debounce.d.ts
@@ -0,0 +1,78 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/debounce.html
+ */
+
+/// <reference path="boot.d.ts" />
+/// <reference path="mixin.d.ts" />
+/// <reference path="async.d.ts" />
+
+declare namespace Polymer {
+
+ class Debouncer {
+
+ /**
+ * Creates a debouncer if no debouncer is passed as a parameter
+ * or it cancels an active debouncer otherwise. The following
+ * example shows how a debouncer can be called multiple times within a
+ * microtask and "debounced" such that the provided callback function is
+ * called once. Add this method to a custom element:
+ *
+ * _debounceWork() {
+ * this._debounceJob = Polymer.Debouncer.debounce(this._debounceJob,
+ * Polymer.Async.microTask, () => {
+ * this._doWork();
+ * });
+ * }
+ *
+ * If the `_debounceWork` method is called multiple times within the same
+ * microtask, the `_doWork` function will be called only once at the next
+ * microtask checkpoint.
+ *
+ * Note: In testing it is often convenient to avoid asynchrony. To accomplish
+ * this with a debouncer, you can use `Polymer.enqueueDebouncer` and
+ * `Polymer.flush`. For example, extend the above example by adding
+ * `Polymer.enqueueDebouncer(this._debounceJob)` at the end of the
+ * `_debounceWork` method. Then in a test, call `Polymer.flush` to ensure
+ * the debouncer has completed.
+ *
+ * @param debouncer Debouncer object.
+ * @param asyncModule Object with Async interface
+ * @param callback Callback to run.
+ * @returns Returns a debouncer object.
+ */
+ static debounce(debouncer: Debouncer|null, asyncModule: AsyncInterface, callback: () => any): Debouncer;
+
+ /**
+ * Sets the scheduler; that is, a module with the Async interface,
+ * a callback and optional arguments to be passed to the run function
+ * from the async module.
+ *
+ * @param asyncModule Object with Async interface.
+ * @param callback Callback to run.
+ */
+ setConfig(asyncModule: AsyncInterface, callback: () => any): void;
+
+ /**
+ * Cancels an active debouncer and returns a reference to itself.
+ */
+ cancel(): void;
+
+ /**
+ * Flushes an active debouncer and returns a reference to itself.
+ */
+ flush(): void;
+
+ /**
+ * Returns true if the debouncer is active.
+ *
+ * @returns True if active.
+ */
+ isActive(): boolean;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flattened-nodes-observer.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flattened-nodes-observer.d.ts
new file mode 100644
index 00000000000..32915b4bd35
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flattened-nodes-observer.d.ts
@@ -0,0 +1,96 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/flattened-nodes-observer.html
+ */
+
+/// <reference path="boot.d.ts" />
+/// <reference path="array-splice.d.ts" />
+/// <reference path="async.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Class that listens for changes (additions or removals) to
+ * "flattened nodes" on a given `node`. The list of flattened nodes consists
+ * of a node's children and, for any children that are `<slot>` elements,
+ * the expanded flattened list of `assignedNodes`.
+ * For example, if the observed node has children `<a></a><slot></slot><b></b>`
+ * and the `<slot>` has one `<div>` assigned to it, then the flattened
+ * nodes list is `<a></a><div></div><b></b>`. If the `<slot>` has other
+ * `<slot>` elements assigned to it, these are flattened as well.
+ *
+ * The provided `callback` is called whenever any change to this list
+ * of flattened nodes occurs, where an addition or removal of a node is
+ * considered a change. The `callback` is called with one argument, an object
+ * containing an array of any `addedNodes` and `removedNodes`.
+ *
+ * Note: the callback is called asynchronous to any changes
+ * at a microtask checkpoint. This is because observation is performed using
+ * `MutationObserver` and the `<slot>` element's `slotchange` event which
+ * are asynchronous.
+ *
+ * An example:
+ * ```js
+ * class TestSelfObserve extends Polymer.Element {
+ * static get is() { return 'test-self-observe';}
+ * connectedCallback() {
+ * super.connectedCallback();
+ * this._observer = new Polymer.FlattenedNodesObserver(this, (info) => {
+ * this.info = info;
+ * });
+ * }
+ * disconnectedCallback() {
+ * super.disconnectedCallback();
+ * this._observer.disconnect();
+ * }
+ * }
+ * customElements.define(TestSelfObserve.is, TestSelfObserve);
+ * ```
+ */
+ class FlattenedNodesObserver {
+
+ /**
+ * Returns the list of flattened nodes for the given `node`.
+ * This list consists of a node's children and, for any children
+ * that are `<slot>` elements, the expanded flattened list of `assignedNodes`.
+ * For example, if the observed node has children `<a></a><slot></slot><b></b>`
+ * and the `<slot>` has one `<div>` assigned to it, then the flattened
+ * nodes list is `<a></a><div></div><b></b>`. If the `<slot>` has other
+ * `<slot>` elements assigned to it, these are flattened as well.
+ *
+ * @param node The node for which to return the list of flattened nodes.
+ * @returns The list of flattened nodes for the given `node`.
+ */
+ static getFlattenedNodes(node: HTMLElement|HTMLSlotElement|null): any[]|null;
+
+ /**
+ * Activates an observer. This method is automatically called when
+ * a `FlattenedNodesObserver` is created. It should only be called to
+ * re-activate an observer that has been deactivated via the `disconnect` method.
+ */
+ connect(): void;
+
+ /**
+ * Deactivates the flattened nodes observer. After calling this method
+ * the observer callback will not be called when changes to flattened nodes
+ * occur. The `connect` method may be subsequently called to reactivate
+ * the observer.
+ */
+ disconnect(): void;
+
+ /**
+ * Flushes the observer causing any pending changes to be immediately
+ * delivered the observer callback. By default these changes are delivered
+ * asynchronously at the next microtask checkpoint.
+ *
+ * @returns Returns true if any pending changes caused the observer
+ * callback to run.
+ */
+ flush(): boolean;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flush.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flush.d.ts
new file mode 100644
index 00000000000..5481803ec2b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/flush.d.ts
@@ -0,0 +1,28 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/flush.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Adds a `Polymer.Debouncer` to a list of globally flushable tasks.
+ */
+ function enqueueDebouncer(debouncer: Polymer.Debouncer): void;
+
+
+ /**
+ * Forces several classes of asynchronously queued tasks to flush:
+ * - Debouncers added via `enqueueDebouncer`
+ * - ShadyDOM distribution
+ */
+ function flush(): void;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/gestures.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/gestures.d.ts
new file mode 100644
index 00000000000..6c7843506c3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/gestures.d.ts
@@ -0,0 +1,87 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/gestures.html
+ */
+
+/// <reference path="boot.d.ts" />
+/// <reference path="async.d.ts" />
+/// <reference path="debounce.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module for adding listeners to a node for the following normalized
+ * cross-platform "gesture" events:
+ * - `down` - mouse or touch went down
+ * - `up` - mouse or touch went up
+ * - `tap` - mouse click or finger tap
+ * - `track` - mouse drag or touch move
+ */
+ namespace Gestures {
+
+
+ /**
+ * Finds the element rendered on the screen at the provided coordinates.
+ *
+ * Similar to `document.elementFromPoint`, but pierces through
+ * shadow roots.
+ *
+ * @returns Returns the deepest shadowRoot inclusive element
+ * found at the screen position given.
+ */
+ function deepTargetFind(x: number, y: number): _Element|null;
+
+
+ /**
+ * Adds an event listener to a node for the given gesture type.
+ *
+ * @returns Returns true if a gesture event listener was added.
+ */
+ function addListener(node: Node, evType: string, handler: (p0: Event) => void): boolean;
+
+
+ /**
+ * Removes an event listener from a node for the given gesture type.
+ *
+ * @returns Returns true if a gesture event listener was removed.
+ */
+ function removeListener(node: Node, evType: string, handler: (p0: Event) => void): boolean;
+
+
+ /**
+ * Registers a new gesture event recognizer for adding new custom
+ * gesture event types.
+ */
+ function register(recog: GestureRecognizer): void;
+
+
+ /**
+ * Sets scrolling direction on node.
+ *
+ * This value is checked on first move, thus it should be called prior to
+ * adding event listeners.
+ */
+ function setTouchAction(node: _Element, value: string): void;
+
+
+ /**
+ * Prevents the dispatch and default action of the given event name.
+ */
+ function prevent(evName: string): void;
+
+
+ /**
+ * Reset the 2500ms timeout on processing mouse input after detecting touch input.
+ *
+ * Touch inputs create synthesized mouse inputs anywhere from 0 to 2000ms after the touch.
+ * This method should only be called during testing with simulated touch inputs.
+ * Calling this method in production may cause duplicate taps or other Gestures.
+ */
+ function resetMouseCanceller(): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/html-tag.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/html-tag.d.ts
new file mode 100644
index 00000000000..5c138ccc6ed
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/html-tag.d.ts
@@ -0,0 +1,86 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/html-tag.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+/**
+ * Class representing a static string value which can be used to filter
+ * strings by asseting that they have been created via this class. The
+ * `value` property returns the string passed to the constructor.
+ */
+declare class LiteralString {
+ value: string;
+
+ /**
+ * @returns LiteralString string value
+ */
+ toString(): string;
+}
+
+declare namespace Polymer {
+
+
+ /**
+ * A template literal tag that creates an HTML <template> element from the
+ * contents of the string.
+ *
+ * This allows you to write a Polymer Template in JavaScript.
+ *
+ * Templates can be composed by interpolating `HTMLTemplateElement`s in
+ * expressions in the JavaScript template literal. The nested template's
+ * `innerHTML` is included in the containing template. The only other
+ * values allowed in expressions are those returned from `Polymer.htmlLiteral`
+ * which ensures only literal values from JS source ever reach the HTML, to
+ * guard against XSS risks.
+ *
+ * All other values are disallowed in expressions to help prevent XSS
+ * attacks; however, `Polymer.htmlLiteral` can be used to compose static
+ * string values into templates. This is useful to compose strings into
+ * places that do not accept html, like the css text of a `style`
+ * element.
+ *
+ * Example:
+ *
+ * static get template() {
+ * return Polymer.html`
+ * <style>:host{ content:"..." }</style>
+ * <div class="shadowed">${this.partialTemplate}</div>
+ * ${super.template}
+ * `;
+ * }
+ * static get partialTemplate() { return Polymer.html`<span>Partial!</span>`; }
+ *
+ * @returns Constructed HTMLTemplateElement
+ */
+ function html(strings: TemplateStringsArray, ...values: any[]): HTMLTemplateElement;
+
+
+ /**
+ * An html literal tag that can be used with `Polymer.html` to compose.
+ * a literal string.
+ *
+ * Example:
+ *
+ * static get template() {
+ * return Polymer.html`
+ * <style>
+ * :host { display: block; }
+ * ${styleTemplate}
+ * </style>
+ * <div class="shadowed">${staticValue}</div>
+ * ${super.template}
+ * `;
+ * }
+ * static get styleTemplate() { return Polymer.htmlLiteral`.shadowed { background: gray; }`; }
+ *
+ * @returns Constructed literal string
+ */
+ function htmlLiteral(strings: TemplateStringsArray, ...values: any[]): LiteralString;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/import-href.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/import-href.d.ts
new file mode 100644
index 00000000000..16a0ae3e716
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/import-href.d.ts
@@ -0,0 +1,27 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/import-href.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Convenience method for importing an HTML document imperatively.
+ *
+ * This method creates a new `<link rel="import">` element with
+ * the provided URL and appends it to the document to start loading.
+ * In the `onload` callback, the `import` property of the `link`
+ * element will contain the imported document contents.
+ *
+ * @returns The link element for the URL to be loaded.
+ */
+ function importHref(href: string, onload?: ((p0: Event) => void)|null, onerror?: ((p0: ErrorEvent) => void)|null, optAsync?: boolean): HTMLLinkElement;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/mixin.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/mixin.d.ts
new file mode 100644
index 00000000000..a42c969c204
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/mixin.d.ts
@@ -0,0 +1,22 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/mixin.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+
+ /**
+ * Wraps an ES6 class expression mixin such that the mixin is only applied
+ * if it has not already been applied its base argument. Also memoizes mixin
+ * applications.
+ */
+ function dedupingMixin<T>(mixin: T): T;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/path.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/path.d.ts
new file mode 100644
index 00000000000..afcc5efbac7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/path.d.ts
@@ -0,0 +1,151 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/path.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module with utilities for manipulating structured data path strings.
+ */
+ namespace Path {
+
+
+ /**
+ * Returns true if the given string is a structured data path (has dots).
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isPath('foo.bar.baz') // true
+ * Polymer.Path.isPath('foo') // false
+ * ```
+ *
+ * @returns True if the string contained one or more dots
+ */
+ function isPath(path: string): boolean;
+
+
+ /**
+ * Returns the root property name for the given path.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.root('foo.bar.baz') // 'foo'
+ * Polymer.Path.root('foo') // 'foo'
+ * ```
+ *
+ * @returns Root property name
+ */
+ function root(path: string): string;
+
+
+ /**
+ * Given `base` is `foo.bar`, `foo` is an ancestor, `foo.bar` is not
+ * Returns true if the given path is an ancestor of the base path.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isAncestor('foo.bar', 'foo') // true
+ * Polymer.Path.isAncestor('foo.bar', 'foo.bar') // false
+ * Polymer.Path.isAncestor('foo.bar', 'foo.bar.baz') // false
+ * ```
+ *
+ * @returns True if `path` is an ancestor of `base`.
+ */
+ function isAncestor(base: string, path: string): boolean;
+
+
+ /**
+ * Given `base` is `foo.bar`, `foo.bar.baz` is an descendant
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.isDescendant('foo.bar', 'foo.bar.baz') // true
+ * Polymer.Path.isDescendant('foo.bar', 'foo.bar') // false
+ * Polymer.Path.isDescendant('foo.bar', 'foo') // false
+ * ```
+ *
+ * @returns True if `path` is a descendant of `base`.
+ */
+ function isDescendant(base: string, path: string): boolean;
+
+
+ /**
+ * Replaces a previous base path with a new base path, preserving the
+ * remainder of the path.
+ *
+ * User must ensure `path` has a prefix of `base`.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.translate('foo.bar', 'zot', 'foo.bar.baz') // 'zot.baz'
+ * ```
+ *
+ * @returns Translated string
+ */
+ function translate(base: string, newBase: string, path: string): string;
+
+
+ /**
+ * Converts array-based paths to flattened path. String-based paths
+ * are returned as-is.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.normalize(['foo.bar', 0, 'baz']) // 'foo.bar.0.baz'
+ * Polymer.Path.normalize('foo.bar.0.baz') // 'foo.bar.0.baz'
+ * ```
+ *
+ * @returns Flattened path
+ */
+ function normalize(path: string|Array<string|number>): string;
+
+
+ /**
+ * Splits a path into an array of property names. Accepts either arrays
+ * of path parts or strings.
+ *
+ * Example:
+ *
+ * ```
+ * Polymer.Path.split(['foo.bar', 0, 'baz']) // ['foo', 'bar', '0', 'baz']
+ * Polymer.Path.split('foo.bar.0.baz') // ['foo', 'bar', '0', 'baz']
+ * ```
+ *
+ * @returns Array of path parts
+ */
+ function split(path: string|Array<string|number>): string[];
+
+
+ /**
+ * Reads a value from a path. If any sub-property in the path is `undefined`,
+ * this method returns `undefined` (will never throw.
+ *
+ * @returns Value at path, or `undefined` if the path could not be
+ * fully dereferenced.
+ */
+ function get(root: object|null, path: string|Array<string|number>, info?: object|null): any;
+
+
+ /**
+ * Sets a value to a path. If any sub-property in the path is `undefined`,
+ * this method will no-op.
+ *
+ * @returns The normalized version of the input path
+ */
+ function set(root: object|null, path: string|Array<string|number>, value: any): string|undefined;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/render-status.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/render-status.d.ts
new file mode 100644
index 00000000000..5d4424fcb2a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/render-status.d.ts
@@ -0,0 +1,45 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/render-status.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module for scheduling flushable pre-render and post-render tasks.
+ */
+ namespace RenderStatus {
+
+
+ /**
+ * Enqueues a callback which will be run before the next render, at
+ * `requestAnimationFrame` timing.
+ *
+ * This method is useful for enqueuing work that requires DOM measurement,
+ * since measurement may not be reliable in custom element callbacks before
+ * the first render, as well as for batching measurement tasks in general.
+ *
+ * Tasks in this queue may be flushed by calling `Polymer.RenderStatus.flush()`.
+ */
+ function beforeNextRender(context: any, callback: (...p0: any[]) => void, args?: any[]): void;
+
+
+ /**
+ * Enqueues a callback which will be run after the next render, equivalent
+ * to one task (`setTimeout`) after the next `requestAnimationFrame`.
+ *
+ * This method is useful for tuning the first-render performance of an
+ * element or application by deferring non-critical work until after the
+ * first paint. Typical non-render-critical work may include adding UI
+ * event listeners and aria attributes.
+ */
+ function afterNextRender(context: any, callback: (...p0: any[]) => void, args?: any[]): void;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/resolve-url.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/resolve-url.d.ts
new file mode 100644
index 00000000000..5aae176fffc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/resolve-url.d.ts
@@ -0,0 +1,50 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/resolve-url.html
+ */
+
+/// <reference path="boot.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module with utilities for resolving relative URL's.
+ */
+ namespace ResolveUrl {
+
+
+ /**
+ * Resolves the given URL against the provided `baseUri'.
+ *
+ * Note that this function performs no resolution for URLs that start
+ * with `/` (absolute URLs) or `#` (hash identifiers). For general purpose
+ * URL resolution, use `window.URL`.
+ *
+ * @returns resolved URL
+ */
+ function resolveUrl(url: string, baseURI?: string|null): string;
+
+
+ /**
+ * Resolves any relative URL's in the given CSS text against the provided
+ * `ownerDocument`'s `baseURI`.
+ *
+ * @returns Processed CSS text with resolved URL's
+ */
+ function resolveCss(cssText: string, baseURI: string): string;
+
+
+ /**
+ * Returns a path from a given `url`. The path includes the trailing
+ * `/` from the url.
+ *
+ * @returns resolved path
+ */
+ function pathFromUrl(url: string): string;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/settings.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/settings.d.ts
new file mode 100644
index 00000000000..b2f90ffe764
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/settings.d.ts
@@ -0,0 +1,40 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/settings.html
+ */
+
+/// <reference path="boot.d.ts" />
+/// <reference path="resolve-url.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Sets the global, legacy settings.
+ */
+ namespace Settings {
+ }
+
+
+ /**
+ * Sets the global rootPath property used by `Polymer.ElementMixin` and
+ * available via `Polymer.rootPath`.
+ */
+ function setRootPath(path: string): void;
+
+
+ /**
+ * Sets the global sanitizeDOMValue available via `Polymer.sanitizeDOMValue`.
+ */
+ function setSanitizeDOMValue(newSanitizeDOMValue: ((p0: any, p1: string, p2: string, p3: Node|null) => any)|undefined): void;
+
+
+ /**
+ * Sets `passiveTouchGestures` globally for all elements using Polymer Gestures.
+ */
+ function setPassiveTouchGestures(usePassive: boolean): void;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/style-gather.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/style-gather.d.ts
new file mode 100644
index 00000000000..842a70d472a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/style-gather.d.ts
@@ -0,0 +1,113 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/style-gather.html
+ */
+
+/// <reference path="resolve-url.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Module with utilities for collection CSS text from `<templates>`, external
+ * stylesheets, and `dom-module`s.
+ */
+ namespace StyleGather {
+
+
+ /**
+ * Returns a list of <style> elements in a space-separated list of `dom-module`s.
+ *
+ * @returns Array of contained <style> elements
+ */
+ function stylesFromModules(moduleIds: string): HTMLStyleElement[];
+
+
+ /**
+ * Returns a list of <style> elements in a given `dom-module`.
+ * Styles in a `dom-module` can come either from `<style>`s within the
+ * first `<template>`, or else from one or more
+ * `<link rel="import" type="css">` links outside the template.
+ *
+ * @returns Array of contained styles.
+ */
+ function stylesFromModule(moduleId: string): HTMLStyleElement[];
+
+
+ /**
+ * Returns the `<style>` elements within a given template.
+ *
+ * @returns Array of styles
+ */
+ function stylesFromTemplate(template: HTMLTemplateElement, baseURI: string): HTMLStyleElement[];
+
+
+ /**
+ * Returns a list of <style> elements from stylesheets loaded via `<link rel="import" type="css">` links within the specified `dom-module`.
+ *
+ * @returns Array of contained styles.
+ */
+ function stylesFromModuleImports(moduleId: string): HTMLStyleElement[];
+
+
+ /**
+ * @returns Array of contained styles
+ */
+ function _stylesFromModuleImports(module: HTMLElement): HTMLStyleElement[];
+
+
+ /**
+ * Returns CSS text of styles in a space-separated list of `dom-module`s.
+ * Note: This method is deprecated, use `stylesFromModules` instead.
+ *
+ * @returns Concatenated CSS content from specified `dom-module`s
+ */
+ function cssFromModules(moduleIds: string): string;
+
+
+ /**
+ * Returns CSS text of styles in a given `dom-module`. CSS in a `dom-module`
+ * can come either from `<style>`s within the first `<template>`, or else
+ * from one or more `<link rel="import" type="css">` links outside the
+ * template.
+ *
+ * Any `<styles>` processed are removed from their original location.
+ * Note: This method is deprecated, use `styleFromModule` instead.
+ *
+ * @returns Concatenated CSS content from specified `dom-module`
+ */
+ function cssFromModule(moduleId: string): string;
+
+
+ /**
+ * Returns CSS text of `<styles>` within a given template.
+ *
+ * Any `<styles>` processed are removed from their original location.
+ * Note: This method is deprecated, use `styleFromTemplate` instead.
+ *
+ * @returns Concatenated CSS content from specified template
+ */
+ function cssFromTemplate(template: HTMLTemplateElement, baseURI: string): string;
+
+
+ /**
+ * Returns CSS text from stylesheets loaded via `<link rel="import" type="css">`
+ * links within the specified `dom-module`.
+ *
+ * Note: This method is deprecated, use `stylesFromModuleImports` instead.
+ *
+ * @returns Concatenated CSS content from links in specified `dom-module`
+ */
+ function cssFromModuleImports(moduleId: string): string;
+
+
+ /**
+ * @returns Concatenated CSS content from links in the dom-module
+ */
+ function _cssFromModuleImports(module: HTMLElement): string;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/templatize.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/templatize.d.ts
new file mode 100644
index 00000000000..df7ae0ce4b6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/templatize.d.ts
@@ -0,0 +1,218 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/templatize.html
+ */
+
+/// <reference path="boot.d.ts" />
+/// <reference path="../mixins/property-effects.d.ts" />
+/// <reference path="../mixins/mutable-data.d.ts" />
+
+declare class TemplateInstanceBase extends
+ Polymer.PropertyEffects(
+ Polymer.Element) {
+
+ /**
+ * Find the parent model of this template instance. The parent model
+ * is either another templatize instance that had option `parentModel: true`,
+ * or else the host element.
+ */
+ readonly parentModel: Polymer.PropertyEffects;
+ _methodHost: Polymer.PropertyEffects;
+
+ /**
+ * Override point for adding custom or simulated event handling.
+ *
+ * @param node Node to add event listener to
+ * @param eventName Name of event
+ * @param handler Listener function to add
+ */
+ _addEventListenerToNode(node: Node, eventName: string, handler: (p0: Event) => void): void;
+
+ /**
+ * Overrides default property-effects implementation to intercept
+ * textContent bindings while children are "hidden" and cache in
+ * private storage for later retrieval.
+ *
+ * @param node The node to set a property on
+ * @param prop The property to set
+ * @param value The value to set
+ */
+ _setUnmanagedPropertyToNode(node: Node, prop: string, value: any): void;
+
+ /**
+ * Forwards a host property to this instance. This method should be
+ * called on instances from the `options.forwardHostProp` callback
+ * to propagate changes of host properties to each instance.
+ *
+ * Note this method enqueues the change, which are flushed as a batch.
+ *
+ * @param prop Property or path name
+ * @param value Value of the property to forward
+ */
+ forwardHostProp(prop: string, value: any): void;
+
+ /**
+ * Shows or hides the template instance top level child elements. For
+ * text nodes, `textContent` is removed while "hidden" and replaced when
+ * "shown."
+ *
+ * @param hide Set to true to hide the children;
+ * set to false to show them.
+ */
+ _showHideChildren(hide: boolean): void;
+
+ /**
+ * Stub of HTMLElement's `dispatchEvent`, so that effects that may
+ * dispatch events safely no-op.
+ *
+ * @param event Event to dispatch
+ * @returns Always true.
+ */
+ dispatchEvent(event: Event|null): boolean;
+}
+
+declare namespace templateInfo {
+
+ class templatizeTemplateClass {
+ }
+}
+
+declare namespace Polymer {
+
+ /**
+ * Module for preparing and stamping instances of templates that utilize
+ * Polymer's data-binding and declarative event listener features.
+ *
+ * Example:
+ *
+ * // Get a template from somewhere, e.g. light DOM
+ * let template = this.querySelector('template');
+ * // Prepare the template
+ * let TemplateClass = Polymer.Templatize.templatize(template);
+ * // Instance the template with an initial data model
+ * let instance = new TemplateClass({myProp: 'initial'});
+ * // Insert the instance's DOM somewhere, e.g. element's shadow DOM
+ * this.shadowRoot.appendChild(instance.root);
+ * // Changing a property on the instance will propagate to bindings
+ * // in the template
+ * instance.myProp = 'new value';
+ *
+ * The `options` dictionary passed to `templatize` allows for customizing
+ * features of the generated template class, including how outer-scope host
+ * properties should be forwarded into template instances, how any instance
+ * properties added into the template's scope should be notified out to
+ * the host, and whether the instance should be decorated as a "parent model"
+ * of any event handlers.
+ *
+ * // Customize property forwarding and event model decoration
+ * let TemplateClass = Polymer.Templatize.templatize(template, this, {
+ * parentModel: true,
+ * forwardHostProp(property, value) {...},
+ * instanceProps: {...},
+ * notifyInstanceProp(instance, property, value) {...},
+ * });
+ */
+ namespace Templatize {
+
+
+ /**
+ * Returns an anonymous `Polymer.PropertyEffects` class bound to the
+ * `<template>` provided. Instancing the class will result in the
+ * template being stamped into a document fragment stored as the instance's
+ * `root` property, after which it can be appended to the DOM.
+ *
+ * Templates may utilize all Polymer data-binding features as well as
+ * declarative event listeners. Event listeners and inline computing
+ * functions in the template will be called on the host of the template.
+ *
+ * The constructor returned takes a single argument dictionary of initial
+ * property values to propagate into template bindings. Additionally
+ * host properties can be forwarded in, and instance properties can be
+ * notified out by providing optional callbacks in the `options` dictionary.
+ *
+ * Valid configuration in `options` are as follows:
+ *
+ * - `forwardHostProp(property, value)`: Called when a property referenced
+ * in the template changed on the template's host. As this library does
+ * not retain references to templates instanced by the user, it is the
+ * templatize owner's responsibility to forward host property changes into
+ * user-stamped instances. The `instance.forwardHostProp(property, value)`
+ * method on the generated class should be called to forward host
+ * properties into the template to prevent unnecessary property-changed
+ * notifications. Any properties referenced in the template that are not
+ * defined in `instanceProps` will be notified up to the template's host
+ * automatically.
+ * - `instanceProps`: Dictionary of property names that will be added
+ * to the instance by the templatize owner. These properties shadow any
+ * host properties, and changes within the template to these properties
+ * will result in `notifyInstanceProp` being called.
+ * - `mutableData`: When `true`, the generated class will skip strict
+ * dirty-checking for objects and arrays (always consider them to be
+ * "dirty").
+ * - `notifyInstanceProp(instance, property, value)`: Called when
+ * an instance property changes. Users may choose to call `notifyPath`
+ * on e.g. the owner to notify the change.
+ * - `parentModel`: When `true`, events handled by declarative event listeners
+ * (`on-event="handler"`) will be decorated with a `model` property pointing
+ * to the template instance that stamped it. It will also be returned
+ * from `instance.parentModel` in cases where template instance nesting
+ * causes an inner model to shadow an outer model.
+ *
+ * All callbacks are called bound to the `owner`. Any context
+ * needed for the callbacks (such as references to `instances` stamped)
+ * should be stored on the `owner` such that they can be retrieved via
+ * `this`.
+ *
+ * When `options.forwardHostProp` is declared as an option, any properties
+ * referenced in the template will be automatically forwarded from the host of
+ * the `<template>` to instances, with the exception of any properties listed in
+ * the `options.instanceProps` object. `instanceProps` are assumed to be
+ * managed by the owner of the instances, either passed into the constructor
+ * or set after the fact. Note, any properties passed into the constructor will
+ * always be set to the instance (regardless of whether they would normally
+ * be forwarded from the host).
+ *
+ * Note that `templatize()` can be run only once for a given `<template>`.
+ * Further calls will result in an error. Also, there is a special
+ * behavior if the template was duplicated through a mechanism such as
+ * `<dom-repeat>` or `<test-fixture>`. In this case, all calls to
+ * `templatize()` return the same class for all duplicates of a template.
+ * The class returned from `templatize()` is generated only once using
+ * the `options` from the first call. This means that any `options`
+ * provided to subsequent calls will be ignored. Therefore, it is very
+ * important not to close over any variables inside the callbacks. Also,
+ * arrow functions must be avoided because they bind the outer `this`.
+ * Inside the callbacks, any contextual information can be accessed
+ * through `this`, which points to the `owner`.
+ *
+ * @returns Generated class bound to the template
+ * provided
+ */
+ function templatize(template: HTMLTemplateElement, owner?: Polymer.PropertyEffects|null, options?: object|null): {new(): TemplateInstanceBase};
+
+
+ /**
+ * Returns the template "model" associated with a given element, which
+ * serves as the binding scope for the template instance the element is
+ * contained in. A template model is an instance of
+ * `TemplateInstanceBase`, and should be used to manipulate data
+ * associated with this template instance.
+ *
+ * Example:
+ *
+ * let model = modelForElement(el);
+ * if (model.index < 10) {
+ * model.set('item.checked', true);
+ * }
+ *
+ * @returns Template instance representing the
+ * binding scope for the element
+ */
+ function modelForElement(template: HTMLTemplateElement|null, node?: Node|null): TemplateInstanceBase|null;
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/unresolved.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/unresolved.d.ts
new file mode 100644
index 00000000000..a46e651d507
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/lib/utils/unresolved.d.ts
@@ -0,0 +1,10 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * lib/utils/unresolved.html
+ */
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer-element.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer-element.d.ts
new file mode 100644
index 00000000000..2bb74590d2f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer-element.d.ts
@@ -0,0 +1,25 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * polymer-element.html
+ */
+
+/// <reference path="lib/mixins/element-mixin.d.ts" />
+/// <reference path="lib/utils/html-tag.d.ts" />
+
+declare namespace Polymer {
+
+ /**
+ * Base class that provides the core API for Polymer's meta-programming
+ * features including template stamping, data-binding, attribute deserialization,
+ * and property change observation.
+ */
+ class Element extends
+ Polymer.ElementMixin(
+ HTMLElement) {
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer.d.ts b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer.d.ts
new file mode 100644
index 00000000000..feb2c4aa2d9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/types/polymer.d.ts
@@ -0,0 +1,21 @@
+/**
+ * DO NOT EDIT
+ *
+ * This file was automatically generated by
+ * https://github.com/Polymer/gen-typescript-declarations
+ *
+ * To modify these typings, edit the source file(s):
+ * polymer.html
+ */
+
+/// <reference path="lib/legacy/legacy-element-mixin.d.ts" />
+/// <reference path="lib/legacy/polymer-fn.d.ts" />
+/// <reference path="lib/legacy/templatizer-behavior.d.ts" />
+/// <reference path="lib/elements/dom-bind.d.ts" />
+/// <reference path="lib/elements/dom-repeat.d.ts" />
+/// <reference path="lib/elements/dom-if.d.ts" />
+/// <reference path="lib/elements/array-selector.d.ts" />
+/// <reference path="lib/elements/custom-style.d.ts" />
+/// <reference path="lib/legacy/mutable-data-behavior.d.ts" />
+/// <reference path="lib/utils/html-tag.d.ts" />
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/wct.conf.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/wct.conf.json
new file mode 100644
index 00000000000..5b315d73625
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/polymer/wct.conf.json
@@ -0,0 +1,20 @@
+{
+ "suites": ["test/runner.html"],
+ "environmentImports": [
+ "test-fixture/test-fixture.html"
+ ],
+ "plugins": {
+ "local": {
+ "browserOptions": {
+ "chrome": [
+ "headless",
+ "disable-gpu",
+ "no-sandbox"
+ ],
+ "firefox": [
+ "-headless"
+ ]
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/.bower.json
new file mode 100644
index 00000000000..34fd0c3c8b1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/.bower.json
@@ -0,0 +1,46 @@
+{
+ "name": "shadycss",
+ "main": "scoping-shim.min.js",
+ "description": "Styling helpers for ShadyDOM",
+ "authors": [
+ "The Polymer Project Authors (https://polymer.github.io/AUTHORS.txt)"
+ ],
+ "license": "BSD-3-Clause",
+ "keywords": [
+ "shady-css",
+ "shadycss",
+ "shadow-css",
+ "shadowcss",
+ "web-components",
+ "webcomponents",
+ "polyfill",
+ "shim"
+ ],
+ "homepage": "https://webcomponents.org/polyfills",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "devDependencies": {
+ "web-component-tester": "^6",
+ "es6-promise": "stefanpenner/es6-promise#~4.1.0",
+ "template": "webcomponents/template#^1.0.0",
+ "html-imports": "webcomponents/html-imports#^1.0.0",
+ "custom-elements": "webcomponents/custom-elements#^1.0.0",
+ "shadydom": "webcomponents/shadydom#^1.0.0",
+ "webcomponents-platform": "webcomponents/webcomponents-platform#^1.0.0"
+ },
+ "version": "1.2.1",
+ "_release": "1.2.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.2.1",
+ "commit": "2aea216187280d2db8f50629905810b3388cbe49"
+ },
+ "_source": "https://github.com/webcomponents/shadycss.git",
+ "_target": "^v1.1.0",
+ "_originalSource": "webcomponents/shadycss"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/README.md
new file mode 100644
index 00000000000..c873ee095fa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/README.md
@@ -0,0 +1,400 @@
+# ShadyCSS
+
+ShadyCSS provides a library to simulate ShadowDOM style encapsulation (ScopingShim), a shim for the proposed CSS mixin `@apply` syntax (ApplyShim), and a library to integrate document-level stylesheets with both of the former libraries (CustomStyleInterface).
+
+## Requirements
+ShadyCSS requires support for the `<template>` element, ShadowDOM, MutationObserver, Promise, and Object.assign
+
+## Loading
+
+ShadyCSS can be used by loading the ScopingShim, ApplyShim, CustomStyleInterface, or any combination of those.
+
+The most-supported loading order is:
+1. ScopingShim
+1. ApplyShim
+1. CustomStyleInterface
+
+All libraries will expose an object on `window` named `ShadyCSS` with the following interface:
+
+```js
+ShadyCSS = {
+ prepareTemplate(templateElement, elementName, elementExtension){},
+ styleElement(element){},
+ styleSubtree(element, overrideProperties){},
+ styleDocument(overrideProperties){},
+ getComputedStyleValue(element, propertyName){
+ return // style value for property name on element
+ },
+ nativeCss: Boolean,
+ nativeShadow: Boolean
+}
+```
+
+## About ScopingShim
+
+ScopingShim provides simulated ShadyDOM style encapsulation, and a shim for CSS Custom Properties.
+
+ScopingShim works by rewriting style contents and transforming selectors to enforce scoping.
+Additionally, if CSS Custom Properties is not detected, ScopingShim will replace CSS Custom Property usage with realized values.
+
+### Example:
+Here's an example of a custom element when Scoping Shim is not needed.
+
+```html
+<my-element>
+ <!-- shadow-root -->
+ <style>
+ :host {
+ display: block;
+ }
+ #container slot::slotted(*) {
+ color: gray;
+ }
+ #foo {
+ color: black;
+ }
+ </style>
+ <div id="foo">Shadow</div>
+ <div id="container">
+ <slot>
+ <!-- span distributed here -->
+ </slot>
+ </div>
+ <!-- /shadow-root -->
+ <span>Light</span>
+</my-element>
+```
+
+becomes:
+
+```html
+<style scope="my-element">
+my-element {
+ display: block;
+}
+#container.my-element > * {
+ color: gray;
+}
+#foo.my-element {
+ color: black;
+}
+</style>
+<my-element>
+<div id="foo">Shadow</div>
+<div id="container">
+ <span>Light</span>
+</div>
+</my-element>
+```
+
+## About ApplyShim
+
+ApplyShim provides a shim for the `@apply` syntax proposed at https://tabatkins.github.io/specs/css-apply-rule/, which expands the definition CSS Custom Properties to include objects that can be applied as a block.
+
+This is done by transforming the block definition into a set of CSS Custom Properties, and replacing uses of `@apply` with consumption of those custom properties.
+
+### Status:
+
+The `@apply` proposal has been abandoned in favor of the ::part/::theme [Shadow Parts spec](https://tabatkins.github.io/specs/css-shadow-parts/). Therefore, the ApplyShim library is deprecated and provided only for backwards compatibility. Support going forward will be limited to critical bug fixes.
+
+### Known Issues:
+
+* Mixin properties cannot be modified at runtime.
+* Nested mixins are not supported.
+* Shorthand properties are not expanded and may conflict with more explicit properties. Whenever shorthand notations are used in conjunction with their expanded forms in `@apply`, depending in the order of usage of the mixins, properties can be overridden. This means that using both `background-color: green;` and `background: red;` in two separate CSS selectors
+ can result in `background-color: transparent` in the selector that `background: red;` is specified.
+
+ ```css
+ #nonexistent {
+ --my-mixin: {
+ background: red;
+ }
+ }
+ ```
+ with an element style definition of
+ ```css
+ :host {
+ display: block;
+ background-color: green;
+ @apply(--my-mixin);
+ }
+ ```
+ results in the background being `transparent`, as an empty `background` definition replaces
+ the `@apply` definition.
+
+ For this reason, we recommend avoiding shorthand properties.
+
+### Example:
+
+Here we define a block called `--mixin` at the document level, and apply that block to `my-element` somewhere in the page.
+
+```css
+html {
+ --mixin: {
+ border: 2px solid black;
+ background-color: green;
+ }
+}
+
+my-element {
+ border: 1px dotted orange;
+ @apply --mixin;
+}
+```
+
+becomes:
+
+```css
+html {
+ --mixin_-_border: 2px solid black;
+ --mixin_-_background-color: green;
+}
+
+my-element {
+ border: var(--mixin_-_border, 1px dotted orange);
+ background-color: var(--mixin_-_background-color);
+}
+```
+
+## About CustomStyleInterface
+
+CustomStyleInterface provides API to process `<style>` elements that are not inside of
+ShadowRoots, and simulate upper-boundary style scoping for ShadyDOM.
+
+To add document-level styles to ShadyCSS, one can call `CustomStyleInterface.addCustomStyle(styleElement)` or `CustomStyleInterface.addCustomStyle({getStyle: () => styleElement})`
+
+An example usage of the document-level styling api can be found in `examples/document-style-lib.js`, and another example that uses a custom element wrapper can be found in `examples/custom-style-element.js`
+
+### Example:
+
+```html
+<style class="document-style">
+html {
+ --content-color: brown;
+}
+</style>
+<my-element>This text will be brown!</my-element>
+<script>
+CustomStyleInterface.addCustomStyle(document.querySelector('style.document-style'));
+</script>
+```
+
+Another example with a wrapper `<custom-style>` element
+
+```html
+<custom-style>
+ <style>
+ html {
+ --content-color: brown;
+ }
+ </style>
+</custom-style>
+<script>
+class CustomStyle extends HTMLElement {
+ constructor() {
+ CustomStyleInterface.addCustomStyle(this);
+ }
+ getStyle() {
+ return this.querySelector('style');
+ }
+}
+</script>
+<my-element>This this text will be brown!</my-element>
+```
+
+Another example with a function that produces style elements
+
+```html
+<my-element>This this text will be brown!</my-element>
+<script>
+CustomStyleInterface.addCustomStyle({
+ getStyle() {
+ const s = document.createElement('style');
+ s.textContent = 'html{ --content-color: brown }';
+ return s;
+ }
+});
+</script>
+```
+
+## Usage
+
+To use ShadyCSS:
+
+1. First, call `ShadyCSS.prepareTemplate(template, name)` on a
+`<template>` element that will be imported into a `shadowRoot`.
+
+2. When the element instance is connected, call `ShadyCSS.styleElement(element)`
+
+3. Create and stamp the element's shadowRoot
+
+4. Whenever dynamic updates are required, call `ShadyCSS.styleSubtree(element)`.
+
+5. If a styling change is made that may affect the whole document, call
+`ShadyCSS.styleDocument()`.
+
+The following example uses ShadyCSS and ShadyDOM to define a custom element.
+
+```html
+<template id="myElementTemplate">
+ <style>
+ :host {
+ display: block;
+ padding: 8px;
+ }
+
+ #content {
+ background-color: var(--content-color);
+ }
+
+ .slot-container ::slotted(*) {
+ border: 1px solid steelblue;
+ margin: 4px;
+ }
+ </style>
+ <div id="content">Content</div>
+ <div class="slot-container">
+ <slot></slot>
+ </div>
+</template>
+<script>
+ ShadyCSS.prepareTemplate(myElementTemplate, 'my-element');
+ class MyElement extends HTMLElement {
+ connectedCallback() {
+ ShadyCSS.styleElement(this);
+ if (!this.shadowRoot) {
+ this.attachShadow({mode: 'open'});
+ this.shadowRoot.appendChild(
+ document.importNode(myElementTemplate.content, true));
+ }
+ }
+ }
+
+ customElements.define('my-element', MyElement);
+</script>
+```
+
+## Type Extension elements
+
+ShadyCSS can also be used with type extension elements by supplying the base
+element name to `prepareTemplate` as a third argument.
+
+### Example
+
+```html
+<template id="myElementTemplate">
+ <style>
+ :host {
+ display: block;
+ padding: 8px;
+ }
+
+ #content {
+ background-color: var(--content-color);
+ }
+
+ .slot-container ::slotted(*) {
+ border: 1px solid steelblue;
+ margin: 4px;
+ }
+ </style>
+ <div id="content">Content</div>
+ <div class="slot-container">
+ <slot></slot>
+ </div>
+</template>
+<script>
+ ShadyCSS.prepareTemplate(myElementTemplate, 'my-element', 'div');
+ class MyElement extends HTMLDivElement {
+ connectedCallback() {
+ ShadyCSS.styleElement(this);
+ if (!this.shadowRoot) {
+ this.attachShadow({mode: 'open'});
+ this.shadowRoot.appendChild(
+ document.importNode(myElementTemplate.content, true));
+ }
+ }
+ }
+
+ customElements.define('my-element', MyElement, {extends: 'div'});
+</script>
+```
+
+## Imperative values for Custom properties
+
+To set the value of a CSS Custom Property imperatively, `ShadyCSS.styleSubtree`
+and `ShadyCSS.styleDocument` support an additional argument of an object mapping
+variable name to value.
+
+When using ApplyShim, defining new mixins or new values for current mixins imperatively is not
+supported.
+
+### Example
+```html
+<my-element id="a">Text</my-element>
+<my-element>Text</my-element>
+<script>
+let el = document.querySelector('my-element#a');
+// Set the color of all my-element instances to 'green'
+ShadyCSS.styleDocument({'--content-color' : 'green'});
+// Set the color my-element#a's text to 'red'
+ShadyCSS.styleSubtree(el, {'--content-color' : 'red'});
+</script>
+```
+
+## Limitations
+
+### Selector scoping
+
+You must have a selector for ascendants of the `<slot>` element when using the `::slotted`
+pseudo-element.
+
+You cannot use any selector for the `<slot>` element. Rules like `.foo .bar::slotted(*)` are not supported.
+
+### Custom properties and `@apply`
+
+Dynamic changes are not automatically applied. If elements change such that they
+conditionally match selectors they did not previously, `ShadyCSS.styleDocument()`
+must be called.
+
+For a given element's shadowRoot, only 1 value is allowed per custom properties.
+Properties cannot change from parent to child as they can under native custom
+properties; they can only change when a shadowRoot boundary is crossed.
+
+To receive a custom property, an element must directly match a selector that
+defines the property in its host's stylesheet.
+
+### `<custom-style>` Flash of unstyled content
+
+If `ShadyCSS.applyStyle` is never called, `<custom-style>` elements will process
+after HTML Imports have loaded, after the document loads, or after the next paint.
+This means that there may be a flash of unstyled content on the first load.
+
+### Mixins do not cascade throught `<slot>`
+
+Crawling the DOM and updating styles is very expensive, and we found that trying to
+update mixins through `<slot>` insertion points to be too expensive to justify for both
+polyfilled CSS Mixins and polyfilled CSS Custom Properties.
+
+### External stylesheets not currently supported
+
+External stylesheets loaded via `<link rel="stylesheet">` within a shadow root or
+`@import` syntax inside a shadow root's stylesheet are not currently shimmed by
+the polyfill. This is mainly due to the fact that shimming them would require
+a fetch of the stylesheet text that is async cannot be easily coordinated with
+the upgrade timing of custom elements using them, making it impossible to avoid
+"flash of unstyled content" when running on polyfill.
+
+### Document level styling is not scoped by default
+
+ShadyCSS mimics the behavior of shadow dom, but it is not able to prevent document
+level styling to affect elements inside a shady dom. Global styles defined in
+`index.html` or any styles not processed by ShadyCSS will affect all elements on the page.
+
+To scope document level styling, the style must be wrapped in the `<custom-style>` element
+found in Polymer, or use the `CustomStyleInterface` library to modify document level styles.
+
+### Dynamically created styles are not supported
+
+ShadyCSS works by processing a template for a given custom element class. Only the style
+elements present in that template will be scoped for the custom element's ShadowRoot.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.html
new file mode 100644
index 00000000000..d344ec3721b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.html
@@ -0,0 +1,10 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<script src="apply-shim.min.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js
new file mode 100644
index 00000000000..8bfb6328a3b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js
@@ -0,0 +1,30 @@
+(function(){/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var k={};function n(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function p(a){a=a.replace(r,"").replace(aa,"");var c=t,b=a,d=new n;d.start=0;d.end=b.length;for(var e=d,f=0,h=b.length;f<h;f++)if("{"===b[f]){e.rules||(e.rules=[]);var g=e,m=g.rules[g.rules.length-1]||null;e=new n;e.start=f+1;e.parent=g;e.previous=m;g.rules.push(e)}else"}"===b[f]&&(e.end=f+1,e=e.parent||d);return c(d,a)}
+function t(a,c){var b=c.substring(a.start,a.end-1);a.parsedCssText=a.cssText=b.trim();a.parent&&(b=c.substring(a.previous?a.previous.end:a.parent.start,a.start-1),b=ba(b),b=b.replace(u," "),b=b.substring(b.lastIndexOf(";")+1),b=a.parsedSelector=a.selector=b.trim(),a.atRule=0===b.indexOf("@"),a.atRule?0===b.indexOf("@media")?a.type=v:b.match(ca)&&(a.type=x,a.keyframesName=a.selector.split(u).pop()):a.type=0===b.indexOf("--")?y:z);if(b=a.rules)for(var d=0,e=b.length,f;d<e&&(f=b[d]);d++)t(f,c);return a}
+function ba(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(a,b){a=b;for(b=6-a.length;b--;)a="0"+a;return"\\"+a})}
+function A(a,c,b){b=void 0===b?"":b;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var h=e.length,g;f<h&&(g=e[f]);f++)d=A(g,c,d)}else c?c=a.cssText:(c=a.cssText,c=c.replace(da,"").replace(ea,""),c=c.replace(fa,"").replace(ha,"")),(d=c.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(b+=a.selector+" {\n"),b+=d,a.selector&&(b+="}\n\n"));return b}
+var z=1,x=7,v=4,y=1E3,r=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,aa=/@import[^;]*;/gim,da=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,ea=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,fa=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,ha=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,ca=/^@[^\s]*keyframes/,u=/\s+/g;var ia=Promise.resolve();function ja(a){if(a=k[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function B(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function ka(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a.b||(a.b=!0,ia.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a.b=!1}))};var C=!(window.ShadyDOM&&window.ShadyDOM.inUse),D;function F(a){D=a&&a.shimcssproperties?!1:C||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?D=window.ShadyCSS.nativeCss:window.ShadyCSS?(F(window.ShadyCSS),window.ShadyCSS=void 0):F(window.WebComponents&&window.WebComponents.flags);var G=D;var H=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,I=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,la=/@media\s(.*)/;var J=new Set;function K(a){if(!a)return"";"string"===typeof a&&(a=p(a));return A(a,G)}function L(a){!a.__cssRules&&a.textContent&&(a.__cssRules=p(a.textContent));return a.__cssRules||null}function M(a,c,b,d){if(a){var e=!1,f=a.type;if(d&&f===v){var h=a.selector.match(la);h&&(window.matchMedia(h[1]).matches||(e=!0))}f===z?c(a):b&&f===x?b(a):f===y&&(e=!0);if((a=a.rules)&&!e){e=0;f=a.length;for(var g;e<f&&(g=a[e]);e++)M(g,c,b,d)}}}
+function N(a,c){var b=a.indexOf("var(");if(-1===b)return c(a,"","","");a:{var d=0;var e=b+3;for(var f=a.length;e<f;e++)if("("===a[e])d++;else if(")"===a[e]&&0===--d)break a;e=-1}d=a.substring(b+4,e);b=a.substring(0,b);a=N(a.substring(e+1),c);e=d.indexOf(",");return-1===e?c(b,d.trim(),"",a):c(b,d.substring(0,e).trim(),d.substring(e+1).trim(),a)};var ma=/;\s*/m,na=/^\s*(initial)|(inherit)\s*$/,O=/\s*!important/;function P(){this.a={}}P.prototype.set=function(a,c){a=a.trim();this.a[a]={h:c,i:{}}};P.prototype.get=function(a){a=a.trim();return this.a[a]||null};var Q=null;function R(){this.b=this.c=null;this.a=new P}R.prototype.o=function(a){a=I.test(a)||H.test(a);I.lastIndex=0;H.lastIndex=0;return a};
+R.prototype.m=function(a,c){if(void 0===a.a){var b=[];for(var d=a.content.querySelectorAll("style"),e=0;e<d.length;e++){var f=d[e];if(f.hasAttribute("shady-unscoped")){if(!C){var h=f.textContent;J.has(h)||(J.add(h),h=f.cloneNode(!0),document.head.appendChild(h));f.parentNode.removeChild(f)}}else b.push(f.textContent),f.parentNode.removeChild(f)}(b=b.join("").trim())?(d=document.createElement("style"),d.textContent=b,a.content.insertBefore(d,a.content.firstChild),b=d):b=null;a.a=b}return(a=a.a)?this.j(a,
+c):null};R.prototype.j=function(a,c){c=void 0===c?"":c;var b=L(a);this.l(b,c);a.textContent=K(b);return b};R.prototype.f=function(a){var c=this,b=L(a);M(b,function(a){":root"===a.selector&&(a.selector="html");c.g(a)});a.textContent=K(b);return b};R.prototype.l=function(a,c){var b=this;this.c=c;M(a,function(a){b.g(a)});this.c=null};R.prototype.g=function(a){a.cssText=oa(this,a.parsedCssText);":root"===a.selector&&(a.selector=":host > *")};
+function oa(a,c){c=c.replace(H,function(b,c,e,f){return pa(a,b,c,e,f)});return S(a,c)}
+function S(a,c){for(var b;b=I.exec(c);){var d=b[0],e=b[1];b=b.index;var f=c.slice(0,b+d.indexOf("@apply"));c=c.slice(b+d.length);var h=T(a,f);d=void 0;var g=a;e=e.replace(ma,"");var m=[];var l=g.a.get(e);l||(g.a.set(e,{}),l=g.a.get(e));if(l){g.c&&(l.i[g.c]=!0);var q=l.h;for(d in q)g=h&&h[d],l=[d,": var(",e,"_-_",d],g&&l.push(",",g.replace(O,"")),l.push(")"),O.test(q[d])&&l.push(" !important"),m.push(l.join(""))}d=m.join("; ");c=""+f+d+c;I.lastIndex=b+d.length}return c}
+function T(a,c){c=c.split(";");for(var b,d,e={},f=0,h;f<c.length;f++)if(b=c[f])if(h=b.split(":"),1<h.length){b=h[0].trim();var g=a;d=b;h=h.slice(1).join(":");var m=na.exec(h);m&&(m[1]?(g.b||(g.b=document.createElement("meta"),g.b.setAttribute("apply-shim-measure",""),g.b.style.all="initial",document.head.appendChild(g.b)),d=window.getComputedStyle(g.b).getPropertyValue(d)):d="apply-shim-inherit",h=d);d=h;e[b]=d}return e}function qa(a,c){if(Q)for(var b in c.i)b!==a.c&&Q(b)}
+function pa(a,c,b,d,e){d&&N(d,function(c,b){b&&a.a.get(b)&&(e="@apply "+b+";")});if(!e)return c;var f=S(a,""+e),h=c.slice(0,c.indexOf("--")),g=f=T(a,f),m=a.a.get(b),l=m&&m.h;l?g=Object.assign(Object.create(l),f):a.a.set(b,g);var q=[],w,X=!1;for(w in g){var E=f[w];void 0===E&&(E="initial");!l||w in l||(X=!0);q.push(""+b+"_-_"+w+": "+E)}X&&qa(a,m);m&&(m.h=g);d&&(h=c+";"+h);return""+h+q.join("; ")+";"}R.prototype.detectMixin=R.prototype.o;R.prototype.transformStyle=R.prototype.j;
+R.prototype.transformCustomStyle=R.prototype.f;R.prototype.transformRules=R.prototype.l;R.prototype.transformRule=R.prototype.g;R.prototype.transformTemplate=R.prototype.m;R.prototype._separator="_-_";Object.defineProperty(R.prototype,"invalidCallback",{get:function(){return Q},set:function(a){Q=a}});var U=new R;function V(){this.a=null;U.invalidCallback=ja}function W(a){a.a||(a.a=window.ShadyCSS.CustomStyleInterface,a.a&&(a.a.transformCallback=function(a){U.f(a)},a.a.validateCallback=function(){requestAnimationFrame(function(){a.a.enqueued&&a.flushCustomStyles()})}))}V.prototype.prepareTemplate=function(a,c){W(this);k[c]=a;c=U.m(a,c);a._styleAst=c};
+V.prototype.flushCustomStyles=function(){W(this);if(this.a){var a=this.a.processStyles();if(this.a.enqueued){for(var c=0;c<a.length;c++){var b=this.a.getStyleForCustomStyle(a[c]);b&&U.f(b)}this.a.enqueued=!1}}};
+V.prototype.styleSubtree=function(a,c){W(this);if(c)for(var b in c)null===b?a.style.removeProperty(b):a.style.setProperty(b,c[b]);if(a.shadowRoot)for(this.styleElement(a),a=a.shadowRoot.children||a.shadowRoot.childNodes,c=0;c<a.length;c++)this.styleSubtree(a[c]);else for(a=a.children||a.childNodes,c=0;c<a.length;c++)this.styleSubtree(a[c])};
+V.prototype.styleElement=function(a){W(this);var c=a.localName,b;c?-1<c.indexOf("-")?b=c:b=a.getAttribute&&a.getAttribute("is")||"":b=a.is;if((c=k[b])&&!B(c)){if(B(c)||c._applyShimValidatingVersion!==c._applyShimNextVersion)this.prepareTemplate(c,b),ka(c);if(a=a.shadowRoot)if(a=a.querySelector("style"))a.__cssRules=c._styleAst,a.textContent=K(c._styleAst)}};V.prototype.styleDocument=function(a){W(this);this.styleSubtree(document.body,a)};
+if(!window.ShadyCSS||!window.ShadyCSS.ScopingShim){var Y=new V,Z=window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface;window.ShadyCSS={prepareTemplate:function(a,c){Y.flushCustomStyles();Y.prepareTemplate(a,c)},styleSubtree:function(a,c){Y.flushCustomStyles();Y.styleSubtree(a,c)},styleElement:function(a){Y.flushCustomStyles();Y.styleElement(a)},styleDocument:function(a){Y.flushCustomStyles();Y.styleDocument(a)},getComputedStyleValue:function(a,c){return(a=window.getComputedStyle(a).getPropertyValue(c))?
+a.trim():""},flushCustomStyles:function(){Y.flushCustomStyles()},nativeCss:G,nativeShadow:C};Z&&(window.ShadyCSS.CustomStyleInterface=Z)}window.ShadyCSS.ApplyShim=U;}).call(this);
+
+//# sourceMappingURL=apply-shim.min.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js.map
new file mode 100644
index 00000000000..9117e961d31
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/apply-shim.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/template-map.js","src/css-parse.js","src/apply-shim-utils.js","src/style-settings.js","src/common-regex.js","src/unscoped-style-handler.js","src/style-util.js","src/apply-shim.js","src/common-utils.js","entrypoints/apply-shim.js"],"names":["templateMap","constructor","StyleNode","parse","text","replace","RX$$module$src$css_parse.comments","RX$$module$src$css_parse.port","parseCss","root","length","n","i","l","OPEN_BRACE","p","previous","push","CLOSE_BRACE","node","t","substring","trim","ss","_expandUnicodeEscapes","RX$$module$src$css_parse.multipleSpaces","lastIndexOf","s","indexOf","AT_START","MEDIA_START","types$$module$src$css_parse.MEDIA_RULE","match","RX$$module$src$css_parse.keyframesRule","types$$module$src$css_parse.KEYFRAMES_RULE","split","pop","VAR_START","types$$module$src$css_parse.MIXIN_RULE","types$$module$src$css_parse.STYLE_RULE","r$","r","code","repeat","stringify","preserveProperties","cssText","rules","RX$$module$src$css_parse.customProp","RX$$module$src$css_parse.mixinProp","RX$$module$src$css_parse.mixinApply","RX$$module$src$css_parse.varApply","STYLE_RULE","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","port","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","promise","Promise","resolve","invalidate","elementName","template","templateIsValid","startValidatingTemplate","_validating","then","nativeShadow","window","nativeCssVariables_","calcCssVariables","settings","navigator","userAgent","CSS","supports","ShadyCSS","undefined","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","MEDIA_MATCH","styleTextSet","Set","toCssText","rulesForStyle","style","textContent","forEachRule","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","type","matchMedia","matches","processVariableAndFallback","str","callback","start","level","inner","end","prefix","suffix","comma","value","fallback","APPLY_NAME_CLEAN","INITIAL_INHERIT","IMPORTANT","MixinMap","_map","set","name","props","properties","dependants","get","invalidCallback","ApplyShim","_measureElement","_currentElement","detectMixin","has","test","lastIndex","transformTemplate","_gatheredStyle","styleTextParts","styles","content","querySelectorAll","hasAttribute","scopingAttribute","add","newStyle","cloneNode","document","head","appendChild","parentNode","removeChild","styleText","join","createElement","insertBefore","firstChild","transformStyle","ast","transformRules","transformCustomStyle","rule","transformRule","transformCssText","matchText","propertyName","valueProperty","valueMixin","_produceCssProperties","_consumeCssProperties","m","exec","mixinName","idx","index","textBeforeApply","slice","textAfterApply","defaults","_cssTextToMap","_atApplyToCssProperties","vars","mixinEntry","f","fallbacks","parts","MIXIN_VAR_SEP","replacement","property","out","sp","_replaceInitialOrInherit","setAttribute","all","getComputedStyle","getPropertyValue","_invalidateMixinEntry","mixinAsProperties","combinedProps","mixinValues","oldProps","Object","assign","create","needToInvalidate","v","prototype","defineProperty","cb","applyShim","ApplyShimInterface","customStyleInterface","ensure","CustomStyleInterface","requestAnimationFrame","flushCustomStyles","prepareTemplate","cs","styleSubtree","element","removeProperty","setProperty","shadowRoot","styleElement","shadowChildren","children","childNodes","localName","is","getAttribute","querySelector","styleDocument","body","ScopingShim","applyShimInterface","getComputedStyleValue"],"mappings":"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","file":"apply-shim.min.js","sourcesContent":["/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nfunction findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n/*\n * The apply shim simulates the behavior of `@apply` proposed at\n * https://tabatkins.github.io/specs/css-apply-rule/.\n * The approach is to convert a property like this:\n *\n * --foo: {color: red; background: blue;}\n *\n * to this:\n *\n * --foo_-_color: red;\n * --foo_-_background: blue;\n *\n * Then where `@apply --foo` is used, that is converted to:\n *\n * color: var(--foo_-_color);\n * background: var(--foo_-_background);\n *\n * This approach generally works but there are some issues and limitations.\n * Consider, for example, that somewhere *between* where `--foo` is set and used,\n * another element sets it to:\n *\n * --foo: { border: 2px solid red; }\n *\n * We must now ensure that the color and background from the previous setting\n * do not apply. This is accomplished by changing the property set to this:\n *\n * --foo_-_border: 2px solid red;\n * --foo_-_color: initial;\n * --foo_-_background: initial;\n *\n * This works but introduces one new issue.\n * Consider this setup at the point where the `@apply` is used:\n *\n * background: orange;\n * `@apply` --foo;\n *\n * In this case the background will be unset (initial) rather than the desired\n * `orange`. We address this by altering the property set to use a fallback\n * value like this:\n *\n * color: var(--foo_-_color);\n * background: var(--foo_-_background, orange);\n * border: var(--foo_-_border);\n *\n * Note that the default is retained in the property set and the `background` is\n * the desired `orange`. This leads us to a limitation.\n *\n * Limitation 1:\n\n * Only properties in the rule where the `@apply`\n * is used are considered as default values.\n * If another rule matches the element and sets `background` with\n * less specificity than the rule in which `@apply` appears,\n * the `background` will not be set.\n *\n * Limitation 2:\n *\n * When using Polymer's `updateStyles` api, new properties may not be set for\n * `@apply` properties.\n\n*/\n\n'use strict';\n\nimport {forEachRule, processVariableAndFallback, rulesForStyle, toCssText, gatherStyleText} from './style-util.js';\nimport {MIXIN_MATCH, VAR_ASSIGN} from './common-regex.js';\nimport {detectMixin} from './common-utils.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\nconst APPLY_NAME_CLEAN = /;\\s*/m;\nconst INITIAL_INHERIT = /^\\s*(initial)|(inherit)\\s*$/;\nconst IMPORTANT = /\\s*!important/;\n\n// separator used between mixin-name and mixin-property-name when producing properties\n// NOTE: plain '-' may cause collisions in user styles\nconst MIXIN_VAR_SEP = '_-_';\n\n/**\n * @typedef {!Object<string, string>}\n */\nlet PropertyEntry; // eslint-disable-line no-unused-vars\n\n/**\n * @typedef {!Object<string, boolean>}\n */\nlet DependantsEntry; // eslint-disable-line no-unused-vars\n\n/** @typedef {{\n * properties: PropertyEntry,\n * dependants: DependantsEntry\n * }}\n */\nlet MixinMapEntry; // eslint-disable-line no-unused-vars\n\n// map of mixin to property names\n// --foo: {border: 2px} -> {properties: {(--foo, ['border'])}, dependants: {'element-name': proto}}\nclass MixinMap {\n constructor() {\n /** @type {!Object<string, !MixinMapEntry>} */\n this._map = {};\n }\n /**\n * @param {string} name\n * @param {!PropertyEntry} props\n */\n set(name, props) {\n name = name.trim();\n this._map[name] = {\n properties: props,\n dependants: {}\n }\n }\n /**\n * @param {string} name\n * @return {MixinMapEntry}\n */\n get(name) {\n name = name.trim();\n return this._map[name] || null;\n }\n}\n\n/**\n * Callback for when an element is marked invalid\n * @type {?function(string)}\n */\nlet invalidCallback = null;\n\n/** @unrestricted */\nclass ApplyShim {\n constructor() {\n /** @type {?string} */\n this._currentElement = null;\n /** @type {HTMLMetaElement} */\n this._measureElement = null;\n this._map = new MixinMap();\n }\n /**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\n detectMixin(cssText) {\n return detectMixin(cssText);\n }\n\n /**\n * Gather styles into one style for easier processing\n * @param {!HTMLTemplateElement} template\n * @return {HTMLStyleElement}\n */\n gatherStyles(template) {\n const styleText = gatherStyleText(template.content);\n if (styleText) {\n const style = /** @type {!HTMLStyleElement} */(document.createElement('style'));\n style.textContent = styleText;\n template.content.insertBefore(style, template.content.firstChild);\n return style;\n }\n return null;\n }\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @return {StyleNode}\n */\n transformTemplate(template, elementName) {\n if (template._gatheredStyle === undefined) {\n template._gatheredStyle = this.gatherStyles(template);\n }\n /** @type {HTMLStyleElement} */\n const style = template._gatheredStyle;\n return style ? this.transformStyle(style, elementName) : null;\n }\n /**\n * @param {!HTMLStyleElement} style\n * @param {string} elementName\n * @return {StyleNode}\n */\n transformStyle(style, elementName = '') {\n let ast = rulesForStyle(style);\n this.transformRules(ast, elementName);\n style.textContent = toCssText(ast);\n return ast;\n }\n /**\n * @param {!HTMLStyleElement} style\n * @return {StyleNode}\n */\n transformCustomStyle(style) {\n let ast = rulesForStyle(style);\n forEachRule(ast, (rule) => {\n if (rule['selector'] === ':root') {\n rule['selector'] = 'html';\n }\n this.transformRule(rule);\n })\n style.textContent = toCssText(ast);\n return ast;\n }\n /**\n * @param {StyleNode} rules\n * @param {string} elementName\n */\n transformRules(rules, elementName) {\n this._currentElement = elementName;\n forEachRule(rules, (r) => {\n this.transformRule(r);\n });\n this._currentElement = null;\n }\n /**\n * @param {!StyleNode} rule\n */\n transformRule(rule) {\n rule['cssText'] = this.transformCssText(rule['parsedCssText']);\n // :root was only used for variable assignment in property shim,\n // but generates invalid selectors with real properties.\n // replace with `:host > *`, which serves the same effect\n if (rule['selector'] === ':root') {\n rule['selector'] = ':host > *';\n }\n }\n /**\n * @param {string} cssText\n * @return {string}\n */\n transformCssText(cssText) {\n // produce variables\n cssText = cssText.replace(VAR_ASSIGN, (matchText, propertyName, valueProperty, valueMixin) =>\n this._produceCssProperties(matchText, propertyName, valueProperty, valueMixin));\n // consume mixins\n return this._consumeCssProperties(cssText);\n }\n /**\n * @param {string} property\n * @return {string}\n */\n _getInitialValueForProperty(property) {\n if (!this._measureElement) {\n this._measureElement = /** @type {HTMLMetaElement} */(document.createElement('meta'));\n this._measureElement.setAttribute('apply-shim-measure', '');\n this._measureElement.style.all = 'initial';\n document.head.appendChild(this._measureElement);\n }\n return window.getComputedStyle(this._measureElement).getPropertyValue(property);\n }\n /**\n * replace mixin consumption with variable consumption\n * @param {string} text\n * @return {string}\n */\n _consumeCssProperties(text) {\n /** @type {Array} */\n let m = null;\n // loop over text until all mixins with defintions have been applied\n while((m = MIXIN_MATCH.exec(text))) {\n let matchText = m[0];\n let mixinName = m[1];\n let idx = m.index;\n // collect properties before apply to be \"defaults\" if mixin might override them\n // match includes a \"prefix\", so find the start and end positions of @apply\n let applyPos = idx + matchText.indexOf('@apply');\n let afterApplyPos = idx + matchText.length;\n // find props defined before this @apply\n let textBeforeApply = text.slice(0, applyPos);\n let textAfterApply = text.slice(afterApplyPos);\n let defaults = this._cssTextToMap(textBeforeApply);\n let replacement = this._atApplyToCssProperties(mixinName, defaults);\n // use regex match position to replace mixin, keep linear processing time\n text = `${textBeforeApply}${replacement}${textAfterApply}`;\n // move regex search to _after_ replacement\n MIXIN_MATCH.lastIndex = idx + replacement.length;\n }\n return text;\n }\n /**\n * produce variable consumption at the site of mixin consumption\n * `@apply` --foo; -> for all props (${propname}: var(--foo_-_${propname}, ${fallback[propname]}}))\n * Example:\n * border: var(--foo_-_border); padding: var(--foo_-_padding, 2px)\n *\n * @param {string} mixinName\n * @param {Object} fallbacks\n * @return {string}\n */\n _atApplyToCssProperties(mixinName, fallbacks) {\n mixinName = mixinName.replace(APPLY_NAME_CLEAN, '');\n let vars = [];\n let mixinEntry = this._map.get(mixinName);\n // if we depend on a mixin before it is created\n // make a sentinel entry in the map to add this element as a dependency for when it is defined.\n if (!mixinEntry) {\n this._map.set(mixinName, {});\n mixinEntry = this._map.get(mixinName);\n }\n if (mixinEntry) {\n if (this._currentElement) {\n mixinEntry.dependants[this._currentElement] = true;\n }\n let p, parts, f;\n const properties = mixinEntry.properties;\n for (p in properties) {\n f = fallbacks && fallbacks[p];\n parts = [p, ': var(', mixinName, MIXIN_VAR_SEP, p];\n if (f) {\n parts.push(',', f.replace(IMPORTANT, ''));\n }\n parts.push(')');\n if (IMPORTANT.test(properties[p])) {\n parts.push(' !important');\n }\n vars.push(parts.join(''));\n }\n }\n return vars.join('; ');\n }\n\n /**\n * @param {string} property\n * @param {string} value\n * @return {string}\n */\n _replaceInitialOrInherit(property, value) {\n let match = INITIAL_INHERIT.exec(value);\n if (match) {\n if (match[1]) {\n // initial\n // replace `initial` with the concrete initial value for this property\n value = this._getInitialValueForProperty(property);\n } else {\n // inherit\n // with this purposfully illegal value, the variable will be invalid at\n // compute time (https://www.w3.org/TR/css-variables/#invalid-at-computed-value-time)\n // and for inheriting values, will behave similarly\n // we cannot support the same behavior for non inheriting values like 'border'\n value = 'apply-shim-inherit';\n }\n }\n return value;\n }\n\n /**\n * \"parse\" a mixin definition into a map of properties and values\n * cssTextToMap('border: 2px solid black') -> ('border', '2px solid black')\n * @param {string} text\n * @return {!Object<string, string>}\n */\n _cssTextToMap(text) {\n let props = text.split(';');\n let property, value;\n let out = {};\n for (let i = 0, p, sp; i < props.length; i++) {\n p = props[i];\n if (p) {\n sp = p.split(':');\n // ignore lines that aren't definitions like @media\n if (sp.length > 1) {\n property = sp[0].trim();\n // some properties may have ':' in the value, like data urls\n value = this._replaceInitialOrInherit(property, sp.slice(1).join(':'));\n out[property] = value;\n }\n }\n }\n return out;\n }\n\n /**\n * @param {MixinMapEntry} mixinEntry\n */\n _invalidateMixinEntry(mixinEntry) {\n if (!invalidCallback) {\n return;\n }\n for (let elementName in mixinEntry.dependants) {\n if (elementName !== this._currentElement) {\n invalidCallback(elementName);\n }\n }\n }\n\n /**\n * @param {string} matchText\n * @param {string} propertyName\n * @param {?string} valueProperty\n * @param {?string} valueMixin\n * @return {string}\n */\n _produceCssProperties(matchText, propertyName, valueProperty, valueMixin) {\n // handle case where property value is a mixin\n if (valueProperty) {\n // form: --mixin2: var(--mixin1), where --mixin1 is in the map\n processVariableAndFallback(valueProperty, (prefix, value) => {\n if (value && this._map.get(value)) {\n valueMixin = `@apply ${value};`\n }\n });\n }\n if (!valueMixin) {\n return matchText;\n }\n let mixinAsProperties = this._consumeCssProperties('' + valueMixin);\n let prefix = matchText.slice(0, matchText.indexOf('--'));\n let mixinValues = this._cssTextToMap(mixinAsProperties);\n let combinedProps = mixinValues;\n let mixinEntry = this._map.get(propertyName);\n let oldProps = mixinEntry && mixinEntry.properties;\n if (oldProps) {\n // NOTE: since we use mixin, the map of properties is updated here\n // and this is what we want.\n combinedProps = Object.assign(Object.create(oldProps), mixinValues);\n } else {\n this._map.set(propertyName, combinedProps);\n }\n let out = [];\n let p, v;\n // set variables defined by current mixin\n let needToInvalidate = false;\n for (p in combinedProps) {\n v = mixinValues[p];\n // if property not defined by current mixin, set initial\n if (v === undefined) {\n v = 'initial';\n }\n if (oldProps && !(p in oldProps)) {\n needToInvalidate = true;\n }\n out.push(`${propertyName}${MIXIN_VAR_SEP}${p}: ${v}`);\n }\n if (needToInvalidate) {\n this._invalidateMixinEntry(mixinEntry);\n }\n if (mixinEntry) {\n mixinEntry.properties = combinedProps;\n }\n // because the mixinMap is global, the mixin might conflict with\n // a different scope's simple variable definition:\n // Example:\n // some style somewhere:\n // --mixin1:{ ... }\n // --mixin2: var(--mixin1);\n // some other element:\n // --mixin1: 10px solid red;\n // --foo: var(--mixin1);\n // In this case, we leave the original variable definition in place.\n if (valueProperty) {\n prefix = `${matchText};${prefix}`;\n }\n return `${prefix}${out.join('; ')};`;\n }\n}\n\n/* exports */\nApplyShim.prototype['detectMixin'] = ApplyShim.prototype.detectMixin;\nApplyShim.prototype['transformStyle'] = ApplyShim.prototype.transformStyle;\nApplyShim.prototype['transformCustomStyle'] = ApplyShim.prototype.transformCustomStyle;\nApplyShim.prototype['transformRules'] = ApplyShim.prototype.transformRules;\nApplyShim.prototype['transformRule'] = ApplyShim.prototype.transformRule;\nApplyShim.prototype['transformTemplate'] = ApplyShim.prototype.transformTemplate;\nApplyShim.prototype['_separator'] = MIXIN_VAR_SEP;\nObject.defineProperty(ApplyShim.prototype, 'invalidCallback', {\n /** @return {?function(string)} */\n get() {\n return invalidCallback;\n },\n /** @param {?function(string)} cb */\n set(cb) {\n invalidCallback = cb;\n }\n});\n\nexport default ApplyShim;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ApplyShim from '../src/apply-shim.js';\nimport templateMap from '../src/template-map.js';\nimport {getIsExtends, toCssText} from '../src/style-util.js';\nimport * as ApplyShimUtils from '../src/apply-shim-utils.js';\nimport {getComputedStyleValue, updateNativeProperties} from '../src/common-utils.js';\nimport {CustomStyleInterfaceInterface} from '../src/custom-style-interface.js'; // eslint-disable-line no-unused-vars\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ApplyShim} */\nconst applyShim = new ApplyShim();\n\nclass ApplyShimInterface {\n constructor() {\n /** @type {?CustomStyleInterfaceInterface} */\n this.customStyleInterface = null;\n applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n ensure() {\n if (this.customStyleInterface) {\n return;\n }\n this.customStyleInterface = window.ShadyCSS.CustomStyleInterface;\n if (this.customStyleInterface) {\n this.customStyleInterface['transformCallback'] = (style) => {\n applyShim.transformCustomStyle(style);\n };\n this.customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this.customStyleInterface['enqueued']) {\n this.flushCustomStyles();\n }\n });\n }\n }\n }\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n */\n prepareTemplate(template, elementName) {\n this.ensure();\n templateMap[elementName] = template;\n let ast = applyShim.transformTemplate(template, elementName);\n // save original style ast to use for revalidating instances\n template['_styleAst'] = ast;\n }\n flushCustomStyles() {\n this.ensure();\n if (!this.customStyleInterface) {\n return;\n }\n let styles = this.customStyleInterface['processStyles']();\n if (!this.customStyleInterface['enqueued']) {\n return;\n }\n for (let i = 0; i < styles.length; i++ ) {\n let cs = styles[i];\n let style = this.customStyleInterface['getStyleForCustomStyle'](cs);\n if (style) {\n applyShim.transformCustomStyle(style);\n }\n }\n this.customStyleInterface['enqueued'] = false;\n }\n /**\n * @param {HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n this.ensure();\n if (properties) {\n updateNativeProperties(element, properties);\n }\n if (element.shadowRoot) {\n this.styleElement(element);\n let shadowChildren = element.shadowRoot.children || element.shadowRoot.childNodes;\n for (let i = 0; i < shadowChildren.length; i++) {\n this.styleSubtree(/** @type {HTMLElement} */(shadowChildren[i]));\n }\n } else {\n let children = element.children || element.childNodes;\n for (let i = 0; i < children.length; i++) {\n this.styleSubtree(/** @type {HTMLElement} */(children[i]));\n }\n }\n }\n /**\n * @param {HTMLElement} element\n */\n styleElement(element) {\n this.ensure();\n let {is} = getIsExtends(element);\n let template = templateMap[is];\n if (template && !ApplyShimUtils.templateIsValid(template)) {\n // only revalidate template once\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this.prepareTemplate(template, is);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update this element instance\n let root = element.shadowRoot;\n if (root) {\n let style = /** @type {HTMLStyleElement} */(root.querySelector('style'));\n if (style) {\n // reuse the template's style ast, it has all the original css text\n style['__cssRules'] = template['_styleAst'];\n style.textContent = toCssText(template['_styleAst'])\n }\n }\n }\n }\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.ensure();\n this.styleSubtree(document.body, properties);\n }\n}\n\nif (!window.ShadyCSS || !window.ShadyCSS.ScopingShim) {\n const applyShimInterface = new ApplyShimInterface();\n let CustomStyleInterface = window.ShadyCSS && window.ShadyCSS.CustomStyleInterface;\n\n /** @suppress {duplicate} */\n window.ShadyCSS = {\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) { // eslint-disable-line no-unused-vars\n applyShimInterface.flushCustomStyles();\n applyShimInterface.prepareTemplate(template, elementName)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n applyShimInterface.flushCustomStyles();\n applyShimInterface.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n applyShimInterface.flushCustomStyles();\n applyShimInterface.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n applyShimInterface.flushCustomStyles();\n applyShimInterface.styleDocument(properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return getComputedStyleValue(element, property);\n },\n\n flushCustomStyles() {\n applyShimInterface.flushCustomStyles();\n },\n\n nativeCss: nativeCssVariables,\n nativeShadow: nativeShadow\n };\n\n if (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n }\n}\n\nwindow.ShadyCSS.ApplyShim = applyShim;\n"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/bower.json
new file mode 100644
index 00000000000..5d3a7d91727
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/bower.json
@@ -0,0 +1,36 @@
+{
+ "name": "shadycss",
+ "main": "scoping-shim.min.js",
+ "description": "Styling helpers for ShadyDOM",
+ "authors": [
+ "The Polymer Project Authors (https://polymer.github.io/AUTHORS.txt)"
+ ],
+ "license": "BSD-3-Clause",
+ "keywords": [
+ "shady-css",
+ "shadycss",
+ "shadow-css",
+ "shadowcss",
+ "web-components",
+ "webcomponents",
+ "polyfill",
+ "shim"
+ ],
+ "homepage": "https://webcomponents.org/polyfills",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "devDependencies": {
+ "web-component-tester": "^6",
+ "es6-promise": "stefanpenner/es6-promise#~4.1.0",
+ "template": "webcomponents/template#^1.0.0",
+ "html-imports": "webcomponents/html-imports#^1.0.0",
+ "custom-elements": "webcomponents/custom-elements#^1.0.0",
+ "shadydom": "webcomponents/shadydom#^1.0.0",
+ "webcomponents-platform": "webcomponents/webcomponents-platform#^1.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.html
new file mode 100644
index 00000000000..a3919fad810
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.html
@@ -0,0 +1,10 @@
+<!--
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<script src="custom-style-interface.min.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js
new file mode 100644
index 00000000000..6e72026f7b5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js
@@ -0,0 +1,14 @@
+(function(){/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var c=!(window.ShadyDOM&&window.ShadyDOM.inUse),f;function g(a){f=a&&a.shimcssproperties?!1:c||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?f=window.ShadyCSS.nativeCss:window.ShadyCSS?(g(window.ShadyCSS),window.ShadyCSS=void 0):g(window.WebComponents&&window.WebComponents.flags);var h=f;function k(a,b){for(var d in b)null===d?a.style.removeProperty(d):a.style.setProperty(d,b[d])};var l=null,m=window.HTMLImports&&window.HTMLImports.whenReady||null,n;function p(a){requestAnimationFrame(function(){m?m(a):(l||(l=new Promise(function(a){n=a}),"complete"===document.readyState?n():document.addEventListener("readystatechange",function(){"complete"===document.readyState&&n()})),l.then(function(){a&&a()}))})};var q=null,r=null;function t(){this.customStyles=[];this.enqueued=!1;p(function(){window.ShadyCSS.flushCustomStyles&&window.ShadyCSS.flushCustomStyles()})}function u(a){!a.enqueued&&r&&(a.enqueued=!0,p(r))}t.prototype.c=function(a){a.__seenByShadyCSS||(a.__seenByShadyCSS=!0,this.customStyles.push(a),u(this))};t.prototype.b=function(a){if(a.__shadyCSSCachedStyle)return a.__shadyCSSCachedStyle;var b;a.getStyle?b=a.getStyle():b=a;return b};
+t.prototype.a=function(){for(var a=this.customStyles,b=0;b<a.length;b++){var d=a[b];if(!d.__shadyCSSCachedStyle){var e=this.b(d);e&&(e=e.__appliedElement||e,q&&q(e),d.__shadyCSSCachedStyle=e)}}return a};t.prototype.addCustomStyle=t.prototype.c;t.prototype.getStyleForCustomStyle=t.prototype.b;t.prototype.processStyles=t.prototype.a;
+Object.defineProperties(t.prototype,{transformCallback:{get:function(){return q},set:function(a){q=a}},validateCallback:{get:function(){return r},set:function(a){var b=!1;r||(b=!0);r=a;b&&u(this)}}});var v=new t;window.ShadyCSS||(window.ShadyCSS={prepareTemplate:function(){},styleSubtree:function(a,b){v.a();k(a,b)},styleElement:function(){v.a()},styleDocument:function(a){v.a();k(document.body,a)},getComputedStyleValue:function(a,b){return(a=window.getComputedStyle(a).getPropertyValue(b))?a.trim():""},flushCustomStyles:function(){},nativeCss:h,nativeShadow:c});window.ShadyCSS.CustomStyleInterface=v;}).call(this);
+
+//# sourceMappingURL=custom-style-interface.min.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js.map
new file mode 100644
index 00000000000..e0cfd81f901
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/custom-style-interface.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/style-settings.js","src/common-utils.js","src/document-wait.js","src/custom-style-interface.js","entrypoints/custom-style-interface.js"],"names":["nativeShadow","window","nativeCssVariables_","calcCssVariables","settings","navigator","userAgent","match","CSS","supports","ShadyCSS","undefined","nativeCss","nativeCssVariables","updateNativeProperties","element","properties","p","style","removeProperty","setProperty","readyPromise","whenReady","resolveFn","documentWait","callback","requestAnimationFrame","Promise","resolve","document","readyState","addEventListener","then","transformFn","validateFn","constructor","CustomStyleInterface","enqueueDocumentValidation","addCustomStyle","push","getStyleForCustomStyle","customStyle","processStyles","cs","i","length","styleToTransform","prototype","Object","defineProperties","get","set","fn","needsEnqueue","customStyleInterface","prepareTemplate","styleSubtree","styleElement","styleDocument","body","getComputedStyleValue","property","value","getComputedStyle","getPropertyValue","trim","flushCustomStyles"],"mappings":"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","file":"custom-style-interface.min.js","sourcesContent":["/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {Promise<void>} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport documentWait from './document-wait.js';\n\n/**\n * @typedef {HTMLStyleElement | {getStyle: function():HTMLStyleElement}}\n */\nexport let CustomStyleProvider;\n\nconst SEEN_MARKER = '__seenByShadyCSS';\nconst CACHED_STYLE = '__shadyCSSCachedStyle';\n\n/** @type {?function(!HTMLStyleElement)} */\nlet transformFn = null;\n\n/** @type {?function()} */\nlet validateFn = null;\n\n/**\nThis interface is provided to add document-level <style> elements to ShadyCSS for processing.\nThese styles must be processed by ShadyCSS to simulate ShadowRoot upper-bound encapsulation from outside styles\nIn addition, these styles may also need to be processed for @apply rules and CSS Custom Properties\n\nTo add document-level styles to ShadyCSS, one can call `ShadyCSS.addDocumentStyle(styleElement)` or `ShadyCSS.addDocumentStyle({getStyle: () => styleElement})`\n\nIn addition, if the process used to discover document-level styles can be synchronously flushed, one should set `ShadyCSS.documentStyleFlush`.\nThis function will be called when calculating styles.\n\nAn example usage of the document-level styling api can be found in `examples/document-style-lib.js`\n\n@unrestricted\n*/\nexport default class CustomStyleInterface {\n constructor() {\n /** @type {!Array<!CustomStyleProvider>} */\n this['customStyles'] = [];\n this['enqueued'] = false;\n // NOTE(dfreedm): use quotes here to prevent closure inlining to `function(){}`;\n documentWait(() => {\n if (window['ShadyCSS']['flushCustomStyles']) {\n window['ShadyCSS']['flushCustomStyles']();\n }\n })\n }\n /**\n * Queue a validation for new custom styles to batch style recalculations\n */\n enqueueDocumentValidation() {\n if (this['enqueued'] || !validateFn) {\n return;\n }\n this['enqueued'] = true;\n documentWait(validateFn);\n }\n /**\n * @param {!HTMLStyleElement} style\n */\n addCustomStyle(style) {\n if (!style[SEEN_MARKER]) {\n style[SEEN_MARKER] = true;\n this['customStyles'].push(style);\n this.enqueueDocumentValidation();\n }\n }\n /**\n * @param {!CustomStyleProvider} customStyle\n * @return {HTMLStyleElement}\n */\n getStyleForCustomStyle(customStyle) {\n if (customStyle[CACHED_STYLE]) {\n return customStyle[CACHED_STYLE];\n }\n let style;\n if (customStyle['getStyle']) {\n style = customStyle['getStyle']();\n } else {\n style = customStyle;\n }\n return style;\n }\n /**\n * @return {!Array<!CustomStyleProvider>}\n */\n processStyles() {\n const cs = this['customStyles'];\n for (let i = 0; i < cs.length; i++) {\n const customStyle = cs[i];\n if (customStyle[CACHED_STYLE]) {\n continue;\n }\n const style = this.getStyleForCustomStyle(customStyle);\n if (style) {\n // HTMLImports polyfill may have cloned the style into the main document,\n // which is referenced with __appliedElement.\n const styleToTransform = /** @type {!HTMLStyleElement} */(style['__appliedElement'] || style);\n if (transformFn) {\n transformFn(styleToTransform);\n }\n customStyle[CACHED_STYLE] = styleToTransform;\n }\n }\n return cs;\n }\n}\n\nCustomStyleInterface.prototype['addCustomStyle'] = CustomStyleInterface.prototype.addCustomStyle;\nCustomStyleInterface.prototype['getStyleForCustomStyle'] = CustomStyleInterface.prototype.getStyleForCustomStyle;\nCustomStyleInterface.prototype['processStyles'] = CustomStyleInterface.prototype.processStyles;\n\nObject.defineProperties(CustomStyleInterface.prototype, {\n 'transformCallback': {\n /** @return {?function(!HTMLStyleElement)} */\n get() {\n return transformFn;\n },\n /** @param {?function(!HTMLStyleElement)} fn */\n set(fn) {\n transformFn = fn;\n }\n },\n 'validateCallback': {\n /** @return {?function()} */\n get() {\n return validateFn;\n },\n /**\n * @param {?function()} fn\n * @this {CustomStyleInterface}\n */\n set(fn) {\n let needsEnqueue = false;\n if (!validateFn) {\n needsEnqueue = true;\n }\n validateFn = fn;\n if (needsEnqueue) {\n this.enqueueDocumentValidation();\n }\n },\n }\n})\n\n/** @typedef {{\n * customStyles: !Array<!CustomStyleProvider>,\n * addCustomStyle: function(!CustomStyleProvider),\n * getStyleForCustomStyle: function(!CustomStyleProvider): HTMLStyleElement,\n * findStyles: function(),\n * transformCallback: ?function(!HTMLStyleElement),\n * validateCallback: ?function()\n * }}\n */\nexport let CustomStyleInterfaceInterface;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport CustomStyleInterface from '../src/custom-style-interface.js';\nimport {getComputedStyleValue, updateNativeProperties} from '../src/common-utils.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\nconst customStyleInterface = new CustomStyleInterface();\n\nif (!window.ShadyCSS) {\n window.ShadyCSS = {\n /**\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {}, // eslint-disable-line no-unused-vars\n\n /**\n * @param {Element} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n customStyleInterface.processStyles();\n updateNativeProperties(element, properties);\n },\n\n /**\n * @param {Element} element\n */\n styleElement(element) { // eslint-disable-line no-unused-vars\n customStyleInterface.processStyles();\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n customStyleInterface.processStyles();\n updateNativeProperties(document.body, properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return getComputedStyleValue(element, property);\n },\n\n flushCustomStyles() {},\n nativeCss: nativeCssVariables,\n nativeShadow: nativeShadow\n }\n}\n\nwindow.ShadyCSS.CustomStyleInterface = customStyleInterface;"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/apply-shim.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/apply-shim.js
new file mode 100644
index 00000000000..66372fffa9f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/apply-shim.js
@@ -0,0 +1,196 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import ApplyShim from '../src/apply-shim.js';
+import templateMap from '../src/template-map.js';
+import {getIsExtends, toCssText} from '../src/style-util.js';
+import * as ApplyShimUtils from '../src/apply-shim-utils.js';
+import {getComputedStyleValue, updateNativeProperties} from '../src/common-utils.js';
+import {CustomStyleInterfaceInterface} from '../src/custom-style-interface.js'; // eslint-disable-line no-unused-vars
+import {nativeCssVariables, nativeShadow} from '../src/style-settings.js';
+
+/** @const {ApplyShim} */
+const applyShim = new ApplyShim();
+
+class ApplyShimInterface {
+ constructor() {
+ /** @type {?CustomStyleInterfaceInterface} */
+ this.customStyleInterface = null;
+ applyShim['invalidCallback'] = ApplyShimUtils.invalidate;
+ }
+ ensure() {
+ if (this.customStyleInterface) {
+ return;
+ }
+ this.customStyleInterface = window.ShadyCSS.CustomStyleInterface;
+ if (this.customStyleInterface) {
+ this.customStyleInterface['transformCallback'] = (style) => {
+ applyShim.transformCustomStyle(style);
+ };
+ this.customStyleInterface['validateCallback'] = () => {
+ requestAnimationFrame(() => {
+ if (this.customStyleInterface['enqueued']) {
+ this.flushCustomStyles();
+ }
+ });
+ }
+ }
+ }
+ /**
+ * @param {!HTMLTemplateElement} template
+ * @param {string} elementName
+ */
+ prepareTemplate(template, elementName) {
+ this.ensure();
+ templateMap[elementName] = template;
+ let ast = applyShim.transformTemplate(template, elementName);
+ // save original style ast to use for revalidating instances
+ template['_styleAst'] = ast;
+ }
+ flushCustomStyles() {
+ this.ensure();
+ if (!this.customStyleInterface) {
+ return;
+ }
+ let styles = this.customStyleInterface['processStyles']();
+ if (!this.customStyleInterface['enqueued']) {
+ return;
+ }
+ for (let i = 0; i < styles.length; i++ ) {
+ let cs = styles[i];
+ let style = this.customStyleInterface['getStyleForCustomStyle'](cs);
+ if (style) {
+ applyShim.transformCustomStyle(style);
+ }
+ }
+ this.customStyleInterface['enqueued'] = false;
+ }
+ /**
+ * @param {HTMLElement} element
+ * @param {Object=} properties
+ */
+ styleSubtree(element, properties) {
+ this.ensure();
+ if (properties) {
+ updateNativeProperties(element, properties);
+ }
+ if (element.shadowRoot) {
+ this.styleElement(element);
+ let shadowChildren = element.shadowRoot.children || element.shadowRoot.childNodes;
+ for (let i = 0; i < shadowChildren.length; i++) {
+ this.styleSubtree(/** @type {HTMLElement} */(shadowChildren[i]));
+ }
+ } else {
+ let children = element.children || element.childNodes;
+ for (let i = 0; i < children.length; i++) {
+ this.styleSubtree(/** @type {HTMLElement} */(children[i]));
+ }
+ }
+ }
+ /**
+ * @param {HTMLElement} element
+ */
+ styleElement(element) {
+ this.ensure();
+ let {is} = getIsExtends(element);
+ let template = templateMap[is];
+ if (template && !ApplyShimUtils.templateIsValid(template)) {
+ // only revalidate template once
+ if (!ApplyShimUtils.templateIsValidating(template)) {
+ this.prepareTemplate(template, is);
+ ApplyShimUtils.startValidatingTemplate(template);
+ }
+ // update this element instance
+ let root = element.shadowRoot;
+ if (root) {
+ let style = /** @type {HTMLStyleElement} */(root.querySelector('style'));
+ if (style) {
+ // reuse the template's style ast, it has all the original css text
+ style['__cssRules'] = template['_styleAst'];
+ style.textContent = toCssText(template['_styleAst'])
+ }
+ }
+ }
+ }
+ /**
+ * @param {Object=} properties
+ */
+ styleDocument(properties) {
+ this.ensure();
+ this.styleSubtree(document.body, properties);
+ }
+}
+
+if (!window.ShadyCSS || !window.ShadyCSS.ScopingShim) {
+ const applyShimInterface = new ApplyShimInterface();
+ let CustomStyleInterface = window.ShadyCSS && window.ShadyCSS.CustomStyleInterface;
+
+ /** @suppress {duplicate} */
+ window.ShadyCSS = {
+ /**
+ * @param {!HTMLTemplateElement} template
+ * @param {string} elementName
+ * @param {string=} elementExtends
+ */
+ prepareTemplate(template, elementName, elementExtends) { // eslint-disable-line no-unused-vars
+ applyShimInterface.flushCustomStyles();
+ applyShimInterface.prepareTemplate(template, elementName)
+ },
+
+ /**
+ * @param {!HTMLElement} element
+ * @param {Object=} properties
+ */
+ styleSubtree(element, properties) {
+ applyShimInterface.flushCustomStyles();
+ applyShimInterface.styleSubtree(element, properties);
+ },
+
+ /**
+ * @param {!HTMLElement} element
+ */
+ styleElement(element) {
+ applyShimInterface.flushCustomStyles();
+ applyShimInterface.styleElement(element);
+ },
+
+ /**
+ * @param {Object=} properties
+ */
+ styleDocument(properties) {
+ applyShimInterface.flushCustomStyles();
+ applyShimInterface.styleDocument(properties);
+ },
+
+ /**
+ * @param {Element} element
+ * @param {string} property
+ * @return {string}
+ */
+ getComputedStyleValue(element, property) {
+ return getComputedStyleValue(element, property);
+ },
+
+ flushCustomStyles() {
+ applyShimInterface.flushCustomStyles();
+ },
+
+ nativeCss: nativeCssVariables,
+ nativeShadow: nativeShadow
+ };
+
+ if (CustomStyleInterface) {
+ window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;
+ }
+}
+
+window.ShadyCSS.ApplyShim = applyShim;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/custom-style-interface.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/custom-style-interface.js
new file mode 100644
index 00000000000..487fc9d7abb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/custom-style-interface.js
@@ -0,0 +1,67 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import CustomStyleInterface from '../src/custom-style-interface.js';
+import {getComputedStyleValue, updateNativeProperties} from '../src/common-utils.js';
+import {nativeCssVariables, nativeShadow} from '../src/style-settings.js';
+
+const customStyleInterface = new CustomStyleInterface();
+
+if (!window.ShadyCSS) {
+ window.ShadyCSS = {
+ /**
+ * @param {HTMLTemplateElement} template
+ * @param {string} elementName
+ * @param {string=} elementExtends
+ */
+ prepareTemplate(template, elementName, elementExtends) {}, // eslint-disable-line no-unused-vars
+
+ /**
+ * @param {Element} element
+ * @param {Object=} properties
+ */
+ styleSubtree(element, properties) {
+ customStyleInterface.processStyles();
+ updateNativeProperties(element, properties);
+ },
+
+ /**
+ * @param {Element} element
+ */
+ styleElement(element) { // eslint-disable-line no-unused-vars
+ customStyleInterface.processStyles();
+ },
+
+ /**
+ * @param {Object=} properties
+ */
+ styleDocument(properties) {
+ customStyleInterface.processStyles();
+ updateNativeProperties(document.body, properties);
+ },
+
+ /**
+ * @param {Element} element
+ * @param {string} property
+ * @return {string}
+ */
+ getComputedStyleValue(element, property) {
+ return getComputedStyleValue(element, property);
+ },
+
+ flushCustomStyles() {},
+ nativeCss: nativeCssVariables,
+ nativeShadow: nativeShadow
+ }
+}
+
+window.ShadyCSS.CustomStyleInterface = customStyleInterface; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/scoping-shim.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/scoping-shim.js
new file mode 100644
index 00000000000..8b857cbae2d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/entrypoints/scoping-shim.js
@@ -0,0 +1,87 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import ScopingShim from '../src/scoping-shim.js';
+import {nativeCssVariables, nativeShadow} from '../src/style-settings.js';
+
+/** @const {ScopingShim} */
+const scopingShim = new ScopingShim();
+
+let ApplyShim, CustomStyleInterface;
+
+if (window['ShadyCSS']) {
+ ApplyShim = window['ShadyCSS']['ApplyShim'];
+ CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];
+}
+
+window.ShadyCSS = {
+ ScopingShim: scopingShim,
+ /**
+ * @param {!HTMLTemplateElement} template
+ * @param {string} elementName
+ * @param {string=} elementExtends
+ */
+ prepareTemplate(template, elementName, elementExtends) {
+ scopingShim.flushCustomStyles();
+ scopingShim.prepareTemplate(template, elementName, elementExtends)
+ },
+
+ /**
+ * @param {!HTMLElement} element
+ * @param {Object=} properties
+ */
+ styleSubtree(element, properties) {
+ scopingShim.flushCustomStyles();
+ scopingShim.styleSubtree(element, properties);
+ },
+
+ /**
+ * @param {!HTMLElement} element
+ */
+ styleElement(element) {
+ scopingShim.flushCustomStyles();
+ scopingShim.styleElement(element);
+ },
+
+ /**
+ * @param {Object=} properties
+ */
+ styleDocument(properties) {
+ scopingShim.flushCustomStyles();
+ scopingShim.styleDocument(properties);
+ },
+
+ flushCustomStyles() {
+ scopingShim.flushCustomStyles();
+ },
+
+ /**
+ * @param {Element} element
+ * @param {string} property
+ * @return {string}
+ */
+ getComputedStyleValue(element, property) {
+ return scopingShim.getComputedStyleValue(element, property);
+ },
+
+ nativeCss: nativeCssVariables,
+
+ nativeShadow: nativeShadow
+};
+
+if (ApplyShim) {
+ window.ShadyCSS.ApplyShim = ApplyShim;
+}
+
+if (CustomStyleInterface) {
+ window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/custom-style-element.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/custom-style-element.js
new file mode 100644
index 00000000000..0542e8a1f53
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/custom-style-element.js
@@ -0,0 +1,42 @@
+/**
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+/*
+Wrapper over <style> elements to co-operate with ShadyCSS
+
+Example:
+<custom-style>
+ <style>
+ ...
+ </style>
+</custom-style>
+*/
+(function() {
+ 'use strict';
+
+ const CustomStyleInterface = window.ShadyCSS.CustomStyleInterface;
+
+ class CustomStyle extends HTMLElement {
+ constructor() {
+ super();
+ this._style = null;
+ CustomStyleInterface.addCustomStyle(this);
+ }
+ getStyle() {
+ if (!this._style) {
+ this._style = this.querySelector('style');
+ }
+ return this._style;
+ }
+ }
+
+ window.CustomStyle = CustomStyle;
+ window.customElements.define('custom-style', CustomStyle);
+})(); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/document-style-lib.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/document-style-lib.js
new file mode 100644
index 00000000000..a1c032c0fdf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/examples/document-style-lib.js
@@ -0,0 +1,54 @@
+/**
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+/*
+Example library for adding document-level styles to ShadyCSS
+
+After DOMContentLoaded, synchronously add all document document level styles.
+Then, start a MutationObserver for dynamically added styles.
+
+Caveat: ShadyCSS will add a `scope` attribute to styles it controls, so do not add those styles.
+*/
+(function() {
+ 'use strict';
+
+ const CustomStyleInterface = window.ShadyCSS.CustomStyleInterface;
+
+ function shouldAddDocumentStyle(n) {
+ return n.nodeType === Node.ELEMENT_NODE && n.localName === 'style' && !n.hasAttribute('scope');
+ }
+
+ function handler(mxns) {
+ for (let i = 0; i < mxns.length; i++) {
+ let mxn = mxns[i];
+ for (let j = 0; j < mxn.addedNodes.length; j++) {
+ let n = mxn.addedNodes[j];
+ if (shouldAddDocumentStyle(n)) {
+ CustomStyleInterface.addCustomStyle(n);
+ }
+ }
+ }
+ }
+
+ const observer = new MutationObserver(handler);
+
+ document.addEventListener('DOMContentLoaded', () => {
+ const candidates = document.querySelectorAll('custom-style');
+ for (let i = 0; i < candidates.length; i++) {
+ const candidate = candidates[i];
+ if (shouldAddDocumentStyle(candidate)) {
+ CustomStyleInterface.addCustomStyle(candidate);
+ }
+ }
+ observer.observe(document, {childList: true, subtree: true});
+ });
+
+ window.documentStyleFlush = () => {handler(observer.takeRecords())};
+})(); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/externs/shadycss-externs.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/externs/shadycss-externs.js
new file mode 100644
index 00000000000..de17c450b75
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/externs/shadycss-externs.js
@@ -0,0 +1,26 @@
+/** @typedef {{
+ * styleElement: function(!HTMLElement),
+ * styleSubtree: function(!HTMLElement, Object<string, string>=),
+ * prepareTemplate: function(!HTMLTemplateElement, string, string=),
+ * styleDocument: function(Object<string, string>=),
+ * flushCustomStyles: function(),
+ * getComputedStyleValue: function(!Element, string): string,
+ * ScopingShim: (Object|undefined),
+ * ApplyShim: (Object|undefined),
+ * CustomStyleInterface: (Object|undefined),
+ * nativeCss: boolean,
+ * nativeShadow: boolean,
+ * }}
+ */
+let ShadyCSSInterface; //eslint-disable-line no-unused-vars
+
+/**
+ * @typedef {{
+ * shimcssproperties: (boolean | undefined),
+ * shimshadow: (boolean | undefined)
+ * }}
+ */
+let ShadyCSSOptions; //eslint-disable-line no-unused-vars
+
+/** @type {(ShadyCSSInterface | ShadyCSSOptions | undefined)} */
+window.ShadyCSS; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/gulpfile.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/gulpfile.js
new file mode 100644
index 00000000000..d2c75095334
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/gulpfile.js
@@ -0,0 +1,113 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+'use strict';
+
+/* eslint-env node */
+/* eslint-disable no-console */
+
+const gulp = require('gulp');
+const sourcemaps = require('gulp-sourcemaps');
+const del = require('del');
+const rename = require('gulp-rename');
+const rollup = require('rollup-stream');
+const buffer = require('vinyl-buffer');
+const source = require('vinyl-source-stream');
+const closure = require('google-closure-compiler').gulp();
+const size = require('gulp-size');
+const runseq = require('run-sequence');
+
+const modules = [
+ 'css-parse',
+ 'custom-style-element',
+ 'make-element',
+ 'svg-in-shadow',
+ 'style-util',
+ 'style-transformer',
+ 'style-settings'
+];
+
+const moduleTasks = modules.map((m) => {
+ gulp.task(`test-module-${m}`, () => {
+ return rollup({
+ entry: `tests/module/${m}.js`,
+ format: 'iife',
+ moduleName: m.replace(/-/g, '_')
+ })
+ .pipe(source(`${m}.js`, 'tests/module'))
+ .pipe(gulp.dest('./tests/module/generated'))
+ });
+ return `test-module-${m}`;
+});
+
+gulp.task('clean-test-modules', () => del(['tests/module/generated']));
+
+gulp.task('test-modules', (cb) => {
+ runseq('clean-test-modules', moduleTasks, cb);
+});
+
+function closurify(entry) {
+ gulp.task(`closure-${entry}`, () => {
+ return gulp.src(['src/*.js', 'entrypoints/*.js'], {base: './'})
+ .pipe(sourcemaps.init())
+ .pipe(closure({
+ new_type_inf: true,
+ compilation_level: 'ADVANCED',
+ language_in: 'ES6_STRICT',
+ language_out: 'ES5_STRICT',
+ isolation_mode: 'IIFE',
+ assume_function_wrapper: true,
+ js_output_file: `${entry}.min.js`,
+ entry_point: `./entrypoints/${entry}.js`,
+ dependency_mode: 'STRICT',
+ warning_level: 'VERBOSE',
+ rewrite_polyfills: false,
+ externs: 'externs/shadycss-externs.js'
+ }))
+ .pipe(size({showFiles: true, showTotal: false, gzip: true}))
+ .pipe(sourcemaps.write('.'))
+ .pipe(gulp.dest('.'))
+ });
+ return `closure-${entry}`;
+}
+
+function debugify(entry) {
+ gulp.task(`debug-${entry}`, () => {
+ return rollup({
+ entry: `entrypoints/${entry}.js`,
+ format: 'iife',
+ moduleName: `${entry}`.replace(/-/g, '_'),
+ })
+ .pipe(source(`${entry}.js`, 'entrypoints'))
+ .pipe(buffer())
+ .pipe(sourcemaps.init({loadMaps: true}))
+ .pipe(rename(`${entry}.min.js`))
+ .pipe(size({showFiles: true, showTotal: false, gzip: true}))
+ .pipe(gulp.dest('./'))
+ });
+ return `debug-${entry}`;
+}
+
+const entrypoints = [
+ 'scoping-shim',
+ 'apply-shim',
+ 'custom-style-interface'
+]
+
+let closureTasks = entrypoints.map((e) => closurify(e));
+let debugTasks = entrypoints.map((e) => debugify(e));
+
+gulp.task('default', ['closure', 'test-modules']);
+
+gulp.task('closure', (cb) => {
+ runseq.apply(null, closureTasks.concat(cb))
+});
+
+gulp.task('debug', debugTasks);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package-lock.json
new file mode 100644
index 00000000000..0e6fd9940e7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package-lock.json
@@ -0,0 +1,11002 @@
+{
+ "name": "@webcomponents/shadycss",
+ "version": "1.2.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@gulp-sourcemaps/identity-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz",
+ "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.5.3",
+ "css": "2.2.1",
+ "normalize-path": "2.1.1",
+ "source-map": "0.5.7",
+ "through2": "2.0.3"
+ }
+ },
+ "@gulp-sourcemaps/map-sources": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
+ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "2.1.1",
+ "through2": "2.0.3"
+ }
+ },
+ "@polymer/polymer": {
+ "version": "3.0.0-pre.11",
+ "resolved": "https://registry.npmjs.org/@polymer/polymer/-/polymer-3.0.0-pre.11.tgz",
+ "integrity": "sha512-lz0+3so+URZqH6IUV9nzlR6akO8jPRauM7EEIMqPx3H6w4Zh7wzoj4Ngbi18Nwpt71l90F4YhuHDGNRQEwhk+w==",
+ "dev": true,
+ "requires": {
+ "@webcomponents/shadycss": "1.1.1",
+ "@webcomponents/webcomponentsjs": "1.1.0"
+ }
+ },
+ "@polymer/sinonjs": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/@polymer/sinonjs/-/sinonjs-1.17.1.tgz",
+ "integrity": "sha512-/U8F/cOTrbF2iVVYgINYmvKbtbexs+89Q3v8AaHADRYabTg7aOZGOb0RyWpOI+sUJt04kj63U4FwMhzW5r4wZA==",
+ "dev": true
+ },
+ "@polymer/test-fixture": {
+ "version": "3.0.0-pre.11",
+ "resolved": "https://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-3.0.0-pre.11.tgz",
+ "integrity": "sha512-0xrKREkvhS62pCOUTjCi1hSickrG1ZosZ0yPhs35/fGewZIrVnJ6QLuEnYpqFWxWASjQbIc22lJwPcGJXewlyg==",
+ "dev": true
+ },
+ "@types/assert": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/assert/-/assert-0.0.29.tgz",
+ "integrity": "sha1-jlYnhbqlq9p8BKSfZmXq50MZKNM=",
+ "dev": true
+ },
+ "@types/babel-core": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.3.tgz",
+ "integrity": "sha512-OlUjfM+Qv+XwcaucEiekBIhfAYe4q4ruvQZZcCkOtQZ27Hykxm1LLY2s0mE6LtP9XQt6x+TUvS70KW2e8Mz0ZA==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-template": "6.25.0",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "7.0.1",
+ "@types/babylon": "6.16.2"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.1"
+ }
+ },
+ "@types/babel-template": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.0.tgz",
+ "integrity": "sha512-TtyfVlrprX92xSuKa8D//7vFz5kBJODBw5IQ1hQXehqO+me26vt1fyNxOZyXhUq2a7jRyT72V8p68IyH4NEZNA==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.1",
+ "@types/babylon": "6.16.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.1"
+ }
+ },
+ "@types/babel-types": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.1.tgz",
+ "integrity": "sha512-EkcOk09rjhivbovP8WreGRbXW20YRfe/qdgXOGq3it3u3aAOWDRNsQhL/XPAWFF7zhZZ+uR+nT+3b+TCkIap1w==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.1"
+ }
+ },
+ "@types/bluebird": {
+ "version": "3.5.20",
+ "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.20.tgz",
+ "integrity": "sha512-Wk41MVdF+cHBfVXj/ufUHJeO3BlIQr1McbHZANErMykaCWeDSZbH5erGjNBw2/3UlRdSxZbLfSuQTzFmPOYFsA==",
+ "dev": true
+ },
+ "@types/body-parser": {
+ "version": "1.16.8",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz",
+ "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==",
+ "dev": true,
+ "requires": {
+ "@types/express": "4.11.1",
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.2"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clean-css": {
+ "version": "3.4.30",
+ "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-3.4.30.tgz",
+ "integrity": "sha1-AFLBNvUkgAJCjjY4s33ko5gYZB0=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/compression": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/compression/-/compression-0.0.33.tgz",
+ "integrity": "sha1-ldxzOiM5qoRjgdfxN3eS0lU9wn0=",
+ "dev": true,
+ "requires": {
+ "@types/express": "4.11.1"
+ }
+ },
+ "@types/content-type": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/content-type/-/content-type-1.1.2.tgz",
+ "integrity": "sha512-w2d7fBCYbCBUBTGtkC4JfX1FicTtgEmq7wTTjc7rC5RA/JdB1Bi7o88nKzUqAnIIBXJVmq0n4tTmF3PJN8QqCg==",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/escodegen": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.2.tgz",
+ "integrity": "sha1-fOpBqyQukQ6xD2WuGK66RZ1ms18=",
+ "dev": true
+ },
+ "@types/estraverse": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estraverse/-/estraverse-0.0.6.tgz",
+ "integrity": "sha1-Zp9833KreX5hJfjQD+0z1M8wwiE=",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.37"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.37",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.37.tgz",
+ "integrity": "sha512-1IT6vNpmU9w18P3v6mN9idv18z5KPVTi4t7+rU9VLnkxo0LCam8IXy/eSVzOaQ1Wpabra2cN3A8K/SliPK/Suw==",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "@types/express": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.1.tgz",
+ "integrity": "sha512-ttWle8cnPA5rAelauSWeWJimtY2RsUf2aspYZs7xPHiWgOlPn6nnUfBMtrkcnjFJuIHJF4gNOdVvpLK2Zmvh6g==",
+ "dev": true,
+ "requires": {
+ "@types/body-parser": "1.16.8",
+ "@types/express-serve-static-core": "4.11.1",
+ "@types/serve-static": "1.13.1"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz",
+ "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/freeport": {
+ "version": "1.0.21",
+ "resolved": "https://registry.npmjs.org/@types/freeport/-/freeport-1.0.21.tgz",
+ "integrity": "sha1-c/ZUPtZ9PKP/+XuYVZFZi3CSBm8=",
+ "dev": true,
+ "optional": true
+ },
+ "@types/glob": {
+ "version": "5.0.35",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz",
+ "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.2.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "5.0.35",
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/gulp-if": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/gulp-if/-/gulp-if-0.0.33.tgz",
+ "integrity": "sha512-J5lzff21X7r1x/4hSzn02GgIUEyjCqYIXZ9GgGBLhbsD3RiBdqwnkFWgF16/0jO5rcVZ52Zp+6MQMQdvIsWuKg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5",
+ "@types/vinyl": "2.0.2"
+ }
+ },
+ "@types/html-minifier": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-3.5.1.tgz",
+ "integrity": "sha512-h9+AmtRHohUxclj4k86KJ/Le548WHIFcXf8zdMnpc6jEmH9G64dJ8brpbFX7z/k48bhytQXAiHXrJ+fay6FYTg==",
+ "dev": true,
+ "requires": {
+ "@types/clean-css": "3.4.30",
+ "@types/relateurl": "0.2.28",
+ "@types/uglify-js": "2.6.30"
+ }
+ },
+ "@types/is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@types/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-byTuSHMdMRaOpRBhDW3RXl/Jxv8=",
+ "dev": true
+ },
+ "@types/launchpad": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/launchpad/-/launchpad-0.6.0.tgz",
+ "integrity": "sha1-NylhCbfyd/bmxf1+DAcGvJGPu1E=",
+ "dev": true,
+ "optional": true
+ },
+ "@types/mime": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz",
+ "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/mz": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.29.tgz",
+ "integrity": "sha1-vCRyjGSZc/HHhR6QM/nOUlZowns=",
+ "dev": true,
+ "requires": {
+ "@types/bluebird": "3.5.20",
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/node": {
+ "version": "8.9.5",
+ "resolved": "http://registry.npmjs.org/@types/node/-/node-8.9.5.tgz",
+ "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==",
+ "dev": true
+ },
+ "@types/opn": {
+ "version": "3.0.28",
+ "resolved": "https://registry.npmjs.org/@types/opn/-/opn-3.0.28.tgz",
+ "integrity": "sha1-CX0NHJtXSVc6XZbfEyOHu20CEYo=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/pem": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@types/pem/-/pem-1.9.3.tgz",
+ "integrity": "sha512-+hHbGi9PAyHVeRdMJN6yNuMWoshJ+7oTqYuhBB1/vHq0Tfu46ucbvgxmhwBfe0GCiJZvCa20VHhHsA0mY5W6hQ==",
+ "dev": true
+ },
+ "@types/relateurl": {
+ "version": "0.2.28",
+ "resolved": "https://registry.npmjs.org/@types/relateurl/-/relateurl-0.2.28.tgz",
+ "integrity": "sha1-a9p9uGU/piZD9e5p6facEaOS46Y=",
+ "dev": true
+ },
+ "@types/resolve": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.7.tgz",
+ "integrity": "sha512-GPewdjkb0Q76o459qgp6pBLzJj/bD3oveS2kfLhIkZ9U3t3AFKtl5DlFB6lGTw0iZmcmxoGC8lpLW3NNJKrN9A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==",
+ "dev": true,
+ "requires": {
+ "@types/express-serve-static-core": "4.11.1",
+ "@types/mime": "0.0.29"
+ }
+ },
+ "@types/spdy": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.4.tgz",
+ "integrity": "sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/ua-parser-js": {
+ "version": "0.7.32",
+ "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
+ "integrity": "sha512-+z7Q72Mlnq6SFkQYHzLg2Z70pIsgRVzgx1b5PV8eUv5uaZ/zoqIs45XnhtToW4gTeX4FbjIP49nhIjyvPF4rPg==",
+ "dev": true
+ },
+ "@types/uglify-js": {
+ "version": "2.6.30",
+ "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-2.6.30.tgz",
+ "integrity": "sha512-NjiBNGFl58vHJeijl63w1fWRIjLnrfOvimsXF5b3lTzEzkTV1BnVsbqQeLejg54upsHPWIF63aiub5TEwH619A==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "@types/uuid": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.3.tgz",
+ "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/vinyl": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz",
+ "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@types/vinyl-fs": {
+ "version": "0.0.28",
+ "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-0.0.28.tgz",
+ "integrity": "sha1-RmMBe8gCxlcOrk80Cf1cq/l8v94=",
+ "dev": true,
+ "requires": {
+ "@types/glob-stream": "6.1.0",
+ "@types/node": "8.9.5",
+ "@types/vinyl": "2.0.2"
+ }
+ },
+ "@types/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@types/winston": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.8.tgz",
+ "integrity": "sha512-QqR0j08RCS1AQYPMRPHikEpcmK+2aEEbcSzWLwOqyJ4FhLmHUx/WjRrnn7tTQg/y4IKnMhzskh/o7qvGIZZ7iA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.9.5"
+ }
+ },
+ "@webcomponents/custom-elements": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.1.0.tgz",
+ "integrity": "sha512-M872VYia7mXvtgsxKTTNBNPDYNLEvM3DDd0reyNusd/5weWH0XouKYYgp68b6gvWdMPHcMomg3SzUZaOo/bv9w==",
+ "dev": true
+ },
+ "@webcomponents/html-imports": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@webcomponents/html-imports/-/html-imports-1.1.1.tgz",
+ "integrity": "sha512-GVywdQzoSGtXv0qlGjqxFefSeLvICsT5QQaEhPKW6swhdIoNtTb6LJ4D/EBcfukgNcOLocplGz99YDVVHnqAEQ==",
+ "dev": true
+ },
+ "@webcomponents/shadycss": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.1.1.tgz",
+ "integrity": "sha512-7iVMw1HU0e5tTxL1OIqw/RBGmnYuz1HUNd7t1UYq7VmoBOl5Zm4g3spUBSksyd97SiXauFlXAeSpA0/in9k+dw==",
+ "dev": true
+ },
+ "@webcomponents/shadydom": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/@webcomponents/shadydom/-/shadydom-1.0.14.tgz",
+ "integrity": "sha512-6jhMR4gEJr6xe4pg+GjmOVx8GB2XAaCIEND6+YUV3EcgOIaCG6jl2QJJ4JiuFmJALNBn2sHIsnz6Gvw74F9Mzw==",
+ "dev": true
+ },
+ "@webcomponents/template": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@webcomponents/template/-/template-1.2.4.tgz",
+ "integrity": "sha512-lbhJfT+VuQ9/1hLrX7vkbz+vbJBGwkhnwHeEdajBgDCu5La+FmfnTyBPyYplBN/3yDss9jJ0HMMrKFho3KYXPQ==",
+ "dev": true
+ },
+ "@webcomponents/webcomponents-platform": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@webcomponents/webcomponents-platform/-/webcomponents-platform-1.0.0.tgz",
+ "integrity": "sha1-iHkUY4DdvsuGF+MiSX1Z53w/9Gg=",
+ "dev": true
+ },
+ "@webcomponents/webcomponentsjs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.1.0.tgz",
+ "integrity": "sha512-7toNyVlrl7vJnY3PU0eXIK1KWq8phfnEe1IwOdCMxkIl/BfUkUB2aaVs45R0LSx1qxHRnkqj0vlGtskUvKkNkA==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "accessibility-developer-tools": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz",
+ "integrity": "sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "adm-zip": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
+ "dev": true,
+ "optional": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extend": "3.0.1",
+ "semver": "5.0.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+ "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz",
+ "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
+ "dev": true
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "append-field": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz",
+ "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=",
+ "dev": true
+ },
+ "archiver": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
+ "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "1.3.0",
+ "async": "2.6.0",
+ "buffer-crc32": "0.2.13",
+ "glob": "7.1.2",
+ "lodash": "4.17.5",
+ "readable-stream": "2.3.5",
+ "tar-stream": "1.5.2",
+ "walkdir": "0.0.11",
+ "zip-stream": "1.2.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ }
+ }
+ },
+ "archiver-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
+ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lazystream": "1.0.0",
+ "lodash": "4.17.5",
+ "normalize-path": "2.1.1",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
+ "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.1",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.5",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-helper-evaluate-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.3.0.tgz",
+ "integrity": "sha512-dRFlMTqUJRGzx5a2smKxmptDdNCXKSkPcXWzKLwAV72hvIZumrd/0z9RcewHkr7PmAEq+ETtpD1GK6wZ6ZUXzw==",
+ "dev": true
+ },
+ "babel-helper-flip-expressions": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.3.0.tgz",
+ "integrity": "sha512-kNGohWmtAG3b7tN1xocRQ5rsKkH/hpvZsMiGOJ1VwGJKhnwzR5KlB3rvKBaBPl5/IGHcopB2JN+r1SUEX1iMAw==",
+ "dev": true
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-is-nodes-equiv": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
+ "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
+ "dev": true
+ },
+ "babel-helper-is-void-0": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.3.0.tgz",
+ "integrity": "sha512-JVqdX8y7Rf/x4NwbqtUI7mdQjL9HWoDnoAEQ8Gv8oxzjvbJv+n75f7l36m9Y8C7sCUltX3V5edndrp7Hp1oSXQ==",
+ "dev": true
+ },
+ "babel-helper-mark-eval-scopes": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.3.0.tgz",
+ "integrity": "sha512-nrho5Dg4vl0VUgURVpGpEGiwbst5JX7efIyDHFxmkCx/ocQFnrPt8ze9Kxl6TKjR29bJ7D/XKY1NMlSxOQJRbQ==",
+ "dev": true
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-helper-remove-or-void": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.3.0.tgz",
+ "integrity": "sha512-D68W1M3ibCcbg0ysh3ww4/O0g10X1CXK720oOuR8kpfY7w0yP4tVcpK7zDmI1JecynycTQYAZ1rhLJo9aVtIKQ==",
+ "dev": true
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-to-multiple-sequence-expressions": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.3.0.tgz",
+ "integrity": "sha512-1uCrBD+EAaMnAYh7hc944n8Ga19y3daEnoXWPYDvFVsxMCc1l8aDjksApaCEaNSSuewq8BEcff47Cy1PbLg2Gw==",
+ "dev": true
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-external-helpers": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz",
+ "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-minify-builtins": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.3.0.tgz",
+ "integrity": "sha512-MqhSHlxkmgURqj3144qPksbZ/qof1JWdumcbucc4tysFcf3P3V3z3munTevQgKEFNMd8F5/ECGnwb63xogLjAg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-constant-folding": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.3.0.tgz",
+ "integrity": "sha512-1XeRpx+aY1BuNY6QU/cm6P+FtEi3ar3XceYbmC+4q4W+2Ewq5pL7V68oHg1hKXkBIE0Z4/FjSoHz6vosZLOe/A==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-dead-code-elimination": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.3.0.tgz",
+ "integrity": "sha512-SjM2Fzg85YZz+q/PNJ/HU4O3W98FKFOiP9K5z3sfonlamGOzvZw3Eup2OTiEBsbbqTeY8yzNCAv3qpJRYCgGmw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0",
+ "babel-helper-mark-eval-scopes": "0.3.0",
+ "babel-helper-remove-or-void": "0.3.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "babel-plugin-minify-flip-comparisons": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.3.0.tgz",
+ "integrity": "sha512-B8lK+ekcpSNVH7PZpWDe5nC5zxjRiiT4nTsa6h3QkF3Kk6y9qooIFLemdGlqBq6j0zALEnebvCpw8v7gAdpgnw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-guarded-expressions": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.3.0.tgz",
+ "integrity": "sha512-O+6CvF5/Ttsth3LMg4/BhyvVZ82GImeKMXGdVRQGK/8jFiP15EjRpdgFlxv3cnqRjqdYxLCS6r28VfLpb9C/kA==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-infinity": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.3.0.tgz",
+ "integrity": "sha512-Sj8ia3/w9158DWieUxU6/VvnYVy59geeFEkVgLZYBE8EBP+sN48tHtBM/jSgz0ejEdBlcfqJ6TnvPmVXTzR2BQ==",
+ "dev": true
+ },
+ "babel-plugin-minify-mangle-names": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.3.0.tgz",
+ "integrity": "sha512-PYTonhFWURsfAN8achDwvR5Xgy6EeTClLz+fSgGRqjAIXb0OyFm3/xfccbQviVi1qDXmlSnt6oJhBg8KE4Fn7Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-mark-eval-scopes": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-numeric-literals": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.3.0.tgz",
+ "integrity": "sha512-TgZj6ay8zDw74AS3yiIfoQ8vRSNJisYO/Du60S8nPV7EW7JM6fDMx5Sar6yVHlVuuwNgvDUBh191K33bVrAhpg==",
+ "dev": true
+ },
+ "babel-plugin-minify-replace": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.3.0.tgz",
+ "integrity": "sha512-VR6tTg2Lt0TicHIOw04fsUtpPw7RaRP8PC8YzSFwEixnzvguZjZJoL7TgG7ZyEWQD1cJ96UezswECmFNa815bg==",
+ "dev": true
+ },
+ "babel-plugin-minify-simplify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.3.0.tgz",
+ "integrity": "sha512-2M16ytQOCqBi7bYMu4DCWn8e6KyFCA108F6+tVrBJxOmm5u2sOmTFEa8s94tR9RHRRNYmcUf+rgidfnzL3ik9Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "0.3.0",
+ "babel-helper-is-nodes-equiv": "0.0.1",
+ "babel-helper-to-multiple-sequence-expressions": "0.3.0"
+ }
+ },
+ "babel-plugin-minify-type-constructors": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.3.0.tgz",
+ "integrity": "sha512-XRXpvsUCPeVw9YEUw+9vSiugcSZfow81oIJT0yR9s8H4W7yJ6FHbImi5DJHoL8KcDUjYnL9wYASXk/fOkbyR6Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "0.3.0"
+ }
+ },
+ "babel-plugin-syntax-dynamic-import": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
+ "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
+ "dev": true
+ },
+ "babel-plugin-syntax-export-extensions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
+ "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=",
+ "dev": true
+ },
+ "babel-plugin-syntax-object-rest-spread": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+ "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+ "dev": true
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-inline-consecutive-adds": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.3.0.tgz",
+ "integrity": "sha512-iZsYAIjYLLfLK0yN5WVT7Xf7Y3wQ9Z75j9A8q/0IglQSpUt2ppTdHlwl/GeaXnxdaSmsxBu861klbTBbv2n+RA==",
+ "dev": true
+ },
+ "babel-plugin-transform-member-expression-literals": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.0.tgz",
+ "integrity": "sha512-bxtac+8w755ctVeDs4vU98RhWY49eW1wO02HAN+eirZYSKk/dVrKONIznXbHmxWKxT4UX1rpTKOCyezuzLpbTw==",
+ "dev": true
+ },
+ "babel-plugin-transform-merge-sibling-variables": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.0.tgz",
+ "integrity": "sha512-9G1URVEEKoQLDqe0GwqYudECN7kE/q0OCNo5TiD1iwWnnaKi97xY915l5r2KKUvNflXEm9c3faNWknSXYQ7h6Q==",
+ "dev": true
+ },
+ "babel-plugin-transform-minify-booleans": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.0.tgz",
+ "integrity": "sha512-JtpyTRyF+wF/r7GSxpRbNCrVve5M/aCC8xoGcnFItaPUDqjxKmFYvBzMc9u+g0lgo8NWjuZLc16MYaIwkHKD/A==",
+ "dev": true
+ },
+ "babel-plugin-transform-object-rest-spread": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-property-literals": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.0.tgz",
+ "integrity": "sha512-B8s+71+4DPye9+pmZiPGgLPy3YqcmIuvE/9UcZLczPlwL5ALwF6qRUdLC3Fk17NhL6jxp4u33ZVZ8R4kvASPzw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-regexp-constructors": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.3.0.tgz",
+ "integrity": "sha512-h92YHzyl042rb0naKO8frTHntpRFwRgKkfWD8602kFHoQingjJNtbvZzvxqHncJ6XmKVyYvfrBpDOSkCTDIIxw==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-console": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.0.tgz",
+ "integrity": "sha512-mck9//yGTwObqqqDzY/sISO88/5/XfIB3ILb4uJLXk2xq124NT4yQVjFSRgVSbLcNq8OyBAn2acxKUqg4W/okQ==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-debugger": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.0.tgz",
+ "integrity": "sha512-i/HWGjsmL2d1N2dl+eIzf44XpSP5v7hi1/GXB0xzom9kjrU8js3T8Kadizn95ZxfHK592Vg8P4JJWP/fvimEWw==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-undefined": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.3.0.tgz",
+ "integrity": "sha512-TYGQucc8iP3LJwN3kDZLEz5aa/2KuFrqpT+s8f8NnHsBU1sAgR3y8Opns0xhC+smyDYWscqFCKM1gbkWQOhhnw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.3.0"
+ }
+ },
+ "babel-plugin-transform-simplify-comparison-operators": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.0.tgz",
+ "integrity": "sha512-EJyfYeph0CSekwQuwWVwJqy2go/bETkR95iaWQ/HTUis7tkCGNYmXngaFzuIXdmoPXfvmXYCvAXR4/93hqHVjw==",
+ "dev": true
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-undefined-to-void": {
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.0.tgz",
+ "integrity": "sha512-AVDVEmp0S9mbF1O8zekWbsOOmqnR08PZah5NRZJqSvJnFgiL0ep4Lwo4EymH8OieJR2QgQdR3q71TNW+wiVn4g==",
+ "dev": true
+ },
+ "babel-preset-es2015": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0"
+ }
+ },
+ "babel-preset-minify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.3.0.tgz",
+ "integrity": "sha512-+VV2GWEyak3eDOmzT1DDMuqHrw3VbE9nBNkx2LLVs4pH/Me32ND8DRpVDd8IRvk1xX5p75nygyRPtkMh6GIAbQ==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-minify-builtins": "0.3.0",
+ "babel-plugin-minify-constant-folding": "0.3.0",
+ "babel-plugin-minify-dead-code-elimination": "0.3.0",
+ "babel-plugin-minify-flip-comparisons": "0.3.0",
+ "babel-plugin-minify-guarded-expressions": "0.3.0",
+ "babel-plugin-minify-infinity": "0.3.0",
+ "babel-plugin-minify-mangle-names": "0.3.0",
+ "babel-plugin-minify-numeric-literals": "0.3.0",
+ "babel-plugin-minify-replace": "0.3.0",
+ "babel-plugin-minify-simplify": "0.3.0",
+ "babel-plugin-minify-type-constructors": "0.3.0",
+ "babel-plugin-transform-inline-consecutive-adds": "0.3.0",
+ "babel-plugin-transform-member-expression-literals": "6.9.0",
+ "babel-plugin-transform-merge-sibling-variables": "6.9.0",
+ "babel-plugin-transform-minify-booleans": "6.9.0",
+ "babel-plugin-transform-property-literals": "6.9.0",
+ "babel-plugin-transform-regexp-constructors": "0.3.0",
+ "babel-plugin-transform-remove-console": "6.9.0",
+ "babel-plugin-transform-remove-debugger": "6.9.0",
+ "babel-plugin-transform-remove-undefined": "0.3.0",
+ "babel-plugin-transform-simplify-comparison-operators": "6.9.0",
+ "babel-plugin-transform-undefined-to-void": "6.9.0",
+ "lodash.isplainobject": "4.0.6"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.3",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.5",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.3",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.5"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.4",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "1.0.1",
+ "class-utils": "0.3.6",
+ "component-emitter": "1.2.1",
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "mixin-deep": "1.3.1",
+ "pascalcase": "0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ }
+ }
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
+ "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
+ "dev": true,
+ "optional": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.5"
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.16"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.3.2",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "2.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz",
+ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "extend-shallow": "2.0.1",
+ "fill-range": "4.0.0",
+ "isobject": "3.0.1",
+ "kind-of": "6.0.2",
+ "repeat-element": "1.1.2",
+ "snapdragon": "0.8.2",
+ "snapdragon-node": "2.1.1",
+ "split-string": "3.1.0",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "browser-capabilities": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/browser-capabilities/-/browser-capabilities-0.2.2.tgz",
+ "integrity": "sha512-iS5g9+yT/T7jr9BTjDi5Hu2soieyce457ad+fdp6uDlYp6pacX7ZG/nYtCZ+KQiMCxRfbd65OhAg7GbVJ3RcBw==",
+ "dev": true,
+ "requires": {
+ "@types/ua-parser-js": "0.7.32",
+ "ua-parser-js": "0.7.17"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browserstack": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.0.tgz",
+ "integrity": "sha1-tWVCWtYu1ywQgqHrl51TE8fUdU8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "https-proxy-agent": "1.0.0"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
+ "dev": true,
+ "requires": {
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "1.0.0",
+ "component-emitter": "1.2.1",
+ "get-value": "2.0.6",
+ "has-value": "1.0.0",
+ "isobject": "3.0.1",
+ "set-value": "2.0.0",
+ "to-object-path": "0.3.0",
+ "union-value": "1.0.0",
+ "unset-value": "1.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2",
+ "upper-case": "1.1.3"
+ }
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.1.0",
+ "deep-eql": "0.1.3",
+ "type-detect": "1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz",
+ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "supports-color": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz",
+ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+ "dev": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
+ "dev": true
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "define-property": "0.2.5",
+ "isobject": "3.0.1",
+ "static-extend": "0.1.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "clean-css": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
+ "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "cleankill": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cleankill/-/cleankill-2.0.0.tgz",
+ "integrity": "sha1-WYMN/ItBHVPccq0J1Fp46jMWGpE=",
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz",
+ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "process-nextick-args": "2.0.0",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "1.0.0",
+ "object-visit": "1.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "command-line-args": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz",
+ "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "find-replace": "1.0.3",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-3.0.8.tgz",
+ "integrity": "sha1-tqIJeMGzg0d/XBGlKUKLiAv+D00=",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "3.0.0",
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "table-layout": "0.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "compress-commons": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
+ "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "crc32-stream": "2.0.0",
+ "normalize-path": "2.1.1",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "compressible": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz",
+ "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.2",
+ "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
+ "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "2.0.13",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5",
+ "typedarray": "0.0.6"
+ }
+ },
+ "configstore": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz",
+ "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.2.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.3.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
+ "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz",
+ "integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII=",
+ "dev": true
+ },
+ "crc32-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
+ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
+ "dev": true,
+ "requires": {
+ "crc": "3.5.0",
+ "readable-stream": "2.3.5"
+ },
+ "dependencies": {
+ "crc": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz",
+ "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=",
+ "dev": true
+ }
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.2",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "css": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
+ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "source-map": "0.1.43",
+ "source-map-resolve": "0.3.1",
+ "urix": "0.1.0"
+ },
+ "dependencies": {
+ "atob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "source-map-resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "dev": true,
+ "requires": {
+ "atob": "1.1.3",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.3.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=",
+ "dev": true
+ }
+ }
+ },
+ "css-slam": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-slam/-/css-slam-2.1.0.tgz",
+ "integrity": "sha512-WY1C869GTC5zNMFsQUkiW+JB4TkCQ6XJC5LaCqFfVd0KiZu563/KnacaMYpCj6mSooTMGij5g809e4Lp4x+WvQ==",
+ "dev": true,
+ "requires": {
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "dom5": "3.0.0",
+ "parse5": "4.0.0",
+ "shady-css-parser": "0.1.0"
+ },
+ "dependencies": {
+ "dom5": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.0.tgz",
+ "integrity": "sha512-PbE+7C4Sh1dHDTLNuSDaMUGD1ivDiSZw0L+a9xVUzUKeQ8w3vdzfKHRA07CxcrFZZOa1SGl2nIJ9T49j63q+bg==",
+ "dev": true,
+ "requires": {
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "4.0.0"
+ }
+ },
+ "parse5": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==",
+ "dev": true
+ }
+ }
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.40"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "debug-fabulous": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.0.0.tgz",
+ "integrity": "sha512-dsd50qQ1atDeurcxL7XOjPp4nZCGZzWIONDujDXzl1atSyC3hMbZD+v6440etw+Vt0Pr8ce4TQzHfX3KZM05Mw==",
+ "dev": true,
+ "requires": {
+ "debug": "3.1.0",
+ "memoizee": "0.4.12",
+ "object-assign": "4.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "dev": true,
+ "requires": {
+ "type-detect": "0.1.1"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=",
+ "dev": true
+ }
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ }
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2",
+ "isobject": "3.0.1"
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
+ "dicer": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+ "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "streamsearch": "0.1.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "dom-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz",
+ "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=",
+ "dev": true,
+ "requires": {
+ "urijs": "1.19.1"
+ }
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.102",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "http://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz",
+ "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "duplexify": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz",
+ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "emitter-component": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.1.1.tgz",
+ "integrity": "sha1-Bl4tvtaVm/RwZ57avq95gdEAOrY=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ }
+ }
+ },
+ "engine.io": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
+ "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "uws": "9.14.0",
+ "ws": "3.3.3"
+ }
+ },
+ "engine.io-client": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
+ "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "3.1.0",
+ "engine.io-parser": "2.1.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
+ "yeast": "0.1.2"
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary2": "1.0.2"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.40",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.40.tgz",
+ "integrity": "sha512-S9Fh3oya5OOvYSNGvPZJ+vyrs6VYpe1IXPowVe3N1OhaiwVaGlwfn3Zf5P5klYcWOA0toIwYQW8XEv/QqhdHvQ==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.40",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
+ "dev": true
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.40"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.40",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.2",
+ "concat-stream": "1.6.1",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.1.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0",
+ "espree": "3.5.4",
+ "esquery": "1.0.1",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "11.4.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.1.0",
+ "js-yaml": "3.11.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.5",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "regexpp": "1.1.0",
+ "require-uncached": "1.0.3",
+ "semver": "5.5.0",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ }
+ },
+ "eslint-plugin-html": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz",
+ "integrity": "sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ==",
+ "dev": true,
+ "requires": {
+ "htmlparser2": "3.9.2",
+ "semver": "5.5.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.1",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.5.3",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.40"
+ }
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "posix-character-classes": "0.1.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ },
+ "dependencies": {
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ },
+ "express": {
+ "version": "4.16.3",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
+ "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.5",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.1",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.3",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.2",
+ "serve-static": "1.13.2",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.4.0",
+ "type-is": "1.6.16",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.4.0"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "1.0.0",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "0.3.2",
+ "define-property": "1.0.0",
+ "expand-brackets": "2.1.4",
+ "extend-shallow": "2.0.1",
+ "fragment-cache": "0.2.1",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "0.1.1",
+ "color-support": "1.1.3",
+ "time-stamp": "1.1.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pend": "1.2.0"
+ }
+ },
+ "feature-detect-es6": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.4.0.tgz",
+ "integrity": "sha512-7OnRV38WLydGuGcdm/fGk2SG9uo5ljslBSbPhCfEW5Gl0lX/IliaAVXYiYUBcI0UHTbepqO4T1SkJ74K8gtcDg==",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1",
+ "to-regex-range": "2.1.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.4.0",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "find-port": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-port/-/find-port-1.0.1.tgz",
+ "integrity": "sha1-2whKbL+ZVk2Zhprnn73s9m6KGFw=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "find-replace": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
+ "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "test-value": "2.1.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "1.0.0",
+ "is-glob": "3.1.0",
+ "micromatch": "3.1.9",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "fined": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "is-plain-object": "2.0.4",
+ "object.defaults": "1.1.0",
+ "object.pick": "1.3.0",
+ "parse-filepath": "1.0.2"
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ },
+ "dependencies": {
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "fork-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz",
+ "integrity": "sha1-24Sfznf2cIpfjzhq5TOgkHtUrnA=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
+ }
+ },
+ "formatio": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz",
+ "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.1.2"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "0.2.2"
+ }
+ },
+ "freeport": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/freeport/-/freeport-1.0.5.tgz",
+ "integrity": "sha1-JV6KuEFwwzuoXZkOghrl9KGpvF0=",
+ "dev": true,
+ "optional": true
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "fs-exists-sync": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
+ "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "0.1.0"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "4.5.3",
+ "glob2base": "0.0.12",
+ "minimatch": "2.0.10",
+ "ordered-read-streams": "0.1.0",
+ "through2": "0.6.5",
+ "unique-stream": "1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "2.0.10",
+ "once": "1.4.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "0.5.2"
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "0.1.1"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "1.0.2",
+ "is-windows": "1.0.2",
+ "resolve-dir": "1.0.1"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "1.0.2",
+ "which": "1.3.0"
+ }
+ },
+ "globals": {
+ "version": "11.4.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz",
+ "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==",
+ "dev": true
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "3.1.21",
+ "lodash": "1.0.2",
+ "minimatch": "0.2.14"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "1.2.3",
+ "inherits": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "google-closure-compiler": {
+ "version": "20170910.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20170910.0.0.tgz",
+ "integrity": "sha1-enz1ER1zdrN2znRhE34bA5MD8eo=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "vinyl": "2.1.0",
+ "vinyl-sourcemaps-apply": "0.2.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "1.0.0",
+ "chalk": "1.1.3",
+ "deprecated": "0.0.1",
+ "gulp-util": "3.0.8",
+ "interpret": "1.1.0",
+ "liftoff": "2.5.0",
+ "minimist": "1.2.0",
+ "orchestrator": "0.3.8",
+ "pretty-hrtime": "1.0.3",
+ "semver": "4.3.6",
+ "tildify": "1.2.0",
+ "v8flags": "2.1.1",
+ "vinyl-fs": "0.3.14"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "gulp-if": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/gulp-if/-/gulp-if-2.0.2.tgz",
+ "integrity": "sha1-pJe351cwBQQcqivIt92jyARE1ik=",
+ "dev": true,
+ "requires": {
+ "gulp-match": "1.0.3",
+ "ternary-stream": "2.0.1",
+ "through2": "2.0.3"
+ }
+ },
+ "gulp-match": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/gulp-match/-/gulp-match-1.0.3.tgz",
+ "integrity": "sha1-kcfA1/Kb7NZgbVfYCn+Hdqh6uo4=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "gulp-rename": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
+ "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
+ "dev": true
+ },
+ "gulp-size": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/gulp-size/-/gulp-size-2.1.0.tgz",
+ "integrity": "sha1-HCtk8X+QcdWr2Z0VS3s0gfj7oSg=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "gulp-util": "3.0.8",
+ "gzip-size": "3.0.0",
+ "object-assign": "4.1.1",
+ "pretty-bytes": "3.0.1",
+ "stream-counter": "1.0.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
+ "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
+ "dev": true,
+ "requires": {
+ "@gulp-sourcemaps/identity-map": "1.0.1",
+ "@gulp-sourcemaps/map-sources": "1.0.0",
+ "acorn": "5.5.3",
+ "convert-source-map": "1.5.1",
+ "css": "2.2.1",
+ "debug-fabulous": "1.0.0",
+ "detect-newline": "2.1.0",
+ "graceful-fs": "4.1.11",
+ "source-map": "0.6.1",
+ "strip-bom-string": "1.0.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "1.0.0",
+ "array-uniq": "1.0.3",
+ "beeper": "1.1.1",
+ "chalk": "1.1.3",
+ "dateformat": "2.2.0",
+ "fancy-log": "1.3.2",
+ "gulplog": "1.0.0",
+ "has-gulplog": "0.1.0",
+ "lodash._reescape": "3.0.0",
+ "lodash._reevaluate": "3.0.0",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.template": "3.6.2",
+ "minimist": "1.2.0",
+ "multipipe": "0.1.2",
+ "object-assign": "3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl": "0.5.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "1.0.1"
+ }
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1"
+ }
+ },
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.9.0",
+ "is-my-json-valid": "2.17.2",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz",
+ "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+ "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
+ "dev": true
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.5",
+ "wbuf": "1.7.3"
+ }
+ },
+ "html-minifier": {
+ "version": "3.5.11",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.11.tgz",
+ "integrity": "sha512-kIi9C090qWW5cGxEf+EwNUczduyVR6krk29WB3zDSWBQN6xuh/1jCXgmY4SvqzaJMOZFCnf8wcNzA8iPsfLiUQ==",
+ "dev": true,
+ "requires": {
+ "camel-case": "3.0.0",
+ "clean-css": "4.1.11",
+ "commander": "2.15.0",
+ "he": "1.1.1",
+ "ncname": "1.0.0",
+ "param-case": "2.1.1",
+ "relateurl": "0.2.7",
+ "uglify-js": "3.3.15"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz",
+ "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==",
+ "dev": true
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz",
+ "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.4.1",
+ "domutils": "1.7.0",
+ "entities": "1.1.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.5",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.1"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.1.0",
+ "chalk": "2.3.2",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.2.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.5",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ }
+ },
+ "interpret": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "ipaddr.js": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz",
+ "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "requires": {
+ "is-relative": "1.0.0",
+ "is-windows": "1.0.2"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "1.0.0",
+ "is-data-descriptor": "1.0.0",
+ "kind-of": "6.0.2"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-my-ip-valid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
+ "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
+ "dev": true
+ },
+ "is-my-json-valid": {
+ "version": "2.17.2",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
+ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "is-my-ip-valid": "1.0.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-odd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
+ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "1.0.0"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-valid-glob": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
+ "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
+ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.10",
+ "esprima": "4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "requires": {
+ "package-json": "4.0.1"
+ }
+ },
+ "launchpad": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/launchpad/-/launchpad-0.7.0.tgz",
+ "integrity": "sha1-9CfTwOFehp7hVROCi6/vwW+ce8M=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.6.0",
+ "browserstack": "1.5.0",
+ "debug": "2.6.9",
+ "plist": "2.1.0",
+ "q": "1.5.1",
+ "underscore": "1.8.3"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.5"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "liftoff": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "findup-sync": "2.0.0",
+ "fined": "1.1.0",
+ "flagged-respawn": "1.0.0",
+ "is-plain-object": "2.0.4",
+ "object.map": "1.0.1",
+ "rechoir": "0.6.2",
+ "resolve": "1.5.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash._basetostring": "3.0.1",
+ "lodash._basevalues": "3.0.0",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0",
+ "lodash.keys": "3.1.2",
+ "lodash.restparam": "3.6.1",
+ "lodash.templatesettings": "3.1.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0"
+ }
+ },
+ "lolex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz",
+ "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz",
+ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "lru-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.40"
+ }
+ },
+ "make-dir": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz",
+ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==",
+ "dev": true,
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.0.tgz",
+ "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "1.0.1"
+ }
+ },
+ "matcher": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.0.tgz",
+ "integrity": "sha512-aZGv6JBTHqfqAd09jmAlbKnAICTfIvb5Z8gXVxPB5WZtFfHMaAMdACL7tQflD2V+6/8KNcY8s6DYtWLgpJP5lA==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "md5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
+ "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+ "dev": true,
+ "requires": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "1.1.6"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "memoizee": {
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz",
+ "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.40",
+ "es6-weak-map": "2.0.2",
+ "event-emitter": "0.3.5",
+ "is-promise": "2.1.0",
+ "lru-queue": "0.1.0",
+ "next-tick": "1.0.0",
+ "timers-ext": "0.1.5"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.5"
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz",
+ "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "braces": "2.3.1",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "extglob": "2.0.4",
+ "fragment-cache": "0.2.1",
+ "kind-of": "6.0.2",
+ "nanomatch": "1.2.9",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2",
+ "is-extendable": "1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "multer": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz",
+ "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=",
+ "dev": true,
+ "requires": {
+ "append-field": "0.1.0",
+ "busboy": "0.2.14",
+ "concat-stream": "1.6.1",
+ "mkdirp": "0.5.1",
+ "object-assign": "3.0.0",
+ "on-finished": "2.3.0",
+ "type-is": "1.6.16",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0",
+ "object-assign": "4.1.1",
+ "thenify-all": "1.6.0"
+ }
+ },
+ "nanomatch": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
+ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "4.0.0",
+ "array-unique": "0.3.2",
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "fragment-cache": "0.2.1",
+ "is-odd": "2.0.0",
+ "is-windows": "1.0.2",
+ "kind-of": "6.0.2",
+ "object.pick": "1.3.0",
+ "regex-not": "1.0.2",
+ "snapdragon": "0.8.2",
+ "to-regex": "3.0.2"
+ }
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "natives": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.2.tgz",
+ "integrity": "sha512-5bRASydE1gu6zPOenLN043++J8xj1Ob7ArkfdYO3JN4DF5rDmG7bMoiybkTyD+GnXQEMixVeDHMzuqm6kpBmiA==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "dev": true,
+ "requires": {
+ "xml-char-classes": "1.0.0"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz",
+ "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==",
+ "dev": true,
+ "optional": true
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "1.1.4"
+ }
+ },
+ "nodegit-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nodegit-promise/-/nodegit-promise-4.0.0.tgz",
+ "integrity": "sha1-VyKxhPLfcycWEGSnkdLoQskWezQ=",
+ "dev": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "nomnom": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+ "dev": true,
+ "requires": {
+ "chalk": "0.4.0",
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+ "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "1.0.0",
+ "has-color": "0.1.7",
+ "strip-ansi": "0.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+ "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.6.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.5.0",
+ "validate-npm-package-license": "3.0.3"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "1.0.1",
+ "array-slice": "1.1.0",
+ "for-own": "1.0.0",
+ "isobject": "3.0.1"
+ }
+ },
+ "object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "1.0.0",
+ "make-iterator": "1.0.0"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ }
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.2.0"
+ }
+ },
+ "opn": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz",
+ "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "0.1.5",
+ "sequencify": "0.0.7",
+ "stream-consume": "0.1.1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0",
+ "semver": "5.5.0"
+ }
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "2.3.2"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "1.0.0",
+ "map-cache": "0.2.2",
+ "path-root": "0.1.1"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "0.1.2"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
+ "pem": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/pem/-/pem-1.12.3.tgz",
+ "integrity": "sha512-hT7GwvQL35+0iqgYUl8vn5I5pAVR0HcJas07TXL8bNaR4c5kAFRquk4ZqQk1F9YMcQOr6WjGdY5OnDC0RBnzig==",
+ "dev": true,
+ "requires": {
+ "md5": "2.2.1",
+ "os-tmpdir": "1.0.2",
+ "safe-buffer": "5.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true,
+ "optional": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "plist": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
+ "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "base64-js": "1.2.0",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.27"
+ }
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "0.1.1",
+ "ansi-red": "0.1.1",
+ "arr-diff": "1.1.0",
+ "arr-union": "2.1.0",
+ "extend-shallow": "1.1.4"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-slice": "0.2.3"
+ }
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "1.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ }
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.8",
+ "winston": "2.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-2.7.0.tgz",
+ "integrity": "sha512-yD5FYQ8thX/2vHTaEgTtCs/NSG3ko4VlEb0IjM/PFsu03lHNHnpadC1NGwKyvI9vOjcFhnw4mDEVW0lbxLo8Eg==",
+ "dev": true,
+ "requires": {
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/escodegen": "0.0.2",
+ "@types/estraverse": "0.0.6",
+ "@types/estree": "0.0.37",
+ "@types/node": "6.0.102",
+ "@types/parse5": "2.2.34",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "escodegen": "1.9.1",
+ "espree": "3.5.4",
+ "estraverse": "4.2.0",
+ "jsonschema": "1.2.2",
+ "parse5": "2.2.3",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "http://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "polymer-build": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/polymer-build/-/polymer-build-2.3.3.tgz",
+ "integrity": "sha512-n2uL0TT9KrvxSd7wcBFbv8FAE0vwoRrde79fHtuu+QF53XPnPYXHxrQ9NZMgKQwxyVWp4wOwHSiirQzKo0RqKg==",
+ "dev": true,
+ "requires": {
+ "@types/babel-core": "6.25.3",
+ "@types/babel-traverse": "6.25.3",
+ "@types/gulp-if": "0.0.33",
+ "@types/html-minifier": "3.5.1",
+ "@types/is-windows": "0.2.0",
+ "@types/mz": "0.0.31",
+ "@types/node": "6.0.102",
+ "@types/parse5": "2.2.34",
+ "@types/resolve": "0.0.7",
+ "@types/uuid": "3.4.3",
+ "@types/vinyl": "2.0.2",
+ "@types/vinyl-fs": "0.0.28",
+ "babel-plugin-external-helpers": "6.22.0",
+ "babel-plugin-syntax-dynamic-import": "6.18.0",
+ "babel-plugin-syntax-export-extensions": "6.13.0",
+ "babel-plugin-syntax-object-rest-spread": "6.13.0",
+ "babel-plugin-transform-object-rest-spread": "6.26.0",
+ "babel-preset-es2015": "6.24.1",
+ "babel-preset-minify": "0.3.0",
+ "babel-traverse": "6.26.0",
+ "css-slam": "2.1.0",
+ "dom5": "2.3.0",
+ "gulp-if": "2.0.2",
+ "html-minifier": "3.5.11",
+ "is-windows": "1.0.2",
+ "matcher": "1.1.0",
+ "multipipe": "1.0.2",
+ "mz": "2.7.0",
+ "parse5": "2.2.3",
+ "plylog": "0.5.0",
+ "polymer-analyzer": "2.7.0",
+ "polymer-bundler": "3.1.1",
+ "polymer-project-config": "3.10.0",
+ "resolve": "1.5.0",
+ "stream": "0.0.2",
+ "sw-precache": "5.2.1",
+ "uuid": "3.2.1",
+ "vinyl": "1.2.0",
+ "vinyl-fs": "2.4.4",
+ "whatwg-url": "6.4.0"
+ },
+ "dependencies": {
+ "@types/mz": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.31.tgz",
+ "integrity": "sha1-pNgMCC/v5x5Ap8DwfR5lVbu8e1I=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.102"
+ }
+ },
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "http://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.5"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ }
+ },
+ "glob-stream": {
+ "version": "5.3.5",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
+ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "glob": "5.0.15",
+ "glob-parent": "3.1.0",
+ "micromatch": "2.3.11",
+ "ordered-read-streams": "0.3.0",
+ "through2": "0.6.5",
+ "to-absolute-glob": "0.1.1",
+ "unique-stream": "2.2.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
+ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.5.1",
+ "graceful-fs": "4.1.11",
+ "strip-bom": "2.0.0",
+ "through2": "2.0.3",
+ "vinyl": "1.2.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ }
+ }
+ },
+ "multipipe": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz",
+ "integrity": "sha1-zBPv2DPJzamfIk+GhGG44aP9k50=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.1.4",
+ "object-assign": "4.1.1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
+ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
+ "dev": true,
+ "requires": {
+ "is-stream": "1.1.0",
+ "readable-stream": "2.3.5"
+ }
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
+ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "1.0.1",
+ "through2-filter": "2.0.0"
+ }
+ },
+ "vinyl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-fs": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
+ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "glob-stream": "5.3.5",
+ "graceful-fs": "4.1.11",
+ "gulp-sourcemaps": "1.6.0",
+ "is-valid-glob": "0.3.0",
+ "lazystream": "1.0.0",
+ "lodash.isequal": "4.5.0",
+ "merge-stream": "1.0.1",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1",
+ "readable-stream": "2.3.5",
+ "strip-bom": "2.0.0",
+ "strip-bom-stream": "1.0.0",
+ "through2": "2.0.3",
+ "through2-filter": "2.0.0",
+ "vali-date": "1.0.0",
+ "vinyl": "1.2.0"
+ }
+ }
+ }
+ },
+ "polymer-bundler": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/polymer-bundler/-/polymer-bundler-3.1.1.tgz",
+ "integrity": "sha512-a/MItYr/rTRZ8Ymj5npmoAAm89RC5hRh4yz8bs22GyMn+NlE7HqJ4EzLrPkyRWlOyBhbhYFPx2Zot8PlaWXvmQ==",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "dom5": "2.3.0",
+ "espree": "3.5.4",
+ "mkdirp": "0.5.1",
+ "parse5": "2.2.3",
+ "polymer-analyzer": "2.7.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.10.0.tgz",
+ "integrity": "sha512-+vrx5aAZM3rpViqnYhTX1bIpXXTlGpiAGZEsk7WzN6EqSMQPI5eYRw4XD1kmjo1W6GShIhPfvhh+Ik/pywGGkw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.102",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.102",
+ "resolved": "http://registry.npmjs.org/@types/node/-/node-6.0.102.tgz",
+ "integrity": "sha512-EhNufyBoC1Kqaj+XMHGzi6mPUC8wVABOMTPE5XaSJc49LIVvXsyrV1HYMAPTUViT7E4wLUB38OdDmb+HshjGmA==",
+ "dev": true
+ }
+ }
+ },
+ "polyserve": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/polyserve/-/polyserve-0.23.0.tgz",
+ "integrity": "sha512-ijzCbFttKG1F0hMTWWIzMoo+sxsfpXctoHFigw2ViBcvUt/aUBfJCUTHPKHhi/3zAgtw5Ej3SgoIOY9LflpXAw==",
+ "dev": true,
+ "requires": {
+ "@types/assert": "0.0.29",
+ "@types/babel-core": "6.25.3",
+ "@types/babylon": "6.16.2",
+ "@types/compression": "0.0.33",
+ "@types/content-type": "1.1.2",
+ "@types/express": "4.11.1",
+ "@types/mime": "0.0.29",
+ "@types/mz": "0.0.29",
+ "@types/node": "8.9.5",
+ "@types/opn": "3.0.28",
+ "@types/parse5": "2.2.34",
+ "@types/pem": "1.9.3",
+ "@types/serve-static": "1.13.1",
+ "@types/spdy": "3.4.4",
+ "@types/ua-parser-js": "0.7.32",
+ "babel-core": "6.26.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "babylon": "6.18.0",
+ "browser-capabilities": "0.2.2",
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "compression": "1.7.2",
+ "content-type": "1.0.4",
+ "dom5": "2.3.0",
+ "express": "4.16.3",
+ "find-port": "1.0.1",
+ "http-proxy-middleware": "0.17.4",
+ "lru-cache": "4.1.2",
+ "mime": "1.4.1",
+ "mz": "2.7.0",
+ "opn": "3.0.3",
+ "parse5": "2.2.3",
+ "pem": "1.12.3",
+ "polymer-build": "2.3.3",
+ "requirejs": "2.3.5",
+ "resolve": "1.5.0",
+ "send": "0.14.2",
+ "spdy": "3.4.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz",
+ "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.2",
+ "statuses": "1.3.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.14.2.tgz",
+ "integrity": "sha1-ObBDiz9RC+Xcb2Z6EfcWiTaM3u8=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "1.5.1",
+ "mime": "1.3.4",
+ "ms": "0.7.2",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz",
+ "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "promisify-node": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/promisify-node/-/promisify-node-0.4.0.tgz",
+ "integrity": "sha1-MoA4dOxBF4TkeGwzmQKoeheaRpw=",
+ "dev": true,
+ "requires": {
+ "nodegit-promise": "4.0.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz",
+ "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.6.0"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
+ "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz",
+ "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=",
+ "dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz",
+ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.5.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ },
+ "dependencies": {
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ }
+ }
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.6",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.6"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.2.1"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ }
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "requirejs": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz",
+ "integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
+ "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "global-modules": "1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "rollup": {
+ "version": "0.45.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.45.2.tgz",
+ "integrity": "sha512-2+bq5GQSrocdhr+M92mOQRmF1evtLRzv9NdmEC2wo7BILvTG8irHCtD0q+zg8ikNu63iJicdN5IzyxAXRTFKOQ==",
+ "dev": true,
+ "requires": {
+ "source-map-support": "0.4.18"
+ }
+ },
+ "rollup-stream": {
+ "version": "1.23.1",
+ "resolved": "https://registry.npmjs.org/rollup-stream/-/rollup-stream-1.23.1.tgz",
+ "integrity": "sha512-niUbTM3sqckz1FNebsSiN+koCR7RdgrRZ2HCcR4V2DT9PSs53tB4z1xzdTGxrX6bo3QT00R2sQA5n1jr/to69Q==",
+ "dev": true,
+ "requires": {
+ "rollup": "0.45.2"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "run-sequence": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz",
+ "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "fancy-log": "1.3.2",
+ "plugin-error": "0.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "0.1.15"
+ }
+ },
+ "samsam": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz",
+ "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=",
+ "dev": true
+ },
+ "sauce-connect-launcher": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.3.tgz",
+ "integrity": "sha1-0vkxrXro/avxlopEDnsgQXrKf4Y=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "adm-zip": "0.4.7",
+ "async": "2.6.0",
+ "https-proxy-agent": "1.0.0",
+ "lodash": "4.17.5",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ }
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selenium-standalone": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.13.0.tgz",
+ "integrity": "sha512-JV1+AySJ9RccsAIZlnDb8QUx/SDeVGK8j/zCJcNlbz/LCRiketU3Su0YE5Uc1raaBGpT/venof0+9Ry0oGuvYw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.6.0",
+ "commander": "2.9.0",
+ "cross-spawn": "6.0.5",
+ "debug": "3.1.0",
+ "lodash": "4.17.5",
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "progress": "2.0.0",
+ "request": "2.79.0",
+ "tar-stream": "1.5.2",
+ "urijs": "1.19.1",
+ "which": "1.3.0",
+ "yauzl": "2.9.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "lodash": "4.17.5"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nice-try": "1.0.4",
+ "path-key": "2.0.1",
+ "semver": "5.5.0",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "send": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.11.1.tgz",
+ "integrity": "sha1-G+q/1C+eJwn5kCivMHisErRwktU=",
+ "dev": true,
+ "requires": {
+ "debug": "2.1.3",
+ "depd": "1.0.1",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.1",
+ "etag": "1.5.1",
+ "fresh": "0.2.4",
+ "mime": "1.2.11",
+ "ms": "0.7.0",
+ "on-finished": "2.2.1",
+ "range-parser": "1.0.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
+ "integrity": "sha1-zoqxte6PvuK/o7Yzyrk9NmtjQY4=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.0"
+ }
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
+ "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz",
+ "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz",
+ "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz",
+ "integrity": "sha1-VMUN4E7kJpVWKSWsVmWIKRvn6eo=",
+ "dev": true,
+ "requires": {
+ "crc": "3.2.1"
+ }
+ },
+ "fresh": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz",
+ "integrity": "sha1-NYJJkgbJcjcUGQ7ddLRgT+tKYUw=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz",
+ "integrity": "sha1-hlvpTC5zl62KV9pqYzpuLzB5i4M=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz",
+ "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+ "dev": true
+ }
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.4.0"
+ }
+ }
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+ "dev": true
+ },
+ "serviceworker-cache-polyfill": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz",
+ "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "split-string": "3.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sinon": {
+ "version": "1.17.7",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz",
+ "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=",
+ "dev": true,
+ "requires": {
+ "formatio": "1.1.1",
+ "lolex": "1.3.2",
+ "samsam": "1.1.2",
+ "util": "0.10.3"
+ }
+ },
+ "sinon-chai": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz",
+ "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "0.11.2",
+ "debug": "2.6.9",
+ "define-property": "0.2.5",
+ "extend-shallow": "2.0.1",
+ "map-cache": "0.2.2",
+ "source-map": "0.5.7",
+ "source-map-resolve": "0.5.1",
+ "use": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "1.0.0",
+ "isobject": "3.0.1",
+ "snapdragon-util": "3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "1.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "socket.io": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "engine.io": "3.1.5",
+ "socket.io-adapter": "1.1.1",
+ "socket.io-client": "2.0.4",
+ "socket.io-parser": "3.1.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.6",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "3.1.3",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
+ "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "3.1.0",
+ "has-binary2": "1.0.2",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz",
+ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==",
+ "dev": true,
+ "requires": {
+ "atob": "2.0.3",
+ "decode-uri-component": "0.2.0",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.4.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.2",
+ "readable-stream": "2.3.5",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "3.0.2"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
+ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "stacky": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/stacky/-/stacky-1.3.1.tgz",
+ "integrity": "sha1-PxF+UYe5pz0j+HbWnwXIWxGAShI=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "lodash": "3.10.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "0.2.5",
+ "object-copy": "0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "0.1.6",
+ "is-data-descriptor": "0.1.4",
+ "kind-of": "5.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ },
+ "stream": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.2.tgz",
+ "integrity": "sha1-f1Nj8Ff2WSxVlfALyAon9c7B8O8=",
+ "dev": true,
+ "requires": {
+ "emitter-component": "1.1.1"
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-counter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-1.0.0.tgz",
+ "integrity": "sha1-kc8lac5NxQYf6816yyY5SloRR1E=",
+ "dev": true
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
+ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "sw-precache": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.1.tgz",
+ "integrity": "sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==",
+ "dev": true,
+ "requires": {
+ "dom-urls": "1.1.0",
+ "es6-promise": "4.2.4",
+ "glob": "7.1.2",
+ "lodash.defaults": "4.2.0",
+ "lodash.template": "4.4.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "pretty-bytes": "4.0.2",
+ "sw-toolbox": "3.6.0",
+ "update-notifier": "2.3.0"
+ },
+ "dependencies": {
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.templatesettings": "4.1.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0"
+ }
+ },
+ "pretty-bytes": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+ "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
+ "dev": true
+ }
+ }
+ },
+ "sw-toolbox": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz",
+ "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=",
+ "dev": true,
+ "requires": {
+ "path-to-regexp": "1.7.0",
+ "serviceworker-cache-polyfill": "4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.2",
+ "lodash": "4.17.5",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ }
+ },
+ "table-layout": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.3.0.tgz",
+ "integrity": "sha1-buINxIPbNxs+XIf3BO0vfHmdLJo=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "core-js": "2.5.3",
+ "deep-extend": "0.4.2",
+ "feature-detect-es6": "1.4.0",
+ "typical": "2.6.1",
+ "wordwrapjs": "2.0.0"
+ }
+ },
+ "tar-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz",
+ "integrity": "sha1-+8bG6DwaGdTLSMfZYXH8JI7/x78=",
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "end-of-stream": "1.4.1",
+ "readable-stream": "2.3.5",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "temp": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-tmpdir": "1.0.2",
+ "rimraf": "2.2.8"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "requires": {
+ "execa": "0.7.0"
+ }
+ },
+ "ternary-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-2.0.1.tgz",
+ "integrity": "sha1-Bk5Im0tb9gumpre8fy9cJ07Pgmk=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.4",
+ "fork-stream": "0.0.4",
+ "merge-stream": "1.0.1",
+ "through2": "2.0.3"
+ }
+ },
+ "test-value": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
+ "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "typical": "2.6.1"
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "thenify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
+ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "dev": true,
+ "requires": {
+ "thenify": "3.3.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.5",
+ "xtend": "4.0.1"
+ }
+ },
+ "through2-filter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
+ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "timers-ext": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz",
+ "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.40",
+ "next-tick": "1.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-absolute-glob": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
+ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "2.0.2",
+ "extend-shallow": "3.0.2",
+ "regex-not": "1.0.2",
+ "safe-regex": "1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ }
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "dev": true,
+ "requires": {
+ "punycode": "2.1.0"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.18"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.3.15",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.15.tgz",
+ "integrity": "sha512-bqtBCAINYXX/OkdnqMGpbXr+OPWc00hsozRpk+dAtfnbdk2jjKiLmyOkQ7zamg648lVMnzATL8JrSN6LmaVpYA==",
+ "dev": true,
+ "requires": {
+ "commander": "2.15.0",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz",
+ "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz",
+ "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "3.1.0",
+ "get-value": "2.0.6",
+ "is-extendable": "0.1.1",
+ "set-value": "0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1",
+ "is-extendable": "0.1.1",
+ "is-plain-object": "2.0.4",
+ "to-object-path": "0.3.0"
+ }
+ }
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "0.3.1",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "2.0.6",
+ "has-values": "0.1.4",
+ "isobject": "2.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz",
+ "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=",
+ "dev": true,
+ "requires": {
+ "boxen": "1.3.0",
+ "chalk": "2.3.2",
+ "configstore": "3.1.1",
+ "import-lazy": "2.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "urijs": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.1.tgz",
+ "integrity": "sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ }
+ },
+ "use": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
+ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "6.0.2"
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "dev": true
+ },
+ "uws": {
+ "version": "9.14.0",
+ "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
+ "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
+ "dev": true,
+ "optional": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "vali-date": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
+ "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "3.0.0",
+ "spdx-expression-parse": "3.0.0"
+ }
+ },
+ "vargs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz",
+ "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "clone-buffer": "1.0.0",
+ "clone-stats": "1.0.0",
+ "cloneable-readable": "1.1.2",
+ "remove-trailing-separator": "1.1.0",
+ "replace-ext": "1.0.0"
+ }
+ },
+ "vinyl-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz",
+ "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=",
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "through2": "2.0.3"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3",
+ "glob-stream": "3.1.18",
+ "glob-watcher": "0.0.6",
+ "graceful-fs": "3.0.11",
+ "mkdirp": "0.5.1",
+ "strip-bom": "1.0.0",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "1.1.2"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-source-stream": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz",
+ "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "walkdir": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
+ "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
+ "dev": true
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "wct-browser-legacy": {
+ "version": "0.0.1-pre.11",
+ "resolved": "https://registry.npmjs.org/wct-browser-legacy/-/wct-browser-legacy-0.0.1-pre.11.tgz",
+ "integrity": "sha512-BZ8DUAAtFAX5l/SRQhB3Gtcimazr4fHgIt3Zdi+++cEvz7TjYBDp67uVakmUXIdEg0Wpnt2n19PGxA8O0OwaUQ==",
+ "dev": true,
+ "requires": {
+ "@polymer/polymer": "3.0.0-pre.11",
+ "@polymer/sinonjs": "1.17.1",
+ "@polymer/test-fixture": "3.0.0-pre.11",
+ "@webcomponents/webcomponentsjs": "1.1.0",
+ "accessibility-developer-tools": "2.12.0",
+ "async": "1.5.2",
+ "chai": "3.5.0",
+ "lodash": "3.10.1",
+ "mocha": "3.5.3",
+ "sinon": "1.17.7",
+ "sinon-chai": "2.14.0",
+ "stacky": "1.3.1"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ }
+ }
+ },
+ "wct-local": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wct-local/-/wct-local-2.1.0.tgz",
+ "integrity": "sha512-OiMSbxp6e5tyvTbUA4VAQbw4we53EXEmekx9BbIgS/HryoQISzap5DSAE/kvpRpJ2Axt0z12d8ChxqwNflApfA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/express": "4.11.1",
+ "@types/freeport": "1.0.21",
+ "@types/launchpad": "0.6.0",
+ "@types/node": "9.4.7",
+ "@types/which": "1.3.1",
+ "chalk": "2.3.2",
+ "cleankill": "2.0.0",
+ "freeport": "1.0.5",
+ "launchpad": "0.7.0",
+ "promisify-node": "0.4.0",
+ "selenium-standalone": "6.13.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "9.4.7",
+ "resolved": "http://registry.npmjs.org/@types/node/-/node-9.4.7.tgz",
+ "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "wct-sauce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wct-sauce/-/wct-sauce-2.0.0.tgz",
+ "integrity": "sha512-amICD6iZOVJEJ4uymfdPFdk17CkSIYwHPDzDh4cH/ITYcNskZ3VB/2VPtU9ZIKuWMVdqPwfBovXcjlhn8+8idA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cleankill": "2.0.0",
+ "lodash": "3.10.1",
+ "request": "2.79.0",
+ "sauce-connect-launcher": "1.2.3",
+ "temp": "0.8.3",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "wd": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/wd/-/wd-1.6.1.tgz",
+ "integrity": "sha512-X3KnoYBqZ4Xj7phL3hWnraapl2w0N4z9lHKDFVNOpO2j3okoO2lhd9+oAFdd/qTbCNeNuGM59Pte360jx1hMVQ==",
+ "dev": true,
+ "requires": {
+ "archiver": "1.3.0",
+ "async": "2.0.1",
+ "lodash": "4.16.2",
+ "mkdirp": "0.5.1",
+ "q": "1.4.1",
+ "request": "2.79.0",
+ "underscore.string": "3.3.4",
+ "vargs": "0.1.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz",
+ "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.16.2"
+ }
+ },
+ "lodash": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz",
+ "integrity": "sha1-PmJtuCcEimmSgaihJSJjJs/A5lI=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+ "dev": true
+ }
+ }
+ },
+ "web-component-tester": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/web-component-tester/-/web-component-tester-6.5.0.tgz",
+ "integrity": "sha512-C8nK7mhLTGzm/3QcjBIzI5Pk3OLrEvup246Pc9stAD+sTvLWtH8tjVL+vU5KCOAdudKVnelGMbE4ICaNrl69+A==",
+ "dev": true,
+ "requires": {
+ "@polymer/sinonjs": "1.17.1",
+ "@polymer/test-fixture": "0.0.3",
+ "@webcomponents/webcomponentsjs": "1.1.0",
+ "accessibility-developer-tools": "2.12.0",
+ "async": "2.6.0",
+ "body-parser": "1.18.2",
+ "chai": "4.1.2",
+ "chalk": "1.1.3",
+ "cleankill": "2.0.0",
+ "express": "4.16.3",
+ "findup-sync": "1.0.0",
+ "glob": "7.1.2",
+ "lodash": "3.10.1",
+ "mocha": "3.5.3",
+ "multer": "1.3.0",
+ "nomnom": "1.8.1",
+ "polyserve": "0.23.0",
+ "promisify-node": "0.4.0",
+ "resolve": "1.5.0",
+ "semver": "5.5.0",
+ "send": "0.11.1",
+ "server-destroy": "1.0.1",
+ "sinon": "2.4.1",
+ "sinon-chai": "2.14.0",
+ "socket.io": "2.0.4",
+ "stacky": "1.3.1",
+ "update-notifier": "2.3.0",
+ "wct-local": "2.1.0",
+ "wct-sauce": "2.0.0",
+ "wd": "1.6.1"
+ },
+ "dependencies": {
+ "@polymer/test-fixture": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-0.0.3.tgz",
+ "integrity": "sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk=",
+ "dev": true
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
+ "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==",
+ "dev": true
+ }
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.1.0",
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.8"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "detect-file": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz",
+ "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=",
+ "dev": true,
+ "requires": {
+ "fs-exists-sync": "0.1.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-tilde": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
+ "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-1.0.0.tgz",
+ "integrity": "sha1-b35LV7buOkA3tEFOrt6j9Y9x4Ow=",
+ "dev": true,
+ "requires": {
+ "detect-file": "0.1.0",
+ "is-glob": "2.0.1",
+ "micromatch": "2.3.11",
+ "resolve-dir": "0.1.1"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "global-modules": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
+ "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
+ "dev": true,
+ "requires": {
+ "global-prefix": "0.1.5",
+ "is-windows": "0.2.0"
+ }
+ },
+ "global-prefix": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
+ "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.5",
+ "is-windows": "0.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.6"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "resolve-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
+ "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "1.2.2",
+ "global-modules": "0.2.3"
+ }
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ },
+ "sinon": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz",
+ "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==",
+ "dev": true,
+ "requires": {
+ "diff": "3.2.0",
+ "formatio": "1.2.0",
+ "lolex": "1.6.0",
+ "native-promise-only": "0.8.1",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.3.0",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.8"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ }
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+ "dev": true
+ },
+ "whatwg-url": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz",
+ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==",
+ "dev": true,
+ "requires": {
+ "lodash.sortby": "4.7.0",
+ "tr46": "1.0.1",
+ "webidl-conversions": "4.0.2"
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
+ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "dev": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "winston": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz",
+ "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-2.0.0.tgz",
+ "integrity": "sha1-q1X2leYRjak4WP3XDAU9HF4BrCA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
+ "dev": true,
+ "optional": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
+ "dev": true,
+ "optional": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yauzl": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz",
+ "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "fd-slicer": "1.0.1"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "zip-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
+ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "1.3.0",
+ "compress-commons": "1.2.2",
+ "lodash": "4.17.5",
+ "readable-stream": "2.3.5"
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package.json
new file mode 100644
index 00000000000..dbda3c7a156
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "@webcomponents/shadycss",
+ "version": "1.2.1",
+ "description": "Styling helpers for ShadyDOM",
+ "main": "shadycss.min.js",
+ "directories": {
+ "test": "tests"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/webcomponents/shadycss.git"
+ },
+ "author": "The Polymer Project Authors (https://polymer.github.io/AUTHORS.txt)",
+ "license": "BSD-3-Clause",
+ "keywords": [
+ "shady-css",
+ "shadycss",
+ "shadow-css",
+ "shadowcss",
+ "web-components",
+ "webcomponents",
+ "polyfill",
+ "shim"
+ ],
+ "bugs": {
+ "url": "https://github.com/webcomponents/shadycss/issues"
+ },
+ "scripts": {
+ "build": "gulp",
+ "lint": "eslint src test entrypoints",
+ "test": "npm run lint && gulp test-modules && wct"
+ },
+ "homepage": "https://webcomponents.org/polyfills",
+ "devDependencies": {
+ "@webcomponents/custom-elements": "^1.1.0",
+ "@webcomponents/html-imports": "^1.1.1",
+ "@webcomponents/shadydom": "^1.0.14",
+ "@webcomponents/template": "^1.2.4",
+ "@webcomponents/webcomponents-platform": "^1.0.0",
+ "del": "^3.0.0",
+ "es6-promise": "^4.2.4",
+ "eslint": "^4.19.1",
+ "eslint-plugin-html": "^3.2.2",
+ "google-closure-compiler": "^20170910.0.0",
+ "gulp": "^3.8.8",
+ "gulp-rename": "^1.2.2",
+ "gulp-size": "^2.1.0",
+ "gulp-sourcemaps": "^2.6.4",
+ "rollup-stream": "=1.23.1",
+ "run-sequence": "^2.2.1",
+ "vinyl-buffer": "^1.0.1",
+ "vinyl-source-stream": "^1.1.2",
+ "wct-browser-legacy": "0.0.1-pre.11",
+ "web-component-tester": "^6.5.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js
new file mode 100644
index 00000000000..e3e8adca6d3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js
@@ -0,0 +1,53 @@
+(function(){/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var l,aa="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,m={};function n(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function p(a){a=a.replace(ba,"").replace(ca,"");var b=da,c=a,e=new n;e.start=0;e.end=c.length;for(var d=e,f=0,h=c.length;f<h;f++)if("{"===c[f]){d.rules||(d.rules=[]);var g=d,k=g.rules[g.rules.length-1]||null;d=new n;d.start=f+1;d.parent=g;d.previous=k;g.rules.push(d)}else"}"===c[f]&&(d.end=f+1,d=d.parent||e);return b(e,a)}
+function da(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=ea(c),c=c.replace(fa," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=ha:c.match(ia)&&(a.type=r,a.keyframesName=a.selector.split(fa).pop()):a.type=0===c.indexOf("--")?ja:ka);if(c=a.rules)for(var e=0,d=c.length,f;e<d&&(f=c[e]);e++)da(f,b);
+return a}function ea(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(a,c){a=c;for(c=6-a.length;c--;)a="0"+a;return"\\"+a})}
+function la(a,b,c){c=void 0===c?"":c;var e="";if(a.cssText||a.rules){var d=a.rules,f;if(f=d)f=d[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var h=d.length,g;f<h&&(g=d[f]);f++)e=la(g,b,e)}else b?b=a.cssText:(b=a.cssText,b=b.replace(ma,"").replace(na,""),b=b.replace(oa,"").replace(pa,"")),(e=b.trim())&&(e=" "+e+"\n")}e&&(a.selector&&(c+=a.selector+" {\n"),c+=e,a.selector&&(c+="}\n\n"));return c}
+var ka=1,r=7,ha=4,ja=1E3,ba=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,ca=/@import[^;]*;/gim,ma=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,na=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,oa=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,pa=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,ia=/^@[^\s]*keyframes/,fa=/\s+/g;var qa=Promise.resolve();function ra(a){if(a=m[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function sa(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function ta(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a.b||(a.b=!0,qa.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a.b=!1}))};var t=!(window.ShadyDOM&&window.ShadyDOM.inUse),u;function ua(a){u=a&&a.shimcssproperties?!1:t||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?u=window.ShadyCSS.nativeCss:window.ShadyCSS?(ua(window.ShadyCSS),window.ShadyCSS=void 0):ua(window.WebComponents&&window.WebComponents.flags);var v=u;var w=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,y=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,va=/(--[\w-]+)\s*([:,;)]|$)/gi,wa=/(animation\s*:)|(animation-name\s*:)/,xa=/@media\s(.*)/,ya=/\{[^}]*\}/g;var za=new Set;function z(a,b){if(!a)return"";"string"===typeof a&&(a=p(a));b&&A(a,b);return la(a,v)}function B(a){!a.__cssRules&&a.textContent&&(a.__cssRules=p(a.textContent));return a.__cssRules||null}function Aa(a){return!!a.parent&&a.parent.type===r}function A(a,b,c,e){if(a){var d=!1,f=a.type;if(e&&f===ha){var h=a.selector.match(xa);h&&(window.matchMedia(h[1]).matches||(d=!0))}f===ka?b(a):c&&f===r?c(a):f===ja&&(d=!0);if((a=a.rules)&&!d){d=0;f=a.length;for(var g;d<f&&(g=a[d]);d++)A(g,b,c,e)}}}
+function C(a,b,c,e){var d=document.createElement("style");b&&d.setAttribute("scope",b);d.textContent=a;Ba(d,c,e);return d}var D=null;function Ba(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);D?a.compareDocumentPosition(D)===Node.DOCUMENT_POSITION_PRECEDING&&(D=a):D=a}
+function Ca(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");a:{var e=0;var d=c+3;for(var f=a.length;d<f;d++)if("("===a[d])e++;else if(")"===a[d]&&0===--e)break a;d=-1}e=a.substring(c+4,d);c=a.substring(0,c);a=Ca(a.substring(d+1),b);d=e.indexOf(",");return-1===d?b(c,e.trim(),"",a):b(c,e.substring(0,d).trim(),e.substring(d+1).trim(),a)}function E(a,b){t?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
+function F(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,s:c}};function G(){}function H(a,b,c){var e=I;a.__styleScoped?a.__styleScoped=null:Da(e,a,b||"",c)}function Da(a,b,c,e){b.nodeType===Node.ELEMENT_NODE&&Ea(b,c,e);if(b="template"===b.localName?(b.content||b.P).childNodes:b.children||b.childNodes)for(var d=0;d<b.length;d++)Da(a,b[d],c,e)}
+function Ea(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var e=a.getAttribute(Fa);c?e&&(b=e.replace("style-scope","").replace(b,""),E(a,b)):E(a,(e?e+" ":"")+"style-scope "+b)}}function J(a,b,c){var e=I,d=a.__cssBuild;t||"shady"===d?b=z(b,c):(a=F(a),b=Ga(e,b,a.is,a.s,c)+"\n\n");return b.trim()}
+function Ga(a,b,c,e,d){var f=K(c,e);c=c?Ha+c:"";return z(b,function(b){b.c||(b.selector=b.g=L(a,b,a.b,c,f),b.c=!0);d&&d(b,c,f)})}function K(a,b){return b?"[is="+a+"]":a}function L(a,b,c,e,d){var f=b.selector.split(Ia);if(!Aa(b)){b=0;for(var h=f.length,g;b<h&&(g=f[b]);b++)f[b]=c.call(a,g,e,d)}return f.join(Ia)}function Ja(a){return a.replace(M,function(a,c,e){-1<e.indexOf("+")?e=e.replace(/\+/g,"___"):-1<e.indexOf("___")&&(e=e.replace(/___/g,"+"));return":"+c+"("+e+")"})}
+G.prototype.b=function(a,b,c){var e=!1;a=a.trim();var d=M.test(a);d&&(a=a.replace(M,function(a,b,c){return":"+b+"("+c.replace(/\s/g,"")+")"}),a=Ja(a));a=a.replace(Ka,N+" $1");a=a.replace(La,function(a,d,g){e||(a=Ma(g,d,b,c),e=e||a.stop,d=a.G,g=a.value);return d+g});d&&(a=Ja(a));return a};
+function Ma(a,b,c,e){var d=a.indexOf(Na);0<=a.indexOf(N)?a=Oa(a,e):0!==d&&(a=c?Pa(a,c):a);c=!1;0<=d&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Qa,function(a,b){return" > "+b}))}a=a.replace(Ra,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+c+'"]'});return{value:a,G:b,stop:f}}function Pa(a,b){a=a.split(Sa);a[0]+=b;return a.join(Sa)}
+function Oa(a,b){var c=a.match(Ta);return(c=c&&c[2].trim()||"")?c[0].match(Ua)?a.replace(Ta,function(a,c,f){return b+f}):c.split(Ua)[0]===b?c:Va:a.replace(N,b)}function Wa(a){a.selector===Xa&&(a.selector="html")}G.prototype.c=function(a){return a.match(Na)?this.b(a,Ya):Pa(a.trim(),Ya)};aa.Object.defineProperties(G.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
+var M=/:(nth[-\w]+)\(([^)]+)\)/,Ya=":not(.style-scope)",Ia=",",La=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,Ua=/[[.:#*]/,N=":host",Xa=":root",Na="::slotted",Ka=new RegExp("^("+Na+")"),Ta=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Qa=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Ra=/(.*):dir\((?:(ltr|rtl))\)/,Ha=".",Sa=":",Fa="class",Va="should_not_match",I=new G;function Za(){}
+function $a(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var e=0;e<c.addedNodes.length;e++){var d=c.addedNodes[e];if(d.nodeType===Node.ELEMENT_NODE){var f=d.getRootNode();var h=d;var g=[];h.classList?g=Array.from(h.classList):h instanceof window.SVGElement&&h.hasAttribute("class")&&(g=h.getAttribute("class").split(/\s+/));h=g;g=h.indexOf(I.a);if((h=-1<g?h[g+1]:"")&&f===d.ownerDocument)H(d,h,!0);else if(f.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(f=
+f.host))if(f=F(f).is,h===f)for(d=window.ShadyDOM.nativeMethods.querySelectorAll.call(d,":not(."+I.a+")"),f=0;f<d.length;f++)Ea(d[f],h);else h&&H(d,h,!0),H(d,f)}}}}
+if(!t){var ab=new MutationObserver($a),bb=function(a){ab.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)bb(document);else{var cb=function(){bb(document.body)};window.HTMLImports?window.HTMLImports.whenReady(cb):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){cb();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",a)}else cb()})}Za=function(){$a(ab.takeRecords())}}
+var db=Za;function P(a,b,c,e,d){this.j=a||null;this.b=b||null;this.A=c||[];this.o=null;this.s=d||"";this.a=this.h=this.m=null}function Q(a){return a?a.__styleInfo:null}function eb(a,b){return a.__styleInfo=b}P.prototype.c=function(){return this.j};P.prototype._getStyleRules=P.prototype.c;function fb(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var gb=navigator.userAgent.match("Trident");function hb(){}function ib(a){var b={},c=[],e=0;A(a,function(a){R(a);a.index=e++;a=a.f.cssText;for(var c;c=va.exec(a);){var d=c[1];":"!==c[2]&&(b[d]=!0)}},function(a){c.push(a)});a.b=c;a=[];for(var d in b)a.push(d);return a}
+function R(a){if(!a.f){var b={},c={};S(a,c)&&(b.i=c,a.rules=null);b.cssText=a.parsedCssText.replace(ya,"").replace(w,"");a.f=b}}function S(a,b){var c=a.f;if(c){if(c.i)return Object.assign(b,c.i),!0}else{c=a.parsedCssText;for(var e;a=w.exec(c);){e=(a[2]||a[3]).trim();if("inherit"!==e||"unset"!==e)b[a[1].trim()]=e;e=!0}return e}}
+function T(a,b,c){b&&(b=0<=b.indexOf(";")?jb(a,b,c):Ca(b,function(b,d,f,h){if(!d)return b+h;(d=T(a,c[d],c))&&"initial"!==d?"apply-shim-inherit"===d&&(d="inherit"):d=T(a,c[f]||f,c)||f;return b+(d||"")+h}));return b&&b.trim()||""}
+function jb(a,b,c){b=b.split(";");for(var e=0,d,f;e<b.length;e++)if(d=b[e]){y.lastIndex=0;if(f=y.exec(d))d=T(a,c[f[1]],c);else if(f=d.indexOf(":"),-1!==f){var h=d.substring(f);h=h.trim();h=T(a,h,c)||h;d=d.substring(0,f)+h}b[e]=d&&d.lastIndexOf(";")===d.length-1?d.slice(0,-1):d||""}return b.join(";")}
+function kb(a,b){var c={},e=[];A(a,function(a){a.f||R(a);var d=a.g||a.parsedSelector;b&&a.f.i&&d&&fb.call(b,d)&&(S(a,c),a=a.index,d=parseInt(a/32,10),e[d]=(e[d]||0)|1<<a%32)},null,!0);return{i:c,key:e}}
+function lb(a,b,c,e,d){c.f||R(c);if(c.f.i){b=F(b);a=b.is;b=b.s;b=a?K(a,b):"html";var f=c.parsedSelector,h=":host > *"===f||"html"===f,g=0===f.indexOf(":host")&&!h;"shady"===e&&(h=f===b+" > *."+b||-1!==f.indexOf("html"),g=!h&&0===f.indexOf(b));"shadow"===e&&(h=":host > *"===f||"html"===f,g=g&&!h);if(h||g)e=b,g&&(c.g||(c.g=L(I,c,I.b,a?Ha+a:"",b)),e=c.g||b),d({L:e,J:g,R:h})}}
+function mb(a,b){var c={},e={},d=U,f=b&&b.__cssBuild;A(b,function(b){lb(d,a,b,f,function(d){fb.call(a.w||a,d.L)&&(d.J?S(b,c):S(b,e))})},null,!0);return{K:e,I:c}}
+function nb(a,b,c,e){var d=F(b),f=K(d.is,d.s),h=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])");d=Q(b).j;var g=ob(d,e);return J(b,d,function(b){var d="";b.f||R(b);b.f.cssText&&(d=jb(a,b.f.cssText,c));b.cssText=d;if(!t&&!Aa(b)&&b.cssText){var k=d=b.cssText;null==b.B&&(b.B=wa.test(d));if(b.B)if(null==b.v){b.v=[];for(var q in g)k=g[q],k=k(d),d!==k&&(d=k,b.v.push(q))}else{for(q=0;q<b.v.length;++q)k=g[b.v[q]],d=k(d);k=d}b.cssText=k;b.g=b.g||b.selector;d="."+e;q=b.g.split(",");
+k=0;for(var ub=q.length,O;k<ub&&(O=q[k]);k++)q[k]=O.match(h)?O.replace(f,d):d+" "+O;b.selector=q.join(",")}})}function ob(a,b){a=a.b;var c={};if(!t&&a)for(var e=0,d=a[e];e<a.length;d=a[++e]){var f=d,h=b;f.l=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+h;f.g=f.g||f.selector;f.selector=f.g.replace(f.keyframesName,f.a);c[d.keyframesName]=pb(d)}return c}function pb(a){return function(b){return b.replace(a.l,a.a)}}
+function qb(a,b){var c=U,e=B(a);a.textContent=z(e,function(a){var d=a.cssText=a.parsedCssText;a.f&&a.f.cssText&&(d=d.replace(ma,"").replace(na,""),a.cssText=jb(c,d,b))})}aa.Object.defineProperties(hb.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var U=new hb;var rb={},V=window.customElements;if(V&&!t){var sb=V.define;V.define=function(a,b,c){var e=document.createComment(" Shady DOM styles for "+a+" "),d=document.head;d.insertBefore(e,(D?D.nextSibling:null)||d.firstChild);D=e;rb[a]=e;sb.call(V,a,b,c)}};var W=new function(){this.cache={};this.a=100};function X(){this.w={};this.c=document.documentElement;var a=new n;a.rules=[];this.l=eb(this.c,new P(a));this.u=!1;this.b=this.a=null}l=X.prototype;l.D=function(){db()};l.H=function(a){return B(a)};l.N=function(a){return z(a)};
+l.prepareTemplate=function(a,b,c){if(!a.l){a.l=!0;a.name=b;a.extends=c;m[b]=a;var e=(e=a.content.querySelector("style"))?e.getAttribute("css-build")||"":"";var d=[];for(var f=a.content.querySelectorAll("style"),h=0;h<f.length;h++){var g=f[h];if(g.hasAttribute("shady-unscoped")){if(!t){var k=g.textContent;za.has(k)||(za.add(k),k=g.cloneNode(!0),document.head.appendChild(k));g.parentNode.removeChild(g)}}else d.push(g.textContent),g.parentNode.removeChild(g)}d=d.join("").trim();c={is:b,extends:c,O:e};
+t||H(a.content,b);Y(this);f=y.test(d)||w.test(d);y.lastIndex=0;w.lastIndex=0;d=p(d);f&&v&&this.a&&this.a.transformRules(d,b);a._styleAst=d;a.u=e;e=[];v||(e=ib(a._styleAst));if(!e.length||v)d=t?a.content:null,b=rb[b],f=J(c,a._styleAst),b=f.length?C(f,c.is,d,b):void 0,a.a=b;a.c=e}};
+function tb(a){!a.b&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.b=window.ShadyCSS.CustomStyleInterface,a.b.transformCallback=function(b){a.C(b)},a.b.validateCallback=function(){requestAnimationFrame(function(){(a.b.enqueued||a.u)&&a.flushCustomStyles()})})}function Y(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.ApplyShim&&(a.a=window.ShadyCSS.ApplyShim,a.a.invalidCallback=ra);tb(a)}
+l.flushCustomStyles=function(){Y(this);if(this.b){var a=this.b.processStyles();if(this.b.enqueued){if(v)for(var b=0;b<a.length;b++){var c=this.b.getStyleForCustomStyle(a[b]);if(c&&v&&this.a){var e=B(c);Y(this);this.a.transformRules(e);c.textContent=z(e)}}else for(vb(this,this.c,this.l),b=0;b<a.length;b++)(c=this.b.getStyleForCustomStyle(a[b]))&&qb(c,this.l.m);this.b.enqueued=!1;this.u&&!v&&this.styleDocument()}}};
+l.styleElement=function(a,b){var c=F(a).is,e=Q(a);if(!e){var d=F(a);e=d.is;d=d.s;var f=rb[e];e=m[e];if(e){var h=e._styleAst;var g=e.c}e=eb(a,new P(h,f,g,0,d))}a!==this.c&&(this.u=!0);b&&(e.o=e.o||{},Object.assign(e.o,b));if(v){if(e.o){b=e.o;for(var k in b)null===k?a.style.removeProperty(k):a.style.setProperty(k,b[k])}if(((k=m[c])||a===this.c)&&k&&k.a&&!sa(k)){if(sa(k)||k._applyShimValidatingVersion!==k._applyShimNextVersion)Y(this),this.a&&this.a.transformRules(k._styleAst,c),k.a.textContent=J(a,
+e.j),ta(k);t&&(c=a.shadowRoot)&&(c.querySelector("style").textContent=J(a,e.j));e.j=k._styleAst}}else if(vb(this,a,e),e.A&&e.A.length){c=e;k=F(a).is;a:{if(b=W.cache[k])for(h=b.length-1;0<=h;h--){g=b[h];b:{e=c.A;for(d=0;d<e.length;d++)if(f=e[d],g.i[f]!==c.m[f]){e=!1;break b}e=!0}if(e){b=g;break a}}b=void 0}e=b?b.styleElement:null;h=c.h;(g=b&&b.h)||(g=this.w[k]=(this.w[k]||0)+1,g=k+"-"+g);c.h=g;g=c.h;d=U;d=e?e.textContent||"":nb(d,a,c.m,g);f=Q(a);var x=f.a;x&&!t&&x!==e&&(x._useCount--,0>=x._useCount&&
+x.parentNode&&x.parentNode.removeChild(x));t?f.a?(f.a.textContent=d,e=f.a):d&&(e=C(d,g,a.shadowRoot,f.b)):e?e.parentNode||(gb&&-1<d.indexOf("@media")&&(e.textContent=d),Ba(e,null,f.b)):d&&(e=C(d,g,null,f.b));e&&(e._useCount=e._useCount||0,f.a!=e&&e._useCount++,f.a=e);g=e;t||(e=c.h,f=d=a.getAttribute("class")||"",h&&(f=d.replace(new RegExp("\\s*x-scope\\s*"+h+"\\s*","g")," ")),f+=(f?" ":"")+"x-scope "+e,d!==f&&E(a,f));b||(a=W.cache[k]||[],a.push({i:c.m,styleElement:g,h:c.h}),a.length>W.a&&a.shift(),
+W.cache[k]=a)}};function wb(a,b){return(b=b.getRootNode().host)?Q(b)?b:wb(a,b):a.c}function vb(a,b,c){a=wb(a,b);var e=Q(a);a=Object.create(e.m||null);var d=mb(b,c.j);b=kb(e.j,b).i;Object.assign(a,d.I,b,d.K);b=c.o;for(var f in b)if((d=b[f])||0===d)a[f]=d;f=U;b=Object.getOwnPropertyNames(a);for(d=0;d<b.length;d++)e=b[d],a[e]=T(f,a[e],a);c.m=a}l.styleDocument=function(a){this.styleSubtree(this.c,a)};
+l.styleSubtree=function(a,b){var c=a.shadowRoot;(c||a===this.c)&&this.styleElement(a,b);if(b=c&&(c.children||c.childNodes))for(a=0;a<b.length;a++)this.styleSubtree(b[a]);else if(a=a.children||a.childNodes)for(b=0;b<a.length;b++)this.styleSubtree(a[b])};l.C=function(a){var b=this,c=B(a);A(c,function(a){if(t)Wa(a);else{var c=I;a.selector=a.parsedSelector;Wa(a);a.selector=a.g=L(c,a,c.c,void 0,void 0)}v&&(Y(b),b.a&&b.a.transformRule(a))});v?a.textContent=z(c):this.l.j.rules.push(c)};
+l.getComputedStyleValue=function(a,b){var c;v||(c=(Q(a)||Q(wb(this,a))).m[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};l.M=function(a,b){var c=a.getRootNode();b=b?b.split(/\s/):[];c=c.host&&c.host.localName;if(!c){var e=a.getAttribute("class");if(e){e=e.split(/\s/);for(var d=0;d<e.length;d++)if(e[d]===I.a){c=e[d+1];break}}}c&&b.push(I.a,c);v||(c=Q(a))&&c.h&&b.push(U.a,c.h);E(a,b.join(" "))};l.F=function(a){return Q(a)};X.prototype.flush=X.prototype.D;
+X.prototype.prepareTemplate=X.prototype.prepareTemplate;X.prototype.styleElement=X.prototype.styleElement;X.prototype.styleDocument=X.prototype.styleDocument;X.prototype.styleSubtree=X.prototype.styleSubtree;X.prototype.getComputedStyleValue=X.prototype.getComputedStyleValue;X.prototype.setElementClass=X.prototype.M;X.prototype._styleInfoForNode=X.prototype.F;X.prototype.transformCustomStyleForDocument=X.prototype.C;X.prototype.getStyleAst=X.prototype.H;X.prototype.styleAstToString=X.prototype.N;
+X.prototype.flushCustomStyles=X.prototype.flushCustomStyles;Object.defineProperties(X.prototype,{nativeShadow:{get:function(){return t}},nativeCss:{get:function(){return v}}});var Z=new X,xb,yb;window.ShadyCSS&&(xb=window.ShadyCSS.ApplyShim,yb=window.ShadyCSS.CustomStyleInterface);
+window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.flushCustomStyles();Z.prepareTemplate(a,b,c)},styleSubtree:function(a,b){Z.flushCustomStyles();Z.styleSubtree(a,b)},styleElement:function(a){Z.flushCustomStyles();Z.styleElement(a)},styleDocument:function(a){Z.flushCustomStyles();Z.styleDocument(a)},flushCustomStyles:function(){Z.flushCustomStyles()},getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:v,nativeShadow:t};xb&&(window.ShadyCSS.ApplyShim=xb);
+yb&&(window.ShadyCSS.CustomStyleInterface=yb);}).call(this);
+
+//# sourceMappingURL=scoping-shim.min.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js.map
new file mode 100644
index 00000000000..21211ca699d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/scoping-shim.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/template-map.js"," [synthetic:util/global] ","src/css-parse.js","src/apply-shim-utils.js","src/style-settings.js","src/common-regex.js","src/unscoped-style-handler.js","src/style-util.js","src/style-transformer.js","src/document-watcher.js","src/style-info.js","src/style-properties.js","src/style-placeholder.js","src/scoping-shim.js","src/style-cache.js","src/common-utils.js","entrypoints/scoping-shim.js"],"names":["$jscomp.global","templateMap","constructor","StyleNode","parse","text","replace","RX$$module$src$css_parse.comments","RX$$module$src$css_parse.port","parseCss","root","length","n","i","l","OPEN_BRACE","p","previous","push","CLOSE_BRACE","node","t","substring","trim","ss","_expandUnicodeEscapes","RX$$module$src$css_parse.multipleSpaces","lastIndexOf","s","indexOf","AT_START","MEDIA_START","types$$module$src$css_parse.MEDIA_RULE","match","RX$$module$src$css_parse.keyframesRule","types$$module$src$css_parse.KEYFRAMES_RULE","split","pop","VAR_START","types$$module$src$css_parse.MIXIN_RULE","types$$module$src$css_parse.STYLE_RULE","r$","r","code","repeat","stringify","preserveProperties","cssText","rules","RX$$module$src$css_parse.customProp","RX$$module$src$css_parse.mixinProp","RX$$module$src$css_parse.mixinApply","RX$$module$src$css_parse.varApply","STYLE_RULE","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","port","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","promise","Promise","resolve","invalidate","elementName","template","templateIsValid","startValidatingTemplate","_validating","then","nativeShadow","window","nativeCssVariables_","calcCssVariables","settings","navigator","userAgent","CSS","supports","ShadyCSS","undefined","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","VAR_CONSUMED","ANIMATION_MATCH","MEDIA_MATCH","BRACKETED","styleTextSet","Set","toCssText","callback","forEachRule","rulesForStyle","style","textContent","isKeyframesSelector","rule","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","type","matchMedia","matches","applyCss","moniker","target","contextNode","document","createElement","setAttribute","applyStyle","lastHeadApplyNode","head","insertBefore","nextSibling","firstChild","compareDocumentPosition","position","Node","DOCUMENT_POSITION_PRECEDING","processVariableAndFallback","str","start","level","inner","end","prefix","suffix","comma","value","fallback","setElementClassRaw","element","call","getIsExtends","localName","typeExtension","is","getAttribute","extends","StyleTransformer","dom","scope","shouldRemoveScope","$jscompDefaultExport","_transformDom","selector","nodeType","ELEMENT_NODE","c$","childNodes","content","_content","children","classList","remove","SCOPE_NAME","add","c","CLASS","newValue","elementStyles","styleRules","cssBuildType","css","ext","hostScope","_calcHostScope","CSS_CLASS_PREFIX","isScoped","transformedSelector","_transformRuleCss","self","_transformComplexSelector","transformer","p$","COMPLEX_SELECTOR_SEP","join","_twiddleNthPlus","NTH","m","inside","stop","isNth","test","SLOTTED_START","HOST","SIMPLE_SELECTOR_SEP","info","_transformCompoundSelector","combinator","slottedIndex","SLOTTED","_transformHostSelector","_transformSimpleSelector","slotted","SLOTTED_PAREN","paren","DIR_PAREN","before","dir","PSEUDO_PREFIX","HOST_PAREN","SIMPLE_SELECTOR_PREFIX","host","typeSelector","SELECTOR_NO_MATCH","normalizeRootSelector","ROOT","_transformDocumentSelector","SCOPE_DOC_SELECTOR","$jscomp.global.Object.defineProperties","RegExp","flush","handler","mxns","x","mxn","documentElement","addedNodes","getRootNode","classes","Array","from","hasAttribute","idx","ownerDocument","currentScope","DOCUMENT_FRAGMENT_NODE","newScope","unscoped","j","observer","MutationObserver","observe","childList","subtree","delayedStart","body","requestAnimationFrame","readyState","listener","removeEventListener","addEventListener","takeRecords","module$src$document_watcher.flush","StyleInfo","ast","placeholder","ownStylePropertyNames","overrideStyleProperties","customStyle","scopeSelector","styleProperties","get","set","styleInfo","_getStyleRules","prototype","matchesSelector","method","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","IS_IE","StyleProperties","decorateStyles","props","keyframes","ruleIndex","decorateRule","index","propertyInfo","exec","name","onKeyframesRule","_keyframes","names","properties","collectProperties","hasProperties","Object","assign","any","valueForProperty","property","valueForProperties","fn","propertyValue","parts","lastIndex","colon","pp","slice","propertyDataFromStyles","o","selectorToMatch","parseInt","key","whenHostOrRootRule","cssBuild","parsedSelector","isRoot","isHost","hostAndRootPropertiesForScope","hostProps","rootProps","_element","transformStyles","hostSelector","hostRx","HOST_PREFIX","rxHostSelector","HOST_SUFFIX","StyleInfo$$module$src$style_info.get","keyframeTransforms","_elementKeyframeTransforms","output","input","hasAnimations","keyframeNamesToTransform","keyframe","transform","keyframesRules","keyframesNameRx","transformedKeyframesName","scopeId","_keyframesRuleTransformer","applyCustomStyle","XSCOPE_NAME","placeholderMap","ce","origDefine","wrappedDefine","clazz","options","placeHolder","createComment","after","styleCache","cache","typeMax","ScopingShim","_scopeCounter","_documentOwner","_documentOwnerStyleInfo","StyleInfo$$module$src$style_info.set","_elementsHaveApplied","_customStyleInterface","_applyShim","ScopingShim$$module$src$scoping_shim.prototype","?.prototype","ScopingShim$$module$src$scoping_shim_prototype$flush","getStyleAst","styleAstToString","prepareTemplate","_prepared","querySelector","styleTextParts","styles","querySelectorAll","scopingAttribute","has","newStyle","cloneNode","appendChild","parentNode","removeChild","__cssBuild","_ensure","_cssBuild","ownPropertyNames","shadowroot","_style","_ownPropertyNames","_ensureCustomStyleInterface","CustomStyleInterface","transformCustomStyleForDocument","flushCustomStyles","_ensureApplyShim","ApplyShim","customStyles","_revalidateCustomStyleApplyShim","_updateProperties","_applyCustomStyles","styleDocument","styleElement","overrideProps","_isRootOwner","removeProperty","setProperty","shadowRoot","list","entry","pn","cachedStyle","cacheEntry","oldScopeSelector","cachedScopeSelector","id","v","shift","_styleOwnerForNode","owner","ownerStyleInfo","create","hostAndRootProps","propertiesMatchingHost","propertyData","overrides","getOwnPropertyNames","styleSubtree","shadowChildren","_transformRule","getComputedStyleValue","getComputedStyle","getPropertyValue","setElementClass","classString","scopeName","classAttr","k$","_styleInfoForNode","defineProperties","scopingShim","elementExtends"],"mappings":"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","file":"scoping-shim.min.js","sourcesContent":["/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n",null,"/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nfunction findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport * as StyleUtil from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/* Transforms ShadowDOM styling into ShadyDOM styling\n\n* scoping:\n\n * elements in scope get scoping selector class=\"x-foo-scope\"\n * selectors re-written as follows:\n\n div button -> div.x-foo-scope button.x-foo-scope\n\n* :host -> scopeName\n\n* :host(...) -> scopeName...\n\n* ::slotted(...) -> scopeName > ...\n\n* ...:dir(ltr|rtl) -> [dir=\"ltr|rtl\"] ..., ...[dir=\"ltr|rtl\"]\n\n* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir=\"rtl\"] scopeName, scopeName[dir=\"rtl\"]\n\n*/\nconst SCOPE_NAME = 'style-scope';\n\nclass StyleTransformer {\n get SCOPE_NAME() {\n return SCOPE_NAME;\n }\n /**\n * Given a node and scope name, add a scoping class to each node\n * in the tree. This facilitates transforming css into scoped rules.\n * @param {?} node\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n dom(node, scope, shouldRemoveScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n this._transformDom(node, scope || '', shouldRemoveScope);\n }\n }\n\n _transformDom(node, selector, shouldRemoveScope) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.element(node, selector, shouldRemoveScope);\n }\n let c$ = (node.localName === 'template') ?\n (node.content || node._content).childNodes :\n node.children || node.childNodes;\n if (c$) {\n for (let i=0; i<c$.length; i++) {\n this._transformDom(c$[i], selector, shouldRemoveScope);\n }\n }\n }\n /**\n * @param {?} element\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n element(element, scope, shouldRemoveScope) {\n // note: if using classes, we add both the general 'style-scope' class\n // as well as the specific scope. This enables easy filtering of all\n // `style-scope` elements\n if (scope) {\n // note: svg on IE does not have classList so fallback to class\n if (element.classList) {\n if (shouldRemoveScope) {\n element.classList.remove(SCOPE_NAME);\n element.classList.remove(scope);\n } else {\n element.classList.add(SCOPE_NAME);\n element.classList.add(scope);\n }\n } else if (element.getAttribute) {\n let c = element.getAttribute(CLASS);\n if (shouldRemoveScope) {\n if (c) {\n let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');\n StyleUtil.setElementClassRaw(element, newValue);\n }\n } else {\n let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;\n StyleUtil.setElementClassRaw(element, newValue);\n }\n }\n }\n }\n\n /**\n * @param {?} element\n * @param {?} styleRules\n * @param {?=} callback\n */\n elementStyles(element, styleRules, callback) {\n let cssBuildType = element['__cssBuild'];\n // no need to shim selectors if settings.useNativeShadow, also\n // a shady css build will already have transformed selectors\n // NOTE: This method may be called as part of static or property shimming.\n // When there is a targeted build it will not be called for static shimming,\n // but when the property shim is used it is called and should opt out of\n // static shimming work when a proper build exists.\n let cssText = '';\n if (nativeShadow || cssBuildType === 'shady') {\n cssText = StyleUtil.toCssText(styleRules, callback);\n } else {\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n cssText = this.css(styleRules, is, typeExtension, callback) + '\\n\\n';\n }\n return cssText.trim();\n }\n\n // Given a string of cssText and a scoping string (scope), returns\n // a string of scoped css where each selector is transformed to include\n // a class created from the scope. ShadowDOM selectors are also transformed\n // (e.g. :host) to use the scoping selector.\n css(rules, scope, ext, callback) {\n let hostScope = this._calcHostScope(scope, ext);\n scope = this._calcElementScope(scope);\n let self = this;\n return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n if (!rule.isScoped) {\n self.rule(rule, scope, hostScope);\n rule.isScoped = true;\n }\n if (callback) {\n callback(rule, scope, hostScope);\n }\n });\n }\n\n _calcElementScope(scope) {\n if (scope) {\n return CSS_CLASS_PREFIX + scope;\n } else {\n return '';\n }\n }\n\n _calcHostScope(scope, ext) {\n return ext ? `[is=${scope}]` : scope;\n }\n\n rule(rule, scope, hostScope) {\n this._transformRule(rule, this._transformComplexSelector,\n scope, hostScope);\n }\n\n /**\n * transforms a css rule to a scoped rule.\n *\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRule(rule, transformer, scope, hostScope) {\n // NOTE: save transformedSelector for subsequent matching of elements\n // against selectors (e.g. when calculating style properties)\n rule['selector'] = rule.transformedSelector =\n this._transformRuleCss(rule, transformer, scope, hostScope);\n }\n\n /**\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRuleCss(rule, transformer, scope, hostScope) {\n let p$ = rule['selector'].split(COMPLEX_SELECTOR_SEP);\n // we want to skip transformation of rules that appear in keyframes,\n // because they are keyframe selectors, not element selectors.\n if (!StyleUtil.isKeyframesSelector(rule)) {\n for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {\n p$[i] = transformer.call(this, p, scope, hostScope);\n }\n }\n return p$.join(COMPLEX_SELECTOR_SEP);\n }\n\n /**\n * @param {string} selector\n * @return {string}\n */\n _twiddleNthPlus(selector) {\n return selector.replace(NTH, (m, type, inside) => {\n if (inside.indexOf('+') > -1) {\n inside = inside.replace(/\\+/g, '___');\n } else if (inside.indexOf('___') > -1) {\n inside = inside.replace(/___/g, '+');\n }\n return `:${type}(${inside})`;\n });\n }\n\n/**\n * @param {string} selector\n * @param {string} scope\n * @param {string=} hostScope\n */\n _transformComplexSelector(selector, scope, hostScope) {\n let stop = false;\n selector = selector.trim();\n // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP\n let isNth = NTH.test(selector);\n if (isNth) {\n selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\\s/g, '')})`)\n selector = this._twiddleNthPlus(selector);\n }\n selector = selector.replace(SLOTTED_START, `${HOST} $1`);\n selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {\n if (!stop) {\n let info = this._transformCompoundSelector(s, c, scope, hostScope);\n stop = stop || info.stop;\n c = info.combinator;\n s = info.value;\n }\n return c + s;\n });\n if (isNth) {\n selector = this._twiddleNthPlus(selector);\n }\n return selector;\n }\n\n _transformCompoundSelector(selector, combinator, scope, hostScope) {\n // replace :host with host scoping class\n let slottedIndex = selector.indexOf(SLOTTED);\n if (selector.indexOf(HOST) >= 0) {\n selector = this._transformHostSelector(selector, hostScope);\n // replace other selectors with scoping class\n } else if (slottedIndex !== 0) {\n selector = scope ? this._transformSimpleSelector(selector, scope) :\n selector;\n }\n // mark ::slotted() scope jump to replace with descendant selector + arg\n // also ignore left-side combinator\n let slotted = false;\n if (slottedIndex >= 0) {\n combinator = '';\n slotted = true;\n }\n // process scope jumping selectors up to the scope jump and then stop\n let stop;\n if (slotted) {\n stop = true;\n if (slotted) {\n // .zonk ::slotted(.foo) -> .zonk.scope > .foo\n selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);\n }\n }\n selector = selector.replace(DIR_PAREN, (m, before, dir) =>\n `[dir=\"${dir}\"] ${before}, ${before}[dir=\"${dir}\"]`);\n return {value: selector, combinator, stop};\n }\n\n _transformSimpleSelector(selector, scope) {\n let p$ = selector.split(PSEUDO_PREFIX);\n p$[0] += scope;\n return p$.join(PSEUDO_PREFIX);\n }\n\n // :host(...) -> scopeName...\n _transformHostSelector(selector, hostScope) {\n let m = selector.match(HOST_PAREN);\n let paren = m && m[2].trim() || '';\n if (paren) {\n if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {\n // paren starts with a type selector\n let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];\n // if the type selector is our hostScope then avoid pre-pending it\n if (typeSelector === hostScope) {\n return paren;\n // otherwise, this selector should not match in this scope so\n // output a bogus selector.\n } else {\n return SELECTOR_NO_MATCH;\n }\n } else {\n // make sure to do a replace here to catch selectors like:\n // `:host(.foo)::before`\n return selector.replace(HOST_PAREN, function(m, host, paren) {\n return hostScope + paren;\n });\n }\n // if no paren, do a straight :host replacement.\n // TODO(sorvell): this should not strictly be necessary but\n // it's needed to maintain support for `:host[foo]` type selectors\n // which have been improperly used under Shady DOM. This should be\n // deprecated.\n } else {\n return selector.replace(HOST, hostScope);\n }\n }\n\n /**\n * @param {StyleNode} rule\n */\n documentRule(rule) {\n // reset selector in case this is redone.\n rule['selector'] = rule['parsedSelector'];\n this.normalizeRootSelector(rule);\n this._transformRule(rule, this._transformDocumentSelector);\n }\n\n /**\n * @param {StyleNode} rule\n */\n normalizeRootSelector(rule) {\n if (rule['selector'] === ROOT) {\n rule['selector'] = 'html';\n }\n }\n\n/**\n * @param {string} selector\n */\n _transformDocumentSelector(selector) {\n return selector.match(SLOTTED) ?\n this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) :\n this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);\n }\n}\n\nlet NTH = /:(nth[-\\w]+)\\(([^)]+)\\)/;\nlet SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;\nlet COMPLEX_SELECTOR_SEP = ',';\nlet SIMPLE_SELECTOR_SEP = /(^|[\\s>+~]+)((?:\\[.+?\\]|[^\\s>+~=[])+)/g;\nlet SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;\nlet HOST = ':host';\nlet ROOT = ':root';\nlet SLOTTED = '::slotted';\nlet SLOTTED_START = new RegExp(`^(${SLOTTED})`);\n// NOTE: this supports 1 nested () pair for things like\n// :host(:not([selected]), more general support requires\n// parsing which seems like overkill\nlet HOST_PAREN = /(:host)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\n// similar to HOST_PAREN\nlet SLOTTED_PAREN = /(?:::slotted)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\nlet DIR_PAREN = /(.*):dir\\((?:(ltr|rtl))\\)/;\nlet CSS_CLASS_PREFIX = '.';\nlet PSEUDO_PREFIX = ':';\nlet CLASS = 'class';\nlet SELECTOR_NO_MATCH = 'should_not_match';\n\nexport default new StyleTransformer()\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport {getIsExtends} from './style-util.js';\n\nexport let flush = function() {};\n\n/**\n * @param {HTMLElement} element\n * @return {!Array<string>}\n */\nfunction getClasses(element) {\n let classes = [];\n if (element.classList) {\n classes = Array.from(element.classList);\n } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {\n classes = element.getAttribute('class').split(/\\s+/);\n }\n return classes;\n}\n\n/**\n * @param {HTMLElement} element\n * @return {string}\n */\nfunction getCurrentScope(element) {\n let classes = getClasses(element);\n let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);\n if (idx > -1) {\n return classes[idx + 1];\n }\n return '';\n}\n\n/**\n * @param {Array<MutationRecord|null>|null} mxns\n */\nfunction handler(mxns) {\n for (let x=0; x < mxns.length; x++) {\n let mxn = mxns[x];\n if (mxn.target === document.documentElement ||\n mxn.target === document.head) {\n continue;\n }\n for (let i=0; i < mxn.addedNodes.length; i++) {\n let n = mxn.addedNodes[i];\n if (n.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign\n let root = n.getRootNode();\n let currentScope = getCurrentScope(n);\n // node was scoped, but now is in document\n if (currentScope && root === n.ownerDocument) {\n StyleTransformer.dom(n, currentScope, true);\n } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let newScope;\n let host = /** @type {ShadowRoot} */(root).host;\n // element may no longer be in a shadowroot\n if (!host) {\n continue;\n }\n newScope = getIsExtends(host).is;\n if (currentScope === newScope) {\n // make sure all the subtree elements are scoped correctly\n let unscoped = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(\n n, `:not(.${StyleTransformer.SCOPE_NAME})`);\n for (let j = 0; j < unscoped.length; j++) {\n StyleTransformer.element(unscoped[j], currentScope);\n }\n continue;\n }\n if (currentScope) {\n StyleTransformer.dom(n, currentScope, true);\n }\n StyleTransformer.dom(n, newScope);\n }\n }\n }\n}\n\nif (!nativeShadow) {\n let observer = new MutationObserver(handler);\n let start = (node) => {\n observer.observe(node, {childList: true, subtree: true});\n }\n let nativeCustomElements = (window['customElements'] &&\n !window['customElements']['polyfillWrapFlushCallback']);\n // need to start immediately with native custom elements\n // TODO(dfreedm): with polyfilled HTMLImports and native custom elements\n // excessive mutations may be observed; this can be optimized via cooperation\n // with the HTMLImports polyfill.\n if (nativeCustomElements) {\n start(document);\n } else {\n let delayedStart = () => {\n start(document.body);\n }\n // use polyfill timing if it's available\n if (window['HTMLImports']) {\n window['HTMLImports']['whenReady'](delayedStart);\n // otherwise push beyond native imports being ready\n // which requires RAF + readystate interactive.\n } else {\n requestAnimationFrame(function() {\n if (document.readyState === 'loading') {\n let listener = function() {\n delayedStart();\n document.removeEventListener('readystatechange', listener);\n }\n document.addEventListener('readystatechange', listener);\n } else {\n delayedStart();\n }\n });\n }\n }\n\n flush = function() {\n handler(observer.takeRecords());\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/** @const {string} */\nconst infoKey = '__styleInfo';\n\nexport default class StyleInfo {\n /**\n * @param {Element} node\n * @return {StyleInfo}\n */\n static get(node) {\n if (node) {\n return node[infoKey];\n } else {\n return null;\n }\n }\n /**\n * @param {!Element} node\n * @param {StyleInfo} styleInfo\n * @return {StyleInfo}\n */\n static set(node, styleInfo) {\n node[infoKey] = styleInfo;\n return styleInfo;\n }\n /**\n * @param {StyleNode} ast\n * @param {Node=} placeholder\n * @param {Array<string>=} ownStylePropertyNames\n * @param {string=} elementName\n * @param {string=} typeExtension\n * @param {string=} cssBuild\n */\n constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {\n /** @type {StyleNode} */\n this.styleRules = ast || null;\n /** @type {Node} */\n this.placeholder = placeholder || null;\n /** @type {!Array<string>} */\n this.ownStylePropertyNames = ownStylePropertyNames || [];\n /** @type {Array<Object>} */\n this.overrideStyleProperties = null;\n /** @type {string} */\n this.elementName = elementName || '';\n /** @type {string} */\n this.cssBuild = cssBuild || '';\n /** @type {string} */\n this.typeExtension = typeExtension || '';\n /** @type {Object<string, string>} */\n this.styleProperties = null;\n /** @type {?string} */\n this.scopeSelector = null;\n /** @type {HTMLStyleElement} */\n this.customStyle = null;\n }\n _getStyleRules() {\n return this.styleRules;\n }\n}\n\nStyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport * as RX from './common-regex.js';\nimport StyleInfo from './style-info.js';\n\n// TODO: dedupe with shady\n/**\n * @param {string} selector\n * @return {boolean}\n * @this {Element}\n */\nconst matchesSelector = function(selector) {\n const method = this.matches || this.matchesSelector ||\n this.mozMatchesSelector || this.msMatchesSelector ||\n this.oMatchesSelector || this.webkitMatchesSelector;\n return method && method.call(this, selector);\n};\n\nconst IS_IE = navigator.userAgent.match('Trident');\n\nconst XSCOPE_NAME = 'x-scope';\n\nclass StyleProperties {\n get XSCOPE_NAME() {\n return XSCOPE_NAME;\n }\n/**\n * decorates styles with rule info and returns an array of used style property names\n *\n * @param {StyleNode} rules\n * @return {Array<string>}\n */\n decorateStyles(rules) {\n let self = this, props = {}, keyframes = [], ruleIndex = 0;\n StyleUtil.forEachRule(rules, function(rule) {\n self.decorateRule(rule);\n // mark in-order position of ast rule in styles block, used for cache key\n rule.index = ruleIndex++;\n self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);\n }, function onKeyframesRule(rule) {\n keyframes.push(rule);\n });\n // Cache all found keyframes rules for later reference:\n rules._keyframes = keyframes;\n // return this list of property names *consumes* in these styles.\n let names = [];\n for (let i in props) {\n names.push(i);\n }\n return names;\n }\n\n // decorate a single rule with property info\n decorateRule(rule) {\n if (rule.propertyInfo) {\n return rule.propertyInfo;\n }\n let info = {}, properties = {};\n let hasProperties = this.collectProperties(rule, properties);\n if (hasProperties) {\n info.properties = properties;\n // TODO(sorvell): workaround parser seeing mixins as additional rules\n rule['rules'] = null;\n }\n info.cssText = this.collectCssText(rule);\n rule.propertyInfo = info;\n return info;\n }\n\n // collects the custom properties from a rule's cssText\n collectProperties(rule, properties) {\n let info = rule.propertyInfo;\n if (info) {\n if (info.properties) {\n Object.assign(properties, info.properties);\n return true;\n }\n } else {\n let m, rx = RX.VAR_ASSIGN;\n let cssText = rule['parsedCssText'];\n let value;\n let any;\n while ((m = rx.exec(cssText))) {\n // note: group 2 is var, 3 is mixin\n value = (m[2] || m[3]).trim();\n // value of 'inherit' or 'unset' is equivalent to not setting the property here\n if (value !== 'inherit' || value !== 'unset') {\n properties[m[1].trim()] = value;\n }\n any = true;\n }\n return any;\n }\n\n }\n\n // returns cssText of properties that consume variables/mixins\n collectCssText(rule) {\n return this.collectConsumingCssText(rule['parsedCssText']);\n }\n\n // NOTE: we support consumption inside mixin assignment\n // but not production, so strip out {...}\n collectConsumingCssText(cssText) {\n return cssText.replace(RX.BRACKETED, '')\n .replace(RX.VAR_ASSIGN, '');\n }\n\n collectPropertiesInCssText(cssText, props) {\n let m;\n while ((m = RX.VAR_CONSUMED.exec(cssText))) {\n let name = m[1];\n // This regex catches all variable names, and following non-whitespace char\n // If next char is not ':', then variable is a consumer\n if (m[2] !== ':') {\n props[name] = true;\n }\n }\n }\n\n // turns custom properties into realized values.\n reify(props) {\n // big perf optimization here: reify only *own* properties\n // since this object has __proto__ of the element's scope properties\n let names = Object.getOwnPropertyNames(props);\n for (let i=0, n; i < names.length; i++) {\n n = names[i];\n props[n] = this.valueForProperty(props[n], props);\n }\n }\n\n // given a property value, returns the reified value\n // a property value may be:\n // (1) a literal value like: red or 5px;\n // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or\n // var(--a, var(--b));\n // (3) a literal mixin value like { properties }. Each of these properties\n // can have values that are: (a) literal, (b) variables, (c) @apply mixins.\n valueForProperty(property, props) {\n // case (1) default\n // case (3) defines a mixin and we have to reify the internals\n if (property) {\n if (property.indexOf(';') >=0) {\n property = this.valueForProperties(property, props);\n } else {\n // case (2) variable\n let self = this;\n let fn = function(prefix, value, fallback, suffix) {\n if (!value) {\n return prefix + suffix;\n }\n let propertyValue = self.valueForProperty(props[value], props);\n // if value is \"initial\", then the variable should be treated as unset\n if (!propertyValue || propertyValue === 'initial') {\n // fallback may be --a or var(--a) or literal\n propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||\n fallback;\n } else if (propertyValue === 'apply-shim-inherit') {\n // CSS build will replace `inherit` with `apply-shim-inherit`\n // for use with native css variables.\n // Since we have full control, we can use `inherit` directly.\n propertyValue = 'inherit';\n }\n return prefix + (propertyValue || '') + suffix;\n };\n property = StyleUtil.processVariableAndFallback(property, fn);\n }\n }\n return property && property.trim() || '';\n }\n\n // note: we do not yet support mixin within mixin\n valueForProperties(property, props) {\n let parts = property.split(';');\n for (let i=0, p, m; i<parts.length; i++) {\n if ((p = parts[i])) {\n RX.MIXIN_MATCH.lastIndex = 0;\n m = RX.MIXIN_MATCH.exec(p);\n if (m) {\n p = this.valueForProperty(props[m[1]], props);\n } else {\n let colon = p.indexOf(':');\n if (colon !== -1) {\n let pp = p.substring(colon);\n pp = pp.trim();\n pp = this.valueForProperty(pp, props) || pp;\n p = p.substring(0, colon) + pp;\n }\n }\n parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?\n // strip trailing ;\n p.slice(0, -1) :\n p || '';\n }\n }\n return parts.join(';');\n }\n\n applyProperties(rule, props) {\n let output = '';\n // dynamically added sheets may not be decorated so ensure they are.\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (rule.propertyInfo.cssText) {\n output = this.valueForProperties(rule.propertyInfo.cssText, props);\n }\n rule['cssText'] = output;\n }\n\n // Apply keyframe transformations to the cssText of a given rule. The\n // keyframeTransforms object is a map of keyframe names to transformer\n // functions which take in cssText and spit out transformed cssText.\n applyKeyframeTransforms(rule, keyframeTransforms) {\n let input = rule['cssText'];\n let output = rule['cssText'];\n if (rule.hasAnimations == null) {\n // Cache whether or not the rule has any animations to begin with:\n rule.hasAnimations = RX.ANIMATION_MATCH.test(input);\n }\n // If there are no animations referenced, we can skip transforms:\n if (rule.hasAnimations) {\n let transform;\n // If we haven't transformed this rule before, we iterate over all\n // transforms:\n if (rule.keyframeNamesToTransform == null) {\n rule.keyframeNamesToTransform = [];\n for (let keyframe in keyframeTransforms) {\n transform = keyframeTransforms[keyframe];\n output = transform(input);\n // If the transform actually changed the CSS text, we cache the\n // transform name for future use:\n if (input !== output) {\n input = output;\n rule.keyframeNamesToTransform.push(keyframe);\n }\n }\n } else {\n // If we already have a list of keyframe names that apply to this\n // rule, we apply only those keyframe name transforms:\n for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {\n transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];\n input = transform(input);\n }\n output = input;\n }\n }\n rule['cssText'] = output;\n }\n\n // Test if the rules in these styles matches the given `element` and if so,\n // collect any custom properties into `props`.\n /**\n * @param {StyleNode} rules\n * @param {Element} element\n */\n propertyDataFromStyles(rules, element) {\n let props = {}, self = this;\n // generates a unique key for these matches\n let o = [];\n // note: active rules excludes non-matching @media rules\n StyleUtil.forEachRule(rules, function(rule) {\n // TODO(sorvell): we could trim the set of rules at declaration\n // time to only include ones that have properties\n if (!rule.propertyInfo) {\n self.decorateRule(rule);\n }\n // match element against transformedSelector: selector may contain\n // unwanted uniquification and parsedSelector does not directly match\n // for :host selectors.\n let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];\n if (element && rule.propertyInfo.properties && selectorToMatch) {\n if (matchesSelector.call(element, selectorToMatch)) {\n self.collectProperties(rule, props);\n // produce numeric key for these matches for lookup\n addToBitMask(rule.index, o);\n }\n }\n }, null, true);\n return {properties: props, key: o};\n }\n\n /**\n * @param {Element} scope\n * @param {StyleNode} rule\n * @param {string|undefined} cssBuild\n * @param {function(Object)} callback\n */\n whenHostOrRootRule(scope, rule, cssBuild, callback) {\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (!rule.propertyInfo.properties) {\n return;\n }\n let {is, typeExtension} = StyleUtil.getIsExtends(scope);\n let hostScope = is ?\n StyleTransformer._calcHostScope(is, typeExtension) :\n 'html';\n let parsedSelector = rule['parsedSelector'];\n let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');\n let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;\n // build info is either in scope (when scope is an element) or in the style\n // when scope is the default scope; note: this allows default scope to have\n // mixed mode built and unbuilt styles.\n if (cssBuild === 'shady') {\n // :root -> x-foo > *.x-foo for elements and html for custom-style\n isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;\n // :host -> x-foo for elements, but sub-rules have .x-foo in them\n isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;\n }\n if (cssBuild === 'shadow') {\n isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';\n isHost = isHost && !isRoot;\n }\n if (!isRoot && !isHost) {\n return;\n }\n let selectorToMatch = hostScope;\n if (isHost) {\n // need to transform :host because `:host` does not work with `matches`\n if (!rule.transformedSelector) {\n // transform :host into a matchable selector\n rule.transformedSelector =\n StyleTransformer._transformRuleCss(\n rule,\n StyleTransformer._transformComplexSelector,\n StyleTransformer._calcElementScope(is),\n hostScope\n );\n }\n selectorToMatch = rule.transformedSelector || hostScope;\n }\n callback({\n selector: selectorToMatch,\n isHost: isHost,\n isRoot: isRoot\n });\n }\n/**\n * @param {Element} scope\n * @param {StyleNode} rules\n * @return {Object}\n */\n hostAndRootPropertiesForScope(scope, rules) {\n let hostProps = {}, rootProps = {}, self = this;\n // note: active rules excludes non-matching @media rules\n let cssBuild = rules && rules['__cssBuild'];\n StyleUtil.forEachRule(rules, function(rule) {\n // if scope is StyleDefaults, use _element for matchesSelector\n self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {\n let element = scope._element || scope;\n if (matchesSelector.call(element, info.selector)) {\n if (info.isHost) {\n self.collectProperties(rule, hostProps);\n } else {\n self.collectProperties(rule, rootProps);\n }\n }\n });\n }, null, true);\n return {rootProps: rootProps, hostProps: hostProps};\n }\n\n /**\n * @param {Element} element\n * @param {Object} properties\n * @param {string} scopeSelector\n */\n transformStyles(element, properties, scopeSelector) {\n let self = this;\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n let hostSelector = StyleTransformer\n ._calcHostScope(is, typeExtension);\n let rxHostSelector = element.extends ?\n '\\\\' + hostSelector.slice(0, -1) + '\\\\]' :\n hostSelector;\n let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +\n RX.HOST_SUFFIX);\n let rules = StyleInfo.get(element).styleRules;\n let keyframeTransforms =\n this._elementKeyframeTransforms(element, rules, scopeSelector);\n return StyleTransformer.elementStyles(element, rules, function(rule) {\n self.applyProperties(rule, properties);\n if (!nativeShadow &&\n !StyleUtil.isKeyframesSelector(rule) &&\n rule['cssText']) {\n // NOTE: keyframe transforms only scope munge animation names, so it\n // is not necessary to apply them in ShadowDOM.\n self.applyKeyframeTransforms(rule, keyframeTransforms);\n self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);\n }\n });\n }\n\n /**\n * @param {Element} element\n * @param {StyleNode} rules\n * @param {string} scopeSelector\n * @return {Object}\n */\n _elementKeyframeTransforms(element, rules, scopeSelector) {\n let keyframesRules = rules._keyframes;\n let keyframeTransforms = {};\n if (!nativeShadow && keyframesRules) {\n // For non-ShadowDOM, we transform all known keyframes rules in\n // advance for the current scope. This allows us to catch keyframes\n // rules that appear anywhere in the stylesheet:\n for (let i = 0, keyframesRule = keyframesRules[i];\n i < keyframesRules.length;\n keyframesRule = keyframesRules[++i]) {\n this._scopeKeyframes(keyframesRule, scopeSelector);\n keyframeTransforms[keyframesRule['keyframesName']] =\n this._keyframesRuleTransformer(keyframesRule);\n }\n }\n return keyframeTransforms;\n }\n\n // Generate a factory for transforming a chunk of CSS text to handle a\n // particular scoped keyframes rule.\n /**\n * @param {StyleNode} keyframesRule\n * @return {function(string):string}\n */\n _keyframesRuleTransformer(keyframesRule) {\n return function(cssText) {\n return cssText.replace(\n keyframesRule.keyframesNameRx,\n keyframesRule.transformedKeyframesName);\n };\n }\n\n/**\n * Transforms `@keyframes` names to be unique for the current host.\n * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0\n *\n * @param {StyleNode} rule\n * @param {string} scopeId\n */\n _scopeKeyframes(rule, scopeId) {\n // Animation names are of the form [\\w-], so ensure that the name regex does not partially apply\n // to similarly named keyframe names by checking for a word boundary at the beginning and\n // a non-word boundary or `-` at the end.\n rule.keyframesNameRx = new RegExp(`\\\\b${rule['keyframesName']}(?!\\\\B|-)`, 'g');\n rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n rule['selector'] = rule.transformedSelector.replace(\n rule['keyframesName'], rule.transformedKeyframesName);\n }\n\n // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):\n // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo\n // host selector: x-foo.wide -> .x-foo-42.wide\n // note: we use only the scope class (.x-foo-42) and not the hostSelector\n // (x-foo) to scope :host rules; this helps make property host rules\n // have low specificity. They are overrideable by class selectors but,\n // unfortunately, not by type selectors (e.g. overriding via\n // `.special` is ok, but not by `x-foo`).\n /**\n * @param {StyleNode} rule\n * @param {RegExp} hostRx\n * @param {string} hostSelector\n * @param {string} scopeId\n */\n _scopeSelector(rule, hostRx, hostSelector, scopeId) {\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n let selector = rule.transformedSelector;\n let scope = '.' + scopeId;\n let parts = selector.split(',');\n for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n parts[i] = p.match(hostRx) ?\n p.replace(hostSelector, scope) :\n scope + ' ' + p;\n }\n rule['selector'] = parts.join(',');\n }\n\n /**\n * @param {Element} element\n * @param {string} selector\n * @param {string} old\n */\n applyElementScopeSelector(element, selector, old) {\n let c = element.getAttribute('class') || '';\n let v = c;\n if (old) {\n v = c.replace(\n new RegExp('\\\\s*' + XSCOPE_NAME + '\\\\s*' + old + '\\\\s*', 'g'), ' ');\n }\n v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;\n if (c !== v) {\n StyleUtil.setElementClassRaw(element, v);\n }\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Object} properties\n * @param {string} selector\n * @param {HTMLStyleElement} style\n * @return {HTMLStyleElement}\n */\n applyElementStyle(element, properties, selector, style) {\n // calculate cssText to apply\n let cssText = style ? style.textContent || '' :\n this.transformStyles(element, properties, selector);\n // if shady and we have a cached style that is not style, decrement\n let styleInfo = StyleInfo.get(element);\n let s = styleInfo.customStyle;\n if (s && !nativeShadow && (s !== style)) {\n s['_useCount']--;\n if (s['_useCount'] <= 0 && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }\n // apply styling always under native or if we generated style\n // or the cached style is not in document(!)\n if (nativeShadow) {\n // update existing style only under native\n if (styleInfo.customStyle) {\n styleInfo.customStyle.textContent = cssText;\n style = styleInfo.customStyle;\n // otherwise, if we have css to apply, do so\n } else if (cssText) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,\n styleInfo.placeholder);\n }\n } else {\n // shady and no cache hit\n if (!style) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n if (cssText) {\n style = StyleUtil.applyCss(cssText, selector, null,\n styleInfo.placeholder);\n }\n // shady and cache hit but not in document\n } else if (!style.parentNode) {\n if (IS_IE && cssText.indexOf('@media') > -1) {\n // @media rules may be stale in IE 10 and 11\n // refresh the text content of the style to revalidate them.\n style.textContent = cssText;\n }\n StyleUtil.applyStyle(style, null, styleInfo.placeholder);\n }\n }\n // ensure this style is our custom style and increment its use count.\n if (style) {\n style['_useCount'] = style['_useCount'] || 0;\n // increment use count if we changed styles\n if (styleInfo.customStyle != style) {\n style['_useCount']++;\n }\n styleInfo.customStyle = style;\n }\n return style;\n }\n\n /**\n * @param {Element} style\n * @param {Object} properties\n */\n applyCustomStyle(style, properties) {\n let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));\n let self = this;\n style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n let css = rule['cssText'] = rule['parsedCssText'];\n if (rule.propertyInfo && rule.propertyInfo.cssText) {\n // remove property assignments\n // so next function isn't confused\n // NOTE: we have 3 categories of css:\n // (1) normal properties,\n // (2) custom property assignments (--foo: red;),\n // (3) custom property usage: border: var(--foo); @apply(--foo);\n // In elements, 1 and 3 are separated for efficiency; here they\n // are not and this makes this case unique.\n css = removeCustomPropAssignment(/** @type {string} */(css));\n // replace with reified properties, scenario is same as mixin\n rule['cssText'] = self.valueForProperties(css, properties);\n }\n });\n }\n}\n\n/**\n * @param {number} n\n * @param {Array<number>} bits\n */\nfunction addToBitMask(n, bits) {\n let o = parseInt(n / 32, 10);\n let v = 1 << (n % 32);\n bits[o] = (bits[o] || 0) | v;\n}\n\nexport default new StyleProperties();","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {applyStylePlaceHolder} from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/** @type {Object<string, !Node>} */\nlet placeholderMap = {};\n\n/**\n * @const {CustomElementRegistry}\n */\nconst ce = window['customElements'];\nif (ce && !nativeShadow) {\n /**\n * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}\n */\n const origDefine = ce['define'];\n /**\n * @param {string} name\n * @param {function(new:HTMLElement)} clazz\n * @param {{extends: string}=} options\n */\n const wrappedDefine = (name, clazz, options) => {\n placeholderMap[name] = applyStylePlaceHolder(name);\n origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);\n };\n ce['define'] = wrappedDefine;\n}\n\nexport default placeholderMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {parse, StyleNode} from './css-parse.js';\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport StyleProperties from './style-properties.js';\nimport placeholderMap from './style-placeholder.js';\nimport StyleInfo from './style-info.js';\nimport StyleCache from './style-cache.js';\nimport {flush as watcherFlush} from './document-watcher.js';\nimport templateMap from './template-map.js';\nimport * as ApplyShimUtils from './apply-shim-utils.js';\nimport {updateNativeProperties, detectMixin} from './common-utils.js';\nimport {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars\n\n/**\n * @const {StyleCache}\n */\nconst styleCache = new StyleCache();\n\nexport default class ScopingShim {\n constructor() {\n this._scopeCounter = {};\n this._documentOwner = document.documentElement;\n let ast = new StyleNode();\n ast['rules'] = [];\n this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));\n this._elementsHaveApplied = false;\n this._applyShim = null;\n /** @type {?CustomStyleInterfaceInterface} */\n this._customStyleInterface = null;\n }\n flush() {\n watcherFlush();\n }\n _generateScopeSelector(name) {\n let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;\n return `${name}-${id}`;\n }\n getStyleAst(style) {\n return StyleUtil.rulesForStyle(style);\n }\n styleAstToString(ast) {\n return StyleUtil.toCssText(ast);\n }\n _gatherStyles(template) {\n return StyleUtil.gatherStyleText(template.content);\n }\n _getCssBuild(template) {\n let style = template.content.querySelector('style');\n if (!style) {\n return '';\n }\n return style.getAttribute('css-build') || '';\n }\n /**\n * Prepare the styling and template for the given element type\n *\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplate(template, elementName, typeExtension) {\n if (template._prepared) {\n return;\n }\n template._prepared = true;\n template.name = elementName;\n template.extends = typeExtension;\n templateMap[elementName] = template;\n let cssBuild = this._getCssBuild(template);\n let cssText = this._gatherStyles(template);\n let info = {\n is: elementName,\n extends: typeExtension,\n __cssBuild: cssBuild,\n };\n if (!nativeShadow) {\n StyleTransformer.dom(template.content, elementName);\n }\n // check if the styling has mixin definitions or uses\n this._ensure();\n let hasMixins = detectMixin(cssText)\n let ast = parse(cssText);\n // only run the applyshim transforms if there is a mixin involved\n if (hasMixins && nativeCssVariables && this._applyShim) {\n this._applyShim['transformRules'](ast, elementName);\n }\n template['_styleAst'] = ast;\n template._cssBuild = cssBuild;\n\n let ownPropertyNames = [];\n if (!nativeCssVariables) {\n ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);\n }\n if (!ownPropertyNames.length || nativeCssVariables) {\n let root = nativeShadow ? template.content : null;\n let placeholder = placeholderMap[elementName];\n let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);\n template._style = style;\n }\n template._ownPropertyNames = ownPropertyNames;\n }\n _generateStaticStyle(info, rules, shadowroot, placeholder) {\n let cssText = StyleTransformer.elementStyles(info, rules);\n if (cssText.length) {\n return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);\n }\n }\n _prepareHost(host) {\n let {is, typeExtension} = StyleUtil.getIsExtends(host);\n let placeholder = placeholderMap[is];\n let template = templateMap[is];\n let ast;\n let ownStylePropertyNames;\n let cssBuild;\n if (template) {\n ast = template['_styleAst'];\n ownStylePropertyNames = template._ownPropertyNames;\n cssBuild = template._cssBuild;\n }\n return StyleInfo.set(host,\n new StyleInfo(\n ast,\n placeholder,\n ownStylePropertyNames,\n is,\n typeExtension,\n cssBuild\n )\n );\n }\n _ensureApplyShim() {\n if (this._applyShim) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {\n this._applyShim = window.ShadyCSS.ApplyShim;\n this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n }\n _ensureCustomStyleInterface() {\n if (this._customStyleInterface) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {\n this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);\n /** @type {function(!HTMLStyleElement)} */\n this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};\n this._customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {\n this.flushCustomStyles();\n }\n })\n };\n }\n }\n _ensure() {\n this._ensureApplyShim();\n this._ensureCustomStyleInterface();\n }\n /**\n * Flush and apply custom styles to document\n */\n flushCustomStyles() {\n this._ensure();\n if (!this._customStyleInterface) {\n return;\n }\n let customStyles = this._customStyleInterface['processStyles']();\n // early return if custom-styles don't need validation\n if (!this._customStyleInterface['enqueued']) {\n return;\n }\n if (!nativeCssVariables) {\n this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);\n this._applyCustomStyles(customStyles);\n } else {\n this._revalidateCustomStyleApplyShim(customStyles);\n }\n this._customStyleInterface['enqueued'] = false;\n // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree\n if (this._elementsHaveApplied && !nativeCssVariables) {\n this.styleDocument();\n }\n }\n /**\n * Apply styles for the given element\n *\n * @param {!HTMLElement} host\n * @param {Object=} overrideProps\n */\n styleElement(host, overrideProps) {\n let {is} = StyleUtil.getIsExtends(host);\n let styleInfo = StyleInfo.get(host);\n if (!styleInfo) {\n styleInfo = this._prepareHost(host);\n }\n // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called\n if (!this._isRootOwner(host)) {\n this._elementsHaveApplied = true;\n }\n if (overrideProps) {\n styleInfo.overrideStyleProperties =\n styleInfo.overrideStyleProperties || {};\n Object.assign(styleInfo.overrideStyleProperties, overrideProps);\n }\n if (!nativeCssVariables) {\n this._updateProperties(host, styleInfo);\n if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {\n this._applyStyleProperties(host, styleInfo);\n }\n } else {\n if (styleInfo.overrideStyleProperties) {\n updateNativeProperties(host, styleInfo.overrideStyleProperties);\n }\n let template = templateMap[is];\n // bail early if there is no shadowroot for this element\n if (!template && !this._isRootOwner(host)) {\n return;\n }\n if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {\n // update template\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this._ensure();\n this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);\n template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update instance if native shadowdom\n if (nativeShadow) {\n let root = host.shadowRoot;\n if (root) {\n let style = root.querySelector('style');\n style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n }\n }\n styleInfo.styleRules = template['_styleAst'];\n }\n }\n }\n _styleOwnerForNode(node) {\n let root = node.getRootNode();\n let host = root.host;\n if (host) {\n if (StyleInfo.get(host)) {\n return host;\n } else {\n return this._styleOwnerForNode(host);\n }\n }\n return this._documentOwner;\n }\n _isRootOwner(node) {\n return (node === this._documentOwner);\n }\n _applyStyleProperties(host, styleInfo) {\n let is = StyleUtil.getIsExtends(host).is;\n let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);\n let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;\n let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;\n let oldScopeSelector = styleInfo.scopeSelector;\n // only generate new scope if cached style is not found\n styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);\n let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);\n if (!nativeShadow) {\n StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);\n }\n if (!cacheEntry) {\n styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);\n }\n return style;\n }\n _updateProperties(host, styleInfo) {\n let owner = this._styleOwnerForNode(host);\n let ownerStyleInfo = StyleInfo.get(owner);\n let ownerProperties = ownerStyleInfo.styleProperties;\n let props = Object.create(ownerProperties || null);\n let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);\n let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);\n let propertiesMatchingHost = propertyData.properties\n Object.assign(\n props,\n hostAndRootProps.hostProps,\n propertiesMatchingHost,\n hostAndRootProps.rootProps\n );\n this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);\n StyleProperties.reify(props);\n styleInfo.styleProperties = props;\n }\n _mixinOverrideStyles(props, overrides) {\n for (let p in overrides) {\n let v = overrides[p];\n // skip override props if they are not truthy or 0\n // in order to fall back to inherited values\n if (v || v === 0) {\n props[p] = v;\n }\n }\n }\n /**\n * Update styles of the whole document\n *\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.styleSubtree(this._documentOwner, properties);\n }\n /**\n * Update styles of a subtree\n *\n * @param {!HTMLElement} host\n * @param {Object=} properties\n */\n styleSubtree(host, properties) {\n let root = host.shadowRoot;\n if (root || this._isRootOwner(host)) {\n this.styleElement(host, properties);\n }\n // process the shadowdom children of `host`\n let shadowChildren = root && (root.children || root.childNodes);\n if (shadowChildren) {\n for (let i = 0; i < shadowChildren.length; i++) {\n let c = /** @type {!HTMLElement} */(shadowChildren[i]);\n this.styleSubtree(c);\n }\n } else {\n // process the lightdom children of `host`\n let children = host.children || host.childNodes;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n let c = /** @type {!HTMLElement} */(children[i]);\n this.styleSubtree(c);\n }\n }\n }\n }\n /* Custom Style operations */\n _revalidateCustomStyleApplyShim(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n this._revalidateApplyShim(s);\n }\n }\n }\n _applyCustomStyles(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);\n }\n }\n }\n transformCustomStyleForDocument(style) {\n let ast = StyleUtil.rulesForStyle(style);\n StyleUtil.forEachRule(ast, (rule) => {\n if (nativeShadow) {\n StyleTransformer.normalizeRootSelector(rule);\n } else {\n StyleTransformer.documentRule(rule);\n }\n if (nativeCssVariables) {\n this._ensure();\n this._applyShim && this._applyShim['transformRule'](rule);\n }\n });\n if (nativeCssVariables) {\n style.textContent = StyleUtil.toCssText(ast);\n } else {\n this._documentOwnerStyleInfo.styleRules['rules'].push(ast);\n }\n }\n _revalidateApplyShim(style) {\n if (nativeCssVariables && this._applyShim) {\n let ast = StyleUtil.rulesForStyle(style);\n this._ensure();\n this._applyShim['transformRules'](ast);\n style.textContent = StyleUtil.toCssText(ast);\n }\n }\n getComputedStyleValue(element, property) {\n let value;\n if (!nativeCssVariables) {\n // element is either a style host, or an ancestor of a style host\n let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));\n value = styleInfo.styleProperties[property];\n }\n // fall back to the property value from the computed styling\n value = value || window.getComputedStyle(element).getPropertyValue(property);\n // trim whitespace that can come after the `:` in css\n // example: padding: 2px -> \" 2px\"\n return value ? value.trim() : '';\n }\n // given an element and a classString, replaces\n // the element's class with the provided classString and adds\n // any necessary ShadyCSS static and property based scoping selectors\n setElementClass(element, classString) {\n let root = element.getRootNode();\n let classes = classString ? classString.split(/\\s/) : [];\n let scopeName = root.host && root.host.localName;\n // If no scope, try to discover scope name from existing class.\n // This can occur if, for example, a template stamped element that\n // has been scoped is manipulated when not in a root.\n if (!scopeName) {\n var classAttr = element.getAttribute('class');\n if (classAttr) {\n let k$ = classAttr.split(/\\s/);\n for (let i=0; i < k$.length; i++) {\n if (k$[i] === StyleTransformer.SCOPE_NAME) {\n scopeName = k$[i+1];\n break;\n }\n }\n }\n }\n if (scopeName) {\n classes.push(StyleTransformer.SCOPE_NAME, scopeName);\n }\n if (!nativeCssVariables) {\n let styleInfo = StyleInfo.get(element);\n if (styleInfo && styleInfo.scopeSelector) {\n classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);\n }\n }\n StyleUtil.setElementClassRaw(element, classes.join(' '));\n }\n _styleInfoForNode(node) {\n return StyleInfo.get(node);\n }\n}\n\n/* exports */\nScopingShim.prototype['flush'] = ScopingShim.prototype.flush;\nScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;\nScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;\nScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;\nScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;\nScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;\nScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;\nScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;\nScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;\nScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;\nScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;\nScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;\nObject.defineProperties(ScopingShim.prototype, {\n 'nativeShadow': {\n get() {\n return nativeShadow;\n }\n },\n 'nativeCss': {\n get() {\n return nativeCssVariables;\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nexport default class StyleCache {\n constructor(typeMax = 100) {\n // map element name -> [{properties, styleElement, scopeSelector}]\n this.cache = {};\n this.typeMax = typeMax;\n }\n\n _validate(cacheEntry, properties, ownPropertyNames) {\n for (let idx = 0; idx < ownPropertyNames.length; idx++) {\n let pn = ownPropertyNames[idx];\n if (cacheEntry.properties[pn] !== properties[pn]) {\n return false;\n }\n }\n return true;\n }\n\n store(tagname, properties, styleElement, scopeSelector) {\n let list = this.cache[tagname] || [];\n list.push({properties, styleElement, scopeSelector});\n if (list.length > this.typeMax) {\n list.shift();\n }\n this.cache[tagname] = list;\n }\n\n fetch(tagname, properties, ownPropertyNames) {\n let list = this.cache[tagname];\n if (!list) {\n return;\n }\n // reverse list for most-recent lookups\n for (let idx = list.length - 1; idx >= 0; idx--) {\n let entry = list[idx];\n if (this._validate(entry, properties, ownPropertyNames)) {\n return entry;\n }\n }\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ScopingShim from '../src/scoping-shim.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ScopingShim} */\nconst scopingShim = new ScopingShim();\n\nlet ApplyShim, CustomStyleInterface;\n\nif (window['ShadyCSS']) {\n ApplyShim = window['ShadyCSS']['ApplyShim'];\n CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];\n}\n\nwindow.ShadyCSS = {\n ScopingShim: scopingShim,\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplate(template, elementName, elementExtends)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n scopingShim.flushCustomStyles();\n scopingShim.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleDocument(properties);\n },\n\n flushCustomStyles() {\n scopingShim.flushCustomStyles();\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return scopingShim.getComputedStyleValue(element, property);\n },\n\n nativeCss: nativeCssVariables,\n\n nativeShadow: nativeShadow\n};\n\nif (ApplyShim) {\n window.ShadyCSS.ApplyShim = ApplyShim;\n}\n\nif (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n}"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim-utils.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim-utils.js
new file mode 100644
index 00000000000..ff2480b1031
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim-utils.js
@@ -0,0 +1,149 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+import templateMap from './template-map.js';
+import {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars
+
+/*
+ * Utilities for handling invalidating apply-shim mixins for a given template.
+ *
+ * The invalidation strategy involves keeping track of the "current" version of a template's mixins, and updating that count when a mixin is invalidated.
+ * The template
+ */
+
+/** @const {string} */
+const CURRENT_VERSION = '_applyShimCurrentVersion';
+
+/** @const {string} */
+const NEXT_VERSION = '_applyShimNextVersion';
+
+/** @const {string} */
+const VALIDATING_VERSION = '_applyShimValidatingVersion';
+
+/**
+ * @const {Promise<void>}
+ */
+const promise = Promise.resolve();
+
+/**
+ * @param {string} elementName
+ */
+export function invalidate(elementName){
+ let template = templateMap[elementName];
+ if (template) {
+ invalidateTemplate(template);
+ }
+}
+
+/**
+ * This function can be called multiple times to mark a template invalid
+ * and signal that the style inside must be regenerated.
+ *
+ * Use `startValidatingTemplate` to begin an asynchronous validation cycle.
+ * During that cycle, call `templateIsValidating` to see if the template must
+ * be revalidated
+ * @param {HTMLTemplateElement} template
+ */
+export function invalidateTemplate(template) {
+ // default the current version to 0
+ template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;
+ // ensure the "validating for" flag exists
+ template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;
+ // increment the next version
+ template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;
+}
+
+/**
+ * @param {string} elementName
+ * @return {boolean}
+ */
+export function isValid(elementName) {
+ let template = templateMap[elementName];
+ if (template) {
+ return templateIsValid(template);
+ }
+ return true;
+}
+
+/**
+ * @param {HTMLTemplateElement} template
+ * @return {boolean}
+ */
+export function templateIsValid(template) {
+ return template[CURRENT_VERSION] === template[NEXT_VERSION];
+}
+
+/**
+ * @param {string} elementName
+ * @return {boolean}
+ */
+export function isValidating(elementName) {
+ let template = templateMap[elementName];
+ if (template) {
+ return templateIsValidating(template);
+ }
+ return false;
+}
+
+/**
+ * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.
+ * If false, the template must be validated.
+ * @param {HTMLTemplateElement} template
+ * @return {boolean}
+ */
+export function templateIsValidating(template) {
+ return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];
+}
+
+/**
+ * the template is marked as `validating` for one microtask so that all instances
+ * found in the tree crawl of `applyStyle` will update themselves,
+ * but the template will only be updated once.
+ * @param {string} elementName
+*/
+export function startValidating(elementName) {
+ let template = templateMap[elementName];
+ startValidatingTemplate(template);
+}
+
+/**
+ * Begin an asynchronous invalidation cycle.
+ * This should be called after every validation of a template
+ *
+ * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`
+ * @param {HTMLTemplateElement} template
+ */
+export function startValidatingTemplate(template) {
+ // remember that the current "next version" is the reason for this validation cycle
+ template[VALIDATING_VERSION] = template[NEXT_VERSION];
+ // however, there only needs to be one async task to clear the counters
+ if (!template._validating) {
+ template._validating = true;
+ promise.then(function() {
+ // sync the current version to let future invalidations cause a refresh cycle
+ template[CURRENT_VERSION] = template[NEXT_VERSION];
+ template._validating = false;
+ });
+ }
+}
+
+/**
+ * @return {boolean}
+ */
+export function elementsAreInvalid() {
+ for (let elementName in templateMap) {
+ let template = templateMap[elementName];
+ if (!templateIsValid(template)) {
+ return true;
+ }
+ }
+ return false;
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim.js
new file mode 100644
index 00000000000..80776b02c5e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/apply-shim.js
@@ -0,0 +1,482 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+/*
+ * The apply shim simulates the behavior of `@apply` proposed at
+ * https://tabatkins.github.io/specs/css-apply-rule/.
+ * The approach is to convert a property like this:
+ *
+ * --foo: {color: red; background: blue;}
+ *
+ * to this:
+ *
+ * --foo_-_color: red;
+ * --foo_-_background: blue;
+ *
+ * Then where `@apply --foo` is used, that is converted to:
+ *
+ * color: var(--foo_-_color);
+ * background: var(--foo_-_background);
+ *
+ * This approach generally works but there are some issues and limitations.
+ * Consider, for example, that somewhere *between* where `--foo` is set and used,
+ * another element sets it to:
+ *
+ * --foo: { border: 2px solid red; }
+ *
+ * We must now ensure that the color and background from the previous setting
+ * do not apply. This is accomplished by changing the property set to this:
+ *
+ * --foo_-_border: 2px solid red;
+ * --foo_-_color: initial;
+ * --foo_-_background: initial;
+ *
+ * This works but introduces one new issue.
+ * Consider this setup at the point where the `@apply` is used:
+ *
+ * background: orange;
+ * `@apply` --foo;
+ *
+ * In this case the background will be unset (initial) rather than the desired
+ * `orange`. We address this by altering the property set to use a fallback
+ * value like this:
+ *
+ * color: var(--foo_-_color);
+ * background: var(--foo_-_background, orange);
+ * border: var(--foo_-_border);
+ *
+ * Note that the default is retained in the property set and the `background` is
+ * the desired `orange`. This leads us to a limitation.
+ *
+ * Limitation 1:
+
+ * Only properties in the rule where the `@apply`
+ * is used are considered as default values.
+ * If another rule matches the element and sets `background` with
+ * less specificity than the rule in which `@apply` appears,
+ * the `background` will not be set.
+ *
+ * Limitation 2:
+ *
+ * When using Polymer's `updateStyles` api, new properties may not be set for
+ * `@apply` properties.
+
+*/
+
+'use strict';
+
+import {forEachRule, processVariableAndFallback, rulesForStyle, toCssText, gatherStyleText} from './style-util.js';
+import {MIXIN_MATCH, VAR_ASSIGN} from './common-regex.js';
+import {detectMixin} from './common-utils.js';
+import {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars
+
+const APPLY_NAME_CLEAN = /;\s*/m;
+const INITIAL_INHERIT = /^\s*(initial)|(inherit)\s*$/;
+const IMPORTANT = /\s*!important/;
+
+// separator used between mixin-name and mixin-property-name when producing properties
+// NOTE: plain '-' may cause collisions in user styles
+const MIXIN_VAR_SEP = '_-_';
+
+/**
+ * @typedef {!Object<string, string>}
+ */
+let PropertyEntry; // eslint-disable-line no-unused-vars
+
+/**
+ * @typedef {!Object<string, boolean>}
+ */
+let DependantsEntry; // eslint-disable-line no-unused-vars
+
+/** @typedef {{
+ * properties: PropertyEntry,
+ * dependants: DependantsEntry
+ * }}
+ */
+let MixinMapEntry; // eslint-disable-line no-unused-vars
+
+// map of mixin to property names
+// --foo: {border: 2px} -> {properties: {(--foo, ['border'])}, dependants: {'element-name': proto}}
+class MixinMap {
+ constructor() {
+ /** @type {!Object<string, !MixinMapEntry>} */
+ this._map = {};
+ }
+ /**
+ * @param {string} name
+ * @param {!PropertyEntry} props
+ */
+ set(name, props) {
+ name = name.trim();
+ this._map[name] = {
+ properties: props,
+ dependants: {}
+ }
+ }
+ /**
+ * @param {string} name
+ * @return {MixinMapEntry}
+ */
+ get(name) {
+ name = name.trim();
+ return this._map[name] || null;
+ }
+}
+
+/**
+ * Callback for when an element is marked invalid
+ * @type {?function(string)}
+ */
+let invalidCallback = null;
+
+/** @unrestricted */
+class ApplyShim {
+ constructor() {
+ /** @type {?string} */
+ this._currentElement = null;
+ /** @type {HTMLMetaElement} */
+ this._measureElement = null;
+ this._map = new MixinMap();
+ }
+ /**
+ * return true if `cssText` contains a mixin definition or consumption
+ * @param {string} cssText
+ * @return {boolean}
+ */
+ detectMixin(cssText) {
+ return detectMixin(cssText);
+ }
+
+ /**
+ * Gather styles into one style for easier processing
+ * @param {!HTMLTemplateElement} template
+ * @return {HTMLStyleElement}
+ */
+ gatherStyles(template) {
+ const styleText = gatherStyleText(template.content);
+ if (styleText) {
+ const style = /** @type {!HTMLStyleElement} */(document.createElement('style'));
+ style.textContent = styleText;
+ template.content.insertBefore(style, template.content.firstChild);
+ return style;
+ }
+ return null;
+ }
+ /**
+ * @param {!HTMLTemplateElement} template
+ * @param {string} elementName
+ * @return {StyleNode}
+ */
+ transformTemplate(template, elementName) {
+ if (template._gatheredStyle === undefined) {
+ template._gatheredStyle = this.gatherStyles(template);
+ }
+ /** @type {HTMLStyleElement} */
+ const style = template._gatheredStyle;
+ return style ? this.transformStyle(style, elementName) : null;
+ }
+ /**
+ * @param {!HTMLStyleElement} style
+ * @param {string} elementName
+ * @return {StyleNode}
+ */
+ transformStyle(style, elementName = '') {
+ let ast = rulesForStyle(style);
+ this.transformRules(ast, elementName);
+ style.textContent = toCssText(ast);
+ return ast;
+ }
+ /**
+ * @param {!HTMLStyleElement} style
+ * @return {StyleNode}
+ */
+ transformCustomStyle(style) {
+ let ast = rulesForStyle(style);
+ forEachRule(ast, (rule) => {
+ if (rule['selector'] === ':root') {
+ rule['selector'] = 'html';
+ }
+ this.transformRule(rule);
+ })
+ style.textContent = toCssText(ast);
+ return ast;
+ }
+ /**
+ * @param {StyleNode} rules
+ * @param {string} elementName
+ */
+ transformRules(rules, elementName) {
+ this._currentElement = elementName;
+ forEachRule(rules, (r) => {
+ this.transformRule(r);
+ });
+ this._currentElement = null;
+ }
+ /**
+ * @param {!StyleNode} rule
+ */
+ transformRule(rule) {
+ rule['cssText'] = this.transformCssText(rule['parsedCssText']);
+ // :root was only used for variable assignment in property shim,
+ // but generates invalid selectors with real properties.
+ // replace with `:host > *`, which serves the same effect
+ if (rule['selector'] === ':root') {
+ rule['selector'] = ':host > *';
+ }
+ }
+ /**
+ * @param {string} cssText
+ * @return {string}
+ */
+ transformCssText(cssText) {
+ // produce variables
+ cssText = cssText.replace(VAR_ASSIGN, (matchText, propertyName, valueProperty, valueMixin) =>
+ this._produceCssProperties(matchText, propertyName, valueProperty, valueMixin));
+ // consume mixins
+ return this._consumeCssProperties(cssText);
+ }
+ /**
+ * @param {string} property
+ * @return {string}
+ */
+ _getInitialValueForProperty(property) {
+ if (!this._measureElement) {
+ this._measureElement = /** @type {HTMLMetaElement} */(document.createElement('meta'));
+ this._measureElement.setAttribute('apply-shim-measure', '');
+ this._measureElement.style.all = 'initial';
+ document.head.appendChild(this._measureElement);
+ }
+ return window.getComputedStyle(this._measureElement).getPropertyValue(property);
+ }
+ /**
+ * replace mixin consumption with variable consumption
+ * @param {string} text
+ * @return {string}
+ */
+ _consumeCssProperties(text) {
+ /** @type {Array} */
+ let m = null;
+ // loop over text until all mixins with defintions have been applied
+ while((m = MIXIN_MATCH.exec(text))) {
+ let matchText = m[0];
+ let mixinName = m[1];
+ let idx = m.index;
+ // collect properties before apply to be "defaults" if mixin might override them
+ // match includes a "prefix", so find the start and end positions of @apply
+ let applyPos = idx + matchText.indexOf('@apply');
+ let afterApplyPos = idx + matchText.length;
+ // find props defined before this @apply
+ let textBeforeApply = text.slice(0, applyPos);
+ let textAfterApply = text.slice(afterApplyPos);
+ let defaults = this._cssTextToMap(textBeforeApply);
+ let replacement = this._atApplyToCssProperties(mixinName, defaults);
+ // use regex match position to replace mixin, keep linear processing time
+ text = `${textBeforeApply}${replacement}${textAfterApply}`;
+ // move regex search to _after_ replacement
+ MIXIN_MATCH.lastIndex = idx + replacement.length;
+ }
+ return text;
+ }
+ /**
+ * produce variable consumption at the site of mixin consumption
+ * `@apply` --foo; -> for all props (${propname}: var(--foo_-_${propname}, ${fallback[propname]}}))
+ * Example:
+ * border: var(--foo_-_border); padding: var(--foo_-_padding, 2px)
+ *
+ * @param {string} mixinName
+ * @param {Object} fallbacks
+ * @return {string}
+ */
+ _atApplyToCssProperties(mixinName, fallbacks) {
+ mixinName = mixinName.replace(APPLY_NAME_CLEAN, '');
+ let vars = [];
+ let mixinEntry = this._map.get(mixinName);
+ // if we depend on a mixin before it is created
+ // make a sentinel entry in the map to add this element as a dependency for when it is defined.
+ if (!mixinEntry) {
+ this._map.set(mixinName, {});
+ mixinEntry = this._map.get(mixinName);
+ }
+ if (mixinEntry) {
+ if (this._currentElement) {
+ mixinEntry.dependants[this._currentElement] = true;
+ }
+ let p, parts, f;
+ const properties = mixinEntry.properties;
+ for (p in properties) {
+ f = fallbacks && fallbacks[p];
+ parts = [p, ': var(', mixinName, MIXIN_VAR_SEP, p];
+ if (f) {
+ parts.push(',', f.replace(IMPORTANT, ''));
+ }
+ parts.push(')');
+ if (IMPORTANT.test(properties[p])) {
+ parts.push(' !important');
+ }
+ vars.push(parts.join(''));
+ }
+ }
+ return vars.join('; ');
+ }
+
+ /**
+ * @param {string} property
+ * @param {string} value
+ * @return {string}
+ */
+ _replaceInitialOrInherit(property, value) {
+ let match = INITIAL_INHERIT.exec(value);
+ if (match) {
+ if (match[1]) {
+ // initial
+ // replace `initial` with the concrete initial value for this property
+ value = this._getInitialValueForProperty(property);
+ } else {
+ // inherit
+ // with this purposfully illegal value, the variable will be invalid at
+ // compute time (https://www.w3.org/TR/css-variables/#invalid-at-computed-value-time)
+ // and for inheriting values, will behave similarly
+ // we cannot support the same behavior for non inheriting values like 'border'
+ value = 'apply-shim-inherit';
+ }
+ }
+ return value;
+ }
+
+ /**
+ * "parse" a mixin definition into a map of properties and values
+ * cssTextToMap('border: 2px solid black') -> ('border', '2px solid black')
+ * @param {string} text
+ * @return {!Object<string, string>}
+ */
+ _cssTextToMap(text) {
+ let props = text.split(';');
+ let property, value;
+ let out = {};
+ for (let i = 0, p, sp; i < props.length; i++) {
+ p = props[i];
+ if (p) {
+ sp = p.split(':');
+ // ignore lines that aren't definitions like @media
+ if (sp.length > 1) {
+ property = sp[0].trim();
+ // some properties may have ':' in the value, like data urls
+ value = this._replaceInitialOrInherit(property, sp.slice(1).join(':'));
+ out[property] = value;
+ }
+ }
+ }
+ return out;
+ }
+
+ /**
+ * @param {MixinMapEntry} mixinEntry
+ */
+ _invalidateMixinEntry(mixinEntry) {
+ if (!invalidCallback) {
+ return;
+ }
+ for (let elementName in mixinEntry.dependants) {
+ if (elementName !== this._currentElement) {
+ invalidCallback(elementName);
+ }
+ }
+ }
+
+ /**
+ * @param {string} matchText
+ * @param {string} propertyName
+ * @param {?string} valueProperty
+ * @param {?string} valueMixin
+ * @return {string}
+ */
+ _produceCssProperties(matchText, propertyName, valueProperty, valueMixin) {
+ // handle case where property value is a mixin
+ if (valueProperty) {
+ // form: --mixin2: var(--mixin1), where --mixin1 is in the map
+ processVariableAndFallback(valueProperty, (prefix, value) => {
+ if (value && this._map.get(value)) {
+ valueMixin = `@apply ${value};`
+ }
+ });
+ }
+ if (!valueMixin) {
+ return matchText;
+ }
+ let mixinAsProperties = this._consumeCssProperties('' + valueMixin);
+ let prefix = matchText.slice(0, matchText.indexOf('--'));
+ let mixinValues = this._cssTextToMap(mixinAsProperties);
+ let combinedProps = mixinValues;
+ let mixinEntry = this._map.get(propertyName);
+ let oldProps = mixinEntry && mixinEntry.properties;
+ if (oldProps) {
+ // NOTE: since we use mixin, the map of properties is updated here
+ // and this is what we want.
+ combinedProps = Object.assign(Object.create(oldProps), mixinValues);
+ } else {
+ this._map.set(propertyName, combinedProps);
+ }
+ let out = [];
+ let p, v;
+ // set variables defined by current mixin
+ let needToInvalidate = false;
+ for (p in combinedProps) {
+ v = mixinValues[p];
+ // if property not defined by current mixin, set initial
+ if (v === undefined) {
+ v = 'initial';
+ }
+ if (oldProps && !(p in oldProps)) {
+ needToInvalidate = true;
+ }
+ out.push(`${propertyName}${MIXIN_VAR_SEP}${p}: ${v}`);
+ }
+ if (needToInvalidate) {
+ this._invalidateMixinEntry(mixinEntry);
+ }
+ if (mixinEntry) {
+ mixinEntry.properties = combinedProps;
+ }
+ // because the mixinMap is global, the mixin might conflict with
+ // a different scope's simple variable definition:
+ // Example:
+ // some style somewhere:
+ // --mixin1:{ ... }
+ // --mixin2: var(--mixin1);
+ // some other element:
+ // --mixin1: 10px solid red;
+ // --foo: var(--mixin1);
+ // In this case, we leave the original variable definition in place.
+ if (valueProperty) {
+ prefix = `${matchText};${prefix}`;
+ }
+ return `${prefix}${out.join('; ')};`;
+ }
+}
+
+/* exports */
+ApplyShim.prototype['detectMixin'] = ApplyShim.prototype.detectMixin;
+ApplyShim.prototype['transformStyle'] = ApplyShim.prototype.transformStyle;
+ApplyShim.prototype['transformCustomStyle'] = ApplyShim.prototype.transformCustomStyle;
+ApplyShim.prototype['transformRules'] = ApplyShim.prototype.transformRules;
+ApplyShim.prototype['transformRule'] = ApplyShim.prototype.transformRule;
+ApplyShim.prototype['transformTemplate'] = ApplyShim.prototype.transformTemplate;
+ApplyShim.prototype['_separator'] = MIXIN_VAR_SEP;
+Object.defineProperty(ApplyShim.prototype, 'invalidCallback', {
+ /** @return {?function(string)} */
+ get() {
+ return invalidCallback;
+ },
+ /** @param {?function(string)} cb */
+ set(cb) {
+ invalidCallback = cb;
+ }
+});
+
+export default ApplyShim;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-regex.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-regex.js
new file mode 100644
index 00000000000..126fc15c141
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-regex.js
@@ -0,0 +1,19 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+export const VAR_ASSIGN = /(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi;
+export const MIXIN_MATCH = /(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi;
+export const VAR_CONSUMED = /(--[\w-]+)\s*([:,;)]|$)/gi;
+export const ANIMATION_MATCH = /(animation\s*:)|(animation-name\s*:)/;
+export const MEDIA_MATCH = /@media\s(.*)/;
+export const IS_VAR = /^--/;
+export const BRACKETED = /\{[^}]*\}/g;
+export const HOST_PREFIX = '(?:^|[^.#[:])';
+export const HOST_SUFFIX = '($|[.:[\\s>+~])';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-utils.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-utils.js
new file mode 100644
index 00000000000..863250be2f4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/common-utils.js
@@ -0,0 +1,59 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';
+
+/**
+ * @param {Element} element
+ * @param {Object=} properties
+ */
+export function updateNativeProperties(element, properties) {
+ // remove previous properties
+ for (let p in properties) {
+ // NOTE: for bc with shim, don't apply null values.
+ if (p === null) {
+ element.style.removeProperty(p);
+ } else {
+ element.style.setProperty(p, properties[p]);
+ }
+ }
+}
+
+/**
+ * @param {Element} element
+ * @param {string} property
+ * @return {string}
+ */
+export function getComputedStyleValue(element, property) {
+ /**
+ * @const {string}
+ */
+ const value = window.getComputedStyle(element).getPropertyValue(property);
+ if (!value) {
+ return '';
+ } else {
+ return value.trim();
+ }
+}
+
+/**
+ * return true if `cssText` contains a mixin definition or consumption
+ * @param {string} cssText
+ * @return {boolean}
+ */
+export function detectMixin(cssText) {
+ const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);
+ // reset state of the regexes
+ MIXIN_MATCH.lastIndex = 0;
+ VAR_ASSIGN.lastIndex = 0;
+ return has;
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/css-parse.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/css-parse.js
new file mode 100644
index 00000000000..8a8fb1cd9ea
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/css-parse.js
@@ -0,0 +1,264 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+/*
+Extremely simple css parser. Intended to be not more than what we need
+and definitely not necessarily correct =).
+*/
+
+'use strict';
+
+/** @unrestricted */
+class StyleNode {
+ constructor() {
+ /** @type {number} */
+ this['start'] = 0;
+ /** @type {number} */
+ this['end'] = 0;
+ /** @type {StyleNode} */
+ this['previous'] = null;
+ /** @type {StyleNode} */
+ this['parent'] = null;
+ /** @type {Array<StyleNode>} */
+ this['rules'] = null;
+ /** @type {string} */
+ this['parsedCssText'] = '';
+ /** @type {string} */
+ this['cssText'] = '';
+ /** @type {boolean} */
+ this['atRule'] = false;
+ /** @type {number} */
+ this['type'] = 0;
+ /** @type {string} */
+ this['keyframesName'] = '';
+ /** @type {string} */
+ this['selector'] = '';
+ /** @type {string} */
+ this['parsedSelector'] = '';
+ }
+}
+
+export {StyleNode}
+
+// given a string of css, return a simple rule tree
+/**
+ * @param {string} text
+ * @return {StyleNode}
+ */
+export function parse(text) {
+ text = clean(text);
+ return parseCss(lex(text), text);
+}
+
+// remove stuff we don't care about that may hinder parsing
+/**
+ * @param {string} cssText
+ * @return {string}
+ */
+function clean(cssText) {
+ return cssText.replace(RX.comments, '').replace(RX.port, '');
+}
+
+// super simple {...} lexer that returns a node tree
+/**
+ * @param {string} text
+ * @return {StyleNode}
+ */
+function lex(text) {
+ let root = new StyleNode();
+ root['start'] = 0;
+ root['end'] = text.length
+ let n = root;
+ for (let i = 0, l = text.length; i < l; i++) {
+ if (text[i] === OPEN_BRACE) {
+ if (!n['rules']) {
+ n['rules'] = [];
+ }
+ let p = n;
+ let previous = p['rules'][p['rules'].length - 1] || null;
+ n = new StyleNode();
+ n['start'] = i + 1;
+ n['parent'] = p;
+ n['previous'] = previous;
+ p['rules'].push(n);
+ } else if (text[i] === CLOSE_BRACE) {
+ n['end'] = i + 1;
+ n = n['parent'] || root;
+ }
+ }
+ return root;
+}
+
+// add selectors/cssText to node tree
+/**
+ * @param {StyleNode} node
+ * @param {string} text
+ * @return {StyleNode}
+ */
+function parseCss(node, text) {
+ let t = text.substring(node['start'], node['end'] - 1);
+ node['parsedCssText'] = node['cssText'] = t.trim();
+ if (node['parent']) {
+ let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];
+ t = text.substring(ss, node['start'] - 1);
+ t = _expandUnicodeEscapes(t);
+ t = t.replace(RX.multipleSpaces, ' ');
+ // TODO(sorvell): ad hoc; make selector include only after last ;
+ // helps with mixin syntax
+ t = t.substring(t.lastIndexOf(';') + 1);
+ let s = node['parsedSelector'] = node['selector'] = t.trim();
+ node['atRule'] = (s.indexOf(AT_START) === 0);
+ // note, support a subset of rule types...
+ if (node['atRule']) {
+ if (s.indexOf(MEDIA_START) === 0) {
+ node['type'] = types.MEDIA_RULE;
+ } else if (s.match(RX.keyframesRule)) {
+ node['type'] = types.KEYFRAMES_RULE;
+ node['keyframesName'] =
+ node['selector'].split(RX.multipleSpaces).pop();
+ }
+ } else {
+ if (s.indexOf(VAR_START) === 0) {
+ node['type'] = types.MIXIN_RULE;
+ } else {
+ node['type'] = types.STYLE_RULE;
+ }
+ }
+ }
+ let r$ = node['rules'];
+ if (r$) {
+ for (let i = 0, l = r$.length, r;
+ (i < l) && (r = r$[i]); i++) {
+ parseCss(r, text);
+ }
+ }
+ return node;
+}
+
+/**
+ * conversion of sort unicode escapes with spaces like `\33 ` (and longer) into
+ * expanded form that doesn't require trailing space `\000033`
+ * @param {string} s
+ * @return {string}
+ */
+function _expandUnicodeEscapes(s) {
+ return s.replace(/\\([0-9a-f]{1,6})\s/gi, function() {
+ let code = arguments[1],
+ repeat = 6 - code.length;
+ while (repeat--) {
+ code = '0' + code;
+ }
+ return '\\' + code;
+ });
+}
+
+/**
+ * stringify parsed css.
+ * @param {StyleNode} node
+ * @param {boolean=} preserveProperties
+ * @param {string=} text
+ * @return {string}
+ */
+export function stringify(node, preserveProperties, text = '') {
+ // calc rule cssText
+ let cssText = '';
+ if (node['cssText'] || node['rules']) {
+ let r$ = node['rules'];
+ if (r$ && !_hasMixinRules(r$)) {
+ for (let i = 0, l = r$.length, r;
+ (i < l) && (r = r$[i]); i++) {
+ cssText = stringify(r, preserveProperties, cssText);
+ }
+ } else {
+ cssText = preserveProperties ? node['cssText'] :
+ removeCustomProps(node['cssText']);
+ cssText = cssText.trim();
+ if (cssText) {
+ cssText = ' ' + cssText + '\n';
+ }
+ }
+ }
+ // emit rule if there is cssText
+ if (cssText) {
+ if (node['selector']) {
+ text += node['selector'] + ' ' + OPEN_BRACE + '\n';
+ }
+ text += cssText;
+ if (node['selector']) {
+ text += CLOSE_BRACE + '\n\n';
+ }
+ }
+ return text;
+}
+
+/**
+ * @param {Array<StyleNode>} rules
+ * @return {boolean}
+ */
+function _hasMixinRules(rules) {
+ let r = rules[0];
+ return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;
+}
+
+/**
+ * @param {string} cssText
+ * @return {string}
+ */
+function removeCustomProps(cssText) {
+ cssText = removeCustomPropAssignment(cssText);
+ return removeCustomPropApply(cssText);
+}
+
+/**
+ * @param {string} cssText
+ * @return {string}
+ */
+export function removeCustomPropAssignment(cssText) {
+ return cssText
+ .replace(RX.customProp, '')
+ .replace(RX.mixinProp, '');
+}
+
+/**
+ * @param {string} cssText
+ * @return {string}
+ */
+function removeCustomPropApply(cssText) {
+ return cssText
+ .replace(RX.mixinApply, '')
+ .replace(RX.varApply, '');
+}
+
+/** @enum {number} */
+export const types = {
+ STYLE_RULE: 1,
+ KEYFRAMES_RULE: 7,
+ MEDIA_RULE: 4,
+ MIXIN_RULE: 1000
+}
+
+const OPEN_BRACE = '{';
+const CLOSE_BRACE = '}';
+
+// helper regexp's
+const RX = {
+ comments: /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
+ port: /@import[^;]*;/gim,
+ customProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,
+ mixinProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,
+ mixinApply: /@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,
+ varApply: /[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,
+ keyframesRule: /^@[^\s]*keyframes/,
+ multipleSpaces: /\s+/g
+}
+
+const VAR_START = '--';
+const MEDIA_START = '@media';
+const AT_START = '@';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/custom-style-interface.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/custom-style-interface.js
new file mode 100644
index 00000000000..d0389b87b67
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/custom-style-interface.js
@@ -0,0 +1,162 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import documentWait from './document-wait.js';
+
+/**
+ * @typedef {HTMLStyleElement | {getStyle: function():HTMLStyleElement}}
+ */
+export let CustomStyleProvider;
+
+const SEEN_MARKER = '__seenByShadyCSS';
+const CACHED_STYLE = '__shadyCSSCachedStyle';
+
+/** @type {?function(!HTMLStyleElement)} */
+let transformFn = null;
+
+/** @type {?function()} */
+let validateFn = null;
+
+/**
+This interface is provided to add document-level <style> elements to ShadyCSS for processing.
+These styles must be processed by ShadyCSS to simulate ShadowRoot upper-bound encapsulation from outside styles
+In addition, these styles may also need to be processed for @apply rules and CSS Custom Properties
+
+To add document-level styles to ShadyCSS, one can call `ShadyCSS.addDocumentStyle(styleElement)` or `ShadyCSS.addDocumentStyle({getStyle: () => styleElement})`
+
+In addition, if the process used to discover document-level styles can be synchronously flushed, one should set `ShadyCSS.documentStyleFlush`.
+This function will be called when calculating styles.
+
+An example usage of the document-level styling api can be found in `examples/document-style-lib.js`
+
+@unrestricted
+*/
+export default class CustomStyleInterface {
+ constructor() {
+ /** @type {!Array<!CustomStyleProvider>} */
+ this['customStyles'] = [];
+ this['enqueued'] = false;
+ // NOTE(dfreedm): use quotes here to prevent closure inlining to `function(){}`;
+ documentWait(() => {
+ if (window['ShadyCSS']['flushCustomStyles']) {
+ window['ShadyCSS']['flushCustomStyles']();
+ }
+ })
+ }
+ /**
+ * Queue a validation for new custom styles to batch style recalculations
+ */
+ enqueueDocumentValidation() {
+ if (this['enqueued'] || !validateFn) {
+ return;
+ }
+ this['enqueued'] = true;
+ documentWait(validateFn);
+ }
+ /**
+ * @param {!HTMLStyleElement} style
+ */
+ addCustomStyle(style) {
+ if (!style[SEEN_MARKER]) {
+ style[SEEN_MARKER] = true;
+ this['customStyles'].push(style);
+ this.enqueueDocumentValidation();
+ }
+ }
+ /**
+ * @param {!CustomStyleProvider} customStyle
+ * @return {HTMLStyleElement}
+ */
+ getStyleForCustomStyle(customStyle) {
+ if (customStyle[CACHED_STYLE]) {
+ return customStyle[CACHED_STYLE];
+ }
+ let style;
+ if (customStyle['getStyle']) {
+ style = customStyle['getStyle']();
+ } else {
+ style = customStyle;
+ }
+ return style;
+ }
+ /**
+ * @return {!Array<!CustomStyleProvider>}
+ */
+ processStyles() {
+ const cs = this['customStyles'];
+ for (let i = 0; i < cs.length; i++) {
+ const customStyle = cs[i];
+ if (customStyle[CACHED_STYLE]) {
+ continue;
+ }
+ const style = this.getStyleForCustomStyle(customStyle);
+ if (style) {
+ // HTMLImports polyfill may have cloned the style into the main document,
+ // which is referenced with __appliedElement.
+ const styleToTransform = /** @type {!HTMLStyleElement} */(style['__appliedElement'] || style);
+ if (transformFn) {
+ transformFn(styleToTransform);
+ }
+ customStyle[CACHED_STYLE] = styleToTransform;
+ }
+ }
+ return cs;
+ }
+}
+
+CustomStyleInterface.prototype['addCustomStyle'] = CustomStyleInterface.prototype.addCustomStyle;
+CustomStyleInterface.prototype['getStyleForCustomStyle'] = CustomStyleInterface.prototype.getStyleForCustomStyle;
+CustomStyleInterface.prototype['processStyles'] = CustomStyleInterface.prototype.processStyles;
+
+Object.defineProperties(CustomStyleInterface.prototype, {
+ 'transformCallback': {
+ /** @return {?function(!HTMLStyleElement)} */
+ get() {
+ return transformFn;
+ },
+ /** @param {?function(!HTMLStyleElement)} fn */
+ set(fn) {
+ transformFn = fn;
+ }
+ },
+ 'validateCallback': {
+ /** @return {?function()} */
+ get() {
+ return validateFn;
+ },
+ /**
+ * @param {?function()} fn
+ * @this {CustomStyleInterface}
+ */
+ set(fn) {
+ let needsEnqueue = false;
+ if (!validateFn) {
+ needsEnqueue = true;
+ }
+ validateFn = fn;
+ if (needsEnqueue) {
+ this.enqueueDocumentValidation();
+ }
+ },
+ }
+})
+
+/** @typedef {{
+ * customStyles: !Array<!CustomStyleProvider>,
+ * addCustomStyle: function(!CustomStyleProvider),
+ * getStyleForCustomStyle: function(!CustomStyleProvider): HTMLStyleElement,
+ * findStyles: function(),
+ * transformCallback: ?function(!HTMLStyleElement),
+ * validateCallback: ?function()
+ * }}
+ */
+export let CustomStyleInterfaceInterface;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-wait.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-wait.js
new file mode 100644
index 00000000000..398ca056820
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-wait.js
@@ -0,0 +1,45 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+/** @type {Promise<void>} */
+let readyPromise = null;
+
+/** @type {?function(?function())} */
+let whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;
+
+/** @type {function()} */
+let resolveFn;
+
+/**
+ * @param {?function()} callback
+ */
+export default function documentWait(callback) {
+ requestAnimationFrame(function() {
+ if (whenReady) {
+ whenReady(callback)
+ } else {
+ if (!readyPromise) {
+ readyPromise = new Promise((resolve) => {resolveFn = resolve});
+ if (document.readyState === 'complete') {
+ resolveFn();
+ } else {
+ document.addEventListener('readystatechange', () => {
+ if (document.readyState === 'complete') {
+ resolveFn();
+ }
+ });
+ }
+ }
+ readyPromise.then(function(){ callback && callback(); });
+ }
+ });
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-watcher.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-watcher.js
new file mode 100644
index 00000000000..5ac1543f9f0
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/document-watcher.js
@@ -0,0 +1,133 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {nativeShadow} from './style-settings.js';
+import StyleTransformer from './style-transformer.js';
+import {getIsExtends} from './style-util.js';
+
+export let flush = function() {};
+
+/**
+ * @param {HTMLElement} element
+ * @return {!Array<string>}
+ */
+function getClasses(element) {
+ let classes = [];
+ if (element.classList) {
+ classes = Array.from(element.classList);
+ } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {
+ classes = element.getAttribute('class').split(/\s+/);
+ }
+ return classes;
+}
+
+/**
+ * @param {HTMLElement} element
+ * @return {string}
+ */
+function getCurrentScope(element) {
+ let classes = getClasses(element);
+ let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);
+ if (idx > -1) {
+ return classes[idx + 1];
+ }
+ return '';
+}
+
+/**
+ * @param {Array<MutationRecord|null>|null} mxns
+ */
+function handler(mxns) {
+ for (let x=0; x < mxns.length; x++) {
+ let mxn = mxns[x];
+ if (mxn.target === document.documentElement ||
+ mxn.target === document.head) {
+ continue;
+ }
+ for (let i=0; i < mxn.addedNodes.length; i++) {
+ let n = mxn.addedNodes[i];
+ if (n.nodeType !== Node.ELEMENT_NODE) {
+ continue;
+ }
+ n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign
+ let root = n.getRootNode();
+ let currentScope = getCurrentScope(n);
+ // node was scoped, but now is in document
+ if (currentScope && root === n.ownerDocument) {
+ StyleTransformer.dom(n, currentScope, true);
+ } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
+ let newScope;
+ let host = /** @type {ShadowRoot} */(root).host;
+ // element may no longer be in a shadowroot
+ if (!host) {
+ continue;
+ }
+ newScope = getIsExtends(host).is;
+ if (currentScope === newScope) {
+ // make sure all the subtree elements are scoped correctly
+ let unscoped = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(
+ n, `:not(.${StyleTransformer.SCOPE_NAME})`);
+ for (let j = 0; j < unscoped.length; j++) {
+ StyleTransformer.element(unscoped[j], currentScope);
+ }
+ continue;
+ }
+ if (currentScope) {
+ StyleTransformer.dom(n, currentScope, true);
+ }
+ StyleTransformer.dom(n, newScope);
+ }
+ }
+ }
+}
+
+if (!nativeShadow) {
+ let observer = new MutationObserver(handler);
+ let start = (node) => {
+ observer.observe(node, {childList: true, subtree: true});
+ }
+ let nativeCustomElements = (window['customElements'] &&
+ !window['customElements']['polyfillWrapFlushCallback']);
+ // need to start immediately with native custom elements
+ // TODO(dfreedm): with polyfilled HTMLImports and native custom elements
+ // excessive mutations may be observed; this can be optimized via cooperation
+ // with the HTMLImports polyfill.
+ if (nativeCustomElements) {
+ start(document);
+ } else {
+ let delayedStart = () => {
+ start(document.body);
+ }
+ // use polyfill timing if it's available
+ if (window['HTMLImports']) {
+ window['HTMLImports']['whenReady'](delayedStart);
+ // otherwise push beyond native imports being ready
+ // which requires RAF + readystate interactive.
+ } else {
+ requestAnimationFrame(function() {
+ if (document.readyState === 'loading') {
+ let listener = function() {
+ delayedStart();
+ document.removeEventListener('readystatechange', listener);
+ }
+ document.addEventListener('readystatechange', listener);
+ } else {
+ delayedStart();
+ }
+ });
+ }
+ }
+
+ flush = function() {
+ handler(observer.takeRecords());
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/scoping-shim.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/scoping-shim.js
new file mode 100644
index 00000000000..00225ecd0aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/scoping-shim.js
@@ -0,0 +1,470 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {parse, StyleNode} from './css-parse.js';
+import {nativeShadow, nativeCssVariables} from './style-settings.js';
+import StyleTransformer from './style-transformer.js';
+import * as StyleUtil from './style-util.js';
+import StyleProperties from './style-properties.js';
+import placeholderMap from './style-placeholder.js';
+import StyleInfo from './style-info.js';
+import StyleCache from './style-cache.js';
+import {flush as watcherFlush} from './document-watcher.js';
+import templateMap from './template-map.js';
+import * as ApplyShimUtils from './apply-shim-utils.js';
+import {updateNativeProperties, detectMixin} from './common-utils.js';
+import {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars
+
+/**
+ * @const {StyleCache}
+ */
+const styleCache = new StyleCache();
+
+export default class ScopingShim {
+ constructor() {
+ this._scopeCounter = {};
+ this._documentOwner = document.documentElement;
+ let ast = new StyleNode();
+ ast['rules'] = [];
+ this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));
+ this._elementsHaveApplied = false;
+ this._applyShim = null;
+ /** @type {?CustomStyleInterfaceInterface} */
+ this._customStyleInterface = null;
+ }
+ flush() {
+ watcherFlush();
+ }
+ _generateScopeSelector(name) {
+ let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;
+ return `${name}-${id}`;
+ }
+ getStyleAst(style) {
+ return StyleUtil.rulesForStyle(style);
+ }
+ styleAstToString(ast) {
+ return StyleUtil.toCssText(ast);
+ }
+ _gatherStyles(template) {
+ return StyleUtil.gatherStyleText(template.content);
+ }
+ _getCssBuild(template) {
+ let style = template.content.querySelector('style');
+ if (!style) {
+ return '';
+ }
+ return style.getAttribute('css-build') || '';
+ }
+ /**
+ * Prepare the styling and template for the given element type
+ *
+ * @param {HTMLTemplateElement} template
+ * @param {string} elementName
+ * @param {string=} typeExtension
+ */
+ prepareTemplate(template, elementName, typeExtension) {
+ if (template._prepared) {
+ return;
+ }
+ template._prepared = true;
+ template.name = elementName;
+ template.extends = typeExtension;
+ templateMap[elementName] = template;
+ let cssBuild = this._getCssBuild(template);
+ let cssText = this._gatherStyles(template);
+ let info = {
+ is: elementName,
+ extends: typeExtension,
+ __cssBuild: cssBuild,
+ };
+ if (!nativeShadow) {
+ StyleTransformer.dom(template.content, elementName);
+ }
+ // check if the styling has mixin definitions or uses
+ this._ensure();
+ let hasMixins = detectMixin(cssText)
+ let ast = parse(cssText);
+ // only run the applyshim transforms if there is a mixin involved
+ if (hasMixins && nativeCssVariables && this._applyShim) {
+ this._applyShim['transformRules'](ast, elementName);
+ }
+ template['_styleAst'] = ast;
+ template._cssBuild = cssBuild;
+
+ let ownPropertyNames = [];
+ if (!nativeCssVariables) {
+ ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);
+ }
+ if (!ownPropertyNames.length || nativeCssVariables) {
+ let root = nativeShadow ? template.content : null;
+ let placeholder = placeholderMap[elementName];
+ let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);
+ template._style = style;
+ }
+ template._ownPropertyNames = ownPropertyNames;
+ }
+ _generateStaticStyle(info, rules, shadowroot, placeholder) {
+ let cssText = StyleTransformer.elementStyles(info, rules);
+ if (cssText.length) {
+ return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);
+ }
+ }
+ _prepareHost(host) {
+ let {is, typeExtension} = StyleUtil.getIsExtends(host);
+ let placeholder = placeholderMap[is];
+ let template = templateMap[is];
+ let ast;
+ let ownStylePropertyNames;
+ let cssBuild;
+ if (template) {
+ ast = template['_styleAst'];
+ ownStylePropertyNames = template._ownPropertyNames;
+ cssBuild = template._cssBuild;
+ }
+ return StyleInfo.set(host,
+ new StyleInfo(
+ ast,
+ placeholder,
+ ownStylePropertyNames,
+ is,
+ typeExtension,
+ cssBuild
+ )
+ );
+ }
+ _ensureApplyShim() {
+ if (this._applyShim) {
+ return;
+ } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {
+ this._applyShim = window.ShadyCSS.ApplyShim;
+ this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;
+ }
+ }
+ _ensureCustomStyleInterface() {
+ if (this._customStyleInterface) {
+ return;
+ } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {
+ this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);
+ /** @type {function(!HTMLStyleElement)} */
+ this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};
+ this._customStyleInterface['validateCallback'] = () => {
+ requestAnimationFrame(() => {
+ if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {
+ this.flushCustomStyles();
+ }
+ })
+ };
+ }
+ }
+ _ensure() {
+ this._ensureApplyShim();
+ this._ensureCustomStyleInterface();
+ }
+ /**
+ * Flush and apply custom styles to document
+ */
+ flushCustomStyles() {
+ this._ensure();
+ if (!this._customStyleInterface) {
+ return;
+ }
+ let customStyles = this._customStyleInterface['processStyles']();
+ // early return if custom-styles don't need validation
+ if (!this._customStyleInterface['enqueued']) {
+ return;
+ }
+ if (!nativeCssVariables) {
+ this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);
+ this._applyCustomStyles(customStyles);
+ } else {
+ this._revalidateCustomStyleApplyShim(customStyles);
+ }
+ this._customStyleInterface['enqueued'] = false;
+ // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree
+ if (this._elementsHaveApplied && !nativeCssVariables) {
+ this.styleDocument();
+ }
+ }
+ /**
+ * Apply styles for the given element
+ *
+ * @param {!HTMLElement} host
+ * @param {Object=} overrideProps
+ */
+ styleElement(host, overrideProps) {
+ let {is} = StyleUtil.getIsExtends(host);
+ let styleInfo = StyleInfo.get(host);
+ if (!styleInfo) {
+ styleInfo = this._prepareHost(host);
+ }
+ // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called
+ if (!this._isRootOwner(host)) {
+ this._elementsHaveApplied = true;
+ }
+ if (overrideProps) {
+ styleInfo.overrideStyleProperties =
+ styleInfo.overrideStyleProperties || {};
+ Object.assign(styleInfo.overrideStyleProperties, overrideProps);
+ }
+ if (!nativeCssVariables) {
+ this._updateProperties(host, styleInfo);
+ if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {
+ this._applyStyleProperties(host, styleInfo);
+ }
+ } else {
+ if (styleInfo.overrideStyleProperties) {
+ updateNativeProperties(host, styleInfo.overrideStyleProperties);
+ }
+ let template = templateMap[is];
+ // bail early if there is no shadowroot for this element
+ if (!template && !this._isRootOwner(host)) {
+ return;
+ }
+ if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {
+ // update template
+ if (!ApplyShimUtils.templateIsValidating(template)) {
+ this._ensure();
+ this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);
+ template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);
+ ApplyShimUtils.startValidatingTemplate(template);
+ }
+ // update instance if native shadowdom
+ if (nativeShadow) {
+ let root = host.shadowRoot;
+ if (root) {
+ let style = root.querySelector('style');
+ style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);
+ }
+ }
+ styleInfo.styleRules = template['_styleAst'];
+ }
+ }
+ }
+ _styleOwnerForNode(node) {
+ let root = node.getRootNode();
+ let host = root.host;
+ if (host) {
+ if (StyleInfo.get(host)) {
+ return host;
+ } else {
+ return this._styleOwnerForNode(host);
+ }
+ }
+ return this._documentOwner;
+ }
+ _isRootOwner(node) {
+ return (node === this._documentOwner);
+ }
+ _applyStyleProperties(host, styleInfo) {
+ let is = StyleUtil.getIsExtends(host).is;
+ let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);
+ let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;
+ let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;
+ let oldScopeSelector = styleInfo.scopeSelector;
+ // only generate new scope if cached style is not found
+ styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);
+ let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);
+ if (!nativeShadow) {
+ StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);
+ }
+ if (!cacheEntry) {
+ styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);
+ }
+ return style;
+ }
+ _updateProperties(host, styleInfo) {
+ let owner = this._styleOwnerForNode(host);
+ let ownerStyleInfo = StyleInfo.get(owner);
+ let ownerProperties = ownerStyleInfo.styleProperties;
+ let props = Object.create(ownerProperties || null);
+ let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);
+ let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);
+ let propertiesMatchingHost = propertyData.properties
+ Object.assign(
+ props,
+ hostAndRootProps.hostProps,
+ propertiesMatchingHost,
+ hostAndRootProps.rootProps
+ );
+ this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);
+ StyleProperties.reify(props);
+ styleInfo.styleProperties = props;
+ }
+ _mixinOverrideStyles(props, overrides) {
+ for (let p in overrides) {
+ let v = overrides[p];
+ // skip override props if they are not truthy or 0
+ // in order to fall back to inherited values
+ if (v || v === 0) {
+ props[p] = v;
+ }
+ }
+ }
+ /**
+ * Update styles of the whole document
+ *
+ * @param {Object=} properties
+ */
+ styleDocument(properties) {
+ this.styleSubtree(this._documentOwner, properties);
+ }
+ /**
+ * Update styles of a subtree
+ *
+ * @param {!HTMLElement} host
+ * @param {Object=} properties
+ */
+ styleSubtree(host, properties) {
+ let root = host.shadowRoot;
+ if (root || this._isRootOwner(host)) {
+ this.styleElement(host, properties);
+ }
+ // process the shadowdom children of `host`
+ let shadowChildren = root && (root.children || root.childNodes);
+ if (shadowChildren) {
+ for (let i = 0; i < shadowChildren.length; i++) {
+ let c = /** @type {!HTMLElement} */(shadowChildren[i]);
+ this.styleSubtree(c);
+ }
+ } else {
+ // process the lightdom children of `host`
+ let children = host.children || host.childNodes;
+ if (children) {
+ for (let i = 0; i < children.length; i++) {
+ let c = /** @type {!HTMLElement} */(children[i]);
+ this.styleSubtree(c);
+ }
+ }
+ }
+ }
+ /* Custom Style operations */
+ _revalidateCustomStyleApplyShim(customStyles) {
+ for (let i = 0; i < customStyles.length; i++) {
+ let c = customStyles[i];
+ let s = this._customStyleInterface['getStyleForCustomStyle'](c);
+ if (s) {
+ this._revalidateApplyShim(s);
+ }
+ }
+ }
+ _applyCustomStyles(customStyles) {
+ for (let i = 0; i < customStyles.length; i++) {
+ let c = customStyles[i];
+ let s = this._customStyleInterface['getStyleForCustomStyle'](c);
+ if (s) {
+ StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);
+ }
+ }
+ }
+ transformCustomStyleForDocument(style) {
+ let ast = StyleUtil.rulesForStyle(style);
+ StyleUtil.forEachRule(ast, (rule) => {
+ if (nativeShadow) {
+ StyleTransformer.normalizeRootSelector(rule);
+ } else {
+ StyleTransformer.documentRule(rule);
+ }
+ if (nativeCssVariables) {
+ this._ensure();
+ this._applyShim && this._applyShim['transformRule'](rule);
+ }
+ });
+ if (nativeCssVariables) {
+ style.textContent = StyleUtil.toCssText(ast);
+ } else {
+ this._documentOwnerStyleInfo.styleRules['rules'].push(ast);
+ }
+ }
+ _revalidateApplyShim(style) {
+ if (nativeCssVariables && this._applyShim) {
+ let ast = StyleUtil.rulesForStyle(style);
+ this._ensure();
+ this._applyShim['transformRules'](ast);
+ style.textContent = StyleUtil.toCssText(ast);
+ }
+ }
+ getComputedStyleValue(element, property) {
+ let value;
+ if (!nativeCssVariables) {
+ // element is either a style host, or an ancestor of a style host
+ let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));
+ value = styleInfo.styleProperties[property];
+ }
+ // fall back to the property value from the computed styling
+ value = value || window.getComputedStyle(element).getPropertyValue(property);
+ // trim whitespace that can come after the `:` in css
+ // example: padding: 2px -> " 2px"
+ return value ? value.trim() : '';
+ }
+ // given an element and a classString, replaces
+ // the element's class with the provided classString and adds
+ // any necessary ShadyCSS static and property based scoping selectors
+ setElementClass(element, classString) {
+ let root = element.getRootNode();
+ let classes = classString ? classString.split(/\s/) : [];
+ let scopeName = root.host && root.host.localName;
+ // If no scope, try to discover scope name from existing class.
+ // This can occur if, for example, a template stamped element that
+ // has been scoped is manipulated when not in a root.
+ if (!scopeName) {
+ var classAttr = element.getAttribute('class');
+ if (classAttr) {
+ let k$ = classAttr.split(/\s/);
+ for (let i=0; i < k$.length; i++) {
+ if (k$[i] === StyleTransformer.SCOPE_NAME) {
+ scopeName = k$[i+1];
+ break;
+ }
+ }
+ }
+ }
+ if (scopeName) {
+ classes.push(StyleTransformer.SCOPE_NAME, scopeName);
+ }
+ if (!nativeCssVariables) {
+ let styleInfo = StyleInfo.get(element);
+ if (styleInfo && styleInfo.scopeSelector) {
+ classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);
+ }
+ }
+ StyleUtil.setElementClassRaw(element, classes.join(' '));
+ }
+ _styleInfoForNode(node) {
+ return StyleInfo.get(node);
+ }
+}
+
+/* exports */
+ScopingShim.prototype['flush'] = ScopingShim.prototype.flush;
+ScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;
+ScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;
+ScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;
+ScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;
+ScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;
+ScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;
+ScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;
+ScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;
+ScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;
+ScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;
+ScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;
+Object.defineProperties(ScopingShim.prototype, {
+ 'nativeShadow': {
+ get() {
+ return nativeShadow;
+ }
+ },
+ 'nativeCss': {
+ get() {
+ return nativeCssVariables;
+ }
+ }
+});
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-cache.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-cache.js
new file mode 100644
index 00000000000..7b51d0f4fce
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-cache.js
@@ -0,0 +1,51 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+export default class StyleCache {
+ constructor(typeMax = 100) {
+ // map element name -> [{properties, styleElement, scopeSelector}]
+ this.cache = {};
+ this.typeMax = typeMax;
+ }
+
+ _validate(cacheEntry, properties, ownPropertyNames) {
+ for (let idx = 0; idx < ownPropertyNames.length; idx++) {
+ let pn = ownPropertyNames[idx];
+ if (cacheEntry.properties[pn] !== properties[pn]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ store(tagname, properties, styleElement, scopeSelector) {
+ let list = this.cache[tagname] || [];
+ list.push({properties, styleElement, scopeSelector});
+ if (list.length > this.typeMax) {
+ list.shift();
+ }
+ this.cache[tagname] = list;
+ }
+
+ fetch(tagname, properties, ownPropertyNames) {
+ let list = this.cache[tagname];
+ if (!list) {
+ return;
+ }
+ // reverse list for most-recent lookups
+ for (let idx = list.length - 1; idx >= 0; idx--) {
+ let entry = list[idx];
+ if (this._validate(entry, properties, ownPropertyNames)) {
+ return entry;
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-info.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-info.js
new file mode 100644
index 00000000000..39dbd370047
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-info.js
@@ -0,0 +1,74 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars
+
+/** @const {string} */
+const infoKey = '__styleInfo';
+
+export default class StyleInfo {
+ /**
+ * @param {Element} node
+ * @return {StyleInfo}
+ */
+ static get(node) {
+ if (node) {
+ return node[infoKey];
+ } else {
+ return null;
+ }
+ }
+ /**
+ * @param {!Element} node
+ * @param {StyleInfo} styleInfo
+ * @return {StyleInfo}
+ */
+ static set(node, styleInfo) {
+ node[infoKey] = styleInfo;
+ return styleInfo;
+ }
+ /**
+ * @param {StyleNode} ast
+ * @param {Node=} placeholder
+ * @param {Array<string>=} ownStylePropertyNames
+ * @param {string=} elementName
+ * @param {string=} typeExtension
+ * @param {string=} cssBuild
+ */
+ constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {
+ /** @type {StyleNode} */
+ this.styleRules = ast || null;
+ /** @type {Node} */
+ this.placeholder = placeholder || null;
+ /** @type {!Array<string>} */
+ this.ownStylePropertyNames = ownStylePropertyNames || [];
+ /** @type {Array<Object>} */
+ this.overrideStyleProperties = null;
+ /** @type {string} */
+ this.elementName = elementName || '';
+ /** @type {string} */
+ this.cssBuild = cssBuild || '';
+ /** @type {string} */
+ this.typeExtension = typeExtension || '';
+ /** @type {Object<string, string>} */
+ this.styleProperties = null;
+ /** @type {?string} */
+ this.scopeSelector = null;
+ /** @type {HTMLStyleElement} */
+ this.customStyle = null;
+ }
+ _getStyleRules() {
+ return this.styleRules;
+ }
+}
+
+StyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-placeholder.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-placeholder.js
new file mode 100644
index 00000000000..66db235f8d8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-placeholder.js
@@ -0,0 +1,40 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {applyStylePlaceHolder} from './style-util.js';
+import {nativeShadow} from './style-settings.js';
+
+/** @type {Object<string, !Node>} */
+let placeholderMap = {};
+
+/**
+ * @const {CustomElementRegistry}
+ */
+const ce = window['customElements'];
+if (ce && !nativeShadow) {
+ /**
+ * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}
+ */
+ const origDefine = ce['define'];
+ /**
+ * @param {string} name
+ * @param {function(new:HTMLElement)} clazz
+ * @param {{extends: string}=} options
+ */
+ const wrappedDefine = (name, clazz, options) => {
+ placeholderMap[name] = applyStylePlaceHolder(name);
+ origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);
+ };
+ ce['define'] = wrappedDefine;
+}
+
+export default placeholderMap;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-properties.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-properties.js
new file mode 100644
index 00000000000..453d3bbcef7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-properties.js
@@ -0,0 +1,612 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars
+import {nativeShadow} from './style-settings.js';
+import StyleTransformer from './style-transformer.js';
+import * as StyleUtil from './style-util.js';
+import * as RX from './common-regex.js';
+import StyleInfo from './style-info.js';
+
+// TODO: dedupe with shady
+/**
+ * @param {string} selector
+ * @return {boolean}
+ * @this {Element}
+ */
+const matchesSelector = function(selector) {
+ const method = this.matches || this.matchesSelector ||
+ this.mozMatchesSelector || this.msMatchesSelector ||
+ this.oMatchesSelector || this.webkitMatchesSelector;
+ return method && method.call(this, selector);
+};
+
+const IS_IE = navigator.userAgent.match('Trident');
+
+const XSCOPE_NAME = 'x-scope';
+
+class StyleProperties {
+ get XSCOPE_NAME() {
+ return XSCOPE_NAME;
+ }
+/**
+ * decorates styles with rule info and returns an array of used style property names
+ *
+ * @param {StyleNode} rules
+ * @return {Array<string>}
+ */
+ decorateStyles(rules) {
+ let self = this, props = {}, keyframes = [], ruleIndex = 0;
+ StyleUtil.forEachRule(rules, function(rule) {
+ self.decorateRule(rule);
+ // mark in-order position of ast rule in styles block, used for cache key
+ rule.index = ruleIndex++;
+ self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);
+ }, function onKeyframesRule(rule) {
+ keyframes.push(rule);
+ });
+ // Cache all found keyframes rules for later reference:
+ rules._keyframes = keyframes;
+ // return this list of property names *consumes* in these styles.
+ let names = [];
+ for (let i in props) {
+ names.push(i);
+ }
+ return names;
+ }
+
+ // decorate a single rule with property info
+ decorateRule(rule) {
+ if (rule.propertyInfo) {
+ return rule.propertyInfo;
+ }
+ let info = {}, properties = {};
+ let hasProperties = this.collectProperties(rule, properties);
+ if (hasProperties) {
+ info.properties = properties;
+ // TODO(sorvell): workaround parser seeing mixins as additional rules
+ rule['rules'] = null;
+ }
+ info.cssText = this.collectCssText(rule);
+ rule.propertyInfo = info;
+ return info;
+ }
+
+ // collects the custom properties from a rule's cssText
+ collectProperties(rule, properties) {
+ let info = rule.propertyInfo;
+ if (info) {
+ if (info.properties) {
+ Object.assign(properties, info.properties);
+ return true;
+ }
+ } else {
+ let m, rx = RX.VAR_ASSIGN;
+ let cssText = rule['parsedCssText'];
+ let value;
+ let any;
+ while ((m = rx.exec(cssText))) {
+ // note: group 2 is var, 3 is mixin
+ value = (m[2] || m[3]).trim();
+ // value of 'inherit' or 'unset' is equivalent to not setting the property here
+ if (value !== 'inherit' || value !== 'unset') {
+ properties[m[1].trim()] = value;
+ }
+ any = true;
+ }
+ return any;
+ }
+
+ }
+
+ // returns cssText of properties that consume variables/mixins
+ collectCssText(rule) {
+ return this.collectConsumingCssText(rule['parsedCssText']);
+ }
+
+ // NOTE: we support consumption inside mixin assignment
+ // but not production, so strip out {...}
+ collectConsumingCssText(cssText) {
+ return cssText.replace(RX.BRACKETED, '')
+ .replace(RX.VAR_ASSIGN, '');
+ }
+
+ collectPropertiesInCssText(cssText, props) {
+ let m;
+ while ((m = RX.VAR_CONSUMED.exec(cssText))) {
+ let name = m[1];
+ // This regex catches all variable names, and following non-whitespace char
+ // If next char is not ':', then variable is a consumer
+ if (m[2] !== ':') {
+ props[name] = true;
+ }
+ }
+ }
+
+ // turns custom properties into realized values.
+ reify(props) {
+ // big perf optimization here: reify only *own* properties
+ // since this object has __proto__ of the element's scope properties
+ let names = Object.getOwnPropertyNames(props);
+ for (let i=0, n; i < names.length; i++) {
+ n = names[i];
+ props[n] = this.valueForProperty(props[n], props);
+ }
+ }
+
+ // given a property value, returns the reified value
+ // a property value may be:
+ // (1) a literal value like: red or 5px;
+ // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or
+ // var(--a, var(--b));
+ // (3) a literal mixin value like { properties }. Each of these properties
+ // can have values that are: (a) literal, (b) variables, (c) @apply mixins.
+ valueForProperty(property, props) {
+ // case (1) default
+ // case (3) defines a mixin and we have to reify the internals
+ if (property) {
+ if (property.indexOf(';') >=0) {
+ property = this.valueForProperties(property, props);
+ } else {
+ // case (2) variable
+ let self = this;
+ let fn = function(prefix, value, fallback, suffix) {
+ if (!value) {
+ return prefix + suffix;
+ }
+ let propertyValue = self.valueForProperty(props[value], props);
+ // if value is "initial", then the variable should be treated as unset
+ if (!propertyValue || propertyValue === 'initial') {
+ // fallback may be --a or var(--a) or literal
+ propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||
+ fallback;
+ } else if (propertyValue === 'apply-shim-inherit') {
+ // CSS build will replace `inherit` with `apply-shim-inherit`
+ // for use with native css variables.
+ // Since we have full control, we can use `inherit` directly.
+ propertyValue = 'inherit';
+ }
+ return prefix + (propertyValue || '') + suffix;
+ };
+ property = StyleUtil.processVariableAndFallback(property, fn);
+ }
+ }
+ return property && property.trim() || '';
+ }
+
+ // note: we do not yet support mixin within mixin
+ valueForProperties(property, props) {
+ let parts = property.split(';');
+ for (let i=0, p, m; i<parts.length; i++) {
+ if ((p = parts[i])) {
+ RX.MIXIN_MATCH.lastIndex = 0;
+ m = RX.MIXIN_MATCH.exec(p);
+ if (m) {
+ p = this.valueForProperty(props[m[1]], props);
+ } else {
+ let colon = p.indexOf(':');
+ if (colon !== -1) {
+ let pp = p.substring(colon);
+ pp = pp.trim();
+ pp = this.valueForProperty(pp, props) || pp;
+ p = p.substring(0, colon) + pp;
+ }
+ }
+ parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?
+ // strip trailing ;
+ p.slice(0, -1) :
+ p || '';
+ }
+ }
+ return parts.join(';');
+ }
+
+ applyProperties(rule, props) {
+ let output = '';
+ // dynamically added sheets may not be decorated so ensure they are.
+ if (!rule.propertyInfo) {
+ this.decorateRule(rule);
+ }
+ if (rule.propertyInfo.cssText) {
+ output = this.valueForProperties(rule.propertyInfo.cssText, props);
+ }
+ rule['cssText'] = output;
+ }
+
+ // Apply keyframe transformations to the cssText of a given rule. The
+ // keyframeTransforms object is a map of keyframe names to transformer
+ // functions which take in cssText and spit out transformed cssText.
+ applyKeyframeTransforms(rule, keyframeTransforms) {
+ let input = rule['cssText'];
+ let output = rule['cssText'];
+ if (rule.hasAnimations == null) {
+ // Cache whether or not the rule has any animations to begin with:
+ rule.hasAnimations = RX.ANIMATION_MATCH.test(input);
+ }
+ // If there are no animations referenced, we can skip transforms:
+ if (rule.hasAnimations) {
+ let transform;
+ // If we haven't transformed this rule before, we iterate over all
+ // transforms:
+ if (rule.keyframeNamesToTransform == null) {
+ rule.keyframeNamesToTransform = [];
+ for (let keyframe in keyframeTransforms) {
+ transform = keyframeTransforms[keyframe];
+ output = transform(input);
+ // If the transform actually changed the CSS text, we cache the
+ // transform name for future use:
+ if (input !== output) {
+ input = output;
+ rule.keyframeNamesToTransform.push(keyframe);
+ }
+ }
+ } else {
+ // If we already have a list of keyframe names that apply to this
+ // rule, we apply only those keyframe name transforms:
+ for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {
+ transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];
+ input = transform(input);
+ }
+ output = input;
+ }
+ }
+ rule['cssText'] = output;
+ }
+
+ // Test if the rules in these styles matches the given `element` and if so,
+ // collect any custom properties into `props`.
+ /**
+ * @param {StyleNode} rules
+ * @param {Element} element
+ */
+ propertyDataFromStyles(rules, element) {
+ let props = {}, self = this;
+ // generates a unique key for these matches
+ let o = [];
+ // note: active rules excludes non-matching @media rules
+ StyleUtil.forEachRule(rules, function(rule) {
+ // TODO(sorvell): we could trim the set of rules at declaration
+ // time to only include ones that have properties
+ if (!rule.propertyInfo) {
+ self.decorateRule(rule);
+ }
+ // match element against transformedSelector: selector may contain
+ // unwanted uniquification and parsedSelector does not directly match
+ // for :host selectors.
+ let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];
+ if (element && rule.propertyInfo.properties && selectorToMatch) {
+ if (matchesSelector.call(element, selectorToMatch)) {
+ self.collectProperties(rule, props);
+ // produce numeric key for these matches for lookup
+ addToBitMask(rule.index, o);
+ }
+ }
+ }, null, true);
+ return {properties: props, key: o};
+ }
+
+ /**
+ * @param {Element} scope
+ * @param {StyleNode} rule
+ * @param {string|undefined} cssBuild
+ * @param {function(Object)} callback
+ */
+ whenHostOrRootRule(scope, rule, cssBuild, callback) {
+ if (!rule.propertyInfo) {
+ this.decorateRule(rule);
+ }
+ if (!rule.propertyInfo.properties) {
+ return;
+ }
+ let {is, typeExtension} = StyleUtil.getIsExtends(scope);
+ let hostScope = is ?
+ StyleTransformer._calcHostScope(is, typeExtension) :
+ 'html';
+ let parsedSelector = rule['parsedSelector'];
+ let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');
+ let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;
+ // build info is either in scope (when scope is an element) or in the style
+ // when scope is the default scope; note: this allows default scope to have
+ // mixed mode built and unbuilt styles.
+ if (cssBuild === 'shady') {
+ // :root -> x-foo > *.x-foo for elements and html for custom-style
+ isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;
+ // :host -> x-foo for elements, but sub-rules have .x-foo in them
+ isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;
+ }
+ if (cssBuild === 'shadow') {
+ isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';
+ isHost = isHost && !isRoot;
+ }
+ if (!isRoot && !isHost) {
+ return;
+ }
+ let selectorToMatch = hostScope;
+ if (isHost) {
+ // need to transform :host because `:host` does not work with `matches`
+ if (!rule.transformedSelector) {
+ // transform :host into a matchable selector
+ rule.transformedSelector =
+ StyleTransformer._transformRuleCss(
+ rule,
+ StyleTransformer._transformComplexSelector,
+ StyleTransformer._calcElementScope(is),
+ hostScope
+ );
+ }
+ selectorToMatch = rule.transformedSelector || hostScope;
+ }
+ callback({
+ selector: selectorToMatch,
+ isHost: isHost,
+ isRoot: isRoot
+ });
+ }
+/**
+ * @param {Element} scope
+ * @param {StyleNode} rules
+ * @return {Object}
+ */
+ hostAndRootPropertiesForScope(scope, rules) {
+ let hostProps = {}, rootProps = {}, self = this;
+ // note: active rules excludes non-matching @media rules
+ let cssBuild = rules && rules['__cssBuild'];
+ StyleUtil.forEachRule(rules, function(rule) {
+ // if scope is StyleDefaults, use _element for matchesSelector
+ self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {
+ let element = scope._element || scope;
+ if (matchesSelector.call(element, info.selector)) {
+ if (info.isHost) {
+ self.collectProperties(rule, hostProps);
+ } else {
+ self.collectProperties(rule, rootProps);
+ }
+ }
+ });
+ }, null, true);
+ return {rootProps: rootProps, hostProps: hostProps};
+ }
+
+ /**
+ * @param {Element} element
+ * @param {Object} properties
+ * @param {string} scopeSelector
+ */
+ transformStyles(element, properties, scopeSelector) {
+ let self = this;
+ let {is, typeExtension} = StyleUtil.getIsExtends(element);
+ let hostSelector = StyleTransformer
+ ._calcHostScope(is, typeExtension);
+ let rxHostSelector = element.extends ?
+ '\\' + hostSelector.slice(0, -1) + '\\]' :
+ hostSelector;
+ let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +
+ RX.HOST_SUFFIX);
+ let rules = StyleInfo.get(element).styleRules;
+ let keyframeTransforms =
+ this._elementKeyframeTransforms(element, rules, scopeSelector);
+ return StyleTransformer.elementStyles(element, rules, function(rule) {
+ self.applyProperties(rule, properties);
+ if (!nativeShadow &&
+ !StyleUtil.isKeyframesSelector(rule) &&
+ rule['cssText']) {
+ // NOTE: keyframe transforms only scope munge animation names, so it
+ // is not necessary to apply them in ShadowDOM.
+ self.applyKeyframeTransforms(rule, keyframeTransforms);
+ self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);
+ }
+ });
+ }
+
+ /**
+ * @param {Element} element
+ * @param {StyleNode} rules
+ * @param {string} scopeSelector
+ * @return {Object}
+ */
+ _elementKeyframeTransforms(element, rules, scopeSelector) {
+ let keyframesRules = rules._keyframes;
+ let keyframeTransforms = {};
+ if (!nativeShadow && keyframesRules) {
+ // For non-ShadowDOM, we transform all known keyframes rules in
+ // advance for the current scope. This allows us to catch keyframes
+ // rules that appear anywhere in the stylesheet:
+ for (let i = 0, keyframesRule = keyframesRules[i];
+ i < keyframesRules.length;
+ keyframesRule = keyframesRules[++i]) {
+ this._scopeKeyframes(keyframesRule, scopeSelector);
+ keyframeTransforms[keyframesRule['keyframesName']] =
+ this._keyframesRuleTransformer(keyframesRule);
+ }
+ }
+ return keyframeTransforms;
+ }
+
+ // Generate a factory for transforming a chunk of CSS text to handle a
+ // particular scoped keyframes rule.
+ /**
+ * @param {StyleNode} keyframesRule
+ * @return {function(string):string}
+ */
+ _keyframesRuleTransformer(keyframesRule) {
+ return function(cssText) {
+ return cssText.replace(
+ keyframesRule.keyframesNameRx,
+ keyframesRule.transformedKeyframesName);
+ };
+ }
+
+/**
+ * Transforms `@keyframes` names to be unique for the current host.
+ * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0
+ *
+ * @param {StyleNode} rule
+ * @param {string} scopeId
+ */
+ _scopeKeyframes(rule, scopeId) {
+ // Animation names are of the form [\w-], so ensure that the name regex does not partially apply
+ // to similarly named keyframe names by checking for a word boundary at the beginning and
+ // a non-word boundary or `-` at the end.
+ rule.keyframesNameRx = new RegExp(`\\b${rule['keyframesName']}(?!\\B|-)`, 'g');
+ rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;
+ rule.transformedSelector = rule.transformedSelector || rule['selector'];
+ rule['selector'] = rule.transformedSelector.replace(
+ rule['keyframesName'], rule.transformedKeyframesName);
+ }
+
+ // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):
+ // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo
+ // host selector: x-foo.wide -> .x-foo-42.wide
+ // note: we use only the scope class (.x-foo-42) and not the hostSelector
+ // (x-foo) to scope :host rules; this helps make property host rules
+ // have low specificity. They are overrideable by class selectors but,
+ // unfortunately, not by type selectors (e.g. overriding via
+ // `.special` is ok, but not by `x-foo`).
+ /**
+ * @param {StyleNode} rule
+ * @param {RegExp} hostRx
+ * @param {string} hostSelector
+ * @param {string} scopeId
+ */
+ _scopeSelector(rule, hostRx, hostSelector, scopeId) {
+ rule.transformedSelector = rule.transformedSelector || rule['selector'];
+ let selector = rule.transformedSelector;
+ let scope = '.' + scopeId;
+ let parts = selector.split(',');
+ for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {
+ parts[i] = p.match(hostRx) ?
+ p.replace(hostSelector, scope) :
+ scope + ' ' + p;
+ }
+ rule['selector'] = parts.join(',');
+ }
+
+ /**
+ * @param {Element} element
+ * @param {string} selector
+ * @param {string} old
+ */
+ applyElementScopeSelector(element, selector, old) {
+ let c = element.getAttribute('class') || '';
+ let v = c;
+ if (old) {
+ v = c.replace(
+ new RegExp('\\s*' + XSCOPE_NAME + '\\s*' + old + '\\s*', 'g'), ' ');
+ }
+ v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;
+ if (c !== v) {
+ StyleUtil.setElementClassRaw(element, v);
+ }
+ }
+
+ /**
+ * @param {HTMLElement} element
+ * @param {Object} properties
+ * @param {string} selector
+ * @param {HTMLStyleElement} style
+ * @return {HTMLStyleElement}
+ */
+ applyElementStyle(element, properties, selector, style) {
+ // calculate cssText to apply
+ let cssText = style ? style.textContent || '' :
+ this.transformStyles(element, properties, selector);
+ // if shady and we have a cached style that is not style, decrement
+ let styleInfo = StyleInfo.get(element);
+ let s = styleInfo.customStyle;
+ if (s && !nativeShadow && (s !== style)) {
+ s['_useCount']--;
+ if (s['_useCount'] <= 0 && s.parentNode) {
+ s.parentNode.removeChild(s);
+ }
+ }
+ // apply styling always under native or if we generated style
+ // or the cached style is not in document(!)
+ if (nativeShadow) {
+ // update existing style only under native
+ if (styleInfo.customStyle) {
+ styleInfo.customStyle.textContent = cssText;
+ style = styleInfo.customStyle;
+ // otherwise, if we have css to apply, do so
+ } else if (cssText) {
+ // apply css after the scope style of the element to help with
+ // style precedence rules.
+ style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,
+ styleInfo.placeholder);
+ }
+ } else {
+ // shady and no cache hit
+ if (!style) {
+ // apply css after the scope style of the element to help with
+ // style precedence rules.
+ if (cssText) {
+ style = StyleUtil.applyCss(cssText, selector, null,
+ styleInfo.placeholder);
+ }
+ // shady and cache hit but not in document
+ } else if (!style.parentNode) {
+ if (IS_IE && cssText.indexOf('@media') > -1) {
+ // @media rules may be stale in IE 10 and 11
+ // refresh the text content of the style to revalidate them.
+ style.textContent = cssText;
+ }
+ StyleUtil.applyStyle(style, null, styleInfo.placeholder);
+ }
+ }
+ // ensure this style is our custom style and increment its use count.
+ if (style) {
+ style['_useCount'] = style['_useCount'] || 0;
+ // increment use count if we changed styles
+ if (styleInfo.customStyle != style) {
+ style['_useCount']++;
+ }
+ styleInfo.customStyle = style;
+ }
+ return style;
+ }
+
+ /**
+ * @param {Element} style
+ * @param {Object} properties
+ */
+ applyCustomStyle(style, properties) {
+ let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));
+ let self = this;
+ style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {
+ let css = rule['cssText'] = rule['parsedCssText'];
+ if (rule.propertyInfo && rule.propertyInfo.cssText) {
+ // remove property assignments
+ // so next function isn't confused
+ // NOTE: we have 3 categories of css:
+ // (1) normal properties,
+ // (2) custom property assignments (--foo: red;),
+ // (3) custom property usage: border: var(--foo); @apply(--foo);
+ // In elements, 1 and 3 are separated for efficiency; here they
+ // are not and this makes this case unique.
+ css = removeCustomPropAssignment(/** @type {string} */(css));
+ // replace with reified properties, scenario is same as mixin
+ rule['cssText'] = self.valueForProperties(css, properties);
+ }
+ });
+ }
+}
+
+/**
+ * @param {number} n
+ * @param {Array<number>} bits
+ */
+function addToBitMask(n, bits) {
+ let o = parseInt(n / 32, 10);
+ let v = 1 << (n % 32);
+ bits[o] = (bits[o] || 0) | v;
+}
+
+export default new StyleProperties(); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-settings.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-settings.js
new file mode 100644
index 00000000000..5ed9718f5a1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-settings.js
@@ -0,0 +1,47 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+export const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);
+let nativeCssVariables_;
+
+/**
+ * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings
+ */
+function calcCssVariables(settings) {
+ if (settings && settings['shimcssproperties']) {
+ nativeCssVariables_ = false;
+ } else {
+ // chrome 49 has semi-working css vars, check if box-shadow works
+ // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782
+ // However, shim css custom properties are only supported with ShadyDOM enabled,
+ // so fall back on native if we do not detect ShadyDOM
+ // Edge 15: custom properties used in ::before and ::after will also be used in the parent element
+ // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/
+ nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/) &&
+ window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));
+ }
+}
+
+if (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {
+ nativeCssVariables_ = window.ShadyCSS.nativeCss;
+} else if (window.ShadyCSS) {
+ calcCssVariables(window.ShadyCSS);
+ // reset window variable to let ShadyCSS API take its place
+ window.ShadyCSS = undefined;
+} else {
+ calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);
+}
+
+// Hack for type error under new type inference which doesn't like that
+// nativeCssVariables is updated in a function and assigns the type
+// `function(): ?` instead of `boolean`.
+export const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-transformer.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-transformer.js
new file mode 100644
index 00000000000..498f3ad5f51
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-transformer.js
@@ -0,0 +1,363 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars
+import * as StyleUtil from './style-util.js';
+import {nativeShadow} from './style-settings.js';
+
+/* Transforms ShadowDOM styling into ShadyDOM styling
+
+* scoping:
+
+ * elements in scope get scoping selector class="x-foo-scope"
+ * selectors re-written as follows:
+
+ div button -> div.x-foo-scope button.x-foo-scope
+
+* :host -> scopeName
+
+* :host(...) -> scopeName...
+
+* ::slotted(...) -> scopeName > ...
+
+* ...:dir(ltr|rtl) -> [dir="ltr|rtl"] ..., ...[dir="ltr|rtl"]
+
+* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir="rtl"] scopeName, scopeName[dir="rtl"]
+
+*/
+const SCOPE_NAME = 'style-scope';
+
+class StyleTransformer {
+ get SCOPE_NAME() {
+ return SCOPE_NAME;
+ }
+ /**
+ * Given a node and scope name, add a scoping class to each node
+ * in the tree. This facilitates transforming css into scoped rules.
+ * @param {?} node
+ * @param {?} scope
+ * @param {?=} shouldRemoveScope
+ */
+ dom(node, scope, shouldRemoveScope) {
+ // one time optimization to skip scoping...
+ if (node['__styleScoped']) {
+ node['__styleScoped'] = null;
+ } else {
+ this._transformDom(node, scope || '', shouldRemoveScope);
+ }
+ }
+
+ _transformDom(node, selector, shouldRemoveScope) {
+ if (node.nodeType === Node.ELEMENT_NODE) {
+ this.element(node, selector, shouldRemoveScope);
+ }
+ let c$ = (node.localName === 'template') ?
+ (node.content || node._content).childNodes :
+ node.children || node.childNodes;
+ if (c$) {
+ for (let i=0; i<c$.length; i++) {
+ this._transformDom(c$[i], selector, shouldRemoveScope);
+ }
+ }
+ }
+ /**
+ * @param {?} element
+ * @param {?} scope
+ * @param {?=} shouldRemoveScope
+ */
+ element(element, scope, shouldRemoveScope) {
+ // note: if using classes, we add both the general 'style-scope' class
+ // as well as the specific scope. This enables easy filtering of all
+ // `style-scope` elements
+ if (scope) {
+ // note: svg on IE does not have classList so fallback to class
+ if (element.classList) {
+ if (shouldRemoveScope) {
+ element.classList.remove(SCOPE_NAME);
+ element.classList.remove(scope);
+ } else {
+ element.classList.add(SCOPE_NAME);
+ element.classList.add(scope);
+ }
+ } else if (element.getAttribute) {
+ let c = element.getAttribute(CLASS);
+ if (shouldRemoveScope) {
+ if (c) {
+ let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');
+ StyleUtil.setElementClassRaw(element, newValue);
+ }
+ } else {
+ let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;
+ StyleUtil.setElementClassRaw(element, newValue);
+ }
+ }
+ }
+ }
+
+ /**
+ * @param {?} element
+ * @param {?} styleRules
+ * @param {?=} callback
+ */
+ elementStyles(element, styleRules, callback) {
+ let cssBuildType = element['__cssBuild'];
+ // no need to shim selectors if settings.useNativeShadow, also
+ // a shady css build will already have transformed selectors
+ // NOTE: This method may be called as part of static or property shimming.
+ // When there is a targeted build it will not be called for static shimming,
+ // but when the property shim is used it is called and should opt out of
+ // static shimming work when a proper build exists.
+ let cssText = '';
+ if (nativeShadow || cssBuildType === 'shady') {
+ cssText = StyleUtil.toCssText(styleRules, callback);
+ } else {
+ let {is, typeExtension} = StyleUtil.getIsExtends(element);
+ cssText = this.css(styleRules, is, typeExtension, callback) + '\n\n';
+ }
+ return cssText.trim();
+ }
+
+ // Given a string of cssText and a scoping string (scope), returns
+ // a string of scoped css where each selector is transformed to include
+ // a class created from the scope. ShadowDOM selectors are also transformed
+ // (e.g. :host) to use the scoping selector.
+ css(rules, scope, ext, callback) {
+ let hostScope = this._calcHostScope(scope, ext);
+ scope = this._calcElementScope(scope);
+ let self = this;
+ return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {
+ if (!rule.isScoped) {
+ self.rule(rule, scope, hostScope);
+ rule.isScoped = true;
+ }
+ if (callback) {
+ callback(rule, scope, hostScope);
+ }
+ });
+ }
+
+ _calcElementScope(scope) {
+ if (scope) {
+ return CSS_CLASS_PREFIX + scope;
+ } else {
+ return '';
+ }
+ }
+
+ _calcHostScope(scope, ext) {
+ return ext ? `[is=${scope}]` : scope;
+ }
+
+ rule(rule, scope, hostScope) {
+ this._transformRule(rule, this._transformComplexSelector,
+ scope, hostScope);
+ }
+
+ /**
+ * transforms a css rule to a scoped rule.
+ *
+ * @param {StyleNode} rule
+ * @param {Function} transformer
+ * @param {string=} scope
+ * @param {string=} hostScope
+ */
+ _transformRule(rule, transformer, scope, hostScope) {
+ // NOTE: save transformedSelector for subsequent matching of elements
+ // against selectors (e.g. when calculating style properties)
+ rule['selector'] = rule.transformedSelector =
+ this._transformRuleCss(rule, transformer, scope, hostScope);
+ }
+
+ /**
+ * @param {StyleNode} rule
+ * @param {Function} transformer
+ * @param {string=} scope
+ * @param {string=} hostScope
+ */
+ _transformRuleCss(rule, transformer, scope, hostScope) {
+ let p$ = rule['selector'].split(COMPLEX_SELECTOR_SEP);
+ // we want to skip transformation of rules that appear in keyframes,
+ // because they are keyframe selectors, not element selectors.
+ if (!StyleUtil.isKeyframesSelector(rule)) {
+ for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {
+ p$[i] = transformer.call(this, p, scope, hostScope);
+ }
+ }
+ return p$.join(COMPLEX_SELECTOR_SEP);
+ }
+
+ /**
+ * @param {string} selector
+ * @return {string}
+ */
+ _twiddleNthPlus(selector) {
+ return selector.replace(NTH, (m, type, inside) => {
+ if (inside.indexOf('+') > -1) {
+ inside = inside.replace(/\+/g, '___');
+ } else if (inside.indexOf('___') > -1) {
+ inside = inside.replace(/___/g, '+');
+ }
+ return `:${type}(${inside})`;
+ });
+ }
+
+/**
+ * @param {string} selector
+ * @param {string} scope
+ * @param {string=} hostScope
+ */
+ _transformComplexSelector(selector, scope, hostScope) {
+ let stop = false;
+ selector = selector.trim();
+ // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP
+ let isNth = NTH.test(selector);
+ if (isNth) {
+ selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\s/g, '')})`)
+ selector = this._twiddleNthPlus(selector);
+ }
+ selector = selector.replace(SLOTTED_START, `${HOST} $1`);
+ selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {
+ if (!stop) {
+ let info = this._transformCompoundSelector(s, c, scope, hostScope);
+ stop = stop || info.stop;
+ c = info.combinator;
+ s = info.value;
+ }
+ return c + s;
+ });
+ if (isNth) {
+ selector = this._twiddleNthPlus(selector);
+ }
+ return selector;
+ }
+
+ _transformCompoundSelector(selector, combinator, scope, hostScope) {
+ // replace :host with host scoping class
+ let slottedIndex = selector.indexOf(SLOTTED);
+ if (selector.indexOf(HOST) >= 0) {
+ selector = this._transformHostSelector(selector, hostScope);
+ // replace other selectors with scoping class
+ } else if (slottedIndex !== 0) {
+ selector = scope ? this._transformSimpleSelector(selector, scope) :
+ selector;
+ }
+ // mark ::slotted() scope jump to replace with descendant selector + arg
+ // also ignore left-side combinator
+ let slotted = false;
+ if (slottedIndex >= 0) {
+ combinator = '';
+ slotted = true;
+ }
+ // process scope jumping selectors up to the scope jump and then stop
+ let stop;
+ if (slotted) {
+ stop = true;
+ if (slotted) {
+ // .zonk ::slotted(.foo) -> .zonk.scope > .foo
+ selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);
+ }
+ }
+ selector = selector.replace(DIR_PAREN, (m, before, dir) =>
+ `[dir="${dir}"] ${before}, ${before}[dir="${dir}"]`);
+ return {value: selector, combinator, stop};
+ }
+
+ _transformSimpleSelector(selector, scope) {
+ let p$ = selector.split(PSEUDO_PREFIX);
+ p$[0] += scope;
+ return p$.join(PSEUDO_PREFIX);
+ }
+
+ // :host(...) -> scopeName...
+ _transformHostSelector(selector, hostScope) {
+ let m = selector.match(HOST_PAREN);
+ let paren = m && m[2].trim() || '';
+ if (paren) {
+ if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {
+ // paren starts with a type selector
+ let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];
+ // if the type selector is our hostScope then avoid pre-pending it
+ if (typeSelector === hostScope) {
+ return paren;
+ // otherwise, this selector should not match in this scope so
+ // output a bogus selector.
+ } else {
+ return SELECTOR_NO_MATCH;
+ }
+ } else {
+ // make sure to do a replace here to catch selectors like:
+ // `:host(.foo)::before`
+ return selector.replace(HOST_PAREN, function(m, host, paren) {
+ return hostScope + paren;
+ });
+ }
+ // if no paren, do a straight :host replacement.
+ // TODO(sorvell): this should not strictly be necessary but
+ // it's needed to maintain support for `:host[foo]` type selectors
+ // which have been improperly used under Shady DOM. This should be
+ // deprecated.
+ } else {
+ return selector.replace(HOST, hostScope);
+ }
+ }
+
+ /**
+ * @param {StyleNode} rule
+ */
+ documentRule(rule) {
+ // reset selector in case this is redone.
+ rule['selector'] = rule['parsedSelector'];
+ this.normalizeRootSelector(rule);
+ this._transformRule(rule, this._transformDocumentSelector);
+ }
+
+ /**
+ * @param {StyleNode} rule
+ */
+ normalizeRootSelector(rule) {
+ if (rule['selector'] === ROOT) {
+ rule['selector'] = 'html';
+ }
+ }
+
+/**
+ * @param {string} selector
+ */
+ _transformDocumentSelector(selector) {
+ return selector.match(SLOTTED) ?
+ this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) :
+ this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);
+ }
+}
+
+let NTH = /:(nth[-\w]+)\(([^)]+)\)/;
+let SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;
+let COMPLEX_SELECTOR_SEP = ',';
+let SIMPLE_SELECTOR_SEP = /(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g;
+let SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;
+let HOST = ':host';
+let ROOT = ':root';
+let SLOTTED = '::slotted';
+let SLOTTED_START = new RegExp(`^(${SLOTTED})`);
+// NOTE: this supports 1 nested () pair for things like
+// :host(:not([selected]), more general support requires
+// parsing which seems like overkill
+let HOST_PAREN = /(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/;
+// similar to HOST_PAREN
+let SLOTTED_PAREN = /(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/;
+let DIR_PAREN = /(.*):dir\((?:(ltr|rtl))\)/;
+let CSS_CLASS_PREFIX = '.';
+let PSEUDO_PREFIX = ':';
+let CLASS = 'class';
+let SELECTOR_NO_MATCH = 'should_not_match';
+
+export default new StyleTransformer()
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-util.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-util.js
new file mode 100644
index 00000000000..a1f7c24b8ad
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/style-util.js
@@ -0,0 +1,294 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+import {nativeShadow, nativeCssVariables} from './style-settings.js';
+import {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars
+import {MEDIA_MATCH} from './common-regex.js';
+import {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';
+
+/**
+ * @param {string|StyleNode} rules
+ * @param {function(StyleNode)=} callback
+ * @return {string}
+ */
+export function toCssText (rules, callback) {
+ if (!rules) {
+ return '';
+ }
+ if (typeof rules === 'string') {
+ rules = parse(rules);
+ }
+ if (callback) {
+ forEachRule(rules, callback);
+ }
+ return stringify(rules, nativeCssVariables);
+}
+
+/**
+ * @param {HTMLStyleElement} style
+ * @return {StyleNode}
+ */
+export function rulesForStyle(style) {
+ if (!style['__cssRules'] && style.textContent) {
+ style['__cssRules'] = parse(style.textContent);
+ }
+ return style['__cssRules'] || null;
+}
+
+// Tests if a rule is a keyframes selector, which looks almost exactly
+// like a normal selector but is not (it has nothing to do with scoping
+// for example).
+/**
+ * @param {StyleNode} rule
+ * @return {boolean}
+ */
+export function isKeyframesSelector(rule) {
+ return Boolean(rule['parent']) &&
+ rule['parent']['type'] === types.KEYFRAMES_RULE;
+}
+
+/**
+ * @param {StyleNode} node
+ * @param {Function=} styleRuleCallback
+ * @param {Function=} keyframesRuleCallback
+ * @param {boolean=} onlyActiveRules
+ */
+export function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {
+ if (!node) {
+ return;
+ }
+ let skipRules = false;
+ let type = node['type'];
+ if (onlyActiveRules) {
+ if (type === types.MEDIA_RULE) {
+ let matchMedia = node['selector'].match(MEDIA_MATCH);
+ if (matchMedia) {
+ // if rule is a non matching @media rule, skip subrules
+ if (!window.matchMedia(matchMedia[1]).matches) {
+ skipRules = true;
+ }
+ }
+ }
+ }
+ if (type === types.STYLE_RULE) {
+ styleRuleCallback(node);
+ } else if (keyframesRuleCallback &&
+ type === types.KEYFRAMES_RULE) {
+ keyframesRuleCallback(node);
+ } else if (type === types.MIXIN_RULE) {
+ skipRules = true;
+ }
+ let r$ = node['rules'];
+ if (r$ && !skipRules) {
+ for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {
+ forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);
+ }
+ }
+}
+
+// add a string of cssText to the document.
+/**
+ * @param {string} cssText
+ * @param {string} moniker
+ * @param {Node} target
+ * @param {Node} contextNode
+ * @return {HTMLStyleElement}
+ */
+export function applyCss(cssText, moniker, target, contextNode) {
+ let style = createScopeStyle(cssText, moniker);
+ applyStyle(style, target, contextNode);
+ return style;
+}
+
+/**
+ * @param {string} cssText
+ * @param {string} moniker
+ * @return {HTMLStyleElement}
+ */
+export function createScopeStyle(cssText, moniker) {
+ let style = /** @type {HTMLStyleElement} */(document.createElement('style'));
+ if (moniker) {
+ style.setAttribute('scope', moniker);
+ }
+ style.textContent = cssText;
+ return style;
+}
+
+/**
+ * Track the position of the last added style for placing placeholders
+ * @type {Node}
+ */
+let lastHeadApplyNode = null;
+
+// insert a comment node as a styling position placeholder.
+/**
+ * @param {string} moniker
+ * @return {!Comment}
+ */
+export function applyStylePlaceHolder(moniker) {
+ let placeHolder = document.createComment(' Shady DOM styles for ' +
+ moniker + ' ');
+ let after = lastHeadApplyNode ?
+ lastHeadApplyNode['nextSibling'] : null;
+ let scope = document.head;
+ scope.insertBefore(placeHolder, after || scope.firstChild);
+ lastHeadApplyNode = placeHolder;
+ return placeHolder;
+}
+
+/**
+ * @param {HTMLStyleElement} style
+ * @param {?Node} target
+ * @param {?Node} contextNode
+ */
+export function applyStyle(style, target, contextNode) {
+ target = target || document.head;
+ let after = (contextNode && contextNode.nextSibling) ||
+ target.firstChild;
+ target.insertBefore(style, after);
+ if (!lastHeadApplyNode) {
+ lastHeadApplyNode = style;
+ } else {
+ // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode
+ let position = style.compareDocumentPosition(lastHeadApplyNode);
+ if (position === Node.DOCUMENT_POSITION_PRECEDING) {
+ lastHeadApplyNode = style;
+ }
+ }
+}
+
+/**
+ * @param {string} buildType
+ * @return {boolean}
+ */
+export function isTargetedBuild(buildType) {
+ return nativeShadow ? buildType === 'shadow' : buildType === 'shady';
+}
+
+/**
+ * @param {Element} element
+ * @return {?string}
+ */
+export function getCssBuildType(element) {
+ return element.getAttribute('css-build');
+}
+
+/**
+ * Walk from text[start] matching parens and
+ * returns position of the outer end paren
+ * @param {string} text
+ * @param {number} start
+ * @return {number}
+ */
+function findMatchingParen(text, start) {
+ let level = 0;
+ for (let i=start, l=text.length; i < l; i++) {
+ if (text[i] === '(') {
+ level++;
+ } else if (text[i] === ')') {
+ if (--level === 0) {
+ return i;
+ }
+ }
+ }
+ return -1;
+}
+
+/**
+ * @param {string} str
+ * @param {function(string, string, string, string)} callback
+ */
+export function processVariableAndFallback(str, callback) {
+ // find 'var('
+ let start = str.indexOf('var(');
+ if (start === -1) {
+ // no var?, everything is prefix
+ return callback(str, '', '', '');
+ }
+ //${prefix}var(${inner})${suffix}
+ let end = findMatchingParen(str, start + 3);
+ let inner = str.substring(start + 4, end);
+ let prefix = str.substring(0, start);
+ // suffix may have other variables
+ let suffix = processVariableAndFallback(str.substring(end + 1), callback);
+ let comma = inner.indexOf(',');
+ // value and fallback args should be trimmed to match in property lookup
+ if (comma === -1) {
+ // variable, no fallback
+ return callback(prefix, inner.trim(), '', suffix);
+ }
+ // var(${value},${fallback})
+ let value = inner.substring(0, comma).trim();
+ let fallback = inner.substring(comma + 1).trim();
+ return callback(prefix, value, fallback, suffix);
+}
+
+/**
+ * @param {Element} element
+ * @param {string} value
+ */
+export function setElementClassRaw(element, value) {
+ // use native setAttribute provided by ShadyDOM when setAttribute is patched
+ if (nativeShadow) {
+ element.setAttribute('class', value);
+ } else {
+ window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);
+ }
+}
+
+/**
+ * @param {Element | {is: string, extends: string}} element
+ * @return {{is: string, typeExtension: string}}
+ */
+export function getIsExtends(element) {
+ let localName = element['localName'];
+ let is = '', typeExtension = '';
+ /*
+ NOTE: technically, this can be wrong for certain svg elements
+ with `-` in the name like `<font-face>`
+ */
+ if (localName) {
+ if (localName.indexOf('-') > -1) {
+ is = localName;
+ } else {
+ typeExtension = localName;
+ is = (element.getAttribute && element.getAttribute('is')) || '';
+ }
+ } else {
+ is = /** @type {?} */(element).is;
+ typeExtension = /** @type {?} */(element).extends;
+ }
+ return {is, typeExtension};
+}
+
+/**
+ * @param {Element|DocumentFragment} element
+ * @return {string}
+ */
+export function gatherStyleText(element) {
+ /** @type {!Array<string>} */
+ const styleTextParts = [];
+ const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));
+ for (let i = 0; i < styles.length; i++) {
+ const style = styles[i];
+ if (isUnscopedStyle(style)) {
+ if (!nativeShadow) {
+ processUnscopedStyle(style);
+ style.parentNode.removeChild(style);
+ }
+ } else {
+ styleTextParts.push(style.textContent);
+ style.parentNode.removeChild(style);
+ }
+ }
+ return styleTextParts.join('').trim();
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/template-map.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/template-map.js
new file mode 100644
index 00000000000..d3eb8409a13
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/template-map.js
@@ -0,0 +1,17 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+/**
+ * @const {!Object<string, !HTMLTemplateElement>}
+ */
+const templateMap = {};
+export default templateMap;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/unscoped-style-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/unscoped-style-handler.js
new file mode 100644
index 00000000000..95e994fae95
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/src/unscoped-style-handler.js
@@ -0,0 +1,40 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+'use strict';
+
+/** @type {!Set<string>} */
+const styleTextSet = new Set();
+
+export const scopingAttribute = 'shady-unscoped';
+
+/**
+ * Add a specifically-marked style to the document directly, and only one copy of that style.
+ *
+ * @param {!HTMLStyleElement} style
+ * @return {undefined}
+ */
+export function processUnscopedStyle(style) {
+ const text = style.textContent;
+ if (!styleTextSet.has(text)) {
+ styleTextSet.add(text);
+ const newStyle = style.cloneNode(true);
+ document.head.appendChild(newStyle);
+ }
+}
+
+/**
+ * Check if a style is supposed to be unscoped
+ * @param {!HTMLStyleElement} style
+ * @return {boolean} true if the style has the unscoping attribute
+ */
+export function isUnscopedStyle(style) {
+ return style.hasAttribute(scopingAttribute);
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/wct.conf.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/wct.conf.json
new file mode 100644
index 00000000000..7c08b8df08e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/shadycss/wct.conf.json
@@ -0,0 +1,17 @@
+{
+ "suites": ["tests/runner.html"],
+ "plugins": {
+ "local": {
+ "browserOptions": {
+ "chrome": [
+ "no-sandbox",
+ "disable-gpu",
+ "headless"
+ ],
+ "firefox": [
+ "-headless"
+ ]
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.bower.json
new file mode 100644
index 00000000000..11a0201f416
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.bower.json
@@ -0,0 +1,14 @@
+{
+ "name": "sinon-chai",
+ "homepage": "https://github.com/domenic/sinon-chai",
+ "version": "2.14.0",
+ "_release": "2.14.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v2.14.0",
+ "commit": "3ddf66c1d706aa14178753587d038a104153fb60"
+ },
+ "_source": "https://github.com/domenic/sinon-chai.git",
+ "_target": "^2.7.0",
+ "_originalSource": "sinon-chai"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.editorconfig b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.editorconfig
new file mode 100644
index 00000000000..911234fa4a2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+charset = utf-8
+indent_style = space
+indent_size = 4
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintignore b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintignore
new file mode 100644
index 00000000000..404abb22121
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintrc.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintrc.json
new file mode 100644
index 00000000000..f34ba89f582
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.eslintrc.json
@@ -0,0 +1,229 @@
+{
+ "root": true,
+ "env": {
+ "node": true,
+ "amd": true,
+ "es6": false
+ },
+ "parserOptions": {
+ "ecmaVersion": 5
+ },
+ "rules": {
+ // Possible errors
+ "no-await-in-loop": "off",
+ "comma-dangle": ["error", "never"],
+ "no-cond-assign": ["error", "except-parens"],
+ "no-console": "off",
+ "no-constant-condition": "error",
+ "no-control-regex": "error",
+ "no-debugger": "error",
+ "no-dupe-args": "error",
+ "no-dupe-keys": "error",
+ "no-duplicate-case": "error",
+ "no-empty": "error",
+ "no-empty-character-class": "error",
+ "no-ex-assign": "error",
+ "no-extra-boolean-cast": "error",
+ "no-extra-parens": ["error", "all", { "conditionalAssign": false, "nestedBinaryExpressions": false }],
+ "no-extra-semi": "error",
+ "no-func-assign": "error",
+ "no-inner-declarations": "off",
+ "no-invalid-regexp": "error",
+ "no-irregular-whitespace": "error",
+ "no-obj-calls": "error",
+ "no-prototype-builtins": "error",
+ "no-regex-spaces": "error",
+ "no-sparse-arrays": "error",
+ "no-template-curly-in-string": "error",
+ "no-unexpected-multiline": "error",
+ "no-unreachable": "error",
+ "no-unsafe-finally": "off",
+ "no-unsafe-negation": "error",
+ "use-isnan": "error",
+ "valid-jsdoc": "off",
+ "valid-typeof": "error",
+
+ // Best practices
+ "accessor-pairs": "error",
+ "array-callback-return": "error",
+ "block-scoped-var": "off",
+ "class-methods-use-this": "error",
+ "complexity": "off",
+ "consistent-return": "error",
+ "curly": ["error", "all"],
+ "default-case": "off",
+ "dot-location": ["error", "property"],
+ "dot-notation": "error",
+ "eqeqeq": "error",
+ "guard-for-in": "off",
+ "no-alert": "error",
+ "no-caller": "error",
+ "no-case-declarations": "error",
+ "no-div-regex": "off",
+ "no-else-return": "error",
+ "no-empty-function": "error",
+ "no-empty-pattern": "error",
+ "no-eq-null": "error",
+ "no-eval": "error",
+ "no-extend-native": "error",
+ "no-extra-bind": "error",
+ "no-extra-label": "error",
+ "no-fallthrough": "error",
+ "no-floating-decimal": "error",
+ "no-global-assign": "error",
+ "no-implicit-coercion": "error",
+ "no-implicit-globals": "error",
+ "no-implied-eval": "off",
+ "no-invalid-this": "error",
+ "no-iterator": "error",
+ "no-labels": ["error", { "allowLoop": true }],
+ "no-lone-blocks": "error",
+ "no-loop-func": "off",
+ "no-magic-numbers": "off",
+ "no-multi-spaces": "error",
+ "no-multi-str": "error",
+ "no-new": "error",
+ "no-new-func": "error",
+ "no-new-wrappers": "error",
+ "no-octal": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "off",
+ "no-process-env": "error",
+ "no-proto": "error",
+ "no-redeclare": "error",
+ "no-restricted-properties": "off",
+ "no-return-assign": ["error", "except-parens"],
+ "no-return-await": "error",
+ "no-script-url": "off",
+ "no-self-assign": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-throw-literal": "error",
+ "no-unmodified-loop-condition": "error",
+ "no-unused-expressions": "error",
+ "no-unused-labels": "error",
+ "no-useless-call": "error",
+ "no-useless-concat": "error",
+ "no-useless-escape": "error",
+ "no-useless-return": "error",
+ "no-void": "error",
+ "no-warning-comments": "off",
+ "no-with": "error",
+ "radix": ["error", "as-needed"],
+ "require-await": "error",
+ "vars-on-top": "off",
+ "wrap-iife": ["error", "outside"],
+ "yoda": ["error", "never"],
+
+ // Strict Mode
+ "strict": ["error", "global"],
+
+ // Variables
+ "init-declarations": "off",
+ "no-catch-shadow": "error",
+ "no-delete-var": "error",
+ "no-label-var": "error",
+ "no-restricted-globals": "off",
+ "no-shadow": "error",
+ "no-shadow-restricted-names": "error",
+ "no-undef": "error",
+ "no-undef-init": "error",
+ "no-undefined": "off",
+ "no-unused-vars": "error",
+ "no-use-before-define": ["error", "nofunc"],
+
+ // Node.js and CommonJS
+ "callback-return": "off",
+ "global-require": "error",
+ "handle-callback-err": "error",
+ "no-mixed-requires": ["error", true],
+ "no-new-require": "error",
+ "no-path-concat": "error",
+ "no-process-exit": "error",
+ "no-restricted-imports": "off",
+ "no-restricted-modules": "off",
+ "no-sync": "off",
+
+ // Stylistic Issues
+ "array-bracket-spacing": ["error", "never"],
+ "block-spacing": ["error", "always"],
+ "brace-style": ["error", "1tbs", { "allowSingleLine": false }],
+ "camelcase": ["error", { "properties": "always" }],
+ "capitalized-comments": ["error", "always", { "ignoreConsecutiveComments": true }],
+ "comma-spacing": ["error", { "before": false, "after": true }],
+ "comma-style": ["error", "last"],
+ "computed-property-spacing": ["error", "never"],
+ "consistent-this": "off",
+ "eol-last": "error",
+ "func-call-spacing": ["error", "never"],
+ "func-name-matching": ["error", "always"],
+ "func-names": ["error", "never"],
+ "func-style": ["error", "declaration"],
+ "id-blacklist": "off",
+ "id-length": "off",
+ "id-match": "off",
+ "indent": ["error", 4, { "SwitchCase": 1 }],
+ "jsx-quotes": "off",
+ "key-spacing": ["error", { "beforeColon": false, "afterColon": true, "mode": "strict" }],
+ "keyword-spacing": ["error", { "before": true, "after": true }],
+ "line-comment-position": "off",
+ "linebreak-style": ["error", "unix"],
+ "lines-around-comment": "off",
+ "lines-around-directive": "off",
+ "max-depth": "off",
+ "max-len": ["error", 120, { "ignoreUrls": true }],
+ "max-lines": "off",
+ "max-nested-callbacks": "off",
+ "max-params": "off",
+ "max-statements": "off",
+ "max-statements-per-line": ["error", { "max": 1 }],
+ "multiline-ternary": "off",
+ "new-cap": "error",
+ "new-parens": "error",
+ "newline-after-var": "off",
+ "newline-before-return": "off",
+ "newline-per-chained-call": "off",
+ "no-array-constructor": "error",
+ "no-bitwise": "off",
+ "no-continue": "off",
+ "no-inline-comments": "off",
+ "no-lonely-if": "error",
+ "no-mixed-operators": "error",
+ "no-mixed-spaces-and-tabs": "error",
+ "no-multiple-empty-lines": "error",
+ "no-negated-condition": "off",
+ "no-nested-ternary": "error",
+ "no-new-object": "error",
+ "no-plusplus": "off",
+ "no-restricted-syntax": "off",
+ "no-tabs": "error",
+ "no-ternary": "off",
+ "no-trailing-spaces": "error",
+ "no-underscore-dangle": "off",
+ "no-unneeded-ternary": "error",
+ "no-whitespace-before-property": "error",
+ "object-curly-newline": ["error", { "multiline": true }],
+ "object-curly-spacing": ["error", "always"],
+ "object-property-newline": "off",
+ "one-var": ["error", "never"],
+ "one-var-declaration-per-line": ["error", "initializations"],
+ "operator-assignment": ["error", "always"],
+ "operator-linebreak": ["error", "after"],
+ "padded-blocks": ["error", "never"],
+ "quote-props": ["error", "as-needed"],
+ "quotes": ["error", "double", { "avoidEscape": true, "allowTemplateLiterals": true }],
+ "require-jsdoc": "off",
+ "semi": ["error", "always"],
+ "semi-spacing": "error",
+ "sort-keys": "off",
+ "sort-vars": "off",
+ "space-before-blocks": ["error", "always"],
+ "space-before-function-paren": ["error", { "anonymous": "always", "named": "never" }],
+ "space-in-parens": ["error", "never"],
+ "space-infix-ops": "error",
+ "space-unary-ops": ["error", { "words": true, "nonwords": false }],
+ "spaced-comment": ["error", "always", { "markers": ["///"] }],
+ "unicode-bom": ["error", "never"],
+ "wrap-regex": "off"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.travis.yml
new file mode 100644
index 00000000000..0f161f78e75
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/.travis.yml
@@ -0,0 +1,30 @@
+language: node_js
+node_js:
+ - "0.10"
+ - stable
+env:
+ # Can't figure out how to DRY this up: http://stackoverflow.com/q/22397300/3191
+ - CHAI_VERSION=^1.9.2 SINON_VERSION=^1.4.0
+ - CHAI_VERSION=^2.0.0 SINON_VERSION=^1.4.0
+ - CHAI_VERSION=^3.0.0 SINON_VERSION=^1.4.0
+ - CHAI_VERSION=^4.0.0 SINON_VERSION=^1.4.0
+ - CHAI_VERSION=^1.9.2 SINON_VERSION=^2.1.0
+ - CHAI_VERSION=^2.0.0 SINON_VERSION=^2.1.0
+ - CHAI_VERSION=^3.0.0 SINON_VERSION=^2.1.0
+ - CHAI_VERSION=^4.0.0 SINON_VERSION=^2.1.0
+ - CHAI_VERSION=^1.9.2 SINON_VERSION=^3.0.0
+ - CHAI_VERSION=^2.0.0 SINON_VERSION=^3.0.0
+ - CHAI_VERSION=^3.0.0 SINON_VERSION=^3.0.0
+ - CHAI_VERSION=^4.0.0 SINON_VERSION=^3.0.0
+ - CHAI_VERSION=^1.9.2 SINON_VERSION=^4.0.0
+ - CHAI_VERSION=^2.0.0 SINON_VERSION=^4.0.0
+ - CHAI_VERSION=^3.0.0 SINON_VERSION=^4.0.0
+ - CHAI_VERSION=^4.0.0 SINON_VERSION=^4.0.0
+script:
+ - test $TRAVIS_NODE_VERSION == "0.10" || npm run lint
+ - npm run test-travis
+before_install:
+ - if [ `npm -v` = "5.3.0" ]; then
+ npm install -g npm@^5.4.2;
+ npm -v;
+ fi
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/LICENSE.txt b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/LICENSE.txt
new file mode 100644
index 00000000000..1e11f2e7d23
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/LICENSE.txt
@@ -0,0 +1,49 @@
+Dual licensed under WTFPL and BSD:
+
+---
+
+Copyright © 2012–2017 Domenic Denicola <d@domenic.me>
+
+This work is free. You can redistribute it and/or modify it under the
+terms of the Do What The Fuck You Want To Public License, Version 2,
+as published by Sam Hocevar. See below for more details.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
+
+---
+
+Copyright © 2012–2017, Domenic Denicola <d@domenic.me>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/README.md
new file mode 100644
index 00000000000..b9112b75508
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/README.md
@@ -0,0 +1,256 @@
+# Sinon.JS Assertions for Chai
+
+**Sinon–Chai** provides a set of custom assertions for using the [Sinon.JS][] spy, stub, and mocking framework with the
+[Chai][] assertion library. You get all the benefits of Chai with all the powerful tools of Sinon.JS.
+
+Instead of using Sinon.JS's assertions:
+
+```javascript
+sinon.assertCalledWith(mySpy, "foo");
+```
+
+or awkwardly trying to use Chai's `should` or `expect` interfaces on spy properties:
+
+```javascript
+mySpy.calledWith("foo").should.be.ok;
+expect(mySpy.calledWith("foo")).to.be.ok;
+```
+
+you can say
+
+```javascript
+mySpy.should.have.been.calledWith("foo");
+expect(mySpy).to.have.been.calledWith("foo");
+```
+
+## Assertions
+
+All of your favorite Sinon.JS assertions made their way into Sinon–Chai. We show the `should` syntax here; the `expect`
+equivalent is also available.
+
+<table>
+ <thead>
+ <tr>
+ <th>Sinon.JS property/method</th>
+ <th>Sinon–Chai assertion</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>called</td>
+ <td>spy.should.have.been.called</td>
+ </tr>
+ <tr>
+ <td>callCount</td>
+ <td>spy.should.have.callCount(n)</td>
+ </tr>
+ <tr>
+ <td>calledOnce</td>
+ <td>spy.should.have.been.calledOnce</td>
+ </tr>
+ <tr>
+ <td>calledTwice</td>
+ <td>spy.should.have.been.calledTwice</td>
+ </tr>
+ <tr>
+ <td>calledThrice</td>
+ <td>spy.should.have.been.calledThrice</td>
+ </tr>
+ <tr>
+ <td>calledBefore</td>
+ <td>spy1.should.have.been.calledBefore(spy2)</td>
+ </tr>
+ <tr>
+ <td>calledAfter</td>
+ <td>spy1.should.have.been.calledAfter(spy2)</td>
+ </tr>
+ <tr>
+ <td>calledImmediatelyBefore</td>
+ <td>spy.should.have.been.calledImmediatelyBefore(spy2)</td>
+ </tr>
+ <tr>
+ <td>calledImmediatelyAfter</td>
+ <td>spy.should.have.been.calledImmediatelyAfter(spy2)</td>
+ </tr>
+ <tr>
+ <td>calledWithNew</td>
+ <td>spy.should.have.been.calledWithNew</td>
+ </tr>
+ <tr>
+ <td>alwaysCalledWithNew</td>
+ <td>spy.should.always.have.been.calledWithNew</td>
+ </tr>
+ <tr>
+ <td>calledOn</td>
+ <td>spy.should.have.been.calledOn(context)</td>
+ </tr>
+ <tr>
+ <td>alwaysCalledOn</td>
+ <td>spy.should.always.have.been.calledOn(context)</td>
+ </tr>
+ <tr>
+ <td>calledWith</td>
+ <td>spy.should.have.been.calledWith(...args)</td>
+ </tr>
+ <tr>
+ <td>alwaysCalledWith</td>
+ <td>spy.should.always.have.been.calledWith(...args)</td>
+ </tr>
+ <tr>
+ <td>calledWithExactly</td>
+ <td>spy.should.have.been.calledWithExactly(...args)</td>
+ </tr>
+ <tr>
+ <td>alwaysCalledWithExactly</td>
+ <td>spy.should.always.have.been.calledWithExactly(...args)</td>
+ </tr>
+ <tr>
+ <td>calledWithMatch</td>
+ <td>spy.should.have.been.calledWithMatch(...args)</td>
+ </tr>
+ <tr>
+ <td>alwaysCalledWithMatch</td>
+ <td>spy.should.always.have.been.calledWithMatch(...args)</td>
+ </tr>
+ <tr>
+ <td>returned</td>
+ <td>spy.should.have.returned(returnVal)</td>
+ </tr>
+ <tr>
+ <td>alwaysReturned</td>
+ <td>spy.should.have.always.returned(returnVal)</td>
+ </tr>
+ <tr>
+ <td>threw</td>
+ <td>spy.should.have.thrown(errorObjOrErrorTypeStringOrNothing)</td>
+ </tr>
+ <tr>
+ <td>alwaysThrew</td>
+ <td>spy.should.have.always.thrown(errorObjOrErrorTypeStringOrNothing)</td>
+ </tr>
+ </tbody>
+</table>
+
+For more information on the behavior of each assertion, see
+[the documentation for the corresponding spy methods][spymethods]. These of course work on not only spies, but
+individual spy calls, stubs, and mocks as well.
+
+Note that you can negate any assertion with Chai's `.not`. E. g. for `notCalled` use `spy.should.have.not.been.called`.
+
+For `assert` interface there is no need for this library. You can install [Sinon.JS assertions][sinonassertions] right into Chai's `assert` object with `expose`:
+
+```javascript
+var chai = require("chai");
+var sinon = require("sinon");
+
+sinon.assert.expose(chai.assert, { prefix: "" });
+```
+
+## Examples
+
+Using Chai's `should`:
+
+```javascript
+"use strict";
+var chai = require("chai");
+var sinon = require("sinon");
+var sinonChai = require("sinon-chai");
+chai.should();
+chai.use(sinonChai);
+
+function hello(name, cb) {
+ cb("hello " + name);
+}
+
+describe("hello", function () {
+ it("should call callback with correct greeting", function () {
+ var cb = sinon.spy();
+
+ hello("foo", cb);
+
+ cb.should.have.been.calledWith("hello foo");
+ });
+});
+```
+
+Using Chai's `expect`:
+
+```javascript
+"use strict";
+var chai = require("chai");
+var sinon = require("sinon");
+var sinonChai = require("sinon-chai");
+var expect = chai.expect;
+chai.use(sinonChai);
+
+function hello(name, cb) {
+ cb("hello " + name);
+}
+
+describe("hello", function () {
+ it("should call callback with correct greeting", function () {
+ var cb = sinon.spy();
+
+ hello("foo", cb);
+
+ expect(cb).to.have.been.calledWith("hello foo");
+ });
+});
+```
+
+## Installation and Usage
+
+### Node
+
+Do an `npm install sinon-chai` to get up and running. Then:
+
+```javascript
+var chai = require("chai");
+var sinonChai = require("sinon-chai");
+
+chai.use(sinonChai);
+```
+
+You can of course put this code in a common test fixture file; for an example using [Mocha][], see
+[the Sinon–Chai tests themselves][fixturedemo].
+
+### AMD
+
+Sinon–Chai supports being used as an [AMD][] module, registering itself anonymously (just like Chai). So, assuming you
+have configured your loader to map the Chai and Sinon–Chai files to the respective module IDs `"chai"` and
+`"sinon-chai"`, you can use them as follows:
+
+```javascript
+define(function (require, exports, module) {
+ var chai = require("chai");
+ var sinonChai = require("sinon-chai");
+
+ chai.use(sinonChai);
+});
+```
+
+### `<script>` tag
+
+If you include Sinon–Chai directly with a `<script>` tag, after the one for Chai itself, then it will automatically plug
+in to Chai and be ready for use. Note that you'll want to get the latest browser build of Sinon.JS as well:
+
+```html
+<script src="chai.js"></script>
+<script src="sinon-chai.js"></script>
+<script src="sinon.js"></script>
+```
+
+### Ruby on Rails
+
+Thanks to [Cymen Vig][], there's now [a Ruby gem][] of Sinon–Chai that integrates it with the Rails asset pipeline!
+
+
+[Sinon.JS]: http://sinonjs.org/
+[Chai]: http://chaijs.com/
+[spymethods]: http://sinonjs.org/docs/#spies-api
+[sinonassertions]: http://sinonjs.org/docs/#assertions
+[Mocha]: https://mochajs.org/
+[fixturedemo]: https://github.com/domenic/sinon-chai/tree/master/test/
+[AMD]: https://github.com/amdjs/amdjs-api/wiki/AMD
+[Cymen Vig]: https://github.com/cymen
+[a Ruby gem]: https://github.com/cymen/sinon-chai-rails
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/lib/sinon-chai.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/lib/sinon-chai.js
new file mode 100644
index 00000000000..32d4e4ec52d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/lib/sinon-chai.js
@@ -0,0 +1,147 @@
+"use strict";
+/* eslint-disable no-invalid-this */
+
+(function (sinonChai) {
+ // Module systems magic dance.
+
+ /* istanbul ignore else */
+ if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
+ // NodeJS
+ module.exports = sinonChai;
+ } else if (typeof define === "function" && define.amd) {
+ // AMD
+ define(function () {
+ return sinonChai;
+ });
+ } else {
+ // Other environment (usually <script> tag): plug in to global chai instance directly.
+ /* global chai: false */
+ chai.use(sinonChai);
+ }
+}(function (chai, utils) {
+ var slice = Array.prototype.slice;
+
+ function isSpy(putativeSpy) {
+ return typeof putativeSpy === "function" &&
+ typeof putativeSpy.getCall === "function" &&
+ typeof putativeSpy.calledWithExactly === "function";
+ }
+
+ function timesInWords(count) {
+ switch (count) {
+ case 1: {
+ return "once";
+ }
+ case 2: {
+ return "twice";
+ }
+ case 3: {
+ return "thrice";
+ }
+ default: {
+ return (count || 0) + " times";
+ }
+ }
+ }
+
+ function isCall(putativeCall) {
+ return putativeCall && isSpy(putativeCall.proxy);
+ }
+
+ function assertCanWorkWith(assertion) {
+ if (!isSpy(assertion._obj) && !isCall(assertion._obj)) {
+ throw new TypeError(utils.inspect(assertion._obj) + " is not a spy or a call to a spy!");
+ }
+ }
+
+ function getMessages(spy, action, nonNegatedSuffix, always, args) {
+ var verbPhrase = always ? "always have " : "have ";
+ nonNegatedSuffix = nonNegatedSuffix || "";
+ if (isSpy(spy.proxy)) {
+ spy = spy.proxy;
+ }
+
+ function printfArray(array) {
+ return spy.printf.apply(spy, array);
+ }
+
+ return {
+ affirmative: function () {
+ return printfArray(["expected %n to " + verbPhrase + action + nonNegatedSuffix].concat(args));
+ },
+ negative: function () {
+ return printfArray(["expected %n to not " + verbPhrase + action].concat(args));
+ }
+ };
+ }
+
+ function sinonProperty(name, action, nonNegatedSuffix) {
+ utils.addProperty(chai.Assertion.prototype, name, function () {
+ assertCanWorkWith(this);
+
+ var messages = getMessages(this._obj, action, nonNegatedSuffix, false);
+ this.assert(this._obj[name], messages.affirmative, messages.negative);
+ });
+ }
+
+ function sinonPropertyAsBooleanMethod(name, action, nonNegatedSuffix) {
+ utils.addMethod(chai.Assertion.prototype, name, function (arg) {
+ assertCanWorkWith(this);
+
+ var messages = getMessages(this._obj, action, nonNegatedSuffix, false, [timesInWords(arg)]);
+ this.assert(this._obj[name] === arg, messages.affirmative, messages.negative);
+ });
+ }
+
+ function createSinonMethodHandler(sinonName, action, nonNegatedSuffix) {
+ return function () {
+ assertCanWorkWith(this);
+
+ var alwaysSinonMethod = "always" + sinonName[0].toUpperCase() + sinonName.substring(1);
+ var shouldBeAlways = utils.flag(this, "always") && typeof this._obj[alwaysSinonMethod] === "function";
+ var sinonMethodName = shouldBeAlways ? alwaysSinonMethod : sinonName;
+
+ var messages = getMessages(this._obj, action, nonNegatedSuffix, shouldBeAlways, slice.call(arguments));
+ this.assert(
+ this._obj[sinonMethodName].apply(this._obj, arguments),
+ messages.affirmative,
+ messages.negative
+ );
+ };
+ }
+
+ function sinonMethodAsProperty(name, action, nonNegatedSuffix) {
+ var handler = createSinonMethodHandler(name, action, nonNegatedSuffix);
+ utils.addProperty(chai.Assertion.prototype, name, handler);
+ }
+
+ function exceptionalSinonMethod(chaiName, sinonName, action, nonNegatedSuffix) {
+ var handler = createSinonMethodHandler(sinonName, action, nonNegatedSuffix);
+ utils.addMethod(chai.Assertion.prototype, chaiName, handler);
+ }
+
+ function sinonMethod(name, action, nonNegatedSuffix) {
+ exceptionalSinonMethod(name, name, action, nonNegatedSuffix);
+ }
+
+ utils.addProperty(chai.Assertion.prototype, "always", function () {
+ utils.flag(this, "always", true);
+ });
+
+ sinonProperty("called", "been called", " at least once, but it was never called");
+ sinonPropertyAsBooleanMethod("callCount", "been called exactly %1", ", but it was called %c%C");
+ sinonProperty("calledOnce", "been called exactly once", ", but it was called %c%C");
+ sinonProperty("calledTwice", "been called exactly twice", ", but it was called %c%C");
+ sinonProperty("calledThrice", "been called exactly thrice", ", but it was called %c%C");
+ sinonMethodAsProperty("calledWithNew", "been called with new");
+ sinonMethod("calledBefore", "been called before %1");
+ sinonMethod("calledAfter", "been called after %1");
+ sinonMethod("calledImmediatelyBefore", "been called immediately before %1");
+ sinonMethod("calledImmediatelyAfter", "been called immediately after %1");
+ sinonMethod("calledOn", "been called with %1 as this", ", but it was called with %t instead");
+ sinonMethod("calledWith", "been called with arguments %*", "%D");
+ sinonMethod("calledWithExactly", "been called with exact arguments %*", "%D");
+ sinonMethod("calledWithMatch", "been called with arguments matching %*", "%D");
+ sinonMethod("returned", "returned %1");
+ exceptionalSinonMethod("thrown", "threw", "thrown %1");
+}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package-lock.json
new file mode 100644
index 00000000000..1176e5c2fa2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package-lock.json
@@ -0,0 +1,1830 @@
+{
+ "name": "sinon-chai",
+ "version": "2.14.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+ "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
+ "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
+ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2",
+ "longest": "1.0.1",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
+ "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz",
+ "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz",
+ "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
+ "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true,
+ "optional": true
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4",
+ "lazy-cache": "1.0.4"
+ }
+ },
+ "chai": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.1.tgz",
+ "integrity": "sha1-ZuISeebzxkFf+CMYeCJ5AOIXGzk=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.0.2",
+ "check-error": "1.0.2",
+ "deep-eql": "2.0.2",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz",
+ "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
+ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "1.0.1"
+ }
+ },
+ "cli-width": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz",
+ "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "center-align": "0.1.3",
+ "right-align": "0.1.3",
+ "wordwrap": "0.0.2"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.2.11",
+ "typedarray": "0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.23"
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true,
+ "optional": true
+ },
+ "deep-eql": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-2.0.2.tgz",
+ "integrity": "sha1-sbrAblbwp2d3aG1Qyf63XC7XZ5o=",
+ "dev": true,
+ "requires": {
+ "type-detect": "3.0.0"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-3.0.0.tgz",
+ "integrity": "sha1-RtDMhVOrt7E6NSsNbeov1Y8tm1U=",
+ "dev": true
+ }
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz",
+ "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2",
+ "isarray": "1.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.23",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz",
+ "integrity": "sha1-dXi1G+l0IHpUh4IbVlOMIk5Oezg=",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "2.0.1",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz",
+ "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.23",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-map": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
+ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.23",
+ "es6-iterator": "2.0.1",
+ "es6-set": "0.1.5",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-set": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
+ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.23",
+ "es6-iterator": "2.0.1",
+ "es6-symbol": "3.1.1",
+ "event-emitter": "0.3.5"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.23"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.23",
+ "es6-iterator": "2.0.1",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "requires": {
+ "esprima": "2.7.3",
+ "estraverse": "1.9.3",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.2.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true
+ }
+ }
+ },
+ "escope": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
+ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
+ "dev": true,
+ "requires": {
+ "es6-map": "0.1.5",
+ "es6-weak-map": "2.0.2",
+ "esrecurse": "4.1.0",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint": {
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
+ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.22.0",
+ "chalk": "1.1.3",
+ "concat-stream": "1.6.0",
+ "debug": "2.6.8",
+ "doctrine": "2.0.0",
+ "escope": "3.6.0",
+ "espree": "3.4.3",
+ "esquery": "1.0.0",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "glob": "7.1.2",
+ "globals": "9.18.0",
+ "ignore": "3.3.3",
+ "imurmurhash": "0.1.4",
+ "inquirer": "0.12.0",
+ "is-my-json-valid": "2.16.0",
+ "is-resolvable": "1.0.0",
+ "js-yaml": "3.8.4",
+ "json-stable-stringify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "1.2.1",
+ "progress": "1.1.8",
+ "require-uncached": "1.0.3",
+ "shelljs": "0.7.8",
+ "strip-bom": "3.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "3.8.3",
+ "text-table": "0.2.0",
+ "user-home": "2.0.0"
+ }
+ },
+ "espree": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz",
+ "integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.0.3",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz",
+ "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.1.1",
+ "object-assign": "4.1.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz",
+ "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.23"
+ }
+ },
+ "exit-hook": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
+ "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5",
+ "object-assign": "4.1.1"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.2.2",
+ "object-assign": "4.1.1"
+ }
+ },
+ "flat-cache": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz",
+ "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.1",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "handlebars": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
+ "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "optimist": "0.6.1",
+ "source-map": "0.4.4",
+ "uglify-js": "2.8.29"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz",
+ "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
+ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "1.4.0",
+ "ansi-regex": "2.1.1",
+ "chalk": "1.1.3",
+ "cli-cursor": "1.0.2",
+ "cli-width": "2.1.0",
+ "figures": "1.7.0",
+ "lodash": "4.17.4",
+ "readline2": "1.0.1",
+ "run-async": "0.1.0",
+ "rx-lite": "3.1.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "through": "2.3.8"
+ }
+ },
+ "interpret": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz",
+ "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz",
+ "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-resolvable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz",
+ "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=",
+ "dev": true,
+ "requires": {
+ "tryit": "1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "istanbul": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9",
+ "async": "1.5.2",
+ "escodegen": "1.8.1",
+ "esprima": "2.7.3",
+ "glob": "5.0.15",
+ "handlebars": "4.0.10",
+ "js-yaml": "3.8.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "once": "1.4.0",
+ "resolve": "1.1.7",
+ "supports-color": "3.2.3",
+ "which": "1.3.0",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz",
+ "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.8.4",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz",
+ "integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "3.1.3"
+ }
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "just-extend": {
+ "version": "1.1.22",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.22.tgz",
+ "integrity": "sha1-MzCvdWyralQnAMZLLk5KoGLVL/8=",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true,
+ "optional": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lolex": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.1.2.tgz",
+ "integrity": "sha1-JpS5U8nqTQE+W4v7qJHJkQJbJik=",
+ "dev": true
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.0.tgz",
+ "integrity": "sha512-pIU2PJjrPYvYRqVpjXzj76qltO9uBYI7woYAMoxbSefsa+vqAfptjoeevd6bUgwD0mPIO+hv9f7ltvsNreL2PA==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
+ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
+ "dev": true
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
+ "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
+ "dev": true
+ },
+ "opener": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz",
+ "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=",
+ "dev": true
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8",
+ "wordwrap": "0.0.3"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ }
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "pluralize": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
+ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.2.11",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz",
+ "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.0.1",
+ "string_decoder": "1.0.2",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ }
+ }
+ },
+ "readline2": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
+ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "mute-stream": "0.0.5"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.3.3"
+ }
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "resolve": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
+ "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
+ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
+ "dev": true,
+ "requires": {
+ "exit-hook": "1.1.1",
+ "onetime": "1.1.0"
+ }
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "align-text": "0.1.4"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "run-async": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
+ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "rx-lite": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
+ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
+ "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
+ "dev": true
+ },
+ "samsam": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.2.1.tgz",
+ "integrity": "sha1-7dOQk6MYQ3DLhZJDsr3yVefY6mc=",
+ "dev": true
+ },
+ "shelljs": {
+ "version": "0.7.8",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
+ "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "interpret": "1.0.3",
+ "rechoir": "0.6.2"
+ }
+ },
+ "sinon": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.0.0.tgz",
+ "integrity": "sha1-pUpfAjeqHdIhXl6ByJtCtQxP22s=",
+ "dev": true,
+ "requires": {
+ "diff": "3.2.0",
+ "formatio": "1.2.0",
+ "lodash.get": "4.4.2",
+ "lolex": "2.1.2",
+ "native-promise-only": "0.8.1",
+ "nise": "1.1.0",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.2.1",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.3"
+ },
+ "dependencies": {
+ "nise": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.1.0.tgz",
+ "integrity": "sha512-lIFidCxB0mJGyq1i33tLRNojtMoYX95EAI7WQEU+/ees0w6hvXZQHZ7WD130Tjeh5+YJAUVLfQ3k/s9EA8jj+w==",
+ "dev": true,
+ "requires": {
+ "formatio": "1.2.0",
+ "just-extend": "1.1.22",
+ "lolex": "1.6.0",
+ "path-to-regexp": "1.7.0",
+ "text-encoding": "0.6.4"
+ },
+ "dependencies": {
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz",
+ "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "table": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
+ "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "dev": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "ajv-keywords": "1.5.1",
+ "chalk": "1.1.3",
+ "lodash": "4.17.4",
+ "slice-ansi": "0.0.4",
+ "string-width": "2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz",
+ "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tryit": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
+ "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz",
+ "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "source-map": "0.5.6",
+ "uglify-to-browserify": "1.0.2",
+ "yargs": "3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true,
+ "optional": true
+ },
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true,
+ "optional": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "camelcase": "1.2.1",
+ "cliui": "2.1.0",
+ "decamelize": "1.2.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package.json
new file mode 100644
index 00000000000..e2c842e6ea8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinon-chai/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "sinon-chai",
+ "description": "Extends Chai with assertions for the Sinon.JS mocking framework.",
+ "keywords": [
+ "chai",
+ "chai-plugin",
+ "browser",
+ "vendor",
+ "mocks-and-spies",
+ "sinon",
+ "testing",
+ "spies",
+ "stubs",
+ "mocks"
+ ],
+ "version": "2.14.0",
+ "author": "Domenic Denicola <d@domenic.me> (https://domenic.me/)",
+ "license": "(BSD-2-Clause OR WTFPL)",
+ "repository": "domenic/sinon-chai",
+ "main": "./lib/sinon-chai.js",
+ "files": [
+ "lib"
+ ],
+ "scripts": {
+ "test": "mocha",
+ "test-travis": "npm install chai@$CHAI_VERSION && npm install sinon@$SINON_VERSION && npm install && npm test",
+ "lint": "eslint .",
+ "cover": "istanbul cover node_modules/mocha/bin/_mocha && opener ./coverage/lcov-report/lib/sinon-chai.js.html"
+ },
+ "peerDependencies": {
+ "chai": ">=1.9.2 <5",
+ "sinon": "^1.4.0 || ^2.1.0 || ^3.0.0 || ^4.0.0"
+ },
+ "devDependencies": {
+ "chai": "^4.1.0",
+ "eslint": "^3.19.0",
+ "istanbul": "~0.4.5",
+ "mocha": "^3.4.2",
+ "opener": "^1.4.3",
+ "sinon": "^4.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/.bower.json
new file mode 100644
index 00000000000..27baea0f663
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/.bower.json
@@ -0,0 +1,20 @@
+{
+ "name": "sinonjs",
+ "version": "1.17.1",
+ "main": "sinon.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "components"
+ ],
+ "homepage": "https://github.com/blittle/sinon.js",
+ "_release": "1.17.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.17.1",
+ "commit": "9b970e7b8ff7fcb95d2c4d9a41b33370af764fc9"
+ },
+ "_source": "https://github.com/blittle/sinon.js.git",
+ "_target": "^1.14.1",
+ "_originalSource": "sinonjs"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/README.md
new file mode 100644
index 00000000000..5bfd79ba0df
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/README.md
@@ -0,0 +1,8 @@
+sinon.js
+========
+
+SinonJS proxy repository for the BowerJS package manager
+
+Install with: `bower install sinonjs`
+
+For more information on SinonJS: https://github.com/cjohansen/Sinon.JS
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/bower.json
new file mode 100644
index 00000000000..64f3d97ab1d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/bower.json
@@ -0,0 +1,10 @@
+{
+ "name": "sinonjs",
+ "version": "1.17.1",
+ "main": "sinon.js",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "components"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/sinon.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/sinon.js
new file mode 100644
index 00000000000..6080c45b1dd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/sinonjs/sinon.js
@@ -0,0 +1,6383 @@
+/**
+ * Sinon.JS 1.17.1, 2015/09/26
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ *
+ * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of Christian Johansen nor the names of his contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+(function (root, factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ define('sinon', [], function () {
+ return (root.sinon = factory());
+ });
+ } else if (typeof exports === 'object') {
+ module.exports = factory();
+ } else {
+ root.sinon = factory();
+ }
+}(this, function () {
+ 'use strict';
+ var samsam, formatio, lolex;
+ (function () {
+ function define(mod, deps, fn) {
+ if (mod == "samsam") {
+ samsam = deps();
+ } else if (typeof deps === "function" && mod.length === 0) {
+ lolex = deps();
+ } else if (typeof fn === "function") {
+ formatio = fn(samsam);
+ }
+ }
+ define.amd = {};
+((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
+ (typeof module === "object" &&
+ function (m) { module.exports = m(); }) || // Node
+ function (m) { this.samsam = m(); } // Browser globals
+)(function () {
+ var o = Object.prototype;
+ var div = typeof document !== "undefined" && document.createElement("div");
+
+ function isNaN(value) {
+ // Unlike global isNaN, this avoids type coercion
+ // typeof check avoids IE host object issues, hat tip to
+ // lodash
+ var val = value; // JsLint thinks value !== value is "weird"
+ return typeof value === "number" && value !== val;
+ }
+
+ function getClass(value) {
+ // Returns the internal [[Class]] by calling Object.prototype.toString
+ // with the provided value as this. Return value is a string, naming the
+ // internal class, e.g. "Array"
+ return o.toString.call(value).split(/[ \]]/)[1];
+ }
+
+ /**
+ * @name samsam.isArguments
+ * @param Object object
+ *
+ * Returns ``true`` if ``object`` is an ``arguments`` object,
+ * ``false`` otherwise.
+ */
+ function isArguments(object) {
+ if (getClass(object) === 'Arguments') { return true; }
+ if (typeof object !== "object" || typeof object.length !== "number" ||
+ getClass(object) === "Array") {
+ return false;
+ }
+ if (typeof object.callee == "function") { return true; }
+ try {
+ object[object.length] = 6;
+ delete object[object.length];
+ } catch (e) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @name samsam.isElement
+ * @param Object object
+ *
+ * Returns ``true`` if ``object`` is a DOM element node. Unlike
+ * Underscore.js/lodash, this function will return ``false`` if ``object``
+ * is an *element-like* object, i.e. a regular object with a ``nodeType``
+ * property that holds the value ``1``.
+ */
+ function isElement(object) {
+ if (!object || object.nodeType !== 1 || !div) { return false; }
+ try {
+ object.appendChild(div);
+ object.removeChild(div);
+ } catch (e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * @name samsam.keys
+ * @param Object object
+ *
+ * Return an array of own property names.
+ */
+ function keys(object) {
+ var ks = [], prop;
+ for (prop in object) {
+ if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
+ }
+ return ks;
+ }
+
+ /**
+ * @name samsam.isDate
+ * @param Object value
+ *
+ * Returns true if the object is a ``Date``, or *date-like*. Duck typing
+ * of date objects work by checking that the object has a ``getTime``
+ * function whose return value equals the return value from the object's
+ * ``valueOf``.
+ */
+ function isDate(value) {
+ return typeof value.getTime == "function" &&
+ value.getTime() == value.valueOf();
+ }
+
+ /**
+ * @name samsam.isNegZero
+ * @param Object value
+ *
+ * Returns ``true`` if ``value`` is ``-0``.
+ */
+ function isNegZero(value) {
+ return value === 0 && 1 / value === -Infinity;
+ }
+
+ /**
+ * @name samsam.equal
+ * @param Object obj1
+ * @param Object obj2
+ *
+ * Returns ``true`` if two objects are strictly equal. Compared to
+ * ``===`` there are two exceptions:
+ *
+ * - NaN is considered equal to NaN
+ * - -0 and +0 are not considered equal
+ */
+ function identical(obj1, obj2) {
+ if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
+ return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
+ }
+ }
+
+
+ /**
+ * @name samsam.deepEqual
+ * @param Object obj1
+ * @param Object obj2
+ *
+ * Deep equal comparison. Two values are "deep equal" if:
+ *
+ * - They are equal, according to samsam.identical
+ * - They are both date objects representing the same time
+ * - They are both arrays containing elements that are all deepEqual
+ * - They are objects with the same set of properties, and each property
+ * in ``obj1`` is deepEqual to the corresponding property in ``obj2``
+ *
+ * Supports cyclic objects.
+ */
+ function deepEqualCyclic(obj1, obj2) {
+
+ // used for cyclic comparison
+ // contain already visited objects
+ var objects1 = [],
+ objects2 = [],
+ // contain pathes (position in the object structure)
+ // of the already visited objects
+ // indexes same as in objects arrays
+ paths1 = [],
+ paths2 = [],
+ // contains combinations of already compared objects
+ // in the manner: { "$1['ref']$2['ref']": true }
+ compared = {};
+
+ /**
+ * used to check, if the value of a property is an object
+ * (cyclic logic is only needed for objects)
+ * only needed for cyclic logic
+ */
+ function isObject(value) {
+
+ if (typeof value === 'object' && value !== null &&
+ !(value instanceof Boolean) &&
+ !(value instanceof Date) &&
+ !(value instanceof Number) &&
+ !(value instanceof RegExp) &&
+ !(value instanceof String)) {
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * returns the index of the given object in the
+ * given objects array, -1 if not contained
+ * only needed for cyclic logic
+ */
+ function getIndex(objects, obj) {
+
+ var i;
+ for (i = 0; i < objects.length; i++) {
+ if (objects[i] === obj) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ // does the recursion for the deep equal check
+ return (function deepEqual(obj1, obj2, path1, path2) {
+ var type1 = typeof obj1;
+ var type2 = typeof obj2;
+
+ // == null also matches undefined
+ if (obj1 === obj2 ||
+ isNaN(obj1) || isNaN(obj2) ||
+ obj1 == null || obj2 == null ||
+ type1 !== "object" || type2 !== "object") {
+
+ return identical(obj1, obj2);
+ }
+
+ // Elements are only equal if identical(expected, actual)
+ if (isElement(obj1) || isElement(obj2)) { return false; }
+
+ var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
+ if (isDate1 || isDate2) {
+ if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
+ return false;
+ }
+ }
+
+ if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
+ if (obj1.toString() !== obj2.toString()) { return false; }
+ }
+
+ var class1 = getClass(obj1);
+ var class2 = getClass(obj2);
+ var keys1 = keys(obj1);
+ var keys2 = keys(obj2);
+
+ if (isArguments(obj1) || isArguments(obj2)) {
+ if (obj1.length !== obj2.length) { return false; }
+ } else {
+ if (type1 !== type2 || class1 !== class2 ||
+ keys1.length !== keys2.length) {
+ return false;
+ }
+ }
+
+ var key, i, l,
+ // following vars are used for the cyclic logic
+ value1, value2,
+ isObject1, isObject2,
+ index1, index2,
+ newPath1, newPath2;
+
+ for (i = 0, l = keys1.length; i < l; i++) {
+ key = keys1[i];
+ if (!o.hasOwnProperty.call(obj2, key)) {
+ return false;
+ }
+
+ // Start of the cyclic logic
+
+ value1 = obj1[key];
+ value2 = obj2[key];
+
+ isObject1 = isObject(value1);
+ isObject2 = isObject(value2);
+
+ // determine, if the objects were already visited
+ // (it's faster to check for isObject first, than to
+ // get -1 from getIndex for non objects)
+ index1 = isObject1 ? getIndex(objects1, value1) : -1;
+ index2 = isObject2 ? getIndex(objects2, value2) : -1;
+
+ // determine the new pathes of the objects
+ // - for non cyclic objects the current path will be extended
+ // by current property name
+ // - for cyclic objects the stored path is taken
+ newPath1 = index1 !== -1
+ ? paths1[index1]
+ : path1 + '[' + JSON.stringify(key) + ']';
+ newPath2 = index2 !== -1
+ ? paths2[index2]
+ : path2 + '[' + JSON.stringify(key) + ']';
+
+ // stop recursion if current objects are already compared
+ if (compared[newPath1 + newPath2]) {
+ return true;
+ }
+
+ // remember the current objects and their pathes
+ if (index1 === -1 && isObject1) {
+ objects1.push(value1);
+ paths1.push(newPath1);
+ }
+ if (index2 === -1 && isObject2) {
+ objects2.push(value2);
+ paths2.push(newPath2);
+ }
+
+ // remember that the current objects are already compared
+ if (isObject1 && isObject2) {
+ compared[newPath1 + newPath2] = true;
+ }
+
+ // End of cyclic logic
+
+ // neither value1 nor value2 is a cycle
+ // continue with next level
+ if (!deepEqual(value1, value2, newPath1, newPath2)) {
+ return false;
+ }
+ }
+
+ return true;
+
+ }(obj1, obj2, '$1', '$2'));
+ }
+
+ var match;
+
+ function arrayContains(array, subset) {
+ if (subset.length === 0) { return true; }
+ var i, l, j, k;
+ for (i = 0, l = array.length; i < l; ++i) {
+ if (match(array[i], subset[0])) {
+ for (j = 0, k = subset.length; j < k; ++j) {
+ if (!match(array[i + j], subset[j])) { return false; }
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @name samsam.match
+ * @param Object object
+ * @param Object matcher
+ *
+ * Compare arbitrary value ``object`` with matcher.
+ */
+ match = function match(object, matcher) {
+ if (matcher && typeof matcher.test === "function") {
+ return matcher.test(object);
+ }
+
+ if (typeof matcher === "function") {
+ return matcher(object) === true;
+ }
+
+ if (typeof matcher === "string") {
+ matcher = matcher.toLowerCase();
+ var notNull = typeof object === "string" || !!object;
+ return notNull &&
+ (String(object)).toLowerCase().indexOf(matcher) >= 0;
+ }
+
+ if (typeof matcher === "number") {
+ return matcher === object;
+ }
+
+ if (typeof matcher === "boolean") {
+ return matcher === object;
+ }
+
+ if (typeof(matcher) === "undefined") {
+ return typeof(object) === "undefined";
+ }
+
+ if (matcher === null) {
+ return object === null;
+ }
+
+ if (getClass(object) === "Array" && getClass(matcher) === "Array") {
+ return arrayContains(object, matcher);
+ }
+
+ if (matcher && typeof matcher === "object") {
+ if (matcher === object) {
+ return true;
+ }
+ var prop;
+ for (prop in matcher) {
+ var value = object[prop];
+ if (typeof value === "undefined" &&
+ typeof object.getAttribute === "function") {
+ value = object.getAttribute(prop);
+ }
+ if (matcher[prop] === null || typeof matcher[prop] === 'undefined') {
+ if (value !== matcher[prop]) {
+ return false;
+ }
+ } else if (typeof value === "undefined" || !match(value, matcher[prop])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ throw new Error("Matcher was not a string, a number, a " +
+ "function, a boolean or an object");
+ };
+
+ return {
+ isArguments: isArguments,
+ isElement: isElement,
+ isDate: isDate,
+ isNegZero: isNegZero,
+ identical: identical,
+ deepEqual: deepEqualCyclic,
+ match: match,
+ keys: keys
+ };
+});
+((typeof define === "function" && define.amd && function (m) {
+ define("formatio", ["samsam"], m);
+}) || (typeof module === "object" && function (m) {
+ module.exports = m(require("samsam"));
+}) || function (m) { this.formatio = m(this.samsam); }
+)(function (samsam) {
+
+ var formatio = {
+ excludeConstructors: ["Object", /^.$/],
+ quoteStrings: true,
+ limitChildrenCount: 0
+ };
+
+ var hasOwn = Object.prototype.hasOwnProperty;
+
+ var specialObjects = [];
+ if (typeof global !== "undefined") {
+ specialObjects.push({ object: global, value: "[object global]" });
+ }
+ if (typeof document !== "undefined") {
+ specialObjects.push({
+ object: document,
+ value: "[object HTMLDocument]"
+ });
+ }
+ if (typeof window !== "undefined") {
+ specialObjects.push({ object: window, value: "[object Window]" });
+ }
+
+ function functionName(func) {
+ if (!func) { return ""; }
+ if (func.displayName) { return func.displayName; }
+ if (func.name) { return func.name; }
+ var matches = func.toString().match(/function\s+([^\(]+)/m);
+ return (matches && matches[1]) || "";
+ }
+
+ function constructorName(f, object) {
+ var name = functionName(object && object.constructor);
+ var excludes = f.excludeConstructors ||
+ formatio.excludeConstructors || [];
+
+ var i, l;
+ for (i = 0, l = excludes.length; i < l; ++i) {
+ if (typeof excludes[i] === "string" && excludes[i] === name) {
+ return "";
+ } else if (excludes[i].test && excludes[i].test(name)) {
+ return "";
+ }
+ }
+
+ return name;
+ }
+
+ function isCircular(object, objects) {
+ if (typeof object !== "object") { return false; }
+ var i, l;
+ for (i = 0, l = objects.length; i < l; ++i) {
+ if (objects[i] === object) { return true; }
+ }
+ return false;
+ }
+
+ function ascii(f, object, processed, indent) {
+ if (typeof object === "string") {
+ var qs = f.quoteStrings;
+ var quote = typeof qs !== "boolean" || qs;
+ return processed || quote ? '"' + object + '"' : object;
+ }
+
+ if (typeof object === "function" && !(object instanceof RegExp)) {
+ return ascii.func(object);
+ }
+
+ processed = processed || [];
+
+ if (isCircular(object, processed)) { return "[Circular]"; }
+
+ if (Object.prototype.toString.call(object) === "[object Array]") {
+ return ascii.array.call(f, object, processed);
+ }
+
+ if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
+ if (samsam.isElement(object)) { return ascii.element(object); }
+
+ if (typeof object.toString === "function" &&
+ object.toString !== Object.prototype.toString) {
+ return object.toString();
+ }
+
+ var i, l;
+ for (i = 0, l = specialObjects.length; i < l; i++) {
+ if (object === specialObjects[i].object) {
+ return specialObjects[i].value;
+ }
+ }
+
+ return ascii.object.call(f, object, processed, indent);
+ }
+
+ ascii.func = function (func) {
+ return "function " + functionName(func) + "() {}";
+ };
+
+ ascii.array = function (array, processed) {
+ processed = processed || [];
+ processed.push(array);
+ var pieces = [];
+ var i, l;
+ l = (this.limitChildrenCount > 0) ?
+ Math.min(this.limitChildrenCount, array.length) : array.length;
+
+ for (i = 0; i < l; ++i) {
+ pieces.push(ascii(this, array[i], processed));
+ }
+
+ if(l < array.length)
+ pieces.push("[... " + (array.length - l) + " more elements]");
+
+ return "[" + pieces.join(", ") + "]";
+ };
+
+ ascii.object = function (object, processed, indent) {
+ processed = processed || [];
+ processed.push(object);
+ indent = indent || 0;
+ var pieces = [], properties = samsam.keys(object).sort();
+ var length = 3;
+ var prop, str, obj, i, k, l;
+ l = (this.limitChildrenCount > 0) ?
+ Math.min(this.limitChildrenCount, properties.length) : properties.length;
+
+ for (i = 0; i < l; ++i) {
+ prop = properties[i];
+ obj = object[prop];
+
+ if (isCircular(obj, processed)) {
+ str = "[Circular]";
+ } else {
+ str = ascii(this, obj, processed, indent + 2);
+ }
+
+ str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
+ length += str.length;
+ pieces.push(str);
+ }
+
+ var cons = constructorName(this, object);
+ var prefix = cons ? "[" + cons + "] " : "";
+ var is = "";
+ for (i = 0, k = indent; i < k; ++i) { is += " "; }
+
+ if(l < properties.length)
+ pieces.push("[... " + (properties.length - l) + " more elements]");
+
+ if (length + indent > 80) {
+ return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" +
+ is + "}";
+ }
+ return prefix + "{ " + pieces.join(", ") + " }";
+ };
+
+ ascii.element = function (element) {
+ var tagName = element.tagName.toLowerCase();
+ var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
+
+ for (i = 0, l = attrs.length; i < l; ++i) {
+ attr = attrs.item(i);
+ attrName = attr.nodeName.toLowerCase().replace("html:", "");
+ val = attr.nodeValue;
+ if (attrName !== "contenteditable" || val !== "inherit") {
+ if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
+ }
+ }
+
+ var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
+ var content = element.innerHTML;
+
+ if (content.length > 20) {
+ content = content.substr(0, 20) + "[...]";
+ }
+
+ var res = formatted + pairs.join(" ") + ">" + content +
+ "</" + tagName + ">";
+
+ return res.replace(/ contentEditable="inherit"/, "");
+ };
+
+ function Formatio(options) {
+ for (var opt in options) {
+ this[opt] = options[opt];
+ }
+ }
+
+ Formatio.prototype = {
+ functionName: functionName,
+
+ configure: function (options) {
+ return new Formatio(options);
+ },
+
+ constructorName: function (object) {
+ return constructorName(this, object);
+ },
+
+ ascii: function (object, processed, indent) {
+ return ascii(this, object, processed, indent);
+ }
+ };
+
+ return Formatio.prototype;
+});
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (global){
+/*global global, window*/
+/**
+ * @author Christian Johansen (christian@cjohansen.no) and contributors
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (global) {
+
+ // Make properties writable in IE, as per
+ // http://www.adequatelygood.com/Replacing-setTimeout-Globally.html
+ // JSLint being anal
+ var glbl = global;
+
+ global.setTimeout = glbl.setTimeout;
+ global.clearTimeout = glbl.clearTimeout;
+ global.setInterval = glbl.setInterval;
+ global.clearInterval = glbl.clearInterval;
+ global.Date = glbl.Date;
+
+ // setImmediate is not a standard function
+ // avoid adding the prop to the window object if not present
+ if('setImmediate' in global) {
+ global.setImmediate = glbl.setImmediate;
+ global.clearImmediate = glbl.clearImmediate;
+ }
+
+ // node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
+ // browsers, a number.
+ // see https://github.com/cjohansen/Sinon.JS/pull/436
+
+ var NOOP = function () { return undefined; };
+ var timeoutResult = setTimeout(NOOP, 0);
+ var addTimerReturnsObject = typeof timeoutResult === "object";
+ clearTimeout(timeoutResult);
+
+ var NativeDate = Date;
+ var uniqueTimerId = 1;
+
+ /**
+ * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
+ * number of milliseconds. This is used to support human-readable strings passed
+ * to clock.tick()
+ */
+ function parseTime(str) {
+ if (!str) {
+ return 0;
+ }
+
+ var strings = str.split(":");
+ var l = strings.length, i = l;
+ var ms = 0, parsed;
+
+ if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
+ throw new Error("tick only understands numbers and 'h:m:s'");
+ }
+
+ while (i--) {
+ parsed = parseInt(strings[i], 10);
+
+ if (parsed >= 60) {
+ throw new Error("Invalid time " + str);
+ }
+
+ ms += parsed * Math.pow(60, (l - i - 1));
+ }
+
+ return ms * 1000;
+ }
+
+ /**
+ * Used to grok the `now` parameter to createClock.
+ */
+ function getEpoch(epoch) {
+ if (!epoch) { return 0; }
+ if (typeof epoch.getTime === "function") { return epoch.getTime(); }
+ if (typeof epoch === "number") { return epoch; }
+ throw new TypeError("now should be milliseconds since UNIX epoch");
+ }
+
+ function inRange(from, to, timer) {
+ return timer && timer.callAt >= from && timer.callAt <= to;
+ }
+
+ function mirrorDateProperties(target, source) {
+ var prop;
+ for (prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ target[prop] = source[prop];
+ }
+ }
+
+ // set special now implementation
+ if (source.now) {
+ target.now = function now() {
+ return target.clock.now;
+ };
+ } else {
+ delete target.now;
+ }
+
+ // set special toSource implementation
+ if (source.toSource) {
+ target.toSource = function toSource() {
+ return source.toSource();
+ };
+ } else {
+ delete target.toSource;
+ }
+
+ // set special toString implementation
+ target.toString = function toString() {
+ return source.toString();
+ };
+
+ target.prototype = source.prototype;
+ target.parse = source.parse;
+ target.UTC = source.UTC;
+ target.prototype.toUTCString = source.prototype.toUTCString;
+
+ return target;
+ }
+
+ function createDate() {
+ function ClockDate(year, month, date, hour, minute, second, ms) {
+ // Defensive and verbose to avoid potential harm in passing
+ // explicit undefined when user does not pass argument
+ switch (arguments.length) {
+ case 0:
+ return new NativeDate(ClockDate.clock.now);
+ case 1:
+ return new NativeDate(year);
+ case 2:
+ return new NativeDate(year, month);
+ case 3:
+ return new NativeDate(year, month, date);
+ case 4:
+ return new NativeDate(year, month, date, hour);
+ case 5:
+ return new NativeDate(year, month, date, hour, minute);
+ case 6:
+ return new NativeDate(year, month, date, hour, minute, second);
+ default:
+ return new NativeDate(year, month, date, hour, minute, second, ms);
+ }
+ }
+
+ return mirrorDateProperties(ClockDate, NativeDate);
+ }
+
+ function addTimer(clock, timer) {
+ if (timer.func === undefined) {
+ throw new Error("Callback must be provided to timer calls");
+ }
+
+ if (!clock.timers) {
+ clock.timers = {};
+ }
+
+ timer.id = uniqueTimerId++;
+ timer.createdAt = clock.now;
+ timer.callAt = clock.now + (timer.delay || (clock.duringTick ? 1 : 0));
+
+ clock.timers[timer.id] = timer;
+
+ if (addTimerReturnsObject) {
+ return {
+ id: timer.id,
+ ref: NOOP,
+ unref: NOOP
+ };
+ }
+
+ return timer.id;
+ }
+
+
+ function compareTimers(a, b) {
+ // Sort first by absolute timing
+ if (a.callAt < b.callAt) {
+ return -1;
+ }
+ if (a.callAt > b.callAt) {
+ return 1;
+ }
+
+ // Sort next by immediate, immediate timers take precedence
+ if (a.immediate && !b.immediate) {
+ return -1;
+ }
+ if (!a.immediate && b.immediate) {
+ return 1;
+ }
+
+ // Sort next by creation time, earlier-created timers take precedence
+ if (a.createdAt < b.createdAt) {
+ return -1;
+ }
+ if (a.createdAt > b.createdAt) {
+ return 1;
+ }
+
+ // Sort next by id, lower-id timers take precedence
+ if (a.id < b.id) {
+ return -1;
+ }
+ if (a.id > b.id) {
+ return 1;
+ }
+
+ // As timer ids are unique, no fallback `0` is necessary
+ }
+
+ function firstTimerInRange(clock, from, to) {
+ var timers = clock.timers,
+ timer = null,
+ id,
+ isInRange;
+
+ for (id in timers) {
+ if (timers.hasOwnProperty(id)) {
+ isInRange = inRange(from, to, timers[id]);
+
+ if (isInRange && (!timer || compareTimers(timer, timers[id]) === 1)) {
+ timer = timers[id];
+ }
+ }
+ }
+
+ return timer;
+ }
+
+ function callTimer(clock, timer) {
+ var exception;
+
+ if (typeof timer.interval === "number") {
+ clock.timers[timer.id].callAt += timer.interval;
+ } else {
+ delete clock.timers[timer.id];
+ }
+
+ try {
+ if (typeof timer.func === "function") {
+ timer.func.apply(null, timer.args);
+ } else {
+ eval(timer.func);
+ }
+ } catch (e) {
+ exception = e;
+ }
+
+ if (!clock.timers[timer.id]) {
+ if (exception) {
+ throw exception;
+ }
+ return;
+ }
+
+ if (exception) {
+ throw exception;
+ }
+ }
+
+ function timerType(timer) {
+ if (timer.immediate) {
+ return "Immediate";
+ } else if (typeof timer.interval !== "undefined") {
+ return "Interval";
+ } else {
+ return "Timeout";
+ }
+ }
+
+ function clearTimer(clock, timerId, ttype) {
+ if (!timerId) {
+ // null appears to be allowed in most browsers, and appears to be
+ // relied upon by some libraries, like Bootstrap carousel
+ return;
+ }
+
+ if (!clock.timers) {
+ clock.timers = [];
+ }
+
+ // in Node, timerId is an object with .ref()/.unref(), and
+ // its .id field is the actual timer id.
+ if (typeof timerId === "object") {
+ timerId = timerId.id;
+ }
+
+ if (clock.timers.hasOwnProperty(timerId)) {
+ // check that the ID matches a timer of the correct type
+ var timer = clock.timers[timerId];
+ if (timerType(timer) === ttype) {
+ delete clock.timers[timerId];
+ } else {
+ throw new Error("Cannot clear timer: timer created with set" + ttype + "() but cleared with clear" + timerType(timer) + "()");
+ }
+ }
+ }
+
+ function uninstall(clock, target) {
+ var method,
+ i,
+ l;
+
+ for (i = 0, l = clock.methods.length; i < l; i++) {
+ method = clock.methods[i];
+
+ if (target[method].hadOwnProperty) {
+ target[method] = clock["_" + method];
+ } else {
+ try {
+ delete target[method];
+ } catch (ignore) {}
+ }
+ }
+
+ // Prevent multiple executions which will completely remove these props
+ clock.methods = [];
+ }
+
+ function hijackMethod(target, method, clock) {
+ var prop;
+
+ clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
+ clock["_" + method] = target[method];
+
+ if (method === "Date") {
+ var date = mirrorDateProperties(clock[method], target[method]);
+ target[method] = date;
+ } else {
+ target[method] = function () {
+ return clock[method].apply(clock, arguments);
+ };
+
+ for (prop in clock[method]) {
+ if (clock[method].hasOwnProperty(prop)) {
+ target[method][prop] = clock[method][prop];
+ }
+ }
+ }
+
+ target[method].clock = clock;
+ }
+
+ var timers = {
+ setTimeout: setTimeout,
+ clearTimeout: clearTimeout,
+ setImmediate: global.setImmediate,
+ clearImmediate: global.clearImmediate,
+ setInterval: setInterval,
+ clearInterval: clearInterval,
+ Date: Date
+ };
+
+ var keys = Object.keys || function (obj) {
+ var ks = [],
+ key;
+
+ for (key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ ks.push(key);
+ }
+ }
+
+ return ks;
+ };
+
+ exports.timers = timers;
+
+ function createClock(now) {
+ var clock = {
+ now: getEpoch(now),
+ timeouts: {},
+ Date: createDate()
+ };
+
+ clock.Date.clock = clock;
+
+ clock.setTimeout = function setTimeout(func, timeout) {
+ return addTimer(clock, {
+ func: func,
+ args: Array.prototype.slice.call(arguments, 2),
+ delay: timeout
+ });
+ };
+
+ clock.clearTimeout = function clearTimeout(timerId) {
+ return clearTimer(clock, timerId, "Timeout");
+ };
+
+ clock.setInterval = function setInterval(func, timeout) {
+ return addTimer(clock, {
+ func: func,
+ args: Array.prototype.slice.call(arguments, 2),
+ delay: timeout,
+ interval: timeout
+ });
+ };
+
+ clock.clearInterval = function clearInterval(timerId) {
+ return clearTimer(clock, timerId, "Interval");
+ };
+
+ clock.setImmediate = function setImmediate(func) {
+ return addTimer(clock, {
+ func: func,
+ args: Array.prototype.slice.call(arguments, 1),
+ immediate: true
+ });
+ };
+
+ clock.clearImmediate = function clearImmediate(timerId) {
+ return clearTimer(clock, timerId, "Immediate");
+ };
+
+ clock.tick = function tick(ms) {
+ ms = typeof ms === "number" ? ms : parseTime(ms);
+ var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now;
+ var timer = firstTimerInRange(clock, tickFrom, tickTo);
+ var oldNow;
+
+ clock.duringTick = true;
+
+ var firstException;
+ while (timer && tickFrom <= tickTo) {
+ if (clock.timers[timer.id]) {
+ tickFrom = clock.now = timer.callAt;
+ try {
+ oldNow = clock.now;
+ callTimer(clock, timer);
+ // compensate for any setSystemTime() call during timer callback
+ if (oldNow !== clock.now) {
+ tickFrom += clock.now - oldNow;
+ tickTo += clock.now - oldNow;
+ previous += clock.now - oldNow;
+ }
+ } catch (e) {
+ firstException = firstException || e;
+ }
+ }
+
+ timer = firstTimerInRange(clock, previous, tickTo);
+ previous = tickFrom;
+ }
+
+ clock.duringTick = false;
+ clock.now = tickTo;
+
+ if (firstException) {
+ throw firstException;
+ }
+
+ return clock.now;
+ };
+
+ clock.reset = function reset() {
+ clock.timers = {};
+ };
+
+ clock.setSystemTime = function setSystemTime(now) {
+ // determine time difference
+ var newNow = getEpoch(now);
+ var difference = newNow - clock.now;
+
+ // update 'system clock'
+ clock.now = newNow;
+
+ // update timers and intervals to keep them stable
+ for (var id in clock.timers) {
+ if (clock.timers.hasOwnProperty(id)) {
+ var timer = clock.timers[id];
+ timer.createdAt += difference;
+ timer.callAt += difference;
+ }
+ }
+ };
+
+ return clock;
+ }
+ exports.createClock = createClock;
+
+ exports.install = function install(target, now, toFake) {
+ var i,
+ l;
+
+ if (typeof target === "number") {
+ toFake = now;
+ now = target;
+ target = null;
+ }
+
+ if (!target) {
+ target = global;
+ }
+
+ var clock = createClock(now);
+
+ clock.uninstall = function () {
+ uninstall(clock, target);
+ };
+
+ clock.methods = toFake || [];
+
+ if (clock.methods.length === 0) {
+ clock.methods = keys(timers);
+ }
+
+ for (i = 0, l = clock.methods.length; i < l; i++) {
+ hijackMethod(target, clock.methods[i], clock);
+ }
+
+ return clock;
+ };
+
+}(global || this));
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}]},{},[1])(1)
+});
+ })();
+ var define;
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+var sinon = (function () {
+"use strict";
+ // eslint-disable-line no-unused-vars
+
+ var sinonModule;
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ sinonModule = module.exports = require("./sinon/util/core");
+ require("./sinon/extend");
+ require("./sinon/walk");
+ require("./sinon/typeOf");
+ require("./sinon/times_in_words");
+ require("./sinon/spy");
+ require("./sinon/call");
+ require("./sinon/behavior");
+ require("./sinon/stub");
+ require("./sinon/mock");
+ require("./sinon/collection");
+ require("./sinon/assert");
+ require("./sinon/sandbox");
+ require("./sinon/test");
+ require("./sinon/test_case");
+ require("./sinon/match");
+ require("./sinon/format");
+ require("./sinon/log_error");
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require, module.exports, module);
+ sinonModule = module.exports;
+ } else {
+ sinonModule = {};
+ }
+
+ return sinonModule;
+}());
+
+/**
+ * @depend ../../sinon.js
+ */
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ var div = typeof document !== "undefined" && document.createElement("div");
+ var hasOwn = Object.prototype.hasOwnProperty;
+
+ function isDOMNode(obj) {
+ var success = false;
+
+ try {
+ obj.appendChild(div);
+ success = div.parentNode === obj;
+ } catch (e) {
+ return false;
+ } finally {
+ try {
+ obj.removeChild(div);
+ } catch (e) {
+ // Remove failed, not much we can do about that
+ }
+ }
+
+ return success;
+ }
+
+ function isElement(obj) {
+ return div && obj && obj.nodeType === 1 && isDOMNode(obj);
+ }
+
+ function isFunction(obj) {
+ return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
+ }
+
+ function isReallyNaN(val) {
+ return typeof val === "number" && isNaN(val);
+ }
+
+ function mirrorProperties(target, source) {
+ for (var prop in source) {
+ if (!hasOwn.call(target, prop)) {
+ target[prop] = source[prop];
+ }
+ }
+ }
+
+ function isRestorable(obj) {
+ return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
+ }
+
+ // Cheap way to detect if we have ES5 support.
+ var hasES5Support = "keys" in Object;
+
+ function makeApi(sinon) {
+ sinon.wrapMethod = function wrapMethod(object, property, method) {
+ if (!object) {
+ throw new TypeError("Should wrap property of object");
+ }
+
+ if (typeof method !== "function" && typeof method !== "object") {
+ throw new TypeError("Method wrapper should be a function or a property descriptor");
+ }
+
+ function checkWrappedMethod(wrappedMethod) {
+ var error;
+
+ if (!isFunction(wrappedMethod)) {
+ error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+ property + " as function");
+ } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
+ error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+ } else if (wrappedMethod.calledBefore) {
+ var verb = wrappedMethod.returns ? "stubbed" : "spied on";
+ error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
+ }
+
+ if (error) {
+ if (wrappedMethod && wrappedMethod.stackTrace) {
+ error.stack += "\n--------------\n" + wrappedMethod.stackTrace;
+ }
+ throw error;
+ }
+ }
+
+ var error, wrappedMethod, i;
+
+ // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
+ // when using hasOwn.call on objects from other frames.
+ var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
+
+ if (hasES5Support) {
+ var methodDesc = (typeof method === "function") ? {value: method} : method;
+ var wrappedMethodDesc = sinon.getPropertyDescriptor(object, property);
+
+ if (!wrappedMethodDesc) {
+ error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+ property + " as function");
+ } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {
+ error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+ }
+ if (error) {
+ if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) {
+ error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace;
+ }
+ throw error;
+ }
+
+ var types = sinon.objectKeys(methodDesc);
+ for (i = 0; i < types.length; i++) {
+ wrappedMethod = wrappedMethodDesc[types[i]];
+ checkWrappedMethod(wrappedMethod);
+ }
+
+ mirrorProperties(methodDesc, wrappedMethodDesc);
+ for (i = 0; i < types.length; i++) {
+ mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
+ }
+ Object.defineProperty(object, property, methodDesc);
+ } else {
+ wrappedMethod = object[property];
+ checkWrappedMethod(wrappedMethod);
+ object[property] = method;
+ method.displayName = property;
+ }
+
+ method.displayName = property;
+
+ // Set up a stack trace which can be used later to find what line of
+ // code the original method was created on.
+ method.stackTrace = (new Error("Stack Trace for original")).stack;
+
+ method.restore = function () {
+ // For prototype properties try to reset by delete first.
+ // If this fails (ex: localStorage on mobile safari) then force a reset
+ // via direct assignment.
+ if (!owned) {
+ // In some cases `delete` may throw an error
+ try {
+ delete object[property];
+ } catch (e) {} // eslint-disable-line no-empty
+ // For native code functions `delete` fails without throwing an error
+ // on Chrome < 43, PhantomJS, etc.
+ } else if (hasES5Support) {
+ Object.defineProperty(object, property, wrappedMethodDesc);
+ }
+
+ // Use strict equality comparison to check failures then force a reset
+ // via direct assignment.
+ if (object[property] === method) {
+ object[property] = wrappedMethod;
+ }
+ };
+
+ method.restore.sinon = true;
+
+ if (!hasES5Support) {
+ mirrorProperties(method, wrappedMethod);
+ }
+
+ return method;
+ };
+
+ sinon.create = function create(proto) {
+ var F = function () {};
+ F.prototype = proto;
+ return new F();
+ };
+
+ sinon.deepEqual = function deepEqual(a, b) {
+ if (sinon.match && sinon.match.isMatcher(a)) {
+ return a.test(b);
+ }
+
+ if (typeof a !== "object" || typeof b !== "object") {
+ return isReallyNaN(a) && isReallyNaN(b) || a === b;
+ }
+
+ if (isElement(a) || isElement(b)) {
+ return a === b;
+ }
+
+ if (a === b) {
+ return true;
+ }
+
+ if ((a === null && b !== null) || (a !== null && b === null)) {
+ return false;
+ }
+
+ if (a instanceof RegExp && b instanceof RegExp) {
+ return (a.source === b.source) && (a.global === b.global) &&
+ (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
+ }
+
+ var aString = Object.prototype.toString.call(a);
+ if (aString !== Object.prototype.toString.call(b)) {
+ return false;
+ }
+
+ if (aString === "[object Date]") {
+ return a.valueOf() === b.valueOf();
+ }
+
+ var prop;
+ var aLength = 0;
+ var bLength = 0;
+
+ if (aString === "[object Array]" && a.length !== b.length) {
+ return false;
+ }
+
+ for (prop in a) {
+ if (a.hasOwnProperty(prop)) {
+ aLength += 1;
+
+ if (!(prop in b)) {
+ return false;
+ }
+
+ if (!deepEqual(a[prop], b[prop])) {
+ return false;
+ }
+ }
+ }
+
+ for (prop in b) {
+ if (b.hasOwnProperty(prop)) {
+ bLength += 1;
+ }
+ }
+
+ return aLength === bLength;
+ };
+
+ sinon.functionName = function functionName(func) {
+ var name = func.displayName || func.name;
+
+ // Use function decomposition as a last resort to get function
+ // name. Does not rely on function decomposition to work - if it
+ // doesn't debugging will be slightly less informative
+ // (i.e. toString will say 'spy' rather than 'myFunc').
+ if (!name) {
+ var matches = func.toString().match(/function ([^\s\(]+)/);
+ name = matches && matches[1];
+ }
+
+ return name;
+ };
+
+ sinon.functionToString = function toString() {
+ if (this.getCall && this.callCount) {
+ var thisValue,
+ prop;
+ var i = this.callCount;
+
+ while (i--) {
+ thisValue = this.getCall(i).thisValue;
+
+ for (prop in thisValue) {
+ if (thisValue[prop] === this) {
+ return prop;
+ }
+ }
+ }
+ }
+
+ return this.displayName || "sinon fake";
+ };
+
+ sinon.objectKeys = function objectKeys(obj) {
+ if (obj !== Object(obj)) {
+ throw new TypeError("sinon.objectKeys called on a non-object");
+ }
+
+ var keys = [];
+ var key;
+ for (key in obj) {
+ if (hasOwn.call(obj, key)) {
+ keys.push(key);
+ }
+ }
+
+ return keys;
+ };
+
+ sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) {
+ var proto = object;
+ var descriptor;
+
+ while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) {
+ proto = Object.getPrototypeOf(proto);
+ }
+ return descriptor;
+ };
+
+ sinon.getConfig = function (custom) {
+ var config = {};
+ custom = custom || {};
+ var defaults = sinon.defaultConfig;
+
+ for (var prop in defaults) {
+ if (defaults.hasOwnProperty(prop)) {
+ config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
+ }
+ }
+
+ return config;
+ };
+
+ sinon.defaultConfig = {
+ injectIntoThis: true,
+ injectInto: null,
+ properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+ useFakeTimers: true,
+ useFakeServer: true
+ };
+
+ sinon.timesInWords = function timesInWords(count) {
+ return count === 1 && "once" ||
+ count === 2 && "twice" ||
+ count === 3 && "thrice" ||
+ (count || 0) + " times";
+ };
+
+ sinon.calledInOrder = function (spies) {
+ for (var i = 1, l = spies.length; i < l; i++) {
+ if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ sinon.orderByFirstCall = function (spies) {
+ return spies.sort(function (a, b) {
+ // uuid, won't ever be equal
+ var aCall = a.getCall(0);
+ var bCall = b.getCall(0);
+ var aId = aCall && aCall.callId || -1;
+ var bId = bCall && bCall.callId || -1;
+
+ return aId < bId ? -1 : 1;
+ });
+ };
+
+ sinon.createStubInstance = function (constructor) {
+ if (typeof constructor !== "function") {
+ throw new TypeError("The constructor should be a function.");
+ }
+ return sinon.stub(sinon.create(constructor.prototype));
+ };
+
+ sinon.restore = function (object) {
+ if (object !== null && typeof object === "object") {
+ for (var prop in object) {
+ if (isRestorable(object[prop])) {
+ object[prop].restore();
+ }
+ }
+ } else if (isRestorable(object)) {
+ object.restore();
+ }
+ };
+
+ return sinon;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports) {
+ makeApi(exports);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+
+ // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+ var hasDontEnumBug = (function () {
+ var obj = {
+ constructor: function () {
+ return "0";
+ },
+ toString: function () {
+ return "1";
+ },
+ valueOf: function () {
+ return "2";
+ },
+ toLocaleString: function () {
+ return "3";
+ },
+ prototype: function () {
+ return "4";
+ },
+ isPrototypeOf: function () {
+ return "5";
+ },
+ propertyIsEnumerable: function () {
+ return "6";
+ },
+ hasOwnProperty: function () {
+ return "7";
+ },
+ length: function () {
+ return "8";
+ },
+ unique: function () {
+ return "9";
+ }
+ };
+
+ var result = [];
+ for (var prop in obj) {
+ if (obj.hasOwnProperty(prop)) {
+ result.push(obj[prop]());
+ }
+ }
+ return result.join("") !== "0123456789";
+ })();
+
+ /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
+ * override properties in previous sources.
+ *
+ * target - The Object to extend
+ * sources - Objects to copy properties from.
+ *
+ * Returns the extended target
+ */
+ function extend(target /*, sources */) {
+ var sources = Array.prototype.slice.call(arguments, 1);
+ var source, i, prop;
+
+ for (i = 0; i < sources.length; i++) {
+ source = sources[i];
+
+ for (prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ target[prop] = source[prop];
+ }
+ }
+
+ // Make sure we copy (own) toString method even when in JScript with DontEnum bug
+ // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+ if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) {
+ target.toString = source.toString;
+ }
+ }
+
+ return target;
+ }
+
+ sinon.extend = extend;
+ return sinon.extend;
+ }
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ module.exports = makeApi(sinon);
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+
+ function timesInWords(count) {
+ switch (count) {
+ case 1:
+ return "once";
+ case 2:
+ return "twice";
+ case 3:
+ return "thrice";
+ default:
+ return (count || 0) + " times";
+ }
+ }
+
+ sinon.timesInWords = timesInWords;
+ return sinon.timesInWords;
+ }
+
+ function loadDependencies(require, exports, module) {
+ var core = require("./util/core");
+ module.exports = makeApi(core);
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ function typeOf(value) {
+ if (value === null) {
+ return "null";
+ } else if (value === undefined) {
+ return "undefined";
+ }
+ var string = Object.prototype.toString.call(value);
+ return string.substring(8, string.length - 1).toLowerCase();
+ }
+
+ sinon.typeOf = typeOf;
+ return sinon.typeOf;
+ }
+
+ function loadDependencies(require, exports, module) {
+ var core = require("./util/core");
+ module.exports = makeApi(core);
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend typeOf.js
+ */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Match functions
+ *
+ * @author Maximilian Antoni (mail@maxantoni.de)
+ * @license BSD
+ *
+ * Copyright (c) 2012 Maximilian Antoni
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ function assertType(value, type, name) {
+ var actual = sinon.typeOf(value);
+ if (actual !== type) {
+ throw new TypeError("Expected type of " + name + " to be " +
+ type + ", but was " + actual);
+ }
+ }
+
+ var matcher = {
+ toString: function () {
+ return this.message;
+ }
+ };
+
+ function isMatcher(object) {
+ return matcher.isPrototypeOf(object);
+ }
+
+ function matchObject(expectation, actual) {
+ if (actual === null || actual === undefined) {
+ return false;
+ }
+ for (var key in expectation) {
+ if (expectation.hasOwnProperty(key)) {
+ var exp = expectation[key];
+ var act = actual[key];
+ if (isMatcher(exp)) {
+ if (!exp.test(act)) {
+ return false;
+ }
+ } else if (sinon.typeOf(exp) === "object") {
+ if (!matchObject(exp, act)) {
+ return false;
+ }
+ } else if (!sinon.deepEqual(exp, act)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ function match(expectation, message) {
+ var m = sinon.create(matcher);
+ var type = sinon.typeOf(expectation);
+ switch (type) {
+ case "object":
+ if (typeof expectation.test === "function") {
+ m.test = function (actual) {
+ return expectation.test(actual) === true;
+ };
+ m.message = "match(" + sinon.functionName(expectation.test) + ")";
+ return m;
+ }
+ var str = [];
+ for (var key in expectation) {
+ if (expectation.hasOwnProperty(key)) {
+ str.push(key + ": " + expectation[key]);
+ }
+ }
+ m.test = function (actual) {
+ return matchObject(expectation, actual);
+ };
+ m.message = "match(" + str.join(", ") + ")";
+ break;
+ case "number":
+ m.test = function (actual) {
+ // we need type coercion here
+ return expectation == actual; // eslint-disable-line eqeqeq
+ };
+ break;
+ case "string":
+ m.test = function (actual) {
+ if (typeof actual !== "string") {
+ return false;
+ }
+ return actual.indexOf(expectation) !== -1;
+ };
+ m.message = "match(\"" + expectation + "\")";
+ break;
+ case "regexp":
+ m.test = function (actual) {
+ if (typeof actual !== "string") {
+ return false;
+ }
+ return expectation.test(actual);
+ };
+ break;
+ case "function":
+ m.test = expectation;
+ if (message) {
+ m.message = message;
+ } else {
+ m.message = "match(" + sinon.functionName(expectation) + ")";
+ }
+ break;
+ default:
+ m.test = function (actual) {
+ return sinon.deepEqual(expectation, actual);
+ };
+ }
+ if (!m.message) {
+ m.message = "match(" + expectation + ")";
+ }
+ return m;
+ }
+
+ matcher.or = function (m2) {
+ if (!arguments.length) {
+ throw new TypeError("Matcher expected");
+ } else if (!isMatcher(m2)) {
+ m2 = match(m2);
+ }
+ var m1 = this;
+ var or = sinon.create(matcher);
+ or.test = function (actual) {
+ return m1.test(actual) || m2.test(actual);
+ };
+ or.message = m1.message + ".or(" + m2.message + ")";
+ return or;
+ };
+
+ matcher.and = function (m2) {
+ if (!arguments.length) {
+ throw new TypeError("Matcher expected");
+ } else if (!isMatcher(m2)) {
+ m2 = match(m2);
+ }
+ var m1 = this;
+ var and = sinon.create(matcher);
+ and.test = function (actual) {
+ return m1.test(actual) && m2.test(actual);
+ };
+ and.message = m1.message + ".and(" + m2.message + ")";
+ return and;
+ };
+
+ match.isMatcher = isMatcher;
+
+ match.any = match(function () {
+ return true;
+ }, "any");
+
+ match.defined = match(function (actual) {
+ return actual !== null && actual !== undefined;
+ }, "defined");
+
+ match.truthy = match(function (actual) {
+ return !!actual;
+ }, "truthy");
+
+ match.falsy = match(function (actual) {
+ return !actual;
+ }, "falsy");
+
+ match.same = function (expectation) {
+ return match(function (actual) {
+ return expectation === actual;
+ }, "same(" + expectation + ")");
+ };
+
+ match.typeOf = function (type) {
+ assertType(type, "string", "type");
+ return match(function (actual) {
+ return sinon.typeOf(actual) === type;
+ }, "typeOf(\"" + type + "\")");
+ };
+
+ match.instanceOf = function (type) {
+ assertType(type, "function", "type");
+ return match(function (actual) {
+ return actual instanceof type;
+ }, "instanceOf(" + sinon.functionName(type) + ")");
+ };
+
+ function createPropertyMatcher(propertyTest, messagePrefix) {
+ return function (property, value) {
+ assertType(property, "string", "property");
+ var onlyProperty = arguments.length === 1;
+ var message = messagePrefix + "(\"" + property + "\"";
+ if (!onlyProperty) {
+ message += ", " + value;
+ }
+ message += ")";
+ return match(function (actual) {
+ if (actual === undefined || actual === null ||
+ !propertyTest(actual, property)) {
+ return false;
+ }
+ return onlyProperty || sinon.deepEqual(value, actual[property]);
+ }, message);
+ };
+ }
+
+ match.has = createPropertyMatcher(function (actual, property) {
+ if (typeof actual === "object") {
+ return property in actual;
+ }
+ return actual[property] !== undefined;
+ }, "has");
+
+ match.hasOwn = createPropertyMatcher(function (actual, property) {
+ return actual.hasOwnProperty(property);
+ }, "hasOwn");
+
+ match.bool = match.typeOf("boolean");
+ match.number = match.typeOf("number");
+ match.string = match.typeOf("string");
+ match.object = match.typeOf("object");
+ match.func = match.typeOf("function");
+ match.array = match.typeOf("array");
+ match.regexp = match.typeOf("regexp");
+ match.date = match.typeOf("date");
+
+ sinon.match = match;
+ return match;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./typeOf");
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+(function (sinonGlobal, formatio) {
+
+ function makeApi(sinon) {
+ function valueFormatter(value) {
+ return "" + value;
+ }
+
+ function getFormatioFormatter() {
+ var formatter = formatio.configure({
+ quoteStrings: false,
+ limitChildrenCount: 250
+ });
+
+ function format() {
+ return formatter.ascii.apply(formatter, arguments);
+ }
+
+ return format;
+ }
+
+ function getNodeFormatter() {
+ try {
+ var util = require("util");
+ } catch (e) {
+ /* Node, but no util module - would be very old, but better safe than sorry */
+ }
+
+ function format(v) {
+ var isObjectWithNativeToString = typeof v === "object" && v.toString === Object.prototype.toString;
+ return isObjectWithNativeToString ? util.inspect(v) : v;
+ }
+
+ return util ? format : valueFormatter;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var formatter;
+
+ if (isNode) {
+ try {
+ formatio = require("formatio");
+ }
+ catch (e) {} // eslint-disable-line no-empty
+ }
+
+ if (formatio) {
+ formatter = getFormatioFormatter();
+ } else if (isNode) {
+ formatter = getNodeFormatter();
+ } else {
+ formatter = valueFormatter;
+ }
+
+ sinon.format = formatter;
+ return sinon.format;
+ }
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ module.exports = makeApi(sinon);
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon, // eslint-disable-line no-undef
+ typeof formatio === "object" && formatio // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend match.js
+ * @depend format.js
+ */
+/**
+ * Spy calls
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Maximilian Antoni (mail@maxantoni.de)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ * Copyright (c) 2013 Maximilian Antoni
+ */
+(function (sinonGlobal) {
+
+ var slice = Array.prototype.slice;
+
+ function makeApi(sinon) {
+ function throwYieldError(proxy, text, args) {
+ var msg = sinon.functionName(proxy) + text;
+ if (args.length) {
+ msg += " Received [" + slice.call(args).join(", ") + "]";
+ }
+ throw new Error(msg);
+ }
+
+ var callProto = {
+ calledOn: function calledOn(thisValue) {
+ if (sinon.match && sinon.match.isMatcher(thisValue)) {
+ return thisValue.test(this.thisValue);
+ }
+ return this.thisValue === thisValue;
+ },
+
+ calledWith: function calledWith() {
+ var l = arguments.length;
+ if (l > this.args.length) {
+ return false;
+ }
+ for (var i = 0; i < l; i += 1) {
+ if (!sinon.deepEqual(arguments[i], this.args[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ calledWithMatch: function calledWithMatch() {
+ var l = arguments.length;
+ if (l > this.args.length) {
+ return false;
+ }
+ for (var i = 0; i < l; i += 1) {
+ var actual = this.args[i];
+ var expectation = arguments[i];
+ if (!sinon.match || !sinon.match(expectation).test(actual)) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ calledWithExactly: function calledWithExactly() {
+ return arguments.length === this.args.length &&
+ this.calledWith.apply(this, arguments);
+ },
+
+ notCalledWith: function notCalledWith() {
+ return !this.calledWith.apply(this, arguments);
+ },
+
+ notCalledWithMatch: function notCalledWithMatch() {
+ return !this.calledWithMatch.apply(this, arguments);
+ },
+
+ returned: function returned(value) {
+ return sinon.deepEqual(value, this.returnValue);
+ },
+
+ threw: function threw(error) {
+ if (typeof error === "undefined" || !this.exception) {
+ return !!this.exception;
+ }
+
+ return this.exception === error || this.exception.name === error;
+ },
+
+ calledWithNew: function calledWithNew() {
+ return this.proxy.prototype && this.thisValue instanceof this.proxy;
+ },
+
+ calledBefore: function (other) {
+ return this.callId < other.callId;
+ },
+
+ calledAfter: function (other) {
+ return this.callId > other.callId;
+ },
+
+ callArg: function (pos) {
+ this.args[pos]();
+ },
+
+ callArgOn: function (pos, thisValue) {
+ this.args[pos].apply(thisValue);
+ },
+
+ callArgWith: function (pos) {
+ this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
+ },
+
+ callArgOnWith: function (pos, thisValue) {
+ var args = slice.call(arguments, 2);
+ this.args[pos].apply(thisValue, args);
+ },
+
+ "yield": function () {
+ this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
+ },
+
+ yieldOn: function (thisValue) {
+ var args = this.args;
+ for (var i = 0, l = args.length; i < l; ++i) {
+ if (typeof args[i] === "function") {
+ args[i].apply(thisValue, slice.call(arguments, 1));
+ return;
+ }
+ }
+ throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
+ },
+
+ yieldTo: function (prop) {
+ this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
+ },
+
+ yieldToOn: function (prop, thisValue) {
+ var args = this.args;
+ for (var i = 0, l = args.length; i < l; ++i) {
+ if (args[i] && typeof args[i][prop] === "function") {
+ args[i][prop].apply(thisValue, slice.call(arguments, 2));
+ return;
+ }
+ }
+ throwYieldError(this.proxy, " cannot yield to '" + prop +
+ "' since no callback was passed.", args);
+ },
+
+ getStackFrames: function () {
+ // Omit the error message and the two top stack frames in sinon itself:
+ return this.stack && this.stack.split("\n").slice(3);
+ },
+
+ toString: function () {
+ var callStr = this.proxy.toString() + "(";
+ var args = [];
+
+ for (var i = 0, l = this.args.length; i < l; ++i) {
+ args.push(sinon.format(this.args[i]));
+ }
+
+ callStr = callStr + args.join(", ") + ")";
+
+ if (typeof this.returnValue !== "undefined") {
+ callStr += " => " + sinon.format(this.returnValue);
+ }
+
+ if (this.exception) {
+ callStr += " !" + this.exception.name;
+
+ if (this.exception.message) {
+ callStr += "(" + this.exception.message + ")";
+ }
+ }
+ if (this.stack) {
+ callStr += this.getStackFrames()[0].replace(/^\s*(?:at\s+|@)?/, " at ");
+
+ }
+
+ return callStr;
+ }
+ };
+
+ callProto.invokeCallback = callProto.yield;
+
+ function createSpyCall(spy, thisValue, args, returnValue, exception, id, stack) {
+ if (typeof id !== "number") {
+ throw new TypeError("Call id is not a number");
+ }
+ var proxyCall = sinon.create(callProto);
+ proxyCall.proxy = spy;
+ proxyCall.thisValue = thisValue;
+ proxyCall.args = args;
+ proxyCall.returnValue = returnValue;
+ proxyCall.exception = exception;
+ proxyCall.callId = id;
+ proxyCall.stack = stack;
+
+ return proxyCall;
+ }
+ createSpyCall.toString = callProto.toString; // used by mocks
+
+ sinon.spyCall = createSpyCall;
+ return createSpyCall;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./match");
+ require("./format");
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend call.js
+ * @depend format.js
+ */
+/**
+ * Spy functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ var push = Array.prototype.push;
+ var slice = Array.prototype.slice;
+ var callId = 0;
+
+ function spy(object, property, types) {
+ if (!property && typeof object === "function") {
+ return spy.create(object);
+ }
+
+ if (!object && !property) {
+ return spy.create(function () { });
+ }
+
+ if (types) {
+ var methodDesc = sinon.getPropertyDescriptor(object, property);
+ for (var i = 0; i < types.length; i++) {
+ methodDesc[types[i]] = spy.create(methodDesc[types[i]]);
+ }
+ return sinon.wrapMethod(object, property, methodDesc);
+ }
+
+ return sinon.wrapMethod(object, property, spy.create(object[property]));
+ }
+
+ function matchingFake(fakes, args, strict) {
+ if (!fakes) {
+ return undefined;
+ }
+
+ for (var i = 0, l = fakes.length; i < l; i++) {
+ if (fakes[i].matches(args, strict)) {
+ return fakes[i];
+ }
+ }
+ }
+
+ function incrementCallCount() {
+ this.called = true;
+ this.callCount += 1;
+ this.notCalled = false;
+ this.calledOnce = this.callCount === 1;
+ this.calledTwice = this.callCount === 2;
+ this.calledThrice = this.callCount === 3;
+ }
+
+ function createCallProperties() {
+ this.firstCall = this.getCall(0);
+ this.secondCall = this.getCall(1);
+ this.thirdCall = this.getCall(2);
+ this.lastCall = this.getCall(this.callCount - 1);
+ }
+
+ var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
+ function createProxy(func, proxyLength) {
+ // Retain the function length:
+ var p;
+ if (proxyLength) {
+ eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + // eslint-disable-line no-eval
+ ") { return p.invoke(func, this, slice.call(arguments)); });");
+ } else {
+ p = function proxy() {
+ return p.invoke(func, this, slice.call(arguments));
+ };
+ }
+ p.isSinonProxy = true;
+ return p;
+ }
+
+ var uuid = 0;
+
+ // Public API
+ var spyApi = {
+ reset: function () {
+ if (this.invoking) {
+ var err = new Error("Cannot reset Sinon function while invoking it. " +
+ "Move the call to .reset outside of the callback.");
+ err.name = "InvalidResetException";
+ throw err;
+ }
+
+ this.called = false;
+ this.notCalled = true;
+ this.calledOnce = false;
+ this.calledTwice = false;
+ this.calledThrice = false;
+ this.callCount = 0;
+ this.firstCall = null;
+ this.secondCall = null;
+ this.thirdCall = null;
+ this.lastCall = null;
+ this.args = [];
+ this.returnValues = [];
+ this.thisValues = [];
+ this.exceptions = [];
+ this.callIds = [];
+ this.stacks = [];
+ if (this.fakes) {
+ for (var i = 0; i < this.fakes.length; i++) {
+ this.fakes[i].reset();
+ }
+ }
+
+ return this;
+ },
+
+ create: function create(func, spyLength) {
+ var name;
+
+ if (typeof func !== "function") {
+ func = function () { };
+ } else {
+ name = sinon.functionName(func);
+ }
+
+ if (!spyLength) {
+ spyLength = func.length;
+ }
+
+ var proxy = createProxy(func, spyLength);
+
+ sinon.extend(proxy, spy);
+ delete proxy.create;
+ sinon.extend(proxy, func);
+
+ proxy.reset();
+ proxy.prototype = func.prototype;
+ proxy.displayName = name || "spy";
+ proxy.toString = sinon.functionToString;
+ proxy.instantiateFake = sinon.spy.create;
+ proxy.id = "spy#" + uuid++;
+
+ return proxy;
+ },
+
+ invoke: function invoke(func, thisValue, args) {
+ var matching = matchingFake(this.fakes, args);
+ var exception, returnValue;
+
+ incrementCallCount.call(this);
+ push.call(this.thisValues, thisValue);
+ push.call(this.args, args);
+ push.call(this.callIds, callId++);
+
+ // Make call properties available from within the spied function:
+ createCallProperties.call(this);
+
+ try {
+ this.invoking = true;
+
+ if (matching) {
+ returnValue = matching.invoke(func, thisValue, args);
+ } else {
+ returnValue = (this.func || func).apply(thisValue, args);
+ }
+
+ var thisCall = this.getCall(this.callCount - 1);
+ if (thisCall.calledWithNew() && typeof returnValue !== "object") {
+ returnValue = thisValue;
+ }
+ } catch (e) {
+ exception = e;
+ } finally {
+ delete this.invoking;
+ }
+
+ push.call(this.exceptions, exception);
+ push.call(this.returnValues, returnValue);
+ push.call(this.stacks, new Error().stack);
+
+ // Make return value and exception available in the calls:
+ createCallProperties.call(this);
+
+ if (exception !== undefined) {
+ throw exception;
+ }
+
+ return returnValue;
+ },
+
+ named: function named(name) {
+ this.displayName = name;
+ return this;
+ },
+
+ getCall: function getCall(i) {
+ if (i < 0 || i >= this.callCount) {
+ return null;
+ }
+
+ return sinon.spyCall(this, this.thisValues[i], this.args[i],
+ this.returnValues[i], this.exceptions[i],
+ this.callIds[i], this.stacks[i]);
+ },
+
+ getCalls: function () {
+ var calls = [];
+ var i;
+
+ for (i = 0; i < this.callCount; i++) {
+ calls.push(this.getCall(i));
+ }
+
+ return calls;
+ },
+
+ calledBefore: function calledBefore(spyFn) {
+ if (!this.called) {
+ return false;
+ }
+
+ if (!spyFn.called) {
+ return true;
+ }
+
+ return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
+ },
+
+ calledAfter: function calledAfter(spyFn) {
+ if (!this.called || !spyFn.called) {
+ return false;
+ }
+
+ return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
+ },
+
+ withArgs: function () {
+ var args = slice.call(arguments);
+
+ if (this.fakes) {
+ var match = matchingFake(this.fakes, args, true);
+
+ if (match) {
+ return match;
+ }
+ } else {
+ this.fakes = [];
+ }
+
+ var original = this;
+ var fake = this.instantiateFake();
+ fake.matchingAguments = args;
+ fake.parent = this;
+ push.call(this.fakes, fake);
+
+ fake.withArgs = function () {
+ return original.withArgs.apply(original, arguments);
+ };
+
+ for (var i = 0; i < this.args.length; i++) {
+ if (fake.matches(this.args[i])) {
+ incrementCallCount.call(fake);
+ push.call(fake.thisValues, this.thisValues[i]);
+ push.call(fake.args, this.args[i]);
+ push.call(fake.returnValues, this.returnValues[i]);
+ push.call(fake.exceptions, this.exceptions[i]);
+ push.call(fake.callIds, this.callIds[i]);
+ }
+ }
+ createCallProperties.call(fake);
+
+ return fake;
+ },
+
+ matches: function (args, strict) {
+ var margs = this.matchingAguments;
+
+ if (margs.length <= args.length &&
+ sinon.deepEqual(margs, args.slice(0, margs.length))) {
+ return !strict || margs.length === args.length;
+ }
+ },
+
+ printf: function (format) {
+ var spyInstance = this;
+ var args = slice.call(arguments, 1);
+ var formatter;
+
+ return (format || "").replace(/%(.)/g, function (match, specifyer) {
+ formatter = spyApi.formatters[specifyer];
+
+ if (typeof formatter === "function") {
+ return formatter.call(null, spyInstance, args);
+ } else if (!isNaN(parseInt(specifyer, 10))) {
+ return sinon.format(args[specifyer - 1]);
+ }
+
+ return "%" + specifyer;
+ });
+ }
+ };
+
+ function delegateToCalls(method, matchAny, actual, notCalled) {
+ spyApi[method] = function () {
+ if (!this.called) {
+ if (notCalled) {
+ return notCalled.apply(this, arguments);
+ }
+ return false;
+ }
+
+ var currentCall;
+ var matches = 0;
+
+ for (var i = 0, l = this.callCount; i < l; i += 1) {
+ currentCall = this.getCall(i);
+
+ if (currentCall[actual || method].apply(currentCall, arguments)) {
+ matches += 1;
+
+ if (matchAny) {
+ return true;
+ }
+ }
+ }
+
+ return matches === this.callCount;
+ };
+ }
+
+ delegateToCalls("calledOn", true);
+ delegateToCalls("alwaysCalledOn", false, "calledOn");
+ delegateToCalls("calledWith", true);
+ delegateToCalls("calledWithMatch", true);
+ delegateToCalls("alwaysCalledWith", false, "calledWith");
+ delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
+ delegateToCalls("calledWithExactly", true);
+ delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
+ delegateToCalls("neverCalledWith", false, "notCalledWith", function () {
+ return true;
+ });
+ delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () {
+ return true;
+ });
+ delegateToCalls("threw", true);
+ delegateToCalls("alwaysThrew", false, "threw");
+ delegateToCalls("returned", true);
+ delegateToCalls("alwaysReturned", false, "returned");
+ delegateToCalls("calledWithNew", true);
+ delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
+ delegateToCalls("callArg", false, "callArgWith", function () {
+ throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+ });
+ spyApi.callArgWith = spyApi.callArg;
+ delegateToCalls("callArgOn", false, "callArgOnWith", function () {
+ throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+ });
+ spyApi.callArgOnWith = spyApi.callArgOn;
+ delegateToCalls("yield", false, "yield", function () {
+ throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+ });
+ // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
+ spyApi.invokeCallback = spyApi.yield;
+ delegateToCalls("yieldOn", false, "yieldOn", function () {
+ throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+ });
+ delegateToCalls("yieldTo", false, "yieldTo", function (property) {
+ throw new Error(this.toString() + " cannot yield to '" + property +
+ "' since it was not yet invoked.");
+ });
+ delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
+ throw new Error(this.toString() + " cannot yield to '" + property +
+ "' since it was not yet invoked.");
+ });
+
+ spyApi.formatters = {
+ c: function (spyInstance) {
+ return sinon.timesInWords(spyInstance.callCount);
+ },
+
+ n: function (spyInstance) {
+ return spyInstance.toString();
+ },
+
+ C: function (spyInstance) {
+ var calls = [];
+
+ for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
+ var stringifiedCall = " " + spyInstance.getCall(i).toString();
+ if (/\n/.test(calls[i - 1])) {
+ stringifiedCall = "\n" + stringifiedCall;
+ }
+ push.call(calls, stringifiedCall);
+ }
+
+ return calls.length > 0 ? "\n" + calls.join("\n") : "";
+ },
+
+ t: function (spyInstance) {
+ var objects = [];
+
+ for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
+ push.call(objects, sinon.format(spyInstance.thisValues[i]));
+ }
+
+ return objects.join(", ");
+ },
+
+ "*": function (spyInstance, args) {
+ var formatted = [];
+
+ for (var i = 0, l = args.length; i < l; ++i) {
+ push.call(formatted, sinon.format(args[i]));
+ }
+
+ return formatted.join(", ");
+ }
+ };
+
+ sinon.extend(spy, spyApi);
+
+ spy.spyCall = sinon.spyCall;
+ sinon.spy = spy;
+
+ return spy;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var core = require("./util/core");
+ require("./call");
+ require("./extend");
+ require("./times_in_words");
+ require("./format");
+ module.exports = makeApi(core);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ */
+/**
+ * Stub behavior
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Tim Fischbach (mail@timfischbach.de)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ var slice = Array.prototype.slice;
+ var join = Array.prototype.join;
+ var useLeftMostCallback = -1;
+ var useRightMostCallback = -2;
+
+ var nextTick = (function () {
+ if (typeof process === "object" && typeof process.nextTick === "function") {
+ return process.nextTick;
+ }
+
+ if (typeof setImmediate === "function") {
+ return setImmediate;
+ }
+
+ return function (callback) {
+ setTimeout(callback, 0);
+ };
+ })();
+
+ function throwsException(error, message) {
+ if (typeof error === "string") {
+ this.exception = new Error(message || "");
+ this.exception.name = error;
+ } else if (!error) {
+ this.exception = new Error("Error");
+ } else {
+ this.exception = error;
+ }
+
+ return this;
+ }
+
+ function getCallback(behavior, args) {
+ var callArgAt = behavior.callArgAt;
+
+ if (callArgAt >= 0) {
+ return args[callArgAt];
+ }
+
+ var argumentList;
+
+ if (callArgAt === useLeftMostCallback) {
+ argumentList = args;
+ }
+
+ if (callArgAt === useRightMostCallback) {
+ argumentList = slice.call(args).reverse();
+ }
+
+ var callArgProp = behavior.callArgProp;
+
+ for (var i = 0, l = argumentList.length; i < l; ++i) {
+ if (!callArgProp && typeof argumentList[i] === "function") {
+ return argumentList[i];
+ }
+
+ if (callArgProp && argumentList[i] &&
+ typeof argumentList[i][callArgProp] === "function") {
+ return argumentList[i][callArgProp];
+ }
+ }
+
+ return null;
+ }
+
+ function makeApi(sinon) {
+ function getCallbackError(behavior, func, args) {
+ if (behavior.callArgAt < 0) {
+ var msg;
+
+ if (behavior.callArgProp) {
+ msg = sinon.functionName(behavior.stub) +
+ " expected to yield to '" + behavior.callArgProp +
+ "', but no object with such a property was passed.";
+ } else {
+ msg = sinon.functionName(behavior.stub) +
+ " expected to yield, but no callback was passed.";
+ }
+
+ if (args.length > 0) {
+ msg += " Received [" + join.call(args, ", ") + "]";
+ }
+
+ return msg;
+ }
+
+ return "argument at index " + behavior.callArgAt + " is not a function: " + func;
+ }
+
+ function callCallback(behavior, args) {
+ if (typeof behavior.callArgAt === "number") {
+ var func = getCallback(behavior, args);
+
+ if (typeof func !== "function") {
+ throw new TypeError(getCallbackError(behavior, func, args));
+ }
+
+ if (behavior.callbackAsync) {
+ nextTick(function () {
+ func.apply(behavior.callbackContext, behavior.callbackArguments);
+ });
+ } else {
+ func.apply(behavior.callbackContext, behavior.callbackArguments);
+ }
+ }
+ }
+
+ var proto = {
+ create: function create(stub) {
+ var behavior = sinon.extend({}, sinon.behavior);
+ delete behavior.create;
+ behavior.stub = stub;
+
+ return behavior;
+ },
+
+ isPresent: function isPresent() {
+ return (typeof this.callArgAt === "number" ||
+ this.exception ||
+ typeof this.returnArgAt === "number" ||
+ this.returnThis ||
+ this.returnValueDefined);
+ },
+
+ invoke: function invoke(context, args) {
+ callCallback(this, args);
+
+ if (this.exception) {
+ throw this.exception;
+ } else if (typeof this.returnArgAt === "number") {
+ return args[this.returnArgAt];
+ } else if (this.returnThis) {
+ return context;
+ }
+
+ return this.returnValue;
+ },
+
+ onCall: function onCall(index) {
+ return this.stub.onCall(index);
+ },
+
+ onFirstCall: function onFirstCall() {
+ return this.stub.onFirstCall();
+ },
+
+ onSecondCall: function onSecondCall() {
+ return this.stub.onSecondCall();
+ },
+
+ onThirdCall: function onThirdCall() {
+ return this.stub.onThirdCall();
+ },
+
+ withArgs: function withArgs(/* arguments */) {
+ throw new Error(
+ "Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" " +
+ "is not supported. Use \"stub.withArgs(...).onCall(...)\" " +
+ "to define sequential behavior for calls with certain arguments."
+ );
+ },
+
+ callsArg: function callsArg(pos) {
+ if (typeof pos !== "number") {
+ throw new TypeError("argument index is not number");
+ }
+
+ this.callArgAt = pos;
+ this.callbackArguments = [];
+ this.callbackContext = undefined;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ callsArgOn: function callsArgOn(pos, context) {
+ if (typeof pos !== "number") {
+ throw new TypeError("argument index is not number");
+ }
+ if (typeof context !== "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAt = pos;
+ this.callbackArguments = [];
+ this.callbackContext = context;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ callsArgWith: function callsArgWith(pos) {
+ if (typeof pos !== "number") {
+ throw new TypeError("argument index is not number");
+ }
+
+ this.callArgAt = pos;
+ this.callbackArguments = slice.call(arguments, 1);
+ this.callbackContext = undefined;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ callsArgOnWith: function callsArgWith(pos, context) {
+ if (typeof pos !== "number") {
+ throw new TypeError("argument index is not number");
+ }
+ if (typeof context !== "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAt = pos;
+ this.callbackArguments = slice.call(arguments, 2);
+ this.callbackContext = context;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ yields: function () {
+ this.callArgAt = useLeftMostCallback;
+ this.callbackArguments = slice.call(arguments, 0);
+ this.callbackContext = undefined;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ yieldsRight: function () {
+ this.callArgAt = useRightMostCallback;
+ this.callbackArguments = slice.call(arguments, 0);
+ this.callbackContext = undefined;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ yieldsOn: function (context) {
+ if (typeof context !== "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAt = useLeftMostCallback;
+ this.callbackArguments = slice.call(arguments, 1);
+ this.callbackContext = context;
+ this.callArgProp = undefined;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ yieldsTo: function (prop) {
+ this.callArgAt = useLeftMostCallback;
+ this.callbackArguments = slice.call(arguments, 1);
+ this.callbackContext = undefined;
+ this.callArgProp = prop;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ yieldsToOn: function (prop, context) {
+ if (typeof context !== "object") {
+ throw new TypeError("argument context is not an object");
+ }
+
+ this.callArgAt = useLeftMostCallback;
+ this.callbackArguments = slice.call(arguments, 2);
+ this.callbackContext = context;
+ this.callArgProp = prop;
+ this.callbackAsync = false;
+
+ return this;
+ },
+
+ throws: throwsException,
+ throwsException: throwsException,
+
+ returns: function returns(value) {
+ this.returnValue = value;
+ this.returnValueDefined = true;
+ this.exception = undefined;
+
+ return this;
+ },
+
+ returnsArg: function returnsArg(pos) {
+ if (typeof pos !== "number") {
+ throw new TypeError("argument index is not number");
+ }
+
+ this.returnArgAt = pos;
+
+ return this;
+ },
+
+ returnsThis: function returnsThis() {
+ this.returnThis = true;
+
+ return this;
+ }
+ };
+
+ function createAsyncVersion(syncFnName) {
+ return function () {
+ var result = this[syncFnName].apply(this, arguments);
+ this.callbackAsync = true;
+ return result;
+ };
+ }
+
+ // create asynchronous versions of callsArg* and yields* methods
+ for (var method in proto) {
+ // need to avoid creating anotherasync versions of the newly added async methods
+ if (proto.hasOwnProperty(method) && method.match(/^(callsArg|yields)/) && !method.match(/Async/)) {
+ proto[method + "Async"] = createAsyncVersion(method);
+ }
+ }
+
+ sinon.behavior = proto;
+ return proto;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./extend");
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ function walkInternal(obj, iterator, context, originalObj) {
+ var proto, prop;
+
+ if (typeof Object.getOwnPropertyNames !== "function") {
+ // We explicitly want to enumerate through all of the prototype's properties
+ // in this case, therefore we deliberately leave out an own property check.
+ /* eslint-disable guard-for-in */
+ for (prop in obj) {
+ iterator.call(context, obj[prop], prop, obj);
+ }
+ /* eslint-enable guard-for-in */
+
+ return;
+ }
+
+ Object.getOwnPropertyNames(obj).forEach(function (k) {
+ var target = typeof Object.getOwnPropertyDescriptor(obj, k).get === "function" ?
+ originalObj : obj;
+ iterator.call(context, target[k], k, target);
+ });
+
+ proto = Object.getPrototypeOf(obj);
+ if (proto) {
+ walkInternal(proto, iterator, context, originalObj);
+ }
+ }
+
+ /* Public: walks the prototype chain of an object and iterates over every own property
+ * name encountered. The iterator is called in the same fashion that Array.prototype.forEach
+ * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional
+ * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will
+ * default to using a simple for..in loop.
+ *
+ * obj - The object to walk the prototype chain for.
+ * iterator - The function to be called on each pass of the walk.
+ * context - (Optional) When given, the iterator will be called with this object as the receiver.
+ */
+ function walk(obj, iterator, context) {
+ return walkInternal(obj, iterator, context, obj);
+ }
+
+ sinon.walk = walk;
+ return sinon.walk;
+ }
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ module.exports = makeApi(sinon);
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend spy.js
+ * @depend behavior.js
+ * @depend walk.js
+ */
+/**
+ * Stub functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ function stub(object, property, func) {
+ if (!!func && typeof func !== "function" && typeof func !== "object") {
+ throw new TypeError("Custom stub should be a function or a property descriptor");
+ }
+
+ var wrapper;
+
+ if (func) {
+ if (typeof func === "function") {
+ wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
+ } else {
+ wrapper = func;
+ if (sinon.spy && sinon.spy.create) {
+ var types = sinon.objectKeys(wrapper);
+ for (var i = 0; i < types.length; i++) {
+ wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]);
+ }
+ }
+ }
+ } else {
+ var stubLength = 0;
+ if (typeof object === "object" && typeof object[property] === "function") {
+ stubLength = object[property].length;
+ }
+ wrapper = stub.create(stubLength);
+ }
+
+ if (!object && typeof property === "undefined") {
+ return sinon.stub.create();
+ }
+
+ if (typeof property === "undefined" && typeof object === "object") {
+ sinon.walk(object || {}, function (value, prop, propOwner) {
+ // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object
+ // is not Object.prototype
+ if (
+ propOwner !== Object.prototype &&
+ prop !== "constructor" &&
+ typeof sinon.getPropertyDescriptor(propOwner, prop).value === "function"
+ ) {
+ stub(object, prop);
+ }
+ });
+
+ return object;
+ }
+
+ return sinon.wrapMethod(object, property, wrapper);
+ }
+
+
+ /*eslint-disable no-use-before-define*/
+ function getParentBehaviour(stubInstance) {
+ return (stubInstance.parent && getCurrentBehavior(stubInstance.parent));
+ }
+
+ function getDefaultBehavior(stubInstance) {
+ return stubInstance.defaultBehavior ||
+ getParentBehaviour(stubInstance) ||
+ sinon.behavior.create(stubInstance);
+ }
+
+ function getCurrentBehavior(stubInstance) {
+ var behavior = stubInstance.behaviors[stubInstance.callCount - 1];
+ return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stubInstance);
+ }
+ /*eslint-enable no-use-before-define*/
+
+ var uuid = 0;
+
+ var proto = {
+ create: function create(stubLength) {
+ var functionStub = function () {
+ return getCurrentBehavior(functionStub).invoke(this, arguments);
+ };
+
+ functionStub.id = "stub#" + uuid++;
+ var orig = functionStub;
+ functionStub = sinon.spy.create(functionStub, stubLength);
+ functionStub.func = orig;
+
+ sinon.extend(functionStub, stub);
+ functionStub.instantiateFake = sinon.stub.create;
+ functionStub.displayName = "stub";
+ functionStub.toString = sinon.functionToString;
+
+ functionStub.defaultBehavior = null;
+ functionStub.behaviors = [];
+
+ return functionStub;
+ },
+
+ resetBehavior: function () {
+ var i;
+
+ this.defaultBehavior = null;
+ this.behaviors = [];
+
+ delete this.returnValue;
+ delete this.returnArgAt;
+ this.returnThis = false;
+
+ if (this.fakes) {
+ for (i = 0; i < this.fakes.length; i++) {
+ this.fakes[i].resetBehavior();
+ }
+ }
+ },
+
+ onCall: function onCall(index) {
+ if (!this.behaviors[index]) {
+ this.behaviors[index] = sinon.behavior.create(this);
+ }
+
+ return this.behaviors[index];
+ },
+
+ onFirstCall: function onFirstCall() {
+ return this.onCall(0);
+ },
+
+ onSecondCall: function onSecondCall() {
+ return this.onCall(1);
+ },
+
+ onThirdCall: function onThirdCall() {
+ return this.onCall(2);
+ }
+ };
+
+ function createBehavior(behaviorMethod) {
+ return function () {
+ this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
+ this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
+ return this;
+ };
+ }
+
+ for (var method in sinon.behavior) {
+ if (sinon.behavior.hasOwnProperty(method) &&
+ !proto.hasOwnProperty(method) &&
+ method !== "create" &&
+ method !== "withArgs" &&
+ method !== "invoke") {
+ proto[method] = createBehavior(method);
+ }
+ }
+
+ sinon.extend(stub, proto);
+ sinon.stub = stub;
+
+ return stub;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var core = require("./util/core");
+ require("./behavior");
+ require("./spy");
+ require("./extend");
+ module.exports = makeApi(core);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend call.js
+ * @depend extend.js
+ * @depend match.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend format.js
+ */
+/**
+ * Mock functions.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ var push = [].push;
+ var match = sinon.match;
+
+ function mock(object) {
+ // if (typeof console !== undefined && console.warn) {
+ // console.warn("mock will be removed from Sinon.JS v2.0");
+ // }
+
+ if (!object) {
+ return sinon.expectation.create("Anonymous mock");
+ }
+
+ return mock.create(object);
+ }
+
+ function each(collection, callback) {
+ if (!collection) {
+ return;
+ }
+
+ for (var i = 0, l = collection.length; i < l; i += 1) {
+ callback(collection[i]);
+ }
+ }
+
+ function arrayEquals(arr1, arr2, compareLength) {
+ if (compareLength && (arr1.length !== arr2.length)) {
+ return false;
+ }
+
+ for (var i = 0, l = arr1.length; i < l; i++) {
+ if (!sinon.deepEqual(arr1[i], arr2[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ sinon.extend(mock, {
+ create: function create(object) {
+ if (!object) {
+ throw new TypeError("object is null");
+ }
+
+ var mockObject = sinon.extend({}, mock);
+ mockObject.object = object;
+ delete mockObject.create;
+
+ return mockObject;
+ },
+
+ expects: function expects(method) {
+ if (!method) {
+ throw new TypeError("method is falsy");
+ }
+
+ if (!this.expectations) {
+ this.expectations = {};
+ this.proxies = [];
+ }
+
+ if (!this.expectations[method]) {
+ this.expectations[method] = [];
+ var mockObject = this;
+
+ sinon.wrapMethod(this.object, method, function () {
+ return mockObject.invokeMethod(method, this, arguments);
+ });
+
+ push.call(this.proxies, method);
+ }
+
+ var expectation = sinon.expectation.create(method);
+ push.call(this.expectations[method], expectation);
+
+ return expectation;
+ },
+
+ restore: function restore() {
+ var object = this.object;
+
+ each(this.proxies, function (proxy) {
+ if (typeof object[proxy].restore === "function") {
+ object[proxy].restore();
+ }
+ });
+ },
+
+ verify: function verify() {
+ var expectations = this.expectations || {};
+ var messages = [];
+ var met = [];
+
+ each(this.proxies, function (proxy) {
+ each(expectations[proxy], function (expectation) {
+ if (!expectation.met()) {
+ push.call(messages, expectation.toString());
+ } else {
+ push.call(met, expectation.toString());
+ }
+ });
+ });
+
+ this.restore();
+
+ if (messages.length > 0) {
+ sinon.expectation.fail(messages.concat(met).join("\n"));
+ } else if (met.length > 0) {
+ sinon.expectation.pass(messages.concat(met).join("\n"));
+ }
+
+ return true;
+ },
+
+ invokeMethod: function invokeMethod(method, thisValue, args) {
+ var expectations = this.expectations && this.expectations[method] ? this.expectations[method] : [];
+ var expectationsWithMatchingArgs = [];
+ var currentArgs = args || [];
+ var i, available;
+
+ for (i = 0; i < expectations.length; i += 1) {
+ var expectedArgs = expectations[i].expectedArguments || [];
+ if (arrayEquals(expectedArgs, currentArgs, expectations[i].expectsExactArgCount)) {
+ expectationsWithMatchingArgs.push(expectations[i]);
+ }
+ }
+
+ for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) {
+ if (!expectationsWithMatchingArgs[i].met() &&
+ expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) {
+ return expectationsWithMatchingArgs[i].apply(thisValue, args);
+ }
+ }
+
+ var messages = [];
+ var exhausted = 0;
+
+ for (i = 0; i < expectationsWithMatchingArgs.length; i += 1) {
+ if (expectationsWithMatchingArgs[i].allowsCall(thisValue, args)) {
+ available = available || expectationsWithMatchingArgs[i];
+ } else {
+ exhausted += 1;
+ }
+ }
+
+ if (available && exhausted === 0) {
+ return available.apply(thisValue, args);
+ }
+
+ for (i = 0; i < expectations.length; i += 1) {
+ push.call(messages, " " + expectations[i].toString());
+ }
+
+ messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
+ proxy: method,
+ args: args
+ }));
+
+ sinon.expectation.fail(messages.join("\n"));
+ }
+ });
+
+ var times = sinon.timesInWords;
+ var slice = Array.prototype.slice;
+
+ function callCountInWords(callCount) {
+ if (callCount === 0) {
+ return "never called";
+ }
+
+ return "called " + times(callCount);
+ }
+
+ function expectedCallCountInWords(expectation) {
+ var min = expectation.minCalls;
+ var max = expectation.maxCalls;
+
+ if (typeof min === "number" && typeof max === "number") {
+ var str = times(min);
+
+ if (min !== max) {
+ str = "at least " + str + " and at most " + times(max);
+ }
+
+ return str;
+ }
+
+ if (typeof min === "number") {
+ return "at least " + times(min);
+ }
+
+ return "at most " + times(max);
+ }
+
+ function receivedMinCalls(expectation) {
+ var hasMinLimit = typeof expectation.minCalls === "number";
+ return !hasMinLimit || expectation.callCount >= expectation.minCalls;
+ }
+
+ function receivedMaxCalls(expectation) {
+ if (typeof expectation.maxCalls !== "number") {
+ return false;
+ }
+
+ return expectation.callCount === expectation.maxCalls;
+ }
+
+ function verifyMatcher(possibleMatcher, arg) {
+ var isMatcher = match && match.isMatcher(possibleMatcher);
+
+ return isMatcher && possibleMatcher.test(arg) || true;
+ }
+
+ sinon.expectation = {
+ minCalls: 1,
+ maxCalls: 1,
+
+ create: function create(methodName) {
+ var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
+ delete expectation.create;
+ expectation.method = methodName;
+
+ return expectation;
+ },
+
+ invoke: function invoke(func, thisValue, args) {
+ this.verifyCallAllowed(thisValue, args);
+
+ return sinon.spy.invoke.apply(this, arguments);
+ },
+
+ atLeast: function atLeast(num) {
+ if (typeof num !== "number") {
+ throw new TypeError("'" + num + "' is not number");
+ }
+
+ if (!this.limitsSet) {
+ this.maxCalls = null;
+ this.limitsSet = true;
+ }
+
+ this.minCalls = num;
+
+ return this;
+ },
+
+ atMost: function atMost(num) {
+ if (typeof num !== "number") {
+ throw new TypeError("'" + num + "' is not number");
+ }
+
+ if (!this.limitsSet) {
+ this.minCalls = null;
+ this.limitsSet = true;
+ }
+
+ this.maxCalls = num;
+
+ return this;
+ },
+
+ never: function never() {
+ return this.exactly(0);
+ },
+
+ once: function once() {
+ return this.exactly(1);
+ },
+
+ twice: function twice() {
+ return this.exactly(2);
+ },
+
+ thrice: function thrice() {
+ return this.exactly(3);
+ },
+
+ exactly: function exactly(num) {
+ if (typeof num !== "number") {
+ throw new TypeError("'" + num + "' is not a number");
+ }
+
+ this.atLeast(num);
+ return this.atMost(num);
+ },
+
+ met: function met() {
+ return !this.failed && receivedMinCalls(this);
+ },
+
+ verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
+ if (receivedMaxCalls(this)) {
+ this.failed = true;
+ sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
+ }
+
+ if ("expectedThis" in this && this.expectedThis !== thisValue) {
+ sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
+ this.expectedThis);
+ }
+
+ if (!("expectedArguments" in this)) {
+ return;
+ }
+
+ if (!args) {
+ sinon.expectation.fail(this.method + " received no arguments, expected " +
+ sinon.format(this.expectedArguments));
+ }
+
+ if (args.length < this.expectedArguments.length) {
+ sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
+ "), expected " + sinon.format(this.expectedArguments));
+ }
+
+ if (this.expectsExactArgCount &&
+ args.length !== this.expectedArguments.length) {
+ sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
+ "), expected " + sinon.format(this.expectedArguments));
+ }
+
+ for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+
+ if (!verifyMatcher(this.expectedArguments[i], args[i])) {
+ sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+ ", didn't match " + this.expectedArguments.toString());
+ }
+
+ if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+ sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+ ", expected " + sinon.format(this.expectedArguments));
+ }
+ }
+ },
+
+ allowsCall: function allowsCall(thisValue, args) {
+ if (this.met() && receivedMaxCalls(this)) {
+ return false;
+ }
+
+ if ("expectedThis" in this && this.expectedThis !== thisValue) {
+ return false;
+ }
+
+ if (!("expectedArguments" in this)) {
+ return true;
+ }
+
+ args = args || [];
+
+ if (args.length < this.expectedArguments.length) {
+ return false;
+ }
+
+ if (this.expectsExactArgCount &&
+ args.length !== this.expectedArguments.length) {
+ return false;
+ }
+
+ for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+ if (!verifyMatcher(this.expectedArguments[i], args[i])) {
+ return false;
+ }
+
+ if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ withArgs: function withArgs() {
+ this.expectedArguments = slice.call(arguments);
+ return this;
+ },
+
+ withExactArgs: function withExactArgs() {
+ this.withArgs.apply(this, arguments);
+ this.expectsExactArgCount = true;
+ return this;
+ },
+
+ on: function on(thisValue) {
+ this.expectedThis = thisValue;
+ return this;
+ },
+
+ toString: function () {
+ var args = (this.expectedArguments || []).slice();
+
+ if (!this.expectsExactArgCount) {
+ push.call(args, "[...]");
+ }
+
+ var callStr = sinon.spyCall.toString.call({
+ proxy: this.method || "anonymous mock expectation",
+ args: args
+ });
+
+ var message = callStr.replace(", [...", "[, ...") + " " +
+ expectedCallCountInWords(this);
+
+ if (this.met()) {
+ return "Expectation met: " + message;
+ }
+
+ return "Expected " + message + " (" +
+ callCountInWords(this.callCount) + ")";
+ },
+
+ verify: function verify() {
+ if (!this.met()) {
+ sinon.expectation.fail(this.toString());
+ } else {
+ sinon.expectation.pass(this.toString());
+ }
+
+ return true;
+ },
+
+ pass: function pass(message) {
+ sinon.assert.pass(message);
+ },
+
+ fail: function fail(message) {
+ var exception = new Error(message);
+ exception.name = "ExpectationError";
+
+ throw exception;
+ }
+ };
+
+ sinon.mock = mock;
+ return mock;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./times_in_words");
+ require("./call");
+ require("./extend");
+ require("./match");
+ require("./spy");
+ require("./stub");
+ require("./format");
+
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend mock.js
+ */
+/**
+ * Collections of stubs, spies and mocks.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ var push = [].push;
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+ function getFakes(fakeCollection) {
+ if (!fakeCollection.fakes) {
+ fakeCollection.fakes = [];
+ }
+
+ return fakeCollection.fakes;
+ }
+
+ function each(fakeCollection, method) {
+ var fakes = getFakes(fakeCollection);
+
+ for (var i = 0, l = fakes.length; i < l; i += 1) {
+ if (typeof fakes[i][method] === "function") {
+ fakes[i][method]();
+ }
+ }
+ }
+
+ function compact(fakeCollection) {
+ var fakes = getFakes(fakeCollection);
+ var i = 0;
+ while (i < fakes.length) {
+ fakes.splice(i, 1);
+ }
+ }
+
+ function makeApi(sinon) {
+ var collection = {
+ verify: function resolve() {
+ each(this, "verify");
+ },
+
+ restore: function restore() {
+ each(this, "restore");
+ compact(this);
+ },
+
+ reset: function restore() {
+ each(this, "reset");
+ },
+
+ verifyAndRestore: function verifyAndRestore() {
+ var exception;
+
+ try {
+ this.verify();
+ } catch (e) {
+ exception = e;
+ }
+
+ this.restore();
+
+ if (exception) {
+ throw exception;
+ }
+ },
+
+ add: function add(fake) {
+ push.call(getFakes(this), fake);
+ return fake;
+ },
+
+ spy: function spy() {
+ return this.add(sinon.spy.apply(sinon, arguments));
+ },
+
+ stub: function stub(object, property, value) {
+ if (property) {
+ var original = object[property];
+
+ if (typeof original !== "function") {
+ if (!hasOwnProperty.call(object, property)) {
+ throw new TypeError("Cannot stub non-existent own property " + property);
+ }
+
+ object[property] = value;
+
+ return this.add({
+ restore: function () {
+ object[property] = original;
+ }
+ });
+ }
+ }
+ if (!property && !!object && typeof object === "object") {
+ var stubbedObj = sinon.stub.apply(sinon, arguments);
+
+ for (var prop in stubbedObj) {
+ if (typeof stubbedObj[prop] === "function") {
+ this.add(stubbedObj[prop]);
+ }
+ }
+
+ return stubbedObj;
+ }
+
+ return this.add(sinon.stub.apply(sinon, arguments));
+ },
+
+ mock: function mock() {
+ return this.add(sinon.mock.apply(sinon, arguments));
+ },
+
+ inject: function inject(obj) {
+ var col = this;
+
+ obj.spy = function () {
+ return col.spy.apply(col, arguments);
+ };
+
+ obj.stub = function () {
+ return col.stub.apply(col, arguments);
+ };
+
+ obj.mock = function () {
+ return col.mock.apply(col, arguments);
+ };
+
+ return obj;
+ }
+ };
+
+ sinon.collection = collection;
+ return collection;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./mock");
+ require("./spy");
+ require("./stub");
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * Fake timer API
+ * setTimeout
+ * setInterval
+ * clearTimeout
+ * clearInterval
+ * tick
+ * reset
+ * Date
+ *
+ * Inspired by jsUnitMockTimeOut from JsUnit
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function () {
+
+ function makeApi(s, lol) {
+ /*global lolex */
+ var llx = typeof lolex !== "undefined" ? lolex : lol;
+
+ s.useFakeTimers = function () {
+ var now;
+ var methods = Array.prototype.slice.call(arguments);
+
+ if (typeof methods[0] === "string") {
+ now = 0;
+ } else {
+ now = methods.shift();
+ }
+
+ var clock = llx.install(now || 0, methods);
+ clock.restore = clock.uninstall;
+ return clock;
+ };
+
+ s.clock = {
+ create: function (now) {
+ return llx.createClock(now);
+ }
+ };
+
+ s.timers = {
+ setTimeout: setTimeout,
+ clearTimeout: clearTimeout,
+ setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+ clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined),
+ setInterval: setInterval,
+ clearInterval: clearInterval,
+ Date: Date
+ };
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, epxorts, module, lolex) {
+ var core = require("./core");
+ makeApi(core, lolex);
+ module.exports = core;
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require, module.exports, module, require("lolex"));
+ } else {
+ makeApi(sinon); // eslint-disable-line no-undef
+ }
+}());
+
+/**
+ * Minimal Event interface implementation
+ *
+ * Original implementation by Sven Fuchs: https://gist.github.com/995028
+ * Modifications and tests by Christian Johansen.
+ *
+ * @author Sven Fuchs (svenfuchs@artweb-design.de)
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2011 Sven Fuchs, Christian Johansen
+ */
+if (typeof sinon === "undefined") {
+ this.sinon = {};
+}
+
+(function () {
+
+ var push = [].push;
+
+ function makeApi(sinon) {
+ sinon.Event = function Event(type, bubbles, cancelable, target) {
+ this.initEvent(type, bubbles, cancelable, target);
+ };
+
+ sinon.Event.prototype = {
+ initEvent: function (type, bubbles, cancelable, target) {
+ this.type = type;
+ this.bubbles = bubbles;
+ this.cancelable = cancelable;
+ this.target = target;
+ },
+
+ stopPropagation: function () {},
+
+ preventDefault: function () {
+ this.defaultPrevented = true;
+ }
+ };
+
+ sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) {
+ this.initEvent(type, false, false, target);
+ this.loaded = progressEventRaw.loaded || null;
+ this.total = progressEventRaw.total || null;
+ this.lengthComputable = !!progressEventRaw.total;
+ };
+
+ sinon.ProgressEvent.prototype = new sinon.Event();
+
+ sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent;
+
+ sinon.CustomEvent = function CustomEvent(type, customData, target) {
+ this.initEvent(type, false, false, target);
+ this.detail = customData.detail || null;
+ };
+
+ sinon.CustomEvent.prototype = new sinon.Event();
+
+ sinon.CustomEvent.prototype.constructor = sinon.CustomEvent;
+
+ sinon.EventTarget = {
+ addEventListener: function addEventListener(event, listener) {
+ this.eventListeners = this.eventListeners || {};
+ this.eventListeners[event] = this.eventListeners[event] || [];
+ push.call(this.eventListeners[event], listener);
+ },
+
+ removeEventListener: function removeEventListener(event, listener) {
+ var listeners = this.eventListeners && this.eventListeners[event] || [];
+
+ for (var i = 0, l = listeners.length; i < l; ++i) {
+ if (listeners[i] === listener) {
+ return listeners.splice(i, 1);
+ }
+ }
+ },
+
+ dispatchEvent: function dispatchEvent(event) {
+ var type = event.type;
+ var listeners = this.eventListeners && this.eventListeners[type] || [];
+
+ for (var i = 0; i < listeners.length; i++) {
+ if (typeof listeners[i] === "function") {
+ listeners[i].call(this, event);
+ } else {
+ listeners[i].handleEvent(event);
+ }
+ }
+
+ return !!event.defaultPrevented;
+ }
+ };
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require) {
+ var sinon = require("./core");
+ makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require);
+ } else {
+ makeApi(sinon); // eslint-disable-line no-undef
+ }
+}());
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Logs errors
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ // cache a reference to setTimeout, so that our reference won't be stubbed out
+ // when using fake timers and errors will still get logged
+ // https://github.com/cjohansen/Sinon.JS/issues/381
+ var realSetTimeout = setTimeout;
+
+ function makeApi(sinon) {
+
+ function log() {}
+
+ function logError(label, err) {
+ var msg = label + " threw exception: ";
+
+ function throwLoggedError() {
+ err.message = msg + err.message;
+ throw err;
+ }
+
+ sinon.log(msg + "[" + err.name + "] " + err.message);
+
+ if (err.stack) {
+ sinon.log(err.stack);
+ }
+
+ if (logError.useImmediateExceptions) {
+ throwLoggedError();
+ } else {
+ logError.setTimeout(throwLoggedError, 0);
+ }
+ }
+
+ // When set to true, any errors logged will be thrown immediately;
+ // If set to false, the errors will be thrown in separate execution frame.
+ logError.useImmediateExceptions = false;
+
+ // wrap realSetTimeout with something we can stub in tests
+ logError.setTimeout = function (func, timeout) {
+ realSetTimeout(func, timeout);
+ };
+
+ var exports = {};
+ exports.log = sinon.log = log;
+ exports.logError = sinon.logError = logError;
+
+ return exports;
+ }
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ module.exports = makeApi(sinon);
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XDomainRequest object
+ */
+if (typeof sinon === "undefined") {
+ this.sinon = {};
+}
+
+// wrapper for global
+(function (global) {
+
+ var xdr = { XDomainRequest: global.XDomainRequest };
+ xdr.GlobalXDomainRequest = global.XDomainRequest;
+ xdr.supportsXDR = typeof xdr.GlobalXDomainRequest !== "undefined";
+ xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false;
+
+ function makeApi(sinon) {
+ sinon.xdr = xdr;
+
+ function FakeXDomainRequest() {
+ this.readyState = FakeXDomainRequest.UNSENT;
+ this.requestBody = null;
+ this.requestHeaders = {};
+ this.status = 0;
+ this.timeout = null;
+
+ if (typeof FakeXDomainRequest.onCreate === "function") {
+ FakeXDomainRequest.onCreate(this);
+ }
+ }
+
+ function verifyState(x) {
+ if (x.readyState !== FakeXDomainRequest.OPENED) {
+ throw new Error("INVALID_STATE_ERR");
+ }
+
+ if (x.sendFlag) {
+ throw new Error("INVALID_STATE_ERR");
+ }
+ }
+
+ function verifyRequestSent(x) {
+ if (x.readyState === FakeXDomainRequest.UNSENT) {
+ throw new Error("Request not sent");
+ }
+ if (x.readyState === FakeXDomainRequest.DONE) {
+ throw new Error("Request done");
+ }
+ }
+
+ function verifyResponseBodyType(body) {
+ if (typeof body !== "string") {
+ var error = new Error("Attempted to respond to fake XDomainRequest with " +
+ body + ", which is not a string.");
+ error.name = "InvalidBodyException";
+ throw error;
+ }
+ }
+
+ sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, {
+ open: function open(method, url) {
+ this.method = method;
+ this.url = url;
+
+ this.responseText = null;
+ this.sendFlag = false;
+
+ this.readyStateChange(FakeXDomainRequest.OPENED);
+ },
+
+ readyStateChange: function readyStateChange(state) {
+ this.readyState = state;
+ var eventName = "";
+ switch (this.readyState) {
+ case FakeXDomainRequest.UNSENT:
+ break;
+ case FakeXDomainRequest.OPENED:
+ break;
+ case FakeXDomainRequest.LOADING:
+ if (this.sendFlag) {
+ //raise the progress event
+ eventName = "onprogress";
+ }
+ break;
+ case FakeXDomainRequest.DONE:
+ if (this.isTimeout) {
+ eventName = "ontimeout";
+ } else if (this.errorFlag || (this.status < 200 || this.status > 299)) {
+ eventName = "onerror";
+ } else {
+ eventName = "onload";
+ }
+ break;
+ }
+
+ // raising event (if defined)
+ if (eventName) {
+ if (typeof this[eventName] === "function") {
+ try {
+ this[eventName]();
+ } catch (e) {
+ sinon.logError("Fake XHR " + eventName + " handler", e);
+ }
+ }
+ }
+ },
+
+ send: function send(data) {
+ verifyState(this);
+
+ if (!/^(get|head)$/i.test(this.method)) {
+ this.requestBody = data;
+ }
+ this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+
+ this.errorFlag = false;
+ this.sendFlag = true;
+ this.readyStateChange(FakeXDomainRequest.OPENED);
+
+ if (typeof this.onSend === "function") {
+ this.onSend(this);
+ }
+ },
+
+ abort: function abort() {
+ this.aborted = true;
+ this.responseText = null;
+ this.errorFlag = true;
+
+ if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) {
+ this.readyStateChange(sinon.FakeXDomainRequest.DONE);
+ this.sendFlag = false;
+ }
+ },
+
+ setResponseBody: function setResponseBody(body) {
+ verifyRequestSent(this);
+ verifyResponseBodyType(body);
+
+ var chunkSize = this.chunkSize || 10;
+ var index = 0;
+ this.responseText = "";
+
+ do {
+ this.readyStateChange(FakeXDomainRequest.LOADING);
+ this.responseText += body.substring(index, index + chunkSize);
+ index += chunkSize;
+ } while (index < body.length);
+
+ this.readyStateChange(FakeXDomainRequest.DONE);
+ },
+
+ respond: function respond(status, contentType, body) {
+ // content-type ignored, since XDomainRequest does not carry this
+ // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease
+ // test integration across browsers
+ this.status = typeof status === "number" ? status : 200;
+ this.setResponseBody(body || "");
+ },
+
+ simulatetimeout: function simulatetimeout() {
+ this.status = 0;
+ this.isTimeout = true;
+ // Access to this should actually throw an error
+ this.responseText = undefined;
+ this.readyStateChange(FakeXDomainRequest.DONE);
+ }
+ });
+
+ sinon.extend(FakeXDomainRequest, {
+ UNSENT: 0,
+ OPENED: 1,
+ LOADING: 3,
+ DONE: 4
+ });
+
+ sinon.useFakeXDomainRequest = function useFakeXDomainRequest() {
+ sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) {
+ if (xdr.supportsXDR) {
+ global.XDomainRequest = xdr.GlobalXDomainRequest;
+ }
+
+ delete sinon.FakeXDomainRequest.restore;
+
+ if (keepOnCreate !== true) {
+ delete sinon.FakeXDomainRequest.onCreate;
+ }
+ };
+ if (xdr.supportsXDR) {
+ global.XDomainRequest = sinon.FakeXDomainRequest;
+ }
+ return sinon.FakeXDomainRequest;
+ };
+
+ sinon.FakeXDomainRequest = FakeXDomainRequest;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./core");
+ require("../extend");
+ require("./event");
+ require("../log_error");
+ makeApi(sinon);
+ module.exports = sinon;
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require, module.exports, module);
+ } else {
+ makeApi(sinon); // eslint-disable-line no-undef
+ }
+})(typeof global !== "undefined" ? global : self);
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XMLHttpRequest object
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal, global) {
+
+ function getWorkingXHR(globalScope) {
+ var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined";
+ if (supportsXHR) {
+ return globalScope.XMLHttpRequest;
+ }
+
+ var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined";
+ if (supportsActiveX) {
+ return function () {
+ return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0");
+ };
+ }
+
+ return false;
+ }
+
+ var supportsProgress = typeof ProgressEvent !== "undefined";
+ var supportsCustomEvent = typeof CustomEvent !== "undefined";
+ var supportsFormData = typeof FormData !== "undefined";
+ var supportsArrayBuffer = typeof ArrayBuffer !== "undefined";
+ var supportsBlob = typeof Blob === "function";
+ var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest };
+ sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
+ sinonXhr.GlobalActiveXObject = global.ActiveXObject;
+ sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject !== "undefined";
+ sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined";
+ sinonXhr.workingXHR = getWorkingXHR(global);
+ sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest());
+
+ var unsafeHeaders = {
+ "Accept-Charset": true,
+ "Accept-Encoding": true,
+ Connection: true,
+ "Content-Length": true,
+ Cookie: true,
+ Cookie2: true,
+ "Content-Transfer-Encoding": true,
+ Date: true,
+ Expect: true,
+ Host: true,
+ "Keep-Alive": true,
+ Referer: true,
+ TE: true,
+ Trailer: true,
+ "Transfer-Encoding": true,
+ Upgrade: true,
+ "User-Agent": true,
+ Via: true
+ };
+
+ // An upload object is created for each
+ // FakeXMLHttpRequest and allows upload
+ // events to be simulated using uploadProgress
+ // and uploadError.
+ function UploadProgress() {
+ this.eventListeners = {
+ progress: [],
+ load: [],
+ abort: [],
+ error: []
+ };
+ }
+
+ UploadProgress.prototype.addEventListener = function addEventListener(event, listener) {
+ this.eventListeners[event].push(listener);
+ };
+
+ UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) {
+ var listeners = this.eventListeners[event] || [];
+
+ for (var i = 0, l = listeners.length; i < l; ++i) {
+ if (listeners[i] === listener) {
+ return listeners.splice(i, 1);
+ }
+ }
+ };
+
+ UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) {
+ var listeners = this.eventListeners[event.type] || [];
+
+ for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
+ listener(event);
+ }
+ };
+
+ // Note that for FakeXMLHttpRequest to work pre ES5
+ // we lose some of the alignment with the spec.
+ // To ensure as close a match as possible,
+ // set responseType before calling open, send or respond;
+ function FakeXMLHttpRequest() {
+ this.readyState = FakeXMLHttpRequest.UNSENT;
+ this.requestHeaders = {};
+ this.requestBody = null;
+ this.status = 0;
+ this.statusText = "";
+ this.upload = new UploadProgress();
+ this.responseType = "";
+ this.response = "";
+ if (sinonXhr.supportsCORS) {
+ this.withCredentials = false;
+ }
+
+ var xhr = this;
+ var events = ["loadstart", "load", "abort", "loadend"];
+
+ function addEventListener(eventName) {
+ xhr.addEventListener(eventName, function (event) {
+ var listener = xhr["on" + eventName];
+
+ if (listener && typeof listener === "function") {
+ listener.call(this, event);
+ }
+ });
+ }
+
+ for (var i = events.length - 1; i >= 0; i--) {
+ addEventListener(events[i]);
+ }
+
+ if (typeof FakeXMLHttpRequest.onCreate === "function") {
+ FakeXMLHttpRequest.onCreate(this);
+ }
+ }
+
+ function verifyState(xhr) {
+ if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+ throw new Error("INVALID_STATE_ERR");
+ }
+
+ if (xhr.sendFlag) {
+ throw new Error("INVALID_STATE_ERR");
+ }
+ }
+
+ function getHeader(headers, header) {
+ header = header.toLowerCase();
+
+ for (var h in headers) {
+ if (h.toLowerCase() === header) {
+ return h;
+ }
+ }
+
+ return null;
+ }
+
+ // filtering to enable a white-list version of Sinon FakeXhr,
+ // where whitelisted requests are passed through to real XHR
+ function each(collection, callback) {
+ if (!collection) {
+ return;
+ }
+
+ for (var i = 0, l = collection.length; i < l; i += 1) {
+ callback(collection[i]);
+ }
+ }
+ function some(collection, callback) {
+ for (var index = 0; index < collection.length; index++) {
+ if (callback(collection[index]) === true) {
+ return true;
+ }
+ }
+ return false;
+ }
+ // largest arity in XHR is 5 - XHR#open
+ var apply = function (obj, method, args) {
+ switch (args.length) {
+ case 0: return obj[method]();
+ case 1: return obj[method](args[0]);
+ case 2: return obj[method](args[0], args[1]);
+ case 3: return obj[method](args[0], args[1], args[2]);
+ case 4: return obj[method](args[0], args[1], args[2], args[3]);
+ case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]);
+ }
+ };
+
+ FakeXMLHttpRequest.filters = [];
+ FakeXMLHttpRequest.addFilter = function addFilter(fn) {
+ this.filters.push(fn);
+ };
+ var IE6Re = /MSIE 6/;
+ FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
+ var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap
+
+ each([
+ "open",
+ "setRequestHeader",
+ "send",
+ "abort",
+ "getResponseHeader",
+ "getAllResponseHeaders",
+ "addEventListener",
+ "overrideMimeType",
+ "removeEventListener"
+ ], function (method) {
+ fakeXhr[method] = function () {
+ return apply(xhr, method, arguments);
+ };
+ });
+
+ var copyAttrs = function (args) {
+ each(args, function (attr) {
+ try {
+ fakeXhr[attr] = xhr[attr];
+ } catch (e) {
+ if (!IE6Re.test(navigator.userAgent)) {
+ throw e;
+ }
+ }
+ });
+ };
+
+ var stateChange = function stateChange() {
+ fakeXhr.readyState = xhr.readyState;
+ if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ copyAttrs(["status", "statusText"]);
+ }
+ if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
+ copyAttrs(["responseText", "response"]);
+ }
+ if (xhr.readyState === FakeXMLHttpRequest.DONE) {
+ copyAttrs(["responseXML"]);
+ }
+ if (fakeXhr.onreadystatechange) {
+ fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
+ }
+ };
+
+ if (xhr.addEventListener) {
+ for (var event in fakeXhr.eventListeners) {
+ if (fakeXhr.eventListeners.hasOwnProperty(event)) {
+
+ /*eslint-disable no-loop-func*/
+ each(fakeXhr.eventListeners[event], function (handler) {
+ xhr.addEventListener(event, handler);
+ });
+ /*eslint-enable no-loop-func*/
+ }
+ }
+ xhr.addEventListener("readystatechange", stateChange);
+ } else {
+ xhr.onreadystatechange = stateChange;
+ }
+ apply(xhr, "open", xhrArgs);
+ };
+ FakeXMLHttpRequest.useFilters = false;
+
+ function verifyRequestOpened(xhr) {
+ if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+ throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
+ }
+ }
+
+ function verifyRequestSent(xhr) {
+ if (xhr.readyState === FakeXMLHttpRequest.DONE) {
+ throw new Error("Request done");
+ }
+ }
+
+ function verifyHeadersReceived(xhr) {
+ if (xhr.async && xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ throw new Error("No headers received");
+ }
+ }
+
+ function verifyResponseBodyType(body) {
+ if (typeof body !== "string") {
+ var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
+ body + ", which is not a string.");
+ error.name = "InvalidBodyException";
+ throw error;
+ }
+ }
+
+ function convertToArrayBuffer(body) {
+ var buffer = new ArrayBuffer(body.length);
+ var view = new Uint8Array(buffer);
+ for (var i = 0; i < body.length; i++) {
+ var charCode = body.charCodeAt(i);
+ if (charCode >= 256) {
+ throw new TypeError("arraybuffer or blob responseTypes require binary string, " +
+ "invalid character " + body[i] + " found.");
+ }
+ view[i] = charCode;
+ }
+ return buffer;
+ }
+
+ function isXmlContentType(contentType) {
+ return !contentType || /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType);
+ }
+
+ function convertResponseBody(responseType, contentType, body) {
+ if (responseType === "" || responseType === "text") {
+ return body;
+ } else if (supportsArrayBuffer && responseType === "arraybuffer") {
+ return convertToArrayBuffer(body);
+ } else if (responseType === "json") {
+ try {
+ return JSON.parse(body);
+ } catch (e) {
+ // Return parsing failure as null
+ return null;
+ }
+ } else if (supportsBlob && responseType === "blob") {
+ var blobOptions = {};
+ if (contentType) {
+ blobOptions.type = contentType;
+ }
+ return new Blob([convertToArrayBuffer(body)], blobOptions);
+ } else if (responseType === "document") {
+ if (isXmlContentType(contentType)) {
+ return FakeXMLHttpRequest.parseXML(body);
+ }
+ return null;
+ }
+ throw new Error("Invalid responseType " + responseType);
+ }
+
+ function clearResponse(xhr) {
+ if (xhr.responseType === "" || xhr.responseType === "text") {
+ xhr.response = xhr.responseText = "";
+ } else {
+ xhr.response = xhr.responseText = null;
+ }
+ xhr.responseXML = null;
+ }
+
+ FakeXMLHttpRequest.parseXML = function parseXML(text) {
+ // Treat empty string as parsing failure
+ if (text !== "") {
+ try {
+ if (typeof DOMParser !== "undefined") {
+ var parser = new DOMParser();
+ return parser.parseFromString(text, "text/xml");
+ }
+ var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
+ xmlDoc.async = "false";
+ xmlDoc.loadXML(text);
+ return xmlDoc;
+ } catch (e) {
+ // Unable to parse XML - no biggie
+ }
+ }
+
+ return null;
+ };
+
+ FakeXMLHttpRequest.statusCodes = {
+ 100: "Continue",
+ 101: "Switching Protocols",
+ 200: "OK",
+ 201: "Created",
+ 202: "Accepted",
+ 203: "Non-Authoritative Information",
+ 204: "No Content",
+ 205: "Reset Content",
+ 206: "Partial Content",
+ 207: "Multi-Status",
+ 300: "Multiple Choice",
+ 301: "Moved Permanently",
+ 302: "Found",
+ 303: "See Other",
+ 304: "Not Modified",
+ 305: "Use Proxy",
+ 307: "Temporary Redirect",
+ 400: "Bad Request",
+ 401: "Unauthorized",
+ 402: "Payment Required",
+ 403: "Forbidden",
+ 404: "Not Found",
+ 405: "Method Not Allowed",
+ 406: "Not Acceptable",
+ 407: "Proxy Authentication Required",
+ 408: "Request Timeout",
+ 409: "Conflict",
+ 410: "Gone",
+ 411: "Length Required",
+ 412: "Precondition Failed",
+ 413: "Request Entity Too Large",
+ 414: "Request-URI Too Long",
+ 415: "Unsupported Media Type",
+ 416: "Requested Range Not Satisfiable",
+ 417: "Expectation Failed",
+ 422: "Unprocessable Entity",
+ 500: "Internal Server Error",
+ 501: "Not Implemented",
+ 502: "Bad Gateway",
+ 503: "Service Unavailable",
+ 504: "Gateway Timeout",
+ 505: "HTTP Version Not Supported"
+ };
+
+ function makeApi(sinon) {
+ sinon.xhr = sinonXhr;
+
+ sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
+ async: true,
+
+ open: function open(method, url, async, username, password) {
+ this.method = method;
+ this.url = url;
+ this.async = typeof async === "boolean" ? async : true;
+ this.username = username;
+ this.password = password;
+ clearResponse(this);
+ this.requestHeaders = {};
+ this.sendFlag = false;
+
+ if (FakeXMLHttpRequest.useFilters === true) {
+ var xhrArgs = arguments;
+ var defake = some(FakeXMLHttpRequest.filters, function (filter) {
+ return filter.apply(this, xhrArgs);
+ });
+ if (defake) {
+ return FakeXMLHttpRequest.defake(this, arguments);
+ }
+ }
+ this.readyStateChange(FakeXMLHttpRequest.OPENED);
+ },
+
+ readyStateChange: function readyStateChange(state) {
+ this.readyState = state;
+
+ var readyStateChangeEvent = new sinon.Event("readystatechange", false, false, this);
+
+ if (typeof this.onreadystatechange === "function") {
+ try {
+ this.onreadystatechange(readyStateChangeEvent);
+ } catch (e) {
+ sinon.logError("Fake XHR onreadystatechange handler", e);
+ }
+ }
+
+ switch (this.readyState) {
+ case FakeXMLHttpRequest.DONE:
+ if (supportsProgress) {
+ this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+ this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+ }
+ this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
+ this.dispatchEvent(new sinon.Event("load", false, false, this));
+ this.dispatchEvent(new sinon.Event("loadend", false, false, this));
+ break;
+ }
+
+ this.dispatchEvent(readyStateChangeEvent);
+ },
+
+ setRequestHeader: function setRequestHeader(header, value) {
+ verifyState(this);
+
+ if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
+ throw new Error("Refused to set unsafe header \"" + header + "\"");
+ }
+
+ if (this.requestHeaders[header]) {
+ this.requestHeaders[header] += "," + value;
+ } else {
+ this.requestHeaders[header] = value;
+ }
+ },
+
+ // Helps testing
+ setResponseHeaders: function setResponseHeaders(headers) {
+ verifyRequestOpened(this);
+ this.responseHeaders = {};
+
+ for (var header in headers) {
+ if (headers.hasOwnProperty(header)) {
+ this.responseHeaders[header] = headers[header];
+ }
+ }
+
+ if (this.async) {
+ this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
+ } else {
+ this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
+ }
+ },
+
+ // Currently treats ALL data as a DOMString (i.e. no Document)
+ send: function send(data) {
+ verifyState(this);
+
+ if (!/^(get|head)$/i.test(this.method)) {
+ var contentType = getHeader(this.requestHeaders, "Content-Type");
+ if (this.requestHeaders[contentType]) {
+ var value = this.requestHeaders[contentType].split(";");
+ this.requestHeaders[contentType] = value[0] + ";charset=utf-8";
+ } else if (supportsFormData && !(data instanceof FormData)) {
+ this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+ }
+
+ this.requestBody = data;
+ }
+
+ this.errorFlag = false;
+ this.sendFlag = this.async;
+ clearResponse(this);
+ this.readyStateChange(FakeXMLHttpRequest.OPENED);
+
+ if (typeof this.onSend === "function") {
+ this.onSend(this);
+ }
+
+ this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
+ },
+
+ abort: function abort() {
+ this.aborted = true;
+ clearResponse(this);
+ this.errorFlag = true;
+ this.requestHeaders = {};
+ this.responseHeaders = {};
+
+ if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) {
+ this.readyStateChange(FakeXMLHttpRequest.DONE);
+ this.sendFlag = false;
+ }
+
+ this.readyState = FakeXMLHttpRequest.UNSENT;
+
+ this.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+ this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+ if (typeof this.onerror === "function") {
+ this.onerror();
+ }
+ },
+
+ getResponseHeader: function getResponseHeader(header) {
+ if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ return null;
+ }
+
+ if (/^Set-Cookie2?$/i.test(header)) {
+ return null;
+ }
+
+ header = getHeader(this.responseHeaders, header);
+
+ return this.responseHeaders[header] || null;
+ },
+
+ getAllResponseHeaders: function getAllResponseHeaders() {
+ if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+ return "";
+ }
+
+ var headers = "";
+
+ for (var header in this.responseHeaders) {
+ if (this.responseHeaders.hasOwnProperty(header) &&
+ !/^Set-Cookie2?$/i.test(header)) {
+ headers += header + ": " + this.responseHeaders[header] + "\r\n";
+ }
+ }
+
+ return headers;
+ },
+
+ setResponseBody: function setResponseBody(body) {
+ verifyRequestSent(this);
+ verifyHeadersReceived(this);
+ verifyResponseBodyType(body);
+ var contentType = this.getResponseHeader("Content-Type");
+
+ var isTextResponse = this.responseType === "" || this.responseType === "text";
+ clearResponse(this);
+ if (this.async) {
+ var chunkSize = this.chunkSize || 10;
+ var index = 0;
+
+ do {
+ this.readyStateChange(FakeXMLHttpRequest.LOADING);
+
+ if (isTextResponse) {
+ this.responseText = this.response += body.substring(index, index + chunkSize);
+ }
+ index += chunkSize;
+ } while (index < body.length);
+ }
+
+ this.response = convertResponseBody(this.responseType, contentType, body);
+ if (isTextResponse) {
+ this.responseText = this.response;
+ }
+
+ if (this.responseType === "document") {
+ this.responseXML = this.response;
+ } else if (this.responseType === "" && isXmlContentType(contentType)) {
+ this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
+ }
+ this.readyStateChange(FakeXMLHttpRequest.DONE);
+ },
+
+ respond: function respond(status, headers, body) {
+ this.status = typeof status === "number" ? status : 200;
+ this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
+ this.setResponseHeaders(headers || {});
+ this.setResponseBody(body || "");
+ },
+
+ uploadProgress: function uploadProgress(progressEventRaw) {
+ if (supportsProgress) {
+ this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+ }
+ },
+
+ downloadProgress: function downloadProgress(progressEventRaw) {
+ if (supportsProgress) {
+ this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+ }
+ },
+
+ uploadError: function uploadError(error) {
+ if (supportsCustomEvent) {
+ this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error}));
+ }
+ }
+ });
+
+ sinon.extend(FakeXMLHttpRequest, {
+ UNSENT: 0,
+ OPENED: 1,
+ HEADERS_RECEIVED: 2,
+ LOADING: 3,
+ DONE: 4
+ });
+
+ sinon.useFakeXMLHttpRequest = function () {
+ FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
+ if (sinonXhr.supportsXHR) {
+ global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
+ }
+
+ if (sinonXhr.supportsActiveX) {
+ global.ActiveXObject = sinonXhr.GlobalActiveXObject;
+ }
+
+ delete FakeXMLHttpRequest.restore;
+
+ if (keepOnCreate !== true) {
+ delete FakeXMLHttpRequest.onCreate;
+ }
+ };
+ if (sinonXhr.supportsXHR) {
+ global.XMLHttpRequest = FakeXMLHttpRequest;
+ }
+
+ if (sinonXhr.supportsActiveX) {
+ global.ActiveXObject = function ActiveXObject(objId) {
+ if (objId === "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
+
+ return new FakeXMLHttpRequest();
+ }
+
+ return new sinonXhr.GlobalActiveXObject(objId);
+ };
+ }
+
+ return FakeXMLHttpRequest;
+ };
+
+ sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./core");
+ require("../extend");
+ require("./event");
+ require("../log_error");
+ makeApi(sinon);
+ module.exports = sinon;
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon, // eslint-disable-line no-undef
+ typeof global !== "undefined" ? global : self
+));
+
+/**
+ * @depend fake_xdomain_request.js
+ * @depend fake_xml_http_request.js
+ * @depend ../format.js
+ * @depend ../log_error.js
+ */
+/**
+ * The Sinon "server" mimics a web server that receives requests from
+ * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
+ * both synchronously and asynchronously. To respond synchronuously, canned
+ * answers have to be provided upfront.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function () {
+
+ var push = [].push;
+
+ function responseArray(handler) {
+ var response = handler;
+
+ if (Object.prototype.toString.call(handler) !== "[object Array]") {
+ response = [200, {}, handler];
+ }
+
+ if (typeof response[2] !== "string") {
+ throw new TypeError("Fake server response body should be string, but was " +
+ typeof response[2]);
+ }
+
+ return response;
+ }
+
+ var wloc = typeof window !== "undefined" ? window.location : {};
+ var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
+
+ function matchOne(response, reqMethod, reqUrl) {
+ var rmeth = response.method;
+ var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase();
+ var url = response.url;
+ var matchUrl = !url || url === reqUrl || (typeof url.test === "function" && url.test(reqUrl));
+
+ return matchMethod && matchUrl;
+ }
+
+ function match(response, request) {
+ var requestUrl = request.url;
+
+ if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
+ requestUrl = requestUrl.replace(rCurrLoc, "");
+ }
+
+ if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
+ if (typeof response.response === "function") {
+ var ru = response.url;
+ var args = [request].concat(ru && typeof ru.exec === "function" ? ru.exec(requestUrl).slice(1) : []);
+ return response.response.apply(response, args);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ function makeApi(sinon) {
+ sinon.fakeServer = {
+ create: function (config) {
+ var server = sinon.create(this);
+ server.configure(config);
+ if (!sinon.xhr.supportsCORS) {
+ this.xhr = sinon.useFakeXDomainRequest();
+ } else {
+ this.xhr = sinon.useFakeXMLHttpRequest();
+ }
+ server.requests = [];
+
+ this.xhr.onCreate = function (xhrObj) {
+ server.addRequest(xhrObj);
+ };
+
+ return server;
+ },
+ configure: function (config) {
+ var whitelist = {
+ "autoRespond": true,
+ "autoRespondAfter": true,
+ "respondImmediately": true,
+ "fakeHTTPMethods": true
+ };
+ var setting;
+
+ config = config || {};
+ for (setting in config) {
+ if (whitelist.hasOwnProperty(setting) && config.hasOwnProperty(setting)) {
+ this[setting] = config[setting];
+ }
+ }
+ },
+ addRequest: function addRequest(xhrObj) {
+ var server = this;
+ push.call(this.requests, xhrObj);
+
+ xhrObj.onSend = function () {
+ server.handleRequest(this);
+
+ if (server.respondImmediately) {
+ server.respond();
+ } else if (server.autoRespond && !server.responding) {
+ setTimeout(function () {
+ server.responding = false;
+ server.respond();
+ }, server.autoRespondAfter || 10);
+
+ server.responding = true;
+ }
+ };
+ },
+
+ getHTTPMethod: function getHTTPMethod(request) {
+ if (this.fakeHTTPMethods && /post/i.test(request.method)) {
+ var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
+ return matches ? matches[1] : request.method;
+ }
+
+ return request.method;
+ },
+
+ handleRequest: function handleRequest(xhr) {
+ if (xhr.async) {
+ if (!this.queue) {
+ this.queue = [];
+ }
+
+ push.call(this.queue, xhr);
+ } else {
+ this.processRequest(xhr);
+ }
+ },
+
+ log: function log(response, request) {
+ var str;
+
+ str = "Request:\n" + sinon.format(request) + "\n\n";
+ str += "Response:\n" + sinon.format(response) + "\n\n";
+
+ sinon.log(str);
+ },
+
+ respondWith: function respondWith(method, url, body) {
+ if (arguments.length === 1 && typeof method !== "function") {
+ this.response = responseArray(method);
+ return;
+ }
+
+ if (!this.responses) {
+ this.responses = [];
+ }
+
+ if (arguments.length === 1) {
+ body = method;
+ url = method = null;
+ }
+
+ if (arguments.length === 2) {
+ body = url;
+ url = method;
+ method = null;
+ }
+
+ push.call(this.responses, {
+ method: method,
+ url: url,
+ response: typeof body === "function" ? body : responseArray(body)
+ });
+ },
+
+ respond: function respond() {
+ if (arguments.length > 0) {
+ this.respondWith.apply(this, arguments);
+ }
+
+ var queue = this.queue || [];
+ var requests = queue.splice(0, queue.length);
+
+ for (var i = 0; i < requests.length; i++) {
+ this.processRequest(requests[i]);
+ }
+ },
+
+ processRequest: function processRequest(request) {
+ try {
+ if (request.aborted) {
+ return;
+ }
+
+ var response = this.response || [404, {}, ""];
+
+ if (this.responses) {
+ for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
+ if (match.call(this, this.responses[i], request)) {
+ response = this.responses[i].response;
+ break;
+ }
+ }
+ }
+
+ if (request.readyState !== 4) {
+ this.log(response, request);
+
+ request.respond(response[0], response[1], response[2]);
+ }
+ } catch (e) {
+ sinon.logError("Fake server request processing", e);
+ }
+ },
+
+ restore: function restore() {
+ return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
+ }
+ };
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./core");
+ require("./fake_xdomain_request");
+ require("./fake_xml_http_request");
+ require("../format");
+ makeApi(sinon);
+ module.exports = sinon;
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require, module.exports, module);
+ } else {
+ makeApi(sinon); // eslint-disable-line no-undef
+ }
+}());
+
+/**
+ * @depend fake_server.js
+ * @depend fake_timers.js
+ */
+/**
+ * Add-on for sinon.fakeServer that automatically handles a fake timer along with
+ * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
+ * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
+ * it polls the object for completion with setInterval. Dispite the direct
+ * motivation, there is nothing jQuery-specific in this file, so it can be used
+ * in any environment where the ajax implementation depends on setInterval or
+ * setTimeout.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function () {
+
+ function makeApi(sinon) {
+ function Server() {}
+ Server.prototype = sinon.fakeServer;
+
+ sinon.fakeServerWithClock = new Server();
+
+ sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
+ if (xhr.async) {
+ if (typeof setTimeout.clock === "object") {
+ this.clock = setTimeout.clock;
+ } else {
+ this.clock = sinon.useFakeTimers();
+ this.resetClock = true;
+ }
+
+ if (!this.longestTimeout) {
+ var clockSetTimeout = this.clock.setTimeout;
+ var clockSetInterval = this.clock.setInterval;
+ var server = this;
+
+ this.clock.setTimeout = function (fn, timeout) {
+ server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+ return clockSetTimeout.apply(this, arguments);
+ };
+
+ this.clock.setInterval = function (fn, timeout) {
+ server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+ return clockSetInterval.apply(this, arguments);
+ };
+ }
+ }
+
+ return sinon.fakeServer.addRequest.call(this, xhr);
+ };
+
+ sinon.fakeServerWithClock.respond = function respond() {
+ var returnVal = sinon.fakeServer.respond.apply(this, arguments);
+
+ if (this.clock) {
+ this.clock.tick(this.longestTimeout || 0);
+ this.longestTimeout = 0;
+
+ if (this.resetClock) {
+ this.clock.restore();
+ this.resetClock = false;
+ }
+ }
+
+ return returnVal;
+ };
+
+ sinon.fakeServerWithClock.restore = function restore() {
+ if (this.clock) {
+ this.clock.restore();
+ }
+
+ return sinon.fakeServer.restore.apply(this, arguments);
+ };
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require) {
+ var sinon = require("./core");
+ require("./fake_server");
+ require("./fake_timers");
+ makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require);
+ } else {
+ makeApi(sinon); // eslint-disable-line no-undef
+ }
+}());
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend collection.js
+ * @depend util/fake_timers.js
+ * @depend util/fake_server_with_clock.js
+ */
+/**
+ * Manages fake collections as well as fake utilities such as Sinon's
+ * timers and fake XHR implementation in one convenient object.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ var push = [].push;
+
+ function exposeValue(sandbox, config, key, value) {
+ if (!value) {
+ return;
+ }
+
+ if (config.injectInto && !(key in config.injectInto)) {
+ config.injectInto[key] = value;
+ sandbox.injectedKeys.push(key);
+ } else {
+ push.call(sandbox.args, value);
+ }
+ }
+
+ function prepareSandboxFromConfig(config) {
+ var sandbox = sinon.create(sinon.sandbox);
+
+ if (config.useFakeServer) {
+ if (typeof config.useFakeServer === "object") {
+ sandbox.serverPrototype = config.useFakeServer;
+ }
+
+ sandbox.useFakeServer();
+ }
+
+ if (config.useFakeTimers) {
+ if (typeof config.useFakeTimers === "object") {
+ sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
+ } else {
+ sandbox.useFakeTimers();
+ }
+ }
+
+ return sandbox;
+ }
+
+ sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
+ useFakeTimers: function useFakeTimers() {
+ this.clock = sinon.useFakeTimers.apply(sinon, arguments);
+
+ return this.add(this.clock);
+ },
+
+ serverPrototype: sinon.fakeServer,
+
+ useFakeServer: function useFakeServer() {
+ var proto = this.serverPrototype || sinon.fakeServer;
+
+ if (!proto || !proto.create) {
+ return null;
+ }
+
+ this.server = proto.create();
+ return this.add(this.server);
+ },
+
+ inject: function (obj) {
+ sinon.collection.inject.call(this, obj);
+
+ if (this.clock) {
+ obj.clock = this.clock;
+ }
+
+ if (this.server) {
+ obj.server = this.server;
+ obj.requests = this.server.requests;
+ }
+
+ obj.match = sinon.match;
+
+ return obj;
+ },
+
+ restore: function () {
+ sinon.collection.restore.apply(this, arguments);
+ this.restoreContext();
+ },
+
+ restoreContext: function () {
+ if (this.injectedKeys) {
+ for (var i = 0, j = this.injectedKeys.length; i < j; i++) {
+ delete this.injectInto[this.injectedKeys[i]];
+ }
+ this.injectedKeys = [];
+ }
+ },
+
+ create: function (config) {
+ if (!config) {
+ return sinon.create(sinon.sandbox);
+ }
+
+ var sandbox = prepareSandboxFromConfig(config);
+ sandbox.args = sandbox.args || [];
+ sandbox.injectedKeys = [];
+ sandbox.injectInto = config.injectInto;
+ var prop,
+ value;
+ var exposed = sandbox.inject({});
+
+ if (config.properties) {
+ for (var i = 0, l = config.properties.length; i < l; i++) {
+ prop = config.properties[i];
+ value = exposed[prop] || prop === "sandbox" && sandbox;
+ exposeValue(sandbox, config, prop, value);
+ }
+ } else {
+ exposeValue(sandbox, config, "sandbox", value);
+ }
+
+ return sandbox;
+ },
+
+ match: sinon.match
+ });
+
+ sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
+
+ return sinon.sandbox;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./extend");
+ require("./util/fake_server_with_clock");
+ require("./util/fake_timers");
+ require("./collection");
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend util/core.js
+ * @depend sandbox.js
+ */
+/**
+ * Test function, sandboxes fakes
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function makeApi(sinon) {
+ var slice = Array.prototype.slice;
+
+ function test(callback) {
+ var type = typeof callback;
+
+ if (type !== "function") {
+ throw new TypeError("sinon.test needs to wrap a test function, got " + type);
+ }
+
+ function sinonSandboxedTest() {
+ var config = sinon.getConfig(sinon.config);
+ config.injectInto = config.injectIntoThis && this || config.injectInto;
+ var sandbox = sinon.sandbox.create(config);
+ var args = slice.call(arguments);
+ var oldDone = args.length && args[args.length - 1];
+ var exception, result;
+
+ if (typeof oldDone === "function") {
+ args[args.length - 1] = function sinonDone(res) {
+ if (res) {
+ sandbox.restore();
+ } else {
+ sandbox.verifyAndRestore();
+ }
+ oldDone(res);
+ };
+ }
+
+ try {
+ result = callback.apply(this, args.concat(sandbox.args));
+ } catch (e) {
+ exception = e;
+ }
+
+ if (typeof oldDone !== "function") {
+ if (typeof exception !== "undefined") {
+ sandbox.restore();
+ throw exception;
+ } else {
+ sandbox.verifyAndRestore();
+ }
+ }
+
+ return result;
+ }
+
+ if (callback.length) {
+ return function sinonAsyncSandboxedTest(done) { // eslint-disable-line no-unused-vars
+ return sinonSandboxedTest.apply(this, arguments);
+ };
+ }
+
+ return sinonSandboxedTest;
+ }
+
+ test.config = {
+ injectIntoThis: true,
+ injectInto: null,
+ properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+ useFakeTimers: true,
+ useFakeServer: true
+ };
+
+ sinon.test = test;
+ return test;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var core = require("./util/core");
+ require("./sandbox");
+ module.exports = makeApi(core);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ } else if (isNode) {
+ loadDependencies(require, module.exports, module);
+ } else if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(typeof sinon === "object" && sinon || null)); // eslint-disable-line no-undef
+
+/**
+ * @depend util/core.js
+ * @depend test.js
+ */
+/**
+ * Test case, sandboxes all test functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal) {
+
+ function createTest(property, setUp, tearDown) {
+ return function () {
+ if (setUp) {
+ setUp.apply(this, arguments);
+ }
+
+ var exception, result;
+
+ try {
+ result = property.apply(this, arguments);
+ } catch (e) {
+ exception = e;
+ }
+
+ if (tearDown) {
+ tearDown.apply(this, arguments);
+ }
+
+ if (exception) {
+ throw exception;
+ }
+
+ return result;
+ };
+ }
+
+ function makeApi(sinon) {
+ function testCase(tests, prefix) {
+ if (!tests || typeof tests !== "object") {
+ throw new TypeError("sinon.testCase needs an object with test functions");
+ }
+
+ prefix = prefix || "test";
+ var rPrefix = new RegExp("^" + prefix);
+ var methods = {};
+ var setUp = tests.setUp;
+ var tearDown = tests.tearDown;
+ var testName,
+ property,
+ method;
+
+ for (testName in tests) {
+ if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) {
+ property = tests[testName];
+
+ if (typeof property === "function" && rPrefix.test(testName)) {
+ method = property;
+
+ if (setUp || tearDown) {
+ method = createTest(property, setUp, tearDown);
+ }
+
+ methods[testName] = sinon.test(method);
+ } else {
+ methods[testName] = tests[testName];
+ }
+ }
+ }
+
+ return methods;
+ }
+
+ sinon.testCase = testCase;
+ return testCase;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var core = require("./util/core");
+ require("./test");
+ module.exports = makeApi(core);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon // eslint-disable-line no-undef
+));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend match.js
+ * @depend format.js
+ */
+/**
+ * Assertions matching the test spy retrieval interface.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+(function (sinonGlobal, global) {
+
+ var slice = Array.prototype.slice;
+
+ function makeApi(sinon) {
+ var assert;
+
+ function verifyIsStub() {
+ var method;
+
+ for (var i = 0, l = arguments.length; i < l; ++i) {
+ method = arguments[i];
+
+ if (!method) {
+ assert.fail("fake is not a spy");
+ }
+
+ if (method.proxy && method.proxy.isSinonProxy) {
+ verifyIsStub(method.proxy);
+ } else {
+ if (typeof method !== "function") {
+ assert.fail(method + " is not a function");
+ }
+
+ if (typeof method.getCall !== "function") {
+ assert.fail(method + " is not stubbed");
+ }
+ }
+
+ }
+ }
+
+ function failAssertion(object, msg) {
+ object = object || global;
+ var failMethod = object.fail || assert.fail;
+ failMethod.call(object, msg);
+ }
+
+ function mirrorPropAsAssertion(name, method, message) {
+ if (arguments.length === 2) {
+ message = method;
+ method = name;
+ }
+
+ assert[name] = function (fake) {
+ verifyIsStub(fake);
+
+ var args = slice.call(arguments, 1);
+ var failed = false;
+
+ if (typeof method === "function") {
+ failed = !method(fake);
+ } else {
+ failed = typeof fake[method] === "function" ?
+ !fake[method].apply(fake, args) : !fake[method];
+ }
+
+ if (failed) {
+ failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args)));
+ } else {
+ assert.pass(name);
+ }
+ };
+ }
+
+ function exposedName(prefix, prop) {
+ return !prefix || /^fail/.test(prop) ? prop :
+ prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
+ }
+
+ assert = {
+ failException: "AssertError",
+
+ fail: function fail(message) {
+ var error = new Error(message);
+ error.name = this.failException || assert.failException;
+
+ throw error;
+ },
+
+ pass: function pass() {},
+
+ callOrder: function assertCallOrder() {
+ verifyIsStub.apply(null, arguments);
+ var expected = "";
+ var actual = "";
+
+ if (!sinon.calledInOrder(arguments)) {
+ try {
+ expected = [].join.call(arguments, ", ");
+ var calls = slice.call(arguments);
+ var i = calls.length;
+ while (i) {
+ if (!calls[--i].called) {
+ calls.splice(i, 1);
+ }
+ }
+ actual = sinon.orderByFirstCall(calls).join(", ");
+ } catch (e) {
+ // If this fails, we'll just fall back to the blank string
+ }
+
+ failAssertion(this, "expected " + expected + " to be " +
+ "called in order but were called as " + actual);
+ } else {
+ assert.pass("callOrder");
+ }
+ },
+
+ callCount: function assertCallCount(method, count) {
+ verifyIsStub(method);
+
+ if (method.callCount !== count) {
+ var msg = "expected %n to be called " + sinon.timesInWords(count) +
+ " but was called %c%C";
+ failAssertion(this, method.printf(msg));
+ } else {
+ assert.pass("callCount");
+ }
+ },
+
+ expose: function expose(target, options) {
+ if (!target) {
+ throw new TypeError("target is null or undefined");
+ }
+
+ var o = options || {};
+ var prefix = typeof o.prefix === "undefined" && "assert" || o.prefix;
+ var includeFail = typeof o.includeFail === "undefined" || !!o.includeFail;
+
+ for (var method in this) {
+ if (method !== "expose" && (includeFail || !/^(fail)/.test(method))) {
+ target[exposedName(prefix, method)] = this[method];
+ }
+ }
+
+ return target;
+ },
+
+ match: function match(actual, expectation) {
+ var matcher = sinon.match(expectation);
+ if (matcher.test(actual)) {
+ assert.pass("match");
+ } else {
+ var formatted = [
+ "expected value to match",
+ " expected = " + sinon.format(expectation),
+ " actual = " + sinon.format(actual)
+ ];
+
+ failAssertion(this, formatted.join("\n"));
+ }
+ }
+ };
+
+ mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
+ mirrorPropAsAssertion("notCalled", function (spy) {
+ return !spy.called;
+ }, "expected %n to not have been called but was called %c%C");
+ mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
+ mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
+ mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
+ mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
+ mirrorPropAsAssertion(
+ "alwaysCalledOn",
+ "expected %n to always be called with %1 as this but was called with %t"
+ );
+ mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
+ mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
+ mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
+ mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
+ mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
+ mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
+ mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
+ mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
+ mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
+ mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
+ mirrorPropAsAssertion("threw", "%n did not throw exception%C");
+ mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
+
+ sinon.assert = assert;
+ return assert;
+ }
+
+ var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+ var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+ function loadDependencies(require, exports, module) {
+ var sinon = require("./util/core");
+ require("./match");
+ require("./format");
+ module.exports = makeApi(sinon);
+ }
+
+ if (isAMD) {
+ define(loadDependencies);
+ return;
+ }
+
+ if (isNode) {
+ loadDependencies(require, module.exports, module);
+ return;
+ }
+
+ if (sinonGlobal) {
+ makeApi(sinonGlobal);
+ }
+}(
+ typeof sinon === "object" && sinon, // eslint-disable-line no-undef
+ typeof global !== "undefined" ? global : self
+));
+
+ return sinon;
+}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/.bower.json
new file mode 100644
index 00000000000..7edb13dc76e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/.bower.json
@@ -0,0 +1,37 @@
+{
+ "name": "stacky",
+ "description": "Stacky parses stack traces from various sources, and formats them in readable ways.",
+ "main": "browser.js",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "ignore": [
+ "*",
+ "!/lib/*.js",
+ "!/LICENSE",
+ "!/browser.js"
+ ],
+ "license": "BSD-3-Clause",
+ "keywords": [
+ "stack",
+ "trace",
+ "error",
+ "stack parser",
+ "trace parser"
+ ],
+ "homepage": "https://github.com/PolymerLabs/stacky",
+ "moduleType": [
+ "amd",
+ "globals"
+ ],
+ "version": "1.3.2",
+ "_release": "1.3.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.3.2",
+ "commit": "fa297bb077559544c56b4a123c05df2ff97e9fdc"
+ },
+ "_source": "https://github.com/PolymerLabs/stacky.git",
+ "_target": "^1.3.0",
+ "_originalSource": "stacky"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/LICENSE b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/LICENSE
new file mode 100644
index 00000000000..322c5a866e2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2014 The Polymer Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/bower.json
new file mode 100644
index 00000000000..c3f0f7a23f4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/bower.json
@@ -0,0 +1,28 @@
+{
+ "name": "stacky",
+ "description": "Stacky parses stack traces from various sources, and formats them in readable ways.",
+ "main": "browser.js",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "ignore": [
+ "*",
+ "!/lib/*.js",
+ "!/LICENSE",
+ "!/browser.js"
+ ],
+ "license": "BSD-3-Clause",
+ "keywords": [
+ "stack",
+ "trace",
+ "error",
+ "stack parser",
+ "trace parser"
+ ],
+ "homepage": "https://github.com/PolymerLabs/stacky",
+ "moduleType": [
+ "amd",
+ "globals"
+ ],
+ "version": "1.3.2"
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/browser.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/browser.js
new file mode 100644
index 00000000000..7cbd20251bc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/browser.js
@@ -0,0 +1,346 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Stacky = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+(function(scope) {
+'use strict';
+
+var parse = scope.parse || require('./parsing').parse;
+
+scope.defaults = {
+ // Methods are aligned up to this much padding.
+ maxMethodPadding: 40,
+ // A string to prefix each line with.
+ indent: '',
+ // A string to show for stack lines that are missing a method.
+ methodPlaceholder: '<unknown>',
+ // A list of Strings/RegExps that will be stripped from `location` values on
+ // each line (via `String#replace`).
+ locationStrip: [],
+ // A list of Strings/RegExps that indicate that a line is *not* important, and
+ // should be styled as such.
+ unimportantLocation: [],
+ // A filter function to completely remove lines
+ filter: function() { return false; },
+ // styles are functions that take a string and return that string when styled.
+ styles: {
+ method: passthrough,
+ location: passthrough,
+ line: passthrough,
+ column: passthrough,
+ unimportant: passthrough,
+ },
+};
+
+// See Tero Tolonen's answer at
+// http://stackoverflow.com/questions/17575790/environment-detection-node-js-or-browser
+/*jshint -W054 */
+var isNode = new Function('try {return this===global;}catch(e){return false;}');
+
+// For Stacky-in-Node, we default to colored stacks.
+if (isNode()) {
+ var chalk = require('chalk');
+
+ scope.defaults.styles = {
+ method: chalk.magenta,
+ location: chalk.blue,
+ line: chalk.cyan,
+ column: chalk.cyan,
+ unimportant: chalk.dim
+ };
+}
+
+
+function pretty(stackOrParsed, options) {
+ options = mergeDefaults(options || {}, scope.defaults);
+ var lines = Array.isArray(stackOrParsed) ? stackOrParsed : parse(stackOrParsed);
+ lines = clean(lines, options);
+
+ var padSize = methodPadding(lines, options);
+ var parts = lines.map(function(line) {
+ var method = line.method || options.methodPlaceholder;
+ var pad = options.indent + padding(padSize - method.length);
+
+ var locationBits = [
+ options.styles.location(line.location),
+ options.styles.line(line.line),
+ ];
+ if ('column' in line) {
+ locationBits.push(options.styles.column(line.column));
+ }
+ var location = locationBits.join(':');
+
+ var text = pad + options.styles.method(method) + ' at ' + location;
+ if (!line.important) {
+ text = options.styles.unimportant(text);
+ }
+ return text;
+ });
+
+ return parts.join('\n');
+}
+
+function clean(lines, options) {
+ var result = [];
+ for (var i = 0, line; line = lines[i]; i++) {
+ if (options.filter(line)) continue;
+ line.location = cleanLocation(line.location, options);
+ line.important = isImportant(line, options);
+ result.push(line);
+ }
+
+ return result;
+}
+
+// Utility
+
+function passthrough(string) {
+ return string;
+}
+
+function mergeDefaults(options, defaults) {
+ var result = Object.create(defaults);
+ Object.keys(options).forEach(function(key) {
+ var value = options[key];
+ if (typeof value === 'object' && !Array.isArray(value)) {
+ value = mergeDefaults(value, defaults[key]);
+ }
+ result[key] = value;
+ });
+ return result;
+}
+
+function methodPadding(lines, options) {
+ var size = options.methodPlaceholder.length;
+ for (var i = 0, line; line = lines[i]; i++) {
+ size = Math.min(options.maxMethodPadding, Math.max(size, line.method.length));
+ }
+ return size;
+}
+
+function padding(length) {
+ var result = '';
+ for (var i = 0; i < length; i++) {
+ result = result + ' ';
+ }
+ return result;
+}
+
+function cleanLocation(location, options) {
+ if (options.locationStrip) {
+ for (var i = 0, matcher; matcher = options.locationStrip[i]; i++) {
+ location = location.replace(matcher, '');
+ }
+ }
+
+ return location;
+}
+
+function isImportant(line, options) {
+ if (options.unimportantLocation) {
+ for (var i = 0, matcher; matcher = options.unimportantLocation[i]; i++) {
+ if (line.location.match(matcher)) return false;
+ }
+ }
+
+ return true;
+}
+
+scope.clean = clean;
+scope.pretty = pretty;
+})(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));
+
+
+},{"./parsing":4,"chalk":undefined}],2:[function(require,module,exports){
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+'use strict';
+
+var formatting = require('./formatting');
+var normalization = require('./normalization');
+var parsing = require('./parsing');
+
+module.exports = {
+ // Shorthands for your convenience.
+ normalize: normalization.normalize,
+ parse: parsing.parse,
+ pretty: formatting.pretty,
+ // Or the full modules.
+ formatting: formatting,
+ normalization: normalization,
+ parsing: parsing,
+};
+
+},{"./formatting":1,"./normalization":3,"./parsing":4}],3:[function(require,module,exports){
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+(function(scope) {
+'use strict';
+
+var parse = scope.parse || require('./parsing').parse;
+var pretty = scope.pretty || require('./formatting').pretty;
+
+function normalize(error, prettyOptions) {
+ if (error.parsedStack) return error;
+ var message = error.message || error.description || error || '<unknown error>';
+ var parsedStack = [];
+ try {
+ parsedStack = parse(error.stack || error.toString());
+ } catch (error) {
+ // Ah well.
+ }
+
+ if (parsedStack.length === 0 && error.fileName) {
+ parsedStack.push({
+ method: '',
+ location: error.fileName,
+ line: error.lineNumber,
+ column: error.columnNumber,
+ });
+ }
+
+ if (!prettyOptions || !prettyOptions.showColumns) {
+ for (var i = 0, line; line = parsedStack[i]; i++) {
+ delete line.column;
+ }
+ }
+
+ var prettyStack = message;
+ if (parsedStack.length > 0) {
+ prettyStack = prettyStack + '\n' + pretty(parsedStack, prettyOptions);
+ }
+
+ var cleanErr = Object.create(Error.prototype);
+ cleanErr.message = message;
+ cleanErr.stack = prettyStack;
+ cleanErr.parsedStack = parsedStack;
+
+ return cleanErr;
+}
+
+scope.normalize = normalize;
+})(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));
+
+
+},{"./formatting":1,"./parsing":4}],4:[function(require,module,exports){
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+(function(scope) {
+'use strict';
+
+function parse(stack) {
+ var rawLines = stack.split('\n');
+
+ var stackyLines = compact(rawLines.map(parseStackyLine));
+ if (stackyLines.length === rawLines.length) return stackyLines;
+
+ var v8Lines = compact(rawLines.map(parseV8Line));
+ if (v8Lines.length > 0) return v8Lines;
+
+ var geckoLines = compact(rawLines.map(parseGeckoLine));
+ if (geckoLines.length > 0) return geckoLines;
+
+ throw new Error('Unknown stack format: ' + stack);
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack
+var GECKO_LINE = /^(?:([^@]*)@)?(.*?):(\d+)(?::(\d+))?$/;
+
+function parseGeckoLine(line) {
+ var match = line.match(GECKO_LINE);
+ if (!match) return null;
+ return {
+ method: match[1] || '',
+ location: match[2] || '',
+ line: parseInt(match[3]) || 0,
+ column: parseInt(match[4]) || 0,
+ };
+}
+
+// https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
+var V8_OUTER1 = /^\s*(eval )?at (.*) \((.*)\)$/;
+var V8_OUTER2 = /^\s*at()() (\S+)$/;
+var V8_INNER = /^\(?([^\(]+):(\d+):(\d+)\)?$/;
+
+function parseV8Line(line) {
+ var outer = line.match(V8_OUTER1) || line.match(V8_OUTER2);
+ if (!outer) return null;
+ var inner = outer[3].match(V8_INNER);
+ if (!inner) return null;
+
+ var method = outer[2] || '';
+ if (outer[1]) method = 'eval at ' + method;
+ return {
+ method: method,
+ location: inner[1] || '',
+ line: parseInt(inner[2]) || 0,
+ column: parseInt(inner[3]) || 0,
+ };
+}
+
+// Stacky.formatting.pretty
+
+var STACKY_LINE = /^\s*(.+) at (.+):(\d+):(\d+)$/;
+
+function parseStackyLine(line) {
+ var match = line.match(STACKY_LINE);
+ if (!match) return null;
+ return {
+ method: match[1] || '',
+ location: match[2] || '',
+ line: parseInt(match[3]) || 0,
+ column: parseInt(match[4]) || 0,
+ };
+}
+
+// Helpers
+
+function compact(array) {
+ var result = [];
+ array.forEach(function(value) {
+ if (value) {
+ result.push(value);
+ }
+ });
+ return result;
+}
+
+scope.parse = parse;
+scope.parseGeckoLine = parseGeckoLine;
+scope.parseV8Line = parseV8Line;
+scope.parseStackyLine = parseStackyLine;
+})(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));
+
+},{}]},{},[2])(2)
+}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/formatting.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/formatting.js
new file mode 100644
index 00000000000..651cf3c4e3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/formatting.js
@@ -0,0 +1,158 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+(function(scope) {
+'use strict';
+
+var parse = scope.parse || require('./parsing').parse;
+
+scope.defaults = {
+ // Methods are aligned up to this much padding.
+ maxMethodPadding: 40,
+ // A string to prefix each line with.
+ indent: '',
+ // A string to show for stack lines that are missing a method.
+ methodPlaceholder: '<unknown>',
+ // A list of Strings/RegExps that will be stripped from `location` values on
+ // each line (via `String#replace`).
+ locationStrip: [],
+ // A list of Strings/RegExps that indicate that a line is *not* important, and
+ // should be styled as such.
+ unimportantLocation: [],
+ // A filter function to completely remove lines
+ filter: function() { return false; },
+ // styles are functions that take a string and return that string when styled.
+ styles: {
+ method: passthrough,
+ location: passthrough,
+ line: passthrough,
+ column: passthrough,
+ unimportant: passthrough,
+ },
+};
+
+// See Tero Tolonen's answer at
+// http://stackoverflow.com/questions/17575790/environment-detection-node-js-or-browser
+/*jshint -W054 */
+var isNode = new Function('try {return this===global;}catch(e){return false;}');
+
+// For Stacky-in-Node, we default to colored stacks.
+if (isNode()) {
+ var chalk = require('chalk');
+
+ scope.defaults.styles = {
+ method: chalk.magenta,
+ location: chalk.blue,
+ line: chalk.cyan,
+ column: chalk.cyan,
+ unimportant: chalk.dim
+ };
+}
+
+
+function pretty(stackOrParsed, options) {
+ options = mergeDefaults(options || {}, scope.defaults);
+ var lines = Array.isArray(stackOrParsed) ? stackOrParsed : parse(stackOrParsed);
+ lines = clean(lines, options);
+
+ var padSize = methodPadding(lines, options);
+ var parts = lines.map(function(line) {
+ var method = line.method || options.methodPlaceholder;
+ var pad = options.indent + padding(padSize - method.length);
+
+ var locationBits = [
+ options.styles.location(line.location),
+ options.styles.line(line.line),
+ ];
+ if ('column' in line) {
+ locationBits.push(options.styles.column(line.column));
+ }
+ var location = locationBits.join(':');
+
+ var text = pad + options.styles.method(method) + ' at ' + location;
+ if (!line.important) {
+ text = options.styles.unimportant(text);
+ }
+ return text;
+ });
+
+ return parts.join('\n');
+}
+
+function clean(lines, options) {
+ var result = [];
+ for (var i = 0, line; line = lines[i]; i++) {
+ if (options.filter(line)) continue;
+ line.location = cleanLocation(line.location, options);
+ line.important = isImportant(line, options);
+ result.push(line);
+ }
+
+ return result;
+}
+
+// Utility
+
+function passthrough(string) {
+ return string;
+}
+
+function mergeDefaults(options, defaults) {
+ var result = Object.create(defaults);
+ Object.keys(options).forEach(function(key) {
+ var value = options[key];
+ if (typeof value === 'object' && !Array.isArray(value)) {
+ value = mergeDefaults(value, defaults[key]);
+ }
+ result[key] = value;
+ });
+ return result;
+}
+
+function methodPadding(lines, options) {
+ var size = options.methodPlaceholder.length;
+ for (var i = 0, line; line = lines[i]; i++) {
+ size = Math.min(options.maxMethodPadding, Math.max(size, line.method.length));
+ }
+ return size;
+}
+
+function padding(length) {
+ var result = '';
+ for (var i = 0; i < length; i++) {
+ result = result + ' ';
+ }
+ return result;
+}
+
+function cleanLocation(location, options) {
+ if (options.locationStrip) {
+ for (var i = 0, matcher; matcher = options.locationStrip[i]; i++) {
+ location = location.replace(matcher, '');
+ }
+ }
+
+ return location;
+}
+
+function isImportant(line, options) {
+ if (options.unimportantLocation) {
+ for (var i = 0, matcher; matcher = options.unimportantLocation[i]; i++) {
+ if (line.location.match(matcher)) return false;
+ }
+ }
+
+ return true;
+}
+
+scope.clean = clean;
+scope.pretty = pretty;
+})(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/index.js
new file mode 100644
index 00000000000..4cfc16ac2db
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/index.js
@@ -0,0 +1,26 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+'use strict';
+
+var formatting = require('./formatting');
+var normalization = require('./normalization');
+var parsing = require('./parsing');
+
+module.exports = {
+ // Shorthands for your convenience.
+ normalize: normalization.normalize,
+ parse: parsing.parse,
+ pretty: formatting.pretty,
+ // Or the full modules.
+ formatting: formatting,
+ normalization: normalization,
+ parsing: parsing,
+};
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/normalization.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/normalization.js
new file mode 100644
index 00000000000..ac3bb92ec9f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/normalization.js
@@ -0,0 +1,57 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+(function(scope) {
+'use strict';
+
+var parse = scope.parse || require('./parsing').parse;
+var pretty = scope.pretty || require('./formatting').pretty;
+
+function normalize(error, prettyOptions) {
+ if (error.parsedStack) return error;
+ var message = error.message || error.description || error || '<unknown error>';
+ var parsedStack = [];
+ try {
+ parsedStack = parse(error.stack || error.toString());
+ } catch (error) {
+ // Ah well.
+ }
+
+ if (parsedStack.length === 0 && error.fileName) {
+ parsedStack.push({
+ method: '',
+ location: error.fileName,
+ line: error.lineNumber,
+ column: error.columnNumber,
+ });
+ }
+
+ if (!prettyOptions || !prettyOptions.showColumns) {
+ for (var i = 0, line; line = parsedStack[i]; i++) {
+ delete line.column;
+ }
+ }
+
+ var prettyStack = message;
+ if (parsedStack.length > 0) {
+ prettyStack = prettyStack + '\n' + pretty(parsedStack, prettyOptions);
+ }
+
+ var cleanErr = Object.create(Error.prototype);
+ cleanErr.message = message;
+ cleanErr.stack = prettyStack;
+ cleanErr.parsedStack = parsedStack;
+
+ return cleanErr;
+}
+
+scope.normalize = normalize;
+})(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/parsing.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/parsing.js
new file mode 100644
index 00000000000..bb2613b6ff3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/stacky/lib/parsing.js
@@ -0,0 +1,95 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ *
+ * This code may only be used under the BSD style license found at polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also subject to
+ * an additional IP rights grant found at polymer.github.io/PATENTS.txt
+ */
+(function(scope) {
+'use strict';
+
+function parse(stack) {
+ var rawLines = stack.split('\n');
+
+ var stackyLines = compact(rawLines.map(parseStackyLine));
+ if (stackyLines.length === rawLines.length) return stackyLines;
+
+ var v8Lines = compact(rawLines.map(parseV8Line));
+ if (v8Lines.length > 0) return v8Lines;
+
+ var geckoLines = compact(rawLines.map(parseGeckoLine));
+ if (geckoLines.length > 0) return geckoLines;
+
+ throw new Error('Unknown stack format: ' + stack);
+}
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack
+var GECKO_LINE = /^(?:([^@]*)@)?(.*?):(\d+)(?::(\d+))?$/;
+
+function parseGeckoLine(line) {
+ var match = line.match(GECKO_LINE);
+ if (!match) return null;
+ return {
+ method: match[1] || '',
+ location: match[2] || '',
+ line: parseInt(match[3]) || 0,
+ column: parseInt(match[4]) || 0,
+ };
+}
+
+// https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
+var V8_OUTER1 = /^\s*(eval )?at (.*) \((.*)\)$/;
+var V8_OUTER2 = /^\s*at()() (\S+)$/;
+var V8_INNER = /^\(?([^\(]+):(\d+):(\d+)\)?$/;
+
+function parseV8Line(line) {
+ var outer = line.match(V8_OUTER1) || line.match(V8_OUTER2);
+ if (!outer) return null;
+ var inner = outer[3].match(V8_INNER);
+ if (!inner) return null;
+
+ var method = outer[2] || '';
+ if (outer[1]) method = 'eval at ' + method;
+ return {
+ method: method,
+ location: inner[1] || '',
+ line: parseInt(inner[2]) || 0,
+ column: parseInt(inner[3]) || 0,
+ };
+}
+
+// Stacky.formatting.pretty
+
+var STACKY_LINE = /^\s*(.+) at (.+):(\d+):(\d+)$/;
+
+function parseStackyLine(line) {
+ var match = line.match(STACKY_LINE);
+ if (!match) return null;
+ return {
+ method: match[1] || '',
+ location: match[2] || '',
+ line: parseInt(match[3]) || 0,
+ column: parseInt(match[4]) || 0,
+ };
+}
+
+// Helpers
+
+function compact(array) {
+ var result = [];
+ array.forEach(function(value) {
+ if (value) {
+ result.push(value);
+ }
+ });
+ return result;
+}
+
+scope.parse = parse;
+scope.parseGeckoLine = parseGeckoLine;
+scope.parseV8Line = parseV8Line;
+scope.parseStackyLine = parseStackyLine;
+})(typeof module !== 'undefined' ? module.exports : (this.Stacky = this.Stacky || {}));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.bower.json
new file mode 100644
index 00000000000..05ed1ac33e3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.bower.json
@@ -0,0 +1,35 @@
+{
+ "name": "test-fixture",
+ "version": "3.0.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "A simple element to fixture DOM for tests",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "testing"
+ ],
+ "devDependencies": {
+ "web-component-tester": "^6.0.0-prerelease.5",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0-rc.1"
+ },
+ "variants": {
+ "1.x": {
+ "devDependencies": {
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ }
+ }
+ },
+ "main": "test-fixture.html",
+ "ignore": [],
+ "homepage": "https://github.com/PolymerElements/test-fixture",
+ "_release": "3.0.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v3.0.0",
+ "commit": "05caebd9ecbb464024455923bd351d2ba640932e"
+ },
+ "_source": "https://github.com/PolymerElements/test-fixture.git",
+ "_target": "^3.0.0",
+ "_originalSource": "test-fixture"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.github/ISSUE_TEMPLATE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000000..79e7094467b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,33 @@
+<!-- Instructions: https://github.com/PolymerElements/test-fixture/CONTRIBUTING.md#filing-issues -->
+### Description
+<!-- Example: The `paper-foo` element causes the page to turn pink when clicked. -->
+
+### Expected outcome
+
+<!-- Example: The page stays the same color. -->
+
+### Actual outcome
+
+<!-- Example: The page turns pink. -->
+
+### Live Demo
+<!-- Example: https://jsbin.com/cagaye/edit?html,output -->
+
+### Steps to reproduce
+
+<!-- Example
+1. Put a `paper-foo` element in the page.
+2. Open the page in a web browser.
+3. Click the `paper-foo` element.
+-->
+
+### Browsers Affected
+<!-- Check all that apply -->
+- [ ] Chrome
+- [ ] Firefox
+- [ ] Safari 9
+- [ ] Safari 8
+- [ ] Safari 7
+- [ ] Edge
+- [ ] IE 11
+- [ ] IE 10
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.travis.yml
new file mode 100644
index 00000000000..15e89b65165
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/.travis.yml
@@ -0,0 +1,21 @@
+language: node_js
+sudo: required
+dist: trusty
+before_script:
+ - npm install -g bower polymer-cli@next
+ - polymer install --variants
+node_js: 6
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+script:
+ - xvfb-run polymer test
+ - if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then polymer test -s 'default'; fi
+env:
+ global:
+ - secure: ahgtHFWqjsRiKiGtnkthNYWM4tz+IcQoA8/kFk+aYXGbljeGHdtdDkaUUsedlTyMdfupCG+Wn0PssEWb6qGsUo3BP9LyfDHL/UEO5//llOWaNTSWr5ztDPgDvOawk6g1y8bmA/2R1Gifhhe1zcLySprzCNMVgq+NFRkKD3maiv8=
+ - secure: i2DBL7MR4aHWO8fRi5m0d8kfujeO8slLe0RIV98snzHnO7wm7q9Wtxmf6rFYKawib1KPe+c4+/sCyECVLHw4r0BBZrN602Qc/8O5WxEeCAjjjMrytGYEKFGhsJRAzzw/M8ZfM2FfHuGdhzkJSqLUqgmf2Nzsmehgw5aUEBRimBo=
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/CONTRIBUTING.md
new file mode 100644
index 00000000000..093090d4354
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/CONTRIBUTING.md
@@ -0,0 +1,77 @@
+<!--
+This file is autogenerated based on
+https://github.com/PolymerElements/ContributionGuide/blob/master/CONTRIBUTING.md
+
+If you edit that file, it will get updated everywhere else.
+If you edit this file, your changes will get overridden :)
+
+You can however override the jsbin link with one that's customized to this
+specific element:
+
+jsbin=https://jsbin.com/cagaye/edit?html,output
+-->
+
+# Polymer Elements
+## Guide for Contributors
+
+Polymer Elements are built in the open, and the Polymer authors eagerly encourage any and all forms of community contribution. When contributing, please follow these guidelines:
+
+### Filing Issues
+
+**If you are filing an issue to request a feature**, please provide a clear description of the feature. It can be helpful to describe answers to the following questions:
+
+ 1. **Who will use the feature?** _“As someone filling out a form…”_
+ 2. **When will they use the feature?** _“When I enter an invalid value…”_
+ 3. **What is the user’s goal?** _“I want to be visually notified that the value needs to be corrected…”_
+
+**If you are filing an issue to report a bug**, please provide:
+
+ 1. **A clear description of the bug and related expectations.** Consider using the following example template for reporting a bug:
+
+ ```markdown
+ The `paper-foo` element causes the page to turn pink when clicked.
+
+ ## Expected outcome
+
+ The page stays the same color.
+
+ ## Actual outcome
+
+ The page turns pink.
+
+ ## Steps to reproduce
+
+ 1. Put a `paper-foo` element in the page.
+ 2. Open the page in a web browser.
+ 3. Click the `paper-foo` element.
+ ```
+
+ 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output).
+
+ 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers.
+
+### Submitting Pull Requests
+
+**Before creating a pull request**, please ensure that an issue exists for the corresponding change in the pull request that you intend to make. **If an issue does not exist, please create one per the guidelines above**. The goal is to discuss the design and necessity of the proposed change with Polymer authors and community before diving into a pull request.
+
+When submitting pull requests, please provide:
+
+ 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax:
+
+ ```markdown
+ (For a single issue)
+ Fixes #20
+
+ (For multiple issues)
+ Fixes #32, fixes #40
+ ```
+
+ 2. **A succinct description of the design** used to fix any related issues. For example:
+
+ ```markdown
+ This fixes #20 by removing styles that leaked which would cause the page to turn pink whenever `paper-foo` is clicked.
+ ```
+
+ 3. **At least one test for each bug fixed or feature added** as part of the pull request. Pull requests that fix bugs or add features without accompanying tests will not be considered.
+
+If a proposed change contains multiple commits, please [squash commits](https://www.google.com/url?q=http://blog.steveklabnik.com/posts/2012-11-08-how-to-squash-commits-in-a-github-pull-request) to as few as is necessary to succinctly express the change. A Polymer author can help you squash commits, so don’t be afraid to ask us if you need help with that!
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/README.md
new file mode 100644
index 00000000000..594b9c3d227
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/README.md
@@ -0,0 +1,148 @@
+
+<!---
+
+This README is automatically generated from the comments in these files:
+test-fixture.html
+
+Edit those files, and our readme bot will duplicate them over here!
+Edit this file, and the bot will squash your changes :)
+
+The bot does some handling of markdown. Please file a bug if it does the wrong
+thing! https://github.com/PolymerLabs/tedium/issues
+
+-->
+
+[![Build status](https://travis-ci.org/PolymerElements/test-fixture.svg?branch=master)](https://travis-ci.org/PolymerElements/test-fixture)
+
+
+##&lt;test-fixture&gt;
+
+The `<test-fixture>` element can simplify the exercise of consistently
+resetting a test suite's DOM. To use it, wrap the test suite's DOM as a template:
+
+```html
+<test-fixture id="SomeElementFixture">
+ <template>
+ <some-element id="SomeElementForTesting"></some-element>
+ </template>
+</test-fixture>
+```
+
+Now, the `<test-fixture>` element can be used to generate a copy of its
+template:
+
+```html
+<script>
+describe('<some-element>', function () {
+ var someElement;
+
+ beforeEach(function () {
+ document.getElementById('SomeElementFixture').create();
+ someElement = document.getElementById('SomeElementForTesting');
+ });
+});
+</script>
+```
+
+Fixtured elements can be cleaned up by calling `restore` on the `<test-fixture>`:
+
+```javascript
+ afterEach(function () {
+ document.getElementById('SomeElementFixture').restore();
+ // <some-element id='SomeElementForTesting'> has been removed
+ });
+```
+
+`<test-fixture>` will create fixtures from all of its immediate `<template>`
+children. The DOM structure of fixture templates can be as simple or as complex
+as the situation calls for.
+
+## Even simpler usage in Mocha
+
+In Mocha, usage can be simplified even further. Include `test-fixture-mocha.js`
+after Mocha in the `<head>` of your document and then fixture elements like so:
+
+```html
+<script>
+describe('<some-element>', function () {
+ var someElement;
+
+ beforeEach(function () {
+ someElement = fixture('SomeElementFixture');
+ });
+});
+</script>
+```
+
+Fixtured elements will be automatically restored in the `afterEach` phase of the
+current Mocha `Suite`.
+
+## Data-bound templates
+
+Data-binding systems are also supported, as long as your (custom) template
+elements define a `stamp(model)` method that returns a document fragment. This
+allows you to stamp out templates w/ custom models for your fixtures.
+
+For example, using Polymer 0.8's `dom-template`:
+
+```html
+<test-fixture id="bound">
+ <template is="dom-template">
+ <span>{{greeting}}</span>
+ </template>
+</test-fixture>
+```
+
+You can pass an optional context argument to `create()` or `fixture()` to pass
+the model:
+
+```js
+var bound = fixture('bound', {greeting: 'ohai thurr'});
+```
+
+## The problem being addressed
+
+Consider the following `web-component-tester` test suite:
+
+```html
+<!doctype html>
+<html>
+<head>
+ <title>some-element test suite</title>
+
+ <link rel="import" href="../some-element.html">
+</head>
+<body>
+ <some-element id="SomeElementForTesting"></some-element>
+ <script>
+describe('<some-element>', function () {
+ var someElement;
+
+ beforeEach(function () {
+ someElement = document.getElementById('SomeElementForTesting');
+ });
+
+ it('can receive property `foo`', function () {
+ someElement.foo = 'bar';
+ expect(someElement.foo).to.be.equal('bar');
+ });
+
+ it('has a default `foo` value of `undefined`', function () {
+ expect(someElement.foo).to.be.equal(undefined);
+ });
+});
+ </script>
+</body>
+</html>
+```
+
+In this contrived example, the suite will pass or fail depending on which order
+the tests are run in. It is non-deterministic because `someElement` has
+internal state that is not properly reset at the end of each test.
+
+It would be trivial in the above example to simply reset `someElement.foo` to
+the expected default value of `undefined` in an `afterEach` hook. However, for
+non-contrived test suites that target complex elements, this can result in a
+large quantity of ever-growing set-up and tear-down boilerplate.
+
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/bower.json
new file mode 100644
index 00000000000..96d142845f7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/bower.json
@@ -0,0 +1,25 @@
+{
+ "name": "test-fixture",
+ "version": "3.0.0",
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "description": "A simple element to fixture DOM for tests",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "testing"
+ ],
+ "devDependencies": {
+ "web-component-tester": "^6.0.0-prerelease.5",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^1.0.0-rc.1"
+ },
+ "variants": {
+ "1.x": {
+ "devDependencies": {
+ "web-component-tester": "^4.0.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ }
+ }
+ },
+ "main": "test-fixture.html",
+ "ignore": []
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/package.json
new file mode 100644
index 00000000000..fe33db4847b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "test-fixture",
+ "version": "3.0.0-rc.1",
+ "description": "A simple element to fixture DOM for tests",
+ "main": "test-fixture.html",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/polymerelements/test-fixture.git"
+ },
+ "keywords": [
+ "web-components",
+ "polymer",
+ "testing"
+ ],
+ "author": "The Polymer Authors",
+ "license": "BSD-3-Clause",
+ "bugs": {
+ "url": "https://github.com/polymerelements/test-fixture/issues"
+ },
+ "homepage": "https://github.com/polymerelements/test-fixture#readme",
+ "devDependencies": {
+ "web-component-tester": "^6.0.0-prerelease.5"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture-mocha.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture-mocha.js
new file mode 100644
index 00000000000..bef3b76f145
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture-mocha.js
@@ -0,0 +1,40 @@
+/**
+ * @license
+ * Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+(function (Mocha) {
+ function extendInterfaceWithFixture (interfaceName) {
+ var originalInterface = Mocha.interfaces[interfaceName];
+ var teardownProperty = interfaceName === 'bdd' ? 'afterEach' : 'teardown';
+
+ Mocha.interfaces[interfaceName] = function (suite) {
+ originalInterface.apply(this, arguments);
+
+ suite.on('pre-require', function (context, file, mocha) {
+ if (!(context[teardownProperty])) {
+ return;
+ }
+
+ context.fixture = function (fixtureId, model) {
+ context[teardownProperty](function () {
+ document
+ .getElementById(fixtureId)
+ .restore();
+ });
+
+ return document
+ .getElementById(fixtureId)
+ .create(model);
+ };
+ });
+ };
+ }
+
+ Object.keys(Mocha.interfaces).forEach(extendInterfaceWithFixture);
+})(this.Mocha);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture.html
new file mode 100644
index 00000000000..2194e147904
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/test-fixture.html
@@ -0,0 +1,351 @@
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+
+<!--
+
+The `<test-fixture>` element can simplify the exercise of consistently
+resetting a test suite's DOM. To use it, wrap the test suite's DOM as a template:
+
+```html
+<test-fixture id="SomeElementFixture">
+ <template>
+ <some-element id="SomeElementForTesting"></some-element>
+ </template>
+</test-fixture>
+```
+
+Now, the `<test-fixture>` element can be used to generate a copy of its
+template:
+
+```html
+<script>
+describe('<some-element>', function () {
+ var someElement;
+
+ beforeEach(function () {
+ document.getElementById('SomeElementFixture').create();
+ someElement = document.getElementById('SomeElementForTesting');
+ });
+});
+</script>
+```
+
+Fixtured elements can be cleaned up by calling `restore` on the `<test-fixture>`:
+
+```javascript
+ afterEach(function () {
+ document.getElementById('SomeElementFixture').restore();
+ // <some-element id='SomeElementForTesting'> has been removed
+ });
+```
+
+`<test-fixture>` will create fixtures from all of its immediate `<template>`
+children. The DOM structure of fixture templates can be as simple or as complex
+as the situation calls for.
+
+## Even simpler usage in Mocha
+
+In Mocha, usage can be simplified even further. Include `test-fixture-mocha.js`
+after Mocha in the `<head>` of your document and then fixture elements like so:
+
+```html
+<script>
+describe('<some-element>', function () {
+ var someElement;
+
+ beforeEach(function () {
+ someElement = fixture('SomeElementFixture');
+ });
+});
+</script>
+```
+
+Fixtured elements will be automatically restored in the `afterEach` phase of the
+current Mocha `Suite`.
+
+## Data-bound templates
+
+Data-binding systems are also supported, as long as your (custom) template
+elements define a `stamp(model)` method that returns a document fragment. This
+allows you to stamp out templates w/ custom models for your fixtures.
+
+For example, using Polymer 0.8's `dom-template`:
+
+```html
+<test-fixture id="bound">
+ <template is="dom-template">
+ <span>{{greeting}}</span>
+ </template>
+</test-fixture>
+```
+
+You can pass an optional context argument to `create()` or `fixture()` to pass
+the model:
+
+```js
+var bound = fixture('bound', {greeting: 'ohai thurr'});
+```
+
+## The problem being addressed
+
+Consider the following `web-component-tester` test suite:
+
+```html
+<!doctype html>
+<html>
+<head>
+ <title>some-element test suite</title>
+
+ <link rel="import" href="../some-element.html">
+</head>
+<body>
+ <some-element id="SomeElementForTesting"></some-element>
+ <script>
+describe('<some-element>', function () {
+ var someElement;
+
+ beforeEach(function () {
+ someElement = document.getElementById('SomeElementForTesting');
+ });
+
+ it('can receive property `foo`', function () {
+ someElement.foo = 'bar';
+ expect(someElement.foo).to.be.equal('bar');
+ });
+
+ it('has a default `foo` value of `undefined`', function () {
+ expect(someElement.foo).to.be.equal(undefined);
+ });
+});
+ </script>
+</body>
+</html>
+```
+
+In this contrived example, the suite will pass or fail depending on which order
+the tests are run in. It is non-deterministic because `someElement` has
+internal state that is not properly reset at the end of each test.
+
+It would be trivial in the above example to simply reset `someElement.foo` to
+the expected default value of `undefined` in an `afterEach` hook. However, for
+non-contrived test suites that target complex elements, this can result in a
+large quantity of ever-growing set-up and tear-down boilerplate.
+
+@pseudoElement test-fixture
+ -->
+
+<script>
+
+(function () {
+ var TestFixturePrototype = Object.create(HTMLElement.prototype);
+ var TestFixtureExtension = {
+ _fixtureTemplates: null,
+
+ _elementsFixtured: false,
+
+ get elementsFixtured () {
+ return this._elementsFixtured;
+ },
+
+ get fixtureTemplates () {
+ if (!this._fixtureTemplates) {
+ // Copy fixtures to a true Array for Safari 7. This prevents their
+ // `content` property from being improperly garbage collected.
+ this._fixtureTemplates = Array.prototype.slice.apply(this.querySelectorAll('template'));
+ }
+
+ return this._fixtureTemplates;
+ },
+
+ create: function (model) {
+ var generatedDoms = [];
+
+ this.restore();
+
+ this.removeElements(this.fixtureTemplates);
+
+ this.forElements(this.fixtureTemplates, function (fixtureTemplate) {
+ generatedDoms.push(
+ this.createFrom(fixtureTemplate, model)
+ );
+ }, this);
+
+ this.forcePolyfillAttachedStateSynchrony();
+
+ if (generatedDoms.length < 2) {
+ return generatedDoms[0];
+ }
+
+ return generatedDoms;
+ },
+
+ createFrom: function (fixtureTemplate, model) {
+ var fixturedFragment;
+ var fixturedElements;
+ var fixturedElement;
+
+ if (!(fixtureTemplate &&
+ fixtureTemplate.tagName === 'TEMPLATE')) {
+ return;
+ }
+
+ try {
+ fixturedFragment = this.stamp(fixtureTemplate, model);
+ } catch (error) {
+ console.error('Error stamping', fixtureTemplate, error);
+ throw error;
+ }
+
+ fixturedElements = this.collectElementChildren(fixturedFragment);
+
+ this.appendChild(fixturedFragment);
+ this._elementsFixtured = true;
+
+ if (fixturedElements.length < 2) {
+ return fixturedElements[0];
+ }
+
+ return fixturedElements;
+ },
+
+ restore: function () {
+ if (!this._elementsFixtured) {
+ return;
+ }
+
+ this.removeElements(this.children);
+
+ this.forElements(this.fixtureTemplates, function (fixtureTemplate) {
+ this.appendChild(fixtureTemplate);
+ }, this);
+
+ this.generatedDomStack = [];
+
+ this._elementsFixtured = false;
+
+ this.forcePolyfillAttachedStateSynchrony();
+ },
+
+ forcePolyfillAttachedStateSynchrony: function () {
+ // Force synchrony in attachedCallback and detachedCallback where
+ // implemented, in the event that we are dealing with one of these async
+ // polyfills:
+ // 1. Web Components CustomElements polyfill (v1 or v0).
+ if (window.customElements && window.customElements.flush) {
+ window.customElements.flush();
+ } else if (window.CustomElements && window.CustomElements.takeRecords) {
+ window.CustomElements.takeRecords();
+ }
+ // 2. ShadyDOM polyfill.
+ if (window.ShadyDOM && window.ShadyDOM.flush) {
+ window.ShadyDOM.flush();
+ }
+ },
+
+ collectElementChildren: function (parent) {
+ // Note: Safari 7.1 does not support `firstElementChild` or
+ // `nextElementSibling`, so we do things the old-fashioned way:
+ var elements = [];
+ var child = parent.firstChild;
+
+ while (child) {
+ if (child.nodeType === Node.ELEMENT_NODE) {
+ elements.push(child);
+ }
+
+ child = child.nextSibling;
+ }
+
+ return elements;
+ },
+
+ removeElements: function (elements) {
+ this.forElements(elements, function (element) {
+ this.removeChild(element);
+ }, this);
+ },
+
+ forElements: function (elements, iterator, context) {
+ Array.prototype.slice.call(elements)
+ .forEach(iterator, context);
+ },
+
+ stamp: function (fixtureTemplate, model) {
+ var stamped;
+ // Check if we are dealing with a "stampable" `<template>`. This is a
+ // vaguely defined special case of a `<template>` that is a custom
+ // element with a public `stamp` method that implements some manner of
+ // data binding.
+ if (fixtureTemplate.stamp) {
+ stamped = fixtureTemplate.stamp(model);
+ // We leak Polymer specifics a little; if there is an element `root`, we
+ // want that to be returned.
+ stamped = stamped.root || stamped;
+
+ // Otherwise, we fall back to standard HTML templates, which do not have
+ // any sort of binding support.
+ } else {
+ if (model) {
+ console.warn(this, 'was given a model to stamp, but the template is not of a bindable type');
+ }
+
+ stamped = document.importNode(fixtureTemplate.content, true);
+
+ // Immediately upgrade the subtree if we are dealing with async
+ // Web Components polyfill.
+ // https://github.com/Polymer/polymer/blob/0.8-preview/src/features/mini/template.html#L52
+ if (window.CustomElements && window.CustomElements.upgradeSubtree) {
+ window.CustomElements.upgradeSubtree(stamped);
+ }
+ }
+
+ return stamped;
+ }
+ };
+
+ Object.getOwnPropertyNames(TestFixtureExtension)
+ .forEach(function (property) {
+ Object.defineProperty(
+ TestFixturePrototype,
+ property,
+ Object.getOwnPropertyDescriptor(TestFixtureExtension, property)
+ );
+ });
+
+ try {
+ if (window.customElements) {
+ function TestFixture() {
+ return ((window.Reflect && Reflect.construct) ?
+ Reflect.construct(HTMLElement, [], TestFixture)
+ : HTMLElement.call(this)) || this;
+ }
+ TestFixture.prototype = TestFixturePrototype;
+ // `constructor` is not writable on Safari 9, but is configurable.
+ Object.defineProperty(TestFixture.prototype, 'constructor', {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value: TestFixture,
+ });
+ window.customElements.define('test-fixture', TestFixture);
+ } else {
+ document.registerElement('test-fixture', {
+ prototype: TestFixturePrototype
+ });
+ }
+ } catch (e) {
+ if (window.WCT) {
+ console.warn('if you are using WCT, you do not need to manually import test-fixture.html');
+ } else {
+ console.warn('test-fixture has already been registered!');
+ }
+ }
+})();
+</script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/wct.conf.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/wct.conf.json
new file mode 100644
index 00000000000..d36d92bb641
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/test-fixture/wct.conf.json
@@ -0,0 +1,5 @@
+{
+ "clientOptions": {
+ "environmentImports": []
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/.bower.json
new file mode 100644
index 00000000000..04e60962400
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/.bower.json
@@ -0,0 +1,40 @@
+{
+ "name": "web-animations-js",
+ "description": "JavaScript implementation of the Web Animations API",
+ "homepage": "https://github.com/web-animations/web-animations-js",
+ "main": "web-animations.min.js",
+ "moduleType": [
+ "globals"
+ ],
+ "keywords": [
+ "animations",
+ "polyfill"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "templates",
+ "test",
+ "Gruntfile.js",
+ "package.json",
+ "target-config.js",
+ "target-loader.js",
+ "web-animations.dev.html",
+ "web-animations.dev.js",
+ "web-animations-next.dev.html",
+ "web-animations-next.dev.js",
+ "web-animations-next-lite.dev.html",
+ "web-animations-next-lite.dev.js"
+ ],
+ "version": "2.3.1",
+ "_release": "2.3.1",
+ "_resolution": {
+ "type": "version",
+ "tag": "2.3.1",
+ "commit": "a2dddad1c210c8abe5bc1c5a5e126e9946d44252"
+ },
+ "_source": "https://github.com/web-animations/web-animations-js.git",
+ "_target": "^2.0.0",
+ "_originalSource": "web-animations-js"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/CONTRIBUTING.md
new file mode 100644
index 00000000000..15142a7e5e6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/CONTRIBUTING.md
@@ -0,0 +1,123 @@
+## Developer instructions
+
+### Setup
+
+1. Fork web-animations/web-animations-js.
+1. `git clone git@github.com:$GITHUB_USER/web-animations-js.git`
+1. `git submodule update --init --recursive` (Necessary for running tests.)
+1. Install [node](https://nodejs.org/en/) and make sure `npm` is in your $PATH
+1. Run `npm install` in the respository to pull in development dependencies.
+1. Run `npm install -g grunt-cli` to get the build tools for the command line.
+
+### Contributing
+
+Note that development should occur against the `dev` branch, not `master`. This
+is the default target for pull requests.
+
+1. In your fork of web-animations-js, `git checkout dev` or create a new branch whose parent is dev.
+1. Run `grunt` to build the polyfill.
+1. Run `grunt test` to run polyfill and web-platform-tests tests.
+1. Commit changes to your fork.
+1. Create a pull request from your fork of web-animations-js to
+ [web-animations/web-animations-js/dev](https://github.com/web-animations/web-animations-js/tree/dev).
+1. Ensure that you've signed the [Google Contributor License Agreement](https://cla.developers.google.com/clas).
+
+
+## Debugging tests
+
+You can run the tests in an interactive mode with `grunt debug`. This starts the
+Karma server once for each polyfill target for each test framework.
+Navigate to `http://localhost:9876/debug.html` to open the test runner in your
+browser of choice, all test results appear in the Javascript console.
+Test failures can be accessed via `window.failures` and `window.formattedFailures`
+once the tests have completed.
+
+The polyfill target and tests can be specified as arguments to the `debug` task.
+Example: `grunt debug:web-animations-next:test/web-platform-tests/web-animations/animation/pause.html`
+Multiple test files may be listed with comma separation. Specifying files will output their URL in the command line.
+Example: `http://localhost:9876/base/test/web-platform-tests/web-animations/animation/pause.html`
+
+
+## Design notes
+
+[Design diagrams](https://drive.google.com/folderview?id=0B9rpPoIDv3vTNlZxOVp6a2tNa1E&usp=sharing)
+
+
+## Publishing a release
+
+1. Determine the version number for the release
+
+ * Increment the first number and reset others to 0 when there are large breaking changes
+ * Increment the second number and reset the third to 0 when there are significant new, but backwards compatible features
+ * Otherwise, increment the third number
+
+1. Add versioned release notes to `History.md`, for example:
+
+ ### 3.13.37 — *November 1, 2001*
+
+ * Fixed a bug where nothing worked
+
+ Use the following to generate a summary of commits, but edit the list to contain only
+ relevant information.
+
+ git log --first-parent `git describe --tags --abbrev=0 master`..dev --pretty=format:" * %s"
+
+1. Specify the new version inside `package.json` (for NPM), for example:
+
+ ```js
+ "version": "3.13.37",
+ ```
+
+1. Build the polyfill with `npm install && grunt` then update `docs/experimental.md`'s Build Target Comparison with the current gzipped sizes.
+
+1. Commit the above changes to web-animations-js/dev and merge to
+ web-animations-js/master.
+
+ ```sh
+ git checkout master
+ git merge dev --no-edit --quiet
+ ```
+
+1. Build and commit minified JavaScript files.
+
+ ```sh
+ npm install
+ grunt
+ # Optional "grunt test" to make sure everything still passes.
+ git add -f *.min.js{,.map}
+ git rm .gitignore
+ git commit -m 'Add build artifacts from '`cat .git/refs/heads/dev`
+ git push HEAD:refs/heads/master
+ ```
+
+1. Draft a [new release](https://github.com/web-animations/web-animations-js/releases) at the
+ commit pushed to web-animations-js in step #4. Copy the release notes from `History.md`
+ added in step #2.
+
+1. Once you've pushed to web-animations-js, run `npm publish` from that checked-out folder
+
+ To do this, you'll need to be a collaborator [on the NPM project](https://www.npmjs.com/package/web-animations-js), or have a collaborator help you.
+
+1. If there are any breaking changes to the API in this release you must notify web-animations-changes@googlegroups.com.
+
+ Only owners of the group may post to it so you may need to request ownership or ask someone to post it for you.
+
+## Testing architecture
+
+This is an overview of what happens when `grunt test` is run.
+
+1. Polyfill tests written in mocha and chai are run.
+ 1. grunt creates a karma config with mocha and chai adapters.
+ 1. grunt adds the test/js files as includes to the karma config.
+ 1. grunt starts the karma server with the config and waits for the result.
+ 1. The mocha adaptor runs the included tests and reports the results to karma.
+ 1. karma outputs results to the console and returns the final pass/fail result to grunt.
+1. web-platform-tests/web-animations tests written in testtharness.js are run.
+ 1. grunt creates a karma config with karma-testharness-adaptor.js included.
+ 1. grunt adds the web-platform-tests/web-animations files to the custom testharnessTests config in the karma config.
+ 1. grunt adds failure expectations to the custom testharnessTests config in the karma config.
+ 1. grunt starts the karma server with the config and waits for the result.
+ 1. The testharness.js adaptor runs the included tests (ignoring expected failures) and reports the results to karma.
+ 1. karma outputs results to the console and returns the final pass/fail result to grunt.
+1. grunt exits successfully if both test runs passed.
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/COPYING b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/COPYING
new file mode 100644
index 00000000000..d6456956733
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/COPYING
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/History.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/History.md
new file mode 100644
index 00000000000..6deef415a4b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/History.md
@@ -0,0 +1,265 @@
+### 2.3.1 - *July 20 2017*
+
+ * Fix [https://github.com/web-animations/web-animations-js/issues/157](missing web-animations.min.js issue)
+
+### 2.3.0 - *July 20 2017*
+
+ * [Support IE/Edge SVG transforms.](https://github.com/web-animations/web-animations-js/pull/148)
+
+ * [Parse and evaluate calc expressions without eval.](https://github.com/web-animations/web-animations-js/pull/151)
+
+### 2.2.5 - *April 17 2017*
+
+ * Removed erroneously added *.gz files from release.
+
+### 2.2.4 - *April 14 2017*
+
+ * [Reverted adding 'use strict' to source files.](https://github.com/web-animations/web-animations-next/pull/124)
+
+### 2.2.3 - *April 13 2017*
+
+ * [Added HTML import targets.](https://github.com/web-animations/web-animations-js/pull/94)
+
+ * Added support for animating SVG related properties:
+ * [fill](https://github.com/web-animations/web-animations-next/pull/484)
+ * [floodColor](https://github.com/web-animations/web-animations-next/pull/484)
+ * [lightingColor](https://github.com/web-animations/web-animations-next/pull/484)
+ * [stopColor](https://github.com/web-animations/web-animations-next/pull/484)
+ * [strokeDashoffset](https://github.com/web-animations/web-animations-js/pull/96)
+ * [strokeDasharray](https://github.com/web-animations/web-animations-js/pull/120)
+
+ * [Fixed crash when animating non-invertable matrices.](https://github.com/web-animations/web-animations-js/pull/121)
+
+ * [Fixed source maps for Bower installs.](https://github.com/web-animations/web-animations-js/pull/93)
+
+ * [Updated README.md documentation structure.](https://github.com/web-animations/web-animations-next/pull/489)
+
+ * [Added 'use strict' to source files.](https://github.com/web-animations/web-animations-next/pull/488)
+
+### 2.2.2 - *August 3 2016*
+
+ * [Fixed handling of keyframes with overlapping offsets.](https://github.com/web-animations/web-animations-next/pull/470)
+
+ * [Throw TypeError on invalid keyframe input.](https://github.com/web-animations/web-animations-next/pull/471)
+
+ * [Fixed display and other animation properties being animated.](https://github.com/web-animations/web-animations-next/pull/474)
+
+ * [Throw InvalidStateError when calling play() on reversed infinite animation.](https://github.com/web-animations/web-animations-next/pull/475)
+
+ * [Fixed infinite loop in cubic-bezier timing function.](https://github.com/web-animations/web-animations-next/pull/476)
+
+ * [Fixed idle animations not becoming paused when seeked.](https://github.com/web-animations/web-animations-next/pull/479)
+
+ * [Fixed pause() not rewinding idl animations.](https://github.com/web-animations/web-animations-next/pull/480)
+
+ * [Extended cubic-bezier timing function domain from [0, 1] to (-Infinity, Infinity).](https://github.com/web-animations/web-animations-next/pull/481)
+
+ * [Fixed timing model to handle corner cases involving Infinity and 0 correctly.](https://github.com/web-animations/web-animations-next/pull/482)
+
+ * [Fixed source files missing from npm package.](https://github.com/web-animations/web-animations-next/pull/483)
+
+ * [Improved performance of starting and updating individual animations.](https://github.com/web-animations/web-animations-next/pull/485)
+
+### 2.2.1 - *April 28 2016*
+ * [Deprecated invalid timing inputs](https://github.com/web-animations/web-animations-next/pull/437) as they will soon throw [TypeErrors](https://github.com/web-animations/web-animations-next/pull/426) in native browsers.
+
+ For example, this is deprecated and will eventually throw a TypeError:
+
+ element.animate([], {
+ duration: -1,
+ iterationStart: -1,
+ iterations: -1,
+ easing: 'garbage string',
+ });
+
+ * [Fixed polyfill crash in browsers based on Chromium 36 to 46.](https://github.com/web-animations/web-animations-next/pull/434)
+
+ * [Increased cubic-bezier accuracy.](https://github.com/web-animations/web-animations-next/pull/428)
+
+ * [Added support for grad and turn units for angles.](https://github.com/web-animations/web-animations-next/pull/427)
+
+### 2.2.0 - *April 6 2016*
+ * Deprecated the use of hyphens in property names.
+
+ For example, this is deprecated:
+
+ element.animate([{'font-size': '0px'}, {'font-size': '10px'}]);
+
+ and this should be used instead:
+
+ element.animate([{fontSize: '0px'}, {fontSize: '10px'}]);
+
+ * Added arbitrary easing capitalisation.
+
+ * Added "id" effect option. (http://w3c.github.io/web-animations/#dom-keyframeanimationoptions-id)
+
+ * Added "oncancel" event handler.
+
+ * Added value list keyframe syntax.
+
+ As as alternative to:
+
+ element.animate([{color: 'red'}, {color: 'green'}, {color: 'blue'}]);
+
+ you can now use:
+
+ element.animate({color: ['red', 'green', 'blue']});
+
+ * Fixed easing TypeError in FireFox Nightly when using groups.
+
+ * Fixed delayed animation updates on Safari and Firefox
+
+ * Fixed infinite recursion when setting onfinish to null.
+
+### 2.1.4 - *December 1 2015*
+ * Use `Date.now()` instead of `performace.now()` for mobile Safari.
+
+### 2.1.3 - *October 12 2015*
+ * Removed web-animations.min.js.gz
+
+### 2.1.2 - *July 8 2015*
+ * Fix a bug where onfinish was being called for GroupEffects before they were finished.
+
+### 2.1.1 - *July 1 2015*
+ * Add Animation.timeline getter
+ * Add AnimationEffect.parent getter
+ * Make AnimationEffectTiming (returned by AnimationEffect.timing) attributes mutable
+ * Expose the Animation constructor
+ * Change custom effects from AnimationEffects to onsample functions. Custom effects should now be created by setting the onsample attribute of a KeyframeEffect.
+
+ For example, this is deprecated:
+
+ var myEffect = new KeyframeEffect(
+ element,
+ function(timeFraction, target, effect) {
+ target.style.opacity = timeFraction;
+ },
+ 1000);
+ var myAnimation = document.timeline.play(myEffect);
+
+ and this should be used insead:
+
+ var myEffect = new KeyframeEffect(element, [], 1000);
+ effect.onsample = function(timeFraction, effect, animation) {
+ effect.target.style.opacity = timeFraction;
+ };
+ var myAnimation = document.timeline.play(myEffect);
+
+### 2.1.0 - *June 15 2015*
+ * Fix bug affecting GroupEffects with infinite iteration children
+ * Add GroupEffect.firstChild and GroupEffect.lastChild
+ * Add initial values for most CSS properties
+ * Allow `timeline.play()` to be called with no arguments
+ * Add AnimationEffect.clone
+ * Add GroupEffect.append and GroupEffect.prepend
+ * Add AnimationEffect.remove
+ * Add Animation.ready and Animation.finished promises
+
+### 2.0.0 - *April 5 2015*
+
+ * Improve behavior of group Animation playback rate.
+ * Rename Animation to KeyframeEffect.
+ * Rename AnimationSequence to SequenceEffect.
+ * Rename AnimationGroup to GroupEffect.
+ * Rename AnimationPlayer to Animation.
+ * Remove KeyframeEffect.effect and add KeyframeEffect.getFrames.
+ * Rename Animation.source to Animation.effect.
+ * Rename Timeline.getAnimationPlayers to Timeline.getAnimations.
+ * Rename Element.getAnimationPlayers to Element.getAnimations.
+
+### 1.0.7 - *March 10 2015*
+
+ * Improve performance of constructing groups and sequences.
+ * Remove support for animating zoom.
+ * Add bower file.
+
+### 1.0.6 - *February 5 2015*
+
+ * Implement playbackRate setter for group players.
+ * Fix pausing a group player before its first tick.
+ * Fix cancelling a group player before its first tick.
+ * Fix excess CPU use on idle pages where custom effects and groups were used.
+ * Suppress AnimationTiming.playbackRate deprecation warning for cases where AnimationTiming.playbackRate == 1.
+
+### 1.0.5 - *January 6 2015*
+
+ * Fix loading the polyfill in an SVG document
+ * Fix a problem where groups didn't take effect in their first frame
+ * Don't rely on performance.now
+
+### 1.0.4 - *December 8 2014*
+
+ * Fix a critical bug where deprecation logic wasn't being loaded
+ when `web-animations-next` and `web-animations-next-lite` were
+ executed on top of a native `element.animate`.
+
+### 1.0.3 - *December 4 2014*
+
+ * Fix a critical bug on iOS 7 and Safari <= 6. Due to limitations,
+ inline style patching is not supported on these platforms.
+
+### 1.0.2 - *November 28 2014*
+
+ * Deprecated `AnimationTiming.playbackRate`.
+
+ For example, this is no longer supported:
+
+ var player = element.animate(
+ keyframes,
+ {duration: 1000, playbackRate: 2});
+
+ Use `AnimationPlayer.playbackRate` instead:
+
+ var player = element.animate(
+ keyframes,
+ {duration: 1000});
+ player.playbackRate = 2;
+
+ If you have any feedback on this change, please start a discussion
+ on the public-fx mailing list:
+ http://lists.w3.org/Archives/Public/public-fx/
+
+ Or file an issue against the specification on GitHub:
+ https://github.com/w3c/web-animations/issues/new
+
+### 1.0.1 - *November 26 2014*
+
+ * Players should be constructed in idle state
+ * `play()` and `reverse()` should not force a start times
+ * Add `requestAnimationFrame` ids and `cancelAnimationFrame`
+
+### 1.0.0 — *November 21 2014*
+
+ The web-animations-js hackers are pleased to announce the release of
+ a new codebase for the Web Animations Polyfill:
+ https://github.com/web-animations/web-animations-js
+
+ The previous polyfill has been moved to:
+ https://github.com/web-animations/web-animations-js-legacy
+
+ The new codebase is focused on code-size -- our smallest target is
+ now only 33kb or 11kb after gzip.
+
+ We've implemented native fallback. If the target browser provides
+ Web Animations features natively, the Polyfill will use them.
+
+ We now provide three different build targets:
+
+ `web-animations.min.js` - Tracks the Web Animations features that
+ are supported natively in browsers. Today that means Element.animate
+ and Playback Control in Chrome. If you’re not sure what features you
+ will need, start with this.
+
+ `web-animations-next.min.js` - All of web-animations.min.js plus
+ features that are still undergoing discussion or have yet to be
+ implemented natively.
+
+ `web-animations-next-lite.min.js` - A cut down version of
+ web-animations-next, removes several lesser used property handlers
+ and some of the larger and less used features such as matrix
+ interpolation/decomposition.
+
+ Not all features of the previous polyfill have been ported to the
+ new codebase; most notably mutation of Animations and Groups and
+ Additive Animations are not yet supported. These features are still
+ important and will be implemented in the coming weeks.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/README.md
new file mode 100644
index 00000000000..e3410b6182d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/README.md
@@ -0,0 +1,80 @@
+
+What is Web Animations?
+-----------------------
+
+A new JavaScript API for driving animated content on the web. By unifying
+the animation features of SVG and CSS, Web Animations unlocks features
+previously only usable declaratively, and exposes powerful, high-performance
+animation capabilities to developers.
+
+What is in this repository?
+---------------------------
+
+A JavaScript implementation of the Web Animations API that provides Web
+Animation features in browsers that do not support it natively. The polyfill
+falls back to the native implementation when one is available.
+
+Quick start
+-----------
+
+Here's a simple example of an animation that fades and scales a `<div>`.
+[Try it as a live demo.](http://jsbin.com/yageyezabo/edit?html,js,output)
+
+```html
+<!-- Include the polyfill -->
+<script src="web-animations.min.js"></script>
+
+<!-- Set up a target to animate -->
+<div class="pulse" style="width: 150px;">Hello world!</div>
+
+<!-- Animate! -->
+<script>
+ var elem = document.querySelector('.pulse');
+ var animation = elem.animate({
+ opacity: [0.5, 1],
+ transform: ['scale(0.5)', 'scale(1)'],
+ }, {
+ direction: 'alternate',
+ duration: 500,
+ iterations: Infinity,
+ });
+</script>
+```
+
+Documentation
+-------------
+
+* [Codelab tutorial](https://github.com/web-animations/web-animations-codelabs)
+* [Examples of usage](/docs/examples.md)
+* [Live demos](https://web-animations.github.io/web-animations-demos)
+* [MDN reference](https://developer.mozilla.org/en-US/docs/Web/API/Element/animate)
+* [W3C specification](http://w3c.github.io/web-animations/)
+
+We love feedback!
+-----------------
+
+* For feedback on the API and the specification:
+ * File an issue on GitHub: <https://github.com/w3c/web-animations/issues/new>
+ * Alternatively, send an email to <public-fx@w3.org> with subject line
+"[web-animations] ... message topic ..."
+([archives](http://lists.w3.org/Archives/Public/public-fx/)).
+
+* For issues with the polyfill, report them on GitHub:
+<https://github.com/web-animations/web-animations-js/issues/new>.
+
+Keep up-to-date
+---------------
+
+Breaking polyfill changes will be announced on this low-volume mailing list:
+[web-animations-changes@googlegroups.com](https://groups.google.com/forum/#!forum/web-animations-changes).
+
+More info
+---------
+
+* [Technical details about the polyfill](/docs/support.md)
+ * [Browser support](/docs/support.md#browser-support)
+ * [Fallback to native](/docs/support.md#native-fallback)
+ * [Feature list](/docs/support.md#features)
+ * [Feature deprecation and removal processes](/docs/support.md#process-for-breaking-changes)
+* To test experimental API features, try one of the
+ [experimental targets](/docs/experimental.md)
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/bower.json
new file mode 100644
index 00000000000..afa0f9e198b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/bower.json
@@ -0,0 +1,30 @@
+{
+ "name": "web-animations-js",
+ "description": "JavaScript implementation of the Web Animations API",
+ "homepage": "https://github.com/web-animations/web-animations-js",
+ "main": "web-animations.min.js",
+ "moduleType": [
+ "globals"
+ ],
+ "keywords": [
+ "animations",
+ "polyfill"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "templates",
+ "test",
+ "Gruntfile.js",
+ "package.json",
+ "target-config.js",
+ "target-loader.js",
+ "web-animations.dev.html",
+ "web-animations.dev.js",
+ "web-animations-next.dev.html",
+ "web-animations-next.dev.js",
+ "web-animations-next-lite.dev.html",
+ "web-animations-next-lite.dev.js"
+ ]
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/examples.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/examples.md
new file mode 100644
index 00000000000..7957a29c649
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/examples.md
@@ -0,0 +1,241 @@
+#Examples of using Web Animations
+
+Property indexed keyframes syntax
+---------------------------------
+- Each CSS property specifies its keyframe values as a list, different properties may have differently sized lists.
+- The `easing` property applies its timing function to all keyframes.
+
+[**Live demo**](http://jsbin.com/qiyeriruru/edit?js,output)
+```javascript
+element.animate({
+ transform: [
+ 'scaleY(0.5)',
+ 'scaleX(0.5)',
+ 'scaleY(0.5)',
+ ],
+ background: [
+ 'red',
+ 'blue',
+ 'orange',
+ 'red',
+ ],
+ easing: 'ease-in-out',
+}, {
+ duration: 2000,
+ iterations: Infinity,
+});
+```
+
+Keyframe list syntax
+--------------------
+- Keyframes can be specified as a list of multiple CSS property values.
+- Individual keyframes can be given specific offsets and easings.
+- Not all properties need to be specified in every keyframe.
+- Offsets are implicitly distributed if not specified.
+
+[**Live demo**](http://jsbin.com/yajatoyere/edit?js,output)
+```javascript
+element.animate([
+ {
+ background: 'red',
+ transform: 'none',
+ easing: 'ease-out',
+ },
+ {
+ offset: 0.1,
+ transform: 'translateY(100px)',
+ easing: 'ease-in-out',
+ },
+ {
+ offset: 0.2,
+ transform: 'translate(100px, 100px)',
+ easing: 'ease-in-out',
+ },
+ {
+ offset: 0.4,
+ transform: 'translateX(100px)',
+ easing: 'ease-out',
+ },
+ {
+ background: 'blue',
+ transform: 'none',
+ },
+], {
+ duration: 4000,
+ iterations: Infinity,
+});
+```
+
+Timing parameters
+-----------------
+- Web Animations inherits many of its timing parameters from CSS Animations.
+- See the [specification](http://w3c.github.io/web-animations/#animationeffecttimingreadonly) for details on each parameter.
+
+[**Live demo**](http://jsbin.com/dabehipiyo/edit?js,output)
+```javascript
+element.animate({
+ transform: ['none', 'translateX(100px)'],
+ background: ['green', 'lime'],
+}, {
+ // Apply effect during delay.
+ fill: 'backwards',
+
+ // Delay starting by 500ms.
+ delay: 500,
+
+ // Iterations last for 2000ms.
+ duration: 2000,
+
+ // Start at 25% through an iteration.
+ iterationStart: 0.25,
+
+ // Run for 2 iterations.
+ iterations: 2,
+
+ // Play every second iteration backwards.
+ direction: 'alternate',
+
+ // Stop animating 500ms earlier.
+ endDelay: -500,
+
+ // The timing function to use with each iteration.
+ easing: 'ease-in-out',
+});
+```
+
+Playback controls
+-----------------
+- element.animate() returns an Animation object with basic playback controls.
+- See the [specification](http://w3c.github.io/web-animations/#the-animation-interface) for details on each method.
+
+[**Live demo**](http://jsbin.com/kutaqoxejo/edit?js,output)
+```javascript
+var animation = element.animate({
+ transform: ['none', 'translateX(200px)'],
+ background: ['red', 'orange'],
+}, {
+ duration: 4000,
+ fill: 'both',
+});
+animation.play();
+animation.reverse();
+animation.pause();
+animation.currentTime = 2000;
+animation.playbackRate += 0.25;
+animation.playbackRate -= 0.25;
+animation.finish();
+animation.cancel();
+```
+
+Transitioning states with element.animate()
+-------------------------------------------
+- This is an example of how to animate from one state to another using Web Animations.
+
+[**Live demo**](http://jsbin.com/musufiwule/edit?js,output)
+```javascript
+var isOpen = false;
+var openHeight = '100px';
+var closedHeight = '0px';
+var duration = 300;
+
+button.addEventListener('click', function() {
+ // Prevent clicks while we transition states.
+ button.disabled = true;
+ button.textContent = '...';
+
+ // Determine where we're animation from/to.
+ var fromHeight = isOpen ? openHeight : closedHeight;
+ var toHeight = isOpen ? closedHeight : openHeight;
+
+ // Start an animation transitioning from our current state to the final state.
+ var animation = element.animate({ height: [fromHeight, toHeight] }, duration);
+
+ // Update the button once the animation finishes.
+ animation.onfinish = function() {
+ isOpen = !isOpen;
+ button.textContent = isOpen ? 'Close' : 'Open';
+ button.disabled = false;
+ };
+
+ // Put our element in the final state.
+ // Inline styles are overridden by active animations.
+ // When the above animation finishes it will stop applying and
+ // the element's style will fall back onto this inline style value.
+ element.style.setProperty('height', toHeight);
+});
+```
+
+Generating animations
+---------------------
+- The Javascript API allows for procedurally generating a diverse range of interesting animations.
+
+[**Live demo**](http://jsbin.com/xolacasiyu/edit?js,output)
+```html
+<!DOCTYPE html>
+<script src="https://rawgit.com/web-animations/web-animations-js/master/web-animations.min.js"></script>
+
+<style>
+#perspective {
+ margin-left: 100px;
+ width: 300px;
+ height: 300px;
+ perspective: 600px;
+}
+
+#container {
+ width: 300px;
+ height: 300px;
+ line-height: 0;
+ transform-style: preserve-3d;
+}
+
+.box {
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ background: black;
+}
+</style>
+
+<div id="perspective">
+ <div id="container"></div>
+</div>
+
+<script>
+container.animate({
+ transform: [
+ 'rotateX(70deg) rotateZ(0deg)',
+ 'rotateX(70deg) rotateZ(360deg)',
+ ],
+}, {
+ duration: 20000,
+ iterations: Infinity,
+});
+
+for (var y = -7; y <= 7; y++) {
+ for (var x = -7; x <= 7; x++) {
+ var box = createBox();
+ box.animate({
+ transform: [
+ 'translateZ(0px)',
+ 'translateZ(20px)',
+ ],
+ opacity: [1, 0],
+ }, {
+ delay: (x*x + y*y) * 20,
+ duration: 2000,
+ iterations: Infinity,
+ direction: 'alternate',
+ easing: 'ease-in',
+ });
+ }
+}
+
+function createBox() {
+ var box = document.createElement('div');
+ box.className = 'box';
+ container.appendChild(box);
+ return box;
+}
+</script>
+```
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/experimental.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/experimental.md
new file mode 100644
index 00000000000..e3f228985c3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/experimental.md
@@ -0,0 +1,58 @@
+
+Experimental build targets
+--------------------------
+
+Most people should use the basic polyfill in `web-animations.min.js`. This
+tracks the Web Animations features that are supported natively in browsers.
+However, we also provide two additional build targets that contain experimental
+features.
+
+### web-animations-next.min.js
+
+Contains all of web-animations.min.js plus features that are still undergoing
+discussion or have yet to be implemented natively.
+
+### web-animations-next-lite.min.js
+
+A cut down version of web-animations-next, it removes several lesser used
+property handlers and some of the larger and less used features such as matrix
+interpolation/decomposition.
+
+Build target comparison
+-----------------------
+
+| | web-animations | web-animations-next | web-animations-next-lite |
+|------------------------|:--------------:|:-------------------:|:------------------------:|
+|Size (gzipped) | 15KB | 19KB | 15KB |
+|Element.animate | ✔ | ✔ | ✔ |
+|Timing input (easings, duration, fillMode, etc.) for animation effects| ✔ | ✔ | ✔ |
+|Playback control | ✔ | ✔ | ✔ |
+|Support for animating lengths, transforms and opacity| ✔ | ✔ | ✔ |
+|Support for animating other CSS properties| ✔ | ✔ | 🚫 |
+|Matrix fallback for transform animations | ✔ | ✔ | 🚫 |
+|KeyframeEffect constructor | 🚫 | ✔ | ✔ |
+|Simple GroupEffects & SequenceEffects | 🚫 | ✔ | ✔ |
+|Custom Effects | 🚫 | ✔ | ✔ |
+|Timing input (easings, duration, fillMode, etc.) for groups</div>| 🚫 | 🚫\* | 🚫 |
+|Additive animation | 🚫\* | 🚫\* | 🚫 |
+|Motion path | 🚫\* | 🚫\* | 🚫 |
+|Modifiable keyframe effect timing| 🚫 | 🚫\* | 🚫\* |
+|Modifiable group timing | 🚫 | 🚫\* | 🚫\* |
+|Usable inline style\*\* | ✔ | ✔ | 🚫 |
+
+\* support is planned for these features.
+\*\* see inline style caveat below.
+
+Caveat: Inline style
+--------------------
+
+Inline style modification is the mechanism used by the polyfill to animate
+properties. Both web-animations and web-animations-next incorporate a module
+that emulates a vanilla inline style object, so that style modification from
+JavaScript can still work in the presence of animations. However, to keep the
+size of web-animations-next-lite as small as possible, the style emulation
+module is not included. When using this version of the polyfill, JavaScript
+inline style modification will be overwritten by animations.
+Due to browser constraints inline style modification is not supported on iOS 7
+or Safari 6 (or earlier versions).
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/support.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/support.md
new file mode 100644
index 00000000000..ae07af76ed5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/docs/support.md
@@ -0,0 +1,69 @@
+
+Getting the polyfill
+--------------------
+
+There are three ways to get a copy of the polyfill:
+
+1. Download and use the `web-animations.min.js` file directly from this repository
+1. Using npm: Add [`web-animations-js`](https://www.npmjs.com/package/web-animations-js) to your `package.json`
+1. Using Bower: Add `web-animations/web-animations-js` to your `bower.json`
+
+Browser support
+---------------
+
+The polyfill is supported on modern versions of all major browsers, including:
+
+* Chrome 55+
+* Firefox 27+
+* IE10+ (including Edge)
+* Safari (iOS) 7.1+
+* Safari (Mac) 9+
+
+Native fallback
+---------------
+
+When the polyfill runs on a browser that implements `Element.animate()` and
+`Animation` playback control, it will detect and use the underlying native
+features for better performance.
+
+Features
+--------
+
+The `web-animations.min.js` polyfill target tracks the Web Animations features
+that are supported natively in browsers. These include:
+
+* Element.animate()
+* Timing input (easings, duration, fillMode, etc.) for animation effects
+* Playback control (play, pause, reverse, currentTime, cancel, onfinish)
+* Support for animating CSS properties
+
+Caveat: Prefix handling
+-----------------------
+
+The polyfill will automatically detect the correctly prefixed name to use when
+writing animated properties back to the platform. Where possible, the polyfill
+will only accept unprefixed versions of experimental features. For example:
+
+```js
+element.animate({transform: ['none', 'translateX(100px)']}, 1000);
+```
+
+will work in all browsers that implement a conforming version of transform, but
+
+```js
+element.animate({webkitTransform: ['none', 'translateX(100px)']}, 1000);
+```
+
+will not work anywhere.
+
+Process for breaking changes
+----------------------------
+
+When we make a potentially breaking change to the polyfill's API
+surface (like a rename) we will, where possible, continue supporting the
+old version, deprecated, for three months, and ensure that there are
+console warnings to indicate that a change is pending. After three
+months, the old version of the API surface (e.g. the old version of a
+function name) will be removed. *If you see deprecation warnings, you
+can't avoid them by not updating*.
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/README.md
new file mode 100644
index 00000000000..3f16bf659a3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/README.md
@@ -0,0 +1,10 @@
+
+Closure Compiler Externs for Web Animations
+-------------------------------------------
+
+This folder contains externs for using the Web Animations API with the Closure
+Compiler. These externs aren't strictly part of the polyfill, as they can be
+used for either the native or polyfilled versions.
+
+web-animations-next requires that you also include web-animations.
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations-next.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations-next.js
new file mode 100644
index 00000000000..743a3ba5648
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations-next.js
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2016 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+/**
+ * @fileoverview Basic externs for the Web Animations API (Level 2 / Groups).
+ * This is not intended to be exhaustive, and requires the base externs from
+ * web-animations.js.
+ * @externs
+ */
+
+
+/**
+ * @interface
+ */
+var AnimationEffectReadOnly = function() {};
+
+/** @type {!AnimationEffectTiming} */
+AnimationEffectReadOnly.prototype.timing;
+
+
+/**
+ * @param {Element} target
+ * @param {!Array<!Object>} frames
+ * @param {(number|AnimationEffectTimingProperties)=} opt_options
+ * @constructor
+ * @implements {AnimationEffectReadOnly}
+ */
+var KeyframeEffect = function(target, frames, opt_options) {};
+
+/**
+ * @return {!Array<!Object>}
+ */
+KeyframeEffect.prototype.getFrames = function() {};
+
+/** @type {!AnimationEffectTiming} */
+KeyframeEffect.prototype.timing;
+
+/** @type {Element} */
+KeyframeEffect.prototype.target;
+
+/** @type {?function(number, !KeyframeEffect, !Animation)} */
+KeyframeEffect.prototype.onsample;
+
+
+/**
+ * @param {!Array<!AnimationEffectReadOnly>} children
+ * @param {AnimationEffectTimingProperties=} opt_timing
+ * @constructor
+ * @implements {AnimationEffectReadOnly}
+ */
+var SequenceEffect = function(children, opt_timing) {};
+
+/** @type {!AnimationEffectTiming} */
+SequenceEffect.prototype.timing;
+
+/** @type {!Array<!AnimationEffectReadOnly>} */
+SequenceEffect.prototype.children;
+
+
+/**
+ * @param {!Array<!AnimationEffectReadOnly>} children
+ * @param {AnimationEffectTimingProperties=} opt_timing
+ * @constructor
+ * @implements {AnimationEffectReadOnly}
+ */
+var GroupEffect = function(children, opt_timing) {};
+
+/** @type {!AnimationEffectTiming} */
+GroupEffect.prototype.timing;
+
+/** @type {!Array<!AnimationEffectReadOnly>} */
+GroupEffect.prototype.children;
+
+
+/**
+ * @interface
+ */
+var AnimationTimeline = function() {};
+
+/** @type {?number} */
+AnimationTimeline.prototype.currentTime;
+
+/**
+ * @param {!AnimationEffectReadOnly} effect
+ * @return {!Animation}
+ */
+AnimationTimeline.prototype.play = function(effect) {};
+
+/**
+ * @interface
+ * @extends {AnimationTimeline}
+ */
+var DocumentTimeline = function() {};
+
+/** @type {AnimationEffectReadOnly|undefined} */
+Animation.prototype.effect;
+
+/** @type {!DocumentTimeline} */
+Document.prototype.timeline;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations.js
new file mode 100644
index 00000000000..7059b4000b2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/externs/web-animations.js
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2016 Google Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+/**
+ * @fileoverview Basic externs for the Web Animations API. This is not
+ * nessecarily exhaustive. For more information, see the spec-
+ * https://w3c.github.io/web-animations
+ * @externs
+ */
+
+
+/**
+ * @param {!Array<!Object>} frames
+ * @param {(number|AnimationEffectTimingProperties)=} opt_options
+ * @return {!Animation}
+ */
+Element.prototype.animate = function(frames, opt_options) {};
+
+
+/**
+ * @interface
+ * @extends {EventTarget}
+ */
+var Animation = function() {};
+
+/**
+ * @return {undefined}
+ */
+Animation.prototype.cancel = function() {};
+
+/**
+ * @return {undefined}
+ */
+Animation.prototype.finish = function() {};
+
+/**
+ * @return {undefined}
+ */
+Animation.prototype.reverse = function() {};
+
+/**
+ * @return {undefined}
+ */
+Animation.prototype.pause = function() {};
+
+/**
+ * @return {undefined}
+ */
+Animation.prototype.play = function() {};
+
+/** @type {number} */
+Animation.prototype.startTime;
+
+/** @type {number} */
+Animation.prototype.currentTime;
+
+/** @type {number} */
+Animation.prototype.playbackRate;
+
+/** @type {string} */
+Animation.prototype.playState;
+
+/** @type {?function(!Event)} */
+Animation.prototype.oncancel;
+
+/** @type {?function(!Event)} */
+Animation.prototype.onfinish;
+
+
+/**
+ * @typedef {{
+ * delay: (number|undefined),
+ * endDelay: (number|undefined),
+ * fillMode: (string|undefined),
+ * iterationStart: (number|undefined),
+ * iterations: (number|undefined),
+ * duration: (number|string|undefined),
+ * direction: (string|undefined),
+ * easing: (string|undefined)
+ * }}
+ */
+var AnimationEffectTimingProperties;
+
+
+/**
+ * @interface
+ */
+var AnimationEffectTiming = function() {};
+
+/** @type {number} */
+AnimationEffectTiming.prototype.delay;
+
+/** @type {number} */
+AnimationEffectTiming.prototype.endDelay;
+
+/** @type {string} */
+AnimationEffectTiming.prototype.fillMode;
+
+/** @type {number} */
+AnimationEffectTiming.prototype.iterationStart;
+
+/** @type {number} */
+AnimationEffectTiming.prototype.iterations;
+
+/** @type {number|string} */
+AnimationEffectTiming.prototype.duration;
+
+/** @type {string} */
+AnimationEffectTiming.prototype.direction;
+
+/** @type {string} */
+AnimationEffectTiming.prototype.easing;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/animation.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/animation.js
new file mode 100644
index 00000000000..e9f64826875
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/animation.js
@@ -0,0 +1,279 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+
+ shared.sequenceNumber = 0;
+
+ var AnimationEvent = function(target, currentTime, timelineTime) {
+ this.target = target;
+ this.currentTime = currentTime;
+ this.timelineTime = timelineTime;
+
+ this.type = 'finish';
+ this.bubbles = false;
+ this.cancelable = false;
+ this.currentTarget = target;
+ this.defaultPrevented = false;
+ this.eventPhase = Event.AT_TARGET;
+ this.timeStamp = Date.now();
+ };
+
+ scope.Animation = function(effect) {
+ this.id = '';
+ if (effect && effect._id) {
+ this.id = effect._id;
+ }
+ this._sequenceNumber = shared.sequenceNumber++;
+ this._currentTime = 0;
+ this._startTime = null;
+ this._paused = false;
+ this._playbackRate = 1;
+ this._inTimeline = true;
+ this._finishedFlag = true;
+ this.onfinish = null;
+ this._finishHandlers = [];
+ this._effect = effect;
+ this._inEffect = this._effect._update(0);
+ this._idle = true;
+ this._currentTimePending = false;
+ };
+
+ scope.Animation.prototype = {
+ _ensureAlive: function() {
+ // If an animation is playing backwards and is not fill backwards/both
+ // then it should go out of effect when it reaches the start of its
+ // active interval (currentTime == 0).
+ if (this.playbackRate < 0 && this.currentTime === 0) {
+ this._inEffect = this._effect._update(-1);
+ } else {
+ this._inEffect = this._effect._update(this.currentTime);
+ }
+ if (!this._inTimeline && (this._inEffect || !this._finishedFlag)) {
+ this._inTimeline = true;
+ scope.timeline._animations.push(this);
+ }
+ },
+ _tickCurrentTime: function(newTime, ignoreLimit) {
+ if (newTime != this._currentTime) {
+ this._currentTime = newTime;
+ if (this._isFinished && !ignoreLimit)
+ this._currentTime = this._playbackRate > 0 ? this._totalDuration : 0;
+ this._ensureAlive();
+ }
+ },
+ get currentTime() {
+ if (this._idle || this._currentTimePending)
+ return null;
+ return this._currentTime;
+ },
+ set currentTime(newTime) {
+ newTime = +newTime;
+ if (isNaN(newTime))
+ return;
+ scope.restart();
+ if (!this._paused && this._startTime != null) {
+ this._startTime = this._timeline.currentTime - newTime / this._playbackRate;
+ }
+ this._currentTimePending = false;
+ if (this._currentTime == newTime)
+ return;
+ if (this._idle) {
+ this._idle = false;
+ this._paused = true;
+ }
+ this._tickCurrentTime(newTime, true);
+ scope.applyDirtiedAnimation(this);
+ },
+ get startTime() {
+ return this._startTime;
+ },
+ set startTime(newTime) {
+ newTime = +newTime;
+ if (isNaN(newTime))
+ return;
+ if (this._paused || this._idle)
+ return;
+ this._startTime = newTime;
+ this._tickCurrentTime((this._timeline.currentTime - this._startTime) * this.playbackRate);
+ scope.applyDirtiedAnimation(this);
+ },
+ get playbackRate() {
+ return this._playbackRate;
+ },
+ set playbackRate(value) {
+ if (value == this._playbackRate) {
+ return;
+ }
+ var oldCurrentTime = this.currentTime;
+ this._playbackRate = value;
+ this._startTime = null;
+ if (this.playState != 'paused' && this.playState != 'idle') {
+ this._finishedFlag = false;
+ this._idle = false;
+ this._ensureAlive();
+ scope.applyDirtiedAnimation(this);
+ }
+ if (oldCurrentTime != null) {
+ this.currentTime = oldCurrentTime;
+ }
+ },
+ get _isFinished() {
+ return !this._idle && (this._playbackRate > 0 && this._currentTime >= this._totalDuration ||
+ this._playbackRate < 0 && this._currentTime <= 0);
+ },
+ get _totalDuration() { return this._effect._totalDuration; },
+ get playState() {
+ if (this._idle)
+ return 'idle';
+ if ((this._startTime == null && !this._paused && this.playbackRate != 0) || this._currentTimePending)
+ return 'pending';
+ if (this._paused)
+ return 'paused';
+ if (this._isFinished)
+ return 'finished';
+ return 'running';
+ },
+ _rewind: function() {
+ if (this._playbackRate >= 0) {
+ this._currentTime = 0;
+ } else if (this._totalDuration < Infinity) {
+ this._currentTime = this._totalDuration;
+ } else {
+ throw new DOMException(
+ 'Unable to rewind negative playback rate animation with infinite duration',
+ 'InvalidStateError');
+ }
+ },
+ play: function() {
+ this._paused = false;
+ if (this._isFinished || this._idle) {
+ this._rewind();
+ this._startTime = null;
+ }
+ this._finishedFlag = false;
+ this._idle = false;
+ this._ensureAlive();
+ scope.applyDirtiedAnimation(this);
+ },
+ pause: function() {
+ if (!this._isFinished && !this._paused && !this._idle) {
+ this._currentTimePending = true;
+ } else if (this._idle) {
+ this._rewind();
+ this._idle = false;
+ }
+ this._startTime = null;
+ this._paused = true;
+ },
+ finish: function() {
+ if (this._idle)
+ return;
+ this.currentTime = this._playbackRate > 0 ? this._totalDuration : 0;
+ this._startTime = this._totalDuration - this.currentTime;
+ this._currentTimePending = false;
+ scope.applyDirtiedAnimation(this);
+ },
+ cancel: function() {
+ if (!this._inEffect)
+ return;
+ this._inEffect = false;
+ this._idle = true;
+ this._paused = false;
+ this._isFinished = true;
+ this._finishedFlag = true;
+ this._currentTime = 0;
+ this._startTime = null;
+ this._effect._update(null);
+ // effects are invalid after cancellation as the animation state
+ // needs to un-apply.
+ scope.applyDirtiedAnimation(this);
+ },
+ reverse: function() {
+ this.playbackRate *= -1;
+ this.play();
+ },
+ addEventListener: function(type, handler) {
+ if (typeof handler == 'function' && type == 'finish')
+ this._finishHandlers.push(handler);
+ },
+ removeEventListener: function(type, handler) {
+ if (type != 'finish')
+ return;
+ var index = this._finishHandlers.indexOf(handler);
+ if (index >= 0)
+ this._finishHandlers.splice(index, 1);
+ },
+ _fireEvents: function(baseTime) {
+ if (this._isFinished) {
+ if (!this._finishedFlag) {
+ var event = new AnimationEvent(this, this._currentTime, baseTime);
+ var handlers = this._finishHandlers.concat(this.onfinish ? [this.onfinish] : []);
+ setTimeout(function() {
+ handlers.forEach(function(handler) {
+ handler.call(event.target, event);
+ });
+ }, 0);
+ this._finishedFlag = true;
+ }
+ } else {
+ this._finishedFlag = false;
+ }
+ },
+ _tick: function(timelineTime, isAnimationFrame) {
+ if (!this._idle && !this._paused) {
+ if (this._startTime == null) {
+ if (isAnimationFrame) {
+ this.startTime = timelineTime - this._currentTime / this.playbackRate;
+ }
+ } else if (!this._isFinished) {
+ this._tickCurrentTime((timelineTime - this._startTime) * this.playbackRate);
+ }
+ }
+
+ if (isAnimationFrame) {
+ this._currentTimePending = false;
+ this._fireEvents(timelineTime);
+ }
+ },
+ get _needsTick() {
+ return (this.playState in {'pending': 1, 'running': 1}) || !this._finishedFlag;
+ },
+ _targetAnimations: function() {
+ var target = this._effect._target;
+ if (!target._activeAnimations) {
+ target._activeAnimations = [];
+ }
+ return target._activeAnimations;
+ },
+ _markTarget: function() {
+ var animations = this._targetAnimations();
+ if (animations.indexOf(this) === -1) {
+ animations.push(this);
+ }
+ },
+ _unmarkTarget: function() {
+ var animations = this._targetAnimations();
+ var index = animations.indexOf(this);
+ if (index !== -1) {
+ animations.splice(index, 1);
+ }
+ },
+ };
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.webAnimations1Animation = scope.Animation;
+ }
+
+})(webAnimationsShared, webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply-preserving-inline-style.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply-preserving-inline-style.js
new file mode 100644
index 00000000000..4002a2f5688
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply-preserving-inline-style.js
@@ -0,0 +1,239 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ var SVG_TRANSFORM_PROP = '_webAnimationsUpdateSvgTransformAttr';
+
+ /**
+ * IE/Edge do not support `transform` styles for SVG elements. Instead,
+ * `transform` attribute can be animated with some restrictions.
+ * See https://connect.microsoft.com/IE/feedback/details/811744/ie11-bug-with-implementation-of-css-transforms-in-svg,
+ * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/1173754/,
+ * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/101242/, etc.
+ * The same problem is exhibited by pre-Chrome Android browsers (ICS).
+ * Unfortunately, there's no easy way to feature-detect it.
+ */
+ function updateSvgTransformAttr(window, element) {
+ if (!element.namespaceURI || element.namespaceURI.indexOf('/svg') == -1) {
+ return false;
+ }
+ if (!(SVG_TRANSFORM_PROP in window)) {
+ window[SVG_TRANSFORM_PROP] =
+ /Trident|MSIE|IEMobile|Edge|Android 4/i.test(window.navigator.userAgent);
+ }
+ return window[SVG_TRANSFORM_PROP];
+ }
+
+ var styleAttributes = {
+ cssText: 1,
+ length: 1,
+ parentRule: 1,
+ };
+
+ var styleMethods = {
+ getPropertyCSSValue: 1,
+ getPropertyPriority: 1,
+ getPropertyValue: 1,
+ item: 1,
+ removeProperty: 1,
+ setProperty: 1,
+ };
+
+ var styleMutatingMethods = {
+ removeProperty: 1,
+ setProperty: 1,
+ };
+
+ function configureProperty(object, property, descriptor) {
+ descriptor.enumerable = true;
+ descriptor.configurable = true;
+ Object.defineProperty(object, property, descriptor);
+ }
+
+ function AnimatedCSSStyleDeclaration(element) {
+ WEB_ANIMATIONS_TESTING && console.assert(!(element.style instanceof AnimatedCSSStyleDeclaration),
+ 'Element must not already have an animated style attached.');
+
+ this._element = element;
+ // Stores the inline style of the element on its behalf while the
+ // polyfill uses the element's inline style to simulate web animations.
+ // This is needed to fake regular inline style CSSOM access on the element.
+ this._surrogateStyle = document.createElementNS('http://www.w3.org/1999/xhtml', 'div').style;
+ this._style = element.style;
+ this._length = 0;
+ this._isAnimatedProperty = {};
+ this._updateSvgTransformAttr = updateSvgTransformAttr(window, element);
+ this._savedTransformAttr = null;
+
+ // Copy the inline style contents over to the surrogate.
+ for (var i = 0; i < this._style.length; i++) {
+ var property = this._style[i];
+ this._surrogateStyle[property] = this._style[property];
+ }
+ this._updateIndices();
+ }
+
+ AnimatedCSSStyleDeclaration.prototype = {
+ get cssText() {
+ return this._surrogateStyle.cssText;
+ },
+ set cssText(text) {
+ var isAffectedProperty = {};
+ for (var i = 0; i < this._surrogateStyle.length; i++) {
+ isAffectedProperty[this._surrogateStyle[i]] = true;
+ }
+ this._surrogateStyle.cssText = text;
+ this._updateIndices();
+ for (var i = 0; i < this._surrogateStyle.length; i++) {
+ isAffectedProperty[this._surrogateStyle[i]] = true;
+ }
+ for (var property in isAffectedProperty) {
+ if (!this._isAnimatedProperty[property]) {
+ this._style.setProperty(property, this._surrogateStyle.getPropertyValue(property));
+ }
+ }
+ },
+ get length() {
+ return this._surrogateStyle.length;
+ },
+ get parentRule() {
+ return this._style.parentRule;
+ },
+ // Mirror the indexed getters and setters of the surrogate style.
+ _updateIndices: function() {
+ while (this._length < this._surrogateStyle.length) {
+ Object.defineProperty(this, this._length, {
+ configurable: true,
+ enumerable: false,
+ get: (function(index) {
+ return function() { return this._surrogateStyle[index]; };
+ })(this._length)
+ });
+ this._length++;
+ }
+ while (this._length > this._surrogateStyle.length) {
+ this._length--;
+ Object.defineProperty(this, this._length, {
+ configurable: true,
+ enumerable: false,
+ value: undefined
+ });
+ }
+ },
+ _set: function(property, value) {
+ this._style[property] = value;
+ this._isAnimatedProperty[property] = true;
+ if (this._updateSvgTransformAttr &&
+ scope.unprefixedPropertyName(property) == 'transform') {
+ // On IE/Edge, also set SVG element's `transform` attribute to 2d
+ // matrix of the transform. The `transform` style does not work, but
+ // `transform` attribute can be used instead.
+ // Notice, if the platform indeed supports SVG/CSS transforms the CSS
+ // declaration is supposed to override the attribute.
+ if (this._savedTransformAttr == null) {
+ this._savedTransformAttr = this._element.getAttribute('transform');
+ }
+ this._element.setAttribute('transform', scope.transformToSvgMatrix(value));
+ }
+ },
+ _clear: function(property) {
+ this._style[property] = this._surrogateStyle[property];
+ if (this._updateSvgTransformAttr &&
+ scope.unprefixedPropertyName(property) == 'transform') {
+ if (this._savedTransformAttr) {
+ this._element.setAttribute('transform', this._savedTransformAttr);
+ } else {
+ this._element.removeAttribute('transform');
+ }
+ this._savedTransformAttr = null;
+ }
+ delete this._isAnimatedProperty[property];
+ },
+ };
+
+ // Wrap the style methods.
+ for (var method in styleMethods) {
+ AnimatedCSSStyleDeclaration.prototype[method] = (function(method, modifiesStyle) {
+ return function() {
+ var result = this._surrogateStyle[method].apply(this._surrogateStyle, arguments);
+ if (modifiesStyle) {
+ if (!this._isAnimatedProperty[arguments[0]])
+ this._style[method].apply(this._style, arguments);
+ this._updateIndices();
+ }
+ return result;
+ }
+ })(method, method in styleMutatingMethods);
+ }
+
+ // Wrap the style.cssProperty getters and setters.
+ for (var property in document.documentElement.style) {
+ if (property in styleAttributes || property in styleMethods) {
+ continue;
+ }
+ (function(property) {
+ configureProperty(AnimatedCSSStyleDeclaration.prototype, property, {
+ get: function() {
+ return this._surrogateStyle[property];
+ },
+ set: function(value) {
+ this._surrogateStyle[property] = value;
+ this._updateIndices();
+ if (!this._isAnimatedProperty[property])
+ this._style[property] = value;
+ }
+ });
+ })(property);
+ }
+
+ function ensureStyleIsPatched(element) {
+ if (element._webAnimationsPatchedStyle)
+ return;
+
+ var animatedStyle = new AnimatedCSSStyleDeclaration(element);
+ try {
+ configureProperty(element, 'style', { get: function() { return animatedStyle; } });
+ } catch (_) {
+ // iOS and older versions of Safari (pre v7) do not support overriding an element's
+ // style object. Animations will clobber any inline styles as a result.
+ element.style._set = function(property, value) {
+ element.style[property] = value;
+ };
+ element.style._clear = function(property) {
+ element.style[property] = '';
+ };
+ }
+
+ // We must keep a handle on the patched style to prevent it from getting GC'd.
+ element._webAnimationsPatchedStyle = element.style;
+ }
+
+ scope.apply = function(element, property, value) {
+ ensureStyleIsPatched(element);
+ element.style._set(scope.propertyName(property), value);
+ };
+
+ scope.clear = function(element, property) {
+ if (element._webAnimationsPatchedStyle) {
+ element.style._clear(scope.propertyName(property));
+ }
+ };
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.ensureStyleIsPatched = ensureStyleIsPatched;
+ testing.updateSvgTransformAttr = updateSvgTransformAttr;
+ }
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply.js
new file mode 100644
index 00000000000..3200f967eaa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/apply.js
@@ -0,0 +1,25 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ scope.apply = function(element, property, value) {
+ element.style[scope.propertyName(property)] = value;
+ };
+
+ scope.clear = function(element, property) {
+ element.style[scope.propertyName(property)] = '';
+ };
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/box-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/box-handler.js
new file mode 100644
index 00000000000..3399263a486
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/box-handler.js
@@ -0,0 +1,57 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+ function consumeLengthPercentOrAuto(string) {
+ return scope.consumeLengthOrPercent(string) || scope.consumeToken(/^auto/, string);
+ }
+ function parseBox(string) {
+ var result = scope.consumeList([
+ scope.ignore(scope.consumeToken.bind(null, /^rect/)),
+ scope.ignore(scope.consumeToken.bind(null, /^\(/)),
+ scope.consumeRepeated.bind(null, consumeLengthPercentOrAuto, /^,/),
+ scope.ignore(scope.consumeToken.bind(null, /^\)/)),
+ ], string);
+ if (result && result[0].length == 4) {
+ return result[0];
+ }
+ }
+
+ function mergeComponent(left, right) {
+ if (left == 'auto' || right == 'auto') {
+ return [true, false, function(t) {
+ var result = t ? left : right;
+ if (result == 'auto') {
+ return 'auto';
+ }
+ // FIXME: There's probably a better way to turn a dimension back into a string.
+ var merged = scope.mergeDimensions(result, result);
+ return merged[2](merged[0]);
+ }];
+ }
+ return scope.mergeDimensions(left, right);
+ }
+
+ function wrap(result) {
+ return 'rect(' + result + ')';
+ }
+
+ var mergeBoxes = scope.mergeWrappedNestedRepeated.bind(null, wrap, mergeComponent, ', ');
+
+ scope.parseBox = parseBox;
+ scope.mergeBoxes = mergeBoxes;
+
+ scope.addPropertiesHandler(parseBox, mergeBoxes, ['clip']);
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/color-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/color-handler.js
new file mode 100644
index 00000000000..3a05bff07fa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/color-handler.js
@@ -0,0 +1,63 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ var canvas = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas');
+ canvas.width = canvas.height = 1;
+ var context = canvas.getContext('2d');
+
+ function parseColor(string) {
+ string = string.trim();
+ // The context ignores invalid colors
+ context.fillStyle = '#000';
+ context.fillStyle = string;
+ var contextSerializedFillStyle = context.fillStyle;
+ context.fillStyle = '#fff';
+ context.fillStyle = string;
+ if (contextSerializedFillStyle != context.fillStyle)
+ return;
+ context.fillRect(0, 0, 1, 1);
+ var pixelColor = context.getImageData(0, 0, 1, 1).data;
+ context.clearRect(0, 0, 1, 1);
+ var alpha = pixelColor[3] / 255;
+ return [pixelColor[0] * alpha, pixelColor[1] * alpha, pixelColor[2] * alpha, alpha];
+ }
+
+ function mergeColors(left, right) {
+ return [left, right, function(x) {
+ function clamp(v) {
+ return Math.max(0, Math.min(255, v));
+ }
+ if (x[3]) {
+ for (var i = 0; i < 3; i++)
+ x[i] = Math.round(clamp(x[i] / x[3]));
+ }
+ x[3] = scope.numberToString(scope.clamp(0, 1, x[3]));
+ return 'rgba(' + x.join(',') + ')';
+ }];
+ }
+
+ scope.addPropertiesHandler(parseColor, mergeColors,
+ ['background-color', 'border-bottom-color', 'border-left-color', 'border-right-color',
+ 'border-top-color', 'color', 'fill', 'flood-color', 'lighting-color',
+ 'outline-color', 'stop-color', 'stroke', 'text-decoration-color']);
+ scope.consumeColor = scope.consumeParenthesised.bind(null, parseColor);
+ scope.mergeColors = mergeColors;
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.parseColor = parseColor;
+ }
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/deprecation.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/deprecation.js
new file mode 100644
index 00000000000..6bdb4a2223c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/deprecation.js
@@ -0,0 +1,47 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared) {
+
+ var silenced = {};
+
+ shared.isDeprecated = function(feature, date, advice, plural) {
+ if (WEB_ANIMATIONS_TESTING) {
+ return true;
+ }
+
+ var auxVerb = plural ? 'are' : 'is';
+ var today = new Date();
+ var expiry = new Date(date);
+ expiry.setMonth(expiry.getMonth() + 3); // 3 months grace period
+
+ if (today < expiry) {
+ if (!(feature in silenced)) {
+ console.warn('Web Animations: ' + feature + ' ' + auxVerb + ' deprecated and will stop working on ' + expiry.toDateString() + '. ' + advice);
+ }
+ silenced[feature] = true;
+ return false;
+ } else {
+ return true;
+ }
+ };
+
+ shared.deprecated = function(feature, date, advice, plural) {
+ var auxVerb = plural ? 'are' : 'is';
+ if (shared.isDeprecated(feature, date, advice, plural)) {
+ throw new Error(feature + ' ' + auxVerb + ' no longer supported. ' + advice);
+ }
+ };
+
+})(webAnimationsShared);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dev.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dev.js
new file mode 100644
index 00000000000..a5e225c08c2
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dev.js
@@ -0,0 +1,16 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+var WEB_ANIMATIONS_TESTING = false;
+var webAnimationsTesting = null;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dimension-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dimension-handler.js
new file mode 100644
index 00000000000..9e487f972a8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/dimension-handler.js
@@ -0,0 +1,240 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ // Evaluates a calc expression.
+ // https://drafts.csswg.org/css-values-3/#calc-notation
+ function calculate(expression) {
+ // In calc expressions, white space is required on both sides of the
+ // + and - operators. https://drafts.csswg.org/css-values-3/#calc-notation
+ // Thus any + or - immediately adjacent to . or 0..9 is part of the number,
+ // e.g. -1.23e+45
+ // This regular expression matches ( ) * / + - and numbers.
+ var tokenRegularExpression = /([\+\-\w\.]+|[\(\)\*\/])/g;
+ var currentToken;
+ function consume() {
+ var matchResult = tokenRegularExpression.exec(expression);
+ if (matchResult)
+ currentToken = matchResult[0];
+ else
+ currentToken = undefined;
+ }
+ consume(); // Read the initial token.
+
+ function calcNumber() {
+ // https://drafts.csswg.org/css-values-3/#number-value
+ var result = Number(currentToken);
+ consume();
+ return result;
+ }
+
+ function calcValue() {
+ // <calc-value> = <number> | <dimension> | <percentage> | ( <calc-sum> )
+ if (currentToken !== '(')
+ return calcNumber();
+ consume();
+ var result = calcSum();
+ if (currentToken !== ')')
+ return NaN;
+ consume();
+ return result;
+ }
+
+ function calcProduct() {
+ // <calc-product> = <calc-value> [ '*' <calc-value> | '/' <calc-number-value> ]*
+ var left = calcValue();
+ while (currentToken === '*' || currentToken === '/') {
+ var operator = currentToken;
+ consume();
+ var right = calcValue();
+ if (operator === '*')
+ left *= right;
+ else
+ left /= right;
+ }
+ return left;
+ }
+
+ function calcSum() {
+ // <calc-sum> = <calc-product> [ [ '+' | '-' ] <calc-product> ]*
+ var left = calcProduct();
+ while (currentToken === '+' || currentToken === '-') {
+ var operator = currentToken;
+ consume();
+ var right = calcProduct();
+ if (operator === '+')
+ left += right;
+ else
+ left -= right;
+ }
+ return left;
+ }
+
+ // <calc()> = calc( <calc-sum> )
+ return calcSum();
+ }
+
+ function parseDimension(unitRegExp, string) {
+ string = string.trim().toLowerCase();
+
+ if (string == '0' && 'px'.search(unitRegExp) >= 0)
+ return {px: 0};
+
+ // If we have parenthesis, we're a calc and need to start with 'calc'.
+ if (!/^[^(]*$|^calc/.test(string))
+ return;
+ string = string.replace(/calc\(/g, '(');
+
+ // We tag units by prefixing them with 'U' (note that we are already
+ // lowercase) to prevent problems with types which are substrings of
+ // each other (although prefixes may be problematic!)
+ var matchedUnits = {};
+ string = string.replace(unitRegExp, function(match) {
+ matchedUnits[match] = null;
+ return 'U' + match;
+ });
+ var taggedUnitRegExp = 'U(' + unitRegExp.source + ')';
+
+ // Validating input is simply applying as many reductions as we can.
+ var typeCheck = string.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g, 'N')
+ .replace(new RegExp('N' + taggedUnitRegExp, 'g'), 'D')
+ .replace(/\s[+-]\s/g, 'O')
+ .replace(/\s/g, '');
+ var reductions = [/N\*(D)/g, /(N|D)[*/]N/g, /(N|D)O\1/g, /\((N|D)\)/g];
+ var i = 0;
+ while (i < reductions.length) {
+ if (reductions[i].test(typeCheck)) {
+ typeCheck = typeCheck.replace(reductions[i], '$1');
+ i = 0;
+ } else {
+ i++;
+ }
+ }
+ if (typeCheck != 'D')
+ return;
+
+ for (var unit in matchedUnits) {
+ var result = calculate(string.replace(new RegExp('U' + unit, 'g'), '').replace(new RegExp(taggedUnitRegExp, 'g'), '*0'));
+ if (!isFinite(result))
+ return;
+ matchedUnits[unit] = result;
+ }
+ return matchedUnits;
+ }
+
+ function mergeDimensionsNonNegative(left, right) {
+ return mergeDimensions(left, right, true);
+ }
+
+ function mergeDimensions(left, right, nonNegative) {
+ var units = [], unit;
+ for (unit in left)
+ units.push(unit);
+ for (unit in right) {
+ if (units.indexOf(unit) < 0)
+ units.push(unit);
+ }
+
+ left = units.map(function(unit) { return left[unit] || 0; });
+ right = units.map(function(unit) { return right[unit] || 0; });
+ return [left, right, function(values) {
+ var result = values.map(function(value, i) {
+ if (values.length == 1 && nonNegative) {
+ value = Math.max(value, 0);
+ }
+ // Scientific notation (e.g. 1e2) is not yet widely supported by browser vendors.
+ return scope.numberToString(value) + units[i];
+ }).join(' + ');
+ return values.length > 1 ? 'calc(' + result + ')' : result;
+ }];
+ }
+
+ var lengthUnits = 'px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc';
+ var parseLength = parseDimension.bind(null, new RegExp(lengthUnits, 'g'));
+ var parseLengthOrPercent = parseDimension.bind(null, new RegExp(lengthUnits + '|%', 'g'));
+ var parseAngle = parseDimension.bind(null, /deg|rad|grad|turn/g);
+
+ scope.parseLength = parseLength;
+ scope.parseLengthOrPercent = parseLengthOrPercent;
+ scope.consumeLengthOrPercent = scope.consumeParenthesised.bind(null, parseLengthOrPercent);
+ scope.parseAngle = parseAngle;
+ scope.mergeDimensions = mergeDimensions;
+
+ var consumeLength = scope.consumeParenthesised.bind(null, parseLength);
+ var consumeSizePair = scope.consumeRepeated.bind(undefined, consumeLength, /^/);
+ var consumeSizePairList = scope.consumeRepeated.bind(undefined, consumeSizePair, /^,/);
+ scope.consumeSizePairList = consumeSizePairList;
+
+ var parseSizePairList = function(input) {
+ var result = consumeSizePairList(input);
+ if (result && result[1] == '') {
+ return result[0];
+ }
+ };
+
+ var mergeNonNegativeSizePair = scope.mergeNestedRepeated.bind(undefined, mergeDimensionsNonNegative, ' ');
+ var mergeNonNegativeSizePairList = scope.mergeNestedRepeated.bind(undefined, mergeNonNegativeSizePair, ',');
+ scope.mergeNonNegativeSizePair = mergeNonNegativeSizePair;
+
+ scope.addPropertiesHandler(parseSizePairList, mergeNonNegativeSizePairList, [
+ 'background-size'
+ ]);
+
+ scope.addPropertiesHandler(parseLengthOrPercent, mergeDimensionsNonNegative, [
+ 'border-bottom-width',
+ 'border-image-width',
+ 'border-left-width',
+ 'border-right-width',
+ 'border-top-width',
+ 'flex-basis',
+ 'font-size',
+ 'height',
+ 'line-height',
+ 'max-height',
+ 'max-width',
+ 'outline-width',
+ 'width',
+ ]);
+
+ scope.addPropertiesHandler(parseLengthOrPercent, mergeDimensions, [
+ 'border-bottom-left-radius',
+ 'border-bottom-right-radius',
+ 'border-top-left-radius',
+ 'border-top-right-radius',
+ 'bottom',
+ 'left',
+ 'letter-spacing',
+ 'margin-bottom',
+ 'margin-left',
+ 'margin-right',
+ 'margin-top',
+ 'min-height',
+ 'min-width',
+ 'outline-offset',
+ 'padding-bottom',
+ 'padding-left',
+ 'padding-right',
+ 'padding-top',
+ 'perspective',
+ 'right',
+ 'shape-margin',
+ 'stroke-dashoffset',
+ 'text-indent',
+ 'top',
+ 'vertical-align',
+ 'word-spacing',
+ ]);
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/effect-callback.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/effect-callback.js
new file mode 100644
index 00000000000..3051a59303e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/effect-callback.js
@@ -0,0 +1,98 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+(function(shared, scope, testing) {
+
+ var nullTarget = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+
+ var sequenceNumber = 0;
+ scope.bindAnimationForCustomEffect = function(animation) {
+ var target = animation.effect.target;
+ var effectFunction;
+ var isKeyframeEffect = typeof animation.effect.getFrames() == 'function';
+ if (isKeyframeEffect) {
+ effectFunction = animation.effect.getFrames();
+ } else {
+ effectFunction = animation.effect._onsample;
+ }
+ var timing = animation.effect.timing;
+ var last = null;
+ timing = shared.normalizeTimingInput(timing);
+ var callback = function() {
+ var t = callback._animation ? callback._animation.currentTime : null;
+ if (t !== null) {
+ t = shared.calculateIterationProgress(shared.calculateActiveDuration(timing), t, timing);
+ if (isNaN(t))
+ t = null;
+ }
+ // FIXME: There are actually more conditions under which the effectFunction
+ // should be called.
+ if (t !== last) {
+ if (isKeyframeEffect) {
+ effectFunction(t, target, animation.effect);
+ } else {
+ effectFunction(t, animation.effect, animation.effect._animation);
+ }
+ }
+ last = t;
+ };
+
+ callback._animation = animation;
+ callback._registered = false;
+ callback._sequenceNumber = sequenceNumber++;
+ animation._callback = callback;
+ register(callback);
+ };
+
+ var callbacks = [];
+ var ticking = false;
+ function register(callback) {
+ if (callback._registered)
+ return;
+ callback._registered = true;
+ callbacks.push(callback);
+ if (!ticking) {
+ ticking = true;
+ requestAnimationFrame(tick);
+ }
+ }
+
+ function tick(t) {
+ var updating = callbacks;
+ callbacks = [];
+ updating.sort(function(left, right) {
+ return left._sequenceNumber - right._sequenceNumber;
+ });
+ updating = updating.filter(function(callback) {
+ callback();
+ var playState = callback._animation ? callback._animation.playState : 'idle';
+ if (playState != 'running' && playState != 'pending')
+ callback._registered = false;
+ return callback._registered;
+ });
+ callbacks.push.apply(callbacks, updating);
+
+ if (callbacks.length) {
+ ticking = true;
+ requestAnimationFrame(tick);
+ } else {
+ ticking = false;
+ }
+ }
+
+ scope.Animation.prototype._register = function() {
+ if (this._callback)
+ register(this._callback);
+ };
+
+})(webAnimationsShared, webAnimationsNext, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/element-animatable.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/element-animatable.js
new file mode 100644
index 00000000000..765edf06fec
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/element-animatable.js
@@ -0,0 +1,23 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope) {
+ window.Element.prototype.animate = function(effectInput, options) {
+ var id = '';
+ if (options && options.id) {
+ id = options.id;
+ }
+ return scope.timeline._play(scope.KeyframeEffect(this, effectInput, options, id));
+ };
+})(webAnimations1);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/font-weight-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/font-weight-handler.js
new file mode 100644
index 00000000000..4760486a66c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/font-weight-handler.js
@@ -0,0 +1,42 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope) {
+ function parse(string) {
+ var out = Number(string);
+ if (isNaN(out) || out < 100 || out > 900 || out % 100 !== 0) {
+ return;
+ }
+ return out;
+ }
+
+ function toCss(value) {
+ value = Math.round(value / 100) * 100;
+ value = scope.clamp(100, 900, value);
+ if (value === 400) {
+ return 'normal';
+ }
+ if (value === 700) {
+ return 'bold';
+ }
+ return String(value);
+ }
+
+ function merge(left, right) {
+ return [left, right, toCss];
+ }
+
+ scope.addPropertiesHandler(parse, merge, ['font-weight']);
+
+})(webAnimations1);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/group-constructors.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/group-constructors.js
new file mode 100644
index 00000000000..e5c0a102b07
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/group-constructors.js
@@ -0,0 +1,204 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+
+ function groupChildDuration(node) {
+ return node._timing.delay + node.activeDuration + node._timing.endDelay;
+ }
+
+ function constructor(children, timingInput, id) {
+ this._id = id;
+ this._parent = null;
+ this.children = children || [];
+ this._reparent(this.children);
+ timingInput = shared.numericTimingToObject(timingInput);
+ this._timingInput = shared.cloneTimingInput(timingInput);
+ this._timing = shared.normalizeTimingInput(timingInput, true);
+ this.timing = shared.makeTiming(timingInput, true, this);
+ this.timing._effect = this;
+
+ if (this._timing.duration === 'auto') {
+ this._timing.duration = this.activeDuration;
+ }
+ }
+
+ window.SequenceEffect = function() {
+ constructor.apply(this, arguments);
+ };
+
+ window.GroupEffect = function() {
+ constructor.apply(this, arguments);
+ };
+
+ constructor.prototype = {
+ _isAncestor: function(effect) {
+ var a = this;
+ while (a !== null) {
+ if (a == effect)
+ return true;
+ a = a._parent;
+ }
+ return false;
+ },
+ _rebuild: function() {
+ // Re-calculate durations for ancestors with specified duration 'auto'.
+ var node = this;
+ while (node) {
+ if (node.timing.duration === 'auto') {
+ node._timing.duration = node.activeDuration;
+ }
+ node = node._parent;
+ }
+ if (this._animation) {
+ this._animation._rebuildUnderlyingAnimation();
+ }
+ },
+ _reparent: function(newChildren) {
+ scope.removeMulti(newChildren);
+ for (var i = 0; i < newChildren.length; i++) {
+ newChildren[i]._parent = this;
+ }
+ },
+ _putChild: function(args, isAppend) {
+ var message = isAppend ? 'Cannot append an ancestor or self' : 'Cannot prepend an ancestor or self';
+ for (var i = 0; i < args.length; i++) {
+ if (this._isAncestor(args[i])) {
+ throw {
+ type: DOMException.HIERARCHY_REQUEST_ERR,
+ name: 'HierarchyRequestError',
+ message: message
+ };
+ }
+ }
+ var oldParents = [];
+ for (var i = 0; i < args.length; i++) {
+ isAppend ? this.children.push(args[i]) : this.children.unshift(args[i]);
+ }
+ this._reparent(args);
+ this._rebuild();
+ },
+ append: function() {
+ this._putChild(arguments, true);
+ },
+ prepend: function() {
+ this._putChild(arguments, false);
+ },
+ get parent() {
+ return this._parent;
+ },
+ get firstChild() {
+ return this.children.length ? this.children[0] : null;
+ },
+ get lastChild() {
+ return this.children.length ? this.children[this.children.length - 1] : null;
+ },
+ clone: function() {
+ var clonedTiming = shared.cloneTimingInput(this._timingInput);
+ var clonedChildren = [];
+ for (var i = 0; i < this.children.length; i++) {
+ clonedChildren.push(this.children[i].clone());
+ }
+ return (this instanceof GroupEffect) ?
+ new GroupEffect(clonedChildren, clonedTiming) :
+ new SequenceEffect(clonedChildren, clonedTiming);
+ },
+ remove: function() {
+ scope.removeMulti([this]);
+ }
+ };
+
+ window.SequenceEffect.prototype = Object.create(constructor.prototype);
+ Object.defineProperty(
+ window.SequenceEffect.prototype,
+ 'activeDuration',
+ {
+ get: function() {
+ var total = 0;
+ this.children.forEach(function(child) {
+ total += groupChildDuration(child);
+ });
+ return Math.max(total, 0);
+ }
+ });
+
+ window.GroupEffect.prototype = Object.create(constructor.prototype);
+ Object.defineProperty(
+ window.GroupEffect.prototype,
+ 'activeDuration',
+ {
+ get: function() {
+ var max = 0;
+ this.children.forEach(function(child) {
+ max = Math.max(max, groupChildDuration(child));
+ });
+ return max;
+ }
+ });
+
+ scope.newUnderlyingAnimationForGroup = function(group) {
+ var underlyingAnimation;
+ var timing = null;
+ var ticker = function(tf) {
+ var animation = underlyingAnimation._wrapper;
+ if (!animation) {
+ return;
+ }
+ if (animation.playState == 'pending') {
+ return;
+ }
+ if (!animation.effect) {
+ return;
+ }
+ if (tf == null) {
+ animation._removeChildAnimations();
+ return;
+ }
+
+ // If the group has a negative playback rate and is not fill backwards/both, then it should go
+ // out of effect when it reaches the start of its active interval (tf == 0). If it is fill
+ // backwards/both then it should stay in effect. calculateIterationProgress will return 0 in the
+ // backwards-filling case, and null otherwise.
+ if (tf == 0 && animation.playbackRate < 0) {
+ if (!timing) {
+ timing = shared.normalizeTimingInput(animation.effect.timing);
+ }
+ tf = shared.calculateIterationProgress(shared.calculateActiveDuration(timing), -1, timing);
+ if (isNaN(tf) || tf == null) {
+ animation._forEachChild(function(child) {
+ child.currentTime = -1;
+ });
+ animation._removeChildAnimations();
+ return;
+ }
+ }
+ };
+
+ var underlyingEffect = new KeyframeEffect(null, [], group._timing, group._id);
+ underlyingEffect.onsample = ticker;
+ underlyingAnimation = scope.timeline._play(underlyingEffect);
+ return underlyingAnimation;
+ };
+
+ scope.bindAnimationForGroup = function(animation) {
+ animation._animation._wrapper = animation;
+ animation._isGroup = true;
+ scope.awaitStartTime(animation);
+ animation._constructChildAnimations();
+ animation._setExternalAnimation(animation);
+ };
+
+ scope.groupChildDuration = groupChildDuration;
+
+})(webAnimationsShared, webAnimationsNext, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/handler-utils.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/handler-utils.js
new file mode 100644
index 00000000000..d9f05e17e99
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/handler-utils.js
@@ -0,0 +1,177 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope) {
+
+ // consume* functions return a 2 value array of [parsed-data, '' or not-yet consumed input]
+
+ // Regex should be anchored with /^
+ function consumeToken(regex, string) {
+ var result = regex.exec(string);
+ if (result) {
+ result = regex.ignoreCase ? result[0].toLowerCase() : result[0];
+ return [result, string.substr(result.length)];
+ }
+ }
+
+ function consumeTrimmed(consumer, string) {
+ string = string.replace(/^\s*/, '');
+ var result = consumer(string);
+ if (result) {
+ return [result[0], result[1].replace(/^\s*/, '')];
+ }
+ }
+
+ function consumeRepeated(consumer, separator, string) {
+ consumer = consumeTrimmed.bind(null, consumer);
+ var list = [];
+ while (true) {
+ var result = consumer(string);
+ if (!result) {
+ return [list, string];
+ }
+ list.push(result[0]);
+ string = result[1];
+ result = consumeToken(separator, string);
+ if (!result || result[1] == '') {
+ return [list, string];
+ }
+ string = result[1];
+ }
+ }
+
+ // Consumes a token or expression with balanced parentheses
+ function consumeParenthesised(parser, string) {
+ var nesting = 0;
+ for (var n = 0; n < string.length; n++) {
+ if (/\s|,/.test(string[n]) && nesting == 0) {
+ break;
+ } else if (string[n] == '(') {
+ nesting++;
+ } else if (string[n] == ')') {
+ nesting--;
+ if (nesting == 0)
+ n++;
+ if (nesting <= 0)
+ break;
+ }
+ }
+ var parsed = parser(string.substr(0, n));
+ return parsed == undefined ? undefined : [parsed, string.substr(n)];
+ }
+
+ function lcm(a, b) {
+ var c = a;
+ var d = b;
+ while (c && d)
+ c > d ? c %= d : d %= c;
+ c = (a * b) / (c + d);
+ return c;
+ }
+
+ function ignore(value) {
+ return function(input) {
+ var result = value(input);
+ if (result)
+ result[0] = undefined;
+ return result;
+ }
+ }
+
+ function optional(value, defaultValue) {
+ return function(input) {
+ var result = value(input);
+ if (result)
+ return result;
+ return [defaultValue, input];
+ }
+ }
+
+ function consumeList(list, input) {
+ var output = [];
+ for (var i = 0; i < list.length; i++) {
+ var result = scope.consumeTrimmed(list[i], input);
+ if (!result || result[0] == '')
+ return;
+ if (result[0] !== undefined)
+ output.push(result[0]);
+ input = result[1];
+ }
+ if (input == '') {
+ return output;
+ }
+ }
+
+ function mergeWrappedNestedRepeated(wrap, nestedMerge, separator, left, right) {
+ var matchingLeft = [];
+ var matchingRight = [];
+ var reconsititution = [];
+ var length = lcm(left.length, right.length);
+ for (var i = 0; i < length; i++) {
+ var thing = nestedMerge(left[i % left.length], right[i % right.length]);
+ if (!thing) {
+ return;
+ }
+ matchingLeft.push(thing[0]);
+ matchingRight.push(thing[1]);
+ reconsititution.push(thing[2]);
+ }
+ return [matchingLeft, matchingRight, function(positions) {
+ var result = positions.map(function(position, i) {
+ return reconsititution[i](position);
+ }).join(separator);
+ return wrap ? wrap(result) : result;
+ }];
+ }
+
+ function mergeList(left, right, list) {
+ var lefts = [];
+ var rights = [];
+ var functions = [];
+ var j = 0;
+ for (var i = 0; i < list.length; i++) {
+ if (typeof list[i] == 'function') {
+ var result = list[i](left[j], right[j++]);
+ lefts.push(result[0]);
+ rights.push(result[1]);
+ functions.push(result[2]);
+ } else {
+ (function(pos) {
+ lefts.push(false);
+ rights.push(false);
+ functions.push(function() { return list[pos]; });
+ })(i);
+ }
+ }
+ return [lefts, rights, function(results) {
+ var result = '';
+ for (var i = 0; i < results.length; i++) {
+ result += functions[i](results[i]);
+ }
+ return result;
+ }];
+ }
+
+ scope.consumeToken = consumeToken;
+ scope.consumeTrimmed = consumeTrimmed;
+ scope.consumeRepeated = consumeRepeated;
+ scope.consumeParenthesised = consumeParenthesised;
+ scope.ignore = ignore;
+ scope.optional = optional;
+ scope.consumeList = consumeList;
+ scope.mergeNestedRepeated = mergeWrappedNestedRepeated.bind(null, null);
+ scope.mergeWrappedNestedRepeated = mergeWrappedNestedRepeated;
+ scope.mergeList = mergeList;
+
+})(webAnimations1);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/interpolation.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/interpolation.js
new file mode 100644
index 00000000000..ba63ed358fd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/interpolation.js
@@ -0,0 +1,49 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ function interpolate(from, to, f) {
+ if ((typeof from == 'number') && (typeof to == 'number')) {
+ return from * (1 - f) + to * f;
+ }
+ if ((typeof from == 'boolean') && (typeof to == 'boolean')) {
+ return f < 0.5 ? from : to;
+ }
+
+ WEB_ANIMATIONS_TESTING && console.assert(
+ Array.isArray(from) && Array.isArray(to),
+ 'If interpolation arguments are not numbers or bools they must be arrays');
+
+ if (from.length == to.length) {
+ var r = [];
+ for (var i = 0; i < from.length; i++) {
+ r.push(interpolate(from[i], to[i], f));
+ }
+ return r;
+ }
+ throw 'Mismatched interpolation arguments ' + from + ':' + to;
+ }
+
+ scope.Interpolation = function(from, to, convertToString) {
+ return function(f) {
+ return convertToString(interpolate(from, to, f));
+ }
+ };
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.interpolate = interpolate;
+ }
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect-constructor.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect-constructor.js
new file mode 100644
index 00000000000..3d0f1bd6b1a
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect-constructor.js
@@ -0,0 +1,183 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+
+ var disassociate = function(effect) {
+ effect._animation = undefined;
+ if (effect instanceof window.SequenceEffect || effect instanceof window.GroupEffect) {
+ for (var i = 0; i < effect.children.length; i++) {
+ disassociate(effect.children[i]);
+ }
+ }
+ };
+
+ scope.removeMulti = function(effects) {
+ var oldParents = [];
+ for (var i = 0; i < effects.length; i++) {
+ var effect = effects[i];
+ if (effect._parent) {
+ if (oldParents.indexOf(effect._parent) == -1) {
+ oldParents.push(effect._parent);
+ }
+ effect._parent.children.splice(effect._parent.children.indexOf(effect), 1);
+ effect._parent = null;
+ disassociate(effect);
+ } else if (effect._animation && (effect._animation.effect == effect)) {
+ effect._animation.cancel();
+ effect._animation.effect = new KeyframeEffect(null, []);
+ if (effect._animation._callback) {
+ effect._animation._callback._animation = null;
+ }
+ effect._animation._rebuildUnderlyingAnimation();
+ disassociate(effect);
+ }
+ }
+ for (i = 0; i < oldParents.length; i++) {
+ oldParents[i]._rebuild();
+ }
+ };
+
+ function KeyframeList(effectInput) {
+ this._frames = shared.normalizeKeyframes(effectInput);
+ }
+
+ scope.KeyframeEffect = function(target, effectInput, timingInput, id) {
+ this.target = target;
+ this._parent = null;
+
+ timingInput = shared.numericTimingToObject(timingInput);
+ this._timingInput = shared.cloneTimingInput(timingInput);
+ this._timing = shared.normalizeTimingInput(timingInput);
+
+ this.timing = shared.makeTiming(timingInput, false, this);
+ this.timing._effect = this;
+ if (typeof effectInput == 'function') {
+ shared.deprecated('Custom KeyframeEffect', '2015-06-22', 'Use KeyframeEffect.onsample instead.');
+ this._normalizedKeyframes = effectInput;
+ } else {
+ this._normalizedKeyframes = new KeyframeList(effectInput);
+ }
+ this._keyframes = effectInput;
+ this.activeDuration = shared.calculateActiveDuration(this._timing);
+ this._id = id;
+ return this;
+ };
+
+ scope.KeyframeEffect.prototype = {
+ getFrames: function() {
+ if (typeof this._normalizedKeyframes == 'function')
+ return this._normalizedKeyframes;
+ return this._normalizedKeyframes._frames;
+ },
+ set onsample(callback) {
+ if (typeof this.getFrames() == 'function') {
+ throw new Error('Setting onsample on custom effect KeyframeEffect is not supported.');
+ }
+ this._onsample = callback;
+ if (this._animation) {
+ this._animation._rebuildUnderlyingAnimation();
+ }
+ },
+ get parent() {
+ return this._parent;
+ },
+ clone: function() {
+ if (typeof this.getFrames() == 'function') {
+ throw new Error('Cloning custom effects is not supported.');
+ }
+ var clone = new KeyframeEffect(this.target, [], shared.cloneTimingInput(this._timingInput), this._id);
+ clone._normalizedKeyframes = this._normalizedKeyframes;
+ clone._keyframes = this._keyframes;
+ return clone;
+ },
+ remove: function() {
+ scope.removeMulti([this]);
+ }
+ };
+
+ var originalElementAnimate = Element.prototype.animate;
+ Element.prototype.animate = function(effectInput, options) {
+ var id = '';
+ if (options && options.id) {
+ id = options.id;
+ }
+ return scope.timeline._play(new scope.KeyframeEffect(this, effectInput, options, id));
+ };
+
+ var nullTarget = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+ scope.newUnderlyingAnimationForKeyframeEffect = function(keyframeEffect) {
+ if (keyframeEffect) {
+ var target = keyframeEffect.target || nullTarget;
+ var keyframes = keyframeEffect._keyframes;
+ if (typeof keyframes == 'function') {
+ keyframes = [];
+ }
+ var options = keyframeEffect._timingInput;
+ options.id = keyframeEffect._id;
+ } else {
+ var target = nullTarget;
+ var keyframes = [];
+ var options = 0;
+ }
+ return originalElementAnimate.apply(target, [keyframes, options]);
+ };
+
+ // TODO: Remove this once we remove support for custom KeyframeEffects.
+ scope.bindAnimationForKeyframeEffect = function(animation) {
+ if (animation.effect && typeof animation.effect._normalizedKeyframes == 'function') {
+ scope.bindAnimationForCustomEffect(animation);
+ }
+ };
+
+ var pendingGroups = [];
+ scope.awaitStartTime = function(groupAnimation) {
+ if (groupAnimation.startTime !== null || !groupAnimation._isGroup)
+ return;
+ if (pendingGroups.length == 0) {
+ requestAnimationFrame(updatePendingGroups);
+ }
+ pendingGroups.push(groupAnimation);
+ };
+ function updatePendingGroups() {
+ var updated = false;
+ while (pendingGroups.length) {
+ var group = pendingGroups.shift();
+ group._updateChildren();
+ updated = true;
+ }
+ return updated;
+ }
+ var originalGetComputedStyle = window.getComputedStyle;
+ Object.defineProperty(window, 'getComputedStyle', {
+ configurable: true,
+ enumerable: true,
+ value: function() {
+ scope.timeline._updateAnimationsPromises();
+ var result = originalGetComputedStyle.apply(this, arguments);
+ if (updatePendingGroups())
+ result = originalGetComputedStyle.apply(this, arguments);
+ scope.timeline._updateAnimationsPromises();
+ return result;
+ },
+ });
+
+ window.KeyframeEffect = scope.KeyframeEffect;
+ window.Element.prototype.getAnimations = function() {
+ return document.timeline.getAnimations().filter(function(animation) {
+ return animation.effect !== null && animation.effect.target == this;
+ }.bind(this));
+ };
+
+}(webAnimationsShared, webAnimationsNext, webAnimationsTesting));
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect.js
new file mode 100644
index 00000000000..7775d5852b9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-effect.js
@@ -0,0 +1,57 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+
+ function EffectTime(timing) {
+ var timeFraction = 0;
+ var activeDuration = shared.calculateActiveDuration(timing);
+ var effectTime = function(localTime) {
+ return shared.calculateIterationProgress(activeDuration, localTime, timing);
+ };
+ effectTime._totalDuration = timing.delay + activeDuration + timing.endDelay;
+ return effectTime;
+ }
+
+ scope.KeyframeEffect = function(target, effectInput, timingInput, id) {
+ var effectTime = EffectTime(shared.normalizeTimingInput(timingInput));
+ var interpolations = scope.convertEffectInput(effectInput);
+ var timeFraction;
+ var keyframeEffect = function() {
+ WEB_ANIMATIONS_TESTING && console.assert(typeof timeFraction !== 'undefined');
+ interpolations(target, timeFraction);
+ };
+ // Returns whether the keyframeEffect is in effect or not after the timing update.
+ keyframeEffect._update = function(localTime) {
+ timeFraction = effectTime(localTime);
+ return timeFraction !== null;
+ };
+ keyframeEffect._clear = function() {
+ interpolations(target, null);
+ };
+ keyframeEffect._hasSameTarget = function(otherTarget) {
+ return target === otherTarget;
+ };
+ keyframeEffect._target = target;
+ keyframeEffect._totalDuration = effectTime._totalDuration;
+ keyframeEffect._id = id;
+ return keyframeEffect;
+ };
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.webAnimations1KeyframeEffect = scope.KeyframeEffect;
+ testing.effectTime = EffectTime;
+ }
+
+})(webAnimationsShared, webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-interpolations.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-interpolations.js
new file mode 100644
index 00000000000..cab801edb2b
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/keyframe-interpolations.js
@@ -0,0 +1,123 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+
+ scope.convertEffectInput = function(effectInput) {
+ var keyframes = shared.normalizeKeyframes(effectInput);
+ var propertySpecificKeyframeGroups = makePropertySpecificKeyframeGroups(keyframes);
+ var interpolations = makeInterpolations(propertySpecificKeyframeGroups);
+ return function(target, fraction) {
+ if (fraction != null) {
+ interpolations.filter(function(interpolation) {
+ return fraction >= interpolation.applyFrom && fraction < interpolation.applyTo;
+ }).forEach(function(interpolation) {
+ var offsetFraction = fraction - interpolation.startOffset;
+ var localDuration = interpolation.endOffset - interpolation.startOffset;
+ var scaledLocalTime = localDuration == 0 ? 0 : interpolation.easingFunction(offsetFraction / localDuration);
+ scope.apply(target, interpolation.property, interpolation.interpolation(scaledLocalTime));
+ });
+ } else {
+ for (var property in propertySpecificKeyframeGroups)
+ if (property != 'offset' && property != 'easing' && property != 'composite')
+ scope.clear(target, property);
+ }
+ };
+ };
+
+
+ function makePropertySpecificKeyframeGroups(keyframes) {
+ var propertySpecificKeyframeGroups = {};
+
+ for (var i = 0; i < keyframes.length; i++) {
+ for (var member in keyframes[i]) {
+ if (member != 'offset' && member != 'easing' && member != 'composite') {
+ var propertySpecificKeyframe = {
+ offset: keyframes[i].offset,
+ easing: keyframes[i].easing,
+ value: keyframes[i][member]
+ };
+ propertySpecificKeyframeGroups[member] = propertySpecificKeyframeGroups[member] || [];
+ propertySpecificKeyframeGroups[member].push(propertySpecificKeyframe);
+ }
+ }
+ }
+
+ for (var groupName in propertySpecificKeyframeGroups) {
+ var group = propertySpecificKeyframeGroups[groupName];
+ if (group[0].offset != 0 || group[group.length - 1].offset != 1) {
+ throw {
+ type: DOMException.NOT_SUPPORTED_ERR,
+ name: 'NotSupportedError',
+ message: 'Partial keyframes are not supported'
+ };
+ }
+ }
+ return propertySpecificKeyframeGroups;
+ }
+
+
+ function makeInterpolations(propertySpecificKeyframeGroups) {
+ var interpolations = [];
+ for (var groupName in propertySpecificKeyframeGroups) {
+ var keyframes = propertySpecificKeyframeGroups[groupName];
+ for (var i = 0; i < keyframes.length - 1; i++) {
+ var startIndex = i;
+ var endIndex = i + 1;
+ var startOffset = keyframes[startIndex].offset;
+ var endOffset = keyframes[endIndex].offset;
+ var applyFrom = startOffset;
+ var applyTo = endOffset;
+
+ if (i == 0) {
+ applyFrom = -Infinity;
+ WEB_ANIMATIONS_TESTING && console.assert(startOffset == 0);
+ if (endOffset == 0) {
+ endIndex = startIndex;
+ }
+ }
+ if (i == keyframes.length - 2) {
+ applyTo = Infinity;
+ WEB_ANIMATIONS_TESTING && console.assert(endOffset == 1);
+ if (startOffset == 1) {
+ startIndex = endIndex;
+ }
+ }
+
+ interpolations.push({
+ applyFrom: applyFrom,
+ applyTo: applyTo,
+ startOffset: keyframes[startIndex].offset,
+ endOffset: keyframes[endIndex].offset,
+ easingFunction: shared.parseEasingFunction(keyframes[startIndex].easing),
+ property: groupName,
+ interpolation: scope.propertyInterpolation(groupName,
+ keyframes[startIndex].value,
+ keyframes[endIndex].value)
+ });
+ }
+ }
+ interpolations.sort(function(leftInterpolation, rightInterpolation) {
+ return leftInterpolation.startOffset - rightInterpolation.startOffset;
+ });
+ return interpolations;
+ }
+
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.makePropertySpecificKeyframeGroups = makePropertySpecificKeyframeGroups;
+ testing.makeInterpolations = makeInterpolations;
+ }
+
+})(webAnimationsShared, webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-decomposition.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-decomposition.js
new file mode 100644
index 00000000000..aa9cfe7690f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-decomposition.js
@@ -0,0 +1,440 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+ var decomposeMatrix = (function() {
+ function determinant(m) {
+ return m[0][0] * m[1][1] * m[2][2] +
+ m[1][0] * m[2][1] * m[0][2] +
+ m[2][0] * m[0][1] * m[1][2] -
+ m[0][2] * m[1][1] * m[2][0] -
+ m[1][2] * m[2][1] * m[0][0] -
+ m[2][2] * m[0][1] * m[1][0];
+ }
+
+ // from Wikipedia:
+ //
+ // [A B]^-1 = [A^-1 + A^-1B(D - CA^-1B)^-1CA^-1 -A^-1B(D - CA^-1B)^-1]
+ // [C D] [-(D - CA^-1B)^-1CA^-1 (D - CA^-1B)^-1 ]
+ //
+ // Therefore
+ //
+ // [A [0]]^-1 = [A^-1 [0]]
+ // [C 1 ] [ -CA^-1 1 ]
+ function inverse(m) {
+ var iDet = 1 / determinant(m);
+ var a = m[0][0], b = m[0][1], c = m[0][2];
+ var d = m[1][0], e = m[1][1], f = m[1][2];
+ var g = m[2][0], h = m[2][1], k = m[2][2];
+ var Ainv = [
+ [(e * k - f * h) * iDet, (c * h - b * k) * iDet,
+ (b * f - c * e) * iDet, 0],
+ [(f * g - d * k) * iDet, (a * k - c * g) * iDet,
+ (c * d - a * f) * iDet, 0],
+ [(d * h - e * g) * iDet, (g * b - a * h) * iDet,
+ (a * e - b * d) * iDet, 0]
+ ];
+ var lastRow = [];
+ for (var i = 0; i < 3; i++) {
+ var val = 0;
+ for (var j = 0; j < 3; j++) {
+ val += m[3][j] * Ainv[j][i];
+ }
+ lastRow.push(val);
+ }
+ lastRow.push(1);
+ Ainv.push(lastRow);
+ return Ainv;
+ }
+
+ function transposeMatrix4(m) {
+ return [[m[0][0], m[1][0], m[2][0], m[3][0]],
+ [m[0][1], m[1][1], m[2][1], m[3][1]],
+ [m[0][2], m[1][2], m[2][2], m[3][2]],
+ [m[0][3], m[1][3], m[2][3], m[3][3]]];
+ }
+
+ function multVecMatrix(v, m) {
+ var result = [];
+ for (var i = 0; i < 4; i++) {
+ var val = 0;
+ for (var j = 0; j < 4; j++) {
+ val += v[j] * m[j][i];
+ }
+ result.push(val);
+ }
+ return result;
+ }
+
+ function normalize(v) {
+ var len = length(v);
+ return [v[0] / len, v[1] / len, v[2] / len];
+ }
+
+ function length(v) {
+ return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
+ }
+
+ function combine(v1, v2, v1s, v2s) {
+ return [v1s * v1[0] + v2s * v2[0], v1s * v1[1] + v2s * v2[1],
+ v1s * v1[2] + v2s * v2[2]];
+ }
+
+ function cross(v1, v2) {
+ return [v1[1] * v2[2] - v1[2] * v2[1],
+ v1[2] * v2[0] - v1[0] * v2[2],
+ v1[0] * v2[1] - v1[1] * v2[0]];
+ }
+
+ function decomposeMatrix(matrix) {
+ var m3d = [
+ matrix.slice(0, 4),
+ matrix.slice(4, 8),
+ matrix.slice(8, 12),
+ matrix.slice(12, 16)
+ ];
+
+ // skip normalization step as m3d[3][3] should always be 1
+ if (m3d[3][3] !== 1) {
+ return null;
+ }
+
+ var perspectiveMatrix = [];
+ for (var i = 0; i < 4; i++) {
+ perspectiveMatrix.push(m3d[i].slice());
+ }
+
+ for (var i = 0; i < 3; i++) {
+ perspectiveMatrix[i][3] = 0;
+ }
+
+ if (determinant(perspectiveMatrix) === 0) {
+ return null;
+ }
+
+ var rhs = [];
+
+ var perspective;
+ if (m3d[0][3] || m3d[1][3] || m3d[2][3]) {
+ rhs.push(m3d[0][3]);
+ rhs.push(m3d[1][3]);
+ rhs.push(m3d[2][3]);
+ rhs.push(m3d[3][3]);
+
+ var inversePerspectiveMatrix = inverse(perspectiveMatrix);
+ var transposedInversePerspectiveMatrix =
+ transposeMatrix4(inversePerspectiveMatrix);
+ perspective = multVecMatrix(rhs, transposedInversePerspectiveMatrix);
+ } else {
+ perspective = [0, 0, 0, 1];
+ }
+
+ var translate = m3d[3].slice(0, 3);
+
+ var row = [];
+ row.push(m3d[0].slice(0, 3));
+ var scale = [];
+ scale.push(length(row[0]));
+ row[0] = normalize(row[0]);
+
+ var skew = [];
+ row.push(m3d[1].slice(0, 3));
+ skew.push(dot(row[0], row[1]));
+ row[1] = combine(row[1], row[0], 1.0, -skew[0]);
+
+ scale.push(length(row[1]));
+ row[1] = normalize(row[1]);
+ skew[0] /= scale[1];
+
+ row.push(m3d[2].slice(0, 3));
+ skew.push(dot(row[0], row[2]));
+ row[2] = combine(row[2], row[0], 1.0, -skew[1]);
+ skew.push(dot(row[1], row[2]));
+ row[2] = combine(row[2], row[1], 1.0, -skew[2]);
+
+ scale.push(length(row[2]));
+ row[2] = normalize(row[2]);
+ skew[1] /= scale[2];
+ skew[2] /= scale[2];
+
+ var pdum3 = cross(row[1], row[2]);
+ if (dot(row[0], pdum3) < 0) {
+ for (var i = 0; i < 3; i++) {
+ scale[i] *= -1;
+ row[i][0] *= -1;
+ row[i][1] *= -1;
+ row[i][2] *= -1;
+ }
+ }
+
+ var t = row[0][0] + row[1][1] + row[2][2] + 1;
+ var s;
+ var quaternion;
+
+ if (t > 1e-4) {
+ s = 0.5 / Math.sqrt(t);
+ quaternion = [
+ (row[2][1] - row[1][2]) * s,
+ (row[0][2] - row[2][0]) * s,
+ (row[1][0] - row[0][1]) * s,
+ 0.25 / s
+ ];
+ } else if (row[0][0] > row[1][1] && row[0][0] > row[2][2]) {
+ s = Math.sqrt(1 + row[0][0] - row[1][1] - row[2][2]) * 2.0;
+ quaternion = [
+ 0.25 * s,
+ (row[0][1] + row[1][0]) / s,
+ (row[0][2] + row[2][0]) / s,
+ (row[2][1] - row[1][2]) / s
+ ];
+ } else if (row[1][1] > row[2][2]) {
+ s = Math.sqrt(1.0 + row[1][1] - row[0][0] - row[2][2]) * 2.0;
+ quaternion = [
+ (row[0][1] + row[1][0]) / s,
+ 0.25 * s,
+ (row[1][2] + row[2][1]) / s,
+ (row[0][2] - row[2][0]) / s
+ ];
+ } else {
+ s = Math.sqrt(1.0 + row[2][2] - row[0][0] - row[1][1]) * 2.0;
+ quaternion = [
+ (row[0][2] + row[2][0]) / s,
+ (row[1][2] + row[2][1]) / s,
+ 0.25 * s,
+ (row[1][0] - row[0][1]) / s
+ ];
+ }
+
+ return [translate, scale, skew, quaternion, perspective];
+ }
+ return decomposeMatrix;
+ })();
+
+ function dot(v1, v2) {
+ var result = 0;
+ for (var i = 0; i < v1.length; i++) {
+ result += v1[i] * v2[i];
+ }
+ return result;
+ }
+
+ function multiplyMatrices(a, b) {
+ return [
+ a[0] * b[0] + a[4] * b[1] + a[8] * b[2] + a[12] * b[3],
+ a[1] * b[0] + a[5] * b[1] + a[9] * b[2] + a[13] * b[3],
+ a[2] * b[0] + a[6] * b[1] + a[10] * b[2] + a[14] * b[3],
+ a[3] * b[0] + a[7] * b[1] + a[11] * b[2] + a[15] * b[3],
+
+ a[0] * b[4] + a[4] * b[5] + a[8] * b[6] + a[12] * b[7],
+ a[1] * b[4] + a[5] * b[5] + a[9] * b[6] + a[13] * b[7],
+ a[2] * b[4] + a[6] * b[5] + a[10] * b[6] + a[14] * b[7],
+ a[3] * b[4] + a[7] * b[5] + a[11] * b[6] + a[15] * b[7],
+
+ a[0] * b[8] + a[4] * b[9] + a[8] * b[10] + a[12] * b[11],
+ a[1] * b[8] + a[5] * b[9] + a[9] * b[10] + a[13] * b[11],
+ a[2] * b[8] + a[6] * b[9] + a[10] * b[10] + a[14] * b[11],
+ a[3] * b[8] + a[7] * b[9] + a[11] * b[10] + a[15] * b[11],
+
+ a[0] * b[12] + a[4] * b[13] + a[8] * b[14] + a[12] * b[15],
+ a[1] * b[12] + a[5] * b[13] + a[9] * b[14] + a[13] * b[15],
+ a[2] * b[12] + a[6] * b[13] + a[10] * b[14] + a[14] * b[15],
+ a[3] * b[12] + a[7] * b[13] + a[11] * b[14] + a[15] * b[15]
+ ];
+ }
+
+ function toRadians(arg) {
+ var rads = arg.rad || 0;
+ var degs = arg.deg || 0;
+ var grads = arg.grad || 0;
+ var turns = arg.turn || 0;
+ var angle = (degs / 360 + grads / 400 + turns) * (2 * Math.PI) + rads;
+ return angle;
+ }
+
+ function convertItemToMatrix(item) {
+ switch (item.t) {
+ case 'rotatex':
+ var angle = toRadians(item.d[0]);
+ return [1, 0, 0, 0,
+ 0, Math.cos(angle), Math.sin(angle), 0,
+ 0, -Math.sin(angle), Math.cos(angle), 0,
+ 0, 0, 0, 1];
+ case 'rotatey':
+ var angle = toRadians(item.d[0]);
+ return [Math.cos(angle), 0, -Math.sin(angle), 0,
+ 0, 1, 0, 0,
+ Math.sin(angle), 0, Math.cos(angle), 0,
+ 0, 0, 0, 1];
+ case 'rotate':
+ case 'rotatez':
+ var angle = toRadians(item.d[0]);
+ return [Math.cos(angle), Math.sin(angle), 0, 0,
+ -Math.sin(angle), Math.cos(angle), 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'rotate3d':
+ var x = item.d[0];
+ var y = item.d[1];
+ var z = item.d[2];
+ var angle = toRadians(item.d[3]);
+
+ var sqrLength = x * x + y * y + z * z;
+ if (sqrLength === 0) {
+ x = 1;
+ y = 0;
+ z = 0;
+ } else if (sqrLength !== 1) {
+ var length = Math.sqrt(sqrLength);
+ x /= length;
+ y /= length;
+ z /= length;
+ }
+
+ var s = Math.sin(angle / 2);
+ var sc = s * Math.cos(angle / 2);
+ var sq = s * s;
+ return [
+ 1 - 2 * (y * y + z * z) * sq,
+ 2 * (x * y * sq + z * sc),
+ 2 * (x * z * sq - y * sc),
+ 0,
+
+ 2 * (x * y * sq - z * sc),
+ 1 - 2 * (x * x + z * z) * sq,
+ 2 * (y * z * sq + x * sc),
+ 0,
+
+ 2 * (x * z * sq + y * sc),
+ 2 * (y * z * sq - x * sc),
+ 1 - 2 * (x * x + y * y) * sq,
+ 0,
+
+ 0, 0, 0, 1
+ ];
+ case 'scale':
+ return [item.d[0], 0, 0, 0,
+ 0, item.d[1], 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'scalex':
+ return [item.d[0], 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'scaley':
+ return [1, 0, 0, 0,
+ 0, item.d[0], 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'scalez':
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, item.d[0], 0,
+ 0, 0, 0, 1];
+ case 'scale3d':
+ return [item.d[0], 0, 0, 0,
+ 0, item.d[1], 0, 0,
+ 0, 0, item.d[2], 0,
+ 0, 0, 0, 1];
+ case 'skew':
+ var xAngle = toRadians(item.d[0]);
+ var yAngle = toRadians(item.d[1]);
+ return [1, Math.tan(yAngle), 0, 0,
+ Math.tan(xAngle), 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'skewx':
+ var angle = toRadians(item.d[0]);
+ return [1, 0, 0, 0,
+ Math.tan(angle), 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'skewy':
+ var angle = toRadians(item.d[0]);
+ return [1, Math.tan(angle), 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ case 'translate':
+ var x = item.d[0].px || 0;
+ var y = item.d[1].px || 0;
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ x, y, 0, 1];
+ case 'translatex':
+ var x = item.d[0].px || 0;
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ x, 0, 0, 1];
+ case 'translatey':
+ var y = item.d[0].px || 0;
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, y, 0, 1];
+ case 'translatez':
+ var z = item.d[0].px || 0;
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, z, 1];
+ case 'translate3d':
+ var x = item.d[0].px || 0;
+ var y = item.d[1].px || 0;
+ var z = item.d[2].px || 0;
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ x, y, z, 1];
+ case 'perspective':
+ var p = item.d[0].px ? (-1 / item.d[0].px) : 0;
+ return [
+ 1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, p,
+ 0, 0, 0, 1];
+ case 'matrix':
+ return [item.d[0], item.d[1], 0, 0,
+ item.d[2], item.d[3], 0, 0,
+ 0, 0, 1, 0,
+ item.d[4], item.d[5], 0, 1];
+ case 'matrix3d':
+ return item.d;
+ default:
+ WEB_ANIMATIONS_TESTING && console.assert(false, 'Transform item type ' + item.t +
+ ' conversion to matrix not yet implemented.');
+ }
+ }
+
+ function convertToMatrix(transformList) {
+ if (transformList.length === 0) {
+ return [1, 0, 0, 0,
+ 0, 1, 0, 0,
+ 0, 0, 1, 0,
+ 0, 0, 0, 1];
+ }
+ return transformList.map(convertItemToMatrix).reduce(multiplyMatrices);
+ }
+
+ function makeMatrixDecomposition(transformList) {
+ return [decomposeMatrix(convertToMatrix(transformList))];
+ }
+
+ scope.dot = dot;
+ scope.makeMatrixDecomposition = makeMatrixDecomposition;
+ scope.transformListToMatrix = convertToMatrix;
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-interpolation.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-interpolation.js
new file mode 100644
index 00000000000..9a35de3bef3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/matrix-interpolation.js
@@ -0,0 +1,130 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+ var composeMatrix = (function() {
+ function multiply(a, b) {
+ var result = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
+ for (var i = 0; i < 4; i++) {
+ for (var j = 0; j < 4; j++) {
+ for (var k = 0; k < 4; k++) {
+ result[i][j] += b[i][k] * a[k][j];
+ }
+ }
+ }
+ return result;
+ }
+
+ function is2D(m) {
+ return (
+ m[0][2] == 0 &&
+ m[0][3] == 0 &&
+ m[1][2] == 0 &&
+ m[1][3] == 0 &&
+ m[2][0] == 0 &&
+ m[2][1] == 0 &&
+ m[2][2] == 1 &&
+ m[2][3] == 0 &&
+ m[3][2] == 0 &&
+ m[3][3] == 1);
+ }
+
+ function composeMatrix(translate, scale, skew, quat, perspective) {
+ var matrix = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];
+
+ for (var i = 0; i < 4; i++) {
+ matrix[i][3] = perspective[i];
+ }
+
+ for (var i = 0; i < 3; i++) {
+ for (var j = 0; j < 3; j++) {
+ matrix[3][i] += translate[j] * matrix[j][i];
+ }
+ }
+
+ var x = quat[0], y = quat[1], z = quat[2], w = quat[3];
+
+ var rotMatrix = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];
+
+ rotMatrix[0][0] = 1 - 2 * (y * y + z * z);
+ rotMatrix[0][1] = 2 * (x * y - z * w);
+ rotMatrix[0][2] = 2 * (x * z + y * w);
+ rotMatrix[1][0] = 2 * (x * y + z * w);
+ rotMatrix[1][1] = 1 - 2 * (x * x + z * z);
+ rotMatrix[1][2] = 2 * (y * z - x * w);
+ rotMatrix[2][0] = 2 * (x * z - y * w);
+ rotMatrix[2][1] = 2 * (y * z + x * w);
+ rotMatrix[2][2] = 1 - 2 * (x * x + y * y);
+
+ matrix = multiply(matrix, rotMatrix);
+
+ var temp = [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]];
+ if (skew[2]) {
+ temp[2][1] = skew[2];
+ matrix = multiply(matrix, temp);
+ }
+
+ if (skew[1]) {
+ temp[2][1] = 0;
+ temp[2][0] = skew[0];
+ matrix = multiply(matrix, temp);
+ }
+
+ if (skew[0]) {
+ temp[2][0] = 0;
+ temp[1][0] = skew[0];
+ matrix = multiply(matrix, temp);
+ }
+
+ for (var i = 0; i < 3; i++) {
+ for (var j = 0; j < 3; j++) {
+ matrix[i][j] *= scale[i];
+ }
+ }
+
+ if (is2D(matrix)) {
+ return [matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1], matrix[3][0], matrix[3][1]];
+ }
+ return matrix[0].concat(matrix[1], matrix[2], matrix[3]);
+ }
+ return composeMatrix;
+ })();
+
+ function clamp(x, min, max) {
+ return Math.max(Math.min(x, max), min);
+ };
+
+ function quat(fromQ, toQ, f) {
+ var product = scope.dot(fromQ, toQ);
+ product = clamp(product, -1.0, 1.0);
+
+ var quat = [];
+ if (product === 1.0) {
+ quat = fromQ;
+ } else {
+ var theta = Math.acos(product);
+ var w = Math.sin(f * theta) * 1 / Math.sqrt(1 - product * product);
+
+ for (var i = 0; i < 4; i++) {
+ quat.push(fromQ[i] * (Math.cos(f * theta) - product * w) +
+ toQ[i] * w);
+ }
+ }
+ return quat;
+ }
+
+ scope.composeMatrix = composeMatrix;
+ scope.quat = quat;
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/normalize-keyframes.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/normalize-keyframes.js
new file mode 100644
index 00000000000..1fd02548775
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/normalize-keyframes.js
@@ -0,0 +1,321 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, testing) {
+ var shorthandToLonghand = {
+ background: [
+ 'backgroundImage',
+ 'backgroundPosition',
+ 'backgroundSize',
+ 'backgroundRepeat',
+ 'backgroundAttachment',
+ 'backgroundOrigin',
+ 'backgroundClip',
+ 'backgroundColor'
+ ],
+ border: [
+ 'borderTopColor',
+ 'borderTopStyle',
+ 'borderTopWidth',
+ 'borderRightColor',
+ 'borderRightStyle',
+ 'borderRightWidth',
+ 'borderBottomColor',
+ 'borderBottomStyle',
+ 'borderBottomWidth',
+ 'borderLeftColor',
+ 'borderLeftStyle',
+ 'borderLeftWidth'
+ ],
+ borderBottom: [
+ 'borderBottomWidth',
+ 'borderBottomStyle',
+ 'borderBottomColor'
+ ],
+ borderColor: [
+ 'borderTopColor',
+ 'borderRightColor',
+ 'borderBottomColor',
+ 'borderLeftColor'
+ ],
+ borderLeft: [
+ 'borderLeftWidth',
+ 'borderLeftStyle',
+ 'borderLeftColor'
+ ],
+ borderRadius: [
+ 'borderTopLeftRadius',
+ 'borderTopRightRadius',
+ 'borderBottomRightRadius',
+ 'borderBottomLeftRadius'
+ ],
+ borderRight: [
+ 'borderRightWidth',
+ 'borderRightStyle',
+ 'borderRightColor'
+ ],
+ borderTop: [
+ 'borderTopWidth',
+ 'borderTopStyle',
+ 'borderTopColor'
+ ],
+ borderWidth: [
+ 'borderTopWidth',
+ 'borderRightWidth',
+ 'borderBottomWidth',
+ 'borderLeftWidth'
+ ],
+ flex: [
+ 'flexGrow',
+ 'flexShrink',
+ 'flexBasis'
+ ],
+ font: [
+ 'fontFamily',
+ 'fontSize',
+ 'fontStyle',
+ 'fontVariant',
+ 'fontWeight',
+ 'lineHeight'
+ ],
+ margin: [
+ 'marginTop',
+ 'marginRight',
+ 'marginBottom',
+ 'marginLeft'
+ ],
+ outline: [
+ 'outlineColor',
+ 'outlineStyle',
+ 'outlineWidth'
+ ],
+ padding: [
+ 'paddingTop',
+ 'paddingRight',
+ 'paddingBottom',
+ 'paddingLeft'
+ ]
+ };
+
+ var shorthandExpanderElem = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+
+ var borderWidthAliases = {
+ thin: '1px',
+ medium: '3px',
+ thick: '5px'
+ };
+
+ var aliases = {
+ borderBottomWidth: borderWidthAliases,
+ borderLeftWidth: borderWidthAliases,
+ borderRightWidth: borderWidthAliases,
+ borderTopWidth: borderWidthAliases,
+ fontSize: {
+ 'xx-small': '60%',
+ 'x-small': '75%',
+ 'small': '89%',
+ 'medium': '100%',
+ 'large': '120%',
+ 'x-large': '150%',
+ 'xx-large': '200%'
+ },
+ fontWeight: {
+ normal: '400',
+ bold: '700'
+ },
+ outlineWidth: borderWidthAliases,
+ textShadow: {
+ none: '0px 0px 0px transparent'
+ },
+ boxShadow: {
+ none: '0px 0px 0px 0px transparent'
+ }
+ };
+
+ function antiAlias(property, value) {
+ if (property in aliases) {
+ return aliases[property][value] || value;
+ }
+ return value;
+ }
+
+ function isNotAnimatable(property) {
+ // https://w3c.github.io/web-animations/#concept-not-animatable
+ return property === 'display' || property.lastIndexOf('animation', 0) === 0 || property.lastIndexOf('transition', 0) === 0;
+ }
+
+ // This delegates parsing shorthand value syntax to the browser.
+ function expandShorthandAndAntiAlias(property, value, result) {
+ if (isNotAnimatable(property)) {
+ return;
+ }
+ var longProperties = shorthandToLonghand[property];
+ if (longProperties) {
+ shorthandExpanderElem.style[property] = value;
+ for (var i in longProperties) {
+ var longProperty = longProperties[i];
+ var longhandValue = shorthandExpanderElem.style[longProperty];
+ result[longProperty] = antiAlias(longProperty, longhandValue);
+ }
+ } else {
+ result[property] = antiAlias(property, value);
+ }
+ };
+
+ function convertToArrayForm(effectInput) {
+ var normalizedEffectInput = [];
+
+ for (var property in effectInput) {
+ if (property in ['easing', 'offset', 'composite']) {
+ continue;
+ }
+
+ var values = effectInput[property];
+ if (!Array.isArray(values)) {
+ values = [values];
+ }
+
+ var keyframe;
+ var numKeyframes = values.length;
+ for (var i = 0; i < numKeyframes; i++) {
+ keyframe = {};
+
+ if ('offset' in effectInput) {
+ keyframe.offset = effectInput.offset;
+ } else if (numKeyframes == 1) {
+ keyframe.offset = 1.0;
+ } else {
+ keyframe.offset = i / (numKeyframes - 1.0);
+ }
+
+ if ('easing' in effectInput) {
+ keyframe.easing = effectInput.easing;
+ }
+
+ if ('composite' in effectInput) {
+ keyframe.composite = effectInput.composite;
+ }
+
+ keyframe[property] = values[i];
+
+ normalizedEffectInput.push(keyframe);
+ }
+ }
+
+ normalizedEffectInput.sort(function(a, b) { return a.offset - b.offset; });
+ return normalizedEffectInput;
+ };
+
+ function normalizeKeyframes(effectInput) {
+ if (effectInput == null) {
+ return [];
+ }
+
+ if (window.Symbol && Symbol.iterator && Array.prototype.from && effectInput[Symbol.iterator]) {
+ // Handle custom iterables in most browsers by converting to an array
+ effectInput = Array.from(effectInput);
+ }
+
+ if (!Array.isArray(effectInput)) {
+ effectInput = convertToArrayForm(effectInput);
+ }
+
+ var keyframes = effectInput.map(function(originalKeyframe) {
+ var keyframe = {};
+ for (var member in originalKeyframe) {
+ var memberValue = originalKeyframe[member];
+ if (member == 'offset') {
+ if (memberValue != null) {
+ memberValue = Number(memberValue);
+ if (!isFinite(memberValue))
+ throw new TypeError('Keyframe offsets must be numbers.');
+ if (memberValue < 0 || memberValue > 1)
+ throw new TypeError('Keyframe offsets must be between 0 and 1.');
+ }
+ } else if (member == 'composite') {
+ if (memberValue == 'add' || memberValue == 'accumulate') {
+ throw {
+ type: DOMException.NOT_SUPPORTED_ERR,
+ name: 'NotSupportedError',
+ message: 'add compositing is not supported'
+ };
+ } else if (memberValue != 'replace') {
+ throw new TypeError('Invalid composite mode ' + memberValue + '.');
+ }
+ } else if (member == 'easing') {
+ memberValue = shared.normalizeEasing(memberValue);
+ } else {
+ memberValue = '' + memberValue;
+ }
+ expandShorthandAndAntiAlias(member, memberValue, keyframe);
+ }
+ if (keyframe.offset == undefined)
+ keyframe.offset = null;
+ if (keyframe.easing == undefined)
+ keyframe.easing = 'linear';
+ return keyframe;
+ });
+
+ var everyFrameHasOffset = true;
+ var looselySortedByOffset = true;
+ var previousOffset = -Infinity;
+ for (var i = 0; i < keyframes.length; i++) {
+ var offset = keyframes[i].offset;
+ if (offset != null) {
+ if (offset < previousOffset) {
+ throw new TypeError('Keyframes are not loosely sorted by offset. Sort or specify offsets.');
+ }
+ previousOffset = offset;
+ } else {
+ everyFrameHasOffset = false;
+ }
+ }
+
+ keyframes = keyframes.filter(function(keyframe) {
+ return keyframe.offset >= 0 && keyframe.offset <= 1;
+ });
+
+ function spaceKeyframes() {
+ var length = keyframes.length;
+ if (keyframes[length - 1].offset == null)
+ keyframes[length - 1].offset = 1;
+ if (length > 1 && keyframes[0].offset == null)
+ keyframes[0].offset = 0;
+
+ var previousIndex = 0;
+ var previousOffset = keyframes[0].offset;
+ for (var i = 1; i < length; i++) {
+ var offset = keyframes[i].offset;
+ if (offset != null) {
+ for (var j = 1; j < i - previousIndex; j++)
+ keyframes[previousIndex + j].offset = previousOffset + (offset - previousOffset) * j / (i - previousIndex);
+ previousIndex = i;
+ previousOffset = offset;
+ }
+ }
+ }
+ if (!everyFrameHasOffset)
+ spaceKeyframes();
+
+ return keyframes;
+ }
+
+ shared.convertToArrayForm = convertToArrayForm;
+ shared.normalizeKeyframes = normalizeKeyframes;
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.normalizeKeyframes = normalizeKeyframes;
+ }
+
+})(webAnimationsShared, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/number-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/number-handler.js
new file mode 100644
index 00000000000..7d0e7f9bfb3
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/number-handler.js
@@ -0,0 +1,97 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ function numberToString(x) {
+ return x.toFixed(3).replace(/0+$/, '').replace(/\.$/, '');
+ }
+
+ function clamp(min, max, x) {
+ return Math.min(max, Math.max(min, x));
+ }
+
+ function parseNumber(string) {
+ if (/^\s*[-+]?(\d*\.)?\d+\s*$/.test(string))
+ return Number(string);
+ }
+
+ function mergeNumbers(left, right) {
+ return [left, right, numberToString];
+ }
+
+ // FIXME: This should probably go in it's own handler.
+ function mergeFlex(left, right) {
+ if (left == 0)
+ return;
+ return clampedMergeNumbers(0, Infinity)(left, right);
+ }
+
+ function mergePositiveIntegers(left, right) {
+ return [left, right, function(x) {
+ return Math.round(clamp(1, Infinity, x));
+ }];
+ }
+
+ function clampedMergeNumbers(min, max) {
+ return function(left, right) {
+ return [left, right, function(x) {
+ return numberToString(clamp(min, max, x));
+ }];
+ };
+ }
+
+ function parseNumberList(string) {
+ var items = string.trim().split(/\s*[\s,]\s*/);
+ if (items.length === 0) {
+ return;
+ }
+ var result = [];
+ for (var i = 0; i < items.length; i++) {
+ var number = parseNumber(items[i]);
+ if (number === undefined) {
+ return;
+ }
+ result.push(number);
+ }
+ return result;
+ }
+
+ function mergeNumberLists(left, right) {
+ if (left.length != right.length) {
+ return;
+ }
+ return [left, right, function(numberList) {
+ return numberList.map(numberToString).join(' ');
+ }];
+ }
+
+ function round(left, right) {
+ return [left, right, Math.round];
+ }
+
+ scope.clamp = clamp;
+ scope.addPropertiesHandler(parseNumberList, mergeNumberLists, ['stroke-dasharray']);
+ scope.addPropertiesHandler(parseNumber, clampedMergeNumbers(0, Infinity), ['border-image-width', 'line-height']);
+ scope.addPropertiesHandler(parseNumber, clampedMergeNumbers(0, 1), ['opacity', 'shape-image-threshold']);
+ scope.addPropertiesHandler(parseNumber, mergeFlex, ['flex-grow', 'flex-shrink']);
+ scope.addPropertiesHandler(parseNumber, mergePositiveIntegers, ['orphans', 'widows']);
+ scope.addPropertiesHandler(parseNumber, round, ['z-index']);
+
+ scope.parseNumber = parseNumber;
+ scope.parseNumberList = parseNumberList;
+ scope.mergeNumbers = mergeNumbers;
+ scope.numberToString = numberToString;
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/position-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/position-handler.js
new file mode 100644
index 00000000000..18cea438cd6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/position-handler.js
@@ -0,0 +1,117 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope) {
+
+ function negateDimension(dimension) {
+ var result = {};
+ for (var k in dimension) {
+ result[k] = -dimension[k];
+ }
+ return result;
+ }
+
+ function consumeOffset(string) {
+ return scope.consumeToken(/^(left|center|right|top|bottom)\b/i, string) || scope.consumeLengthOrPercent(string);
+ }
+
+ var offsetMap = {
+ left: {'%': 0},
+ center: {'%': 50},
+ right: {'%': 100},
+ top: {'%': 0},
+ bottom: {'%': 100},
+ };
+
+ function parseOrigin(slots, string) {
+ var result = scope.consumeRepeated(consumeOffset, /^/, string);
+ if (!result || result[1] != '') return;
+ var tokens = result[0];
+ tokens[0] = tokens[0] || 'center';
+ tokens[1] = tokens[1] || 'center';
+ if (slots == 3) {
+ tokens[2] = tokens[2] || {px: 0};
+ }
+ if (tokens.length != slots) {
+ return;
+ }
+ // Reorder so that the horizontal axis comes first.
+ if (/top|bottom/.test(tokens[0]) || /left|right/.test(tokens[1])) {
+ var tmp = tokens[0];
+ tokens[0] = tokens[1];
+ tokens[1] = tmp;
+ }
+ // Invalid if not horizontal then vertical.
+ if (!/left|right|center|Object/.test(tokens[0]))
+ return;
+ if (!/top|bottom|center|Object/.test(tokens[1]))
+ return;
+ return tokens.map(function(position) {
+ return typeof position == 'object' ? position : offsetMap[position];
+ });
+ }
+
+ var mergeOffsetList = scope.mergeNestedRepeated.bind(null, scope.mergeDimensions, ' ');
+ scope.addPropertiesHandler(parseOrigin.bind(null, 3), mergeOffsetList, ['transform-origin']);
+ scope.addPropertiesHandler(parseOrigin.bind(null, 2), mergeOffsetList, ['perspective-origin']);
+
+ function consumePosition(string) {
+ var result = scope.consumeRepeated(consumeOffset, /^/, string);
+ if (!result) {
+ return;
+ }
+
+ var tokens = result[0];
+ var out = [{'%': 50}, {'%': 50}];
+ var pos = 0;
+ var bottomOrRight = false;
+
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i];
+ if (typeof token == 'string') {
+ bottomOrRight = /bottom|right/.test(token);
+ pos = {left: 0, right: 0, center: pos, top: 1, bottom: 1}[token];
+ out[pos] = offsetMap[token];
+ if (token == 'center') {
+ // Center doesn't accept a length offset.
+ pos++;
+ }
+ } else {
+ if (bottomOrRight) {
+ // If bottom or right we need to subtract the length from 100%
+ token = negateDimension(token);
+ token['%'] = (token['%'] || 0) + 100;
+ }
+ out[pos] = token;
+ pos++;
+ bottomOrRight = false;
+ }
+ }
+ return [out, result[1]];
+ }
+
+ function parsePositionList(string) {
+ var result = scope.consumeRepeated(consumePosition, /^,/, string);
+ if (result && result[1] == '') {
+ return result[0];
+ }
+ }
+
+ scope.consumePosition = consumePosition;
+ scope.mergeOffsetList = mergeOffsetList;
+
+ var mergePositionList = scope.mergeNestedRepeated.bind(null, mergeOffsetList, ', ');
+ scope.addPropertiesHandler(parsePositionList, mergePositionList, ['background-position', 'object-position']);
+
+})(webAnimations1);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-interpolation.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-interpolation.js
new file mode 100644
index 00000000000..b7e594f3934
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-interpolation.js
@@ -0,0 +1,127 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+
+ var propertyHandlers = {};
+
+ function toCamelCase(property) {
+ return property.replace(/-(.)/g, function(_, c) {
+ return c.toUpperCase();
+ });
+ }
+
+ function addPropertyHandler(parser, merger, property) {
+ propertyHandlers[property] = propertyHandlers[property] || [];
+ propertyHandlers[property].push([parser, merger]);
+ }
+ function addPropertiesHandler(parser, merger, properties) {
+ for (var i = 0; i < properties.length; i++) {
+ var property = properties[i];
+ WEB_ANIMATIONS_TESTING && console.assert(property.toLowerCase() === property);
+ addPropertyHandler(parser, merger, toCamelCase(property));
+ }
+ }
+ scope.addPropertiesHandler = addPropertiesHandler;
+
+ var initialValues = {
+ backgroundColor: 'transparent',
+ backgroundPosition: '0% 0%',
+ borderBottomColor: 'currentColor',
+ borderBottomLeftRadius: '0px',
+ borderBottomRightRadius: '0px',
+ borderBottomWidth: '3px',
+ borderLeftColor: 'currentColor',
+ borderLeftWidth: '3px',
+ borderRightColor: 'currentColor',
+ borderRightWidth: '3px',
+ // Spec says this should be 0 but in practise it is 2px.
+ borderSpacing: '2px',
+ borderTopColor: 'currentColor',
+ borderTopLeftRadius: '0px',
+ borderTopRightRadius: '0px',
+ borderTopWidth: '3px',
+ bottom: 'auto',
+ clip: 'rect(0px, 0px, 0px, 0px)',
+ color: 'black', // Depends on user agent.
+ fontSize: '100%',
+ fontWeight: '400',
+ height: 'auto',
+ left: 'auto',
+ letterSpacing: 'normal',
+ lineHeight: '120%',
+ marginBottom: '0px',
+ marginLeft: '0px',
+ marginRight: '0px',
+ marginTop: '0px',
+ maxHeight: 'none',
+ maxWidth: 'none',
+ minHeight: '0px',
+ minWidth: '0px',
+ opacity: '1.0',
+ outlineColor: 'invert',
+ outlineOffset: '0px',
+ outlineWidth: '3px',
+ paddingBottom: '0px',
+ paddingLeft: '0px',
+ paddingRight: '0px',
+ paddingTop: '0px',
+ right: 'auto',
+ strokeDasharray: 'none',
+ strokeDashoffset: '0px',
+ textIndent: '0px',
+ textShadow: '0px 0px 0px transparent',
+ top: 'auto',
+ transform: '',
+ verticalAlign: '0px',
+ visibility: 'visible',
+ width: 'auto',
+ wordSpacing: 'normal',
+ zIndex: 'auto'
+ };
+
+ function propertyInterpolation(property, left, right) {
+ var ucProperty = property;
+ if (/-/.test(property) && !shared.isDeprecated('Hyphenated property names', '2016-03-22', 'Use camelCase instead.', true)) {
+ ucProperty = toCamelCase(property);
+ }
+ if (left == 'initial' || right == 'initial') {
+ if (left == 'initial')
+ left = initialValues[ucProperty];
+ if (right == 'initial')
+ right = initialValues[ucProperty];
+ }
+ var handlers = left == right ? [] : propertyHandlers[ucProperty];
+ for (var i = 0; handlers && i < handlers.length; i++) {
+ var parsedLeft = handlers[i][0](left);
+ var parsedRight = handlers[i][0](right);
+ if (parsedLeft !== undefined && parsedRight !== undefined) {
+ var interpolationArgs = handlers[i][1](parsedLeft, parsedRight);
+ if (interpolationArgs) {
+ var interp = scope.Interpolation.apply(null, interpolationArgs);
+ return function(t) {
+ if (t == 0) return left;
+ if (t == 1) return right;
+ return interp(t);
+ };
+ }
+ }
+ }
+ return scope.Interpolation(false, true, function(bool) {
+ return bool ? right : left;
+ });
+ }
+ scope.propertyInterpolation = propertyInterpolation;
+
+})(webAnimationsShared, webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-names.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-names.js
new file mode 100644
index 00000000000..f106c066ab9
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/property-names.js
@@ -0,0 +1,40 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ var prefixed = {};
+ var unprefixed = {};
+
+ function alias(name, aliases) {
+ aliases.concat([name]).forEach(function(candidate) {
+ if (candidate in document.documentElement.style) {
+ prefixed[name] = candidate;
+ }
+ unprefixed[candidate] = name;
+ });
+ }
+ alias('transform', ['webkitTransform', 'msTransform']);
+ alias('transformOrigin', ['webkitTransformOrigin']);
+ alias('perspective', ['webkitPerspective']);
+ alias('perspectiveOrigin', ['webkitPerspectiveOrigin']);
+
+ scope.propertyName = function(property) {
+ return prefixed[property] || property;
+ };
+ scope.unprefixedPropertyName = function(property) {
+ return unprefixed[property] || property;
+ };
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/scope.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/scope.js
new file mode 100644
index 00000000000..c8248802bce
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/scope.js
@@ -0,0 +1,20 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+var webAnimationsShared = {};
+var webAnimations1 = {};
+var webAnimationsNext = {};
+
+if (!WEB_ANIMATIONS_TESTING)
+ var webAnimationsTesting = null;
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shadow-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shadow-handler.js
new file mode 100644
index 00000000000..3f8201d8a49
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shadow-handler.js
@@ -0,0 +1,108 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope) {
+
+ function consumeShadow(string) {
+ var shadow = {
+ inset: false,
+ lengths: [],
+ color: null,
+ };
+ function consumePart(string) {
+ var result = scope.consumeToken(/^inset/i, string);
+ if (result) {
+ shadow.inset = true;
+ return result;
+ }
+ var result = scope.consumeLengthOrPercent(string);
+ if (result) {
+ shadow.lengths.push(result[0]);
+ return result;
+ }
+ var result = scope.consumeColor(string);
+ if (result) {
+ shadow.color = result[0];
+ return result;
+ }
+ }
+ var result = scope.consumeRepeated(consumePart, /^/, string);
+ if (result && result[0].length) {
+ return [shadow, result[1]];
+ }
+ }
+
+ function parseShadowList(string) {
+ var result = scope.consumeRepeated(consumeShadow, /^,/, string);
+ if (result && result[1] == '') {
+ return result[0];
+ }
+ }
+
+ function mergeShadow(left, right) {
+ while (left.lengths.length < Math.max(left.lengths.length, right.lengths.length))
+ left.lengths.push({px: 0});
+ while (right.lengths.length < Math.max(left.lengths.length, right.lengths.length))
+ right.lengths.push({px: 0});
+
+ if (left.inset != right.inset || !!left.color != !!right.color) {
+ return;
+ }
+ var lengthReconstitution = [];
+ var colorReconstitution;
+ var matchingLeft = [[], 0];
+ var matchingRight = [[], 0];
+ for (var i = 0; i < left.lengths.length; i++) {
+ var mergedDimensions = scope.mergeDimensions(left.lengths[i], right.lengths[i], i == 2);
+ matchingLeft[0].push(mergedDimensions[0]);
+ matchingRight[0].push(mergedDimensions[1]);
+ lengthReconstitution.push(mergedDimensions[2]);
+ }
+ if (left.color && right.color) {
+ var mergedColor = scope.mergeColors(left.color, right.color);
+ matchingLeft[1] = mergedColor[0];
+ matchingRight[1] = mergedColor[1];
+ colorReconstitution = mergedColor[2];
+ }
+ return [matchingLeft, matchingRight, function(value) {
+ var result = left.inset ? 'inset ' : ' ';
+ for (var i = 0; i < lengthReconstitution.length; i++) {
+ result += lengthReconstitution[i](value[0][i]) + ' ';
+ }
+ if (colorReconstitution) {
+ result += colorReconstitution(value[1]);
+ }
+ return result;
+ }];
+ }
+
+ function mergeNestedRepeatedShadow(nestedMerge, separator, left, right) {
+ var leftCopy = [];
+ var rightCopy = [];
+ function defaultShadow(inset) {
+ return {inset: inset, color: [0, 0, 0, 0], lengths: [{px: 0}, {px: 0}, {px: 0}, {px: 0}]};
+ }
+ for (var i = 0; i < left.length || i < right.length; i++) {
+ var l = left[i] || defaultShadow(right[i].inset);
+ var r = right[i] || defaultShadow(left[i].inset);
+ leftCopy.push(l);
+ rightCopy.push(r);
+ }
+ return scope.mergeNestedRepeated(nestedMerge, separator, leftCopy, rightCopy);
+ }
+
+ var mergeShadowList = mergeNestedRepeatedShadow.bind(null, mergeShadow, ', ');
+ scope.addPropertiesHandler(parseShadowList, mergeShadowList, ['box-shadow', 'text-shadow']);
+
+})(webAnimations1);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shape-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shape-handler.js
new file mode 100644
index 00000000000..6bbf79fe488
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/shape-handler.js
@@ -0,0 +1,85 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope) {
+
+ var consumeLengthOrPercent = scope.consumeParenthesised.bind(null, scope.parseLengthOrPercent);
+ var consumeLengthOrPercentPair = scope.consumeRepeated.bind(undefined, consumeLengthOrPercent, /^/);
+
+ var mergeSizePair = scope.mergeNestedRepeated.bind(undefined, scope.mergeDimensions, ' ');
+ var mergeSizePairList = scope.mergeNestedRepeated.bind(undefined, mergeSizePair, ',');
+
+ function parseShape(input) {
+ var circle = scope.consumeToken(/^circle/, input);
+ if (circle && circle[0]) {
+ return ['circle'].concat(scope.consumeList([
+ scope.ignore(scope.consumeToken.bind(undefined, /^\(/)),
+ consumeLengthOrPercent,
+ scope.ignore(scope.consumeToken.bind(undefined, /^at/)),
+ scope.consumePosition,
+ scope.ignore(scope.consumeToken.bind(undefined, /^\)/))
+ ], circle[1]));
+ }
+ var ellipse = scope.consumeToken(/^ellipse/, input);
+ if (ellipse && ellipse[0]) {
+ return ['ellipse'].concat(scope.consumeList([
+ scope.ignore(scope.consumeToken.bind(undefined, /^\(/)),
+ consumeLengthOrPercentPair,
+ scope.ignore(scope.consumeToken.bind(undefined, /^at/)),
+ scope.consumePosition,
+ scope.ignore(scope.consumeToken.bind(undefined, /^\)/))
+ ], ellipse[1]));
+ }
+ var polygon = scope.consumeToken(/^polygon/, input);
+ if (polygon && polygon[0]) {
+ return ['polygon'].concat(scope.consumeList([
+ scope.ignore(scope.consumeToken.bind(undefined, /^\(/)),
+ scope.optional(scope.consumeToken.bind(undefined, /^nonzero\s*,|^evenodd\s*,/), 'nonzero,'),
+ scope.consumeSizePairList,
+ scope.ignore(scope.consumeToken.bind(undefined, /^\)/))
+ ], polygon[1]));
+ }
+ }
+
+ function mergeShapes(left, right) {
+ if (left[0] !== right[0])
+ return;
+ if (left[0] == 'circle') {
+ return scope.mergeList(left.slice(1), right.slice(1), [
+ 'circle(',
+ scope.mergeDimensions,
+ ' at ',
+ scope.mergeOffsetList,
+ ')']);
+ }
+ if (left[0] == 'ellipse') {
+ return scope.mergeList(left.slice(1), right.slice(1), [
+ 'ellipse(',
+ scope.mergeNonNegativeSizePair,
+ ' at ',
+ scope.mergeOffsetList,
+ ')']);
+ }
+ if (left[0] == 'polygon' && left[1] == right[1]) {
+ return scope.mergeList(left.slice(2), right.slice(2), [
+ 'polygon(',
+ left[1],
+ mergeSizePairList,
+ ')']);
+ }
+ }
+
+ scope.addPropertiesHandler(parseShape, mergeShapes, ['shape-outside']);
+
+})(webAnimations1);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/tick.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/tick.js
new file mode 100644
index 00000000000..08b0a140909
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/tick.js
@@ -0,0 +1,181 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+(function(shared, scope, testing) {
+ var originalRequestAnimationFrame = window.requestAnimationFrame;
+ var rafCallbacks = [];
+ var rafId = 0;
+ window.requestAnimationFrame = function(f) {
+ var id = rafId++;
+ if (rafCallbacks.length == 0 && !WEB_ANIMATIONS_TESTING) {
+ originalRequestAnimationFrame(processRafCallbacks);
+ }
+ rafCallbacks.push([id, f]);
+ return id;
+ };
+
+ window.cancelAnimationFrame = function(id) {
+ rafCallbacks.forEach(function(entry) {
+ if (entry[0] == id) {
+ entry[1] = function() {};
+ }
+ });
+ };
+
+ function processRafCallbacks(t) {
+ var processing = rafCallbacks;
+ rafCallbacks = [];
+ if (t < timeline.currentTime)
+ t = timeline.currentTime;
+ timeline._animations.sort(compareAnimations);
+ timeline._animations = tick(t, true, timeline._animations)[0];
+ processing.forEach(function(entry) { entry[1](t); });
+ applyPendingEffects();
+ _now = undefined;
+ }
+
+ function compareAnimations(leftAnimation, rightAnimation) {
+ return leftAnimation._sequenceNumber - rightAnimation._sequenceNumber;
+ }
+
+ function InternalTimeline() {
+ this._animations = [];
+ // Android 4.3 browser has window.performance, but not window.performance.now
+ this.currentTime = window.performance && performance.now ? performance.now() : 0;
+ };
+
+ InternalTimeline.prototype = {
+ _play: function(effect) {
+ effect._timing = shared.normalizeTimingInput(effect.timing);
+ var animation = new scope.Animation(effect);
+ animation._idle = false;
+ animation._timeline = this;
+ this._animations.push(animation);
+ scope.restart();
+ scope.applyDirtiedAnimation(animation);
+ return animation;
+ }
+ };
+
+ var _now = undefined;
+
+ if (WEB_ANIMATIONS_TESTING) {
+ var now = function() { return timeline.currentTime; };
+ } else {
+ var now = function() {
+ if (_now == undefined)
+ _now = window.performance && performance.now ? performance.now() : Date.now();
+ return _now;
+ };
+ }
+
+ var ticking = false;
+ var hasRestartedThisFrame = false;
+
+ scope.restart = function() {
+ if (!ticking) {
+ ticking = true;
+ requestAnimationFrame(function() {});
+ hasRestartedThisFrame = true;
+ }
+ return hasRestartedThisFrame;
+ };
+
+ // RAF is supposed to be the last script to occur before frame rendering but not
+ // all browsers behave like this. This function is for synchonously updating an
+ // animation's effects whenever its state is mutated by script to work around
+ // incorrect script execution ordering by the browser.
+ scope.applyDirtiedAnimation = function(animation) {
+ if (inTick) {
+ return;
+ }
+ animation._markTarget();
+ var animations = animation._targetAnimations();
+ animations.sort(compareAnimations);
+ var inactiveAnimations = tick(scope.timeline.currentTime, false, animations.slice())[1];
+ inactiveAnimations.forEach(function(animation) {
+ var index = timeline._animations.indexOf(animation);
+ if (index !== -1) {
+ timeline._animations.splice(index, 1);
+ }
+ });
+ applyPendingEffects();
+ };
+
+ var pendingEffects = [];
+ function applyPendingEffects() {
+ pendingEffects.forEach(function(f) { f(); });
+ pendingEffects.length = 0;
+ }
+
+ var t60hz = 1000 / 60;
+
+ var inTick = false;
+ function tick(t, isAnimationFrame, updatingAnimations) {
+ inTick = true;
+ hasRestartedThisFrame = false;
+ var timeline = scope.timeline;
+
+ timeline.currentTime = t;
+ ticking = false;
+
+ var newPendingClears = [];
+ var newPendingEffects = [];
+ var activeAnimations = [];
+ var inactiveAnimations = [];
+ updatingAnimations.forEach(function(animation) {
+ animation._tick(t, isAnimationFrame);
+
+ if (!animation._inEffect) {
+ newPendingClears.push(animation._effect);
+ animation._unmarkTarget();
+ } else {
+ newPendingEffects.push(animation._effect);
+ animation._markTarget();
+ }
+
+ if (animation._needsTick)
+ ticking = true;
+
+ var alive = animation._inEffect || animation._needsTick;
+ animation._inTimeline = alive;
+ if (alive) {
+ activeAnimations.push(animation);
+ } else {
+ inactiveAnimations.push(animation);
+ }
+ });
+
+ // FIXME: Should remove dupliactes from pendingEffects.
+ pendingEffects.push.apply(pendingEffects, newPendingClears);
+ pendingEffects.push.apply(pendingEffects, newPendingEffects);
+
+ if (ticking)
+ requestAnimationFrame(function() {});
+
+ inTick = false;
+ return [activeAnimations, inactiveAnimations];
+ };
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.tick = function(t) { timeline.currentTime = t; processRafCallbacks(t); };
+ testing.isTicking = function() { return ticking; };
+ testing.setTicking = function(newVal) { ticking = newVal; };
+ }
+
+ var timeline = new InternalTimeline();
+ scope.timeline = timeline;
+
+})(webAnimationsShared, webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timeline.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timeline.js
new file mode 100644
index 00000000000..2b213b5550e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timeline.js
@@ -0,0 +1,101 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+(function(shared, scope, testing) {
+ var originalRequestAnimationFrame = window.requestAnimationFrame;
+ window.requestAnimationFrame = function(f) {
+ return originalRequestAnimationFrame(function(x) {
+ scope.timeline._updateAnimationsPromises();
+ f(x);
+ scope.timeline._updateAnimationsPromises();
+ });
+ };
+
+ scope.AnimationTimeline = function() {
+ this._animations = [];
+ this.currentTime = undefined;
+ };
+
+ scope.AnimationTimeline.prototype = {
+ getAnimations: function() {
+ this._discardAnimations();
+ return this._animations.slice();
+ },
+ _updateAnimationsPromises: function() {
+ scope.animationsWithPromises = scope.animationsWithPromises.filter(function(animation) {
+ return animation._updatePromises();
+ });
+ },
+ _discardAnimations: function() {
+ this._updateAnimationsPromises();
+ this._animations = this._animations.filter(function(animation) {
+ return animation.playState != 'finished' && animation.playState != 'idle';
+ });
+ },
+ _play: function(effect) {
+ var animation = new scope.Animation(effect, this);
+ this._animations.push(animation);
+ scope.restartWebAnimationsNextTick();
+ // Use animation._animation.play() here, NOT animation.play().
+ //
+ // Timeline.play calls new scope.Animation(effect) which (indirectly) calls Timeline.play on
+ // effect's children, and Animation.play is also recursive. We only need to call play on each
+ // animation in the tree once.
+ animation._updatePromises();
+ animation._animation.play();
+ animation._updatePromises();
+ return animation;
+ },
+ play: function(effect) {
+ if (effect) {
+ effect.remove();
+ }
+ return this._play(effect);
+ }
+ };
+
+ var ticking = false;
+
+ scope.restartWebAnimationsNextTick = function() {
+ if (!ticking) {
+ ticking = true;
+ requestAnimationFrame(webAnimationsNextTick);
+ }
+ };
+
+ function webAnimationsNextTick(t) {
+ var timeline = scope.timeline;
+ timeline.currentTime = t;
+ timeline._discardAnimations();
+ if (timeline._animations.length == 0)
+ ticking = false;
+ else
+ requestAnimationFrame(webAnimationsNextTick);
+ }
+
+ var timeline = new scope.AnimationTimeline();
+ scope.timeline = timeline;
+
+ try {
+ Object.defineProperty(window.document, 'timeline', {
+ configurable: true,
+ get: function() { return timeline; }
+ });
+ } catch (e) { }
+ try {
+ window.document.timeline = timeline;
+ } catch (e) { }
+
+})(webAnimationsShared, webAnimationsNext, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timing-utilities.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timing-utilities.js
new file mode 100644
index 00000000000..2f16f3b1598
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/timing-utilities.js
@@ -0,0 +1,420 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, testing) {
+
+ var fills = 'backwards|forwards|both|none'.split('|');
+ var directions = 'reverse|alternate|alternate-reverse'.split('|');
+ var linear = function(x) { return x; };
+
+ function cloneTimingInput(timingInput) {
+ if (typeof timingInput == 'number') {
+ return timingInput;
+ }
+ var clone = {};
+ for (var m in timingInput) {
+ clone[m] = timingInput[m];
+ }
+ return clone;
+ }
+
+ function AnimationEffectTiming() {
+ this._delay = 0;
+ this._endDelay = 0;
+ this._fill = 'none';
+ this._iterationStart = 0;
+ this._iterations = 1;
+ this._duration = 0;
+ this._playbackRate = 1;
+ this._direction = 'normal';
+ this._easing = 'linear';
+ this._easingFunction = linear;
+ }
+
+ function isInvalidTimingDeprecated() {
+ return shared.isDeprecated('Invalid timing inputs', '2016-03-02', 'TypeError exceptions will be thrown instead.', true);
+ }
+
+ AnimationEffectTiming.prototype = {
+ _setMember: function(member, value) {
+ this['_' + member] = value;
+ if (this._effect) {
+ this._effect._timingInput[member] = value;
+ this._effect._timing = shared.normalizeTimingInput(this._effect._timingInput);
+ this._effect.activeDuration = shared.calculateActiveDuration(this._effect._timing);
+ if (this._effect._animation) {
+ this._effect._animation._rebuildUnderlyingAnimation();
+ }
+ }
+ },
+ get playbackRate() {
+ return this._playbackRate;
+ },
+ set delay(value) {
+ this._setMember('delay', value);
+ },
+ get delay() {
+ return this._delay;
+ },
+ set endDelay(value) {
+ this._setMember('endDelay', value);
+ },
+ get endDelay() {
+ return this._endDelay;
+ },
+ set fill(value) {
+ this._setMember('fill', value);
+ },
+ get fill() {
+ return this._fill;
+ },
+ set iterationStart(value) {
+ if ((isNaN(value) || value < 0) && isInvalidTimingDeprecated()) {
+ throw new TypeError('iterationStart must be a non-negative number, received: ' + timing.iterationStart);
+ }
+ this._setMember('iterationStart', value);
+ },
+ get iterationStart() {
+ return this._iterationStart;
+ },
+ set duration(value) {
+ if (value != 'auto' && (isNaN(value) || value < 0) && isInvalidTimingDeprecated()) {
+ throw new TypeError('duration must be non-negative or auto, received: ' + value);
+ }
+ this._setMember('duration', value);
+ },
+ get duration() {
+ return this._duration;
+ },
+ set direction(value) {
+ this._setMember('direction', value);
+ },
+ get direction() {
+ return this._direction;
+ },
+ set easing(value) {
+ this._easingFunction = parseEasingFunction(normalizeEasing(value));
+ this._setMember('easing', value);
+ },
+ get easing() {
+ return this._easing;
+ },
+ set iterations(value) {
+ if ((isNaN(value) || value < 0) && isInvalidTimingDeprecated()) {
+ throw new TypeError('iterations must be non-negative, received: ' + value);
+ }
+ this._setMember('iterations', value);
+ },
+ get iterations() {
+ return this._iterations;
+ }
+ };
+
+ function makeTiming(timingInput, forGroup, effect) {
+ var timing = new AnimationEffectTiming();
+ if (forGroup) {
+ timing.fill = 'both';
+ timing.duration = 'auto';
+ }
+ if (typeof timingInput == 'number' && !isNaN(timingInput)) {
+ timing.duration = timingInput;
+ } else if (timingInput !== undefined) {
+ Object.getOwnPropertyNames(timingInput).forEach(function(property) {
+ if (timingInput[property] != 'auto') {
+ if (typeof timing[property] == 'number' || property == 'duration') {
+ if (typeof timingInput[property] != 'number' || isNaN(timingInput[property])) {
+ return;
+ }
+ }
+ if ((property == 'fill') && (fills.indexOf(timingInput[property]) == -1)) {
+ return;
+ }
+ if ((property == 'direction') && (directions.indexOf(timingInput[property]) == -1)) {
+ return;
+ }
+ if (property == 'playbackRate' && timingInput[property] !== 1 && shared.isDeprecated('AnimationEffectTiming.playbackRate', '2014-11-28', 'Use Animation.playbackRate instead.')) {
+ return;
+ }
+ timing[property] = timingInput[property];
+ }
+ });
+ }
+ return timing;
+ }
+
+ function numericTimingToObject(timingInput) {
+ if (typeof timingInput == 'number') {
+ if (isNaN(timingInput)) {
+ timingInput = { duration: 0 };
+ } else {
+ timingInput = { duration: timingInput };
+ }
+ }
+ return timingInput;
+ }
+
+ function normalizeTimingInput(timingInput, forGroup) {
+ timingInput = shared.numericTimingToObject(timingInput);
+ return makeTiming(timingInput, forGroup);
+ }
+
+ function cubic(a, b, c, d) {
+ if (a < 0 || a > 1 || c < 0 || c > 1) {
+ return linear;
+ }
+ return function(x) {
+ if (x <= 0) {
+ var start_gradient = 0;
+ if (a > 0)
+ start_gradient = b / a;
+ else if (!b && c > 0)
+ start_gradient = d / c;
+ return start_gradient * x;
+ }
+ if (x >= 1) {
+ var end_gradient = 0;
+ if (c < 1)
+ end_gradient = (d - 1) / (c - 1);
+ else if (c == 1 && a < 1)
+ end_gradient = (b - 1) / (a - 1);
+ return 1 + end_gradient * (x - 1);
+ }
+
+ var start = 0, end = 1;
+ while (start < end) {
+ var mid = (start + end) / 2;
+ function f(a, b, m) { return 3 * a * (1 - m) * (1 - m) * m + 3 * b * (1 - m) * m * m + m * m * m};
+ var xEst = f(a, c, mid);
+ if (Math.abs(x - xEst) < 0.00001) {
+ return f(b, d, mid);
+ }
+ if (xEst < x) {
+ start = mid;
+ } else {
+ end = mid;
+ }
+ }
+ return f(b, d, mid);
+ }
+ }
+
+ var Start = 1;
+ var Middle = 0.5;
+ var End = 0;
+
+ function step(count, pos) {
+ return function(x) {
+ if (x >= 1) {
+ return 1;
+ }
+ var stepSize = 1 / count;
+ x += pos * stepSize;
+ return x - x % stepSize;
+ }
+ }
+
+ var presets = {
+ 'ease': cubic(0.25, 0.1, 0.25, 1),
+ 'ease-in': cubic(0.42, 0, 1, 1),
+ 'ease-out': cubic(0, 0, 0.58, 1),
+ 'ease-in-out': cubic(0.42, 0, 0.58, 1),
+ 'step-start': step(1, Start),
+ 'step-middle': step(1, Middle),
+ 'step-end': step(1, End)
+ };
+
+ var styleForCleaning = null;
+ var numberString = '\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*';
+ var cubicBezierRe = new RegExp('cubic-bezier\\(' + numberString + ',' + numberString + ',' + numberString + ',' + numberString + '\\)');
+ var stepRe = /steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/;
+
+ function normalizeEasing(easing) {
+ if (!styleForCleaning) {
+ styleForCleaning = document.createElement('div').style;
+ }
+ styleForCleaning.animationTimingFunction = '';
+ styleForCleaning.animationTimingFunction = easing;
+ var normalizedEasing = styleForCleaning.animationTimingFunction;
+ if (normalizedEasing == '' && isInvalidTimingDeprecated()) {
+ throw new TypeError(easing + ' is not a valid value for easing');
+ }
+ return normalizedEasing;
+ }
+
+ function parseEasingFunction(normalizedEasing) {
+ if (normalizedEasing == 'linear') {
+ return linear;
+ }
+ var cubicData = cubicBezierRe.exec(normalizedEasing);
+ if (cubicData) {
+ return cubic.apply(this, cubicData.slice(1).map(Number));
+ }
+ var stepData = stepRe.exec(normalizedEasing);
+ if (stepData) {
+ return step(Number(stepData[1]), {'start': Start, 'middle': Middle, 'end': End}[stepData[2]]);
+ }
+ var preset = presets[normalizedEasing];
+ if (preset) {
+ return preset;
+ }
+ // At this point none of our parse attempts succeeded; the easing is invalid.
+ // Fall back to linear in the interest of not crashing the page.
+ return linear;
+ }
+
+ function calculateActiveDuration(timing) {
+ return Math.abs(repeatedDuration(timing) / timing.playbackRate);
+ }
+
+ function repeatedDuration(timing) {
+ // https://w3c.github.io/web-animations/#calculating-the-active-duration
+ if (timing.duration === 0 || timing.iterations === 0) {
+ return 0;
+ }
+ return timing.duration * timing.iterations;
+ }
+
+ var PhaseNone = 0;
+ var PhaseBefore = 1;
+ var PhaseAfter = 2;
+ var PhaseActive = 3;
+
+ function calculatePhase(activeDuration, localTime, timing) {
+ // https://w3c.github.io/web-animations/#animation-effect-phases-and-states
+ if (localTime == null) {
+ return PhaseNone;
+ }
+
+ var endTime = timing.delay + activeDuration + timing.endDelay;
+ if (localTime < Math.min(timing.delay, endTime)) {
+ return PhaseBefore;
+ }
+ if (localTime >= Math.min(timing.delay + activeDuration, endTime)) {
+ return PhaseAfter;
+ }
+
+ return PhaseActive;
+ }
+
+ function calculateActiveTime(activeDuration, fillMode, localTime, phase, delay) {
+ // https://w3c.github.io/web-animations/#calculating-the-active-time
+ switch (phase) {
+ case PhaseBefore:
+ if (fillMode == 'backwards' || fillMode == 'both')
+ return 0;
+ return null;
+ case PhaseActive:
+ return localTime - delay;
+ case PhaseAfter:
+ if (fillMode == 'forwards' || fillMode == 'both')
+ return activeDuration;
+ return null;
+ case PhaseNone:
+ return null;
+ }
+ }
+
+ function calculateOverallProgress(iterationDuration, phase, iterations, activeTime, iterationStart) {
+ // https://w3c.github.io/web-animations/#calculating-the-overall-progress
+ var overallProgress = iterationStart;
+ if (iterationDuration === 0) {
+ if (phase !== PhaseBefore) {
+ overallProgress += iterations;
+ }
+ } else {
+ overallProgress += activeTime / iterationDuration;
+ }
+ return overallProgress;
+ }
+
+ function calculateSimpleIterationProgress(overallProgress, iterationStart, phase, iterations, activeTime, iterationDuration) {
+ // https://w3c.github.io/web-animations/#calculating-the-simple-iteration-progress
+
+ var simpleIterationProgress = (overallProgress === Infinity) ? iterationStart % 1 : overallProgress % 1;
+ if (simpleIterationProgress === 0 && phase === PhaseAfter && iterations !== 0 &&
+ (activeTime !== 0 || iterationDuration === 0)) {
+ simpleIterationProgress = 1;
+ }
+ return simpleIterationProgress;
+ }
+
+ function calculateCurrentIteration(phase, iterations, simpleIterationProgress, overallProgress) {
+ // https://w3c.github.io/web-animations/#calculating-the-current-iteration
+ if (phase === PhaseAfter && iterations === Infinity) {
+ return Infinity;
+ }
+ if (simpleIterationProgress === 1) {
+ return Math.floor(overallProgress) - 1;
+ }
+ return Math.floor(overallProgress);
+ }
+
+ function calculateDirectedProgress(playbackDirection, currentIteration, simpleIterationProgress) {
+ // https://w3c.github.io/web-animations/#calculating-the-directed-progress
+ var currentDirection = playbackDirection;
+ if (playbackDirection !== 'normal' && playbackDirection !== 'reverse') {
+ var d = currentIteration;
+ if (playbackDirection === 'alternate-reverse') {
+ d += 1;
+ }
+ currentDirection = 'normal';
+ if (d !== Infinity && d % 2 !== 0) {
+ currentDirection = 'reverse';
+ }
+ }
+ if (currentDirection === 'normal') {
+ return simpleIterationProgress;
+ }
+ return 1 - simpleIterationProgress;
+ }
+
+ function calculateIterationProgress(activeDuration, localTime, timing) {
+ var phase = calculatePhase(activeDuration, localTime, timing);
+ var activeTime = calculateActiveTime(activeDuration, timing.fill, localTime, phase, timing.delay);
+ if (activeTime === null)
+ return null;
+
+ var overallProgress = calculateOverallProgress(timing.duration, phase, timing.iterations, activeTime, timing.iterationStart);
+ var simpleIterationProgress = calculateSimpleIterationProgress(overallProgress, timing.iterationStart, phase, timing.iterations, activeTime, timing.duration);
+ var currentIteration = calculateCurrentIteration(phase, timing.iterations, simpleIterationProgress, overallProgress);
+ var directedProgress = calculateDirectedProgress(timing.direction, currentIteration, simpleIterationProgress);
+
+ // https://w3c.github.io/web-animations/#calculating-the-transformed-progress
+ // https://w3c.github.io/web-animations/#calculating-the-iteration-progress
+ return timing._easingFunction(directedProgress);
+ }
+
+ shared.cloneTimingInput = cloneTimingInput;
+ shared.makeTiming = makeTiming;
+ shared.numericTimingToObject = numericTimingToObject;
+ shared.normalizeTimingInput = normalizeTimingInput;
+ shared.calculateActiveDuration = calculateActiveDuration;
+ shared.calculateIterationProgress = calculateIterationProgress;
+ shared.calculatePhase = calculatePhase;
+ shared.normalizeEasing = normalizeEasing;
+ shared.parseEasingFunction = parseEasingFunction;
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.normalizeTimingInput = normalizeTimingInput;
+ testing.normalizeEasing = normalizeEasing;
+ testing.parseEasingFunction = parseEasingFunction;
+ testing.calculateActiveDuration = calculateActiveDuration;
+ testing.calculatePhase = calculatePhase;
+ testing.PhaseNone = PhaseNone;
+ testing.PhaseBefore = PhaseBefore;
+ testing.PhaseActive = PhaseActive;
+ testing.PhaseAfter = PhaseAfter;
+ }
+
+})(webAnimationsShared, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/transform-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/transform-handler.js
new file mode 100644
index 00000000000..c6b4d934ebb
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/transform-handler.js
@@ -0,0 +1,275 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ // This returns a function for converting transform functions to equivalent
+ // primitive functions, which will take an array of values from the
+ // derivative type and fill in the blanks (underscores) with them.
+ var _ = null;
+ function cast(pattern) {
+ return function(contents) {
+ var i = 0;
+ return pattern.map(function(x) { return x === _ ? contents[i++] : x; });
+ }
+ }
+
+ function id(x) { return x; }
+
+ var Opx = {px: 0};
+ var Odeg = {deg: 0};
+
+ // type: [argTypes, convertTo3D, convertTo2D]
+ // In the argument types string, lowercase characters represent optional arguments
+ var transformFunctions = {
+ matrix: ['NNNNNN', [_, _, 0, 0, _, _, 0, 0, 0, 0, 1, 0, _, _, 0, 1], id],
+ matrix3d: ['NNNNNNNNNNNNNNNN', id],
+ rotate: ['A'],
+ rotatex: ['A'],
+ rotatey: ['A'],
+ rotatez: ['A'],
+ rotate3d: ['NNNA'],
+ perspective: ['L'],
+ scale: ['Nn', cast([_, _, 1]), id],
+ scalex: ['N', cast([_, 1, 1]), cast([_, 1])],
+ scaley: ['N', cast([1, _, 1]), cast([1, _])],
+ scalez: ['N', cast([1, 1, _])],
+ scale3d: ['NNN', id],
+ skew: ['Aa', null, id],
+ skewx: ['A', null, cast([_, Odeg])],
+ skewy: ['A', null, cast([Odeg, _])],
+ translate: ['Tt', cast([_, _, Opx]), id],
+ translatex: ['T', cast([_, Opx, Opx]), cast([_, Opx])],
+ translatey: ['T', cast([Opx, _, Opx]), cast([Opx, _])],
+ translatez: ['L', cast([Opx, Opx, _])],
+ translate3d: ['TTL', id],
+ };
+
+ function parseTransform(string) {
+ string = string.toLowerCase().trim();
+ if (string == 'none')
+ return [];
+ // FIXME: Using a RegExp means calcs won't work here
+ var transformRegExp = /\s*(\w+)\(([^)]*)\)/g;
+ var result = [];
+ var match;
+ var prevLastIndex = 0;
+ while (match = transformRegExp.exec(string)) {
+ if (match.index != prevLastIndex)
+ return;
+ prevLastIndex = match.index + match[0].length;
+ var functionName = match[1];
+ var functionData = transformFunctions[functionName];
+ if (!functionData)
+ return;
+ var args = match[2].split(',');
+ var argTypes = functionData[0];
+ if (argTypes.length < args.length)
+ return;
+
+ var parsedArgs = [];
+ for (var i = 0; i < argTypes.length; i++) {
+ var arg = args[i];
+ var type = argTypes[i];
+ var parsedArg;
+ if (!arg)
+ parsedArg = ({a: Odeg,
+ n: parsedArgs[0],
+ t: Opx})[type];
+ else
+ parsedArg = ({A: function(s) { return s.trim() == '0' ? Odeg : scope.parseAngle(s); },
+ N: scope.parseNumber,
+ T: scope.parseLengthOrPercent,
+ L: scope.parseLength})[type.toUpperCase()](arg);
+ if (parsedArg === undefined)
+ return;
+ parsedArgs.push(parsedArg);
+ }
+ result.push({t: functionName, d: parsedArgs});
+
+ if (transformRegExp.lastIndex == string.length)
+ return result;
+ }
+ };
+
+ function numberToLongString(x) {
+ return x.toFixed(6).replace('.000000', '');
+ }
+
+ function mergeMatrices(left, right) {
+ if (left.decompositionPair !== right) {
+ left.decompositionPair = right;
+ var leftArgs = scope.makeMatrixDecomposition(left);
+ }
+ if (right.decompositionPair !== left) {
+ right.decompositionPair = left;
+ var rightArgs = scope.makeMatrixDecomposition(right);
+ }
+ if (leftArgs[0] == null || rightArgs[0] == null)
+ return [[false], [true], function(x) { return x ? right[0].d : left[0].d; }];
+ leftArgs[0].push(0);
+ rightArgs[0].push(1);
+ return [
+ leftArgs,
+ rightArgs,
+ function(list) {
+ var quat = scope.quat(leftArgs[0][3], rightArgs[0][3], list[5]);
+ var mat = scope.composeMatrix(list[0], list[1], list[2], quat, list[4]);
+ var stringifiedArgs = mat.map(numberToLongString).join(',');
+ return stringifiedArgs;
+ }
+ ];
+ }
+
+ function typeTo2D(type) {
+ return type.replace(/[xy]/, '');
+ }
+
+ function typeTo3D(type) {
+ return type.replace(/(x|y|z|3d)?$/, '3d');
+ }
+
+ function mergeTransforms(left, right) {
+ var matrixModulesLoaded = scope.makeMatrixDecomposition && true;
+
+ var flipResults = false;
+ if (!left.length || !right.length) {
+ if (!left.length) {
+ flipResults = true;
+ left = right;
+ right = [];
+ }
+ for (var i = 0; i < left.length; i++) {
+ var type = left[i].t;
+ var args = left[i].d;
+ var defaultValue = type.substr(0, 5) == 'scale' ? 1 : 0;
+ right.push({t: type, d: args.map(function(arg) {
+ if (typeof arg == 'number')
+ return defaultValue;
+ var result = {};
+ for (var unit in arg)
+ result[unit] = defaultValue;
+ return result;
+ })});
+ }
+ }
+
+ var isMatrixOrPerspective = function(lt, rt) {
+ return ((lt == 'perspective') && (rt == 'perspective')) ||
+ ((lt == 'matrix' || lt == 'matrix3d') && (rt == 'matrix' || rt == 'matrix3d'));
+ };
+ var leftResult = [];
+ var rightResult = [];
+ var types = [];
+
+ if (left.length != right.length) {
+ if (!matrixModulesLoaded)
+ return;
+ var merged = mergeMatrices(left, right);
+ leftResult = [merged[0]];
+ rightResult = [merged[1]];
+ types = [['matrix', [merged[2]]]];
+ } else {
+ for (var i = 0; i < left.length; i++) {
+ var leftType = left[i].t;
+ var rightType = right[i].t;
+ var leftArgs = left[i].d;
+ var rightArgs = right[i].d;
+
+ var leftFunctionData = transformFunctions[leftType];
+ var rightFunctionData = transformFunctions[rightType];
+
+ var type;
+ if (isMatrixOrPerspective(leftType, rightType)) {
+ if (!matrixModulesLoaded)
+ return;
+ var merged = mergeMatrices([left[i]], [right[i]]);
+ leftResult.push(merged[0]);
+ rightResult.push(merged[1]);
+ types.push(['matrix', [merged[2]]]);
+ continue;
+ } else if (leftType == rightType) {
+ type = leftType;
+ } else if (leftFunctionData[2] && rightFunctionData[2] && typeTo2D(leftType) == typeTo2D(rightType)) {
+ type = typeTo2D(leftType);
+ leftArgs = leftFunctionData[2](leftArgs);
+ rightArgs = rightFunctionData[2](rightArgs);
+ } else if (leftFunctionData[1] && rightFunctionData[1] && typeTo3D(leftType) == typeTo3D(rightType)) {
+ type = typeTo3D(leftType);
+ leftArgs = leftFunctionData[1](leftArgs);
+ rightArgs = rightFunctionData[1](rightArgs);
+ } else {
+ if (!matrixModulesLoaded)
+ return;
+ var merged = mergeMatrices(left, right);
+ leftResult = [merged[0]];
+ rightResult = [merged[1]];
+ types = [['matrix', [merged[2]]]];
+ break;
+ }
+
+ var leftArgsCopy = [];
+ var rightArgsCopy = [];
+ var stringConversions = [];
+ for (var j = 0; j < leftArgs.length; j++) {
+ var merge = typeof leftArgs[j] == 'number' ? scope.mergeNumbers : scope.mergeDimensions;
+ var merged = merge(leftArgs[j], rightArgs[j]);
+ leftArgsCopy[j] = merged[0];
+ rightArgsCopy[j] = merged[1];
+ stringConversions.push(merged[2]);
+ }
+ leftResult.push(leftArgsCopy);
+ rightResult.push(rightArgsCopy);
+ types.push([type, stringConversions]);
+ }
+ }
+
+ if (flipResults) {
+ var tmp = leftResult;
+ leftResult = rightResult;
+ rightResult = tmp;
+ }
+
+ return [leftResult, rightResult, function(list) {
+ return list.map(function(args, i) {
+ var stringifiedArgs = args.map(function(arg, j) {
+ return types[i][1][j](arg);
+ }).join(',');
+ if (types[i][0] == 'matrix' && stringifiedArgs.split(',').length == 16)
+ types[i][0] = 'matrix3d';
+ return types[i][0] + '(' + stringifiedArgs + ')';
+
+ }).join(' ');
+ }];
+ }
+
+ scope.addPropertiesHandler(parseTransform, mergeTransforms, ['transform']);
+
+ scope.transformToSvgMatrix = function(string) {
+ // matrix(<a> <b> <c> <d> <e> <f>)
+ var mat = scope.transformListToMatrix(parseTransform(string));
+ return 'matrix(' +
+ numberToLongString(mat[0]) + ' ' + // <a>
+ numberToLongString(mat[1]) + ' ' + // <b>
+ numberToLongString(mat[4]) + ' ' + // <c>
+ numberToLongString(mat[5]) + ' ' + // <d>
+ numberToLongString(mat[12]) + ' ' + // <e>
+ numberToLongString(mat[13]) + // <f>
+ ')';
+ };
+
+ if (WEB_ANIMATIONS_TESTING)
+ testing.parseTransform = parseTransform;
+
+})(webAnimations1, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/visibility-handler.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/visibility-handler.js
new file mode 100644
index 00000000000..53f29535548
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/visibility-handler.js
@@ -0,0 +1,29 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(scope, testing) {
+
+ function merge(left, right) {
+ if (left != 'visible' && right != 'visible') return;
+ return [0, 1, function(x) {
+ if (x <= 0) return left;
+ if (x >= 1) return right;
+ return 'visible';
+ }];
+ }
+
+ scope.addPropertiesHandler(String, merge, ['visibility']);
+
+})(webAnimations1);
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-cancel-events.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-cancel-events.js
new file mode 100644
index 00000000000..3905496f480
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-cancel-events.js
@@ -0,0 +1,83 @@
+// Copyright 2016 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function() {
+
+ if (document.createElement('div').animate([]).oncancel !== undefined) {
+ return;
+ }
+
+ if (WEB_ANIMATIONS_TESTING) {
+ var now = function() { return webAnimations1.timeline.currentTime; };
+ } else if (window.performance && performance.now) {
+ var now = function() { return performance.now(); };
+ } else {
+ var now = function() { return Date.now(); };
+ }
+
+ var AnimationCancelEvent = function(target, currentTime, timelineTime) {
+ this.target = target;
+ this.currentTime = currentTime;
+ this.timelineTime = timelineTime;
+
+ this.type = 'cancel';
+ this.bubbles = false;
+ this.cancelable = false;
+ this.currentTarget = target;
+ this.defaultPrevented = false;
+ this.eventPhase = Event.AT_TARGET;
+ this.timeStamp = Date.now();
+ };
+
+ var originalElementAnimate = window.Element.prototype.animate;
+ window.Element.prototype.animate = function(effectInput, options) {
+ var animation = originalElementAnimate.call(this, effectInput, options);
+
+ animation._cancelHandlers = [];
+ animation.oncancel = null;
+
+ var originalCancel = animation.cancel;
+ animation.cancel = function() {
+ originalCancel.call(this);
+ var event = new AnimationCancelEvent(this, null, now());
+ var handlers = this._cancelHandlers.concat(this.oncancel ? [this.oncancel] : []);
+ setTimeout(function() {
+ handlers.forEach(function(handler) {
+ handler.call(event.target, event);
+ });
+ }, 0);
+ };
+
+ var originalAddEventListener = animation.addEventListener;
+ animation.addEventListener = function(type, handler) {
+ if (typeof handler == 'function' && type == 'cancel')
+ this._cancelHandlers.push(handler);
+ else
+ originalAddEventListener.call(this, type, handler);
+ };
+
+ var originalRemoveEventListener = animation.removeEventListener;
+ animation.removeEventListener = function(type, handler) {
+ if (type == 'cancel') {
+ var index = this._cancelHandlers.indexOf(handler);
+ if (index >= 0)
+ this._cancelHandlers.splice(index, 1);
+ } else {
+ originalRemoveEventListener.call(this, type, handler);
+ }
+ };
+
+ return animation;
+ };
+})();
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js
new file mode 100644
index 00000000000..c1b6ecdc574
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-bonus-object-form-keyframes.js
@@ -0,0 +1,63 @@
+// Copyright 2016 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared) {
+ // If the polyfill is being loaded in a context where Element.animate is
+ // supported but object-form syntax is not, then creating an animation
+ // using the new syntax will either have no effect or will throw an exception.
+ // In either case, we want to proceed to load this part of the polyfill.
+ //
+ // The test animation uses an opacity other than the one the element already
+ // has, and doesn't need to change during the animation for the test to work.
+ // After the test, the element's opacity will be left how we found it:
+ // - If the animation is not created, the test will leave the element's
+ // opacity untouched at originalOpacity.
+ // - If the animation is created, it will be cancelled, and leave the
+ // element's opacity at originalOpacity.
+ // - If the animation is somehow created and runs without being cancelled,
+ // when it finishes after 1ms, it will cease to have any effect (because
+ // fill is not specified), and opacity will again be left at originalOpacity.
+ var element = document.documentElement;
+ var animation = null;
+ var animated = false;
+ try {
+ var originalOpacity = getComputedStyle(element).getPropertyValue('opacity');
+ var testOpacity = originalOpacity == '0' ? '1' : '0';
+ animation = element.animate({'opacity': [testOpacity, testOpacity]},
+ {duration: 1});
+ animation.currentTime = 0;
+ animated = getComputedStyle(element).getPropertyValue('opacity') == testOpacity;
+ } catch (error) {
+ } finally {
+ if (animation)
+ animation.cancel();
+ }
+ if (animated) {
+ return;
+ }
+
+ var originalElementAnimate = window.Element.prototype.animate;
+ window.Element.prototype.animate = function(effectInput, options) {
+ if (window.Symbol && Symbol.iterator && Array.prototype.from && effectInput[Symbol.iterator]) {
+ // Handle custom iterables in most browsers by converting to an array
+ effectInput = Array.from(effectInput);
+ }
+
+ if (!Array.isArray(effectInput) && effectInput !== null) {
+ effectInput = shared.convertToArrayForm(effectInput);
+ }
+
+ return originalElementAnimate.call(this, effectInput, options);
+ };
+})(webAnimationsShared);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-next-animation.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-next-animation.js
new file mode 100644
index 00000000000..698532cd972
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/src/web-animations-next-animation.js
@@ -0,0 +1,383 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(shared, scope, testing) {
+ scope.animationsWithPromises = [];
+
+ scope.Animation = function(effect, timeline) {
+ this.id = '';
+ if (effect && effect._id) {
+ this.id = effect._id;
+ }
+ this.effect = effect;
+ if (effect) {
+ effect._animation = this;
+ }
+ if (!timeline) {
+ throw new Error('Animation with null timeline is not supported');
+ }
+ this._timeline = timeline;
+ this._sequenceNumber = shared.sequenceNumber++;
+ this._holdTime = 0;
+ this._paused = false;
+ this._isGroup = false;
+ this._animation = null;
+ this._childAnimations = [];
+ this._callback = null;
+ this._oldPlayState = 'idle';
+ this._rebuildUnderlyingAnimation();
+ // Animations are constructed in the idle state.
+ this._animation.cancel();
+ this._updatePromises();
+ };
+
+ scope.Animation.prototype = {
+ _updatePromises: function() {
+ var oldPlayState = this._oldPlayState;
+ var newPlayState = this.playState;
+ if (this._readyPromise && newPlayState !== oldPlayState) {
+ if (newPlayState == 'idle') {
+ this._rejectReadyPromise();
+ this._readyPromise = undefined;
+ } else if (oldPlayState == 'pending') {
+ this._resolveReadyPromise();
+ } else if (newPlayState == 'pending') {
+ this._readyPromise = undefined;
+ }
+ }
+ if (this._finishedPromise && newPlayState !== oldPlayState) {
+ if (newPlayState == 'idle') {
+ this._rejectFinishedPromise();
+ this._finishedPromise = undefined;
+ } else if (newPlayState == 'finished') {
+ this._resolveFinishedPromise();
+ } else if (oldPlayState == 'finished') {
+ this._finishedPromise = undefined;
+ }
+ }
+ this._oldPlayState = this.playState;
+ return (this._readyPromise || this._finishedPromise);
+ },
+ _rebuildUnderlyingAnimation: function() {
+ this._updatePromises();
+ var oldPlaybackRate;
+ var oldPaused;
+ var oldStartTime;
+ var oldCurrentTime;
+ var hadUnderlying = this._animation ? true : false;
+ if (hadUnderlying) {
+ oldPlaybackRate = this.playbackRate;
+ oldPaused = this._paused;
+ oldStartTime = this.startTime;
+ oldCurrentTime = this.currentTime;
+ this._animation.cancel();
+ this._animation._wrapper = null;
+ this._animation = null;
+ }
+
+ if (!this.effect || this.effect instanceof window.KeyframeEffect) {
+ this._animation = scope.newUnderlyingAnimationForKeyframeEffect(this.effect);
+ scope.bindAnimationForKeyframeEffect(this);
+ }
+ if (this.effect instanceof window.SequenceEffect || this.effect instanceof window.GroupEffect) {
+ this._animation = scope.newUnderlyingAnimationForGroup(this.effect);
+ scope.bindAnimationForGroup(this);
+ }
+ if (this.effect && this.effect._onsample) {
+ scope.bindAnimationForCustomEffect(this);
+ }
+ if (hadUnderlying) {
+ if (oldPlaybackRate != 1) {
+ this.playbackRate = oldPlaybackRate;
+ }
+ if (oldStartTime !== null) {
+ this.startTime = oldStartTime;
+ } else if (oldCurrentTime !== null) {
+ this.currentTime = oldCurrentTime;
+ } else if (this._holdTime !== null) {
+ this.currentTime = this._holdTime;
+ }
+ if (oldPaused) {
+ this.pause();
+ }
+ }
+ this._updatePromises();
+ },
+ _updateChildren: function() {
+ if (!this.effect || this.playState == 'idle')
+ return;
+
+ var offset = this.effect._timing.delay;
+ this._childAnimations.forEach(function(childAnimation) {
+ this._arrangeChildren(childAnimation, offset);
+ if (this.effect instanceof window.SequenceEffect)
+ offset += scope.groupChildDuration(childAnimation.effect);
+ }.bind(this));
+ },
+ _setExternalAnimation: function(animation) {
+ if (!this.effect || !this._isGroup)
+ return;
+ for (var i = 0; i < this.effect.children.length; i++) {
+ this.effect.children[i]._animation = animation;
+ this._childAnimations[i]._setExternalAnimation(animation);
+ }
+ },
+ _constructChildAnimations: function() {
+ if (!this.effect || !this._isGroup)
+ return;
+ var offset = this.effect._timing.delay;
+ this._removeChildAnimations();
+ this.effect.children.forEach(function(child) {
+ var childAnimation = scope.timeline._play(child);
+ this._childAnimations.push(childAnimation);
+ childAnimation.playbackRate = this.playbackRate;
+ if (this._paused)
+ childAnimation.pause();
+ child._animation = this.effect._animation;
+
+ this._arrangeChildren(childAnimation, offset);
+
+ if (this.effect instanceof window.SequenceEffect)
+ offset += scope.groupChildDuration(child);
+ }.bind(this));
+ },
+ _arrangeChildren: function(childAnimation, offset) {
+ if (this.startTime === null) {
+ childAnimation.currentTime = this.currentTime - offset / this.playbackRate;
+ } else if (childAnimation.startTime !== this.startTime + offset / this.playbackRate) {
+ childAnimation.startTime = this.startTime + offset / this.playbackRate;
+ }
+ },
+ get timeline() {
+ return this._timeline;
+ },
+ get playState() {
+ return this._animation ? this._animation.playState : 'idle';
+ },
+ get finished() {
+ if (!window.Promise) {
+ console.warn('Animation Promises require JavaScript Promise constructor');
+ return null;
+ }
+ if (!this._finishedPromise) {
+ if (scope.animationsWithPromises.indexOf(this) == -1) {
+ scope.animationsWithPromises.push(this);
+ }
+ this._finishedPromise = new Promise(
+ function(resolve, reject) {
+ this._resolveFinishedPromise = function() {
+ resolve(this);
+ };
+ this._rejectFinishedPromise = function() {
+ reject({type: DOMException.ABORT_ERR, name: 'AbortError'});
+ };
+ }.bind(this));
+ if (this.playState == 'finished') {
+ this._resolveFinishedPromise();
+ }
+ }
+ return this._finishedPromise;
+ },
+ get ready() {
+ if (!window.Promise) {
+ console.warn('Animation Promises require JavaScript Promise constructor');
+ return null;
+ }
+ if (!this._readyPromise) {
+ if (scope.animationsWithPromises.indexOf(this) == -1) {
+ scope.animationsWithPromises.push(this);
+ }
+ this._readyPromise = new Promise(
+ function(resolve, reject) {
+ this._resolveReadyPromise = function() {
+ resolve(this);
+ };
+ this._rejectReadyPromise = function() {
+ reject({type: DOMException.ABORT_ERR, name: 'AbortError'});
+ };
+ }.bind(this));
+ if (this.playState !== 'pending') {
+ this._resolveReadyPromise();
+ }
+ }
+ return this._readyPromise;
+ },
+ get onfinish() {
+ return this._animation.onfinish;
+ },
+ set onfinish(v) {
+ if (typeof v == 'function') {
+ this._animation.onfinish = (function(e) {
+ e.target = this;
+ v.call(this, e);
+ }).bind(this);
+ } else {
+ this._animation.onfinish = v;
+ }
+ },
+ get oncancel() {
+ return this._animation.oncancel;
+ },
+ set oncancel(v) {
+ if (typeof v == 'function') {
+ this._animation.oncancel = (function(e) {
+ e.target = this;
+ v.call(this, e);
+ }).bind(this);
+ } else {
+ this._animation.oncancel = v;
+ }
+ },
+ get currentTime() {
+ this._updatePromises();
+ var currentTime = this._animation.currentTime;
+ this._updatePromises();
+ return currentTime;
+ },
+ set currentTime(v) {
+ this._updatePromises();
+ this._animation.currentTime = isFinite(v) ? v : Math.sign(v) * Number.MAX_VALUE;
+ this._register();
+ this._forEachChild(function(child, offset) {
+ child.currentTime = v - offset;
+ });
+ this._updatePromises();
+ },
+ get startTime() {
+ return this._animation.startTime;
+ },
+ set startTime(v) {
+ this._updatePromises();
+ this._animation.startTime = isFinite(v) ? v : Math.sign(v) * Number.MAX_VALUE;
+ this._register();
+ this._forEachChild(function(child, offset) {
+ child.startTime = v + offset;
+ });
+ this._updatePromises();
+ },
+ get playbackRate() {
+ return this._animation.playbackRate;
+ },
+ set playbackRate(value) {
+ this._updatePromises();
+ var oldCurrentTime = this.currentTime;
+ this._animation.playbackRate = value;
+ this._forEachChild(function(childAnimation) {
+ childAnimation.playbackRate = value;
+ });
+ if (oldCurrentTime !== null) {
+ this.currentTime = oldCurrentTime;
+ }
+ this._updatePromises();
+ },
+ play: function() {
+ this._updatePromises();
+ this._paused = false;
+ this._animation.play();
+ if (this._timeline._animations.indexOf(this) == -1) {
+ this._timeline._animations.push(this);
+ }
+ this._register();
+ scope.awaitStartTime(this);
+ this._forEachChild(function(child) {
+ var time = child.currentTime;
+ child.play();
+ child.currentTime = time;
+ });
+ this._updatePromises();
+ },
+ pause: function() {
+ this._updatePromises();
+ if (this.currentTime) {
+ this._holdTime = this.currentTime;
+ }
+ this._animation.pause();
+ this._register();
+ this._forEachChild(function(child) {
+ child.pause();
+ });
+ this._paused = true;
+ this._updatePromises();
+ },
+ finish: function() {
+ this._updatePromises();
+ this._animation.finish();
+ this._register();
+ this._updatePromises();
+ },
+ cancel: function() {
+ this._updatePromises();
+ this._animation.cancel();
+ this._register();
+ this._removeChildAnimations();
+ this._updatePromises();
+ },
+ reverse: function() {
+ this._updatePromises();
+ var oldCurrentTime = this.currentTime;
+ this._animation.reverse();
+ this._forEachChild(function(childAnimation) {
+ childAnimation.reverse();
+ });
+ if (oldCurrentTime !== null) {
+ this.currentTime = oldCurrentTime;
+ }
+ this._updatePromises();
+ },
+ addEventListener: function(type, handler) {
+ var wrapped = handler;
+ if (typeof handler == 'function') {
+ wrapped = (function(e) {
+ e.target = this;
+ handler.call(this, e);
+ }).bind(this);
+ handler._wrapper = wrapped;
+ }
+ this._animation.addEventListener(type, wrapped);
+ },
+ removeEventListener: function(type, handler) {
+ this._animation.removeEventListener(type, (handler && handler._wrapper) || handler);
+ },
+ _removeChildAnimations: function() {
+ while (this._childAnimations.length)
+ this._childAnimations.pop().cancel();
+ },
+ _forEachChild: function(f) {
+ var offset = 0;
+ if (this.effect.children && this._childAnimations.length < this.effect.children.length)
+ this._constructChildAnimations();
+ this._childAnimations.forEach(function(child) {
+ f.call(this, child, offset);
+ if (this.effect instanceof window.SequenceEffect)
+ offset += child.effect.activeDuration;
+ }.bind(this));
+
+ if (this.playState == 'pending')
+ return;
+ var timing = this.effect._timing;
+ var t = this.currentTime;
+ if (t !== null)
+ t = shared.calculateIterationProgress(shared.calculateActiveDuration(timing), t, timing);
+ if (t == null || isNaN(t))
+ this._removeChildAnimations();
+ },
+ };
+
+ window.Animation = scope.Animation;
+
+ if (WEB_ANIMATIONS_TESTING) {
+ testing.webAnimationsNextAnimation = scope.Animation;
+ }
+
+})(webAnimationsShared, webAnimationsNext, webAnimationsTesting);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.html
new file mode 100644
index 00000000000..3580355ab12
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.html
@@ -0,0 +1 @@
+<script src="./web-animations-next-lite.min.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js
new file mode 100644
index 00000000000..965fcbb226c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js
@@ -0,0 +1,16 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+!function(a,b){var c={},d={},e={};!function(a,b){function c(a){if("number"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill="none",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction="normal",this._easing="linear",this._easingFunction=x}function e(){return a.isDeprecated("Invalid timing inputs","2016-03-02","TypeError exceptions will be thrown instead.",!0)}function f(b,c,e){var f=new d;return c&&(f.fill="both",f.duration="auto"),"number"!=typeof b||isNaN(b)?void 0!==b&&Object.getOwnPropertyNames(b).forEach(function(c){if("auto"!=b[c]){if(("number"==typeof f[c]||"duration"==c)&&("number"!=typeof b[c]||isNaN(b[c])))return;if("fill"==c&&-1==v.indexOf(b[c]))return;if("direction"==c&&-1==w.indexOf(b[c]))return;if("playbackRate"==c&&1!==b[c]&&a.isDeprecated("AnimationEffectTiming.playbackRate","2014-11-28","Use Animation.playbackRate instead."))return;f[c]=b[c]}}):f.duration=b,f}function g(a){return"number"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function h(b,c){return b=a.numericTimingToObject(b),f(b,c)}function i(a,b,c,d){return a<0||a>1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i<j;){var k=(i+j)/2,l=f(a,c,k);if(Math.abs(e-l)<1e-5)return f(b,d,k);l<e?i=k:j=k}return f(b,d,k)}}function j(a,b){return function(c){if(c>=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b<Math.min(c.delay,d)?H:b>=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g<f;g++)e={},e.offset="offset"in a?a.offset:1==f?1:g/(f-1),"easing"in a&&(e.easing=a.easing),"composite"in a&&(e.composite=a.composite),e[c]=d[g],b.push(e)}return b.sort(function(a,b){return a.offset-b.offset}),b}function g(b){function c(){var a=d.length;null==d[a-1].offset&&(d[a-1].offset=1),a>1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e<a;e++){var f=d[e].offset;if(null!=f){for(var g=1;g<e-b;g++)d[b+g].offset=c+(f-c)*g/(e-b);b=e,c=f}}}if(null==b)return[];window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||(b=f(b));for(var d=b.map(function(b){var c={};for(var d in b){var f=b[d];if("offset"==d){if(null!=f){if(f=Number(f),!isFinite(f))throw new TypeError("Keyframe offsets must be numbers.");if(f<0||f>1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i<d.length;i++){var j=d[i].offset;if(null!=j){if(j<h)throw new TypeError("Keyframes are not loosely sorted by offset. Sort or specify offsets.");h=j}else g=!1}return d=d.filter(function(a){return a.offset>=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g<h&&(a in b||console.warn("Web Animations: "+a+" "+f+" deprecated and will stop working on "+h.toDateString()+". "+d),b[a]=!0,1))},a.deprecated=function(b,c,d,e){var f=e?"are":"is";if(a.isDeprecated(b,c,d,e))throw new Error(b+" "+f+" no longer supported. "+d)}}(c),function(){if(document.documentElement.animate){var a=document.documentElement.animate([],0),b=!0;if(a&&(b=!1,"play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState".split("|").forEach(function(c){void 0===a[c]&&(b=!0)})),!b)return}!function(a,b,c){function d(a){for(var b={},c=0;c<a.length;c++)for(var d in a[c])if("offset"!=d&&"easing"!=d&&"composite"!=d){var e={offset:a[c].offset,easing:a[c].easing,value:a[c][d]};b[d]=b[d]||[],b[d].push(e)}for(var f in b){var g=b[f];if(0!=g[0].offset||1!=g[g.length-1].offset)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"Partial keyframes are not supported"}}return b}function e(c){var d=[];for(var e in c)for(var f=c[e],g=0;g<f.length-1;g++){var h=g,i=g+1,j=f[h].offset,k=f[i].offset,l=j,m=k;0==g&&(l=-1/0,0==k&&(i=h)),g==f.length-2&&(m=1/0,1==j&&(h=i)),d.push({applyFrom:l,applyTo:m,startOffset:f[h].offset,endOffset:f[i].offset,easingFunction:a.parseEasingFunction(f[h].easing),property:e,interpolation:b.propertyInterpolation(e,f[h].value,f[i].value)})}return d.sort(function(a,b){return a.startOffset-b.startOffset}),d}b.convertEffectInput=function(c){var f=a.normalizeKeyframes(c),g=d(f),h=e(g);return function(a,c){if(null!=c)h.filter(function(a){return c>=a.applyFrom&&c<a.applyTo}).forEach(function(d){var e=c-d.startOffset,f=d.endOffset-d.startOffset,g=0==f?0:d.easingFunction(e/f);b.apply(a,d.property,d.interpolation(g))});else for(var d in g)"offset"!=d&&"easing"!=d&&"composite"!=d&&b.clear(a,d)}}}(c,d),function(a,b,c){function d(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}function e(a,b,c){h[c]=h[c]||[],h[c].push([a,b])}function f(a,b,c){for(var f=0;f<c.length;f++){e(a,b,d(c[f]))}}function g(c,e,f){var g=c;/-/.test(c)&&!a.isDeprecated("Hyphenated property names","2016-03-22","Use camelCase instead.",!0)&&(g=d(c)),"initial"!=e&&"initial"!=f||("initial"==e&&(e=i[g]),"initial"==f&&(f=i[g]));for(var j=e==f?[]:h[g],k=0;j&&k<j.length;k++){var l=j[k][0](e),m=j[k][0](f);if(void 0!==l&&void 0!==m){var n=j[k][1](l,m);if(n){var o=b.Interpolation.apply(null,n);return function(a){return 0==a?e:1==a?f:o(a)}}}}return b.Interpolation(!1,!0,function(a){return a?f:e})}var h={};b.addPropertiesHandler=f;var i={backgroundColor:"transparent",backgroundPosition:"0% 0%",borderBottomColor:"currentColor",borderBottomLeftRadius:"0px",borderBottomRightRadius:"0px",borderBottomWidth:"3px",borderLeftColor:"currentColor",borderLeftWidth:"3px",borderRightColor:"currentColor",borderRightWidth:"3px",borderSpacing:"2px",borderTopColor:"currentColor",borderTopLeftRadius:"0px",borderTopRightRadius:"0px",borderTopWidth:"3px",bottom:"auto",clip:"rect(0px, 0px, 0px, 0px)",color:"black",fontSize:"100%",fontWeight:"400",height:"auto",left:"auto",letterSpacing:"normal",lineHeight:"120%",marginBottom:"0px",marginLeft:"0px",marginRight:"0px",marginTop:"0px",maxHeight:"none",maxWidth:"none",minHeight:"0px",minWidth:"0px",opacity:"1.0",outlineColor:"invert",outlineOffset:"0px",outlineWidth:"3px",paddingBottom:"0px",paddingLeft:"0px",paddingRight:"0px",paddingTop:"0px",right:"auto",strokeDasharray:"none",strokeDashoffset:"0px",textIndent:"0px",textShadow:"0px 0px 0px transparent",top:"auto",transform:"",verticalAlign:"0px",visibility:"visible",width:"auto",wordSpacing:"normal",zIndex:"auto"};b.propertyInterpolation=g}(c,d),function(a,b,c){function d(b){var c=a.calculateActiveDuration(b),d=function(d){return a.calculateIterationProgress(c,d,b)};return d._totalDuration=b.delay+c+b.endDelay,d}b.KeyframeEffect=function(c,e,f,g){var h,i=d(a.normalizeTimingInput(f)),j=b.convertEffectInput(e),k=function(){j(c,h)};return k._update=function(a){return null!==(h=i(a))},k._clear=function(){j(c,null)},k._hasSameTarget=function(a){return c===a},k._target=c,k._totalDuration=i._totalDuration,k._id=g,k}}(c,d),function(a,b){a.apply=function(b,c,d){b.style[a.propertyName(c)]=d},a.clear=function(b,c){b.style[a.propertyName(c)]=""}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f<a.length;f++)e.push(c(a[f],b[f],d));return e}throw"Mismatched interpolation arguments "+a+":"+b}a.Interpolation=function(a,b,d){return function(e){return d(c(a,b,e))}}}(d),function(a,b,c){a.sequenceNumber=0;var d=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type="finish",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()};b.Animation=function(b){this.id="",b&&b._id&&(this.id=b._id),this._sequenceNumber=a.sequenceNumber++,this._currentTime=0,this._startTime=null,this._paused=!1,this._playbackRate=1,this._inTimeline=!0,this._finishedFlag=!0,this.onfinish=null,this._finishHandlers=[],this._effect=b,this._inEffect=this._effect._update(0),this._idle=!0,this._currentTimePending=!1},b.Animation.prototype={_ensureAlive:function(){this.playbackRate<0&&0===this.currentTime?this._inEffect=this._effect._update(-1):this._inEffect=this._effect._update(this.currentTime),this._inTimeline||!this._inEffect&&this._finishedFlag||(this._inTimeline=!0,b.timeline._animations.push(this))},_tickCurrentTime:function(a,b){a!=this._currentTime&&(this._currentTime=a,this._isFinished&&!b&&(this._currentTime=this._playbackRate>0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a<q.currentTime&&(a=q.currentTime),q._animations.sort(e),q._animations=h(a,!0,q._animations)[0],b.forEach(function(b){b[1](a)}),g(),l=void 0}function e(a,b){return a._sequenceNumber-b._sequenceNumber}function f(){this._animations=[],this.currentTime=window.performance&&performance.now?performance.now():0}function g(){o.forEach(function(a){a()}),o.length=0}function h(a,c,d){p=!0,n=!1,b.timeline.currentTime=a,m=!1;var e=[],f=[],g=[],h=[];return d.forEach(function(b){b._tick(a,c),b._inEffect?(f.push(b._effect),b._markTarget()):(e.push(b._effect),b._unmarkTarget()),b._needsTick&&(m=!0);var d=b._inEffect||b._needsTick;b._inTimeline=d,d?g.push(b):h.push(b)}),o.push.apply(o,e),o.push.apply(o,f),m&&requestAnimationFrame(function(){}),p=!1,[g,h]}var i=window.requestAnimationFrame,j=[],k=0;window.requestAnimationFrame=function(a){var b=k++;return 0==j.length&&i(d),j.push([b,a]),b},window.cancelAnimationFrame=function(a){j.forEach(function(b){b[0]==a&&(b[1]=function(){})})},f.prototype={_play:function(c){c._timing=a.normalizeTimingInput(c.timing);var d=new b.Animation(c);return d._idle=!1,d._timeline=this,this._animations.push(d),b.restart(),b.applyDirtiedAnimation(d),d}};var l=void 0,m=!1,n=!1;b.restart=function(){return m||(m=!0,requestAnimationFrame(function(){}),n=!0),n},b.applyDirtiedAnimation=function(a){if(!p){a._markTarget();var c=a._targetAnimations();c.sort(e),h(b.timeline.currentTime,!1,c.slice())[1].forEach(function(a){var b=q._animations.indexOf(a);-1!==b&&q._animations.splice(b,1)}),g()}};var o=[],p=!1,q=new f;b.timeline=q}(c,d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;d<b.length&&(!/\s|,/.test(b[d])||0!=c);d++)if("("==b[d])c++;else if(")"==b[d]&&(c--,0==c&&d++,c<=0))break;var e=a(b.substr(0,d));return void 0==e?void 0:[e,b.substr(d)]}function f(a,b){for(var c=a,d=b;c&&d;)c>d?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e<b.length;e++){var f=a.consumeTrimmed(b[e],c);if(!f||""==f[0])return;void 0!==f[0]&&d.push(f[0]),c=f[1]}if(""==c)return d}function j(a,b,c,d,e){for(var g=[],h=[],i=[],j=f(d.length,e.length),k=0;k<j;k++){var l=b(d[k%d.length],e[k%e.length]);if(!l)return;g.push(l[0]),h.push(l[1]),i.push(l[2])}return[g,h,function(b){var d=b.map(function(a,b){return i[b](a)}).join(c);return a?a(d):d}]}function k(a,b,c){for(var d=[],e=[],f=[],g=0,h=0;h<c.length;h++)if("function"==typeof c[h]){var i=c[h](a[g],b[g++]);d.push(i[0]),e.push(i[1]),f.push(i[2])}else!function(a){d.push(!1),e.push(!1),f.push(function(){return c[a]})}(h);return[d,e,function(a){for(var b="",c=0;c<a.length;c++)b+=f[c](a[c]);return b}]}a.consumeToken=b,a.consumeTrimmed=c,a.consumeRepeated=d,a.consumeParenthesised=e,a.ignore=g,a.optional=h,a.consumeList=i,a.mergeNestedRepeated=j.bind(null,null),a.mergeWrappedNestedRepeated=j,a.mergeList=k}(d),function(a){function b(b){function c(b){var c=a.consumeToken(/^inset/i,b);if(c)return d.inset=!0,c;var c=a.consumeLengthOrPercent(b);if(c)return d.lengths.push(c[0]),c;var c=a.consumeColor(b);return c?(d.color=c[0],c):void 0}var d={inset:!1,lengths:[],color:null},e=a.consumeRepeated(c,/^/,b);if(e&&e[0].length)return[d,e[1]]}function c(c){var d=a.consumeRepeated(b,/^,/,c);if(d&&""==d[1])return d[0]}function d(b,c){for(;b.lengths.length<Math.max(b.lengths.length,c.lengths.length);)b.lengths.push({px:0});for(;c.lengths.length<Math.max(b.lengths.length,c.lengths.length);)c.lengths.push({px:0});if(b.inset==c.inset&&!!b.color==!!c.color){for(var d,e=[],f=[[],0],g=[[],0],h=0;h<b.lengths.length;h++){var i=a.mergeDimensions(b.lengths[h],c.lengths[h],2==h);f[0].push(i[0]),g[0].push(i[1]),e.push(i[2])}if(b.color&&c.color){var j=a.mergeColors(b.color,c.color);f[1]=j[0],g[1]=j[1],d=j[2]}return[f,g,function(a){for(var c=b.inset?"inset ":" ",f=0;f<e.length;f++)c+=e[f](a[0][f])+" ";return d&&(c+=d(a[1])),c}]}}function e(b,c,d,e){function f(a){return{inset:a,color:[0,0,0,0],lengths:[{px:0},{px:0},{px:0},{px:0}]}}for(var g=[],h=[],i=0;i<d.length||i<e.length;i++){var j=d[i]||f(e[i].inset),k=e[i]||f(d[i].inset);g.push(j),h.push(k)}return a.mergeNestedRepeated(b,c,g,h)}var f=e.bind(null,d,", ");a.addPropertiesHandler(c,f,["box-shadow","text-shadow"])}(d),function(a,b){function c(a){return a.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function d(a,b,c){return Math.min(b,Math.max(a,c))}function e(a){if(/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a))return Number(a)}function f(a,b){return[a,b,c]}function g(a,b){if(0!=a)return i(0,1/0)(a,b)}function h(a,b){return[a,b,function(a){return Math.round(d(1,1/0,a))}]}function i(a,b){return function(e,f){return[e,f,function(e){return c(d(a,b,e))}]}}function j(a){var b=a.trim().split(/\s*[\s,]\s*/);if(0!==b.length){for(var c=[],d=0;d<b.length;d++){var f=e(b[d]);if(void 0===f)return;c.push(f)}return c}}function k(a,b){if(a.length==b.length)return[a,b,function(a){return a.map(c).join(" ")}]}function l(a,b){return[a,b,Math.round]}a.clamp=d,a.addPropertiesHandler(j,k,["stroke-dasharray"]),a.addPropertiesHandler(e,i(0,1/0),["border-image-width","line-height"]),a.addPropertiesHandler(e,i(0,1),["opacity","shape-image-threshold"]),a.addPropertiesHandler(e,g,["flex-grow","flex-shrink"]),a.addPropertiesHandler(e,h,["orphans","widows"]),a.addPropertiesHandler(e,l,["z-index"]),a.parseNumber=e,a.parseNumberList=j,a.mergeNumbers=f,a.numberToString=c}(d),function(a,b){function c(a,b){if("visible"==a||"visible"==b)return[0,1,function(c){return c<=0?a:c>=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a){function b(){var b=h.exec(a);g=b?b[0]:void 0}function c(){var a=Number(g);return b(),a}function d(){if("("!==g)return c();b();var a=f();return")"!==g?NaN:(b(),a)}function e(){for(var a=d();"*"===g||"/"===g;){var c=g;b();var e=d();"*"===c?a*=e:a/=e}return a}function f(){for(var a=e();"+"===g||"-"===g;){var c=g;b();var d=e();"+"===c?a+=d:a-=d}return a}var g,h=/([\+\-\w\.]+|[\(\)\*\/])/g;return b(),f()}function d(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var d={};b=b.replace(a,function(a){return d[a]=null,"U"+a});for(var e="U("+a.source+")",f=b.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+e,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),g=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],h=0;h<g.length;)g[h].test(f)?(f=f.replace(g[h],"$1"),h=0):h++;if("D"==f){for(var i in d){var j=c(b.replace(new RegExp("U"+i,"g"),"").replace(new RegExp(e,"g"),"*0"));if(!isFinite(j))return;d[i]=j}return d}}}function e(a,b){return f(a,b,!0)}function f(b,c,d){var e,f=[];for(e in b)f.push(e);for(e in c)f.indexOf(e)<0&&f.push(e);return b=f.map(function(a){return b[a]||0}),c=f.map(function(a){return c[a]||0}),[b,c,function(b){var c=b.map(function(c,e){return 1==b.length&&d&&(c=Math.max(c,0)),a.numberToString(c)+f[e]}).join(" + ");return b.length>1?"calc("+c+")":c}]}var g="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",h=d.bind(null,new RegExp(g,"g")),i=d.bind(null,new RegExp(g+"|%","g")),j=d.bind(null,/deg|rad|grad|turn/g);a.parseLength=h,a.parseLengthOrPercent=i,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,i),a.parseAngle=j,a.mergeDimensions=f;var k=a.consumeParenthesised.bind(null,h),l=a.consumeRepeated.bind(void 0,k,/^/),m=a.consumeRepeated.bind(void 0,l,/^,/);a.consumeSizePairList=m;var n=function(a){var b=m(a);if(b&&""==b[1])return b[0]},o=a.mergeNestedRepeated.bind(void 0,e," "),p=a.mergeNestedRepeated.bind(void 0,o,",");a.mergeNonNegativeSizePair=o,a.addPropertiesHandler(n,p,["background-size"]),a.addPropertiesHandler(i,e,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(i,f,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length<i.length)return;for(var k=[],o=0;o<j.length;o++){var p,q=i[o],r=j[o];if(void 0===(p=q?{A:function(b){return"0"==b.trim()?m:a.parseAngle(b)},N:a.parseNumber,T:a.parseLengthOrPercent,L:a.parseLength}[r.toUpperCase()](q):{a:m,n:k[0],t:l}[r]))return;k.push(p)}if(e.push({t:g,d:k}),d.lastIndex==b.length)return e}}function f(a){return a.toFixed(6).replace(".000000","")}function g(b,c){if(b.decompositionPair!==c){b.decompositionPair=c;var d=a.makeMatrixDecomposition(b)}if(c.decompositionPair!==b){c.decompositionPair=b;var e=a.makeMatrixDecomposition(c)}return null==d[0]||null==e[0]?[[!1],[!0],function(a){return a?c[0].d:b[0].d}]:(d[0].push(0),e[0].push(1),[d,e,function(b){var c=a.quat(d[0][3],e[0][3],b[5]);return a.composeMatrix(b[0],b[1],b[2],c,b[4]).map(f).join(",")}])}function h(a){return a.replace(/[xy]/,"")}function i(a){return a.replace(/(x|y|z|3d)?$/,"3d")}function j(b,c){var d=a.makeMatrixDecomposition&&!0,e=!1;if(!b.length||!c.length){b.length||(e=!0,b=c,c=[]);for(var f=0;f<b.length;f++){var j=b[f].t,k=b[f].d,l="scale"==j.substr(0,5)?1:0;c.push({t:j,d:k.map(function(a){if("number"==typeof a)return l;var b={};for(var c in a)b[c]=l;return b})})}}var m=function(a,b){return"perspective"==a&&"perspective"==b||("matrix"==a||"matrix3d"==a)&&("matrix"==b||"matrix3d"==b)},o=[],p=[],q=[];if(b.length!=c.length){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[["matrix",[r[2]]]]}else for(var f=0;f<b.length;f++){var j,s=b[f].t,t=c[f].t,u=b[f].d,v=c[f].d,w=n[s],x=n[t];if(m(s,t)){if(!d)return;var r=g([b[f]],[c[f]]);o.push(r[0]),p.push(r[1]),q.push(["matrix",[r[2]]])}else{if(s==t)j=s;else if(w[2]&&x[2]&&h(s)==h(t))j=h(s),u=w[2](u),v=x[2](v);else{if(!w[1]||!x[1]||i(s)!=i(t)){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[["matrix",[r[2]]]];break}j=i(s),u=w[1](u),v=x[1](v)}for(var y=[],z=[],A=[],B=0;B<u.length;B++){var C="number"==typeof u[B]?a.mergeNumbers:a.mergeDimensions,r=C(u[B],v[B]);y[B]=r[0],z[B]=r[1],A.push(r[2])}o.push(y),p.push(z),q.push([j,A])}}if(e){var D=o;o=p,p=D}return[o,p,function(a){return a.map(function(a,b){var c=a.map(function(a,c){return q[b][1][c](a)}).join(",");return"matrix"==q[b][0]&&16==c.split(",").length&&(q[b][0]="matrix3d"),q[b][0]+"("+c+")"}).join(" ")}]}var k=null,l={px:0},m={deg:0},n={matrix:["NNNNNN",[k,k,0,0,k,k,0,0,0,0,1,0,k,k,0,1],d],matrix3d:["NNNNNNNNNNNNNNNN",d],rotate:["A"],rotatex:["A"],rotatey:["A"],rotatez:["A"],rotate3d:["NNNA"],perspective:["L"],scale:["Nn",c([k,k,1]),d],scalex:["N",c([k,1,1]),c([k,1])],scaley:["N",c([1,k,1]),c([1,k])],scalez:["N",c([1,1,k])],scale3d:["NNN",d],skew:["Aa",null,d],skewx:["A",null,c([k,m])],skewy:["A",null,c([m,k])],translate:["Tt",c([k,k,l]),d],translatex:["T",c([k,l,l]),c([k,l])],translatey:["T",c([l,k,l]),c([l,k])],translatez:["L",c([l,l,k])],translate3d:["TTL",d]};a.addPropertiesHandler(e,j,["transform"]),a.transformToSvgMatrix=function(b){var c=a.transformListToMatrix(e(b));return"matrix("+f(c[0])+" "+f(c[1])+" "+f(c[4])+" "+f(c[5])+" "+f(c[12])+" "+f(c[13])+")"}}(d),function(a,b){function c(a,b){b.concat([a]).forEach(function(b){b in document.documentElement.style&&(d[a]=b),e[b]=a})}var d={},e={};c("transform",["webkitTransform","msTransform"]),c("transformOrigin",["webkitTransformOrigin"]),c("perspective",["webkitPerspective"]),c("perspectiveOrigin",["webkitPerspectiveOrigin"]),a.propertyName=function(a){return d[a]||a},a.unprefixedPropertyName=function(a){return e[a]||a}}(d)}(),function(){if(void 0===document.createElement("div").animate([]).oncancel){var a;if(window.performance&&performance.now)var a=function(){return performance.now()};else var a=function(){return Date.now()};var b=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type="cancel",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()},c=window.Element.prototype.animate;window.Element.prototype.animate=function(d,e){var f=c.call(this,d,e);f._cancelHandlers=[],f.oncancel=null;var g=f.cancel;f.cancel=function(){g.call(this);var c=new b(this,null,a()),d=this._cancelHandlers.concat(this.oncancel?[this.oncancel]:[]);setTimeout(function(){d.forEach(function(a){a.call(c.target,c)})},0)};var h=f.addEventListener;f.addEventListener=function(a,b){"function"==typeof b&&"cancel"==a?this._cancelHandlers.push(b):h.call(this,a,b)};var i=f.removeEventListener;return f.removeEventListener=function(a,b){if("cancel"==a){var c=this._cancelHandlers.indexOf(b);c>=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),function(a,b,c){function d(a){var c=b.timeline;c.currentTime=a,c._discardAnimations(),0==c._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(c){b.timeline._updateAnimationsPromises(),a(c),b.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return"finished"!=a.playState&&"idle"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return g}})}catch(a){}try{window.document.timeline=g}catch(a){}}(0,e),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id="",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error("Animation with null timeline is not supported");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&("idle"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==a?this._resolveReadyPromise():"pending"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&("idle"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==b?this._resolveFinishedPromise():"finished"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b<this.effect.children.length;b++)this.effect.children[b]._animation=a,this._childAnimations[b]._setExternalAnimation(a)},_constructChildAnimations:function(){if(this.effect&&this._isGroup){var a=this.effect._timing.delay;this._removeChildAnimations(),this.effect.children.forEach(function(c){var d=b.timeline._play(c);this._childAnimations.push(d),d.playbackRate=this.playbackRate,this._paused&&d.pause(),c._animation=this.effect._animation,this._arrangeChildren(d,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c))}.bind(this))}},_arrangeChildren:function(a,b){null===this.startTime?a.currentTime=this.currentTime-b/this.playbackRate:a.startTime!==this.startTime+b/this.playbackRate&&(a.startTime=this.startTime+b/this.playbackRate)},get timeline(){return this._timeline},get playState(){return this._animation?this._animation.playState:"idle"},get finished(){return window.Promise?(this._finishedPromise||(-1==b.animationsWithPromises.indexOf(this)&&b.animationsWithPromises.push(this),this._finishedPromise=new Promise(function(a,b){this._resolveFinishedPromise=function(){a(this)},this._rejectFinishedPromise=function(){b({type:DOMException.ABORT_ERR,name:"AbortError"})}}.bind(this)),"finished"==this.playState&&this._resolveFinishedPromise()),this._finishedPromise):(console.warn("Animation Promises require JavaScript Promise constructor"),null)},get ready(){return window.Promise?(this._readyPromise||(-1==b.animationsWithPromises.indexOf(this)&&b.animationsWithPromises.push(this),this._readyPromise=new Promise(function(a,b){this._resolveReadyPromise=function(){a(this)},this._rejectReadyPromise=function(){b({type:DOMException.ABORT_ERR,name:"AbortError"})}}.bind(this)),"pending"!==this.playState&&this._resolveReadyPromise()),this._readyPromise):(console.warn("Animation Promises require JavaScript Promise constructor"),null)},get onfinish(){return this._animation.onfinish},set onfinish(a){this._animation.onfinish="function"==typeof a?function(b){b.target=this,a.call(this,b)}.bind(this):a},get oncancel(){return this._animation.oncancel},set oncancel(a){this._animation.oncancel="function"==typeof a?function(b){b.target=this,a.call(this,b)}.bind(this):a},get currentTime(){this._updatePromises();var a=this._animation.currentTime;return this._updatePromises(),a},set currentTime(a){this._updatePromises(),this._animation.currentTime=isFinite(a)?a:Math.sign(a)*Number.MAX_VALUE,this._register(),this._forEachChild(function(b,c){b.currentTime=a-c}),this._updatePromises()},get startTime(){return this._animation.startTime},set startTime(a){this._updatePromises(),this._animation.startTime=isFinite(a)?a:Math.sign(a)*Number.MAX_VALUE,this._register(),this._forEachChild(function(b,c){b.startTime=a+c}),this._updatePromises()},get playbackRate(){return this._animation.playbackRate},set playbackRate(a){this._updatePromises();var b=this.currentTime;this._animation.playbackRate=a,this._forEachChild(function(b){b.playbackRate=a}),null!==b&&(this.currentTime=b),this._updatePromises()},play:function(){this._updatePromises(),this._paused=!1,this._animation.play(),-1==this._timeline._animations.indexOf(this)&&this._timeline._animations.push(this),this._register(),b.awaitStartTime(this),this._forEachChild(function(a){var b=a.currentTime;a.play(),a.currentTime=b}),this._updatePromises()},pause:function(){this._updatePromises(),this.currentTime&&(this._holdTime=this.currentTime),this._animation.pause(),this._register(),this._forEachChild(function(a){a.pause()}),this._paused=!0,this._updatePromises()},finish:function(){this._updatePromises(),this._animation.finish(),this._register(),this._updatePromises()},cancel:function(){this._updatePromises(),this._animation.cancel(),this._register(),this._removeChildAnimations(),this._updatePromises()},reverse:function(){this._updatePromises();var a=this.currentTime;this._animation.reverse(),this._forEachChild(function(a){a.reverse()}),null!==a&&(this.currentTime=a),this._updatePromises()},addEventListener:function(a,b){var c=b;"function"==typeof b&&(c=function(a){a.target=this,b.call(this,a)}.bind(this),b._wrapper=c),this._animation.addEventListener(a,c)},removeEventListener:function(a,b){this._animation.removeEventListener(a,b&&b._wrapper||b)},_removeChildAnimations:function(){for(;this._childAnimations.length;)this._childAnimations.pop().cancel()},_forEachChild:function(b){var c=0;if(this.effect.children&&this._childAnimations.length<this.effect.children.length&&this._constructChildAnimations(),this._childAnimations.forEach(function(a){b.call(this,a,c),this.effect instanceof window.SequenceEffect&&(c+=a.effect.activeDuration)}.bind(this)),"pending"!=this.playState){var d=this.effect._timing,e=this.currentTime;null!==e&&(e=a.calculateIterationProgress(a.calculateActiveDuration(d),e,d)),(null==e||isNaN(e))&&this._removeChildAnimations()}}},window.Animation=b.Animation}(c,e),function(a,b,c){function d(b){this._frames=a.normalizeKeyframes(b)}function e(){for(var a=!1;i.length;)i.shift()._updateChildren(),a=!0;return a}var f=function(a){if(a._animation=void 0,a instanceof window.SequenceEffect||a instanceof window.GroupEffect)for(var b=0;b<a.children.length;b++)f(a.children[b])};b.removeMulti=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];d._parent?(-1==b.indexOf(d._parent)&&b.push(d._parent),d._parent.children.splice(d._parent.children.indexOf(d),1),d._parent=null,f(d)):d._animation&&d._animation.effect==d&&(d._animation.cancel(),d._animation.effect=new KeyframeEffect(null,[]),d._animation._callback&&(d._animation._callback._animation=null),d._animation._rebuildUnderlyingAnimation(),f(d))}for(c=0;c<b.length;c++)b[c]._rebuild()},b.KeyframeEffect=function(b,c,e,f){return this.target=b,this._parent=null,e=a.numericTimingToObject(e),this._timingInput=a.cloneTimingInput(e),this._timing=a.normalizeTimingInput(e),this.timing=a.makeTiming(e,!1,this),this.timing._effect=this,"function"==typeof c?(a.deprecated("Custom KeyframeEffect","2015-06-22","Use KeyframeEffect.onsample instead."),this._normalizedKeyframes=c):this._normalizedKeyframes=new d(c),this._keyframes=c,this.activeDuration=a.calculateActiveDuration(this._timing),this._id=f,this},b.KeyframeEffect.prototype={getFrames:function(){return"function"==typeof this._normalizedKeyframes?this._normalizedKeyframes:this._normalizedKeyframes._frames},set onsample(a){if("function"==typeof this.getFrames())throw new Error("Setting onsample on custom effect KeyframeEffect is not supported.");this._onsample=a,this._animation&&this._animation._rebuildUnderlyingAnimation()},get parent(){return this._parent},clone:function(){if("function"==typeof this.getFrames())throw new Error("Cloning custom effects is not supported.");var b=new KeyframeEffect(this.target,[],a.cloneTimingInput(this._timingInput),this._id);return b._normalizedKeyframes=this._normalizedKeyframes,b._keyframes=this._keyframes,b},remove:function(){b.removeMulti([this])}};var g=Element.prototype.animate;Element.prototype.animate=function(a,c){var d="";return c&&c.id&&(d=c.id),b.timeline._play(new b.KeyframeEffect(this,a,c,d))};var h=document.createElementNS("http://www.w3.org/1999/xhtml","div");b.newUnderlyingAnimationForKeyframeEffect=function(a){if(a){var b=a.target||h,c=a._keyframes;"function"==typeof c&&(c=[]);var d=a._timingInput;d.id=a._id}else var b=h,c=[],d=0;return g.apply(b,[c,d])},b.bindAnimationForKeyframeEffect=function(a){a.effect&&"function"==typeof a.effect._normalizedKeyframes&&b.bindAnimationForCustomEffect(a)};var i=[];b.awaitStartTime=function(a){null===a.startTime&&a._isGroup&&(0==i.length&&requestAnimationFrame(e),i.push(a))};var j=window.getComputedStyle;Object.defineProperty(window,"getComputedStyle",{configurable:!0,enumerable:!0,value:function(){b.timeline._updateAnimationsPromises();var a=j.apply(this,arguments);return e()&&(a=j.apply(this,arguments)),b.timeline._updateAnimationsPromises(),a}}),window.KeyframeEffect=b.KeyframeEffect,window.Element.prototype.getAnimations=function(){return document.timeline.getAnimations().filter(function(a){return null!==a.effect&&a.effect.target==this}.bind(this))}}(c,e),function(a,b,c){function d(a){a._registered||(a._registered=!0,g.push(a),h||(h=!0,requestAnimationFrame(e)))}function e(a){var b=g;g=[],b.sort(function(a,b){return a._sequenceNumber-b._sequenceNumber}),b=b.filter(function(a){a();var b=a._animation?a._animation.playState:"idle";return"running"!=b&&"pending"!=b&&(a._registered=!1),a._registered}),g.push.apply(g,b),g.length?(h=!0,requestAnimationFrame(e)):h=!1}var f=(document.createElementNS("http://www.w3.org/1999/xhtml","div"),0);b.bindAnimationForCustomEffect=function(b){var c,e=b.effect.target,g="function"==typeof b.effect.getFrames();c=g?b.effect.getFrames():b.effect._onsample;var h=b.effect.timing,i=null;h=a.normalizeTimingInput(h);var j=function(){var d=j._animation?j._animation.currentTime:null;null!==d&&(d=a.calculateIterationProgress(a.calculateActiveDuration(h),d,h),isNaN(d)&&(d=null)),d!==i&&(g?c(d,e,b.effect):c(d,b.effect,b.effect._animation)),i=d};j._animation=b,j._registered=!1,j._sequenceNumber=f++,b._callback=j,d(j)};var g=[],h=!1;b.Animation.prototype._register=function(){this._callback&&d(this._callback)}}(c,e),function(a,b,c){function d(a){return a._timing.delay+a.activeDuration+a._timing.endDelay}function e(b,c,d){this._id=d,this._parent=null,this.children=b||[],this._reparent(this.children),c=a.numericTimingToObject(c),this._timingInput=a.cloneTimingInput(c),this._timing=a.normalizeTimingInput(c,!0),this.timing=a.makeTiming(c,!0,this),this.timing._effect=this,"auto"===this._timing.duration&&(this._timing.duration=this.activeDuration)}window.SequenceEffect=function(){e.apply(this,arguments)},window.GroupEffect=function(){e.apply(this,arguments)},e.prototype={_isAncestor:function(a){for(var b=this;null!==b;){if(b==a)return!0;b=b._parent}return!1},_rebuild:function(){for(var a=this;a;)"auto"===a.timing.duration&&(a._timing.duration=a.activeDuration),a=a._parent;this._animation&&this._animation._rebuildUnderlyingAnimation()},_reparent:function(a){b.removeMulti(a);for(var c=0;c<a.length;c++)a[c]._parent=this},_putChild:function(a,b){for(var c=b?"Cannot append an ancestor or self":"Cannot prepend an ancestor or self",d=0;d<a.length;d++)if(this._isAncestor(a[d]))throw{type:DOMException.HIERARCHY_REQUEST_ERR,name:"HierarchyRequestError",message:c};for(var d=0;d<a.length;d++)b?this.children.push(a[d]):this.children.unshift(a[d]);this._reparent(a),this._rebuild()},append:function(){this._putChild(arguments,!0)},prepend:function(){this._putChild(arguments,!1)},get parent(){return this._parent},get firstChild(){return this.children.length?this.children[0]:null},get lastChild(){return this.children.length?this.children[this.children.length-1]:null},clone:function(){for(var b=a.cloneTimingInput(this._timingInput),c=[],d=0;d<this.children.length;d++)c.push(this.children[d].clone());return this instanceof GroupEffect?new GroupEffect(c,b):new SequenceEffect(c,b)},remove:function(){b.removeMulti([this])}},window.SequenceEffect.prototype=Object.create(e.prototype),Object.defineProperty(window.SequenceEffect.prototype,"activeDuration",{get:function(){var a=0;return this.children.forEach(function(b){a+=d(b)}),Math.max(a,0)}}),window.GroupEffect.prototype=Object.create(e.prototype),Object.defineProperty(window.GroupEffect.prototype,"activeDuration",{get:function(){var a=0;return this.children.forEach(function(b){a=Math.max(a,d(b))}),a}}),b.newUnderlyingAnimationForGroup=function(c){var d,e=null,f=function(b){var c=d._wrapper;if(c&&"pending"!=c.playState&&c.effect)return null==b?void c._removeChildAnimations():0==b&&c.playbackRate<0&&(e||(e=a.normalizeTimingInput(c.effect.timing)),b=a.calculateIterationProgress(a.calculateActiveDuration(e),-1,e),isNaN(b)||null==b)?(c._forEachChild(function(a){a.currentTime=-1}),void c._removeChildAnimations()):void 0},g=new KeyframeEffect(null,[],c._timing,c._id);return g.onsample=f,d=b.timeline._play(g)},b.bindAnimationForGroup=function(a){a._animation._wrapper=a,a._isGroup=!0,b.awaitStartTime(a),a._constructChildAnimations(),a._setExternalAnimation(a)},b.groupChildDuration=d}(c,e),b.true=a}({},function(){return this}());
+//# sourceMappingURL=web-animations-next-lite.min.js.map \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js.map
new file mode 100644
index 00000000000..2234d48221d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next-lite.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js","src/timeline.js","src/web-animations-next-animation.js","src/keyframe-effect-constructor.js","src/effect-callback.js","src/group-constructors.js"],"names":["webAnimationsShared","webAnimations1","webAnimationsNext","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start_gradient","end_gradient","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","normalizeEasing","easing","styleForCleaning","document","createElement","style","animationTimingFunction","normalizedEasing","TypeError","parseEasingFunction","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","endTime","delay","endDelay","min","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateOverallProgress","iterationDuration","activeTime","iterationStart","overallProgress","calculateSimpleIterationProgress","simpleIterationProgress","Infinity","calculateCurrentIteration","floor","calculateDirectedProgress","playbackDirection","currentIteration","currentDirection","calculateIterationProgress","directedProgress","direction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","isNotAnimatable","lastIndexOf","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","animate","oncancel","now","performance","AnimationCancelEvent","target","currentTime","timelineTime","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","originalElementAnimate","Element","options","animation","call","_cancelHandlers","originalCancel","cancel","event","handlers","concat","setTimeout","handler","originalAddEventListener","addEventListener","originalRemoveEventListener","removeEventListener","index","splice","element","documentElement","animated","originalOpacity","getComputedStyle","getPropertyValue","testOpacity","opacity","error","scope","webAnimationsNextTick","t","timeline","_discardAnimations","_animations","ticking","requestAnimationFrame","originalRequestAnimationFrame","_updateAnimationsPromises","AnimationTimeline","getAnimations","animationsWithPromises","_updatePromises","playState","_play","Animation","restartWebAnimationsNextTick","play","remove","defineProperty","configurable","get","e","id","_id","_timeline","_sequenceNumber","sequenceNumber","_holdTime","_paused","_isGroup","_childAnimations","_callback","_oldPlayState","oldPlayState","newPlayState","_readyPromise","_rejectReadyPromise","_resolveReadyPromise","_finishedPromise","_rejectFinishedPromise","_resolveFinishedPromise","oldPlaybackRate","oldPaused","oldStartTime","oldCurrentTime","hadUnderlying","startTime","_wrapper","KeyframeEffect","newUnderlyingAnimationForKeyframeEffect","bindAnimationForKeyframeEffect","SequenceEffect","GroupEffect","newUnderlyingAnimationForGroup","bindAnimationForGroup","_onsample","bindAnimationForCustomEffect","pause","_updateChildren","childAnimation","_arrangeChildren","groupChildDuration","bind","_setExternalAnimation","children","_constructChildAnimations","_removeChildAnimations","child","finished","Promise","resolve","reject","ABORT_ERR","ready","onfinish","v","sign","MAX_VALUE","_register","_forEachChild","awaitStartTime","time","finish","reverse","wrapped","pop","KeyframeList","_frames","updatePendingGroups","updated","pendingGroups","shift","disassociate","removeMulti","effects","oldParents","_parent","_rebuild","_normalizedKeyframes","_keyframes","getFrames","onsample","callback","parent","nullTarget","keyframeEffect","groupAnimation","originalGetComputedStyle","enumerable","arguments","register","_registered","callbacks","tick","updating","left","right","effectFunction","isKeyframeEffect","last","node","constructor","_reparent","_isAncestor","newChildren","_putChild","args","isAppend","HIERARCHY_REQUEST_ERR","unshift","append","prepend","firstChild","lastChild","clonedTiming","clonedChildren","create","total","max","group","underlyingAnimation","ticker","tf","underlyingEffect","exports","webAnimationsTesting"],"mappings":"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","file":"web-animations-next-lite.min.js"} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.html
new file mode 100644
index 00000000000..536e092daf5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.html
@@ -0,0 +1 @@
+<script src="./web-animations-next.min.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js
new file mode 100644
index 00000000000..99e293f46b7
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js
@@ -0,0 +1,16 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+!function(a,b){var c={},d={},e={};!function(a,b){function c(a){if("number"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill="none",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction="normal",this._easing="linear",this._easingFunction=x}function e(){return a.isDeprecated("Invalid timing inputs","2016-03-02","TypeError exceptions will be thrown instead.",!0)}function f(b,c,e){var f=new d;return c&&(f.fill="both",f.duration="auto"),"number"!=typeof b||isNaN(b)?void 0!==b&&Object.getOwnPropertyNames(b).forEach(function(c){if("auto"!=b[c]){if(("number"==typeof f[c]||"duration"==c)&&("number"!=typeof b[c]||isNaN(b[c])))return;if("fill"==c&&-1==v.indexOf(b[c]))return;if("direction"==c&&-1==w.indexOf(b[c]))return;if("playbackRate"==c&&1!==b[c]&&a.isDeprecated("AnimationEffectTiming.playbackRate","2014-11-28","Use Animation.playbackRate instead."))return;f[c]=b[c]}}):f.duration=b,f}function g(a){return"number"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function h(b,c){return b=a.numericTimingToObject(b),f(b,c)}function i(a,b,c,d){return a<0||a>1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i<j;){var k=(i+j)/2,l=f(a,c,k);if(Math.abs(e-l)<1e-5)return f(b,d,k);l<e?i=k:j=k}return f(b,d,k)}}function j(a,b){return function(c){if(c>=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b<Math.min(c.delay,d)?H:b>=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g<f;g++)e={},e.offset="offset"in a?a.offset:1==f?1:g/(f-1),"easing"in a&&(e.easing=a.easing),"composite"in a&&(e.composite=a.composite),e[c]=d[g],b.push(e)}return b.sort(function(a,b){return a.offset-b.offset}),b}function g(b){function c(){var a=d.length;null==d[a-1].offset&&(d[a-1].offset=1),a>1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e<a;e++){var f=d[e].offset;if(null!=f){for(var g=1;g<e-b;g++)d[b+g].offset=c+(f-c)*g/(e-b);b=e,c=f}}}if(null==b)return[];window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||(b=f(b));for(var d=b.map(function(b){var c={};for(var d in b){var f=b[d];if("offset"==d){if(null!=f){if(f=Number(f),!isFinite(f))throw new TypeError("Keyframe offsets must be numbers.");if(f<0||f>1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i<d.length;i++){var j=d[i].offset;if(null!=j){if(j<h)throw new TypeError("Keyframes are not loosely sorted by offset. Sort or specify offsets.");h=j}else g=!1}return d=d.filter(function(a){return a.offset>=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g<h&&(a in b||console.warn("Web Animations: "+a+" "+f+" deprecated and will stop working on "+h.toDateString()+". "+d),b[a]=!0,1))},a.deprecated=function(b,c,d,e){var f=e?"are":"is";if(a.isDeprecated(b,c,d,e))throw new Error(b+" "+f+" no longer supported. "+d)}}(c),function(){if(document.documentElement.animate){var a=document.documentElement.animate([],0),b=!0;if(a&&(b=!1,"play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState".split("|").forEach(function(c){void 0===a[c]&&(b=!0)})),!b)return}!function(a,b,c){function d(a){for(var b={},c=0;c<a.length;c++)for(var d in a[c])if("offset"!=d&&"easing"!=d&&"composite"!=d){var e={offset:a[c].offset,easing:a[c].easing,value:a[c][d]};b[d]=b[d]||[],b[d].push(e)}for(var f in b){var g=b[f];if(0!=g[0].offset||1!=g[g.length-1].offset)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"Partial keyframes are not supported"}}return b}function e(c){var d=[];for(var e in c)for(var f=c[e],g=0;g<f.length-1;g++){var h=g,i=g+1,j=f[h].offset,k=f[i].offset,l=j,m=k;0==g&&(l=-1/0,0==k&&(i=h)),g==f.length-2&&(m=1/0,1==j&&(h=i)),d.push({applyFrom:l,applyTo:m,startOffset:f[h].offset,endOffset:f[i].offset,easingFunction:a.parseEasingFunction(f[h].easing),property:e,interpolation:b.propertyInterpolation(e,f[h].value,f[i].value)})}return d.sort(function(a,b){return a.startOffset-b.startOffset}),d}b.convertEffectInput=function(c){var f=a.normalizeKeyframes(c),g=d(f),h=e(g);return function(a,c){if(null!=c)h.filter(function(a){return c>=a.applyFrom&&c<a.applyTo}).forEach(function(d){var e=c-d.startOffset,f=d.endOffset-d.startOffset,g=0==f?0:d.easingFunction(e/f);b.apply(a,d.property,d.interpolation(g))});else for(var d in g)"offset"!=d&&"easing"!=d&&"composite"!=d&&b.clear(a,d)}}}(c,d),function(a,b,c){function d(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}function e(a,b,c){h[c]=h[c]||[],h[c].push([a,b])}function f(a,b,c){for(var f=0;f<c.length;f++){e(a,b,d(c[f]))}}function g(c,e,f){var g=c;/-/.test(c)&&!a.isDeprecated("Hyphenated property names","2016-03-22","Use camelCase instead.",!0)&&(g=d(c)),"initial"!=e&&"initial"!=f||("initial"==e&&(e=i[g]),"initial"==f&&(f=i[g]));for(var j=e==f?[]:h[g],k=0;j&&k<j.length;k++){var l=j[k][0](e),m=j[k][0](f);if(void 0!==l&&void 0!==m){var n=j[k][1](l,m);if(n){var o=b.Interpolation.apply(null,n);return function(a){return 0==a?e:1==a?f:o(a)}}}}return b.Interpolation(!1,!0,function(a){return a?f:e})}var h={};b.addPropertiesHandler=f;var i={backgroundColor:"transparent",backgroundPosition:"0% 0%",borderBottomColor:"currentColor",borderBottomLeftRadius:"0px",borderBottomRightRadius:"0px",borderBottomWidth:"3px",borderLeftColor:"currentColor",borderLeftWidth:"3px",borderRightColor:"currentColor",borderRightWidth:"3px",borderSpacing:"2px",borderTopColor:"currentColor",borderTopLeftRadius:"0px",borderTopRightRadius:"0px",borderTopWidth:"3px",bottom:"auto",clip:"rect(0px, 0px, 0px, 0px)",color:"black",fontSize:"100%",fontWeight:"400",height:"auto",left:"auto",letterSpacing:"normal",lineHeight:"120%",marginBottom:"0px",marginLeft:"0px",marginRight:"0px",marginTop:"0px",maxHeight:"none",maxWidth:"none",minHeight:"0px",minWidth:"0px",opacity:"1.0",outlineColor:"invert",outlineOffset:"0px",outlineWidth:"3px",paddingBottom:"0px",paddingLeft:"0px",paddingRight:"0px",paddingTop:"0px",right:"auto",strokeDasharray:"none",strokeDashoffset:"0px",textIndent:"0px",textShadow:"0px 0px 0px transparent",top:"auto",transform:"",verticalAlign:"0px",visibility:"visible",width:"auto",wordSpacing:"normal",zIndex:"auto"};b.propertyInterpolation=g}(c,d),function(a,b,c){function d(b){var c=a.calculateActiveDuration(b),d=function(d){return a.calculateIterationProgress(c,d,b)};return d._totalDuration=b.delay+c+b.endDelay,d}b.KeyframeEffect=function(c,e,f,g){var h,i=d(a.normalizeTimingInput(f)),j=b.convertEffectInput(e),k=function(){j(c,h)};return k._update=function(a){return null!==(h=i(a))},k._clear=function(){j(c,null)},k._hasSameTarget=function(a){return c===a},k._target=c,k._totalDuration=i._totalDuration,k._id=g,k}}(c,d),function(a,b){function c(a,b){return!(!b.namespaceURI||-1==b.namespaceURI.indexOf("/svg"))&&(g in a||(a[g]=/Trident|MSIE|IEMobile|Edge|Android 4/i.test(a.navigator.userAgent)),a[g])}function d(a,b,c){c.enumerable=!0,c.configurable=!0,Object.defineProperty(a,b,c)}function e(a){this._element=a,this._surrogateStyle=document.createElementNS("http://www.w3.org/1999/xhtml","div").style,this._style=a.style,this._length=0,this._isAnimatedProperty={},this._updateSvgTransformAttr=c(window,a),this._savedTransformAttr=null;for(var b=0;b<this._style.length;b++){var d=this._style[b];this._surrogateStyle[d]=this._style[d]}this._updateIndices()}function f(a){if(!a._webAnimationsPatchedStyle){var b=new e(a);try{d(a,"style",{get:function(){return b}})}catch(b){a.style._set=function(b,c){a.style[b]=c},a.style._clear=function(b){a.style[b]=""}}a._webAnimationsPatchedStyle=a.style}}var g="_webAnimationsUpdateSvgTransformAttr",h={cssText:1,length:1,parentRule:1},i={getPropertyCSSValue:1,getPropertyPriority:1,getPropertyValue:1,item:1,removeProperty:1,setProperty:1},j={removeProperty:1,setProperty:1};e.prototype={get cssText(){return this._surrogateStyle.cssText},set cssText(a){for(var b={},c=0;c<this._surrogateStyle.length;c++)b[this._surrogateStyle[c]]=!0;this._surrogateStyle.cssText=a,this._updateIndices();for(var c=0;c<this._surrogateStyle.length;c++)b[this._surrogateStyle[c]]=!0;for(var d in b)this._isAnimatedProperty[d]||this._style.setProperty(d,this._surrogateStyle.getPropertyValue(d))},get length(){return this._surrogateStyle.length},get parentRule(){return this._style.parentRule},_updateIndices:function(){for(;this._length<this._surrogateStyle.length;)Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,get:function(a){return function(){return this._surrogateStyle[a]}}(this._length)}),this._length++;for(;this._length>this._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(b,c){this._style[b]=c,this._isAnimatedProperty[b]=!0,this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(null==this._savedTransformAttr&&(this._savedTransformAttr=this._element.getAttribute("transform")),this._element.setAttribute("transform",a.transformToSvgMatrix(c)))},_clear:function(b){this._style[b]=this._surrogateStyle[b],this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(this._savedTransformAttr?this._element.setAttribute("transform",this._savedTransformAttr):this._element.removeAttribute("transform"),this._savedTransformAttr=null),delete this._isAnimatedProperty[b]}};for(var k in i)e.prototype[k]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(k,k in j);for(var l in document.documentElement.style)l in h||l in i||function(a){d(e.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(l);a.apply=function(b,c,d){f(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f<a.length;f++)e.push(c(a[f],b[f],d));return e}throw"Mismatched interpolation arguments "+a+":"+b}a.Interpolation=function(a,b,d){return function(e){return d(c(a,b,e))}}}(d),function(a,b){function c(a,b,c){return Math.max(Math.min(a,c),b)}function d(b,d,e){var f=a.dot(b,d);f=c(f,-1,1);var g=[];if(1===f)g=b;else for(var h=Math.acos(f),i=1*Math.sin(e*h)/Math.sqrt(1-f*f),j=0;j<4;j++)g.push(b[j]*(Math.cos(e*h)-f*i)+d[j]*i);return g}var e=function(){function a(a,b){for(var c=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],d=0;d<4;d++)for(var e=0;e<4;e++)for(var f=0;f<4;f++)c[d][e]+=b[d][f]*a[f][e];return c}function b(a){return 0==a[0][2]&&0==a[0][3]&&0==a[1][2]&&0==a[1][3]&&0==a[2][0]&&0==a[2][1]&&1==a[2][2]&&0==a[2][3]&&0==a[3][2]&&1==a[3][3]}function c(c,d,e,f,g){for(var h=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],i=0;i<4;i++)h[i][3]=g[i];for(var i=0;i<3;i++)for(var j=0;j<3;j++)h[3][i]+=c[j]*h[j][i];var k=f[0],l=f[1],m=f[2],n=f[3],o=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];o[0][0]=1-2*(l*l+m*m),o[0][1]=2*(k*l-m*n),o[0][2]=2*(k*m+l*n),o[1][0]=2*(k*l+m*n),o[1][1]=1-2*(k*k+m*m),o[1][2]=2*(l*m-k*n),o[2][0]=2*(k*m-l*n),o[2][1]=2*(l*m+k*n),o[2][2]=1-2*(k*k+l*l),h=a(h,o);var p=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];e[2]&&(p[2][1]=e[2],h=a(h,p)),e[1]&&(p[2][1]=0,p[2][0]=e[0],h=a(h,p)),e[0]&&(p[2][0]=0,p[1][0]=e[0],h=a(h,p));for(var i=0;i<3;i++)for(var j=0;j<3;j++)h[i][j]*=d[i];return b(h)?[h[0][0],h[0][1],h[1][0],h[1][1],h[3][0],h[3][1]]:h[0].concat(h[1],h[2],h[3])}return c}();a.composeMatrix=e,a.quat=d}(d),function(a,b,c){a.sequenceNumber=0;var d=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type="finish",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()};b.Animation=function(b){this.id="",b&&b._id&&(this.id=b._id),this._sequenceNumber=a.sequenceNumber++,this._currentTime=0,this._startTime=null,this._paused=!1,this._playbackRate=1,this._inTimeline=!0,this._finishedFlag=!0,this.onfinish=null,this._finishHandlers=[],this._effect=b,this._inEffect=this._effect._update(0),this._idle=!0,this._currentTimePending=!1},b.Animation.prototype={_ensureAlive:function(){this.playbackRate<0&&0===this.currentTime?this._inEffect=this._effect._update(-1):this._inEffect=this._effect._update(this.currentTime),this._inTimeline||!this._inEffect&&this._finishedFlag||(this._inTimeline=!0,b.timeline._animations.push(this))},_tickCurrentTime:function(a,b){a!=this._currentTime&&(this._currentTime=a,this._isFinished&&!b&&(this._currentTime=this._playbackRate>0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a<q.currentTime&&(a=q.currentTime),q._animations.sort(e),q._animations=h(a,!0,q._animations)[0],b.forEach(function(b){b[1](a)}),g(),l=void 0}function e(a,b){return a._sequenceNumber-b._sequenceNumber}function f(){this._animations=[],this.currentTime=window.performance&&performance.now?performance.now():0}function g(){o.forEach(function(a){a()}),o.length=0}function h(a,c,d){p=!0,n=!1,b.timeline.currentTime=a,m=!1;var e=[],f=[],g=[],h=[];return d.forEach(function(b){b._tick(a,c),b._inEffect?(f.push(b._effect),b._markTarget()):(e.push(b._effect),b._unmarkTarget()),b._needsTick&&(m=!0);var d=b._inEffect||b._needsTick;b._inTimeline=d,d?g.push(b):h.push(b)}),o.push.apply(o,e),o.push.apply(o,f),m&&requestAnimationFrame(function(){}),p=!1,[g,h]}var i=window.requestAnimationFrame,j=[],k=0;window.requestAnimationFrame=function(a){var b=k++;return 0==j.length&&i(d),j.push([b,a]),b},window.cancelAnimationFrame=function(a){j.forEach(function(b){b[0]==a&&(b[1]=function(){})})},f.prototype={_play:function(c){c._timing=a.normalizeTimingInput(c.timing);var d=new b.Animation(c);return d._idle=!1,d._timeline=this,this._animations.push(d),b.restart(),b.applyDirtiedAnimation(d),d}};var l=void 0,m=!1,n=!1;b.restart=function(){return m||(m=!0,requestAnimationFrame(function(){}),n=!0),n},b.applyDirtiedAnimation=function(a){if(!p){a._markTarget();var c=a._targetAnimations();c.sort(e),h(b.timeline.currentTime,!1,c.slice())[1].forEach(function(a){var b=q._animations.indexOf(a);-1!==b&&q._animations.splice(b,1)}),g()}};var o=[],p=!1,q=new f;b.timeline=q}(c,d),function(a,b){function c(a,b){for(var c=0,d=0;d<a.length;d++)c+=a[d]*b[d];return c}function d(a,b){return[a[0]*b[0]+a[4]*b[1]+a[8]*b[2]+a[12]*b[3],a[1]*b[0]+a[5]*b[1]+a[9]*b[2]+a[13]*b[3],a[2]*b[0]+a[6]*b[1]+a[10]*b[2]+a[14]*b[3],a[3]*b[0]+a[7]*b[1]+a[11]*b[2]+a[15]*b[3],a[0]*b[4]+a[4]*b[5]+a[8]*b[6]+a[12]*b[7],a[1]*b[4]+a[5]*b[5]+a[9]*b[6]+a[13]*b[7],a[2]*b[4]+a[6]*b[5]+a[10]*b[6]+a[14]*b[7],a[3]*b[4]+a[7]*b[5]+a[11]*b[6]+a[15]*b[7],a[0]*b[8]+a[4]*b[9]+a[8]*b[10]+a[12]*b[11],a[1]*b[8]+a[5]*b[9]+a[9]*b[10]+a[13]*b[11],a[2]*b[8]+a[6]*b[9]+a[10]*b[10]+a[14]*b[11],a[3]*b[8]+a[7]*b[9]+a[11]*b[10]+a[15]*b[11],a[0]*b[12]+a[4]*b[13]+a[8]*b[14]+a[12]*b[15],a[1]*b[12]+a[5]*b[13]+a[9]*b[14]+a[13]*b[15],a[2]*b[12]+a[6]*b[13]+a[10]*b[14]+a[14]*b[15],a[3]*b[12]+a[7]*b[13]+a[11]*b[14]+a[15]*b[15]]}function e(a){var b=a.rad||0;return((a.deg||0)/360+(a.grad||0)/400+(a.turn||0))*(2*Math.PI)+b}function f(a){switch(a.t){case"rotatex":var b=e(a.d[0]);return[1,0,0,0,0,Math.cos(b),Math.sin(b),0,0,-Math.sin(b),Math.cos(b),0,0,0,0,1];case"rotatey":var b=e(a.d[0]);return[Math.cos(b),0,-Math.sin(b),0,0,1,0,0,Math.sin(b),0,Math.cos(b),0,0,0,0,1];case"rotate":case"rotatez":var b=e(a.d[0]);return[Math.cos(b),Math.sin(b),0,0,-Math.sin(b),Math.cos(b),0,0,0,0,1,0,0,0,0,1];case"rotate3d":var c=a.d[0],d=a.d[1],f=a.d[2],b=e(a.d[3]),g=c*c+d*d+f*f;if(0===g)c=1,d=0,f=0;else if(1!==g){var h=Math.sqrt(g);c/=h,d/=h,f/=h}var i=Math.sin(b/2),j=i*Math.cos(b/2),k=i*i;return[1-2*(d*d+f*f)*k,2*(c*d*k+f*j),2*(c*f*k-d*j),0,2*(c*d*k-f*j),1-2*(c*c+f*f)*k,2*(d*f*k+c*j),0,2*(c*f*k+d*j),2*(d*f*k-c*j),1-2*(c*c+d*d)*k,0,0,0,0,1];case"scale":return[a.d[0],0,0,0,0,a.d[1],0,0,0,0,1,0,0,0,0,1];case"scalex":return[a.d[0],0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];case"scaley":return[1,0,0,0,0,a.d[0],0,0,0,0,1,0,0,0,0,1];case"scalez":return[1,0,0,0,0,1,0,0,0,0,a.d[0],0,0,0,0,1];case"scale3d":return[a.d[0],0,0,0,0,a.d[1],0,0,0,0,a.d[2],0,0,0,0,1];case"skew":var l=e(a.d[0]),m=e(a.d[1]);return[1,Math.tan(m),0,0,Math.tan(l),1,0,0,0,0,1,0,0,0,0,1];case"skewx":var b=e(a.d[0]);return[1,0,0,0,Math.tan(b),1,0,0,0,0,1,0,0,0,0,1];case"skewy":var b=e(a.d[0]);return[1,Math.tan(b),0,0,0,1,0,0,0,0,1,0,0,0,0,1];case"translate":var c=a.d[0].px||0,d=a.d[1].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,d,0,1];case"translatex":var c=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,0,0,1];case"translatey":var d=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,0,d,0,1];case"translatez":var f=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,f,1];case"translate3d":var c=a.d[0].px||0,d=a.d[1].px||0,f=a.d[2].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,d,f,1];case"perspective":return[1,0,0,0,0,1,0,0,0,0,1,a.d[0].px?-1/a.d[0].px:0,0,0,0,1];case"matrix":return[a.d[0],a.d[1],0,0,a.d[2],a.d[3],0,0,0,0,1,0,a.d[4],a.d[5],0,1];case"matrix3d":return a.d}}function g(a){return 0===a.length?[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]:a.map(f).reduce(d)}function h(a){return[i(g(a))]}var i=function(){function a(a){return a[0][0]*a[1][1]*a[2][2]+a[1][0]*a[2][1]*a[0][2]+a[2][0]*a[0][1]*a[1][2]-a[0][2]*a[1][1]*a[2][0]-a[1][2]*a[2][1]*a[0][0]-a[2][2]*a[0][1]*a[1][0]}function b(b){for(var c=1/a(b),d=b[0][0],e=b[0][1],f=b[0][2],g=b[1][0],h=b[1][1],i=b[1][2],j=b[2][0],k=b[2][1],l=b[2][2],m=[[(h*l-i*k)*c,(f*k-e*l)*c,(e*i-f*h)*c,0],[(i*j-g*l)*c,(d*l-f*j)*c,(f*g-d*i)*c,0],[(g*k-h*j)*c,(j*e-d*k)*c,(d*h-e*g)*c,0]],n=[],o=0;o<3;o++){for(var p=0,q=0;q<3;q++)p+=b[3][q]*m[q][o];n.push(p)}return n.push(1),m.push(n),m}function d(a){return[[a[0][0],a[1][0],a[2][0],a[3][0]],[a[0][1],a[1][1],a[2][1],a[3][1]],[a[0][2],a[1][2],a[2][2],a[3][2]],[a[0][3],a[1][3],a[2][3],a[3][3]]]}function e(a,b){for(var c=[],d=0;d<4;d++){for(var e=0,f=0;f<4;f++)e+=a[f]*b[f][d];c.push(e)}return c}function f(a){var b=g(a);return[a[0]/b,a[1]/b,a[2]/b]}function g(a){return Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2])}function h(a,b,c,d){return[c*a[0]+d*b[0],c*a[1]+d*b[1],c*a[2]+d*b[2]]}function i(a,b){return[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]}function j(j){var k=[j.slice(0,4),j.slice(4,8),j.slice(8,12),j.slice(12,16)];if(1!==k[3][3])return null;for(var l=[],m=0;m<4;m++)l.push(k[m].slice());for(var m=0;m<3;m++)l[m][3]=0;if(0===a(l))return null;var n,o=[];k[0][3]||k[1][3]||k[2][3]?(o.push(k[0][3]),o.push(k[1][3]),o.push(k[2][3]),o.push(k[3][3]),n=e(o,d(b(l)))):n=[0,0,0,1];var p=k[3].slice(0,3),q=[];q.push(k[0].slice(0,3));var r=[];r.push(g(q[0])),q[0]=f(q[0]);var s=[];q.push(k[1].slice(0,3)),s.push(c(q[0],q[1])),q[1]=h(q[1],q[0],1,-s[0]),r.push(g(q[1])),q[1]=f(q[1]),s[0]/=r[1],q.push(k[2].slice(0,3)),s.push(c(q[0],q[2])),q[2]=h(q[2],q[0],1,-s[1]),s.push(c(q[1],q[2])),q[2]=h(q[2],q[1],1,-s[2]),r.push(g(q[2])),q[2]=f(q[2]),s[1]/=r[2],s[2]/=r[2];var t=i(q[1],q[2]);if(c(q[0],t)<0)for(var m=0;m<3;m++)r[m]*=-1,q[m][0]*=-1,q[m][1]*=-1,q[m][2]*=-1;var u,v,w=q[0][0]+q[1][1]+q[2][2]+1;return w>1e-4?(u=.5/Math.sqrt(w),v=[(q[2][1]-q[1][2])*u,(q[0][2]-q[2][0])*u,(q[1][0]-q[0][1])*u,.25/u]):q[0][0]>q[1][1]&&q[0][0]>q[2][2]?(u=2*Math.sqrt(1+q[0][0]-q[1][1]-q[2][2]),v=[.25*u,(q[0][1]+q[1][0])/u,(q[0][2]+q[2][0])/u,(q[2][1]-q[1][2])/u]):q[1][1]>q[2][2]?(u=2*Math.sqrt(1+q[1][1]-q[0][0]-q[2][2]),v=[(q[0][1]+q[1][0])/u,.25*u,(q[1][2]+q[2][1])/u,(q[0][2]-q[2][0])/u]):(u=2*Math.sqrt(1+q[2][2]-q[0][0]-q[1][1]),v=[(q[0][2]+q[2][0])/u,(q[1][2]+q[2][1])/u,.25*u,(q[1][0]-q[0][1])/u]),[p,r,s,v,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h,a.transformListToMatrix=g}(d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;d<b.length&&(!/\s|,/.test(b[d])||0!=c);d++)if("("==b[d])c++;else if(")"==b[d]&&(c--,0==c&&d++,c<=0))break;var e=a(b.substr(0,d));return void 0==e?void 0:[e,b.substr(d)]}function f(a,b){for(var c=a,d=b;c&&d;)c>d?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e<b.length;e++){var f=a.consumeTrimmed(b[e],c);if(!f||""==f[0])return;void 0!==f[0]&&d.push(f[0]),c=f[1]}if(""==c)return d}function j(a,b,c,d,e){for(var g=[],h=[],i=[],j=f(d.length,e.length),k=0;k<j;k++){var l=b(d[k%d.length],e[k%e.length]);if(!l)return;g.push(l[0]),h.push(l[1]),i.push(l[2])}return[g,h,function(b){var d=b.map(function(a,b){return i[b](a)}).join(c);return a?a(d):d}]}function k(a,b,c){for(var d=[],e=[],f=[],g=0,h=0;h<c.length;h++)if("function"==typeof c[h]){var i=c[h](a[g],b[g++]);d.push(i[0]),e.push(i[1]),f.push(i[2])}else!function(a){d.push(!1),e.push(!1),f.push(function(){return c[a]})}(h);return[d,e,function(a){for(var b="",c=0;c<a.length;c++)b+=f[c](a[c]);return b}]}a.consumeToken=b,a.consumeTrimmed=c,a.consumeRepeated=d,a.consumeParenthesised=e,a.ignore=g,a.optional=h,a.consumeList=i,a.mergeNestedRepeated=j.bind(null,null),a.mergeWrappedNestedRepeated=j,a.mergeList=k}(d),function(a){function b(b){function c(b){var c=a.consumeToken(/^inset/i,b);if(c)return d.inset=!0,c;var c=a.consumeLengthOrPercent(b);if(c)return d.lengths.push(c[0]),c;var c=a.consumeColor(b);return c?(d.color=c[0],c):void 0}var d={inset:!1,lengths:[],color:null},e=a.consumeRepeated(c,/^/,b);if(e&&e[0].length)return[d,e[1]]}function c(c){var d=a.consumeRepeated(b,/^,/,c);if(d&&""==d[1])return d[0]}function d(b,c){for(;b.lengths.length<Math.max(b.lengths.length,c.lengths.length);)b.lengths.push({px:0});for(;c.lengths.length<Math.max(b.lengths.length,c.lengths.length);)c.lengths.push({px:0});if(b.inset==c.inset&&!!b.color==!!c.color){for(var d,e=[],f=[[],0],g=[[],0],h=0;h<b.lengths.length;h++){var i=a.mergeDimensions(b.lengths[h],c.lengths[h],2==h);f[0].push(i[0]),g[0].push(i[1]),e.push(i[2])}if(b.color&&c.color){var j=a.mergeColors(b.color,c.color);f[1]=j[0],g[1]=j[1],d=j[2]}return[f,g,function(a){for(var c=b.inset?"inset ":" ",f=0;f<e.length;f++)c+=e[f](a[0][f])+" ";return d&&(c+=d(a[1])),c}]}}function e(b,c,d,e){function f(a){return{inset:a,color:[0,0,0,0],lengths:[{px:0},{px:0},{px:0},{px:0}]}}for(var g=[],h=[],i=0;i<d.length||i<e.length;i++){var j=d[i]||f(e[i].inset),k=e[i]||f(d[i].inset);g.push(j),h.push(k)}return a.mergeNestedRepeated(b,c,g,h)}var f=e.bind(null,d,", ");a.addPropertiesHandler(c,f,["box-shadow","text-shadow"])}(d),function(a,b){function c(a){return a.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function d(a,b,c){return Math.min(b,Math.max(a,c))}function e(a){if(/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a))return Number(a)}function f(a,b){return[a,b,c]}function g(a,b){if(0!=a)return i(0,1/0)(a,b)}function h(a,b){return[a,b,function(a){return Math.round(d(1,1/0,a))}]}function i(a,b){return function(e,f){return[e,f,function(e){return c(d(a,b,e))}]}}function j(a){var b=a.trim().split(/\s*[\s,]\s*/);if(0!==b.length){for(var c=[],d=0;d<b.length;d++){var f=e(b[d]);if(void 0===f)return;c.push(f)}return c}}function k(a,b){if(a.length==b.length)return[a,b,function(a){return a.map(c).join(" ")}]}function l(a,b){return[a,b,Math.round]}a.clamp=d,a.addPropertiesHandler(j,k,["stroke-dasharray"]),a.addPropertiesHandler(e,i(0,1/0),["border-image-width","line-height"]),a.addPropertiesHandler(e,i(0,1),["opacity","shape-image-threshold"]),a.addPropertiesHandler(e,g,["flex-grow","flex-shrink"]),a.addPropertiesHandler(e,h,["orphans","widows"]),a.addPropertiesHandler(e,l,["z-index"]),a.parseNumber=e,a.parseNumberList=j,a.mergeNumbers=f,a.numberToString=c}(d),function(a,b){function c(a,b){if("visible"==a||"visible"==b)return[0,1,function(c){return c<=0?a:c>=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a){function b(){var b=h.exec(a);g=b?b[0]:void 0}function c(){var a=Number(g);return b(),a}function d(){if("("!==g)return c();b();var a=f();return")"!==g?NaN:(b(),a)}function e(){for(var a=d();"*"===g||"/"===g;){var c=g;b();var e=d();"*"===c?a*=e:a/=e}return a}function f(){for(var a=e();"+"===g||"-"===g;){var c=g;b();var d=e();"+"===c?a+=d:a-=d}return a}var g,h=/([\+\-\w\.]+|[\(\)\*\/])/g;return b(),f()}function d(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var d={};b=b.replace(a,function(a){return d[a]=null,"U"+a});for(var e="U("+a.source+")",f=b.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+e,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),g=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],h=0;h<g.length;)g[h].test(f)?(f=f.replace(g[h],"$1"),h=0):h++;if("D"==f){for(var i in d){var j=c(b.replace(new RegExp("U"+i,"g"),"").replace(new RegExp(e,"g"),"*0"));if(!isFinite(j))return;d[i]=j}return d}}}function e(a,b){return f(a,b,!0)}function f(b,c,d){var e,f=[];for(e in b)f.push(e);for(e in c)f.indexOf(e)<0&&f.push(e);return b=f.map(function(a){return b[a]||0}),c=f.map(function(a){return c[a]||0}),[b,c,function(b){var c=b.map(function(c,e){return 1==b.length&&d&&(c=Math.max(c,0)),a.numberToString(c)+f[e]}).join(" + ");return b.length>1?"calc("+c+")":c}]}var g="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",h=d.bind(null,new RegExp(g,"g")),i=d.bind(null,new RegExp(g+"|%","g")),j=d.bind(null,/deg|rad|grad|turn/g);a.parseLength=h,a.parseLengthOrPercent=i,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,i),a.parseAngle=j,a.mergeDimensions=f;var k=a.consumeParenthesised.bind(null,h),l=a.consumeRepeated.bind(void 0,k,/^/),m=a.consumeRepeated.bind(void 0,l,/^,/);a.consumeSizePairList=m;var n=function(a){var b=m(a);if(b&&""==b[1])return b[0]},o=a.mergeNestedRepeated.bind(void 0,e," "),p=a.mergeNestedRepeated.bind(void 0,o,",");a.mergeNonNegativeSizePair=o,a.addPropertiesHandler(n,p,["background-size"]),a.addPropertiesHandler(i,e,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(i,f,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length<i.length)return;for(var k=[],o=0;o<j.length;o++){var p,q=i[o],r=j[o];if(void 0===(p=q?{A:function(b){return"0"==b.trim()?m:a.parseAngle(b)},N:a.parseNumber,T:a.parseLengthOrPercent,L:a.parseLength}[r.toUpperCase()](q):{a:m,n:k[0],t:l}[r]))return;k.push(p)}if(e.push({t:g,d:k}),d.lastIndex==b.length)return e}}function f(a){return a.toFixed(6).replace(".000000","")}function g(b,c){if(b.decompositionPair!==c){b.decompositionPair=c;var d=a.makeMatrixDecomposition(b)}if(c.decompositionPair!==b){c.decompositionPair=b;var e=a.makeMatrixDecomposition(c)}return null==d[0]||null==e[0]?[[!1],[!0],function(a){return a?c[0].d:b[0].d}]:(d[0].push(0),e[0].push(1),[d,e,function(b){var c=a.quat(d[0][3],e[0][3],b[5]);return a.composeMatrix(b[0],b[1],b[2],c,b[4]).map(f).join(",")}])}function h(a){return a.replace(/[xy]/,"")}function i(a){return a.replace(/(x|y|z|3d)?$/,"3d")}function j(b,c){var d=a.makeMatrixDecomposition&&!0,e=!1;if(!b.length||!c.length){b.length||(e=!0,b=c,c=[]);for(var f=0;f<b.length;f++){var j=b[f].t,k=b[f].d,l="scale"==j.substr(0,5)?1:0;c.push({t:j,d:k.map(function(a){if("number"==typeof a)return l;var b={};for(var c in a)b[c]=l;return b})})}}var m=function(a,b){return"perspective"==a&&"perspective"==b||("matrix"==a||"matrix3d"==a)&&("matrix"==b||"matrix3d"==b)},o=[],p=[],q=[];if(b.length!=c.length){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[["matrix",[r[2]]]]}else for(var f=0;f<b.length;f++){var j,s=b[f].t,t=c[f].t,u=b[f].d,v=c[f].d,w=n[s],x=n[t];if(m(s,t)){if(!d)return;var r=g([b[f]],[c[f]]);o.push(r[0]),p.push(r[1]),q.push(["matrix",[r[2]]])}else{if(s==t)j=s;else if(w[2]&&x[2]&&h(s)==h(t))j=h(s),u=w[2](u),v=x[2](v);else{if(!w[1]||!x[1]||i(s)!=i(t)){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[["matrix",[r[2]]]];break}j=i(s),u=w[1](u),v=x[1](v)}for(var y=[],z=[],A=[],B=0;B<u.length;B++){var C="number"==typeof u[B]?a.mergeNumbers:a.mergeDimensions,r=C(u[B],v[B]);y[B]=r[0],z[B]=r[1],A.push(r[2])}o.push(y),p.push(z),q.push([j,A])}}if(e){var D=o;o=p,p=D}return[o,p,function(a){return a.map(function(a,b){var c=a.map(function(a,c){return q[b][1][c](a)}).join(",");return"matrix"==q[b][0]&&16==c.split(",").length&&(q[b][0]="matrix3d"),q[b][0]+"("+c+")"}).join(" ")}]}var k=null,l={px:0},m={deg:0},n={matrix:["NNNNNN",[k,k,0,0,k,k,0,0,0,0,1,0,k,k,0,1],d],matrix3d:["NNNNNNNNNNNNNNNN",d],rotate:["A"],rotatex:["A"],rotatey:["A"],rotatez:["A"],rotate3d:["NNNA"],perspective:["L"],scale:["Nn",c([k,k,1]),d],scalex:["N",c([k,1,1]),c([k,1])],scaley:["N",c([1,k,1]),c([1,k])],scalez:["N",c([1,1,k])],scale3d:["NNN",d],skew:["Aa",null,d],skewx:["A",null,c([k,m])],skewy:["A",null,c([m,k])],translate:["Tt",c([k,k,l]),d],translatex:["T",c([k,l,l]),c([k,l])],translatey:["T",c([l,k,l]),c([l,k])],translatez:["L",c([l,l,k])],translate3d:["TTL",d]};a.addPropertiesHandler(e,j,["transform"]),a.transformToSvgMatrix=function(b){var c=a.transformListToMatrix(e(b));return"matrix("+f(c[0])+" "+f(c[1])+" "+f(c[4])+" "+f(c[5])+" "+f(c[12])+" "+f(c[13])+")"}}(d),function(a){function b(a){var b=Number(a);if(!(isNaN(b)||b<100||b>900||b%100!=0))return b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?"normal":700===b?"bold":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,["font-weight"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&""==e[1]){var f=e[0];if(f[0]=f[0]||"center",f[1]=f[1]||"center",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return"object"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{"%":50},{"%":50}],i=0,j=!1,k=0;k<f.length;k++){var l=f[k];"string"==typeof l?(j=/bottom|right/.test(l),i={left:0,right:0,center:i,top:1,bottom:1}[l],h[i]=g[l],"center"==l&&i++):(j&&(l=b(l),l["%"]=(l["%"]||0)+100),h[i]=l,i++,j=!1)}return[h,e[1]]}}function f(b){var c=a.consumeRepeated(e,/^,/,b);if(c&&""==c[1])return c[0]}var g={left:{"%":0},center:{"%":50},right:{"%":100},top:{"%":0},bottom:{"%":100}},h=a.mergeNestedRepeated.bind(null,a.mergeDimensions," ");a.addPropertiesHandler(d.bind(null,3),h,["transform-origin"]),a.addPropertiesHandler(d.bind(null,2),h,["perspective-origin"]),a.consumePosition=e,a.mergeOffsetList=h;var i=a.mergeNestedRepeated.bind(null,h,", ");a.addPropertiesHandler(f,i,["background-position","object-position"])}(d),function(a){function b(b){var c=a.consumeToken(/^circle/,b);if(c&&c[0])return["circle"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\(/)),d,a.ignore(a.consumeToken.bind(void 0,/^at/)),a.consumePosition,a.ignore(a.consumeToken.bind(void 0,/^\)/))],c[1]));var f=a.consumeToken(/^ellipse/,b);if(f&&f[0])return["ellipse"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\(/)),e,a.ignore(a.consumeToken.bind(void 0,/^at/)),a.consumePosition,a.ignore(a.consumeToken.bind(void 0,/^\)/))],f[1]));var g=a.consumeToken(/^polygon/,b);return g&&g[0]?["polygon"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\(/)),a.optional(a.consumeToken.bind(void 0,/^nonzero\s*,|^evenodd\s*,/),"nonzero,"),a.consumeSizePairList,a.ignore(a.consumeToken.bind(void 0,/^\)/))],g[1])):void 0}function c(b,c){if(b[0]===c[0])return"circle"==b[0]?a.mergeList(b.slice(1),c.slice(1),["circle(",a.mergeDimensions," at ",a.mergeOffsetList,")"]):"ellipse"==b[0]?a.mergeList(b.slice(1),c.slice(1),["ellipse(",a.mergeNonNegativeSizePair," at ",a.mergeOffsetList,")"]):"polygon"==b[0]&&b[1]==c[1]?a.mergeList(b.slice(2),c.slice(2),["polygon(",b[1],g,")"]):void 0}var d=a.consumeParenthesised.bind(null,a.parseLengthOrPercent),e=a.consumeRepeated.bind(void 0,d,/^/),f=a.mergeNestedRepeated.bind(void 0,a.mergeDimensions," "),g=a.mergeNestedRepeated.bind(void 0,f,",");a.addPropertiesHandler(b,c,["shape-outside"])}(d),function(a,b){function c(a,b){b.concat([a]).forEach(function(b){b in document.documentElement.style&&(d[a]=b),e[b]=a})}var d={},e={};c("transform",["webkitTransform","msTransform"]),c("transformOrigin",["webkitTransformOrigin"]),c("perspective",["webkitPerspective"]),c("perspectiveOrigin",["webkitPerspectiveOrigin"]),a.propertyName=function(a){return d[a]||a},a.unprefixedPropertyName=function(a){return e[a]||a}}(d)}(),function(){if(void 0===document.createElement("div").animate([]).oncancel){var a;if(window.performance&&performance.now)var a=function(){return performance.now()};else var a=function(){return Date.now()};var b=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type="cancel",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()},c=window.Element.prototype.animate;window.Element.prototype.animate=function(d,e){var f=c.call(this,d,e);f._cancelHandlers=[],f.oncancel=null;var g=f.cancel;f.cancel=function(){g.call(this);var c=new b(this,null,a()),d=this._cancelHandlers.concat(this.oncancel?[this.oncancel]:[]);setTimeout(function(){d.forEach(function(a){a.call(c.target,c)})},0)};var h=f.addEventListener;f.addEventListener=function(a,b){"function"==typeof b&&"cancel"==a?this._cancelHandlers.push(b):h.call(this,a,b)};var i=f.removeEventListener;return f.removeEventListener=function(a,b){if("cancel"==a){var c=this._cancelHandlers.indexOf(b);c>=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),function(a,b,c){function d(a){var c=b.timeline;c.currentTime=a,c._discardAnimations(),0==c._animations.length?f=!1:requestAnimationFrame(d)}var e=window.requestAnimationFrame;window.requestAnimationFrame=function(a){return e(function(c){b.timeline._updateAnimationsPromises(),a(c),b.timeline._updateAnimationsPromises()})},b.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},b.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){b.animationsWithPromises=b.animationsWithPromises.filter(function(a){return a._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(a){return"finished"!=a.playState&&"idle"!=a.playState})},_play:function(a){var c=new b.Animation(a,this);return this._animations.push(c),b.restartWebAnimationsNextTick(),c._updatePromises(),c._animation.play(),c._updatePromises(),c},play:function(a){return a&&a.remove(),this._play(a)}};var f=!1;b.restartWebAnimationsNextTick=function(){f||(f=!0,requestAnimationFrame(d))};var g=new b.AnimationTimeline;b.timeline=g;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return g}})}catch(a){}try{window.document.timeline=g}catch(a){}}(0,e),function(a,b,c){b.animationsWithPromises=[],b.Animation=function(b,c){if(this.id="",b&&b._id&&(this.id=b._id),this.effect=b,b&&(b._animation=this),!c)throw new Error("Animation with null timeline is not supported");this._timeline=c,this._sequenceNumber=a.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},b.Animation.prototype={_updatePromises:function(){var a=this._oldPlayState,b=this.playState;return this._readyPromise&&b!==a&&("idle"==b?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==a?this._resolveReadyPromise():"pending"==b&&(this._readyPromise=void 0)),this._finishedPromise&&b!==a&&("idle"==b?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==b?this._resolveFinishedPromise():"finished"==a&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var a,c,d,e,f=!!this._animation;f&&(a=this.playbackRate,c=this._paused,d=this.startTime,e=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=b.newUnderlyingAnimationForKeyframeEffect(this.effect),b.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=b.newUnderlyingAnimationForGroup(this.effect),b.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&b.bindAnimationForCustomEffect(this),f&&(1!=a&&(this.playbackRate=a),null!==d?this.startTime=d:null!==e?this.currentTime=e:null!==this._holdTime&&(this.currentTime=this._holdTime),c&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var a=this.effect._timing.delay;this._childAnimations.forEach(function(c){this._arrangeChildren(c,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c.effect))}.bind(this))}},_setExternalAnimation:function(a){if(this.effect&&this._isGroup)for(var b=0;b<this.effect.children.length;b++)this.effect.children[b]._animation=a,this._childAnimations[b]._setExternalAnimation(a)},_constructChildAnimations:function(){if(this.effect&&this._isGroup){var a=this.effect._timing.delay;this._removeChildAnimations(),this.effect.children.forEach(function(c){var d=b.timeline._play(c);this._childAnimations.push(d),d.playbackRate=this.playbackRate,this._paused&&d.pause(),c._animation=this.effect._animation,this._arrangeChildren(d,a),this.effect instanceof window.SequenceEffect&&(a+=b.groupChildDuration(c))}.bind(this))}},_arrangeChildren:function(a,b){null===this.startTime?a.currentTime=this.currentTime-b/this.playbackRate:a.startTime!==this.startTime+b/this.playbackRate&&(a.startTime=this.startTime+b/this.playbackRate)},get timeline(){return this._timeline},get playState(){return this._animation?this._animation.playState:"idle"},get finished(){return window.Promise?(this._finishedPromise||(-1==b.animationsWithPromises.indexOf(this)&&b.animationsWithPromises.push(this),this._finishedPromise=new Promise(function(a,b){this._resolveFinishedPromise=function(){a(this)},this._rejectFinishedPromise=function(){b({type:DOMException.ABORT_ERR,name:"AbortError"})}}.bind(this)),"finished"==this.playState&&this._resolveFinishedPromise()),this._finishedPromise):(console.warn("Animation Promises require JavaScript Promise constructor"),null)},get ready(){return window.Promise?(this._readyPromise||(-1==b.animationsWithPromises.indexOf(this)&&b.animationsWithPromises.push(this),this._readyPromise=new Promise(function(a,b){this._resolveReadyPromise=function(){a(this)},this._rejectReadyPromise=function(){b({type:DOMException.ABORT_ERR,name:"AbortError"})}}.bind(this)),"pending"!==this.playState&&this._resolveReadyPromise()),this._readyPromise):(console.warn("Animation Promises require JavaScript Promise constructor"),null)},get onfinish(){return this._animation.onfinish},set onfinish(a){this._animation.onfinish="function"==typeof a?function(b){b.target=this,a.call(this,b)}.bind(this):a},get oncancel(){return this._animation.oncancel},set oncancel(a){this._animation.oncancel="function"==typeof a?function(b){b.target=this,a.call(this,b)}.bind(this):a},get currentTime(){this._updatePromises();var a=this._animation.currentTime;return this._updatePromises(),a},set currentTime(a){this._updatePromises(),this._animation.currentTime=isFinite(a)?a:Math.sign(a)*Number.MAX_VALUE,this._register(),this._forEachChild(function(b,c){b.currentTime=a-c}),this._updatePromises()},get startTime(){return this._animation.startTime},set startTime(a){this._updatePromises(),this._animation.startTime=isFinite(a)?a:Math.sign(a)*Number.MAX_VALUE,this._register(),this._forEachChild(function(b,c){b.startTime=a+c}),this._updatePromises()},get playbackRate(){return this._animation.playbackRate},set playbackRate(a){this._updatePromises();var b=this.currentTime;this._animation.playbackRate=a,this._forEachChild(function(b){b.playbackRate=a}),null!==b&&(this.currentTime=b),this._updatePromises()},play:function(){this._updatePromises(),this._paused=!1,this._animation.play(),-1==this._timeline._animations.indexOf(this)&&this._timeline._animations.push(this),this._register(),b.awaitStartTime(this),this._forEachChild(function(a){var b=a.currentTime;a.play(),a.currentTime=b}),this._updatePromises()},pause:function(){this._updatePromises(),this.currentTime&&(this._holdTime=this.currentTime),this._animation.pause(),this._register(),this._forEachChild(function(a){a.pause()}),this._paused=!0,this._updatePromises()},finish:function(){this._updatePromises(),this._animation.finish(),this._register(),this._updatePromises()},cancel:function(){this._updatePromises(),this._animation.cancel(),this._register(),this._removeChildAnimations(),this._updatePromises()},reverse:function(){this._updatePromises();var a=this.currentTime;this._animation.reverse(),this._forEachChild(function(a){a.reverse()}),null!==a&&(this.currentTime=a),this._updatePromises()},addEventListener:function(a,b){var c=b;"function"==typeof b&&(c=function(a){a.target=this,b.call(this,a)}.bind(this),b._wrapper=c),this._animation.addEventListener(a,c)},removeEventListener:function(a,b){this._animation.removeEventListener(a,b&&b._wrapper||b)},_removeChildAnimations:function(){for(;this._childAnimations.length;)this._childAnimations.pop().cancel()},_forEachChild:function(b){var c=0;if(this.effect.children&&this._childAnimations.length<this.effect.children.length&&this._constructChildAnimations(),this._childAnimations.forEach(function(a){b.call(this,a,c),this.effect instanceof window.SequenceEffect&&(c+=a.effect.activeDuration)}.bind(this)),"pending"!=this.playState){var d=this.effect._timing,e=this.currentTime;null!==e&&(e=a.calculateIterationProgress(a.calculateActiveDuration(d),e,d)),(null==e||isNaN(e))&&this._removeChildAnimations()}}},window.Animation=b.Animation}(c,e),function(a,b,c){function d(b){this._frames=a.normalizeKeyframes(b)}function e(){for(var a=!1;i.length;)i.shift()._updateChildren(),a=!0;return a}var f=function(a){if(a._animation=void 0,a instanceof window.SequenceEffect||a instanceof window.GroupEffect)for(var b=0;b<a.children.length;b++)f(a.children[b])};b.removeMulti=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c];d._parent?(-1==b.indexOf(d._parent)&&b.push(d._parent),d._parent.children.splice(d._parent.children.indexOf(d),1),d._parent=null,f(d)):d._animation&&d._animation.effect==d&&(d._animation.cancel(),d._animation.effect=new KeyframeEffect(null,[]),d._animation._callback&&(d._animation._callback._animation=null),d._animation._rebuildUnderlyingAnimation(),f(d))}for(c=0;c<b.length;c++)b[c]._rebuild()},b.KeyframeEffect=function(b,c,e,f){return this.target=b,this._parent=null,e=a.numericTimingToObject(e),this._timingInput=a.cloneTimingInput(e),this._timing=a.normalizeTimingInput(e),this.timing=a.makeTiming(e,!1,this),this.timing._effect=this,"function"==typeof c?(a.deprecated("Custom KeyframeEffect","2015-06-22","Use KeyframeEffect.onsample instead."),this._normalizedKeyframes=c):this._normalizedKeyframes=new d(c),this._keyframes=c,this.activeDuration=a.calculateActiveDuration(this._timing),this._id=f,this},b.KeyframeEffect.prototype={getFrames:function(){return"function"==typeof this._normalizedKeyframes?this._normalizedKeyframes:this._normalizedKeyframes._frames},set onsample(a){if("function"==typeof this.getFrames())throw new Error("Setting onsample on custom effect KeyframeEffect is not supported.");this._onsample=a,this._animation&&this._animation._rebuildUnderlyingAnimation()},get parent(){return this._parent},clone:function(){if("function"==typeof this.getFrames())throw new Error("Cloning custom effects is not supported.");var b=new KeyframeEffect(this.target,[],a.cloneTimingInput(this._timingInput),this._id);return b._normalizedKeyframes=this._normalizedKeyframes,b._keyframes=this._keyframes,b},remove:function(){b.removeMulti([this])}};var g=Element.prototype.animate;Element.prototype.animate=function(a,c){var d="";return c&&c.id&&(d=c.id),b.timeline._play(new b.KeyframeEffect(this,a,c,d))};var h=document.createElementNS("http://www.w3.org/1999/xhtml","div");b.newUnderlyingAnimationForKeyframeEffect=function(a){if(a){var b=a.target||h,c=a._keyframes;"function"==typeof c&&(c=[]);var d=a._timingInput;d.id=a._id}else var b=h,c=[],d=0;return g.apply(b,[c,d])},b.bindAnimationForKeyframeEffect=function(a){a.effect&&"function"==typeof a.effect._normalizedKeyframes&&b.bindAnimationForCustomEffect(a)};var i=[];b.awaitStartTime=function(a){null===a.startTime&&a._isGroup&&(0==i.length&&requestAnimationFrame(e),i.push(a))};var j=window.getComputedStyle;Object.defineProperty(window,"getComputedStyle",{configurable:!0,enumerable:!0,value:function(){b.timeline._updateAnimationsPromises();var a=j.apply(this,arguments);return e()&&(a=j.apply(this,arguments)),b.timeline._updateAnimationsPromises(),a}}),window.KeyframeEffect=b.KeyframeEffect,window.Element.prototype.getAnimations=function(){return document.timeline.getAnimations().filter(function(a){return null!==a.effect&&a.effect.target==this}.bind(this))}}(c,e),function(a,b,c){function d(a){a._registered||(a._registered=!0,g.push(a),h||(h=!0,requestAnimationFrame(e)))}function e(a){var b=g;g=[],b.sort(function(a,b){return a._sequenceNumber-b._sequenceNumber}),b=b.filter(function(a){a();var b=a._animation?a._animation.playState:"idle";return"running"!=b&&"pending"!=b&&(a._registered=!1),a._registered}),g.push.apply(g,b),g.length?(h=!0,requestAnimationFrame(e)):h=!1}var f=(document.createElementNS("http://www.w3.org/1999/xhtml","div"),0);b.bindAnimationForCustomEffect=function(b){var c,e=b.effect.target,g="function"==typeof b.effect.getFrames();c=g?b.effect.getFrames():b.effect._onsample;var h=b.effect.timing,i=null;h=a.normalizeTimingInput(h);var j=function(){var d=j._animation?j._animation.currentTime:null;null!==d&&(d=a.calculateIterationProgress(a.calculateActiveDuration(h),d,h),isNaN(d)&&(d=null)),d!==i&&(g?c(d,e,b.effect):c(d,b.effect,b.effect._animation)),i=d};j._animation=b,j._registered=!1,j._sequenceNumber=f++,b._callback=j,d(j)};var g=[],h=!1;b.Animation.prototype._register=function(){this._callback&&d(this._callback)}}(c,e),function(a,b,c){function d(a){return a._timing.delay+a.activeDuration+a._timing.endDelay}function e(b,c,d){this._id=d,this._parent=null,this.children=b||[],this._reparent(this.children),c=a.numericTimingToObject(c),this._timingInput=a.cloneTimingInput(c),this._timing=a.normalizeTimingInput(c,!0),this.timing=a.makeTiming(c,!0,this),this.timing._effect=this,"auto"===this._timing.duration&&(this._timing.duration=this.activeDuration)}window.SequenceEffect=function(){e.apply(this,arguments)},window.GroupEffect=function(){e.apply(this,arguments)},e.prototype={_isAncestor:function(a){for(var b=this;null!==b;){if(b==a)return!0;b=b._parent}return!1},_rebuild:function(){for(var a=this;a;)"auto"===a.timing.duration&&(a._timing.duration=a.activeDuration),a=a._parent;this._animation&&this._animation._rebuildUnderlyingAnimation()},_reparent:function(a){b.removeMulti(a);for(var c=0;c<a.length;c++)a[c]._parent=this},_putChild:function(a,b){for(var c=b?"Cannot append an ancestor or self":"Cannot prepend an ancestor or self",d=0;d<a.length;d++)if(this._isAncestor(a[d]))throw{type:DOMException.HIERARCHY_REQUEST_ERR,name:"HierarchyRequestError",message:c};for(var d=0;d<a.length;d++)b?this.children.push(a[d]):this.children.unshift(a[d]);this._reparent(a),this._rebuild()},append:function(){this._putChild(arguments,!0)},prepend:function(){this._putChild(arguments,!1)},get parent(){return this._parent},get firstChild(){return this.children.length?this.children[0]:null},get lastChild(){return this.children.length?this.children[this.children.length-1]:null},clone:function(){for(var b=a.cloneTimingInput(this._timingInput),c=[],d=0;d<this.children.length;d++)c.push(this.children[d].clone());return this instanceof GroupEffect?new GroupEffect(c,b):new SequenceEffect(c,b)},remove:function(){b.removeMulti([this])}},window.SequenceEffect.prototype=Object.create(e.prototype),Object.defineProperty(window.SequenceEffect.prototype,"activeDuration",{get:function(){var a=0;return this.children.forEach(function(b){a+=d(b)}),Math.max(a,0)}}),window.GroupEffect.prototype=Object.create(e.prototype),Object.defineProperty(window.GroupEffect.prototype,"activeDuration",{get:function(){var a=0;return this.children.forEach(function(b){a=Math.max(a,d(b))}),a}}),b.newUnderlyingAnimationForGroup=function(c){var d,e=null,f=function(b){var c=d._wrapper;if(c&&"pending"!=c.playState&&c.effect)return null==b?void c._removeChildAnimations():0==b&&c.playbackRate<0&&(e||(e=a.normalizeTimingInput(c.effect.timing)),b=a.calculateIterationProgress(a.calculateActiveDuration(e),-1,e),isNaN(b)||null==b)?(c._forEachChild(function(a){a.currentTime=-1}),void c._removeChildAnimations()):void 0},g=new KeyframeEffect(null,[],c._timing,c._id);return g.onsample=f,d=b.timeline._play(g)},b.bindAnimationForGroup=function(a){a._animation._wrapper=a,a._isGroup=!0,b.awaitStartTime(a),a._constructChildAnimations(),a._setExternalAnimation(a)},b.groupChildDuration=d}(c,e),b.true=a}({},function(){return this}());
+//# sourceMappingURL=web-animations-next.min.js.map \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js.map
new file mode 100644
index 00000000000..0646f1cfa3d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations-next.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js","src/timeline.js","src/web-animations-next-animation.js","src/keyframe-effect-constructor.js","src/effect-callback.js","src/group-constructors.js"],"names":["webAnimationsShared","webAnimations1","webAnimationsNext","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start_gradient","end_gradient","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","normalizeEasing","easing","styleForCleaning","document","createElement","style","animationTimingFunction","normalizedEasing","TypeError","parseEasingFunction","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","endTime","delay","endDelay","min","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateOverallProgress","iterationDuration","activeTime","iterationStart","overallProgress","calculateSimpleIterationProgress","simpleIterationProgress","Infinity","calculateCurrentIteration","floor","calculateDirectedProgress","playbackDirection","currentIteration","currentDirection","calculateIterationProgress","directedProgress","direction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","isNotAnimatable","lastIndexOf","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","animate","oncancel","now","performance","AnimationCancelEvent","target","currentTime","timelineTime","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","originalElementAnimate","Element","options","animation","call","_cancelHandlers","originalCancel","cancel","event","handlers","concat","setTimeout","handler","originalAddEventListener","addEventListener","originalRemoveEventListener","removeEventListener","index","splice","element","documentElement","animated","originalOpacity","getComputedStyle","getPropertyValue","testOpacity","opacity","error","scope","webAnimationsNextTick","t","timeline","_discardAnimations","_animations","ticking","requestAnimationFrame","originalRequestAnimationFrame","_updateAnimationsPromises","AnimationTimeline","getAnimations","animationsWithPromises","_updatePromises","playState","_play","Animation","restartWebAnimationsNextTick","play","remove","defineProperty","configurable","get","e","id","_id","_timeline","_sequenceNumber","sequenceNumber","_holdTime","_paused","_isGroup","_childAnimations","_callback","_oldPlayState","oldPlayState","newPlayState","_readyPromise","_rejectReadyPromise","_resolveReadyPromise","_finishedPromise","_rejectFinishedPromise","_resolveFinishedPromise","oldPlaybackRate","oldPaused","oldStartTime","oldCurrentTime","hadUnderlying","startTime","_wrapper","KeyframeEffect","newUnderlyingAnimationForKeyframeEffect","bindAnimationForKeyframeEffect","SequenceEffect","GroupEffect","newUnderlyingAnimationForGroup","bindAnimationForGroup","_onsample","bindAnimationForCustomEffect","pause","_updateChildren","childAnimation","_arrangeChildren","groupChildDuration","bind","_setExternalAnimation","children","_constructChildAnimations","_removeChildAnimations","child","finished","Promise","resolve","reject","ABORT_ERR","ready","onfinish","v","sign","MAX_VALUE","_register","_forEachChild","awaitStartTime","time","finish","reverse","wrapped","pop","KeyframeList","_frames","updatePendingGroups","updated","pendingGroups","shift","disassociate","removeMulti","effects","oldParents","_parent","_rebuild","_normalizedKeyframes","_keyframes","getFrames","onsample","callback","parent","nullTarget","keyframeEffect","groupAnimation","originalGetComputedStyle","enumerable","arguments","register","_registered","callbacks","tick","updating","left","right","effectFunction","isKeyframeEffect","last","node","constructor","_reparent","_isAncestor","newChildren","_putChild","args","isAppend","HIERARCHY_REQUEST_ERR","unshift","append","prepend","firstChild","lastChild","clonedTiming","clonedChildren","create","total","max","group","underlyingAnimation","ticker","tf","underlyingEffect","exports","webAnimationsTesting"],"mappings":"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","file":"web-animations-next.min.js"} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.html
new file mode 100644
index 00000000000..b5de36c855e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.html
@@ -0,0 +1,50 @@
+<!--
+ Copyright 2014 Google Inc. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- WARNING: This file is DEPRECATED, for development purposes use
+ web-animations*.dev.html instead or depend on
+ web-animations*.min.js in the web-animations-js
+ repository -->
+
+<script src="src/dev.js"></script>
+<script src="src/scope.js"></script>
+<script src="src/deprecation.js"></script>
+<script src="src/timing-utilities.js"></script>
+<script src="src/normalize-keyframes.js"></script>
+<script src="src/animation-node.js"></script>
+<script src="src/effect.js"></script>
+<script src="src/property-interpolation.js"></script>
+<script src="src/animation.js"></script>
+<script src="src/apply.js"></script>
+<script src="src/element-animatable.js"></script>
+<script src="src/interpolation.js"></script>
+<script src="src/player.js"></script>
+<script src="src/tick.js"></script>
+<script src="src/handler-utils.js"></script>
+<script src="src/shadow-handler.js"></script>
+<script src="src/number-handler.js"></script>
+<script src="src/visibility-handler.js"></script>
+<script src="src/color-handler.js"></script>
+<script src="src/dimension-handler.js"></script>
+<script src="src/box-handler.js"></script>
+<script src="src/transform-handler.js"></script>
+<script src="src/property-names.js"></script>
+<script src="src/timeline.js"></script>
+<script src="src/maxifill-player.js"></script>
+<script src="src/animation-constructor.js"></script>
+<script src="src/effect-callback.js"></script>
+<script src="src/group-constructors.js"></script>
+
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.html
new file mode 100644
index 00000000000..b36940d336c
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.html
@@ -0,0 +1 @@
+<script src="./web-animations.min.js"></script>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js
new file mode 100644
index 00000000000..46156b20940
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js
@@ -0,0 +1,16 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+!function(a,b){var c={},d={};!function(a,b){function c(a){if("number"==typeof a)return a;var b={};for(var c in a)b[c]=a[c];return b}function d(){this._delay=0,this._endDelay=0,this._fill="none",this._iterationStart=0,this._iterations=1,this._duration=0,this._playbackRate=1,this._direction="normal",this._easing="linear",this._easingFunction=x}function e(){return a.isDeprecated("Invalid timing inputs","2016-03-02","TypeError exceptions will be thrown instead.",!0)}function f(b,c,e){var f=new d;return c&&(f.fill="both",f.duration="auto"),"number"!=typeof b||isNaN(b)?void 0!==b&&Object.getOwnPropertyNames(b).forEach(function(c){if("auto"!=b[c]){if(("number"==typeof f[c]||"duration"==c)&&("number"!=typeof b[c]||isNaN(b[c])))return;if("fill"==c&&-1==v.indexOf(b[c]))return;if("direction"==c&&-1==w.indexOf(b[c]))return;if("playbackRate"==c&&1!==b[c]&&a.isDeprecated("AnimationEffectTiming.playbackRate","2014-11-28","Use Animation.playbackRate instead."))return;f[c]=b[c]}}):f.duration=b,f}function g(a){return"number"==typeof a&&(a=isNaN(a)?{duration:0}:{duration:a}),a}function h(b,c){return b=a.numericTimingToObject(b),f(b,c)}function i(a,b,c,d){return a<0||a>1||c<0||c>1?x:function(e){function f(a,b,c){return 3*a*(1-c)*(1-c)*c+3*b*(1-c)*c*c+c*c*c}if(e<=0){var g=0;return a>0?g=b/a:!b&&c>0&&(g=d/c),g*e}if(e>=1){var h=0;return c<1?h=(d-1)/(c-1):1==c&&a<1&&(h=(b-1)/(a-1)),1+h*(e-1)}for(var i=0,j=1;i<j;){var k=(i+j)/2,l=f(a,c,k);if(Math.abs(e-l)<1e-5)return f(b,d,k);l<e?i=k:j=k}return f(b,d,k)}}function j(a,b){return function(c){if(c>=1)return 1;var d=1/a;return(c+=b*d)-c%d}}function k(a){C||(C=document.createElement("div").style),C.animationTimingFunction="",C.animationTimingFunction=a;var b=C.animationTimingFunction;if(""==b&&e())throw new TypeError(a+" is not a valid value for easing");return b}function l(a){if("linear"==a)return x;var b=E.exec(a);if(b)return i.apply(this,b.slice(1).map(Number));var c=F.exec(a);return c?j(Number(c[1]),{start:y,middle:z,end:A}[c[2]]):B[a]||x}function m(a){return Math.abs(n(a)/a.playbackRate)}function n(a){return 0===a.duration||0===a.iterations?0:a.duration*a.iterations}function o(a,b,c){if(null==b)return G;var d=c.delay+a+c.endDelay;return b<Math.min(c.delay,d)?H:b>=Math.min(c.delay+a,d)?I:J}function p(a,b,c,d,e){switch(d){case H:return"backwards"==b||"both"==b?0:null;case J:return c-e;case I:return"forwards"==b||"both"==b?a:null;case G:return null}}function q(a,b,c,d,e){var f=e;return 0===a?b!==H&&(f+=c):f+=d/a,f}function r(a,b,c,d,e,f){var g=a===1/0?b%1:a%1;return 0!==g||c!==I||0===d||0===e&&0!==f||(g=1),g}function s(a,b,c,d){return a===I&&b===1/0?1/0:1===c?Math.floor(d)-1:Math.floor(d)}function t(a,b,c){var d=a;if("normal"!==a&&"reverse"!==a){var e=b;"alternate-reverse"===a&&(e+=1),d="normal",e!==1/0&&e%2!=0&&(d="reverse")}return"normal"===d?c:1-c}function u(a,b,c){var d=o(a,b,c),e=p(a,c.fill,b,d,c.delay);if(null===e)return null;var f=q(c.duration,d,c.iterations,e,c.iterationStart),g=r(f,c.iterationStart,d,c.iterations,e,c.duration),h=s(d,c.iterations,g,f),i=t(c.direction,h,g);return c._easingFunction(i)}var v="backwards|forwards|both|none".split("|"),w="reverse|alternate|alternate-reverse".split("|"),x=function(a){return a};d.prototype={_setMember:function(b,c){this["_"+b]=c,this._effect&&(this._effect._timingInput[b]=c,this._effect._timing=a.normalizeTimingInput(this._effect._timingInput),this._effect.activeDuration=a.calculateActiveDuration(this._effect._timing),this._effect._animation&&this._effect._animation._rebuildUnderlyingAnimation())},get playbackRate(){return this._playbackRate},set delay(a){this._setMember("delay",a)},get delay(){return this._delay},set endDelay(a){this._setMember("endDelay",a)},get endDelay(){return this._endDelay},set fill(a){this._setMember("fill",a)},get fill(){return this._fill},set iterationStart(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterationStart must be a non-negative number, received: "+timing.iterationStart);this._setMember("iterationStart",a)},get iterationStart(){return this._iterationStart},set duration(a){if("auto"!=a&&(isNaN(a)||a<0)&&e())throw new TypeError("duration must be non-negative or auto, received: "+a);this._setMember("duration",a)},get duration(){return this._duration},set direction(a){this._setMember("direction",a)},get direction(){return this._direction},set easing(a){this._easingFunction=l(k(a)),this._setMember("easing",a)},get easing(){return this._easing},set iterations(a){if((isNaN(a)||a<0)&&e())throw new TypeError("iterations must be non-negative, received: "+a);this._setMember("iterations",a)},get iterations(){return this._iterations}};var y=1,z=.5,A=0,B={ease:i(.25,.1,.25,1),"ease-in":i(.42,0,1,1),"ease-out":i(0,0,.58,1),"ease-in-out":i(.42,0,.58,1),"step-start":j(1,y),"step-middle":j(1,z),"step-end":j(1,A)},C=null,D="\\s*(-?\\d+\\.?\\d*|-?\\.\\d+)\\s*",E=new RegExp("cubic-bezier\\("+D+","+D+","+D+","+D+"\\)"),F=/steps\(\s*(\d+)\s*,\s*(start|middle|end)\s*\)/,G=0,H=1,I=2,J=3;a.cloneTimingInput=c,a.makeTiming=f,a.numericTimingToObject=g,a.normalizeTimingInput=h,a.calculateActiveDuration=m,a.calculateIterationProgress=u,a.calculatePhase=o,a.normalizeEasing=k,a.parseEasingFunction=l}(c),function(a,b){function c(a,b){return a in k?k[a][b]||b:b}function d(a){return"display"===a||0===a.lastIndexOf("animation",0)||0===a.lastIndexOf("transition",0)}function e(a,b,e){if(!d(a)){var f=h[a];if(f){i.style[a]=b;for(var g in f){var j=f[g],k=i.style[j];e[j]=c(j,k)}}else e[a]=c(a,b)}}function f(a){var b=[];for(var c in a)if(!(c in["easing","offset","composite"])){var d=a[c];Array.isArray(d)||(d=[d]);for(var e,f=d.length,g=0;g<f;g++)e={},e.offset="offset"in a?a.offset:1==f?1:g/(f-1),"easing"in a&&(e.easing=a.easing),"composite"in a&&(e.composite=a.composite),e[c]=d[g],b.push(e)}return b.sort(function(a,b){return a.offset-b.offset}),b}function g(b){function c(){var a=d.length;null==d[a-1].offset&&(d[a-1].offset=1),a>1&&null==d[0].offset&&(d[0].offset=0);for(var b=0,c=d[0].offset,e=1;e<a;e++){var f=d[e].offset;if(null!=f){for(var g=1;g<e-b;g++)d[b+g].offset=c+(f-c)*g/(e-b);b=e,c=f}}}if(null==b)return[];window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||(b=f(b));for(var d=b.map(function(b){var c={};for(var d in b){var f=b[d];if("offset"==d){if(null!=f){if(f=Number(f),!isFinite(f))throw new TypeError("Keyframe offsets must be numbers.");if(f<0||f>1)throw new TypeError("Keyframe offsets must be between 0 and 1.")}}else if("composite"==d){if("add"==f||"accumulate"==f)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"add compositing is not supported"};if("replace"!=f)throw new TypeError("Invalid composite mode "+f+".")}else f="easing"==d?a.normalizeEasing(f):""+f;e(d,f,c)}return void 0==c.offset&&(c.offset=null),void 0==c.easing&&(c.easing="linear"),c}),g=!0,h=-1/0,i=0;i<d.length;i++){var j=d[i].offset;if(null!=j){if(j<h)throw new TypeError("Keyframes are not loosely sorted by offset. Sort or specify offsets.");h=j}else g=!1}return d=d.filter(function(a){return a.offset>=0&&a.offset<=1}),g||c(),d}var h={background:["backgroundImage","backgroundPosition","backgroundSize","backgroundRepeat","backgroundAttachment","backgroundOrigin","backgroundClip","backgroundColor"],border:["borderTopColor","borderTopStyle","borderTopWidth","borderRightColor","borderRightStyle","borderRightWidth","borderBottomColor","borderBottomStyle","borderBottomWidth","borderLeftColor","borderLeftStyle","borderLeftWidth"],borderBottom:["borderBottomWidth","borderBottomStyle","borderBottomColor"],borderColor:["borderTopColor","borderRightColor","borderBottomColor","borderLeftColor"],borderLeft:["borderLeftWidth","borderLeftStyle","borderLeftColor"],borderRadius:["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],borderRight:["borderRightWidth","borderRightStyle","borderRightColor"],borderTop:["borderTopWidth","borderTopStyle","borderTopColor"],borderWidth:["borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth"],flex:["flexGrow","flexShrink","flexBasis"],font:["fontFamily","fontSize","fontStyle","fontVariant","fontWeight","lineHeight"],margin:["marginTop","marginRight","marginBottom","marginLeft"],outline:["outlineColor","outlineStyle","outlineWidth"],padding:["paddingTop","paddingRight","paddingBottom","paddingLeft"]},i=document.createElementNS("http://www.w3.org/1999/xhtml","div"),j={thin:"1px",medium:"3px",thick:"5px"},k={borderBottomWidth:j,borderLeftWidth:j,borderRightWidth:j,borderTopWidth:j,fontSize:{"xx-small":"60%","x-small":"75%",small:"89%",medium:"100%",large:"120%","x-large":"150%","xx-large":"200%"},fontWeight:{normal:"400",bold:"700"},outlineWidth:j,textShadow:{none:"0px 0px 0px transparent"},boxShadow:{none:"0px 0px 0px 0px transparent"}};a.convertToArrayForm=f,a.normalizeKeyframes=g}(c),function(a){var b={};a.isDeprecated=function(a,c,d,e){var f=e?"are":"is",g=new Date,h=new Date(c);return h.setMonth(h.getMonth()+3),!(g<h&&(a in b||console.warn("Web Animations: "+a+" "+f+" deprecated and will stop working on "+h.toDateString()+". "+d),b[a]=!0,1))},a.deprecated=function(b,c,d,e){var f=e?"are":"is";if(a.isDeprecated(b,c,d,e))throw new Error(b+" "+f+" no longer supported. "+d)}}(c),function(){if(document.documentElement.animate){var a=document.documentElement.animate([],0),b=!0;if(a&&(b=!1,"play|currentTime|pause|reverse|playbackRate|cancel|finish|startTime|playState".split("|").forEach(function(c){void 0===a[c]&&(b=!0)})),!b)return}!function(a,b,c){function d(a){for(var b={},c=0;c<a.length;c++)for(var d in a[c])if("offset"!=d&&"easing"!=d&&"composite"!=d){var e={offset:a[c].offset,easing:a[c].easing,value:a[c][d]};b[d]=b[d]||[],b[d].push(e)}for(var f in b){var g=b[f];if(0!=g[0].offset||1!=g[g.length-1].offset)throw{type:DOMException.NOT_SUPPORTED_ERR,name:"NotSupportedError",message:"Partial keyframes are not supported"}}return b}function e(c){var d=[];for(var e in c)for(var f=c[e],g=0;g<f.length-1;g++){var h=g,i=g+1,j=f[h].offset,k=f[i].offset,l=j,m=k;0==g&&(l=-1/0,0==k&&(i=h)),g==f.length-2&&(m=1/0,1==j&&(h=i)),d.push({applyFrom:l,applyTo:m,startOffset:f[h].offset,endOffset:f[i].offset,easingFunction:a.parseEasingFunction(f[h].easing),property:e,interpolation:b.propertyInterpolation(e,f[h].value,f[i].value)})}return d.sort(function(a,b){return a.startOffset-b.startOffset}),d}b.convertEffectInput=function(c){var f=a.normalizeKeyframes(c),g=d(f),h=e(g);return function(a,c){if(null!=c)h.filter(function(a){return c>=a.applyFrom&&c<a.applyTo}).forEach(function(d){var e=c-d.startOffset,f=d.endOffset-d.startOffset,g=0==f?0:d.easingFunction(e/f);b.apply(a,d.property,d.interpolation(g))});else for(var d in g)"offset"!=d&&"easing"!=d&&"composite"!=d&&b.clear(a,d)}}}(c,d),function(a,b,c){function d(a){return a.replace(/-(.)/g,function(a,b){return b.toUpperCase()})}function e(a,b,c){h[c]=h[c]||[],h[c].push([a,b])}function f(a,b,c){for(var f=0;f<c.length;f++){e(a,b,d(c[f]))}}function g(c,e,f){var g=c;/-/.test(c)&&!a.isDeprecated("Hyphenated property names","2016-03-22","Use camelCase instead.",!0)&&(g=d(c)),"initial"!=e&&"initial"!=f||("initial"==e&&(e=i[g]),"initial"==f&&(f=i[g]));for(var j=e==f?[]:h[g],k=0;j&&k<j.length;k++){var l=j[k][0](e),m=j[k][0](f);if(void 0!==l&&void 0!==m){var n=j[k][1](l,m);if(n){var o=b.Interpolation.apply(null,n);return function(a){return 0==a?e:1==a?f:o(a)}}}}return b.Interpolation(!1,!0,function(a){return a?f:e})}var h={};b.addPropertiesHandler=f;var i={backgroundColor:"transparent",backgroundPosition:"0% 0%",borderBottomColor:"currentColor",borderBottomLeftRadius:"0px",borderBottomRightRadius:"0px",borderBottomWidth:"3px",borderLeftColor:"currentColor",borderLeftWidth:"3px",borderRightColor:"currentColor",borderRightWidth:"3px",borderSpacing:"2px",borderTopColor:"currentColor",borderTopLeftRadius:"0px",borderTopRightRadius:"0px",borderTopWidth:"3px",bottom:"auto",clip:"rect(0px, 0px, 0px, 0px)",color:"black",fontSize:"100%",fontWeight:"400",height:"auto",left:"auto",letterSpacing:"normal",lineHeight:"120%",marginBottom:"0px",marginLeft:"0px",marginRight:"0px",marginTop:"0px",maxHeight:"none",maxWidth:"none",minHeight:"0px",minWidth:"0px",opacity:"1.0",outlineColor:"invert",outlineOffset:"0px",outlineWidth:"3px",paddingBottom:"0px",paddingLeft:"0px",paddingRight:"0px",paddingTop:"0px",right:"auto",strokeDasharray:"none",strokeDashoffset:"0px",textIndent:"0px",textShadow:"0px 0px 0px transparent",top:"auto",transform:"",verticalAlign:"0px",visibility:"visible",width:"auto",wordSpacing:"normal",zIndex:"auto"};b.propertyInterpolation=g}(c,d),function(a,b,c){function d(b){var c=a.calculateActiveDuration(b),d=function(d){return a.calculateIterationProgress(c,d,b)};return d._totalDuration=b.delay+c+b.endDelay,d}b.KeyframeEffect=function(c,e,f,g){var h,i=d(a.normalizeTimingInput(f)),j=b.convertEffectInput(e),k=function(){j(c,h)};return k._update=function(a){return null!==(h=i(a))},k._clear=function(){j(c,null)},k._hasSameTarget=function(a){return c===a},k._target=c,k._totalDuration=i._totalDuration,k._id=g,k}}(c,d),function(a,b){function c(a,b){return!(!b.namespaceURI||-1==b.namespaceURI.indexOf("/svg"))&&(g in a||(a[g]=/Trident|MSIE|IEMobile|Edge|Android 4/i.test(a.navigator.userAgent)),a[g])}function d(a,b,c){c.enumerable=!0,c.configurable=!0,Object.defineProperty(a,b,c)}function e(a){this._element=a,this._surrogateStyle=document.createElementNS("http://www.w3.org/1999/xhtml","div").style,this._style=a.style,this._length=0,this._isAnimatedProperty={},this._updateSvgTransformAttr=c(window,a),this._savedTransformAttr=null;for(var b=0;b<this._style.length;b++){var d=this._style[b];this._surrogateStyle[d]=this._style[d]}this._updateIndices()}function f(a){if(!a._webAnimationsPatchedStyle){var b=new e(a);try{d(a,"style",{get:function(){return b}})}catch(b){a.style._set=function(b,c){a.style[b]=c},a.style._clear=function(b){a.style[b]=""}}a._webAnimationsPatchedStyle=a.style}}var g="_webAnimationsUpdateSvgTransformAttr",h={cssText:1,length:1,parentRule:1},i={getPropertyCSSValue:1,getPropertyPriority:1,getPropertyValue:1,item:1,removeProperty:1,setProperty:1},j={removeProperty:1,setProperty:1};e.prototype={get cssText(){return this._surrogateStyle.cssText},set cssText(a){for(var b={},c=0;c<this._surrogateStyle.length;c++)b[this._surrogateStyle[c]]=!0;this._surrogateStyle.cssText=a,this._updateIndices();for(var c=0;c<this._surrogateStyle.length;c++)b[this._surrogateStyle[c]]=!0;for(var d in b)this._isAnimatedProperty[d]||this._style.setProperty(d,this._surrogateStyle.getPropertyValue(d))},get length(){return this._surrogateStyle.length},get parentRule(){return this._style.parentRule},_updateIndices:function(){for(;this._length<this._surrogateStyle.length;)Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,get:function(a){return function(){return this._surrogateStyle[a]}}(this._length)}),this._length++;for(;this._length>this._surrogateStyle.length;)this._length--,Object.defineProperty(this,this._length,{configurable:!0,enumerable:!1,value:void 0})},_set:function(b,c){this._style[b]=c,this._isAnimatedProperty[b]=!0,this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(null==this._savedTransformAttr&&(this._savedTransformAttr=this._element.getAttribute("transform")),this._element.setAttribute("transform",a.transformToSvgMatrix(c)))},_clear:function(b){this._style[b]=this._surrogateStyle[b],this._updateSvgTransformAttr&&"transform"==a.unprefixedPropertyName(b)&&(this._savedTransformAttr?this._element.setAttribute("transform",this._savedTransformAttr):this._element.removeAttribute("transform"),this._savedTransformAttr=null),delete this._isAnimatedProperty[b]}};for(var k in i)e.prototype[k]=function(a,b){return function(){var c=this._surrogateStyle[a].apply(this._surrogateStyle,arguments);return b&&(this._isAnimatedProperty[arguments[0]]||this._style[a].apply(this._style,arguments),this._updateIndices()),c}}(k,k in j);for(var l in document.documentElement.style)l in h||l in i||function(a){d(e.prototype,a,{get:function(){return this._surrogateStyle[a]},set:function(b){this._surrogateStyle[a]=b,this._updateIndices(),this._isAnimatedProperty[a]||(this._style[a]=b)}})}(l);a.apply=function(b,c,d){f(b),b.style._set(a.propertyName(c),d)},a.clear=function(b,c){b._webAnimationsPatchedStyle&&b.style._clear(a.propertyName(c))}}(d),function(a){window.Element.prototype.animate=function(b,c){var d="";return c&&c.id&&(d=c.id),a.timeline._play(a.KeyframeEffect(this,b,c,d))}}(d),function(a,b){function c(a,b,d){if("number"==typeof a&&"number"==typeof b)return a*(1-d)+b*d;if("boolean"==typeof a&&"boolean"==typeof b)return d<.5?a:b;if(a.length==b.length){for(var e=[],f=0;f<a.length;f++)e.push(c(a[f],b[f],d));return e}throw"Mismatched interpolation arguments "+a+":"+b}a.Interpolation=function(a,b,d){return function(e){return d(c(a,b,e))}}}(d),function(a,b){function c(a,b,c){return Math.max(Math.min(a,c),b)}function d(b,d,e){var f=a.dot(b,d);f=c(f,-1,1);var g=[];if(1===f)g=b;else for(var h=Math.acos(f),i=1*Math.sin(e*h)/Math.sqrt(1-f*f),j=0;j<4;j++)g.push(b[j]*(Math.cos(e*h)-f*i)+d[j]*i);return g}var e=function(){function a(a,b){for(var c=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]],d=0;d<4;d++)for(var e=0;e<4;e++)for(var f=0;f<4;f++)c[d][e]+=b[d][f]*a[f][e];return c}function b(a){return 0==a[0][2]&&0==a[0][3]&&0==a[1][2]&&0==a[1][3]&&0==a[2][0]&&0==a[2][1]&&1==a[2][2]&&0==a[2][3]&&0==a[3][2]&&1==a[3][3]}function c(c,d,e,f,g){for(var h=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],i=0;i<4;i++)h[i][3]=g[i];for(var i=0;i<3;i++)for(var j=0;j<3;j++)h[3][i]+=c[j]*h[j][i];var k=f[0],l=f[1],m=f[2],n=f[3],o=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];o[0][0]=1-2*(l*l+m*m),o[0][1]=2*(k*l-m*n),o[0][2]=2*(k*m+l*n),o[1][0]=2*(k*l+m*n),o[1][1]=1-2*(k*k+m*m),o[1][2]=2*(l*m-k*n),o[2][0]=2*(k*m-l*n),o[2][1]=2*(l*m+k*n),o[2][2]=1-2*(k*k+l*l),h=a(h,o);var p=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];e[2]&&(p[2][1]=e[2],h=a(h,p)),e[1]&&(p[2][1]=0,p[2][0]=e[0],h=a(h,p)),e[0]&&(p[2][0]=0,p[1][0]=e[0],h=a(h,p));for(var i=0;i<3;i++)for(var j=0;j<3;j++)h[i][j]*=d[i];return b(h)?[h[0][0],h[0][1],h[1][0],h[1][1],h[3][0],h[3][1]]:h[0].concat(h[1],h[2],h[3])}return c}();a.composeMatrix=e,a.quat=d}(d),function(a,b,c){a.sequenceNumber=0;var d=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type="finish",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()};b.Animation=function(b){this.id="",b&&b._id&&(this.id=b._id),this._sequenceNumber=a.sequenceNumber++,this._currentTime=0,this._startTime=null,this._paused=!1,this._playbackRate=1,this._inTimeline=!0,this._finishedFlag=!0,this.onfinish=null,this._finishHandlers=[],this._effect=b,this._inEffect=this._effect._update(0),this._idle=!0,this._currentTimePending=!1},b.Animation.prototype={_ensureAlive:function(){this.playbackRate<0&&0===this.currentTime?this._inEffect=this._effect._update(-1):this._inEffect=this._effect._update(this.currentTime),this._inTimeline||!this._inEffect&&this._finishedFlag||(this._inTimeline=!0,b.timeline._animations.push(this))},_tickCurrentTime:function(a,b){a!=this._currentTime&&(this._currentTime=a,this._isFinished&&!b&&(this._currentTime=this._playbackRate>0?this._totalDuration:0),this._ensureAlive())},get currentTime(){return this._idle||this._currentTimePending?null:this._currentTime},set currentTime(a){a=+a,isNaN(a)||(b.restart(),this._paused||null==this._startTime||(this._startTime=this._timeline.currentTime-a/this._playbackRate),this._currentTimePending=!1,this._currentTime!=a&&(this._idle&&(this._idle=!1,this._paused=!0),this._tickCurrentTime(a,!0),b.applyDirtiedAnimation(this)))},get startTime(){return this._startTime},set startTime(a){a=+a,isNaN(a)||this._paused||this._idle||(this._startTime=a,this._tickCurrentTime((this._timeline.currentTime-this._startTime)*this.playbackRate),b.applyDirtiedAnimation(this))},get playbackRate(){return this._playbackRate},set playbackRate(a){if(a!=this._playbackRate){var c=this.currentTime;this._playbackRate=a,this._startTime=null,"paused"!=this.playState&&"idle"!=this.playState&&(this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)),null!=c&&(this.currentTime=c)}},get _isFinished(){return!this._idle&&(this._playbackRate>0&&this._currentTime>=this._totalDuration||this._playbackRate<0&&this._currentTime<=0)},get _totalDuration(){return this._effect._totalDuration},get playState(){return this._idle?"idle":null==this._startTime&&!this._paused&&0!=this.playbackRate||this._currentTimePending?"pending":this._paused?"paused":this._isFinished?"finished":"running"},_rewind:function(){if(this._playbackRate>=0)this._currentTime=0;else{if(!(this._totalDuration<1/0))throw new DOMException("Unable to rewind negative playback rate animation with infinite duration","InvalidStateError");this._currentTime=this._totalDuration}},play:function(){this._paused=!1,(this._isFinished||this._idle)&&(this._rewind(),this._startTime=null),this._finishedFlag=!1,this._idle=!1,this._ensureAlive(),b.applyDirtiedAnimation(this)},pause:function(){this._isFinished||this._paused||this._idle?this._idle&&(this._rewind(),this._idle=!1):this._currentTimePending=!0,this._startTime=null,this._paused=!0},finish:function(){this._idle||(this.currentTime=this._playbackRate>0?this._totalDuration:0,this._startTime=this._totalDuration-this.currentTime,this._currentTimePending=!1,b.applyDirtiedAnimation(this))},cancel:function(){this._inEffect&&(this._inEffect=!1,this._idle=!0,this._paused=!1,this._isFinished=!0,this._finishedFlag=!0,this._currentTime=0,this._startTime=null,this._effect._update(null),b.applyDirtiedAnimation(this))},reverse:function(){this.playbackRate*=-1,this.play()},addEventListener:function(a,b){"function"==typeof b&&"finish"==a&&this._finishHandlers.push(b)},removeEventListener:function(a,b){if("finish"==a){var c=this._finishHandlers.indexOf(b);c>=0&&this._finishHandlers.splice(c,1)}},_fireEvents:function(a){if(this._isFinished){if(!this._finishedFlag){var b=new d(this,this._currentTime,a),c=this._finishHandlers.concat(this.onfinish?[this.onfinish]:[]);setTimeout(function(){c.forEach(function(a){a.call(b.target,b)})},0),this._finishedFlag=!0}}else this._finishedFlag=!1},_tick:function(a,b){this._idle||this._paused||(null==this._startTime?b&&(this.startTime=a-this._currentTime/this.playbackRate):this._isFinished||this._tickCurrentTime((a-this._startTime)*this.playbackRate)),b&&(this._currentTimePending=!1,this._fireEvents(a))},get _needsTick(){return this.playState in{pending:1,running:1}||!this._finishedFlag},_targetAnimations:function(){var a=this._effect._target;return a._activeAnimations||(a._activeAnimations=[]),a._activeAnimations},_markTarget:function(){var a=this._targetAnimations();-1===a.indexOf(this)&&a.push(this)},_unmarkTarget:function(){var a=this._targetAnimations(),b=a.indexOf(this);-1!==b&&a.splice(b,1)}}}(c,d),function(a,b,c){function d(a){var b=j;j=[],a<q.currentTime&&(a=q.currentTime),q._animations.sort(e),q._animations=h(a,!0,q._animations)[0],b.forEach(function(b){b[1](a)}),g(),l=void 0}function e(a,b){return a._sequenceNumber-b._sequenceNumber}function f(){this._animations=[],this.currentTime=window.performance&&performance.now?performance.now():0}function g(){o.forEach(function(a){a()}),o.length=0}function h(a,c,d){p=!0,n=!1,b.timeline.currentTime=a,m=!1;var e=[],f=[],g=[],h=[];return d.forEach(function(b){b._tick(a,c),b._inEffect?(f.push(b._effect),b._markTarget()):(e.push(b._effect),b._unmarkTarget()),b._needsTick&&(m=!0);var d=b._inEffect||b._needsTick;b._inTimeline=d,d?g.push(b):h.push(b)}),o.push.apply(o,e),o.push.apply(o,f),m&&requestAnimationFrame(function(){}),p=!1,[g,h]}var i=window.requestAnimationFrame,j=[],k=0;window.requestAnimationFrame=function(a){var b=k++;return 0==j.length&&i(d),j.push([b,a]),b},window.cancelAnimationFrame=function(a){j.forEach(function(b){b[0]==a&&(b[1]=function(){})})},f.prototype={_play:function(c){c._timing=a.normalizeTimingInput(c.timing);var d=new b.Animation(c);return d._idle=!1,d._timeline=this,this._animations.push(d),b.restart(),b.applyDirtiedAnimation(d),d}};var l=void 0,m=!1,n=!1;b.restart=function(){return m||(m=!0,requestAnimationFrame(function(){}),n=!0),n},b.applyDirtiedAnimation=function(a){if(!p){a._markTarget();var c=a._targetAnimations();c.sort(e),h(b.timeline.currentTime,!1,c.slice())[1].forEach(function(a){var b=q._animations.indexOf(a);-1!==b&&q._animations.splice(b,1)}),g()}};var o=[],p=!1,q=new f;b.timeline=q}(c,d),function(a,b){function c(a,b){for(var c=0,d=0;d<a.length;d++)c+=a[d]*b[d];return c}function d(a,b){return[a[0]*b[0]+a[4]*b[1]+a[8]*b[2]+a[12]*b[3],a[1]*b[0]+a[5]*b[1]+a[9]*b[2]+a[13]*b[3],a[2]*b[0]+a[6]*b[1]+a[10]*b[2]+a[14]*b[3],a[3]*b[0]+a[7]*b[1]+a[11]*b[2]+a[15]*b[3],a[0]*b[4]+a[4]*b[5]+a[8]*b[6]+a[12]*b[7],a[1]*b[4]+a[5]*b[5]+a[9]*b[6]+a[13]*b[7],a[2]*b[4]+a[6]*b[5]+a[10]*b[6]+a[14]*b[7],a[3]*b[4]+a[7]*b[5]+a[11]*b[6]+a[15]*b[7],a[0]*b[8]+a[4]*b[9]+a[8]*b[10]+a[12]*b[11],a[1]*b[8]+a[5]*b[9]+a[9]*b[10]+a[13]*b[11],a[2]*b[8]+a[6]*b[9]+a[10]*b[10]+a[14]*b[11],a[3]*b[8]+a[7]*b[9]+a[11]*b[10]+a[15]*b[11],a[0]*b[12]+a[4]*b[13]+a[8]*b[14]+a[12]*b[15],a[1]*b[12]+a[5]*b[13]+a[9]*b[14]+a[13]*b[15],a[2]*b[12]+a[6]*b[13]+a[10]*b[14]+a[14]*b[15],a[3]*b[12]+a[7]*b[13]+a[11]*b[14]+a[15]*b[15]]}function e(a){var b=a.rad||0;return((a.deg||0)/360+(a.grad||0)/400+(a.turn||0))*(2*Math.PI)+b}function f(a){switch(a.t){case"rotatex":var b=e(a.d[0]);return[1,0,0,0,0,Math.cos(b),Math.sin(b),0,0,-Math.sin(b),Math.cos(b),0,0,0,0,1];case"rotatey":var b=e(a.d[0]);return[Math.cos(b),0,-Math.sin(b),0,0,1,0,0,Math.sin(b),0,Math.cos(b),0,0,0,0,1];case"rotate":case"rotatez":var b=e(a.d[0]);return[Math.cos(b),Math.sin(b),0,0,-Math.sin(b),Math.cos(b),0,0,0,0,1,0,0,0,0,1];case"rotate3d":var c=a.d[0],d=a.d[1],f=a.d[2],b=e(a.d[3]),g=c*c+d*d+f*f;if(0===g)c=1,d=0,f=0;else if(1!==g){var h=Math.sqrt(g);c/=h,d/=h,f/=h}var i=Math.sin(b/2),j=i*Math.cos(b/2),k=i*i;return[1-2*(d*d+f*f)*k,2*(c*d*k+f*j),2*(c*f*k-d*j),0,2*(c*d*k-f*j),1-2*(c*c+f*f)*k,2*(d*f*k+c*j),0,2*(c*f*k+d*j),2*(d*f*k-c*j),1-2*(c*c+d*d)*k,0,0,0,0,1];case"scale":return[a.d[0],0,0,0,0,a.d[1],0,0,0,0,1,0,0,0,0,1];case"scalex":return[a.d[0],0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];case"scaley":return[1,0,0,0,0,a.d[0],0,0,0,0,1,0,0,0,0,1];case"scalez":return[1,0,0,0,0,1,0,0,0,0,a.d[0],0,0,0,0,1];case"scale3d":return[a.d[0],0,0,0,0,a.d[1],0,0,0,0,a.d[2],0,0,0,0,1];case"skew":var l=e(a.d[0]),m=e(a.d[1]);return[1,Math.tan(m),0,0,Math.tan(l),1,0,0,0,0,1,0,0,0,0,1];case"skewx":var b=e(a.d[0]);return[1,0,0,0,Math.tan(b),1,0,0,0,0,1,0,0,0,0,1];case"skewy":var b=e(a.d[0]);return[1,Math.tan(b),0,0,0,1,0,0,0,0,1,0,0,0,0,1];case"translate":var c=a.d[0].px||0,d=a.d[1].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,d,0,1];case"translatex":var c=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,0,0,1];case"translatey":var d=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,0,d,0,1];case"translatez":var f=a.d[0].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,f,1];case"translate3d":var c=a.d[0].px||0,d=a.d[1].px||0,f=a.d[2].px||0;return[1,0,0,0,0,1,0,0,0,0,1,0,c,d,f,1];case"perspective":return[1,0,0,0,0,1,0,0,0,0,1,a.d[0].px?-1/a.d[0].px:0,0,0,0,1];case"matrix":return[a.d[0],a.d[1],0,0,a.d[2],a.d[3],0,0,0,0,1,0,a.d[4],a.d[5],0,1];case"matrix3d":return a.d}}function g(a){return 0===a.length?[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]:a.map(f).reduce(d)}function h(a){return[i(g(a))]}var i=function(){function a(a){return a[0][0]*a[1][1]*a[2][2]+a[1][0]*a[2][1]*a[0][2]+a[2][0]*a[0][1]*a[1][2]-a[0][2]*a[1][1]*a[2][0]-a[1][2]*a[2][1]*a[0][0]-a[2][2]*a[0][1]*a[1][0]}function b(b){for(var c=1/a(b),d=b[0][0],e=b[0][1],f=b[0][2],g=b[1][0],h=b[1][1],i=b[1][2],j=b[2][0],k=b[2][1],l=b[2][2],m=[[(h*l-i*k)*c,(f*k-e*l)*c,(e*i-f*h)*c,0],[(i*j-g*l)*c,(d*l-f*j)*c,(f*g-d*i)*c,0],[(g*k-h*j)*c,(j*e-d*k)*c,(d*h-e*g)*c,0]],n=[],o=0;o<3;o++){for(var p=0,q=0;q<3;q++)p+=b[3][q]*m[q][o];n.push(p)}return n.push(1),m.push(n),m}function d(a){return[[a[0][0],a[1][0],a[2][0],a[3][0]],[a[0][1],a[1][1],a[2][1],a[3][1]],[a[0][2],a[1][2],a[2][2],a[3][2]],[a[0][3],a[1][3],a[2][3],a[3][3]]]}function e(a,b){for(var c=[],d=0;d<4;d++){for(var e=0,f=0;f<4;f++)e+=a[f]*b[f][d];c.push(e)}return c}function f(a){var b=g(a);return[a[0]/b,a[1]/b,a[2]/b]}function g(a){return Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2])}function h(a,b,c,d){return[c*a[0]+d*b[0],c*a[1]+d*b[1],c*a[2]+d*b[2]]}function i(a,b){return[a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0]]}function j(j){var k=[j.slice(0,4),j.slice(4,8),j.slice(8,12),j.slice(12,16)];if(1!==k[3][3])return null;for(var l=[],m=0;m<4;m++)l.push(k[m].slice());for(var m=0;m<3;m++)l[m][3]=0;if(0===a(l))return null;var n,o=[];k[0][3]||k[1][3]||k[2][3]?(o.push(k[0][3]),o.push(k[1][3]),o.push(k[2][3]),o.push(k[3][3]),n=e(o,d(b(l)))):n=[0,0,0,1];var p=k[3].slice(0,3),q=[];q.push(k[0].slice(0,3));var r=[];r.push(g(q[0])),q[0]=f(q[0]);var s=[];q.push(k[1].slice(0,3)),s.push(c(q[0],q[1])),q[1]=h(q[1],q[0],1,-s[0]),r.push(g(q[1])),q[1]=f(q[1]),s[0]/=r[1],q.push(k[2].slice(0,3)),s.push(c(q[0],q[2])),q[2]=h(q[2],q[0],1,-s[1]),s.push(c(q[1],q[2])),q[2]=h(q[2],q[1],1,-s[2]),r.push(g(q[2])),q[2]=f(q[2]),s[1]/=r[2],s[2]/=r[2];var t=i(q[1],q[2]);if(c(q[0],t)<0)for(var m=0;m<3;m++)r[m]*=-1,q[m][0]*=-1,q[m][1]*=-1,q[m][2]*=-1;var u,v,w=q[0][0]+q[1][1]+q[2][2]+1;return w>1e-4?(u=.5/Math.sqrt(w),v=[(q[2][1]-q[1][2])*u,(q[0][2]-q[2][0])*u,(q[1][0]-q[0][1])*u,.25/u]):q[0][0]>q[1][1]&&q[0][0]>q[2][2]?(u=2*Math.sqrt(1+q[0][0]-q[1][1]-q[2][2]),v=[.25*u,(q[0][1]+q[1][0])/u,(q[0][2]+q[2][0])/u,(q[2][1]-q[1][2])/u]):q[1][1]>q[2][2]?(u=2*Math.sqrt(1+q[1][1]-q[0][0]-q[2][2]),v=[(q[0][1]+q[1][0])/u,.25*u,(q[1][2]+q[2][1])/u,(q[0][2]-q[2][0])/u]):(u=2*Math.sqrt(1+q[2][2]-q[0][0]-q[1][1]),v=[(q[0][2]+q[2][0])/u,(q[1][2]+q[2][1])/u,.25*u,(q[1][0]-q[0][1])/u]),[p,r,s,v,n]}return j}();a.dot=c,a.makeMatrixDecomposition=h,a.transformListToMatrix=g}(d),function(a){function b(a,b){var c=a.exec(b);if(c)return c=a.ignoreCase?c[0].toLowerCase():c[0],[c,b.substr(c.length)]}function c(a,b){b=b.replace(/^\s*/,"");var c=a(b);if(c)return[c[0],c[1].replace(/^\s*/,"")]}function d(a,d,e){a=c.bind(null,a);for(var f=[];;){var g=a(e);if(!g)return[f,e];if(f.push(g[0]),e=g[1],!(g=b(d,e))||""==g[1])return[f,e];e=g[1]}}function e(a,b){for(var c=0,d=0;d<b.length&&(!/\s|,/.test(b[d])||0!=c);d++)if("("==b[d])c++;else if(")"==b[d]&&(c--,0==c&&d++,c<=0))break;var e=a(b.substr(0,d));return void 0==e?void 0:[e,b.substr(d)]}function f(a,b){for(var c=a,d=b;c&&d;)c>d?c%=d:d%=c;return c=a*b/(c+d)}function g(a){return function(b){var c=a(b);return c&&(c[0]=void 0),c}}function h(a,b){return function(c){return a(c)||[b,c]}}function i(b,c){for(var d=[],e=0;e<b.length;e++){var f=a.consumeTrimmed(b[e],c);if(!f||""==f[0])return;void 0!==f[0]&&d.push(f[0]),c=f[1]}if(""==c)return d}function j(a,b,c,d,e){for(var g=[],h=[],i=[],j=f(d.length,e.length),k=0;k<j;k++){var l=b(d[k%d.length],e[k%e.length]);if(!l)return;g.push(l[0]),h.push(l[1]),i.push(l[2])}return[g,h,function(b){var d=b.map(function(a,b){return i[b](a)}).join(c);return a?a(d):d}]}function k(a,b,c){for(var d=[],e=[],f=[],g=0,h=0;h<c.length;h++)if("function"==typeof c[h]){var i=c[h](a[g],b[g++]);d.push(i[0]),e.push(i[1]),f.push(i[2])}else!function(a){d.push(!1),e.push(!1),f.push(function(){return c[a]})}(h);return[d,e,function(a){for(var b="",c=0;c<a.length;c++)b+=f[c](a[c]);return b}]}a.consumeToken=b,a.consumeTrimmed=c,a.consumeRepeated=d,a.consumeParenthesised=e,a.ignore=g,a.optional=h,a.consumeList=i,a.mergeNestedRepeated=j.bind(null,null),a.mergeWrappedNestedRepeated=j,a.mergeList=k}(d),function(a){function b(b){function c(b){var c=a.consumeToken(/^inset/i,b);if(c)return d.inset=!0,c;var c=a.consumeLengthOrPercent(b);if(c)return d.lengths.push(c[0]),c;var c=a.consumeColor(b);return c?(d.color=c[0],c):void 0}var d={inset:!1,lengths:[],color:null},e=a.consumeRepeated(c,/^/,b);if(e&&e[0].length)return[d,e[1]]}function c(c){var d=a.consumeRepeated(b,/^,/,c);if(d&&""==d[1])return d[0]}function d(b,c){for(;b.lengths.length<Math.max(b.lengths.length,c.lengths.length);)b.lengths.push({px:0});for(;c.lengths.length<Math.max(b.lengths.length,c.lengths.length);)c.lengths.push({px:0});if(b.inset==c.inset&&!!b.color==!!c.color){for(var d,e=[],f=[[],0],g=[[],0],h=0;h<b.lengths.length;h++){var i=a.mergeDimensions(b.lengths[h],c.lengths[h],2==h);f[0].push(i[0]),g[0].push(i[1]),e.push(i[2])}if(b.color&&c.color){var j=a.mergeColors(b.color,c.color);f[1]=j[0],g[1]=j[1],d=j[2]}return[f,g,function(a){for(var c=b.inset?"inset ":" ",f=0;f<e.length;f++)c+=e[f](a[0][f])+" ";return d&&(c+=d(a[1])),c}]}}function e(b,c,d,e){function f(a){return{inset:a,color:[0,0,0,0],lengths:[{px:0},{px:0},{px:0},{px:0}]}}for(var g=[],h=[],i=0;i<d.length||i<e.length;i++){var j=d[i]||f(e[i].inset),k=e[i]||f(d[i].inset);g.push(j),h.push(k)}return a.mergeNestedRepeated(b,c,g,h)}var f=e.bind(null,d,", ");a.addPropertiesHandler(c,f,["box-shadow","text-shadow"])}(d),function(a,b){function c(a){return a.toFixed(3).replace(/0+$/,"").replace(/\.$/,"")}function d(a,b,c){return Math.min(b,Math.max(a,c))}function e(a){if(/^\s*[-+]?(\d*\.)?\d+\s*$/.test(a))return Number(a)}function f(a,b){return[a,b,c]}function g(a,b){if(0!=a)return i(0,1/0)(a,b)}function h(a,b){return[a,b,function(a){return Math.round(d(1,1/0,a))}]}function i(a,b){return function(e,f){return[e,f,function(e){return c(d(a,b,e))}]}}function j(a){var b=a.trim().split(/\s*[\s,]\s*/);if(0!==b.length){for(var c=[],d=0;d<b.length;d++){var f=e(b[d]);if(void 0===f)return;c.push(f)}return c}}function k(a,b){if(a.length==b.length)return[a,b,function(a){return a.map(c).join(" ")}]}function l(a,b){return[a,b,Math.round]}a.clamp=d,a.addPropertiesHandler(j,k,["stroke-dasharray"]),a.addPropertiesHandler(e,i(0,1/0),["border-image-width","line-height"]),a.addPropertiesHandler(e,i(0,1),["opacity","shape-image-threshold"]),a.addPropertiesHandler(e,g,["flex-grow","flex-shrink"]),a.addPropertiesHandler(e,h,["orphans","widows"]),a.addPropertiesHandler(e,l,["z-index"]),a.parseNumber=e,a.parseNumberList=j,a.mergeNumbers=f,a.numberToString=c}(d),function(a,b){function c(a,b){if("visible"==a||"visible"==b)return[0,1,function(c){return c<=0?a:c>=1?b:"visible"}]}a.addPropertiesHandler(String,c,["visibility"])}(d),function(a,b){function c(a){a=a.trim(),f.fillStyle="#000",f.fillStyle=a;var b=f.fillStyle;if(f.fillStyle="#fff",f.fillStyle=a,b==f.fillStyle){f.fillRect(0,0,1,1);var c=f.getImageData(0,0,1,1).data;f.clearRect(0,0,1,1);var d=c[3]/255;return[c[0]*d,c[1]*d,c[2]*d,d]}}function d(b,c){return[b,c,function(b){function c(a){return Math.max(0,Math.min(255,a))}if(b[3])for(var d=0;d<3;d++)b[d]=Math.round(c(b[d]/b[3]));return b[3]=a.numberToString(a.clamp(0,1,b[3])),"rgba("+b.join(",")+")"}]}var e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");e.width=e.height=1;var f=e.getContext("2d");a.addPropertiesHandler(c,d,["background-color","border-bottom-color","border-left-color","border-right-color","border-top-color","color","fill","flood-color","lighting-color","outline-color","stop-color","stroke","text-decoration-color"]),a.consumeColor=a.consumeParenthesised.bind(null,c),a.mergeColors=d}(d),function(a,b){function c(a){function b(){var b=h.exec(a);g=b?b[0]:void 0}function c(){var a=Number(g);return b(),a}function d(){if("("!==g)return c();b();var a=f();return")"!==g?NaN:(b(),a)}function e(){for(var a=d();"*"===g||"/"===g;){var c=g;b();var e=d();"*"===c?a*=e:a/=e}return a}function f(){for(var a=e();"+"===g||"-"===g;){var c=g;b();var d=e();"+"===c?a+=d:a-=d}return a}var g,h=/([\+\-\w\.]+|[\(\)\*\/])/g;return b(),f()}function d(a,b){if("0"==(b=b.trim().toLowerCase())&&"px".search(a)>=0)return{px:0};if(/^[^(]*$|^calc/.test(b)){b=b.replace(/calc\(/g,"(");var d={};b=b.replace(a,function(a){return d[a]=null,"U"+a});for(var e="U("+a.source+")",f=b.replace(/[-+]?(\d*\.)?\d+([Ee][-+]?\d+)?/g,"N").replace(new RegExp("N"+e,"g"),"D").replace(/\s[+-]\s/g,"O").replace(/\s/g,""),g=[/N\*(D)/g,/(N|D)[*\/]N/g,/(N|D)O\1/g,/\((N|D)\)/g],h=0;h<g.length;)g[h].test(f)?(f=f.replace(g[h],"$1"),h=0):h++;if("D"==f){for(var i in d){var j=c(b.replace(new RegExp("U"+i,"g"),"").replace(new RegExp(e,"g"),"*0"));if(!isFinite(j))return;d[i]=j}return d}}}function e(a,b){return f(a,b,!0)}function f(b,c,d){var e,f=[];for(e in b)f.push(e);for(e in c)f.indexOf(e)<0&&f.push(e);return b=f.map(function(a){return b[a]||0}),c=f.map(function(a){return c[a]||0}),[b,c,function(b){var c=b.map(function(c,e){return 1==b.length&&d&&(c=Math.max(c,0)),a.numberToString(c)+f[e]}).join(" + ");return b.length>1?"calc("+c+")":c}]}var g="px|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc",h=d.bind(null,new RegExp(g,"g")),i=d.bind(null,new RegExp(g+"|%","g")),j=d.bind(null,/deg|rad|grad|turn/g);a.parseLength=h,a.parseLengthOrPercent=i,a.consumeLengthOrPercent=a.consumeParenthesised.bind(null,i),a.parseAngle=j,a.mergeDimensions=f;var k=a.consumeParenthesised.bind(null,h),l=a.consumeRepeated.bind(void 0,k,/^/),m=a.consumeRepeated.bind(void 0,l,/^,/);a.consumeSizePairList=m;var n=function(a){var b=m(a);if(b&&""==b[1])return b[0]},o=a.mergeNestedRepeated.bind(void 0,e," "),p=a.mergeNestedRepeated.bind(void 0,o,",");a.mergeNonNegativeSizePair=o,a.addPropertiesHandler(n,p,["background-size"]),a.addPropertiesHandler(i,e,["border-bottom-width","border-image-width","border-left-width","border-right-width","border-top-width","flex-basis","font-size","height","line-height","max-height","max-width","outline-width","width"]),a.addPropertiesHandler(i,f,["border-bottom-left-radius","border-bottom-right-radius","border-top-left-radius","border-top-right-radius","bottom","left","letter-spacing","margin-bottom","margin-left","margin-right","margin-top","min-height","min-width","outline-offset","padding-bottom","padding-left","padding-right","padding-top","perspective","right","shape-margin","stroke-dashoffset","text-indent","top","vertical-align","word-spacing"])}(d),function(a,b){function c(b){return a.consumeLengthOrPercent(b)||a.consumeToken(/^auto/,b)}function d(b){var d=a.consumeList([a.ignore(a.consumeToken.bind(null,/^rect/)),a.ignore(a.consumeToken.bind(null,/^\(/)),a.consumeRepeated.bind(null,c,/^,/),a.ignore(a.consumeToken.bind(null,/^\)/))],b);if(d&&4==d[0].length)return d[0]}function e(b,c){return"auto"==b||"auto"==c?[!0,!1,function(d){var e=d?b:c;if("auto"==e)return"auto";var f=a.mergeDimensions(e,e);return f[2](f[0])}]:a.mergeDimensions(b,c)}function f(a){return"rect("+a+")"}var g=a.mergeWrappedNestedRepeated.bind(null,f,e,", ");a.parseBox=d,a.mergeBoxes=g,a.addPropertiesHandler(d,g,["clip"])}(d),function(a,b){function c(a){return function(b){var c=0;return a.map(function(a){return a===k?b[c++]:a})}}function d(a){return a}function e(b){if("none"==(b=b.toLowerCase().trim()))return[];for(var c,d=/\s*(\w+)\(([^)]*)\)/g,e=[],f=0;c=d.exec(b);){if(c.index!=f)return;f=c.index+c[0].length;var g=c[1],h=n[g];if(!h)return;var i=c[2].split(","),j=h[0];if(j.length<i.length)return;for(var k=[],o=0;o<j.length;o++){var p,q=i[o],r=j[o];if(void 0===(p=q?{A:function(b){return"0"==b.trim()?m:a.parseAngle(b)},N:a.parseNumber,T:a.parseLengthOrPercent,L:a.parseLength}[r.toUpperCase()](q):{a:m,n:k[0],t:l}[r]))return;k.push(p)}if(e.push({t:g,d:k}),d.lastIndex==b.length)return e}}function f(a){return a.toFixed(6).replace(".000000","")}function g(b,c){if(b.decompositionPair!==c){b.decompositionPair=c;var d=a.makeMatrixDecomposition(b)}if(c.decompositionPair!==b){c.decompositionPair=b;var e=a.makeMatrixDecomposition(c)}return null==d[0]||null==e[0]?[[!1],[!0],function(a){return a?c[0].d:b[0].d}]:(d[0].push(0),e[0].push(1),[d,e,function(b){var c=a.quat(d[0][3],e[0][3],b[5]);return a.composeMatrix(b[0],b[1],b[2],c,b[4]).map(f).join(",")}])}function h(a){return a.replace(/[xy]/,"")}function i(a){return a.replace(/(x|y|z|3d)?$/,"3d")}function j(b,c){var d=a.makeMatrixDecomposition&&!0,e=!1;if(!b.length||!c.length){b.length||(e=!0,b=c,c=[]);for(var f=0;f<b.length;f++){var j=b[f].t,k=b[f].d,l="scale"==j.substr(0,5)?1:0;c.push({t:j,d:k.map(function(a){if("number"==typeof a)return l;var b={};for(var c in a)b[c]=l;return b})})}}var m=function(a,b){return"perspective"==a&&"perspective"==b||("matrix"==a||"matrix3d"==a)&&("matrix"==b||"matrix3d"==b)},o=[],p=[],q=[];if(b.length!=c.length){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[["matrix",[r[2]]]]}else for(var f=0;f<b.length;f++){var j,s=b[f].t,t=c[f].t,u=b[f].d,v=c[f].d,w=n[s],x=n[t];if(m(s,t)){if(!d)return;var r=g([b[f]],[c[f]]);o.push(r[0]),p.push(r[1]),q.push(["matrix",[r[2]]])}else{if(s==t)j=s;else if(w[2]&&x[2]&&h(s)==h(t))j=h(s),u=w[2](u),v=x[2](v);else{if(!w[1]||!x[1]||i(s)!=i(t)){if(!d)return;var r=g(b,c);o=[r[0]],p=[r[1]],q=[["matrix",[r[2]]]];break}j=i(s),u=w[1](u),v=x[1](v)}for(var y=[],z=[],A=[],B=0;B<u.length;B++){var C="number"==typeof u[B]?a.mergeNumbers:a.mergeDimensions,r=C(u[B],v[B]);y[B]=r[0],z[B]=r[1],A.push(r[2])}o.push(y),p.push(z),q.push([j,A])}}if(e){var D=o;o=p,p=D}return[o,p,function(a){return a.map(function(a,b){var c=a.map(function(a,c){return q[b][1][c](a)}).join(",");return"matrix"==q[b][0]&&16==c.split(",").length&&(q[b][0]="matrix3d"),q[b][0]+"("+c+")"}).join(" ")}]}var k=null,l={px:0},m={deg:0},n={matrix:["NNNNNN",[k,k,0,0,k,k,0,0,0,0,1,0,k,k,0,1],d],matrix3d:["NNNNNNNNNNNNNNNN",d],rotate:["A"],rotatex:["A"],rotatey:["A"],rotatez:["A"],rotate3d:["NNNA"],perspective:["L"],scale:["Nn",c([k,k,1]),d],scalex:["N",c([k,1,1]),c([k,1])],scaley:["N",c([1,k,1]),c([1,k])],scalez:["N",c([1,1,k])],scale3d:["NNN",d],skew:["Aa",null,d],skewx:["A",null,c([k,m])],skewy:["A",null,c([m,k])],translate:["Tt",c([k,k,l]),d],translatex:["T",c([k,l,l]),c([k,l])],translatey:["T",c([l,k,l]),c([l,k])],translatez:["L",c([l,l,k])],translate3d:["TTL",d]};a.addPropertiesHandler(e,j,["transform"]),a.transformToSvgMatrix=function(b){var c=a.transformListToMatrix(e(b));return"matrix("+f(c[0])+" "+f(c[1])+" "+f(c[4])+" "+f(c[5])+" "+f(c[12])+" "+f(c[13])+")"}}(d),function(a){function b(a){var b=Number(a);if(!(isNaN(b)||b<100||b>900||b%100!=0))return b}function c(b){return b=100*Math.round(b/100),b=a.clamp(100,900,b),400===b?"normal":700===b?"bold":String(b)}function d(a,b){return[a,b,c]}a.addPropertiesHandler(b,d,["font-weight"])}(d),function(a){function b(a){var b={};for(var c in a)b[c]=-a[c];return b}function c(b){return a.consumeToken(/^(left|center|right|top|bottom)\b/i,b)||a.consumeLengthOrPercent(b)}function d(b,d){var e=a.consumeRepeated(c,/^/,d);if(e&&""==e[1]){var f=e[0];if(f[0]=f[0]||"center",f[1]=f[1]||"center",3==b&&(f[2]=f[2]||{px:0}),f.length==b){if(/top|bottom/.test(f[0])||/left|right/.test(f[1])){var h=f[0];f[0]=f[1],f[1]=h}if(/left|right|center|Object/.test(f[0])&&/top|bottom|center|Object/.test(f[1]))return f.map(function(a){return"object"==typeof a?a:g[a]})}}}function e(d){var e=a.consumeRepeated(c,/^/,d);if(e){for(var f=e[0],h=[{"%":50},{"%":50}],i=0,j=!1,k=0;k<f.length;k++){var l=f[k];"string"==typeof l?(j=/bottom|right/.test(l),i={left:0,right:0,center:i,top:1,bottom:1}[l],h[i]=g[l],"center"==l&&i++):(j&&(l=b(l),l["%"]=(l["%"]||0)+100),h[i]=l,i++,j=!1)}return[h,e[1]]}}function f(b){var c=a.consumeRepeated(e,/^,/,b);if(c&&""==c[1])return c[0]}var g={left:{"%":0},center:{"%":50},right:{"%":100},top:{"%":0},bottom:{"%":100}},h=a.mergeNestedRepeated.bind(null,a.mergeDimensions," ");a.addPropertiesHandler(d.bind(null,3),h,["transform-origin"]),a.addPropertiesHandler(d.bind(null,2),h,["perspective-origin"]),a.consumePosition=e,a.mergeOffsetList=h;var i=a.mergeNestedRepeated.bind(null,h,", ");a.addPropertiesHandler(f,i,["background-position","object-position"])}(d),function(a){function b(b){var c=a.consumeToken(/^circle/,b);if(c&&c[0])return["circle"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\(/)),d,a.ignore(a.consumeToken.bind(void 0,/^at/)),a.consumePosition,a.ignore(a.consumeToken.bind(void 0,/^\)/))],c[1]));var f=a.consumeToken(/^ellipse/,b);if(f&&f[0])return["ellipse"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\(/)),e,a.ignore(a.consumeToken.bind(void 0,/^at/)),a.consumePosition,a.ignore(a.consumeToken.bind(void 0,/^\)/))],f[1]));var g=a.consumeToken(/^polygon/,b);return g&&g[0]?["polygon"].concat(a.consumeList([a.ignore(a.consumeToken.bind(void 0,/^\(/)),a.optional(a.consumeToken.bind(void 0,/^nonzero\s*,|^evenodd\s*,/),"nonzero,"),a.consumeSizePairList,a.ignore(a.consumeToken.bind(void 0,/^\)/))],g[1])):void 0}function c(b,c){if(b[0]===c[0])return"circle"==b[0]?a.mergeList(b.slice(1),c.slice(1),["circle(",a.mergeDimensions," at ",a.mergeOffsetList,")"]):"ellipse"==b[0]?a.mergeList(b.slice(1),c.slice(1),["ellipse(",a.mergeNonNegativeSizePair," at ",a.mergeOffsetList,")"]):"polygon"==b[0]&&b[1]==c[1]?a.mergeList(b.slice(2),c.slice(2),["polygon(",b[1],g,")"]):void 0}var d=a.consumeParenthesised.bind(null,a.parseLengthOrPercent),e=a.consumeRepeated.bind(void 0,d,/^/),f=a.mergeNestedRepeated.bind(void 0,a.mergeDimensions," "),g=a.mergeNestedRepeated.bind(void 0,f,",");a.addPropertiesHandler(b,c,["shape-outside"])}(d),function(a,b){function c(a,b){b.concat([a]).forEach(function(b){b in document.documentElement.style&&(d[a]=b),e[b]=a})}var d={},e={};c("transform",["webkitTransform","msTransform"]),c("transformOrigin",["webkitTransformOrigin"]),c("perspective",["webkitPerspective"]),c("perspectiveOrigin",["webkitPerspectiveOrigin"]),a.propertyName=function(a){return d[a]||a},a.unprefixedPropertyName=function(a){return e[a]||a}}(d)}(),function(){if(void 0===document.createElement("div").animate([]).oncancel){var a;if(window.performance&&performance.now)var a=function(){return performance.now()};else var a=function(){return Date.now()};var b=function(a,b,c){this.target=a,this.currentTime=b,this.timelineTime=c,this.type="cancel",this.bubbles=!1,this.cancelable=!1,this.currentTarget=a,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()},c=window.Element.prototype.animate;window.Element.prototype.animate=function(d,e){var f=c.call(this,d,e);f._cancelHandlers=[],f.oncancel=null;var g=f.cancel;f.cancel=function(){g.call(this);var c=new b(this,null,a()),d=this._cancelHandlers.concat(this.oncancel?[this.oncancel]:[]);setTimeout(function(){d.forEach(function(a){a.call(c.target,c)})},0)};var h=f.addEventListener;f.addEventListener=function(a,b){"function"==typeof b&&"cancel"==a?this._cancelHandlers.push(b):h.call(this,a,b)};var i=f.removeEventListener;return f.removeEventListener=function(a,b){if("cancel"==a){var c=this._cancelHandlers.indexOf(b);c>=0&&this._cancelHandlers.splice(c,1)}else i.call(this,a,b)},f}}}(),function(a){var b=document.documentElement,c=null,d=!1;try{var e=getComputedStyle(b).getPropertyValue("opacity"),f="0"==e?"1":"0";c=b.animate({opacity:[f,f]},{duration:1}),c.currentTime=0,d=getComputedStyle(b).getPropertyValue("opacity")==f}catch(a){}finally{c&&c.cancel()}if(!d){var g=window.Element.prototype.animate;window.Element.prototype.animate=function(b,c){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&b[Symbol.iterator]&&(b=Array.from(b)),Array.isArray(b)||null===b||(b=a.convertToArrayForm(b)),g.call(this,b,c)}}}(c),b.true=a}({},function(){return this}());
+//# sourceMappingURL=web-animations.min.js.map \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js.map
new file mode 100644
index 00000000000..c78ace0f3a4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-animations-js/web-animations.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["src/scope.js","src/timing-utilities.js","src/normalize-keyframes.js","src/deprecation.js","src/web-animations-bonus-cancel-events.js","src/web-animations-bonus-object-form-keyframes.js"],"names":["webAnimationsShared","webAnimations1","shared","testing","cloneTimingInput","timingInput","clone","m","AnimationEffectTiming","this","_delay","_endDelay","_fill","_iterationStart","_iterations","_duration","_playbackRate","_direction","_easing","_easingFunction","linear","isInvalidTimingDeprecated","isDeprecated","makeTiming","forGroup","effect","timing","fill","duration","isNaN","Object","getOwnPropertyNames","forEach","property","fills","indexOf","directions","numericTimingToObject","normalizeTimingInput","cubic","a","b","c","d","x","f","start_gradient","end_gradient","start","end","mid","xEst","Math","abs","step","count","pos","stepSize","normalizeEasing","easing","styleForCleaning","document","createElement","style","animationTimingFunction","normalizedEasing","TypeError","parseEasingFunction","cubicData","cubicBezierRe","exec","apply","slice","map","Number","stepData","stepRe","Start","middle","Middle","End","presets","calculateActiveDuration","repeatedDuration","playbackRate","iterations","calculatePhase","activeDuration","localTime","PhaseNone","endTime","delay","endDelay","min","PhaseBefore","PhaseAfter","PhaseActive","calculateActiveTime","fillMode","phase","calculateOverallProgress","iterationDuration","activeTime","iterationStart","overallProgress","calculateSimpleIterationProgress","simpleIterationProgress","Infinity","calculateCurrentIteration","floor","calculateDirectedProgress","playbackDirection","currentIteration","currentDirection","calculateIterationProgress","directedProgress","direction","split","prototype","_setMember","member","value","_effect","_timingInput","_timing","_animation","_rebuildUnderlyingAnimation","ease","ease-in","ease-out","ease-in-out","step-start","step-middle","step-end","numberString","RegExp","antiAlias","aliases","isNotAnimatable","lastIndexOf","expandShorthandAndAntiAlias","result","longProperties","shorthandToLonghand","shorthandExpanderElem","i","longProperty","longhandValue","convertToArrayForm","effectInput","normalizedEffectInput","values","Array","isArray","keyframe","numKeyframes","length","offset","composite","push","sort","normalizeKeyframes","spaceKeyframes","keyframes","previousIndex","previousOffset","j","window","Symbol","iterator","from","originalKeyframe","memberValue","isFinite","type","DOMException","NOT_SUPPORTED_ERR","name","message","everyFrameHasOffset","filter","background","border","borderBottom","borderColor","borderLeft","borderRadius","borderRight","borderTop","borderWidth","flex","font","margin","outline","padding","createElementNS","borderWidthAliases","thin","medium","thick","borderBottomWidth","borderLeftWidth","borderRightWidth","borderTopWidth","fontSize","xx-small","x-small","small","large","x-large","xx-large","fontWeight","normal","bold","outlineWidth","textShadow","none","boxShadow","silenced","feature","date","advice","plural","auxVerb","today","Date","expiry","setMonth","getMonth","console","warn","toDateString","deprecated","Error","animate","oncancel","now","performance","AnimationCancelEvent","target","currentTime","timelineTime","bubbles","cancelable","currentTarget","defaultPrevented","eventPhase","Event","AT_TARGET","timeStamp","originalElementAnimate","Element","options","animation","call","_cancelHandlers","originalCancel","cancel","event","handlers","concat","setTimeout","handler","originalAddEventListener","addEventListener","originalRemoveEventListener","removeEventListener","index","splice","element","documentElement","animated","originalOpacity","getComputedStyle","getPropertyValue","testOpacity","opacity","error","webAnimationsNext","exports","webAnimationsTesting"],"mappings":"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","file":"web-animations.min.js"} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/.bower.json
new file mode 100644
index 00000000000..df9108d26b8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/.bower.json
@@ -0,0 +1,53 @@
+{
+ "name": "web-component-tester",
+ "description": "web-component-tester makes testing your web components a breeze!",
+ "version": "6.5.0",
+ "main": [
+ "browser.js"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "ignore": [
+ "*",
+ "!/data/*",
+ "!/browser.js",
+ "!/browser.js.map",
+ "!/package.json",
+ "!/bower.json"
+ ],
+ "keywords": [
+ "browser",
+ "grunt",
+ "gruntplugin",
+ "gulp",
+ "polymer",
+ "test",
+ "testing",
+ "web component",
+ "web"
+ ],
+ "dependencies": {
+ "accessibility-developer-tools": "^2.10.0",
+ "async": "^1.5.0",
+ "chai": "^3.2.0",
+ "lodash": "^3.7.0",
+ "mocha": "^3.1.2",
+ "sinon-chai": "^2.7.0",
+ "sinonjs": "^1.14.1",
+ "stacky": "^1.3.0",
+ "test-fixture": "^3.0.0"
+ },
+ "devDependencies": {
+ "polymer": "Polymer/polymer#^1.5.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.22"
+ },
+ "homepage": "https://github.com/Polymer/web-component-tester",
+ "_release": "6.5.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v6.5.0",
+ "commit": "0fc9578a61862266820c4ce11b2be5fa3c2241a5"
+ },
+ "_source": "https://github.com/Polymer/web-component-tester.git",
+ "_target": "^6.5.0",
+ "_originalSource": "web-component-tester"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/bower.json
new file mode 100644
index 00000000000..9defbb91430
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/bower.json
@@ -0,0 +1,43 @@
+{
+ "name": "web-component-tester",
+ "description": "web-component-tester makes testing your web components a breeze!",
+ "version": "6.0.0",
+ "main": [
+ "browser.js"
+ ],
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "ignore": [
+ "*",
+ "!/data/*",
+ "!/browser.js",
+ "!/browser.js.map",
+ "!/package.json",
+ "!/bower.json"
+ ],
+ "keywords": [
+ "browser",
+ "grunt",
+ "gruntplugin",
+ "gulp",
+ "polymer",
+ "test",
+ "testing",
+ "web component",
+ "web"
+ ],
+ "dependencies": {
+ "accessibility-developer-tools": "^2.10.0",
+ "async": "^1.5.0",
+ "chai": "^3.2.0",
+ "lodash": "^3.7.0",
+ "mocha": "^3.1.2",
+ "sinon-chai": "^2.7.0",
+ "sinonjs": "^1.14.1",
+ "stacky": "^1.3.0",
+ "test-fixture": "^3.0.0"
+ },
+ "devDependencies": {
+ "polymer": "Polymer/polymer#^1.5.0",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.22"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js
new file mode 100644
index 00000000000..1db061798e6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js
@@ -0,0 +1,1865 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+/**
+ * THIS FILE IS AUTOMATICALLY GENERATED!
+ * To make changes to browser.js, please edit the source files in the repo's `browser/` directory!
+ */
+
+(function () {
+'use strict';
+
+window.__wctUseNpm = false;
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at
+ * http://polymer.github.io/LICENSE.txt The complete set of authors may be found
+ * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
+ * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
+ * Google as part of the polymer project is also subject to an additional IP
+ * rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+// Make sure that we use native timers, in case they're being stubbed out.
+var nativeSetInterval = window.setInterval;
+var nativeSetTimeout = window.setTimeout;
+var nativeRequestAnimationFrame = window.requestAnimationFrame;
+/**
+ * Runs `stepFn`, catching any error and passing it to `callback` (Node-style).
+ * Otherwise, calls `callback` with no arguments on success.
+ *
+ * @param {function()} callback
+ * @param {function()} stepFn
+ */
+function safeStep(callback, stepFn) {
+ var err;
+ try {
+ stepFn();
+ }
+ catch (error) {
+ err = error;
+ }
+ callback(err);
+}
+/**
+ * Runs your test at declaration time (before Mocha has begun tests). Handy for
+ * when you need to test document initialization.
+ *
+ * Be aware that any errors thrown asynchronously cannot be tied to your test.
+ * You may want to catch them and pass them to the done event, instead. See
+ * `safeStep`.
+ *
+ * @param {string} name The name of the test.
+ * @param {function(?function())} testFn The test function. If an argument is
+ * accepted, the test will be treated as async, just like Mocha tests.
+ */
+function testImmediate(name, testFn) {
+ if (testFn.length > 0) {
+ return testImmediateAsync(name, testFn);
+ }
+ var err;
+ try {
+ testFn();
+ }
+ catch (error) {
+ err = error;
+ }
+ test(name, function (done) {
+ done(err);
+ });
+}
+/**
+ * An async-only variant of `testImmediate`.
+ *
+ * @param {string} name
+ * @param {function(?function())} testFn
+ */
+function testImmediateAsync(name, testFn) {
+ var testComplete = false;
+ var err;
+ test(name, function (done) {
+ var intervalId = nativeSetInterval(function () {
+ if (!testComplete)
+ return;
+ clearInterval(intervalId);
+ done(err);
+ }, 10);
+ });
+ try {
+ testFn(function (error) {
+ if (error)
+ err = error;
+ testComplete = true;
+ });
+ }
+ catch (error) {
+ err = error;
+ testComplete = true;
+ }
+}
+/**
+ * Triggers a flush of any pending events, observations, etc and calls you back
+ * after they have been processed.
+ *
+ * @param {function()} callback
+ */
+function flush(callback) {
+ // Ideally, this function would be a call to Polymer.dom.flush, but that
+ // doesn't support a callback yet
+ // (https://github.com/Polymer/polymer-dev/issues/851),
+ // ...and there's cross-browser flakiness to deal with.
+ // Make sure that we're invoking the callback with no arguments so that the
+ // caller can pass Mocha callbacks, etc.
+ var done = function done() {
+ callback();
+ };
+ // Because endOfMicrotask is flaky for IE, we perform microtask checkpoints
+ // ourselves (https://github.com/Polymer/polymer-dev/issues/114):
+ var isIE = navigator.appName === 'Microsoft Internet Explorer';
+ if (isIE && window.Platform && window.Platform.performMicrotaskCheckpoint) {
+ var reallyDone_1 = done;
+ done = function doneIE() {
+ Platform.performMicrotaskCheckpoint();
+ nativeSetTimeout(reallyDone_1, 0);
+ };
+ }
+ // Everyone else gets a regular flush.
+ var scope;
+ if (window.Polymer && window.Polymer.dom && window.Polymer.dom.flush) {
+ scope = window.Polymer.dom;
+ }
+ else if (window.Polymer && window.Polymer.flush) {
+ scope = window.Polymer;
+ }
+ else if (window.WebComponents && window.WebComponents.flush) {
+ scope = window.WebComponents;
+ }
+ if (scope) {
+ scope.flush();
+ }
+ // Ensure that we are creating a new _task_ to allow all active microtasks to
+ // finish (the code you're testing may be using endOfMicrotask, too).
+ nativeSetTimeout(done, 0);
+}
+/**
+ * Advances a single animation frame.
+ *
+ * Calls `flush`, `requestAnimationFrame`, `flush`, and `callback` sequentially
+ * @param {function()} callback
+ */
+function animationFrameFlush(callback) {
+ flush(function () {
+ nativeRequestAnimationFrame(function () {
+ flush(callback);
+ });
+ });
+}
+/**
+ * DEPRECATED: Use `flush`.
+ * @param {function} callback
+ */
+function asyncPlatformFlush(callback) {
+ console.warn('asyncPlatformFlush is deprecated in favor of the more terse flush()');
+ return window.flush(callback);
+}
+/**
+ *
+ */
+function waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime) {
+ timeoutTime = timeoutTime || Date.now() + (timeout || 1000);
+ intervalOrMutationEl = intervalOrMutationEl || 32;
+ try {
+ fn();
+ }
+ catch (e) {
+ if (Date.now() > timeoutTime) {
+ throw e;
+ }
+ else {
+ if (typeof intervalOrMutationEl !== 'number') {
+ intervalOrMutationEl.onMutation(intervalOrMutationEl, function () {
+ waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);
+ });
+ }
+ else {
+ nativeSetTimeout(function () {
+ waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);
+ }, intervalOrMutationEl);
+ }
+ return;
+ }
+ }
+ next();
+}
+window.safeStep = safeStep;
+window.testImmediate = testImmediate;
+window.testImmediateAsync = testImmediateAsync;
+window.flush = flush;
+window.animationFrameFlush = animationFrameFlush;
+window.asyncPlatformFlush = asyncPlatformFlush;
+window.waitFor = waitFor;
+
+/**
+ * The global configuration state for WCT's browser client.
+ */
+var _config = {
+ environmentScripts: !!window.__wctUseNpm ?
+ [
+ 'stacky/browser.js', 'async/lib/async.js', 'lodash/index.js',
+ 'mocha/mocha.js', 'chai/chai.js', '@polymer/sinonjs/sinon.js',
+ 'sinon-chai/lib/sinon-chai.js',
+ 'accessibility-developer-tools/dist/js/axs_testing.js',
+ '@polymer/test-fixture/test-fixture.js'
+ ] :
+ [
+ 'stacky/browser.js', 'async/lib/async.js', 'lodash/lodash.js',
+ 'mocha/mocha.js', 'chai/chai.js', 'sinonjs/sinon.js',
+ 'sinon-chai/lib/sinon-chai.js',
+ 'accessibility-developer-tools/dist/js/axs_testing.js'
+ ],
+ environmentImports: !!window.__wctUseNpm ? [] :
+ ['test-fixture/test-fixture.html'],
+ root: null,
+ waitForFrameworks: true,
+ waitFor: null,
+ numConcurrentSuites: 1,
+ trackConsoleError: true,
+ mochaOptions: { timeout: 10 * 1000 },
+ verbose: false,
+};
+/**
+ * Merges initial `options` into WCT's global configuration.
+ *
+ * @param {Object} options The options to merge. See `browser/config.js` for a
+ * reference.
+ */
+function setup(options) {
+ var childRunner = ChildRunner.current();
+ if (childRunner) {
+ _deepMerge(_config, childRunner.parentScope.WCT._config);
+ // But do not force the mocha UI
+ delete _config.mochaOptions.ui;
+ }
+ if (options && typeof options === 'object') {
+ _deepMerge(_config, options);
+ }
+ if (!_config.root) {
+ // Sibling dependencies.
+ var root = scriptPrefix('browser.js');
+ _config.root = basePath(root.substr(0, root.length - 1));
+ if (!_config.root) {
+ throw new Error('Unable to detect root URL for WCT sources. Please set WCT.root before including browser.js');
+ }
+ }
+}
+/**
+ * Retrieves a configuration value.
+ */
+function get(key) {
+ return _config[key];
+}
+// Internal
+function _deepMerge(target, source) {
+ Object.keys(source).forEach(function (key) {
+ if (target[key] !== null && typeof target[key] === 'object' &&
+ !Array.isArray(target[key])) {
+ _deepMerge(target[key], source[key]);
+ }
+ else {
+ target[key] = source[key];
+ }
+ });
+}
+
+/**
+ * @param {function()} callback A function to call when the active web component
+ * frameworks have loaded.
+ */
+function whenFrameworksReady(callback) {
+ debug('whenFrameworksReady');
+ var done = function () {
+ debug('whenFrameworksReady done');
+ callback();
+ };
+ // If webcomponents script is in the document, wait for WebComponentsReady.
+ if (window.WebComponents && !window.WebComponents.ready) {
+ debug('WebComponentsReady?');
+ window.addEventListener('WebComponentsReady', function wcReady() {
+ window.removeEventListener('WebComponentsReady', wcReady);
+ debug('WebComponentsReady');
+ done();
+ });
+ }
+ else {
+ done();
+ }
+}
+/**
+ * @return {string} '<count> <kind> tests' or '<count> <kind> test'.
+ */
+function pluralizedStat(count, kind) {
+ if (count === 1) {
+ return count + ' ' + kind + ' test';
+ }
+ else {
+ return count + ' ' + kind + ' tests';
+ }
+}
+/**
+ * @param {string} path The URI of the script to load.
+ * @param {function} done
+ */
+function loadScript(path, done) {
+ var script = document.createElement('script');
+ script.src = path;
+ if (done) {
+ script.onload = done.bind(null, null);
+ script.onerror = done.bind(null, 'Failed to load script ' + script.src);
+ }
+ document.head.appendChild(script);
+}
+/**
+ * @param {string} path The URI of the stylesheet to load.
+ * @param {function} done
+ */
+function loadStyle(path, done) {
+ var link = document.createElement('link');
+ link.rel = 'stylesheet';
+ link.href = path;
+ if (done) {
+ link.onload = done.bind(null, null);
+ link.onerror = done.bind(null, 'Failed to load stylesheet ' + link.href);
+ }
+ document.head.appendChild(link);
+}
+/**
+ * @param {...*} var_args Logs values to the console when the `debug`
+ * configuration option is true.
+ */
+function debug() {
+ var var_args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ var_args[_i] = arguments[_i];
+ }
+ if (!get('verbose')) {
+ return;
+ }
+ var args = [window.location.pathname].concat(var_args);
+ (console.debug || console.log).apply(console, args);
+}
+// URL Processing
+/**
+ * @param {string} url
+ * @return {{base: string, params: string}}
+ */
+function parseUrl(url) {
+ var parts = url.match(/^(.*?)(?:\?(.*))?$/);
+ return {
+ base: parts[1],
+ params: getParams(parts[2] || ''),
+ };
+}
+/**
+ * Expands a URL that may or may not be relative to `base`.
+ *
+ * @param {string} url
+ * @param {string} base
+ * @return {string}
+ */
+function expandUrl(url, base) {
+ if (!base)
+ return url;
+ if (url.match(/^(\/|https?:\/\/)/))
+ return url;
+ if (base.substr(base.length - 1) !== '/') {
+ base = base + '/';
+ }
+ return base + url;
+}
+/**
+ * @param {string=} opt_query A query string to parse.
+ * @return {!Object<string, !Array<string>>} All params on the URL's query.
+ */
+function getParams(query) {
+ query = typeof query === 'string' ? query : window.location.search;
+ if (query.substring(0, 1) === '?') {
+ query = query.substring(1);
+ }
+ // python's SimpleHTTPServer tacks a `/` on the end of query strings :(
+ if (query.slice(-1) === '/') {
+ query = query.substring(0, query.length - 1);
+ }
+ if (query === '')
+ return {};
+ var result = {};
+ query.split('&').forEach(function (part) {
+ var pair = part.split('=');
+ if (pair.length !== 2) {
+ console.warn('Invalid URL query part:', part);
+ return;
+ }
+ var key = decodeURIComponent(pair[0]);
+ var value = decodeURIComponent(pair[1]);
+ if (!result[key]) {
+ result[key] = [];
+ }
+ result[key].push(value);
+ });
+ return result;
+}
+/**
+ * Merges params from `source` into `target` (mutating `target`).
+ *
+ * @param {!Object<string, !Array<string>>} target
+ * @param {!Object<string, !Array<string>>} source
+ */
+function mergeParams(target, source) {
+ Object.keys(source).forEach(function (key) {
+ if (!(key in target)) {
+ target[key] = [];
+ }
+ target[key] = target[key].concat(source[key]);
+ });
+}
+/**
+ * @param {string} param The param to return a value for.
+ * @return {?string} The first value for `param`, if found.
+ */
+function getParam(param) {
+ var params = getParams();
+ return params[param] ? params[param][0] : null;
+}
+/**
+ * @param {!Object<string, !Array<string>>} params
+ * @return {string} `params` encoded as a URI query.
+ */
+function paramsToQuery(params) {
+ var pairs = [];
+ Object.keys(params).forEach(function (key) {
+ params[key].forEach(function (value) {
+ pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
+ });
+ });
+ return (pairs.length > 0) ? ('?' + pairs.join('&')) : '';
+}
+function getPathName(location) {
+ return typeof location === 'string' ? location : location.pathname;
+}
+function basePath(location) {
+ return getPathName(location).match(/^.*\//)[0];
+}
+function relativeLocation(location, basePath) {
+ var path = getPathName(location);
+ if (path.indexOf(basePath) === 0) {
+ path = path.substring(basePath.length);
+ }
+ return path;
+}
+function cleanLocation(location) {
+ var path = getPathName(location);
+ if (path.slice(-11) === '/index.html') {
+ path = path.slice(0, path.length - 10);
+ }
+ return path;
+}
+function parallel(runners, maybeLimit, done) {
+ var limit;
+ if (typeof maybeLimit !== 'number') {
+ done = maybeLimit;
+ limit = 0;
+ }
+ else {
+ limit = maybeLimit;
+ }
+ if (!runners.length) {
+ return done();
+ }
+ var called = false;
+ var total = runners.length;
+ var numActive = 0;
+ var numDone = 0;
+ function runnerDone(error) {
+ if (called) {
+ return;
+ }
+ numDone = numDone + 1;
+ numActive = numActive - 1;
+ if (error || numDone >= total) {
+ called = true;
+ done(error);
+ }
+ else {
+ runOne();
+ }
+ }
+ function runOne() {
+ if (limit && numActive >= limit) {
+ return;
+ }
+ if (!runners.length) {
+ return;
+ }
+ numActive = numActive + 1;
+ runners.shift()(runnerDone);
+ }
+ runners.forEach(runOne);
+}
+/**
+ * Finds the directory that a loaded script is hosted on.
+ *
+ * @param {string} filename
+ * @return {string?}
+ */
+function scriptPrefix(filename) {
+ var scripts = document.querySelectorAll('script[src*="' + filename + '"]');
+ if (scripts.length !== 1) {
+ return null;
+ }
+ var script = scripts[0].src;
+ return script.substring(0, script.indexOf(filename));
+}
+
+
+var util = Object.freeze({
+ whenFrameworksReady: whenFrameworksReady,
+ pluralizedStat: pluralizedStat,
+ loadScript: loadScript,
+ loadStyle: loadStyle,
+ debug: debug,
+ parseUrl: parseUrl,
+ expandUrl: expandUrl,
+ getParams: getParams,
+ mergeParams: mergeParams,
+ getParam: getParam,
+ paramsToQuery: paramsToQuery,
+ basePath: basePath,
+ relativeLocation: relativeLocation,
+ cleanLocation: cleanLocation,
+ parallel: parallel,
+ scriptPrefix: scriptPrefix
+});
+
+/**
+ * A Mocha suite (or suites) run within a child iframe, but reported as if they
+ * are part of the current context.
+ */
+var ChildRunner = /** @class */ (function () {
+ function ChildRunner(url, parentScope) {
+ var urlBits = parseUrl(url);
+ mergeParams(urlBits.params, getParams(parentScope.location.search));
+ delete urlBits.params.cli_browser_id;
+ this.url = urlBits.base + paramsToQuery(urlBits.params);
+ this.parentScope = parentScope;
+ this.state = 'initializing';
+ }
+ /**
+ * @return {ChildRunner} The `ChildRunner` that was registered for this
+ * window.
+ */
+ ChildRunner.current = function () {
+ return ChildRunner.get(window);
+ };
+ /**
+ * @param {!Window} target A window to find the ChildRunner of.
+ * @param {boolean} traversal Whether this is a traversal from a child window.
+ * @return {ChildRunner} The `ChildRunner` that was registered for `target`.
+ */
+ ChildRunner.get = function (target, traversal) {
+ var childRunner = ChildRunner._byUrl[target.location.href];
+ if (childRunner) {
+ return childRunner;
+ }
+ if (window.parent === window) {
+ if (traversal) {
+ console.warn('Subsuite loaded but was never registered. This most likely is due to wonky history behavior. Reloading...');
+ window.location.reload();
+ }
+ return null;
+ }
+ // Otherwise, traverse.
+ return window.parent.WCT._ChildRunner.get(target, true);
+ };
+ /**
+ * Loads and runs the subsuite.
+ *
+ * @param {function} done Node-style callback.
+ */
+ ChildRunner.prototype.run = function (done) {
+ debug('ChildRunner#run', this.url);
+ this.state = 'loading';
+ this.onRunComplete = done;
+ this.iframe = document.createElement('iframe');
+ this.iframe.src = this.url;
+ this.iframe.classList.add('subsuite');
+ var container = document.getElementById('subsuites');
+ if (!container) {
+ container = document.createElement('div');
+ container.id = 'subsuites';
+ document.body.appendChild(container);
+ }
+ container.appendChild(this.iframe);
+ // let the iframe expand the URL for us.
+ this.url = this.iframe.src;
+ ChildRunner._byUrl[this.url] = this;
+ this.timeoutId = setTimeout(this.loaded.bind(this, new Error('Timed out loading ' + this.url)), ChildRunner.loadTimeout);
+ this.iframe.addEventListener('error', this.loaded.bind(this, new Error('Failed to load document ' + this.url)));
+ this.iframe.contentWindow.addEventListener('DOMContentLoaded', this.loaded.bind(this, null));
+ };
+ /**
+ * Called when the sub suite's iframe has loaded (or errored during load).
+ *
+ * @param {*} error The error that occured, if any.
+ */
+ ChildRunner.prototype.loaded = function (error) {
+ debug('ChildRunner#loaded', this.url, error);
+ // Not all targets have WCT loaded (compatiblity mode)
+ if (this.iframe.contentWindow.WCT) {
+ this.share = this.iframe.contentWindow.WCT.share;
+ }
+ if (error) {
+ this.signalRunComplete(error);
+ this.done();
+ }
+ };
+ /**
+ * Called in mocha/run.js when all dependencies have loaded, and the child is
+ * ready to start running tests
+ *
+ * @param {*} error The error that occured, if any.
+ */
+ ChildRunner.prototype.ready = function (error) {
+ debug('ChildRunner#ready', this.url, error);
+ if (this.timeoutId) {
+ clearTimeout(this.timeoutId);
+ }
+ if (error) {
+ this.signalRunComplete(error);
+ this.done();
+ }
+ };
+ /**
+ * Called when the sub suite's tests are complete, so that it can clean up.
+ */
+ ChildRunner.prototype.done = function () {
+ debug('ChildRunner#done', this.url, arguments);
+ // make sure to clear that timeout
+ this.ready();
+ this.signalRunComplete();
+ if (!this.iframe)
+ return;
+ // Be safe and avoid potential browser crashes when logic attempts to
+ // interact with the removed iframe.
+ setTimeout(function () {
+ this.iframe.parentNode.removeChild(this.iframe);
+ this.iframe = null;
+ }.bind(this), 1);
+ };
+ ChildRunner.prototype.signalRunComplete = function (error) {
+ if (!this.onRunComplete)
+ return;
+ this.state = 'complete';
+ this.onRunComplete(error);
+ this.onRunComplete = null;
+ };
+ // ChildRunners get a pretty generous load timeout by default.
+ ChildRunner.loadTimeout = 60000;
+ // We can't maintain properties on iframe elements in Firefox/Safari/???, so
+ // we track childRunners by URL.
+ ChildRunner._byUrl = {};
+ return ChildRunner;
+}());
+
+var SOCKETIO_ENDPOINT = window.location.protocol + '//' + window.location.host;
+var SOCKETIO_LIBRARY = SOCKETIO_ENDPOINT + '/socket.io/socket.io.js';
+/**
+ * A socket for communication between the CLI and browser runners.
+ *
+ * @param {string} browserId An ID generated by the CLI runner.
+ * @param {!io.Socket} socket The socket.io `Socket` to communicate over.
+ */
+var CLISocket = /** @class */ (function () {
+ function CLISocket(browserId, socket) {
+ this.browserId = browserId;
+ this.socket = socket;
+ }
+ /**
+ * @param {!Mocha.Runner} runner The Mocha `Runner` to observe, reporting
+ * interesting events back to the CLI runner.
+ */
+ CLISocket.prototype.observe = function (runner) {
+ var _this = this;
+ this.emitEvent('browser-start', {
+ url: window.location.toString(),
+ });
+ // We only emit a subset of events that we care about, and follow a more
+ // general event format that is hopefully applicable to test runners beyond
+ // mocha.
+ //
+ // For all possible mocha events, see:
+ // https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36
+ runner.on('test', function (test) {
+ _this.emitEvent('test-start', { test: getTitles(test) });
+ });
+ runner.on('test end', function (test) {
+ _this.emitEvent('test-end', {
+ state: getState(test),
+ test: getTitles(test),
+ duration: test.duration,
+ error: test.err,
+ });
+ });
+ runner.on('fail', function (test, err) {
+ // fail the test run if we catch errors outside of a test function
+ if (test.type !== 'test') {
+ _this.emitEvent('browser-fail', 'Error thrown outside of test function: ' + err.stack);
+ }
+ });
+ runner.on('childRunner start', function (childRunner) {
+ _this.emitEvent('sub-suite-start', childRunner.share);
+ });
+ runner.on('childRunner end', function (childRunner) {
+ _this.emitEvent('sub-suite-end', childRunner.share);
+ });
+ runner.on('end', function () {
+ _this.emitEvent('browser-end');
+ });
+ };
+ /**
+ * @param {string} event The name of the event to fire.
+ * @param {*} data Additional data to pass with the event.
+ */
+ CLISocket.prototype.emitEvent = function (event, data) {
+ this.socket.emit('client-event', {
+ browserId: this.browserId,
+ event: event,
+ data: data,
+ });
+ };
+ /**
+ * Builds a `CLISocket` if we are within a CLI-run environment; short-circuits
+ * otherwise.
+ *
+ * @param {function(*, CLISocket)} done Node-style callback.
+ */
+ CLISocket.init = function (done) {
+ var browserId = getParam('cli_browser_id');
+ if (!browserId)
+ return done();
+ // Only fire up the socket for root runners.
+ if (ChildRunner.current())
+ return done();
+ loadScript(SOCKETIO_LIBRARY, function (error) {
+ if (error)
+ return done(error);
+ var socket = io(SOCKETIO_ENDPOINT);
+ socket.on('error', function (error) {
+ socket.off();
+ done(error);
+ });
+ socket.on('connect', function () {
+ socket.off();
+ done(null, new CLISocket(browserId, socket));
+ });
+ });
+ };
+ return CLISocket;
+}());
+// Misc Utility
+/**
+ * @param {!Mocha.Runnable} runnable The test or suite to extract titles from.
+ * @return {!Array.<string>} The titles of the runnable and its parents.
+ */
+function getTitles(runnable) {
+ var titles = [];
+ while (runnable && !runnable.root && runnable.title) {
+ titles.unshift(runnable.title);
+ runnable = runnable.parent;
+ }
+ return titles;
+}
+/**
+ * @param {!Mocha.Runnable} runnable
+ * @return {string}
+ */
+function getState(runnable) {
+ if (runnable.state === 'passed') {
+ return 'passing';
+ }
+ else if (runnable.state === 'failed') {
+ return 'failing';
+ }
+ else if (runnable.pending) {
+ return 'pending';
+ }
+ else {
+ return 'unknown';
+ }
+}
+
+// We capture console events when running tests; so make sure we have a
+// reference to the original one.
+var console$1 = window.console;
+var FONT = ';font: normal 13px "Roboto", "Helvetica Neue", "Helvetica", sans-serif;';
+var STYLES = {
+ plain: FONT,
+ suite: 'color: #5c6bc0' + FONT,
+ test: FONT,
+ passing: 'color: #259b24' + FONT,
+ pending: 'color: #e65100' + FONT,
+ failing: 'color: #c41411' + FONT,
+ stack: 'color: #c41411',
+ results: FONT + 'font-size: 16px',
+};
+// I don't think we can feature detect this one...
+var userAgent = navigator.userAgent.toLowerCase();
+var CAN_STYLE_LOG = userAgent.match('firefox') || userAgent.match('webkit');
+var CAN_STYLE_GROUP = userAgent.match('webkit');
+// Track the indent for faked `console.group`
+var logIndent = '';
+function log(text, style) {
+ text = text.split('\n')
+ .map(function (l) {
+ return logIndent + l;
+ })
+ .join('\n');
+ if (CAN_STYLE_LOG) {
+ console$1.log('%c' + text, STYLES[style] || STYLES.plain);
+ }
+ else {
+ console$1.log(text);
+ }
+}
+function logGroup(text, style) {
+ if (CAN_STYLE_GROUP) {
+ console$1.group('%c' + text, STYLES[style] || STYLES.plain);
+ }
+ else if (console$1.group) {
+ console$1.group(text);
+ }
+ else {
+ logIndent = logIndent + ' ';
+ log(text, style);
+ }
+}
+function logGroupEnd() {
+ if (console$1.groupEnd) {
+ console$1.groupEnd();
+ }
+ else {
+ logIndent = logIndent.substr(0, logIndent.length - 2);
+ }
+}
+function logException(error) {
+ log(error.stack || error.message || (error + ''), 'stack');
+}
+/**
+ * A Mocha reporter that logs results out to the web `console`.
+ */
+var Console = /** @class */ (function () {
+ /**
+ * @param runner The runner that is being reported on.
+ */
+ function Console(runner) {
+ Mocha.reporters.Base.call(this, runner);
+ runner.on('suite', function (suite) {
+ if (suite.root) {
+ return;
+ }
+ logGroup(suite.title, 'suite');
+ }.bind(this));
+ runner.on('suite end', function (suite) {
+ if (suite.root) {
+ return;
+ }
+ logGroupEnd();
+ }.bind(this));
+ runner.on('test', function (test) {
+ logGroup(test.title, 'test');
+ }.bind(this));
+ runner.on('pending', function (test) {
+ logGroup(test.title, 'pending');
+ }.bind(this));
+ runner.on('fail', function (_test, error) {
+ logException(error);
+ }.bind(this));
+ runner.on('test end', function (_test) {
+ logGroupEnd();
+ }.bind(this));
+ runner.on('end', this.logSummary.bind(this));
+ }
+ /** Prints out a final summary of test results. */
+ Console.prototype.logSummary = function () {
+ logGroup('Test Results', 'results');
+ if (this.stats.failures > 0) {
+ log(pluralizedStat(this.stats.failures, 'failing'), 'failing');
+ }
+ if (this.stats.pending > 0) {
+ log(pluralizedStat(this.stats.pending, 'pending'), 'pending');
+ }
+ log(pluralizedStat(this.stats.passes, 'passing'));
+ if (!this.stats.failures) {
+ log('test suite passed', 'passing');
+ }
+ log('Evaluated ' + this.stats.tests + ' tests in ' +
+ this.stats.duration + 'ms.');
+ logGroupEnd();
+ };
+ return Console;
+}());
+
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at
+ * http://polymer.github.io/LICENSE.txt The complete set of authors may be found
+ * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may
+ * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by
+ * Google as part of the polymer project is also subject to an additional IP
+ * rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+/**
+ * WCT-specific behavior on top of Mocha's default HTML reporter.
+ *
+ * @param {!Mocha.Runner} runner The runner that is being reported on.
+ */
+function HTML(runner) {
+ var output = document.createElement('div');
+ output.id = 'mocha';
+ document.body.appendChild(output);
+ runner.on('suite', function (_test) {
+ this.total = runner.total;
+ }.bind(this));
+ Mocha.reporters.HTML.call(this, runner);
+}
+// Woo! What a hack. This just saves us from adding a bunch of complexity around
+// style loading.
+var style = document.createElement('style');
+style.textContent = "\n html, body {\n position: relative;\n height: 100%;\n width: 100%;\n min-width: 900px;\n }\n #mocha, #subsuites {\n height: 100%;\n position: absolute;\n top: 0;\n }\n #mocha {\n box-sizing: border-box;\n margin: 0 !important;\n padding: 60px 20px;\n right: 0;\n left: 500px;\n }\n #subsuites {\n -ms-flex-direction: column;\n -webkit-flex-direction: column;\n display: -ms-flexbox;\n display: -webkit-flex;\n display: flex;\n flex-direction: column;\n left: 0;\n width: 500px;\n }\n #subsuites .subsuite {\n border: 0;\n width: 100%;\n height: 100%;\n }\n #mocha .test.pass .duration {\n color: #555 !important;\n }\n";
+document.head.appendChild(style);
+
+var STACKY_CONFIG = {
+ indent: ' ',
+ locationStrip: [
+ /^https?:\/\/[^\/]+/,
+ /\?.*$/,
+ ],
+ filter: function (line) {
+ return !!line.location.match(/\/web-component-tester\/[^\/]+(\?.*)?$/);
+ },
+};
+// https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36-46
+var MOCHA_EVENTS = [
+ 'start', 'end', 'suite', 'suite end', 'test', 'test end', 'hook', 'hook end',
+ 'pass', 'fail', 'pending', 'childRunner end'
+];
+// Until a suite has loaded, we assume this many tests in it.
+var ESTIMATED_TESTS_PER_SUITE = 3;
+/**
+ * A Mocha-like reporter that combines the output of multiple Mocha suites.
+ */
+var MultiReporter = /** @class */ (function () {
+ /**
+ * @param numSuites The number of suites that will be run, in order to
+ * estimate the total number of tests that will be performed.
+ * @param reporters The set of reporters that
+ * should receive the unified event stream.
+ * @param parent The parent reporter, if present.
+ */
+ function MultiReporter(numSuites, reporters, parent) {
+ var _this = this;
+ this.reporters = reporters.map(function (reporter) {
+ return new reporter(_this);
+ });
+ this.parent = parent;
+ this.basePath = parent && parent.basePath || basePath(window.location);
+ this.total = numSuites * ESTIMATED_TESTS_PER_SUITE;
+ // Mocha reporters assume a stream of events, so we have to be careful to
+ // only report on one runner at a time...
+ this.currentRunner = null;
+ // ...while we buffer events for any other active runners.
+ this.pendingEvents = [];
+ this.emit('start');
+ }
+ /**
+ * @param location The location this reporter represents.
+ * @return A reporter-like "class" for each child suite
+ * that should be passed to `mocha.run`.
+ */
+ MultiReporter.prototype.childReporter = function (location) {
+ var name = this.suiteTitle(location);
+ // The reporter is used as a constructor, so we can't depend on `this` being
+ // properly bound.
+ var self = this;
+ return _a = /** @class */ (function () {
+ function ChildReporter(runner) {
+ runner.name = window.name;
+ self.bindChildRunner(runner);
+ }
+ return ChildReporter;
+ }()),
+ _a.title = window.name,
+ _a;
+ var _a;
+ };
+ /** Must be called once all runners have finished. */
+ MultiReporter.prototype.done = function () {
+ this.complete = true;
+ this.flushPendingEvents();
+ this.emit('end');
+ };
+ /**
+ * Emit a top level test that is not part of any suite managed by this
+ * reporter.
+ *
+ * Helpful for reporting on global errors, loading issues, etc.
+ *
+ * @param title The title of the test.
+ * @param error An error associated with this test. If falsy, test is
+ * considered to be passing.
+ * @param suiteTitle Title for the suite that's wrapping the test.
+ * @param estimated If this test was included in the original
+ * estimate of `numSuites`.
+ */
+ MultiReporter.prototype.emitOutOfBandTest = function (title, error, suiteTitle, estimated) {
+ debug('MultiReporter#emitOutOfBandTest(', arguments, ')');
+ var root = new Mocha.Suite(suiteTitle || '');
+ var test = new Mocha.Test(title, function () { });
+ test.parent = root;
+ test.state = error ? 'failed' : 'passed';
+ test.err = error;
+ if (!estimated) {
+ this.total = this.total + ESTIMATED_TESTS_PER_SUITE;
+ }
+ var runner = { total: 1 };
+ this.proxyEvent('start', runner);
+ this.proxyEvent('suite', runner, root);
+ this.proxyEvent('test', runner, test);
+ if (error) {
+ this.proxyEvent('fail', runner, test, error);
+ }
+ else {
+ this.proxyEvent('pass', runner, test);
+ }
+ this.proxyEvent('test end', runner, test);
+ this.proxyEvent('suite end', runner, root);
+ this.proxyEvent('end', runner);
+ };
+ /**
+ * @param {!Location|string} location
+ * @return {string}
+ */
+ MultiReporter.prototype.suiteTitle = function (location) {
+ var path = relativeLocation(location, this.basePath);
+ path = cleanLocation(path);
+ return path;
+ };
+ // Internal Interface
+ /** @param {!Mocha.runners.Base} runner The runner to listen to events for. */
+ MultiReporter.prototype.bindChildRunner = function (runner) {
+ var _this = this;
+ MOCHA_EVENTS.forEach(function (eventName) {
+ runner.on(eventName, _this.proxyEvent.bind(_this, eventName, runner));
+ });
+ };
+ /**
+ * Evaluates an event fired by `runner`, proxying it forward or buffering it.
+ *
+ * @param {string} eventName
+ * @param {!Mocha.runners.Base} runner The runner that emitted this event.
+ * @param {...*} var_args Any additional data passed as part of the event.
+ */
+ MultiReporter.prototype.proxyEvent = function (eventName, runner) {
+ var _args = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ _args[_i - 2] = arguments[_i];
+ }
+ var extraArgs = Array.prototype.slice.call(arguments, 2);
+ if (this.complete) {
+ console.warn('out of order Mocha event for ' + runner.name + ':', eventName, extraArgs);
+ return;
+ }
+ if (this.currentRunner && runner !== this.currentRunner) {
+ this.pendingEvents.push(Array.prototype.slice.call(arguments));
+ return;
+ }
+ debug('MultiReporter#proxyEvent(', arguments, ')');
+ // This appears to be a Mocha bug: Tests failed by passing an error to their
+ // done function don't set `err` properly.
+ //
+ // TODO(nevir): Track down.
+ if (eventName === 'fail' && !extraArgs[0].err) {
+ extraArgs[0].err = extraArgs[1];
+ }
+ if (eventName === 'start') {
+ this.onRunnerStart(runner);
+ }
+ else if (eventName === 'end') {
+ this.onRunnerEnd(runner);
+ }
+ else {
+ this.cleanEvent(eventName, runner, extraArgs);
+ this.emit.apply(this, [eventName].concat(extraArgs));
+ }
+ };
+ /**
+ * Cleans or modifies an event if needed.
+ *
+ * @param eventName
+ * @param runner The runner that emitted this event.
+ * @param extraArgs
+ */
+ MultiReporter.prototype.cleanEvent = function (eventName, _runner, extraArgs) {
+ // Suite hierarchy
+ if (extraArgs[0]) {
+ extraArgs[0] = this.showRootSuite(extraArgs[0]);
+ }
+ // Normalize errors
+ if (eventName === 'fail') {
+ extraArgs[1] = Stacky.normalize(extraArgs[1], STACKY_CONFIG);
+ }
+ if (extraArgs[0] && extraArgs[0].err) {
+ extraArgs[0].err = Stacky.normalize(extraArgs[0].err, STACKY_CONFIG);
+ }
+ };
+ /**
+ * We like to show the root suite's title, which requires a little bit of
+ * trickery in the suite hierarchy.
+ *
+ * @param {!Mocha.Runnable} node
+ */
+ MultiReporter.prototype.showRootSuite = function (node) {
+ var leaf = node = Object.create(node);
+ while (node && node.parent) {
+ var wrappedParent = Object.create(node.parent);
+ node.parent = wrappedParent;
+ node = wrappedParent;
+ }
+ node.root = false;
+ return leaf;
+ };
+ /** @param {!Mocha.runners.Base} runner */
+ MultiReporter.prototype.onRunnerStart = function (runner) {
+ debug('MultiReporter#onRunnerStart:', runner.name);
+ this.total = this.total - ESTIMATED_TESTS_PER_SUITE + runner.total;
+ this.currentRunner = runner;
+ };
+ /** @param {!Mocha.runners.Base} runner */
+ MultiReporter.prototype.onRunnerEnd = function (runner) {
+ debug('MultiReporter#onRunnerEnd:', runner.name);
+ this.currentRunner = null;
+ this.flushPendingEvents();
+ };
+ /**
+ * Flushes any buffered events and runs them through `proxyEvent`. This will
+ * loop until all buffered runners are complete, or we have run out of
+ * buffered events.
+ */
+ MultiReporter.prototype.flushPendingEvents = function () {
+ var _this = this;
+ var events = this.pendingEvents;
+ this.pendingEvents = [];
+ events.forEach(function (eventArgs) {
+ _this.proxyEvent.apply(_this, eventArgs);
+ });
+ };
+ return MultiReporter;
+}());
+
+var ARC_OFFSET = 0; // start at the right.
+var ARC_WIDTH = 6;
+/**
+ * A Mocha reporter that updates the document's title and favicon with
+ * at-a-glance stats.
+ *
+ * @param {!Mocha.Runner} runner The runner that is being reported on.
+ */
+var Title = /** @class */ (function () {
+ function Title(runner) {
+ Mocha.reporters.Base.call(this, runner);
+ runner.on('test end', this.report.bind(this));
+ }
+ /** Reports current stats via the page title and favicon. */
+ Title.prototype.report = function () {
+ this.updateTitle();
+ this.updateFavicon();
+ };
+ /** Updates the document title with a summary of current stats. */
+ Title.prototype.updateTitle = function () {
+ if (this.stats.failures > 0) {
+ document.title = pluralizedStat(this.stats.failures, 'failing');
+ }
+ else {
+ document.title = pluralizedStat(this.stats.passes, 'passing');
+ }
+ };
+ /** Updates the document's favicon w/ a summary of current stats. */
+ Title.prototype.updateFavicon = function () {
+ var canvas = document.createElement('canvas');
+ canvas.height = canvas.width = 32;
+ var context = canvas.getContext('2d');
+ var passing = this.stats.passes;
+ var pending = this.stats.pending;
+ var failing = this.stats.failures;
+ var total = Math.max(this.runner.total, passing + pending + failing);
+ drawFaviconArc(context, total, 0, passing, '#0e9c57');
+ drawFaviconArc(context, total, passing, pending, '#f3b300');
+ drawFaviconArc(context, total, pending + passing, failing, '#ff5621');
+ this.setFavicon(canvas.toDataURL());
+ };
+ /** Sets the current favicon by URL. */
+ Title.prototype.setFavicon = function (url) {
+ var current = document.head.querySelector('link[rel="icon"]');
+ if (current) {
+ document.head.removeChild(current);
+ }
+ var link = document.createElement('link');
+ link.rel = 'icon';
+ link.type = 'image/x-icon';
+ link.href = url;
+ link.setAttribute('sizes', '32x32');
+ document.head.appendChild(link);
+ };
+ return Title;
+}());
+/**
+ * Draws an arc for the favicon status, relative to the total number of tests.
+ */
+function drawFaviconArc(context, total, start, length, color) {
+ var arcStart = ARC_OFFSET + Math.PI * 2 * (start / total);
+ var arcEnd = ARC_OFFSET + Math.PI * 2 * ((start + length) / total);
+ context.beginPath();
+ context.strokeStyle = color;
+ context.lineWidth = ARC_WIDTH;
+ context.arc(16, 16, 16 - ARC_WIDTH / 2, arcStart, arcEnd);
+ context.stroke();
+}
+
+var htmlSuites$1 = [];
+var jsSuites$1 = [];
+// We process grep ourselves to avoid loading suites that will be filtered.
+var GREP = getParam('grep');
+// work around mocha bug (https://github.com/mochajs/mocha/issues/2070)
+if (GREP) {
+ GREP = GREP.replace(/\\\./g, '.');
+}
+/**
+ * Loads suites of tests, supporting both `.js` and `.html` files.
+ *
+ * @param files The files to load.
+ */
+function loadSuites(files) {
+ files.forEach(function (file) {
+ if (/\.js(\?.*)?$/.test(file)) {
+ jsSuites$1.push(file);
+ }
+ else if (/\.html(\?.*)?$/.test(file)) {
+ htmlSuites$1.push(file);
+ }
+ else {
+ throw new Error('Unknown resource type: ' + file);
+ }
+ });
+}
+/**
+ * @return The child suites that should be loaded, ignoring
+ * those that would not match `GREP`.
+ */
+function activeChildSuites() {
+ var subsuites = htmlSuites$1;
+ if (GREP) {
+ var cleanSubsuites = [];
+ for (var i = 0, subsuite = void 0; subsuite = subsuites[i]; i++) {
+ if (GREP.indexOf(cleanLocation(subsuite)) !== -1) {
+ cleanSubsuites.push(subsuite);
+ }
+ }
+ subsuites = cleanSubsuites;
+ }
+ return subsuites;
+}
+/**
+ * Loads all `.js` sources requested by the current suite.
+ */
+function loadJsSuites(_reporter, done) {
+ debug('loadJsSuites', jsSuites$1);
+ var loaders = jsSuites$1.map(function (file) {
+ // We only support `.js` dependencies for now.
+ return loadScript.bind(util, file);
+ });
+ parallel(loaders, done);
+}
+function runSuites(reporter, childSuites, done) {
+ debug('runSuites');
+ var suiteRunners = [
+ // Run the local tests (if any) first, not stopping on error;
+ _runMocha.bind(null, reporter),
+ ];
+ // As well as any sub suites. Again, don't stop on error.
+ childSuites.forEach(function (file) {
+ suiteRunners.push(function (next) {
+ var childRunner = new ChildRunner(file, window);
+ reporter.emit('childRunner start', childRunner);
+ childRunner.run(function (error) {
+ reporter.emit('childRunner end', childRunner);
+ if (error)
+ reporter.emitOutOfBandTest(file, error);
+ next();
+ });
+ });
+ });
+ parallel(suiteRunners, get('numConcurrentSuites'), function (error) {
+ reporter.done();
+ done(error);
+ });
+}
+/**
+ * Kicks off a mocha run, waiting for frameworks to load if necessary.
+ *
+ * @param {!MultiReporter} reporter Where to send Mocha's events.
+ * @param {function} done A callback fired, _no error is passed_.
+ */
+function _runMocha(reporter, done, waited) {
+ if (get('waitForFrameworks') && !waited) {
+ var waitFor = (get('waitFor') || whenFrameworksReady).bind(window);
+ waitFor(function () {
+ _fixCustomElements();
+ _runMocha(reporter, done, true);
+ });
+ return;
+ }
+ debug('_runMocha');
+ var mocha = window.mocha;
+ var Mocha = window.Mocha;
+ mocha.reporter(reporter.childReporter(window.location));
+ mocha.suite.title = reporter.suiteTitle(window.location);
+ mocha.grep(GREP);
+ // We can't use `mocha.run` because it bashes over grep, invert, and friends.
+ // See https://github.com/visionmedia/mocha/blob/master/support/tail.js#L137
+ var runner = Mocha.prototype.run.call(mocha, function (_error) {
+ if (document.getElementById('mocha')) {
+ Mocha.utils.highlightTags('code');
+ }
+ done(); // We ignore the Mocha failure count.
+ });
+ // Mocha's default `onerror` handling strips the stack (to support really old
+ // browsers). We upgrade this to get better stacks for async errors.
+ //
+ // TODO(nevir): Can we expand support to other browsers?
+ if (navigator.userAgent.match(/chrome/i)) {
+ window.onerror = null;
+ window.addEventListener('error', function (event) {
+ if (!event.error)
+ return;
+ if (event.error.ignore)
+ return;
+ runner.uncaught(event.error);
+ });
+ }
+}
+/**
+ * In Chrome57 custom elements in the document might not get upgraded when
+ * there is a high GC
+ * https://bugs.chromium.org/p/chromium/issues/detail?id=701601 We clone and
+ * replace the ones that weren't upgraded.
+ */
+function _fixCustomElements() {
+ // Bail out if it is not Chrome 57.
+ var raw = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
+ var isM57 = raw && raw[2] === '57';
+ if (!isM57)
+ return;
+ var elements = document.body.querySelectorAll('*:not(script):not(style)');
+ var constructors = {};
+ for (var i = 0; i < elements.length; i++) {
+ var el = elements[i];
+ // This child has already been cloned and replaced by its parent, skip it!
+ if (!el.isConnected)
+ continue;
+ var tag = el.localName;
+ // Not a custom element!
+ if (tag.indexOf('-') === -1)
+ continue;
+ // Memoize correct constructors.
+ constructors[tag] =
+ constructors[tag] || document.createElement(tag).constructor;
+ // This one was correctly upgraded.
+ if (el instanceof constructors[tag])
+ continue;
+ debug('_fixCustomElements: found non-upgraded custom element ' + el);
+ var clone = document.importNode(el, true);
+ el.parentNode.replaceChild(clone, el);
+ }
+}
+
+/**
+ * @param {CLISocket} socket The CLI socket, if present.
+ * @param {MultiReporter} parent The parent reporter, if present.
+ * @return {!Array.<!Mocha.reporters.Base} The reporters that should be used.
+ */
+function determineReporters(socket, parent) {
+ // Parents are greedy.
+ if (parent) {
+ return [parent.childReporter(window.location)];
+ }
+ // Otherwise, we get to run wild without any parental supervision!
+ var reporters = [Title, Console];
+ if (socket) {
+ reporters.push(function (runner) {
+ socket.observe(runner);
+ });
+ }
+ if (htmlSuites$1.length > 0 || jsSuites$1.length > 0) {
+ reporters.push(HTML);
+ }
+ return reporters;
+}
+/**
+ * Yeah, hideous, but this allows us to be loaded before Mocha, which is handy.
+ */
+function injectMocha(Mocha) {
+ _injectPrototype(Console, Mocha.reporters.Base.prototype);
+ _injectPrototype(HTML, Mocha.reporters.HTML.prototype);
+ // Mocha doesn't expose its `EventEmitter` shim directly, so:
+ _injectPrototype(MultiReporter, Object.getPrototypeOf(Mocha.Runner.prototype));
+}
+function _injectPrototype(klass, prototype) {
+ var newPrototype = Object.create(prototype);
+ // Only support
+ Object.keys(klass.prototype).forEach(function (key) {
+ newPrototype[key] = klass.prototype[key];
+ });
+ klass.prototype = newPrototype;
+}
+
+/**
+ * Loads all environment scripts ...synchronously ...after us.
+ */
+function loadSync() {
+ debug('Loading environment scripts:');
+ var a11ySuiteScriptPath = 'web-component-tester/data/a11ySuite.js';
+ var scripts = get('environmentScripts');
+ var a11ySuiteWillBeLoaded = window.__generatedByWct || scripts.indexOf(a11ySuiteScriptPath) > -1;
+ // We can't inject a11ySuite when running the npm version because it is a
+ // module-based script that needs `<script type=module>` and compilation
+ // for browsers without module support.
+ if (!a11ySuiteWillBeLoaded && !window.__wctUseNpm) {
+ // wct is running as a bower dependency, load a11ySuite from data/
+ scripts.push(a11ySuiteScriptPath);
+ }
+ scripts.forEach(function (path) {
+ var url = expandUrl(path, get('root'));
+ debug('Loading environment script:', url);
+ // Synchronous load.
+ document.write('<script src="' + encodeURI(url) +
+ '"></script>'); // jshint ignore:line
+ });
+ debug('Environment scripts loaded');
+ var imports = get('environmentImports');
+ imports.forEach(function (path) {
+ var url = expandUrl(path, get('root'));
+ debug('Loading environment import:', url);
+ // Synchronous load.
+ document.write('<link rel="import" href="' + encodeURI(url) +
+ '">'); // jshint ignore:line
+ });
+ debug('Environment imports loaded');
+}
+/**
+ * We have some hard dependencies on things that should be loaded via
+ * `environmentScripts`, so we assert that they're present here; and do any
+ * post-facto setup.
+ */
+function ensureDependenciesPresent() {
+ _ensureMocha();
+ _checkChai();
+}
+function _ensureMocha() {
+ var Mocha = window.Mocha;
+ if (!Mocha) {
+ throw new Error('WCT requires Mocha. Please ensure that it is present in WCT.environmentScripts, or that you load it before loading web-component-tester/browser.js');
+ }
+ injectMocha(Mocha);
+ // Magic loading of mocha's stylesheet
+ var mochaPrefix = scriptPrefix('mocha.js');
+ // only load mocha stylesheet for the test runner output
+ // Not the end of the world, if it doesn't load.
+ if (mochaPrefix && window.top === window.self) {
+ loadStyle(mochaPrefix + 'mocha.css');
+ }
+}
+function _checkChai() {
+ if (!window.chai) {
+ debug('Chai not present; not registering shorthands');
+ return;
+ }
+ window.assert = window.chai.assert;
+ window.expect = window.chai.expect;
+}
+
+// We may encounter errors during initialization (for example, syntax errors in
+// a test file). Hang onto those (and more) until we are ready to report them.
+var globalErrors = [];
+/**
+ * Hook the environment to pick up on global errors.
+ */
+function listenForErrors() {
+ window.addEventListener('error', function (event) {
+ globalErrors.push(event.error);
+ });
+ // Also, we treat `console.error` as a test failure. Unless you prefer not.
+ var origConsole = console;
+ var origError = console.error;
+ console.error = function wctShimmedError() {
+ origError.apply(origConsole, arguments);
+ if (get('trackConsoleError')) {
+ throw 'console.error: ' + Array.prototype.join.call(arguments, ' ');
+ }
+ };
+}
+
+var interfaceExtensions = [];
+/**
+ * Registers an extension that extends the global `Mocha` implementation
+ * with new helper methods. These helper methods will be added to the `window`
+ * when tests run for both BDD and TDD interfaces.
+ */
+function extendInterfaces(helperName, helperFactory) {
+ interfaceExtensions.push(function () {
+ var Mocha = window.Mocha;
+ // For all Mocha interfaces (probably just TDD and BDD):
+ Object.keys(Mocha.interfaces)
+ .forEach(function (interfaceName) {
+ // This is the original callback that defines the interface (TDD or
+ // BDD):
+ var originalInterface = Mocha.interfaces[interfaceName];
+ // This is the name of the "teardown" or "afterEach" property for the
+ // current interface:
+ var teardownProperty = interfaceName === 'tdd' ? 'teardown' : 'afterEach';
+ // The original callback is monkey patched with a new one that appends
+ // to the global context however we want it to:
+ Mocha.interfaces[interfaceName] = function (suite) {
+ // Call back to the original callback so that we get the base
+ // interface:
+ originalInterface.apply(this, arguments);
+ // Register a listener so that we can further extend the base
+ // interface:
+ suite.on('pre-require', function (context, _file, _mocha) {
+ // Capture a bound reference to the teardown function as a
+ // convenience:
+ var teardown = context[teardownProperty].bind(context);
+ // Add our new helper to the testing context. The helper is
+ // generated by a factory method that receives the context,
+ // the teardown function and the interface name and returns
+ // the new method to be added to that context:
+ context[helperName] =
+ helperFactory(context, teardown, interfaceName);
+ });
+ };
+ });
+ });
+}
+/**
+ * Applies any registered interface extensions. The extensions will be applied
+ * as many times as this function is called, so don't call it more than once.
+ */
+function applyExtensions() {
+ interfaceExtensions.forEach(function (applyExtension) {
+ applyExtension();
+ });
+}
+
+extendInterfaces('fixture', function (context, teardown) {
+ // Return context.fixture if it is already a thing, for backwards
+ // compatibility with `test-fixture-mocha.js`:
+ return context.fixture || function fixture(fixtureId, model) {
+ // Automatically register a teardown callback that will restore the
+ // test-fixture:
+ teardown(function () {
+ document.getElementById(fixtureId).restore();
+ });
+ // Find the test-fixture with the provided ID and create it, returning
+ // the results:
+ return document.getElementById(fixtureId).create(model);
+ };
+});
+
+/**
+ * stub
+ *
+ * The stub addon allows the tester to partially replace the implementation of
+ * an element with some custom implementation. Usage example:
+ *
+ * beforeEach(function() {
+ * stub('x-foo', {
+ * attached: function() {
+ * // Custom implementation of the `attached` method of element `x-foo`..
+ * },
+ * otherMethod: function() {
+ * // More custom implementation..
+ * },
+ * getterSetterProperty: {
+ * get: function() {
+ * // Custom getter implementation..
+ * },
+ * set: function() {
+ * // Custom setter implementation..
+ * }
+ * },
+ * // etc..
+ * });
+ * });
+ */
+extendInterfaces('stub', function (_context, teardown) {
+ return function stub(tagName, implementation) {
+ // Find the prototype of the element being stubbed:
+ var proto = document.createElement(tagName).constructor.prototype;
+ // For all keys in the implementation to stub with..
+ var stubs = Object.keys(implementation).map(function (key) {
+ // Stub the method on the element prototype with Sinon:
+ return sinon.stub(proto, key, implementation[key]);
+ });
+ // After all tests..
+ teardown(function () {
+ stubs.forEach(function (stub) {
+ stub.restore();
+ });
+ });
+ };
+});
+
+// replacement map stores what should be
+var replacements = {};
+var replaceTeardownAttached = false;
+/**
+ * replace
+ *
+ * The replace addon allows the tester to replace all usages of one element with
+ * another element within all Polymer elements created within the time span of
+ * the test. Usage example:
+ *
+ * beforeEach(function() {
+ * replace('x-foo').with('x-fake-foo');
+ * });
+ *
+ * All annotations and attributes will be set on the placement element the way
+ * they were set for the original element.
+ */
+extendInterfaces('replace', function (_context, teardown) {
+ return function replace(oldTagName) {
+ return {
+ with: function (tagName) {
+ // Standardizes our replacements map
+ oldTagName = oldTagName.toLowerCase();
+ tagName = tagName.toLowerCase();
+ replacements[oldTagName] = tagName;
+ // If the function is already a stub, restore it to original
+ if (document.importNode.isSinonProxy) {
+ return;
+ }
+ if (!window.Polymer.Element) {
+ window.Polymer.Element = function () { };
+ window.Polymer.Element.prototype._stampTemplate = function () { };
+ }
+ // Keep a reference to the original `document.importNode`
+ // implementation for later:
+ var originalImportNode = document.importNode;
+ // Use Sinon to stub `document.ImportNode`:
+ sinon.stub(document, 'importNode', function (origContent, deep) {
+ var templateClone = document.createElement('template');
+ var content = templateClone.content;
+ var inertDoc = content.ownerDocument;
+ // imports node from inertDoc which holds inert nodes.
+ templateClone.content.appendChild(inertDoc.importNode(origContent, true));
+ // optional arguments are not optional on IE.
+ var nodeIterator = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, null, true);
+ var node;
+ // Traverses the tree. A recently-replaced node will be put next,
+ // so if a node is replaced, it will be checked if it needs to be
+ // replaced again.
+ while (node = nodeIterator.nextNode()) {
+ var currentTagName = node.tagName.toLowerCase();
+ if (replacements.hasOwnProperty(currentTagName)) {
+ currentTagName = replacements[currentTagName];
+ // find the final tag name.
+ while (replacements[currentTagName]) {
+ currentTagName = replacements[currentTagName];
+ }
+ // Create a replacement:
+ var replacement = document.createElement(currentTagName);
+ // For all attributes in the original node..
+ for (var index = 0; index < node.attributes.length; ++index) {
+ // Set that attribute on the replacement:
+ replacement.setAttribute(node.attributes[index].name, node.attributes[index].value);
+ }
+ // Replace the original node with the replacement node:
+ node.parentNode.replaceChild(replacement, node);
+ }
+ }
+ return originalImportNode.call(this, content, deep);
+ });
+ if (!replaceTeardownAttached) {
+ // After each test...
+ teardown(function () {
+ replaceTeardownAttached = true;
+ // Restore the stubbed version of `document.importNode`:
+ var documentImportNode = document.importNode;
+ if (documentImportNode.isSinonProxy) {
+ documentImportNode.restore();
+ }
+ // Empty the replacement map
+ replacements = {};
+ });
+ }
+ }
+ };
+ };
+});
+
+// Mocha global helpers, broken out by testing method.
+//
+// Keys are the method for a particular interface; values are their analog in
+// the opposite interface.
+var MOCHA_EXPORTS = {
+ // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/tdd.js
+ tdd: {
+ 'setup': '"before"',
+ 'teardown': '"after"',
+ 'suiteSetup': '"beforeEach"',
+ 'suiteTeardown': '"afterEach"',
+ 'suite': '"describe" or "context"',
+ 'test': '"it" or "specify"',
+ },
+ // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/bdd.js
+ bdd: {
+ 'before': '"setup"',
+ 'after': '"teardown"',
+ 'beforeEach': '"suiteSetup"',
+ 'afterEach': '"suiteTeardown"',
+ 'describe': '"suite"',
+ 'context': '"suite"',
+ 'xdescribe': '"suite.skip"',
+ 'xcontext': '"suite.skip"',
+ 'it': '"test"',
+ 'xit': '"test.skip"',
+ 'specify': '"test"',
+ 'xspecify': '"test.skip"',
+ },
+};
+/**
+ * Exposes all Mocha methods up front, configuring and running mocha
+ * automatically when you call them.
+ *
+ * The assumption is that it is a one-off (sub-)suite of tests being run.
+ */
+function stubInterfaces() {
+ var keys = Object.keys(MOCHA_EXPORTS);
+ keys.forEach(function (ui) {
+ Object.keys(MOCHA_EXPORTS[ui]).forEach(function (key) {
+ window[key] = function wrappedMochaFunction() {
+ _setupMocha(ui, key, MOCHA_EXPORTS[ui][key]);
+ if (!window[key] || window[key] === wrappedMochaFunction) {
+ throw new Error('Expected mocha.setup to define ' + key);
+ }
+ window[key].apply(window, arguments);
+ };
+ });
+ });
+}
+// Whether we've called `mocha.setup`
+var _mochaIsSetup = false;
+/**
+ * @param {string} ui Sets up mocha to run `ui`-style tests.
+ * @param {string} key The method called that triggered this.
+ * @param {string} alternate The matching method in the opposite interface.
+ */
+function _setupMocha(ui, key, alternate) {
+ var mochaOptions = get('mochaOptions');
+ if (mochaOptions.ui && mochaOptions.ui !== ui) {
+ var message = 'Mixing ' + mochaOptions.ui + ' and ' + ui +
+ ' Mocha styles is not supported. ' +
+ 'You called "' + key + '". Did you mean ' + alternate + '?';
+ throw new Error(message);
+ }
+ if (_mochaIsSetup) {
+ return;
+ }
+ applyExtensions();
+ mochaOptions.ui = ui;
+ mocha.setup(mochaOptions); // Note that the reporter is configured in run.js.
+}
+
+// You can configure WCT before it has loaded by assigning your custom
+// configuration to the global `WCT`.
+setup(window.WCT);
+// Maybe some day we'll expose WCT as a module to whatever module registry you
+// are using (aka the UMD approach), or as an es6 module.
+var WCT = window.WCT = {
+ // A generic place to hang data about the current suite. This object is
+ // reported
+ // back via the `sub-suite-start` and `sub-suite-end` events.
+ share: {},
+ // Until then, we get to rely on it to expose parent runners to their
+ // children.
+ _ChildRunner: ChildRunner,
+ _reporter: undefined,
+ _config: _config,
+ // Public API
+ /**
+ * Loads suites of tests, supporting both `.js` and `.html` files.
+ *
+ * @param {!Array.<string>} files The files to load.
+ */
+ loadSuites: loadSuites,
+};
+// Load Process
+listenForErrors();
+stubInterfaces();
+loadSync();
+// Give any scripts on the page a chance to declare tests and muck with things.
+document.addEventListener('DOMContentLoaded', function () {
+ debug('DOMContentLoaded');
+ ensureDependenciesPresent();
+ // We need the socket built prior to building its reporter.
+ CLISocket.init(function (error, socket) {
+ if (error)
+ throw error;
+ // Are we a child of another run?
+ var current = ChildRunner.current();
+ var parent = current && current.parentScope.WCT._reporter;
+ debug('parentReporter:', parent);
+ var childSuites = activeChildSuites();
+ var reportersToUse = determineReporters(socket, parent);
+ // +1 for any local tests.
+ var reporter = new MultiReporter(childSuites.length + 1, reportersToUse, parent);
+ WCT._reporter = reporter; // For environment/compatibility.js
+ // We need the reporter so that we can report errors during load.
+ loadJsSuites(reporter, function (error) {
+ // Let our parent know that we're about to start the tests.
+ if (current)
+ current.ready(error);
+ if (error)
+ throw error;
+ // Emit any errors we've encountered up til now
+ globalErrors.forEach(function onError(error) {
+ reporter.emitOutOfBandTest('Test Suite Initialization', error);
+ });
+ runSuites(reporter, childSuites, function (error) {
+ // Make sure to let our parent know that we're done.
+ if (current)
+ current.done();
+ if (error)
+ throw error;
+ });
+ });
+ });
+});
+
+}());
+//# sourceMappingURL=browser.js.map \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js.map
new file mode 100644
index 00000000000..89893182811
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/browser.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser.js.map","sources":["browser/environment/helpers.js","browser/config.js","browser/util.js","browser/childrunner.js","browser/clisocket.js","browser/reporters/console.js","browser/reporters/html.js","browser/reporters/multi.js","browser/reporters/title.js","browser/suites.js","browser/reporters.js","browser/environment.js","browser/environment/errors.js","browser/mocha/extend.js","browser/mocha/fixture.js","browser/mocha/stub.js","browser/mocha/replace.js","browser/mocha.js","browser/index.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n// Make sure that we use native timers, in case they're being stubbed out.\nvar nativeSetInterval = window.setInterval;\nvar nativeSetTimeout = window.setTimeout;\nvar nativeRequestAnimationFrame = window.requestAnimationFrame;\n/**\n * Runs `stepFn`, catching any error and passing it to `callback` (Node-style).\n * Otherwise, calls `callback` with no arguments on success.\n *\n * @param {function()} callback\n * @param {function()} stepFn\n */\nfunction safeStep(callback, stepFn) {\n var err;\n try {\n stepFn();\n }\n catch (error) {\n err = error;\n }\n callback(err);\n}\n/**\n * Runs your test at declaration time (before Mocha has begun tests). Handy for\n * when you need to test document initialization.\n *\n * Be aware that any errors thrown asynchronously cannot be tied to your test.\n * You may want to catch them and pass them to the done event, instead. See\n * `safeStep`.\n *\n * @param {string} name The name of the test.\n * @param {function(?function())} testFn The test function. If an argument is\n * accepted, the test will be treated as async, just like Mocha tests.\n */\nfunction testImmediate(name, testFn) {\n if (testFn.length > 0) {\n return testImmediateAsync(name, testFn);\n }\n var err;\n try {\n testFn();\n }\n catch (error) {\n err = error;\n }\n test(name, function (done) {\n done(err);\n });\n}\n/**\n * An async-only variant of `testImmediate`.\n *\n * @param {string} name\n * @param {function(?function())} testFn\n */\nfunction testImmediateAsync(name, testFn) {\n var testComplete = false;\n var err;\n test(name, function (done) {\n var intervalId = nativeSetInterval(function () {\n if (!testComplete)\n return;\n clearInterval(intervalId);\n done(err);\n }, 10);\n });\n try {\n testFn(function (error) {\n if (error)\n err = error;\n testComplete = true;\n });\n }\n catch (error) {\n err = error;\n testComplete = true;\n }\n}\n/**\n * Triggers a flush of any pending events, observations, etc and calls you back\n * after they have been processed.\n *\n * @param {function()} callback\n */\nfunction flush(callback) {\n // Ideally, this function would be a call to Polymer.dom.flush, but that\n // doesn't support a callback yet\n // (https://github.com/Polymer/polymer-dev/issues/851),\n // ...and there's cross-browser flakiness to deal with.\n // Make sure that we're invoking the callback with no arguments so that the\n // caller can pass Mocha callbacks, etc.\n var done = function done() {\n callback();\n };\n // Because endOfMicrotask is flaky for IE, we perform microtask checkpoints\n // ourselves (https://github.com/Polymer/polymer-dev/issues/114):\n var isIE = navigator.appName === 'Microsoft Internet Explorer';\n if (isIE && window.Platform && window.Platform.performMicrotaskCheckpoint) {\n var reallyDone_1 = done;\n done = function doneIE() {\n Platform.performMicrotaskCheckpoint();\n nativeSetTimeout(reallyDone_1, 0);\n };\n }\n // Everyone else gets a regular flush.\n var scope;\n if (window.Polymer && window.Polymer.dom && window.Polymer.dom.flush) {\n scope = window.Polymer.dom;\n }\n else if (window.Polymer && window.Polymer.flush) {\n scope = window.Polymer;\n }\n else if (window.WebComponents && window.WebComponents.flush) {\n scope = window.WebComponents;\n }\n if (scope) {\n scope.flush();\n }\n // Ensure that we are creating a new _task_ to allow all active microtasks to\n // finish (the code you're testing may be using endOfMicrotask, too).\n nativeSetTimeout(done, 0);\n}\n/**\n * Advances a single animation frame.\n *\n * Calls `flush`, `requestAnimationFrame`, `flush`, and `callback` sequentially\n * @param {function()} callback\n */\nfunction animationFrameFlush(callback) {\n flush(function () {\n nativeRequestAnimationFrame(function () {\n flush(callback);\n });\n });\n}\n/**\n * DEPRECATED: Use `flush`.\n * @param {function} callback\n */\nfunction asyncPlatformFlush(callback) {\n console.warn('asyncPlatformFlush is deprecated in favor of the more terse flush()');\n return window.flush(callback);\n}\n/**\n *\n */\nfunction waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime) {\n timeoutTime = timeoutTime || Date.now() + (timeout || 1000);\n intervalOrMutationEl = intervalOrMutationEl || 32;\n try {\n fn();\n }\n catch (e) {\n if (Date.now() > timeoutTime) {\n throw e;\n }\n else {\n if (typeof intervalOrMutationEl !== 'number') {\n intervalOrMutationEl.onMutation(intervalOrMutationEl, function () {\n waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n });\n }\n else {\n nativeSetTimeout(function () {\n waitFor(fn, next, intervalOrMutationEl, timeout, timeoutTime);\n }, intervalOrMutationEl);\n }\n return;\n }\n }\n next();\n}\nwindow.safeStep = safeStep;\nwindow.testImmediate = testImmediate;\nwindow.testImmediateAsync = testImmediateAsync;\nwindow.flush = flush;\nwindow.animationFrameFlush = animationFrameFlush;\nwindow.asyncPlatformFlush = asyncPlatformFlush;\nwindow.waitFor = waitFor;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\n/**\n * The global configuration state for WCT's browser client.\n */\nexport var _config = {\n environmentScripts: !!window.__wctUseNpm ?\n [\n 'stacky/browser.js', 'async/lib/async.js', 'lodash/index.js',\n 'mocha/mocha.js', 'chai/chai.js', '@polymer/sinonjs/sinon.js',\n 'sinon-chai/lib/sinon-chai.js',\n 'accessibility-developer-tools/dist/js/axs_testing.js',\n '@polymer/test-fixture/test-fixture.js'\n ] :\n [\n 'stacky/browser.js', 'async/lib/async.js', 'lodash/lodash.js',\n 'mocha/mocha.js', 'chai/chai.js', 'sinonjs/sinon.js',\n 'sinon-chai/lib/sinon-chai.js',\n 'accessibility-developer-tools/dist/js/axs_testing.js'\n ],\n environmentImports: !!window.__wctUseNpm ? [] :\n ['test-fixture/test-fixture.html'],\n root: null,\n waitForFrameworks: true,\n waitFor: null,\n numConcurrentSuites: 1,\n trackConsoleError: true,\n mochaOptions: { timeout: 10 * 1000 },\n verbose: false,\n};\n/**\n * Merges initial `options` into WCT's global configuration.\n *\n * @param {Object} options The options to merge. See `browser/config.js` for a\n * reference.\n */\nexport function setup(options) {\n var childRunner = ChildRunner.current();\n if (childRunner) {\n _deepMerge(_config, childRunner.parentScope.WCT._config);\n // But do not force the mocha UI\n delete _config.mochaOptions.ui;\n }\n if (options && typeof options === 'object') {\n _deepMerge(_config, options);\n }\n if (!_config.root) {\n // Sibling dependencies.\n var root = util.scriptPrefix('browser.js');\n _config.root = util.basePath(root.substr(0, root.length - 1));\n if (!_config.root) {\n throw new Error('Unable to detect root URL for WCT sources. Please set WCT.root before including browser.js');\n }\n }\n}\n/**\n * Retrieves a configuration value.\n */\nexport function get(key) {\n return _config[key];\n}\n// Internal\nfunction _deepMerge(target, source) {\n Object.keys(source).forEach(function (key) {\n if (target[key] !== null && typeof target[key] === 'object' &&\n !Array.isArray(target[key])) {\n _deepMerge(target[key], source[key]);\n }\n else {\n target[key] = source[key];\n }\n });\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\n/**\n * @param {function()} callback A function to call when the active web component\n * frameworks have loaded.\n */\nexport function whenFrameworksReady(callback) {\n debug('whenFrameworksReady');\n var done = function () {\n debug('whenFrameworksReady done');\n callback();\n };\n // If webcomponents script is in the document, wait for WebComponentsReady.\n if (window.WebComponents && !window.WebComponents.ready) {\n debug('WebComponentsReady?');\n window.addEventListener('WebComponentsReady', function wcReady() {\n window.removeEventListener('WebComponentsReady', wcReady);\n debug('WebComponentsReady');\n done();\n });\n }\n else {\n done();\n }\n}\n/**\n * @return {string} '<count> <kind> tests' or '<count> <kind> test'.\n */\nexport function pluralizedStat(count, kind) {\n if (count === 1) {\n return count + ' ' + kind + ' test';\n }\n else {\n return count + ' ' + kind + ' tests';\n }\n}\n/**\n * @param {string} path The URI of the script to load.\n * @param {function} done\n */\nexport function loadScript(path, done) {\n var script = document.createElement('script');\n script.src = path;\n if (done) {\n script.onload = done.bind(null, null);\n script.onerror = done.bind(null, 'Failed to load script ' + script.src);\n }\n document.head.appendChild(script);\n}\n/**\n * @param {string} path The URI of the stylesheet to load.\n * @param {function} done\n */\nexport function loadStyle(path, done) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = path;\n if (done) {\n link.onload = done.bind(null, null);\n link.onerror = done.bind(null, 'Failed to load stylesheet ' + link.href);\n }\n document.head.appendChild(link);\n}\n/**\n * @param {...*} var_args Logs values to the console when the `debug`\n * configuration option is true.\n */\nexport function debug() {\n var var_args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n var_args[_i] = arguments[_i];\n }\n if (!config.get('verbose')) {\n return;\n }\n var args = [window.location.pathname].concat(var_args);\n (console.debug || console.log).apply(console, args);\n}\n// URL Processing\n/**\n * @param {string} url\n * @return {{base: string, params: string}}\n */\nexport function parseUrl(url) {\n var parts = url.match(/^(.*?)(?:\\?(.*))?$/);\n return {\n base: parts[1],\n params: getParams(parts[2] || ''),\n };\n}\n/**\n * Expands a URL that may or may not be relative to `base`.\n *\n * @param {string} url\n * @param {string} base\n * @return {string}\n */\nexport function expandUrl(url, base) {\n if (!base)\n return url;\n if (url.match(/^(\\/|https?:\\/\\/)/))\n return url;\n if (base.substr(base.length - 1) !== '/') {\n base = base + '/';\n }\n return base + url;\n}\n/**\n * @param {string=} opt_query A query string to parse.\n * @return {!Object<string, !Array<string>>} All params on the URL's query.\n */\nexport function getParams(query) {\n query = typeof query === 'string' ? query : window.location.search;\n if (query.substring(0, 1) === '?') {\n query = query.substring(1);\n }\n // python's SimpleHTTPServer tacks a `/` on the end of query strings :(\n if (query.slice(-1) === '/') {\n query = query.substring(0, query.length - 1);\n }\n if (query === '')\n return {};\n var result = {};\n query.split('&').forEach(function (part) {\n var pair = part.split('=');\n if (pair.length !== 2) {\n console.warn('Invalid URL query part:', part);\n return;\n }\n var key = decodeURIComponent(pair[0]);\n var value = decodeURIComponent(pair[1]);\n if (!result[key]) {\n result[key] = [];\n }\n result[key].push(value);\n });\n return result;\n}\n/**\n * Merges params from `source` into `target` (mutating `target`).\n *\n * @param {!Object<string, !Array<string>>} target\n * @param {!Object<string, !Array<string>>} source\n */\nexport function mergeParams(target, source) {\n Object.keys(source).forEach(function (key) {\n if (!(key in target)) {\n target[key] = [];\n }\n target[key] = target[key].concat(source[key]);\n });\n}\n/**\n * @param {string} param The param to return a value for.\n * @return {?string} The first value for `param`, if found.\n */\nexport function getParam(param) {\n var params = getParams();\n return params[param] ? params[param][0] : null;\n}\n/**\n * @param {!Object<string, !Array<string>>} params\n * @return {string} `params` encoded as a URI query.\n */\nexport function paramsToQuery(params) {\n var pairs = [];\n Object.keys(params).forEach(function (key) {\n params[key].forEach(function (value) {\n pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n });\n });\n return (pairs.length > 0) ? ('?' + pairs.join('&')) : '';\n}\nfunction getPathName(location) {\n return typeof location === 'string' ? location : location.pathname;\n}\nexport function basePath(location) {\n return getPathName(location).match(/^.*\\//)[0];\n}\nexport function relativeLocation(location, basePath) {\n var path = getPathName(location);\n if (path.indexOf(basePath) === 0) {\n path = path.substring(basePath.length);\n }\n return path;\n}\nexport function cleanLocation(location) {\n var path = getPathName(location);\n if (path.slice(-11) === '/index.html') {\n path = path.slice(0, path.length - 10);\n }\n return path;\n}\nexport function parallel(runners, maybeLimit, done) {\n var limit;\n if (typeof maybeLimit !== 'number') {\n done = maybeLimit;\n limit = 0;\n }\n else {\n limit = maybeLimit;\n }\n if (!runners.length) {\n return done();\n }\n var called = false;\n var total = runners.length;\n var numActive = 0;\n var numDone = 0;\n function runnerDone(error) {\n if (called) {\n return;\n }\n numDone = numDone + 1;\n numActive = numActive - 1;\n if (error || numDone >= total) {\n called = true;\n done(error);\n }\n else {\n runOne();\n }\n }\n function runOne() {\n if (limit && numActive >= limit) {\n return;\n }\n if (!runners.length) {\n return;\n }\n numActive = numActive + 1;\n runners.shift()(runnerDone);\n }\n runners.forEach(runOne);\n}\n/**\n * Finds the directory that a loaded script is hosted on.\n *\n * @param {string} filename\n * @return {string?}\n */\nexport function scriptPrefix(filename) {\n var scripts = document.querySelectorAll('script[src*=\"' + filename + '\"]');\n if (scripts.length !== 1) {\n return null;\n }\n var script = scripts[0].src;\n return script.substring(0, script.indexOf(filename));\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from './util.js';\n/**\n * A Mocha suite (or suites) run within a child iframe, but reported as if they\n * are part of the current context.\n */\nvar ChildRunner = /** @class */ (function () {\n function ChildRunner(url, parentScope) {\n var urlBits = util.parseUrl(url);\n util.mergeParams(urlBits.params, util.getParams(parentScope.location.search));\n delete urlBits.params.cli_browser_id;\n this.url = urlBits.base + util.paramsToQuery(urlBits.params);\n this.parentScope = parentScope;\n this.state = 'initializing';\n }\n /**\n * @return {ChildRunner} The `ChildRunner` that was registered for this\n * window.\n */\n ChildRunner.current = function () {\n return ChildRunner.get(window);\n };\n /**\n * @param {!Window} target A window to find the ChildRunner of.\n * @param {boolean} traversal Whether this is a traversal from a child window.\n * @return {ChildRunner} The `ChildRunner` that was registered for `target`.\n */\n ChildRunner.get = function (target, traversal) {\n var childRunner = ChildRunner._byUrl[target.location.href];\n if (childRunner) {\n return childRunner;\n }\n if (window.parent === window) {\n if (traversal) {\n console.warn('Subsuite loaded but was never registered. This most likely is due to wonky history behavior. Reloading...');\n window.location.reload();\n }\n return null;\n }\n // Otherwise, traverse.\n return window.parent.WCT._ChildRunner.get(target, true);\n };\n /**\n * Loads and runs the subsuite.\n *\n * @param {function} done Node-style callback.\n */\n ChildRunner.prototype.run = function (done) {\n util.debug('ChildRunner#run', this.url);\n this.state = 'loading';\n this.onRunComplete = done;\n this.iframe = document.createElement('iframe');\n this.iframe.src = this.url;\n this.iframe.classList.add('subsuite');\n var container = document.getElementById('subsuites');\n if (!container) {\n container = document.createElement('div');\n container.id = 'subsuites';\n document.body.appendChild(container);\n }\n container.appendChild(this.iframe);\n // let the iframe expand the URL for us.\n this.url = this.iframe.src;\n ChildRunner._byUrl[this.url] = this;\n this.timeoutId = setTimeout(this.loaded.bind(this, new Error('Timed out loading ' + this.url)), ChildRunner.loadTimeout);\n this.iframe.addEventListener('error', this.loaded.bind(this, new Error('Failed to load document ' + this.url)));\n this.iframe.contentWindow.addEventListener('DOMContentLoaded', this.loaded.bind(this, null));\n };\n /**\n * Called when the sub suite's iframe has loaded (or errored during load).\n *\n * @param {*} error The error that occured, if any.\n */\n ChildRunner.prototype.loaded = function (error) {\n util.debug('ChildRunner#loaded', this.url, error);\n // Not all targets have WCT loaded (compatiblity mode)\n if (this.iframe.contentWindow.WCT) {\n this.share = this.iframe.contentWindow.WCT.share;\n }\n if (error) {\n this.signalRunComplete(error);\n this.done();\n }\n };\n /**\n * Called in mocha/run.js when all dependencies have loaded, and the child is\n * ready to start running tests\n *\n * @param {*} error The error that occured, if any.\n */\n ChildRunner.prototype.ready = function (error) {\n util.debug('ChildRunner#ready', this.url, error);\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n if (error) {\n this.signalRunComplete(error);\n this.done();\n }\n };\n /**\n * Called when the sub suite's tests are complete, so that it can clean up.\n */\n ChildRunner.prototype.done = function () {\n util.debug('ChildRunner#done', this.url, arguments);\n // make sure to clear that timeout\n this.ready();\n this.signalRunComplete();\n if (!this.iframe)\n return;\n // Be safe and avoid potential browser crashes when logic attempts to\n // interact with the removed iframe.\n setTimeout(function () {\n this.iframe.parentNode.removeChild(this.iframe);\n this.iframe = null;\n }.bind(this), 1);\n };\n ChildRunner.prototype.signalRunComplete = function (error) {\n if (!this.onRunComplete)\n return;\n this.state = 'complete';\n this.onRunComplete(error);\n this.onRunComplete = null;\n };\n // ChildRunners get a pretty generous load timeout by default.\n ChildRunner.loadTimeout = 60000;\n // We can't maintain properties on iframe elements in Firefox/Safari/???, so\n // we track childRunners by URL.\n ChildRunner._byUrl = {};\n return ChildRunner;\n}());\nexport default ChildRunner;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as util from './util.js';\nvar SOCKETIO_ENDPOINT = window.location.protocol + '//' + window.location.host;\nvar SOCKETIO_LIBRARY = SOCKETIO_ENDPOINT + '/socket.io/socket.io.js';\n/**\n * A socket for communication between the CLI and browser runners.\n *\n * @param {string} browserId An ID generated by the CLI runner.\n * @param {!io.Socket} socket The socket.io `Socket` to communicate over.\n */\nvar CLISocket = /** @class */ (function () {\n function CLISocket(browserId, socket) {\n this.browserId = browserId;\n this.socket = socket;\n }\n /**\n * @param {!Mocha.Runner} runner The Mocha `Runner` to observe, reporting\n * interesting events back to the CLI runner.\n */\n CLISocket.prototype.observe = function (runner) {\n var _this = this;\n this.emitEvent('browser-start', {\n url: window.location.toString(),\n });\n // We only emit a subset of events that we care about, and follow a more\n // general event format that is hopefully applicable to test runners beyond\n // mocha.\n //\n // For all possible mocha events, see:\n // https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36\n runner.on('test', function (test) {\n _this.emitEvent('test-start', { test: getTitles(test) });\n });\n runner.on('test end', function (test) {\n _this.emitEvent('test-end', {\n state: getState(test),\n test: getTitles(test),\n duration: test.duration,\n error: test.err,\n });\n });\n runner.on('fail', function (test, err) {\n // fail the test run if we catch errors outside of a test function\n if (test.type !== 'test') {\n _this.emitEvent('browser-fail', 'Error thrown outside of test function: ' + err.stack);\n }\n });\n runner.on('childRunner start', function (childRunner) {\n _this.emitEvent('sub-suite-start', childRunner.share);\n });\n runner.on('childRunner end', function (childRunner) {\n _this.emitEvent('sub-suite-end', childRunner.share);\n });\n runner.on('end', function () {\n _this.emitEvent('browser-end');\n });\n };\n /**\n * @param {string} event The name of the event to fire.\n * @param {*} data Additional data to pass with the event.\n */\n CLISocket.prototype.emitEvent = function (event, data) {\n this.socket.emit('client-event', {\n browserId: this.browserId,\n event: event,\n data: data,\n });\n };\n /**\n * Builds a `CLISocket` if we are within a CLI-run environment; short-circuits\n * otherwise.\n *\n * @param {function(*, CLISocket)} done Node-style callback.\n */\n CLISocket.init = function (done) {\n var browserId = util.getParam('cli_browser_id');\n if (!browserId)\n return done();\n // Only fire up the socket for root runners.\n if (ChildRunner.current())\n return done();\n util.loadScript(SOCKETIO_LIBRARY, function (error) {\n if (error)\n return done(error);\n var socket = io(SOCKETIO_ENDPOINT);\n socket.on('error', function (error) {\n socket.off();\n done(error);\n });\n socket.on('connect', function () {\n socket.off();\n done(null, new CLISocket(browserId, socket));\n });\n });\n };\n return CLISocket;\n}());\nexport default CLISocket;\n// Misc Utility\n/**\n * @param {!Mocha.Runnable} runnable The test or suite to extract titles from.\n * @return {!Array.<string>} The titles of the runnable and its parents.\n */\nfunction getTitles(runnable) {\n var titles = [];\n while (runnable && !runnable.root && runnable.title) {\n titles.unshift(runnable.title);\n runnable = runnable.parent;\n }\n return titles;\n}\n/**\n * @param {!Mocha.Runnable} runnable\n * @return {string}\n */\nfunction getState(runnable) {\n if (runnable.state === 'passed') {\n return 'passing';\n }\n else if (runnable.state === 'failed') {\n return 'failing';\n }\n else if (runnable.pending) {\n return 'pending';\n }\n else {\n return 'unknown';\n }\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\n// We capture console events when running tests; so make sure we have a\n// reference to the original one.\nvar console = window.console;\nvar FONT = ';font: normal 13px \"Roboto\", \"Helvetica Neue\", \"Helvetica\", sans-serif;';\nvar STYLES = {\n plain: FONT,\n suite: 'color: #5c6bc0' + FONT,\n test: FONT,\n passing: 'color: #259b24' + FONT,\n pending: 'color: #e65100' + FONT,\n failing: 'color: #c41411' + FONT,\n stack: 'color: #c41411',\n results: FONT + 'font-size: 16px',\n};\n// I don't think we can feature detect this one...\nvar userAgent = navigator.userAgent.toLowerCase();\nvar CAN_STYLE_LOG = userAgent.match('firefox') || userAgent.match('webkit');\nvar CAN_STYLE_GROUP = userAgent.match('webkit');\n// Track the indent for faked `console.group`\nvar logIndent = '';\nfunction log(text, style) {\n text = text.split('\\n')\n .map(function (l) {\n return logIndent + l;\n })\n .join('\\n');\n if (CAN_STYLE_LOG) {\n console.log('%c' + text, STYLES[style] || STYLES.plain);\n }\n else {\n console.log(text);\n }\n}\nfunction logGroup(text, style) {\n if (CAN_STYLE_GROUP) {\n console.group('%c' + text, STYLES[style] || STYLES.plain);\n }\n else if (console.group) {\n console.group(text);\n }\n else {\n logIndent = logIndent + ' ';\n log(text, style);\n }\n}\nfunction logGroupEnd() {\n if (console.groupEnd) {\n console.groupEnd();\n }\n else {\n logIndent = logIndent.substr(0, logIndent.length - 2);\n }\n}\nfunction logException(error) {\n log(error.stack || error.message || (error + ''), 'stack');\n}\n/**\n * A Mocha reporter that logs results out to the web `console`.\n */\nvar Console = /** @class */ (function () {\n /**\n * @param runner The runner that is being reported on.\n */\n function Console(runner) {\n Mocha.reporters.Base.call(this, runner);\n runner.on('suite', function (suite) {\n if (suite.root) {\n return;\n }\n logGroup(suite.title, 'suite');\n }.bind(this));\n runner.on('suite end', function (suite) {\n if (suite.root) {\n return;\n }\n logGroupEnd();\n }.bind(this));\n runner.on('test', function (test) {\n logGroup(test.title, 'test');\n }.bind(this));\n runner.on('pending', function (test) {\n logGroup(test.title, 'pending');\n }.bind(this));\n runner.on('fail', function (_test, error) {\n logException(error);\n }.bind(this));\n runner.on('test end', function (_test) {\n logGroupEnd();\n }.bind(this));\n runner.on('end', this.logSummary.bind(this));\n }\n /** Prints out a final summary of test results. */\n Console.prototype.logSummary = function () {\n logGroup('Test Results', 'results');\n if (this.stats.failures > 0) {\n log(util.pluralizedStat(this.stats.failures, 'failing'), 'failing');\n }\n if (this.stats.pending > 0) {\n log(util.pluralizedStat(this.stats.pending, 'pending'), 'pending');\n }\n log(util.pluralizedStat(this.stats.passes, 'passing'));\n if (!this.stats.failures) {\n log('test suite passed', 'passing');\n }\n log('Evaluated ' + this.stats.tests + ' tests in ' +\n this.stats.duration + 'ms.');\n logGroupEnd();\n };\n return Console;\n}());\nexport default Console;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * WCT-specific behavior on top of Mocha's default HTML reporter.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nexport default function HTML(runner) {\n var output = document.createElement('div');\n output.id = 'mocha';\n document.body.appendChild(output);\n runner.on('suite', function (_test) {\n this.total = runner.total;\n }.bind(this));\n Mocha.reporters.HTML.call(this, runner);\n}\n// Woo! What a hack. This just saves us from adding a bunch of complexity around\n// style loading.\nvar style = document.createElement('style');\nstyle.textContent = \"\\n html, body {\\n position: relative;\\n height: 100%;\\n width: 100%;\\n min-width: 900px;\\n }\\n #mocha, #subsuites {\\n height: 100%;\\n position: absolute;\\n top: 0;\\n }\\n #mocha {\\n box-sizing: border-box;\\n margin: 0 !important;\\n padding: 60px 20px;\\n right: 0;\\n left: 500px;\\n }\\n #subsuites {\\n -ms-flex-direction: column;\\n -webkit-flex-direction: column;\\n display: -ms-flexbox;\\n display: -webkit-flex;\\n display: flex;\\n flex-direction: column;\\n left: 0;\\n width: 500px;\\n }\\n #subsuites .subsuite {\\n border: 0;\\n width: 100%;\\n height: 100%;\\n }\\n #mocha .test.pass .duration {\\n color: #555 !important;\\n }\\n\";\ndocument.head.appendChild(style);\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar STACKY_CONFIG = {\n indent: ' ',\n locationStrip: [\n /^https?:\\/\\/[^\\/]+/,\n /\\?.*$/,\n ],\n filter: function (line) {\n return !!line.location.match(/\\/web-component-tester\\/[^\\/]+(\\?.*)?$/);\n },\n};\n// https://github.com/visionmedia/mocha/blob/master/lib/runner.js#L36-46\nvar MOCHA_EVENTS = [\n 'start', 'end', 'suite', 'suite end', 'test', 'test end', 'hook', 'hook end',\n 'pass', 'fail', 'pending', 'childRunner end'\n];\n// Until a suite has loaded, we assume this many tests in it.\nvar ESTIMATED_TESTS_PER_SUITE = 3;\n/**\n * A Mocha-like reporter that combines the output of multiple Mocha suites.\n */\nvar MultiReporter = /** @class */ (function () {\n /**\n * @param numSuites The number of suites that will be run, in order to\n * estimate the total number of tests that will be performed.\n * @param reporters The set of reporters that\n * should receive the unified event stream.\n * @param parent The parent reporter, if present.\n */\n function MultiReporter(numSuites, reporters, parent) {\n var _this = this;\n this.reporters = reporters.map(function (reporter) {\n return new reporter(_this);\n });\n this.parent = parent;\n this.basePath = parent && parent.basePath || util.basePath(window.location);\n this.total = numSuites * ESTIMATED_TESTS_PER_SUITE;\n // Mocha reporters assume a stream of events, so we have to be careful to\n // only report on one runner at a time...\n this.currentRunner = null;\n // ...while we buffer events for any other active runners.\n this.pendingEvents = [];\n this.emit('start');\n }\n /**\n * @param location The location this reporter represents.\n * @return A reporter-like \"class\" for each child suite\n * that should be passed to `mocha.run`.\n */\n MultiReporter.prototype.childReporter = function (location) {\n var name = this.suiteTitle(location);\n // The reporter is used as a constructor, so we can't depend on `this` being\n // properly bound.\n var self = this;\n return _a = /** @class */ (function () {\n function ChildReporter(runner) {\n runner.name = window.name;\n self.bindChildRunner(runner);\n }\n return ChildReporter;\n }()),\n _a.title = window.name,\n _a;\n var _a;\n };\n /** Must be called once all runners have finished. */\n MultiReporter.prototype.done = function () {\n this.complete = true;\n this.flushPendingEvents();\n this.emit('end');\n };\n /**\n * Emit a top level test that is not part of any suite managed by this\n * reporter.\n *\n * Helpful for reporting on global errors, loading issues, etc.\n *\n * @param title The title of the test.\n * @param error An error associated with this test. If falsy, test is\n * considered to be passing.\n * @param suiteTitle Title for the suite that's wrapping the test.\n * @param estimated If this test was included in the original\n * estimate of `numSuites`.\n */\n MultiReporter.prototype.emitOutOfBandTest = function (title, error, suiteTitle, estimated) {\n util.debug('MultiReporter#emitOutOfBandTest(', arguments, ')');\n var root = new Mocha.Suite(suiteTitle || '');\n var test = new Mocha.Test(title, function () { });\n test.parent = root;\n test.state = error ? 'failed' : 'passed';\n test.err = error;\n if (!estimated) {\n this.total = this.total + ESTIMATED_TESTS_PER_SUITE;\n }\n var runner = { total: 1 };\n this.proxyEvent('start', runner);\n this.proxyEvent('suite', runner, root);\n this.proxyEvent('test', runner, test);\n if (error) {\n this.proxyEvent('fail', runner, test, error);\n }\n else {\n this.proxyEvent('pass', runner, test);\n }\n this.proxyEvent('test end', runner, test);\n this.proxyEvent('suite end', runner, root);\n this.proxyEvent('end', runner);\n };\n /**\n * @param {!Location|string} location\n * @return {string}\n */\n MultiReporter.prototype.suiteTitle = function (location) {\n var path = util.relativeLocation(location, this.basePath);\n path = util.cleanLocation(path);\n return path;\n };\n // Internal Interface\n /** @param {!Mocha.runners.Base} runner The runner to listen to events for. */\n MultiReporter.prototype.bindChildRunner = function (runner) {\n var _this = this;\n MOCHA_EVENTS.forEach(function (eventName) {\n runner.on(eventName, _this.proxyEvent.bind(_this, eventName, runner));\n });\n };\n /**\n * Evaluates an event fired by `runner`, proxying it forward or buffering it.\n *\n * @param {string} eventName\n * @param {!Mocha.runners.Base} runner The runner that emitted this event.\n * @param {...*} var_args Any additional data passed as part of the event.\n */\n MultiReporter.prototype.proxyEvent = function (eventName, runner) {\n var _args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n _args[_i - 2] = arguments[_i];\n }\n var extraArgs = Array.prototype.slice.call(arguments, 2);\n if (this.complete) {\n console.warn('out of order Mocha event for ' + runner.name + ':', eventName, extraArgs);\n return;\n }\n if (this.currentRunner && runner !== this.currentRunner) {\n this.pendingEvents.push(Array.prototype.slice.call(arguments));\n return;\n }\n util.debug('MultiReporter#proxyEvent(', arguments, ')');\n // This appears to be a Mocha bug: Tests failed by passing an error to their\n // done function don't set `err` properly.\n //\n // TODO(nevir): Track down.\n if (eventName === 'fail' && !extraArgs[0].err) {\n extraArgs[0].err = extraArgs[1];\n }\n if (eventName === 'start') {\n this.onRunnerStart(runner);\n }\n else if (eventName === 'end') {\n this.onRunnerEnd(runner);\n }\n else {\n this.cleanEvent(eventName, runner, extraArgs);\n this.emit.apply(this, [eventName].concat(extraArgs));\n }\n };\n /**\n * Cleans or modifies an event if needed.\n *\n * @param eventName\n * @param runner The runner that emitted this event.\n * @param extraArgs\n */\n MultiReporter.prototype.cleanEvent = function (eventName, _runner, extraArgs) {\n // Suite hierarchy\n if (extraArgs[0]) {\n extraArgs[0] = this.showRootSuite(extraArgs[0]);\n }\n // Normalize errors\n if (eventName === 'fail') {\n extraArgs[1] = Stacky.normalize(extraArgs[1], STACKY_CONFIG);\n }\n if (extraArgs[0] && extraArgs[0].err) {\n extraArgs[0].err = Stacky.normalize(extraArgs[0].err, STACKY_CONFIG);\n }\n };\n /**\n * We like to show the root suite's title, which requires a little bit of\n * trickery in the suite hierarchy.\n *\n * @param {!Mocha.Runnable} node\n */\n MultiReporter.prototype.showRootSuite = function (node) {\n var leaf = node = Object.create(node);\n while (node && node.parent) {\n var wrappedParent = Object.create(node.parent);\n node.parent = wrappedParent;\n node = wrappedParent;\n }\n node.root = false;\n return leaf;\n };\n /** @param {!Mocha.runners.Base} runner */\n MultiReporter.prototype.onRunnerStart = function (runner) {\n util.debug('MultiReporter#onRunnerStart:', runner.name);\n this.total = this.total - ESTIMATED_TESTS_PER_SUITE + runner.total;\n this.currentRunner = runner;\n };\n /** @param {!Mocha.runners.Base} runner */\n MultiReporter.prototype.onRunnerEnd = function (runner) {\n util.debug('MultiReporter#onRunnerEnd:', runner.name);\n this.currentRunner = null;\n this.flushPendingEvents();\n };\n /**\n * Flushes any buffered events and runs them through `proxyEvent`. This will\n * loop until all buffered runners are complete, or we have run out of\n * buffered events.\n */\n MultiReporter.prototype.flushPendingEvents = function () {\n var _this = this;\n var events = this.pendingEvents;\n this.pendingEvents = [];\n events.forEach(function (eventArgs) {\n _this.proxyEvent.apply(_this, eventArgs);\n });\n };\n return MultiReporter;\n}());\nexport default MultiReporter;\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as util from '../util.js';\nvar ARC_OFFSET = 0; // start at the right.\nvar ARC_WIDTH = 6;\n/**\n * A Mocha reporter that updates the document's title and favicon with\n * at-a-glance stats.\n *\n * @param {!Mocha.Runner} runner The runner that is being reported on.\n */\nvar Title = /** @class */ (function () {\n function Title(runner) {\n Mocha.reporters.Base.call(this, runner);\n runner.on('test end', this.report.bind(this));\n }\n /** Reports current stats via the page title and favicon. */\n Title.prototype.report = function () {\n this.updateTitle();\n this.updateFavicon();\n };\n /** Updates the document title with a summary of current stats. */\n Title.prototype.updateTitle = function () {\n if (this.stats.failures > 0) {\n document.title = util.pluralizedStat(this.stats.failures, 'failing');\n }\n else {\n document.title = util.pluralizedStat(this.stats.passes, 'passing');\n }\n };\n /** Updates the document's favicon w/ a summary of current stats. */\n Title.prototype.updateFavicon = function () {\n var canvas = document.createElement('canvas');\n canvas.height = canvas.width = 32;\n var context = canvas.getContext('2d');\n var passing = this.stats.passes;\n var pending = this.stats.pending;\n var failing = this.stats.failures;\n var total = Math.max(this.runner.total, passing + pending + failing);\n drawFaviconArc(context, total, 0, passing, '#0e9c57');\n drawFaviconArc(context, total, passing, pending, '#f3b300');\n drawFaviconArc(context, total, pending + passing, failing, '#ff5621');\n this.setFavicon(canvas.toDataURL());\n };\n /** Sets the current favicon by URL. */\n Title.prototype.setFavicon = function (url) {\n var current = document.head.querySelector('link[rel=\"icon\"]');\n if (current) {\n document.head.removeChild(current);\n }\n var link = document.createElement('link');\n link.rel = 'icon';\n link.type = 'image/x-icon';\n link.href = url;\n link.setAttribute('sizes', '32x32');\n document.head.appendChild(link);\n };\n return Title;\n}());\nexport default Title;\n/**\n * Draws an arc for the favicon status, relative to the total number of tests.\n */\nfunction drawFaviconArc(context, total, start, length, color) {\n var arcStart = ARC_OFFSET + Math.PI * 2 * (start / total);\n var arcEnd = ARC_OFFSET + Math.PI * 2 * ((start + length) / total);\n context.beginPath();\n context.strokeStyle = color;\n context.lineWidth = ARC_WIDTH;\n context.arc(16, 16, 16 - ARC_WIDTH / 2, arcStart, arcEnd);\n context.stroke();\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport ChildRunner from './childrunner.js';\nimport * as config from './config.js';\nimport * as util from './util.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n// We process grep ourselves to avoid loading suites that will be filtered.\nvar GREP = util.getParam('grep');\n// work around mocha bug (https://github.com/mochajs/mocha/issues/2070)\nif (GREP) {\n GREP = GREP.replace(/\\\\\\./g, '.');\n}\n/**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param files The files to load.\n */\nexport function loadSuites(files) {\n files.forEach(function (file) {\n if (/\\.js(\\?.*)?$/.test(file)) {\n jsSuites.push(file);\n }\n else if (/\\.html(\\?.*)?$/.test(file)) {\n htmlSuites.push(file);\n }\n else {\n throw new Error('Unknown resource type: ' + file);\n }\n });\n}\n/**\n * @return The child suites that should be loaded, ignoring\n * those that would not match `GREP`.\n */\nexport function activeChildSuites() {\n var subsuites = htmlSuites;\n if (GREP) {\n var cleanSubsuites = [];\n for (var i = 0, subsuite = void 0; subsuite = subsuites[i]; i++) {\n if (GREP.indexOf(util.cleanLocation(subsuite)) !== -1) {\n cleanSubsuites.push(subsuite);\n }\n }\n subsuites = cleanSubsuites;\n }\n return subsuites;\n}\n/**\n * Loads all `.js` sources requested by the current suite.\n */\nexport function loadJsSuites(_reporter, done) {\n util.debug('loadJsSuites', jsSuites);\n var loaders = jsSuites.map(function (file) {\n // We only support `.js` dependencies for now.\n return util.loadScript.bind(util, file);\n });\n util.parallel(loaders, done);\n}\nexport function runSuites(reporter, childSuites, done) {\n util.debug('runSuites');\n var suiteRunners = [\n // Run the local tests (if any) first, not stopping on error;\n _runMocha.bind(null, reporter),\n ];\n // As well as any sub suites. Again, don't stop on error.\n childSuites.forEach(function (file) {\n suiteRunners.push(function (next) {\n var childRunner = new ChildRunner(file, window);\n reporter.emit('childRunner start', childRunner);\n childRunner.run(function (error) {\n reporter.emit('childRunner end', childRunner);\n if (error)\n reporter.emitOutOfBandTest(file, error);\n next();\n });\n });\n });\n util.parallel(suiteRunners, config.get('numConcurrentSuites'), function (error) {\n reporter.done();\n done(error);\n });\n}\n/**\n * Kicks off a mocha run, waiting for frameworks to load if necessary.\n *\n * @param {!MultiReporter} reporter Where to send Mocha's events.\n * @param {function} done A callback fired, _no error is passed_.\n */\nfunction _runMocha(reporter, done, waited) {\n if (config.get('waitForFrameworks') && !waited) {\n var waitFor = (config.get('waitFor') || util.whenFrameworksReady).bind(window);\n waitFor(function () {\n _fixCustomElements();\n _runMocha(reporter, done, true);\n });\n return;\n }\n util.debug('_runMocha');\n var mocha = window.mocha;\n var Mocha = window.Mocha;\n mocha.reporter(reporter.childReporter(window.location));\n mocha.suite.title = reporter.suiteTitle(window.location);\n mocha.grep(GREP);\n // We can't use `mocha.run` because it bashes over grep, invert, and friends.\n // See https://github.com/visionmedia/mocha/blob/master/support/tail.js#L137\n var runner = Mocha.prototype.run.call(mocha, function (_error) {\n if (document.getElementById('mocha')) {\n Mocha.utils.highlightTags('code');\n }\n done(); // We ignore the Mocha failure count.\n });\n // Mocha's default `onerror` handling strips the stack (to support really old\n // browsers). We upgrade this to get better stacks for async errors.\n //\n // TODO(nevir): Can we expand support to other browsers?\n if (navigator.userAgent.match(/chrome/i)) {\n window.onerror = null;\n window.addEventListener('error', function (event) {\n if (!event.error)\n return;\n if (event.error.ignore)\n return;\n runner.uncaught(event.error);\n });\n }\n}\n/**\n * In Chrome57 custom elements in the document might not get upgraded when\n * there is a high GC\n * https://bugs.chromium.org/p/chromium/issues/detail?id=701601 We clone and\n * replace the ones that weren't upgraded.\n */\nfunction _fixCustomElements() {\n // Bail out if it is not Chrome 57.\n var raw = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n var isM57 = raw && raw[2] === '57';\n if (!isM57)\n return;\n var elements = document.body.querySelectorAll('*:not(script):not(style)');\n var constructors = {};\n for (var i = 0; i < elements.length; i++) {\n var el = elements[i];\n // This child has already been cloned and replaced by its parent, skip it!\n if (!el.isConnected)\n continue;\n var tag = el.localName;\n // Not a custom element!\n if (tag.indexOf('-') === -1)\n continue;\n // Memoize correct constructors.\n constructors[tag] =\n constructors[tag] || document.createElement(tag).constructor;\n // This one was correctly upgraded.\n if (el instanceof constructors[tag])\n continue;\n util.debug('_fixCustomElements: found non-upgraded custom element ' + el);\n var clone = document.importNode(el, true);\n el.parentNode.replaceChild(clone, el);\n }\n}\n","import ConsoleReporter from './reporters/console.js';\nimport HTMLReporter from './reporters/html.js';\nimport MultiReporter from './reporters/multi.js';\nimport TitleReporter from './reporters/title.js';\nimport * as suites from './suites.js';\nexport var htmlSuites = [];\nexport var jsSuites = [];\n/**\n * @param {CLISocket} socket The CLI socket, if present.\n * @param {MultiReporter} parent The parent reporter, if present.\n * @return {!Array.<!Mocha.reporters.Base} The reporters that should be used.\n */\nexport function determineReporters(socket, parent) {\n // Parents are greedy.\n if (parent) {\n return [parent.childReporter(window.location)];\n }\n // Otherwise, we get to run wild without any parental supervision!\n var reporters = [TitleReporter, ConsoleReporter];\n if (socket) {\n reporters.push(function (runner) {\n socket.observe(runner);\n });\n }\n if (suites.htmlSuites.length > 0 || suites.jsSuites.length > 0) {\n reporters.push(HTMLReporter);\n }\n return reporters;\n}\n/**\n * Yeah, hideous, but this allows us to be loaded before Mocha, which is handy.\n */\nexport function injectMocha(Mocha) {\n _injectPrototype(ConsoleReporter, Mocha.reporters.Base.prototype);\n _injectPrototype(HTMLReporter, Mocha.reporters.HTML.prototype);\n // Mocha doesn't expose its `EventEmitter` shim directly, so:\n _injectPrototype(MultiReporter, Object.getPrototypeOf(Mocha.Runner.prototype));\n}\nfunction _injectPrototype(klass, prototype) {\n var newPrototype = Object.create(prototype);\n // Only support\n Object.keys(klass.prototype).forEach(function (key) {\n newPrototype[key] = klass.prototype[key];\n });\n klass.prototype = newPrototype;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from './config.js';\nimport * as reporters from './reporters.js';\nimport * as util from './util.js';\n/**\n * Loads all environment scripts ...synchronously ...after us.\n */\nexport function loadSync() {\n util.debug('Loading environment scripts:');\n var a11ySuiteScriptPath = 'web-component-tester/data/a11ySuite.js';\n var scripts = config.get('environmentScripts');\n var a11ySuiteWillBeLoaded = window.__generatedByWct || scripts.indexOf(a11ySuiteScriptPath) > -1;\n // We can't inject a11ySuite when running the npm version because it is a\n // module-based script that needs `<script type=module>` and compilation\n // for browsers without module support.\n if (!a11ySuiteWillBeLoaded && !window.__wctUseNpm) {\n // wct is running as a bower dependency, load a11ySuite from data/\n scripts.push(a11ySuiteScriptPath);\n }\n scripts.forEach(function (path) {\n var url = util.expandUrl(path, config.get('root'));\n util.debug('Loading environment script:', url);\n // Synchronous load.\n document.write('<script src=\"' + encodeURI(url) +\n '\"></script>'); // jshint ignore:line\n });\n util.debug('Environment scripts loaded');\n var imports = config.get('environmentImports');\n imports.forEach(function (path) {\n var url = util.expandUrl(path, config.get('root'));\n util.debug('Loading environment import:', url);\n // Synchronous load.\n document.write('<link rel=\"import\" href=\"' + encodeURI(url) +\n '\">'); // jshint ignore:line\n });\n util.debug('Environment imports loaded');\n}\n/**\n * We have some hard dependencies on things that should be loaded via\n * `environmentScripts`, so we assert that they're present here; and do any\n * post-facto setup.\n */\nexport function ensureDependenciesPresent() {\n _ensureMocha();\n _checkChai();\n}\nfunction _ensureMocha() {\n var Mocha = window.Mocha;\n if (!Mocha) {\n throw new Error('WCT requires Mocha. Please ensure that it is present in WCT.environmentScripts, or that you load it before loading web-component-tester/browser.js');\n }\n reporters.injectMocha(Mocha);\n // Magic loading of mocha's stylesheet\n var mochaPrefix = util.scriptPrefix('mocha.js');\n // only load mocha stylesheet for the test runner output\n // Not the end of the world, if it doesn't load.\n if (mochaPrefix && window.top === window.self) {\n util.loadStyle(mochaPrefix + 'mocha.css');\n }\n}\nfunction _checkChai() {\n if (!window.chai) {\n util.debug('Chai not present; not registering shorthands');\n return;\n }\n window.assert = window.chai.assert;\n window.expect = window.chai.expect;\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport * as config from '../config.js';\n// We may encounter errors during initialization (for example, syntax errors in\n// a test file). Hang onto those (and more) until we are ready to report them.\nexport var globalErrors = [];\n/**\n * Hook the environment to pick up on global errors.\n */\nexport function listenForErrors() {\n window.addEventListener('error', function (event) {\n globalErrors.push(event.error);\n });\n // Also, we treat `console.error` as a test failure. Unless you prefer not.\n var origConsole = console;\n var origError = console.error;\n console.error = function wctShimmedError() {\n origError.apply(origConsole, arguments);\n if (config.get('trackConsoleError')) {\n throw 'console.error: ' + Array.prototype.join.call(arguments, ' ');\n }\n };\n}\n","var interfaceExtensions = [];\n/**\n * Registers an extension that extends the global `Mocha` implementation\n * with new helper methods. These helper methods will be added to the `window`\n * when tests run for both BDD and TDD interfaces.\n */\nexport function extendInterfaces(helperName, helperFactory) {\n interfaceExtensions.push(function () {\n var Mocha = window.Mocha;\n // For all Mocha interfaces (probably just TDD and BDD):\n Object.keys(Mocha.interfaces)\n .forEach(function (interfaceName) {\n // This is the original callback that defines the interface (TDD or\n // BDD):\n var originalInterface = Mocha.interfaces[interfaceName];\n // This is the name of the \"teardown\" or \"afterEach\" property for the\n // current interface:\n var teardownProperty = interfaceName === 'tdd' ? 'teardown' : 'afterEach';\n // The original callback is monkey patched with a new one that appends\n // to the global context however we want it to:\n Mocha.interfaces[interfaceName] = function (suite) {\n // Call back to the original callback so that we get the base\n // interface:\n originalInterface.apply(this, arguments);\n // Register a listener so that we can further extend the base\n // interface:\n suite.on('pre-require', function (context, _file, _mocha) {\n // Capture a bound reference to the teardown function as a\n // convenience:\n var teardown = context[teardownProperty].bind(context);\n // Add our new helper to the testing context. The helper is\n // generated by a factory method that receives the context,\n // the teardown function and the interface name and returns\n // the new method to be added to that context:\n context[helperName] =\n helperFactory(context, teardown, interfaceName);\n });\n };\n });\n });\n}\n/**\n * Applies any registered interface extensions. The extensions will be applied\n * as many times as this function is called, so don't call it more than once.\n */\nexport function applyExtensions() {\n interfaceExtensions.forEach(function (applyExtension) {\n applyExtension();\n });\n}\n","import { extendInterfaces } from './extend.js';\nextendInterfaces('fixture', function (context, teardown) {\n // Return context.fixture if it is already a thing, for backwards\n // compatibility with `test-fixture-mocha.js`:\n return context.fixture || function fixture(fixtureId, model) {\n // Automatically register a teardown callback that will restore the\n // test-fixture:\n teardown(function () {\n document.getElementById(fixtureId).restore();\n });\n // Find the test-fixture with the provided ID and create it, returning\n // the results:\n return document.getElementById(fixtureId).create(model);\n };\n});\n","import { extendInterfaces } from './extend.js';\n/**\n * stub\n *\n * The stub addon allows the tester to partially replace the implementation of\n * an element with some custom implementation. Usage example:\n *\n * beforeEach(function() {\n * stub('x-foo', {\n * attached: function() {\n * // Custom implementation of the `attached` method of element `x-foo`..\n * },\n * otherMethod: function() {\n * // More custom implementation..\n * },\n * getterSetterProperty: {\n * get: function() {\n * // Custom getter implementation..\n * },\n * set: function() {\n * // Custom setter implementation..\n * }\n * },\n * // etc..\n * });\n * });\n */\nextendInterfaces('stub', function (_context, teardown) {\n return function stub(tagName, implementation) {\n // Find the prototype of the element being stubbed:\n var proto = document.createElement(tagName).constructor.prototype;\n // For all keys in the implementation to stub with..\n var stubs = Object.keys(implementation).map(function (key) {\n // Stub the method on the element prototype with Sinon:\n return sinon.stub(proto, key, implementation[key]);\n });\n // After all tests..\n teardown(function () {\n stubs.forEach(function (stub) {\n stub.restore();\n });\n });\n };\n});\n","import { extendInterfaces } from './extend.js';\n// replacement map stores what should be\nvar replacements = {};\nvar replaceTeardownAttached = false;\n/**\n * replace\n *\n * The replace addon allows the tester to replace all usages of one element with\n * another element within all Polymer elements created within the time span of\n * the test. Usage example:\n *\n * beforeEach(function() {\n * replace('x-foo').with('x-fake-foo');\n * });\n *\n * All annotations and attributes will be set on the placement element the way\n * they were set for the original element.\n */\nextendInterfaces('replace', function (_context, teardown) {\n return function replace(oldTagName) {\n return {\n with: function (tagName) {\n // Standardizes our replacements map\n oldTagName = oldTagName.toLowerCase();\n tagName = tagName.toLowerCase();\n replacements[oldTagName] = tagName;\n // If the function is already a stub, restore it to original\n if (document.importNode.isSinonProxy) {\n return;\n }\n if (!window.Polymer.Element) {\n window.Polymer.Element = function () { };\n window.Polymer.Element.prototype._stampTemplate = function () { };\n }\n // Keep a reference to the original `document.importNode`\n // implementation for later:\n var originalImportNode = document.importNode;\n // Use Sinon to stub `document.ImportNode`:\n sinon.stub(document, 'importNode', function (origContent, deep) {\n var templateClone = document.createElement('template');\n var content = templateClone.content;\n var inertDoc = content.ownerDocument;\n // imports node from inertDoc which holds inert nodes.\n templateClone.content.appendChild(inertDoc.importNode(origContent, true));\n // optional arguments are not optional on IE.\n var nodeIterator = document.createNodeIterator(content, NodeFilter.SHOW_ELEMENT, null, true);\n var node;\n // Traverses the tree. A recently-replaced node will be put next,\n // so if a node is replaced, it will be checked if it needs to be\n // replaced again.\n while (node = nodeIterator.nextNode()) {\n var currentTagName = node.tagName.toLowerCase();\n if (replacements.hasOwnProperty(currentTagName)) {\n currentTagName = replacements[currentTagName];\n // find the final tag name.\n while (replacements[currentTagName]) {\n currentTagName = replacements[currentTagName];\n }\n // Create a replacement:\n var replacement = document.createElement(currentTagName);\n // For all attributes in the original node..\n for (var index = 0; index < node.attributes.length; ++index) {\n // Set that attribute on the replacement:\n replacement.setAttribute(node.attributes[index].name, node.attributes[index].value);\n }\n // Replace the original node with the replacement node:\n node.parentNode.replaceChild(replacement, node);\n }\n }\n return originalImportNode.call(this, content, deep);\n });\n if (!replaceTeardownAttached) {\n // After each test...\n teardown(function () {\n replaceTeardownAttached = true;\n // Restore the stubbed version of `document.importNode`:\n var documentImportNode = document.importNode;\n if (documentImportNode.isSinonProxy) {\n documentImportNode.restore();\n }\n // Empty the replacement map\n replacements = {};\n });\n }\n }\n };\n };\n});\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\nimport './mocha/fixture.js';\nimport './mocha/stub.js';\nimport './mocha/replace.js';\nimport * as config from './config.js';\nimport { applyExtensions } from './mocha/extend.js';\n// Mocha global helpers, broken out by testing method.\n//\n// Keys are the method for a particular interface; values are their analog in\n// the opposite interface.\nvar MOCHA_EXPORTS = {\n // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/tdd.js\n tdd: {\n 'setup': '\"before\"',\n 'teardown': '\"after\"',\n 'suiteSetup': '\"beforeEach\"',\n 'suiteTeardown': '\"afterEach\"',\n 'suite': '\"describe\" or \"context\"',\n 'test': '\"it\" or \"specify\"',\n },\n // https://github.com/visionmedia/mocha/blob/master/lib/interfaces/bdd.js\n bdd: {\n 'before': '\"setup\"',\n 'after': '\"teardown\"',\n 'beforeEach': '\"suiteSetup\"',\n 'afterEach': '\"suiteTeardown\"',\n 'describe': '\"suite\"',\n 'context': '\"suite\"',\n 'xdescribe': '\"suite.skip\"',\n 'xcontext': '\"suite.skip\"',\n 'it': '\"test\"',\n 'xit': '\"test.skip\"',\n 'specify': '\"test\"',\n 'xspecify': '\"test.skip\"',\n },\n};\n/**\n * Exposes all Mocha methods up front, configuring and running mocha\n * automatically when you call them.\n *\n * The assumption is that it is a one-off (sub-)suite of tests being run.\n */\nexport function stubInterfaces() {\n var keys = Object.keys(MOCHA_EXPORTS);\n keys.forEach(function (ui) {\n Object.keys(MOCHA_EXPORTS[ui]).forEach(function (key) {\n window[key] = function wrappedMochaFunction() {\n _setupMocha(ui, key, MOCHA_EXPORTS[ui][key]);\n if (!window[key] || window[key] === wrappedMochaFunction) {\n throw new Error('Expected mocha.setup to define ' + key);\n }\n window[key].apply(window, arguments);\n };\n });\n });\n}\n// Whether we've called `mocha.setup`\nvar _mochaIsSetup = false;\n/**\n * @param {string} ui Sets up mocha to run `ui`-style tests.\n * @param {string} key The method called that triggered this.\n * @param {string} alternate The matching method in the opposite interface.\n */\nfunction _setupMocha(ui, key, alternate) {\n var mochaOptions = config.get('mochaOptions');\n if (mochaOptions.ui && mochaOptions.ui !== ui) {\n var message = 'Mixing ' + mochaOptions.ui + ' and ' + ui +\n ' Mocha styles is not supported. ' +\n 'You called \"' + key + '\". Did you mean ' + alternate + '?';\n throw new Error(message);\n }\n if (_mochaIsSetup) {\n return;\n }\n applyExtensions();\n mochaOptions.ui = ui;\n mocha.setup(mochaOptions); // Note that the reporter is configured in run.js.\n}\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt The complete set of authors may be found\n * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may\n * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by\n * Google as part of the polymer project is also subject to an additional IP\n * rights grant found at http://polymer.github.io/PATENTS.txt\n */\n/**\n * This file is the entry point into `web-component-tester`'s browser client.\n */\n// Registers a bunch of globals:\nimport './environment/helpers.js';\nimport ChildRunner from './childrunner.js';\nimport CLISocket from './clisocket.js';\nimport * as config from './config.js';\nimport * as environment from './environment.js';\nimport * as errors from './environment/errors.js';\nimport * as mocha from './mocha.js';\nimport * as reporters from './reporters.js';\nimport MultiReporter from './reporters/multi.js';\nimport * as suites from './suites.js';\nimport * as util from './util.js';\n// You can configure WCT before it has loaded by assigning your custom\n// configuration to the global `WCT`.\nconfig.setup(window.WCT);\n// Maybe some day we'll expose WCT as a module to whatever module registry you\n// are using (aka the UMD approach), or as an es6 module.\nvar WCT = window.WCT = {\n // A generic place to hang data about the current suite. This object is\n // reported\n // back via the `sub-suite-start` and `sub-suite-end` events.\n share: {},\n // Until then, we get to rely on it to expose parent runners to their\n // children.\n _ChildRunner: ChildRunner,\n _reporter: undefined,\n _config: config._config,\n // Public API\n /**\n * Loads suites of tests, supporting both `.js` and `.html` files.\n *\n * @param {!Array.<string>} files The files to load.\n */\n loadSuites: suites.loadSuites,\n};\n// Load Process\nerrors.listenForErrors();\nmocha.stubInterfaces();\nenvironment.loadSync();\n// Give any scripts on the page a chance to declare tests and muck with things.\ndocument.addEventListener('DOMContentLoaded', function () {\n util.debug('DOMContentLoaded');\n environment.ensureDependenciesPresent();\n // We need the socket built prior to building its reporter.\n CLISocket.init(function (error, socket) {\n if (error)\n throw error;\n // Are we a child of another run?\n var current = ChildRunner.current();\n var parent = current && current.parentScope.WCT._reporter;\n util.debug('parentReporter:', parent);\n var childSuites = suites.activeChildSuites();\n var reportersToUse = reporters.determineReporters(socket, parent);\n // +1 for any local tests.\n var reporter = new MultiReporter(childSuites.length + 1, reportersToUse, parent);\n WCT._reporter = reporter; // For environment/compatibility.js\n // We need the reporter so that we can report errors during load.\n suites.loadJsSuites(reporter, function (error) {\n // Let our parent know that we're about to start the tests.\n if (current)\n current.ready(error);\n if (error)\n throw error;\n // Emit any errors we've encountered up til now\n errors.globalErrors.forEach(function onError(error) {\n reporter.emitOutOfBandTest('Test Suite Initialization', error);\n });\n suites.runSuites(reporter, childSuites, function (error) {\n // Make sure to let our parent know that we're done.\n if (current)\n current.done();\n if (error)\n throw error;\n });\n });\n });\n});\n"],"names":["util.basePath","util.scriptPrefix","config.get","util.debug","util.paramsToQuery","util.getParams","util.mergeParams","util.parseUrl","util.loadScript","util.getParam","console","util.pluralizedStat","util.cleanLocation","util.relativeLocation","htmlSuites","jsSuites","util.parallel","util.whenFrameworksReady","HTMLReporter","suites.jsSuites","suites.htmlSuites","ConsoleReporter","TitleReporter","util.expandUrl","util.loadStyle","reporters.injectMocha","config.setup","suites.loadSuites","config._config","errors.listenForErrors","mocha.stubInterfaces","environment.loadSync","suites.runSuites","errors.globalErrors","suites.loadJsSuites","reporters.determineReporters","suites.activeChildSuites","environment.ensureDependenciesPresent"],"mappings":"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"} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite-npm-header.txt b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite-npm-header.txt
new file mode 100644
index 00000000000..8c8e7b1581d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite-npm-header.txt
@@ -0,0 +1,5 @@
+import * as polymerDom from '../@polymer/polymer/lib/legacy/polymer.dom.js';
+const Polymer = { dom: polymerDom };
+export {a11ySuiteExport as a11ySuite};
+
+// wct-browser-legacy/a11ySuite.js is a generated file. Source is in web-component-tester/data/a11ySuite.js
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite.js
new file mode 100644
index 00000000000..e4da16b787f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/a11ySuite.js
@@ -0,0 +1,130 @@
+/**
+ * @license
+ * Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+var a11ySuiteExport;
+
+(function(Mocha, chai, axs) {
+
+ Object.keys(Mocha.interfaces).forEach(function(iface) {
+ var orig = Mocha.interfaces[iface];
+
+ Mocha.interfaces[iface] = function(suite) {
+ orig.apply(this, arguments);
+
+ var Suite = Mocha.Suite;
+ var Test = Mocha.Test;
+
+ suite.on('pre-require', function(context, file, mocha) {
+
+ /**
+ * Runs the Chrome Accessibility Developer Tools Audit against a test-fixture
+ *
+ * @param {String} fixtureId ID of the fixture element in the document to use
+ * @param {Array?} ignoredRules Array of rules to ignore for this suite
+ * @param {Function?} beforeEach Function to be called before each test to ensure proper setup
+ */
+ a11ySuiteExport = context.a11ySuite = function(fixtureId, ignoredRules, beforeEach) {
+ // capture a reference to the fixture element early
+ var fixtureElement = document.getElementById(fixtureId);
+ if (!fixtureElement) {
+ return;
+ }
+
+ // build an audit config to disable certain ignorable tests
+ var axsConfig = new axs.AuditConfiguration();
+ axsConfig.scope = document.body;
+ axsConfig.showUnsupportedRulesWarning = false;
+ axsConfig.auditRulesToIgnore = ignoredRules;
+
+ // build mocha suite
+ var a11ySuite = Suite.create(suite, 'A11y Audit - Fixture: ' + fixtureId);
+
+ // override the `eachTest` function to hackily create the tests
+ //
+ // eachTest is called right before test runs to calculate the total
+ // number of tests
+ a11ySuite.eachTest = function() {
+ // instantiate fixture
+ fixtureElement.create();
+
+ // Make sure lazy-loaded dom is ready (eg <template is='dom-repeat'>)
+ Polymer.dom.flush();
+
+ // If we have a beforeEach function, call it
+ if (beforeEach) {
+ beforeEach();
+ }
+
+ // run audit
+ var auditResults = axs.Audit.run(axsConfig);
+
+ // create tests for audit results
+ auditResults.forEach(function(result, index) {
+ // only show applicable tests
+ if (result.result !== 'NA') {
+ var title = result.rule.heading;
+ // fail test if audit result is FAIL
+ var error = result.result === 'FAIL' ? axs.Audit.accessibilityErrorMessage(result) : null;
+ var test = new Test(title, function() {
+ if (error) {
+ throw new Error(error);
+ }
+ });
+ test.file = file;
+ a11ySuite.addTest(test);
+ }
+ });
+
+ // teardown fixture
+ fixtureElement.restore();
+
+ suite.eachTest.apply(a11ySuite, arguments);
+ this.eachTest = suite.eachTest;
+ };
+
+ return a11ySuite;
+ };
+ });
+ };
+ });
+
+ chai.use(function(chai, util) {
+ var Assertion = chai.Assertion;
+
+ // assert
+ chai.assert.a11yLabel = function(node, exp, msg){
+ new Assertion(node).to.have.a11yLabel(exp, msg);
+ };
+
+ // expect / should
+ Assertion.addMethod('a11yLabel', function(str, msg) {
+ if (msg) {
+ util.flag(this, 'message', msg);
+ }
+
+ var node = this._obj;
+
+ // obj must be a Node
+ new Assertion(node).to.be.instanceOf(Node);
+
+ // vind the text alternative with the help of accessibility dev tools
+ var textAlternative = axs.properties.findTextAlternatives(node, {});
+
+ this.assert(
+ textAlternative === str,
+ 'expected #{this} to have text alternative #{exp} but got #{act}',
+ 'expected #{this} to not have text alternative #{act}',
+ str,
+ textAlternative,
+ true
+ );
+ });
+ });
+})(window.Mocha, window.chai, window.axs);
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/index.html b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/index.html
new file mode 100644
index 00000000000..ebc361e2b8d
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/data/index.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html>
+
+<head>
+ <meta charset="utf-8">
+ <script>
+ WCT = <%= JSON.stringify(clientOptions) %>;
+ </script>
+ <script>
+ window.__generatedByWct = true;
+ </script>
+ <script src="../<%= browserScript %>"></script>
+ <% extraScripts.forEach(function(script) { %>
+ <script src="<%- script %>"></script>
+ <% }); %>
+ <% if (typeof npm === 'undefined' || !npm) { %>
+ <script src="../<%= a11ySuiteScript %>"></script>
+ <% } %>
+</head>
+
+<body>
+ <script>
+ WCT.loadSuites(<%= JSON.stringify(suites) %>);
+ </script>
+</body>
+
+</html>
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/package.json
new file mode 100644
index 00000000000..4f1ac8d1eb8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/web-component-tester/package.json
@@ -0,0 +1,131 @@
+{
+ "name": "web-component-tester",
+ "version": "6.5.0",
+ "--private-wct--": {
+ "client-side-version-range": "4 - 6 || ^6.0.0-prerelease.1",
+ "wct-browser-legacy-version-range": "0.0.1-pre.1 || ^1.0.0"
+ },
+ "description": "web-component-tester makes testing your web components a breeze!",
+ "keywords": [
+ "browser",
+ "grunt",
+ "gruntplugin",
+ "gulp",
+ "polymer",
+ "test",
+ "testing",
+ "web component",
+ "web"
+ ],
+ "homepage": "https://github.com/Polymer/web-component-tester",
+ "bugs": "https://github.com/Polymer/web-component-tester/issues",
+ "license": "BSD-3-Clause",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Polymer/web-component-tester.git"
+ },
+ "main": "runner.js",
+ "bin": {
+ "wct": "./bin/wct",
+ "wct-st": "./bin/wct-st"
+ },
+ "files": [
+ "bin/",
+ "data/",
+ "runner/",
+ "scripts/",
+ "tasks/",
+ ".bowerrc",
+ "bower.json",
+ "browser.js",
+ "browser.js.map",
+ "package.json",
+ "LICENSE",
+ "README.md",
+ "runner.js"
+ ],
+ "scripts": {
+ "lint": "gulp lint",
+ "build": "tsc && gulp build",
+ "test": "tsc && gulp test",
+ "prepublishOnly": "gulp prepublish",
+ "test:watch": "watch 'gulp test:unit' runner/ browser/ bin/ test/ tasks/",
+ "format": "find runner test | grep '\\.js$\\|\\.ts$' | xargs ./node_modules/.bin/clang-format --style=file -i"
+ },
+ "dependencies": {
+ "@polymer/sinonjs": "^1.14.1",
+ "@polymer/test-fixture": "^0.0.3",
+ "@webcomponents/webcomponentsjs": "^1.0.7",
+ "accessibility-developer-tools": "^2.12.0",
+ "async": "^2.4.1",
+ "body-parser": "^1.17.2",
+ "chai": "^4.0.2",
+ "chalk": "^1.1.3",
+ "cleankill": "^2.0.0",
+ "express": "^4.15.3",
+ "findup-sync": "^1.0.0",
+ "glob": "^7.1.2",
+ "lodash": "^3.10.1",
+ "mocha": "^3.4.2",
+ "multer": "^1.3.0",
+ "nomnom": "^1.8.1",
+ "polyserve": "^0.23.0",
+ "promisify-node": "^0.4.0",
+ "resolve": "^1.3.3",
+ "semver": "^5.3.0",
+ "send": "^0.11.1",
+ "server-destroy": "^1.0.1",
+ "sinon": "^2.3.5",
+ "sinon-chai": "^2.10.0",
+ "socket.io": "^2.0.3",
+ "stacky": "^1.3.1",
+ "wd": "^1.2.0"
+ },
+ "optionalDependencies": {
+ "update-notifier": "^2.2.0",
+ "wct-local": "^2.1.0",
+ "wct-sauce": "^2.0.0"
+ },
+ "devDependencies": {
+ "@types/body-parser": "0.0.33",
+ "@types/chai": "^3.4.34",
+ "@types/chalk": "^0.4.31",
+ "@types/express": "^4.0.33",
+ "@types/express-serve-static-core": "^4.0.39",
+ "@types/glob": "^5.0.30",
+ "@types/grunt": "^0.4.20",
+ "@types/gulp": "^3.8.8",
+ "@types/lodash": "^4.14.38",
+ "@types/mime": "0.0.29",
+ "@types/minimatch": "^2.0.29",
+ "@types/mocha": "^2.2.32",
+ "@types/multer": "0.0.32",
+ "@types/node": "^8.0.0",
+ "@types/nomnom": "0.0.28",
+ "@types/rimraf": "0.0.28",
+ "@types/semver": "^5.3.30",
+ "@types/sinon": "^1.16.31",
+ "@types/sinon-chai": "^2.7.27",
+ "@types/socket.io": "^1.4.27",
+ "bower": "^1.7.9",
+ "clang-format": "^1.0.43",
+ "depcheck": "^0.6.3",
+ "grunt": "^0.4.5",
+ "gulp": "^3.8.8",
+ "gulp-bower": "0.0.13",
+ "gulp-concat": "^2.6.1",
+ "gulp-spawn-mocha": "^3.1.0",
+ "gulp-tslint": "^8.1.2",
+ "gulp-typescript": "^3.1.2",
+ "lazypipe": "^1.0.1",
+ "rimraf": "^2.5.4",
+ "rollup": "^0.25.1",
+ "run-sequence": "^1.0.1",
+ "tslint": "^5.7.0",
+ "typescript": "^2.1.4",
+ "watch": "^0.18.0"
+ },
+ "engines": {
+ "node": ">= 6.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.bower.json
new file mode 100644
index 00000000000..162339f7e45
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.bower.json
@@ -0,0 +1,34 @@
+{
+ "name": "webcomponentsjs",
+ "description": "Web components polyfill",
+ "main": "webcomponents.js",
+ "homepage": "http://webcomponents.org",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/webcomponents/webcomponentsjs.git"
+ },
+ "keywords": [
+ "webcomponents",
+ "web-components",
+ "polyfill",
+ "shim"
+ ],
+ "license": "BSD-3-Clause",
+ "ignore": [],
+ "devDependencies": {
+ "web-component-tester": "^v6.0.0"
+ },
+ "version": "1.2.0",
+ "_release": "1.2.0",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.2.0",
+ "commit": "e6728c15201987b0f71aec6464b743d4277d99ae"
+ },
+ "_source": "https://github.com/webcomponents/webcomponentsjs.git",
+ "_target": "^v1.1.0",
+ "_originalSource": "webcomponents/webcomponentsjs"
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.eslintrc.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.eslintrc.json
new file mode 100644
index 00000000000..fcf4db69f4f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.eslintrc.json
@@ -0,0 +1,11 @@
+{
+ "extends": "eslint:recommended",
+ "env": {
+ "browser": true,
+ "es6": true
+ },
+ "parserOptions": {
+ "ecmaVersion": 6,
+ "sourceType": "module"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.github/CODEOWNERS b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.github/CODEOWNERS
new file mode 100644
index 00000000000..93bd76fe93e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @azakus
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.travis.yml b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.travis.yml
new file mode 100644
index 00000000000..a72b5cff873
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/.travis.yml
@@ -0,0 +1,25 @@
+language: node_js
+sudo: required
+dist: trusty
+node_js: stable
+addons:
+ firefox: latest
+ apt:
+ sources:
+ - google-chrome
+ packages:
+ - google-chrome-stable
+before_script:
+- export DISPLAY=:99.0
+- sh -e /etc/init.d/xvfb start
+- sleep 3
+script:
+- npm install -g bower
+- bower install
+- wct -l chrome
+- wct -l firefox
+- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'windows 10/microsoftedge@14' -s 'windows 8.1/internet explorer@11' -s 'os x 10.11/safari@10' -s 'os x 10.11/safari@9' -s 'Linux/chrome@41'; fi
+env:
+ global:
+ - secure: Fpp9LwJSGOdTrSIImQTlbzxozBsqe/2AJN5OfTXSe12FZxqzz50gevdxQcIlLypKaNyCtjb980DJbwdJR2cXUqaunLZAPWxrKa7ZPwamUxW+zVL7EHqy5zuvD+yJ+Vmk3ahs3WBTVyJ8T3XoaSfo9VumDIcKggWGJwgvM3blIMg=
+ - secure: Bj8MgzUVP0X8MLgK3d9eF48V7x0rPJyrN1IyguzKyJJVC8LV2XZXF+6o/M+zNsVMSsjhgXMkS3RRuaUShxO/OS6gHeG31FWcZqbXfZfgMMyH8a8zDls+r8m2lGEICaZo1OTXR0uiR/VNVt7n2xoBnTmjmRFwkaxAZk4yCjbXYzQ=
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/CONTRIBUTING.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/CONTRIBUTING.md
new file mode 100644
index 00000000000..29a78331707
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/CONTRIBUTING.md
@@ -0,0 +1,66 @@
+# Contributing
+
+Want to contribute to webcomponents.js? Great!
+
+We are more than happy to accept external contributions to the project in the form of [bug reports](../../issues) and pull requests.
+
+For any bug report, please use [this jsbin](http://jsbin.com/birajez/edit?html,console,output) to provide a concrete reproduction case that we can debug.
+
+## Contributor License Agreement
+
+Before we can accept patches, there's a quick web form you need to fill out.
+
+- If you're contributing as an individual (e.g. you own the intellectual property), fill out [this form](http://code.google.com/legal/individual-cla-v1.0.html).
+- If you're contributing under a company, fill out [this form](http://code.google.com/legal/corporate-cla-v1.0.html) instead.
+
+This CLA asserts that contributions are owned by you and that we can license all work under our [license](LICENSE).
+
+Other projects require a similar agreement: jQuery, Firefox, Apache, Node, and many more.
+
+[More about CLAs](https://www.google.com/search?q=Contributor%20License%20Agreement)
+
+## Initial setup
+
+1. Setup Gulp: `sudo npm install -g gulp`
+1. Fork the project on github and pull down your copy.
+ > replace the {{ username }} with your username and {{ repository }} with the repository name
+
+ git clone git@github.com:{{ username }}/{{ repository }}.git
+
+1. Test your change results in a working build.
+ > in the repo you've made changes to, try generating a build:
+
+ cd $REPO
+ npm install
+ gulp
+
+The builds will be placed into the `dist/` directory if all goes well.
+
+1. Commit your code and make a pull request.
+
+That's it for the one time setup. Now you're ready to make a change.
+
+## Submitting a pull request
+
+We iterate fast! To avoid potential merge conflicts, it's a good idea to pull from the main project before making a change and submitting a pull request. The easiest way to do this is setup a remote called `upstream` and do a pull before working on a change:
+
+ git remote add upstream git://github.com/polymer/webcomponentsjs.git
+
+Then before making a change, do a pull from the upstream `master` branch:
+
+ git pull upstream master
+
+To make life easier, add a "pull upstream" alias in your `.gitconfig`:
+
+ [alias]
+ pu = !"git fetch origin -v; git fetch upstream -v; git merge upstream/master"
+
+That will pull in changes from your forked repo, the main (upstream) repo, and merge the two. Then it's just a matter of running `git pu` before a change and pushing to your repo:
+
+ git checkout master
+ git pu
+ # make change
+ git commit -a -m 'Awesome things.'
+ git push
+
+Lastly, don't forget to submit the pull request.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/LICENSE.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/LICENSE.md
new file mode 100644
index 00000000000..bb3f440330f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/LICENSE.md
@@ -0,0 +1,19 @@
+# License
+
+Everything in this repo is BSD style license unless otherwise specified.
+
+Copyright (c) 2015 The Polymer Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+* Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/README.md b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/README.md
new file mode 100644
index 00000000000..dc1b41cb513
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/README.md
@@ -0,0 +1,169 @@
+webcomponents.js (v1 spec polyfills)
+================
+
+[![Build Status](https://travis-ci.org/webcomponents/webcomponentsjs.svg?branch=master)](https://travis-ci.org/webcomponents/webcomponentsjs)
+
+> **Note**. For polyfills that work with the older Custom Elements and Shadow DOM v0 specs, see the [v0 branch](https://github.com/webcomponents/webcomponentsjs/tree/v0).
+
+A suite of polyfills supporting the [Web Components](http://webcomponents.org) specs:
+
+- **Custom Elements v1**: allows authors to define their own custom tags ([spec](https://w3c.github.io/webcomponents/spec/custom/), [tutorial](https://developers.google.com/web/fundamentals/getting-started/primers/customelements)).
+- **HTML Imports**: a way to include and reuse HTML documents via other HTML documents ([spec](https://w3c.github.io/webcomponents/spec/imports/), [tutorial](https://www.html5rocks.com/en/tutorials/webcomponents/imports/)).
+- **Shadow DOM v1**: provides encapsulation by hiding DOM subtrees under shadow roots ([spec](https://w3c.github.io/webcomponents/spec/shadow/), [tutorial](https://developers.google.com/web/fundamentals/getting-started/primers/shadowdom)).
+
+For browsers that need it, there are also some minor polyfills included:
+- [`HTMLTemplateElement`](https://github.com/webcomponents/template)
+- [`Promise`](https://github.com/stefanpenner/es6-promise)
+- `Event`, `CustomEvent`, `MouseEvent` constructors and `Object.assign`, `Array.from` (see [webcomponents-platform](https://github.com/webcomponents/webcomponents-platform))
+
+## How to use
+
+The polyfills are built (concatenated & minified) into several bundles that target
+different browsers and spec readiness:
+
+- `webcomponents-hi.js` -- HTML Imports (needed by Safari Tech Preview)
+- `webcomponents-hi-ce.js` -- HTML Imports and Custom Elements v1 (needed by Safari 10)
+- `webcomponents-hi-sd-ce.js` -- HTML Imports, Custom Elements v1 and Shady DOM/CSS (needed by Safari 9, Firefox, Edge)
+- `webcomponents-sd-ce.js` -- Custom Elements and Shady DOM/CSS (no HTML Imports)
+- `webcomponents-lite.js` -- all of the polyfills: HTML Imports, Custom Elements, Shady DOM/CSS and generic platform polyfills (such as ES6 Promise, Constructable events, etc.) (needed by Internet Explorer 11), and Template (needed by IE 11 and Edge)
+
+If you are only targeting a specific browser, you can just use the bundle that's
+needed by it; alternatively, if your server is capable of serving different assets based on user agent, you can send the polyfill bundle that's necessary for the browser making that request.
+
+## `webcomponents-loader.js`
+Alternatively, this repo also comes with `webcomponents-loader.js`, a client-side
+loader that dynamically loads the minimum polyfill bundle, using feature detection.
+Note that because the bundle will be loaded asynchronously, you should wait for the `WebComponentsReady` before you can safely assume that all the polyfills have
+loaded and are ready to be used (i.e. if you want to dynamically load other custom
+elements, etc.).
+
+Additionally, you can check if `window.WebComponents` exists to know if the `WebComponentsReady` event will fire, and you can check if `window.WebComponents.ready` is true to check if the `WebComponentsReady` event has already fired.
+
+Here's an example:
+
+```html
+<!-- Load polyfills; note that "loader" will load these async -->
+<script src="bower_components/webcomponentsjs/webcomponents-loader.js"></script>
+
+<!-- Load a custom element definition via HTMLImports -->
+<link rel="import" href="my-element.html">
+
+<!-- Use the custom element -->
+<my-element></my-element>
+
+<!-- Interact with the upgraded element -->
+<script>
+ window.addEventListener('WebComponentsReady', function() {
+ // At this point we are guaranteed that all required polyfills have loaded,
+ // all HTML imports have loaded, and all defined custom elements have upgraded
+ let MyElement = customElements.get('my-element');
+ let element = document.querySelector('my-element');
+ console.assert(element instanceof MyElement); // 👍
+ element.someAPI(); // 👍
+ });
+</script>
+```
+
+## `custom-elements-es5-adapter.js`
+According to the spec, Custom Elements must be ES6 classes (https://html.spec.whatwg.org/multipage/scripting.html#custom-element-conformance). Since most projects need to support a wide range of browsers that don't necessary support ES6, it may make sense to compile your project to ES5. However, ES5-style custom element classes will **not** work with native Custom Elements because ES5-style classes cannot properly extend ES6 classes, like `HTMLElement`.
+
+To work around this, load `custom-elements-es5-adapter.js` before declaring new Custom Elements.
+
+**The adapter must NOT be compiled.**
+
+```html
+<!-- Load Custom Elements es5 adapter -->
+<script src="bower_components/webcomponentsjs/custom-elements-es5-adapter.js"></script>
+<!-- Load polyfills; note that "loader" will load these async -->
+<script src="bower_components/webcomponentsjs/webcomponents-loader.js"></script>
+<!-- Load the es5 compiled custom element definition -->
+<link rel="import" href="my-es5-element.html">
+
+<!-- Use the custom element -->
+<my-es5-element></my-es5-element>
+```
+
+## Browser Support
+
+The polyfills are intended to work in the latest versions of evergreen browsers. See below
+for our complete browser support matrix:
+
+| Polyfill | IE11+ | Chrome* | Firefox* | Safari 9+* | Chrome Android* | Mobile Safari* |
+| ---------- |:-----:|:-------:|:--------:|:----------:|:---------------:|:--------------:|
+| Custom Elements | ✓ | ✓ | ✓ | ✓ | ✓| ✓ |
+| HTML Imports | ✓ | ✓ | ✓ | ✓| ✓| ✓ |
+| Shady CSS/DOM | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
+
+\*Indicates the current version of the browser
+
+The polyfills may work in older browsers, however require additional polyfills (such as classList, or other [platform](https://github.com/webcomponents/webcomponents-platform)
+polyfills) to be used. We cannot guarantee support for browsers outside of our compatibility matrix.
+
+
+### Manually Building
+
+If you wish to build the bundles yourself, you'll need `node` and `npm` on your system:
+
+ * install [node.js](http://nodejs.org/) using the instructions on their website
+ * use `npm` to install [gulp.js](http://gulpjs.com/): `npm install -g gulp`
+
+Now you are ready to build the polyfills with:
+
+ # install dependencies
+ npm install
+ bower install
+ # build
+ gulp
+
+The builds will be placed into the root directory.
+
+## Contribute
+
+See the [contributing guide](CONTRIBUTING.md)
+
+## License
+
+Everything in this repository is BSD style license unless otherwise specified.
+
+Copyright (c) 2015 The Polymer Authors. All rights reserved.
+
+## Helper utilities
+
+### `WebComponentsReady`
+
+Under native HTML Imports, `<script>` tags in the main document block the loading of such imports. This is to ensure the imports have loaded and any registered elements in them have been upgraded.
+
+The `webcomponents-lite.js` polyfill (as well as the smaller bundles and the loader) parse element definitions and handle their upgrade asynchronously. If prematurely fetching the element from the DOM before it has an opportunity to upgrade, you'll be working with an `HTMLUnknownElement`.
+
+For these situations, you can use the `WebComponentsReady` event as a signal before interacting with the element. The criteria for this event to fire is all Custom Elements with definitions registered by the time HTML Imports available at load time have loaded have upgraded.
+
+```js
+window.addEventListener('WebComponentsReady', function(e) {
+ // imports are loaded and elements have been registered
+ console.log('Components are ready');
+});
+```
+
+## Known Issues
+
+ * [ShadowDOM CSS is not encapsulated out of the box](#shadycss)
+ * [Custom element's constructor property is unreliable](#constructor)
+ * [Contenteditable elements do not trigger MutationObserver](#contentedit)
+ * [ShadyCSS: :host(.zot:not(.bar:nth-child(2))) doesn't work](#nestedparens)
+
+### ShadowDOM CSS is not encapsulated out of the box <a id="shadycss"></a>
+The ShadowDOM polyfill is not able to encapsulate CSS in ShadowDOM out of the box. You need to use specific code from the ShadyCSS library, included with the polyfill. See [ShadyCSS instructions](https://github.com/webcomponents/shadycss).
+
+### Custom element's constructor property is unreliable <a id="constructor"></a>
+See [#215](https://github.com/webcomponents/webcomponentsjs/issues/215) for background.
+
+In Safari and IE, instances of Custom Elements have a `constructor` property of `HTMLUnknownElementConstructor` and `HTMLUnknownElement`, respectively. It's unsafe to rely on this property for checking element types.
+
+It's worth noting that `customElement.__proto__.__proto__.constructor` is `HTMLElementPrototype` and that the prototype chain isn't modified by the polyfills(onto `ElementPrototype`, etc.)
+
+### Contenteditable elements do not trigger MutationObserver <a id="contentedit"></a>
+Using the MutationObserver polyfill, it isn't possible to monitor mutations of an element marked `contenteditable`.
+See [the mailing list](https://groups.google.com/forum/#!msg/polymer-dev/LHdtRVXXVsA/v1sGoiTYWUkJ)
+
+### ShadyCSS: :host(.zot:not(.bar:nth-child(2))) doesn't work <a id="nestedparens"></a>
+ShadyCSS `:host()` rules can only have (at most) 1-level of nested parentheses in its argument selector under ShadyCSS. For example, `:host(.zot)` and `:host(.zot:not(.bar))` both work, but `:host(.zot:not(.bar:nth-child(2)))` does not.
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/bower.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/bower.json
new file mode 100644
index 00000000000..4f5d918b183
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/bower.json
@@ -0,0 +1,24 @@
+{
+ "name": "webcomponentsjs",
+ "description": "Web components polyfill",
+ "main": "webcomponents.js",
+ "homepage": "http://webcomponents.org",
+ "authors": [
+ "The Polymer Authors"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/webcomponents/webcomponentsjs.git"
+ },
+ "keywords": [
+ "webcomponents",
+ "web-components",
+ "polyfill",
+ "shim"
+ ],
+ "license": "BSD-3-Clause",
+ "ignore": [],
+ "devDependencies": {
+ "web-component-tester": "^v6.0.0"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/closure-output.txt b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/closure-output.txt
new file mode 100644
index 00000000000..e7db2a2133f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/closure-output.txt
@@ -0,0 +1,10 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){%output%}).call(this); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/custom-elements-es5-adapter.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/custom-elements-es5-adapter.js
new file mode 100644
index 00000000000..4bcb525b475
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/custom-elements-es5-adapter.js
@@ -0,0 +1,16 @@
+(function () {
+'use strict';
+
+(()=>{'use strict';if(!window.customElements)return;const a=window.HTMLElement,b=window.customElements.define,c=window.customElements.get,d=new Map,e=new Map;let f=!1,g=!1;window.HTMLElement=function(){if(!f){const a=d.get(this.constructor),b=c.call(window.customElements,a);g=!0;const e=new b;return e}f=!1;},window.HTMLElement.prototype=a.prototype;Object.defineProperty(window,'customElements',{value:window.customElements,configurable:!0,writable:!0}),Object.defineProperty(window.customElements,'define',{value:(c,h)=>{const i=h.prototype,j=class extends a{constructor(){super(),Object.setPrototypeOf(this,i),g||(f=!0,h.call(this)),g=!1;}},k=j.prototype;j.observedAttributes=h.observedAttributes,k.connectedCallback=i.connectedCallback,k.disconnectedCallback=i.disconnectedCallback,k.attributeChangedCallback=i.attributeChangedCallback,k.adoptedCallback=i.adoptedCallback,d.set(h,c),e.set(c,h),b.call(window.customElements,c,j);},configurable:!0,writable:!0}),Object.defineProperty(window.customElements,'get',{value:(a)=>e.get(a),configurable:!0,writable:!0});})();
+
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+
+}());
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/custom-elements-es5-adapter-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/custom-elements-es5-adapter-index.js
new file mode 100644
index 00000000000..7000b62ce97
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/custom-elements-es5-adapter-index.js
@@ -0,0 +1,16 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: Custom Elements ES5 Shim
+ */
+
+import '../node_modules/@webcomponents/custom-elements/src/native-shim.js';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-ce-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-ce-index.js
new file mode 100644
index 00000000000..4f6ab4da8f6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-ce-index.js
@@ -0,0 +1,21 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: HTML Imports, Custom Elements
+ * Used in: Safari 10, Firefox once SD is shipped
+ */
+
+import '../node_modules/@webcomponents/html-imports/src/html-imports.js';
+import '../node_modules/@webcomponents/custom-elements/src/custom-elements.js';
+
+import '../src/post-polyfill.js';
+import '../src/unresolved.js';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-index.js
new file mode 100644
index 00000000000..e55027f7456
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-index.js
@@ -0,0 +1,20 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: HTML Imports
+ * Used in: Safari Tech Preview
+ */
+
+import '../node_modules/@webcomponents/html-imports/src/html-imports.js';
+
+import '../src/post-polyfill.js';
+import '../src/unresolved.js'; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-index.js
new file mode 100644
index 00000000000..3dbc4dac273
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-index.js
@@ -0,0 +1,22 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: HTML Imports, Custom Elements, Shady DOM/Shady CSS
+ * Used in: Safari 9, Firefox, Edge
+ */
+
+import '../node_modules/@webcomponents/html-imports/src/html-imports.js';
+import '../node_modules/@webcomponents/shadydom/src/shadydom.js';
+import '../node_modules/@webcomponents/custom-elements/src/custom-elements.js';
+import '../node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js';
+import '../src/post-polyfill.js';
+import '../src/unresolved.js';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-pf-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-pf-index.js
new file mode 100644
index 00000000000..4e32ab2f368
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-ce-pf-index.js
@@ -0,0 +1,26 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: HTML Imports, Custom Elements, Shady DOM/Shady CSS, platform polyfills, template
+ * Used in: IE 11
+ */
+
+import '../node_modules/@webcomponents/webcomponents-platform/webcomponents-platform.js';
+import '../node_modules/@webcomponents/template/template.js';
+import '../src/promise.js';
+import '../node_modules/@webcomponents/html-imports/src/html-imports.js';
+import '../src/pre-polyfill.js';
+import '../node_modules/@webcomponents/shadydom/src/shadydom.js';
+import '../node_modules/@webcomponents/custom-elements/src/custom-elements.js';
+import '../node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js';
+import '../src/post-polyfill.js';
+import '../src/unresolved.js'; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-index.js
new file mode 100644
index 00000000000..ca217ce74d8
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-hi-sd-index.js
@@ -0,0 +1,21 @@
+/**
+@license
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: HTML Imports, Shady DOM/Shady CSS
+ * Used in: Firefox with CustomElements enabled
+ */
+
+import '../node_modules/@webcomponents/html-imports/src/html-imports.js';
+import '../node_modules/@webcomponents/shadydom/src/shadydom.js';
+import '../node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js';
+import '../src/post-polyfill.js';
+import '../src/unresolved.js';
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-sd-ce-index.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-sd-ce-index.js
new file mode 100644
index 00000000000..1ff8e2c4939
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/entrypoints/webcomponents-sd-ce-index.js
@@ -0,0 +1,42 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+
+/*
+ * Polyfills loaded: Custom Elements, Shady DOM/Shady CSS
+ * Used in: Safari 9, Firefox, Edge
+ */
+
+import '../node_modules/@webcomponents/shadydom/src/shadydom.js';
+import '../node_modules/@webcomponents/custom-elements/src/custom-elements.js';
+import '../node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js';
+
+let document = window.document;
+// global for (1) existence means `WebComponentsReady` will file,
+// (2) WebComponents.ready == true means event has fired.
+window.WebComponents = window.WebComponents || {};
+
+function fire() {
+ requestAnimationFrame(() => {
+ window.WebComponents.ready = true;
+ window.document.dispatchEvent(new CustomEvent('WebComponentsReady', { bubbles: true }));
+ })
+}
+
+function wait() {
+ fire();
+ document.removeEventListener('readystatechange', wait);
+}
+
+if (document.readyState !== 'loading') {
+ fire();
+} else {
+ document.addEventListener('readystatechange', wait);
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/externs/webcomponents.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/externs/webcomponents.js
new file mode 100644
index 00000000000..43f7794b98e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/externs/webcomponents.js
@@ -0,0 +1,25 @@
+/**
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ *
+ * @fileoverview Symbols needed to compile webcomponents
+ * @externs
+ */
+var require;
+var global;
+var ES6Promise;
+var process;
+var define;
+var module;
+var exports;
+
+var ShadyDOM;
+var WebComponents;
+
+/** @type !Function */
+Promise.cast; \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/gulpfile.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/gulpfile.js
new file mode 100644
index 00000000000..d7049066c96
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/gulpfile.js
@@ -0,0 +1,187 @@
+/**
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+'use strict';
+
+/* eslint-env node */
+/* eslint-disable no-console */
+
+const gulp = require('gulp');
+const sourcemaps = require('gulp-sourcemaps');
+const rename = require('gulp-rename');
+const rollup = require('rollup-stream');
+const source = require('vinyl-source-stream');
+const del = require('del');
+const runseq = require('run-sequence');
+const closure = require('google-closure-compiler').gulp();
+const babel = require('rollup-plugin-babel');
+
+function debugify(sourceName, fileName, extraRollupOptions) {
+ if (!fileName)
+ fileName = sourceName;
+
+ const options = {
+ entry: `./entrypoints/${sourceName}-index.js`,
+ format: 'iife',
+ moduleName: 'webcomponentsjs'
+ };
+
+ Object.assign(options, extraRollupOptions);
+
+ return rollup(options)
+ .pipe(source(`${sourceName}-index.js`), 'entrypoints')
+ .pipe(rename(fileName + '.js'))
+ .pipe(gulp.dest('./'))
+}
+
+function closurify(sourceName, fileName) {
+ if (!fileName) {
+ fileName = sourceName;
+ }
+
+ const closureOptions = {
+ new_type_inf: true,
+ compilation_level: 'ADVANCED',
+ language_in: 'ES6_STRICT',
+ language_out: 'ES5_STRICT',
+ isolation_mode: 'NONE',
+ output_wrapper_file: 'closure-output.txt',
+ assume_function_wrapper: true,
+ js_output_file: `${fileName}.js`,
+ warning_level: 'VERBOSE',
+ rewrite_polyfills: false,
+ module_resolution: 'NODE',
+ entry_point: `entrypoints/${sourceName}-index.js`,
+ dependency_mode: 'STRICT',
+ externs: [
+ 'externs/webcomponents.js',
+ 'node_modules/@webcomponents/custom-elements/externs/custom-elements.js',
+ 'node_modules/@webcomponents/html-imports/externs/html-imports.js',
+ 'node_modules/@webcomponents/shadycss/externs/shadycss-externs.js',
+ 'node_modules/@webcomponents/shadydom/externs/shadydom.js'
+ ]
+ };
+
+ return gulp.src([
+ 'entrypoints/*.js',
+ 'src/*.js',
+ 'node_modules/es6-promise/lib/es6-promise/**/*.js',
+ 'node_modules/@webcomponents/**/*.js',
+ '!node_modules/@webcomponents/*/externs/*.js',
+ '!node_modules/@webcomponents/*/node_modules/**',
+ '!**/bower_components/**'
+ ], {base: './', follow: true})
+ .pipe(sourcemaps.init())
+ .pipe(closure(closureOptions))
+ .pipe(sourcemaps.write('.'))
+ .pipe(gulp.dest('.'));
+}
+
+gulp.task('debugify-hi', () => {
+ return debugify('webcomponents-hi')
+});
+
+gulp.task('debugify-hi-ce', () => {
+ return debugify('webcomponents-hi-ce')
+});
+
+gulp.task('debugify-hi-sd-ce', () => {
+ return debugify('webcomponents-hi-sd-ce')
+});
+
+gulp.task('debugify-hi-sd-ce-pf', () => {
+ // The es6-promise polyfill needs to set the correct context.
+ // See https://github.com/rollup/rollup/wiki/Troubleshooting#this-is-undefined
+ const extraOptions = {context: 'window'};
+ return debugify('webcomponents-hi-sd-ce-pf', 'webcomponents-lite', extraOptions)
+});
+
+gulp.task('debugify-sd-ce', () => {
+ return debugify('webcomponents-sd-ce')
+});
+
+gulp.task('debugify-hi-sd', () => {
+ return debugify('webcomponents-hi-sd')
+});
+
+gulp.task('closurify-hi', () => {
+ return closurify('webcomponents-hi')
+});
+
+gulp.task('closurify-hi-ce', () => {
+ return closurify('webcomponents-hi-ce')
+});
+
+gulp.task('closurify-hi-sd-ce', () => {
+ return closurify('webcomponents-hi-sd-ce')
+});
+
+gulp.task('closurify-hi-sd-ce-pf', () => {
+ return closurify('webcomponents-hi-sd-ce-pf', 'webcomponents-lite')
+});
+
+gulp.task('closurify-sd-ce', () => {
+ return closurify('webcomponents-sd-ce')
+});
+
+gulp.task('closurify-hi-sd', () => {
+ return closurify('webcomponents-hi-sd')
+})
+
+function singleLicenseComment() {
+ let hasLicense = false;
+ return (comment) => {
+ if (hasLicense) {
+ return false;
+ }
+ return hasLicense = /@license/.test(comment);
+ }
+}
+
+const babelOptions = {
+ presets: 'minify',
+ shouldPrintComment: singleLicenseComment()
+};
+
+gulp.task('debugify-ce-es5-adapter', () => {
+ return debugify('custom-elements-es5-adapter', '', {plugins: [babel(babelOptions)]});
+});
+
+gulp.task('default', ['closure']);
+
+gulp.task('clean-builds', () => {
+ return del(['custom-elements-es5-adapter.js{,.map}', 'webcomponents*.js{,.map}', '!webcomponents-loader.js']);
+});
+
+gulp.task('debug', (cb) => {
+ const tasks = [
+ 'debugify-hi',
+ 'debugify-hi-ce',
+ 'debugify-hi-sd',
+ 'debugify-hi-sd-ce',
+ 'debugify-hi-sd-ce-pf',
+ 'debugify-sd-ce',
+ 'debugify-ce-es5-adapter'
+ ];
+ runseq('clean-builds', tasks, cb);
+});
+
+gulp.task('closure', (cb) => {
+ const tasks = [
+ 'closurify-hi',
+ 'closurify-hi-ce',
+ 'closurify-hi-sd',
+ 'closurify-hi-sd-ce',
+ 'closurify-hi-sd-ce-pf',
+ 'closurify-sd-ce',
+ 'debugify-ce-es5-adapter'
+ ];
+ runseq('clean-builds', ...tasks, cb);
+}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package-lock.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package-lock.json
new file mode 100644
index 00000000000..9f7a77c5761
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package-lock.json
@@ -0,0 +1,9534 @@
+{
+ "name": "@webcomponents/webcomponentsjs",
+ "version": "1.2.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@gulp-sourcemaps/identity-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz",
+ "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=",
+ "dev": true,
+ "requires": {
+ "acorn": "5.3.0",
+ "css": "2.2.1",
+ "normalize-path": "2.1.1",
+ "source-map": "0.5.7",
+ "through2": "2.0.3"
+ }
+ },
+ "@gulp-sourcemaps/map-sources": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
+ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "2.1.1",
+ "through2": "2.0.3"
+ }
+ },
+ "@polymer/sinonjs": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/@polymer/sinonjs/-/sinonjs-1.17.1.tgz",
+ "integrity": "sha512-/U8F/cOTrbF2iVVYgINYmvKbtbexs+89Q3v8AaHADRYabTg7aOZGOb0RyWpOI+sUJt04kj63U4FwMhzW5r4wZA==",
+ "dev": true
+ },
+ "@polymer/test-fixture": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@polymer/test-fixture/-/test-fixture-0.0.3.tgz",
+ "integrity": "sha1-REN1JpfU2Sk7vEEuoLXk00HxSdk=",
+ "dev": true
+ },
+ "@types/assert": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/assert/-/assert-0.0.29.tgz",
+ "integrity": "sha1-jlYnhbqlq9p8BKSfZmXq50MZKNM=",
+ "dev": true
+ },
+ "@types/babel-core": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.3.tgz",
+ "integrity": "sha512-OlUjfM+Qv+XwcaucEiekBIhfAYe4q4ruvQZZcCkOtQZ27Hykxm1LLY2s0mE6LtP9XQt6x+TUvS70KW2e8Mz0ZA==",
+ "dev": true,
+ "requires": {
+ "@types/babel-generator": "6.25.1",
+ "@types/babel-template": "6.25.0",
+ "@types/babel-traverse": "6.25.3",
+ "@types/babel-types": "7.0.0",
+ "@types/babylon": "6.16.2"
+ }
+ },
+ "@types/babel-generator": {
+ "version": "6.25.1",
+ "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.1.tgz",
+ "integrity": "sha512-nKNz9Ch4WP2TFZjQROhxqqS2SCk0OoDzGazJI6S+2sGgW9P7N4o3vluZAXFuPEnRqtz2A0vrrkK3tjQktxIlRw==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.0"
+ }
+ },
+ "@types/babel-template": {
+ "version": "6.25.0",
+ "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.0.tgz",
+ "integrity": "sha512-TtyfVlrprX92xSuKa8D//7vFz5kBJODBw5IQ1hQXehqO+me26vt1fyNxOZyXhUq2a7jRyT72V8p68IyH4NEZNA==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.0",
+ "@types/babylon": "6.16.2"
+ }
+ },
+ "@types/babel-traverse": {
+ "version": "6.25.3",
+ "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.3.tgz",
+ "integrity": "sha512-4FaulWyA7nrXPkzoukL2VmSpxCnBZwc+MgwZqO30gtHCrtaUXnoxymdYfxzf3CZN80zjtrVzKfLlZ7FPYvrhQQ==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.0"
+ }
+ },
+ "@types/babel-types": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.0.tgz",
+ "integrity": "sha512-PyWcbX0W4r4GcgXLI0Vu4jyJ/Erueo3PwjgvQcOmWAOBW0ObhzBBciEX+sHvjkNE0umI6nqD192FDKvYZTL91A==",
+ "dev": true
+ },
+ "@types/babylon": {
+ "version": "6.16.2",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz",
+ "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==",
+ "dev": true,
+ "requires": {
+ "@types/babel-types": "7.0.0"
+ }
+ },
+ "@types/bluebird": {
+ "version": "3.5.19",
+ "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.19.tgz",
+ "integrity": "sha512-2nHw8pBp6J0N4mHPEO5GJptmd0KKjLFz/wpBiLMOT8UVnGqAP2e7P44wKVj+ujPvsFuIGyB2waDA3dpYX3c6Aw==",
+ "dev": true
+ },
+ "@types/body-parser": {
+ "version": "1.16.8",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.16.8.tgz",
+ "integrity": "sha512-BdN2PXxOFnTXFcyONPW6t0fHjz2fvRZHVMFpaS0wYr+Y8fWEaNOs4V8LEu/fpzQlMx+ahdndgTaGTwPC+J/EeA==",
+ "dev": true,
+ "requires": {
+ "@types/express": "4.11.0",
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/chai": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.1.tgz",
+ "integrity": "sha512-nU82bD1xUJ1BKKPNQPJffXjNQtjh5XdF7hqKhnjrpLw+5jMJdJcx6UqwWycCPnKKWQbNszOq9g9vSn1Xc0Ll/Q==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.1.tgz",
+ "integrity": "sha512-Aof+FLfWzBPzDgJ2uuBuPNOBHVx9Siyw4vmOcsMgsuxX1nfUWSlzpq4pdvQiaBgGjGS7vP/Oft5dpJbX4krT1A==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "4.1.1"
+ }
+ },
+ "@types/chalk": {
+ "version": "0.4.31",
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz",
+ "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=",
+ "dev": true
+ },
+ "@types/clone": {
+ "version": "0.1.30",
+ "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz",
+ "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=",
+ "dev": true
+ },
+ "@types/compression": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/compression/-/compression-0.0.33.tgz",
+ "integrity": "sha1-ldxzOiM5qoRjgdfxN3eS0lU9wn0=",
+ "dev": true,
+ "requires": {
+ "@types/express": "4.11.0"
+ }
+ },
+ "@types/content-type": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/content-type/-/content-type-1.1.2.tgz",
+ "integrity": "sha512-w2d7fBCYbCBUBTGtkC4JfX1FicTtgEmq7wTTjc7rC5RA/JdB1Bi7o88nKzUqAnIIBXJVmq0n4tTmF3PJN8QqCg==",
+ "dev": true
+ },
+ "@types/cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@types/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-jgvuj33suVIlDaDK6+BeMFkcF+8=",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.1.tgz",
+ "integrity": "sha1-uZny2fe0PKvgoaLzm8IDvH3K2p0=",
+ "dev": true
+ },
+ "@types/escodegen": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.2.tgz",
+ "integrity": "sha1-fOpBqyQukQ6xD2WuGK66RZ1ms18=",
+ "dev": true
+ },
+ "@types/estraverse": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estraverse/-/estraverse-0.0.6.tgz",
+ "integrity": "sha1-Zp9833KreX5hJfjQD+0z1M8wwiE=",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.37"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.37",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.37.tgz",
+ "integrity": "sha512-1IT6vNpmU9w18P3v6mN9idv18z5KPVTi4t7+rU9VLnkxo0LCam8IXy/eSVzOaQ1Wpabra2cN3A8K/SliPK/Suw==",
+ "dev": true
+ },
+ "@types/events": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz",
+ "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==",
+ "dev": true
+ },
+ "@types/express": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.11.0.tgz",
+ "integrity": "sha512-N1Wdp3v4KmdO3W/CM7KXrDwM4xcVZjlHF2dAOs7sNrTUX8PY3G4n9NkaHlfjGFEfgFeHmRRjywoBd4VkujDs9w==",
+ "dev": true,
+ "requires": {
+ "@types/body-parser": "1.16.8",
+ "@types/express-serve-static-core": "4.11.1",
+ "@types/serve-static": "1.13.1"
+ }
+ },
+ "@types/express-serve-static-core": {
+ "version": "4.11.1",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.11.1.tgz",
+ "integrity": "sha512-EehCl3tpuqiM8RUb+0255M8PhhSwTtLfmO7zBBdv0ay/VTd/zmrqDfQdZFsa5z/PVMbH2yCMZPXsnrImpATyIw==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/freeport": {
+ "version": "1.0.21",
+ "resolved": "https://registry.npmjs.org/@types/freeport/-/freeport-1.0.21.tgz",
+ "integrity": "sha1-c/ZUPtZ9PKP/+XuYVZFZi3CSBm8=",
+ "dev": true,
+ "optional": true
+ },
+ "@types/glob": {
+ "version": "5.0.34",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.34.tgz",
+ "integrity": "sha512-sUvpieq+HsWTLdkeOI8Mi8u22Ag3AoGuM3sv+XMP1bKtbaIAHpEA2f52K2mz6vK5PVhTa3bFyRZLZMqTxOo2Cw==",
+ "dev": true,
+ "requires": {
+ "@types/events": "1.1.0",
+ "@types/minimatch": "3.0.3",
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "5.0.34",
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/launchpad": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/launchpad/-/launchpad-0.6.0.tgz",
+ "integrity": "sha1-NylhCbfyd/bmxf1+DAcGvJGPu1E=",
+ "dev": true,
+ "optional": true
+ },
+ "@types/mime": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz",
+ "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=",
+ "dev": true
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/mz": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.29.tgz",
+ "integrity": "sha1-vCRyjGSZc/HHhR6QM/nOUlZowns=",
+ "dev": true,
+ "requires": {
+ "@types/bluebird": "3.5.19",
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/node": {
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.5.9.tgz",
+ "integrity": "sha512-s+c3AjymyAccTI4hcgNFK4mToH8l+hyPDhu4LIkn71lRy56FLijGu00fyLgldjM/846Pmk9N4KFUs2P8GDs0pA==",
+ "dev": true
+ },
+ "@types/opn": {
+ "version": "3.0.28",
+ "resolved": "https://registry.npmjs.org/@types/opn/-/opn-3.0.28.tgz",
+ "integrity": "sha1-CX0NHJtXSVc6XZbfEyOHu20CEYo=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/parse5": {
+ "version": "2.2.34",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz",
+ "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/pem": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@types/pem/-/pem-1.9.3.tgz",
+ "integrity": "sha512-+hHbGi9PAyHVeRdMJN6yNuMWoshJ+7oTqYuhBB1/vHq0Tfu46ucbvgxmhwBfe0GCiJZvCa20VHhHsA0mY5W6hQ==",
+ "dev": true
+ },
+ "@types/serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-jDMH+3BQPtvqZVIcsH700Dfi8Q3MIcEx16g/VdxjoqiGR/NntekB10xdBpirMKnPe9z2C5cBmL0vte0YttOr3Q==",
+ "dev": true,
+ "requires": {
+ "@types/express-serve-static-core": "4.11.1",
+ "@types/mime": "0.0.29"
+ }
+ },
+ "@types/spdy": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@types/spdy/-/spdy-3.4.4.tgz",
+ "integrity": "sha512-N9LBlbVRRYq6HgYpPkqQc3a9HJ/iEtVZToW6xlTtJiMhmRJ7jJdV7TaZQJw/Ve/1ePUsQiCTDc4JMuzzag94GA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/ua-parser-js": {
+ "version": "0.7.32",
+ "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
+ "integrity": "sha512-+z7Q72Mlnq6SFkQYHzLg2Z70pIsgRVzgx1b5PV8eUv5uaZ/zoqIs45XnhtToW4gTeX4FbjIP49nhIjyvPF4rPg==",
+ "dev": true
+ },
+ "@types/vinyl": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.2.tgz",
+ "integrity": "sha512-2iYpNuOl98SrLPBZfEN9Mh2JCJ2EI9HU35SfgBEb51DcmaHkhp8cKMblYeBqMQiwXMgAD3W60DbQ4i/UdLiXhw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.5.9"
+ }
+ },
+ "@types/vinyl-fs": {
+ "version": "0.0.28",
+ "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-0.0.28.tgz",
+ "integrity": "sha1-RmMBe8gCxlcOrk80Cf1cq/l8v94=",
+ "dev": true,
+ "requires": {
+ "@types/glob-stream": "6.1.0",
+ "@types/node": "8.5.9",
+ "@types/vinyl": "2.0.2"
+ }
+ },
+ "@types/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-ZrJDWpvg75LTGX4XwuneY9s6bF3OeZcGTpoGh3zDV9ytzcHMFsRrMIaLBRJZQMBoGyKs6unBQfVdrLZiYfb1zQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@types/winston": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.3.7.tgz",
+ "integrity": "sha512-jNhbkxPtt9xbzvihfA0OavjJbpCIyTDSmwE03BVXgCKcz9lwNsq4cg2wsNkY4Av5eH35ttBArhYtVJa6CIrg2A==",
+ "dev": true,
+ "requires": {
+ "@types/node": "8.5.9"
+ }
+ },
+ "@webcomponents/custom-elements": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.1.0.tgz",
+ "integrity": "sha512-M872VYia7mXvtgsxKTTNBNPDYNLEvM3DDd0reyNusd/5weWH0XouKYYgp68b6gvWdMPHcMomg3SzUZaOo/bv9w==",
+ "dev": true
+ },
+ "@webcomponents/html-imports": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@webcomponents/html-imports/-/html-imports-1.1.1.tgz",
+ "integrity": "sha512-GVywdQzoSGtXv0qlGjqxFefSeLvICsT5QQaEhPKW6swhdIoNtTb6LJ4D/EBcfukgNcOLocplGz99YDVVHnqAEQ==",
+ "dev": true
+ },
+ "@webcomponents/shadycss": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.1.3.tgz",
+ "integrity": "sha512-tGap6j8LVgy8ORM7pL5Yf6u8tTUH0jJaMmA5St/Ijy9WCNttDnrmZTiEF7fl7QQNerzMnCVQHtO0vuX8kybxfQ==",
+ "dev": true
+ },
+ "@webcomponents/shadydom": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/@webcomponents/shadydom/-/shadydom-1.0.14.tgz",
+ "integrity": "sha512-6jhMR4gEJr6xe4pg+GjmOVx8GB2XAaCIEND6+YUV3EcgOIaCG6jl2QJJ4JiuFmJALNBn2sHIsnz6Gvw74F9Mzw==",
+ "dev": true
+ },
+ "@webcomponents/template": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/@webcomponents/template/-/template-1.2.4.tgz",
+ "integrity": "sha512-lbhJfT+VuQ9/1hLrX7vkbz+vbJBGwkhnwHeEdajBgDCu5La+FmfnTyBPyYplBN/3yDss9jJ0HMMrKFho3KYXPQ==",
+ "dev": true
+ },
+ "@webcomponents/webcomponents-platform": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@webcomponents/webcomponents-platform/-/webcomponents-platform-1.0.0.tgz",
+ "integrity": "sha1-iHkUY4DdvsuGF+MiSX1Z53w/9Gg=",
+ "dev": true
+ },
+ "@webcomponents/webcomponentsjs": {
+ "version": "1.0.22",
+ "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-1.0.22.tgz",
+ "integrity": "sha512-VREMJxIe5ydR6LdMpg27ojyfL635jH03680na5X2LNLY2UF1GOzNrNOAVaEf2mr+SDUpc9Rey+gt+qCvtbCGhQ==",
+ "dev": true
+ },
+ "accepts": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
+ "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "accessibility-developer-tools": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/accessibility-developer-tools/-/accessibility-developer-tools-2.12.0.tgz",
+ "integrity": "sha1-PaDM6dbsY3OWS4TzXbfPw996tRQ=",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz",
+ "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "3.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "adm-zip": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+ "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
+ "dev": true,
+ "optional": true
+ },
+ "after": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "extend": "3.0.1",
+ "semver": "5.0.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+ "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-align": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz",
+ "integrity": "sha1-LwwWWIKXOa3V67FeawxuNCPwFro=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "ansi-cyan": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",
+ "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-escape-sequences": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-3.0.0.tgz",
+ "integrity": "sha1-HBg5S2r5t2/5pjUJ+kl2af0s5T4=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz",
+ "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==",
+ "dev": true
+ },
+ "ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-red": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",
+ "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "append-field": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz",
+ "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=",
+ "dev": true
+ },
+ "archiver": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
+ "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "1.3.0",
+ "async": "2.6.0",
+ "buffer-crc32": "0.2.13",
+ "glob": "7.1.2",
+ "lodash": "4.17.4",
+ "readable-stream": "2.3.3",
+ "tar-stream": "1.5.2",
+ "walkdir": "0.0.11",
+ "zip-stream": "1.2.0"
+ }
+ },
+ "archiver-utils": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
+ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lazystream": "1.0.0",
+ "lodash": "4.17.4",
+ "normalize-path": "2.1.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3"
+ }
+ },
+ "arr-diff": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0"
+ }
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",
+ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=",
+ "dev": true
+ },
+ "array-back": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz",
+ "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=",
+ "dev": true,
+ "requires": {
+ "typical": "2.6.1"
+ }
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz",
+ "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "dev": true
+ },
+ "arraybuffer.slice": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atob": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
+ "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.0",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.7",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-evaluate-path": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.2.0.tgz",
+ "integrity": "sha512-0EK9TUKMxHL549hWDPkQoS7R0Ozg1CDLheVBHYds2B2qoAvmr9ejY3zOXFsrICK73TN7bPhU14PBeKc8jcBTwg==",
+ "dev": true
+ },
+ "babel-helper-flip-expressions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.2.0.tgz",
+ "integrity": "sha512-rAsPA1pWBc7e2E6HepkP2e1sXugT+Oq/VCqhyuHJ8aJ2d/ifwnJfd4Qxjm21qlW43AN8tqaeByagKK6wECFMSw==",
+ "dev": true
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-is-nodes-equiv": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
+ "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
+ "dev": true
+ },
+ "babel-helper-is-void-0": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.2.0.tgz",
+ "integrity": "sha512-Axj1AYuD0E3Dl7nT3KxROP7VekEofz3XtEljzURf3fABalLpr8PamtgLFt+zuxtaCxRf9iuZmbAMMYWri5Bazw==",
+ "dev": true
+ },
+ "babel-helper-mark-eval-scopes": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.2.0.tgz",
+ "integrity": "sha512-KJuwrOUcHbvbh6he4xRXZFLaivK9DF9o3CrvpWnK1Wp0B+1ANYABXBMgwrnNFIDK/AvicxQ9CNr8wsgivlp4Aw==",
+ "dev": true
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remove-or-void": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.2.0.tgz",
+ "integrity": "sha512-1Z41upf/XR+PwY7Nd+F15Jo5BiQi5205ZXUuKed3yoyQgDkMyoM7vAdjEJS/T+M6jy32sXjskMUgms4zeiVtRA==",
+ "dev": true
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-to-multiple-sequence-expressions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.2.0.tgz",
+ "integrity": "sha512-ij9lpfdP3+Zc/7kNwa+NXbTrUlsYEWPwt/ugmQO0qflzLrveTIkbfOqQztvitk81aG5NblYDQXDlRohzu3oa8Q==",
+ "dev": true
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-minify-builtins": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.2.0.tgz",
+ "integrity": "sha512-4i+8ntaS8gwVUcOz5y+zE+55OVOl2nTbmHV51D4wAIiKcRI8U5K//ip1GHfhsgk/NJrrHK7h97Oy5jpqt0Iixg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-constant-folding": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.2.0.tgz",
+ "integrity": "sha512-B3ffQBEUQ8ydlIkYv2MkZtTCbV7FAkWAV7NkyhcXlGpD10PaCxNGQ/B9oguXGowR1m16Q5nGhvNn8Pkn1MO6Hw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-dead-code-elimination": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.2.0.tgz",
+ "integrity": "sha512-zE7y3pRyzA4zK5nBou0kTcwUTSQ/AiFrynt1cIEYN7vcO2gS9ZFZoI0aO9JYLUdct5fsC1vfB35408yrzTyVfg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0",
+ "babel-helper-mark-eval-scopes": "0.2.0",
+ "babel-helper-remove-or-void": "0.2.0",
+ "lodash.some": "4.6.0"
+ }
+ },
+ "babel-plugin-minify-flip-comparisons": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.2.0.tgz",
+ "integrity": "sha512-QOqXSEmD/LhT3LpM1WCyzAGcQZYYKJF7oOHvS6QbpomHenydrV53DMdPX2mK01icBExKZcJAHF209wvDBa+CSg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-guarded-expressions": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.2.0.tgz",
+ "integrity": "sha512-5+NSPdRQ9mnrHaA+zFj+D5OzmSiv90EX5zGH6cWQgR/OUqmCHSDqgTRPFvOctgpo8MJyO7Rt7ajs2UfLnlAwYg==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-infinity": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.2.0.tgz",
+ "integrity": "sha512-U694vrla1lN6vDHWGrR832t3a/A2eh+kyl019LxEE2+sS4VTydyOPRsAOIYAdJegWRA4cMX1lm9azAN0cLIr8g==",
+ "dev": true
+ },
+ "babel-plugin-minify-mangle-names": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.2.0.tgz",
+ "integrity": "sha512-Gixuak1/CO7VCdjn15/8Bxe/QsAtDG4zPbnsNoe1mIJGCIH/kcmSjFhMlGJtXDQZd6EKzeMfA5WmX9+jvGRefw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-mark-eval-scopes": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-numeric-literals": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.2.0.tgz",
+ "integrity": "sha512-VcLpb+r1YS7+RIOXdRsFVLLqoh22177USpHf+JM/g1nZbzdqENmfd5v534MLAbRErhbz6SyK+NQViVzVtBxu8g==",
+ "dev": true
+ },
+ "babel-plugin-minify-replace": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.2.0.tgz",
+ "integrity": "sha512-SEW6zoSVxh3OH6E1LCgyhhTWMnCv+JIRu5h5IlJDA11tU4ZeSF7uPQcO4vN/o52+FssRB26dmzJ/8D+z0QPg5Q==",
+ "dev": true
+ },
+ "babel-plugin-minify-simplify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.2.0.tgz",
+ "integrity": "sha512-Mj3Mwy2zVosMfXDWXZrQH5/uMAyfJdmDQ1NVqit+ArbHC3LlXVzptuyC1JxTyai/wgFvjLaichm/7vSUshkWqw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "0.2.0",
+ "babel-helper-is-nodes-equiv": "0.0.1",
+ "babel-helper-to-multiple-sequence-expressions": "0.2.0"
+ }
+ },
+ "babel-plugin-minify-type-constructors": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.2.0.tgz",
+ "integrity": "sha512-NiOvvA9Pq6bki6nP4BayXwT5GZadw7DJFDDzHmkpnOQpENWe8RtHtKZM44MG1R6EQ5XxgbLdsdhswIzTkFlO5g==",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "0.2.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-inline-consecutive-adds": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.2.0.tgz",
+ "integrity": "sha512-GlhOuLOQ28ua9prg0hT33HslCrEmz9xWXy9ZNZSACppCyRxxRW+haYtRgm7uYXCcd0q8ggCWD2pfWEJp5iiZfQ==",
+ "dev": true
+ },
+ "babel-plugin-transform-member-expression-literals": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.8.5.tgz",
+ "integrity": "sha512-Ux3ligf+ukzWaCbBYOstDuFBhRgMiJHlpJBKV4P47qtzVkd0lg1ddPj9fqIJqAM0n+CvxipyrZrnNnw3CdtQCg==",
+ "dev": true
+ },
+ "babel-plugin-transform-merge-sibling-variables": {
+ "version": "6.8.6",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.8.6.tgz",
+ "integrity": "sha512-o5Jioq553HtEAUN5uty7ELJMenXIxHI3PIs1yLqYWYQwP6mg6IPVAJ+U7i4zr9XGF/kb2RGsdehglGTV+vngqA==",
+ "dev": true
+ },
+ "babel-plugin-transform-minify-booleans": {
+ "version": "6.8.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.8.3.tgz",
+ "integrity": "sha512-bPbUhkeN2Nc0KH0/A19GwQGj8w+CvdJzyu8t59VoEDgsNMQ9Bopzi5DrVkrSsVjbYUaZpzq/DYLrH+wD5K2Tig==",
+ "dev": true
+ },
+ "babel-plugin-transform-property-literals": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.8.5.tgz",
+ "integrity": "sha512-MmiQsQ5AcIaRZMJD0zY5C4H3xuHm06/nWgtOsz7AXV44VEIXIlPiJ39IFYJ4Qx67/fEm8zJAedzR8t+B7d10Bg==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-regexp-constructors": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.2.0.tgz",
+ "integrity": "sha512-7IsQ6aQx6LAaOqy97/PthTf+5Nx9grZww3r6E62IdWe76Yr8KsuwVjxzqSPQvESJqTE3EMADQ9S0RtwWDGNG9Q==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-console": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.8.5.tgz",
+ "integrity": "sha512-uuCKvtweCyIvvC8fi92EcWRtO2Kt5KMNMRK6BhpDXdeb3sxvGM7453RSmgeu4DlKns3OlvY9Ep5Q9m5a7RQAgg==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-debugger": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.8.5.tgz",
+ "integrity": "sha512-InDQDdHPOLJKM+G6oXrEesf+P29QFBmcTXID+TAvZziVz+38xe2VO/Bn3FcRcRtnOOycbgsJkUNp9jIK+ist6g==",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-undefined": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.2.0.tgz",
+ "integrity": "sha512-O8v57tPMHkp89kA4ZfQEYds/pzgvz/QYerBJjIuL5/Jc7RnvMVRA5gJY9zFKP7WayW8WOSBV4vh8Y8FJRio+ow==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "0.2.0"
+ }
+ },
+ "babel-plugin-transform-simplify-comparison-operators": {
+ "version": "6.8.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.5.tgz",
+ "integrity": "sha512-B3HlBZb+Uq86nRj5yNPO6pJ3noEdqHvzYkEYoUWtrsWTv48ZIRatYlumoOiif/v8llF13YjYjx9zhyznDx+N9g==",
+ "dev": true
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-undefined-to-void": {
+ "version": "6.8.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.8.3.tgz",
+ "integrity": "sha512-goYwp8dMrzHD6x9GjZ2M85Mk2vxf1h85CnUgAjfftUnlJvzF4uj5MrbReHBTbjQ96C8CuRzvhYZ3tv8H3Sc1ZA==",
+ "dev": true
+ },
+ "babel-preset-minify": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.2.0.tgz",
+ "integrity": "sha512-mR8Q44RmMzm18bM2Lqd9uiPopzk5GDCtVuquNbLFmX6lOKnqWoenaNBxnWW0UhBFC75lEHTIgNGCbnsRI0pJVw==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-minify-builtins": "0.2.0",
+ "babel-plugin-minify-constant-folding": "0.2.0",
+ "babel-plugin-minify-dead-code-elimination": "0.2.0",
+ "babel-plugin-minify-flip-comparisons": "0.2.0",
+ "babel-plugin-minify-guarded-expressions": "0.2.0",
+ "babel-plugin-minify-infinity": "0.2.0",
+ "babel-plugin-minify-mangle-names": "0.2.0",
+ "babel-plugin-minify-numeric-literals": "0.2.0",
+ "babel-plugin-minify-replace": "0.2.0",
+ "babel-plugin-minify-simplify": "0.2.0",
+ "babel-plugin-minify-type-constructors": "0.2.0",
+ "babel-plugin-transform-inline-consecutive-adds": "0.2.0",
+ "babel-plugin-transform-member-expression-literals": "6.8.5",
+ "babel-plugin-transform-merge-sibling-variables": "6.8.6",
+ "babel-plugin-transform-minify-booleans": "6.8.3",
+ "babel-plugin-transform-property-literals": "6.8.5",
+ "babel-plugin-transform-regexp-constructors": "0.2.0",
+ "babel-plugin-transform-remove-console": "6.8.5",
+ "babel-plugin-transform-remove-debugger": "6.8.5",
+ "babel-plugin-transform-remove-undefined": "0.2.0",
+ "babel-plugin-transform-simplify-comparison-operators": "6.8.5",
+ "babel-plugin-transform-undefined-to-void": "6.8.3",
+ "lodash.isplainobject": "4.0.6"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.1",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "backo2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base64-arraybuffer": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+ "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
+ "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
+ "dev": true,
+ "optional": true
+ },
+ "base64id": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+ "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "beeper": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "better-assert": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+ "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+ "dev": true,
+ "requires": {
+ "callsite": "1.0.0"
+ }
+ },
+ "bl": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
+ "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "blob": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+ "dev": true
+ },
+ "body-parser": {
+ "version": "1.18.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "content-type": "1.0.4",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "on-finished": "2.3.0",
+ "qs": "6.5.1",
+ "raw-body": "2.3.2",
+ "type-is": "1.6.15"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "boxen": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz",
+ "integrity": "sha1-g2TUJIrDT/DvGy8r9JpsYM4NgbY=",
+ "dev": true,
+ "requires": {
+ "ansi-align": "1.1.0",
+ "camelcase": "2.1.1",
+ "chalk": "1.1.3",
+ "cli-boxes": "1.0.0",
+ "filled-array": "1.1.0",
+ "object-assign": "4.1.1",
+ "repeating": "2.0.1",
+ "string-width": "1.0.2",
+ "widest-line": "1.0.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "dev": true,
+ "requires": {
+ "expand-range": "1.8.2",
+ "preserve": "0.2.0",
+ "repeat-element": "1.1.2"
+ }
+ },
+ "browser-capabilities": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/browser-capabilities/-/browser-capabilities-0.2.2.tgz",
+ "integrity": "sha512-iS5g9+yT/T7jr9BTjDi5Hu2soieyce457ad+fdp6uDlYp6pacX7ZG/nYtCZ+KQiMCxRfbd65OhAg7GbVJ3RcBw==",
+ "dev": true,
+ "requires": {
+ "@types/ua-parser-js": "0.7.32",
+ "ua-parser-js": "0.7.17"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
+ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
+ "dev": true
+ },
+ "browserstack": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.0.tgz",
+ "integrity": "sha1-tWVCWtYu1ywQgqHrl51TE8fUdU8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "https-proxy-agent": "1.0.0"
+ }
+ },
+ "buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "busboy": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
+ "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
+ "dev": true,
+ "requires": {
+ "dicer": "0.2.5",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "0.2.0"
+ }
+ },
+ "callsite": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+ "dev": true
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "2.1.1",
+ "map-obj": "1.0.1"
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
+ "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
+ "dev": true
+ },
+ "chai": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.1.0",
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.7"
+ }
+ },
+ "chalk": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
+ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.5.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "charenc": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+ "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=",
+ "dev": true
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "cleankill": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cleankill/-/cleankill-2.0.0.tgz",
+ "integrity": "sha1-WYMN/ItBHVPccq0J1Fp46jMWGpE=",
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "clone": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
+ "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "process-nextick-args": "1.0.7",
+ "through2": "2.0.3"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "command-line-args": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-3.0.5.tgz",
+ "integrity": "sha1-W9StReeYPlwTRJGOQCgO4mk8WsA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "find-replace": "1.0.3",
+ "typical": "2.6.1"
+ }
+ },
+ "command-line-usage": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-3.0.8.tgz",
+ "integrity": "sha1-tqIJeMGzg0d/XBGlKUKLiAv+D00=",
+ "dev": true,
+ "requires": {
+ "ansi-escape-sequences": "3.0.0",
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "table-layout": "0.3.0",
+ "typical": "2.6.1"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "component-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+ "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "component-inherit": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+ "dev": true
+ },
+ "compress-commons": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
+ "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
+ "dev": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "crc32-stream": "2.0.0",
+ "normalize-path": "2.1.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "compressible": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
+ "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "compression": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz",
+ "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "bytes": "3.0.0",
+ "compressible": "2.0.12",
+ "debug": "2.6.9",
+ "on-headers": "1.0.1",
+ "safe-buffer": "5.1.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
+ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "typedarray": "0.0.6"
+ }
+ },
+ "concat-with-sourcemaps": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.5.tgz",
+ "integrity": "sha512-YtnS0VEY+e2Khzsey/6mra9EoM6h/5gxaC0e3mcHpA5yfDxafhygytNmcJWodvUgyXzSiL5MSkPO6bQGgfliHw==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "configstore": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz",
+ "integrity": "sha1-c3o6cDbpiGECqmCZ5HuzOrGroaE=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "3.0.0",
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1",
+ "os-tmpdir": "1.0.2",
+ "osenv": "0.1.4",
+ "uuid": "2.0.3",
+ "write-file-atomic": "1.3.4",
+ "xdg-basedir": "2.0.0"
+ }
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+ "dev": true
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
+ "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
+ "dev": true
+ },
+ "cookie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
+ "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "crc": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz",
+ "integrity": "sha1-XZyPt3okXNXsopHl0tAFM0urAII=",
+ "dev": true
+ },
+ "crc32-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
+ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
+ "dev": true,
+ "requires": {
+ "crc": "3.5.0",
+ "readable-stream": "2.3.3"
+ },
+ "dependencies": {
+ "crc": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/crc/-/crc-3.5.0.tgz",
+ "integrity": "sha1-mLi6fUiWZbo5efWbITgTdBAaGWQ=",
+ "dev": true
+ }
+ }
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "crypt": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+ "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=",
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true,
+ "optional": true
+ },
+ "css": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
+ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "source-map": "0.1.43",
+ "source-map-resolve": "0.3.1",
+ "urix": "0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ }
+ }
+ },
+ "cssbeautify": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/cssbeautify/-/cssbeautify-0.3.1.tgz",
+ "integrity": "sha1-Et0fc0A1wub6ymfcvc73TkKBE5c=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "1.0.2"
+ }
+ },
+ "cycle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
+ "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=",
+ "dev": true
+ },
+ "d": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.38"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "dateformat": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "debug-fabulous": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.0.0.tgz",
+ "integrity": "sha512-dsd50qQ1atDeurcxL7XOjPp4nZCGZzWIONDujDXzl1atSyC3hMbZD+v6440etw+Vt0Pr8ce4TQzHfX3KZM05Mw==",
+ "dev": true,
+ "requires": {
+ "debug": "3.1.0",
+ "memoizee": "0.4.11",
+ "object-assign": "4.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.7"
+ }
+ },
+ "deep-extend": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
+ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
+ "dev": true
+ }
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "6.1.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "p-map": "1.2.0",
+ "pify": "3.0.0",
+ "rimraf": "2.6.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "deprecated": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz",
+ "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=",
+ "dev": true,
+ "requires": {
+ "fs-exists-sync": "0.1.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "detect-node": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz",
+ "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=",
+ "dev": true
+ },
+ "dicer": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
+ "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14",
+ "streamsearch": "0.1.2"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "diff": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
+ "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
+ "dev": true
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "2.0.2"
+ }
+ },
+ "dom-urls": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dom-urls/-/dom-urls-1.1.0.tgz",
+ "integrity": "sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=",
+ "dev": true,
+ "requires": {
+ "urijs": "1.19.0"
+ }
+ },
+ "dom5": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/dom5/-/dom5-2.3.0.tgz",
+ "integrity": "sha1-+CBJdb0NrLvltYqKk//B/tD/zSo=",
+ "dev": true,
+ "requires": {
+ "@types/clone": "0.1.30",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "clone": "2.1.1",
+ "parse5": "2.2.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "dot-prop": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
+ "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true,
+ "optional": true
+ },
+ "duplexify": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz",
+ "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true,
+ "requires": {
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
+ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ }
+ }
+ },
+ "engine.io": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz",
+ "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.3",
+ "base64id": "1.0.0",
+ "cookie": "0.3.1",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
+ "uws": "0.14.5",
+ "ws": "3.3.3"
+ },
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+ "dev": true,
+ "requires": {
+ "mime-types": "2.1.17",
+ "negotiator": "0.6.1"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz",
+ "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "component-inherit": "0.0.3",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.5",
+ "yeast": "0.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
+ "dev": true,
+ "requires": {
+ "after": "0.8.2",
+ "arraybuffer.slice": "0.0.7",
+ "base64-arraybuffer": "0.1.5",
+ "blob": "0.0.4",
+ "has-binary2": "1.0.2"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "0.2.1"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.38",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz",
+ "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.38",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "es6-promise": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz",
+ "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==",
+ "dev": true
+ },
+ "es6-symbol": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.38"
+ }
+ },
+ "es6-weak-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.38",
+ "es6-iterator": "2.0.3",
+ "es6-symbol": "3.1.1"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz",
+ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==",
+ "dev": true,
+ "requires": {
+ "esprima": "3.1.3",
+ "estraverse": "4.2.0",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.5.7"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+ "dev": true
+ }
+ }
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "babel-code-frame": "6.26.0",
+ "chalk": "2.3.0",
+ "concat-stream": "1.6.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "doctrine": "2.1.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0",
+ "espree": "3.5.4",
+ "esquery": "1.0.0",
+ "esutils": "2.0.2",
+ "file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
+ "glob": "7.1.2",
+ "globals": "11.3.0",
+ "ignore": "3.3.7",
+ "imurmurhash": "0.1.4",
+ "inquirer": "3.3.0",
+ "is-resolvable": "1.1.0",
+ "js-yaml": "3.11.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
+ "levn": "0.3.0",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "natural-compare": "1.4.0",
+ "optionator": "0.8.2",
+ "path-is-inside": "1.0.2",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
+ "regexpp": "1.0.1",
+ "require-uncached": "1.0.3",
+ "semver": "5.5.0",
+ "strip-ansi": "4.0.0",
+ "strip-json-comments": "2.0.1",
+ "table": "4.0.2",
+ "text-table": "0.2.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
+ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.5.3",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
+ "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "4.2.1",
+ "estraverse": "4.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz",
+ "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "5.3.0",
+ "acorn-jsx": "3.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz",
+ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "4.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
+ "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.38"
+ }
+ },
+ "event-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz",
+ "integrity": "sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1",
+ "from": "0.1.7",
+ "map-stream": "0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.2.10",
+ "stream-combiner": "0.0.4",
+ "through": "2.3.8"
+ }
+ },
+ "eventemitter3": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+ "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+ "dev": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "dev": true,
+ "requires": {
+ "is-posix-bracket": "0.1.1"
+ }
+ },
+ "expand-range": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "2.2.3"
+ }
+ },
+ "expand-tilde": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
+ "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "express": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
+ "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=",
+ "dev": true,
+ "requires": {
+ "accepts": "1.3.4",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.18.2",
+ "content-disposition": "0.5.2",
+ "content-type": "1.0.4",
+ "cookie": "0.3.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "finalhandler": "1.1.0",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "1.1.2",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "2.0.2",
+ "qs": "6.5.1",
+ "range-parser": "1.2.0",
+ "safe-buffer": "5.1.1",
+ "send": "0.16.1",
+ "serve-static": "1.13.1",
+ "setprototypeof": "1.1.0",
+ "statuses": "1.3.1",
+ "type-is": "1.6.15",
+ "utils-merge": "1.0.1",
+ "vary": "1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",
+ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",
+ "dev": true,
+ "requires": {
+ "kind-of": "1.1.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",
+ "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=",
+ "dev": true
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
+ "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==",
+ "dev": true,
+ "requires": {
+ "chardet": "0.4.2",
+ "iconv-lite": "0.4.19",
+ "tmp": "0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "eyes": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
+ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=",
+ "dev": true
+ },
+ "fancy-log": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz",
+ "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "time-stamp": "1.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pend": "1.2.0"
+ }
+ },
+ "feature-detect-es6": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/feature-detect-es6/-/feature-detect-es6-1.4.0.tgz",
+ "integrity": "sha512-7OnRV38WLydGuGcdm/fGk2SG9uo5ljslBSbPhCfEW5Gl0lX/IliaAVXYiYUBcI0UHTbepqO4T1SkJ74K8gtcDg==",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "1.3.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "filename-regex": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+ "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "dev": true,
+ "requires": {
+ "is-number": "2.1.0",
+ "isobject": "2.1.0",
+ "randomatic": "1.1.7",
+ "repeat-element": "1.1.2",
+ "repeat-string": "1.6.1"
+ }
+ },
+ "filled-array": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz",
+ "integrity": "sha1-w8T2xmO5I0WamqKZEtLQMfFQf4Q=",
+ "dev": true
+ },
+ "finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "on-finished": "2.3.0",
+ "parseurl": "1.3.2",
+ "statuses": "1.3.1",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "find-index": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "find-port": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/find-port/-/find-port-1.0.1.tgz",
+ "integrity": "sha1-2whKbL+ZVk2Zhprnn73s9m6KGFw=",
+ "dev": true,
+ "requires": {
+ "async": "0.2.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ }
+ }
+ },
+ "find-replace": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz",
+ "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "test-value": "2.1.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "2.1.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "findup-sync": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz",
+ "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=",
+ "dev": true,
+ "requires": {
+ "detect-file": "0.1.0",
+ "is-glob": "2.0.1",
+ "micromatch": "2.3.11",
+ "resolve-dir": "0.1.1"
+ }
+ },
+ "fined": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "2.0.2",
+ "is-plain-object": "2.0.4",
+ "object.defaults": "1.1.0",
+ "object.pick": "1.3.0",
+ "parse-filepath": "1.0.1"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1"
+ }
+ }
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz",
+ "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=",
+ "dev": true
+ },
+ "flat-cache": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
+ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "dev": true,
+ "requires": {
+ "circular-json": "0.3.3",
+ "del": "2.2.2",
+ "graceful-fs": "4.1.11",
+ "write": "0.2.1"
+ },
+ "dependencies": {
+ "del": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+ "dev": true,
+ "requires": {
+ "globby": "5.0.0",
+ "is-path-cwd": "1.0.0",
+ "is-path-in-cwd": "1.0.0",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "rimraf": "2.6.2"
+ }
+ },
+ "globby": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "arrify": "1.0.1",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "freeport": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/freeport/-/freeport-1.0.5.tgz",
+ "integrity": "sha1-JV6KuEFwwzuoXZkOghrl9KGpvF0=",
+ "dev": true,
+ "optional": true
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
+ },
+ "fs-exists-sync": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
+ "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gaze": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "0.1.0"
+ }
+ },
+ "generate-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+ "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ }
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-base": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "dev": true,
+ "requires": {
+ "glob-parent": "2.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "dev": true,
+ "requires": {
+ "is-glob": "2.0.1"
+ }
+ },
+ "glob-stream": {
+ "version": "3.1.18",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "4.5.3",
+ "glob2base": "0.0.12",
+ "minimatch": "2.0.10",
+ "ordered-read-streams": "0.1.0",
+ "through2": "0.6.5",
+ "unique-stream": "1.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "2.0.10",
+ "once": "1.4.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "0.5.2"
+ }
+ },
+ "glob2base": {
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "0.1.1"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ini": "1.3.4"
+ }
+ },
+ "global-modules": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
+ "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
+ "dev": true,
+ "requires": {
+ "global-prefix": "0.1.5",
+ "is-windows": "0.2.0"
+ }
+ },
+ "global-prefix": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
+ "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "1.0.1",
+ "ini": "1.3.4",
+ "is-windows": "0.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "3.1.21",
+ "lodash": "1.0.2",
+ "minimatch": "0.2.14"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "3.1.21",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "1.2.3",
+ "inherits": "1.0.2",
+ "minimatch": "0.2.14"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+ "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "0.2.14",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2.7.3",
+ "sigmund": "1.0.1"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz",
+ "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "google-closure-compiler": {
+ "version": "20171203.0.0",
+ "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20171203.0.0.tgz",
+ "integrity": "sha1-gpW5QFo145HB2I0IJYBo4x0TEaE=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "vinyl": "2.1.0",
+ "vinyl-sourcemaps-apply": "0.2.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "got": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
+ "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer2": "0.1.4",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "node-status-codes": "1.0.0",
+ "object-assign": "4.1.1",
+ "parse-json": "2.2.0",
+ "pinkie-promise": "2.0.1",
+ "read-all-stream": "3.1.0",
+ "readable-stream": "2.3.3",
+ "timed-out": "3.1.3",
+ "unzip-response": "1.0.2",
+ "url-parse-lax": "1.0.0"
+ },
+ "dependencies": {
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
+ "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "1.0.0",
+ "chalk": "1.1.3",
+ "deprecated": "0.0.1",
+ "gulp-util": "3.0.8",
+ "interpret": "1.0.4",
+ "liftoff": "2.3.0",
+ "minimist": "1.2.0",
+ "orchestrator": "0.3.8",
+ "pretty-hrtime": "1.0.3",
+ "semver": "4.3.6",
+ "tildify": "1.2.0",
+ "v8flags": "2.1.1",
+ "vinyl-fs": "0.3.14"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "gulp-add-src": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/gulp-add-src/-/gulp-add-src-0.2.0.tgz",
+ "integrity": "sha1-nhApRhn5Gg5/QhfE9eUYQbzb7xc=",
+ "dev": true,
+ "requires": {
+ "event-stream": "3.1.7",
+ "streamqueue": "0.1.3",
+ "through2": "0.4.2",
+ "vinyl-fs": "0.3.14"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+ "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "2.1.2"
+ }
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "0.4.0"
+ }
+ }
+ }
+ },
+ "gulp-header": {
+ "version": "1.8.12",
+ "resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.12.tgz",
+ "integrity": "sha512-lh9HLdb53sC7XIZOYzTXM4lFuXElv3EVkSDhsd7DoJBj7hm+Ni7D3qYbb+Rr8DuM8nRanBvkVO9d7askreXGnQ==",
+ "dev": true,
+ "requires": {
+ "concat-with-sourcemaps": "1.0.5",
+ "lodash.template": "4.4.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.templatesettings": "4.1.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0"
+ }
+ }
+ }
+ },
+ "gulp-rename": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
+ "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
+ "dev": true
+ },
+ "gulp-sourcemaps": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
+ "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
+ "dev": true,
+ "requires": {
+ "@gulp-sourcemaps/identity-map": "1.0.1",
+ "@gulp-sourcemaps/map-sources": "1.0.0",
+ "acorn": "5.3.0",
+ "convert-source-map": "1.5.0",
+ "css": "2.2.1",
+ "debug-fabulous": "1.0.0",
+ "detect-newline": "2.1.0",
+ "graceful-fs": "4.1.11",
+ "source-map": "0.6.1",
+ "strip-bom-string": "1.0.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "1.0.0",
+ "array-uniq": "1.0.3",
+ "beeper": "1.1.1",
+ "chalk": "1.1.3",
+ "dateformat": "2.2.0",
+ "fancy-log": "1.3.0",
+ "gulplog": "1.0.0",
+ "has-gulplog": "0.1.0",
+ "lodash._reescape": "3.0.0",
+ "lodash._reevaluate": "3.0.0",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.template": "3.6.2",
+ "minimist": "1.2.0",
+ "multipipe": "0.1.2",
+ "object-assign": "3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "2.0.3",
+ "vinyl": "0.5.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
+ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.2",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "1.0.0"
+ }
+ },
+ "handle-thing": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
+ "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
+ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.9.0",
+ "is-my-json-valid": "2.17.1",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "has-binary2": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz",
+ "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=",
+ "dev": true,
+ "requires": {
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "has-color": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz",
+ "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=",
+ "dev": true
+ },
+ "has-cors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+ "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "1.0.0"
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+ "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+ "dev": true
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "wbuf": "1.7.2"
+ }
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+ "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+ "dev": true,
+ "requires": {
+ "depd": "1.1.1",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.3",
+ "statuses": "1.4.0"
+ },
+ "dependencies": {
+ "depd": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+ "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+ "dev": true
+ }
+ }
+ },
+ "http-proxy": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "1.2.0",
+ "requires-port": "1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz",
+ "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=",
+ "dev": true,
+ "requires": {
+ "http-proxy": "1.16.2",
+ "is-glob": "3.1.0",
+ "lodash": "4.17.4",
+ "micromatch": "2.3.11"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "agent-base": "2.1.1",
+ "debug": "2.6.9",
+ "extend": "3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
+ "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
+ "dev": true
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true,
+ "optional": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "3.0.0",
+ "chalk": "2.3.0",
+ "cli-cursor": "2.1.0",
+ "cli-width": "2.2.0",
+ "external-editor": "2.1.0",
+ "figures": "2.0.0",
+ "lodash": "4.17.4",
+ "mute-stream": "0.0.7",
+ "run-async": "2.3.0",
+ "rx-lite": "4.0.8",
+ "rx-lite-aggregates": "4.0.8",
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "through": "2.3.8"
+ }
+ },
+ "interpret": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz",
+ "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=",
+ "dev": true
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "ipaddr.js": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz",
+ "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=",
+ "dev": true
+ },
+ "is-absolute": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz",
+ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=",
+ "dev": true,
+ "requires": {
+ "is-relative": "0.2.1",
+ "is-windows": "0.2.0"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
+ "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-dotfile": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+ "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+ "dev": true
+ },
+ "is-equal-shallow": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "dev": true,
+ "requires": {
+ "is-primitive": "2.0.0"
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "1.0.0"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz",
+ "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==",
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "4.0.1",
+ "xtend": "4.0.1"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
+ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-posix-bracket": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+ "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+ "dev": true
+ },
+ "is-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "dev": true
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-property": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-relative": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz",
+ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "0.1.2"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-unc-path": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz",
+ "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "0.1.2"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-valid-glob": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz",
+ "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
+ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.10",
+ "esprima": "4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json3": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonpointer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
+ "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
+ "dev": true
+ },
+ "jsonschema": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.2.tgz",
+ "integrity": "sha512-iX5OFQ6yx9NgbHCwse51ohhKgLuLL7Z5cNOeZOPIlDUtAMrxlruHLzVZxbltdHE5mEDXN+75oFOwq6Gn0MZwsA==",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ },
+ "latest-version": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz",
+ "integrity": "sha1-VvjWE5YghHuAF/jx9NeOIRMkFos=",
+ "dev": true,
+ "requires": {
+ "package-json": "2.4.0"
+ }
+ },
+ "launchpad": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/launchpad/-/launchpad-0.7.0.tgz",
+ "integrity": "sha1-9CfTwOFehp7hVROCi6/vwW+ce8M=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.6.0",
+ "browserstack": "1.5.0",
+ "debug": "2.6.9",
+ "plist": "2.1.0",
+ "q": "1.5.1",
+ "underscore": "1.8.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "lazy-req": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz",
+ "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=",
+ "dev": true
+ },
+ "lazystream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
+ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "liftoff": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz",
+ "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "findup-sync": "0.4.3",
+ "fined": "1.1.0",
+ "flagged-respawn": "0.3.2",
+ "lodash.isplainobject": "4.0.6",
+ "lodash.isstring": "4.0.1",
+ "lodash.mapvalues": "4.6.0",
+ "rechoir": "0.6.2",
+ "resolve": "1.4.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "lodash._baseassign": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
+ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash.keys": "3.1.2"
+ }
+ },
+ "lodash._basecopy": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basecreate": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
+ "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.create": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
+ "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
+ "dev": true,
+ "requires": {
+ "lodash._baseassign": "3.2.0",
+ "lodash._basecreate": "3.0.3",
+ "lodash._isiterateecall": "3.0.9"
+ }
+ },
+ "lodash.defaults": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
+ "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash.isarguments": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
+ "dev": true
+ },
+ "lodash.keys": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1",
+ "lodash.isarguments": "3.1.0",
+ "lodash.isarray": "3.0.4"
+ }
+ },
+ "lodash.mapvalues": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
+ "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "dev": true
+ },
+ "lodash.template": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "3.0.1",
+ "lodash._basetostring": "3.0.1",
+ "lodash._basevalues": "3.0.0",
+ "lodash._isiterateecall": "3.0.9",
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0",
+ "lodash.keys": "3.1.2",
+ "lodash.restparam": "3.6.1",
+ "lodash.templatesettings": "3.1.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.escape": "3.2.0"
+ }
+ },
+ "lolex": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
+ "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "0.4.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
+ "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "lru-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.38"
+ }
+ },
+ "make-dir": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
+ "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-stream": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "md5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
+ "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
+ "dev": true,
+ "requires": {
+ "charenc": "0.0.2",
+ "crypt": "0.0.2",
+ "is-buffer": "1.1.5"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "memoizee": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.11.tgz",
+ "integrity": "sha1-vemBdmPJ5A/bKk6hw2cpYIeujI8=",
+ "dev": true,
+ "requires": {
+ "d": "1.0.0",
+ "es5-ext": "0.10.38",
+ "es6-weak-map": "2.0.2",
+ "event-emitter": "0.3.5",
+ "is-promise": "2.1.0",
+ "lru-queue": "0.1.0",
+ "next-tick": "1.0.0",
+ "timers-ext": "0.1.2"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "2.1.0",
+ "decamelize": "1.2.0",
+ "loud-rejection": "1.6.0",
+ "map-obj": "1.0.1",
+ "minimist": "1.2.0",
+ "normalize-package-data": "2.4.0",
+ "object-assign": "4.1.1",
+ "read-pkg-up": "1.0.1",
+ "redent": "1.0.0",
+ "trim-newlines": "1.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "merge-stream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz",
+ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "2.3.11",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "dev": true,
+ "requires": {
+ "arr-diff": "2.0.0",
+ "array-unique": "0.2.1",
+ "braces": "1.8.5",
+ "expand-brackets": "0.1.5",
+ "extglob": "0.3.2",
+ "filename-regex": "2.0.1",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1",
+ "kind-of": "3.2.2",
+ "normalize-path": "2.1.1",
+ "object.omit": "2.0.1",
+ "parse-glob": "3.0.4",
+ "regex-cache": "0.4.4"
+ }
+ },
+ "mime": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimalistic-assert": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
+ "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimatch-all": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minimatch-all/-/minimatch-all-1.1.0.tgz",
+ "integrity": "sha1-QMSWonouEo0Zv3WOdrsBoMcUV4c=",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "mocha": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
+ "dev": true,
+ "requires": {
+ "browser-stdout": "1.3.0",
+ "commander": "2.9.0",
+ "debug": "2.6.8",
+ "diff": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "glob": "7.1.1",
+ "growl": "1.9.2",
+ "he": "1.1.1",
+ "json3": "3.3.2",
+ "lodash.create": "3.1.1",
+ "mkdirp": "0.5.1",
+ "supports-color": "3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.8",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
+ "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
+ "dev": true,
+ "requires": {
+ "has-flag": "1.0.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "multer": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz",
+ "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=",
+ "dev": true,
+ "requires": {
+ "append-field": "0.1.0",
+ "busboy": "0.2.14",
+ "concat-stream": "1.6.0",
+ "mkdirp": "0.5.1",
+ "object-assign": "3.0.0",
+ "on-finished": "2.3.0",
+ "type-is": "1.6.15",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ }
+ }
+ },
+ "multipipe": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0",
+ "object-assign": "4.1.1",
+ "thenify-all": "1.6.0"
+ }
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=",
+ "dev": true
+ },
+ "natives": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz",
+ "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+ "dev": true
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "node-status-codes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
+ "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
+ "dev": true
+ },
+ "nodegit-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nodegit-promise/-/nodegit-promise-4.0.0.tgz",
+ "integrity": "sha1-VyKxhPLfcycWEGSnkdLoQskWezQ=",
+ "dev": true,
+ "requires": {
+ "asap": "2.0.6"
+ }
+ },
+ "nomnom": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz",
+ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+ "dev": true,
+ "requires": {
+ "chalk": "0.4.0",
+ "underscore": "1.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz",
+ "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
+ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "1.0.0",
+ "has-color": "0.1.7",
+ "strip-ansi": "0.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz",
+ "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.5.0",
+ "validate-npm-package-license": "3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "1.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-component": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
+ "object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "1.0.1",
+ "array-slice": "1.0.0",
+ "for-own": "1.0.0",
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "1.0.2"
+ }
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "dev": true,
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "obuf": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz",
+ "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "1.2.0"
+ }
+ },
+ "opn": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-3.0.3.tgz",
+ "integrity": "sha1-ttmec5n3jWXDuq/+8fsojpuFJDo=",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ }
+ },
+ "orchestrator": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "0.1.5",
+ "sequencify": "0.0.7",
+ "stream-consume": "0.1.0"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true,
+ "optional": true
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "package-json": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz",
+ "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=",
+ "dev": true,
+ "requires": {
+ "got": "5.7.1",
+ "registry-auth-token": "3.3.1",
+ "registry-url": "3.1.0",
+ "semver": "5.5.0"
+ }
+ },
+ "parse-filepath": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz",
+ "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "0.2.6",
+ "map-cache": "0.2.2",
+ "path-root": "0.1.1"
+ }
+ },
+ "parse-glob": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "dev": true,
+ "requires": {
+ "glob-base": "0.3.0",
+ "is-dotfile": "1.0.3",
+ "is-extglob": "1.0.0",
+ "is-glob": "2.0.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "1.3.1"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-2.2.3.tgz",
+ "integrity": "sha1-DE/EHBAAxea5PUiwP4CDg3g06fY=",
+ "dev": true
+ },
+ "parseqs": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseuri": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+ "dev": true,
+ "requires": {
+ "better-assert": "1.0.2"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+ "dev": true
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true,
+ "optional": true
+ },
+ "path-parse": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
+ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "0.1.2"
+ }
+ },
+ "path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
+ "pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
+ },
+ "pem": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/pem/-/pem-1.12.3.tgz",
+ "integrity": "sha512-hT7GwvQL35+0iqgYUl8vn5I5pAVR0HcJas07TXL8bNaR4c5kAFRquk4ZqQk1F9YMcQOr6WjGdY5OnDC0RBnzig==",
+ "dev": true,
+ "requires": {
+ "md5": "2.2.1",
+ "os-tmpdir": "1.0.2",
+ "safe-buffer": "5.1.1",
+ "which": "1.3.0"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true,
+ "optional": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "plist": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
+ "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "base64-js": "1.2.0",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.27"
+ }
+ },
+ "plugin-error": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",
+ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",
+ "dev": true,
+ "requires": {
+ "ansi-cyan": "0.1.1",
+ "ansi-red": "0.1.1",
+ "arr-diff": "1.1.0",
+ "arr-union": "2.1.0",
+ "extend-shallow": "1.1.4"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "1.1.0",
+ "array-slice": "0.2.3"
+ }
+ },
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+ "dev": true
+ }
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "plylog": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/plylog/-/plylog-0.5.0.tgz",
+ "integrity": "sha1-yXbrodgNLdmRAF18EQ2vh0FUeI8=",
+ "dev": true,
+ "requires": {
+ "@types/node": "4.2.23",
+ "@types/winston": "2.3.7",
+ "winston": "2.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "4.2.23",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-4.2.23.tgz",
+ "integrity": "sha512-U6IchCNLRyswc9p6G6lxWlbE+KwAhZp6mGo6MD2yWpmFomhYmetK+c98OpKyvphNn04CU3aXeJrXdOqbXVTS/w==",
+ "dev": true
+ }
+ }
+ },
+ "polymer-analyzer": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/polymer-analyzer/-/polymer-analyzer-2.7.0.tgz",
+ "integrity": "sha512-yD5FYQ8thX/2vHTaEgTtCs/NSG3ko4VlEb0IjM/PFsu03lHNHnpadC1NGwKyvI9vOjcFhnw4mDEVW0lbxLo8Eg==",
+ "dev": true,
+ "requires": {
+ "@types/chai-subset": "1.3.1",
+ "@types/chalk": "0.4.31",
+ "@types/clone": "0.1.30",
+ "@types/cssbeautify": "0.3.1",
+ "@types/doctrine": "0.0.1",
+ "@types/escodegen": "0.0.2",
+ "@types/estraverse": "0.0.6",
+ "@types/estree": "0.0.37",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "chalk": "1.1.3",
+ "clone": "2.1.1",
+ "cssbeautify": "0.3.1",
+ "doctrine": "2.1.0",
+ "dom5": "2.3.0",
+ "escodegen": "1.9.0",
+ "espree": "3.5.2",
+ "estraverse": "4.2.0",
+ "jsonschema": "1.2.2",
+ "parse5": "2.2.3",
+ "shady-css-parser": "0.1.0",
+ "stable": "0.1.6",
+ "strip-indent": "2.0.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "polymer-build": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/polymer-build/-/polymer-build-2.1.1.tgz",
+ "integrity": "sha512-SW6gxS0UPz864jECKMXPEdtq3549xzludPAQpxEqeDz6pSAeY/AFDWRG78Gw+z+mS2KES16Wwkc9IdMagBj3FQ==",
+ "dev": true,
+ "requires": {
+ "@types/mz": "0.0.31",
+ "@types/node": "6.0.96",
+ "@types/parse5": "2.2.34",
+ "@types/vinyl": "2.0.2",
+ "@types/vinyl-fs": "0.0.28",
+ "dom5": "2.3.0",
+ "multipipe": "1.0.2",
+ "mz": "2.7.0",
+ "parse5": "2.2.3",
+ "plylog": "0.5.0",
+ "polymer-analyzer": "2.7.0",
+ "polymer-bundler": "3.1.1",
+ "polymer-project-config": "3.7.0",
+ "sw-precache": "5.2.0",
+ "vinyl": "1.2.0",
+ "vinyl-fs": "2.4.4"
+ },
+ "dependencies": {
+ "@types/mz": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/@types/mz/-/mz-0.0.31.tgz",
+ "integrity": "sha1-pNgMCC/v5x5Ap8DwfR5lVbu8e1I=",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96"
+ }
+ },
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ },
+ "clone": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3"
+ }
+ },
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "requires": {
+ "is-glob": "3.1.0",
+ "path-dirname": "1.0.2"
+ }
+ },
+ "glob-stream": {
+ "version": "5.3.5",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz",
+ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=",
+ "dev": true,
+ "requires": {
+ "extend": "3.0.1",
+ "glob": "5.0.15",
+ "glob-parent": "3.1.0",
+ "micromatch": "2.3.11",
+ "ordered-read-streams": "0.3.0",
+ "through2": "0.6.5",
+ "to-absolute-glob": "0.1.1",
+ "unique-stream": "2.2.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz",
+ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "1.5.0",
+ "graceful-fs": "4.1.11",
+ "strip-bom": "2.0.0",
+ "through2": "2.0.3",
+ "vinyl": "1.2.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "2.1.1"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "multipipe": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz",
+ "integrity": "sha1-zBPv2DPJzamfIk+GhGG44aP9k50=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.1.4",
+ "object-assign": "4.1.1"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz",
+ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=",
+ "dev": true,
+ "requires": {
+ "is-stream": "1.1.0",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "replace-ext": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ },
+ "unique-stream": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz",
+ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "1.0.1",
+ "through2-filter": "2.0.0"
+ }
+ },
+ "vinyl": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz",
+ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=",
+ "dev": true,
+ "requires": {
+ "clone": "1.0.3",
+ "clone-stats": "0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "vinyl-fs": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz",
+ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=",
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.3",
+ "glob-stream": "5.3.5",
+ "graceful-fs": "4.1.11",
+ "gulp-sourcemaps": "1.6.0",
+ "is-valid-glob": "0.3.0",
+ "lazystream": "1.0.0",
+ "lodash.isequal": "4.5.0",
+ "merge-stream": "1.0.1",
+ "mkdirp": "0.5.1",
+ "object-assign": "4.1.1",
+ "readable-stream": "2.3.3",
+ "strip-bom": "2.0.0",
+ "strip-bom-stream": "1.0.0",
+ "through2": "2.0.3",
+ "through2-filter": "2.0.0",
+ "vali-date": "1.0.0",
+ "vinyl": "1.2.0"
+ }
+ }
+ }
+ },
+ "polymer-bundler": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/polymer-bundler/-/polymer-bundler-3.1.1.tgz",
+ "integrity": "sha512-a/MItYr/rTRZ8Ymj5npmoAAm89RC5hRh4yz8bs22GyMn+NlE7HqJ4EzLrPkyRWlOyBhbhYFPx2Zot8PlaWXvmQ==",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "dom5": "2.3.0",
+ "espree": "3.5.2",
+ "mkdirp": "0.5.1",
+ "parse5": "2.2.3",
+ "polymer-analyzer": "2.7.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "polymer-project-config": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/polymer-project-config/-/polymer-project-config-3.7.0.tgz",
+ "integrity": "sha512-d3GTy/JRu05rlaaiLRTDgSU4ZbbS/KQiZ6NFIFWQCJytJ32EhDTl2rK10xsf2ll0G2c97FqFV67IsBRF0yXthg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "6.0.96",
+ "jsonschema": "1.2.2",
+ "minimatch-all": "1.1.0",
+ "plylog": "0.5.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "6.0.96",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.96.tgz",
+ "integrity": "sha512-fsOOY6tMQ3jCB2wD51XFDmmpgm4wVKkJECdcVRqapbJEa7awJDcr+SaH8toz+4r4KW8YQ3M7ybXMoSDo1QGewA==",
+ "dev": true
+ }
+ }
+ },
+ "polyserve": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/polyserve/-/polyserve-0.23.0.tgz",
+ "integrity": "sha512-ijzCbFttKG1F0hMTWWIzMoo+sxsfpXctoHFigw2ViBcvUt/aUBfJCUTHPKHhi/3zAgtw5Ej3SgoIOY9LflpXAw==",
+ "dev": true,
+ "requires": {
+ "@types/assert": "0.0.29",
+ "@types/babel-core": "6.25.3",
+ "@types/babylon": "6.16.2",
+ "@types/compression": "0.0.33",
+ "@types/content-type": "1.1.2",
+ "@types/express": "4.11.0",
+ "@types/mime": "0.0.29",
+ "@types/mz": "0.0.29",
+ "@types/node": "8.5.9",
+ "@types/opn": "3.0.28",
+ "@types/parse5": "2.2.34",
+ "@types/pem": "1.9.3",
+ "@types/serve-static": "1.13.1",
+ "@types/spdy": "3.4.4",
+ "@types/ua-parser-js": "0.7.32",
+ "babel-core": "6.26.0",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "babylon": "6.18.0",
+ "browser-capabilities": "0.2.2",
+ "command-line-args": "3.0.5",
+ "command-line-usage": "3.0.8",
+ "compression": "1.7.1",
+ "content-type": "1.0.4",
+ "dom5": "2.3.0",
+ "express": "4.16.2",
+ "find-port": "1.0.1",
+ "http-proxy-middleware": "0.17.4",
+ "lru-cache": "4.1.1",
+ "mime": "1.4.1",
+ "mz": "2.7.0",
+ "opn": "3.0.3",
+ "parse5": "2.2.3",
+ "pem": "1.12.3",
+ "polymer-build": "2.1.1",
+ "requirejs": "2.3.5",
+ "resolve": "1.4.0",
+ "send": "0.14.2",
+ "spdy": "3.4.7"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.1"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ }
+ }
+ },
+ "etag": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz",
+ "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=",
+ "dev": true
+ },
+ "fresh": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz",
+ "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz",
+ "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "setprototypeof": "1.0.2",
+ "statuses": "1.3.1"
+ }
+ },
+ "ms": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+ "dev": true
+ },
+ "send": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.14.2.tgz",
+ "integrity": "sha1-ObBDiz9RC+Xcb2Z6EfcWiTaM3u8=",
+ "dev": true,
+ "requires": {
+ "debug": "2.2.0",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.7.0",
+ "fresh": "0.3.0",
+ "http-errors": "1.5.1",
+ "mime": "1.3.4",
+ "ms": "0.7.2",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=",
+ "dev": true
+ }
+ }
+ },
+ "setprototypeof": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz",
+ "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=",
+ "dev": true
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "preserve": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz",
+ "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
+ "dev": true
+ },
+ "pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz",
+ "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "promisify-node": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/promisify-node/-/promisify-node-0.4.0.tgz",
+ "integrity": "sha1-MoA4dOxBF4TkeGwzmQKoeheaRpw=",
+ "dev": true,
+ "requires": {
+ "nodegit-promise": "4.0.0",
+ "object-assign": "4.1.1"
+ }
+ },
+ "proxy-addr": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
+ "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=",
+ "dev": true,
+ "requires": {
+ "forwarded": "0.1.2",
+ "ipaddr.js": "1.5.2"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
+ "dev": true,
+ "optional": true
+ },
+ "qs": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
+ "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==",
+ "dev": true
+ },
+ "randomatic": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
+ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "dev": true,
+ "requires": {
+ "is-number": "3.0.0",
+ "kind-of": "4.0.0"
+ },
+ "dependencies": {
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "1.1.5"
+ }
+ }
+ }
+ },
+ "range-parser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
+ "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
+ "dev": true,
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.2",
+ "iconv-lite": "0.4.19",
+ "unpipe": "1.0.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.4.tgz",
+ "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=",
+ "dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ }
+ }
+ },
+ "read-all-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
+ "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "2.0.1",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "1.1.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "1.1.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "1.1.2",
+ "read-pkg": "1.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.4.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "2.1.0",
+ "strip-indent": "1.0.1"
+ },
+ "dependencies": {
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "4.0.1"
+ }
+ }
+ }
+ },
+ "reduce-flatten": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz",
+ "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=",
+ "dev": true
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.7"
+ }
+ },
+ "regex-cache": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
+ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "dev": true,
+ "requires": {
+ "is-equal-shallow": "0.1.3"
+ }
+ },
+ "regexpp": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.0.1.tgz",
+ "integrity": "sha512-8Ph721maXiOYSLtaDGKVmDn5wdsNaF6Px85qFNeMPQq0r8K5Y10tgP6YuR65Ws35n4DvzFcCxEnRNBIXQunzLw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz",
+ "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.4",
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "1.2.4"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "replace-ext": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "2.79.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
+ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "qs": "6.3.2",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.3",
+ "tunnel-agent": "0.4.3",
+ "uuid": "3.2.1"
+ },
+ "dependencies": {
+ "qs": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
+ "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "dev": true
+ }
+ }
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "0.1.0",
+ "resolve-from": "1.0.1"
+ }
+ },
+ "requirejs": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz",
+ "integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==",
+ "dev": true
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz",
+ "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==",
+ "dev": true,
+ "requires": {
+ "path-parse": "1.0.5"
+ }
+ },
+ "resolve-dir": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
+ "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "1.2.2",
+ "global-modules": "0.2.3"
+ }
+ },
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "2.0.1",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "rollup": {
+ "version": "0.45.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.45.2.tgz",
+ "integrity": "sha512-2+bq5GQSrocdhr+M92mOQRmF1evtLRzv9NdmEC2wo7BILvTG8irHCtD0q+zg8ikNu63iJicdN5IzyxAXRTFKOQ==",
+ "dev": true,
+ "requires": {
+ "source-map-support": "0.4.18"
+ }
+ },
+ "rollup-plugin-babel": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz",
+ "integrity": "sha1-FlKBl7D5OKFTb0RoPHqT1XMYL1c=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "object-assign": "4.1.1",
+ "rollup-pluginutils": "1.5.2"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
+ "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "dev": true,
+ "requires": {
+ "estree-walker": "0.2.1",
+ "minimatch": "3.0.4"
+ }
+ },
+ "rollup-stream": {
+ "version": "1.23.1",
+ "resolved": "https://registry.npmjs.org/rollup-stream/-/rollup-stream-1.23.1.tgz",
+ "integrity": "sha512-niUbTM3sqckz1FNebsSiN+koCR7RdgrRZ2HCcR4V2DT9PSs53tB4z1xzdTGxrX6bo3QT00R2sQA5n1jr/to69Q==",
+ "dev": true,
+ "requires": {
+ "rollup": "0.45.2"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "2.1.0"
+ }
+ },
+ "run-sequence": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz",
+ "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "fancy-log": "1.3.2",
+ "plugin-error": "0.1.2"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "0.1.1",
+ "color-support": "1.1.3",
+ "time-stamp": "1.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "4.0.8"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ },
+ "sauce-connect-launcher": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.2.3.tgz",
+ "integrity": "sha1-0vkxrXro/avxlopEDnsgQXrKf4Y=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "adm-zip": "0.4.7",
+ "async": "2.6.0",
+ "https-proxy-agent": "1.0.0",
+ "lodash": "4.17.4",
+ "rimraf": "2.6.2"
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selenium-standalone": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.12.0.tgz",
+ "integrity": "sha1-eJcw2wmhBfHM4SxkJNeV0RxUO9Q=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "async": "2.6.0",
+ "commander": "2.9.0",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
+ "lodash": "4.17.4",
+ "minimist": "1.2.0",
+ "mkdirp": "0.5.1",
+ "progress": "2.0.0",
+ "request": "2.79.0",
+ "tar-stream": "1.5.2",
+ "urijs": "1.19.0",
+ "which": "1.3.0",
+ "yauzl": "2.9.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "5.5.0"
+ }
+ },
+ "send": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.11.1.tgz",
+ "integrity": "sha1-G+q/1C+eJwn5kCivMHisErRwktU=",
+ "dev": true,
+ "requires": {
+ "debug": "2.1.3",
+ "depd": "1.0.1",
+ "destroy": "1.0.3",
+ "escape-html": "1.0.1",
+ "etag": "1.5.1",
+ "fresh": "0.2.4",
+ "mime": "1.2.11",
+ "ms": "0.7.0",
+ "on-finished": "2.2.1",
+ "range-parser": "1.0.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
+ "integrity": "sha1-zoqxte6PvuK/o7Yzyrk9NmtjQY4=",
+ "dev": true,
+ "requires": {
+ "ms": "0.7.0"
+ }
+ },
+ "depd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
+ "integrity": "sha1-gK7GTJ1tl+ZcwqnKqTwKpqv3Oqo=",
+ "dev": true
+ },
+ "destroy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
+ "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=",
+ "dev": true
+ },
+ "ee-first": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.0.tgz",
+ "integrity": "sha1-ag18YiHkkP7v2S7D9EHJzozQl/Q=",
+ "dev": true
+ },
+ "escape-html": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz",
+ "integrity": "sha1-GBoobq05ejmpKFfPsdQwUuNWv/A=",
+ "dev": true
+ },
+ "etag": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.5.1.tgz",
+ "integrity": "sha1-VMUN4E7kJpVWKSWsVmWIKRvn6eo=",
+ "dev": true,
+ "requires": {
+ "crc": "3.2.1"
+ }
+ },
+ "fresh": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz",
+ "integrity": "sha1-NYJJkgbJcjcUGQ7ddLRgT+tKYUw=",
+ "dev": true
+ },
+ "mime": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
+ "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=",
+ "dev": true
+ },
+ "ms": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz",
+ "integrity": "sha1-hlvpTC5zl62KV9pqYzpuLzB5i4M=",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz",
+ "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz",
+ "integrity": "sha1-aHKCNTXGkuLCoBA4Jq/YLC4P8XU=",
+ "dev": true
+ }
+ }
+ },
+ "sequencify": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "serve-static": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz",
+ "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "parseurl": "1.3.2",
+ "send": "0.16.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "send": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "1.1.2",
+ "destroy": "1.0.4",
+ "encodeurl": "1.0.2",
+ "escape-html": "1.0.3",
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "1.6.2",
+ "mime": "1.4.1",
+ "ms": "2.0.0",
+ "on-finished": "2.3.0",
+ "range-parser": "1.2.0",
+ "statuses": "1.3.1"
+ }
+ },
+ "statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "dev": true
+ }
+ }
+ },
+ "server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=",
+ "dev": true
+ },
+ "serviceworker-cache-polyfill": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz",
+ "integrity": "sha1-3hnuc77yGrPAdAo3sz22JGS6ves=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+ "dev": true
+ },
+ "shady-css-parser": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/shady-css-parser/-/shady-css-parser-0.1.0.tgz",
+ "integrity": "sha512-irfJUUkEuDlNHKZNAp2r7zOyMlmbfVJ+kWSfjlCYYUx/7dJnANLCyTzQZsuxy5NJkvtNwSxY5Gj8MOlqXUQPyA==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "sinon": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz",
+ "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==",
+ "dev": true,
+ "requires": {
+ "diff": "3.2.0",
+ "formatio": "1.2.0",
+ "lolex": "1.6.0",
+ "native-promise-only": "0.8.1",
+ "path-to-regexp": "1.7.0",
+ "samsam": "1.3.0",
+ "text-encoding": "0.6.4",
+ "type-detect": "4.0.7"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
+ "sinon-chai": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz",
+ "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
+ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "socket.io": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "engine.io": "3.1.4",
+ "socket.io-adapter": "1.1.1",
+ "socket.io-client": "2.0.4",
+ "socket.io-parser": "3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-adapter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz",
+ "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=",
+ "dev": true
+ },
+ "socket.io-client": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
+ "dev": true,
+ "requires": {
+ "backo2": "1.0.2",
+ "base64-arraybuffer": "0.1.5",
+ "component-bind": "1.0.0",
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.4",
+ "has-cors": "1.1.0",
+ "indexof": "0.0.1",
+ "object-component": "0.0.3",
+ "parseqs": "0.0.5",
+ "parseuri": "0.0.5",
+ "socket.io-parser": "3.1.2",
+ "to-array": "0.1.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "socket.io-parser": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.2.tgz",
+ "integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=",
+ "dev": true,
+ "requires": {
+ "component-emitter": "1.2.1",
+ "debug": "2.6.9",
+ "has-binary2": "1.0.2",
+ "isarray": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "isarray": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+ "dev": true
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
+ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "dev": true,
+ "requires": {
+ "atob": "1.1.3",
+ "resolve-url": "0.2.1",
+ "source-map-url": "0.3.0",
+ "urix": "0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "source-map-url": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
+ "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=",
+ "dev": true
+ },
+ "sparkles": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
+ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
+ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
+ "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
+ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "dev": true
+ },
+ "spdy": {
+ "version": "3.4.7",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
+ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "handle-thing": "1.2.5",
+ "http-deceiver": "1.2.7",
+ "safe-buffer": "5.1.1",
+ "select-hose": "2.0.0",
+ "spdy-transport": "2.0.20"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz",
+ "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "detect-node": "2.0.3",
+ "hpack.js": "2.1.6",
+ "obuf": "1.1.1",
+ "readable-stream": "2.3.3",
+ "safe-buffer": "5.1.1",
+ "wbuf": "1.7.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "split": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz",
+ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=",
+ "dev": true,
+ "requires": {
+ "through": "2.3.8"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "stable": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
+ "dev": true
+ },
+ "stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
+ "dev": true
+ },
+ "stacky": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/stacky/-/stacky-1.3.1.tgz",
+ "integrity": "sha1-PxF+UYe5pz0j+HbWnwXIWxGAShI=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "lodash": "3.10.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+ "dev": true
+ },
+ "stream-combiner": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "0.1.1"
+ }
+ },
+ "stream-consume": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz",
+ "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=",
+ "dev": true
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
+ "dev": true
+ },
+ "streamqueue": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.1.3.tgz",
+ "integrity": "sha1-sQ1lFYr1ec46X0jJJ20B2yPU+LU=",
+ "dev": true,
+ "requires": {
+ "isstream": "0.1.2",
+ "readable-stream": "1.0.34"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
+ }
+ },
+ "streamsearch": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
+ "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "is-utf8": "0.2.1"
+ }
+ },
+ "strip-bom-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz",
+ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "1.0.0",
+ "strip-bom": "2.0.0"
+ },
+ "dependencies": {
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "0.2.1"
+ }
+ }
+ }
+ },
+ "strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true,
+ "optional": true
+ },
+ "strip-indent": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
+ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "sw-precache": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/sw-precache/-/sw-precache-5.2.0.tgz",
+ "integrity": "sha512-sKctdX+5hUxkqJ/1DM88ubQ+QRvyw7CnxWdk909N2DgvxMqc1gcQFrwL7zpVc87wFmCA/OvRQd0iMC2XdFopYg==",
+ "dev": true,
+ "requires": {
+ "dom-urls": "1.1.0",
+ "es6-promise": "4.1.1",
+ "glob": "7.1.2",
+ "lodash.defaults": "4.2.0",
+ "lodash.template": "4.4.0",
+ "meow": "3.7.0",
+ "mkdirp": "0.5.1",
+ "pretty-bytes": "4.0.2",
+ "sw-toolbox": "3.6.0",
+ "update-notifier": "1.0.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "lodash.template": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
+ "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0",
+ "lodash.templatesettings": "4.1.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
+ "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "update-notifier": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz",
+ "integrity": "sha1-j5LFFUgr1oMbfJMBPnD4dVLHz1o=",
+ "dev": true,
+ "requires": {
+ "boxen": "0.6.0",
+ "chalk": "1.1.3",
+ "configstore": "2.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "2.0.0",
+ "lazy-req": "1.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "2.0.0"
+ }
+ }
+ }
+ },
+ "sw-toolbox": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/sw-toolbox/-/sw-toolbox-3.6.0.tgz",
+ "integrity": "sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=",
+ "dev": true,
+ "requires": {
+ "path-to-regexp": "1.7.0",
+ "serviceworker-cache-polyfill": "4.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "dev": true,
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ }
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.0",
+ "lodash": "4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "2.1.1"
+ }
+ },
+ "table-layout": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.3.0.tgz",
+ "integrity": "sha1-buINxIPbNxs+XIf3BO0vfHmdLJo=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "core-js": "2.5.1",
+ "deep-extend": "0.4.2",
+ "feature-detect-es6": "1.4.0",
+ "typical": "2.6.1",
+ "wordwrapjs": "2.0.0"
+ }
+ },
+ "tar-stream": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz",
+ "integrity": "sha1-+8bG6DwaGdTLSMfZYXH8JI7/x78=",
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "end-of-stream": "1.4.1",
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "temp": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz",
+ "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-tmpdir": "1.0.2",
+ "rimraf": "2.2.8"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
+ "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "execa": "0.7.0"
+ }
+ },
+ "test-value": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz",
+ "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "typical": "2.6.1"
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=",
+ "dev": true
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "thenify": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz",
+ "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=",
+ "dev": true,
+ "requires": {
+ "any-promise": "1.3.0"
+ }
+ },
+ "thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+ "dev": true,
+ "requires": {
+ "thenify": "3.3.0"
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "through2-filter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz",
+ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3",
+ "xtend": "4.0.1"
+ }
+ },
+ "tildify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timed-out": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
+ "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=",
+ "dev": true
+ },
+ "timers-ext": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz",
+ "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "0.10.38",
+ "next-tick": "1.0.0"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "to-absolute-glob": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz",
+ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "2.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "0.1.1"
+ }
+ }
+ }
+ },
+ "to-array": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
+ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
+ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
+ "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
+ "dev": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.7.tgz",
+ "integrity": "sha512-4Rh17pAMVdMWzktddFhISRnUnFIStObtUMNGzDwlA6w/77bmGv3aBbRdCmQR6IjzfkTo9otnW+2K/cDRhKSxDA==",
+ "dev": true
+ },
+ "type-is": {
+ "version": "1.6.15",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz",
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "2.1.17"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typical": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz",
+ "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=",
+ "dev": true
+ },
+ "ua-parser-js": {
+ "version": "0.7.17",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
+ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
+ "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz",
+ "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "1.0.3",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "unique-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unzip-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
+ "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz",
+ "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boxen": "1.3.0",
+ "chalk": "2.3.0",
+ "configstore": "3.1.1",
+ "import-lazy": "2.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ },
+ "dependencies": {
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.3.0",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "2.0.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true,
+ "optional": true
+ },
+ "configstore": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz",
+ "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.1.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.3.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "package-json": "4.0.1"
+ }
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.1",
+ "registry-url": "3.1.0",
+ "semver": "5.5.0"
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true,
+ "optional": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true,
+ "optional": true
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
+ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ }
+ }
+ },
+ "urijs": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.0.tgz",
+ "integrity": "sha512-Qs2odXn0hST5VSPVjpi73CMqtbAoanahaqWBujGU+IyMrMqpWcIhDewxQRhCkmqYxuyvICDcSuLdv2O7ncWBGw==",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ }
+ },
+ "user-home": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
+ "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
+ "dev": true
+ },
+ "uws": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/uws/-/uws-0.14.5.tgz",
+ "integrity": "sha1-Z6rzPEaypYel9mZtAPdpEyjxSdw=",
+ "dev": true,
+ "optional": true
+ },
+ "v8flags": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "1.1.1"
+ }
+ },
+ "vali-date": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz",
+ "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
+ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ }
+ },
+ "vargs": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz",
+ "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=",
+ "dev": true
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
+ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "dev": true,
+ "requires": {
+ "clone": "2.1.1",
+ "clone-buffer": "1.0.0",
+ "clone-stats": "1.0.0",
+ "cloneable-readable": "1.0.0",
+ "remove-trailing-separator": "1.1.0",
+ "replace-ext": "1.0.0"
+ }
+ },
+ "vinyl-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz",
+ "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=",
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "through2": "2.0.3"
+ }
+ },
+ "vinyl-fs": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3",
+ "glob-stream": "3.1.18",
+ "glob-watcher": "0.0.6",
+ "graceful-fs": "3.0.11",
+ "mkdirp": "0.5.1",
+ "strip-bom": "1.0.0",
+ "through2": "0.6.5",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "1.1.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "1.0.34",
+ "xtend": "4.0.1"
+ }
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-source-stream": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz",
+ "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=",
+ "dev": true,
+ "requires": {
+ "through2": "2.0.3",
+ "vinyl": "0.4.6"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "0.2.0",
+ "clone-stats": "0.0.1"
+ }
+ }
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "walkdir": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
+ "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=",
+ "dev": true
+ },
+ "wbuf": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz",
+ "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "1.0.0"
+ }
+ },
+ "wct-local": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wct-local/-/wct-local-2.1.0.tgz",
+ "integrity": "sha512-OiMSbxp6e5tyvTbUA4VAQbw4we53EXEmekx9BbIgS/HryoQISzap5DSAE/kvpRpJ2Axt0z12d8ChxqwNflApfA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@types/express": "4.11.0",
+ "@types/freeport": "1.0.21",
+ "@types/launchpad": "0.6.0",
+ "@types/node": "9.3.0",
+ "@types/which": "1.3.1",
+ "chalk": "2.3.0",
+ "cleankill": "2.0.0",
+ "freeport": "1.0.5",
+ "launchpad": "0.7.0",
+ "promisify-node": "0.4.0",
+ "selenium-standalone": "6.12.0",
+ "which": "1.3.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.3.0.tgz",
+ "integrity": "sha512-wNBfvNjzsJl4tswIZKXCFQY0lss9nKUyJnG6T94X/eqjRgI2jHZ4evdjhQYBSan/vGtF6XVXPApOmNH2rf0KKw==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "wct-sauce": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wct-sauce/-/wct-sauce-2.0.0.tgz",
+ "integrity": "sha512-amICD6iZOVJEJ4uymfdPFdk17CkSIYwHPDzDh4cH/ITYcNskZ3VB/2VPtU9ZIKuWMVdqPwfBovXcjlhn8+8idA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "cleankill": "2.0.0",
+ "lodash": "3.10.1",
+ "request": "2.79.0",
+ "sauce-connect-launcher": "1.2.3",
+ "temp": "0.8.3",
+ "uuid": "2.0.3"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true,
+ "optional": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "wd": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/wd/-/wd-1.5.0.tgz",
+ "integrity": "sha512-e/KpzTlhtSG3Ek0AcRz4G6PhxGsc53Nro+GkI1er9p05tWQ7W9dpGZR5SqQzGUqvbaqJCThDSAGaY7LHgi6MiA==",
+ "dev": true,
+ "requires": {
+ "archiver": "1.3.0",
+ "async": "2.0.1",
+ "lodash": "4.16.2",
+ "mkdirp": "0.5.1",
+ "q": "1.4.1",
+ "request": "2.79.0",
+ "underscore.string": "3.3.4",
+ "vargs": "0.1.0"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz",
+ "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.16.2"
+ }
+ },
+ "lodash": {
+ "version": "4.16.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz",
+ "integrity": "sha1-PmJtuCcEimmSgaihJSJjJs/A5lI=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+ "dev": true
+ }
+ }
+ },
+ "web-component-tester": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/web-component-tester/-/web-component-tester-6.5.0.tgz",
+ "integrity": "sha512-C8nK7mhLTGzm/3QcjBIzI5Pk3OLrEvup246Pc9stAD+sTvLWtH8tjVL+vU5KCOAdudKVnelGMbE4ICaNrl69+A==",
+ "dev": true,
+ "requires": {
+ "@polymer/sinonjs": "1.17.1",
+ "@polymer/test-fixture": "0.0.3",
+ "@webcomponents/webcomponentsjs": "1.0.22",
+ "accessibility-developer-tools": "2.12.0",
+ "async": "2.6.0",
+ "body-parser": "1.18.2",
+ "chai": "4.1.2",
+ "chalk": "1.1.3",
+ "cleankill": "2.0.0",
+ "express": "4.16.2",
+ "findup-sync": "1.0.0",
+ "glob": "7.1.2",
+ "lodash": "3.10.1",
+ "mocha": "3.5.3",
+ "multer": "1.3.0",
+ "nomnom": "1.8.1",
+ "polyserve": "0.23.0",
+ "promisify-node": "0.4.0",
+ "resolve": "1.4.0",
+ "semver": "5.5.0",
+ "send": "0.11.1",
+ "server-destroy": "1.0.1",
+ "sinon": "2.4.1",
+ "sinon-chai": "2.14.0",
+ "socket.io": "2.0.4",
+ "stacky": "1.3.1",
+ "update-notifier": "2.3.0",
+ "wct-local": "2.1.0",
+ "wct-sauce": "2.0.0",
+ "wd": "1.5.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-1.0.0.tgz",
+ "integrity": "sha1-b35LV7buOkA3tEFOrt6j9Y9x4Ow=",
+ "dev": true,
+ "requires": {
+ "detect-file": "0.1.0",
+ "is-glob": "2.0.1",
+ "micromatch": "2.3.11",
+ "resolve-dir": "0.1.1"
+ }
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "which": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "widest-line": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz",
+ "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=",
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ }
+ }
+ },
+ "winston": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz",
+ "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=",
+ "dev": true,
+ "requires": {
+ "async": "1.0.0",
+ "colors": "1.0.3",
+ "cycle": "1.0.3",
+ "eyes": "0.1.8",
+ "isstream": "0.1.2",
+ "stack-trace": "0.0.10"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=",
+ "dev": true
+ }
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wordwrapjs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-2.0.0.tgz",
+ "integrity": "sha1-q1X2leYRjak4WP3XDAU9HF4BrCA=",
+ "dev": true,
+ "requires": {
+ "array-back": "1.0.4",
+ "feature-detect-es6": "1.4.0",
+ "reduce-flatten": "1.0.1",
+ "typical": "2.6.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
+ "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ },
+ "xdg-basedir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
+ "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
+ "dev": true,
+ "optional": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
+ "dev": true,
+ "optional": true
+ },
+ "xmlhttprequest-ssl": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
+ "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yauzl": {
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz",
+ "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "buffer-crc32": "0.2.13",
+ "fd-slicer": "1.0.1"
+ }
+ },
+ "yeast": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
+ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=",
+ "dev": true
+ },
+ "zip-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
+ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
+ "dev": true,
+ "requires": {
+ "archiver-utils": "1.3.0",
+ "compress-commons": "1.2.2",
+ "lodash": "4.17.4",
+ "readable-stream": "2.3.3"
+ }
+ }
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package.json
new file mode 100644
index 00000000000..a434247bd83
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@webcomponents/webcomponentsjs",
+ "version": "1.2.0",
+ "description": "Web Components Polyfills",
+ "main": "webcomponents-lite.js",
+ "directories": {
+ "test": "tests"
+ },
+ "keywords": [
+ "webcomponents",
+ "web-components",
+ "polyfill",
+ "shim"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/webcomponents/webcomponentsjs.git"
+ },
+ "author": "The Polymer Authors",
+ "license": "BSD-3-Clause",
+ "bugs": {
+ "url": "https://github.com/webcomponents/webcomponentsjs/issues"
+ },
+ "scripts": {
+ "build": "gulp",
+ "test": "wct"
+ },
+ "homepage": "https://webcomponents.org/polyfills",
+ "devDependencies": {
+ "@webcomponents/custom-elements": "^1.1.0",
+ "@webcomponents/html-imports": "^1.1.1",
+ "@webcomponents/shadycss": "^1.1.3",
+ "@webcomponents/shadydom": "^1.0.14",
+ "@webcomponents/template": "^1.2.4",
+ "@webcomponents/webcomponents-platform": "^1.0.0",
+ "babel-preset-minify": "^0.2.0",
+ "del": "^3.0.0",
+ "es6-promise": "4.1.x",
+ "eslint": "^4.19.1",
+ "google-closure-compiler": "^20171203.0.0",
+ "gulp": "^3.8.8",
+ "gulp-add-src": "^0.2.0",
+ "gulp-header": "^1.8.12",
+ "gulp-rename": "^1.2.2",
+ "gulp-sourcemaps": "^2.6.4",
+ "rollup-plugin-babel": "^2.7.1",
+ "rollup-stream": "=1.23",
+ "run-sequence": "^2.2.1",
+ "vinyl-buffer": "^1.0.1",
+ "vinyl-source-stream": "^1.1.2",
+ "web-component-tester": "^6.5.0"
+ },
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/post-polyfill.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/post-polyfill.js
new file mode 100644
index 00000000000..2e36ad32268
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/post-polyfill.js
@@ -0,0 +1,63 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+'use strict';
+
+let customElements = window['customElements'];
+let HTMLImports = window['HTMLImports'];
+let Template = window['HTMLTemplateElement'];
+
+// global for (1) existence means `WebComponentsReady` will file,
+// (2) WebComponents.ready == true means event has fired.
+window.WebComponents = window.WebComponents || {};
+
+if (customElements && customElements['polyfillWrapFlushCallback']) {
+ // Here we ensure that the public `HTMLImports.whenReady`
+ // always comes *after* custom elements have upgraded.
+ let flushCallback;
+ let runAndClearCallback = function runAndClearCallback() {
+ if (flushCallback) {
+ // make sure to run the HTMLTemplateElement polyfill before custom elements upgrade
+ if (Template.bootstrap) {
+ Template.bootstrap(window.document);
+ }
+ let cb = flushCallback;
+ flushCallback = null;
+ cb();
+ return true;
+ }
+ }
+ let origWhenReady = HTMLImports['whenReady'];
+ customElements['polyfillWrapFlushCallback'](function(cb) {
+ flushCallback = cb;
+ origWhenReady(runAndClearCallback);
+ });
+
+ HTMLImports['whenReady'] = function(cb) {
+ origWhenReady(function() {
+ // custom element code may add dynamic imports
+ // to match processing of native custom elements before
+ // domContentLoaded, we wait for these imports to resolve first.
+ if (runAndClearCallback()) {
+ HTMLImports['whenReady'](cb);
+ } else {
+ cb();
+ }
+ });
+ }
+
+}
+
+HTMLImports['whenReady'](function() {
+ requestAnimationFrame(function() {
+ window.WebComponents.ready = true;
+ document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));
+ });
+}); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/pre-polyfill.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/pre-polyfill.js
new file mode 100644
index 00000000000..336a86ebdd4
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/pre-polyfill.js
@@ -0,0 +1,63 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+'use strict';
+
+// Establish scope.
+window['WebComponents'] = window['WebComponents'] || {'flags':{}};
+
+// loading script
+let file = 'webcomponents-lite.js';
+let script = document.querySelector('script[src*="' + file + '"]');
+let flagMatcher = /wc-(.+)/;
+
+// Flags. Convert url arguments to flags
+let flags = {};
+if (!flags['noOpts']) {
+ // from url
+ location.search.slice(1).split('&').forEach(function(option) {
+ let parts = option.split('=');
+ let match;
+ if (parts[0] && (match = parts[0].match(flagMatcher))) {
+ flags[match[1]] = parts[1] || true;
+ }
+ });
+ // from script
+ if (script) {
+ for (let i=0, a; (a=script.attributes[i]); i++) {
+ if (a.name !== 'src') {
+ flags[a.name] = a.value || true;
+ }
+ }
+ }
+ // log flags
+ if (flags['log'] && flags['log']['split']) {
+ let parts = flags['log'].split(',');
+ flags['log'] = {};
+ parts.forEach(function(f) {
+ flags['log'][f] = true;
+ });
+ } else {
+ flags['log'] = {};
+ }
+}
+
+// exports
+window['WebComponents']['flags'] = flags;
+let forceShady = flags['shadydom'];
+if (forceShady) {
+ window['ShadyDOM'] = window['ShadyDOM'] || {};
+ window['ShadyDOM']['force'] = forceShady;
+}
+
+let forceCE = flags['register'] || flags['ce'];
+if (forceCE && window['customElements']) {
+ window['customElements']['forcePolyfill'] = forceCE;
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/promise.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/promise.js
new file mode 100644
index 00000000000..ca01d623147
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/promise.js
@@ -0,0 +1,26 @@
+/**
+@license
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';
+import ES6Promise from '../node_modules/es6-promise/lib/es6-promise/promise.js';
+
+/*
+Assign the ES6 promise polyfill to window ourselves instead of using the "auto" polyfill
+to work around https://github.com/webcomponents/webcomponentsjs/issues/837
+*/
+if (!window.Promise) {
+ window.Promise = ES6Promise;
+ // save Promise API
+ ES6Promise.prototype['catch'] = ES6Promise.prototype.catch;
+ ES6Promise.prototype['then'] = ES6Promise.prototype.then;
+ ES6Promise['all'] = ES6Promise.all;
+ ES6Promise['race'] = ES6Promise.race;
+ ES6Promise['resolve'] = ES6Promise.resolve;
+ ES6Promise['reject'] = ES6Promise.reject;
+} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/unresolved.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/unresolved.js
new file mode 100644
index 00000000000..f6f2bb24dbe
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/src/unresolved.js
@@ -0,0 +1,31 @@
+/**
+ * @license
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+'use strict';
+// It's desireable to provide a default stylesheet
+// that's convenient for styling unresolved elements, but
+// it's cumbersome to have to include this manually in every page.
+// It would make sense to put inside some HTMLImport but
+// the HTMLImports polyfill does not allow loading of stylesheets
+// that block rendering. Therefore this injection is tolerated here.
+//
+// NOTE: position: relative fixes IE's failure to inherit opacity
+// when a child is not statically positioned.
+let style = document.createElement('style');
+style.textContent = ''
+ + 'body {'
+ + 'transition: opacity ease-in 0.2s;'
+ + ' } \n'
+ + 'body[unresolved] {'
+ + 'opacity: 0; display: block; overflow: hidden; position: relative;'
+ + ' } \n'
+ ;
+let head = document.querySelector('head');
+head.insertBefore(style, head.firstChild); \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/wct.conf.json b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/wct.conf.json
new file mode 100644
index 00000000000..76d7ee0bc6f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/wct.conf.json
@@ -0,0 +1,6 @@
+{
+ "suites": ["tests/runner.html"],
+ "clientOptions": {
+ "environmentImports": []
+ }
+}
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js
new file mode 100644
index 00000000000..916284ca2f5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js
@@ -0,0 +1,81 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){/*
+
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';(function(a){function b(a,b){if("function"===typeof window.CustomEvent)return new CustomEvent(a,b);var c=document.createEvent("CustomEvent");c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c}function c(a){if(J)return a.ownerDocument!==document?a.ownerDocument:null;var b=a.__importDoc;if(!b&&a.parentNode){b=a.parentNode;if("function"===typeof b.closest)b=b.closest("link[rel=import]");else for(;!h(b)&&(b=b.parentNode););a.__importDoc=b}return b}function d(a){var b=l(document,
+"link[rel=import]:not([import-dependency])"),c=b.length;c?r(b,function(b){return k(b,function(){0===--c&&a()})}):a()}function e(a){function b(){"loading"!==document.readyState&&document.body&&(document.removeEventListener("readystatechange",b),a())}document.addEventListener("readystatechange",b);b()}function f(a){e(function(){return d(function(){return a&&a()})})}function k(a,b){if(a.__loaded)b&&b();else if("script"===a.localName&&!a.src||"style"===a.localName&&!a.firstChild)a.__loaded=!0,b&&b();
+else{var c=function(e){a.removeEventListener(e.type,c);a.__loaded=!0;b&&b()};a.addEventListener("load",c);K&&"style"===a.localName||a.addEventListener("error",c)}}function h(a){return a.nodeType===Node.ELEMENT_NODE&&"link"===a.localName&&"import"===a.rel}function g(){var a=this;this.a={};this.b=0;this.c=new MutationObserver(function(b){return a.K(b)});this.c.observe(document.head,{childList:!0,subtree:!0});this.loadImports(document)}function n(a){r(l(a,"template"),function(a){r(l(a.content,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){var b=document.createElement("script");r(a.attributes,function(a){return b.setAttribute(a.name,a.value)});b.textContent=a.textContent;a.parentNode.replaceChild(b,a)});n(a.content)})}function l(a,b){return a.childNodes.length?a.querySelectorAll(b):ya}function r(a,b,c){var e=a?a.length:0,d=c?-1:1;for(c=c?e-1:0;c<e&&0<=c;c+=d)b(a[c],c)}var A=document.createElement("link"),J="import"in A,ya=A.querySelectorAll("*"),L=null;!1==="currentScript"in document&&Object.defineProperty(document,"currentScript",
+{get:function(){return L||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null)},configurable:!0});var za=/(url\()([^)]*)(\))/g,Aa=/(@import[\s]+(?!url\())([^;]*)(;)/g,Ba=/(<link[^>]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,t={I:function(a,b){a.href&&a.setAttribute("href",t.j(a.getAttribute("href"),b));a.src&&a.setAttribute("src",t.j(a.getAttribute("src"),b));if("style"===a.localName){var c=t.D(a.textContent,b,za);a.textContent=t.D(c,b,Aa)}},D:function(a,b,c){return a.replace(c,
+function(a,c,e,d){a=e.replace(/["']/g,"");b&&(a=t.j(a,b));return c+"'"+a+"'"+d})},j:function(a,b){if(void 0===t.m){t.m=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";t.m="http://a/c%20d"===c.href}catch(Va){}}if(t.m)return(new URL(a,b)).href;c=t.F;c||(c=document.implementation.createHTMLDocument("temp"),t.F=c,c.A=c.createElement("base"),c.head.appendChild(c.A),c.w=c.createElement("a"));c.A.href=b;c.w.href=a;return c.w.href||a}},Z={async:!0,load:function(a,b,c){if(a)if(a.match(/^data:/)){a=
+a.split(",");var e=a[1];e=-1<a[0].indexOf(";base64")?atob(e):decodeURIComponent(e);b(e)}else{var d=new XMLHttpRequest;d.open("GET",a,Z.async);d.onload=function(){var a=d.responseURL||d.getResponseHeader("Location");a&&0===a.indexOf("/")&&(a=(location.origin||location.protocol+"//"+location.host)+a);var e=d.response||d.responseText;304===d.status||0===d.status||200<=d.status&&300>d.status?b(e,a):c(e)};d.send()}else c("error: href must be specified")}},K=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);
+g.prototype.loadImports=function(a){var b=this;r(l(a,"link[rel=import]"),function(a){return b.B(a)})};g.prototype.B=function(a){var b=this,c=a.href;if(void 0!==this.a[c]){var e=this.a[c];e&&e.__loaded&&(a.__import=e,this.g(a))}else this.b++,this.a[c]="pending",Z.load(c,function(a,e){a=b.L(a,e||c);b.a[c]=a;b.b--;b.loadImports(a);b.C()},function(){b.a[c]=null;b.b--;b.C()})};g.prototype.L=function(a,b){if(!a)return document.createDocumentFragment();K&&(a=a.replace(Ba,function(a,b,c){return-1===a.indexOf("type=")?
+b+" type=import-disable "+c:a}));var c=document.createElement("template");c.innerHTML=a;if(c.content)a=c.content,n(a);else for(a=document.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);if(c=a.querySelector("base"))b=t.j(c.getAttribute("href"),b),c.removeAttribute("href");var e=0;r(l(a,'link[rel=import],link[rel=stylesheet][href][type=import-disable],style:not([type]),link[rel=stylesheet][href]:not([type]),script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){k(a);t.I(a,b);a.setAttribute("import-dependency","");"script"===a.localName&&!a.src&&a.textContent&&(a.setAttribute("src","data:text/javascript;charset=utf-8,"+encodeURIComponent(a.textContent+("\n//# sourceURL="+b+(e?"-"+e:"")+".js\n"))),a.textContent="",e++)});return a};g.prototype.C=function(){var a=this;if(!this.b){this.c.disconnect();this.flatten(document);var b=!1,c=!1,e=function(){c&&b&&(a.loadImports(document),a.b||(a.c.observe(document.head,{childList:!0,subtree:!0}),a.J()))};
+this.N(function(){c=!0;e()});this.M(function(){b=!0;e()})}};g.prototype.flatten=function(a){var b=this;r(l(a,"link[rel=import]"),function(a){var c=b.a[a.href];(a.__import=c)&&c.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(b.a[a.href]=a,a.readyState="loading",a.__import=a,b.flatten(c),a.appendChild(c))})};g.prototype.M=function(a){function b(d){if(d<e){var f=c[d],h=document.createElement("script");f.removeAttribute("import-dependency");r(f.attributes,function(a){return h.setAttribute(a.name,a.value)});
+L=h;f.parentNode.replaceChild(h,f);k(h,function(){L=null;b(d+1)})}else a()}var c=l(document,"script[import-dependency]"),e=c.length;b(0)};g.prototype.N=function(a){var b=l(document,"style[import-dependency],link[rel=stylesheet][import-dependency]"),e=b.length;if(e){var d=K&&!!document.querySelector("link[rel=stylesheet][href][type=import-disable]");r(b,function(b){k(b,function(){b.removeAttribute("import-dependency");0===--e&&a()});if(d&&b.parentNode!==document.head){var f=document.createElement(b.localName);
+f.__appliedElement=b;f.setAttribute("type","import-placeholder");b.parentNode.insertBefore(f,b.nextSibling);for(f=c(b);f&&c(f);)f=c(f);f.parentNode!==document.head&&(f=null);document.head.insertBefore(b,f);b.removeAttribute("type")}})}else a()};g.prototype.J=function(){var a=this;r(l(document,"link[rel=import]"),function(b){return a.g(b)},!0)};g.prototype.g=function(a){a.__loaded||(a.__loaded=!0,a.import&&(a.import.readyState="complete"),a.dispatchEvent(b(a.import?"load":"error",{bubbles:!1,cancelable:!1,
+detail:void 0})))};g.prototype.K=function(a){var b=this;r(a,function(a){return r(a.addedNodes,function(a){a&&a.nodeType===Node.ELEMENT_NODE&&(h(a)?b.B(a):b.loadImports(a))})})};var M=null;if(J)r(l(document,"link[rel=import]"),function(a){a.import&&"loading"===a.import.readyState||(a.__loaded=!0)}),A=function(a){a=a.target;h(a)&&(a.__loaded=!0)},document.addEventListener("load",A,!0),document.addEventListener("error",A,!0);else{var B=Object.getOwnPropertyDescriptor(Node.prototype,"baseURI");Object.defineProperty((!B||
+B.configurable?Node:Element).prototype,"baseURI",{get:function(){var a=h(this)?this:c(this);return a?a.href:B&&B.get?B.get.call(this):(document.querySelector("base")||window.location).href},configurable:!0,enumerable:!0});Object.defineProperty(HTMLLinkElement.prototype,"import",{get:function(){return this.__import||null},configurable:!0,enumerable:!0});e(function(){M=new g})}f(function(){return document.dispatchEvent(b("HTMLImportsLoaded",{cancelable:!0,bubbles:!0,detail:void 0}))});a.useNative=J;
+a.whenReady=f;a.importForElement=c;a.loadImports=function(a){M&&M.loadImports(a)}})(window.HTMLImports=window.HTMLImports||{});var aa=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function ba(a){var b=aa.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return!b&&a}function m(a){var b=a.isConnected;if(void 0!==b)return b;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}
+function p(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
+function q(a,b,c){c=void 0===c?new Set:c;for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)q(d,b,c);d=p(a,e);continue}else if("template"===f){d=p(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)q(e,b,c)}d=d.firstChild?d.firstChild:p(a,d)}}function u(a,b,c){a[b]=c};function v(){this.a=new Map;this.g=new Map;this.c=[];this.b=!1}function ca(a,b,c){a.a.set(b,c);a.g.set(c.constructor,c)}function da(a,b){a.b=!0;a.c.push(b)}function w(a,b){a.b&&q(b,function(b){return x(a,b)})}function x(a,b){if(a.b&&!b.__CE_patched){b.__CE_patched=!0;for(var c=0;c<a.c.length;c++)a.c[c](b)}}function y(a,b){var c=[];q(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):z(a,d)}}
+function C(a,b){var c=[];q(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
+function D(a,b,c){c=void 0===c?{}:c;var d=c.O||new Set,e=c.l||function(b){return z(a,b)},f=[];q(b,function(b){if("link"===b.localName&&"import"===b.getAttribute("rel")){var c=b.import;c instanceof Node&&(c.__CE_isImportDocument=!0,c.__CE_hasRegistry=!0);c&&"complete"===c.readyState?c.__CE_documentLoadHandled=!0:b.addEventListener("load",function(){var c=b.import;if(!c.__CE_documentLoadHandled){c.__CE_documentLoadHandled=!0;var f=new Set(d);f.delete(c);D(a,c,{O:f,l:e})}})}else f.push(b)},d);if(a.b)for(b=
+0;b<f.length;b++)x(a,f[b]);for(b=0;b<f.length;b++)e(f[b])}
+function z(a,b){if(void 0===b.__CE_state){var c=b.ownerDocument;if(c.defaultView||c.__CE_isImportDocument&&c.__CE_hasRegistry)if(c=a.a.get(b.localName)){c.constructionStack.push(b);var d=c.constructor;try{try{if(new d!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{c.constructionStack.pop()}}catch(k){throw b.__CE_state=2,k;}b.__CE_state=1;b.__CE_definition=c;if(c.attributeChangedCallback)for(c=c.observedAttributes,d=0;d<c.length;d++){var e=c[d],
+f=b.getAttribute(e);null!==f&&a.attributeChangedCallback(b,e,null,f,null)}m(b)&&a.connectedCallback(b)}}}v.prototype.connectedCallback=function(a){var b=a.__CE_definition;b.connectedCallback&&b.connectedCallback.call(a)};v.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;b.disconnectedCallback&&b.disconnectedCallback.call(a)};
+v.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b)&&f.attributeChangedCallback.call(a,b,c,d,e)};function E(a){var b=document;this.f=a;this.a=b;this.b=void 0;D(this.f,this.a);"loading"===this.a.readyState&&(this.b=new MutationObserver(this.c.bind(this)),this.b.observe(this.a,{childList:!0,subtree:!0}))}E.prototype.disconnect=function(){this.b&&this.b.disconnect()};E.prototype.c=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||this.disconnect();for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)D(this.f,c[d])};function ea(){var a=this;this.b=this.a=void 0;this.c=new Promise(function(b){a.b=b;a.a&&b(a.a)})}function fa(a){if(a.a)throw Error("Already resolved.");a.a=void 0;a.b&&a.b(void 0)};function F(a){this.o=!1;this.f=a;this.v=new Map;this.s=function(a){return a()};this.h=!1;this.u=[];this.G=new E(a)}
+F.prototype.a=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");if(!ba(a))throw new SyntaxError("The element name '"+a+"' is not valid.");if(this.f.a.get(a))throw Error("A custom element with name '"+a+"' has already been defined.");if(this.o)throw Error("A custom element is already being defined.");this.o=!0;try{var d=function(a){var b=e[a];if(void 0!==b&&!(b instanceof Function))throw Error("The '"+a+"' callback must be a function.");
+return b},e=b.prototype;if(!(e instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var f=d("connectedCallback");var k=d("disconnectedCallback");var h=d("adoptedCallback");var g=d("attributeChangedCallback");var n=b.observedAttributes||[]}catch(l){return}finally{this.o=!1}b={localName:a,constructor:b,connectedCallback:f,disconnectedCallback:k,adoptedCallback:h,attributeChangedCallback:g,observedAttributes:n,constructionStack:[]};ca(this.f,a,b);this.u.push(b);
+this.h||(this.h=!0,this.s(function(){return ha(c)}))};F.prototype.l=function(a){D(this.f,a)};function ha(a){if(!1!==a.h){a.h=!1;for(var b=a.u,c=[],d=new Map,e=0;e<b.length;e++)d.set(b[e].localName,[]);D(a.f,document,{l:function(b){if(void 0===b.__CE_state){var e=b.localName,f=d.get(e);f?f.push(b):a.f.a.get(e)&&c.push(b)}}});for(e=0;e<c.length;e++)z(a.f,c[e]);for(;0<b.length;){var f=b.shift();e=f.localName;f=d.get(f.localName);for(var k=0;k<f.length;k++)z(a.f,f[k]);(e=a.v.get(e))&&fa(e)}}}
+F.prototype.get=function(a){if(a=this.f.a.get(a))return a.constructor};F.prototype.b=function(a){if(!ba(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.v.get(a);if(b)return b.c;b=new ea;this.v.set(a,b);this.f.a.get(a)&&!this.u.some(function(b){return b.localName===a})&&fa(b);return b.c};F.prototype.c=function(a){this.G.disconnect();var b=this.s;this.s=function(c){return a(function(){return b(c)})}};window.CustomElementRegistry=F;
+F.prototype.define=F.prototype.a;F.prototype.upgrade=F.prototype.l;F.prototype.get=F.prototype.get;F.prototype.whenDefined=F.prototype.b;F.prototype.polyfillWrapFlushCallback=F.prototype.c;var G=window.Document.prototype.createElement,ia=window.Document.prototype.createElementNS,ja=window.Document.prototype.importNode,ka=window.Document.prototype.prepend,la=window.Document.prototype.append,ma=window.DocumentFragment.prototype.prepend,na=window.DocumentFragment.prototype.append,oa=window.Node.prototype.cloneNode,H=window.Node.prototype.appendChild,pa=window.Node.prototype.insertBefore,I=window.Node.prototype.removeChild,qa=window.Node.prototype.replaceChild,N=Object.getOwnPropertyDescriptor(window.Node.prototype,
+"textContent"),ra=window.Element.prototype.attachShadow,O=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),P=window.Element.prototype.getAttribute,sa=window.Element.prototype.setAttribute,ta=window.Element.prototype.removeAttribute,Q=window.Element.prototype.getAttributeNS,ua=window.Element.prototype.setAttributeNS,va=window.Element.prototype.removeAttributeNS,wa=window.Element.prototype.insertAdjacentElement,xa=window.Element.prototype.insertAdjacentHTML,Ca=window.Element.prototype.prepend,
+Da=window.Element.prototype.append,R=window.Element.prototype.before,Ea=window.Element.prototype.after,Fa=window.Element.prototype.replaceWith,Ga=window.Element.prototype.remove,Ha=window.HTMLElement,S=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),Ia=window.HTMLElement.prototype.insertAdjacentElement,Ja=window.HTMLElement.prototype.insertAdjacentHTML;var Ka=new function(){};function La(){var a=T;window.HTMLElement=function(){function b(){var b=this.constructor,d=a.g.get(b);if(!d)throw Error("The custom element being constructed was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=G.call(document,d.localName),Object.setPrototypeOf(e,b.prototype),e.__CE_state=1,e.__CE_definition=d,x(a,e),e;d=e.length-1;var f=e[d];if(f===Ka)throw Error("The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.");
+e[d]=Ka;Object.setPrototypeOf(f,b.prototype);x(a,f);return f}b.prototype=Ha.prototype;return b}()};function U(a,b,c){function d(b){return function(c){for(var e=[],d=0;d<arguments.length;++d)e[d-0]=arguments[d];d=[];for(var f=[],n=0;n<e.length;n++){var l=e[n];l instanceof Element&&m(l)&&f.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)d.push(l);else d.push(l)}b.apply(this,e);for(e=0;e<f.length;e++)C(a,f[e]);if(m(this))for(e=0;e<d.length;e++)f=d[e],f instanceof Element&&y(a,f)}}void 0!==c.i&&(b.prepend=d(c.i));void 0!==c.append&&(b.append=d(c.append))};function Ma(){var a=T;u(Document.prototype,"createElement",function(b){if(this.__CE_hasRegistry){var c=a.a.get(b);if(c)return new c.constructor}b=G.call(this,b);x(a,b);return b});u(Document.prototype,"importNode",function(b,c){b=ja.call(this,b,c);this.__CE_hasRegistry?D(a,b):w(a,b);return b});u(Document.prototype,"createElementNS",function(b,c){if(this.__CE_hasRegistry&&(null===b||"http://www.w3.org/1999/xhtml"===b)){var d=a.a.get(c);if(d)return new d.constructor}b=ia.call(this,b,c);x(a,b);return b});
+U(a,Document.prototype,{i:ka,append:la})};function Na(){var a=T;function b(b,d){Object.defineProperty(b,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(b){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,b);else{var c=void 0;if(this.firstChild){var e=this.childNodes,h=e.length;if(0<h&&m(this)){c=Array(h);for(var g=0;g<h;g++)c[g]=e[g]}}d.set.call(this,b);if(c)for(b=0;b<c.length;b++)C(a,c[b])}}})}u(Node.prototype,"insertBefore",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);
+b=pa.call(this,b,d);if(m(this))for(d=0;d<c.length;d++)y(a,c[d]);return b}c=m(b);d=pa.call(this,b,d);c&&C(a,b);m(this)&&y(a,b);return d});u(Node.prototype,"appendChild",function(b){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=H.call(this,b);if(m(this))for(var e=0;e<c.length;e++)y(a,c[e]);return b}c=m(b);e=H.call(this,b);c&&C(a,b);m(this)&&y(a,b);return e});u(Node.prototype,"cloneNode",function(b){b=oa.call(this,b);this.ownerDocument.__CE_hasRegistry?D(a,b):w(a,
+b);return b});u(Node.prototype,"removeChild",function(b){var c=m(b),e=I.call(this,b);c&&C(a,b);return e});u(Node.prototype,"replaceChild",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=qa.call(this,b,d);if(m(this))for(C(a,d),d=0;d<c.length;d++)y(a,c[d]);return b}c=m(b);var f=qa.call(this,b,d),k=m(this);k&&C(a,d);c&&C(a,b);k&&y(a,b);return f});N&&N.get?b(Node.prototype,N):da(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){for(var a=
+[],b=0;b<this.childNodes.length;b++)a.push(this.childNodes[b].textContent);return a.join("")},set:function(a){for(;this.firstChild;)I.call(this,this.firstChild);H.call(this,document.createTextNode(a))}})})};function Oa(a){var b=Element.prototype;function c(b){return function(c){for(var e=[],d=0;d<arguments.length;++d)e[d-0]=arguments[d];d=[];for(var h=[],g=0;g<e.length;g++){var n=e[g];n instanceof Element&&m(n)&&h.push(n);if(n instanceof DocumentFragment)for(n=n.firstChild;n;n=n.nextSibling)d.push(n);else d.push(n)}b.apply(this,e);for(e=0;e<h.length;e++)C(a,h[e]);if(m(this))for(e=0;e<d.length;e++)h=d[e],h instanceof Element&&y(a,h)}}void 0!==R&&(b.before=c(R));void 0!==R&&(b.after=c(Ea));void 0!==Fa&&
+u(b,"replaceWith",function(b){for(var c=[],d=0;d<arguments.length;++d)c[d-0]=arguments[d];d=[];for(var k=[],h=0;h<c.length;h++){var g=c[h];g instanceof Element&&m(g)&&k.push(g);if(g instanceof DocumentFragment)for(g=g.firstChild;g;g=g.nextSibling)d.push(g);else d.push(g)}h=m(this);Fa.apply(this,c);for(c=0;c<k.length;c++)C(a,k[c]);if(h)for(C(a,this),c=0;c<d.length;c++)k=d[c],k instanceof Element&&y(a,k)});void 0!==Ga&&u(b,"remove",function(){var b=m(this);Ga.call(this);b&&C(a,this)})};function Pa(){var a=T;function b(b,c){Object.defineProperty(b,"innerHTML",{enumerable:c.enumerable,configurable:!0,get:c.get,set:function(b){var e=this,d=void 0;m(this)&&(d=[],q(this,function(a){a!==e&&d.push(a)}));c.set.call(this,b);if(d)for(var f=0;f<d.length;f++){var k=d[f];1===k.__CE_state&&a.disconnectedCallback(k)}this.ownerDocument.__CE_hasRegistry?D(a,this):w(a,this);return b}})}function c(b,c){u(b,"insertAdjacentElement",function(b,e){var d=m(e);b=c.call(this,b,e);d&&C(a,e);m(b)&&y(a,e);
+return b})}function d(b,c){function e(b,c){for(var e=[];b!==c;b=b.nextSibling)e.push(b);for(c=0;c<e.length;c++)D(a,e[c])}u(b,"insertAdjacentHTML",function(a,b){a=a.toLowerCase();if("beforebegin"===a){var d=this.previousSibling;c.call(this,a,b);e(d||this.parentNode.firstChild,this)}else if("afterbegin"===a)d=this.firstChild,c.call(this,a,b),e(this.firstChild,d);else if("beforeend"===a)d=this.lastChild,c.call(this,a,b),e(d||this.firstChild,null);else if("afterend"===a)d=this.nextSibling,c.call(this,
+a,b),e(this.nextSibling,d);else throw new SyntaxError("The value provided ("+String(a)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");})}ra&&u(Element.prototype,"attachShadow",function(a){return this.__CE_shadowRoot=a=ra.call(this,a)});O&&O.get?b(Element.prototype,O):S&&S.get?b(HTMLElement.prototype,S):da(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){return oa.call(this,!0).innerHTML},set:function(a){var b="template"===this.localName,c=b?this.content:
+this,e=G.call(document,this.localName);for(e.innerHTML=a;0<c.childNodes.length;)I.call(c,c.childNodes[0]);for(a=b?e.content:e;0<a.childNodes.length;)H.call(c,a.childNodes[0])}})});u(Element.prototype,"setAttribute",function(b,c){if(1!==this.__CE_state)return sa.call(this,b,c);var e=P.call(this,b);sa.call(this,b,c);c=P.call(this,b);a.attributeChangedCallback(this,b,e,c,null)});u(Element.prototype,"setAttributeNS",function(b,c,d){if(1!==this.__CE_state)return ua.call(this,b,c,d);var e=Q.call(this,b,
+c);ua.call(this,b,c,d);d=Q.call(this,b,c);a.attributeChangedCallback(this,c,e,d,b)});u(Element.prototype,"removeAttribute",function(b){if(1!==this.__CE_state)return ta.call(this,b);var c=P.call(this,b);ta.call(this,b);null!==c&&a.attributeChangedCallback(this,b,c,null,null)});u(Element.prototype,"removeAttributeNS",function(b,c){if(1!==this.__CE_state)return va.call(this,b,c);var d=Q.call(this,b,c);va.call(this,b,c);var e=Q.call(this,b,c);d!==e&&a.attributeChangedCallback(this,c,d,e,b)});Ia?c(HTMLElement.prototype,
+Ia):wa?c(Element.prototype,wa):console.warn("Custom Elements: `Element#insertAdjacentElement` was not patched.");Ja?d(HTMLElement.prototype,Ja):xa?d(Element.prototype,xa):console.warn("Custom Elements: `Element#insertAdjacentHTML` was not patched.");U(a,Element.prototype,{i:Ca,append:Da});Oa(a)};var V=window.customElements;if(!V||V.forcePolyfill||"function"!=typeof V.define||"function"!=typeof V.get){var T=new v;La();Ma();U(T,DocumentFragment.prototype,{i:ma,append:na});Na();Pa();document.__CE_hasRegistry=!0;var customElements=new F(T);Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:customElements})};/*
+
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+var W=window.customElements,X=window.HTMLImports,Qa=window.HTMLTemplateElement;window.WebComponents=window.WebComponents||{};if(W&&W.polyfillWrapFlushCallback){var Y,Ra=function(){if(Y){Qa.H&&Qa.H(window.document);var a=Y;Y=null;a();return!0}},Sa=X.whenReady;W.polyfillWrapFlushCallback(function(a){Y=a;Sa(Ra)});X.whenReady=function(a){Sa(function(){Ra()?X.whenReady(a):a()})}}
+X.whenReady(function(){requestAnimationFrame(function(){window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})});var Ta=document.createElement("style");Ta.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var Ua=document.querySelector("head");Ua.insertBefore(Ta,Ua.firstChild);/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+}).call(this);
+
+//# sourceMappingURL=webcomponents-hi-ce.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js.map
new file mode 100644
index 00000000000..ad850a2db16
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-ce.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/@webcomponents/html-imports/src/html-imports.js","node_modules/@webcomponents/custom-elements/src/Utilities.js","node_modules/@webcomponents/custom-elements/src/CustomElementInternals.js","node_modules/@webcomponents/custom-elements/src/CustomElementState.js","node_modules/@webcomponents/custom-elements/src/DocumentConstructionObserver.js","node_modules/@webcomponents/custom-elements/src/CustomElementRegistry.js","node_modules/@webcomponents/custom-elements/src/Deferred.js","node_modules/@webcomponents/custom-elements/src/Patch/Native.js","node_modules/@webcomponents/custom-elements/src/AlreadyConstructedMarker.js","node_modules/@webcomponents/custom-elements/src/Patch/HTMLElement.js","node_modules/@webcomponents/custom-elements/src/custom-elements.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ParentNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Document.js","node_modules/@webcomponents/custom-elements/src/Patch/Node.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ChildNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Element.js","node_modules/@webcomponents/custom-elements/src/Patch/DocumentFragment.js","src/post-polyfill.js","src/unresolved.js"],"names":["scope","newCustomEvent","type","params","window","CustomEvent","event","document","createEvent","initCustomEvent","bubbles","cancelable","detail","importForElement","element","useNative","ownerDocument","doc","parentNode","closest","importSelector","isImportLink","whenImportsReady","callback","imports","QSA","rootImportSelector","pending","length","forEach","imp","whenElementLoaded","whenDocumentReady","stateChanged","readyState","body","removeEventListener","addEventListener","whenReady","localName","src","firstChild","onLoadingDone","isIE","node","nodeType","Node","ELEMENT_NODE","rel","constructor","Importer","documents","inflight","dynamicImportsMO","MutationObserver","m","handleMutations","observe","head","childList","subtree","loadImports","replaceScripts","fragment","template","content","scriptsSelector","script","clone","createElement","attributes","attr","setAttribute","name","value","textContent","replaceChild","selector","childNodes","querySelectorAll","emptyNodeList","list","inverseOrder","increment","i","link","currentScript","Object","defineProperty","get","scripts","configurable","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","STYLESHEET_REGEXP","Path","fixUrls","base","href","resolveUrl","getAttribute","r","replaceUrls","text","linkUrl","regexp","replace","pre","url","post","urlPath","undefined","__workingURL","u","URL","pathname","e","__tempDoc","implementation","createHTMLDocument","__base","appendChild","__anchor","Xhr","async","load","success","fail","match","pieces","split","resource","header","indexOf","atob","decodeURIComponent","request","XMLHttpRequest","open","onload","request.onload","redirectedUrl","responseURL","getResponseHeader","location","origin","protocol","host","response","responseText","status","send","test","navigator","userAgent","links","loadImport","fireEventIfNeeded","makeDocument","processImportsIfLoadingDone","createDocumentFragment","p1","p2","innerHTML","baseEl","querySelector","removeAttribute","inlineScriptIndex","n$","importDependenciesSelector","n","importDependencyAttr","encodeURIComponent","num","disconnect","flatten","scriptsOk","stylesOk","fireEvents","waitForStyles","runScripts","DOCUMENT_FRAGMENT_NODE","cloneScript","l","s","s$","pendingScriptsSelector","pendingStylesSelector","needsMove","disabledLinkSelector","placeholder","insertBefore","nextSibling","newSibling","import","dispatchEvent","eventType","mutations","addedNodes","elem","importer","imps","target","native_baseURI","getOwnPropertyDescriptor","prototype","klass","Element","ownerDoc","call","enumerable","HTMLLinkElement","HTMLImports","reservedTagList","Set","isValidCustomElementName","reserved","has","validForm","isConnected","nativeValue","current","__CE_isImportDocument","Document","ShadowRoot","nextSiblingOrAncestorSibling","root","start","walkDeepDescendantElements","visitedImports","importNode","add","child","shadowRoot","__CE_shadowRoot","setPropertyUnchecked","destination","CustomElementInternals","_localNameToDefinition","Map","_constructorToDefinition","_patches","_hasPatches","setDefinition","definition","set","addPatch","listener","push","patchTree","patch","__CE_patched","connectTree","elements","custom","__CE_state","connectedCallback","upgradeElement","disconnectTree","disconnectedCallback","patchAndUpgradeTree","options","upgrade","gatherElements","__CE_hasRegistry","__CE_documentLoadHandled","clonedVisitedImports","delete","defaultView","localNameToDefinition","constructionStack","result","Error","pop","failed","__CE_definition","attributeChangedCallback","observedAttributes","oldValue","newValue","namespace","DocumentConstructionObserver","internals","_internals","_document","_observer","_handleMutations","bind","j","Deferred","_resolve","_value","_promise","Promise","resolve","CustomElementRegistry","_elementDefinitionIsRunning","_whenDefinedDeferred","_flushCallback","this._flushCallback","fn","_flushPending","_pendingDefinitions","_documentConstructionObserver","define","Function","TypeError","SyntaxError","getCallback","callbackValue","adoptedCallback","_flush","pendingDefinitions","elementsWithStableDefinitions","elementsWithPendingDefinitions","pendingElements","shift","pendingUpgradableElements","deferred","whenDefined","reject","prior","some","d","polyfillWrapFlushCallback","outer","inner","flush","Document_createElement","Document_createElementNS","createElementNS","Document_importNode","Document_prepend","Document_append","DocumentFragment_prepend","DocumentFragment","DocumentFragment_append","Node_cloneNode","cloneNode","Node_appendChild","Node_insertBefore","Node_removeChild","removeChild","Node_replaceChild","Node_textContent","Element_attachShadow","Element_innerHTML","Element_getAttribute","Element_setAttribute","Element_removeAttribute","Element_getAttributeNS","getAttributeNS","Element_setAttributeNS","setAttributeNS","Element_removeAttributeNS","removeAttributeNS","Element_insertAdjacentElement","Element_insertAdjacentHTML","Element_prepend","Element_append","Element_before","Element_after","Element_replaceWith","Element_remove","HTMLElement","HTMLElement_innerHTML","HTMLElement_insertAdjacentElement","HTMLElement_insertAdjacentHTML","$jscompDefaultExport","AlreadyConstructedMarker","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElement.call","setPrototypeOf","lastIndex","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement","builtIn","appendPrependPatch","builtInMethod","flattenedNodes","connectedElements","nodes","apply","prepend","append","deep","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_importNode.call","NS_HTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElementNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_append","patch_textContent","baseDescriptor","assignedValue","TEXT_NODE","removedNodes","childNodesLength","Array","refNode","insertedNodes","slice","nativeResult","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_insertBefore.call","nodeWasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_appendChild.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_cloneNode.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_removeChild.call","nodeToInsert","nodeToRemove","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_replaceChild.call","nodeToInsertWasConnected","thisIsConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent.get","parts","join","createTextNode","beforeAfterPatch","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_before","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_after","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_replaceWith","wasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_remove","patch_innerHTML","htmlString","removedElements","patch_insertAdjacentElement","baseMethod","position","insertedElement","patch_insertAdjacentHTML","upgradeNodesInRange","end","toLowerCase","marker","previousSibling","lastChild","String","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow","init","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML.get","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML.get","isTemplate","rawElement","container","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentElement","console","warn","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_append","priorCustomElements","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_append","customElements","Template","WebComponents","flushCallback","runAndClearCallback","bootstrap","cb","origWhenReady","requestAnimationFrame","ready","style"],"mappings":"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","file":"webcomponents-hi-ce.js","sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(scope => {\n\n /********************* base setup *********************/\n const link = document.createElement('link');\n const useNative = Boolean('import' in link);\n const emptyNodeList = link.querySelectorAll('*');\n\n // Polyfill `currentScript` for browsers without it.\n let currentScript = null;\n if ('currentScript' in document === false) {\n Object.defineProperty(document, 'currentScript', {\n get() {\n return currentScript ||\n // NOTE: only works when called in synchronously executing code.\n // readyState should check if `loading` but IE10 is\n // interactive when scripts run so we cheat. This is not needed by\n // html-imports polyfill but helps generally polyfill `currentScript`.\n (document.readyState !== 'complete' ?\n document.scripts[document.scripts.length - 1] : null);\n },\n configurable: true\n });\n }\n\n /**\n * @param {Array|NodeList|NamedNodeMap} list\n * @param {!Function} callback\n * @param {boolean=} inverseOrder\n */\n const forEach = (list, callback, inverseOrder) => {\n const length = list ? list.length : 0;\n const increment = inverseOrder ? -1 : 1;\n let i = inverseOrder ? length - 1 : 0;\n for (; i < length && i >= 0; i = i + increment) {\n callback(list[i], i);\n }\n };\n\n /**\n * @param {!Node} node\n * @param {!string} selector\n * @return {!NodeList<!Element>}\n */\n const QSA = (node, selector) => {\n // IE 11 throws a SyntaxError if a node with no children is queried with\n // a selector containing the `:not([type])` syntax.\n if (!node.childNodes.length) {\n return emptyNodeList;\n }\n return node.querySelectorAll(selector);\n };\n\n /**\n * @param {!DocumentFragment} fragment\n */\n const replaceScripts = (fragment) => {\n forEach(QSA(fragment, 'template'), template => {\n forEach(QSA(template.content, scriptsSelector), script => {\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n forEach(script.attributes, attr => clone.setAttribute(attr.name, attr.value));\n clone.textContent = script.textContent;\n script.parentNode.replaceChild(clone, script);\n });\n replaceScripts(template.content);\n });\n };\n\n /********************* path fixup *********************/\n const CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n const CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n const STYLESHEET_REGEXP = /(<link[^>]*)(rel=['|\"]?stylesheet['|\"]?[^>]*>)/g;\n\n // path fixup: style elements in imports must be made relative to the main\n // document. We fixup url's in url() and @import.\n const Path = {\n\n fixUrls(element, base) {\n if (element.href) {\n element.setAttribute('href',\n Path.resolveUrl(element.getAttribute('href'), base));\n }\n if (element.src) {\n element.setAttribute('src',\n Path.resolveUrl(element.getAttribute('src'), base));\n }\n if (element.localName === 'style') {\n const r = Path.replaceUrls(element.textContent, base, CSS_URL_REGEXP);\n element.textContent = Path.replaceUrls(r, base, CSS_IMPORT_REGEXP);\n }\n },\n\n replaceUrls(text, linkUrl, regexp) {\n return text.replace(regexp, (m, pre, url, post) => {\n let urlPath = url.replace(/[\"']/g, '');\n if (linkUrl) {\n urlPath = Path.resolveUrl(urlPath, linkUrl);\n }\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n },\n\n resolveUrl(url, base) {\n // Lazy feature detection.\n if (Path.__workingURL === undefined) {\n Path.__workingURL = false;\n try {\n const u = new URL('b', 'http://a');\n u.pathname = 'c%20d';\n Path.__workingURL = (u.href === 'http://a/c%20d');\n } catch (e) {}\n }\n\n if (Path.__workingURL) {\n return (new URL(url, base)).href;\n }\n\n // Fallback to creating an anchor into a disconnected document.\n let doc = Path.__tempDoc;\n if (!doc) {\n doc = document.implementation.createHTMLDocument('temp');\n Path.__tempDoc = doc;\n doc.__base = doc.createElement('base');\n doc.head.appendChild(doc.__base);\n doc.__anchor = doc.createElement('a');\n }\n doc.__base.href = base;\n doc.__anchor.href = url;\n return doc.__anchor.href || url;\n }\n };\n\n /********************* Xhr processor *********************/\n const Xhr = {\n\n async: true,\n\n /**\n * @param {!string} url\n * @param {!function(!string, string=)} success\n * @param {!function(!string)} fail\n */\n load(url, success, fail) {\n if (!url) {\n fail('error: href must be specified');\n } else if (url.match(/^data:/)) {\n // Handle Data URI Scheme\n const pieces = url.split(',');\n const header = pieces[0];\n let resource = pieces[1];\n if (header.indexOf(';base64') > -1) {\n resource = atob(resource);\n } else {\n resource = decodeURIComponent(resource);\n }\n success(resource);\n } else {\n const request = new XMLHttpRequest();\n request.open('GET', url, Xhr.async);\n request.onload = () => {\n // Servers redirecting an import can add a Location header to help us\n // polyfill correctly. Handle relative and full paths.\n // Prefer responseURL which already resolves redirects\n // https://xhr.spec.whatwg.org/#the-responseurl-attribute\n let redirectedUrl = request.responseURL || request.getResponseHeader('Location');\n if (redirectedUrl && redirectedUrl.indexOf('/') === 0) {\n // In IE location.origin might not work\n // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7\n const origin = (location.origin || location.protocol + '//' + location.host);\n redirectedUrl = origin + redirectedUrl;\n }\n const resource = /** @type {string} */ (request.response || request.responseText);\n if (request.status === 304 || request.status === 0 ||\n request.status >= 200 && request.status < 300) {\n success(resource, redirectedUrl);\n } else {\n fail(resource);\n }\n };\n request.send();\n }\n }\n };\n\n /********************* importer *********************/\n\n const isIE = /Trident/.test(navigator.userAgent) ||\n /Edge\\/\\d./i.test(navigator.userAgent);\n\n const importSelector = 'link[rel=import]';\n\n // Used to disable loading of resources.\n const importDisableType = 'import-disable';\n\n const disabledLinkSelector = `link[rel=stylesheet][href][type=${importDisableType}]`;\n\n const scriptsSelector = `script:not([type]),script[type=\"application/javascript\"],` +\n `script[type=\"text/javascript\"]`;\n\n const importDependenciesSelector = `${importSelector},${disabledLinkSelector},` +\n `style:not([type]),link[rel=stylesheet][href]:not([type]),` + scriptsSelector;\n\n const importDependencyAttr = 'import-dependency';\n\n const rootImportSelector = `${importSelector}:not([${importDependencyAttr}])`;\n\n const pendingScriptsSelector = `script[${importDependencyAttr}]`;\n\n const pendingStylesSelector = `style[${importDependencyAttr}],` +\n `link[rel=stylesheet][${importDependencyAttr}]`;\n\n /**\n * Importer will:\n * - load any linked import documents (with deduping)\n * - whenever an import is loaded, prompt the parser to try to parse\n * - observe imported documents for new elements (these are handled via the\n * dynamic importer)\n */\n class Importer {\n constructor() {\n this.documents = {};\n // Used to keep track of pending loads, so that flattening and firing of\n // events can be done when all resources are ready.\n this.inflight = 0;\n this.dynamicImportsMO = new MutationObserver(m => this.handleMutations(m));\n // Observe changes on <head>.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n // 1. Load imports contents\n // 2. Assign them to first import links on the document\n // 3. Wait for import styles & scripts to be done loading/running\n // 4. Fire load/error events\n this.loadImports(document);\n }\n\n /**\n * @param {!(HTMLDocument|DocumentFragment|Element)} doc\n */\n loadImports(doc) {\n const links = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(links, link => this.loadImport(link));\n }\n\n /**\n * @param {!HTMLLinkElement} link\n */\n loadImport(link) {\n const url = link.href;\n // This resource is already being handled by another import.\n if (this.documents[url] !== undefined) {\n // If import is already loaded, we can safely associate it to the link\n // and fire the load/error event.\n const imp = this.documents[url];\n if (imp && imp['__loaded']) {\n link['__import'] = imp;\n this.fireEventIfNeeded(link);\n }\n return;\n }\n this.inflight++;\n // Mark it as pending to notify others this url is being loaded.\n this.documents[url] = 'pending';\n Xhr.load(url, (resource, redirectedUrl) => {\n const doc = this.makeDocument(resource, redirectedUrl || url);\n this.documents[url] = doc;\n this.inflight--;\n // Load subtree.\n this.loadImports(doc);\n this.processImportsIfLoadingDone();\n }, () => {\n // If load fails, handle error.\n this.documents[url] = null;\n this.inflight--;\n this.processImportsIfLoadingDone();\n });\n }\n\n /**\n * Creates a new document containing resource and normalizes urls accordingly.\n * @param {string=} resource\n * @param {string=} url\n * @return {!DocumentFragment}\n */\n makeDocument(resource, url) {\n if (!resource) {\n return document.createDocumentFragment();\n }\n\n if (isIE) {\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order. We disable the loading by\n // setting the type before setting innerHTML to avoid loading\n // resources twice.\n resource = resource.replace(STYLESHEET_REGEXP, (match, p1, p2) => {\n if (match.indexOf('type=') === -1) {\n return `${p1} type=${importDisableType} ${p2}`;\n }\n return match;\n });\n }\n\n let content;\n const template = /** @type {!HTMLTemplateElement} */\n (document.createElement('template'));\n template.innerHTML = resource;\n if (template.content) {\n content = template.content;\n // Clone scripts inside templates since they won't execute when the\n // hosting template is cloned.\n replaceScripts(content);\n } else {\n // <template> not supported, create fragment and move content into it.\n content = document.createDocumentFragment();\n while (template.firstChild) {\n content.appendChild(template.firstChild);\n }\n }\n\n // Support <base> in imported docs. Resolve url and remove its href.\n const baseEl = content.querySelector('base');\n if (baseEl) {\n url = Path.resolveUrl(baseEl.getAttribute('href'), url);\n baseEl.removeAttribute('href');\n }\n\n const n$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)>} */\n (QSA(content, importDependenciesSelector));\n // For source map hints.\n let inlineScriptIndex = 0;\n forEach(n$, n => {\n // Listen for load/error events, then fix urls.\n whenElementLoaded(n);\n Path.fixUrls(n, url);\n // Mark for easier selectors.\n n.setAttribute(importDependencyAttr, '');\n // Generate source map hints for inline scripts.\n if (n.localName === 'script' && !n.src && n.textContent) {\n const num = inlineScriptIndex ? `-${inlineScriptIndex}` : '';\n const content = n.textContent + `\\n//# sourceURL=${url}${num}.js\\n`;\n // We use the src attribute so it triggers load/error events, and it's\n // easier to capture errors (e.g. parsing) like this.\n n.setAttribute('src', 'data:text/javascript;charset=utf-8,' + encodeURIComponent(content));\n n.textContent = '';\n inlineScriptIndex++;\n }\n });\n return content;\n }\n\n /**\n * Waits for loaded imports to finish loading scripts and styles, then fires\n * the load/error events.\n */\n processImportsIfLoadingDone() {\n // Wait until all resources are ready, then load import resources.\n if (this.inflight) return;\n\n // Stop observing, flatten & load resource, then restart observing <head>.\n this.dynamicImportsMO.disconnect();\n this.flatten(document);\n // We wait for styles to load, and at the same time we execute the scripts,\n // then fire the load/error events for imports to have faster whenReady\n // callback execution.\n // NOTE: This is different for native behavior where scripts would be\n // executed after the styles before them are loaded.\n // To achieve that, we could select pending styles and scripts in the\n // document and execute them sequentially in their dom order.\n let scriptsOk = false,\n stylesOk = false;\n const onLoadingDone = () => {\n if (stylesOk && scriptsOk) {\n // Catch any imports that might have been added while we\n // weren't looking, wait for them as well.\n this.loadImports(document);\n if (this.inflight) return;\n\n // Restart observing.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n this.fireEvents();\n }\n }\n this.waitForStyles(() => {\n stylesOk = true;\n onLoadingDone();\n });\n this.runScripts(() => {\n scriptsOk = true;\n onLoadingDone();\n });\n }\n\n /**\n * @param {!HTMLDocument} doc\n */\n flatten(doc) {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(n$, n => {\n const imp = this.documents[n.href];\n n['__import'] = /** @type {!Document} */ (imp);\n if (imp && imp.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n // We set the .import to be the link itself, and update its readyState.\n // Other links with the same href will point to this link.\n this.documents[n.href] = n;\n n.readyState = 'loading';\n n['__import'] = n;\n this.flatten(imp);\n n.appendChild(imp);\n }\n });\n }\n\n /**\n * Replaces all the imported scripts with a clone in order to execute them.\n * Updates the `currentScript`.\n * @param {!function()} callback\n */\n runScripts(callback) {\n const s$ = QSA(document, pendingScriptsSelector);\n const l = s$.length;\n const cloneScript = i => {\n if (i < l) {\n // The pending scripts have been generated through innerHTML and\n // browsers won't execute them for security reasons. We cannot use\n // s.cloneNode(true) either, the only way to run the script is manually\n // creating a new element and copying its attributes.\n const s = s$[i];\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n // Remove import-dependency attribute to avoid double cloning.\n s.removeAttribute(importDependencyAttr);\n forEach(s.attributes, attr => clone.setAttribute(attr.name, attr.value));\n // Update currentScript and replace original with clone script.\n currentScript = clone;\n s.parentNode.replaceChild(clone, s);\n whenElementLoaded(clone, () => {\n currentScript = null;\n cloneScript(i + 1);\n });\n } else {\n callback();\n }\n };\n cloneScript(0);\n }\n\n /**\n * Waits for all the imported stylesheets/styles to be loaded.\n * @param {!function()} callback\n */\n waitForStyles(callback) {\n const s$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLStyleElement)>} */\n (QSA(document, pendingStylesSelector));\n let pending = s$.length;\n if (!pending) {\n callback();\n return;\n }\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10472273/\n // If there is one <link rel=stylesheet> imported, we must move all imported\n // links and styles to <head>.\n const needsMove = isIE && !!document.querySelector(disabledLinkSelector);\n forEach(s$, s => {\n // Listen for load/error events, remove selector once is done loading.\n whenElementLoaded(s, () => {\n s.removeAttribute(importDependencyAttr);\n if (--pending === 0) {\n callback();\n }\n });\n // Check if was already moved to head, to handle the case where the element\n // has already been moved but it is still loading.\n if (needsMove && s.parentNode !== document.head) {\n // Replace the element we're about to move with a placeholder.\n const placeholder = document.createElement(s.localName);\n // Add reference of the moved element.\n placeholder['__appliedElement'] = s;\n // Disable this from appearing in document.styleSheets.\n placeholder.setAttribute('type', 'import-placeholder');\n // Append placeholder next to the sibling, and move original to <head>.\n s.parentNode.insertBefore(placeholder, s.nextSibling);\n let newSibling = importForElement(s);\n while (newSibling && importForElement(newSibling)) {\n newSibling = importForElement(newSibling);\n }\n if (newSibling.parentNode !== document.head) {\n newSibling = null;\n }\n document.head.insertBefore(s, newSibling);\n // Enable the loading of <link rel=stylesheet>.\n s.removeAttribute('type');\n }\n });\n }\n\n /**\n * Fires load/error events for imports in the right order .\n */\n fireEvents() {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n // Inverse order to have events firing bottom-up.\n forEach(n$, n => this.fireEventIfNeeded(n), true);\n }\n\n /**\n * Fires load/error event for the import if this wasn't done already.\n * @param {!HTMLLinkElement} link\n */\n fireEventIfNeeded(link) {\n // Don't fire twice same event.\n if (!link['__loaded']) {\n link['__loaded'] = true;\n // Update link's import readyState.\n link.import && (link.import.readyState = 'complete');\n const eventType = link.import ? 'load' : 'error';\n link.dispatchEvent(newCustomEvent(eventType, {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }));\n }\n }\n\n /**\n * @param {Array<MutationRecord>} mutations\n */\n handleMutations(mutations) {\n forEach(mutations, m => forEach(m.addedNodes, elem => {\n if (elem && elem.nodeType === Node.ELEMENT_NODE) {\n // NOTE: added scripts are not updating currentScript in IE.\n if (isImportLink(elem)) {\n this.loadImport( /** @type {!HTMLLinkElement} */ (elem));\n } else {\n this.loadImports( /** @type {!Element} */ (elem));\n }\n }\n }));\n }\n }\n\n /**\n * @param {!Node} node\n * @return {boolean}\n */\n const isImportLink = node => {\n return node.nodeType === Node.ELEMENT_NODE && node.localName === 'link' &&\n ( /** @type {!HTMLLinkElement} */ (node).rel === 'import');\n };\n\n /**\n * Waits for an element to finish loading. If already done loading, it will\n * mark the element accordingly.\n * @param {!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)} element\n * @param {function()=} callback\n */\n const whenElementLoaded = (element, callback) => {\n if (element['__loaded']) {\n callback && callback();\n } else if ((element.localName === 'script' && !element.src) ||\n (element.localName === 'style' && !element.firstChild)) {\n // Inline scripts and empty styles don't trigger load/error events,\n // consider them already loaded.\n element['__loaded'] = true;\n callback && callback();\n } else {\n const onLoadingDone = event => {\n element.removeEventListener(event.type, onLoadingDone);\n element['__loaded'] = true;\n callback && callback();\n };\n element.addEventListener('load', onLoadingDone);\n // NOTE: We listen only for load events in IE/Edge, because in IE/Edge\n // <style> with @import will fire error events for each failing @import,\n // and finally will trigger the load event when all @import are\n // finished (even if all fail).\n if (!isIE || element.localName !== 'style') {\n element.addEventListener('error', onLoadingDone);\n }\n }\n }\n\n /**\n * Calls the callback when all imports in the document at call time\n * (or at least document ready) have loaded. Callback is called synchronously\n * if imports are already done loading.\n * @param {function()=} callback\n */\n const whenReady = callback => {\n // 1. ensure the document is in a ready state (has dom), then\n // 2. watch for loading of imports and call callback when done\n whenDocumentReady(() => whenImportsReady(() => callback && callback()));\n }\n\n /**\n * Invokes the callback when document is in ready state. Callback is called\n * synchronously if document is already done loading.\n * @param {!function()} callback\n */\n const whenDocumentReady = callback => {\n const stateChanged = () => {\n // NOTE: Firefox can hit readystate interactive without document.body existing.\n // This is anti-spec, but we handle it here anyways by waiting for next change.\n if (document.readyState !== 'loading' && !!document.body) {\n document.removeEventListener('readystatechange', stateChanged);\n callback();\n }\n }\n document.addEventListener('readystatechange', stateChanged);\n stateChanged();\n }\n\n /**\n * Invokes the callback after all imports are loaded. Callback is called\n * synchronously if imports are already done loading.\n * @param {!function()} callback\n */\n const whenImportsReady = callback => {\n let imports = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, rootImportSelector));\n let pending = imports.length;\n if (!pending) {\n callback();\n return;\n }\n forEach(imports, imp => whenElementLoaded(imp, () => {\n if (--pending === 0) {\n callback();\n }\n }));\n }\n\n /**\n * Returns the import document containing the element.\n * @param {!Node} element\n * @return {HTMLLinkElement|Document|undefined}\n */\n const importForElement = element => {\n if (useNative) {\n // Return only if not in the main doc!\n return element.ownerDocument !== document ? element.ownerDocument : null;\n }\n let doc = element['__importDoc'];\n if (!doc && element.parentNode) {\n doc = /** @type {!Element} */ (element.parentNode);\n if (typeof doc.closest === 'function') {\n // Element.closest returns the element itself if it matches the selector,\n // so we search the closest import starting from the parent.\n doc = doc.closest(importSelector);\n } else {\n // Walk up the parent tree until we find an import.\n while (!isImportLink(doc) && (doc = doc.parentNode)) {}\n }\n element['__importDoc'] = doc;\n }\n return doc;\n }\n\n let importer = null;\n /**\n * Ensures imports contained in the element are imported.\n * Use this to handle dynamic imports attached to body.\n * @param {!(HTMLDocument|Element)} doc\n */\n const loadImports = (doc) => {\n if (importer) {\n importer.loadImports(doc);\n }\n };\n\n const newCustomEvent = (type, params) => {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(type, params);\n }\n const event = /** @type {!CustomEvent} */ (document.createEvent('CustomEvent'));\n event.initCustomEvent(type, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return event;\n };\n\n if (useNative) {\n // Check for imports that might already be done loading by the time this\n // script is actually executed. Native imports are blocking, so the ones\n // available in the document by this time should already have failed\n // or have .import defined.\n const imps = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n forEach(imps, imp => {\n if (!imp.import || imp.import.readyState !== 'loading') {\n imp['__loaded'] = true;\n }\n });\n // Listen for load/error events to capture dynamically added scripts.\n /**\n * @type {!function(!Event)}\n */\n const onLoadingDone = event => {\n const elem = /** @type {!Element} */ (event.target);\n if (isImportLink(elem)) {\n elem['__loaded'] = true;\n }\n };\n document.addEventListener('load', onLoadingDone, true /* useCapture */ );\n document.addEventListener('error', onLoadingDone, true /* useCapture */ );\n } else {\n // Override baseURI so that imported elements' baseURI can be used seemlessly\n // on native or polyfilled html-imports.\n // NOTE: a <link rel=import> will have `link.baseURI === link.href`, as the link\n // itself is used as the `import` document.\n /** @type {Object|undefined} */\n const native_baseURI = Object.getOwnPropertyDescriptor(Node.prototype, 'baseURI');\n // NOTE: if not configurable (e.g. safari9), set it on the Element prototype. \n const klass = !native_baseURI || native_baseURI.configurable ? Node : Element;\n Object.defineProperty(klass.prototype, 'baseURI', {\n get() {\n const ownerDoc = /** @type {HTMLLinkElement} */ (isImportLink(this) ? this : importForElement(this));\n if (ownerDoc) return ownerDoc.href;\n // Use native baseURI if possible.\n if (native_baseURI && native_baseURI.get) return native_baseURI.get.call(this);\n // Polyfill it if not available.\n const base = /** @type {HTMLBaseElement} */ (document.querySelector('base'));\n return (base || window.location).href;\n },\n configurable: true,\n enumerable: true\n });\n\n // Define 'import' read-only property.\n Object.defineProperty(HTMLLinkElement.prototype, 'import', {\n get() {\n return /** @type {HTMLLinkElement} */ (this)['__import'] || null;\n },\n configurable: true,\n enumerable: true\n });\n\n whenDocumentReady(() => {\n importer = new Importer()\n });\n }\n\n /**\n Add support for the `HTMLImportsLoaded` event and the `HTMLImports.whenReady`\n method. This api is necessary because unlike the native implementation,\n script elements do not force imports to resolve. Instead, users should wrap\n code in either an `HTMLImportsLoaded` handler or after load time in an\n `HTMLImports.whenReady(callback)` call.\n\n NOTE: This module also supports these apis under the native implementation.\n Therefore, if this file is loaded, the same code can be used under both\n the polyfill and native implementation.\n */\n whenReady(() => document.dispatchEvent(newCustomEvent('HTMLImportsLoaded', {\n cancelable: true,\n bubbles: true,\n detail: undefined\n })));\n\n // exports\n scope.useNative = useNative;\n scope.whenReady = whenReady;\n scope.importForElement = importForElement;\n scope.loadImports = loadImports;\n\n})(window.HTMLImports = (window.HTMLImports || {}));","const reservedTagList = new Set([\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-src',\n 'font-face-uri',\n 'font-face-format',\n 'font-face-name',\n 'missing-glyph',\n]);\n\n/**\n * @param {string} localName\n * @returns {boolean}\n */\nexport function isValidCustomElementName(localName) {\n const reserved = reservedTagList.has(localName);\n const validForm = /^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(localName);\n return !reserved && validForm;\n}\n\n/**\n * @private\n * @param {!Node} node\n * @return {boolean}\n */\nexport function isConnected(node) {\n // Use `Node#isConnected`, if defined.\n const nativeValue = node.isConnected;\n if (nativeValue !== undefined) {\n return nativeValue;\n }\n\n /** @type {?Node|undefined} */\n let current = node;\n while (current && !(current.__CE_isImportDocument || current instanceof Document)) {\n current = current.parentNode || (window.ShadowRoot && current instanceof ShadowRoot ? current.host : undefined);\n }\n return !!(current && (current.__CE_isImportDocument || current instanceof Document));\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextSiblingOrAncestorSibling(root, start) {\n let node = start;\n while (node && node !== root && !node.nextSibling) {\n node = node.parentNode;\n }\n return (!node || node === root) ? null : node.nextSibling;\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextNode(root, start) {\n return start.firstChild ? start.firstChild : nextSiblingOrAncestorSibling(root, start);\n}\n\n/**\n * @param {!Node} root\n * @param {!function(!Element)} callback\n * @param {!Set<Node>=} visitedImports\n */\nexport function walkDeepDescendantElements(root, callback, visitedImports = new Set()) {\n let node = root;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = /** @type {!Element} */(node);\n\n callback(element);\n\n const localName = element.localName;\n if (localName === 'link' && element.getAttribute('rel') === 'import') {\n // If this import (polyfilled or not) has it's root node available,\n // walk it.\n const importNode = /** @type {!Node} */ (element.import);\n if (importNode instanceof Node && !visitedImports.has(importNode)) {\n // Prevent multiple walks of the same import root.\n visitedImports.add(importNode);\n\n for (let child = importNode.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n\n // Ignore descendants of import links to prevent attempting to walk the\n // elements created by the HTML Imports polyfill that we just walked\n // above.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n } else if (localName === 'template') {\n // Ignore descendants of templates. There shouldn't be any descendants\n // because they will be moved into `.content` during construction in\n // browsers that support template but, in case they exist and are still\n // waiting to be moved by a polyfill, they will be ignored.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n }\n\n // Walk shadow roots.\n const shadowRoot = element.__CE_shadowRoot;\n if (shadowRoot) {\n for (let child = shadowRoot.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n }\n\n node = nextNode(root, node);\n }\n}\n\n/**\n * Used to suppress Closure's \"Modifying the prototype is only allowed if the\n * constructor is in the same scope\" warning without using\n * `@suppress {newCheckTypes, duplicate}` because `newCheckTypes` is too broad.\n *\n * @param {!Object} destination\n * @param {string} name\n * @param {*} value\n */\nexport function setPropertyUnchecked(destination, name, value) {\n destination[name] = value;\n}\n","import * as Utilities from './Utilities.js';\nimport CEState from './CustomElementState.js';\n\nexport default class CustomElementInternals {\n constructor() {\n /** @type {!Map<string, !CustomElementDefinition>} */\n this._localNameToDefinition = new Map();\n\n /** @type {!Map<!Function, !CustomElementDefinition>} */\n this._constructorToDefinition = new Map();\n\n /** @type {!Array<!function(!Node)>} */\n this._patches = [];\n\n /** @type {boolean} */\n this._hasPatches = false;\n }\n\n /**\n * @param {string} localName\n * @param {!CustomElementDefinition} definition\n */\n setDefinition(localName, definition) {\n this._localNameToDefinition.set(localName, definition);\n this._constructorToDefinition.set(definition.constructor, definition);\n }\n\n /**\n * @param {string} localName\n * @return {!CustomElementDefinition|undefined}\n */\n localNameToDefinition(localName) {\n return this._localNameToDefinition.get(localName);\n }\n\n /**\n * @param {!Function} constructor\n * @return {!CustomElementDefinition|undefined}\n */\n constructorToDefinition(constructor) {\n return this._constructorToDefinition.get(constructor);\n }\n\n /**\n * @param {!function(!Node)} listener\n */\n addPatch(listener) {\n this._hasPatches = true;\n this._patches.push(listener);\n }\n\n /**\n * @param {!Node} node\n */\n patchTree(node) {\n if (!this._hasPatches) return;\n\n Utilities.walkDeepDescendantElements(node, element => this.patch(element));\n }\n\n /**\n * @param {!Node} node\n */\n patch(node) {\n if (!this._hasPatches) return;\n\n if (node.__CE_patched) return;\n node.__CE_patched = true;\n\n for (let i = 0; i < this._patches.length; i++) {\n this._patches[i](node);\n }\n }\n\n /**\n * @param {!Node} root\n */\n connectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.connectedCallback(element);\n } else {\n this.upgradeElement(element);\n }\n }\n }\n\n /**\n * @param {!Node} root\n */\n disconnectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.disconnectedCallback(element);\n }\n }\n }\n\n /**\n * Upgrades all uncustomized custom elements at and below a root node for\n * which there is a definition. When custom element reaction callbacks are\n * assumed to be called synchronously (which, by the current DOM / HTML spec\n * definitions, they are *not*), callbacks for both elements customized\n * synchronously by the parser and elements being upgraded occur in the same\n * relative order.\n *\n * NOTE: This function, when used to simulate the construction of a tree that\n * is already created but not customized (i.e. by the parser), does *not*\n * prevent the element from reading the 'final' (true) state of the tree. For\n * example, the element, during truly synchronous parsing / construction would\n * see that it contains no children as they have not yet been inserted.\n * However, this function does not modify the tree, the element will\n * (incorrectly) have children. Additionally, self-modification restrictions\n * for custom element constructors imposed by the DOM spec are *not* enforced.\n *\n *\n * The following nested list shows the steps extending down from the HTML\n * spec's parsing section that cause elements to be synchronously created and\n * upgraded:\n *\n * The \"in body\" insertion mode:\n * https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n * - Switch on token:\n * .. other cases ..\n * -> Any other start tag\n * - [Insert an HTML element](below) for the token.\n *\n * Insert an HTML element:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-an-html-element\n * - Insert a foreign element for the token in the HTML namespace:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-a-foreign-element\n * - Create an element for a token:\n * https://html.spec.whatwg.org/multipage/syntax.html#create-an-element-for-the-token\n * - Will execute script flag is true?\n * - (Element queue pushed to the custom element reactions stack.)\n * - Create an element:\n * https://dom.spec.whatwg.org/#concept-create-element\n * - Sync CE flag is true?\n * - Constructor called.\n * - Self-modification restrictions enforced.\n * - Sync CE flag is false?\n * - (Upgrade reaction enqueued.)\n * - Attributes appended to element.\n * (`attributeChangedCallback` reactions enqueued.)\n * - Will execute script flag is true?\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n * - (Element queue pushed to the custom element reactions stack.)\n * - Insert the element:\n * https://dom.spec.whatwg.org/#concept-node-insert\n * - Shadow-including descendants are connected. During parsing\n * construction, there are no shadow-*excluding* descendants.\n * However, the constructor may have validly attached a shadow\n * tree to itself and added descendants to that shadow tree.\n * (`connectedCallback` reactions enqueued.)\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n *\n * @param {!Node} root\n * @param {{\n * visitedImports: (!Set<!Node>|undefined),\n * upgrade: (!function(!Element)|undefined),\n * }=} options\n */\n patchAndUpgradeTree(root, options = {}) {\n const visitedImports = options.visitedImports || new Set();\n const upgrade = options.upgrade || (element => this.upgradeElement(element));\n\n const elements = [];\n\n const gatherElements = element => {\n if (element.localName === 'link' && element.getAttribute('rel') === 'import') {\n // The HTML Imports polyfill sets a descendant element of the link to\n // the `import` property, specifically this is *not* a Document.\n const importNode = /** @type {?Node} */ (element.import);\n\n if (importNode instanceof Node) {\n importNode.__CE_isImportDocument = true;\n // Connected links are associated with the registry.\n importNode.__CE_hasRegistry = true;\n }\n\n if (importNode && importNode.readyState === 'complete') {\n importNode.__CE_documentLoadHandled = true;\n } else {\n // If this link's import root is not available, its contents can't be\n // walked. Wait for 'load' and walk it when it's ready.\n element.addEventListener('load', () => {\n const importNode = /** @type {!Node} */ (element.import);\n\n if (importNode.__CE_documentLoadHandled) return;\n importNode.__CE_documentLoadHandled = true;\n\n // Clone the `visitedImports` set that was populated sync during\n // the `patchAndUpgradeTree` call that caused this 'load' handler to\n // be added. Then, remove *this* link's import node so that we can\n // walk that import again, even if it was partially walked later\n // during the same `patchAndUpgradeTree` call.\n const clonedVisitedImports = new Set(visitedImports);\n clonedVisitedImports.delete(importNode);\n\n this.patchAndUpgradeTree(importNode, {visitedImports: clonedVisitedImports, upgrade});\n });\n }\n } else {\n elements.push(element);\n }\n };\n\n // `walkDeepDescendantElements` populates (and internally checks against)\n // `visitedImports` when traversing a loaded import.\n Utilities.walkDeepDescendantElements(root, gatherElements, visitedImports);\n\n if (this._hasPatches) {\n for (let i = 0; i < elements.length; i++) {\n this.patch(elements[i]);\n }\n }\n\n for (let i = 0; i < elements.length; i++) {\n upgrade(elements[i]);\n }\n }\n\n /**\n * @param {!Element} element\n */\n upgradeElement(element) {\n const currentState = element.__CE_state;\n if (currentState !== undefined) return;\n\n // Prevent elements created in documents without a browsing context from\n // upgrading.\n //\n // https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition\n // \"If document does not have a browsing context, return null.\"\n //\n // https://html.spec.whatwg.org/multipage/window-object.html#dom-document-defaultview\n // \"The defaultView IDL attribute of the Document interface, on getting,\n // must return this Document's browsing context's WindowProxy object, if\n // this Document has an associated browsing context, or null otherwise.\"\n const ownerDocument = element.ownerDocument;\n if (\n !ownerDocument.defaultView &&\n !(ownerDocument.__CE_isImportDocument && ownerDocument.__CE_hasRegistry)\n ) return;\n\n const definition = this.localNameToDefinition(element.localName);\n if (!definition) return;\n\n definition.constructionStack.push(element);\n\n const constructor = definition.constructor;\n try {\n try {\n let result = new (constructor)();\n if (result !== element) {\n throw new Error('The custom element constructor did not produce the element being upgraded.');\n }\n } finally {\n definition.constructionStack.pop();\n }\n } catch (e) {\n element.__CE_state = CEState.failed;\n throw e;\n }\n\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n\n if (definition.attributeChangedCallback) {\n const observedAttributes = definition.observedAttributes;\n for (let i = 0; i < observedAttributes.length; i++) {\n const name = observedAttributes[i];\n const value = element.getAttribute(name);\n if (value !== null) {\n this.attributeChangedCallback(element, name, null, value, null);\n }\n }\n }\n\n if (Utilities.isConnected(element)) {\n this.connectedCallback(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n connectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.connectedCallback) {\n definition.connectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n disconnectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.disconnectedCallback) {\n definition.disconnectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n * @param {string} name\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\n attributeChangedCallback(element, name, oldValue, newValue, namespace) {\n const definition = element.__CE_definition;\n if (\n definition.attributeChangedCallback &&\n definition.observedAttributes.indexOf(name) > -1\n ) {\n definition.attributeChangedCallback.call(element, name, oldValue, newValue, namespace);\n }\n }\n}\n","/**\n * @enum {number}\n */\nconst CustomElementState = {\n custom: 1,\n failed: 2,\n};\n\nexport default CustomElementState;\n","import CustomElementInternals from './CustomElementInternals.js';\n\nexport default class DocumentConstructionObserver {\n constructor(internals, doc) {\n /**\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @type {!Document}\n */\n this._document = doc;\n\n /**\n * @type {MutationObserver|undefined}\n */\n this._observer = undefined;\n\n\n // Simulate tree construction for all currently accessible nodes in the\n // document.\n this._internals.patchAndUpgradeTree(this._document);\n\n if (this._document.readyState === 'loading') {\n this._observer = new MutationObserver(this._handleMutations.bind(this));\n\n // Nodes created by the parser are given to the observer *before* the next\n // task runs. Inline scripts are run in a new task. This means that the\n // observer will be able to handle the newly parsed nodes before the inline\n // script is run.\n this._observer.observe(this._document, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n disconnect() {\n if (this._observer) {\n this._observer.disconnect();\n }\n }\n\n /**\n * @param {!Array<!MutationRecord>} mutations\n */\n _handleMutations(mutations) {\n // Once the document's `readyState` is 'interactive' or 'complete', all new\n // nodes created within that document will be the result of script and\n // should be handled by patching.\n const readyState = this._document.readyState;\n if (readyState === 'interactive' || readyState === 'complete') {\n this.disconnect();\n }\n\n for (let i = 0; i < mutations.length; i++) {\n const addedNodes = mutations[i].addedNodes;\n for (let j = 0; j < addedNodes.length; j++) {\n const node = addedNodes[j];\n this._internals.patchAndUpgradeTree(node);\n }\n }\n }\n}\n","import CustomElementInternals from './CustomElementInternals.js';\nimport DocumentConstructionObserver from './DocumentConstructionObserver.js';\nimport Deferred from './Deferred.js';\nimport * as Utilities from './Utilities.js';\n\n/**\n * @unrestricted\n */\nexport default class CustomElementRegistry {\n\n /**\n * @param {!CustomElementInternals} internals\n */\n constructor(internals) {\n /**\n * @private\n * @type {boolean}\n */\n this._elementDefinitionIsRunning = false;\n\n /**\n * @private\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @private\n * @type {!Map<string, !Deferred<undefined>>}\n */\n this._whenDefinedDeferred = new Map();\n\n /**\n * The default flush callback triggers the document walk synchronously.\n * @private\n * @type {!Function}\n */\n this._flushCallback = fn => fn();\n\n /**\n * @private\n * @type {boolean}\n */\n this._flushPending = false;\n\n /**\n * @private\n * @type {!Array<!CustomElementDefinition>}\n */\n this._pendingDefinitions = [];\n\n /**\n * @private\n * @type {!DocumentConstructionObserver}\n */\n this._documentConstructionObserver = new DocumentConstructionObserver(internals, document);\n }\n\n /**\n * @param {string} localName\n * @param {!Function} constructor\n */\n define(localName, constructor) {\n if (!(constructor instanceof Function)) {\n throw new TypeError('Custom element constructors must be functions.');\n }\n\n if (!Utilities.isValidCustomElementName(localName)) {\n throw new SyntaxError(`The element name '${localName}' is not valid.`);\n }\n\n if (this._internals.localNameToDefinition(localName)) {\n throw new Error(`A custom element with name '${localName}' has already been defined.`);\n }\n\n if (this._elementDefinitionIsRunning) {\n throw new Error('A custom element is already being defined.');\n }\n this._elementDefinitionIsRunning = true;\n\n let connectedCallback;\n let disconnectedCallback;\n let adoptedCallback;\n let attributeChangedCallback;\n let observedAttributes;\n try {\n /** @type {!Object} */\n const prototype = constructor.prototype;\n if (!(prototype instanceof Object)) {\n throw new TypeError('The custom element constructor\\'s prototype is not an object.');\n }\n\n function getCallback(name) {\n const callbackValue = prototype[name];\n if (callbackValue !== undefined && !(callbackValue instanceof Function)) {\n throw new Error(`The '${name}' callback must be a function.`);\n }\n return callbackValue;\n }\n\n connectedCallback = getCallback('connectedCallback');\n disconnectedCallback = getCallback('disconnectedCallback');\n adoptedCallback = getCallback('adoptedCallback');\n attributeChangedCallback = getCallback('attributeChangedCallback');\n observedAttributes = constructor['observedAttributes'] || [];\n } catch (e) {\n return;\n } finally {\n this._elementDefinitionIsRunning = false;\n }\n\n const definition = {\n localName,\n constructor,\n connectedCallback,\n disconnectedCallback,\n adoptedCallback,\n attributeChangedCallback,\n observedAttributes,\n constructionStack: [],\n };\n\n this._internals.setDefinition(localName, definition);\n this._pendingDefinitions.push(definition);\n\n // If we've already called the flush callback and it hasn't called back yet,\n // don't call it again.\n if (!this._flushPending) {\n this._flushPending = true;\n this._flushCallback(() => this._flush());\n }\n }\n\n upgrade(element) {\n this._internals.patchAndUpgradeTree(element);\n }\n\n _flush() {\n // If no new definitions were defined, don't attempt to flush. This could\n // happen if a flush callback keeps the function it is given and calls it\n // multiple times.\n if (this._flushPending === false) return;\n this._flushPending = false;\n\n const pendingDefinitions = this._pendingDefinitions;\n\n /**\n * Unupgraded elements with definitions that were defined *before* the last\n * flush, in document order.\n * @type {!Array<!Element>}\n */\n const elementsWithStableDefinitions = [];\n\n /**\n * A map from `localName`s of definitions that were defined *after* the last\n * flush to unupgraded elements matching that definition, in document order.\n * @type {!Map<string, !Array<!Element>>}\n */\n const elementsWithPendingDefinitions = new Map();\n for (let i = 0; i < pendingDefinitions.length; i++) {\n elementsWithPendingDefinitions.set(pendingDefinitions[i].localName, []);\n }\n\n this._internals.patchAndUpgradeTree(document, {\n upgrade: element => {\n // Ignore the element if it has already upgraded or failed to upgrade.\n if (element.__CE_state !== undefined) return;\n\n const localName = element.localName;\n\n // If there is an applicable pending definition for the element, add the\n // element to the list of elements to be upgraded with that definition.\n const pendingElements = elementsWithPendingDefinitions.get(localName);\n if (pendingElements) {\n pendingElements.push(element);\n // If there is *any other* applicable definition for the element, add it\n // to the list of elements with stable definitions that need to be upgraded.\n } else if (this._internals.localNameToDefinition(localName)) {\n elementsWithStableDefinitions.push(element);\n }\n },\n });\n\n // Upgrade elements with 'stable' definitions first.\n for (let i = 0; i < elementsWithStableDefinitions.length; i++) {\n this._internals.upgradeElement(elementsWithStableDefinitions[i]);\n }\n\n // Upgrade elements with 'pending' definitions in the order they were defined.\n while (pendingDefinitions.length > 0) {\n const definition = pendingDefinitions.shift();\n const localName = definition.localName;\n\n // Attempt to upgrade all applicable elements.\n const pendingUpgradableElements = elementsWithPendingDefinitions.get(definition.localName);\n for (let i = 0; i < pendingUpgradableElements.length; i++) {\n this._internals.upgradeElement(pendingUpgradableElements[i]);\n }\n\n // Resolve any promises created by `whenDefined` for the definition.\n const deferred = this._whenDefinedDeferred.get(localName);\n if (deferred) {\n deferred.resolve(undefined);\n }\n }\n }\n\n /**\n * @param {string} localName\n * @return {Function|undefined}\n */\n get(localName) {\n const definition = this._internals.localNameToDefinition(localName);\n if (definition) {\n return definition.constructor;\n }\n\n return undefined;\n }\n\n /**\n * @param {string} localName\n * @return {!Promise<undefined>}\n */\n whenDefined(localName) {\n if (!Utilities.isValidCustomElementName(localName)) {\n return Promise.reject(new SyntaxError(`'${localName}' is not a valid custom element name.`));\n }\n\n const prior = this._whenDefinedDeferred.get(localName);\n if (prior) {\n return prior.toPromise();\n }\n\n const deferred = new Deferred();\n this._whenDefinedDeferred.set(localName, deferred);\n\n const definition = this._internals.localNameToDefinition(localName);\n // Resolve immediately only if the given local name has a definition *and*\n // the full document walk to upgrade elements with that local name has\n // already happened.\n if (definition && !this._pendingDefinitions.some(d => d.localName === localName)) {\n deferred.resolve(undefined);\n }\n\n return deferred.toPromise();\n }\n\n polyfillWrapFlushCallback(outer) {\n this._documentConstructionObserver.disconnect();\n const inner = this._flushCallback;\n this._flushCallback = flush => outer(() => inner(flush));\n }\n}\n\n// Closure compiler exports.\nwindow['CustomElementRegistry'] = CustomElementRegistry;\nCustomElementRegistry.prototype['define'] = CustomElementRegistry.prototype.define;\nCustomElementRegistry.prototype['upgrade'] = CustomElementRegistry.prototype.upgrade;\nCustomElementRegistry.prototype['get'] = CustomElementRegistry.prototype.get;\nCustomElementRegistry.prototype['whenDefined'] = CustomElementRegistry.prototype.whenDefined;\nCustomElementRegistry.prototype['polyfillWrapFlushCallback'] = CustomElementRegistry.prototype.polyfillWrapFlushCallback;\n","/**\n * @template T\n */\nexport default class Deferred {\n constructor() {\n /**\n * @private\n * @type {T|undefined}\n */\n this._value = undefined;\n\n /**\n * @private\n * @type {Function|undefined}\n */\n this._resolve = undefined;\n\n /**\n * @private\n * @type {!Promise<T>}\n */\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n\n if (this._value) {\n resolve(this._value);\n }\n });\n }\n\n /**\n * @param {T} value\n */\n resolve(value) {\n if (this._value) {\n throw new Error('Already resolved.');\n }\n\n this._value = value;\n\n if (this._resolve) {\n this._resolve(value);\n }\n }\n\n /**\n * @return {!Promise<T>}\n */\n toPromise() {\n return this._promise;\n }\n}\n","export default {\n Document_createElement: window.Document.prototype.createElement,\n Document_createElementNS: window.Document.prototype.createElementNS,\n Document_importNode: window.Document.prototype.importNode,\n Document_prepend: window.Document.prototype['prepend'],\n Document_append: window.Document.prototype['append'],\n DocumentFragment_prepend: window.DocumentFragment.prototype['prepend'],\n DocumentFragment_append: window.DocumentFragment.prototype['append'],\n Node_cloneNode: window.Node.prototype.cloneNode,\n Node_appendChild: window.Node.prototype.appendChild,\n Node_insertBefore: window.Node.prototype.insertBefore,\n Node_removeChild: window.Node.prototype.removeChild,\n Node_replaceChild: window.Node.prototype.replaceChild,\n Node_textContent: Object.getOwnPropertyDescriptor(window.Node.prototype, 'textContent'),\n Element_attachShadow: window.Element.prototype['attachShadow'],\n Element_innerHTML: Object.getOwnPropertyDescriptor(window.Element.prototype, 'innerHTML'),\n Element_getAttribute: window.Element.prototype.getAttribute,\n Element_setAttribute: window.Element.prototype.setAttribute,\n Element_removeAttribute: window.Element.prototype.removeAttribute,\n Element_getAttributeNS: window.Element.prototype.getAttributeNS,\n Element_setAttributeNS: window.Element.prototype.setAttributeNS,\n Element_removeAttributeNS: window.Element.prototype.removeAttributeNS,\n Element_insertAdjacentElement: window.Element.prototype['insertAdjacentElement'],\n Element_insertAdjacentHTML: window.Element.prototype['insertAdjacentHTML'],\n Element_prepend: window.Element.prototype['prepend'],\n Element_append: window.Element.prototype['append'],\n Element_before: window.Element.prototype['before'],\n Element_after: window.Element.prototype['after'],\n Element_replaceWith: window.Element.prototype['replaceWith'],\n Element_remove: window.Element.prototype['remove'],\n HTMLElement: window.HTMLElement,\n HTMLElement_innerHTML: Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, 'innerHTML'),\n HTMLElement_insertAdjacentElement: window.HTMLElement.prototype['insertAdjacentElement'],\n HTMLElement_insertAdjacentHTML: window.HTMLElement.prototype['insertAdjacentHTML'],\n};\n","/**\n * This class exists only to work around Closure's lack of a way to describe\n * singletons. It represents the 'already constructed marker' used in custom\n * element construction stacks.\n *\n * https://html.spec.whatwg.org/#concept-already-constructed-marker\n */\nclass AlreadyConstructedMarker {}\n\nexport default new AlreadyConstructedMarker();\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport AlreadyConstructedMarker from '../AlreadyConstructedMarker.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n window['HTMLElement'] = (function() {\n /**\n * @type {function(new: HTMLElement): !HTMLElement}\n */\n function HTMLElement() {\n // This should really be `new.target` but `new.target` can't be emulated\n // in ES5. Assuming the user keeps the default value of the constructor's\n // prototype's `constructor` property, this is equivalent.\n /** @type {!Function} */\n const constructor = this.constructor;\n\n const definition = internals.constructorToDefinition(constructor);\n if (!definition) {\n throw new Error('The custom element being constructed was not registered with `customElements`.');\n }\n\n const constructionStack = definition.constructionStack;\n\n if (constructionStack.length === 0) {\n const element = Native.Document_createElement.call(document, definition.localName);\n Object.setPrototypeOf(element, constructor.prototype);\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n internals.patch(element);\n return element;\n }\n\n const lastIndex = constructionStack.length - 1;\n const element = constructionStack[lastIndex];\n if (element === AlreadyConstructedMarker) {\n throw new Error('The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.');\n }\n constructionStack[lastIndex] = AlreadyConstructedMarker;\n\n Object.setPrototypeOf(element, constructor.prototype);\n internals.patch(/** @type {!HTMLElement} */ (element));\n\n return element;\n }\n\n HTMLElement.prototype = Native.HTMLElement.prototype;\n\n return HTMLElement;\n })();\n};\n","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\nimport CustomElementInternals from './CustomElementInternals.js';\nimport CustomElementRegistry from './CustomElementRegistry.js';\n\nimport PatchHTMLElement from './Patch/HTMLElement.js';\nimport PatchDocument from './Patch/Document.js';\nimport PatchDocumentFragment from './Patch/DocumentFragment.js';\nimport PatchNode from './Patch/Node.js';\nimport PatchElement from './Patch/Element.js';\n\nconst priorCustomElements = window['customElements'];\n\nif (!priorCustomElements ||\n priorCustomElements['forcePolyfill'] ||\n (typeof priorCustomElements['define'] != 'function') ||\n (typeof priorCustomElements['get'] != 'function')) {\n /** @type {!CustomElementInternals} */\n const internals = new CustomElementInternals();\n\n PatchHTMLElement(internals);\n PatchDocument(internals);\n PatchDocumentFragment(internals);\n PatchNode(internals);\n PatchElement(internals);\n\n // The main document is always associated with the registry.\n document.__CE_hasRegistry = true;\n\n /** @type {!CustomElementRegistry} */\n const customElements = new CustomElementRegistry(internals);\n\n Object.defineProperty(window, 'customElements', {\n configurable: true,\n enumerable: true,\n value: customElements,\n });\n}\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * prepend: !function(...(!Node|string)),\n * append: !function(...(!Node|string)),\n * }}\n */\nlet ParentNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ParentNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function appendPrependPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.prepend !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'prepend', appendPrependPatch(builtIn.prepend));\n }\n\n if (builtIn.append !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'append', appendPrependPatch(builtIn.append));\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n Utilities.setPropertyUnchecked(Document.prototype, 'createElement',\n /**\n * @this {Document}\n * @param {string} localName\n * @return {!Element}\n */\n function(localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElement.call(this, localName));\n internals.patch(result);\n return result;\n });\n\n Utilities.setPropertyUnchecked(Document.prototype, 'importNode',\n /**\n * @this {Document}\n * @param {!Node} node\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(node, deep) {\n const clone = Native.Document_importNode.call(this, node, deep);\n // Only create custom elements if this document is associated with the registry.\n if (!this.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n const NS_HTML = \"http://www.w3.org/1999/xhtml\";\n\n Utilities.setPropertyUnchecked(Document.prototype, 'createElementNS',\n /**\n * @this {Document}\n * @param {?string} namespace\n * @param {string} localName\n * @return {!Element}\n */\n function(namespace, localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry && (namespace === null || namespace === NS_HTML)) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElementNS.call(this, namespace, localName));\n internals.patch(result);\n return result;\n });\n\n PatchParentNode(internals, Document.prototype, {\n prepend: Native.Document_prepend,\n append: Native.Document_append,\n });\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n // `Node#nodeValue` is implemented on `Attr`.\n // `Node#textContent` is implemented on `Attr`, `Element`.\n\n Utilities.setPropertyUnchecked(Node.prototype, 'insertBefore',\n /**\n * @this {Node}\n * @param {!Node} node\n * @param {?Node} refNode\n * @return {!Node}\n */\n function(node, refNode) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'appendChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'cloneNode',\n /**\n * @this {Node}\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(deep) {\n const clone = Native.Node_cloneNode.call(this, deep);\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'removeChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_removeChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'replaceChild',\n /**\n * @this {Node}\n * @param {!Node} nodeToInsert\n * @param {!Node} nodeToRemove\n * @return {!Node}\n */\n function(nodeToInsert, nodeToRemove) {\n if (nodeToInsert instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(nodeToInsert.childNodes);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n internals.disconnectTree(nodeToRemove);\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeToInsertWasConnected = Utilities.isConnected(nodeToInsert);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n const thisIsConnected = Utilities.isConnected(this);\n\n if (thisIsConnected) {\n internals.disconnectTree(nodeToRemove);\n }\n\n if (nodeToInsertWasConnected) {\n internals.disconnectTree(nodeToInsert);\n }\n\n if (thisIsConnected) {\n internals.connectTree(nodeToInsert);\n }\n\n return nativeResult;\n });\n\n\n function patch_textContent(destination, baseDescriptor) {\n Object.defineProperty(destination, 'textContent', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Node} */ function(assignedValue) {\n // If this is a text node then there are no nodes to disconnect.\n if (this.nodeType === Node.TEXT_NODE) {\n baseDescriptor.set.call(this, assignedValue);\n return;\n }\n\n let removedNodes = undefined;\n // Checking for `firstChild` is faster than reading `childNodes.length`\n // to compare with 0.\n if (this.firstChild) {\n // Using `childNodes` is faster than `children`, even though we only\n // care about elements.\n const childNodes = this.childNodes;\n const childNodesLength = childNodes.length;\n if (childNodesLength > 0 && Utilities.isConnected(this)) {\n // Copying an array by iterating is faster than using slice.\n removedNodes = new Array(childNodesLength);\n for (let i = 0; i < childNodesLength; i++) {\n removedNodes[i] = childNodes[i];\n }\n }\n }\n\n baseDescriptor.set.call(this, assignedValue);\n\n if (removedNodes) {\n for (let i = 0; i < removedNodes.length; i++) {\n internals.disconnectTree(removedNodes[i]);\n }\n }\n },\n });\n }\n\n if (Native.Node_textContent && Native.Node_textContent.get) {\n patch_textContent(Node.prototype, Native.Node_textContent);\n } else {\n internals.addPatch(function(element) {\n patch_textContent(element, {\n enumerable: true,\n configurable: true,\n // NOTE: This implementation of the `textContent` getter assumes that\n // text nodes' `textContent` getter will not be patched.\n get: /** @this {Node} */ function() {\n /** @type {!Array<string>} */\n const parts = [];\n\n for (let i = 0; i < this.childNodes.length; i++) {\n parts.push(this.childNodes[i].textContent);\n }\n\n return parts.join('');\n },\n set: /** @this {Node} */ function(assignedValue) {\n while (this.firstChild) {\n Native.Node_removeChild.call(this, this.firstChild);\n }\n Native.Node_appendChild.call(this, document.createTextNode(assignedValue));\n },\n });\n });\n }\n};\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * before: !function(...(!Node|string)),\n * after: !function(...(!Node|string)),\n * replaceWith: !function(...(!Node|string)),\n * remove: !function(),\n * }}\n */\nlet ChildNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ChildNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function beforeAfterPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'before', beforeAfterPatch(builtIn.before));\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'after', beforeAfterPatch(builtIn.after));\n }\n\n if (builtIn.replaceWith !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'replaceWith',\n /**\n * @param {...(!Node|string)} nodes\n */\n function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.replaceWith.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (wasConnected) {\n internals.disconnectTree(this);\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n });\n }\n\n if (builtIn.remove !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'remove',\n function() {\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.remove.call(this);\n\n if (wasConnected) {\n internals.disconnectTree(this);\n }\n });\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\nimport PatchChildNode from './Interface/ChildNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n if (Native.Element_attachShadow) {\n Utilities.setPropertyUnchecked(Element.prototype, 'attachShadow',\n /**\n * @this {Element}\n * @param {!{mode: string}} init\n * @return {ShadowRoot}\n */\n function(init) {\n const shadowRoot = Native.Element_attachShadow.call(this, init);\n this.__CE_shadowRoot = shadowRoot;\n return shadowRoot;\n });\n }\n\n\n function patch_innerHTML(destination, baseDescriptor) {\n Object.defineProperty(destination, 'innerHTML', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Element} */ function(htmlString) {\n const isConnected = Utilities.isConnected(this);\n\n // NOTE: In IE11, when using the native `innerHTML` setter, all nodes\n // that were previously descendants of the context element have all of\n // their children removed as part of the set - the entire subtree is\n // 'disassembled'. This work around walks the subtree *before* using the\n // native setter.\n /** @type {!Array<!Element>|undefined} */\n let removedElements = undefined;\n if (isConnected) {\n removedElements = [];\n Utilities.walkDeepDescendantElements(this, element => {\n if (element !== this) {\n removedElements.push(element);\n }\n });\n }\n\n baseDescriptor.set.call(this, htmlString);\n\n if (removedElements) {\n for (let i = 0; i < removedElements.length; i++) {\n const element = removedElements[i];\n if (element.__CE_state === CEState.custom) {\n internals.disconnectedCallback(element);\n }\n }\n }\n\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(this);\n } else {\n internals.patchAndUpgradeTree(this);\n }\n return htmlString;\n },\n });\n }\n\n if (Native.Element_innerHTML && Native.Element_innerHTML.get) {\n patch_innerHTML(Element.prototype, Native.Element_innerHTML);\n } else if (Native.HTMLElement_innerHTML && Native.HTMLElement_innerHTML.get) {\n patch_innerHTML(HTMLElement.prototype, Native.HTMLElement_innerHTML);\n } else {\n\n internals.addPatch(function(element) {\n patch_innerHTML(element, {\n enumerable: true,\n configurable: true,\n // Implements getting `innerHTML` by performing an unpatched `cloneNode`\n // of the element and returning the resulting element's `innerHTML`.\n // TODO: Is this too expensive?\n get: /** @this {Element} */ function() {\n return Native.Node_cloneNode.call(this, true).innerHTML;\n },\n // Implements setting `innerHTML` by creating an unpatched element,\n // setting `innerHTML` of that element and replacing the target\n // element's children with those of the unpatched element.\n set: /** @this {Element} */ function(assignedValue) {\n // NOTE: re-route to `content` for `template` elements.\n // We need to do this because `template.appendChild` does not\n // route into `template.content`.\n const isTemplate = (this.localName === 'template');\n /** @type {!Node} */\n const content = isTemplate ? (/** @type {!HTMLTemplateElement} */\n (this)).content : this;\n /** @type {!Node} */\n const rawElement = Native.Document_createElement.call(document,\n this.localName);\n rawElement.innerHTML = assignedValue;\n\n while (content.childNodes.length > 0) {\n Native.Node_removeChild.call(content, content.childNodes[0]);\n }\n const container = isTemplate ? rawElement.content : rawElement;\n while (container.childNodes.length > 0) {\n Native.Node_appendChild.call(content, container.childNodes[0]);\n }\n },\n });\n });\n }\n\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttribute',\n /**\n * @this {Element}\n * @param {string} name\n * @param {string} newValue\n */\n function(name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttribute.call(this, name, newValue);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_setAttribute.call(this, name, newValue);\n newValue = Native.Element_getAttribute.call(this, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, null);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n * @param {string} newValue\n */\n function(namespace, name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttribute',\n /**\n * @this {Element}\n * @param {string} name\n */\n function(name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttribute.call(this, name);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_removeAttribute.call(this, name);\n if (oldValue !== null) {\n internals.attributeChangedCallback(this, name, oldValue, null, null);\n }\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n */\n function(namespace, name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttributeNS.call(this, namespace, name);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_removeAttributeNS.call(this, namespace, name);\n // In older browsers, `Element#getAttributeNS` may return the empty string\n // instead of null if the attribute does not exist. For details, see;\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNS#Notes\n const newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n if (oldValue !== newValue) {\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n }\n });\n\n\n function patch_insertAdjacentElement(destination, baseMethod) {\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentElement',\n /**\n * @this {Element}\n * @param {string} position\n * @param {!Element} element\n * @return {?Element}\n */\n function(position, element) {\n const wasConnected = Utilities.isConnected(element);\n const insertedElement = /** @type {!Element} */\n (baseMethod.call(this, position, element));\n\n if (wasConnected) {\n internals.disconnectTree(element);\n }\n\n if (Utilities.isConnected(insertedElement)) {\n internals.connectTree(element);\n }\n return insertedElement;\n });\n }\n\n if (Native.HTMLElement_insertAdjacentElement) {\n patch_insertAdjacentElement(HTMLElement.prototype, Native.HTMLElement_insertAdjacentElement);\n } else if (Native.Element_insertAdjacentElement) {\n patch_insertAdjacentElement(Element.prototype, Native.Element_insertAdjacentElement);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentElement` was not patched.');\n }\n\n\n function patch_insertAdjacentHTML(destination, baseMethod) {\n /**\n * Patches and upgrades all nodes which are siblings between `start`\n * (inclusive) and `end` (exclusive). If `end` is `null`, then all siblings\n * following `start` will be patched and upgraded.\n * @param {!Node} start\n * @param {?Node} end\n */\n function upgradeNodesInRange(start, end) {\n const nodes = [];\n for (let node = start; node !== end; node = node.nextSibling) {\n nodes.push(node);\n }\n for (let i = 0; i < nodes.length; i++) {\n internals.patchAndUpgradeTree(nodes[i]);\n }\n }\n\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentHTML',\n /**\n * @this {Element}\n * @param {string} position\n * @param {string} text\n */\n function(position, text) {\n position = position.toLowerCase();\n\n if (position === \"beforebegin\") {\n const marker = this.previousSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(\n /** @type {!Node} */ (marker || this.parentNode.firstChild), this);\n } else if (position === \"afterbegin\") {\n const marker = this.firstChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.firstChild), marker);\n } else if (position === \"beforeend\") {\n const marker = this.lastChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(marker || this.firstChild, null);\n } else if (position === \"afterend\") {\n const marker = this.nextSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.nextSibling), marker);\n } else {\n throw new SyntaxError(`The value provided (${String(position)}) is ` +\n \"not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.\");\n }\n });\n }\n\n if (Native.HTMLElement_insertAdjacentHTML) {\n patch_insertAdjacentHTML(HTMLElement.prototype, Native.HTMLElement_insertAdjacentHTML);\n } else if (Native.Element_insertAdjacentHTML) {\n patch_insertAdjacentHTML(Element.prototype, Native.Element_insertAdjacentHTML);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentHTML` was not patched.');\n }\n\n\n PatchParentNode(internals, Element.prototype, {\n prepend: Native.Element_prepend,\n append: Native.Element_append,\n });\n\n PatchChildNode(internals, Element.prototype, {\n before: Native.Element_before,\n after: Native.Element_after,\n replaceWith: Native.Element_replaceWith,\n remove: Native.Element_remove,\n });\n};\n","import CustomElementInternals from '../CustomElementInternals.js';\nimport Native from './Native.js';\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n PatchParentNode(internals, DocumentFragment.prototype, {\n prepend: Native.DocumentFragment_prepend,\n append: Native.DocumentFragment_append,\n });\n};\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\nlet customElements = window['customElements'];\nlet HTMLImports = window['HTMLImports'];\nlet Template = window['HTMLTemplateElement'];\n\n// global for (1) existence means `WebComponentsReady` will file,\n// (2) WebComponents.ready == true means event has fired.\nwindow.WebComponents = window.WebComponents || {};\n\nif (customElements && customElements['polyfillWrapFlushCallback']) {\n // Here we ensure that the public `HTMLImports.whenReady`\n // always comes *after* custom elements have upgraded.\n let flushCallback;\n let runAndClearCallback = function runAndClearCallback() {\n if (flushCallback) {\n // make sure to run the HTMLTemplateElement polyfill before custom elements upgrade\n if (Template.bootstrap) {\n Template.bootstrap(window.document);\n }\n let cb = flushCallback;\n flushCallback = null;\n cb();\n return true;\n }\n }\n let origWhenReady = HTMLImports['whenReady'];\n customElements['polyfillWrapFlushCallback'](function(cb) {\n flushCallback = cb;\n origWhenReady(runAndClearCallback);\n });\n\n HTMLImports['whenReady'] = function(cb) {\n origWhenReady(function() {\n // custom element code may add dynamic imports\n // to match processing of native custom elements before\n // domContentLoaded, we wait for these imports to resolve first.\n if (runAndClearCallback()) {\n HTMLImports['whenReady'](cb);\n } else {\n cb();\n }\n });\n }\n\n}\n\nHTMLImports['whenReady'](function() {\n requestAnimationFrame(function() {\n window.WebComponents.ready = true;\n document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));\n });\n});","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n// It's desireable to provide a default stylesheet\n// that's convenient for styling unresolved elements, but\n// it's cumbersome to have to include this manually in every page.\n// It would make sense to put inside some HTMLImport but\n// the HTMLImports polyfill does not allow loading of stylesheets\n// that block rendering. Therefore this injection is tolerated here.\n//\n// NOTE: position: relative fixes IE's failure to inherit opacity\n// when a child is not statically positioned.\nlet style = document.createElement('style');\nstyle.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;'\n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden; position: relative;'\n + ' } \\n'\n ;\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js
new file mode 100644
index 00000000000..8a1a917a94f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js
@@ -0,0 +1,198 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){/*
+
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var n,q="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};function ca(){ca=function(){};q.Symbol||(q.Symbol=da)}var da=function(){var a=0;return function(b){return"jscomp_symbol_"+(b||"")+a++}}();
+function ea(){ca();var a=q.Symbol.iterator;a||(a=q.Symbol.iterator=q.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&ba(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return fa(this)}});ea=function(){}}function fa(a){var b=0;return ha(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})}function ha(a){ea();a={next:a};a[q.Symbol.iterator]=function(){return this};return a}function ia(a){ea();var b=a[Symbol.iterator];return b?b.call(a):fa(a)}
+function ka(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}
+(function(a){function b(a,b){if("function"===typeof window.CustomEvent)return new CustomEvent(a,b);var c=document.createEvent("CustomEvent");c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c}function c(a){if(E)return a.ownerDocument!==document?a.ownerDocument:null;var b=a.__importDoc;if(!b&&a.parentNode){b=a.parentNode;if("function"===typeof b.closest)b=b.closest("link[rel=import]");else for(;!g(b)&&(b=b.parentNode););a.__importDoc=b}return b}function d(a){var b=m(document,"link[rel=import]:not([import-dependency])"),
+c=b.length;c?p(b,function(b){return h(b,function(){0===--c&&a()})}):a()}function e(a){function b(){"loading"!==document.readyState&&document.body&&(document.removeEventListener("readystatechange",b),a())}document.addEventListener("readystatechange",b);b()}function f(a){e(function(){return d(function(){return a&&a()})})}function h(a,b){if(a.__loaded)b&&b();else if("script"===a.localName&&!a.src||"style"===a.localName&&!a.firstChild)a.__loaded=!0,b&&b();else{var c=function(d){a.removeEventListener(d.type,
+c);a.__loaded=!0;b&&b()};a.addEventListener("load",c);Pa&&"style"===a.localName||a.addEventListener("error",c)}}function g(a){return a.nodeType===Node.ELEMENT_NODE&&"link"===a.localName&&"import"===a.rel}function k(){var a=this;this.a={};this.b=0;this.c=new MutationObserver(function(b){return a.Ka(b)});this.c.observe(document.head,{childList:!0,subtree:!0});this.loadImports(document)}function l(a){p(m(a,"template"),function(a){p(m(a.content,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){var b=document.createElement("script");p(a.attributes,function(a){return b.setAttribute(a.name,a.value)});b.textContent=a.textContent;a.parentNode.replaceChild(b,a)});l(a.content)})}function m(a,b){return a.childNodes.length?a.querySelectorAll(b):aa}function p(a,b,c){var d=a?a.length:0,e=c?-1:1;for(c=c?d-1:0;c<d&&0<=c;c+=e)b(a[c],c)}var z=document.createElement("link"),E="import"in z,aa=z.querySelectorAll("*"),Qa=null;!1==="currentScript"in document&&Object.defineProperty(document,"currentScript",
+{get:function(){return Qa||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null)},configurable:!0});var ke=/(url\()([^)]*)(\))/g,le=/(@import[\s]+(?!url\())([^;]*)(;)/g,me=/(<link[^>]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,H={Ea:function(a,b){a.href&&a.setAttribute("href",H.U(a.getAttribute("href"),b));a.src&&a.setAttribute("src",H.U(a.getAttribute("src"),b));if("style"===a.localName){var c=H.oa(a.textContent,b,ke);a.textContent=H.oa(c,b,le)}},oa:function(a,b,c){return a.replace(c,
+function(a,c,d,e){a=d.replace(/["']/g,"");b&&(a=H.U(a,b));return c+"'"+a+"'"+e})},U:function(a,b){if(void 0===H.$){H.$=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";H.$="http://a/c%20d"===c.href}catch(gg){}}if(H.$)return(new URL(a,b)).href;c=H.va;c||(c=document.implementation.createHTMLDocument("temp"),H.va=c,c.ha=c.createElement("base"),c.head.appendChild(c.ha),c.ga=c.createElement("a"));c.ha.href=b;c.ga.href=a;return c.ga.href||a}},Xb={async:!0,load:function(a,b,c){if(a)if(a.match(/^data:/)){a=
+a.split(",");var d=a[1];d=-1<a[0].indexOf(";base64")?atob(d):decodeURIComponent(d);b(d)}else{var e=new XMLHttpRequest;e.open("GET",a,Xb.async);e.onload=function(){var a=e.responseURL||e.getResponseHeader("Location");a&&0===a.indexOf("/")&&(a=(location.origin||location.protocol+"//"+location.host)+a);var d=e.response||e.responseText;304===e.status||0===e.status||200<=e.status&&300>e.status?b(d,a):c(d)};e.send()}else c("error: href must be specified")}},Pa=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);
+k.prototype.loadImports=function(a){var b=this;a=m(a,"link[rel=import]");p(a,function(a){return b.m(a)})};k.prototype.m=function(a){var b=this,c=a.href;if(void 0!==this.a[c]){var d=this.a[c];d&&d.__loaded&&(a.__import=d,this.g(a))}else this.b++,this.a[c]="pending",Xb.load(c,function(a,d){a=b.La(a,d||c);b.a[c]=a;b.b--;b.loadImports(a);b.H()},function(){b.a[c]=null;b.b--;b.H()})};k.prototype.La=function(a,b){if(!a)return document.createDocumentFragment();Pa&&(a=a.replace(me,function(a,b,c){return-1===
+a.indexOf("type=")?b+" type=import-disable "+c:a}));var c=document.createElement("template");c.innerHTML=a;if(c.content)a=c.content,l(a);else for(a=document.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);if(c=a.querySelector("base"))b=H.U(c.getAttribute("href"),b),c.removeAttribute("href");c=m(a,'link[rel=import],link[rel=stylesheet][href][type=import-disable],style:not([type]),link[rel=stylesheet][href]:not([type]),script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');
+var d=0;p(c,function(a){h(a);H.Ea(a,b);a.setAttribute("import-dependency","");"script"===a.localName&&!a.src&&a.textContent&&(a.setAttribute("src","data:text/javascript;charset=utf-8,"+encodeURIComponent(a.textContent+("\n//# sourceURL="+b+(d?"-"+d:"")+".js\n"))),a.textContent="",d++)});return a};k.prototype.H=function(){var a=this;if(!this.b){this.c.disconnect();this.flatten(document);var b=!1,c=!1,d=function(){c&&b&&(a.loadImports(document),a.b||(a.c.observe(document.head,{childList:!0,subtree:!0}),
+a.Ia()))};this.Na(function(){c=!0;d()});this.Ma(function(){b=!0;d()})}};k.prototype.flatten=function(a){var b=this;a=m(a,"link[rel=import]");p(a,function(a){var c=b.a[a.href];(a.__import=c)&&c.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(b.a[a.href]=a,a.readyState="loading",a.__import=a,b.flatten(c),a.appendChild(c))})};k.prototype.Ma=function(a){function b(e){if(e<d){var f=c[e],g=document.createElement("script");f.removeAttribute("import-dependency");p(f.attributes,function(a){return g.setAttribute(a.name,
+a.value)});Qa=g;f.parentNode.replaceChild(g,f);h(g,function(){Qa=null;b(e+1)})}else a()}var c=m(document,"script[import-dependency]"),d=c.length;b(0)};k.prototype.Na=function(a){var b=m(document,"style[import-dependency],link[rel=stylesheet][import-dependency]"),d=b.length;if(d){var e=Pa&&!!document.querySelector("link[rel=stylesheet][href][type=import-disable]");p(b,function(b){h(b,function(){b.removeAttribute("import-dependency");0===--d&&a()});if(e&&b.parentNode!==document.head){var f=document.createElement(b.localName);
+f.__appliedElement=b;f.setAttribute("type","import-placeholder");b.parentNode.insertBefore(f,b.nextSibling);for(f=c(b);f&&c(f);)f=c(f);f.parentNode!==document.head&&(f=null);document.head.insertBefore(b,f);b.removeAttribute("type")}})}else a()};k.prototype.Ia=function(){var a=this,b=m(document,"link[rel=import]");p(b,function(b){return a.g(b)},!0)};k.prototype.g=function(a){a.__loaded||(a.__loaded=!0,a.import&&(a.import.readyState="complete"),a.dispatchEvent(b(a.import?"load":"error",{bubbles:!1,
+cancelable:!1,detail:void 0})))};k.prototype.Ka=function(a){var b=this;p(a,function(a){return p(a.addedNodes,function(a){a&&a.nodeType===Node.ELEMENT_NODE&&(g(a)?b.m(a):b.loadImports(a))})})};var Ra=null;if(E)z=m(document,"link[rel=import]"),p(z,function(a){a.import&&"loading"===a.import.readyState||(a.__loaded=!0)}),z=function(a){a=a.target;g(a)&&(a.__loaded=!0)},document.addEventListener("load",z,!0),document.addEventListener("error",z,!0);else{var ja=Object.getOwnPropertyDescriptor(Node.prototype,
+"baseURI");Object.defineProperty((!ja||ja.configurable?Node:Element).prototype,"baseURI",{get:function(){var a=g(this)?this:c(this);return a?a.href:ja&&ja.get?ja.get.call(this):(document.querySelector("base")||window.location).href},configurable:!0,enumerable:!0});Object.defineProperty(HTMLLinkElement.prototype,"import",{get:function(){return this.__import||null},configurable:!0,enumerable:!0});e(function(){Ra=new k})}f(function(){return document.dispatchEvent(b("HTMLImportsLoaded",{cancelable:!0,
+bubbles:!0,detail:void 0}))});a.useNative=E;a.whenReady=f;a.importForElement=c;a.loadImports=function(a){Ra&&Ra.loadImports(a)}})(window.HTMLImports=window.HTMLImports||{});/*
+
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+function la(){this.na=this.root=null;this.R=!1;this.A=this.M=this.da=this.assignedSlot=this.assignedNodes=this.F=null;this.childNodes=this.nextSibling=this.previousSibling=this.lastChild=this.firstChild=this.parentNode=this.I=void 0;this.ta=this.ia=!1}la.prototype.toJSON=function(){return{}};function r(a){a.Y||(a.Y=new la);return a.Y}function t(a){return a&&a.Y};var u=window.ShadyDOM||{};u.Ga=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var ma=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");u.u=!!(ma&&ma.configurable&&ma.get);u.la=u.force||!u.Ga;var na=navigator.userAgent.match("Trident"),oa=navigator.userAgent.match("Edge");void 0===u.qa&&(u.qa=u.u&&(na||oa));function v(a){return(a=t(a))&&void 0!==a.firstChild}function w(a){return"ShadyRoot"===a.ya}function pa(a){a=a.getRootNode();if(w(a))return a}
+var qa=Element.prototype,ra=qa.matches||qa.matchesSelector||qa.mozMatchesSelector||qa.msMatchesSelector||qa.oMatchesSelector||qa.webkitMatchesSelector;function sa(a,b){if(a&&b)for(var c=Object.getOwnPropertyNames(b),d=0,e;d<c.length&&(e=c[d]);d++){var f=Object.getOwnPropertyDescriptor(b,e);f&&Object.defineProperty(a,e,f)}}function ta(a,b){for(var c=[],d=1;d<arguments.length;++d)c[d-1]=arguments[d];for(d=0;d<c.length;d++)sa(a,c[d]);return a}function ua(a,b){for(var c in b)a[c]=b[c]}
+var va=document.createTextNode(""),wa=0,xa=[];(new MutationObserver(function(){for(;xa.length;)try{xa.shift()()}catch(a){throw va.textContent=wa++,a;}})).observe(va,{characterData:!0});function ya(a){xa.push(a);va.textContent=wa++}var za=!!document.contains;function Aa(a,b){for(;b;){if(b==a)return!0;b=b.parentNode}return!1};var Ba=[],Ca;function Da(a){Ca||(Ca=!0,ya(Ea));Ba.push(a)}function Ea(){Ca=!1;for(var a=!!Ba.length;Ba.length;)Ba.shift()();return a}Ea.list=Ba;function Fa(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.P=new Set}function Ga(a){a.a||(a.a=!0,ya(function(){Ha(a)}))}function Ha(a){if(a.a){a.a=!1;var b=a.takeRecords();b.length&&a.P.forEach(function(a){a(b)})}}Fa.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
+function Ia(a,b){var c=r(a);c.F||(c.F=new Fa);c.F.P.add(b);var d=c.F;return{wa:b,C:d,za:a,takeRecords:function(){return d.takeRecords()}}}function Ja(a){var b=a&&a.C;b&&(b.P.delete(a.wa),b.P.size||(r(a.za).F=null))}
+function Ka(a,b){var c=b.getRootNode();return a.map(function(a){var b=c===a.target.getRootNode();if(b&&a.addedNodes){if(b=Array.from(a.addedNodes).filter(function(a){return c===a.getRootNode()}),b.length)return a=Object.create(a),Object.defineProperty(a,"addedNodes",{value:b,configurable:!0}),a}else if(b)return a}).filter(function(a){return a})};var x={},La=Element.prototype.insertBefore,Ma=Element.prototype.replaceChild,Na=Element.prototype.removeChild,Oa=Element.prototype.setAttribute,Sa=Element.prototype.removeAttribute,Ta=Element.prototype.cloneNode,Ua=Document.prototype.importNode,Va=Element.prototype.addEventListener,Wa=Element.prototype.removeEventListener,Xa=Window.prototype.addEventListener,Ya=Window.prototype.removeEventListener,Za=Element.prototype.dispatchEvent,$a=Node.prototype.contains||HTMLElement.prototype.contains,ab=Document.prototype.getElementById,
+bb=Element.prototype.querySelector,cb=DocumentFragment.prototype.querySelector,db=Document.prototype.querySelector,eb=Element.prototype.querySelectorAll,fb=DocumentFragment.prototype.querySelectorAll,gb=Document.prototype.querySelectorAll;x.appendChild=Element.prototype.appendChild;x.insertBefore=La;x.replaceChild=Ma;x.removeChild=Na;x.setAttribute=Oa;x.removeAttribute=Sa;x.cloneNode=Ta;x.importNode=Ua;x.addEventListener=Va;x.removeEventListener=Wa;x.Ua=Xa;x.Va=Ya;x.dispatchEvent=Za;x.contains=$a;
+x.getElementById=ab;x.cb=bb;x.gb=cb;x.ab=db;x.querySelector=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return bb.call(this,a);case Node.DOCUMENT_NODE:return db.call(this,a);default:return cb.call(this,a)}};x.eb=eb;x.hb=fb;x.bb=gb;x.querySelectorAll=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return eb.call(this,a);case Node.DOCUMENT_NODE:return gb.call(this,a);default:return fb.call(this,a)}};var hb=/[&\u00A0"]/g,ib=/[&\u00A0<>]/g;function jb(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function kb(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var lb=kb("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),mb=kb("style script xmp iframe noembed noframes plaintext noscript".split(" "));
+function nb(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,h;e<f&&(h=d[e]);e++){a:{var g=h;var k=a;var l=b;switch(g.nodeType){case Node.ELEMENT_NODE:for(var m=g.localName,p="<"+m,z=g.attributes,E=0;k=z[E];E++)p+=" "+k.name+'="'+k.value.replace(hb,jb)+'"';p+=">";g=lb[m]?p:p+nb(g,l)+"</"+m+">";break a;case Node.TEXT_NODE:g=g.data;g=k&&mb[k.localName]?g:g.replace(ib,jb);break a;case Node.COMMENT_NODE:g="\x3c!--"+g.data+"--\x3e";break a;default:throw window.console.error(g),
+Error("not implemented");}}c+=g}return c};var y={},A=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),B=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1);function ob(a){var b=[];A.currentNode=a;for(a=A.firstChild();a;)b.push(a),a=A.nextSibling();return b}y.parentNode=function(a){A.currentNode=a;return A.parentNode()};y.firstChild=function(a){A.currentNode=a;return A.firstChild()};y.lastChild=function(a){A.currentNode=a;return A.lastChild()};y.previousSibling=function(a){A.currentNode=a;return A.previousSibling()};
+y.nextSibling=function(a){A.currentNode=a;return A.nextSibling()};y.childNodes=ob;y.parentElement=function(a){B.currentNode=a;return B.parentNode()};y.firstElementChild=function(a){B.currentNode=a;return B.firstChild()};y.lastElementChild=function(a){B.currentNode=a;return B.lastChild()};y.previousElementSibling=function(a){B.currentNode=a;return B.previousSibling()};y.nextElementSibling=function(a){B.currentNode=a;return B.nextSibling()};
+y.children=function(a){var b=[];B.currentNode=a;for(a=B.firstChild();a;)b.push(a),a=B.nextSibling();return b};y.innerHTML=function(a){return nb(a,function(a){return ob(a)})};y.textContent=function(a){switch(a.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:a=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);for(var b="",c;c=a.nextNode();)b+=c.nodeValue;return b;default:return a.nodeValue}};var C={},pb=u.u,qb=[Node.prototype,Element.prototype,HTMLElement.prototype];function D(a){var b;a:{for(b=0;b<qb.length;b++){var c=qb[b];if(c.hasOwnProperty(a)){b=c;break a}}b=void 0}if(!b)throw Error("Could not find descriptor for "+a);return Object.getOwnPropertyDescriptor(b,a)}
+var F=pb?{parentNode:D("parentNode"),firstChild:D("firstChild"),lastChild:D("lastChild"),previousSibling:D("previousSibling"),nextSibling:D("nextSibling"),childNodes:D("childNodes"),parentElement:D("parentElement"),previousElementSibling:D("previousElementSibling"),nextElementSibling:D("nextElementSibling"),innerHTML:D("innerHTML"),textContent:D("textContent"),firstElementChild:D("firstElementChild"),lastElementChild:D("lastElementChild"),children:D("children")}:{},rb=pb?{firstElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,
+"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"children")}:{},sb=pb?{firstElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(Document.prototype,"children")}:{};C.ma=F;C.fb=rb;C.$a=sb;C.parentNode=function(a){return F.parentNode.get.call(a)};
+C.firstChild=function(a){return F.firstChild.get.call(a)};C.lastChild=function(a){return F.lastChild.get.call(a)};C.previousSibling=function(a){return F.previousSibling.get.call(a)};C.nextSibling=function(a){return F.nextSibling.get.call(a)};C.childNodes=function(a){return Array.prototype.slice.call(F.childNodes.get.call(a))};C.parentElement=function(a){return F.parentElement.get.call(a)};C.previousElementSibling=function(a){return F.previousElementSibling.get.call(a)};C.nextElementSibling=function(a){return F.nextElementSibling.get.call(a)};
+C.innerHTML=function(a){return F.innerHTML.get.call(a)};C.textContent=function(a){return F.textContent.get.call(a)};C.children=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:a=rb.children.get.call(a);break;case Node.DOCUMENT_NODE:a=sb.children.get.call(a);break;default:a=F.children.get.call(a)}return Array.prototype.slice.call(a)};
+C.firstElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return rb.firstElementChild.get.call(a);case Node.DOCUMENT_NODE:return sb.firstElementChild.get.call(a);default:return F.firstElementChild.get.call(a)}};C.lastElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return rb.lastElementChild.get.call(a);case Node.DOCUMENT_NODE:return sb.lastElementChild.get.call(a);default:return F.lastElementChild.get.call(a)}};var G=u.qa?C:y;function tb(a){for(;a.firstChild;)a.removeChild(a.firstChild)}
+var ub=u.u,vb=document.implementation.createHTMLDocument("inert"),wb=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),xb=wb&&wb.get,yb=Object.getOwnPropertyDescriptor(Document.prototype,"activeElement"),zb={parentElement:{get:function(){var a=t(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:G.parentElement(this)},configurable:!0},parentNode:{get:function(){var a=t(this);a=a&&a.parentNode;return void 0!==a?a:G.parentNode(this)},configurable:!0},
+nextSibling:{get:function(){var a=t(this);a=a&&a.nextSibling;return void 0!==a?a:G.nextSibling(this)},configurable:!0},previousSibling:{get:function(){var a=t(this);a=a&&a.previousSibling;return void 0!==a?a:G.previousSibling(this)},configurable:!0},nextElementSibling:{get:function(){var a=t(this);if(a&&void 0!==a.nextSibling){for(a=this.nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return G.nextElementSibling(this)},configurable:!0},previousElementSibling:{get:function(){var a=
+t(this);if(a&&void 0!==a.previousSibling){for(a=this.previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return G.previousElementSibling(this)},configurable:!0}},Ab={className:{get:function(){return this.getAttribute("class")||""},set:function(a){this.setAttribute("class",a)},configurable:!0}},Bb={childNodes:{get:function(){if(v(this)){var a=t(this);if(!a.childNodes){a.childNodes=[];for(var b=this.firstChild;b;b=b.nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=
+G.childNodes(this);c.item=function(a){return c[a]};return c},configurable:!0},childElementCount:{get:function(){return this.children.length},configurable:!0},firstChild:{get:function(){var a=t(this);a=a&&a.firstChild;return void 0!==a?a:G.firstChild(this)},configurable:!0},lastChild:{get:function(){var a=t(this);a=a&&a.lastChild;return void 0!==a?a:G.lastChild(this)},configurable:!0},textContent:{get:function(){if(v(this)){for(var a=[],b=0,c=this.childNodes,d;d=c[b];b++)d.nodeType!==Node.COMMENT_NODE&&
+a.push(d.textContent);return a.join("")}return G.textContent(this)},set:function(a){if("undefined"===typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!v(this)&&ub){var b=this.firstChild;(b!=this.lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&tb(this);C.ma.textContent.set.call(this,a)}else tb(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.appendChild(document.createTextNode(a));break;default:this.nodeValue=a}},configurable:!0},firstElementChild:{get:function(){var a=
+t(this);if(a&&void 0!==a.firstChild){for(a=this.firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return G.firstElementChild(this)},configurable:!0},lastElementChild:{get:function(){var a=t(this);if(a&&void 0!==a.lastChild){for(a=this.lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return G.lastElementChild(this)},configurable:!0},children:{get:function(){var a=v(this)?Array.prototype.filter.call(this.childNodes,function(a){return a.nodeType===Node.ELEMENT_NODE}):
+G.children(this);a.item=function(b){return a[b]};return a},configurable:!0},innerHTML:{get:function(){return v(this)?nb("template"===this.localName?this.content:this):G.innerHTML(this)},set:function(a){var b="template"===this.localName?this.content:this;tb(b);var c=this.localName;c&&"template"!==c||(c="div");c=vb.createElement(c);for(ub?C.ma.innerHTML.set.call(c,a):c.innerHTML=a;c.firstChild;)b.appendChild(c.firstChild)},configurable:!0}},Cb={shadowRoot:{get:function(){var a=t(this);return a&&a.na||
+null},configurable:!0}},Db={activeElement:{get:function(){var a=yb&&yb.get?yb.get.call(document):u.u?void 0:document.activeElement;if(a&&a.nodeType){var b=!!w(this);if(this===document||b&&this.host!==a&&x.contains.call(this.host,a)){for(b=pa(a);b&&b!==this;)a=b.host,b=pa(a);a=this===document?b?null:a:b===this?a:null}else a=null}else a=null;return a},set:function(){},configurable:!0}};
+function I(a,b,c){for(var d in b){var e=Object.getOwnPropertyDescriptor(a,d);e&&e.configurable||!e&&c?Object.defineProperty(a,d,b[d]):c&&console.warn("Could not define",d,"on",a)}}function J(a){I(a,zb);I(a,Ab);I(a,Bb);I(a,Db)}
+function Eb(){var a=Fb.prototype;a.__proto__=DocumentFragment.prototype;I(a,zb,!0);I(a,Bb,!0);I(a,Db,!0);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
+configurable:!0})})}var Gb=u.u?function(){}:function(a){var b=r(a);b.ia||(b.ia=!0,I(a,zb,!0),I(a,Ab,!0))},Hb=u.u?function(){}:function(a){r(a).ta||(I(a,Bb,!0),I(a,Cb,!0))};var Ib=G.childNodes;function Jb(a,b,c){Gb(a);c=c||null;var d=r(a),e=r(b),f=c?r(c):null;d.previousSibling=c?f.previousSibling:b.lastChild;if(f=t(d.previousSibling))f.nextSibling=a;if(f=t(d.nextSibling=c))f.previousSibling=a;d.parentNode=b;c?c===e.firstChild&&(e.firstChild=a):(e.lastChild=a,e.firstChild||(e.firstChild=a));e.childNodes=null}
+function Kb(a,b){var c=r(a);if(void 0===c.firstChild)for(b=b||Ib(a),c.firstChild=b[0]||null,c.lastChild=b[b.length-1]||null,Hb(a),c=0;c<b.length;c++){var d=b[c],e=r(d);e.parentNode=a;e.nextSibling=b[c+1]||null;e.previousSibling=b[c-1]||null;Gb(d)}};var Lb=G.parentNode;
+function Mb(a,b,c){if(b===a)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(c){var d=t(c);d=d&&d.parentNode;if(void 0!==d&&d!==a||void 0===d&&Lb(c)!==a)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(c===b)return b;b.parentNode&&Nb(b.parentNode,b);var e,f;if(!b.__noInsertionPoint){if(f=e=pa(a)){var h;"slot"===b.localName?h=[b]:b.querySelectorAll&&
+(h=b.querySelectorAll("slot"));f=h&&h.length?h:void 0}f&&(h=e,d=f,h.s=h.s||[],h.f=h.f||[],h.h=h.h||{},h.s.push.apply(h.s,[].concat(d instanceof Array?d:ka(ia(d)))))}("slot"===a.localName||f)&&(e=e||pa(a))&&Ob(e);if(v(a)){e=c;Hb(a);f=r(a);void 0!==f.firstChild&&(f.childNodes=null);if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE){f=b.childNodes;for(h=0;h<f.length;h++)Jb(f[h],a,e);e=r(b);f=void 0!==e.firstChild?null:void 0;e.firstChild=e.lastChild=f;e.childNodes=f}else Jb(b,a,e);e=t(a);if(Pb(a)){Ob(e.root);
+var g=!0}else e.root&&(g=!0)}g||(g=w(a)?a.host:a,c?(c=Qb(c),x.insertBefore.call(g,b,c)):x.appendChild.call(g,b));Rb(a,b);return b}
+function Nb(a,b){if(b.parentNode!==a)throw Error("The node to be removed is not a child of this node: "+b);var c=pa(b),d=t(a);if(v(a)){var e=r(b),f=r(a);b===f.firstChild&&(f.firstChild=e.nextSibling);b===f.lastChild&&(f.lastChild=e.previousSibling);var h=e.previousSibling,g=e.nextSibling;h&&(r(h).nextSibling=g);g&&(r(g).previousSibling=h);e.parentNode=e.previousSibling=e.nextSibling=void 0;void 0!==f.childNodes&&(f.childNodes=null);if(Pb(a)){Ob(d.root);var k=!0}}Sb(b);if(c){(e=a&&"slot"===a.localName)&&
+(k=!0);if(c.f){Tb(c);f=c.h;for(aa in f)for(h=f[aa],g=0;g<h.length;g++){var l=h[g];if(Aa(b,l)){h.splice(g,1);var m=c.f.indexOf(l);0<=m&&c.f.splice(m,1);g--;m=t(l);if(l=m.A)for(var p=0;p<l.length;p++){var z=l[p],E=Ub(z);E&&x.removeChild.call(E,z)}m.A=[];m.assignedNodes=[];m=!0}}var aa=m}else aa=void 0;(aa||e)&&Ob(c)}k||(k=w(a)?a.host:a,(!d.root&&"slot"!==b.localName||k===Lb(b))&&x.removeChild.call(k,b));Rb(a,null,b);return b}
+function Sb(a){var b=t(a);if(b&&void 0!==b.I){b=a.childNodes;for(var c=0,d=b.length,e;c<d&&(e=b[c]);c++)Sb(e)}if(a=t(a))a.I=void 0}function Qb(a){var b=a;a&&"slot"===a.localName&&(b=(b=(b=t(a))&&b.A)&&b.length?b[0]:Qb(a.nextSibling));return b}function Pb(a){return(a=(a=t(a))&&a.root)&&Vb(a)}
+function Wb(a,b){if("slot"===b)a=a.parentNode,Pb(a)&&Ob(t(a).root);else if("slot"===a.localName&&"name"===b&&(b=pa(a))){if(b.f){var c=a.ua,d=Yb(a);if(d!==c){c=b.h[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.h[d]||(b.h[d]=[]);c.push(a);1<c.length&&(b.h[d]=Zb(c))}}Ob(b)}}function Rb(a,b,c){if(a=(a=t(a))&&a.F)b&&a.addedNodes.push(b),c&&a.removedNodes.push(c),Ga(a)}
+function $b(a){if(a&&a.nodeType){var b=r(a),c=b.I;void 0===c&&(w(a)?(c=a,b.I=c):(c=(c=a.parentNode)?$b(c):a,x.contains.call(document.documentElement,a)&&(b.I=c)));return c}}function ac(a,b,c){var d=[];bc(a.childNodes,b,c,d);return d}function bc(a,b,c,d){for(var e=0,f=a.length,h;e<f&&(h=a[e]);e++){var g;if(g=h.nodeType===Node.ELEMENT_NODE){g=h;var k=b,l=c,m=d,p=k(g);p&&m.push(g);l&&l(p)?g=p:(bc(g.childNodes,k,l,m),g=void 0)}if(g)break}}var cc=null;
+function dc(a,b,c){cc||(cc=window.ShadyCSS&&window.ShadyCSS.ScopingShim);cc&&"class"===b?cc.setElementClass(a,c):(x.setAttribute.call(a,b,c),Wb(a,b))}function ec(a,b){if(a.ownerDocument!==document)return x.importNode.call(document,a,b);var c=x.importNode.call(document,a,!1);if(b){a=a.childNodes;b=0;for(var d;b<a.length;b++)d=ec(a[b],!0),c.appendChild(d)}return c};var fc="__eventWrappers"+Date.now(),gc={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,
+dragstart:!0,drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0};function hc(a,b){var c=[],d=a;for(a=a===window?window:a.getRootNode();d;)c.push(d),d=d.assignedSlot?d.assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d.host:d.parentNode;c[c.length-1]===document&&c.push(window);return c}
+function ic(a,b){if(!w)return a;a=hc(a,!0);for(var c=0,d,e,f,h;c<b.length;c++)if(d=b[c],f=d===window?window:d.getRootNode(),f!==e&&(h=a.indexOf(f),e=f),!w(f)||-1<h)return d}
+var jc={get composed(){!1!==this.isTrusted&&void 0===this.W&&(this.W=gc[this.type]);return this.W||!1},composedPath:function(){this.b||(this.b=hc(this.__target,this.composed));return this.b},get target(){return ic(this.currentTarget,this.composedPath())},get relatedTarget(){if(!this.X)return null;this.c||(this.c=hc(this.X,!0));return ic(this.currentTarget,this.c)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.a=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);
+this.a=this.g=!0}};function kc(a){function b(b,d){b=new a(b,d);b.W=d&&!!d.composed;return b}ua(b,a);b.prototype=a.prototype;return b}var lc={focus:!0,blur:!0};function mc(a){return a.__target!==a.target||a.X!==a.relatedTarget}function nc(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!mc(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.g);d++);}
+function oc(a){var b=a.composedPath();Object.defineProperty(a,"currentTarget",{get:function(){return d},configurable:!0});for(var c=b.length-1;0<=c;c--){var d=b[c];nc(a,d,"capture");if(a.a)return}Object.defineProperty(a,"eventPhase",{get:function(){return Event.AT_TARGET}});var e;for(c=0;c<b.length;c++){d=b[c];var f=t(d);f=f&&f.root;if(0===c||f&&f===e)if(nc(a,d,"bubble"),d!==window&&(e=d.getRootNode()),a.a)break}}
+function pc(a,b,c,d,e,f){for(var h=0;h<a.length;h++){var g=a[h],k=g.type,l=g.capture,m=g.once,p=g.passive;if(b===g.node&&c===k&&d===l&&e===m&&f===p)return h}return-1}
+function qc(a,b,c){if(b){var d=typeof b;if("function"===d||"object"===d)if("object"!==d||b.handleEvent&&"function"===typeof b.handleEvent){if(c&&"object"===typeof c){var e=!!c.capture;var f=!!c.once;var h=!!c.passive}else e=!!c,h=f=!1;var g=c&&c.Z||this,k=b[fc];if(k){if(-1<pc(k,g,a,e,f,h))return}else b[fc]=[];k=function(e){f&&this.removeEventListener(a,b,c);e.__target||rc(e);if(g!==this){var h=Object.getOwnPropertyDescriptor(e,"currentTarget");Object.defineProperty(e,"currentTarget",{get:function(){return g},
+configurable:!0})}if(e.composed||-1<e.composedPath().indexOf(g))if(mc(e)&&e.target===e.relatedTarget)e.eventPhase===Event.BUBBLING_PHASE&&e.stopImmediatePropagation();else if(e.eventPhase===Event.CAPTURING_PHASE||e.bubbles||e.target===g||g instanceof Window){var k="function"===d?b.call(g,e):b.handleEvent&&b.handleEvent(e);g!==this&&(h?(Object.defineProperty(e,"currentTarget",h),h=null):delete e.currentTarget);return k}};b[fc].push({node:g,type:a,capture:e,once:f,passive:h,Wa:k});lc[a]?(this.__handlers=
+this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(k)):(this instanceof Window?x.Ua:x.addEventListener).call(this,a,k,c)}}}
+function sc(a,b,c){if(b){if(c&&"object"===typeof c){var d=!!c.capture;var e=!!c.once;var f=!!c.passive}else d=!!c,f=e=!1;var h=c&&c.Z||this,g=void 0;var k=null;try{k=b[fc]}catch(l){}k&&(e=pc(k,h,a,d,e,f),-1<e&&(g=k.splice(e,1)[0].Wa,k.length||(b[fc]=void 0)));(this instanceof Window?x.Va:x.removeEventListener).call(this,a,g||b,c);g&&lc[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][d?"capture":"bubble"],g=a.indexOf(g),-1<g&&a.splice(g,1))}}
+function tc(){for(var a in lc)window.addEventListener(a,function(a){a.__target||(rc(a),oc(a))},!0)}function rc(a){a.__target=a.target;a.X=a.relatedTarget;if(u.u){var b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__patchProto")){var c=Object.create(b);c.Ya=b;sa(c,jc);b.__patchProto=c}a.__proto__=b.__patchProto}else sa(a,jc)}var uc=kc(window.Event),vc=kc(window.CustomEvent),wc=kc(window.MouseEvent);function xc(a,b){return{index:a,J:[],O:b}}
+function yc(a,b,c,d){var e=0,f=0,h=0,g=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(h=0;h<k;h++)if(a[h]!==c[h])break a;h=k}if(b==a.length&&d==c.length){g=a.length;for(var l=c.length,m=0;m<k-h&&zc(a[--g],c[--l]);)m++;g=m}e+=h;f+=h;b-=g;d-=g;if(0==b-e&&0==d-f)return[];if(e==b){for(b=xc(e,0);f<d;)b.J.push(c[f++]);return[b]}if(f==d)return[xc(e,b-e)];k=e;h=f;d=d-h+1;g=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(g),b[l][0]=l;for(l=0;l<g;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<g;m++)if(a[k+m-1]===c[h+l-1])b[l][m]=
+b[l-1][m-1];else{var p=b[l-1][m]+1,z=b[l][m-1]+1;b[l][m]=p<z?p:z}k=b.length-1;h=b[0].length-1;d=b[k][h];for(a=[];0<k||0<h;)0==k?(a.push(2),h--):0==h?(a.push(3),k--):(g=b[k-1][h-1],l=b[k-1][h],m=b[k][h-1],p=l<m?l<g?l:g:m<g?m:g,p==g?(g==d?a.push(0):(a.push(1),d=g),k--,h--):p==l?(a.push(3),k--,d=l):(a.push(2),h--,d=m));a.reverse();b=void 0;k=[];for(h=0;h<a.length;h++)switch(a[h]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=xc(e,0));b.O++;e++;b.J.push(c[f]);f++;break;case 2:b||(b=xc(e,0));
+b.O++;e++;break;case 3:b||(b=xc(e,0)),b.J.push(c[f]),f++}b&&k.push(b);return k}function zc(a,b){return a===b};var Ub=G.parentNode,Ac=G.childNodes,Bc={};function Cc(a){var b=[];do b.unshift(a);while(a=a.parentNode);return b}function Fb(a,b,c){if(a!==Bc)throw new TypeError("Illegal constructor");this.ya="ShadyRoot";a=Ac(b);this.host=b;this.a=c&&c.mode;Kb(b,a);c=t(b);c.root=this;c.na="closed"!==this.a?this:null;c=r(this);c.firstChild=c.lastChild=c.parentNode=c.nextSibling=c.previousSibling=null;c.childNodes=[];this.N=!1;this.s=this.h=this.f=null;c=0;for(var d=a.length;c<d;c++)x.removeChild.call(b,a[c])}
+function Ob(a){a.N||(a.N=!0,Da(function(){return Dc(a)}))}function Dc(a){for(var b;a;){a.N&&(b=a);a:{var c=a;a=c.host.getRootNode();if(w(a))for(var d=c.host.childNodes,e=0;e<d.length;e++)if(c=d[e],"slot"==c.localName)break a;a=void 0}}b&&b._renderRoot()}
+Fb.prototype._renderRoot=function(){this.N=!1;if(this.f){Tb(this);for(var a=0,b;a<this.f.length;a++){b=this.f[a];var c=t(b),d=c.assignedNodes;c.assignedNodes=[];c.A=[];if(c.da=d)for(c=0;c<d.length;c++){var e=t(d[c]);e.M=e.assignedSlot;e.assignedSlot===b&&(e.assignedSlot=null)}}for(b=this.host.firstChild;b;b=b.nextSibling)Ec(this,b);for(a=0;a<this.f.length;a++){b=this.f[a];d=t(b);if(!d.assignedNodes.length)for(c=b.firstChild;c;c=c.nextSibling)Ec(this,c,b);(c=(c=t(b.parentNode))&&c.root)&&Vb(c)&&c._renderRoot();
+Fc(this,d.A,d.assignedNodes);if(c=d.da){for(e=0;e<c.length;e++)t(c[e]).M=null;d.da=null;c.length>d.assignedNodes.length&&(d.R=!0)}d.R&&(d.R=!1,Gc(this,b))}a=this.f;b=[];for(d=0;d<a.length;d++)c=a[d].parentNode,(e=t(c))&&e.root||!(0>b.indexOf(c))||b.push(c);for(a=0;a<b.length;a++){d=b[a];c=d===this?this.host:d;e=[];d=d.childNodes;for(var f=0;f<d.length;f++){var h=d[f];if("slot"==h.localName){h=t(h).A;for(var g=0;g<h.length;g++)e.push(h[g])}else e.push(h)}d=void 0;f=Ac(c);h=yc(e,e.length,f,f.length);
+for(var k=g=0;g<h.length&&(d=h[g]);g++){for(var l=0,m;l<d.J.length&&(m=d.J[l]);l++)Ub(m)===c&&x.removeChild.call(c,m),f.splice(d.index+k,1);k-=d.O}for(k=0;k<h.length&&(d=h[k]);k++)for(g=f[d.index],l=d.index;l<d.index+d.O;l++)m=e[l],x.insertBefore.call(c,m,g),f.splice(l,0,m)}}};function Ec(a,b,c){var d=r(b),e=d.M;d.M=null;c||(c=(a=a.h[b.slot||"__catchall"])&&a[0]);c?(r(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(r(d.assignedSlot).R=!0)}
+function Fc(a,b,c){for(var d=0,e;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=t(e).assignedNodes;f&&f.length&&Fc(a,b,f)}else b.push(c[d])}function Gc(a,b){x.dispatchEvent.call(b,new Event("slotchange"));b=t(b);b.assignedSlot&&Gc(a,b.assignedSlot)}function Tb(a){if(a.s&&a.s.length){for(var b=a.s,c,d=0;d<b.length;d++){var e=b[d];Kb(e);Kb(e.parentNode);var f=Yb(e);a.h[f]?(c=c||{},c[f]=!0,a.h[f].push(e)):a.h[f]=[e];a.f.push(e)}if(c)for(var h in c)a.h[h]=Zb(a.h[h]);a.s=[]}}
+function Yb(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.ua=b}function Zb(a){return a.sort(function(a,c){a=Cc(a);for(var b=Cc(c),e=0;e<a.length;e++){c=a[e];var f=b[e];if(c!==f)return a=Array.from(c.parentNode.childNodes),a.indexOf(c)-a.indexOf(f)}})}function Vb(a){Tb(a);return!(!a.f||!a.f.length)};function Hc(a){var b=a.getRootNode();w(b)&&Dc(b);return(a=t(a))&&a.assignedSlot||null}
+var Ic={addEventListener:qc.bind(window),removeEventListener:sc.bind(window)},Jc={addEventListener:qc,removeEventListener:sc,appendChild:function(a){return Mb(this,a)},insertBefore:function(a,b){return Mb(this,a,b)},removeChild:function(a){return Nb(this,a)},replaceChild:function(a,b){Mb(this,a,b);Nb(this,b);return a},cloneNode:function(a){if("template"==this.localName)var b=x.cloneNode.call(this,a);else if(b=x.cloneNode.call(this,!1),a){a=this.childNodes;for(var c=0,d;c<a.length;c++)d=a[c].cloneNode(!0),
+b.appendChild(d)}return b},getRootNode:function(){return $b(this)},contains:function(a){return Aa(this,a)},dispatchEvent:function(a){Ea();return x.dispatchEvent.call(this,a)}};
+Object.defineProperties(Jc,{isConnected:{get:function(){if(xb&&xb.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;var a=this.ownerDocument;if(za){if(x.contains.call(a,this))return!0}else if(a.documentElement&&x.contains.call(a.documentElement,this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.parentNode||(w(a)?a.host:void 0);return!!(a&&a instanceof Document)},configurable:!0}});
+var Kc={get assignedSlot(){return Hc(this)}},Lc={querySelector:function(a){return ac(this,function(b){return ra.call(b,a)},function(a){return!!a})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(x.querySelectorAll(this,a));var c=this.getRootNode();return b.filter(function(a){return a.getRootNode()==c})}return ac(this,function(b){return ra.call(b,a)})}},Mc={assignedNodes:function(a){if("slot"===this.localName){var b=this.getRootNode();w(b)&&Dc(b);return(b=t(this))?(a&&a.flatten?
+b.A:b.assignedNodes)||[]:[]}}},Nc=ta({setAttribute:function(a,b){dc(this,a,b)},removeAttribute:function(a){x.removeAttribute.call(this,a);Wb(this,a)},attachShadow:function(a){if(!this)throw"Must provide a host.";if(!a)throw"Not enough arguments.";return new Fb(Bc,this,a)},get slot(){return this.getAttribute("slot")},set slot(a){dc(this,"slot",a)},get assignedSlot(){return Hc(this)}},Lc,Mc);Object.defineProperties(Nc,Cb);
+var Oc=ta({importNode:function(a,b){return ec(a,b)},getElementById:function(a){return ac(this,function(b){return b.id==a},function(a){return!!a})[0]||null}},Lc);Object.defineProperties(Oc,{_activeElement:Db.activeElement});
+var Pc=HTMLElement.prototype.blur,Qc=ta({blur:function(){var a=t(this);(a=(a=a&&a.root)&&a.activeElement)?a.blur():Pc.call(this)}}),Rc={addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.Z=this;this.host.addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.Z=this;this.host.removeEventListener(a,b,c)},getElementById:function(a){return ac(this,function(b){return b.id==a},function(a){return!!a})[0]||null}};
+function K(a,b){for(var c=Object.getOwnPropertyNames(b),d=0;d<c.length;d++){var e=c[d],f=Object.getOwnPropertyDescriptor(b,e);f.value?a[e]=f.value:Object.defineProperty(a,e,f)}};if(u.la){var ShadyDOM={inUse:u.la,patch:function(a){Hb(a);Gb(a);return a},isShadyRoot:w,enqueue:Da,flush:Ea,settings:u,filterMutations:Ka,observeChildren:Ia,unobserveChildren:Ja,nativeMethods:x,nativeTree:G};window.ShadyDOM=ShadyDOM;window.Event=uc;window.CustomEvent=vc;window.MouseEvent=wc;tc();var Sc=window.customElements&&window.customElements.nativeHTMLElement||HTMLElement;K(Fb.prototype,Rc);K(window.Node.prototype,Jc);K(window.Window.prototype,Ic);K(window.Text.prototype,Kc);K(window.DocumentFragment.prototype,
+Lc);K(window.Element.prototype,Nc);K(window.Document.prototype,Oc);window.HTMLSlotElement&&K(window.HTMLSlotElement.prototype,Mc);K(Sc.prototype,Qc);u.u&&(J(window.Node.prototype),J(window.Text.prototype),J(window.DocumentFragment.prototype),J(window.Element.prototype),J(Sc.prototype),J(window.Document.prototype),window.HTMLSlotElement&&J(window.HTMLSlotElement.prototype));Eb();window.ShadowRoot=Fb};var Tc=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function Uc(a){var b=Tc.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return!b&&a}function L(a){var b=a.isConnected;if(void 0!==b)return b;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}
+function Vc(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
+function M(a,b,c){c=void 0===c?new Set:c;for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)M(d,b,c);d=Vc(a,e);continue}else if("template"===f){d=Vc(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)M(e,b,c)}d=d.firstChild?d.firstChild:Vc(a,d)}}function N(a,b,c){a[b]=c};function Wc(){this.a=new Map;this.m=new Map;this.g=[];this.c=!1}function Xc(a,b,c){a.a.set(b,c);a.m.set(c.constructor,c)}function Yc(a,b){a.c=!0;a.g.push(b)}function Zc(a,b){a.c&&M(b,function(b){return a.b(b)})}Wc.prototype.b=function(a){if(this.c&&!a.__CE_patched){a.__CE_patched=!0;for(var b=0;b<this.g.length;b++)this.g[b](a)}};function O(a,b){var c=[];M(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):$c(a,d)}}
+function P(a,b){var c=[];M(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
+function Q(a,b,c){c=void 0===c?{}:c;var d=c.Ta||new Set,e=c.V||function(b){return $c(a,b)},f=[];M(b,function(b){if("link"===b.localName&&"import"===b.getAttribute("rel")){var c=b.import;c instanceof Node&&(c.__CE_isImportDocument=!0,c.__CE_hasRegistry=!0);c&&"complete"===c.readyState?c.__CE_documentLoadHandled=!0:b.addEventListener("load",function(){var c=b.import;if(!c.__CE_documentLoadHandled){c.__CE_documentLoadHandled=!0;var f=new Set(d);f.delete(c);Q(a,c,{Ta:f,V:e})}})}else f.push(b)},d);if(a.c)for(b=
+0;b<f.length;b++)a.b(f[b]);for(b=0;b<f.length;b++)e(f[b])}
+function $c(a,b){if(void 0===b.__CE_state){var c=b.ownerDocument;if(c.defaultView||c.__CE_isImportDocument&&c.__CE_hasRegistry)if(c=a.a.get(b.localName)){c.constructionStack.push(b);var d=c.constructor;try{try{if(new d!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{c.constructionStack.pop()}}catch(h){throw b.__CE_state=2,h;}b.__CE_state=1;b.__CE_definition=c;if(c.attributeChangedCallback)for(c=c.observedAttributes,d=0;d<c.length;d++){var e=c[d],
+f=b.getAttribute(e);null!==f&&a.attributeChangedCallback(b,e,null,f,null)}L(b)&&a.connectedCallback(b)}}}Wc.prototype.connectedCallback=function(a){var b=a.__CE_definition;b.connectedCallback&&b.connectedCallback.call(a)};Wc.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;b.disconnectedCallback&&b.disconnectedCallback.call(a)};
+Wc.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b)&&f.attributeChangedCallback.call(a,b,c,d,e)};function ad(a){var b=document;this.i=a;this.a=b;this.C=void 0;Q(this.i,this.a);"loading"===this.a.readyState&&(this.C=new MutationObserver(this.b.bind(this)),this.C.observe(this.a,{childList:!0,subtree:!0}))}ad.prototype.disconnect=function(){this.C&&this.C.disconnect()};ad.prototype.b=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||this.disconnect();for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)Q(this.i,c[d])};function bd(){var a=this;this.b=this.a=void 0;this.c=new Promise(function(b){a.b=b;a.a&&b(a.a)})}function cd(a){if(a.a)throw Error("Already resolved.");a.a=void 0;a.b&&a.b(void 0)};function R(a){this.aa=!1;this.i=a;this.ea=new Map;this.ba=function(a){return a()};this.L=!1;this.ca=[];this.xa=new ad(a)}n=R.prototype;
+n.define=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");if(!Uc(a))throw new SyntaxError("The element name '"+a+"' is not valid.");if(this.i.a.get(a))throw Error("A custom element with name '"+a+"' has already been defined.");if(this.aa)throw Error("A custom element is already being defined.");this.aa=!0;try{var d=function(a){var b=e[a];if(void 0!==b&&!(b instanceof Function))throw Error("The '"+a+"' callback must be a function.");
+return b},e=b.prototype;if(!(e instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var f=d("connectedCallback");var h=d("disconnectedCallback");var g=d("adoptedCallback");var k=d("attributeChangedCallback");var l=b.observedAttributes||[]}catch(m){return}finally{this.aa=!1}b={localName:a,constructor:b,connectedCallback:f,disconnectedCallback:h,adoptedCallback:g,attributeChangedCallback:k,observedAttributes:l,constructionStack:[]};Xc(this.i,a,b);this.ca.push(b);
+this.L||(this.L=!0,this.ba(function(){return dd(c)}))};n.V=function(a){Q(this.i,a)};function dd(a){if(!1!==a.L){a.L=!1;for(var b=a.ca,c=[],d=new Map,e=0;e<b.length;e++)d.set(b[e].localName,[]);Q(a.i,document,{V:function(b){if(void 0===b.__CE_state){var e=b.localName,f=d.get(e);f?f.push(b):a.i.a.get(e)&&c.push(b)}}});for(e=0;e<c.length;e++)$c(a.i,c[e]);for(;0<b.length;){var f=b.shift();e=f.localName;f=d.get(f.localName);for(var h=0;h<f.length;h++)$c(a.i,f[h]);(e=a.ea.get(e))&&cd(e)}}}
+n.get=function(a){if(a=this.i.a.get(a))return a.constructor};n.ra=function(a){if(!Uc(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.ea.get(a);if(b)return b.c;b=new bd;this.ea.set(a,b);this.i.a.get(a)&&!this.ca.some(function(b){return b.localName===a})&&cd(b);return b.c};n.Oa=function(a){this.xa.disconnect();var b=this.ba;this.ba=function(c){return a(function(){return b(c)})}};window.CustomElementRegistry=R;R.prototype.define=R.prototype.define;
+R.prototype.upgrade=R.prototype.V;R.prototype.get=R.prototype.get;R.prototype.whenDefined=R.prototype.ra;R.prototype.polyfillWrapFlushCallback=R.prototype.Oa;var ed=window.Document.prototype.createElement,fd=window.Document.prototype.createElementNS,gd=window.Document.prototype.importNode,hd=window.Document.prototype.prepend,id=window.Document.prototype.append,jd=window.DocumentFragment.prototype.prepend,kd=window.DocumentFragment.prototype.append,ld=window.Node.prototype.cloneNode,md=window.Node.prototype.appendChild,nd=window.Node.prototype.insertBefore,od=window.Node.prototype.removeChild,pd=window.Node.prototype.replaceChild,qd=Object.getOwnPropertyDescriptor(window.Node.prototype,
+"textContent"),rd=window.Element.prototype.attachShadow,sd=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),td=window.Element.prototype.getAttribute,ud=window.Element.prototype.setAttribute,vd=window.Element.prototype.removeAttribute,wd=window.Element.prototype.getAttributeNS,xd=window.Element.prototype.setAttributeNS,yd=window.Element.prototype.removeAttributeNS,zd=window.Element.prototype.insertAdjacentElement,Ad=window.Element.prototype.insertAdjacentHTML,Bd=window.Element.prototype.prepend,
+Cd=window.Element.prototype.append,Dd=window.Element.prototype.before,Ed=window.Element.prototype.after,Fd=window.Element.prototype.replaceWith,Gd=window.Element.prototype.remove,Hd=window.HTMLElement,Id=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),Jd=window.HTMLElement.prototype.insertAdjacentElement,Kd=window.HTMLElement.prototype.insertAdjacentHTML;var Ld=new function(){};function Md(){var a=Nd;window.HTMLElement=function(){function b(){var b=this.constructor,d=a.m.get(b);if(!d)throw Error("The custom element being constructed was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=ed.call(document,d.localName),Object.setPrototypeOf(e,b.prototype),e.__CE_state=1,e.__CE_definition=d,a.b(e),e;d=e.length-1;var f=e[d];if(f===Ld)throw Error("The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.");
+e[d]=Ld;Object.setPrototypeOf(f,b.prototype);a.b(f);return f}b.prototype=Hd.prototype;return b}()};function Od(a,b,c){function d(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];e=[];for(var f=[],l=0;l<d.length;l++){var m=d[l];m instanceof Element&&L(m)&&f.push(m);if(m instanceof DocumentFragment)for(m=m.firstChild;m;m=m.nextSibling)e.push(m);else e.push(m)}b.apply(this,d);for(d=0;d<f.length;d++)P(a,f[d]);if(L(this))for(d=0;d<e.length;d++)f=e[d],f instanceof Element&&O(a,f)}}void 0!==c.T&&(b.prepend=d(c.T));void 0!==c.append&&(b.append=d(c.append))};function Pd(){var a=Nd;N(Document.prototype,"createElement",function(b){if(this.__CE_hasRegistry){var c=a.a.get(b);if(c)return new c.constructor}b=ed.call(this,b);a.b(b);return b});N(Document.prototype,"importNode",function(b,c){b=gd.call(this,b,c);this.__CE_hasRegistry?Q(a,b):Zc(a,b);return b});N(Document.prototype,"createElementNS",function(b,c){if(this.__CE_hasRegistry&&(null===b||"http://www.w3.org/1999/xhtml"===b)){var d=a.a.get(c);if(d)return new d.constructor}b=fd.call(this,b,c);a.b(b);return b});
+Od(a,Document.prototype,{T:hd,append:id})};function Qd(){var a=Nd;function b(b,d){Object.defineProperty(b,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(b){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,b);else{var c=void 0;if(this.firstChild){var e=this.childNodes,g=e.length;if(0<g&&L(this)){c=Array(g);for(var k=0;k<g;k++)c[k]=e[k]}}d.set.call(this,b);if(c)for(b=0;b<c.length;b++)P(a,c[b])}}})}N(Node.prototype,"insertBefore",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);
+b=nd.call(this,b,d);if(L(this))for(d=0;d<c.length;d++)O(a,c[d]);return b}c=L(b);d=nd.call(this,b,d);c&&P(a,b);L(this)&&O(a,b);return d});N(Node.prototype,"appendChild",function(b){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=md.call(this,b);if(L(this))for(var e=0;e<c.length;e++)O(a,c[e]);return b}c=L(b);e=md.call(this,b);c&&P(a,b);L(this)&&O(a,b);return e});N(Node.prototype,"cloneNode",function(b){b=ld.call(this,b);this.ownerDocument.__CE_hasRegistry?Q(a,b):
+Zc(a,b);return b});N(Node.prototype,"removeChild",function(b){var c=L(b),e=od.call(this,b);c&&P(a,b);return e});N(Node.prototype,"replaceChild",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=pd.call(this,b,d);if(L(this))for(P(a,d),d=0;d<c.length;d++)O(a,c[d]);return b}c=L(b);var f=pd.call(this,b,d),h=L(this);h&&P(a,d);c&&P(a,b);h&&O(a,b);return f});qd&&qd.get?b(Node.prototype,qd):Yc(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){for(var a=
+[],b=0;b<this.childNodes.length;b++)a.push(this.childNodes[b].textContent);return a.join("")},set:function(a){for(;this.firstChild;)od.call(this,this.firstChild);md.call(this,document.createTextNode(a))}})})};function Rd(a){var b=Element.prototype;function c(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];e=[];for(var g=[],k=0;k<d.length;k++){var l=d[k];l instanceof Element&&L(l)&&g.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)e.push(l);else e.push(l)}b.apply(this,d);for(d=0;d<g.length;d++)P(a,g[d]);if(L(this))for(d=0;d<e.length;d++)g=e[d],g instanceof Element&&O(a,g)}}void 0!==Dd&&(b.before=c(Dd));void 0!==Dd&&(b.after=c(Ed));void 0!==
+Fd&&N(b,"replaceWith",function(b){for(var c=[],d=0;d<arguments.length;++d)c[d-0]=arguments[d];d=[];for(var h=[],g=0;g<c.length;g++){var k=c[g];k instanceof Element&&L(k)&&h.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)d.push(k);else d.push(k)}g=L(this);Fd.apply(this,c);for(c=0;c<h.length;c++)P(a,h[c]);if(g)for(P(a,this),c=0;c<d.length;c++)h=d[c],h instanceof Element&&O(a,h)});void 0!==Gd&&N(b,"remove",function(){var b=L(this);Gd.call(this);b&&P(a,this)})};function Sd(){var a=Nd;function b(b,c){Object.defineProperty(b,"innerHTML",{enumerable:c.enumerable,configurable:!0,get:c.get,set:function(b){var d=this,e=void 0;L(this)&&(e=[],M(this,function(a){a!==d&&e.push(a)}));c.set.call(this,b);if(e)for(var f=0;f<e.length;f++){var h=e[f];1===h.__CE_state&&a.disconnectedCallback(h)}this.ownerDocument.__CE_hasRegistry?Q(a,this):Zc(a,this);return b}})}function c(b,c){N(b,"insertAdjacentElement",function(b,d){var e=L(d);b=c.call(this,b,d);e&&P(a,d);L(b)&&O(a,d);
+return b})}function d(b,c){function d(b,c){for(var d=[];b!==c;b=b.nextSibling)d.push(b);for(c=0;c<d.length;c++)Q(a,d[c])}N(b,"insertAdjacentHTML",function(a,b){a=a.toLowerCase();if("beforebegin"===a){var e=this.previousSibling;c.call(this,a,b);d(e||this.parentNode.firstChild,this)}else if("afterbegin"===a)e=this.firstChild,c.call(this,a,b),d(this.firstChild,e);else if("beforeend"===a)e=this.lastChild,c.call(this,a,b),d(e||this.firstChild,null);else if("afterend"===a)e=this.nextSibling,c.call(this,
+a,b),d(this.nextSibling,e);else throw new SyntaxError("The value provided ("+String(a)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");})}rd&&N(Element.prototype,"attachShadow",function(a){return this.__CE_shadowRoot=a=rd.call(this,a)});sd&&sd.get?b(Element.prototype,sd):Id&&Id.get?b(HTMLElement.prototype,Id):Yc(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){return ld.call(this,!0).innerHTML},set:function(a){var b="template"===this.localName,c=b?this.content:
+this,d=ed.call(document,this.localName);for(d.innerHTML=a;0<c.childNodes.length;)od.call(c,c.childNodes[0]);for(a=b?d.content:d;0<a.childNodes.length;)md.call(c,a.childNodes[0])}})});N(Element.prototype,"setAttribute",function(b,c){if(1!==this.__CE_state)return ud.call(this,b,c);var d=td.call(this,b);ud.call(this,b,c);c=td.call(this,b);a.attributeChangedCallback(this,b,d,c,null)});N(Element.prototype,"setAttributeNS",function(b,c,d){if(1!==this.__CE_state)return xd.call(this,b,c,d);var e=wd.call(this,
+b,c);xd.call(this,b,c,d);d=wd.call(this,b,c);a.attributeChangedCallback(this,c,e,d,b)});N(Element.prototype,"removeAttribute",function(b){if(1!==this.__CE_state)return vd.call(this,b);var c=td.call(this,b);vd.call(this,b);null!==c&&a.attributeChangedCallback(this,b,c,null,null)});N(Element.prototype,"removeAttributeNS",function(b,c){if(1!==this.__CE_state)return yd.call(this,b,c);var d=wd.call(this,b,c);yd.call(this,b,c);var e=wd.call(this,b,c);d!==e&&a.attributeChangedCallback(this,c,d,e,b)});Jd?
+c(HTMLElement.prototype,Jd):zd?c(Element.prototype,zd):console.warn("Custom Elements: `Element#insertAdjacentElement` was not patched.");Kd?d(HTMLElement.prototype,Kd):Ad?d(Element.prototype,Ad):console.warn("Custom Elements: `Element#insertAdjacentHTML` was not patched.");Od(a,Element.prototype,{T:Bd,append:Cd});Rd(a)};var Td=window.customElements;if(!Td||Td.forcePolyfill||"function"!=typeof Td.define||"function"!=typeof Td.get){var Nd=new Wc;Md();Pd();Od(Nd,DocumentFragment.prototype,{T:jd,append:kd});Qd();Sd();document.__CE_hasRegistry=!0;var customElements=new R(Nd);Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:customElements})};/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+function Ud(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function Vd(a){a=a.replace(Wd,"").replace(Xd,"");var b=Yd,c=a,d=new Ud;d.start=0;d.end=c.length;for(var e=d,f=0,h=c.length;f<h;f++)if("{"===c[f]){e.rules||(e.rules=[]);var g=e,k=g.rules[g.rules.length-1]||null;e=new Ud;e.start=f+1;e.parent=g;e.previous=k;g.rules.push(e)}else"}"===c[f]&&(e.end=f+1,e=e.parent||d);return b(d,a)}
+function Yd(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=Zd(c),c=c.replace($d," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=ae:c.match(be)&&(a.type=ce,a.keyframesName=a.selector.split($d).pop()):a.type=0===c.indexOf("--")?de:ee);if(c=a.rules)for(var d=0,e=c.length,f;d<e&&(f=c[d]);d++)Yd(f,
+b);return a}function Zd(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(a,c){a=c;for(c=6-a.length;c--;)a="0"+a;return"\\"+a})}
+function fe(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var h=e.length,g;f<h&&(g=e[f]);f++)d=fe(g,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(ge,"").replace(he,""),b=b.replace(ie,"").replace(je,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
+var ee=1,ce=7,ae=4,de=1E3,Wd=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,Xd=/@import[^;]*;/gim,ge=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,he=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,ie=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,je=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,be=/^@[^\s]*keyframes/,$d=/\s+/g;var S=!(window.ShadyDOM&&window.ShadyDOM.inUse),ne;function oe(a){ne=a&&a.shimcssproperties?!1:S||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?ne=window.ShadyCSS.nativeCss:window.ShadyCSS?(oe(window.ShadyCSS),window.ShadyCSS=void 0):oe(window.WebComponents&&window.WebComponents.flags);var T=ne;var pe=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,qe=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,re=/(--[\w-]+)\s*([:,;)]|$)/gi,se=/(animation\s*:)|(animation-name\s*:)/,te=/@media\s(.*)/,ue=/\{[^}]*\}/g;var ve=new Set;function we(a,b){if(!a)return"";"string"===typeof a&&(a=Vd(a));b&&xe(a,b);return fe(a,T)}function ye(a){!a.__cssRules&&a.textContent&&(a.__cssRules=Vd(a.textContent));return a.__cssRules||null}function ze(a){return!!a.parent&&a.parent.type===ce}function xe(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===ae){var h=a.selector.match(te);h&&(window.matchMedia(h[1]).matches||(e=!0))}f===ee?b(a):c&&f===ce?c(a):f===de&&(e=!0);if((a=a.rules)&&!e){e=0;f=a.length;for(var g;e<f&&(g=a[e]);e++)xe(g,b,c,d)}}}
+function Ae(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;Be(e,c,d);return e}var U=null;function Be(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);U?a.compareDocumentPosition(U)===Node.DOCUMENT_POSITION_PRECEDING&&(U=a):U=a}
+function Ce(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");a:{var d=0;var e=c+3;for(var f=a.length;e<f;e++)if("("===a[e])d++;else if(")"===a[e]&&0===--d)break a;e=-1}d=a.substring(c+4,e);c=a.substring(0,c);a=Ce(a.substring(e+1),b);e=d.indexOf(",");return-1===e?b(c,d.trim(),"",a):b(c,d.substring(0,e).trim(),d.substring(e+1).trim(),a)}function De(a,b){S?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
+function V(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,K:c}};function Ee(){}function Fe(a,b,c){var d=W;a.__styleScoped?a.__styleScoped=null:Ge(d,a,b||"",c)}function Ge(a,b,c,d){b.nodeType===Node.ELEMENT_NODE&&He(b,c,d);if(b="template"===b.localName?(b.content||b.Za).childNodes:b.children||b.childNodes)for(var e=0;e<b.length;e++)Ge(a,b[e],c,d)}
+function He(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute(Ie);c?d&&(b=d.replace("style-scope","").replace(b,""),De(a,b)):De(a,(d?d+" ":"")+"style-scope "+b)}}function Je(a,b,c){var d=W,e=a.__cssBuild;S||"shady"===e?b=we(b,c):(a=V(a),b=Ke(d,b,a.is,a.K,c)+"\n\n");return b.trim()}
+function Ke(a,b,c,d,e){var f=Le(c,d);c=c?Me+c:"";return we(b,function(b){b.c||(b.selector=b.l=Ne(a,b,a.b,c,f),b.c=!0);e&&e(b,c,f)})}function Le(a,b){return b?"[is="+a+"]":a}function Ne(a,b,c,d,e){var f=b.selector.split(Oe);if(!ze(b)){b=0;for(var h=f.length,g;b<h&&(g=f[b]);b++)f[b]=c.call(a,g,d,e)}return f.join(Oe)}function Pe(a){return a.replace(Qe,function(a,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
+Ee.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=Qe.test(a);e&&(a=a.replace(Qe,function(a,b,c){return":"+b+"("+c.replace(/\s/g,"")+")"}),a=Pe(a));a=a.replace(Re,Se+" $1");a=a.replace(Te,function(a,e,g){d||(a=Ue(g,e,b,c),d=d||a.stop,e=a.Da,g=a.value);return e+g});e&&(a=Pe(a));return a};
+function Ue(a,b,c,d){var e=a.indexOf(Ve);0<=a.indexOf(Se)?a=We(a,d):0!==e&&(a=c?Xe(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Ye,function(a,b){return" > "+b}))}a=a.replace(Ze,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+c+'"]'});return{value:a,Da:b,stop:f}}function Xe(a,b){a=a.split($e);a[0]+=b;return a.join($e)}
+function We(a,b){var c=a.match(af);return(c=c&&c[2].trim()||"")?c[0].match(bf)?a.replace(af,function(a,c,f){return b+f}):c.split(bf)[0]===b?c:cf:a.replace(Se,b)}function df(a){a.selector===ef&&(a.selector="html")}Ee.prototype.c=function(a){return a.match(Ve)?this.b(a,ff):Xe(a.trim(),ff)};q.Object.defineProperties(Ee.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
+var Qe=/:(nth[-\w]+)\(([^)]+)\)/,ff=":not(.style-scope)",Oe=",",Te=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,bf=/[[.:#*]/,Se=":host",ef=":root",Ve="::slotted",Re=new RegExp("^("+Ve+")"),af=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Ye=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Ze=/(.*):dir\((?:(ltr|rtl))\)/,Me=".",$e=":",Ie="class",cf="should_not_match",W=new Ee;function gf(a,b,c,d){this.w=a||null;this.b=b||null;this.fa=c||[];this.G=null;this.K=d||"";this.a=this.o=this.B=null}function X(a){return a?a.__styleInfo:null}function hf(a,b){return a.__styleInfo=b}gf.prototype.c=function(){return this.w};gf.prototype._getStyleRules=gf.prototype.c;function jf(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var kf=navigator.userAgent.match("Trident");function lf(){}function mf(a){var b={},c=[],d=0;xe(a,function(a){nf(a);a.index=d++;a=a.j.cssText;for(var c;c=re.exec(a);){var e=c[1];":"!==c[2]&&(b[e]=!0)}},function(a){c.push(a)});a.b=c;a=[];for(var e in b)a.push(e);return a}
+function nf(a){if(!a.j){var b={},c={};of(a,c)&&(b.v=c,a.rules=null);b.cssText=a.parsedCssText.replace(ue,"").replace(pe,"");a.j=b}}function of(a,b){var c=a.j;if(c){if(c.v)return Object.assign(b,c.v),!0}else{c=a.parsedCssText;for(var d;a=pe.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
+function pf(a,b,c){b&&(b=0<=b.indexOf(";")?qf(a,b,c):Ce(b,function(b,e,f,h){if(!e)return b+h;(e=pf(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=pf(a,c[f]||f,c)||f;return b+(e||"")+h}));return b&&b.trim()||""}
+function qf(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){qe.lastIndex=0;if(f=qe.exec(e))e=pf(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var h=e.substring(f);h=h.trim();h=pf(a,h,c)||h;e=e.substring(0,f)+h}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
+function rf(a,b){var c={},d=[];xe(a,function(a){a.j||nf(a);var e=a.l||a.parsedSelector;b&&a.j.v&&e&&jf.call(b,e)&&(of(a,c),a=a.index,e=parseInt(a/32,10),d[e]=(d[e]||0)|1<<a%32)},null,!0);return{v:c,key:d}}
+function sf(a,b,c,d){b.j||nf(b);if(b.j.v){var e=V(a);a=e.is;e=e.K;e=a?Le(a,e):"html";var f=b.parsedSelector,h=":host > *"===f||"html"===f,g=0===f.indexOf(":host")&&!h;"shady"===c&&(h=f===e+" > *."+e||-1!==f.indexOf("html"),g=!h&&0===f.indexOf(e));"shadow"===c&&(h=":host > *"===f||"html"===f,g=g&&!h);if(h||g)c=e,g&&(b.l||(b.l=Ne(W,b,W.b,a?Me+a:"",e)),c=b.l||e),d({Qa:c,Ja:g,ib:h})}}
+function tf(a,b){var c={},d={},e=b&&b.__cssBuild;xe(b,function(b){sf(a,b,e,function(e){jf.call(a.g||a,e.Qa)&&(e.Ja?of(b,c):of(b,d))})},null,!0);return{Pa:d,Ha:c}}
+function uf(a,b,c,d){var e=V(b),f=Le(e.is,e.K),h=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])");e=X(b).w;var g=vf(e,d);return Je(b,e,function(b){var e="";b.j||nf(b);b.j.cssText&&(e=qf(a,b.j.cssText,c));b.cssText=e;if(!S&&!ze(b)&&b.cssText){var k=e=b.cssText;null==b.ka&&(b.ka=se.test(e));if(b.ka)if(null==b.S){b.S=[];for(var p in g)k=g[p],k=k(e),e!==k&&(e=k,b.S.push(p))}else{for(p=0;p<b.S.length;++p)k=g[b.S[p]],e=k(e);k=e}b.cssText=k;b.l=b.l||b.selector;e="."+d;
+p=b.l.split(",");k=0;for(var z=p.length,E;k<z&&(E=p[k]);k++)p[k]=E.match(h)?E.replace(f,e):e+" "+E;b.selector=p.join(",")}})}function vf(a,b){a=a.b;var c={};if(!S&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,h=b;f.g=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+h;f.l=f.l||f.selector;f.selector=f.l.replace(f.keyframesName,f.a);c[e.keyframesName]=wf(e)}return c}function wf(a){return function(b){return b.replace(a.g,a.a)}}
+function xf(a,b){var c=yf,d=ye(a);a.textContent=we(d,function(a){var d=a.cssText=a.parsedCssText;a.j&&a.j.cssText&&(d=d.replace(ge,"").replace(he,""),a.cssText=qf(c,d,b))})}q.Object.defineProperties(lf.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var yf=new lf;var zf={},Af=window.customElements;if(Af&&!S){var Bf=Af.define;Af.define=function(a,b,c){var d=document.createComment(" Shady DOM styles for "+a+" "),e=document.head;e.insertBefore(d,(U?U.nextSibling:null)||e.firstChild);U=d;zf[a]=d;Bf.call(Af,a,b,c)}};function Cf(){this.cache={}}Cf.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({v:b,styleElement:c,o:d});100<e.length&&e.shift();this.cache[a]=e};Cf.prototype.fetch=function(a,b,c){if(a=this.cache[a])for(var d=a.length-1;0<=d;d--){var e=a[d],f;a:{for(f=0;f<c.length;f++){var h=c[f];if(e.v[h]!==b[h]){f=!1;break a}}f=!0}if(f)return e}};function Df(){}
+function Ef(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode();var h=e;var g=[];h.classList?g=Array.from(h.classList):h instanceof window.SVGElement&&h.hasAttribute("class")&&(g=h.getAttribute("class").split(/\s+/));h=g;g=h.indexOf(W.a);if((h=-1<g?h[g+1]:"")&&f===e.ownerDocument)Fe(e,h,!0);else if(f.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&
+(f=f.host))if(f=V(f).is,h===f)for(e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+W.a+")"),f=0;f<e.length;f++)He(e[f],h);else h&&Fe(e,h,!0),Fe(e,f)}}}}
+if(!S){var Ff=new MutationObserver(Ef),Gf=function(a){Ff.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)Gf(document);else{var Hf=function(){Gf(document.body)};window.HTMLImports?window.HTMLImports.whenReady(Hf):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){Hf();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",a)}else Hf()})}Df=function(){Ef(Ff.takeRecords())}}
+var If=Df;var Jf={};var Kf=Promise.resolve();function Lf(a){if(a=Jf[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Mf(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Nf(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a.a||(a.a=!0,Kf.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a.a=!1}))};var Of=null,Pf=window.HTMLImports&&window.HTMLImports.whenReady||null,Qf;function Rf(a){requestAnimationFrame(function(){Pf?Pf(a):(Of||(Of=new Promise(function(a){Qf=a}),"complete"===document.readyState?Qf():document.addEventListener("readystatechange",function(){"complete"===document.readyState&&Qf()})),Of.then(function(){a&&a()}))})};var Sf=new Cf;function Y(){var a=this;this.H={};this.c=document.documentElement;var b=new Ud;b.rules=[];this.g=hf(this.c,new gf(b));this.m=!1;this.b=this.a=null;Rf(function(){Tf(a)})}n=Y.prototype;n.sa=function(){If()};n.Fa=function(a){return ye(a)};n.Sa=function(a){return we(a)};
+n.prepareTemplate=function(a,b,c){if(!a.b){a.b=!0;a.name=b;a.extends=c;Jf[b]=a;var d=(d=a.content.querySelector("style"))?d.getAttribute("css-build")||"":"";var e=[];for(var f=a.content.querySelectorAll("style"),h=0;h<f.length;h++){var g=f[h];if(g.hasAttribute("shady-unscoped")){if(!S){var k=g.textContent;ve.has(k)||(ve.add(k),k=g.cloneNode(!0),document.head.appendChild(k));g.parentNode.removeChild(g)}}else e.push(g.textContent),g.parentNode.removeChild(g)}e=e.join("").trim();c={is:b,extends:c,Xa:d};
+S||Fe(a.content,b);Tf(this);f=qe.test(e)||pe.test(e);qe.lastIndex=0;pe.lastIndex=0;e=Vd(e);f&&T&&this.a&&this.a.transformRules(e,b);a._styleAst=e;a.c=d;d=[];T||(d=mf(a._styleAst));if(!d.length||T)e=S?a.content:null,b=zf[b],f=Je(c,a._styleAst),b=f.length?Ae(f,c.is,e,b):void 0,a.ja=b;a.Aa=d}};
+function Uf(a){!a.b&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.b=window.ShadyCSS.CustomStyleInterface,a.b.transformCallback=function(b){a.pa(b)},a.b.validateCallback=function(){requestAnimationFrame(function(){(a.b.enqueued||a.m)&&a.D()})})}function Tf(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.ApplyShim&&(a.a=window.ShadyCSS.ApplyShim,a.a.invalidCallback=Lf);Uf(a)}
+n.D=function(){Tf(this);if(this.b){var a=this.b.processStyles();if(this.b.enqueued){if(T)for(var b=0;b<a.length;b++){var c=this.b.getStyleForCustomStyle(a[b]);if(c&&T&&this.a){var d=ye(c);Tf(this);this.a.transformRules(d);c.textContent=we(d)}}else for(Vf(this,this.c,this.g),b=0;b<a.length;b++)(c=this.b.getStyleForCustomStyle(a[b]))&&xf(c,this.g.B);this.b.enqueued=!1;this.m&&!T&&this.styleDocument()}}};
+n.styleElement=function(a,b){var c=V(a).is,d=X(a);if(!d){var e=V(a);d=e.is;e=e.K;var f=zf[d];d=Jf[d];if(d){var h=d._styleAst;var g=d.Aa}d=hf(a,new gf(h,f,g,e))}a!==this.c&&(this.m=!0);b&&(d.G=d.G||{},Object.assign(d.G,b));if(T){if(d.G){b=d.G;for(var k in b)null===k?a.style.removeProperty(k):a.style.setProperty(k,b[k])}if(((k=Jf[c])||a===this.c)&&k&&k.ja&&!Mf(k)){if(Mf(k)||k._applyShimValidatingVersion!==k._applyShimNextVersion)Tf(this),this.a&&this.a.transformRules(k._styleAst,c),k.ja.textContent=
+Je(a,d.w),Nf(k);S&&(c=a.shadowRoot)&&(c.querySelector("style").textContent=Je(a,d.w));d.w=k._styleAst}}else if(Vf(this,a,d),d.fa&&d.fa.length){c=d;k=V(a).is;d=(b=Sf.fetch(k,c.B,c.fa))?b.styleElement:null;h=c.o;(g=b&&b.o)||(g=this.H[k]=(this.H[k]||0)+1,g=k+"-"+g);c.o=g;g=c.o;e=yf;e=d?d.textContent||"":uf(e,a,c.B,g);f=X(a);var l=f.a;l&&!S&&l!==d&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));S?f.a?(f.a.textContent=e,d=f.a):e&&(d=Ae(e,g,a.shadowRoot,f.b)):d?d.parentNode||
+(kf&&-1<e.indexOf("@media")&&(d.textContent=e),Be(d,null,f.b)):e&&(d=Ae(e,g,null,f.b));d&&(d._useCount=d._useCount||0,f.a!=d&&d._useCount++,f.a=d);g=d;S||(d=c.o,f=e=a.getAttribute("class")||"",h&&(f=e.replace(new RegExp("\\s*x-scope\\s*"+h+"\\s*","g")," ")),f+=(f?" ":"")+"x-scope "+d,e!==f&&De(a,f));b||Sf.store(k,c.B,g,c.o)}};function Wf(a,b){return(b=b.getRootNode().host)?X(b)?b:Wf(a,b):a.c}
+function Vf(a,b,c){a=Wf(a,b);var d=X(a);a=Object.create(d.B||null);var e=tf(b,c.w);b=rf(d.w,b).v;Object.assign(a,e.Ha,b,e.Pa);b=c.G;for(var f in b)if((e=b[f])||0===e)a[f]=e;f=yf;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=pf(f,a[d],a);c.B=a}n.styleDocument=function(a){this.styleSubtree(this.c,a)};
+n.styleSubtree=function(a,b){var c=a.shadowRoot;(c||a===this.c)&&this.styleElement(a,b);if(b=c&&(c.children||c.childNodes))for(a=0;a<b.length;a++)this.styleSubtree(b[a]);else if(a=a.children||a.childNodes)for(b=0;b<a.length;b++)this.styleSubtree(a[b])};n.pa=function(a){var b=this,c=ye(a);xe(c,function(a){if(S)df(a);else{var c=W;a.selector=a.parsedSelector;df(a);a.selector=a.l=Ne(c,a,c.c,void 0,void 0)}T&&(Tf(b),b.a&&b.a.transformRule(a))});T?a.textContent=we(c):this.g.w.rules.push(c)};
+n.getComputedStyleValue=function(a,b){var c;T||(c=(X(a)||X(Wf(this,a))).B[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};n.Ra=function(a,b){var c=a.getRootNode();b=b?b.split(/\s/):[];c=c.host&&c.host.localName;if(!c){var d=a.getAttribute("class");if(d){d=d.split(/\s/);for(var e=0;e<d.length;e++)if(d[e]===W.a){c=d[e+1];break}}}c&&b.push(W.a,c);T||(c=X(a))&&c.o&&b.push(yf.a,c.o);De(a,b.join(" "))};n.Ba=function(a){return X(a)};Y.prototype.flush=Y.prototype.sa;
+Y.prototype.prepareTemplate=Y.prototype.prepareTemplate;Y.prototype.styleElement=Y.prototype.styleElement;Y.prototype.styleDocument=Y.prototype.styleDocument;Y.prototype.styleSubtree=Y.prototype.styleSubtree;Y.prototype.getComputedStyleValue=Y.prototype.getComputedStyleValue;Y.prototype.setElementClass=Y.prototype.Ra;Y.prototype._styleInfoForNode=Y.prototype.Ba;Y.prototype.transformCustomStyleForDocument=Y.prototype.pa;Y.prototype.getStyleAst=Y.prototype.Fa;Y.prototype.styleAstToString=Y.prototype.Sa;
+Y.prototype.flushCustomStyles=Y.prototype.D;Object.defineProperties(Y.prototype,{nativeShadow:{get:function(){return S}},nativeCss:{get:function(){return T}}});var Z=new Y,Xf,Yf;window.ShadyCSS&&(Xf=window.ShadyCSS.ApplyShim,Yf=window.ShadyCSS.CustomStyleInterface);window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.D();Z.prepareTemplate(a,b,c)},styleSubtree:function(a,b){Z.D();Z.styleSubtree(a,b)},styleElement:function(a){Z.D();Z.styleElement(a)},styleDocument:function(a){Z.D();Z.styleDocument(a)},getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:T,nativeShadow:S};Xf&&(window.ShadyCSS.ApplyShim=Xf);
+Yf&&(window.ShadyCSS.CustomStyleInterface=Yf);/*
+
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+var Zf=window.customElements,$f=window.HTMLImports,ag=window.HTMLTemplateElement;window.WebComponents=window.WebComponents||{};if(Zf&&Zf.polyfillWrapFlushCallback){var bg,cg=function(){if(bg){ag.Ca&&ag.Ca(window.document);var a=bg;bg=null;a();return!0}},dg=$f.whenReady;Zf.polyfillWrapFlushCallback(function(a){bg=a;dg(cg)});$f.whenReady=function(a){dg(function(){cg()?$f.whenReady(a):a()})}}
+$f.whenReady(function(){requestAnimationFrame(function(){window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})});var eg=document.createElement("style");eg.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var fg=document.querySelector("head");fg.insertBefore(eg,fg.firstChild);}).call(this);
+
+//# sourceMappingURL=webcomponents-hi-sd-ce.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js.map
new file mode 100644
index 00000000000..40142c326bf
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd-ce.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/@webcomponents/html-imports/src/html-imports.js"," [synthetic:util/global] "," [synthetic:util/defineproperty] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterator] ","node_modules/@webcomponents/shadydom/src/shady-data.js","node_modules/@webcomponents/shadydom/src/utils.js","node_modules/@webcomponents/shadydom/src/flush.js","node_modules/@webcomponents/shadydom/src/observe-changes.js","node_modules/@webcomponents/shadydom/src/native-methods.js","node_modules/@webcomponents/shadydom/src/innerHTML.js","node_modules/@webcomponents/shadydom/src/native-tree-walker.js","node_modules/@webcomponents/shadydom/src/native-tree-accessors.js","node_modules/@webcomponents/shadydom/src/native-tree.js","node_modules/@webcomponents/shadydom/src/patch-accessors.js","node_modules/@webcomponents/shadydom/src/attach-shadow.js","node_modules/@webcomponents/shadydom/src/patch-builtins.js","node_modules/@webcomponents/shadydom/src/logical-tree.js","node_modules/@webcomponents/shadydom/src/logical-mutation.js"," [synthetic:es6/util/arrayfromiterable] ","node_modules/@webcomponents/shadydom/src/patch-events.js","node_modules/@webcomponents/shadydom/src/array-splice.js","node_modules/@webcomponents/shadydom/src/shadydom.js","node_modules/@webcomponents/custom-elements/src/Utilities.js","node_modules/@webcomponents/custom-elements/src/CustomElementInternals.js","node_modules/@webcomponents/custom-elements/src/CustomElementState.js","node_modules/@webcomponents/custom-elements/src/DocumentConstructionObserver.js","node_modules/@webcomponents/custom-elements/src/CustomElementRegistry.js","node_modules/@webcomponents/custom-elements/src/Deferred.js","node_modules/@webcomponents/custom-elements/src/Patch/Native.js","node_modules/@webcomponents/custom-elements/src/AlreadyConstructedMarker.js","node_modules/@webcomponents/custom-elements/src/Patch/HTMLElement.js","node_modules/@webcomponents/custom-elements/src/custom-elements.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ParentNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Document.js","node_modules/@webcomponents/custom-elements/src/Patch/Node.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ChildNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Element.js","node_modules/@webcomponents/custom-elements/src/Patch/DocumentFragment.js","node_modules/@webcomponents/shadycss/src/css-parse.js","node_modules/@webcomponents/shadycss/src/style-settings.js","node_modules/@webcomponents/shadycss/src/common-regex.js","node_modules/@webcomponents/shadycss/src/unscoped-style-handler.js","node_modules/@webcomponents/shadycss/src/style-util.js","node_modules/@webcomponents/shadycss/src/style-transformer.js","node_modules/@webcomponents/shadycss/src/style-info.js","node_modules/@webcomponents/shadycss/src/style-properties.js","node_modules/@webcomponents/shadycss/src/style-placeholder.js","node_modules/@webcomponents/shadycss/src/style-cache.js","node_modules/@webcomponents/shadycss/src/document-watcher.js","node_modules/@webcomponents/shadycss/src/template-map.js","node_modules/@webcomponents/shadycss/src/apply-shim-utils.js","node_modules/@webcomponents/shadycss/src/document-wait.js","node_modules/@webcomponents/shadycss/src/scoping-shim.js","node_modules/@webcomponents/shadycss/src/common-utils.js","node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js","src/post-polyfill.js","src/unresolved.js"],"names":["$jscomp.global","$jscomp.defineProperty","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIterator","$jscomp.initSymbolIterator","$jscomp.iteratorPrototype","scope","newCustomEvent","type","params","window","CustomEvent","event","document","createEvent","initCustomEvent","bubbles","cancelable","detail","importForElement","element","useNative","ownerDocument","doc","parentNode","closest","importSelector","isImportLink","whenImportsReady","callback","imports","QSA","rootImportSelector","pending","length","forEach","imp","whenElementLoaded","whenDocumentReady","stateChanged","readyState","body","removeEventListener","addEventListener","whenReady","localName","src","firstChild","onLoadingDone","isIE","node","nodeType","Node","ELEMENT_NODE","rel","constructor","Importer","documents","inflight","dynamicImportsMO","MutationObserver","m","handleMutations","observe","head","childList","subtree","loadImports","replaceScripts","fragment","template","content","scriptsSelector","script","clone","createElement","attributes","attr","setAttribute","name","value","textContent","replaceChild","selector","childNodes","querySelectorAll","emptyNodeList","list","inverseOrder","increment","i","link","currentScript","Object","defineProperty","get","scripts","configurable","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","STYLESHEET_REGEXP","Path","fixUrls","base","href","resolveUrl","getAttribute","r","replaceUrls","text","linkUrl","regexp","replace","pre","url","post","urlPath","undefined","__workingURL","u","URL","pathname","e","__tempDoc","implementation","createHTMLDocument","__base","appendChild","__anchor","Xhr","async","load","success","fail","match","pieces","split","resource","header","indexOf","atob","decodeURIComponent","request","XMLHttpRequest","open","onload","request.onload","redirectedUrl","responseURL","getResponseHeader","location","origin","protocol","host","response","responseText","status","send","test","navigator","userAgent","links","loadImport","fireEventIfNeeded","makeDocument","processImportsIfLoadingDone","createDocumentFragment","p1","p2","innerHTML","baseEl","querySelector","removeAttribute","n$","importDependenciesSelector","inlineScriptIndex","n","importDependencyAttr","encodeURIComponent","num","disconnect","flatten","scriptsOk","stylesOk","fireEvents","waitForStyles","runScripts","DOCUMENT_FRAGMENT_NODE","cloneScript","l","s","s$","pendingScriptsSelector","pendingStylesSelector","needsMove","disabledLinkSelector","placeholder","insertBefore","nextSibling","newSibling","import","dispatchEvent","eventType","mutations","addedNodes","elem","importer","imps","target","native_baseURI","getOwnPropertyDescriptor","prototype","klass","Element","ownerDoc","call","enumerable","HTMLLinkElement","HTMLImports","ShadyData","publicRoot","root","dirty","flattenedNodes","_prevAssignedSlot","_previouslyAssignedNodes","assignedSlot","assignedNodes","observer","previousSibling","lastChild","ownerShadyRoot","__insideAccessors","__outsideAccessors","toJSON","ensureShadyDataForNode","__shady","shadyDataForNode","settings","hasNativeShadowDOM","attachShadow","getRootNode","desc","hasDescriptors","inUse","IS_IE","IS_EDGE","useNativeAccessors","isTrackingLogicalChildNodes","nodeData","isShadyRoot","obj","_localName","ownerShadyRootForNode","p","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","extend","source","getOwnPropertyNames","pd","extendAll","sources","mixin","twiddle","createTextNode","queue","shift","characterData","microtask","push","hasDocumentContains","contains","container","flushList","scheduled","enqueue","flush","didFlush","AsyncObserver","_scheduled","removedNodes","callbacks","Set","schedule","takeRecords","cb","observeChildren","sd","add","_callback","_observer","_node","unobserveChildren","handle","delete","size","filterMutations","targetRootNode","map","mutation","mutationInScope","nodes","Array","from","filter","create","removeChild","cloneNode","importNode","Document","windowAddEventListener","Window","windowRemoveEventListener","HTMLElement","getElementById","elementQuerySelector","fragmentQuerySelector","DocumentFragment","documentQuerySelector","elementQuerySelectorAll","fragmentQuerySelectorAll","documentQuerySelectorAll","DOCUMENT_NODE","escapeAttrRegExp","escapeDataRegExp","escapeReplace","c","makeSet","arr","set","voidElements","plaintextParents","getInnerHTML","c$","child","tagName","attrs","TEXT_NODE","data","COMMENT_NODE","console","error","Error","nodeWalker","createTreeWalker","NodeFilter","SHOW_ALL","elementWalker","SHOW_ELEMENT","currentNode","parentElement","firstElementChild","lastElementChild","previousElementSibling","nextElementSibling","children","textWalker","SHOW_TEXT","nextNode","nodeValue","nativeProtos","findNodeDescriptor","proto","hasOwnProperty","nodeAccessors","fragmentAccessors","documentAccessors","slice","accessors","nativeTreeAccessors","nativeTreeWalker","clearNode","inertDoc","nativeIsConnectedAccessors","nativeIsConnected","nativeActiveElementDescriptor","OutsideAccessors","ClassNameAccessor","className","InsideAccessors","item","childNodes.item","index","childElementCount","tc","cn","join","nativeAccessors","children.item","containerName","htmlContainer","ShadowRootAccessor","shadowRoot","ActiveElementAccessor","activeElement","active","nativeContains","activeRoot","patchAccessorGroup","descriptors","force","objDesc","warn","patchAccessors","patchShadowRootAccessors","ShadyRoot","__proto__","defineProperties","nodeName","prop","patchOutsideElementAccessors","patchInsideElementAccessors","linkNode","ref_node","containerData","ref_nodeData","psd","nsd","recordChildNodes","parent","refData","ownerRoot","slotsAdded","slots","_ensureSlotData","_pendingSlots","_slotList","_slotMap","$jscomp.arrayFromIterator","$jscomp.makeIterator","_asyncRender","resetTo","parentData","hasShadowRootWithSlot","preventNativeInsert","firstComposedNode","nativeMethods","scheduleObserver","preventNativeRemove","removeOwnerShadyRoot","changeSlotContent","_validateSlots","slot","splice","x","didRemove","removingInsertionPoint","composed","flattened","_hasInsertionPoint","distributeAttributeChange","oldName","__slotName","_nameForSlot","_sortSlots","addedNode","removedNode","documentElement","query","matcher","halter","queryElements","elements","result","scopingShim","deep","nc","eventWrappersName","Date","now","alwaysComposed","pathComposer","startNode","composedPath","current","startRoot","retarget","refNode","path","refNodePath","ancestor","lastRoot","rootIdx","eventMixin","isTrusted","__composed","__composedPath","currentTarget","relatedTarget","__relatedTarget","__relatedTargetComposedPath","stopPropagation","Event","__propagationStopped","stopImmediatePropagation","__immediatePropagationStopped","mixinComposedFlag","Base","klazz","options","nonBubblingEventsToRetarget","hasRetargeted","fireHandlers","phase","hs","__handlers","fn","retargetNonBubblingEvent","AT_TARGET","lastFiredRoot","findListener","wrappers","capture","once","passive","savedType","savedListener","savedCapture","savedOnce","savedPassive","savedNode","fnOrObj","optionsOrCapture","handlerType","handleEvent","__shadyTarget","wrapperFn","patchEvent","lastCurrentTargetDesc","eventPhase","BUBBLING_PHASE","CAPTURING_PHASE","ret","ael","idx","activateFocusEventOverrides","ev","getPrototypeOf","patchProto","__sourceProto","PatchedEvent","PatchedCustomEvent","PatchedMouseEvent","MouseEvent","newSplice","addedCount","removed","calcSplices","currentEnd","old","oldEnd","currentStart","oldStart","prefixCount","suffixCount","minLength","Math","min","currentValue","previousValue","index1","index2","count","equals","rowCount","columnCount","distances","j","north","west","edits","EDIT_ADD","EDIT_DELETE","northWest","EDIT_LEAVE","EDIT_UPDATE","reverse","splices","oldIndex","ShadyRootConstructionToken","ancestorList","ancestors","unshift","token","TypeError","SHADYROOT_NAME","_mode","mode","hostData","MODE_CLOSED","rootData","_renderPending","_render","renderRoot","_distribute","slotData","_distributeNodeToSlot","slotParentRoot","slotParentData","_addAssignedToFlattenedNodes","prevAssignedNodes","_fireSlotChange","_compose","composeList","targetNode","distributedNode","d","next","forcedSlot","oldSlot","CATCHALL_NAME","assigned","nestedAssigned","slotNamesToSort","_mapSlots","sort","a","b","listA","listB","nA","nB","getAssignedSlot","windowMixin","bind","nodeMixin","IsConnectedAccessor","isConnected","textMixin","fragmentMixin","o","slotMixin","elementMixin","documentMixin","id","nativeBlur","blur","htmlElementMixin","shadowActive","shadowRootMixin","patchBuiltin","ShadyDOM","patch","nativeHTMLElement","Text","HTMLSlotElement","ShadowRoot","reservedTagList","isValidCustomElementName","reserved","has","validForm","nativeValue","__CE_isImportDocument","nextSiblingOrAncestorSibling","start","walkDeepDescendantElements","visitedImports","__CE_shadowRoot","setPropertyUnchecked","destination","CustomElementInternals","_localNameToDefinition","Map","_constructorToDefinition","_patches","_hasPatches","setDefinition","definition","addPatch","listener","patchTree","__CE_patched","connectTree","custom","__CE_state","connectedCallback","upgradeElement","disconnectTree","disconnectedCallback","patchAndUpgradeTree","upgrade","gatherElements","__CE_hasRegistry","__CE_documentLoadHandled","clonedVisitedImports","defaultView","localNameToDefinition","constructionStack","pop","failed","__CE_definition","attributeChangedCallback","observedAttributes","oldValue","newValue","namespace","DocumentConstructionObserver","internals","_internals","_document","_handleMutations","Deferred","_resolve","_value","_promise","Promise","resolve","CustomElementRegistry","_elementDefinitionIsRunning","_whenDefinedDeferred","_flushCallback","this._flushCallback","_flushPending","_pendingDefinitions","_documentConstructionObserver","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry.prototype","?.prototype","define","Function","SyntaxError","getCallback","callbackValue","adoptedCallback","_flush","pendingDefinitions","elementsWithStableDefinitions","elementsWithPendingDefinitions","pendingElements","pendingUpgradableElements","deferred","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry_prototype$whenDefined","whenDefined","reject","prior","some","polyfillWrapFlushCallback","outer","inner","Document_createElement","Document_createElementNS","createElementNS","Document_importNode","Document_prepend","Document_append","DocumentFragment_prepend","DocumentFragment_append","Node_cloneNode","Node_appendChild","Node_insertBefore","Node_removeChild","Node_replaceChild","Node_textContent","Element_attachShadow","Element_innerHTML","Element_getAttribute","Element_setAttribute","Element_removeAttribute","Element_getAttributeNS","getAttributeNS","Element_setAttributeNS","setAttributeNS","Element_removeAttributeNS","removeAttributeNS","Element_insertAdjacentElement","Element_insertAdjacentHTML","Element_prepend","Element_append","Element_before","Element_after","Element_replaceWith","Element_remove","HTMLElement_innerHTML","HTMLElement_insertAdjacentElement","HTMLElement_insertAdjacentHTML","$jscompDefaultExport","AlreadyConstructedMarker","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElement.call","setPrototypeOf","lastIndex","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement","builtIn","appendPrependPatch","builtInMethod","connectedElements","apply","prepend","append","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_importNode.call","NS_HTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElementNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_append","patch_textContent","baseDescriptor","assignedValue","childNodesLength","insertedNodes","nativeResult","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_insertBefore.call","nodeWasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_appendChild.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_cloneNode.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_removeChild.call","nodeToInsert","nodeToRemove","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_replaceChild.call","nodeToInsertWasConnected","thisIsConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent.get","parts","beforeAfterPatch","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_before","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_after","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_replaceWith","wasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_remove","patch_innerHTML","htmlString","removedElements","patch_insertAdjacentElement","baseMethod","position","insertedElement","patch_insertAdjacentHTML","upgradeNodesInRange","end","toLowerCase","marker","String","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow","init","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML.get","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML.get","isTemplate","rawElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_append","priorCustomElements","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_append","customElements","StyleNode","parse","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.comments","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.port","parseCss","OPEN_BRACE","previous","CLOSE_BRACE","t","substring","trim","ss","_expandUnicodeEscapes","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.multipleSpaces","lastIndexOf","AT_START","MEDIA_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MEDIA_RULE","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.keyframesRule","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.KEYFRAMES_RULE","VAR_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MIXIN_RULE","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.STYLE_RULE","r$","code","repeat","stringify","preserveProperties","cssText","rules","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.customProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinApply","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.varApply","STYLE_RULE","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","port","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","nativeShadow","nativeCssVariables_","calcCssVariables","CSS","supports","ShadyCSS","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","VAR_CONSUMED","ANIMATION_MATCH","MEDIA_MATCH","BRACKETED","styleTextSet","toCssText","forEachRule","rulesForStyle","style","isKeyframesSelector","rule","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","matchMedia","applyCss","moniker","contextNode","applyStyle","lastHeadApplyNode","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","processVariableAndFallback","str","level","prefix","suffix","comma","fallback","setElementClassRaw","getIsExtends","typeExtension","is","extends","StyleTransformer","dom","shouldRemoveScope","_transformDom","_content","classList","remove","SCOPE_NAME","CLASS","elementStyles","styleRules","cssBuildType","css","ext","hostScope","_calcHostScope","CSS_CLASS_PREFIX","isScoped","transformedSelector","_transformRuleCss","self","_transformComplexSelector","transformer","p$","COMPLEX_SELECTOR_SEP","_twiddleNthPlus","NTH","inside","stop","isNth","SLOTTED_START","HOST","SIMPLE_SELECTOR_SEP","info","_transformCompoundSelector","combinator","slottedIndex","SLOTTED","_transformHostSelector","_transformSimpleSelector","slotted","SLOTTED_PAREN","paren","DIR_PAREN","before","dir","PSEUDO_PREFIX","HOST_PAREN","SIMPLE_SELECTOR_PREFIX","typeSelector","SELECTOR_NO_MATCH","normalizeRootSelector","ROOT","_transformDocumentSelector","SCOPE_DOC_SELECTOR","$jscomp.global.Object.defineProperties","RegExp","StyleInfo","ast","ownStylePropertyNames","overrideStyleProperties","customStyle","scopeSelector","styleProperties","styleInfo","_getStyleRules","method","StyleProperties","decorateStyles","props","keyframes","ruleIndex","decorateRule","propertyInfo","exec","onKeyframesRule","_keyframes","names","properties","collectProperties","hasProperties","assign","any","valueForProperty","property","valueForProperties","propertyValue","colon","pp","propertyDataFromStyles","selectorToMatch","parseInt","key","whenHostOrRootRule","cssBuild","parsedSelector","isRoot","isHost","hostAndRootPropertiesForScope","hostProps","rootProps","_element","transformStyles","hostSelector","hostRx","HOST_PREFIX","rxHostSelector","HOST_SUFFIX","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.get","keyframeTransforms","_elementKeyframeTransforms","output","input","hasAnimations","keyframeNamesToTransform","keyframe","transform","keyframesRules","keyframesNameRx","transformedKeyframesName","scopeId","_keyframesRuleTransformer","applyCustomStyle","XSCOPE_NAME","placeholderMap","ce","origDefine","wrappedDefine","clazz","placeHolder","createComment","after","StyleCache","cache","store","tagname","styleElement","typeMax","fetch","ownPropertyNames","entry","pn","handler","mxns","mxn","classes","hasAttribute","currentScope","newScope","unscoped","delayedStart","requestAnimationFrame","module$node_modules$$webcomponents$shadycss$src$document_watcher.flush","templateMap","promise","invalidate","elementName","templateIsValid","startValidatingTemplate","_validating","then","readyPromise","resolveFn","documentWait","styleCache","ScopingShim","_scopeCounter","_documentOwner","_documentOwnerStyleInfo","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.set","_elementsHaveApplied","_customStyleInterface","_applyShim","_ensure","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim.prototype","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim_prototype$flush","getStyleAst","styleAstToString","prepareTemplate","_prepared","styleTextParts","styles","scopingAttribute","newStyle","__cssBuild","_cssBuild","shadowroot","_style","_ownPropertyNames","_ensureCustomStyleInterface","CustomStyleInterface","transformCustomStyleForDocument","flushCustomStyles","_ensureApplyShim","ApplyShim","customStyles","_revalidateCustomStyleApplyShim","_updateProperties","_applyCustomStyles","styleDocument","overrideProps","_isRootOwner","removeProperty","setProperty","cachedStyle","cacheEntry","oldScopeSelector","cachedScopeSelector","applyElementStyle","v","_styleOwnerForNode","owner","ownerStyleInfo","hostAndRootProps","propertiesMatchingHost","propertyData","overrides","reify","styleSubtree","shadowChildren","documentRule","_transformRule","getComputedStyleValue","getComputedStyle","getPropertyValue","setElementClass","classString","scopeName","classAttr","k$","_styleInfoForNode","elementExtends","Template","WebComponents","flushCallback","runAndClearCallback","bootstrap","origWhenReady","ready"],"mappings":"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","file":"webcomponents-hi-sd-ce.js","sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(scope => {\n\n /********************* base setup *********************/\n const link = document.createElement('link');\n const useNative = Boolean('import' in link);\n const emptyNodeList = link.querySelectorAll('*');\n\n // Polyfill `currentScript` for browsers without it.\n let currentScript = null;\n if ('currentScript' in document === false) {\n Object.defineProperty(document, 'currentScript', {\n get() {\n return currentScript ||\n // NOTE: only works when called in synchronously executing code.\n // readyState should check if `loading` but IE10 is\n // interactive when scripts run so we cheat. This is not needed by\n // html-imports polyfill but helps generally polyfill `currentScript`.\n (document.readyState !== 'complete' ?\n document.scripts[document.scripts.length - 1] : null);\n },\n configurable: true\n });\n }\n\n /**\n * @param {Array|NodeList|NamedNodeMap} list\n * @param {!Function} callback\n * @param {boolean=} inverseOrder\n */\n const forEach = (list, callback, inverseOrder) => {\n const length = list ? list.length : 0;\n const increment = inverseOrder ? -1 : 1;\n let i = inverseOrder ? length - 1 : 0;\n for (; i < length && i >= 0; i = i + increment) {\n callback(list[i], i);\n }\n };\n\n /**\n * @param {!Node} node\n * @param {!string} selector\n * @return {!NodeList<!Element>}\n */\n const QSA = (node, selector) => {\n // IE 11 throws a SyntaxError if a node with no children is queried with\n // a selector containing the `:not([type])` syntax.\n if (!node.childNodes.length) {\n return emptyNodeList;\n }\n return node.querySelectorAll(selector);\n };\n\n /**\n * @param {!DocumentFragment} fragment\n */\n const replaceScripts = (fragment) => {\n forEach(QSA(fragment, 'template'), template => {\n forEach(QSA(template.content, scriptsSelector), script => {\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n forEach(script.attributes, attr => clone.setAttribute(attr.name, attr.value));\n clone.textContent = script.textContent;\n script.parentNode.replaceChild(clone, script);\n });\n replaceScripts(template.content);\n });\n };\n\n /********************* path fixup *********************/\n const CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n const CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n const STYLESHEET_REGEXP = /(<link[^>]*)(rel=['|\"]?stylesheet['|\"]?[^>]*>)/g;\n\n // path fixup: style elements in imports must be made relative to the main\n // document. We fixup url's in url() and @import.\n const Path = {\n\n fixUrls(element, base) {\n if (element.href) {\n element.setAttribute('href',\n Path.resolveUrl(element.getAttribute('href'), base));\n }\n if (element.src) {\n element.setAttribute('src',\n Path.resolveUrl(element.getAttribute('src'), base));\n }\n if (element.localName === 'style') {\n const r = Path.replaceUrls(element.textContent, base, CSS_URL_REGEXP);\n element.textContent = Path.replaceUrls(r, base, CSS_IMPORT_REGEXP);\n }\n },\n\n replaceUrls(text, linkUrl, regexp) {\n return text.replace(regexp, (m, pre, url, post) => {\n let urlPath = url.replace(/[\"']/g, '');\n if (linkUrl) {\n urlPath = Path.resolveUrl(urlPath, linkUrl);\n }\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n },\n\n resolveUrl(url, base) {\n // Lazy feature detection.\n if (Path.__workingURL === undefined) {\n Path.__workingURL = false;\n try {\n const u = new URL('b', 'http://a');\n u.pathname = 'c%20d';\n Path.__workingURL = (u.href === 'http://a/c%20d');\n } catch (e) {}\n }\n\n if (Path.__workingURL) {\n return (new URL(url, base)).href;\n }\n\n // Fallback to creating an anchor into a disconnected document.\n let doc = Path.__tempDoc;\n if (!doc) {\n doc = document.implementation.createHTMLDocument('temp');\n Path.__tempDoc = doc;\n doc.__base = doc.createElement('base');\n doc.head.appendChild(doc.__base);\n doc.__anchor = doc.createElement('a');\n }\n doc.__base.href = base;\n doc.__anchor.href = url;\n return doc.__anchor.href || url;\n }\n };\n\n /********************* Xhr processor *********************/\n const Xhr = {\n\n async: true,\n\n /**\n * @param {!string} url\n * @param {!function(!string, string=)} success\n * @param {!function(!string)} fail\n */\n load(url, success, fail) {\n if (!url) {\n fail('error: href must be specified');\n } else if (url.match(/^data:/)) {\n // Handle Data URI Scheme\n const pieces = url.split(',');\n const header = pieces[0];\n let resource = pieces[1];\n if (header.indexOf(';base64') > -1) {\n resource = atob(resource);\n } else {\n resource = decodeURIComponent(resource);\n }\n success(resource);\n } else {\n const request = new XMLHttpRequest();\n request.open('GET', url, Xhr.async);\n request.onload = () => {\n // Servers redirecting an import can add a Location header to help us\n // polyfill correctly. Handle relative and full paths.\n // Prefer responseURL which already resolves redirects\n // https://xhr.spec.whatwg.org/#the-responseurl-attribute\n let redirectedUrl = request.responseURL || request.getResponseHeader('Location');\n if (redirectedUrl && redirectedUrl.indexOf('/') === 0) {\n // In IE location.origin might not work\n // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7\n const origin = (location.origin || location.protocol + '//' + location.host);\n redirectedUrl = origin + redirectedUrl;\n }\n const resource = /** @type {string} */ (request.response || request.responseText);\n if (request.status === 304 || request.status === 0 ||\n request.status >= 200 && request.status < 300) {\n success(resource, redirectedUrl);\n } else {\n fail(resource);\n }\n };\n request.send();\n }\n }\n };\n\n /********************* importer *********************/\n\n const isIE = /Trident/.test(navigator.userAgent) ||\n /Edge\\/\\d./i.test(navigator.userAgent);\n\n const importSelector = 'link[rel=import]';\n\n // Used to disable loading of resources.\n const importDisableType = 'import-disable';\n\n const disabledLinkSelector = `link[rel=stylesheet][href][type=${importDisableType}]`;\n\n const scriptsSelector = `script:not([type]),script[type=\"application/javascript\"],` +\n `script[type=\"text/javascript\"]`;\n\n const importDependenciesSelector = `${importSelector},${disabledLinkSelector},` +\n `style:not([type]),link[rel=stylesheet][href]:not([type]),` + scriptsSelector;\n\n const importDependencyAttr = 'import-dependency';\n\n const rootImportSelector = `${importSelector}:not([${importDependencyAttr}])`;\n\n const pendingScriptsSelector = `script[${importDependencyAttr}]`;\n\n const pendingStylesSelector = `style[${importDependencyAttr}],` +\n `link[rel=stylesheet][${importDependencyAttr}]`;\n\n /**\n * Importer will:\n * - load any linked import documents (with deduping)\n * - whenever an import is loaded, prompt the parser to try to parse\n * - observe imported documents for new elements (these are handled via the\n * dynamic importer)\n */\n class Importer {\n constructor() {\n this.documents = {};\n // Used to keep track of pending loads, so that flattening and firing of\n // events can be done when all resources are ready.\n this.inflight = 0;\n this.dynamicImportsMO = new MutationObserver(m => this.handleMutations(m));\n // Observe changes on <head>.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n // 1. Load imports contents\n // 2. Assign them to first import links on the document\n // 3. Wait for import styles & scripts to be done loading/running\n // 4. Fire load/error events\n this.loadImports(document);\n }\n\n /**\n * @param {!(HTMLDocument|DocumentFragment|Element)} doc\n */\n loadImports(doc) {\n const links = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(links, link => this.loadImport(link));\n }\n\n /**\n * @param {!HTMLLinkElement} link\n */\n loadImport(link) {\n const url = link.href;\n // This resource is already being handled by another import.\n if (this.documents[url] !== undefined) {\n // If import is already loaded, we can safely associate it to the link\n // and fire the load/error event.\n const imp = this.documents[url];\n if (imp && imp['__loaded']) {\n link['__import'] = imp;\n this.fireEventIfNeeded(link);\n }\n return;\n }\n this.inflight++;\n // Mark it as pending to notify others this url is being loaded.\n this.documents[url] = 'pending';\n Xhr.load(url, (resource, redirectedUrl) => {\n const doc = this.makeDocument(resource, redirectedUrl || url);\n this.documents[url] = doc;\n this.inflight--;\n // Load subtree.\n this.loadImports(doc);\n this.processImportsIfLoadingDone();\n }, () => {\n // If load fails, handle error.\n this.documents[url] = null;\n this.inflight--;\n this.processImportsIfLoadingDone();\n });\n }\n\n /**\n * Creates a new document containing resource and normalizes urls accordingly.\n * @param {string=} resource\n * @param {string=} url\n * @return {!DocumentFragment}\n */\n makeDocument(resource, url) {\n if (!resource) {\n return document.createDocumentFragment();\n }\n\n if (isIE) {\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order. We disable the loading by\n // setting the type before setting innerHTML to avoid loading\n // resources twice.\n resource = resource.replace(STYLESHEET_REGEXP, (match, p1, p2) => {\n if (match.indexOf('type=') === -1) {\n return `${p1} type=${importDisableType} ${p2}`;\n }\n return match;\n });\n }\n\n let content;\n const template = /** @type {!HTMLTemplateElement} */\n (document.createElement('template'));\n template.innerHTML = resource;\n if (template.content) {\n content = template.content;\n // Clone scripts inside templates since they won't execute when the\n // hosting template is cloned.\n replaceScripts(content);\n } else {\n // <template> not supported, create fragment and move content into it.\n content = document.createDocumentFragment();\n while (template.firstChild) {\n content.appendChild(template.firstChild);\n }\n }\n\n // Support <base> in imported docs. Resolve url and remove its href.\n const baseEl = content.querySelector('base');\n if (baseEl) {\n url = Path.resolveUrl(baseEl.getAttribute('href'), url);\n baseEl.removeAttribute('href');\n }\n\n const n$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)>} */\n (QSA(content, importDependenciesSelector));\n // For source map hints.\n let inlineScriptIndex = 0;\n forEach(n$, n => {\n // Listen for load/error events, then fix urls.\n whenElementLoaded(n);\n Path.fixUrls(n, url);\n // Mark for easier selectors.\n n.setAttribute(importDependencyAttr, '');\n // Generate source map hints for inline scripts.\n if (n.localName === 'script' && !n.src && n.textContent) {\n const num = inlineScriptIndex ? `-${inlineScriptIndex}` : '';\n const content = n.textContent + `\\n//# sourceURL=${url}${num}.js\\n`;\n // We use the src attribute so it triggers load/error events, and it's\n // easier to capture errors (e.g. parsing) like this.\n n.setAttribute('src', 'data:text/javascript;charset=utf-8,' + encodeURIComponent(content));\n n.textContent = '';\n inlineScriptIndex++;\n }\n });\n return content;\n }\n\n /**\n * Waits for loaded imports to finish loading scripts and styles, then fires\n * the load/error events.\n */\n processImportsIfLoadingDone() {\n // Wait until all resources are ready, then load import resources.\n if (this.inflight) return;\n\n // Stop observing, flatten & load resource, then restart observing <head>.\n this.dynamicImportsMO.disconnect();\n this.flatten(document);\n // We wait for styles to load, and at the same time we execute the scripts,\n // then fire the load/error events for imports to have faster whenReady\n // callback execution.\n // NOTE: This is different for native behavior where scripts would be\n // executed after the styles before them are loaded.\n // To achieve that, we could select pending styles and scripts in the\n // document and execute them sequentially in their dom order.\n let scriptsOk = false,\n stylesOk = false;\n const onLoadingDone = () => {\n if (stylesOk && scriptsOk) {\n // Catch any imports that might have been added while we\n // weren't looking, wait for them as well.\n this.loadImports(document);\n if (this.inflight) return;\n\n // Restart observing.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n this.fireEvents();\n }\n }\n this.waitForStyles(() => {\n stylesOk = true;\n onLoadingDone();\n });\n this.runScripts(() => {\n scriptsOk = true;\n onLoadingDone();\n });\n }\n\n /**\n * @param {!HTMLDocument} doc\n */\n flatten(doc) {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(n$, n => {\n const imp = this.documents[n.href];\n n['__import'] = /** @type {!Document} */ (imp);\n if (imp && imp.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n // We set the .import to be the link itself, and update its readyState.\n // Other links with the same href will point to this link.\n this.documents[n.href] = n;\n n.readyState = 'loading';\n n['__import'] = n;\n this.flatten(imp);\n n.appendChild(imp);\n }\n });\n }\n\n /**\n * Replaces all the imported scripts with a clone in order to execute them.\n * Updates the `currentScript`.\n * @param {!function()} callback\n */\n runScripts(callback) {\n const s$ = QSA(document, pendingScriptsSelector);\n const l = s$.length;\n const cloneScript = i => {\n if (i < l) {\n // The pending scripts have been generated through innerHTML and\n // browsers won't execute them for security reasons. We cannot use\n // s.cloneNode(true) either, the only way to run the script is manually\n // creating a new element and copying its attributes.\n const s = s$[i];\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n // Remove import-dependency attribute to avoid double cloning.\n s.removeAttribute(importDependencyAttr);\n forEach(s.attributes, attr => clone.setAttribute(attr.name, attr.value));\n // Update currentScript and replace original with clone script.\n currentScript = clone;\n s.parentNode.replaceChild(clone, s);\n whenElementLoaded(clone, () => {\n currentScript = null;\n cloneScript(i + 1);\n });\n } else {\n callback();\n }\n };\n cloneScript(0);\n }\n\n /**\n * Waits for all the imported stylesheets/styles to be loaded.\n * @param {!function()} callback\n */\n waitForStyles(callback) {\n const s$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLStyleElement)>} */\n (QSA(document, pendingStylesSelector));\n let pending = s$.length;\n if (!pending) {\n callback();\n return;\n }\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10472273/\n // If there is one <link rel=stylesheet> imported, we must move all imported\n // links and styles to <head>.\n const needsMove = isIE && !!document.querySelector(disabledLinkSelector);\n forEach(s$, s => {\n // Listen for load/error events, remove selector once is done loading.\n whenElementLoaded(s, () => {\n s.removeAttribute(importDependencyAttr);\n if (--pending === 0) {\n callback();\n }\n });\n // Check if was already moved to head, to handle the case where the element\n // has already been moved but it is still loading.\n if (needsMove && s.parentNode !== document.head) {\n // Replace the element we're about to move with a placeholder.\n const placeholder = document.createElement(s.localName);\n // Add reference of the moved element.\n placeholder['__appliedElement'] = s;\n // Disable this from appearing in document.styleSheets.\n placeholder.setAttribute('type', 'import-placeholder');\n // Append placeholder next to the sibling, and move original to <head>.\n s.parentNode.insertBefore(placeholder, s.nextSibling);\n let newSibling = importForElement(s);\n while (newSibling && importForElement(newSibling)) {\n newSibling = importForElement(newSibling);\n }\n if (newSibling.parentNode !== document.head) {\n newSibling = null;\n }\n document.head.insertBefore(s, newSibling);\n // Enable the loading of <link rel=stylesheet>.\n s.removeAttribute('type');\n }\n });\n }\n\n /**\n * Fires load/error events for imports in the right order .\n */\n fireEvents() {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n // Inverse order to have events firing bottom-up.\n forEach(n$, n => this.fireEventIfNeeded(n), true);\n }\n\n /**\n * Fires load/error event for the import if this wasn't done already.\n * @param {!HTMLLinkElement} link\n */\n fireEventIfNeeded(link) {\n // Don't fire twice same event.\n if (!link['__loaded']) {\n link['__loaded'] = true;\n // Update link's import readyState.\n link.import && (link.import.readyState = 'complete');\n const eventType = link.import ? 'load' : 'error';\n link.dispatchEvent(newCustomEvent(eventType, {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }));\n }\n }\n\n /**\n * @param {Array<MutationRecord>} mutations\n */\n handleMutations(mutations) {\n forEach(mutations, m => forEach(m.addedNodes, elem => {\n if (elem && elem.nodeType === Node.ELEMENT_NODE) {\n // NOTE: added scripts are not updating currentScript in IE.\n if (isImportLink(elem)) {\n this.loadImport( /** @type {!HTMLLinkElement} */ (elem));\n } else {\n this.loadImports( /** @type {!Element} */ (elem));\n }\n }\n }));\n }\n }\n\n /**\n * @param {!Node} node\n * @return {boolean}\n */\n const isImportLink = node => {\n return node.nodeType === Node.ELEMENT_NODE && node.localName === 'link' &&\n ( /** @type {!HTMLLinkElement} */ (node).rel === 'import');\n };\n\n /**\n * Waits for an element to finish loading. If already done loading, it will\n * mark the element accordingly.\n * @param {!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)} element\n * @param {function()=} callback\n */\n const whenElementLoaded = (element, callback) => {\n if (element['__loaded']) {\n callback && callback();\n } else if ((element.localName === 'script' && !element.src) ||\n (element.localName === 'style' && !element.firstChild)) {\n // Inline scripts and empty styles don't trigger load/error events,\n // consider them already loaded.\n element['__loaded'] = true;\n callback && callback();\n } else {\n const onLoadingDone = event => {\n element.removeEventListener(event.type, onLoadingDone);\n element['__loaded'] = true;\n callback && callback();\n };\n element.addEventListener('load', onLoadingDone);\n // NOTE: We listen only for load events in IE/Edge, because in IE/Edge\n // <style> with @import will fire error events for each failing @import,\n // and finally will trigger the load event when all @import are\n // finished (even if all fail).\n if (!isIE || element.localName !== 'style') {\n element.addEventListener('error', onLoadingDone);\n }\n }\n }\n\n /**\n * Calls the callback when all imports in the document at call time\n * (or at least document ready) have loaded. Callback is called synchronously\n * if imports are already done loading.\n * @param {function()=} callback\n */\n const whenReady = callback => {\n // 1. ensure the document is in a ready state (has dom), then\n // 2. watch for loading of imports and call callback when done\n whenDocumentReady(() => whenImportsReady(() => callback && callback()));\n }\n\n /**\n * Invokes the callback when document is in ready state. Callback is called\n * synchronously if document is already done loading.\n * @param {!function()} callback\n */\n const whenDocumentReady = callback => {\n const stateChanged = () => {\n // NOTE: Firefox can hit readystate interactive without document.body existing.\n // This is anti-spec, but we handle it here anyways by waiting for next change.\n if (document.readyState !== 'loading' && !!document.body) {\n document.removeEventListener('readystatechange', stateChanged);\n callback();\n }\n }\n document.addEventListener('readystatechange', stateChanged);\n stateChanged();\n }\n\n /**\n * Invokes the callback after all imports are loaded. Callback is called\n * synchronously if imports are already done loading.\n * @param {!function()} callback\n */\n const whenImportsReady = callback => {\n let imports = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, rootImportSelector));\n let pending = imports.length;\n if (!pending) {\n callback();\n return;\n }\n forEach(imports, imp => whenElementLoaded(imp, () => {\n if (--pending === 0) {\n callback();\n }\n }));\n }\n\n /**\n * Returns the import document containing the element.\n * @param {!Node} element\n * @return {HTMLLinkElement|Document|undefined}\n */\n const importForElement = element => {\n if (useNative) {\n // Return only if not in the main doc!\n return element.ownerDocument !== document ? element.ownerDocument : null;\n }\n let doc = element['__importDoc'];\n if (!doc && element.parentNode) {\n doc = /** @type {!Element} */ (element.parentNode);\n if (typeof doc.closest === 'function') {\n // Element.closest returns the element itself if it matches the selector,\n // so we search the closest import starting from the parent.\n doc = doc.closest(importSelector);\n } else {\n // Walk up the parent tree until we find an import.\n while (!isImportLink(doc) && (doc = doc.parentNode)) {}\n }\n element['__importDoc'] = doc;\n }\n return doc;\n }\n\n let importer = null;\n /**\n * Ensures imports contained in the element are imported.\n * Use this to handle dynamic imports attached to body.\n * @param {!(HTMLDocument|Element)} doc\n */\n const loadImports = (doc) => {\n if (importer) {\n importer.loadImports(doc);\n }\n };\n\n const newCustomEvent = (type, params) => {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(type, params);\n }\n const event = /** @type {!CustomEvent} */ (document.createEvent('CustomEvent'));\n event.initCustomEvent(type, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return event;\n };\n\n if (useNative) {\n // Check for imports that might already be done loading by the time this\n // script is actually executed. Native imports are blocking, so the ones\n // available in the document by this time should already have failed\n // or have .import defined.\n const imps = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n forEach(imps, imp => {\n if (!imp.import || imp.import.readyState !== 'loading') {\n imp['__loaded'] = true;\n }\n });\n // Listen for load/error events to capture dynamically added scripts.\n /**\n * @type {!function(!Event)}\n */\n const onLoadingDone = event => {\n const elem = /** @type {!Element} */ (event.target);\n if (isImportLink(elem)) {\n elem['__loaded'] = true;\n }\n };\n document.addEventListener('load', onLoadingDone, true /* useCapture */ );\n document.addEventListener('error', onLoadingDone, true /* useCapture */ );\n } else {\n // Override baseURI so that imported elements' baseURI can be used seemlessly\n // on native or polyfilled html-imports.\n // NOTE: a <link rel=import> will have `link.baseURI === link.href`, as the link\n // itself is used as the `import` document.\n /** @type {Object|undefined} */\n const native_baseURI = Object.getOwnPropertyDescriptor(Node.prototype, 'baseURI');\n // NOTE: if not configurable (e.g. safari9), set it on the Element prototype. \n const klass = !native_baseURI || native_baseURI.configurable ? Node : Element;\n Object.defineProperty(klass.prototype, 'baseURI', {\n get() {\n const ownerDoc = /** @type {HTMLLinkElement} */ (isImportLink(this) ? this : importForElement(this));\n if (ownerDoc) return ownerDoc.href;\n // Use native baseURI if possible.\n if (native_baseURI && native_baseURI.get) return native_baseURI.get.call(this);\n // Polyfill it if not available.\n const base = /** @type {HTMLBaseElement} */ (document.querySelector('base'));\n return (base || window.location).href;\n },\n configurable: true,\n enumerable: true\n });\n\n // Define 'import' read-only property.\n Object.defineProperty(HTMLLinkElement.prototype, 'import', {\n get() {\n return /** @type {HTMLLinkElement} */ (this)['__import'] || null;\n },\n configurable: true,\n enumerable: true\n });\n\n whenDocumentReady(() => {\n importer = new Importer()\n });\n }\n\n /**\n Add support for the `HTMLImportsLoaded` event and the `HTMLImports.whenReady`\n method. This api is necessary because unlike the native implementation,\n script elements do not force imports to resolve. Instead, users should wrap\n code in either an `HTMLImportsLoaded` handler or after load time in an\n `HTMLImports.whenReady(callback)` call.\n\n NOTE: This module also supports these apis under the native implementation.\n Therefore, if this file is loaded, the same code can be used under both\n the polyfill and native implementation.\n */\n whenReady(() => document.dispatchEvent(newCustomEvent('HTMLImportsLoaded', {\n cancelable: true,\n bubbles: true,\n detail: undefined\n })));\n\n // exports\n scope.useNative = useNative;\n scope.whenReady = whenReady;\n scope.importForElement = importForElement;\n scope.loadImports = loadImports;\n\n})(window.HTMLImports = (window.HTMLImports || {}));",null,null,null,null,null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n\nexport class ShadyData {\n constructor() {\n /** @type {ShadowRoot} */\n this.root = null;\n /** @type {ShadowRoot} */\n this.publicRoot = null;\n this.dirty = false;\n this.observer = null;\n /** @type {Array<Node>} */\n this.assignedNodes = null;\n /** @type {Element} */\n this.assignedSlot = null;\n /** @type {Array<Node>} */\n this._previouslyAssignedNodes = null;\n /** @type {Element} */\n this._prevAssignedSlot = null;\n /** @type {Array<Node>} */\n this.flattenedNodes = null;\n this.ownerShadyRoot = undefined;\n /** @type {Node|undefined} */\n this.parentNode = undefined;\n /** @type {Node|undefined} */\n this.firstChild = undefined;\n /** @type {Node|undefined} */\n this.lastChild = undefined;\n /** @type {Node|undefined} */\n this.previousSibling = undefined;\n /** @type {Node|undefined} */\n this.nextSibling = undefined;\n /** @type {Array<Node>|undefined} */\n this.childNodes = undefined;\n this.__outsideAccessors = false;\n this.__insideAccessors = false;\n }\n\n toJSON() {\n return {};\n }\n}\n\nexport function ensureShadyDataForNode(node) {\n if (!node.__shady) {\n node.__shady = new ShadyData();\n }\n return node.__shady;\n}\n\nexport function shadyDataForNode(node) {\n return node && node.__shady;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport {shadyDataForNode} from './shady-data.js';\n\nexport let settings = window['ShadyDOM'] || {};\n\nsettings.hasNativeShadowDOM = Boolean(Element.prototype.attachShadow && Node.prototype.getRootNode);\n\nlet desc = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild');\n\nsettings.hasDescriptors = Boolean(desc && desc.configurable && desc.get);\nsettings.inUse = settings['force'] || !settings.hasNativeShadowDOM;\n\n// Default to using native accessors (instead of treewalker) only for\n// IE/Edge where they are faster.\nconst IS_IE = navigator.userAgent.match('Trident');\nconst IS_EDGE = navigator.userAgent.match('Edge');\nif (settings.useNativeAccessors === undefined) {\n settings.useNativeAccessors = settings.hasDescriptors && (IS_IE || IS_EDGE);\n}\n\nexport function isTrackingLogicalChildNodes(node) {\n const nodeData = shadyDataForNode(node);\n return (nodeData && nodeData.firstChild !== undefined);\n}\n\nexport function isShadyRoot(obj) {\n return Boolean(obj._localName === 'ShadyRoot');\n}\n\nexport function ownerShadyRootForNode(node) {\n let root = node.getRootNode();\n if (isShadyRoot(root)) {\n return root;\n }\n}\n\nlet p = Element.prototype;\nlet matches = p.matches || p.matchesSelector ||\n p.mozMatchesSelector || p.msMatchesSelector ||\n p.oMatchesSelector || p.webkitMatchesSelector;\n\nexport function matchesSelector(element, selector) {\n return matches.call(element, selector);\n}\n\nfunction copyOwnProperty(name, source, target) {\n let pd = Object.getOwnPropertyDescriptor(source, name);\n if (pd) {\n Object.defineProperty(target, name, pd);\n }\n}\n\nexport function extend(target, source) {\n if (target && source) {\n let n$ = Object.getOwnPropertyNames(source);\n for (let i=0, n; (i<n$.length) && (n=n$[i]); i++) {\n copyOwnProperty(n, source, target);\n }\n }\n return target || source;\n}\n\nexport function extendAll(target, ...sources) {\n for (let i=0; i < sources.length; i++) {\n extend(target, sources[i]);\n }\n return target;\n}\n\nexport function mixin(target, source) {\n for (var i in source) {\n target[i] = source[i];\n }\n return target;\n}\n\nexport function patchPrototype(obj, mixin) {\n let proto = Object.getPrototypeOf(obj);\n if (!proto.hasOwnProperty('__patchProto')) {\n let patchProto = Object.create(proto);\n patchProto.__sourceProto = proto;\n extend(patchProto, mixin);\n proto['__patchProto'] = patchProto;\n }\n // old browsers don't have setPrototypeOf\n obj.__proto__ = proto['__patchProto'];\n}\n\n\nlet twiddle = document.createTextNode('');\nlet content = 0;\nlet queue = [];\nnew MutationObserver(() => {\n while (queue.length) {\n // catch errors in user code...\n try {\n queue.shift()();\n } catch(e) {\n // enqueue another record and throw\n twiddle.textContent = content++;\n throw(e);\n }\n }\n}).observe(twiddle, {characterData: true});\n\n// use MutationObserver to get microtask async timing.\nexport function microtask(callback) {\n queue.push(callback);\n twiddle.textContent = content++;\n}\n\nexport const hasDocumentContains = Boolean(document.contains);\n\nexport function contains(container, node) {\n while (node) {\n if (node == container) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\n\n// render enqueuer/flusher\nlet flushList = [];\nlet scheduled;\nexport function enqueue(callback) {\n if (!scheduled) {\n scheduled = true;\n utils.microtask(flush);\n }\n flushList.push(callback);\n}\n\nexport function flush() {\n scheduled = false;\n let didFlush = Boolean(flushList.length);\n while (flushList.length) {\n flushList.shift()();\n }\n return didFlush;\n}\n\nflush['list'] = flushList;\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {ensureShadyDataForNode} from './shady-data.js';\n\nclass AsyncObserver {\n\n constructor() {\n this._scheduled = false;\n this.addedNodes = [];\n this.removedNodes = [];\n this.callbacks = new Set();\n }\n\n schedule() {\n if (!this._scheduled) {\n this._scheduled = true;\n utils.microtask(() => {\n this.flush();\n });\n }\n }\n\n flush() {\n if (this._scheduled) {\n this._scheduled = false;\n let mutations = this.takeRecords();\n if (mutations.length) {\n this.callbacks.forEach(function(cb) {\n cb(mutations);\n });\n }\n }\n }\n\n takeRecords() {\n if (this.addedNodes.length || this.removedNodes.length) {\n let mutations = [{\n addedNodes: this.addedNodes,\n removedNodes: this.removedNodes\n }];\n this.addedNodes = [];\n this.removedNodes = [];\n return mutations;\n }\n return [];\n }\n\n}\n\n// TODO(sorvell): consider instead polyfilling MutationObserver\n// directly so that users do not have to fork their code.\n// Supporting the entire api may be challenging: e.g. filtering out\n// removed nodes in the wrong scope and seeing non-distributing\n// subtree child mutations.\nexport let observeChildren = function(node, callback) {\n const sd = ensureShadyDataForNode(node);\n if (!sd.observer) {\n sd.observer = new AsyncObserver();\n }\n sd.observer.callbacks.add(callback);\n let observer = sd.observer;\n return {\n _callback: callback,\n _observer: observer,\n _node: node,\n takeRecords() {\n return observer.takeRecords()\n }\n };\n}\n\nexport let unobserveChildren = function(handle) {\n let observer = handle && handle._observer;\n if (observer) {\n observer.callbacks.delete(handle._callback);\n if (!observer.callbacks.size) {\n ensureShadyDataForNode(handle._node).observer = null;\n }\n }\n}\n\nexport function filterMutations(mutations, target) {\n /** @const {Node} */\n const targetRootNode = target.getRootNode();\n return mutations.map(function(mutation) {\n /** @const {boolean} */\n const mutationInScope = (targetRootNode === mutation.target.getRootNode());\n if (mutationInScope && mutation.addedNodes) {\n let nodes = Array.from(mutation.addedNodes).filter(function(n) {\n return (targetRootNode === n.getRootNode());\n });\n if (nodes.length) {\n mutation = Object.create(mutation);\n Object.defineProperty(mutation, 'addedNodes', {\n value: nodes,\n configurable: true\n });\n return mutation;\n }\n } else if (mutationInScope) {\n return mutation;\n }\n }).filter(function(m) { return m});\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport let appendChild = Element.prototype.appendChild;\nexport let insertBefore = Element.prototype.insertBefore;\nexport let replaceChild = Element.prototype.replaceChild;\nexport let removeChild = Element.prototype.removeChild;\nexport let setAttribute = Element.prototype.setAttribute;\nexport let removeAttribute = Element.prototype.removeAttribute;\nexport let cloneNode = Element.prototype.cloneNode;\nexport let importNode = Document.prototype.importNode;\nexport let addEventListener = Element.prototype.addEventListener;\nexport let removeEventListener = Element.prototype.removeEventListener;\nexport let windowAddEventListener = Window.prototype.addEventListener;\nexport let windowRemoveEventListener = Window.prototype.removeEventListener;\nexport let dispatchEvent = Element.prototype.dispatchEvent;\nexport let contains = Node.prototype.contains || HTMLElement.prototype.contains;\nexport let getElementById = Document.prototype.getElementById;\nexport let elementQuerySelector = Element.prototype.querySelector;\nexport let fragmentQuerySelector = DocumentFragment.prototype.querySelector;\nexport let documentQuerySelector = Document.prototype.querySelector;\nexport let querySelector = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelector.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelector.call(this, selector);\n default:\n return fragmentQuerySelector.call(this, selector);\n }\n};\nexport let elementQuerySelectorAll = Element.prototype.querySelectorAll;\nexport let fragmentQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\nexport let documentQuerySelectorAll = Document.prototype.querySelectorAll;\nexport let querySelectorAll = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelectorAll.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelectorAll.call(this, selector);\n default:\n return fragmentQuerySelectorAll.call(this, selector);\n }\n};","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n// Cribbed from ShadowDOM polyfill\n// https://github.com/webcomponents/webcomponentsjs/blob/master/src/ShadowDOM/wrappers/HTMLElement.js#L28\n/////////////////////////////////////////////////////////////////////////////\n// innerHTML and outerHTML\n\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\nlet escapeAttrRegExp = /[&\\u00A0\"]/g;\nlet escapeDataRegExp = /[&\\u00A0<>]/g;\n\nfunction escapeReplace(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n}\n\nfunction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n}\n\nfunction escapeData(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n}\n\nfunction makeSet(arr) {\n let set = {};\n for (let i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n}\n\n// http://www.whatwg.org/specs/web-apps/current-work/#void-elements\nlet voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nlet plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n]);\n\n/**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\nexport function getOuterHTML(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n let tagName = node.localName;\n let s = '<' + tagName;\n let attrs = node.attributes;\n for (let i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n let data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Function=} callback\n */\nexport function getInnerHTML(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n let s = '';\n let c$ = callback ? callback(node) : node.childNodes;\n for (let i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {getInnerHTML} from './innerHTML.js';\n\nlet nodeWalker = document.createTreeWalker(document, NodeFilter.SHOW_ALL,\n null, false);\n\nlet elementWalker = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT,\n null, false);\n\nexport function parentNode(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.parentNode();\n}\n\nexport function firstChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.firstChild();\n}\n\nexport function lastChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.lastChild();\n}\n\nexport function previousSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.previousSibling();\n}\n\nexport function nextSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.nextSibling();\n}\n\nexport function childNodes(node) {\n let nodes = [];\n nodeWalker.currentNode = node;\n let n = nodeWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = nodeWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function parentElement(node) {\n elementWalker.currentNode = node;\n return elementWalker.parentNode();\n}\n\nexport function firstElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.firstChild();\n}\n\nexport function lastElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.lastChild();\n}\n\nexport function previousElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.previousSibling();\n}\n\nexport function nextElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.nextSibling();\n}\n\nexport function children(node) {\n let nodes = [];\n elementWalker.currentNode = node;\n let n = elementWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = elementWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function innerHTML(node) {\n return getInnerHTML(node, (n) => childNodes(n));\n}\n\nexport function textContent(node) {\n /* eslint-disable no-case-declarations */\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n let textWalker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT,\n null, false);\n let content = '', n;\n while ( (n = textWalker.nextNode()) ) {\n // TODO(sorvell): can't use textContent since we patch it on Node.prototype!\n // However, should probably patch it only on element.\n content += n.nodeValue;\n }\n return content;\n default:\n return node.nodeValue;\n }\n /* eslint-enable */\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport * as utils from './utils.js';\n\nconst hasDescriptors = utils.settings.hasDescriptors;\n\n// Find descriptor on the \"lowest\" native prototype. Safe as these are not\n// overridden and we call these on nodes.\nconst nativeProtos = [Node.prototype, Element.prototype, HTMLElement.prototype];\n// note, avoid Array.find for IE11 compat.\nfunction findNativeProtoWithDescriptor(name) {\n for (let i=0; i < nativeProtos.length; i++) {\n const proto = nativeProtos[i];\n if (proto.hasOwnProperty(name)) {\n return proto;\n }\n }\n}\nfunction findNodeDescriptor(name) {\n const proto = findNativeProtoWithDescriptor(name);\n if (!proto) {\n throw Error(`Could not find descriptor for ${name}`);\n }\n return Object.getOwnPropertyDescriptor(proto, name);\n}\n\nexport const nodeAccessors = hasDescriptors ? {\n parentNode: findNodeDescriptor('parentNode'),\n firstChild: findNodeDescriptor('firstChild'),\n lastChild: findNodeDescriptor('lastChild'),\n previousSibling: findNodeDescriptor('previousSibling'),\n nextSibling: findNodeDescriptor('nextSibling'),\n childNodes: findNodeDescriptor('childNodes'),\n parentElement: findNodeDescriptor('parentElement'),\n previousElementSibling: findNodeDescriptor('previousElementSibling'),\n nextElementSibling: findNodeDescriptor('nextElementSibling'),\n innerHTML: findNodeDescriptor('innerHTML'),\n textContent: findNodeDescriptor('textContent'),\n firstElementChild: findNodeDescriptor('firstElementChild'),\n lastElementChild: findNodeDescriptor('lastElementChild'),\n children: findNodeDescriptor('children'),\n} : {};\n\nexport const fragmentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'children')\n} : {};\n\nexport const documentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n Document.prototype, 'children')\n} : {};\n\nexport function parentNode(node) {\n return nodeAccessors.parentNode.get.call(node);\n}\n\nexport function firstChild(node) {\n return nodeAccessors.firstChild.get.call(node);\n}\n\nexport function lastChild(node) {\n return nodeAccessors.lastChild.get.call(node);\n}\n\nexport function previousSibling(node) {\n return nodeAccessors.previousSibling.get.call(node);\n}\n\nexport function nextSibling(node) {\n return nodeAccessors.nextSibling.get.call(node);\n}\n\nexport function childNodes(node) {\n return Array.prototype.slice.call(nodeAccessors.childNodes.get.call(node));\n}\n\nexport function parentElement(node) {\n return nodeAccessors.parentElement.get.call(node);\n}\n\nexport function previousElementSibling(node) {\n return nodeAccessors.previousElementSibling.get.call(node);\n}\n\nexport function nextElementSibling(node) {\n return nodeAccessors.nextElementSibling.get.call(node);\n}\n\nexport function innerHTML(node) {\n return nodeAccessors.innerHTML.get.call(node);\n}\n\nexport function textContent(node) {\n return nodeAccessors.textContent.get.call(node);\n}\n\nexport function children(node) {\n let children;\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n children = fragmentAccessors.children.get.call(node);\n break;\n case Node.DOCUMENT_NODE:\n children = documentAccessors.children.get.call(node);\n break;\n default:\n children = nodeAccessors.children.get.call(node);\n break;\n }\n return Array.prototype.slice.call(children);\n}\n\nexport function firstElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.firstElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.firstElementChild.get.call(node);\n default:\n return nodeAccessors.firstElementChild.get.call(node);\n }\n}\n\nexport function lastElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.lastElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.lastElementChild.get.call(node);\n default:\n return nodeAccessors.lastElementChild.get.call(node);\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as nativeTreeWalker from './native-tree-walker.js';\nimport * as nativeTreeAccessors from './native-tree-accessors.js';\nimport * as utils from './utils.js';\n\nexport const accessors = utils.settings.useNativeAccessors ?\n nativeTreeAccessors : nativeTreeWalker;","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {getInnerHTML} from './innerHTML.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {nodeAccessors as nativeAccessors} from './native-tree-accessors.js';\nimport {contains as nativeContains} from './native-methods.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nfunction clearNode(node) {\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n}\n\nconst hasDescriptors = utils.settings.hasDescriptors;\nconst inertDoc = document.implementation.createHTMLDocument('inert');\n\nconst nativeIsConnectedAccessors =\n/** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Node.prototype, 'isConnected')\n);\n\nconst nativeIsConnected = nativeIsConnectedAccessors && nativeIsConnectedAccessors.get;\n\nconst nativeActiveElementDescriptor =\n /** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Document.prototype, 'activeElement')\n );\nfunction getDocumentActiveElement() {\n if (nativeActiveElementDescriptor && nativeActiveElementDescriptor.get) {\n return nativeActiveElementDescriptor.get.call(document);\n } else if (!utils.settings.hasDescriptors) {\n return document.activeElement;\n }\n}\n\nfunction activeElementForNode(node) {\n let active = getDocumentActiveElement();\n // In IE11, activeElement might be an empty object if the document is\n // contained in an iframe.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10998788/\n if (!active || !active.nodeType) {\n return null;\n }\n let isShadyRoot = !!(utils.isShadyRoot(node));\n if (node !== document) {\n // If this node isn't a document or shady root, then it doesn't have\n // an active element.\n if (!isShadyRoot) {\n return null;\n }\n // If this shady root's host is the active element or the active\n // element is not a descendant of the host (in the composed tree),\n // then it doesn't have an active element.\n if (node.host === active ||\n !nativeContains.call(node.host, active)) {\n return null;\n }\n }\n // This node is either the document or a shady root of which the active\n // element is a (composed) descendant of its host; iterate upwards to\n // find the active element's most shallow host within it.\n let activeRoot = utils.ownerShadyRootForNode(active);\n while (activeRoot && activeRoot !== node) {\n active = activeRoot.host;\n activeRoot = utils.ownerShadyRootForNode(active);\n }\n if (node === document) {\n // This node is the document, so activeRoot should be null.\n return activeRoot ? null : active;\n } else {\n // This node is a non-document shady root, and it should be\n // activeRoot.\n return activeRoot === node ? active : null;\n }\n}\n\nlet OutsideAccessors = {\n\n parentElement: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n let l = nodeData && nodeData.parentNode;\n if (l && l.nodeType !== Node.ELEMENT_NODE) {\n l = null;\n }\n return l !== undefined ? l : nativeTree.parentElement(this);\n },\n configurable: true\n },\n\n parentNode: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.parentNode;\n return l !== undefined ? l : nativeTree.parentNode(this);\n },\n configurable: true\n },\n\n nextSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.nextSibling;\n return l !== undefined ? l : nativeTree.nextSibling(this);\n },\n configurable: true\n },\n\n previousSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.previousSibling;\n return l !== undefined ? l : nativeTree.previousSibling(this);\n },\n configurable: true\n },\n\n // fragment, element, document\n nextElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.nextSibling !== undefined) {\n let n = this.nextSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.nextElementSibling(this);\n }\n },\n configurable: true\n },\n\n previousElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.previousSibling !== undefined) {\n let n = this.previousSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.previousElementSibling(this);\n }\n },\n configurable: true\n }\n\n};\n\nexport const ClassNameAccessor = {\n className: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return this.getAttribute('class') || '';\n },\n /**\n * @this {HTMLElement}\n */\n set(value) {\n this.setAttribute('class', value);\n },\n configurable: true\n }\n}\n\nexport const IsConnectedAccessor = {\n\n isConnected: {\n /**\n * @this {Node}\n */\n get() {\n if (nativeIsConnected && nativeIsConnected.call(this)) {\n return true;\n }\n if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {\n return false;\n }\n // Fast path for distributed nodes.\n const ownerDocument = this.ownerDocument;\n if (utils.hasDocumentContains) {\n if (nativeContains.call(ownerDocument, this)) {\n return true;\n }\n } else if (ownerDocument.documentElement &&\n nativeContains.call(ownerDocument.documentElement, this)) {\n return true;\n }\n // Slow path for non-distributed nodes.\n let node = this;\n while (node && !(node instanceof Document)) {\n node = node.parentNode || (utils.isShadyRoot(node) ? /** @type {ShadowRoot} */(node).host : undefined);\n }\n return !!(node && node instanceof Document);\n },\n configurable: true\n }\n};\n\nlet InsideAccessors = {\n\n childNodes: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let childNodes;\n if (utils.isTrackingLogicalChildNodes(this)) {\n const nodeData = shadyDataForNode(this);\n if (!nodeData.childNodes) {\n nodeData.childNodes = [];\n for (let n=this.firstChild; n; n=n.nextSibling) {\n nodeData.childNodes.push(n);\n }\n }\n childNodes = nodeData.childNodes;\n } else {\n childNodes = nativeTree.childNodes(this);\n }\n childNodes.item = function(index) {\n return childNodes[index];\n }\n return childNodes;\n },\n configurable: true\n },\n\n childElementCount: {\n /** @this {HTMLElement} */\n get() {\n return this.children.length;\n },\n configurable: true\n },\n\n firstChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.firstChild;\n return l !== undefined ? l : nativeTree.firstChild(this);\n },\n configurable: true\n },\n\n lastChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.lastChild;\n return l !== undefined ? l : nativeTree.lastChild(this);\n },\n configurable: true\n },\n\n textContent: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n let tc = [];\n for (let i = 0, cn = this.childNodes, c; (c = cn[i]); i++) {\n if (c.nodeType !== Node.COMMENT_NODE) {\n tc.push(c.textContent);\n }\n }\n return tc.join('');\n } else {\n return nativeTree.textContent(this);\n }\n },\n /**\n * @this {HTMLElement}\n * @param {string} text\n */\n set(text) {\n if (typeof text === 'undefined' || text === null) {\n text = ''\n }\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n if (!utils.isTrackingLogicalChildNodes(this) && hasDescriptors) {\n // may be removing a nested slot but fast path if we know we are not.\n const firstChild = this.firstChild;\n if (firstChild != this.lastChild ||\n (firstChild && firstChild.nodeType != Node.TEXT_NODE)) {\n clearNode(this);\n }\n nativeAccessors.textContent.set.call(this, text);\n } else {\n clearNode(this);\n // Document fragments must have no childnodes if setting a blank string\n if (text.length > 0 || this.nodeType === Node.ELEMENT_NODE) {\n this.appendChild(document.createTextNode(text));\n }\n }\n break;\n default:\n // TODO(sorvell): can't do this if patch nodeValue.\n this.nodeValue = text;\n break;\n }\n },\n configurable: true\n },\n\n // fragment, element, document\n firstElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.firstChild !== undefined) {\n let n = this.firstChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.firstElementChild(this);\n }\n },\n configurable: true\n },\n\n lastElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.lastChild !== undefined) {\n let n = this.lastChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.lastElementChild(this);\n }\n },\n configurable: true\n },\n\n children: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let children;\n if (utils.isTrackingLogicalChildNodes(this)) {\n children = Array.prototype.filter.call(this.childNodes, function(n) {\n return (n.nodeType === Node.ELEMENT_NODE);\n });\n } else {\n children = nativeTree.children(this);\n }\n children.item = function(index) {\n return children[index];\n }\n return children;\n },\n configurable: true\n },\n\n // element (HTMLElement on IE11)\n innerHTML: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n return getInnerHTML(content);\n } else {\n return nativeTree.innerHTML(this);\n }\n },\n /**\n * @this {HTMLElement}\n */\n set(text) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n clearNode(content);\n let containerName = this.localName;\n // avoid creating a template so we don't have to pull nodes form `.content`\n if (!containerName || containerName === 'template') {\n containerName = 'div';\n }\n const htmlContainer = inertDoc.createElement(containerName);\n if (hasDescriptors) {\n nativeAccessors.innerHTML.set.call(htmlContainer, text);\n } else {\n htmlContainer.innerHTML = text;\n }\n while (htmlContainer.firstChild) {\n content.appendChild(htmlContainer.firstChild);\n }\n },\n configurable: true\n }\n\n};\n\n// Note: Can be patched on element prototype on all browsers.\n// Must be patched on instance on browsers that support native Shadow DOM\n// but do not have builtin accessors (old Chrome).\nexport let ShadowRootAccessor = {\n\n shadowRoot: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n return nodeData && nodeData.publicRoot || null;\n },\n configurable: true\n }\n};\n\n// Note: Can be patched on document prototype on browsers with builtin accessors.\n// Must be patched separately on simulated ShadowRoot.\n// Must be patched as `_activeElement` on browsers without builtin accessors.\nexport let ActiveElementAccessor = {\n\n activeElement: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return activeElementForNode(this);\n },\n /**\n * @this {HTMLElement}\n */\n set() {},\n configurable: true\n }\n\n};\n\n// patch a group of descriptors on an object only if it exists or if the `force`\n// argument is true.\n/**\n * @param {!Object} obj\n * @param {!Object} descriptors\n * @param {boolean=} force\n */\nfunction patchAccessorGroup(obj, descriptors, force) {\n for (let p in descriptors) {\n let objDesc = Object.getOwnPropertyDescriptor(obj, p);\n if ((objDesc && objDesc.configurable) ||\n (!objDesc && force)) {\n Object.defineProperty(obj, p, descriptors[p]);\n } else if (force) {\n console.warn('Could not define', p, 'on', obj); // eslint-disable-line no-console\n }\n }\n}\n\n// patch dom accessors on proto where they exist\nexport function patchAccessors(proto) {\n patchAccessorGroup(proto, OutsideAccessors);\n patchAccessorGroup(proto, ClassNameAccessor);\n patchAccessorGroup(proto, InsideAccessors);\n patchAccessorGroup(proto, ActiveElementAccessor);\n}\n\nexport function patchShadowRootAccessors(proto) {\n proto.__proto__ = DocumentFragment.prototype;\n // ensure element descriptors (IE/Edge don't have em)\n patchAccessorGroup(proto, OutsideAccessors, true);\n patchAccessorGroup(proto, InsideAccessors, true);\n patchAccessorGroup(proto, ActiveElementAccessor, true);\n // Ensure native properties are all safely wrapped since ShadowRoot is not an\n // actual DocumentFragment instance.\n Object.defineProperties(proto, {\n nodeType: {\n value: Node.DOCUMENT_FRAGMENT_NODE,\n configurable: true\n },\n nodeName: {\n value: '#document-fragment',\n configurable: true\n },\n nodeValue: {\n value: null,\n configurable: true\n }\n });\n // make undefined\n [\n 'localName',\n 'namespaceURI',\n 'prefix'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n value: undefined,\n configurable: true\n });\n });\n // defer properties to host\n [\n 'ownerDocument',\n 'baseURI',\n 'isConnected'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n get() {\n return this.host[prop];\n },\n configurable: true\n });\n });\n}\n\n// ensure an element has patched \"outside\" accessors; no-op when not needed\nexport let patchOutsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__outsideAccessors) {\n sd.__outsideAccessors = true;\n patchAccessorGroup(element, OutsideAccessors, true);\n patchAccessorGroup(element, ClassNameAccessor, true);\n }\n }\n\n// ensure an element has patched \"inside\" accessors; no-op when not needed\nexport let patchInsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__insideAccessors) {\n patchAccessorGroup(element, InsideAccessors, true);\n patchAccessorGroup(element, ShadowRootAccessor, true);\n }\n }\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {calculateSplices} from './array-splice.js';\nimport * as utils from './utils.js';\nimport {enqueue} from './flush.js';\nimport {recordChildNodes} from './logical-tree.js';\nimport {removeChild, insertBefore, dispatchEvent} from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode, childNodes} = accessors;\n\n// Do not export this object. It must be passed as the first argument to the\n// ShadyRoot constructor in `attachShadow` to prevent the constructor from\n// throwing. This prevents the user from being able to manually construct a\n// ShadyRoot (i.e. `new ShadowRoot()`).\nconst ShadyRootConstructionToken = {};\n\nconst CATCHALL_NAME = '__catchall';\nconst SHADYROOT_NAME = 'ShadyRoot';\n\nconst MODE_CLOSED = 'closed';\n\nfunction ancestorList(node) {\n let ancestors = [];\n do {\n ancestors.unshift(node);\n } while ((node = node.parentNode));\n return ancestors;\n}\n\n/**\n * @constructor\n * @extends {ShadowRoot}\n */\nexport class ShadyRoot {\n\n constructor(token, host, options) {\n if (token !== ShadyRootConstructionToken) {\n throw new TypeError('Illegal constructor');\n }\n // NOTE: set a fake local name so this element can be\n // distinguished from a DocumentFragment when patching.\n // FF doesn't allow this to be `localName`\n this._localName = SHADYROOT_NAME;\n const c$ = childNodes(host);\n // root <=> host\n this.host = host;\n this._mode = options && options.mode;\n // logical dom setup\n recordChildNodes(host, c$);\n const hostData = shadyDataForNode(host);\n hostData.root = this;\n hostData.publicRoot = this._mode !== MODE_CLOSED ? this : null;\n // setup root\n const rootData = ensureShadyDataForNode(this);\n rootData.firstChild = rootData.lastChild =\n rootData.parentNode = rootData.nextSibling =\n rootData.previousSibling = null;\n rootData.childNodes = [];\n // state flags\n this._renderPending = false;\n this._hasRendered = false;\n // marsalled lazily\n this._slotList = null;\n this._slotMap = null;\n this._pendingSlots = null;\n // fast path initial render: remove existing physical dom.\n for (let i=0, l=c$.length; i < l; i++) {\n removeChild.call(host, c$[i])\n }\n }\n\n // async render\n _asyncRender() {\n if (!this._renderPending) {\n this._renderPending = true;\n enqueue(() => this._render());\n }\n }\n\n // returns the oldest renderPending ancestor root.\n _getRenderRoot() {\n let renderRoot;\n let root = this;\n while (root) {\n if (root._renderPending) {\n renderRoot = root;\n }\n root = root._rendererForHost();\n }\n return renderRoot;\n }\n\n // Returns the shadyRoot `this.host` if `this.host`\n // has children that require distribution.\n _rendererForHost() {\n let root = this.host.getRootNode();\n if (utils.isShadyRoot(root)) {\n let c$ = this.host.childNodes;\n for (let i=0, c; i < c$.length; i++) {\n c = c$[i];\n if (this._isInsertionPoint(c)) {\n return root;\n }\n }\n }\n }\n\n _render() {\n const root = this._getRenderRoot();\n if (root) {\n root['_renderRoot']();\n }\n }\n\n // NOTE: avoid renaming to ease testability.\n ['_renderRoot']() {\n this._renderPending = false;\n if (this._slotList) {\n this._distribute();\n this._compose();\n }\n this._hasRendered = true;\n }\n\n _distribute() {\n this._validateSlots();\n // capture # of previously assigned nodes to help determine if dirty.\n for (let i=0, slot; i < this._slotList.length; i++) {\n slot = this._slotList[i];\n this._clearSlotAssignedNodes(slot);\n }\n // distribute host children.\n for (let n=this.host.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n);\n }\n // fallback content, slotchange, and dirty roots\n for (let i=0; i < this._slotList.length; i++) {\n const slot = this._slotList[i];\n const slotData = shadyDataForNode(slot);\n // distribute fallback content\n if (!slotData.assignedNodes.length) {\n for (let n=slot.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n, slot);\n }\n }\n const slotParentData = shadyDataForNode(slot.parentNode);\n const slotParentRoot = slotParentData && slotParentData.root;\n if (slotParentRoot && slotParentRoot._hasInsertionPoint()) {\n slotParentRoot['_renderRoot']();\n }\n this._addAssignedToFlattenedNodes(slotData.flattenedNodes,\n slotData.assignedNodes);\n let prevAssignedNodes = slotData._previouslyAssignedNodes;\n if (prevAssignedNodes) {\n for (let i=0; i < prevAssignedNodes.length; i++) {\n shadyDataForNode(prevAssignedNodes[i])._prevAssignedSlot = null;\n }\n slotData._previouslyAssignedNodes = null;\n // dirty if previously less assigned nodes than previously assigned.\n if (prevAssignedNodes.length > slotData.assignedNodes.length) {\n slotData.dirty = true;\n }\n }\n /* Note: A slot is marked dirty whenever a node is newly assigned to it\n or a node is assigned to a different slot (done in `_distributeNodeToSlot`)\n or if the number of nodes assigned to the slot has decreased (done above);\n */\n if (slotData.dirty) {\n slotData.dirty = false;\n this._fireSlotChange(slot);\n }\n }\n }\n\n /**\n * Distributes given `node` to the appropriate slot based on its `slot`\n * attribute. If `forcedSlot` is given, then the node is distributed to the\n * `forcedSlot`.\n * Note: slot to which the node is assigned will be marked dirty for firing\n * `slotchange`.\n * @param {Node} node\n * @param {Node=} forcedSlot\n *\n */\n _distributeNodeToSlot(node, forcedSlot) {\n const nodeData = ensureShadyDataForNode(node);\n let oldSlot = nodeData._prevAssignedSlot;\n nodeData._prevAssignedSlot = null;\n let slot = forcedSlot;\n if (!slot) {\n let name = node.slot || CATCHALL_NAME;\n const list = this._slotMap[name];\n slot = list && list[0];\n }\n if (slot) {\n const slotData = ensureShadyDataForNode(slot);\n slotData.assignedNodes.push(node);\n nodeData.assignedSlot = slot;\n } else {\n nodeData.assignedSlot = undefined;\n }\n if (oldSlot !== nodeData.assignedSlot) {\n if (nodeData.assignedSlot) {\n ensureShadyDataForNode(nodeData.assignedSlot).dirty = true;\n }\n }\n }\n\n /**\n * Clears the assignedNodes tracking data for a given `slot`. Note, the current\n * assigned node data is tracked (via _previouslyAssignedNodes and\n * _prevAssignedSlot) to see if `slotchange` should fire. This data may be out\n * of date at this time because the assigned nodes may have already been\n * distributed to another root. This is ok since this data is only used to\n * track changes.\n * @param {HTMLSlotElement} slot\n */\n _clearSlotAssignedNodes(slot) {\n const slotData = shadyDataForNode(slot);\n let n$ = slotData.assignedNodes;\n slotData.assignedNodes = [];\n slotData.flattenedNodes = [];\n slotData._previouslyAssignedNodes = n$;\n if (n$) {\n for (let i=0; i < n$.length; i++) {\n let n = shadyDataForNode(n$[i]);\n n._prevAssignedSlot = n.assignedSlot;\n // only clear if it was previously set to this slot;\n // this helps ensure that if the node has otherwise been distributed\n // ignore it.\n if (n.assignedSlot === slot) {\n n.assignedSlot = null;\n }\n }\n }\n }\n\n _addAssignedToFlattenedNodes(flattened, assigned) {\n for (let i=0, n; (i<assigned.length) && (n=assigned[i]); i++) {\n if (n.localName == 'slot') {\n const nestedAssigned = shadyDataForNode(n).assignedNodes;\n if (nestedAssigned && nestedAssigned.length) {\n this._addAssignedToFlattenedNodes(flattened, nestedAssigned);\n }\n } else {\n flattened.push(assigned[i]);\n }\n }\n }\n\n _fireSlotChange(slot) {\n // NOTE: cannot bubble correctly here so not setting bubbles: true\n // Safari tech preview does not bubble but chrome does\n // Spec says it bubbles (https://dom.spec.whatwg.org/#mutation-observers)\n dispatchEvent.call(slot, new Event('slotchange'));\n const slotData = shadyDataForNode(slot);\n if (slotData.assignedSlot) {\n this._fireSlotChange(slotData.assignedSlot);\n }\n }\n\n // Reify dom such that it is at its correct rendering position\n // based on logical distribution.\n // NOTE: here we only compose parents of <slot> elements and not the\n // shadowRoot into the host. The latter is performend via a fast path\n // in the `logical-mutation`.insertBefore.\n _compose() {\n const slots = this._slotList;\n let composeList = [];\n for (let i=0; i < slots.length; i++) {\n const parent = slots[i].parentNode;\n /* compose node only if:\n (1) parent does not have a shadowRoot since shadowRoot has already\n composed into the host\n (2) we're not already composing it\n [consider (n^2) but rare better than Set]\n */\n const parentData = shadyDataForNode(parent);\n if (!(parentData && parentData.root) &&\n composeList.indexOf(parent) < 0) {\n composeList.push(parent);\n }\n }\n for (let i=0; i < composeList.length; i++) {\n const node = composeList[i];\n const targetNode = node === this ? this.host : node;\n this._updateChildNodes(targetNode, this._composeNode(node));\n }\n }\n\n // Returns the list of nodes which should be rendered inside `node`.\n _composeNode(node) {\n let children = [];\n let c$ = node.childNodes;\n for (let i = 0; i < c$.length; i++) {\n let child = c$[i];\n // Note: if we see a slot here, the nodes are guaranteed to need to be\n // composed here. This is because if there is redistribution, it has\n // already been handled by this point.\n if (this._isInsertionPoint(child)) {\n let flattenedNodes = shadyDataForNode(child).flattenedNodes;\n for (let j = 0; j < flattenedNodes.length; j++) {\n let distributedNode = flattenedNodes[j];\n children.push(distributedNode);\n }\n } else {\n children.push(child);\n }\n }\n return children;\n }\n\n _isInsertionPoint(node) {\n return node.localName == 'slot';\n }\n\n // Ensures that the rendered node list inside `container` is `children`.\n _updateChildNodes(container, children) {\n let composed = childNodes(container);\n let splices = calculateSplices(children, composed);\n // process removals\n for (let i=0, d=0, s; (i<splices.length) && (s=splices[i]); i++) {\n for (let j=0, n; (j < s.removed.length) && (n=s.removed[j]); j++) {\n // check if the node is still where we expect it is before trying\n // to remove it; this can happen if we move a node and\n // then schedule its previous host for distribution resulting in\n // the node being removed here.\n if (parentNode(n) === container) {\n removeChild.call(container, n);\n }\n // TODO(sorvell): avoid the need for splicing here.\n composed.splice(s.index + d, 1);\n }\n d -= s.addedCount;\n }\n // process adds\n for (let i=0, s, next; (i<splices.length) && (s=splices[i]); i++) { //eslint-disable-line no-redeclare\n next = composed[s.index];\n for (let j=s.index, n; j < s.index + s.addedCount; j++) {\n n = children[j];\n insertBefore.call(container, n, next);\n composed.splice(j, 0, n);\n }\n }\n }\n\n _ensureSlotData() {\n this._pendingSlots = this._pendingSlots || [];\n this._slotList = this._slotList || [];\n this._slotMap = this._slotMap || {};\n }\n\n _addSlots(slots) {\n this._ensureSlotData();\n this._pendingSlots.push(...slots);\n }\n\n _validateSlots() {\n if (this._pendingSlots && this._pendingSlots.length) {\n this._mapSlots(this._pendingSlots);\n this._pendingSlots = [];\n }\n }\n\n /**\n * Adds the given slots. Slots are maintained in an dom-ordered list.\n * In addition a map of name to slot is updated.\n */\n _mapSlots(slots) {\n let slotNamesToSort;\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n // ensure insertionPoints's and their parents have logical dom info.\n // save logical tree info\n // a. for shadyRoot\n // b. for insertion points (fallback)\n // c. for parents of insertion points\n recordChildNodes(slot);\n recordChildNodes(slot.parentNode);\n let name = this._nameForSlot(slot);\n if (this._slotMap[name]) {\n slotNamesToSort = slotNamesToSort || {};\n slotNamesToSort[name] = true;\n this._slotMap[name].push(slot);\n } else {\n this._slotMap[name] = [slot];\n }\n this._slotList.push(slot);\n }\n if (slotNamesToSort) {\n for (let n in slotNamesToSort) {\n this._slotMap[n] = this._sortSlots(this._slotMap[n]);\n }\n }\n }\n\n _nameForSlot(slot) {\n const name = slot['name'] || slot.getAttribute('name') || CATCHALL_NAME;\n slot.__slotName = name;\n return name;\n }\n\n /**\n * Slots are kept in an ordered list. Slots with the same name\n * are sorted here by tree order.\n */\n _sortSlots(slots) {\n // NOTE: Cannot use `compareDocumentPosition` because it's not polyfilled,\n // but the code here could be used to polyfill the preceeding/following info\n // in `compareDocumentPosition`.\n return slots.sort((a, b) => {\n let listA = ancestorList(a);\n let listB = ancestorList(b);\n for (var i=0; i < listA.length; i++) {\n let nA = listA[i];\n let nB = listB[i];\n if (nA !== nB) {\n let c$ = Array.from(nA.parentNode.childNodes);\n return c$.indexOf(nA) - c$.indexOf(nB);\n }\n }\n });\n }\n\n /**\n * Removes from tracked slot data any slots contained within `container` and\n * then updates the tracked data (_slotList and _slotMap).\n * Any removed slots also have their `assignedNodes` removed from comopsed dom.\n */\n _removeContainedSlots(container) {\n if (!this._slotList) {\n return;\n }\n this._validateSlots();\n let didRemove;\n const map = this._slotMap;\n for (let n in map) {\n let slots = map[n];\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n if (utils.contains(container, slot)) {\n slots.splice(i, 1);\n const x = this._slotList.indexOf(slot);\n if (x >= 0) {\n this._slotList.splice(x, 1);\n }\n i--;\n this._removeFlattenedNodes(slot);\n didRemove = true;\n }\n }\n }\n return didRemove;\n }\n\n _updateSlotName(slot) {\n if (!this._slotList) {\n return;\n }\n const oldName = slot.__slotName;\n const name = this._nameForSlot(slot);\n if (name === oldName) {\n return;\n }\n // remove from existing tracking\n let slots = this._slotMap[oldName];\n const i = slots.indexOf(slot);\n if (i >= 0) {\n slots.splice(i, 1);\n }\n // add to new location and sort if nedessary\n let list = this._slotMap[name] || (this._slotMap[name] = []);\n list.push(slot);\n if (list.length > 1) {\n this._slotMap[name] = this._sortSlots(list);\n }\n }\n\n _removeFlattenedNodes(slot) {\n const data = shadyDataForNode(slot);\n let n$ = data.flattenedNodes;\n if (n$) {\n for (let i=0; i<n$.length; i++) {\n let node = n$[i];\n let parent = parentNode(node);\n if (parent) {\n removeChild.call(parent, node);\n }\n }\n }\n data.flattenedNodes = [];\n data.assignedNodes = [];\n }\n\n _hasInsertionPoint() {\n this._validateSlots();\n return Boolean(this._slotList && this._slotList.length);\n }\n}\n\n/**\n Implements a pared down version of ShadowDOM's scoping, which is easy to\n polyfill across browsers.\n*/\nexport function attachShadow(host, options) {\n if (!host) {\n throw 'Must provide a host.';\n }\n if (!options) {\n throw 'Not enough arguments.'\n }\n return new ShadyRoot(ShadyRootConstructionToken, host, options);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {flush} from './flush.js';\nimport {dispatchEvent, querySelectorAll} from './native-methods.js';\nimport * as mutation from './logical-mutation.js';\nimport {ActiveElementAccessor, ShadowRootAccessor, patchAccessors, patchShadowRootAccessors, IsConnectedAccessor} from './patch-accessors.js';\nimport {addEventListener, removeEventListener} from './patch-events.js';\nimport {attachShadow, ShadyRoot} from './attach-shadow.js';\nimport {shadyDataForNode} from './shady-data.js';\n\nfunction getAssignedSlot(node) {\n mutation.renderRootNode(node);\n const nodeData = shadyDataForNode(node);\n return nodeData && nodeData.assignedSlot || null;\n}\n\nlet windowMixin = {\n\n // NOTE: ensure these methods are bound to `window` so that `this` is correct\n // when called directly from global context without a receiver; e.g.\n // `addEventListener(...)`.\n addEventListener: addEventListener.bind(window),\n\n removeEventListener: removeEventListener.bind(window)\n\n};\n\nlet nodeMixin = {\n\n addEventListener: addEventListener,\n\n removeEventListener: removeEventListener,\n\n appendChild(node) {\n return mutation.insertBefore(this, node);\n },\n\n insertBefore(node, ref_node) {\n return mutation.insertBefore(this, node, ref_node);\n },\n\n removeChild(node) {\n return mutation.removeChild(this, node);\n },\n\n /**\n * @this {Node}\n */\n replaceChild(node, ref_node) {\n mutation.insertBefore(this, node, ref_node);\n mutation.removeChild(this, ref_node);\n return node;\n },\n\n /**\n * @this {Node}\n */\n cloneNode(deep) {\n return mutation.cloneNode(this, deep);\n },\n\n /**\n * @this {Node}\n */\n getRootNode(options) {\n return mutation.getRootNode(this, options);\n },\n\n contains(node) {\n return utils.contains(this, node);\n },\n\n /**\n * @this {Node}\n */\n dispatchEvent(event) {\n flush();\n return dispatchEvent.call(this, event);\n }\n\n};\n\n// NOTE: we can do this regardless of the browser supporting native accessors\n// since this is always \"new\" in that case.\nObject.defineProperties(nodeMixin, IsConnectedAccessor);\n\n// NOTE: For some reason 'Text' redefines 'assignedSlot'\nlet textMixin = {\n /**\n * @this {Text}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n};\n\nlet fragmentMixin = {\n\n // TODO(sorvell): consider doing native QSA and filtering results.\n /**\n * @this {DocumentFragment}\n */\n querySelector(selector) {\n // match selector and halt on first result.\n let result = mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n },\n\n /**\n * @this {DocumentFragment}\n */\n // TODO(sorvell): `useNative` option relies on native querySelectorAll and\n // misses distributed nodes, see\n // https://github.com/webcomponents/shadydom/pull/210#issuecomment-361435503\n querySelectorAll(selector, useNative) {\n if (useNative) {\n const o = Array.prototype.slice.call(querySelectorAll(this, selector));\n const root = this.getRootNode();\n return o.filter(e => e.getRootNode() == root);\n }\n return mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n });\n }\n\n};\n\nlet slotMixin = {\n\n /**\n * @this {HTMLSlotElement}\n */\n assignedNodes(options) {\n if (this.localName === 'slot') {\n mutation.renderRootNode(this);\n const nodeData = shadyDataForNode(this);\n return nodeData ?\n ((options && options.flatten ? nodeData.flattenedNodes :\n nodeData.assignedNodes) || []) :\n [];\n }\n }\n\n};\n\nlet elementMixin = utils.extendAll({\n\n /**\n * @this {HTMLElement}\n */\n setAttribute(name, value) {\n mutation.setAttribute(this, name, value);\n },\n\n /**\n * @this {HTMLElement}\n */\n removeAttribute(name) {\n mutation.removeAttribute(this, name);\n },\n\n /**\n * @this {HTMLElement}\n */\n attachShadow(options) {\n return attachShadow(this, options);\n },\n\n /**\n * @this {HTMLElement}\n */\n get slot() {\n return this.getAttribute('slot');\n },\n\n /**\n * @this {HTMLElement}\n */\n set slot(value) {\n mutation.setAttribute(this, 'slot', value);\n },\n\n /**\n * @this {HTMLElement}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n\n}, fragmentMixin, slotMixin);\n\nObject.defineProperties(elementMixin, ShadowRootAccessor);\n\nlet documentMixin = utils.extendAll({\n /**\n * @this {Document}\n */\n importNode(node, deep) {\n return mutation.importNode(node, deep);\n },\n\n /**\n * @this {Document}\n */\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n\n}, fragmentMixin);\n\nObject.defineProperties(documentMixin, {\n '_activeElement': ActiveElementAccessor.activeElement\n});\n\nlet nativeBlur = HTMLElement.prototype.blur;\n\nlet htmlElementMixin = utils.extendAll({\n /**\n * @this {HTMLElement}\n */\n blur() {\n const nodeData = shadyDataForNode(this);\n let root = nodeData && nodeData.root;\n let shadowActive = root && root.activeElement;\n if (shadowActive) {\n shadowActive.blur();\n } else {\n nativeBlur.call(this);\n }\n }\n});\n\nconst shadowRootMixin = {\n addEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.addEventListener(type, fn, optionsOrCapture);\n },\n\n removeEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.removeEventListener(type, fn, optionsOrCapture);\n },\n\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n}\n\nfunction patchBuiltin(proto, obj) {\n let n$ = Object.getOwnPropertyNames(obj);\n for (let i=0; i < n$.length; i++) {\n let n = n$[i];\n let d = Object.getOwnPropertyDescriptor(obj, n);\n // NOTE: we prefer writing directly here because some browsers\n // have descriptors that are writable but not configurable (e.g.\n // `appendChild` on older browsers)\n if (d.value) {\n proto[n] = d.value;\n } else {\n Object.defineProperty(proto, n, d);\n }\n }\n}\n\n// Apply patches to builtins (e.g. Element.prototype). Some of these patches\n// can be done unconditionally (mostly methods like\n// `Element.prototype.appendChild`) and some can only be done when the browser\n// has proper descriptors on the builtin prototype\n// (e.g. `Element.prototype.firstChild`)`. When descriptors are not available,\n// elements are individually patched when needed (see e.g.\n// `patchInside/OutsideElementAccessors` in `patch-accessors.js`).\nexport function patchBuiltins() {\n let nativeHTMLElement =\n (window['customElements'] && window['customElements']['nativeHTMLElement']) ||\n HTMLElement;\n // These patches can always be done, for all supported browsers.\n patchBuiltin(ShadyRoot.prototype, shadowRootMixin);\n patchBuiltin(window.Node.prototype, nodeMixin);\n patchBuiltin(window.Window.prototype, windowMixin);\n patchBuiltin(window.Text.prototype, textMixin);\n patchBuiltin(window.DocumentFragment.prototype, fragmentMixin);\n patchBuiltin(window.Element.prototype, elementMixin);\n patchBuiltin(window.Document.prototype, documentMixin);\n if (window.HTMLSlotElement) {\n patchBuiltin(window.HTMLSlotElement.prototype, slotMixin);\n }\n patchBuiltin(nativeHTMLElement.prototype, htmlElementMixin);\n // These patches can *only* be done\n // on browsers that have proper property descriptors on builtin prototypes.\n // This includes: IE11, Edge, Chrome >= 4?; Safari >= 10, Firefox\n // On older browsers (Chrome <= 4?, Safari 9), a per element patching\n // strategy is used for patching accessors.\n if (utils.settings.hasDescriptors) {\n patchAccessors(window.Node.prototype);\n patchAccessors(window.Text.prototype);\n patchAccessors(window.DocumentFragment.prototype);\n patchAccessors(window.Element.prototype);\n patchAccessors(nativeHTMLElement.prototype);\n patchAccessors(window.Document.prototype);\n if (window.HTMLSlotElement) {\n patchAccessors(window.HTMLSlotElement.prototype);\n }\n }\n patchShadowRootAccessors(ShadyRoot.prototype);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {childNodes} = accessors;\n\nexport function recordInsertBefore(node, container, ref_node) {\n patchInsideElementAccessors(container);\n const containerData = ensureShadyDataForNode(container);\n if (containerData.firstChild !== undefined) {\n containerData.childNodes = null;\n }\n // handle document fragments\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let c$ = node.childNodes;\n for (let i=0; i < c$.length; i++) {\n linkNode(c$[i], container, ref_node);\n }\n // cleanup logical dom in doc fragment.\n const nodeData = ensureShadyDataForNode(node);\n let resetTo = (nodeData.firstChild !== undefined) ? null : undefined;\n nodeData.firstChild = nodeData.lastChild = resetTo;\n nodeData.childNodes = resetTo;\n } else {\n linkNode(node, container, ref_node);\n }\n}\n\nfunction linkNode(node, container, ref_node) {\n patchOutsideElementAccessors(node);\n ref_node = ref_node || null;\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n const ref_nodeData = ref_node ? ensureShadyDataForNode(ref_node) : null;\n // update ref_node.previousSibling <-> node\n nodeData.previousSibling = ref_node ? ref_nodeData.previousSibling :\n container.lastChild;\n let psd = shadyDataForNode(nodeData.previousSibling);\n if (psd) {\n psd.nextSibling = node;\n }\n // update node <-> ref_node\n let nsd = shadyDataForNode(nodeData.nextSibling = ref_node);\n if (nsd) {\n nsd.previousSibling = node;\n }\n // update node <-> container\n nodeData.parentNode = container;\n if (ref_node) {\n if (ref_node === containerData.firstChild) {\n containerData.firstChild = node;\n }\n } else {\n containerData.lastChild = node;\n if (!containerData.firstChild) {\n containerData.firstChild = node;\n }\n }\n // remove caching of childNodes\n containerData.childNodes = null;\n}\n\nexport function recordRemoveChild(node, container) {\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n if (node === containerData.firstChild) {\n containerData.firstChild = nodeData.nextSibling;\n }\n if (node === containerData.lastChild) {\n containerData.lastChild = nodeData.previousSibling;\n }\n let p = nodeData.previousSibling;\n let n = nodeData.nextSibling;\n if (p) {\n ensureShadyDataForNode(p).nextSibling = n;\n }\n if (n) {\n ensureShadyDataForNode(n).previousSibling = p;\n }\n // When an element is removed, logical data is no longer tracked.\n // Explicitly set `undefined` here to indicate this. This is disginguished\n // from `null` which is set if info is null.\n nodeData.parentNode = nodeData.previousSibling =\n nodeData.nextSibling = undefined;\n if (containerData.childNodes !== undefined) {\n // remove caching of childNodes\n containerData.childNodes = null;\n }\n}\n\nexport let recordChildNodes = function(node, nodes) {\n const nodeData = ensureShadyDataForNode(node);\n if (nodeData.firstChild === undefined) {\n const c$ = nodes || childNodes(node);\n nodeData.firstChild = c$[0] || null;\n nodeData.lastChild = c$[c$.length-1] || null;\n patchInsideElementAccessors(node);\n for (let i=0; i<c$.length; i++) {\n const n = c$[i];\n const sd = ensureShadyDataForNode(n);\n sd.parentNode = node;\n sd.nextSibling = c$[i+1] || null;\n sd.previousSibling = c$[i-1] || null;\n patchOutsideElementAccessors(n);\n }\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as logicalTree from './logical-tree.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode} = accessors;\n\n// Patched `insertBefore`. Note that all mutations that add nodes are routed\n// here. When a <slot> is added or a node is added to a host with a shadowRoot\n// with a slot, a standard dom `insert` call is aborted and `_asyncRender`\n// is called on the relevant shadowRoot. In all other cases, a standard dom\n// `insert` can be made, but the location and ref_node may need to be changed.\n/**\n * @param {Node} parent\n * @param {Node} node\n * @param {Node=} ref_node\n */\nexport function insertBefore(parent, node, ref_node) {\n if (node === parent) {\n throw Error(`Failed to execute 'appendChild' on 'Node': The new child element contains the parent.`);\n }\n if (ref_node) {\n const refData = shadyDataForNode(ref_node);\n const p = refData && refData.parentNode;\n if ((p !== undefined && p !== parent) ||\n (p === undefined && parentNode(ref_node) !== parent)) {\n throw Error(`Failed to execute 'insertBefore' on 'Node': The node ` +\n `before which the new node is to be inserted is not a child of this node.`);\n }\n }\n if (ref_node === node) {\n return node;\n }\n // remove from existing location\n if (node.parentNode) {\n // NOTE: avoid node.removeChild as this *can* trigger another patched\n // method (e.g. custom elements) and we want only the shady method to run.\n removeChild(node.parentNode, node);\n }\n // add to new parent\n let preventNativeInsert;\n let ownerRoot;\n let slotsAdded;\n if (!node['__noInsertionPoint']) {\n ownerRoot = utils.ownerShadyRootForNode(parent);\n slotsAdded = ownerRoot && findContainedSlots(node);\n if (slotsAdded) {\n ownerRoot._addSlots(slotsAdded);\n }\n }\n // if a slot is added, must render containing root.\n if (parent.localName === 'slot' || slotsAdded) {\n ownerRoot = ownerRoot || utils.ownerShadyRootForNode(parent);\n if (ownerRoot) {\n ownerRoot._asyncRender();\n }\n }\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordInsertBefore(node, parent, ref_node);\n // when inserting into a host with a shadowRoot with slot, use\n // `shadowRoot._asyncRender()` via `attach-shadow` module\n const parentData = shadyDataForNode(parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeInsert = true;\n // when inserting into a host with shadowRoot with NO slot, do nothing\n // as the node should not be added to composed dome anywhere.\n } else if (parentData.root) {\n preventNativeInsert = true;\n }\n }\n if (!preventNativeInsert) {\n // if adding to a shadyRoot, add to host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host : parent;\n // if ref_node, get the ref_node that's actually in composed dom.\n if (ref_node) {\n ref_node = firstComposedNode(ref_node);\n nativeMethods.insertBefore.call(container, node, ref_node);\n } else {\n nativeMethods.appendChild.call(container, node);\n }\n }\n scheduleObserver(parent, node);\n return node;\n}\n\nfunction findContainedSlots(node) {\n let slots;\n if (node.localName === 'slot') {\n slots = [node];\n } else if (node.querySelectorAll) {\n slots = node.querySelectorAll('slot');\n }\n if (slots && slots.length) {\n return slots;\n }\n}\n\n/**\n * Patched `removeChild`. Note that all dom \"removals\" are routed here.\n * Removes the given `node` from the element's `children`.\n * This method also performs dom composition.\n * @param {Node} parent\n * @param {Node} node\n*/\nexport function removeChild(parent, node) {\n if (node.parentNode !== parent) {\n throw Error('The node to be removed is not a child of this node: ' +\n node);\n }\n let preventNativeRemove;\n let ownerRoot = utils.ownerShadyRootForNode(node);\n let removingInsertionPoint;\n const parentData = shadyDataForNode(parent);\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordRemoveChild(node, parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeRemove = true;\n }\n }\n removeOwnerShadyRoot(node);\n // if removing slot, must render containing root\n if (ownerRoot) {\n let changeSlotContent = parent && parent.localName === 'slot';\n if (changeSlotContent) {\n preventNativeRemove = true;\n }\n removingInsertionPoint = ownerRoot._removeContainedSlots(node);\n if (removingInsertionPoint || changeSlotContent) {\n ownerRoot._asyncRender();\n }\n }\n if (!preventNativeRemove) {\n // if removing from a shadyRoot, remove form host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host :\n parent;\n // not guaranteed to physically be in container; e.g.\n // (1) if parent has a shadyRoot, element may or may not at distributed\n // location (could be undistributed)\n // (2) if parent is a slot, element may not ben in composed dom\n if (!(parentData.root || node.localName === 'slot') ||\n (container === parentNode(node))) {\n nativeMethods.removeChild.call(container, node);\n }\n }\n scheduleObserver(parent, null, node);\n return node;\n}\n\nfunction removeOwnerShadyRoot(node) {\n // optimization: only reset the tree if node is actually in a root\n if (hasCachedOwnerRoot(node)) {\n let c$ = node.childNodes;\n for (let i=0, l=c$.length, n; (i<l) && (n=c$[i]); i++) {\n removeOwnerShadyRoot(n);\n }\n }\n const nodeData = shadyDataForNode(node);\n if (nodeData) {\n nodeData.ownerShadyRoot = undefined;\n }\n}\n\nfunction hasCachedOwnerRoot(node) {\n const nodeData = shadyDataForNode(node);\n return Boolean(nodeData && nodeData.ownerShadyRoot !== undefined);\n}\n\n/**\n * Finds the first flattened node that is composed in the node's parent.\n * If the given node is a slot, then the first flattened node is returned\n * if it exists, otherwise advance to the node's nextSibling.\n * @param {Node} node within which to find first composed node\n * @returns {Node} first composed node\n */\nfunction firstComposedNode(node) {\n let composed = node;\n if (node && node.localName === 'slot') {\n const nodeData = shadyDataForNode(node);\n const flattened = nodeData && nodeData.flattenedNodes;\n composed = flattened && flattened.length ? flattened[0] :\n firstComposedNode(node.nextSibling);\n }\n return composed;\n}\n\nfunction hasShadowRootWithSlot(node) {\n const nodeData = shadyDataForNode(node);\n let root = nodeData && nodeData.root;\n return (root && root._hasInsertionPoint());\n}\n\n/**\n * Should be called whenever an attribute changes. If the `slot` attribute\n * changes, provokes rendering if necessary. If a `<slot>` element's `name`\n * attribute changes, updates the root's slot map and renders.\n * @param {Node} node\n * @param {string} name\n */\nfunction distributeAttributeChange(node, name) {\n if (name === 'slot') {\n const parent = node.parentNode;\n if (hasShadowRootWithSlot(parent)) {\n shadyDataForNode(parent).root._asyncRender();\n }\n } else if (node.localName === 'slot' && name === 'name') {\n let root = utils.ownerShadyRootForNode(node);\n if (root) {\n root._updateSlotName(node);\n root._asyncRender();\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Node=} addedNode\n * @param {Node=} removedNode\n */\nfunction scheduleObserver(node, addedNode, removedNode) {\n const nodeData = shadyDataForNode(node);\n const observer = nodeData && nodeData.observer;\n if (observer) {\n if (addedNode) {\n observer.addedNodes.push(addedNode);\n }\n if (removedNode) {\n observer.removedNodes.push(removedNode);\n }\n observer.schedule();\n }\n}\n\n/**\n * @param {Node} node\n * @param {Object=} options\n */\nexport function getRootNode(node, options) { // eslint-disable-line no-unused-vars\n if (!node || !node.nodeType) {\n return;\n }\n const nodeData = ensureShadyDataForNode(node);\n let root = nodeData.ownerShadyRoot;\n if (root === undefined) {\n if (utils.isShadyRoot(node)) {\n root = node;\n nodeData.ownerShadyRoot = root;\n } else {\n let parent = node.parentNode;\n root = parent ? getRootNode(parent) : node;\n // memo-ize result for performance but only memo-ize\n // result if node is in the document. This avoids a problem where a root\n // can be cached while an element is inside a fragment.\n // If this happens and we cache the result, the value can become stale\n // because for perf we avoid processing the subtree of added fragments.\n if (nativeMethods.contains.call(document.documentElement, node)) {\n nodeData.ownerShadyRoot = root;\n }\n }\n\n }\n return root;\n}\n\n// NOTE: `query` is used primarily for ShadyDOM's querySelector impl,\n// but it's also generally useful to recurse through the element tree\n// and is used by Polymer's styling system.\n/**\n * @param {Node} node\n * @param {Function} matcher\n * @param {Function=} halter\n */\nexport function query(node, matcher, halter) {\n let list = [];\n queryElements(node.childNodes, matcher,\n halter, list);\n return list;\n}\n\nfunction queryElements(elements, matcher, halter, list) {\n for (let i=0, l=elements.length, c; (i<l) && (c=elements[i]); i++) {\n if (c.nodeType === Node.ELEMENT_NODE &&\n queryElement(c, matcher, halter, list)) {\n return true;\n }\n }\n}\n\nfunction queryElement(node, matcher, halter, list) {\n let result = matcher(node);\n if (result) {\n list.push(node);\n }\n if (halter && halter(result)) {\n return result;\n }\n queryElements(node.childNodes, matcher,\n halter, list);\n}\n\nexport function renderRootNode(element) {\n var root = element.getRootNode();\n if (utils.isShadyRoot(root)) {\n root._render();\n }\n}\n\nlet scopingShim = null;\n\nexport function setAttribute(node, attr, value) {\n if (!scopingShim) {\n scopingShim = window['ShadyCSS'] && window['ShadyCSS']['ScopingShim'];\n }\n if (scopingShim && attr === 'class') {\n scopingShim['setElementClass'](node, value);\n } else {\n nativeMethods.setAttribute.call(node, attr, value);\n distributeAttributeChange(node, attr);\n }\n}\n\nexport function removeAttribute(node, attr) {\n nativeMethods.removeAttribute.call(node, attr);\n distributeAttributeChange(node, attr);\n}\n\nexport function cloneNode(node, deep) {\n if (node.localName == 'template') {\n return nativeMethods.cloneNode.call(node, deep);\n } else {\n let n = nativeMethods.cloneNode.call(node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = c$[i].cloneNode(true);\n n.appendChild(nc);\n }\n }\n return n;\n }\n}\n\n// note: Though not technically correct, we fast path `importNode`\n// when called on a node not owned by the main document.\n// This allows, for example, elements that cannot\n// contain custom elements and are therefore not likely to contain shadowRoots\n// to cloned natively. This is a fairly significant performance win.\nexport function importNode(node, deep) {\n if (node.ownerDocument !== document) {\n return nativeMethods.importNode.call(document, node, deep);\n }\n let n = nativeMethods.importNode.call(document, node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = importNode(c$[i], true);\n n.appendChild(nc);\n }\n }\n return n;\n}",null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as nativeMethods from './native-methods.js';\nimport {shadyDataForNode} from './shady-data.js';\n\n/*\nMake this name unique so it is unlikely to conflict with properties on objects passed to `addEventListener`\nhttps://github.com/webcomponents/shadydom/issues/173\n*/\nconst /** string */ eventWrappersName = `__eventWrappers${Date.now()}`;\n\n// https://github.com/w3c/webcomponents/issues/513#issuecomment-224183937\nlet alwaysComposed = {\n 'blur': true,\n 'focus': true,\n 'focusin': true,\n 'focusout': true,\n 'click': true,\n 'dblclick': true,\n 'mousedown': true,\n 'mouseenter': true,\n 'mouseleave': true,\n 'mousemove': true,\n 'mouseout': true,\n 'mouseover': true,\n 'mouseup': true,\n 'wheel': true,\n 'beforeinput': true,\n 'input': true,\n 'keydown': true,\n 'keyup': true,\n 'compositionstart': true,\n 'compositionupdate': true,\n 'compositionend': true,\n 'touchstart': true,\n 'touchend': true,\n 'touchmove': true,\n 'touchcancel': true,\n 'pointerover': true,\n 'pointerenter': true,\n 'pointerdown': true,\n 'pointermove': true,\n 'pointerup': true,\n 'pointercancel': true,\n 'pointerout': true,\n 'pointerleave': true,\n 'gotpointercapture': true,\n 'lostpointercapture': true,\n 'dragstart': true,\n 'drag': true,\n 'dragenter': true,\n 'dragleave': true,\n 'dragover': true,\n 'drop': true,\n 'dragend': true,\n 'DOMActivate': true,\n 'DOMFocusIn': true,\n 'DOMFocusOut': true,\n 'keypress': true\n};\n\nfunction pathComposer(startNode, composed) {\n let composedPath = [];\n let current = startNode;\n let startRoot = startNode === window ? window : startNode.getRootNode();\n while (current) {\n composedPath.push(current);\n if (current.assignedSlot) {\n current = current.assignedSlot;\n } else if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE && current.host && (composed || current !== startRoot)) {\n current = current.host;\n } else {\n current = current.parentNode;\n }\n }\n // event composedPath includes window when startNode's ownerRoot is document\n if (composedPath[composedPath.length - 1] === document) {\n composedPath.push(window);\n }\n return composedPath;\n}\n\nfunction retarget(refNode, path) {\n if (!utils.isShadyRoot) {\n return refNode;\n }\n // If ANCESTOR's root is not a shadow root or ANCESTOR's root is BASE's\n // shadow-including inclusive ancestor, return ANCESTOR.\n let refNodePath = pathComposer(refNode, true);\n let p$ = path;\n for (let i=0, ancestor, lastRoot, root, rootIdx; i < p$.length; i++) {\n ancestor = p$[i];\n root = ancestor === window ? window : ancestor.getRootNode();\n if (root !== lastRoot) {\n rootIdx = refNodePath.indexOf(root);\n lastRoot = root;\n }\n if (!utils.isShadyRoot(root) || rootIdx > -1) {\n return ancestor;\n }\n }\n}\n\nlet eventMixin = {\n\n /**\n * @this {Event}\n */\n get composed() {\n // isTrusted may not exist in this browser, so just check if isTrusted is explicitly false\n if (this.isTrusted !== false && this.__composed === undefined) {\n this.__composed = alwaysComposed[this.type];\n }\n return this.__composed || false;\n },\n\n /**\n * @this {Event}\n */\n composedPath() {\n if (!this.__composedPath) {\n this.__composedPath = pathComposer(this['__target'], this.composed);\n }\n return this.__composedPath;\n },\n\n /**\n * @this {Event}\n */\n get target() {\n return retarget(this.currentTarget, this.composedPath());\n },\n\n // http://w3c.github.io/webcomponents/spec/shadow/#event-relatedtarget-retargeting\n /**\n * @this {Event}\n */\n get relatedTarget() {\n if (!this.__relatedTarget) {\n return null;\n }\n if (!this.__relatedTargetComposedPath) {\n this.__relatedTargetComposedPath = pathComposer(this.__relatedTarget, true);\n }\n // find the deepest node in relatedTarget composed path that is in the same root with the currentTarget\n return retarget(this.currentTarget, this.__relatedTargetComposedPath);\n },\n /**\n * @this {Event}\n */\n stopPropagation() {\n Event.prototype.stopPropagation.call(this);\n this.__propagationStopped = true;\n },\n /**\n * @this {Event}\n */\n stopImmediatePropagation() {\n Event.prototype.stopImmediatePropagation.call(this);\n this.__immediatePropagationStopped = true;\n this.__propagationStopped = true;\n }\n\n};\n\nfunction mixinComposedFlag(Base) {\n // NOTE: avoiding use of `class` here so that transpiled output does not\n // try to do `Base.call` with a dom construtor.\n let klazz = function(type, options) {\n let event = new Base(type, options);\n event.__composed = options && Boolean(options['composed']);\n return event;\n }\n // put constructor properties on subclass\n utils.mixin(klazz, Base);\n klazz.prototype = Base.prototype;\n return klazz;\n}\n\nlet nonBubblingEventsToRetarget = {\n 'focus': true,\n 'blur': true\n};\n\n\n/**\n * Check if the event has been retargeted by comparing original `target`, and calculated `target`\n * @param {Event} event\n * @return {boolean} True if the original target and calculated target are the same\n */\nfunction hasRetargeted(event) {\n return event['__target'] !== event.target || event.__relatedTarget !== event.relatedTarget;\n}\n\n/**\n *\n * @param {Event} event\n * @param {Node} node\n * @param {string} phase\n */\nfunction fireHandlers(event, node, phase) {\n let hs = node.__handlers && node.__handlers[event.type] &&\n node.__handlers[event.type][phase];\n if (hs) {\n for (let i = 0, fn; (fn = hs[i]); i++) {\n if (hasRetargeted(event) && event.target === event.relatedTarget) {\n return;\n }\n fn.call(node, event);\n if (event.__immediatePropagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction retargetNonBubblingEvent(e) {\n let path = e.composedPath();\n let node;\n // override `currentTarget` to let patched `target` calculate correctly\n Object.defineProperty(e, 'currentTarget', {\n get: function() {\n return node;\n },\n configurable: true\n });\n for (let i = path.length - 1; i >= 0; i--) {\n node = path[i];\n // capture phase fires all capture handlers\n fireHandlers(e, node, 'capture');\n if (e.__propagationStopped) {\n return;\n }\n }\n\n // set the event phase to `AT_TARGET` as in spec\n Object.defineProperty(e, 'eventPhase', {get() { return Event.AT_TARGET }});\n\n // the event only needs to be fired when owner roots change when iterating the event path\n // keep track of the last seen owner root\n let lastFiredRoot;\n for (let i = 0; i < path.length; i++) {\n node = path[i];\n const nodeData = shadyDataForNode(node);\n const root = nodeData && nodeData.root;\n if (i === 0 || (root && root === lastFiredRoot)) {\n fireHandlers(e, node, 'bubble');\n // don't bother with window, it doesn't have `getRootNode` and will be last in the path anyway\n if (node !== window) {\n lastFiredRoot = node.getRootNode();\n }\n if (e.__propagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction listenerSettingsEqual(savedListener, node, type, capture, once, passive) {\n let {\n node: savedNode,\n type: savedType,\n capture: savedCapture,\n once: savedOnce,\n passive: savedPassive\n } = savedListener;\n return node === savedNode &&\n type === savedType &&\n capture === savedCapture &&\n once === savedOnce &&\n passive === savedPassive;\n}\n\nexport function findListener(wrappers, node, type, capture, once, passive) {\n for (let i = 0; i < wrappers.length; i++) {\n if (listenerSettingsEqual(wrappers[i], node, type, capture, once, passive)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Firefox can throw on accessing eventWrappers inside of `removeEventListener` during a selenium run\n * Try/Catch accessing eventWrappers to work around\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1353074\n */\nfunction getEventWrappers(eventLike) {\n let wrappers = null;\n try {\n wrappers = eventLike[eventWrappersName];\n } catch (e) {} // eslint-disable-line no-empty\n return wrappers;\n}\n\n/**\n * @this {Event}\n */\nexport function addEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n const handlerType = typeof fnOrObj;\n\n // bail if `fnOrObj` is not a function, not an object\n if (handlerType !== 'function' && handlerType !== 'object') {\n return;\n }\n\n // bail if `fnOrObj` is an object without a `handleEvent` method\n if (handlerType === 'object' && (!fnOrObj.handleEvent || typeof fnOrObj.handleEvent !== 'function')) {\n return;\n }\n\n // The callback `fn` might be used for multiple nodes/events. Since we generate\n // a wrapper function, we need to keep track of it when we remove the listener.\n // It's more efficient to store the node/type/options information as Array in\n // `fn` itself rather than the node (we assume that the same callback is used\n // for few nodes at most, whereas a node will likely have many event listeners).\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n // hack to let ShadyRoots have event listeners\n // event listener will be on host, but `currentTarget`\n // will be set to shadyroot for event listener\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n\n let wrappers = fnOrObj[eventWrappersName];\n if (wrappers) {\n // Stop if the wrapper function has already been created.\n if (findListener(wrappers, target, type, capture, once, passive) > -1) {\n return;\n }\n } else {\n fnOrObj[eventWrappersName] = [];\n }\n\n /**\n * @this {HTMLElement}\n * @param {Event} e\n */\n const wrapperFn = function(e) {\n // Support `once` option.\n if (once) {\n this.removeEventListener(type, fnOrObj, optionsOrCapture);\n }\n if (!e['__target']) {\n patchEvent(e);\n }\n let lastCurrentTargetDesc;\n if (target !== this) {\n // replace `currentTarget` to make `target` and `relatedTarget` correct for inside the shadowroot\n lastCurrentTargetDesc = Object.getOwnPropertyDescriptor(e, 'currentTarget');\n Object.defineProperty(e, 'currentTarget', {get() { return target }, configurable: true});\n }\n // There are two critera that should stop events from firing on this node\n // 1. the event is not composed and the current node is not in the same root as the target\n // 2. when bubbling, if after retargeting, relatedTarget and target point to the same node\n if (e.composed || e.composedPath().indexOf(target) > -1) {\n if (hasRetargeted(e) && e.target === e.relatedTarget) {\n if (e.eventPhase === Event.BUBBLING_PHASE) {\n e.stopImmediatePropagation();\n }\n return;\n }\n // prevent non-bubbling events from triggering bubbling handlers on shadowroot, but only if not in capture phase\n if (e.eventPhase !== Event.CAPTURING_PHASE && !e.bubbles && e.target !== target && !(target instanceof Window)) {\n return;\n }\n let ret = handlerType === 'function' ?\n fnOrObj.call(target, e) :\n (fnOrObj.handleEvent && fnOrObj.handleEvent(e));\n if (target !== this) {\n // replace the \"correct\" `currentTarget`\n if (lastCurrentTargetDesc) {\n Object.defineProperty(e, 'currentTarget', lastCurrentTargetDesc);\n lastCurrentTargetDesc = null;\n } else {\n delete e['currentTarget'];\n }\n }\n return ret;\n }\n };\n // Store the wrapper information.\n fnOrObj[eventWrappersName].push({\n // note: use target here which is either a shadowRoot\n // (when the host element is proxy'ing the event) or this element\n node: target,\n type: type,\n capture: capture,\n once: once,\n passive: passive,\n wrapperFn: wrapperFn\n });\n\n if (nonBubblingEventsToRetarget[type]) {\n this.__handlers = this.__handlers || {};\n this.__handlers[type] = this.__handlers[type] ||\n {'capture': [], 'bubble': []};\n this.__handlers[type][capture ? 'capture' : 'bubble'].push(wrapperFn);\n } else {\n let ael = this instanceof Window ? nativeMethods.windowAddEventListener :\n nativeMethods.addEventListener;\n ael.call(this, type, wrapperFn, optionsOrCapture);\n }\n}\n\n/**\n * @this {Event}\n */\nexport function removeEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n // Search the wrapped function.\n let wrapperFn = undefined;\n let wrappers = getEventWrappers(fnOrObj);\n if (wrappers) {\n let idx = findListener(wrappers, target, type, capture, once, passive);\n if (idx > -1) {\n wrapperFn = wrappers.splice(idx, 1)[0].wrapperFn;\n // Cleanup.\n if (!wrappers.length) {\n fnOrObj[eventWrappersName] = undefined;\n }\n }\n }\n let rel = this instanceof Window ? nativeMethods.windowRemoveEventListener :\n nativeMethods.removeEventListener;\n rel.call(this, type, wrapperFn || fnOrObj, optionsOrCapture);\n if (wrapperFn && nonBubblingEventsToRetarget[type] &&\n this.__handlers && this.__handlers[type]) {\n const arr = this.__handlers[type][capture ? 'capture' : 'bubble'];\n const idx = arr.indexOf(wrapperFn);\n if (idx > -1) {\n arr.splice(idx, 1);\n }\n }\n}\n\nfunction activateFocusEventOverrides() {\n for (let ev in nonBubblingEventsToRetarget) {\n window.addEventListener(ev, function(e) {\n if (!e['__target']) {\n patchEvent(e);\n retargetNonBubblingEvent(e);\n }\n }, true);\n }\n}\n\nfunction patchEvent(event) {\n event['__target'] = event.target;\n event.__relatedTarget = event.relatedTarget;\n // patch event prototype if we can\n if (utils.settings.hasDescriptors) {\n utils.patchPrototype(event, eventMixin);\n // and fallback to patching instance\n } else {\n utils.extend(event, eventMixin);\n }\n}\n\nlet PatchedEvent = mixinComposedFlag(window.Event);\nlet PatchedCustomEvent = mixinComposedFlag(window.CustomEvent);\nlet PatchedMouseEvent = mixinComposedFlag(window.MouseEvent);\n\nexport function patchEvents() {\n window.Event = PatchedEvent;\n window.CustomEvent = PatchedCustomEvent;\n window.MouseEvent = PatchedMouseEvent;\n activateFocusEventOverrides();\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nfunction newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n}\n\nconst EDIT_LEAVE = 0;\nconst EDIT_UPDATE = 1;\nconst EDIT_ADD = 2;\nconst EDIT_DELETE = 3;\n\n// Note: This function is *based* on the computation of the Levenshtein\n// \"edit\" distance. The one change is that \"updates\" are treated as two\n// edits - not one. With Array splices, an update is really a delete\n// followed by an add. By retaining this, we optimize for \"keeping\" the\n// maximum array items in the original array. For example:\n//\n// 'xxxx123' -> '123yyyy'\n//\n// With 1-edit updates, the shortest path would be just to update all seven\n// characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n// leaves the substring '123' intact.\nfunction calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n // \"Deletion\" columns\n let rowCount = oldEnd - oldStart + 1;\n let columnCount = currentEnd - currentStart + 1;\n let distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (let i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (let j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (let i = 1; i < rowCount; i++) {\n for (let j = 1; j < columnCount; j++) {\n if (equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n let north = distances[i - 1][j] + 1;\n let west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n}\n\n// This starts at the final weight, and walks \"backward\" by finding\n// the minimum previous weight recursively until the origin of the weight\n// matrix.\nfunction spliceOperationsFromEditDistances(distances) {\n let i = distances.length - 1;\n let j = distances[0].length - 1;\n let current = distances[i][j];\n let edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n let northWest = distances[i - 1][j - 1];\n let west = distances[i - 1][j];\n let north = distances[i][j - 1];\n\n let min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n}\n\n/**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n/**\n * Lacking individual splice mutation information, the minimal set of\n * splices can be synthesized given the previous state and final state of an\n * array. The basic approach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\nfunction calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n let prefixCount = 0;\n let suffixCount = 0;\n let splice;\n\n let minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentStart == currentEnd) {\n splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n let ops = spliceOperationsFromEditDistances(\n calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n splice = undefined;\n let splices = [];\n let index = currentStart;\n let oldIndex = oldStart;\n for (let i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n}\n\nfunction sharedPrefix(current, old, searchLength) {\n for (let i = 0; i < searchLength; i++)\n if (!equals(current[i], old[i]))\n return i;\n return searchLength;\n}\n\nfunction sharedSuffix(current, old, searchLength) {\n let index1 = current.length;\n let index2 = old.length;\n let count = 0;\n while (count < searchLength && equals(current[--index1], old[--index2]))\n count++;\n\n return count;\n}\n\nfunction equals(currentValue, previousValue) {\n return currentValue === previousValue;\n}\n\nexport function calculateSplices(current, previous) {\n return calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n}\n\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Patches elements that interacts with ShadyDOM\n * such that tree traversal and mutation apis act like they would under\n * ShadowDOM.\n *\n * This import enables seemless interaction with ShadyDOM powered\n * custom elements, enabling better interoperation with 3rd party code,\n * libraries, and frameworks that use DOM tree manipulation apis.\n */\n\nimport * as utils from './utils.js';\nimport {flush, enqueue} from './flush.js';\nimport {observeChildren, unobserveChildren, filterMutations} from './observe-changes.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {patchBuiltins} from './patch-builtins.js';\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {patchEvents} from './patch-events.js';\nimport {ShadyRoot} from './attach-shadow.js';\n\nif (utils.settings.inUse) {\n let ShadyDOM = {\n // TODO(sorvell): remove when Polymer does not depend on this.\n 'inUse': utils.settings.inUse,\n // NOTE: old browsers without prototype accessors (very old Chrome\n // and Safari) need manually patched accessors to properly set\n // `innerHTML` and `textContent` when an element is:\n // (1) inside a shadowRoot\n // (2) does not have special (slot) children itself\n // (3) and setting the property needs to provoke distribution (because\n // a nested slot is added/removed)\n 'patch': (node) => {\n patchInsideElementAccessors(node);\n patchOutsideElementAccessors(node);\n return node;\n },\n 'isShadyRoot': utils.isShadyRoot,\n 'enqueue': enqueue,\n 'flush': flush,\n 'settings': utils.settings,\n 'filterMutations': filterMutations,\n 'observeChildren': observeChildren,\n 'unobserveChildren': unobserveChildren,\n 'nativeMethods': nativeMethods,\n 'nativeTree': nativeTree\n };\n\n window['ShadyDOM'] = ShadyDOM;\n\n // Apply patches to events...\n patchEvents();\n // Apply patches to builtins (e.g. Element.prototype) where applicable.\n patchBuiltins();\n\n window.ShadowRoot = ShadyRoot;\n}","const reservedTagList = new Set([\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-src',\n 'font-face-uri',\n 'font-face-format',\n 'font-face-name',\n 'missing-glyph',\n]);\n\n/**\n * @param {string} localName\n * @returns {boolean}\n */\nexport function isValidCustomElementName(localName) {\n const reserved = reservedTagList.has(localName);\n const validForm = /^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(localName);\n return !reserved && validForm;\n}\n\n/**\n * @private\n * @param {!Node} node\n * @return {boolean}\n */\nexport function isConnected(node) {\n // Use `Node#isConnected`, if defined.\n const nativeValue = node.isConnected;\n if (nativeValue !== undefined) {\n return nativeValue;\n }\n\n /** @type {?Node|undefined} */\n let current = node;\n while (current && !(current.__CE_isImportDocument || current instanceof Document)) {\n current = current.parentNode || (window.ShadowRoot && current instanceof ShadowRoot ? current.host : undefined);\n }\n return !!(current && (current.__CE_isImportDocument || current instanceof Document));\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextSiblingOrAncestorSibling(root, start) {\n let node = start;\n while (node && node !== root && !node.nextSibling) {\n node = node.parentNode;\n }\n return (!node || node === root) ? null : node.nextSibling;\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextNode(root, start) {\n return start.firstChild ? start.firstChild : nextSiblingOrAncestorSibling(root, start);\n}\n\n/**\n * @param {!Node} root\n * @param {!function(!Element)} callback\n * @param {!Set<Node>=} visitedImports\n */\nexport function walkDeepDescendantElements(root, callback, visitedImports = new Set()) {\n let node = root;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = /** @type {!Element} */(node);\n\n callback(element);\n\n const localName = element.localName;\n if (localName === 'link' && element.getAttribute('rel') === 'import') {\n // If this import (polyfilled or not) has it's root node available,\n // walk it.\n const importNode = /** @type {!Node} */ (element.import);\n if (importNode instanceof Node && !visitedImports.has(importNode)) {\n // Prevent multiple walks of the same import root.\n visitedImports.add(importNode);\n\n for (let child = importNode.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n\n // Ignore descendants of import links to prevent attempting to walk the\n // elements created by the HTML Imports polyfill that we just walked\n // above.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n } else if (localName === 'template') {\n // Ignore descendants of templates. There shouldn't be any descendants\n // because they will be moved into `.content` during construction in\n // browsers that support template but, in case they exist and are still\n // waiting to be moved by a polyfill, they will be ignored.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n }\n\n // Walk shadow roots.\n const shadowRoot = element.__CE_shadowRoot;\n if (shadowRoot) {\n for (let child = shadowRoot.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n }\n\n node = nextNode(root, node);\n }\n}\n\n/**\n * Used to suppress Closure's \"Modifying the prototype is only allowed if the\n * constructor is in the same scope\" warning without using\n * `@suppress {newCheckTypes, duplicate}` because `newCheckTypes` is too broad.\n *\n * @param {!Object} destination\n * @param {string} name\n * @param {*} value\n */\nexport function setPropertyUnchecked(destination, name, value) {\n destination[name] = value;\n}\n","import * as Utilities from './Utilities.js';\nimport CEState from './CustomElementState.js';\n\nexport default class CustomElementInternals {\n constructor() {\n /** @type {!Map<string, !CustomElementDefinition>} */\n this._localNameToDefinition = new Map();\n\n /** @type {!Map<!Function, !CustomElementDefinition>} */\n this._constructorToDefinition = new Map();\n\n /** @type {!Array<!function(!Node)>} */\n this._patches = [];\n\n /** @type {boolean} */\n this._hasPatches = false;\n }\n\n /**\n * @param {string} localName\n * @param {!CustomElementDefinition} definition\n */\n setDefinition(localName, definition) {\n this._localNameToDefinition.set(localName, definition);\n this._constructorToDefinition.set(definition.constructor, definition);\n }\n\n /**\n * @param {string} localName\n * @return {!CustomElementDefinition|undefined}\n */\n localNameToDefinition(localName) {\n return this._localNameToDefinition.get(localName);\n }\n\n /**\n * @param {!Function} constructor\n * @return {!CustomElementDefinition|undefined}\n */\n constructorToDefinition(constructor) {\n return this._constructorToDefinition.get(constructor);\n }\n\n /**\n * @param {!function(!Node)} listener\n */\n addPatch(listener) {\n this._hasPatches = true;\n this._patches.push(listener);\n }\n\n /**\n * @param {!Node} node\n */\n patchTree(node) {\n if (!this._hasPatches) return;\n\n Utilities.walkDeepDescendantElements(node, element => this.patch(element));\n }\n\n /**\n * @param {!Node} node\n */\n patch(node) {\n if (!this._hasPatches) return;\n\n if (node.__CE_patched) return;\n node.__CE_patched = true;\n\n for (let i = 0; i < this._patches.length; i++) {\n this._patches[i](node);\n }\n }\n\n /**\n * @param {!Node} root\n */\n connectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.connectedCallback(element);\n } else {\n this.upgradeElement(element);\n }\n }\n }\n\n /**\n * @param {!Node} root\n */\n disconnectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.disconnectedCallback(element);\n }\n }\n }\n\n /**\n * Upgrades all uncustomized custom elements at and below a root node for\n * which there is a definition. When custom element reaction callbacks are\n * assumed to be called synchronously (which, by the current DOM / HTML spec\n * definitions, they are *not*), callbacks for both elements customized\n * synchronously by the parser and elements being upgraded occur in the same\n * relative order.\n *\n * NOTE: This function, when used to simulate the construction of a tree that\n * is already created but not customized (i.e. by the parser), does *not*\n * prevent the element from reading the 'final' (true) state of the tree. For\n * example, the element, during truly synchronous parsing / construction would\n * see that it contains no children as they have not yet been inserted.\n * However, this function does not modify the tree, the element will\n * (incorrectly) have children. Additionally, self-modification restrictions\n * for custom element constructors imposed by the DOM spec are *not* enforced.\n *\n *\n * The following nested list shows the steps extending down from the HTML\n * spec's parsing section that cause elements to be synchronously created and\n * upgraded:\n *\n * The \"in body\" insertion mode:\n * https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n * - Switch on token:\n * .. other cases ..\n * -> Any other start tag\n * - [Insert an HTML element](below) for the token.\n *\n * Insert an HTML element:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-an-html-element\n * - Insert a foreign element for the token in the HTML namespace:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-a-foreign-element\n * - Create an element for a token:\n * https://html.spec.whatwg.org/multipage/syntax.html#create-an-element-for-the-token\n * - Will execute script flag is true?\n * - (Element queue pushed to the custom element reactions stack.)\n * - Create an element:\n * https://dom.spec.whatwg.org/#concept-create-element\n * - Sync CE flag is true?\n * - Constructor called.\n * - Self-modification restrictions enforced.\n * - Sync CE flag is false?\n * - (Upgrade reaction enqueued.)\n * - Attributes appended to element.\n * (`attributeChangedCallback` reactions enqueued.)\n * - Will execute script flag is true?\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n * - (Element queue pushed to the custom element reactions stack.)\n * - Insert the element:\n * https://dom.spec.whatwg.org/#concept-node-insert\n * - Shadow-including descendants are connected. During parsing\n * construction, there are no shadow-*excluding* descendants.\n * However, the constructor may have validly attached a shadow\n * tree to itself and added descendants to that shadow tree.\n * (`connectedCallback` reactions enqueued.)\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n *\n * @param {!Node} root\n * @param {{\n * visitedImports: (!Set<!Node>|undefined),\n * upgrade: (!function(!Element)|undefined),\n * }=} options\n */\n patchAndUpgradeTree(root, options = {}) {\n const visitedImports = options.visitedImports || new Set();\n const upgrade = options.upgrade || (element => this.upgradeElement(element));\n\n const elements = [];\n\n const gatherElements = element => {\n if (element.localName === 'link' && element.getAttribute('rel') === 'import') {\n // The HTML Imports polyfill sets a descendant element of the link to\n // the `import` property, specifically this is *not* a Document.\n const importNode = /** @type {?Node} */ (element.import);\n\n if (importNode instanceof Node) {\n importNode.__CE_isImportDocument = true;\n // Connected links are associated with the registry.\n importNode.__CE_hasRegistry = true;\n }\n\n if (importNode && importNode.readyState === 'complete') {\n importNode.__CE_documentLoadHandled = true;\n } else {\n // If this link's import root is not available, its contents can't be\n // walked. Wait for 'load' and walk it when it's ready.\n element.addEventListener('load', () => {\n const importNode = /** @type {!Node} */ (element.import);\n\n if (importNode.__CE_documentLoadHandled) return;\n importNode.__CE_documentLoadHandled = true;\n\n // Clone the `visitedImports` set that was populated sync during\n // the `patchAndUpgradeTree` call that caused this 'load' handler to\n // be added. Then, remove *this* link's import node so that we can\n // walk that import again, even if it was partially walked later\n // during the same `patchAndUpgradeTree` call.\n const clonedVisitedImports = new Set(visitedImports);\n clonedVisitedImports.delete(importNode);\n\n this.patchAndUpgradeTree(importNode, {visitedImports: clonedVisitedImports, upgrade});\n });\n }\n } else {\n elements.push(element);\n }\n };\n\n // `walkDeepDescendantElements` populates (and internally checks against)\n // `visitedImports` when traversing a loaded import.\n Utilities.walkDeepDescendantElements(root, gatherElements, visitedImports);\n\n if (this._hasPatches) {\n for (let i = 0; i < elements.length; i++) {\n this.patch(elements[i]);\n }\n }\n\n for (let i = 0; i < elements.length; i++) {\n upgrade(elements[i]);\n }\n }\n\n /**\n * @param {!Element} element\n */\n upgradeElement(element) {\n const currentState = element.__CE_state;\n if (currentState !== undefined) return;\n\n // Prevent elements created in documents without a browsing context from\n // upgrading.\n //\n // https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition\n // \"If document does not have a browsing context, return null.\"\n //\n // https://html.spec.whatwg.org/multipage/window-object.html#dom-document-defaultview\n // \"The defaultView IDL attribute of the Document interface, on getting,\n // must return this Document's browsing context's WindowProxy object, if\n // this Document has an associated browsing context, or null otherwise.\"\n const ownerDocument = element.ownerDocument;\n if (\n !ownerDocument.defaultView &&\n !(ownerDocument.__CE_isImportDocument && ownerDocument.__CE_hasRegistry)\n ) return;\n\n const definition = this.localNameToDefinition(element.localName);\n if (!definition) return;\n\n definition.constructionStack.push(element);\n\n const constructor = definition.constructor;\n try {\n try {\n let result = new (constructor)();\n if (result !== element) {\n throw new Error('The custom element constructor did not produce the element being upgraded.');\n }\n } finally {\n definition.constructionStack.pop();\n }\n } catch (e) {\n element.__CE_state = CEState.failed;\n throw e;\n }\n\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n\n if (definition.attributeChangedCallback) {\n const observedAttributes = definition.observedAttributes;\n for (let i = 0; i < observedAttributes.length; i++) {\n const name = observedAttributes[i];\n const value = element.getAttribute(name);\n if (value !== null) {\n this.attributeChangedCallback(element, name, null, value, null);\n }\n }\n }\n\n if (Utilities.isConnected(element)) {\n this.connectedCallback(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n connectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.connectedCallback) {\n definition.connectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n disconnectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.disconnectedCallback) {\n definition.disconnectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n * @param {string} name\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\n attributeChangedCallback(element, name, oldValue, newValue, namespace) {\n const definition = element.__CE_definition;\n if (\n definition.attributeChangedCallback &&\n definition.observedAttributes.indexOf(name) > -1\n ) {\n definition.attributeChangedCallback.call(element, name, oldValue, newValue, namespace);\n }\n }\n}\n","/**\n * @enum {number}\n */\nconst CustomElementState = {\n custom: 1,\n failed: 2,\n};\n\nexport default CustomElementState;\n","import CustomElementInternals from './CustomElementInternals.js';\n\nexport default class DocumentConstructionObserver {\n constructor(internals, doc) {\n /**\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @type {!Document}\n */\n this._document = doc;\n\n /**\n * @type {MutationObserver|undefined}\n */\n this._observer = undefined;\n\n\n // Simulate tree construction for all currently accessible nodes in the\n // document.\n this._internals.patchAndUpgradeTree(this._document);\n\n if (this._document.readyState === 'loading') {\n this._observer = new MutationObserver(this._handleMutations.bind(this));\n\n // Nodes created by the parser are given to the observer *before* the next\n // task runs. Inline scripts are run in a new task. This means that the\n // observer will be able to handle the newly parsed nodes before the inline\n // script is run.\n this._observer.observe(this._document, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n disconnect() {\n if (this._observer) {\n this._observer.disconnect();\n }\n }\n\n /**\n * @param {!Array<!MutationRecord>} mutations\n */\n _handleMutations(mutations) {\n // Once the document's `readyState` is 'interactive' or 'complete', all new\n // nodes created within that document will be the result of script and\n // should be handled by patching.\n const readyState = this._document.readyState;\n if (readyState === 'interactive' || readyState === 'complete') {\n this.disconnect();\n }\n\n for (let i = 0; i < mutations.length; i++) {\n const addedNodes = mutations[i].addedNodes;\n for (let j = 0; j < addedNodes.length; j++) {\n const node = addedNodes[j];\n this._internals.patchAndUpgradeTree(node);\n }\n }\n }\n}\n","import CustomElementInternals from './CustomElementInternals.js';\nimport DocumentConstructionObserver from './DocumentConstructionObserver.js';\nimport Deferred from './Deferred.js';\nimport * as Utilities from './Utilities.js';\n\n/**\n * @unrestricted\n */\nexport default class CustomElementRegistry {\n\n /**\n * @param {!CustomElementInternals} internals\n */\n constructor(internals) {\n /**\n * @private\n * @type {boolean}\n */\n this._elementDefinitionIsRunning = false;\n\n /**\n * @private\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @private\n * @type {!Map<string, !Deferred<undefined>>}\n */\n this._whenDefinedDeferred = new Map();\n\n /**\n * The default flush callback triggers the document walk synchronously.\n * @private\n * @type {!Function}\n */\n this._flushCallback = fn => fn();\n\n /**\n * @private\n * @type {boolean}\n */\n this._flushPending = false;\n\n /**\n * @private\n * @type {!Array<!CustomElementDefinition>}\n */\n this._pendingDefinitions = [];\n\n /**\n * @private\n * @type {!DocumentConstructionObserver}\n */\n this._documentConstructionObserver = new DocumentConstructionObserver(internals, document);\n }\n\n /**\n * @param {string} localName\n * @param {!Function} constructor\n */\n define(localName, constructor) {\n if (!(constructor instanceof Function)) {\n throw new TypeError('Custom element constructors must be functions.');\n }\n\n if (!Utilities.isValidCustomElementName(localName)) {\n throw new SyntaxError(`The element name '${localName}' is not valid.`);\n }\n\n if (this._internals.localNameToDefinition(localName)) {\n throw new Error(`A custom element with name '${localName}' has already been defined.`);\n }\n\n if (this._elementDefinitionIsRunning) {\n throw new Error('A custom element is already being defined.');\n }\n this._elementDefinitionIsRunning = true;\n\n let connectedCallback;\n let disconnectedCallback;\n let adoptedCallback;\n let attributeChangedCallback;\n let observedAttributes;\n try {\n /** @type {!Object} */\n const prototype = constructor.prototype;\n if (!(prototype instanceof Object)) {\n throw new TypeError('The custom element constructor\\'s prototype is not an object.');\n }\n\n function getCallback(name) {\n const callbackValue = prototype[name];\n if (callbackValue !== undefined && !(callbackValue instanceof Function)) {\n throw new Error(`The '${name}' callback must be a function.`);\n }\n return callbackValue;\n }\n\n connectedCallback = getCallback('connectedCallback');\n disconnectedCallback = getCallback('disconnectedCallback');\n adoptedCallback = getCallback('adoptedCallback');\n attributeChangedCallback = getCallback('attributeChangedCallback');\n observedAttributes = constructor['observedAttributes'] || [];\n } catch (e) {\n return;\n } finally {\n this._elementDefinitionIsRunning = false;\n }\n\n const definition = {\n localName,\n constructor,\n connectedCallback,\n disconnectedCallback,\n adoptedCallback,\n attributeChangedCallback,\n observedAttributes,\n constructionStack: [],\n };\n\n this._internals.setDefinition(localName, definition);\n this._pendingDefinitions.push(definition);\n\n // If we've already called the flush callback and it hasn't called back yet,\n // don't call it again.\n if (!this._flushPending) {\n this._flushPending = true;\n this._flushCallback(() => this._flush());\n }\n }\n\n upgrade(element) {\n this._internals.patchAndUpgradeTree(element);\n }\n\n _flush() {\n // If no new definitions were defined, don't attempt to flush. This could\n // happen if a flush callback keeps the function it is given and calls it\n // multiple times.\n if (this._flushPending === false) return;\n this._flushPending = false;\n\n const pendingDefinitions = this._pendingDefinitions;\n\n /**\n * Unupgraded elements with definitions that were defined *before* the last\n * flush, in document order.\n * @type {!Array<!Element>}\n */\n const elementsWithStableDefinitions = [];\n\n /**\n * A map from `localName`s of definitions that were defined *after* the last\n * flush to unupgraded elements matching that definition, in document order.\n * @type {!Map<string, !Array<!Element>>}\n */\n const elementsWithPendingDefinitions = new Map();\n for (let i = 0; i < pendingDefinitions.length; i++) {\n elementsWithPendingDefinitions.set(pendingDefinitions[i].localName, []);\n }\n\n this._internals.patchAndUpgradeTree(document, {\n upgrade: element => {\n // Ignore the element if it has already upgraded or failed to upgrade.\n if (element.__CE_state !== undefined) return;\n\n const localName = element.localName;\n\n // If there is an applicable pending definition for the element, add the\n // element to the list of elements to be upgraded with that definition.\n const pendingElements = elementsWithPendingDefinitions.get(localName);\n if (pendingElements) {\n pendingElements.push(element);\n // If there is *any other* applicable definition for the element, add it\n // to the list of elements with stable definitions that need to be upgraded.\n } else if (this._internals.localNameToDefinition(localName)) {\n elementsWithStableDefinitions.push(element);\n }\n },\n });\n\n // Upgrade elements with 'stable' definitions first.\n for (let i = 0; i < elementsWithStableDefinitions.length; i++) {\n this._internals.upgradeElement(elementsWithStableDefinitions[i]);\n }\n\n // Upgrade elements with 'pending' definitions in the order they were defined.\n while (pendingDefinitions.length > 0) {\n const definition = pendingDefinitions.shift();\n const localName = definition.localName;\n\n // Attempt to upgrade all applicable elements.\n const pendingUpgradableElements = elementsWithPendingDefinitions.get(definition.localName);\n for (let i = 0; i < pendingUpgradableElements.length; i++) {\n this._internals.upgradeElement(pendingUpgradableElements[i]);\n }\n\n // Resolve any promises created by `whenDefined` for the definition.\n const deferred = this._whenDefinedDeferred.get(localName);\n if (deferred) {\n deferred.resolve(undefined);\n }\n }\n }\n\n /**\n * @param {string} localName\n * @return {Function|undefined}\n */\n get(localName) {\n const definition = this._internals.localNameToDefinition(localName);\n if (definition) {\n return definition.constructor;\n }\n\n return undefined;\n }\n\n /**\n * @param {string} localName\n * @return {!Promise<undefined>}\n */\n whenDefined(localName) {\n if (!Utilities.isValidCustomElementName(localName)) {\n return Promise.reject(new SyntaxError(`'${localName}' is not a valid custom element name.`));\n }\n\n const prior = this._whenDefinedDeferred.get(localName);\n if (prior) {\n return prior.toPromise();\n }\n\n const deferred = new Deferred();\n this._whenDefinedDeferred.set(localName, deferred);\n\n const definition = this._internals.localNameToDefinition(localName);\n // Resolve immediately only if the given local name has a definition *and*\n // the full document walk to upgrade elements with that local name has\n // already happened.\n if (definition && !this._pendingDefinitions.some(d => d.localName === localName)) {\n deferred.resolve(undefined);\n }\n\n return deferred.toPromise();\n }\n\n polyfillWrapFlushCallback(outer) {\n this._documentConstructionObserver.disconnect();\n const inner = this._flushCallback;\n this._flushCallback = flush => outer(() => inner(flush));\n }\n}\n\n// Closure compiler exports.\nwindow['CustomElementRegistry'] = CustomElementRegistry;\nCustomElementRegistry.prototype['define'] = CustomElementRegistry.prototype.define;\nCustomElementRegistry.prototype['upgrade'] = CustomElementRegistry.prototype.upgrade;\nCustomElementRegistry.prototype['get'] = CustomElementRegistry.prototype.get;\nCustomElementRegistry.prototype['whenDefined'] = CustomElementRegistry.prototype.whenDefined;\nCustomElementRegistry.prototype['polyfillWrapFlushCallback'] = CustomElementRegistry.prototype.polyfillWrapFlushCallback;\n","/**\n * @template T\n */\nexport default class Deferred {\n constructor() {\n /**\n * @private\n * @type {T|undefined}\n */\n this._value = undefined;\n\n /**\n * @private\n * @type {Function|undefined}\n */\n this._resolve = undefined;\n\n /**\n * @private\n * @type {!Promise<T>}\n */\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n\n if (this._value) {\n resolve(this._value);\n }\n });\n }\n\n /**\n * @param {T} value\n */\n resolve(value) {\n if (this._value) {\n throw new Error('Already resolved.');\n }\n\n this._value = value;\n\n if (this._resolve) {\n this._resolve(value);\n }\n }\n\n /**\n * @return {!Promise<T>}\n */\n toPromise() {\n return this._promise;\n }\n}\n","export default {\n Document_createElement: window.Document.prototype.createElement,\n Document_createElementNS: window.Document.prototype.createElementNS,\n Document_importNode: window.Document.prototype.importNode,\n Document_prepend: window.Document.prototype['prepend'],\n Document_append: window.Document.prototype['append'],\n DocumentFragment_prepend: window.DocumentFragment.prototype['prepend'],\n DocumentFragment_append: window.DocumentFragment.prototype['append'],\n Node_cloneNode: window.Node.prototype.cloneNode,\n Node_appendChild: window.Node.prototype.appendChild,\n Node_insertBefore: window.Node.prototype.insertBefore,\n Node_removeChild: window.Node.prototype.removeChild,\n Node_replaceChild: window.Node.prototype.replaceChild,\n Node_textContent: Object.getOwnPropertyDescriptor(window.Node.prototype, 'textContent'),\n Element_attachShadow: window.Element.prototype['attachShadow'],\n Element_innerHTML: Object.getOwnPropertyDescriptor(window.Element.prototype, 'innerHTML'),\n Element_getAttribute: window.Element.prototype.getAttribute,\n Element_setAttribute: window.Element.prototype.setAttribute,\n Element_removeAttribute: window.Element.prototype.removeAttribute,\n Element_getAttributeNS: window.Element.prototype.getAttributeNS,\n Element_setAttributeNS: window.Element.prototype.setAttributeNS,\n Element_removeAttributeNS: window.Element.prototype.removeAttributeNS,\n Element_insertAdjacentElement: window.Element.prototype['insertAdjacentElement'],\n Element_insertAdjacentHTML: window.Element.prototype['insertAdjacentHTML'],\n Element_prepend: window.Element.prototype['prepend'],\n Element_append: window.Element.prototype['append'],\n Element_before: window.Element.prototype['before'],\n Element_after: window.Element.prototype['after'],\n Element_replaceWith: window.Element.prototype['replaceWith'],\n Element_remove: window.Element.prototype['remove'],\n HTMLElement: window.HTMLElement,\n HTMLElement_innerHTML: Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, 'innerHTML'),\n HTMLElement_insertAdjacentElement: window.HTMLElement.prototype['insertAdjacentElement'],\n HTMLElement_insertAdjacentHTML: window.HTMLElement.prototype['insertAdjacentHTML'],\n};\n","/**\n * This class exists only to work around Closure's lack of a way to describe\n * singletons. It represents the 'already constructed marker' used in custom\n * element construction stacks.\n *\n * https://html.spec.whatwg.org/#concept-already-constructed-marker\n */\nclass AlreadyConstructedMarker {}\n\nexport default new AlreadyConstructedMarker();\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport AlreadyConstructedMarker from '../AlreadyConstructedMarker.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n window['HTMLElement'] = (function() {\n /**\n * @type {function(new: HTMLElement): !HTMLElement}\n */\n function HTMLElement() {\n // This should really be `new.target` but `new.target` can't be emulated\n // in ES5. Assuming the user keeps the default value of the constructor's\n // prototype's `constructor` property, this is equivalent.\n /** @type {!Function} */\n const constructor = this.constructor;\n\n const definition = internals.constructorToDefinition(constructor);\n if (!definition) {\n throw new Error('The custom element being constructed was not registered with `customElements`.');\n }\n\n const constructionStack = definition.constructionStack;\n\n if (constructionStack.length === 0) {\n const element = Native.Document_createElement.call(document, definition.localName);\n Object.setPrototypeOf(element, constructor.prototype);\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n internals.patch(element);\n return element;\n }\n\n const lastIndex = constructionStack.length - 1;\n const element = constructionStack[lastIndex];\n if (element === AlreadyConstructedMarker) {\n throw new Error('The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.');\n }\n constructionStack[lastIndex] = AlreadyConstructedMarker;\n\n Object.setPrototypeOf(element, constructor.prototype);\n internals.patch(/** @type {!HTMLElement} */ (element));\n\n return element;\n }\n\n HTMLElement.prototype = Native.HTMLElement.prototype;\n\n return HTMLElement;\n })();\n};\n","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\nimport CustomElementInternals from './CustomElementInternals.js';\nimport CustomElementRegistry from './CustomElementRegistry.js';\n\nimport PatchHTMLElement from './Patch/HTMLElement.js';\nimport PatchDocument from './Patch/Document.js';\nimport PatchDocumentFragment from './Patch/DocumentFragment.js';\nimport PatchNode from './Patch/Node.js';\nimport PatchElement from './Patch/Element.js';\n\nconst priorCustomElements = window['customElements'];\n\nif (!priorCustomElements ||\n priorCustomElements['forcePolyfill'] ||\n (typeof priorCustomElements['define'] != 'function') ||\n (typeof priorCustomElements['get'] != 'function')) {\n /** @type {!CustomElementInternals} */\n const internals = new CustomElementInternals();\n\n PatchHTMLElement(internals);\n PatchDocument(internals);\n PatchDocumentFragment(internals);\n PatchNode(internals);\n PatchElement(internals);\n\n // The main document is always associated with the registry.\n document.__CE_hasRegistry = true;\n\n /** @type {!CustomElementRegistry} */\n const customElements = new CustomElementRegistry(internals);\n\n Object.defineProperty(window, 'customElements', {\n configurable: true,\n enumerable: true,\n value: customElements,\n });\n}\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * prepend: !function(...(!Node|string)),\n * append: !function(...(!Node|string)),\n * }}\n */\nlet ParentNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ParentNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function appendPrependPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.prepend !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'prepend', appendPrependPatch(builtIn.prepend));\n }\n\n if (builtIn.append !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'append', appendPrependPatch(builtIn.append));\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n Utilities.setPropertyUnchecked(Document.prototype, 'createElement',\n /**\n * @this {Document}\n * @param {string} localName\n * @return {!Element}\n */\n function(localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElement.call(this, localName));\n internals.patch(result);\n return result;\n });\n\n Utilities.setPropertyUnchecked(Document.prototype, 'importNode',\n /**\n * @this {Document}\n * @param {!Node} node\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(node, deep) {\n const clone = Native.Document_importNode.call(this, node, deep);\n // Only create custom elements if this document is associated with the registry.\n if (!this.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n const NS_HTML = \"http://www.w3.org/1999/xhtml\";\n\n Utilities.setPropertyUnchecked(Document.prototype, 'createElementNS',\n /**\n * @this {Document}\n * @param {?string} namespace\n * @param {string} localName\n * @return {!Element}\n */\n function(namespace, localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry && (namespace === null || namespace === NS_HTML)) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElementNS.call(this, namespace, localName));\n internals.patch(result);\n return result;\n });\n\n PatchParentNode(internals, Document.prototype, {\n prepend: Native.Document_prepend,\n append: Native.Document_append,\n });\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n // `Node#nodeValue` is implemented on `Attr`.\n // `Node#textContent` is implemented on `Attr`, `Element`.\n\n Utilities.setPropertyUnchecked(Node.prototype, 'insertBefore',\n /**\n * @this {Node}\n * @param {!Node} node\n * @param {?Node} refNode\n * @return {!Node}\n */\n function(node, refNode) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'appendChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'cloneNode',\n /**\n * @this {Node}\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(deep) {\n const clone = Native.Node_cloneNode.call(this, deep);\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'removeChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_removeChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'replaceChild',\n /**\n * @this {Node}\n * @param {!Node} nodeToInsert\n * @param {!Node} nodeToRemove\n * @return {!Node}\n */\n function(nodeToInsert, nodeToRemove) {\n if (nodeToInsert instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(nodeToInsert.childNodes);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n internals.disconnectTree(nodeToRemove);\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeToInsertWasConnected = Utilities.isConnected(nodeToInsert);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n const thisIsConnected = Utilities.isConnected(this);\n\n if (thisIsConnected) {\n internals.disconnectTree(nodeToRemove);\n }\n\n if (nodeToInsertWasConnected) {\n internals.disconnectTree(nodeToInsert);\n }\n\n if (thisIsConnected) {\n internals.connectTree(nodeToInsert);\n }\n\n return nativeResult;\n });\n\n\n function patch_textContent(destination, baseDescriptor) {\n Object.defineProperty(destination, 'textContent', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Node} */ function(assignedValue) {\n // If this is a text node then there are no nodes to disconnect.\n if (this.nodeType === Node.TEXT_NODE) {\n baseDescriptor.set.call(this, assignedValue);\n return;\n }\n\n let removedNodes = undefined;\n // Checking for `firstChild` is faster than reading `childNodes.length`\n // to compare with 0.\n if (this.firstChild) {\n // Using `childNodes` is faster than `children`, even though we only\n // care about elements.\n const childNodes = this.childNodes;\n const childNodesLength = childNodes.length;\n if (childNodesLength > 0 && Utilities.isConnected(this)) {\n // Copying an array by iterating is faster than using slice.\n removedNodes = new Array(childNodesLength);\n for (let i = 0; i < childNodesLength; i++) {\n removedNodes[i] = childNodes[i];\n }\n }\n }\n\n baseDescriptor.set.call(this, assignedValue);\n\n if (removedNodes) {\n for (let i = 0; i < removedNodes.length; i++) {\n internals.disconnectTree(removedNodes[i]);\n }\n }\n },\n });\n }\n\n if (Native.Node_textContent && Native.Node_textContent.get) {\n patch_textContent(Node.prototype, Native.Node_textContent);\n } else {\n internals.addPatch(function(element) {\n patch_textContent(element, {\n enumerable: true,\n configurable: true,\n // NOTE: This implementation of the `textContent` getter assumes that\n // text nodes' `textContent` getter will not be patched.\n get: /** @this {Node} */ function() {\n /** @type {!Array<string>} */\n const parts = [];\n\n for (let i = 0; i < this.childNodes.length; i++) {\n parts.push(this.childNodes[i].textContent);\n }\n\n return parts.join('');\n },\n set: /** @this {Node} */ function(assignedValue) {\n while (this.firstChild) {\n Native.Node_removeChild.call(this, this.firstChild);\n }\n Native.Node_appendChild.call(this, document.createTextNode(assignedValue));\n },\n });\n });\n }\n};\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * before: !function(...(!Node|string)),\n * after: !function(...(!Node|string)),\n * replaceWith: !function(...(!Node|string)),\n * remove: !function(),\n * }}\n */\nlet ChildNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ChildNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function beforeAfterPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'before', beforeAfterPatch(builtIn.before));\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'after', beforeAfterPatch(builtIn.after));\n }\n\n if (builtIn.replaceWith !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'replaceWith',\n /**\n * @param {...(!Node|string)} nodes\n */\n function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.replaceWith.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (wasConnected) {\n internals.disconnectTree(this);\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n });\n }\n\n if (builtIn.remove !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'remove',\n function() {\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.remove.call(this);\n\n if (wasConnected) {\n internals.disconnectTree(this);\n }\n });\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\nimport PatchChildNode from './Interface/ChildNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n if (Native.Element_attachShadow) {\n Utilities.setPropertyUnchecked(Element.prototype, 'attachShadow',\n /**\n * @this {Element}\n * @param {!{mode: string}} init\n * @return {ShadowRoot}\n */\n function(init) {\n const shadowRoot = Native.Element_attachShadow.call(this, init);\n this.__CE_shadowRoot = shadowRoot;\n return shadowRoot;\n });\n }\n\n\n function patch_innerHTML(destination, baseDescriptor) {\n Object.defineProperty(destination, 'innerHTML', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Element} */ function(htmlString) {\n const isConnected = Utilities.isConnected(this);\n\n // NOTE: In IE11, when using the native `innerHTML` setter, all nodes\n // that were previously descendants of the context element have all of\n // their children removed as part of the set - the entire subtree is\n // 'disassembled'. This work around walks the subtree *before* using the\n // native setter.\n /** @type {!Array<!Element>|undefined} */\n let removedElements = undefined;\n if (isConnected) {\n removedElements = [];\n Utilities.walkDeepDescendantElements(this, element => {\n if (element !== this) {\n removedElements.push(element);\n }\n });\n }\n\n baseDescriptor.set.call(this, htmlString);\n\n if (removedElements) {\n for (let i = 0; i < removedElements.length; i++) {\n const element = removedElements[i];\n if (element.__CE_state === CEState.custom) {\n internals.disconnectedCallback(element);\n }\n }\n }\n\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(this);\n } else {\n internals.patchAndUpgradeTree(this);\n }\n return htmlString;\n },\n });\n }\n\n if (Native.Element_innerHTML && Native.Element_innerHTML.get) {\n patch_innerHTML(Element.prototype, Native.Element_innerHTML);\n } else if (Native.HTMLElement_innerHTML && Native.HTMLElement_innerHTML.get) {\n patch_innerHTML(HTMLElement.prototype, Native.HTMLElement_innerHTML);\n } else {\n\n internals.addPatch(function(element) {\n patch_innerHTML(element, {\n enumerable: true,\n configurable: true,\n // Implements getting `innerHTML` by performing an unpatched `cloneNode`\n // of the element and returning the resulting element's `innerHTML`.\n // TODO: Is this too expensive?\n get: /** @this {Element} */ function() {\n return Native.Node_cloneNode.call(this, true).innerHTML;\n },\n // Implements setting `innerHTML` by creating an unpatched element,\n // setting `innerHTML` of that element and replacing the target\n // element's children with those of the unpatched element.\n set: /** @this {Element} */ function(assignedValue) {\n // NOTE: re-route to `content` for `template` elements.\n // We need to do this because `template.appendChild` does not\n // route into `template.content`.\n const isTemplate = (this.localName === 'template');\n /** @type {!Node} */\n const content = isTemplate ? (/** @type {!HTMLTemplateElement} */\n (this)).content : this;\n /** @type {!Node} */\n const rawElement = Native.Document_createElement.call(document,\n this.localName);\n rawElement.innerHTML = assignedValue;\n\n while (content.childNodes.length > 0) {\n Native.Node_removeChild.call(content, content.childNodes[0]);\n }\n const container = isTemplate ? rawElement.content : rawElement;\n while (container.childNodes.length > 0) {\n Native.Node_appendChild.call(content, container.childNodes[0]);\n }\n },\n });\n });\n }\n\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttribute',\n /**\n * @this {Element}\n * @param {string} name\n * @param {string} newValue\n */\n function(name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttribute.call(this, name, newValue);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_setAttribute.call(this, name, newValue);\n newValue = Native.Element_getAttribute.call(this, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, null);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n * @param {string} newValue\n */\n function(namespace, name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttribute',\n /**\n * @this {Element}\n * @param {string} name\n */\n function(name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttribute.call(this, name);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_removeAttribute.call(this, name);\n if (oldValue !== null) {\n internals.attributeChangedCallback(this, name, oldValue, null, null);\n }\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n */\n function(namespace, name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttributeNS.call(this, namespace, name);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_removeAttributeNS.call(this, namespace, name);\n // In older browsers, `Element#getAttributeNS` may return the empty string\n // instead of null if the attribute does not exist. For details, see;\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNS#Notes\n const newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n if (oldValue !== newValue) {\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n }\n });\n\n\n function patch_insertAdjacentElement(destination, baseMethod) {\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentElement',\n /**\n * @this {Element}\n * @param {string} position\n * @param {!Element} element\n * @return {?Element}\n */\n function(position, element) {\n const wasConnected = Utilities.isConnected(element);\n const insertedElement = /** @type {!Element} */\n (baseMethod.call(this, position, element));\n\n if (wasConnected) {\n internals.disconnectTree(element);\n }\n\n if (Utilities.isConnected(insertedElement)) {\n internals.connectTree(element);\n }\n return insertedElement;\n });\n }\n\n if (Native.HTMLElement_insertAdjacentElement) {\n patch_insertAdjacentElement(HTMLElement.prototype, Native.HTMLElement_insertAdjacentElement);\n } else if (Native.Element_insertAdjacentElement) {\n patch_insertAdjacentElement(Element.prototype, Native.Element_insertAdjacentElement);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentElement` was not patched.');\n }\n\n\n function patch_insertAdjacentHTML(destination, baseMethod) {\n /**\n * Patches and upgrades all nodes which are siblings between `start`\n * (inclusive) and `end` (exclusive). If `end` is `null`, then all siblings\n * following `start` will be patched and upgraded.\n * @param {!Node} start\n * @param {?Node} end\n */\n function upgradeNodesInRange(start, end) {\n const nodes = [];\n for (let node = start; node !== end; node = node.nextSibling) {\n nodes.push(node);\n }\n for (let i = 0; i < nodes.length; i++) {\n internals.patchAndUpgradeTree(nodes[i]);\n }\n }\n\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentHTML',\n /**\n * @this {Element}\n * @param {string} position\n * @param {string} text\n */\n function(position, text) {\n position = position.toLowerCase();\n\n if (position === \"beforebegin\") {\n const marker = this.previousSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(\n /** @type {!Node} */ (marker || this.parentNode.firstChild), this);\n } else if (position === \"afterbegin\") {\n const marker = this.firstChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.firstChild), marker);\n } else if (position === \"beforeend\") {\n const marker = this.lastChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(marker || this.firstChild, null);\n } else if (position === \"afterend\") {\n const marker = this.nextSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.nextSibling), marker);\n } else {\n throw new SyntaxError(`The value provided (${String(position)}) is ` +\n \"not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.\");\n }\n });\n }\n\n if (Native.HTMLElement_insertAdjacentHTML) {\n patch_insertAdjacentHTML(HTMLElement.prototype, Native.HTMLElement_insertAdjacentHTML);\n } else if (Native.Element_insertAdjacentHTML) {\n patch_insertAdjacentHTML(Element.prototype, Native.Element_insertAdjacentHTML);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentHTML` was not patched.');\n }\n\n\n PatchParentNode(internals, Element.prototype, {\n prepend: Native.Element_prepend,\n append: Native.Element_append,\n });\n\n PatchChildNode(internals, Element.prototype, {\n before: Native.Element_before,\n after: Native.Element_after,\n replaceWith: Native.Element_replaceWith,\n remove: Native.Element_remove,\n });\n};\n","import CustomElementInternals from '../CustomElementInternals.js';\nimport Native from './Native.js';\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n PatchParentNode(internals, DocumentFragment.prototype, {\n prepend: Native.DocumentFragment_prepend,\n append: Native.DocumentFragment_append,\n });\n};\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nfunction findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport * as StyleUtil from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/* Transforms ShadowDOM styling into ShadyDOM styling\n\n* scoping:\n\n * elements in scope get scoping selector class=\"x-foo-scope\"\n * selectors re-written as follows:\n\n div button -> div.x-foo-scope button.x-foo-scope\n\n* :host -> scopeName\n\n* :host(...) -> scopeName...\n\n* ::slotted(...) -> scopeName > ...\n\n* ...:dir(ltr|rtl) -> [dir=\"ltr|rtl\"] ..., ...[dir=\"ltr|rtl\"]\n\n* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir=\"rtl\"] scopeName, scopeName[dir=\"rtl\"]\n\n*/\nconst SCOPE_NAME = 'style-scope';\n\nclass StyleTransformer {\n get SCOPE_NAME() {\n return SCOPE_NAME;\n }\n /**\n * Given a node and scope name, add a scoping class to each node\n * in the tree. This facilitates transforming css into scoped rules.\n * @param {?} node\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n dom(node, scope, shouldRemoveScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n this._transformDom(node, scope || '', shouldRemoveScope);\n }\n }\n\n _transformDom(node, selector, shouldRemoveScope) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.element(node, selector, shouldRemoveScope);\n }\n let c$ = (node.localName === 'template') ?\n (node.content || node._content).childNodes :\n node.children || node.childNodes;\n if (c$) {\n for (let i=0; i<c$.length; i++) {\n this._transformDom(c$[i], selector, shouldRemoveScope);\n }\n }\n }\n /**\n * @param {?} element\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n element(element, scope, shouldRemoveScope) {\n // note: if using classes, we add both the general 'style-scope' class\n // as well as the specific scope. This enables easy filtering of all\n // `style-scope` elements\n if (scope) {\n // note: svg on IE does not have classList so fallback to class\n if (element.classList) {\n if (shouldRemoveScope) {\n element.classList.remove(SCOPE_NAME);\n element.classList.remove(scope);\n } else {\n element.classList.add(SCOPE_NAME);\n element.classList.add(scope);\n }\n } else if (element.getAttribute) {\n let c = element.getAttribute(CLASS);\n if (shouldRemoveScope) {\n if (c) {\n let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');\n StyleUtil.setElementClassRaw(element, newValue);\n }\n } else {\n let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;\n StyleUtil.setElementClassRaw(element, newValue);\n }\n }\n }\n }\n\n /**\n * @param {?} element\n * @param {?} styleRules\n * @param {?=} callback\n */\n elementStyles(element, styleRules, callback) {\n let cssBuildType = element['__cssBuild'];\n // no need to shim selectors if settings.useNativeShadow, also\n // a shady css build will already have transformed selectors\n // NOTE: This method may be called as part of static or property shimming.\n // When there is a targeted build it will not be called for static shimming,\n // but when the property shim is used it is called and should opt out of\n // static shimming work when a proper build exists.\n let cssText = '';\n if (nativeShadow || cssBuildType === 'shady') {\n cssText = StyleUtil.toCssText(styleRules, callback);\n } else {\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n cssText = this.css(styleRules, is, typeExtension, callback) + '\\n\\n';\n }\n return cssText.trim();\n }\n\n // Given a string of cssText and a scoping string (scope), returns\n // a string of scoped css where each selector is transformed to include\n // a class created from the scope. ShadowDOM selectors are also transformed\n // (e.g. :host) to use the scoping selector.\n css(rules, scope, ext, callback) {\n let hostScope = this._calcHostScope(scope, ext);\n scope = this._calcElementScope(scope);\n let self = this;\n return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n if (!rule.isScoped) {\n self.rule(rule, scope, hostScope);\n rule.isScoped = true;\n }\n if (callback) {\n callback(rule, scope, hostScope);\n }\n });\n }\n\n _calcElementScope(scope) {\n if (scope) {\n return CSS_CLASS_PREFIX + scope;\n } else {\n return '';\n }\n }\n\n _calcHostScope(scope, ext) {\n return ext ? `[is=${scope}]` : scope;\n }\n\n rule(rule, scope, hostScope) {\n this._transformRule(rule, this._transformComplexSelector,\n scope, hostScope);\n }\n\n /**\n * transforms a css rule to a scoped rule.\n *\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRule(rule, transformer, scope, hostScope) {\n // NOTE: save transformedSelector for subsequent matching of elements\n // against selectors (e.g. when calculating style properties)\n rule['selector'] = rule.transformedSelector =\n this._transformRuleCss(rule, transformer, scope, hostScope);\n }\n\n /**\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRuleCss(rule, transformer, scope, hostScope) {\n let p$ = rule['selector'].split(COMPLEX_SELECTOR_SEP);\n // we want to skip transformation of rules that appear in keyframes,\n // because they are keyframe selectors, not element selectors.\n if (!StyleUtil.isKeyframesSelector(rule)) {\n for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {\n p$[i] = transformer.call(this, p, scope, hostScope);\n }\n }\n return p$.join(COMPLEX_SELECTOR_SEP);\n }\n\n /**\n * @param {string} selector\n * @return {string}\n */\n _twiddleNthPlus(selector) {\n return selector.replace(NTH, (m, type, inside) => {\n if (inside.indexOf('+') > -1) {\n inside = inside.replace(/\\+/g, '___');\n } else if (inside.indexOf('___') > -1) {\n inside = inside.replace(/___/g, '+');\n }\n return `:${type}(${inside})`;\n });\n }\n\n/**\n * @param {string} selector\n * @param {string} scope\n * @param {string=} hostScope\n */\n _transformComplexSelector(selector, scope, hostScope) {\n let stop = false;\n selector = selector.trim();\n // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP\n let isNth = NTH.test(selector);\n if (isNth) {\n selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\\s/g, '')})`)\n selector = this._twiddleNthPlus(selector);\n }\n selector = selector.replace(SLOTTED_START, `${HOST} $1`);\n selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {\n if (!stop) {\n let info = this._transformCompoundSelector(s, c, scope, hostScope);\n stop = stop || info.stop;\n c = info.combinator;\n s = info.value;\n }\n return c + s;\n });\n if (isNth) {\n selector = this._twiddleNthPlus(selector);\n }\n return selector;\n }\n\n _transformCompoundSelector(selector, combinator, scope, hostScope) {\n // replace :host with host scoping class\n let slottedIndex = selector.indexOf(SLOTTED);\n if (selector.indexOf(HOST) >= 0) {\n selector = this._transformHostSelector(selector, hostScope);\n // replace other selectors with scoping class\n } else if (slottedIndex !== 0) {\n selector = scope ? this._transformSimpleSelector(selector, scope) :\n selector;\n }\n // mark ::slotted() scope jump to replace with descendant selector + arg\n // also ignore left-side combinator\n let slotted = false;\n if (slottedIndex >= 0) {\n combinator = '';\n slotted = true;\n }\n // process scope jumping selectors up to the scope jump and then stop\n let stop;\n if (slotted) {\n stop = true;\n if (slotted) {\n // .zonk ::slotted(.foo) -> .zonk.scope > .foo\n selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);\n }\n }\n selector = selector.replace(DIR_PAREN, (m, before, dir) =>\n `[dir=\"${dir}\"] ${before}, ${before}[dir=\"${dir}\"]`);\n return {value: selector, combinator, stop};\n }\n\n _transformSimpleSelector(selector, scope) {\n let p$ = selector.split(PSEUDO_PREFIX);\n p$[0] += scope;\n return p$.join(PSEUDO_PREFIX);\n }\n\n // :host(...) -> scopeName...\n _transformHostSelector(selector, hostScope) {\n let m = selector.match(HOST_PAREN);\n let paren = m && m[2].trim() || '';\n if (paren) {\n if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {\n // paren starts with a type selector\n let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];\n // if the type selector is our hostScope then avoid pre-pending it\n if (typeSelector === hostScope) {\n return paren;\n // otherwise, this selector should not match in this scope so\n // output a bogus selector.\n } else {\n return SELECTOR_NO_MATCH;\n }\n } else {\n // make sure to do a replace here to catch selectors like:\n // `:host(.foo)::before`\n return selector.replace(HOST_PAREN, function(m, host, paren) {\n return hostScope + paren;\n });\n }\n // if no paren, do a straight :host replacement.\n // TODO(sorvell): this should not strictly be necessary but\n // it's needed to maintain support for `:host[foo]` type selectors\n // which have been improperly used under Shady DOM. This should be\n // deprecated.\n } else {\n return selector.replace(HOST, hostScope);\n }\n }\n\n /**\n * @param {StyleNode} rule\n */\n documentRule(rule) {\n // reset selector in case this is redone.\n rule['selector'] = rule['parsedSelector'];\n this.normalizeRootSelector(rule);\n this._transformRule(rule, this._transformDocumentSelector);\n }\n\n /**\n * @param {StyleNode} rule\n */\n normalizeRootSelector(rule) {\n if (rule['selector'] === ROOT) {\n rule['selector'] = 'html';\n }\n }\n\n/**\n * @param {string} selector\n */\n _transformDocumentSelector(selector) {\n return selector.match(SLOTTED) ?\n this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) :\n this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);\n }\n}\n\nlet NTH = /:(nth[-\\w]+)\\(([^)]+)\\)/;\nlet SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;\nlet COMPLEX_SELECTOR_SEP = ',';\nlet SIMPLE_SELECTOR_SEP = /(^|[\\s>+~]+)((?:\\[.+?\\]|[^\\s>+~=[])+)/g;\nlet SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;\nlet HOST = ':host';\nlet ROOT = ':root';\nlet SLOTTED = '::slotted';\nlet SLOTTED_START = new RegExp(`^(${SLOTTED})`);\n// NOTE: this supports 1 nested () pair for things like\n// :host(:not([selected]), more general support requires\n// parsing which seems like overkill\nlet HOST_PAREN = /(:host)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\n// similar to HOST_PAREN\nlet SLOTTED_PAREN = /(?:::slotted)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\nlet DIR_PAREN = /(.*):dir\\((?:(ltr|rtl))\\)/;\nlet CSS_CLASS_PREFIX = '.';\nlet PSEUDO_PREFIX = ':';\nlet CLASS = 'class';\nlet SELECTOR_NO_MATCH = 'should_not_match';\n\nexport default new StyleTransformer()\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/** @const {string} */\nconst infoKey = '__styleInfo';\n\nexport default class StyleInfo {\n /**\n * @param {Element} node\n * @return {StyleInfo}\n */\n static get(node) {\n if (node) {\n return node[infoKey];\n } else {\n return null;\n }\n }\n /**\n * @param {!Element} node\n * @param {StyleInfo} styleInfo\n * @return {StyleInfo}\n */\n static set(node, styleInfo) {\n node[infoKey] = styleInfo;\n return styleInfo;\n }\n /**\n * @param {StyleNode} ast\n * @param {Node=} placeholder\n * @param {Array<string>=} ownStylePropertyNames\n * @param {string=} elementName\n * @param {string=} typeExtension\n * @param {string=} cssBuild\n */\n constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {\n /** @type {StyleNode} */\n this.styleRules = ast || null;\n /** @type {Node} */\n this.placeholder = placeholder || null;\n /** @type {!Array<string>} */\n this.ownStylePropertyNames = ownStylePropertyNames || [];\n /** @type {Array<Object>} */\n this.overrideStyleProperties = null;\n /** @type {string} */\n this.elementName = elementName || '';\n /** @type {string} */\n this.cssBuild = cssBuild || '';\n /** @type {string} */\n this.typeExtension = typeExtension || '';\n /** @type {Object<string, string>} */\n this.styleProperties = null;\n /** @type {?string} */\n this.scopeSelector = null;\n /** @type {HTMLStyleElement} */\n this.customStyle = null;\n }\n _getStyleRules() {\n return this.styleRules;\n }\n}\n\nStyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport * as RX from './common-regex.js';\nimport StyleInfo from './style-info.js';\n\n// TODO: dedupe with shady\n/**\n * @param {string} selector\n * @return {boolean}\n * @this {Element}\n */\nconst matchesSelector = function(selector) {\n const method = this.matches || this.matchesSelector ||\n this.mozMatchesSelector || this.msMatchesSelector ||\n this.oMatchesSelector || this.webkitMatchesSelector;\n return method && method.call(this, selector);\n};\n\nconst IS_IE = navigator.userAgent.match('Trident');\n\nconst XSCOPE_NAME = 'x-scope';\n\nclass StyleProperties {\n get XSCOPE_NAME() {\n return XSCOPE_NAME;\n }\n/**\n * decorates styles with rule info and returns an array of used style property names\n *\n * @param {StyleNode} rules\n * @return {Array<string>}\n */\n decorateStyles(rules) {\n let self = this, props = {}, keyframes = [], ruleIndex = 0;\n StyleUtil.forEachRule(rules, function(rule) {\n self.decorateRule(rule);\n // mark in-order position of ast rule in styles block, used for cache key\n rule.index = ruleIndex++;\n self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);\n }, function onKeyframesRule(rule) {\n keyframes.push(rule);\n });\n // Cache all found keyframes rules for later reference:\n rules._keyframes = keyframes;\n // return this list of property names *consumes* in these styles.\n let names = [];\n for (let i in props) {\n names.push(i);\n }\n return names;\n }\n\n // decorate a single rule with property info\n decorateRule(rule) {\n if (rule.propertyInfo) {\n return rule.propertyInfo;\n }\n let info = {}, properties = {};\n let hasProperties = this.collectProperties(rule, properties);\n if (hasProperties) {\n info.properties = properties;\n // TODO(sorvell): workaround parser seeing mixins as additional rules\n rule['rules'] = null;\n }\n info.cssText = this.collectCssText(rule);\n rule.propertyInfo = info;\n return info;\n }\n\n // collects the custom properties from a rule's cssText\n collectProperties(rule, properties) {\n let info = rule.propertyInfo;\n if (info) {\n if (info.properties) {\n Object.assign(properties, info.properties);\n return true;\n }\n } else {\n let m, rx = RX.VAR_ASSIGN;\n let cssText = rule['parsedCssText'];\n let value;\n let any;\n while ((m = rx.exec(cssText))) {\n // note: group 2 is var, 3 is mixin\n value = (m[2] || m[3]).trim();\n // value of 'inherit' or 'unset' is equivalent to not setting the property here\n if (value !== 'inherit' || value !== 'unset') {\n properties[m[1].trim()] = value;\n }\n any = true;\n }\n return any;\n }\n\n }\n\n // returns cssText of properties that consume variables/mixins\n collectCssText(rule) {\n return this.collectConsumingCssText(rule['parsedCssText']);\n }\n\n // NOTE: we support consumption inside mixin assignment\n // but not production, so strip out {...}\n collectConsumingCssText(cssText) {\n return cssText.replace(RX.BRACKETED, '')\n .replace(RX.VAR_ASSIGN, '');\n }\n\n collectPropertiesInCssText(cssText, props) {\n let m;\n while ((m = RX.VAR_CONSUMED.exec(cssText))) {\n let name = m[1];\n // This regex catches all variable names, and following non-whitespace char\n // If next char is not ':', then variable is a consumer\n if (m[2] !== ':') {\n props[name] = true;\n }\n }\n }\n\n // turns custom properties into realized values.\n reify(props) {\n // big perf optimization here: reify only *own* properties\n // since this object has __proto__ of the element's scope properties\n let names = Object.getOwnPropertyNames(props);\n for (let i=0, n; i < names.length; i++) {\n n = names[i];\n props[n] = this.valueForProperty(props[n], props);\n }\n }\n\n // given a property value, returns the reified value\n // a property value may be:\n // (1) a literal value like: red or 5px;\n // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or\n // var(--a, var(--b));\n // (3) a literal mixin value like { properties }. Each of these properties\n // can have values that are: (a) literal, (b) variables, (c) @apply mixins.\n valueForProperty(property, props) {\n // case (1) default\n // case (3) defines a mixin and we have to reify the internals\n if (property) {\n if (property.indexOf(';') >=0) {\n property = this.valueForProperties(property, props);\n } else {\n // case (2) variable\n let self = this;\n let fn = function(prefix, value, fallback, suffix) {\n if (!value) {\n return prefix + suffix;\n }\n let propertyValue = self.valueForProperty(props[value], props);\n // if value is \"initial\", then the variable should be treated as unset\n if (!propertyValue || propertyValue === 'initial') {\n // fallback may be --a or var(--a) or literal\n propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||\n fallback;\n } else if (propertyValue === 'apply-shim-inherit') {\n // CSS build will replace `inherit` with `apply-shim-inherit`\n // for use with native css variables.\n // Since we have full control, we can use `inherit` directly.\n propertyValue = 'inherit';\n }\n return prefix + (propertyValue || '') + suffix;\n };\n property = StyleUtil.processVariableAndFallback(property, fn);\n }\n }\n return property && property.trim() || '';\n }\n\n // note: we do not yet support mixin within mixin\n valueForProperties(property, props) {\n let parts = property.split(';');\n for (let i=0, p, m; i<parts.length; i++) {\n if ((p = parts[i])) {\n RX.MIXIN_MATCH.lastIndex = 0;\n m = RX.MIXIN_MATCH.exec(p);\n if (m) {\n p = this.valueForProperty(props[m[1]], props);\n } else {\n let colon = p.indexOf(':');\n if (colon !== -1) {\n let pp = p.substring(colon);\n pp = pp.trim();\n pp = this.valueForProperty(pp, props) || pp;\n p = p.substring(0, colon) + pp;\n }\n }\n parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?\n // strip trailing ;\n p.slice(0, -1) :\n p || '';\n }\n }\n return parts.join(';');\n }\n\n applyProperties(rule, props) {\n let output = '';\n // dynamically added sheets may not be decorated so ensure they are.\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (rule.propertyInfo.cssText) {\n output = this.valueForProperties(rule.propertyInfo.cssText, props);\n }\n rule['cssText'] = output;\n }\n\n // Apply keyframe transformations to the cssText of a given rule. The\n // keyframeTransforms object is a map of keyframe names to transformer\n // functions which take in cssText and spit out transformed cssText.\n applyKeyframeTransforms(rule, keyframeTransforms) {\n let input = rule['cssText'];\n let output = rule['cssText'];\n if (rule.hasAnimations == null) {\n // Cache whether or not the rule has any animations to begin with:\n rule.hasAnimations = RX.ANIMATION_MATCH.test(input);\n }\n // If there are no animations referenced, we can skip transforms:\n if (rule.hasAnimations) {\n let transform;\n // If we haven't transformed this rule before, we iterate over all\n // transforms:\n if (rule.keyframeNamesToTransform == null) {\n rule.keyframeNamesToTransform = [];\n for (let keyframe in keyframeTransforms) {\n transform = keyframeTransforms[keyframe];\n output = transform(input);\n // If the transform actually changed the CSS text, we cache the\n // transform name for future use:\n if (input !== output) {\n input = output;\n rule.keyframeNamesToTransform.push(keyframe);\n }\n }\n } else {\n // If we already have a list of keyframe names that apply to this\n // rule, we apply only those keyframe name transforms:\n for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {\n transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];\n input = transform(input);\n }\n output = input;\n }\n }\n rule['cssText'] = output;\n }\n\n // Test if the rules in these styles matches the given `element` and if so,\n // collect any custom properties into `props`.\n /**\n * @param {StyleNode} rules\n * @param {Element} element\n */\n propertyDataFromStyles(rules, element) {\n let props = {}, self = this;\n // generates a unique key for these matches\n let o = [];\n // note: active rules excludes non-matching @media rules\n StyleUtil.forEachRule(rules, function(rule) {\n // TODO(sorvell): we could trim the set of rules at declaration\n // time to only include ones that have properties\n if (!rule.propertyInfo) {\n self.decorateRule(rule);\n }\n // match element against transformedSelector: selector may contain\n // unwanted uniquification and parsedSelector does not directly match\n // for :host selectors.\n let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];\n if (element && rule.propertyInfo.properties && selectorToMatch) {\n if (matchesSelector.call(element, selectorToMatch)) {\n self.collectProperties(rule, props);\n // produce numeric key for these matches for lookup\n addToBitMask(rule.index, o);\n }\n }\n }, null, true);\n return {properties: props, key: o};\n }\n\n /**\n * @param {Element} scope\n * @param {StyleNode} rule\n * @param {string|undefined} cssBuild\n * @param {function(Object)} callback\n */\n whenHostOrRootRule(scope, rule, cssBuild, callback) {\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (!rule.propertyInfo.properties) {\n return;\n }\n let {is, typeExtension} = StyleUtil.getIsExtends(scope);\n let hostScope = is ?\n StyleTransformer._calcHostScope(is, typeExtension) :\n 'html';\n let parsedSelector = rule['parsedSelector'];\n let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');\n let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;\n // build info is either in scope (when scope is an element) or in the style\n // when scope is the default scope; note: this allows default scope to have\n // mixed mode built and unbuilt styles.\n if (cssBuild === 'shady') {\n // :root -> x-foo > *.x-foo for elements and html for custom-style\n isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;\n // :host -> x-foo for elements, but sub-rules have .x-foo in them\n isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;\n }\n if (cssBuild === 'shadow') {\n isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';\n isHost = isHost && !isRoot;\n }\n if (!isRoot && !isHost) {\n return;\n }\n let selectorToMatch = hostScope;\n if (isHost) {\n // need to transform :host because `:host` does not work with `matches`\n if (!rule.transformedSelector) {\n // transform :host into a matchable selector\n rule.transformedSelector =\n StyleTransformer._transformRuleCss(\n rule,\n StyleTransformer._transformComplexSelector,\n StyleTransformer._calcElementScope(is),\n hostScope\n );\n }\n selectorToMatch = rule.transformedSelector || hostScope;\n }\n callback({\n selector: selectorToMatch,\n isHost: isHost,\n isRoot: isRoot\n });\n }\n/**\n * @param {Element} scope\n * @param {StyleNode} rules\n * @return {Object}\n */\n hostAndRootPropertiesForScope(scope, rules) {\n let hostProps = {}, rootProps = {}, self = this;\n // note: active rules excludes non-matching @media rules\n let cssBuild = rules && rules['__cssBuild'];\n StyleUtil.forEachRule(rules, function(rule) {\n // if scope is StyleDefaults, use _element for matchesSelector\n self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {\n let element = scope._element || scope;\n if (matchesSelector.call(element, info.selector)) {\n if (info.isHost) {\n self.collectProperties(rule, hostProps);\n } else {\n self.collectProperties(rule, rootProps);\n }\n }\n });\n }, null, true);\n return {rootProps: rootProps, hostProps: hostProps};\n }\n\n /**\n * @param {Element} element\n * @param {Object} properties\n * @param {string} scopeSelector\n */\n transformStyles(element, properties, scopeSelector) {\n let self = this;\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n let hostSelector = StyleTransformer\n ._calcHostScope(is, typeExtension);\n let rxHostSelector = element.extends ?\n '\\\\' + hostSelector.slice(0, -1) + '\\\\]' :\n hostSelector;\n let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +\n RX.HOST_SUFFIX);\n let rules = StyleInfo.get(element).styleRules;\n let keyframeTransforms =\n this._elementKeyframeTransforms(element, rules, scopeSelector);\n return StyleTransformer.elementStyles(element, rules, function(rule) {\n self.applyProperties(rule, properties);\n if (!nativeShadow &&\n !StyleUtil.isKeyframesSelector(rule) &&\n rule['cssText']) {\n // NOTE: keyframe transforms only scope munge animation names, so it\n // is not necessary to apply them in ShadowDOM.\n self.applyKeyframeTransforms(rule, keyframeTransforms);\n self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);\n }\n });\n }\n\n /**\n * @param {Element} element\n * @param {StyleNode} rules\n * @param {string} scopeSelector\n * @return {Object}\n */\n _elementKeyframeTransforms(element, rules, scopeSelector) {\n let keyframesRules = rules._keyframes;\n let keyframeTransforms = {};\n if (!nativeShadow && keyframesRules) {\n // For non-ShadowDOM, we transform all known keyframes rules in\n // advance for the current scope. This allows us to catch keyframes\n // rules that appear anywhere in the stylesheet:\n for (let i = 0, keyframesRule = keyframesRules[i];\n i < keyframesRules.length;\n keyframesRule = keyframesRules[++i]) {\n this._scopeKeyframes(keyframesRule, scopeSelector);\n keyframeTransforms[keyframesRule['keyframesName']] =\n this._keyframesRuleTransformer(keyframesRule);\n }\n }\n return keyframeTransforms;\n }\n\n // Generate a factory for transforming a chunk of CSS text to handle a\n // particular scoped keyframes rule.\n /**\n * @param {StyleNode} keyframesRule\n * @return {function(string):string}\n */\n _keyframesRuleTransformer(keyframesRule) {\n return function(cssText) {\n return cssText.replace(\n keyframesRule.keyframesNameRx,\n keyframesRule.transformedKeyframesName);\n };\n }\n\n/**\n * Transforms `@keyframes` names to be unique for the current host.\n * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0\n *\n * @param {StyleNode} rule\n * @param {string} scopeId\n */\n _scopeKeyframes(rule, scopeId) {\n // Animation names are of the form [\\w-], so ensure that the name regex does not partially apply\n // to similarly named keyframe names by checking for a word boundary at the beginning and\n // a non-word boundary or `-` at the end.\n rule.keyframesNameRx = new RegExp(`\\\\b${rule['keyframesName']}(?!\\\\B|-)`, 'g');\n rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n rule['selector'] = rule.transformedSelector.replace(\n rule['keyframesName'], rule.transformedKeyframesName);\n }\n\n // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):\n // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo\n // host selector: x-foo.wide -> .x-foo-42.wide\n // note: we use only the scope class (.x-foo-42) and not the hostSelector\n // (x-foo) to scope :host rules; this helps make property host rules\n // have low specificity. They are overrideable by class selectors but,\n // unfortunately, not by type selectors (e.g. overriding via\n // `.special` is ok, but not by `x-foo`).\n /**\n * @param {StyleNode} rule\n * @param {RegExp} hostRx\n * @param {string} hostSelector\n * @param {string} scopeId\n */\n _scopeSelector(rule, hostRx, hostSelector, scopeId) {\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n let selector = rule.transformedSelector;\n let scope = '.' + scopeId;\n let parts = selector.split(',');\n for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n parts[i] = p.match(hostRx) ?\n p.replace(hostSelector, scope) :\n scope + ' ' + p;\n }\n rule['selector'] = parts.join(',');\n }\n\n /**\n * @param {Element} element\n * @param {string} selector\n * @param {string} old\n */\n applyElementScopeSelector(element, selector, old) {\n let c = element.getAttribute('class') || '';\n let v = c;\n if (old) {\n v = c.replace(\n new RegExp('\\\\s*' + XSCOPE_NAME + '\\\\s*' + old + '\\\\s*', 'g'), ' ');\n }\n v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;\n if (c !== v) {\n StyleUtil.setElementClassRaw(element, v);\n }\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Object} properties\n * @param {string} selector\n * @param {HTMLStyleElement} style\n * @return {HTMLStyleElement}\n */\n applyElementStyle(element, properties, selector, style) {\n // calculate cssText to apply\n let cssText = style ? style.textContent || '' :\n this.transformStyles(element, properties, selector);\n // if shady and we have a cached style that is not style, decrement\n let styleInfo = StyleInfo.get(element);\n let s = styleInfo.customStyle;\n if (s && !nativeShadow && (s !== style)) {\n s['_useCount']--;\n if (s['_useCount'] <= 0 && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }\n // apply styling always under native or if we generated style\n // or the cached style is not in document(!)\n if (nativeShadow) {\n // update existing style only under native\n if (styleInfo.customStyle) {\n styleInfo.customStyle.textContent = cssText;\n style = styleInfo.customStyle;\n // otherwise, if we have css to apply, do so\n } else if (cssText) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,\n styleInfo.placeholder);\n }\n } else {\n // shady and no cache hit\n if (!style) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n if (cssText) {\n style = StyleUtil.applyCss(cssText, selector, null,\n styleInfo.placeholder);\n }\n // shady and cache hit but not in document\n } else if (!style.parentNode) {\n if (IS_IE && cssText.indexOf('@media') > -1) {\n // @media rules may be stale in IE 10 and 11\n // refresh the text content of the style to revalidate them.\n style.textContent = cssText;\n }\n StyleUtil.applyStyle(style, null, styleInfo.placeholder);\n }\n }\n // ensure this style is our custom style and increment its use count.\n if (style) {\n style['_useCount'] = style['_useCount'] || 0;\n // increment use count if we changed styles\n if (styleInfo.customStyle != style) {\n style['_useCount']++;\n }\n styleInfo.customStyle = style;\n }\n return style;\n }\n\n /**\n * @param {Element} style\n * @param {Object} properties\n */\n applyCustomStyle(style, properties) {\n let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));\n let self = this;\n style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n let css = rule['cssText'] = rule['parsedCssText'];\n if (rule.propertyInfo && rule.propertyInfo.cssText) {\n // remove property assignments\n // so next function isn't confused\n // NOTE: we have 3 categories of css:\n // (1) normal properties,\n // (2) custom property assignments (--foo: red;),\n // (3) custom property usage: border: var(--foo); @apply(--foo);\n // In elements, 1 and 3 are separated for efficiency; here they\n // are not and this makes this case unique.\n css = removeCustomPropAssignment(/** @type {string} */(css));\n // replace with reified properties, scenario is same as mixin\n rule['cssText'] = self.valueForProperties(css, properties);\n }\n });\n }\n}\n\n/**\n * @param {number} n\n * @param {Array<number>} bits\n */\nfunction addToBitMask(n, bits) {\n let o = parseInt(n / 32, 10);\n let v = 1 << (n % 32);\n bits[o] = (bits[o] || 0) | v;\n}\n\nexport default new StyleProperties();","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {applyStylePlaceHolder} from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/** @type {Object<string, !Node>} */\nlet placeholderMap = {};\n\n/**\n * @const {CustomElementRegistry}\n */\nconst ce = window['customElements'];\nif (ce && !nativeShadow) {\n /**\n * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}\n */\n const origDefine = ce['define'];\n /**\n * @param {string} name\n * @param {function(new:HTMLElement)} clazz\n * @param {{extends: string}=} options\n */\n const wrappedDefine = (name, clazz, options) => {\n placeholderMap[name] = applyStylePlaceHolder(name);\n origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);\n };\n ce['define'] = wrappedDefine;\n}\n\nexport default placeholderMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nexport default class StyleCache {\n constructor(typeMax = 100) {\n // map element name -> [{properties, styleElement, scopeSelector}]\n this.cache = {};\n this.typeMax = typeMax;\n }\n\n _validate(cacheEntry, properties, ownPropertyNames) {\n for (let idx = 0; idx < ownPropertyNames.length; idx++) {\n let pn = ownPropertyNames[idx];\n if (cacheEntry.properties[pn] !== properties[pn]) {\n return false;\n }\n }\n return true;\n }\n\n store(tagname, properties, styleElement, scopeSelector) {\n let list = this.cache[tagname] || [];\n list.push({properties, styleElement, scopeSelector});\n if (list.length > this.typeMax) {\n list.shift();\n }\n this.cache[tagname] = list;\n }\n\n fetch(tagname, properties, ownPropertyNames) {\n let list = this.cache[tagname];\n if (!list) {\n return;\n }\n // reverse list for most-recent lookups\n for (let idx = list.length - 1; idx >= 0; idx--) {\n let entry = list[idx];\n if (this._validate(entry, properties, ownPropertyNames)) {\n return entry;\n }\n }\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport {getIsExtends} from './style-util.js';\n\nexport let flush = function() {};\n\n/**\n * @param {HTMLElement} element\n * @return {!Array<string>}\n */\nfunction getClasses(element) {\n let classes = [];\n if (element.classList) {\n classes = Array.from(element.classList);\n } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {\n classes = element.getAttribute('class').split(/\\s+/);\n }\n return classes;\n}\n\n/**\n * @param {HTMLElement} element\n * @return {string}\n */\nfunction getCurrentScope(element) {\n let classes = getClasses(element);\n let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);\n if (idx > -1) {\n return classes[idx + 1];\n }\n return '';\n}\n\n/**\n * @param {Array<MutationRecord|null>|null} mxns\n */\nfunction handler(mxns) {\n for (let x=0; x < mxns.length; x++) {\n let mxn = mxns[x];\n if (mxn.target === document.documentElement ||\n mxn.target === document.head) {\n continue;\n }\n for (let i=0; i < mxn.addedNodes.length; i++) {\n let n = mxn.addedNodes[i];\n if (n.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign\n let root = n.getRootNode();\n let currentScope = getCurrentScope(n);\n // node was scoped, but now is in document\n if (currentScope && root === n.ownerDocument) {\n StyleTransformer.dom(n, currentScope, true);\n } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let newScope;\n let host = /** @type {ShadowRoot} */(root).host;\n // element may no longer be in a shadowroot\n if (!host) {\n continue;\n }\n newScope = getIsExtends(host).is;\n if (currentScope === newScope) {\n // make sure all the subtree elements are scoped correctly\n let unscoped = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(\n n, `:not(.${StyleTransformer.SCOPE_NAME})`);\n for (let j = 0; j < unscoped.length; j++) {\n StyleTransformer.element(unscoped[j], currentScope);\n }\n continue;\n }\n if (currentScope) {\n StyleTransformer.dom(n, currentScope, true);\n }\n StyleTransformer.dom(n, newScope);\n }\n }\n }\n}\n\nif (!nativeShadow) {\n let observer = new MutationObserver(handler);\n let start = (node) => {\n observer.observe(node, {childList: true, subtree: true});\n }\n let nativeCustomElements = (window['customElements'] &&\n !window['customElements']['polyfillWrapFlushCallback']);\n // need to start immediately with native custom elements\n // TODO(dfreedm): with polyfilled HTMLImports and native custom elements\n // excessive mutations may be observed; this can be optimized via cooperation\n // with the HTMLImports polyfill.\n if (nativeCustomElements) {\n start(document);\n } else {\n let delayedStart = () => {\n start(document.body);\n }\n // use polyfill timing if it's available\n if (window['HTMLImports']) {\n window['HTMLImports']['whenReady'](delayedStart);\n // otherwise push beyond native imports being ready\n // which requires RAF + readystate interactive.\n } else {\n requestAnimationFrame(function() {\n if (document.readyState === 'loading') {\n let listener = function() {\n delayedStart();\n document.removeEventListener('readystatechange', listener);\n }\n document.addEventListener('readystatechange', listener);\n } else {\n delayedStart();\n }\n });\n }\n }\n\n flush = function() {\n handler(observer.takeRecords());\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {Promise<void>} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {parse, StyleNode} from './css-parse.js';\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport StyleProperties from './style-properties.js';\nimport placeholderMap from './style-placeholder.js';\nimport StyleInfo from './style-info.js';\nimport StyleCache from './style-cache.js';\nimport {flush as watcherFlush} from './document-watcher.js';\nimport templateMap from './template-map.js';\nimport * as ApplyShimUtils from './apply-shim-utils.js';\nimport documentWait from './document-wait.js';\nimport {updateNativeProperties, detectMixin} from './common-utils.js';\nimport {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars\n\n/**\n * @const {StyleCache}\n */\nconst styleCache = new StyleCache();\n\nexport default class ScopingShim {\n constructor() {\n this._scopeCounter = {};\n this._documentOwner = document.documentElement;\n let ast = new StyleNode();\n ast['rules'] = [];\n this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));\n this._elementsHaveApplied = false;\n this._applyShim = null;\n /** @type {?CustomStyleInterfaceInterface} */\n this._customStyleInterface = null;\n documentWait(() => {\n this._ensure();\n });\n }\n flush() {\n watcherFlush();\n }\n _generateScopeSelector(name) {\n let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;\n return `${name}-${id}`;\n }\n getStyleAst(style) {\n return StyleUtil.rulesForStyle(style);\n }\n styleAstToString(ast) {\n return StyleUtil.toCssText(ast);\n }\n _gatherStyles(template) {\n return StyleUtil.gatherStyleText(template.content);\n }\n _getCssBuild(template) {\n let style = template.content.querySelector('style');\n if (!style) {\n return '';\n }\n return style.getAttribute('css-build') || '';\n }\n /**\n * Prepare the styling and template for the given element type\n *\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplate(template, elementName, typeExtension) {\n if (template._prepared) {\n return;\n }\n template._prepared = true;\n template.name = elementName;\n template.extends = typeExtension;\n templateMap[elementName] = template;\n let cssBuild = this._getCssBuild(template);\n let cssText = this._gatherStyles(template);\n let info = {\n is: elementName,\n extends: typeExtension,\n __cssBuild: cssBuild,\n };\n if (!nativeShadow) {\n StyleTransformer.dom(template.content, elementName);\n }\n // check if the styling has mixin definitions or uses\n this._ensure();\n let hasMixins = detectMixin(cssText)\n let ast = parse(cssText);\n // only run the applyshim transforms if there is a mixin involved\n if (hasMixins && nativeCssVariables && this._applyShim) {\n this._applyShim['transformRules'](ast, elementName);\n }\n template['_styleAst'] = ast;\n template._cssBuild = cssBuild;\n\n let ownPropertyNames = [];\n if (!nativeCssVariables) {\n ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);\n }\n if (!ownPropertyNames.length || nativeCssVariables) {\n let root = nativeShadow ? template.content : null;\n let placeholder = placeholderMap[elementName];\n let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);\n template._style = style;\n }\n template._ownPropertyNames = ownPropertyNames;\n }\n _generateStaticStyle(info, rules, shadowroot, placeholder) {\n let cssText = StyleTransformer.elementStyles(info, rules);\n if (cssText.length) {\n return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);\n }\n }\n _prepareHost(host) {\n let {is, typeExtension} = StyleUtil.getIsExtends(host);\n let placeholder = placeholderMap[is];\n let template = templateMap[is];\n let ast;\n let ownStylePropertyNames;\n let cssBuild;\n if (template) {\n ast = template['_styleAst'];\n ownStylePropertyNames = template._ownPropertyNames;\n cssBuild = template._cssBuild;\n }\n return StyleInfo.set(host,\n new StyleInfo(\n ast,\n placeholder,\n ownStylePropertyNames,\n is,\n typeExtension,\n cssBuild\n )\n );\n }\n _ensureApplyShim() {\n if (this._applyShim) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {\n this._applyShim = window.ShadyCSS.ApplyShim;\n this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n }\n _ensureCustomStyleInterface() {\n if (this._customStyleInterface) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {\n this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);\n /** @type {function(!HTMLStyleElement)} */\n this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};\n this._customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {\n this.flushCustomStyles();\n }\n })\n };\n }\n }\n _ensure() {\n this._ensureApplyShim();\n this._ensureCustomStyleInterface();\n }\n /**\n * Flush and apply custom styles to document\n */\n flushCustomStyles() {\n this._ensure();\n if (!this._customStyleInterface) {\n return;\n }\n let customStyles = this._customStyleInterface['processStyles']();\n // early return if custom-styles don't need validation\n if (!this._customStyleInterface['enqueued']) {\n return;\n }\n if (!nativeCssVariables) {\n this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);\n this._applyCustomStyles(customStyles);\n } else {\n this._revalidateCustomStyleApplyShim(customStyles);\n }\n this._customStyleInterface['enqueued'] = false;\n // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree\n if (this._elementsHaveApplied && !nativeCssVariables) {\n this.styleDocument();\n }\n }\n /**\n * Apply styles for the given element\n *\n * @param {!HTMLElement} host\n * @param {Object=} overrideProps\n */\n styleElement(host, overrideProps) {\n let {is} = StyleUtil.getIsExtends(host);\n let styleInfo = StyleInfo.get(host);\n if (!styleInfo) {\n styleInfo = this._prepareHost(host);\n }\n // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called\n if (!this._isRootOwner(host)) {\n this._elementsHaveApplied = true;\n }\n if (overrideProps) {\n styleInfo.overrideStyleProperties =\n styleInfo.overrideStyleProperties || {};\n Object.assign(styleInfo.overrideStyleProperties, overrideProps);\n }\n if (!nativeCssVariables) {\n this._updateProperties(host, styleInfo);\n if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {\n this._applyStyleProperties(host, styleInfo);\n }\n } else {\n if (styleInfo.overrideStyleProperties) {\n updateNativeProperties(host, styleInfo.overrideStyleProperties);\n }\n let template = templateMap[is];\n // bail early if there is no shadowroot for this element\n if (!template && !this._isRootOwner(host)) {\n return;\n }\n if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {\n // update template\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this._ensure();\n this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);\n template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update instance if native shadowdom\n if (nativeShadow) {\n let root = host.shadowRoot;\n if (root) {\n let style = root.querySelector('style');\n style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n }\n }\n styleInfo.styleRules = template['_styleAst'];\n }\n }\n }\n _styleOwnerForNode(node) {\n let root = node.getRootNode();\n let host = root.host;\n if (host) {\n if (StyleInfo.get(host)) {\n return host;\n } else {\n return this._styleOwnerForNode(host);\n }\n }\n return this._documentOwner;\n }\n _isRootOwner(node) {\n return (node === this._documentOwner);\n }\n _applyStyleProperties(host, styleInfo) {\n let is = StyleUtil.getIsExtends(host).is;\n let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);\n let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;\n let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;\n let oldScopeSelector = styleInfo.scopeSelector;\n // only generate new scope if cached style is not found\n styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);\n let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);\n if (!nativeShadow) {\n StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);\n }\n if (!cacheEntry) {\n styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);\n }\n return style;\n }\n _updateProperties(host, styleInfo) {\n let owner = this._styleOwnerForNode(host);\n let ownerStyleInfo = StyleInfo.get(owner);\n let ownerProperties = ownerStyleInfo.styleProperties;\n let props = Object.create(ownerProperties || null);\n let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);\n let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);\n let propertiesMatchingHost = propertyData.properties\n Object.assign(\n props,\n hostAndRootProps.hostProps,\n propertiesMatchingHost,\n hostAndRootProps.rootProps\n );\n this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);\n StyleProperties.reify(props);\n styleInfo.styleProperties = props;\n }\n _mixinOverrideStyles(props, overrides) {\n for (let p in overrides) {\n let v = overrides[p];\n // skip override props if they are not truthy or 0\n // in order to fall back to inherited values\n if (v || v === 0) {\n props[p] = v;\n }\n }\n }\n /**\n * Update styles of the whole document\n *\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.styleSubtree(this._documentOwner, properties);\n }\n /**\n * Update styles of a subtree\n *\n * @param {!HTMLElement} host\n * @param {Object=} properties\n */\n styleSubtree(host, properties) {\n let root = host.shadowRoot;\n if (root || this._isRootOwner(host)) {\n this.styleElement(host, properties);\n }\n // process the shadowdom children of `host`\n let shadowChildren = root && (root.children || root.childNodes);\n if (shadowChildren) {\n for (let i = 0; i < shadowChildren.length; i++) {\n let c = /** @type {!HTMLElement} */(shadowChildren[i]);\n this.styleSubtree(c);\n }\n } else {\n // process the lightdom children of `host`\n let children = host.children || host.childNodes;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n let c = /** @type {!HTMLElement} */(children[i]);\n this.styleSubtree(c);\n }\n }\n }\n }\n /* Custom Style operations */\n _revalidateCustomStyleApplyShim(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n this._revalidateApplyShim(s);\n }\n }\n }\n _applyCustomStyles(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);\n }\n }\n }\n transformCustomStyleForDocument(style) {\n let ast = StyleUtil.rulesForStyle(style);\n StyleUtil.forEachRule(ast, (rule) => {\n if (nativeShadow) {\n StyleTransformer.normalizeRootSelector(rule);\n } else {\n StyleTransformer.documentRule(rule);\n }\n if (nativeCssVariables) {\n this._ensure();\n this._applyShim && this._applyShim['transformRule'](rule);\n }\n });\n if (nativeCssVariables) {\n style.textContent = StyleUtil.toCssText(ast);\n } else {\n this._documentOwnerStyleInfo.styleRules['rules'].push(ast);\n }\n }\n _revalidateApplyShim(style) {\n if (nativeCssVariables && this._applyShim) {\n let ast = StyleUtil.rulesForStyle(style);\n this._ensure();\n this._applyShim['transformRules'](ast);\n style.textContent = StyleUtil.toCssText(ast);\n }\n }\n getComputedStyleValue(element, property) {\n let value;\n if (!nativeCssVariables) {\n // element is either a style host, or an ancestor of a style host\n let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));\n value = styleInfo.styleProperties[property];\n }\n // fall back to the property value from the computed styling\n value = value || window.getComputedStyle(element).getPropertyValue(property);\n // trim whitespace that can come after the `:` in css\n // example: padding: 2px -> \" 2px\"\n return value ? value.trim() : '';\n }\n // given an element and a classString, replaces\n // the element's class with the provided classString and adds\n // any necessary ShadyCSS static and property based scoping selectors\n setElementClass(element, classString) {\n let root = element.getRootNode();\n let classes = classString ? classString.split(/\\s/) : [];\n let scopeName = root.host && root.host.localName;\n // If no scope, try to discover scope name from existing class.\n // This can occur if, for example, a template stamped element that\n // has been scoped is manipulated when not in a root.\n if (!scopeName) {\n var classAttr = element.getAttribute('class');\n if (classAttr) {\n let k$ = classAttr.split(/\\s/);\n for (let i=0; i < k$.length; i++) {\n if (k$[i] === StyleTransformer.SCOPE_NAME) {\n scopeName = k$[i+1];\n break;\n }\n }\n }\n }\n if (scopeName) {\n classes.push(StyleTransformer.SCOPE_NAME, scopeName);\n }\n if (!nativeCssVariables) {\n let styleInfo = StyleInfo.get(element);\n if (styleInfo && styleInfo.scopeSelector) {\n classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);\n }\n }\n StyleUtil.setElementClassRaw(element, classes.join(' '));\n }\n _styleInfoForNode(node) {\n return StyleInfo.get(node);\n }\n}\n\n/* exports */\nScopingShim.prototype['flush'] = ScopingShim.prototype.flush;\nScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;\nScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;\nScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;\nScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;\nScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;\nScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;\nScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;\nScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;\nScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;\nScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;\nScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;\nObject.defineProperties(ScopingShim.prototype, {\n 'nativeShadow': {\n get() {\n return nativeShadow;\n }\n },\n 'nativeCss': {\n get() {\n return nativeCssVariables;\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ScopingShim from '../src/scoping-shim.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ScopingShim} */\nconst scopingShim = new ScopingShim();\n\nlet ApplyShim, CustomStyleInterface;\n\nif (window['ShadyCSS']) {\n ApplyShim = window['ShadyCSS']['ApplyShim'];\n CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];\n}\n\nwindow.ShadyCSS = {\n ScopingShim: scopingShim,\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplate(template, elementName, elementExtends)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n scopingShim.flushCustomStyles();\n scopingShim.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleDocument(properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return scopingShim.getComputedStyleValue(element, property);\n },\n\n nativeCss: nativeCssVariables,\n\n nativeShadow: nativeShadow\n};\n\nif (ApplyShim) {\n window.ShadyCSS.ApplyShim = ApplyShim;\n}\n\nif (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n}","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\nlet customElements = window['customElements'];\nlet HTMLImports = window['HTMLImports'];\nlet Template = window['HTMLTemplateElement'];\n\n// global for (1) existence means `WebComponentsReady` will file,\n// (2) WebComponents.ready == true means event has fired.\nwindow.WebComponents = window.WebComponents || {};\n\nif (customElements && customElements['polyfillWrapFlushCallback']) {\n // Here we ensure that the public `HTMLImports.whenReady`\n // always comes *after* custom elements have upgraded.\n let flushCallback;\n let runAndClearCallback = function runAndClearCallback() {\n if (flushCallback) {\n // make sure to run the HTMLTemplateElement polyfill before custom elements upgrade\n if (Template.bootstrap) {\n Template.bootstrap(window.document);\n }\n let cb = flushCallback;\n flushCallback = null;\n cb();\n return true;\n }\n }\n let origWhenReady = HTMLImports['whenReady'];\n customElements['polyfillWrapFlushCallback'](function(cb) {\n flushCallback = cb;\n origWhenReady(runAndClearCallback);\n });\n\n HTMLImports['whenReady'] = function(cb) {\n origWhenReady(function() {\n // custom element code may add dynamic imports\n // to match processing of native custom elements before\n // domContentLoaded, we wait for these imports to resolve first.\n if (runAndClearCallback()) {\n HTMLImports['whenReady'](cb);\n } else {\n cb();\n }\n });\n }\n\n}\n\nHTMLImports['whenReady'](function() {\n requestAnimationFrame(function() {\n window.WebComponents.ready = true;\n document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));\n });\n});","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n// It's desireable to provide a default stylesheet\n// that's convenient for styling unresolved elements, but\n// it's cumbersome to have to include this manually in every page.\n// It would make sense to put inside some HTMLImport but\n// the HTMLImports polyfill does not allow loading of stylesheets\n// that block rendering. Therefore this injection is tolerated here.\n//\n// NOTE: position: relative fixes IE's failure to inherit opacity\n// when a child is not statically positioned.\nlet style = document.createElement('style');\nstyle.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;'\n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden; position: relative;'\n + ' } \\n'\n ;\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js
new file mode 100644
index 00000000000..4c3862150e1
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js
@@ -0,0 +1,181 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){/*
+
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var n,q="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};function ca(){ca=function(){};q.Symbol||(q.Symbol=da)}var da=function(){var a=0;return function(b){return"jscomp_symbol_"+(b||"")+a++}}();
+function ea(){ca();var a=q.Symbol.iterator;a||(a=q.Symbol.iterator=q.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&ba(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return fa(this)}});ea=function(){}}function fa(a){var b=0;return ha(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})}function ha(a){ea();a={next:a};a[q.Symbol.iterator]=function(){return this};return a}function ia(a){ea();var b=a[Symbol.iterator];return b?b.call(a):fa(a)}
+function ja(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}
+(function(a){function b(a,b){if("function"===typeof window.CustomEvent)return new CustomEvent(a,b);var c=document.createEvent("CustomEvent");c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c}function c(a){if(B)return a.ownerDocument!==document?a.ownerDocument:null;var b=a.__importDoc;if(!b&&a.parentNode){b=a.parentNode;if("function"===typeof b.closest)b=b.closest("link[rel=import]");else for(;!g(b)&&(b=b.parentNode););a.__importDoc=b}return b}function d(a){var b=m(document,"link[rel=import]:not([import-dependency])"),
+c=b.length;c?p(b,function(b){return h(b,function(){0===--c&&a()})}):a()}function e(a){function b(){"loading"!==document.readyState&&document.body&&(document.removeEventListener("readystatechange",b),a())}document.addEventListener("readystatechange",b);b()}function f(a){e(function(){return d(function(){return a&&a()})})}function h(a,b){if(a.__loaded)b&&b();else if("script"===a.localName&&!a.src||"style"===a.localName&&!a.firstChild)a.__loaded=!0,b&&b();else{var c=function(d){a.removeEventListener(d.type,
+c);a.__loaded=!0;b&&b()};a.addEventListener("load",c);Ca&&"style"===a.localName||a.addEventListener("error",c)}}function g(a){return a.nodeType===Node.ELEMENT_NODE&&"link"===a.localName&&"import"===a.rel}function k(){var a=this;this.a={};this.b=0;this.c=new MutationObserver(function(b){return a.Aa(b)});this.c.observe(document.head,{childList:!0,subtree:!0});this.loadImports(document)}function l(a){p(m(a,"template"),function(a){p(m(a.content,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){var b=document.createElement("script");p(a.attributes,function(a){return b.setAttribute(a.name,a.value)});b.textContent=a.textContent;a.parentNode.replaceChild(b,a)});l(a.content)})}function m(a,b){return a.childNodes.length?a.querySelectorAll(b):T}function p(a,b,c){var d=a?a.length:0,e=c?-1:1;for(c=c?d-1:0;c<d&&0<=c;c+=e)b(a[c],c)}var x=document.createElement("link"),B="import"in x,T=x.querySelectorAll("*"),Da=null;!1==="currentScript"in document&&Object.defineProperty(document,"currentScript",
+{get:function(){return Da||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null)},configurable:!0});var vd=/(url\()([^)]*)(\))/g,wd=/(@import[\s]+(?!url\())([^;]*)(;)/g,xd=/(<link[^>]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,F={ua:function(a,b){a.href&&a.setAttribute("href",F.P(a.getAttribute("href"),b));a.src&&a.setAttribute("src",F.P(a.getAttribute("src"),b));if("style"===a.localName){var c=F.fa(a.textContent,b,vd);a.textContent=F.fa(c,b,wd)}},fa:function(a,b,c){return a.replace(c,
+function(a,c,d,e){a=d.replace(/["']/g,"");b&&(a=F.P(a,b));return c+"'"+a+"'"+e})},P:function(a,b){if(void 0===F.V){F.V=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";F.V="http://a/c%20d"===c.href}catch(Ye){}}if(F.V)return(new URL(a,b)).href;c=F.la;c||(c=document.implementation.createHTMLDocument("temp"),F.la=c,c.Z=c.createElement("base"),c.head.appendChild(c.Z),c.Y=c.createElement("a"));c.Z.href=b;c.Y.href=a;return c.Y.href||a}},zb={async:!0,load:function(a,b,c){if(a)if(a.match(/^data:/)){a=
+a.split(",");var d=a[1];d=-1<a[0].indexOf(";base64")?atob(d):decodeURIComponent(d);b(d)}else{var e=new XMLHttpRequest;e.open("GET",a,zb.async);e.onload=function(){var a=e.responseURL||e.getResponseHeader("Location");a&&0===a.indexOf("/")&&(a=(location.origin||location.protocol+"//"+location.host)+a);var d=e.response||e.responseText;304===e.status||0===e.status||200<=e.status&&300>e.status?b(d,a):c(d)};e.send()}else c("error: href must be specified")}},Ca=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);
+k.prototype.loadImports=function(a){var b=this;a=m(a,"link[rel=import]");p(a,function(a){return b.B(a)})};k.prototype.B=function(a){var b=this,c=a.href;if(void 0!==this.a[c]){var d=this.a[c];d&&d.__loaded&&(a.__import=d,this.i(a))}else this.b++,this.a[c]="pending",zb.load(c,function(a,d){a=b.Ba(a,d||c);b.a[c]=a;b.b--;b.loadImports(a);b.F()},function(){b.a[c]=null;b.b--;b.F()})};k.prototype.Ba=function(a,b){if(!a)return document.createDocumentFragment();Ca&&(a=a.replace(xd,function(a,b,c){return-1===
+a.indexOf("type=")?b+" type=import-disable "+c:a}));var c=document.createElement("template");c.innerHTML=a;if(c.content)a=c.content,l(a);else for(a=document.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);if(c=a.querySelector("base"))b=F.P(c.getAttribute("href"),b),c.removeAttribute("href");c=m(a,'link[rel=import],link[rel=stylesheet][href][type=import-disable],style:not([type]),link[rel=stylesheet][href]:not([type]),script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');
+var d=0;p(c,function(a){h(a);F.ua(a,b);a.setAttribute("import-dependency","");"script"===a.localName&&!a.src&&a.textContent&&(a.setAttribute("src","data:text/javascript;charset=utf-8,"+encodeURIComponent(a.textContent+("\n//# sourceURL="+b+(d?"-"+d:"")+".js\n"))),a.textContent="",d++)});return a};k.prototype.F=function(){var a=this;if(!this.b){this.c.disconnect();this.flatten(document);var b=!1,c=!1,d=function(){c&&b&&(a.loadImports(document),a.b||(a.c.observe(document.head,{childList:!0,subtree:!0}),
+a.ya()))};this.Da(function(){c=!0;d()});this.Ca(function(){b=!0;d()})}};k.prototype.flatten=function(a){var b=this;a=m(a,"link[rel=import]");p(a,function(a){var c=b.a[a.href];(a.__import=c)&&c.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(b.a[a.href]=a,a.readyState="loading",a.__import=a,b.flatten(c),a.appendChild(c))})};k.prototype.Ca=function(a){function b(e){if(e<d){var f=c[e],g=document.createElement("script");f.removeAttribute("import-dependency");p(f.attributes,function(a){return g.setAttribute(a.name,
+a.value)});Da=g;f.parentNode.replaceChild(g,f);h(g,function(){Da=null;b(e+1)})}else a()}var c=m(document,"script[import-dependency]"),d=c.length;b(0)};k.prototype.Da=function(a){var b=m(document,"style[import-dependency],link[rel=stylesheet][import-dependency]"),d=b.length;if(d){var e=Ca&&!!document.querySelector("link[rel=stylesheet][href][type=import-disable]");p(b,function(b){h(b,function(){b.removeAttribute("import-dependency");0===--d&&a()});if(e&&b.parentNode!==document.head){var f=document.createElement(b.localName);
+f.__appliedElement=b;f.setAttribute("type","import-placeholder");b.parentNode.insertBefore(f,b.nextSibling);for(f=c(b);f&&c(f);)f=c(f);f.parentNode!==document.head&&(f=null);document.head.insertBefore(b,f);b.removeAttribute("type")}})}else a()};k.prototype.ya=function(){var a=this,b=m(document,"link[rel=import]");p(b,function(b){return a.i(b)},!0)};k.prototype.i=function(a){a.__loaded||(a.__loaded=!0,a.import&&(a.import.readyState="complete"),a.dispatchEvent(b(a.import?"load":"error",{bubbles:!1,
+cancelable:!1,detail:void 0})))};k.prototype.Aa=function(a){var b=this;p(a,function(a){return p(a.addedNodes,function(a){a&&a.nodeType===Node.ELEMENT_NODE&&(g(a)?b.B(a):b.loadImports(a))})})};var Ea=null;if(B)x=m(document,"link[rel=import]"),p(x,function(a){a.import&&"loading"===a.import.readyState||(a.__loaded=!0)}),x=function(a){a=a.target;g(a)&&(a.__loaded=!0)},document.addEventListener("load",x,!0),document.addEventListener("error",x,!0);else{var aa=Object.getOwnPropertyDescriptor(Node.prototype,
+"baseURI");Object.defineProperty((!aa||aa.configurable?Node:Element).prototype,"baseURI",{get:function(){var a=g(this)?this:c(this);return a?a.href:aa&&aa.get?aa.get.call(this):(document.querySelector("base")||window.location).href},configurable:!0,enumerable:!0});Object.defineProperty(HTMLLinkElement.prototype,"import",{get:function(){return this.__import||null},configurable:!0,enumerable:!0});e(function(){Ea=new k})}f(function(){return document.dispatchEvent(b("HTMLImportsLoaded",{cancelable:!0,
+bubbles:!0,detail:void 0}))});a.useNative=B;a.whenReady=f;a.importForElement=c;a.loadImports=function(a){Ea&&Ea.loadImports(a)}})(window.HTMLImports=window.HTMLImports||{});/*
+
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+function ka(){this.ea=this.root=null;this.N=!1;this.v=this.J=this.W=this.assignedSlot=this.assignedNodes=this.C=null;this.childNodes=this.nextSibling=this.previousSibling=this.lastChild=this.firstChild=this.parentNode=this.G=void 0;this.ja=this.$=!1}ka.prototype.toJSON=function(){return{}};function r(a){a.T||(a.T=new ka);return a.T}function t(a){return a&&a.T};var u=window.ShadyDOM||{};u.wa=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var la=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");u.o=!!(la&&la.configurable&&la.get);u.ca=u.force||!u.wa;var ma=navigator.userAgent.match("Trident"),na=navigator.userAgent.match("Edge");void 0===u.ha&&(u.ha=u.o&&(ma||na));function v(a){return(a=t(a))&&void 0!==a.firstChild}function w(a){return"ShadyRoot"===a.na}function y(a){a=a.getRootNode();if(w(a))return a}
+var z=Element.prototype,oa=z.matches||z.matchesSelector||z.mozMatchesSelector||z.msMatchesSelector||z.oMatchesSelector||z.webkitMatchesSelector;function pa(a,b){if(a&&b)for(var c=Object.getOwnPropertyNames(b),d=0,e;d<c.length&&(e=c[d]);d++){var f=Object.getOwnPropertyDescriptor(b,e);f&&Object.defineProperty(a,e,f)}}function qa(a,b){for(var c=[],d=1;d<arguments.length;++d)c[d-1]=arguments[d];for(d=0;d<c.length;d++)pa(a,c[d]);return a}function ra(a,b){for(var c in b)a[c]=b[c]}
+var sa=document.createTextNode(""),ta=0,ua=[];(new MutationObserver(function(){for(;ua.length;)try{ua.shift()()}catch(a){throw sa.textContent=ta++,a;}})).observe(sa,{characterData:!0});function va(a){ua.push(a);sa.textContent=ta++}var wa=!!document.contains;function xa(a,b){for(;b;){if(b==a)return!0;b=b.parentNode}return!1};var ya=[],za;function Aa(a){za||(za=!0,va(Ba));ya.push(a)}function Ba(){za=!1;for(var a=!!ya.length;ya.length;)ya.shift()();return a}Ba.list=ya;function Fa(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.M=new Set}function Ga(a){a.a||(a.a=!0,va(function(){Ha(a)}))}function Ha(a){if(a.a){a.a=!1;var b=a.takeRecords();b.length&&a.M.forEach(function(a){a(b)})}}Fa.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
+function Ia(a,b){var c=r(a);c.C||(c.C=new Fa);c.C.M.add(b);var d=c.C;return{ma:b,pa:d,oa:a,takeRecords:function(){return d.takeRecords()}}}function Ja(a){var b=a&&a.pa;b&&(b.M.delete(a.ma),b.M.size||(r(a.oa).C=null))}
+function Ka(a,b){var c=b.getRootNode();return a.map(function(a){var b=c===a.target.getRootNode();if(b&&a.addedNodes){if(b=Array.from(a.addedNodes).filter(function(a){return c===a.getRootNode()}),b.length)return a=Object.create(a),Object.defineProperty(a,"addedNodes",{value:b,configurable:!0}),a}else if(b)return a}).filter(function(a){return a})};var A={},La=Element.prototype.insertBefore,Ma=Element.prototype.replaceChild,Na=Element.prototype.removeChild,Oa=Element.prototype.setAttribute,Pa=Element.prototype.removeAttribute,Qa=Element.prototype.cloneNode,Ra=Document.prototype.importNode,Sa=Element.prototype.addEventListener,Ta=Element.prototype.removeEventListener,Ua=Window.prototype.addEventListener,Va=Window.prototype.removeEventListener,Wa=Element.prototype.dispatchEvent,Xa=Node.prototype.contains||HTMLElement.prototype.contains,Ya=Document.prototype.getElementById,
+Za=Element.prototype.querySelector,$a=DocumentFragment.prototype.querySelector,ab=Document.prototype.querySelector,bb=Element.prototype.querySelectorAll,cb=DocumentFragment.prototype.querySelectorAll,db=Document.prototype.querySelectorAll;A.appendChild=Element.prototype.appendChild;A.insertBefore=La;A.replaceChild=Ma;A.removeChild=Na;A.setAttribute=Oa;A.removeAttribute=Pa;A.cloneNode=Qa;A.importNode=Ra;A.addEventListener=Sa;A.removeEventListener=Ta;A.Ia=Ua;A.Ja=Va;A.dispatchEvent=Wa;A.contains=Xa;
+A.getElementById=Ya;A.Ra=Za;A.Ua=$a;A.Pa=ab;A.querySelector=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return Za.call(this,a);case Node.DOCUMENT_NODE:return ab.call(this,a);default:return $a.call(this,a)}};A.Sa=bb;A.Va=cb;A.Qa=db;A.querySelectorAll=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return bb.call(this,a);case Node.DOCUMENT_NODE:return db.call(this,a);default:return cb.call(this,a)}};var eb=/[&\u00A0"]/g,fb=/[&\u00A0<>]/g;function gb(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function hb(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var ib=hb("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),jb=hb("style script xmp iframe noembed noframes plaintext noscript".split(" "));
+function kb(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,h;e<f&&(h=d[e]);e++){a:{var g=h;var k=a;var l=b;switch(g.nodeType){case Node.ELEMENT_NODE:for(var m=g.localName,p="<"+m,x=g.attributes,B=0;k=x[B];B++)p+=" "+k.name+'="'+k.value.replace(eb,gb)+'"';p+=">";g=ib[m]?p:p+kb(g,l)+"</"+m+">";break a;case Node.TEXT_NODE:g=g.data;g=k&&jb[k.localName]?g:g.replace(fb,gb);break a;case Node.COMMENT_NODE:g="\x3c!--"+g.data+"--\x3e";break a;default:throw window.console.error(g),
+Error("not implemented");}}c+=g}return c};var C={},D=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),E=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1);function lb(a){var b=[];D.currentNode=a;for(a=D.firstChild();a;)b.push(a),a=D.nextSibling();return b}C.parentNode=function(a){D.currentNode=a;return D.parentNode()};C.firstChild=function(a){D.currentNode=a;return D.firstChild()};C.lastChild=function(a){D.currentNode=a;return D.lastChild()};C.previousSibling=function(a){D.currentNode=a;return D.previousSibling()};
+C.nextSibling=function(a){D.currentNode=a;return D.nextSibling()};C.childNodes=lb;C.parentElement=function(a){E.currentNode=a;return E.parentNode()};C.firstElementChild=function(a){E.currentNode=a;return E.firstChild()};C.lastElementChild=function(a){E.currentNode=a;return E.lastChild()};C.previousElementSibling=function(a){E.currentNode=a;return E.previousSibling()};C.nextElementSibling=function(a){E.currentNode=a;return E.nextSibling()};
+C.children=function(a){var b=[];E.currentNode=a;for(a=E.firstChild();a;)b.push(a),a=E.nextSibling();return b};C.innerHTML=function(a){return kb(a,function(a){return lb(a)})};C.textContent=function(a){switch(a.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:a=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);for(var b="",c;c=a.nextNode();)b+=c.nodeValue;return b;default:return a.nodeValue}};var G={},mb=u.o,nb=[Node.prototype,Element.prototype,HTMLElement.prototype];function H(a){var b;a:{for(b=0;b<nb.length;b++){var c=nb[b];if(c.hasOwnProperty(a)){b=c;break a}}b=void 0}if(!b)throw Error("Could not find descriptor for "+a);return Object.getOwnPropertyDescriptor(b,a)}
+var I=mb?{parentNode:H("parentNode"),firstChild:H("firstChild"),lastChild:H("lastChild"),previousSibling:H("previousSibling"),nextSibling:H("nextSibling"),childNodes:H("childNodes"),parentElement:H("parentElement"),previousElementSibling:H("previousElementSibling"),nextElementSibling:H("nextElementSibling"),innerHTML:H("innerHTML"),textContent:H("textContent"),firstElementChild:H("firstElementChild"),lastElementChild:H("lastElementChild"),children:H("children")}:{},ob=mb?{firstElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,
+"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"children")}:{},pb=mb?{firstElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(Document.prototype,"children")}:{};G.da=I;G.Ta=ob;G.Oa=pb;G.parentNode=function(a){return I.parentNode.get.call(a)};
+G.firstChild=function(a){return I.firstChild.get.call(a)};G.lastChild=function(a){return I.lastChild.get.call(a)};G.previousSibling=function(a){return I.previousSibling.get.call(a)};G.nextSibling=function(a){return I.nextSibling.get.call(a)};G.childNodes=function(a){return Array.prototype.slice.call(I.childNodes.get.call(a))};G.parentElement=function(a){return I.parentElement.get.call(a)};G.previousElementSibling=function(a){return I.previousElementSibling.get.call(a)};G.nextElementSibling=function(a){return I.nextElementSibling.get.call(a)};
+G.innerHTML=function(a){return I.innerHTML.get.call(a)};G.textContent=function(a){return I.textContent.get.call(a)};G.children=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:a=ob.children.get.call(a);break;case Node.DOCUMENT_NODE:a=pb.children.get.call(a);break;default:a=I.children.get.call(a)}return Array.prototype.slice.call(a)};
+G.firstElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return ob.firstElementChild.get.call(a);case Node.DOCUMENT_NODE:return pb.firstElementChild.get.call(a);default:return I.firstElementChild.get.call(a)}};G.lastElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return ob.lastElementChild.get.call(a);case Node.DOCUMENT_NODE:return pb.lastElementChild.get.call(a);default:return I.lastElementChild.get.call(a)}};var J=u.ha?G:C;function qb(a){for(;a.firstChild;)a.removeChild(a.firstChild)}
+var rb=u.o,sb=document.implementation.createHTMLDocument("inert"),tb=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),ub=tb&&tb.get,vb=Object.getOwnPropertyDescriptor(Document.prototype,"activeElement"),wb={parentElement:{get:function(){var a=t(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:J.parentElement(this)},configurable:!0},parentNode:{get:function(){var a=t(this);a=a&&a.parentNode;return void 0!==a?a:J.parentNode(this)},configurable:!0},
+nextSibling:{get:function(){var a=t(this);a=a&&a.nextSibling;return void 0!==a?a:J.nextSibling(this)},configurable:!0},previousSibling:{get:function(){var a=t(this);a=a&&a.previousSibling;return void 0!==a?a:J.previousSibling(this)},configurable:!0},nextElementSibling:{get:function(){var a=t(this);if(a&&void 0!==a.nextSibling){for(a=this.nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return J.nextElementSibling(this)},configurable:!0},previousElementSibling:{get:function(){var a=
+t(this);if(a&&void 0!==a.previousSibling){for(a=this.previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return J.previousElementSibling(this)},configurable:!0}},xb={className:{get:function(){return this.getAttribute("class")||""},set:function(a){this.setAttribute("class",a)},configurable:!0}},yb={childNodes:{get:function(){if(v(this)){var a=t(this);if(!a.childNodes){a.childNodes=[];for(var b=this.firstChild;b;b=b.nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=
+J.childNodes(this);c.item=function(a){return c[a]};return c},configurable:!0},childElementCount:{get:function(){return this.children.length},configurable:!0},firstChild:{get:function(){var a=t(this);a=a&&a.firstChild;return void 0!==a?a:J.firstChild(this)},configurable:!0},lastChild:{get:function(){var a=t(this);a=a&&a.lastChild;return void 0!==a?a:J.lastChild(this)},configurable:!0},textContent:{get:function(){if(v(this)){for(var a=[],b=0,c=this.childNodes,d;d=c[b];b++)d.nodeType!==Node.COMMENT_NODE&&
+a.push(d.textContent);return a.join("")}return J.textContent(this)},set:function(a){if("undefined"===typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!v(this)&&rb){var b=this.firstChild;(b!=this.lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&qb(this);G.da.textContent.set.call(this,a)}else qb(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.appendChild(document.createTextNode(a));break;default:this.nodeValue=a}},configurable:!0},firstElementChild:{get:function(){var a=
+t(this);if(a&&void 0!==a.firstChild){for(a=this.firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return J.firstElementChild(this)},configurable:!0},lastElementChild:{get:function(){var a=t(this);if(a&&void 0!==a.lastChild){for(a=this.lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return J.lastElementChild(this)},configurable:!0},children:{get:function(){var a=v(this)?Array.prototype.filter.call(this.childNodes,function(a){return a.nodeType===Node.ELEMENT_NODE}):
+J.children(this);a.item=function(b){return a[b]};return a},configurable:!0},innerHTML:{get:function(){return v(this)?kb("template"===this.localName?this.content:this):J.innerHTML(this)},set:function(a){var b="template"===this.localName?this.content:this;qb(b);var c=this.localName;c&&"template"!==c||(c="div");c=sb.createElement(c);for(rb?G.da.innerHTML.set.call(c,a):c.innerHTML=a;c.firstChild;)b.appendChild(c.firstChild)},configurable:!0}},Ab={shadowRoot:{get:function(){var a=t(this);return a&&a.ea||
+null},configurable:!0}},Bb={activeElement:{get:function(){var a=vb&&vb.get?vb.get.call(document):u.o?void 0:document.activeElement;if(a&&a.nodeType){var b=!!w(this);if(this===document||b&&this.host!==a&&A.contains.call(this.host,a)){for(b=y(a);b&&b!==this;)a=b.host,b=y(a);a=this===document?b?null:a:b===this?a:null}else a=null}else a=null;return a},set:function(){},configurable:!0}};
+function K(a,b,c){for(var d in b){var e=Object.getOwnPropertyDescriptor(a,d);e&&e.configurable||!e&&c?Object.defineProperty(a,d,b[d]):c&&console.warn("Could not define",d,"on",a)}}function L(a){K(a,wb);K(a,xb);K(a,yb);K(a,Bb)}
+function Cb(){var a=Db.prototype;a.__proto__=DocumentFragment.prototype;K(a,wb,!0);K(a,yb,!0);K(a,Bb,!0);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
+configurable:!0})})}var Eb=u.o?function(){}:function(a){var b=r(a);b.$||(b.$=!0,K(a,wb,!0),K(a,xb,!0))},Fb=u.o?function(){}:function(a){r(a).ja||(K(a,yb,!0),K(a,Ab,!0))};var Gb=J.childNodes;function Hb(a,b,c){Eb(a);c=c||null;var d=r(a),e=r(b),f=c?r(c):null;d.previousSibling=c?f.previousSibling:b.lastChild;if(f=t(d.previousSibling))f.nextSibling=a;if(f=t(d.nextSibling=c))f.previousSibling=a;d.parentNode=b;c?c===e.firstChild&&(e.firstChild=a):(e.lastChild=a,e.firstChild||(e.firstChild=a));e.childNodes=null}
+function Ib(a,b){var c=r(a);if(void 0===c.firstChild)for(b=b||Gb(a),c.firstChild=b[0]||null,c.lastChild=b[b.length-1]||null,Fb(a),c=0;c<b.length;c++){var d=b[c],e=r(d);e.parentNode=a;e.nextSibling=b[c+1]||null;e.previousSibling=b[c-1]||null;Eb(d)}};var Jb=J.parentNode;
+function Kb(a,b,c){if(b===a)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(c){var d=t(c);d=d&&d.parentNode;if(void 0!==d&&d!==a||void 0===d&&Jb(c)!==a)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(c===b)return b;b.parentNode&&Lb(b.parentNode,b);var e,f;if(!b.__noInsertionPoint){if(f=e=y(a)){var h;"slot"===b.localName?h=[b]:b.querySelectorAll&&
+(h=b.querySelectorAll("slot"));f=h&&h.length?h:void 0}f&&(h=e,d=f,h.m=h.m||[],h.f=h.f||[],h.g=h.g||{},h.m.push.apply(h.m,[].concat(d instanceof Array?d:ja(ia(d)))))}("slot"===a.localName||f)&&(e=e||y(a))&&M(e);if(v(a)){e=c;Fb(a);f=r(a);void 0!==f.firstChild&&(f.childNodes=null);if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE){f=b.childNodes;for(h=0;h<f.length;h++)Hb(f[h],a,e);e=r(b);f=void 0!==e.firstChild?null:void 0;e.firstChild=e.lastChild=f;e.childNodes=f}else Hb(b,a,e);e=t(a);if(Mb(a)){M(e.root);
+var g=!0}else e.root&&(g=!0)}g||(g=w(a)?a.host:a,c?(c=Nb(c),A.insertBefore.call(g,b,c)):A.appendChild.call(g,b));Ob(a,b);return b}
+function Lb(a,b){if(b.parentNode!==a)throw Error("The node to be removed is not a child of this node: "+b);var c=y(b),d=t(a);if(v(a)){var e=r(b),f=r(a);b===f.firstChild&&(f.firstChild=e.nextSibling);b===f.lastChild&&(f.lastChild=e.previousSibling);var h=e.previousSibling,g=e.nextSibling;h&&(r(h).nextSibling=g);g&&(r(g).previousSibling=h);e.parentNode=e.previousSibling=e.nextSibling=void 0;void 0!==f.childNodes&&(f.childNodes=null);if(Mb(a)){M(d.root);var k=!0}}Pb(b);if(c){(e=a&&"slot"===a.localName)&&
+(k=!0);if(c.f){Qb(c);f=c.g;for(T in f)for(h=f[T],g=0;g<h.length;g++){var l=h[g];if(xa(b,l)){h.splice(g,1);var m=c.f.indexOf(l);0<=m&&c.f.splice(m,1);g--;m=t(l);if(l=m.v)for(var p=0;p<l.length;p++){var x=l[p],B=Rb(x);B&&A.removeChild.call(B,x)}m.v=[];m.assignedNodes=[];m=!0}}var T=m}else T=void 0;(T||e)&&M(c)}k||(k=w(a)?a.host:a,(!d.root&&"slot"!==b.localName||k===Jb(b))&&A.removeChild.call(k,b));Ob(a,null,b);return b}
+function Pb(a){var b=t(a);if(b&&void 0!==b.G){b=a.childNodes;for(var c=0,d=b.length,e;c<d&&(e=b[c]);c++)Pb(e)}if(a=t(a))a.G=void 0}function Nb(a){var b=a;a&&"slot"===a.localName&&(b=(b=(b=t(a))&&b.v)&&b.length?b[0]:Nb(a.nextSibling));return b}function Mb(a){return(a=(a=t(a))&&a.root)&&Sb(a)}
+function Tb(a,b){if("slot"===b)a=a.parentNode,Mb(a)&&M(t(a).root);else if("slot"===a.localName&&"name"===b&&(b=y(a))){if(b.f){var c=a.ka,d=Ub(a);if(d!==c){c=b.g[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.g[d]||(b.g[d]=[]);c.push(a);1<c.length&&(b.g[d]=Vb(c))}}M(b)}}function Ob(a,b,c){if(a=(a=t(a))&&a.C)b&&a.addedNodes.push(b),c&&a.removedNodes.push(c),Ga(a)}
+function Wb(a){if(a&&a.nodeType){var b=r(a),c=b.G;void 0===c&&(w(a)?(c=a,b.G=c):(c=(c=a.parentNode)?Wb(c):a,A.contains.call(document.documentElement,a)&&(b.G=c)));return c}}function Xb(a,b,c){var d=[];Yb(a.childNodes,b,c,d);return d}function Yb(a,b,c,d){for(var e=0,f=a.length,h;e<f&&(h=a[e]);e++){var g;if(g=h.nodeType===Node.ELEMENT_NODE){g=h;var k=b,l=c,m=d,p=k(g);p&&m.push(g);l&&l(p)?g=p:(Yb(g.childNodes,k,l,m),g=void 0)}if(g)break}}var Zb=null;
+function $b(a,b,c){Zb||(Zb=window.ShadyCSS&&window.ShadyCSS.ScopingShim);Zb&&"class"===b?Zb.setElementClass(a,c):(A.setAttribute.call(a,b,c),Tb(a,b))}function ac(a,b){if(a.ownerDocument!==document)return A.importNode.call(document,a,b);var c=A.importNode.call(document,a,!1);if(b){a=a.childNodes;b=0;for(var d;b<a.length;b++)d=ac(a[b],!0),c.appendChild(d)}return c};var bc="__eventWrappers"+Date.now(),cc={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,
+dragstart:!0,drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0};function dc(a,b){var c=[],d=a;for(a=a===window?window:a.getRootNode();d;)c.push(d),d=d.assignedSlot?d.assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d.host:d.parentNode;c[c.length-1]===document&&c.push(window);return c}
+function ec(a,b){if(!w)return a;a=dc(a,!0);for(var c=0,d,e,f,h;c<b.length;c++)if(d=b[c],f=d===window?window:d.getRootNode(),f!==e&&(h=a.indexOf(f),e=f),!w(f)||-1<h)return d}
+var fc={get composed(){!1!==this.isTrusted&&void 0===this.R&&(this.R=cc[this.type]);return this.R||!1},composedPath:function(){this.b||(this.b=dc(this.__target,this.composed));return this.b},get target(){return ec(this.currentTarget,this.composedPath())},get relatedTarget(){if(!this.S)return null;this.c||(this.c=dc(this.S,!0));return ec(this.currentTarget,this.c)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.a=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);
+this.a=this.i=!0}};function gc(a){function b(b,d){b=new a(b,d);b.R=d&&!!d.composed;return b}ra(b,a);b.prototype=a.prototype;return b}var hc={focus:!0,blur:!0};function ic(a){return a.__target!==a.target||a.S!==a.relatedTarget}function jc(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!ic(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.i);d++);}
+function kc(a){var b=a.composedPath();Object.defineProperty(a,"currentTarget",{get:function(){return d},configurable:!0});for(var c=b.length-1;0<=c;c--){var d=b[c];jc(a,d,"capture");if(a.a)return}Object.defineProperty(a,"eventPhase",{get:function(){return Event.AT_TARGET}});var e;for(c=0;c<b.length;c++){d=b[c];var f=t(d);f=f&&f.root;if(0===c||f&&f===e)if(jc(a,d,"bubble"),d!==window&&(e=d.getRootNode()),a.a)break}}
+function lc(a,b,c,d,e,f){for(var h=0;h<a.length;h++){var g=a[h],k=g.type,l=g.capture,m=g.once,p=g.passive;if(b===g.node&&c===k&&d===l&&e===m&&f===p)return h}return-1}
+function mc(a,b,c){if(b){var d=typeof b;if("function"===d||"object"===d)if("object"!==d||b.handleEvent&&"function"===typeof b.handleEvent){if(c&&"object"===typeof c){var e=!!c.capture;var f=!!c.once;var h=!!c.passive}else e=!!c,h=f=!1;var g=c&&c.U||this,k=b[bc];if(k){if(-1<lc(k,g,a,e,f,h))return}else b[bc]=[];k=function(e){f&&this.removeEventListener(a,b,c);e.__target||nc(e);if(g!==this){var h=Object.getOwnPropertyDescriptor(e,"currentTarget");Object.defineProperty(e,"currentTarget",{get:function(){return g},
+configurable:!0})}if(e.composed||-1<e.composedPath().indexOf(g))if(ic(e)&&e.target===e.relatedTarget)e.eventPhase===Event.BUBBLING_PHASE&&e.stopImmediatePropagation();else if(e.eventPhase===Event.CAPTURING_PHASE||e.bubbles||e.target===g||g instanceof Window){var k="function"===d?b.call(g,e):b.handleEvent&&b.handleEvent(e);g!==this&&(h?(Object.defineProperty(e,"currentTarget",h),h=null):delete e.currentTarget);return k}};b[bc].push({node:g,type:a,capture:e,once:f,passive:h,Ka:k});hc[a]?(this.__handlers=
+this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(k)):(this instanceof Window?A.Ia:A.addEventListener).call(this,a,k,c)}}}
+function oc(a,b,c){if(b){if(c&&"object"===typeof c){var d=!!c.capture;var e=!!c.once;var f=!!c.passive}else d=!!c,f=e=!1;var h=c&&c.U||this,g=void 0;var k=null;try{k=b[bc]}catch(l){}k&&(e=lc(k,h,a,d,e,f),-1<e&&(g=k.splice(e,1)[0].Ka,k.length||(b[bc]=void 0)));(this instanceof Window?A.Ja:A.removeEventListener).call(this,a,g||b,c);g&&hc[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][d?"capture":"bubble"],g=a.indexOf(g),-1<g&&a.splice(g,1))}}
+function pc(){for(var a in hc)window.addEventListener(a,function(a){a.__target||(nc(a),kc(a))},!0)}function nc(a){a.__target=a.target;a.S=a.relatedTarget;if(u.o){var b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__patchProto")){var c=Object.create(b);c.Ma=b;pa(c,fc);b.__patchProto=c}a.__proto__=b.__patchProto}else pa(a,fc)}var qc=gc(window.Event),rc=gc(window.CustomEvent),sc=gc(window.MouseEvent);function tc(a,b){return{index:a,H:[],L:b}}
+function uc(a,b,c,d){var e=0,f=0,h=0,g=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(h=0;h<k;h++)if(a[h]!==c[h])break a;h=k}if(b==a.length&&d==c.length){g=a.length;for(var l=c.length,m=0;m<k-h&&vc(a[--g],c[--l]);)m++;g=m}e+=h;f+=h;b-=g;d-=g;if(0==b-e&&0==d-f)return[];if(e==b){for(b=tc(e,0);f<d;)b.H.push(c[f++]);return[b]}if(f==d)return[tc(e,b-e)];k=e;h=f;d=d-h+1;g=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(g),b[l][0]=l;for(l=0;l<g;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<g;m++)if(a[k+m-1]===c[h+l-1])b[l][m]=
+b[l-1][m-1];else{var p=b[l-1][m]+1,x=b[l][m-1]+1;b[l][m]=p<x?p:x}k=b.length-1;h=b[0].length-1;d=b[k][h];for(a=[];0<k||0<h;)0==k?(a.push(2),h--):0==h?(a.push(3),k--):(g=b[k-1][h-1],l=b[k-1][h],m=b[k][h-1],p=l<m?l<g?l:g:m<g?m:g,p==g?(g==d?a.push(0):(a.push(1),d=g),k--,h--):p==l?(a.push(3),k--,d=l):(a.push(2),h--,d=m));a.reverse();b=void 0;k=[];for(h=0;h<a.length;h++)switch(a[h]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=tc(e,0));b.L++;e++;b.H.push(c[f]);f++;break;case 2:b||(b=tc(e,0));
+b.L++;e++;break;case 3:b||(b=tc(e,0)),b.H.push(c[f]),f++}b&&k.push(b);return k}function vc(a,b){return a===b};var Rb=J.parentNode,wc=J.childNodes,xc={};function yc(a){var b=[];do b.unshift(a);while(a=a.parentNode);return b}function Db(a,b,c){if(a!==xc)throw new TypeError("Illegal constructor");this.na="ShadyRoot";a=wc(b);this.host=b;this.a=c&&c.mode;Ib(b,a);c=t(b);c.root=this;c.ea="closed"!==this.a?this:null;c=r(this);c.firstChild=c.lastChild=c.parentNode=c.nextSibling=c.previousSibling=null;c.childNodes=[];this.K=!1;this.m=this.g=this.f=null;c=0;for(var d=a.length;c<d;c++)A.removeChild.call(b,a[c])}
+function M(a){a.K||(a.K=!0,Aa(function(){return zc(a)}))}function zc(a){for(var b;a;){a.K&&(b=a);a:{var c=a;a=c.host.getRootNode();if(w(a))for(var d=c.host.childNodes,e=0;e<d.length;e++)if(c=d[e],"slot"==c.localName)break a;a=void 0}}b&&b._renderRoot()}
+Db.prototype._renderRoot=function(){this.K=!1;if(this.f){Qb(this);for(var a=0,b;a<this.f.length;a++){b=this.f[a];var c=t(b),d=c.assignedNodes;c.assignedNodes=[];c.v=[];if(c.W=d)for(c=0;c<d.length;c++){var e=t(d[c]);e.J=e.assignedSlot;e.assignedSlot===b&&(e.assignedSlot=null)}}for(b=this.host.firstChild;b;b=b.nextSibling)Ac(this,b);for(a=0;a<this.f.length;a++){b=this.f[a];d=t(b);if(!d.assignedNodes.length)for(c=b.firstChild;c;c=c.nextSibling)Ac(this,c,b);(c=(c=t(b.parentNode))&&c.root)&&Sb(c)&&c._renderRoot();
+Bc(this,d.v,d.assignedNodes);if(c=d.W){for(e=0;e<c.length;e++)t(c[e]).J=null;d.W=null;c.length>d.assignedNodes.length&&(d.N=!0)}d.N&&(d.N=!1,Cc(this,b))}a=this.f;b=[];for(d=0;d<a.length;d++)c=a[d].parentNode,(e=t(c))&&e.root||!(0>b.indexOf(c))||b.push(c);for(a=0;a<b.length;a++){d=b[a];c=d===this?this.host:d;e=[];d=d.childNodes;for(var f=0;f<d.length;f++){var h=d[f];if("slot"==h.localName){h=t(h).v;for(var g=0;g<h.length;g++)e.push(h[g])}else e.push(h)}d=void 0;f=wc(c);h=uc(e,e.length,f,f.length);
+for(var k=g=0;g<h.length&&(d=h[g]);g++){for(var l=0,m;l<d.H.length&&(m=d.H[l]);l++)Rb(m)===c&&A.removeChild.call(c,m),f.splice(d.index+k,1);k-=d.L}for(k=0;k<h.length&&(d=h[k]);k++)for(g=f[d.index],l=d.index;l<d.index+d.L;l++)m=e[l],A.insertBefore.call(c,m,g),f.splice(l,0,m)}}};function Ac(a,b,c){var d=r(b),e=d.J;d.J=null;c||(c=(a=a.g[b.slot||"__catchall"])&&a[0]);c?(r(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(r(d.assignedSlot).N=!0)}
+function Bc(a,b,c){for(var d=0,e;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=t(e).assignedNodes;f&&f.length&&Bc(a,b,f)}else b.push(c[d])}function Cc(a,b){A.dispatchEvent.call(b,new Event("slotchange"));b=t(b);b.assignedSlot&&Cc(a,b.assignedSlot)}function Qb(a){if(a.m&&a.m.length){for(var b=a.m,c,d=0;d<b.length;d++){var e=b[d];Ib(e);Ib(e.parentNode);var f=Ub(e);a.g[f]?(c=c||{},c[f]=!0,a.g[f].push(e)):a.g[f]=[e];a.f.push(e)}if(c)for(var h in c)a.g[h]=Vb(a.g[h]);a.m=[]}}
+function Ub(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.ka=b}function Vb(a){return a.sort(function(a,c){a=yc(a);for(var b=yc(c),e=0;e<a.length;e++){c=a[e];var f=b[e];if(c!==f)return a=Array.from(c.parentNode.childNodes),a.indexOf(c)-a.indexOf(f)}})}function Sb(a){Qb(a);return!(!a.f||!a.f.length)};function Dc(a){var b=a.getRootNode();w(b)&&zc(b);return(a=t(a))&&a.assignedSlot||null}
+var Ec={addEventListener:mc.bind(window),removeEventListener:oc.bind(window)},Fc={addEventListener:mc,removeEventListener:oc,appendChild:function(a){return Kb(this,a)},insertBefore:function(a,b){return Kb(this,a,b)},removeChild:function(a){return Lb(this,a)},replaceChild:function(a,b){Kb(this,a,b);Lb(this,b);return a},cloneNode:function(a){if("template"==this.localName)var b=A.cloneNode.call(this,a);else if(b=A.cloneNode.call(this,!1),a){a=this.childNodes;for(var c=0,d;c<a.length;c++)d=a[c].cloneNode(!0),
+b.appendChild(d)}return b},getRootNode:function(){return Wb(this)},contains:function(a){return xa(this,a)},dispatchEvent:function(a){Ba();return A.dispatchEvent.call(this,a)}};
+Object.defineProperties(Fc,{isConnected:{get:function(){if(ub&&ub.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;var a=this.ownerDocument;if(wa){if(A.contains.call(a,this))return!0}else if(a.documentElement&&A.contains.call(a.documentElement,this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.parentNode||(w(a)?a.host:void 0);return!!(a&&a instanceof Document)},configurable:!0}});
+var Gc={get assignedSlot(){return Dc(this)}},Hc={querySelector:function(a){return Xb(this,function(b){return oa.call(b,a)},function(a){return!!a})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(A.querySelectorAll(this,a));var c=this.getRootNode();return b.filter(function(a){return a.getRootNode()==c})}return Xb(this,function(b){return oa.call(b,a)})}},Ic={assignedNodes:function(a){if("slot"===this.localName){var b=this.getRootNode();w(b)&&zc(b);return(b=t(this))?(a&&a.flatten?
+b.v:b.assignedNodes)||[]:[]}}},Jc=qa({setAttribute:function(a,b){$b(this,a,b)},removeAttribute:function(a){A.removeAttribute.call(this,a);Tb(this,a)},attachShadow:function(a){if(!this)throw"Must provide a host.";if(!a)throw"Not enough arguments.";return new Db(xc,this,a)},get slot(){return this.getAttribute("slot")},set slot(a){$b(this,"slot",a)},get assignedSlot(){return Dc(this)}},Hc,Ic);Object.defineProperties(Jc,Ab);
+var Kc=qa({importNode:function(a,b){return ac(a,b)},getElementById:function(a){return Xb(this,function(b){return b.id==a},function(a){return!!a})[0]||null}},Hc);Object.defineProperties(Kc,{_activeElement:Bb.activeElement});
+var Lc=HTMLElement.prototype.blur,Mc=qa({blur:function(){var a=t(this);(a=(a=a&&a.root)&&a.activeElement)?a.blur():Lc.call(this)}}),Nc={addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.U=this;this.host.addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.U=this;this.host.removeEventListener(a,b,c)},getElementById:function(a){return Xb(this,function(b){return b.id==a},function(a){return!!a})[0]||null}};
+function N(a,b){for(var c=Object.getOwnPropertyNames(b),d=0;d<c.length;d++){var e=c[d],f=Object.getOwnPropertyDescriptor(b,e);f.value?a[e]=f.value:Object.defineProperty(a,e,f)}};if(u.ca){var ShadyDOM={inUse:u.ca,patch:function(a){Fb(a);Eb(a);return a},isShadyRoot:w,enqueue:Aa,flush:Ba,settings:u,filterMutations:Ka,observeChildren:Ia,unobserveChildren:Ja,nativeMethods:A,nativeTree:J};window.ShadyDOM=ShadyDOM;window.Event=qc;window.CustomEvent=rc;window.MouseEvent=sc;pc();var Oc=window.customElements&&window.customElements.nativeHTMLElement||HTMLElement;N(Db.prototype,Nc);N(window.Node.prototype,Fc);N(window.Window.prototype,Ec);N(window.Text.prototype,Gc);N(window.DocumentFragment.prototype,
+Hc);N(window.Element.prototype,Jc);N(window.Document.prototype,Kc);window.HTMLSlotElement&&N(window.HTMLSlotElement.prototype,Ic);N(Oc.prototype,Mc);u.o&&(L(window.Node.prototype),L(window.Text.prototype),L(window.DocumentFragment.prototype),L(window.Element.prototype),L(Oc.prototype),L(window.Document.prototype),window.HTMLSlotElement&&L(window.HTMLSlotElement.prototype));Cb();window.ShadowRoot=Db};/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+function Pc(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function Qc(a){a=a.replace(Rc,"").replace(Sc,"");var b=Tc,c=a,d=new Pc;d.start=0;d.end=c.length;for(var e=d,f=0,h=c.length;f<h;f++)if("{"===c[f]){e.rules||(e.rules=[]);var g=e,k=g.rules[g.rules.length-1]||null;e=new Pc;e.start=f+1;e.parent=g;e.previous=k;g.rules.push(e)}else"}"===c[f]&&(e.end=f+1,e=e.parent||d);return b(d,a)}
+function Tc(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=Uc(c),c=c.replace(Vc," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=Wc:c.match(Xc)&&(a.type=Yc,a.keyframesName=a.selector.split(Vc).pop()):a.type=0===c.indexOf("--")?Zc:$c);if(c=a.rules)for(var d=0,e=c.length,f;d<e&&(f=c[d]);d++)Tc(f,
+b);return a}function Uc(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(a,c){a=c;for(c=6-a.length;c--;)a="0"+a;return"\\"+a})}
+function ad(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var h=e.length,g;f<h&&(g=e[f]);f++)d=ad(g,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(bd,"").replace(cd,""),b=b.replace(dd,"").replace(ed,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
+var $c=1,Yc=7,Wc=4,Zc=1E3,Rc=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,Sc=/@import[^;]*;/gim,bd=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,cd=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,dd=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,ed=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,Xc=/^@[^\s]*keyframes/,Vc=/\s+/g;var O=!(window.ShadyDOM&&window.ShadyDOM.inUse),fd;function gd(a){fd=a&&a.shimcssproperties?!1:O||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?fd=window.ShadyCSS.nativeCss:window.ShadyCSS?(gd(window.ShadyCSS),window.ShadyCSS=void 0):gd(window.WebComponents&&window.WebComponents.flags);var P=fd;var hd=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,id=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,jd=/(--[\w-]+)\s*([:,;)]|$)/gi,kd=/(animation\s*:)|(animation-name\s*:)/,ld=/@media\s(.*)/,md=/\{[^}]*\}/g;var nd=new Set;function Q(a,b){if(!a)return"";"string"===typeof a&&(a=Qc(a));b&&R(a,b);return ad(a,P)}function od(a){!a.__cssRules&&a.textContent&&(a.__cssRules=Qc(a.textContent));return a.__cssRules||null}function pd(a){return!!a.parent&&a.parent.type===Yc}function R(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===Wc){var h=a.selector.match(ld);h&&(window.matchMedia(h[1]).matches||(e=!0))}f===$c?b(a):c&&f===Yc?c(a):f===Zc&&(e=!0);if((a=a.rules)&&!e){e=0;f=a.length;for(var g;e<f&&(g=a[e]);e++)R(g,b,c,d)}}}
+function qd(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;rd(e,c,d);return e}var S=null;function rd(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);S?a.compareDocumentPosition(S)===Node.DOCUMENT_POSITION_PRECEDING&&(S=a):S=a}
+function sd(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");a:{var d=0;var e=c+3;for(var f=a.length;e<f;e++)if("("===a[e])d++;else if(")"===a[e]&&0===--d)break a;e=-1}d=a.substring(c+4,e);c=a.substring(0,c);a=sd(a.substring(e+1),b);e=d.indexOf(",");return-1===e?b(c,d.trim(),"",a):b(c,d.substring(0,e).trim(),d.substring(e+1).trim(),a)}function td(a,b){O?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
+function U(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,I:c}};function ud(){}function yd(a,b,c){var d=V;a.__styleScoped?a.__styleScoped=null:zd(d,a,b||"",c)}function zd(a,b,c,d){b.nodeType===Node.ELEMENT_NODE&&Ad(b,c,d);if(b="template"===b.localName?(b.content||b.Na).childNodes:b.children||b.childNodes)for(var e=0;e<b.length;e++)zd(a,b[e],c,d)}
+function Ad(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute(Bd);c?d&&(b=d.replace("style-scope","").replace(b,""),td(a,b)):td(a,(d?d+" ":"")+"style-scope "+b)}}function Cd(a,b,c){var d=V,e=a.__cssBuild;O||"shady"===e?b=Q(b,c):(a=U(a),b=Dd(d,b,a.is,a.I,c)+"\n\n");return b.trim()}
+function Dd(a,b,c,d,e){var f=Ed(c,d);c=c?Fd+c:"";return Q(b,function(b){b.c||(b.selector=b.j=Gd(a,b,a.b,c,f),b.c=!0);e&&e(b,c,f)})}function Ed(a,b){return b?"[is="+a+"]":a}function Gd(a,b,c,d,e){var f=b.selector.split(Hd);if(!pd(b)){b=0;for(var h=f.length,g;b<h&&(g=f[b]);b++)f[b]=c.call(a,g,d,e)}return f.join(Hd)}function Id(a){return a.replace(Jd,function(a,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
+ud.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=Jd.test(a);e&&(a=a.replace(Jd,function(a,b,c){return":"+b+"("+c.replace(/\s/g,"")+")"}),a=Id(a));a=a.replace(Kd,Ld+" $1");a=a.replace(Md,function(a,e,g){d||(a=Nd(g,e,b,c),d=d||a.stop,e=a.ta,g=a.value);return e+g});e&&(a=Id(a));return a};
+function Nd(a,b,c,d){var e=a.indexOf(Od);0<=a.indexOf(Ld)?a=Pd(a,d):0!==e&&(a=c?Qd(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Rd,function(a,b){return" > "+b}))}a=a.replace(Sd,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+c+'"]'});return{value:a,ta:b,stop:f}}function Qd(a,b){a=a.split(Td);a[0]+=b;return a.join(Td)}
+function Pd(a,b){var c=a.match(Ud);return(c=c&&c[2].trim()||"")?c[0].match(Vd)?a.replace(Ud,function(a,c,f){return b+f}):c.split(Vd)[0]===b?c:Wd:a.replace(Ld,b)}function Xd(a){a.selector===Yd&&(a.selector="html")}ud.prototype.c=function(a){return a.match(Od)?this.b(a,Zd):Qd(a.trim(),Zd)};q.Object.defineProperties(ud.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
+var Jd=/:(nth[-\w]+)\(([^)]+)\)/,Zd=":not(.style-scope)",Hd=",",Md=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,Vd=/[[.:#*]/,Ld=":host",Yd=":root",Od="::slotted",Kd=new RegExp("^("+Od+")"),Ud=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Rd=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Sd=/(.*):dir\((?:(ltr|rtl))\)/,Fd=".",Td=":",Bd="class",Wd="should_not_match",V=new ud;function $d(a,b,c,d){this.u=a||null;this.b=b||null;this.X=c||[];this.D=null;this.I=d||"";this.a=this.l=this.w=null}function W(a){return a?a.__styleInfo:null}function ae(a,b){return a.__styleInfo=b}$d.prototype.c=function(){return this.u};$d.prototype._getStyleRules=$d.prototype.c;function be(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var ce=navigator.userAgent.match("Trident");function de(){}function ee(a){var b={},c=[],d=0;R(a,function(a){fe(a);a.index=d++;a=a.h.cssText;for(var c;c=jd.exec(a);){var e=c[1];":"!==c[2]&&(b[e]=!0)}},function(a){c.push(a)});a.b=c;a=[];for(var e in b)a.push(e);return a}
+function fe(a){if(!a.h){var b={},c={};ge(a,c)&&(b.s=c,a.rules=null);b.cssText=a.parsedCssText.replace(md,"").replace(hd,"");a.h=b}}function ge(a,b){var c=a.h;if(c){if(c.s)return Object.assign(b,c.s),!0}else{c=a.parsedCssText;for(var d;a=hd.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
+function he(a,b,c){b&&(b=0<=b.indexOf(";")?ie(a,b,c):sd(b,function(b,e,f,h){if(!e)return b+h;(e=he(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=he(a,c[f]||f,c)||f;return b+(e||"")+h}));return b&&b.trim()||""}
+function ie(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){id.lastIndex=0;if(f=id.exec(e))e=he(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var h=e.substring(f);h=h.trim();h=he(a,h,c)||h;e=e.substring(0,f)+h}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
+function je(a,b){var c={},d=[];R(a,function(a){a.h||fe(a);var e=a.j||a.parsedSelector;b&&a.h.s&&e&&be.call(b,e)&&(ge(a,c),a=a.index,e=parseInt(a/32,10),d[e]=(d[e]||0)|1<<a%32)},null,!0);return{s:c,key:d}}
+function ke(a,b,c,d){b.h||fe(b);if(b.h.s){var e=U(a);a=e.is;e=e.I;e=a?Ed(a,e):"html";var f=b.parsedSelector,h=":host > *"===f||"html"===f,g=0===f.indexOf(":host")&&!h;"shady"===c&&(h=f===e+" > *."+e||-1!==f.indexOf("html"),g=!h&&0===f.indexOf(e));"shadow"===c&&(h=":host > *"===f||"html"===f,g=g&&!h);if(h||g)c=e,g&&(b.j||(b.j=Gd(V,b,V.b,a?Fd+a:"",e)),c=b.j||e),d({Fa:c,za:g,Wa:h})}}
+function le(a,b){var c={},d={},e=b&&b.__cssBuild;R(b,function(b){ke(a,b,e,function(e){be.call(a.i||a,e.Fa)&&(e.za?ge(b,c):ge(b,d))})},null,!0);return{Ea:d,xa:c}}
+function me(a,b,c,d){var e=U(b),f=Ed(e.is,e.I),h=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])");e=W(b).u;var g=ne(e,d);return Cd(b,e,function(b){var e="";b.h||fe(b);b.h.cssText&&(e=ie(a,b.h.cssText,c));b.cssText=e;if(!O&&!pd(b)&&b.cssText){var k=e=b.cssText;null==b.ba&&(b.ba=kd.test(e));if(b.ba)if(null==b.O){b.O=[];for(var p in g)k=g[p],k=k(e),e!==k&&(e=k,b.O.push(p))}else{for(p=0;p<b.O.length;++p)k=g[b.O[p]],e=k(e);k=e}b.cssText=k;b.j=b.j||b.selector;e="."+d;
+p=b.j.split(",");k=0;for(var x=p.length,B;k<x&&(B=p[k]);k++)p[k]=B.match(h)?B.replace(f,e):e+" "+B;b.selector=p.join(",")}})}function ne(a,b){a=a.b;var c={};if(!O&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,h=b;f.i=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+h;f.j=f.j||f.selector;f.selector=f.j.replace(f.keyframesName,f.a);c[e.keyframesName]=oe(e)}return c}function oe(a){return function(b){return b.replace(a.i,a.a)}}
+function pe(a,b){var c=qe,d=od(a);a.textContent=Q(d,function(a){var d=a.cssText=a.parsedCssText;a.h&&a.h.cssText&&(d=d.replace(bd,"").replace(cd,""),a.cssText=ie(c,d,b))})}q.Object.defineProperties(de.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var qe=new de;var re={},se=window.customElements;if(se&&!O){var te=se.define;se.define=function(a,b,c){var d=document.createComment(" Shady DOM styles for "+a+" "),e=document.head;e.insertBefore(d,(S?S.nextSibling:null)||e.firstChild);S=d;re[a]=d;te.call(se,a,b,c)}};function ue(){this.cache={}}ue.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({s:b,styleElement:c,l:d});100<e.length&&e.shift();this.cache[a]=e};ue.prototype.fetch=function(a,b,c){if(a=this.cache[a])for(var d=a.length-1;0<=d;d--){var e=a[d],f;a:{for(f=0;f<c.length;f++){var h=c[f];if(e.s[h]!==b[h]){f=!1;break a}}f=!0}if(f)return e}};function ve(){}
+function we(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode();var h=e;var g=[];h.classList?g=Array.from(h.classList):h instanceof window.SVGElement&&h.hasAttribute("class")&&(g=h.getAttribute("class").split(/\s+/));h=g;g=h.indexOf(V.a);if((h=-1<g?h[g+1]:"")&&f===e.ownerDocument)yd(e,h,!0);else if(f.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&
+(f=f.host))if(f=U(f).is,h===f)for(e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+V.a+")"),f=0;f<e.length;f++)Ad(e[f],h);else h&&yd(e,h,!0),yd(e,f)}}}}
+if(!O){var xe=new MutationObserver(we),ye=function(a){xe.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)ye(document);else{var ze=function(){ye(document.body)};window.HTMLImports?window.HTMLImports.whenReady(ze):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){ze();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",a)}else ze()})}ve=function(){we(xe.takeRecords())}}
+var Ae=ve;var Be={};var Ce=Promise.resolve();function De(a){if(a=Be[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Ee(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Fe(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a.a||(a.a=!0,Ce.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a.a=!1}))};var Ge=null,He=window.HTMLImports&&window.HTMLImports.whenReady||null,Ie;function Je(a){requestAnimationFrame(function(){He?He(a):(Ge||(Ge=new Promise(function(a){Ie=a}),"complete"===document.readyState?Ie():document.addEventListener("readystatechange",function(){"complete"===document.readyState&&Ie()})),Ge.then(function(){a&&a()}))})};var Ke=new ue;function X(){var a=this;this.F={};this.c=document.documentElement;var b=new Pc;b.rules=[];this.i=ae(this.c,new $d(b));this.B=!1;this.b=this.a=null;Je(function(){Y(a)})}n=X.prototype;n.ia=function(){Ae()};n.va=function(a){return od(a)};n.Ha=function(a){return Q(a)};
+n.prepareTemplate=function(a,b,c){if(!a.b){a.b=!0;a.name=b;a.extends=c;Be[b]=a;var d=(d=a.content.querySelector("style"))?d.getAttribute("css-build")||"":"";var e=[];for(var f=a.content.querySelectorAll("style"),h=0;h<f.length;h++){var g=f[h];if(g.hasAttribute("shady-unscoped")){if(!O){var k=g.textContent;nd.has(k)||(nd.add(k),k=g.cloneNode(!0),document.head.appendChild(k));g.parentNode.removeChild(g)}}else e.push(g.textContent),g.parentNode.removeChild(g)}e=e.join("").trim();c={is:b,extends:c,La:d};
+O||yd(a.content,b);Y(this);f=id.test(e)||hd.test(e);id.lastIndex=0;hd.lastIndex=0;e=Qc(e);f&&P&&this.a&&this.a.transformRules(e,b);a._styleAst=e;a.c=d;d=[];P||(d=ee(a._styleAst));if(!d.length||P)e=O?a.content:null,b=re[b],f=Cd(c,a._styleAst),b=f.length?qd(f,c.is,e,b):void 0,a.aa=b;a.qa=d}};
+function Le(a){!a.b&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.b=window.ShadyCSS.CustomStyleInterface,a.b.transformCallback=function(b){a.ga(b)},a.b.validateCallback=function(){requestAnimationFrame(function(){(a.b.enqueued||a.B)&&a.A()})})}function Y(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.ApplyShim&&(a.a=window.ShadyCSS.ApplyShim,a.a.invalidCallback=De);Le(a)}
+n.A=function(){Y(this);if(this.b){var a=this.b.processStyles();if(this.b.enqueued){if(P)for(var b=0;b<a.length;b++){var c=this.b.getStyleForCustomStyle(a[b]);if(c&&P&&this.a){var d=od(c);Y(this);this.a.transformRules(d);c.textContent=Q(d)}}else for(Me(this,this.c,this.i),b=0;b<a.length;b++)(c=this.b.getStyleForCustomStyle(a[b]))&&pe(c,this.i.w);this.b.enqueued=!1;this.B&&!P&&this.styleDocument()}}};
+n.styleElement=function(a,b){var c=U(a).is,d=W(a);if(!d){var e=U(a);d=e.is;e=e.I;var f=re[d];d=Be[d];if(d){var h=d._styleAst;var g=d.qa}d=ae(a,new $d(h,f,g,e))}a!==this.c&&(this.B=!0);b&&(d.D=d.D||{},Object.assign(d.D,b));if(P){if(d.D){b=d.D;for(var k in b)null===k?a.style.removeProperty(k):a.style.setProperty(k,b[k])}if(((k=Be[c])||a===this.c)&&k&&k.aa&&!Ee(k)){if(Ee(k)||k._applyShimValidatingVersion!==k._applyShimNextVersion)Y(this),this.a&&this.a.transformRules(k._styleAst,c),k.aa.textContent=
+Cd(a,d.u),Fe(k);O&&(c=a.shadowRoot)&&(c.querySelector("style").textContent=Cd(a,d.u));d.u=k._styleAst}}else if(Me(this,a,d),d.X&&d.X.length){c=d;k=U(a).is;d=(b=Ke.fetch(k,c.w,c.X))?b.styleElement:null;h=c.l;(g=b&&b.l)||(g=this.F[k]=(this.F[k]||0)+1,g=k+"-"+g);c.l=g;g=c.l;e=qe;e=d?d.textContent||"":me(e,a,c.w,g);f=W(a);var l=f.a;l&&!O&&l!==d&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));O?f.a?(f.a.textContent=e,d=f.a):e&&(d=qd(e,g,a.shadowRoot,f.b)):d?d.parentNode||(ce&&
+-1<e.indexOf("@media")&&(d.textContent=e),rd(d,null,f.b)):e&&(d=qd(e,g,null,f.b));d&&(d._useCount=d._useCount||0,f.a!=d&&d._useCount++,f.a=d);g=d;O||(d=c.l,f=e=a.getAttribute("class")||"",h&&(f=e.replace(new RegExp("\\s*x-scope\\s*"+h+"\\s*","g")," ")),f+=(f?" ":"")+"x-scope "+d,e!==f&&td(a,f));b||Ke.store(k,c.w,g,c.l)}};function Ne(a,b){return(b=b.getRootNode().host)?W(b)?b:Ne(a,b):a.c}
+function Me(a,b,c){a=Ne(a,b);var d=W(a);a=Object.create(d.w||null);var e=le(b,c.u);b=je(d.u,b).s;Object.assign(a,e.xa,b,e.Ea);b=c.D;for(var f in b)if((e=b[f])||0===e)a[f]=e;f=qe;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=he(f,a[d],a);c.w=a}n.styleDocument=function(a){this.styleSubtree(this.c,a)};
+n.styleSubtree=function(a,b){var c=a.shadowRoot;(c||a===this.c)&&this.styleElement(a,b);if(b=c&&(c.children||c.childNodes))for(a=0;a<b.length;a++)this.styleSubtree(b[a]);else if(a=a.children||a.childNodes)for(b=0;b<a.length;b++)this.styleSubtree(a[b])};n.ga=function(a){var b=this,c=od(a);R(c,function(a){if(O)Xd(a);else{var c=V;a.selector=a.parsedSelector;Xd(a);a.selector=a.j=Gd(c,a,c.c,void 0,void 0)}P&&(Y(b),b.a&&b.a.transformRule(a))});P?a.textContent=Q(c):this.i.u.rules.push(c)};
+n.getComputedStyleValue=function(a,b){var c;P||(c=(W(a)||W(Ne(this,a))).w[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};n.Ga=function(a,b){var c=a.getRootNode();b=b?b.split(/\s/):[];c=c.host&&c.host.localName;if(!c){var d=a.getAttribute("class");if(d){d=d.split(/\s/);for(var e=0;e<d.length;e++)if(d[e]===V.a){c=d[e+1];break}}}c&&b.push(V.a,c);P||(c=W(a))&&c.l&&b.push(qe.a,c.l);td(a,b.join(" "))};n.ra=function(a){return W(a)};X.prototype.flush=X.prototype.ia;
+X.prototype.prepareTemplate=X.prototype.prepareTemplate;X.prototype.styleElement=X.prototype.styleElement;X.prototype.styleDocument=X.prototype.styleDocument;X.prototype.styleSubtree=X.prototype.styleSubtree;X.prototype.getComputedStyleValue=X.prototype.getComputedStyleValue;X.prototype.setElementClass=X.prototype.Ga;X.prototype._styleInfoForNode=X.prototype.ra;X.prototype.transformCustomStyleForDocument=X.prototype.ga;X.prototype.getStyleAst=X.prototype.va;X.prototype.styleAstToString=X.prototype.Ha;
+X.prototype.flushCustomStyles=X.prototype.A;Object.defineProperties(X.prototype,{nativeShadow:{get:function(){return O}},nativeCss:{get:function(){return P}}});var Z=new X,Oe,Pe;window.ShadyCSS&&(Oe=window.ShadyCSS.ApplyShim,Pe=window.ShadyCSS.CustomStyleInterface);window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.A();Z.prepareTemplate(a,b,c)},styleSubtree:function(a,b){Z.A();Z.styleSubtree(a,b)},styleElement:function(a){Z.A();Z.styleElement(a)},styleDocument:function(a){Z.A();Z.styleDocument(a)},getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:P,nativeShadow:O};Oe&&(window.ShadyCSS.ApplyShim=Oe);
+Pe&&(window.ShadyCSS.CustomStyleInterface=Pe);/*
+
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+var Qe=window.customElements,Re=window.HTMLImports,Se=window.HTMLTemplateElement;window.WebComponents=window.WebComponents||{};if(Qe&&Qe.polyfillWrapFlushCallback){var Te,Ue=function(){if(Te){Se.sa&&Se.sa(window.document);var a=Te;Te=null;a();return!0}},Ve=Re.whenReady;Qe.polyfillWrapFlushCallback(function(a){Te=a;Ve(Ue)});Re.whenReady=function(a){Ve(function(){Ue()?Re.whenReady(a):a()})}}
+Re.whenReady(function(){requestAnimationFrame(function(){window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})});var We=document.createElement("style");We.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var Xe=document.querySelector("head");Xe.insertBefore(We,Xe.firstChild);/*
+
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+}).call(this);
+
+//# sourceMappingURL=webcomponents-hi-sd.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js.map
new file mode 100644
index 00000000000..baf6aff42aa
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi-sd.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/@webcomponents/html-imports/src/html-imports.js"," [synthetic:util/global] "," [synthetic:util/defineproperty] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterator] ","node_modules/@webcomponents/shadydom/src/shady-data.js","node_modules/@webcomponents/shadydom/src/utils.js","node_modules/@webcomponents/shadydom/src/flush.js","node_modules/@webcomponents/shadydom/src/observe-changes.js","node_modules/@webcomponents/shadydom/src/native-methods.js","node_modules/@webcomponents/shadydom/src/innerHTML.js","node_modules/@webcomponents/shadydom/src/native-tree-walker.js","node_modules/@webcomponents/shadydom/src/native-tree-accessors.js","node_modules/@webcomponents/shadydom/src/native-tree.js","node_modules/@webcomponents/shadydom/src/patch-accessors.js","node_modules/@webcomponents/shadydom/src/attach-shadow.js","node_modules/@webcomponents/shadydom/src/patch-builtins.js","node_modules/@webcomponents/shadydom/src/logical-tree.js","node_modules/@webcomponents/shadydom/src/logical-mutation.js"," [synthetic:es6/util/arrayfromiterable] ","node_modules/@webcomponents/shadydom/src/patch-events.js","node_modules/@webcomponents/shadydom/src/array-splice.js","node_modules/@webcomponents/shadydom/src/shadydom.js","node_modules/@webcomponents/shadycss/src/css-parse.js","node_modules/@webcomponents/shadycss/src/style-settings.js","node_modules/@webcomponents/shadycss/src/common-regex.js","node_modules/@webcomponents/shadycss/src/unscoped-style-handler.js","node_modules/@webcomponents/shadycss/src/style-util.js","node_modules/@webcomponents/shadycss/src/style-transformer.js","node_modules/@webcomponents/shadycss/src/style-info.js","node_modules/@webcomponents/shadycss/src/style-properties.js","node_modules/@webcomponents/shadycss/src/style-placeholder.js","node_modules/@webcomponents/shadycss/src/style-cache.js","node_modules/@webcomponents/shadycss/src/document-watcher.js","node_modules/@webcomponents/shadycss/src/template-map.js","node_modules/@webcomponents/shadycss/src/apply-shim-utils.js","node_modules/@webcomponents/shadycss/src/document-wait.js","node_modules/@webcomponents/shadycss/src/scoping-shim.js","node_modules/@webcomponents/shadycss/src/common-utils.js","node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js","src/post-polyfill.js","src/unresolved.js"],"names":["$jscomp.global","$jscomp.defineProperty","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIterator","$jscomp.initSymbolIterator","$jscomp.iteratorPrototype","scope","newCustomEvent","type","params","window","CustomEvent","event","document","createEvent","initCustomEvent","bubbles","cancelable","detail","importForElement","element","useNative","ownerDocument","doc","parentNode","closest","importSelector","isImportLink","whenImportsReady","callback","imports","QSA","rootImportSelector","pending","length","forEach","imp","whenElementLoaded","whenDocumentReady","stateChanged","readyState","body","removeEventListener","addEventListener","whenReady","localName","src","firstChild","onLoadingDone","isIE","node","nodeType","Node","ELEMENT_NODE","rel","constructor","Importer","documents","inflight","dynamicImportsMO","MutationObserver","m","handleMutations","observe","head","childList","subtree","loadImports","replaceScripts","fragment","template","content","scriptsSelector","script","clone","createElement","attributes","attr","setAttribute","name","value","textContent","replaceChild","selector","childNodes","querySelectorAll","emptyNodeList","list","inverseOrder","increment","i","link","currentScript","Object","defineProperty","get","scripts","configurable","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","STYLESHEET_REGEXP","Path","fixUrls","base","href","resolveUrl","getAttribute","r","replaceUrls","text","linkUrl","regexp","replace","pre","url","post","urlPath","undefined","__workingURL","u","URL","pathname","e","__tempDoc","implementation","createHTMLDocument","__base","appendChild","__anchor","Xhr","async","load","success","fail","match","pieces","split","resource","header","indexOf","atob","decodeURIComponent","request","XMLHttpRequest","open","onload","request.onload","redirectedUrl","responseURL","getResponseHeader","location","origin","protocol","host","response","responseText","status","send","test","navigator","userAgent","links","loadImport","fireEventIfNeeded","makeDocument","processImportsIfLoadingDone","createDocumentFragment","p1","p2","innerHTML","baseEl","querySelector","removeAttribute","n$","importDependenciesSelector","inlineScriptIndex","n","importDependencyAttr","encodeURIComponent","num","disconnect","flatten","scriptsOk","stylesOk","fireEvents","waitForStyles","runScripts","DOCUMENT_FRAGMENT_NODE","cloneScript","l","s","s$","pendingScriptsSelector","pendingStylesSelector","needsMove","disabledLinkSelector","placeholder","insertBefore","nextSibling","newSibling","import","dispatchEvent","eventType","mutations","addedNodes","elem","importer","imps","target","native_baseURI","getOwnPropertyDescriptor","prototype","klass","Element","ownerDoc","call","enumerable","HTMLLinkElement","HTMLImports","ShadyData","publicRoot","root","dirty","flattenedNodes","_prevAssignedSlot","_previouslyAssignedNodes","assignedSlot","assignedNodes","observer","previousSibling","lastChild","ownerShadyRoot","__insideAccessors","__outsideAccessors","toJSON","ensureShadyDataForNode","__shady","shadyDataForNode","settings","hasNativeShadowDOM","attachShadow","getRootNode","desc","hasDescriptors","inUse","IS_IE","IS_EDGE","useNativeAccessors","isTrackingLogicalChildNodes","nodeData","isShadyRoot","obj","_localName","ownerShadyRootForNode","p","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","extend","source","getOwnPropertyNames","pd","extendAll","sources","mixin","twiddle","createTextNode","queue","shift","characterData","microtask","push","hasDocumentContains","contains","container","flushList","scheduled","enqueue","flush","didFlush","AsyncObserver","_scheduled","removedNodes","callbacks","Set","schedule","takeRecords","cb","observeChildren","sd","add","_callback","_observer","_node","unobserveChildren","handle","delete","size","filterMutations","targetRootNode","map","mutation","mutationInScope","nodes","Array","from","filter","create","removeChild","cloneNode","importNode","Document","windowAddEventListener","Window","windowRemoveEventListener","HTMLElement","getElementById","elementQuerySelector","fragmentQuerySelector","DocumentFragment","documentQuerySelector","elementQuerySelectorAll","fragmentQuerySelectorAll","documentQuerySelectorAll","DOCUMENT_NODE","escapeAttrRegExp","escapeDataRegExp","escapeReplace","c","makeSet","arr","set","voidElements","plaintextParents","getInnerHTML","c$","child","tagName","attrs","TEXT_NODE","data","COMMENT_NODE","console","error","Error","nodeWalker","createTreeWalker","NodeFilter","SHOW_ALL","elementWalker","SHOW_ELEMENT","currentNode","parentElement","firstElementChild","lastElementChild","previousElementSibling","nextElementSibling","children","textWalker","SHOW_TEXT","nextNode","nodeValue","nativeProtos","findNodeDescriptor","proto","hasOwnProperty","nodeAccessors","fragmentAccessors","documentAccessors","slice","accessors","nativeTreeAccessors","nativeTreeWalker","clearNode","inertDoc","nativeIsConnectedAccessors","nativeIsConnected","nativeActiveElementDescriptor","OutsideAccessors","ClassNameAccessor","className","InsideAccessors","item","childNodes.item","index","childElementCount","tc","cn","join","nativeAccessors","children.item","containerName","htmlContainer","ShadowRootAccessor","shadowRoot","ActiveElementAccessor","activeElement","active","nativeContains","activeRoot","patchAccessorGroup","descriptors","force","objDesc","warn","patchAccessors","patchShadowRootAccessors","ShadyRoot","__proto__","defineProperties","nodeName","prop","patchOutsideElementAccessors","patchInsideElementAccessors","linkNode","ref_node","containerData","ref_nodeData","psd","nsd","recordChildNodes","parent","refData","ownerRoot","slotsAdded","slots","_ensureSlotData","_pendingSlots","_slotList","_slotMap","$jscomp.arrayFromIterator","$jscomp.makeIterator","_asyncRender","resetTo","parentData","hasShadowRootWithSlot","preventNativeInsert","firstComposedNode","nativeMethods","scheduleObserver","preventNativeRemove","removeOwnerShadyRoot","changeSlotContent","_validateSlots","slot","splice","x","didRemove","removingInsertionPoint","composed","flattened","_hasInsertionPoint","distributeAttributeChange","oldName","__slotName","_nameForSlot","_sortSlots","addedNode","removedNode","documentElement","query","matcher","halter","queryElements","elements","result","scopingShim","deep","nc","eventWrappersName","Date","now","alwaysComposed","pathComposer","startNode","composedPath","current","startRoot","retarget","refNode","path","refNodePath","ancestor","lastRoot","rootIdx","eventMixin","isTrusted","__composed","__composedPath","currentTarget","relatedTarget","__relatedTarget","__relatedTargetComposedPath","stopPropagation","Event","__propagationStopped","stopImmediatePropagation","__immediatePropagationStopped","mixinComposedFlag","Base","klazz","options","nonBubblingEventsToRetarget","hasRetargeted","fireHandlers","phase","hs","__handlers","fn","retargetNonBubblingEvent","AT_TARGET","lastFiredRoot","findListener","wrappers","capture","once","passive","savedType","savedListener","savedCapture","savedOnce","savedPassive","savedNode","fnOrObj","optionsOrCapture","handlerType","handleEvent","__shadyTarget","wrapperFn","patchEvent","lastCurrentTargetDesc","eventPhase","BUBBLING_PHASE","CAPTURING_PHASE","ret","ael","idx","activateFocusEventOverrides","ev","getPrototypeOf","patchProto","__sourceProto","PatchedEvent","PatchedCustomEvent","PatchedMouseEvent","MouseEvent","newSplice","addedCount","removed","calcSplices","currentEnd","old","oldEnd","currentStart","oldStart","prefixCount","suffixCount","minLength","Math","min","currentValue","previousValue","index1","index2","count","equals","rowCount","columnCount","distances","j","north","west","edits","EDIT_ADD","EDIT_DELETE","northWest","EDIT_LEAVE","EDIT_UPDATE","reverse","splices","oldIndex","ShadyRootConstructionToken","ancestorList","ancestors","unshift","token","TypeError","SHADYROOT_NAME","_mode","mode","hostData","MODE_CLOSED","rootData","_renderPending","_render","renderRoot","_distribute","slotData","_distributeNodeToSlot","slotParentRoot","slotParentData","_addAssignedToFlattenedNodes","prevAssignedNodes","_fireSlotChange","_compose","composeList","targetNode","distributedNode","d","next","forcedSlot","oldSlot","CATCHALL_NAME","assigned","nestedAssigned","slotNamesToSort","_mapSlots","sort","a","b","listA","listB","nA","nB","getAssignedSlot","windowMixin","bind","nodeMixin","IsConnectedAccessor","isConnected","textMixin","fragmentMixin","o","slotMixin","elementMixin","documentMixin","id","nativeBlur","blur","htmlElementMixin","shadowActive","shadowRootMixin","patchBuiltin","ShadyDOM","patch","nativeHTMLElement","Text","HTMLSlotElement","ShadowRoot","StyleNode","parse","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.comments","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.port","parseCss","OPEN_BRACE","previous","CLOSE_BRACE","t","substring","trim","ss","_expandUnicodeEscapes","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.multipleSpaces","lastIndexOf","AT_START","MEDIA_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MEDIA_RULE","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.keyframesRule","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.KEYFRAMES_RULE","pop","VAR_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MIXIN_RULE","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.STYLE_RULE","r$","code","repeat","stringify","preserveProperties","cssText","rules","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.customProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinApply","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.varApply","STYLE_RULE","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","port","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","nativeShadow","nativeCssVariables_","calcCssVariables","CSS","supports","ShadyCSS","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","VAR_CONSUMED","ANIMATION_MATCH","MEDIA_MATCH","BRACKETED","styleTextSet","toCssText","forEachRule","rulesForStyle","style","isKeyframesSelector","rule","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","matchMedia","applyCss","moniker","contextNode","applyStyle","lastHeadApplyNode","compareDocumentPosition","position","DOCUMENT_POSITION_PRECEDING","processVariableAndFallback","str","start","level","inner","end","prefix","suffix","comma","fallback","setElementClassRaw","getIsExtends","typeExtension","is","extends","StyleTransformer","dom","shouldRemoveScope","$jscompDefaultExport","_transformDom","_content","classList","remove","SCOPE_NAME","CLASS","newValue","elementStyles","styleRules","cssBuildType","css","ext","hostScope","_calcHostScope","CSS_CLASS_PREFIX","isScoped","transformedSelector","_transformRuleCss","self","_transformComplexSelector","transformer","p$","COMPLEX_SELECTOR_SEP","_twiddleNthPlus","NTH","inside","stop","isNth","SLOTTED_START","HOST","SIMPLE_SELECTOR_SEP","info","_transformCompoundSelector","combinator","slottedIndex","SLOTTED","_transformHostSelector","_transformSimpleSelector","slotted","SLOTTED_PAREN","paren","DIR_PAREN","before","dir","PSEUDO_PREFIX","HOST_PAREN","SIMPLE_SELECTOR_PREFIX","typeSelector","SELECTOR_NO_MATCH","normalizeRootSelector","ROOT","_transformDocumentSelector","SCOPE_DOC_SELECTOR","$jscomp.global.Object.defineProperties","RegExp","StyleInfo","ast","ownStylePropertyNames","overrideStyleProperties","customStyle","scopeSelector","styleProperties","styleInfo","_getStyleRules","method","StyleProperties","decorateStyles","props","keyframes","ruleIndex","decorateRule","propertyInfo","exec","onKeyframesRule","_keyframes","names","properties","collectProperties","hasProperties","assign","any","valueForProperty","property","valueForProperties","propertyValue","parts","lastIndex","colon","pp","propertyDataFromStyles","selectorToMatch","parseInt","key","whenHostOrRootRule","cssBuild","parsedSelector","isRoot","isHost","hostAndRootPropertiesForScope","hostProps","rootProps","_element","transformStyles","hostSelector","hostRx","HOST_PREFIX","rxHostSelector","HOST_SUFFIX","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.get","keyframeTransforms","_elementKeyframeTransforms","output","input","hasAnimations","keyframeNamesToTransform","keyframe","transform","keyframesRules","keyframesNameRx","transformedKeyframesName","scopeId","_keyframesRuleTransformer","applyCustomStyle","XSCOPE_NAME","placeholderMap","ce","origDefine","wrappedDefine","clazz","placeHolder","createComment","after","StyleCache","cache","store","tagname","styleElement","typeMax","fetch","ownPropertyNames","entry","pn","handler","mxns","mxn","classes","hasAttribute","currentScope","newScope","unscoped","delayedStart","requestAnimationFrame","listener","module$node_modules$$webcomponents$shadycss$src$document_watcher.flush","templateMap","promise","Promise","resolve","invalidate","elementName","templateIsValid","startValidatingTemplate","_validating","then","readyPromise","resolveFn","documentWait","styleCache","ScopingShim","_scopeCounter","_documentOwner","_documentOwnerStyleInfo","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.set","_elementsHaveApplied","_customStyleInterface","_applyShim","_ensure","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim.prototype","?.prototype","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim_prototype$flush","getStyleAst","styleAstToString","prepareTemplate","_prepared","styleTextParts","styles","scopingAttribute","has","newStyle","__cssBuild","_cssBuild","shadowroot","_style","_ownPropertyNames","_ensureCustomStyleInterface","CustomStyleInterface","transformCustomStyleForDocument","flushCustomStyles","_ensureApplyShim","ApplyShim","customStyles","_revalidateCustomStyleApplyShim","_updateProperties","_applyCustomStyles","styleDocument","overrideProps","_isRootOwner","removeProperty","setProperty","cachedStyle","cacheEntry","oldScopeSelector","cachedScopeSelector","applyElementStyle","v","_styleOwnerForNode","owner","ownerStyleInfo","hostAndRootProps","propertiesMatchingHost","propertyData","overrides","reify","styleSubtree","shadowChildren","documentRule","_transformRule","getComputedStyleValue","getComputedStyle","getPropertyValue","setElementClass","classString","scopeName","classAttr","k$","_styleInfoForNode","elementExtends","customElements","Template","WebComponents","flushCallback","runAndClearCallback","bootstrap","origWhenReady","ready"],"mappings":"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","file":"webcomponents-hi-sd.js","sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(scope => {\n\n /********************* base setup *********************/\n const link = document.createElement('link');\n const useNative = Boolean('import' in link);\n const emptyNodeList = link.querySelectorAll('*');\n\n // Polyfill `currentScript` for browsers without it.\n let currentScript = null;\n if ('currentScript' in document === false) {\n Object.defineProperty(document, 'currentScript', {\n get() {\n return currentScript ||\n // NOTE: only works when called in synchronously executing code.\n // readyState should check if `loading` but IE10 is\n // interactive when scripts run so we cheat. This is not needed by\n // html-imports polyfill but helps generally polyfill `currentScript`.\n (document.readyState !== 'complete' ?\n document.scripts[document.scripts.length - 1] : null);\n },\n configurable: true\n });\n }\n\n /**\n * @param {Array|NodeList|NamedNodeMap} list\n * @param {!Function} callback\n * @param {boolean=} inverseOrder\n */\n const forEach = (list, callback, inverseOrder) => {\n const length = list ? list.length : 0;\n const increment = inverseOrder ? -1 : 1;\n let i = inverseOrder ? length - 1 : 0;\n for (; i < length && i >= 0; i = i + increment) {\n callback(list[i], i);\n }\n };\n\n /**\n * @param {!Node} node\n * @param {!string} selector\n * @return {!NodeList<!Element>}\n */\n const QSA = (node, selector) => {\n // IE 11 throws a SyntaxError if a node with no children is queried with\n // a selector containing the `:not([type])` syntax.\n if (!node.childNodes.length) {\n return emptyNodeList;\n }\n return node.querySelectorAll(selector);\n };\n\n /**\n * @param {!DocumentFragment} fragment\n */\n const replaceScripts = (fragment) => {\n forEach(QSA(fragment, 'template'), template => {\n forEach(QSA(template.content, scriptsSelector), script => {\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n forEach(script.attributes, attr => clone.setAttribute(attr.name, attr.value));\n clone.textContent = script.textContent;\n script.parentNode.replaceChild(clone, script);\n });\n replaceScripts(template.content);\n });\n };\n\n /********************* path fixup *********************/\n const CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n const CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n const STYLESHEET_REGEXP = /(<link[^>]*)(rel=['|\"]?stylesheet['|\"]?[^>]*>)/g;\n\n // path fixup: style elements in imports must be made relative to the main\n // document. We fixup url's in url() and @import.\n const Path = {\n\n fixUrls(element, base) {\n if (element.href) {\n element.setAttribute('href',\n Path.resolveUrl(element.getAttribute('href'), base));\n }\n if (element.src) {\n element.setAttribute('src',\n Path.resolveUrl(element.getAttribute('src'), base));\n }\n if (element.localName === 'style') {\n const r = Path.replaceUrls(element.textContent, base, CSS_URL_REGEXP);\n element.textContent = Path.replaceUrls(r, base, CSS_IMPORT_REGEXP);\n }\n },\n\n replaceUrls(text, linkUrl, regexp) {\n return text.replace(regexp, (m, pre, url, post) => {\n let urlPath = url.replace(/[\"']/g, '');\n if (linkUrl) {\n urlPath = Path.resolveUrl(urlPath, linkUrl);\n }\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n },\n\n resolveUrl(url, base) {\n // Lazy feature detection.\n if (Path.__workingURL === undefined) {\n Path.__workingURL = false;\n try {\n const u = new URL('b', 'http://a');\n u.pathname = 'c%20d';\n Path.__workingURL = (u.href === 'http://a/c%20d');\n } catch (e) {}\n }\n\n if (Path.__workingURL) {\n return (new URL(url, base)).href;\n }\n\n // Fallback to creating an anchor into a disconnected document.\n let doc = Path.__tempDoc;\n if (!doc) {\n doc = document.implementation.createHTMLDocument('temp');\n Path.__tempDoc = doc;\n doc.__base = doc.createElement('base');\n doc.head.appendChild(doc.__base);\n doc.__anchor = doc.createElement('a');\n }\n doc.__base.href = base;\n doc.__anchor.href = url;\n return doc.__anchor.href || url;\n }\n };\n\n /********************* Xhr processor *********************/\n const Xhr = {\n\n async: true,\n\n /**\n * @param {!string} url\n * @param {!function(!string, string=)} success\n * @param {!function(!string)} fail\n */\n load(url, success, fail) {\n if (!url) {\n fail('error: href must be specified');\n } else if (url.match(/^data:/)) {\n // Handle Data URI Scheme\n const pieces = url.split(',');\n const header = pieces[0];\n let resource = pieces[1];\n if (header.indexOf(';base64') > -1) {\n resource = atob(resource);\n } else {\n resource = decodeURIComponent(resource);\n }\n success(resource);\n } else {\n const request = new XMLHttpRequest();\n request.open('GET', url, Xhr.async);\n request.onload = () => {\n // Servers redirecting an import can add a Location header to help us\n // polyfill correctly. Handle relative and full paths.\n // Prefer responseURL which already resolves redirects\n // https://xhr.spec.whatwg.org/#the-responseurl-attribute\n let redirectedUrl = request.responseURL || request.getResponseHeader('Location');\n if (redirectedUrl && redirectedUrl.indexOf('/') === 0) {\n // In IE location.origin might not work\n // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7\n const origin = (location.origin || location.protocol + '//' + location.host);\n redirectedUrl = origin + redirectedUrl;\n }\n const resource = /** @type {string} */ (request.response || request.responseText);\n if (request.status === 304 || request.status === 0 ||\n request.status >= 200 && request.status < 300) {\n success(resource, redirectedUrl);\n } else {\n fail(resource);\n }\n };\n request.send();\n }\n }\n };\n\n /********************* importer *********************/\n\n const isIE = /Trident/.test(navigator.userAgent) ||\n /Edge\\/\\d./i.test(navigator.userAgent);\n\n const importSelector = 'link[rel=import]';\n\n // Used to disable loading of resources.\n const importDisableType = 'import-disable';\n\n const disabledLinkSelector = `link[rel=stylesheet][href][type=${importDisableType}]`;\n\n const scriptsSelector = `script:not([type]),script[type=\"application/javascript\"],` +\n `script[type=\"text/javascript\"]`;\n\n const importDependenciesSelector = `${importSelector},${disabledLinkSelector},` +\n `style:not([type]),link[rel=stylesheet][href]:not([type]),` + scriptsSelector;\n\n const importDependencyAttr = 'import-dependency';\n\n const rootImportSelector = `${importSelector}:not([${importDependencyAttr}])`;\n\n const pendingScriptsSelector = `script[${importDependencyAttr}]`;\n\n const pendingStylesSelector = `style[${importDependencyAttr}],` +\n `link[rel=stylesheet][${importDependencyAttr}]`;\n\n /**\n * Importer will:\n * - load any linked import documents (with deduping)\n * - whenever an import is loaded, prompt the parser to try to parse\n * - observe imported documents for new elements (these are handled via the\n * dynamic importer)\n */\n class Importer {\n constructor() {\n this.documents = {};\n // Used to keep track of pending loads, so that flattening and firing of\n // events can be done when all resources are ready.\n this.inflight = 0;\n this.dynamicImportsMO = new MutationObserver(m => this.handleMutations(m));\n // Observe changes on <head>.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n // 1. Load imports contents\n // 2. Assign them to first import links on the document\n // 3. Wait for import styles & scripts to be done loading/running\n // 4. Fire load/error events\n this.loadImports(document);\n }\n\n /**\n * @param {!(HTMLDocument|DocumentFragment|Element)} doc\n */\n loadImports(doc) {\n const links = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(links, link => this.loadImport(link));\n }\n\n /**\n * @param {!HTMLLinkElement} link\n */\n loadImport(link) {\n const url = link.href;\n // This resource is already being handled by another import.\n if (this.documents[url] !== undefined) {\n // If import is already loaded, we can safely associate it to the link\n // and fire the load/error event.\n const imp = this.documents[url];\n if (imp && imp['__loaded']) {\n link['__import'] = imp;\n this.fireEventIfNeeded(link);\n }\n return;\n }\n this.inflight++;\n // Mark it as pending to notify others this url is being loaded.\n this.documents[url] = 'pending';\n Xhr.load(url, (resource, redirectedUrl) => {\n const doc = this.makeDocument(resource, redirectedUrl || url);\n this.documents[url] = doc;\n this.inflight--;\n // Load subtree.\n this.loadImports(doc);\n this.processImportsIfLoadingDone();\n }, () => {\n // If load fails, handle error.\n this.documents[url] = null;\n this.inflight--;\n this.processImportsIfLoadingDone();\n });\n }\n\n /**\n * Creates a new document containing resource and normalizes urls accordingly.\n * @param {string=} resource\n * @param {string=} url\n * @return {!DocumentFragment}\n */\n makeDocument(resource, url) {\n if (!resource) {\n return document.createDocumentFragment();\n }\n\n if (isIE) {\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order. We disable the loading by\n // setting the type before setting innerHTML to avoid loading\n // resources twice.\n resource = resource.replace(STYLESHEET_REGEXP, (match, p1, p2) => {\n if (match.indexOf('type=') === -1) {\n return `${p1} type=${importDisableType} ${p2}`;\n }\n return match;\n });\n }\n\n let content;\n const template = /** @type {!HTMLTemplateElement} */\n (document.createElement('template'));\n template.innerHTML = resource;\n if (template.content) {\n content = template.content;\n // Clone scripts inside templates since they won't execute when the\n // hosting template is cloned.\n replaceScripts(content);\n } else {\n // <template> not supported, create fragment and move content into it.\n content = document.createDocumentFragment();\n while (template.firstChild) {\n content.appendChild(template.firstChild);\n }\n }\n\n // Support <base> in imported docs. Resolve url and remove its href.\n const baseEl = content.querySelector('base');\n if (baseEl) {\n url = Path.resolveUrl(baseEl.getAttribute('href'), url);\n baseEl.removeAttribute('href');\n }\n\n const n$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)>} */\n (QSA(content, importDependenciesSelector));\n // For source map hints.\n let inlineScriptIndex = 0;\n forEach(n$, n => {\n // Listen for load/error events, then fix urls.\n whenElementLoaded(n);\n Path.fixUrls(n, url);\n // Mark for easier selectors.\n n.setAttribute(importDependencyAttr, '');\n // Generate source map hints for inline scripts.\n if (n.localName === 'script' && !n.src && n.textContent) {\n const num = inlineScriptIndex ? `-${inlineScriptIndex}` : '';\n const content = n.textContent + `\\n//# sourceURL=${url}${num}.js\\n`;\n // We use the src attribute so it triggers load/error events, and it's\n // easier to capture errors (e.g. parsing) like this.\n n.setAttribute('src', 'data:text/javascript;charset=utf-8,' + encodeURIComponent(content));\n n.textContent = '';\n inlineScriptIndex++;\n }\n });\n return content;\n }\n\n /**\n * Waits for loaded imports to finish loading scripts and styles, then fires\n * the load/error events.\n */\n processImportsIfLoadingDone() {\n // Wait until all resources are ready, then load import resources.\n if (this.inflight) return;\n\n // Stop observing, flatten & load resource, then restart observing <head>.\n this.dynamicImportsMO.disconnect();\n this.flatten(document);\n // We wait for styles to load, and at the same time we execute the scripts,\n // then fire the load/error events for imports to have faster whenReady\n // callback execution.\n // NOTE: This is different for native behavior where scripts would be\n // executed after the styles before them are loaded.\n // To achieve that, we could select pending styles and scripts in the\n // document and execute them sequentially in their dom order.\n let scriptsOk = false,\n stylesOk = false;\n const onLoadingDone = () => {\n if (stylesOk && scriptsOk) {\n // Catch any imports that might have been added while we\n // weren't looking, wait for them as well.\n this.loadImports(document);\n if (this.inflight) return;\n\n // Restart observing.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n this.fireEvents();\n }\n }\n this.waitForStyles(() => {\n stylesOk = true;\n onLoadingDone();\n });\n this.runScripts(() => {\n scriptsOk = true;\n onLoadingDone();\n });\n }\n\n /**\n * @param {!HTMLDocument} doc\n */\n flatten(doc) {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(n$, n => {\n const imp = this.documents[n.href];\n n['__import'] = /** @type {!Document} */ (imp);\n if (imp && imp.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n // We set the .import to be the link itself, and update its readyState.\n // Other links with the same href will point to this link.\n this.documents[n.href] = n;\n n.readyState = 'loading';\n n['__import'] = n;\n this.flatten(imp);\n n.appendChild(imp);\n }\n });\n }\n\n /**\n * Replaces all the imported scripts with a clone in order to execute them.\n * Updates the `currentScript`.\n * @param {!function()} callback\n */\n runScripts(callback) {\n const s$ = QSA(document, pendingScriptsSelector);\n const l = s$.length;\n const cloneScript = i => {\n if (i < l) {\n // The pending scripts have been generated through innerHTML and\n // browsers won't execute them for security reasons. We cannot use\n // s.cloneNode(true) either, the only way to run the script is manually\n // creating a new element and copying its attributes.\n const s = s$[i];\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n // Remove import-dependency attribute to avoid double cloning.\n s.removeAttribute(importDependencyAttr);\n forEach(s.attributes, attr => clone.setAttribute(attr.name, attr.value));\n // Update currentScript and replace original with clone script.\n currentScript = clone;\n s.parentNode.replaceChild(clone, s);\n whenElementLoaded(clone, () => {\n currentScript = null;\n cloneScript(i + 1);\n });\n } else {\n callback();\n }\n };\n cloneScript(0);\n }\n\n /**\n * Waits for all the imported stylesheets/styles to be loaded.\n * @param {!function()} callback\n */\n waitForStyles(callback) {\n const s$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLStyleElement)>} */\n (QSA(document, pendingStylesSelector));\n let pending = s$.length;\n if (!pending) {\n callback();\n return;\n }\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10472273/\n // If there is one <link rel=stylesheet> imported, we must move all imported\n // links and styles to <head>.\n const needsMove = isIE && !!document.querySelector(disabledLinkSelector);\n forEach(s$, s => {\n // Listen for load/error events, remove selector once is done loading.\n whenElementLoaded(s, () => {\n s.removeAttribute(importDependencyAttr);\n if (--pending === 0) {\n callback();\n }\n });\n // Check if was already moved to head, to handle the case where the element\n // has already been moved but it is still loading.\n if (needsMove && s.parentNode !== document.head) {\n // Replace the element we're about to move with a placeholder.\n const placeholder = document.createElement(s.localName);\n // Add reference of the moved element.\n placeholder['__appliedElement'] = s;\n // Disable this from appearing in document.styleSheets.\n placeholder.setAttribute('type', 'import-placeholder');\n // Append placeholder next to the sibling, and move original to <head>.\n s.parentNode.insertBefore(placeholder, s.nextSibling);\n let newSibling = importForElement(s);\n while (newSibling && importForElement(newSibling)) {\n newSibling = importForElement(newSibling);\n }\n if (newSibling.parentNode !== document.head) {\n newSibling = null;\n }\n document.head.insertBefore(s, newSibling);\n // Enable the loading of <link rel=stylesheet>.\n s.removeAttribute('type');\n }\n });\n }\n\n /**\n * Fires load/error events for imports in the right order .\n */\n fireEvents() {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n // Inverse order to have events firing bottom-up.\n forEach(n$, n => this.fireEventIfNeeded(n), true);\n }\n\n /**\n * Fires load/error event for the import if this wasn't done already.\n * @param {!HTMLLinkElement} link\n */\n fireEventIfNeeded(link) {\n // Don't fire twice same event.\n if (!link['__loaded']) {\n link['__loaded'] = true;\n // Update link's import readyState.\n link.import && (link.import.readyState = 'complete');\n const eventType = link.import ? 'load' : 'error';\n link.dispatchEvent(newCustomEvent(eventType, {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }));\n }\n }\n\n /**\n * @param {Array<MutationRecord>} mutations\n */\n handleMutations(mutations) {\n forEach(mutations, m => forEach(m.addedNodes, elem => {\n if (elem && elem.nodeType === Node.ELEMENT_NODE) {\n // NOTE: added scripts are not updating currentScript in IE.\n if (isImportLink(elem)) {\n this.loadImport( /** @type {!HTMLLinkElement} */ (elem));\n } else {\n this.loadImports( /** @type {!Element} */ (elem));\n }\n }\n }));\n }\n }\n\n /**\n * @param {!Node} node\n * @return {boolean}\n */\n const isImportLink = node => {\n return node.nodeType === Node.ELEMENT_NODE && node.localName === 'link' &&\n ( /** @type {!HTMLLinkElement} */ (node).rel === 'import');\n };\n\n /**\n * Waits for an element to finish loading. If already done loading, it will\n * mark the element accordingly.\n * @param {!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)} element\n * @param {function()=} callback\n */\n const whenElementLoaded = (element, callback) => {\n if (element['__loaded']) {\n callback && callback();\n } else if ((element.localName === 'script' && !element.src) ||\n (element.localName === 'style' && !element.firstChild)) {\n // Inline scripts and empty styles don't trigger load/error events,\n // consider them already loaded.\n element['__loaded'] = true;\n callback && callback();\n } else {\n const onLoadingDone = event => {\n element.removeEventListener(event.type, onLoadingDone);\n element['__loaded'] = true;\n callback && callback();\n };\n element.addEventListener('load', onLoadingDone);\n // NOTE: We listen only for load events in IE/Edge, because in IE/Edge\n // <style> with @import will fire error events for each failing @import,\n // and finally will trigger the load event when all @import are\n // finished (even if all fail).\n if (!isIE || element.localName !== 'style') {\n element.addEventListener('error', onLoadingDone);\n }\n }\n }\n\n /**\n * Calls the callback when all imports in the document at call time\n * (or at least document ready) have loaded. Callback is called synchronously\n * if imports are already done loading.\n * @param {function()=} callback\n */\n const whenReady = callback => {\n // 1. ensure the document is in a ready state (has dom), then\n // 2. watch for loading of imports and call callback when done\n whenDocumentReady(() => whenImportsReady(() => callback && callback()));\n }\n\n /**\n * Invokes the callback when document is in ready state. Callback is called\n * synchronously if document is already done loading.\n * @param {!function()} callback\n */\n const whenDocumentReady = callback => {\n const stateChanged = () => {\n // NOTE: Firefox can hit readystate interactive without document.body existing.\n // This is anti-spec, but we handle it here anyways by waiting for next change.\n if (document.readyState !== 'loading' && !!document.body) {\n document.removeEventListener('readystatechange', stateChanged);\n callback();\n }\n }\n document.addEventListener('readystatechange', stateChanged);\n stateChanged();\n }\n\n /**\n * Invokes the callback after all imports are loaded. Callback is called\n * synchronously if imports are already done loading.\n * @param {!function()} callback\n */\n const whenImportsReady = callback => {\n let imports = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, rootImportSelector));\n let pending = imports.length;\n if (!pending) {\n callback();\n return;\n }\n forEach(imports, imp => whenElementLoaded(imp, () => {\n if (--pending === 0) {\n callback();\n }\n }));\n }\n\n /**\n * Returns the import document containing the element.\n * @param {!Node} element\n * @return {HTMLLinkElement|Document|undefined}\n */\n const importForElement = element => {\n if (useNative) {\n // Return only if not in the main doc!\n return element.ownerDocument !== document ? element.ownerDocument : null;\n }\n let doc = element['__importDoc'];\n if (!doc && element.parentNode) {\n doc = /** @type {!Element} */ (element.parentNode);\n if (typeof doc.closest === 'function') {\n // Element.closest returns the element itself if it matches the selector,\n // so we search the closest import starting from the parent.\n doc = doc.closest(importSelector);\n } else {\n // Walk up the parent tree until we find an import.\n while (!isImportLink(doc) && (doc = doc.parentNode)) {}\n }\n element['__importDoc'] = doc;\n }\n return doc;\n }\n\n let importer = null;\n /**\n * Ensures imports contained in the element are imported.\n * Use this to handle dynamic imports attached to body.\n * @param {!(HTMLDocument|Element)} doc\n */\n const loadImports = (doc) => {\n if (importer) {\n importer.loadImports(doc);\n }\n };\n\n const newCustomEvent = (type, params) => {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(type, params);\n }\n const event = /** @type {!CustomEvent} */ (document.createEvent('CustomEvent'));\n event.initCustomEvent(type, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return event;\n };\n\n if (useNative) {\n // Check for imports that might already be done loading by the time this\n // script is actually executed. Native imports are blocking, so the ones\n // available in the document by this time should already have failed\n // or have .import defined.\n const imps = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n forEach(imps, imp => {\n if (!imp.import || imp.import.readyState !== 'loading') {\n imp['__loaded'] = true;\n }\n });\n // Listen for load/error events to capture dynamically added scripts.\n /**\n * @type {!function(!Event)}\n */\n const onLoadingDone = event => {\n const elem = /** @type {!Element} */ (event.target);\n if (isImportLink(elem)) {\n elem['__loaded'] = true;\n }\n };\n document.addEventListener('load', onLoadingDone, true /* useCapture */ );\n document.addEventListener('error', onLoadingDone, true /* useCapture */ );\n } else {\n // Override baseURI so that imported elements' baseURI can be used seemlessly\n // on native or polyfilled html-imports.\n // NOTE: a <link rel=import> will have `link.baseURI === link.href`, as the link\n // itself is used as the `import` document.\n /** @type {Object|undefined} */\n const native_baseURI = Object.getOwnPropertyDescriptor(Node.prototype, 'baseURI');\n // NOTE: if not configurable (e.g. safari9), set it on the Element prototype. \n const klass = !native_baseURI || native_baseURI.configurable ? Node : Element;\n Object.defineProperty(klass.prototype, 'baseURI', {\n get() {\n const ownerDoc = /** @type {HTMLLinkElement} */ (isImportLink(this) ? this : importForElement(this));\n if (ownerDoc) return ownerDoc.href;\n // Use native baseURI if possible.\n if (native_baseURI && native_baseURI.get) return native_baseURI.get.call(this);\n // Polyfill it if not available.\n const base = /** @type {HTMLBaseElement} */ (document.querySelector('base'));\n return (base || window.location).href;\n },\n configurable: true,\n enumerable: true\n });\n\n // Define 'import' read-only property.\n Object.defineProperty(HTMLLinkElement.prototype, 'import', {\n get() {\n return /** @type {HTMLLinkElement} */ (this)['__import'] || null;\n },\n configurable: true,\n enumerable: true\n });\n\n whenDocumentReady(() => {\n importer = new Importer()\n });\n }\n\n /**\n Add support for the `HTMLImportsLoaded` event and the `HTMLImports.whenReady`\n method. This api is necessary because unlike the native implementation,\n script elements do not force imports to resolve. Instead, users should wrap\n code in either an `HTMLImportsLoaded` handler or after load time in an\n `HTMLImports.whenReady(callback)` call.\n\n NOTE: This module also supports these apis under the native implementation.\n Therefore, if this file is loaded, the same code can be used under both\n the polyfill and native implementation.\n */\n whenReady(() => document.dispatchEvent(newCustomEvent('HTMLImportsLoaded', {\n cancelable: true,\n bubbles: true,\n detail: undefined\n })));\n\n // exports\n scope.useNative = useNative;\n scope.whenReady = whenReady;\n scope.importForElement = importForElement;\n scope.loadImports = loadImports;\n\n})(window.HTMLImports = (window.HTMLImports || {}));",null,null,null,null,null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n\nexport class ShadyData {\n constructor() {\n /** @type {ShadowRoot} */\n this.root = null;\n /** @type {ShadowRoot} */\n this.publicRoot = null;\n this.dirty = false;\n this.observer = null;\n /** @type {Array<Node>} */\n this.assignedNodes = null;\n /** @type {Element} */\n this.assignedSlot = null;\n /** @type {Array<Node>} */\n this._previouslyAssignedNodes = null;\n /** @type {Element} */\n this._prevAssignedSlot = null;\n /** @type {Array<Node>} */\n this.flattenedNodes = null;\n this.ownerShadyRoot = undefined;\n /** @type {Node|undefined} */\n this.parentNode = undefined;\n /** @type {Node|undefined} */\n this.firstChild = undefined;\n /** @type {Node|undefined} */\n this.lastChild = undefined;\n /** @type {Node|undefined} */\n this.previousSibling = undefined;\n /** @type {Node|undefined} */\n this.nextSibling = undefined;\n /** @type {Array<Node>|undefined} */\n this.childNodes = undefined;\n this.__outsideAccessors = false;\n this.__insideAccessors = false;\n }\n\n toJSON() {\n return {};\n }\n}\n\nexport function ensureShadyDataForNode(node) {\n if (!node.__shady) {\n node.__shady = new ShadyData();\n }\n return node.__shady;\n}\n\nexport function shadyDataForNode(node) {\n return node && node.__shady;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport {shadyDataForNode} from './shady-data.js';\n\nexport let settings = window['ShadyDOM'] || {};\n\nsettings.hasNativeShadowDOM = Boolean(Element.prototype.attachShadow && Node.prototype.getRootNode);\n\nlet desc = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild');\n\nsettings.hasDescriptors = Boolean(desc && desc.configurable && desc.get);\nsettings.inUse = settings['force'] || !settings.hasNativeShadowDOM;\n\n// Default to using native accessors (instead of treewalker) only for\n// IE/Edge where they are faster.\nconst IS_IE = navigator.userAgent.match('Trident');\nconst IS_EDGE = navigator.userAgent.match('Edge');\nif (settings.useNativeAccessors === undefined) {\n settings.useNativeAccessors = settings.hasDescriptors && (IS_IE || IS_EDGE);\n}\n\nexport function isTrackingLogicalChildNodes(node) {\n const nodeData = shadyDataForNode(node);\n return (nodeData && nodeData.firstChild !== undefined);\n}\n\nexport function isShadyRoot(obj) {\n return Boolean(obj._localName === 'ShadyRoot');\n}\n\nexport function ownerShadyRootForNode(node) {\n let root = node.getRootNode();\n if (isShadyRoot(root)) {\n return root;\n }\n}\n\nlet p = Element.prototype;\nlet matches = p.matches || p.matchesSelector ||\n p.mozMatchesSelector || p.msMatchesSelector ||\n p.oMatchesSelector || p.webkitMatchesSelector;\n\nexport function matchesSelector(element, selector) {\n return matches.call(element, selector);\n}\n\nfunction copyOwnProperty(name, source, target) {\n let pd = Object.getOwnPropertyDescriptor(source, name);\n if (pd) {\n Object.defineProperty(target, name, pd);\n }\n}\n\nexport function extend(target, source) {\n if (target && source) {\n let n$ = Object.getOwnPropertyNames(source);\n for (let i=0, n; (i<n$.length) && (n=n$[i]); i++) {\n copyOwnProperty(n, source, target);\n }\n }\n return target || source;\n}\n\nexport function extendAll(target, ...sources) {\n for (let i=0; i < sources.length; i++) {\n extend(target, sources[i]);\n }\n return target;\n}\n\nexport function mixin(target, source) {\n for (var i in source) {\n target[i] = source[i];\n }\n return target;\n}\n\nexport function patchPrototype(obj, mixin) {\n let proto = Object.getPrototypeOf(obj);\n if (!proto.hasOwnProperty('__patchProto')) {\n let patchProto = Object.create(proto);\n patchProto.__sourceProto = proto;\n extend(patchProto, mixin);\n proto['__patchProto'] = patchProto;\n }\n // old browsers don't have setPrototypeOf\n obj.__proto__ = proto['__patchProto'];\n}\n\n\nlet twiddle = document.createTextNode('');\nlet content = 0;\nlet queue = [];\nnew MutationObserver(() => {\n while (queue.length) {\n // catch errors in user code...\n try {\n queue.shift()();\n } catch(e) {\n // enqueue another record and throw\n twiddle.textContent = content++;\n throw(e);\n }\n }\n}).observe(twiddle, {characterData: true});\n\n// use MutationObserver to get microtask async timing.\nexport function microtask(callback) {\n queue.push(callback);\n twiddle.textContent = content++;\n}\n\nexport const hasDocumentContains = Boolean(document.contains);\n\nexport function contains(container, node) {\n while (node) {\n if (node == container) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\n\n// render enqueuer/flusher\nlet flushList = [];\nlet scheduled;\nexport function enqueue(callback) {\n if (!scheduled) {\n scheduled = true;\n utils.microtask(flush);\n }\n flushList.push(callback);\n}\n\nexport function flush() {\n scheduled = false;\n let didFlush = Boolean(flushList.length);\n while (flushList.length) {\n flushList.shift()();\n }\n return didFlush;\n}\n\nflush['list'] = flushList;\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {ensureShadyDataForNode} from './shady-data.js';\n\nclass AsyncObserver {\n\n constructor() {\n this._scheduled = false;\n this.addedNodes = [];\n this.removedNodes = [];\n this.callbacks = new Set();\n }\n\n schedule() {\n if (!this._scheduled) {\n this._scheduled = true;\n utils.microtask(() => {\n this.flush();\n });\n }\n }\n\n flush() {\n if (this._scheduled) {\n this._scheduled = false;\n let mutations = this.takeRecords();\n if (mutations.length) {\n this.callbacks.forEach(function(cb) {\n cb(mutations);\n });\n }\n }\n }\n\n takeRecords() {\n if (this.addedNodes.length || this.removedNodes.length) {\n let mutations = [{\n addedNodes: this.addedNodes,\n removedNodes: this.removedNodes\n }];\n this.addedNodes = [];\n this.removedNodes = [];\n return mutations;\n }\n return [];\n }\n\n}\n\n// TODO(sorvell): consider instead polyfilling MutationObserver\n// directly so that users do not have to fork their code.\n// Supporting the entire api may be challenging: e.g. filtering out\n// removed nodes in the wrong scope and seeing non-distributing\n// subtree child mutations.\nexport let observeChildren = function(node, callback) {\n const sd = ensureShadyDataForNode(node);\n if (!sd.observer) {\n sd.observer = new AsyncObserver();\n }\n sd.observer.callbacks.add(callback);\n let observer = sd.observer;\n return {\n _callback: callback,\n _observer: observer,\n _node: node,\n takeRecords() {\n return observer.takeRecords()\n }\n };\n}\n\nexport let unobserveChildren = function(handle) {\n let observer = handle && handle._observer;\n if (observer) {\n observer.callbacks.delete(handle._callback);\n if (!observer.callbacks.size) {\n ensureShadyDataForNode(handle._node).observer = null;\n }\n }\n}\n\nexport function filterMutations(mutations, target) {\n /** @const {Node} */\n const targetRootNode = target.getRootNode();\n return mutations.map(function(mutation) {\n /** @const {boolean} */\n const mutationInScope = (targetRootNode === mutation.target.getRootNode());\n if (mutationInScope && mutation.addedNodes) {\n let nodes = Array.from(mutation.addedNodes).filter(function(n) {\n return (targetRootNode === n.getRootNode());\n });\n if (nodes.length) {\n mutation = Object.create(mutation);\n Object.defineProperty(mutation, 'addedNodes', {\n value: nodes,\n configurable: true\n });\n return mutation;\n }\n } else if (mutationInScope) {\n return mutation;\n }\n }).filter(function(m) { return m});\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport let appendChild = Element.prototype.appendChild;\nexport let insertBefore = Element.prototype.insertBefore;\nexport let replaceChild = Element.prototype.replaceChild;\nexport let removeChild = Element.prototype.removeChild;\nexport let setAttribute = Element.prototype.setAttribute;\nexport let removeAttribute = Element.prototype.removeAttribute;\nexport let cloneNode = Element.prototype.cloneNode;\nexport let importNode = Document.prototype.importNode;\nexport let addEventListener = Element.prototype.addEventListener;\nexport let removeEventListener = Element.prototype.removeEventListener;\nexport let windowAddEventListener = Window.prototype.addEventListener;\nexport let windowRemoveEventListener = Window.prototype.removeEventListener;\nexport let dispatchEvent = Element.prototype.dispatchEvent;\nexport let contains = Node.prototype.contains || HTMLElement.prototype.contains;\nexport let getElementById = Document.prototype.getElementById;\nexport let elementQuerySelector = Element.prototype.querySelector;\nexport let fragmentQuerySelector = DocumentFragment.prototype.querySelector;\nexport let documentQuerySelector = Document.prototype.querySelector;\nexport let querySelector = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelector.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelector.call(this, selector);\n default:\n return fragmentQuerySelector.call(this, selector);\n }\n};\nexport let elementQuerySelectorAll = Element.prototype.querySelectorAll;\nexport let fragmentQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\nexport let documentQuerySelectorAll = Document.prototype.querySelectorAll;\nexport let querySelectorAll = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelectorAll.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelectorAll.call(this, selector);\n default:\n return fragmentQuerySelectorAll.call(this, selector);\n }\n};","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n// Cribbed from ShadowDOM polyfill\n// https://github.com/webcomponents/webcomponentsjs/blob/master/src/ShadowDOM/wrappers/HTMLElement.js#L28\n/////////////////////////////////////////////////////////////////////////////\n// innerHTML and outerHTML\n\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\nlet escapeAttrRegExp = /[&\\u00A0\"]/g;\nlet escapeDataRegExp = /[&\\u00A0<>]/g;\n\nfunction escapeReplace(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n}\n\nfunction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n}\n\nfunction escapeData(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n}\n\nfunction makeSet(arr) {\n let set = {};\n for (let i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n}\n\n// http://www.whatwg.org/specs/web-apps/current-work/#void-elements\nlet voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nlet plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n]);\n\n/**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\nexport function getOuterHTML(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n let tagName = node.localName;\n let s = '<' + tagName;\n let attrs = node.attributes;\n for (let i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n let data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Function=} callback\n */\nexport function getInnerHTML(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n let s = '';\n let c$ = callback ? callback(node) : node.childNodes;\n for (let i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {getInnerHTML} from './innerHTML.js';\n\nlet nodeWalker = document.createTreeWalker(document, NodeFilter.SHOW_ALL,\n null, false);\n\nlet elementWalker = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT,\n null, false);\n\nexport function parentNode(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.parentNode();\n}\n\nexport function firstChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.firstChild();\n}\n\nexport function lastChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.lastChild();\n}\n\nexport function previousSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.previousSibling();\n}\n\nexport function nextSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.nextSibling();\n}\n\nexport function childNodes(node) {\n let nodes = [];\n nodeWalker.currentNode = node;\n let n = nodeWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = nodeWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function parentElement(node) {\n elementWalker.currentNode = node;\n return elementWalker.parentNode();\n}\n\nexport function firstElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.firstChild();\n}\n\nexport function lastElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.lastChild();\n}\n\nexport function previousElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.previousSibling();\n}\n\nexport function nextElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.nextSibling();\n}\n\nexport function children(node) {\n let nodes = [];\n elementWalker.currentNode = node;\n let n = elementWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = elementWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function innerHTML(node) {\n return getInnerHTML(node, (n) => childNodes(n));\n}\n\nexport function textContent(node) {\n /* eslint-disable no-case-declarations */\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n let textWalker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT,\n null, false);\n let content = '', n;\n while ( (n = textWalker.nextNode()) ) {\n // TODO(sorvell): can't use textContent since we patch it on Node.prototype!\n // However, should probably patch it only on element.\n content += n.nodeValue;\n }\n return content;\n default:\n return node.nodeValue;\n }\n /* eslint-enable */\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport * as utils from './utils.js';\n\nconst hasDescriptors = utils.settings.hasDescriptors;\n\n// Find descriptor on the \"lowest\" native prototype. Safe as these are not\n// overridden and we call these on nodes.\nconst nativeProtos = [Node.prototype, Element.prototype, HTMLElement.prototype];\n// note, avoid Array.find for IE11 compat.\nfunction findNativeProtoWithDescriptor(name) {\n for (let i=0; i < nativeProtos.length; i++) {\n const proto = nativeProtos[i];\n if (proto.hasOwnProperty(name)) {\n return proto;\n }\n }\n}\nfunction findNodeDescriptor(name) {\n const proto = findNativeProtoWithDescriptor(name);\n if (!proto) {\n throw Error(`Could not find descriptor for ${name}`);\n }\n return Object.getOwnPropertyDescriptor(proto, name);\n}\n\nexport const nodeAccessors = hasDescriptors ? {\n parentNode: findNodeDescriptor('parentNode'),\n firstChild: findNodeDescriptor('firstChild'),\n lastChild: findNodeDescriptor('lastChild'),\n previousSibling: findNodeDescriptor('previousSibling'),\n nextSibling: findNodeDescriptor('nextSibling'),\n childNodes: findNodeDescriptor('childNodes'),\n parentElement: findNodeDescriptor('parentElement'),\n previousElementSibling: findNodeDescriptor('previousElementSibling'),\n nextElementSibling: findNodeDescriptor('nextElementSibling'),\n innerHTML: findNodeDescriptor('innerHTML'),\n textContent: findNodeDescriptor('textContent'),\n firstElementChild: findNodeDescriptor('firstElementChild'),\n lastElementChild: findNodeDescriptor('lastElementChild'),\n children: findNodeDescriptor('children'),\n} : {};\n\nexport const fragmentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'children')\n} : {};\n\nexport const documentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n Document.prototype, 'children')\n} : {};\n\nexport function parentNode(node) {\n return nodeAccessors.parentNode.get.call(node);\n}\n\nexport function firstChild(node) {\n return nodeAccessors.firstChild.get.call(node);\n}\n\nexport function lastChild(node) {\n return nodeAccessors.lastChild.get.call(node);\n}\n\nexport function previousSibling(node) {\n return nodeAccessors.previousSibling.get.call(node);\n}\n\nexport function nextSibling(node) {\n return nodeAccessors.nextSibling.get.call(node);\n}\n\nexport function childNodes(node) {\n return Array.prototype.slice.call(nodeAccessors.childNodes.get.call(node));\n}\n\nexport function parentElement(node) {\n return nodeAccessors.parentElement.get.call(node);\n}\n\nexport function previousElementSibling(node) {\n return nodeAccessors.previousElementSibling.get.call(node);\n}\n\nexport function nextElementSibling(node) {\n return nodeAccessors.nextElementSibling.get.call(node);\n}\n\nexport function innerHTML(node) {\n return nodeAccessors.innerHTML.get.call(node);\n}\n\nexport function textContent(node) {\n return nodeAccessors.textContent.get.call(node);\n}\n\nexport function children(node) {\n let children;\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n children = fragmentAccessors.children.get.call(node);\n break;\n case Node.DOCUMENT_NODE:\n children = documentAccessors.children.get.call(node);\n break;\n default:\n children = nodeAccessors.children.get.call(node);\n break;\n }\n return Array.prototype.slice.call(children);\n}\n\nexport function firstElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.firstElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.firstElementChild.get.call(node);\n default:\n return nodeAccessors.firstElementChild.get.call(node);\n }\n}\n\nexport function lastElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.lastElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.lastElementChild.get.call(node);\n default:\n return nodeAccessors.lastElementChild.get.call(node);\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as nativeTreeWalker from './native-tree-walker.js';\nimport * as nativeTreeAccessors from './native-tree-accessors.js';\nimport * as utils from './utils.js';\n\nexport const accessors = utils.settings.useNativeAccessors ?\n nativeTreeAccessors : nativeTreeWalker;","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {getInnerHTML} from './innerHTML.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {nodeAccessors as nativeAccessors} from './native-tree-accessors.js';\nimport {contains as nativeContains} from './native-methods.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nfunction clearNode(node) {\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n}\n\nconst hasDescriptors = utils.settings.hasDescriptors;\nconst inertDoc = document.implementation.createHTMLDocument('inert');\n\nconst nativeIsConnectedAccessors =\n/** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Node.prototype, 'isConnected')\n);\n\nconst nativeIsConnected = nativeIsConnectedAccessors && nativeIsConnectedAccessors.get;\n\nconst nativeActiveElementDescriptor =\n /** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Document.prototype, 'activeElement')\n );\nfunction getDocumentActiveElement() {\n if (nativeActiveElementDescriptor && nativeActiveElementDescriptor.get) {\n return nativeActiveElementDescriptor.get.call(document);\n } else if (!utils.settings.hasDescriptors) {\n return document.activeElement;\n }\n}\n\nfunction activeElementForNode(node) {\n let active = getDocumentActiveElement();\n // In IE11, activeElement might be an empty object if the document is\n // contained in an iframe.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10998788/\n if (!active || !active.nodeType) {\n return null;\n }\n let isShadyRoot = !!(utils.isShadyRoot(node));\n if (node !== document) {\n // If this node isn't a document or shady root, then it doesn't have\n // an active element.\n if (!isShadyRoot) {\n return null;\n }\n // If this shady root's host is the active element or the active\n // element is not a descendant of the host (in the composed tree),\n // then it doesn't have an active element.\n if (node.host === active ||\n !nativeContains.call(node.host, active)) {\n return null;\n }\n }\n // This node is either the document or a shady root of which the active\n // element is a (composed) descendant of its host; iterate upwards to\n // find the active element's most shallow host within it.\n let activeRoot = utils.ownerShadyRootForNode(active);\n while (activeRoot && activeRoot !== node) {\n active = activeRoot.host;\n activeRoot = utils.ownerShadyRootForNode(active);\n }\n if (node === document) {\n // This node is the document, so activeRoot should be null.\n return activeRoot ? null : active;\n } else {\n // This node is a non-document shady root, and it should be\n // activeRoot.\n return activeRoot === node ? active : null;\n }\n}\n\nlet OutsideAccessors = {\n\n parentElement: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n let l = nodeData && nodeData.parentNode;\n if (l && l.nodeType !== Node.ELEMENT_NODE) {\n l = null;\n }\n return l !== undefined ? l : nativeTree.parentElement(this);\n },\n configurable: true\n },\n\n parentNode: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.parentNode;\n return l !== undefined ? l : nativeTree.parentNode(this);\n },\n configurable: true\n },\n\n nextSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.nextSibling;\n return l !== undefined ? l : nativeTree.nextSibling(this);\n },\n configurable: true\n },\n\n previousSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.previousSibling;\n return l !== undefined ? l : nativeTree.previousSibling(this);\n },\n configurable: true\n },\n\n // fragment, element, document\n nextElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.nextSibling !== undefined) {\n let n = this.nextSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.nextElementSibling(this);\n }\n },\n configurable: true\n },\n\n previousElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.previousSibling !== undefined) {\n let n = this.previousSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.previousElementSibling(this);\n }\n },\n configurable: true\n }\n\n};\n\nexport const ClassNameAccessor = {\n className: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return this.getAttribute('class') || '';\n },\n /**\n * @this {HTMLElement}\n */\n set(value) {\n this.setAttribute('class', value);\n },\n configurable: true\n }\n}\n\nexport const IsConnectedAccessor = {\n\n isConnected: {\n /**\n * @this {Node}\n */\n get() {\n if (nativeIsConnected && nativeIsConnected.call(this)) {\n return true;\n }\n if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {\n return false;\n }\n // Fast path for distributed nodes.\n const ownerDocument = this.ownerDocument;\n if (utils.hasDocumentContains) {\n if (nativeContains.call(ownerDocument, this)) {\n return true;\n }\n } else if (ownerDocument.documentElement &&\n nativeContains.call(ownerDocument.documentElement, this)) {\n return true;\n }\n // Slow path for non-distributed nodes.\n let node = this;\n while (node && !(node instanceof Document)) {\n node = node.parentNode || (utils.isShadyRoot(node) ? /** @type {ShadowRoot} */(node).host : undefined);\n }\n return !!(node && node instanceof Document);\n },\n configurable: true\n }\n};\n\nlet InsideAccessors = {\n\n childNodes: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let childNodes;\n if (utils.isTrackingLogicalChildNodes(this)) {\n const nodeData = shadyDataForNode(this);\n if (!nodeData.childNodes) {\n nodeData.childNodes = [];\n for (let n=this.firstChild; n; n=n.nextSibling) {\n nodeData.childNodes.push(n);\n }\n }\n childNodes = nodeData.childNodes;\n } else {\n childNodes = nativeTree.childNodes(this);\n }\n childNodes.item = function(index) {\n return childNodes[index];\n }\n return childNodes;\n },\n configurable: true\n },\n\n childElementCount: {\n /** @this {HTMLElement} */\n get() {\n return this.children.length;\n },\n configurable: true\n },\n\n firstChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.firstChild;\n return l !== undefined ? l : nativeTree.firstChild(this);\n },\n configurable: true\n },\n\n lastChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.lastChild;\n return l !== undefined ? l : nativeTree.lastChild(this);\n },\n configurable: true\n },\n\n textContent: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n let tc = [];\n for (let i = 0, cn = this.childNodes, c; (c = cn[i]); i++) {\n if (c.nodeType !== Node.COMMENT_NODE) {\n tc.push(c.textContent);\n }\n }\n return tc.join('');\n } else {\n return nativeTree.textContent(this);\n }\n },\n /**\n * @this {HTMLElement}\n * @param {string} text\n */\n set(text) {\n if (typeof text === 'undefined' || text === null) {\n text = ''\n }\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n if (!utils.isTrackingLogicalChildNodes(this) && hasDescriptors) {\n // may be removing a nested slot but fast path if we know we are not.\n const firstChild = this.firstChild;\n if (firstChild != this.lastChild ||\n (firstChild && firstChild.nodeType != Node.TEXT_NODE)) {\n clearNode(this);\n }\n nativeAccessors.textContent.set.call(this, text);\n } else {\n clearNode(this);\n // Document fragments must have no childnodes if setting a blank string\n if (text.length > 0 || this.nodeType === Node.ELEMENT_NODE) {\n this.appendChild(document.createTextNode(text));\n }\n }\n break;\n default:\n // TODO(sorvell): can't do this if patch nodeValue.\n this.nodeValue = text;\n break;\n }\n },\n configurable: true\n },\n\n // fragment, element, document\n firstElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.firstChild !== undefined) {\n let n = this.firstChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.firstElementChild(this);\n }\n },\n configurable: true\n },\n\n lastElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.lastChild !== undefined) {\n let n = this.lastChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.lastElementChild(this);\n }\n },\n configurable: true\n },\n\n children: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let children;\n if (utils.isTrackingLogicalChildNodes(this)) {\n children = Array.prototype.filter.call(this.childNodes, function(n) {\n return (n.nodeType === Node.ELEMENT_NODE);\n });\n } else {\n children = nativeTree.children(this);\n }\n children.item = function(index) {\n return children[index];\n }\n return children;\n },\n configurable: true\n },\n\n // element (HTMLElement on IE11)\n innerHTML: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n return getInnerHTML(content);\n } else {\n return nativeTree.innerHTML(this);\n }\n },\n /**\n * @this {HTMLElement}\n */\n set(text) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n clearNode(content);\n let containerName = this.localName;\n // avoid creating a template so we don't have to pull nodes form `.content`\n if (!containerName || containerName === 'template') {\n containerName = 'div';\n }\n const htmlContainer = inertDoc.createElement(containerName);\n if (hasDescriptors) {\n nativeAccessors.innerHTML.set.call(htmlContainer, text);\n } else {\n htmlContainer.innerHTML = text;\n }\n while (htmlContainer.firstChild) {\n content.appendChild(htmlContainer.firstChild);\n }\n },\n configurable: true\n }\n\n};\n\n// Note: Can be patched on element prototype on all browsers.\n// Must be patched on instance on browsers that support native Shadow DOM\n// but do not have builtin accessors (old Chrome).\nexport let ShadowRootAccessor = {\n\n shadowRoot: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n return nodeData && nodeData.publicRoot || null;\n },\n configurable: true\n }\n};\n\n// Note: Can be patched on document prototype on browsers with builtin accessors.\n// Must be patched separately on simulated ShadowRoot.\n// Must be patched as `_activeElement` on browsers without builtin accessors.\nexport let ActiveElementAccessor = {\n\n activeElement: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return activeElementForNode(this);\n },\n /**\n * @this {HTMLElement}\n */\n set() {},\n configurable: true\n }\n\n};\n\n// patch a group of descriptors on an object only if it exists or if the `force`\n// argument is true.\n/**\n * @param {!Object} obj\n * @param {!Object} descriptors\n * @param {boolean=} force\n */\nfunction patchAccessorGroup(obj, descriptors, force) {\n for (let p in descriptors) {\n let objDesc = Object.getOwnPropertyDescriptor(obj, p);\n if ((objDesc && objDesc.configurable) ||\n (!objDesc && force)) {\n Object.defineProperty(obj, p, descriptors[p]);\n } else if (force) {\n console.warn('Could not define', p, 'on', obj); // eslint-disable-line no-console\n }\n }\n}\n\n// patch dom accessors on proto where they exist\nexport function patchAccessors(proto) {\n patchAccessorGroup(proto, OutsideAccessors);\n patchAccessorGroup(proto, ClassNameAccessor);\n patchAccessorGroup(proto, InsideAccessors);\n patchAccessorGroup(proto, ActiveElementAccessor);\n}\n\nexport function patchShadowRootAccessors(proto) {\n proto.__proto__ = DocumentFragment.prototype;\n // ensure element descriptors (IE/Edge don't have em)\n patchAccessorGroup(proto, OutsideAccessors, true);\n patchAccessorGroup(proto, InsideAccessors, true);\n patchAccessorGroup(proto, ActiveElementAccessor, true);\n // Ensure native properties are all safely wrapped since ShadowRoot is not an\n // actual DocumentFragment instance.\n Object.defineProperties(proto, {\n nodeType: {\n value: Node.DOCUMENT_FRAGMENT_NODE,\n configurable: true\n },\n nodeName: {\n value: '#document-fragment',\n configurable: true\n },\n nodeValue: {\n value: null,\n configurable: true\n }\n });\n // make undefined\n [\n 'localName',\n 'namespaceURI',\n 'prefix'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n value: undefined,\n configurable: true\n });\n });\n // defer properties to host\n [\n 'ownerDocument',\n 'baseURI',\n 'isConnected'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n get() {\n return this.host[prop];\n },\n configurable: true\n });\n });\n}\n\n// ensure an element has patched \"outside\" accessors; no-op when not needed\nexport let patchOutsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__outsideAccessors) {\n sd.__outsideAccessors = true;\n patchAccessorGroup(element, OutsideAccessors, true);\n patchAccessorGroup(element, ClassNameAccessor, true);\n }\n }\n\n// ensure an element has patched \"inside\" accessors; no-op when not needed\nexport let patchInsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__insideAccessors) {\n patchAccessorGroup(element, InsideAccessors, true);\n patchAccessorGroup(element, ShadowRootAccessor, true);\n }\n }\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {calculateSplices} from './array-splice.js';\nimport * as utils from './utils.js';\nimport {enqueue} from './flush.js';\nimport {recordChildNodes} from './logical-tree.js';\nimport {removeChild, insertBefore, dispatchEvent} from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode, childNodes} = accessors;\n\n// Do not export this object. It must be passed as the first argument to the\n// ShadyRoot constructor in `attachShadow` to prevent the constructor from\n// throwing. This prevents the user from being able to manually construct a\n// ShadyRoot (i.e. `new ShadowRoot()`).\nconst ShadyRootConstructionToken = {};\n\nconst CATCHALL_NAME = '__catchall';\nconst SHADYROOT_NAME = 'ShadyRoot';\n\nconst MODE_CLOSED = 'closed';\n\nfunction ancestorList(node) {\n let ancestors = [];\n do {\n ancestors.unshift(node);\n } while ((node = node.parentNode));\n return ancestors;\n}\n\n/**\n * @constructor\n * @extends {ShadowRoot}\n */\nexport class ShadyRoot {\n\n constructor(token, host, options) {\n if (token !== ShadyRootConstructionToken) {\n throw new TypeError('Illegal constructor');\n }\n // NOTE: set a fake local name so this element can be\n // distinguished from a DocumentFragment when patching.\n // FF doesn't allow this to be `localName`\n this._localName = SHADYROOT_NAME;\n const c$ = childNodes(host);\n // root <=> host\n this.host = host;\n this._mode = options && options.mode;\n // logical dom setup\n recordChildNodes(host, c$);\n const hostData = shadyDataForNode(host);\n hostData.root = this;\n hostData.publicRoot = this._mode !== MODE_CLOSED ? this : null;\n // setup root\n const rootData = ensureShadyDataForNode(this);\n rootData.firstChild = rootData.lastChild =\n rootData.parentNode = rootData.nextSibling =\n rootData.previousSibling = null;\n rootData.childNodes = [];\n // state flags\n this._renderPending = false;\n this._hasRendered = false;\n // marsalled lazily\n this._slotList = null;\n this._slotMap = null;\n this._pendingSlots = null;\n // fast path initial render: remove existing physical dom.\n for (let i=0, l=c$.length; i < l; i++) {\n removeChild.call(host, c$[i])\n }\n }\n\n // async render\n _asyncRender() {\n if (!this._renderPending) {\n this._renderPending = true;\n enqueue(() => this._render());\n }\n }\n\n // returns the oldest renderPending ancestor root.\n _getRenderRoot() {\n let renderRoot;\n let root = this;\n while (root) {\n if (root._renderPending) {\n renderRoot = root;\n }\n root = root._rendererForHost();\n }\n return renderRoot;\n }\n\n // Returns the shadyRoot `this.host` if `this.host`\n // has children that require distribution.\n _rendererForHost() {\n let root = this.host.getRootNode();\n if (utils.isShadyRoot(root)) {\n let c$ = this.host.childNodes;\n for (let i=0, c; i < c$.length; i++) {\n c = c$[i];\n if (this._isInsertionPoint(c)) {\n return root;\n }\n }\n }\n }\n\n _render() {\n const root = this._getRenderRoot();\n if (root) {\n root['_renderRoot']();\n }\n }\n\n // NOTE: avoid renaming to ease testability.\n ['_renderRoot']() {\n this._renderPending = false;\n if (this._slotList) {\n this._distribute();\n this._compose();\n }\n this._hasRendered = true;\n }\n\n _distribute() {\n this._validateSlots();\n // capture # of previously assigned nodes to help determine if dirty.\n for (let i=0, slot; i < this._slotList.length; i++) {\n slot = this._slotList[i];\n this._clearSlotAssignedNodes(slot);\n }\n // distribute host children.\n for (let n=this.host.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n);\n }\n // fallback content, slotchange, and dirty roots\n for (let i=0; i < this._slotList.length; i++) {\n const slot = this._slotList[i];\n const slotData = shadyDataForNode(slot);\n // distribute fallback content\n if (!slotData.assignedNodes.length) {\n for (let n=slot.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n, slot);\n }\n }\n const slotParentData = shadyDataForNode(slot.parentNode);\n const slotParentRoot = slotParentData && slotParentData.root;\n if (slotParentRoot && slotParentRoot._hasInsertionPoint()) {\n slotParentRoot['_renderRoot']();\n }\n this._addAssignedToFlattenedNodes(slotData.flattenedNodes,\n slotData.assignedNodes);\n let prevAssignedNodes = slotData._previouslyAssignedNodes;\n if (prevAssignedNodes) {\n for (let i=0; i < prevAssignedNodes.length; i++) {\n shadyDataForNode(prevAssignedNodes[i])._prevAssignedSlot = null;\n }\n slotData._previouslyAssignedNodes = null;\n // dirty if previously less assigned nodes than previously assigned.\n if (prevAssignedNodes.length > slotData.assignedNodes.length) {\n slotData.dirty = true;\n }\n }\n /* Note: A slot is marked dirty whenever a node is newly assigned to it\n or a node is assigned to a different slot (done in `_distributeNodeToSlot`)\n or if the number of nodes assigned to the slot has decreased (done above);\n */\n if (slotData.dirty) {\n slotData.dirty = false;\n this._fireSlotChange(slot);\n }\n }\n }\n\n /**\n * Distributes given `node` to the appropriate slot based on its `slot`\n * attribute. If `forcedSlot` is given, then the node is distributed to the\n * `forcedSlot`.\n * Note: slot to which the node is assigned will be marked dirty for firing\n * `slotchange`.\n * @param {Node} node\n * @param {Node=} forcedSlot\n *\n */\n _distributeNodeToSlot(node, forcedSlot) {\n const nodeData = ensureShadyDataForNode(node);\n let oldSlot = nodeData._prevAssignedSlot;\n nodeData._prevAssignedSlot = null;\n let slot = forcedSlot;\n if (!slot) {\n let name = node.slot || CATCHALL_NAME;\n const list = this._slotMap[name];\n slot = list && list[0];\n }\n if (slot) {\n const slotData = ensureShadyDataForNode(slot);\n slotData.assignedNodes.push(node);\n nodeData.assignedSlot = slot;\n } else {\n nodeData.assignedSlot = undefined;\n }\n if (oldSlot !== nodeData.assignedSlot) {\n if (nodeData.assignedSlot) {\n ensureShadyDataForNode(nodeData.assignedSlot).dirty = true;\n }\n }\n }\n\n /**\n * Clears the assignedNodes tracking data for a given `slot`. Note, the current\n * assigned node data is tracked (via _previouslyAssignedNodes and\n * _prevAssignedSlot) to see if `slotchange` should fire. This data may be out\n * of date at this time because the assigned nodes may have already been\n * distributed to another root. This is ok since this data is only used to\n * track changes.\n * @param {HTMLSlotElement} slot\n */\n _clearSlotAssignedNodes(slot) {\n const slotData = shadyDataForNode(slot);\n let n$ = slotData.assignedNodes;\n slotData.assignedNodes = [];\n slotData.flattenedNodes = [];\n slotData._previouslyAssignedNodes = n$;\n if (n$) {\n for (let i=0; i < n$.length; i++) {\n let n = shadyDataForNode(n$[i]);\n n._prevAssignedSlot = n.assignedSlot;\n // only clear if it was previously set to this slot;\n // this helps ensure that if the node has otherwise been distributed\n // ignore it.\n if (n.assignedSlot === slot) {\n n.assignedSlot = null;\n }\n }\n }\n }\n\n _addAssignedToFlattenedNodes(flattened, assigned) {\n for (let i=0, n; (i<assigned.length) && (n=assigned[i]); i++) {\n if (n.localName == 'slot') {\n const nestedAssigned = shadyDataForNode(n).assignedNodes;\n if (nestedAssigned && nestedAssigned.length) {\n this._addAssignedToFlattenedNodes(flattened, nestedAssigned);\n }\n } else {\n flattened.push(assigned[i]);\n }\n }\n }\n\n _fireSlotChange(slot) {\n // NOTE: cannot bubble correctly here so not setting bubbles: true\n // Safari tech preview does not bubble but chrome does\n // Spec says it bubbles (https://dom.spec.whatwg.org/#mutation-observers)\n dispatchEvent.call(slot, new Event('slotchange'));\n const slotData = shadyDataForNode(slot);\n if (slotData.assignedSlot) {\n this._fireSlotChange(slotData.assignedSlot);\n }\n }\n\n // Reify dom such that it is at its correct rendering position\n // based on logical distribution.\n // NOTE: here we only compose parents of <slot> elements and not the\n // shadowRoot into the host. The latter is performend via a fast path\n // in the `logical-mutation`.insertBefore.\n _compose() {\n const slots = this._slotList;\n let composeList = [];\n for (let i=0; i < slots.length; i++) {\n const parent = slots[i].parentNode;\n /* compose node only if:\n (1) parent does not have a shadowRoot since shadowRoot has already\n composed into the host\n (2) we're not already composing it\n [consider (n^2) but rare better than Set]\n */\n const parentData = shadyDataForNode(parent);\n if (!(parentData && parentData.root) &&\n composeList.indexOf(parent) < 0) {\n composeList.push(parent);\n }\n }\n for (let i=0; i < composeList.length; i++) {\n const node = composeList[i];\n const targetNode = node === this ? this.host : node;\n this._updateChildNodes(targetNode, this._composeNode(node));\n }\n }\n\n // Returns the list of nodes which should be rendered inside `node`.\n _composeNode(node) {\n let children = [];\n let c$ = node.childNodes;\n for (let i = 0; i < c$.length; i++) {\n let child = c$[i];\n // Note: if we see a slot here, the nodes are guaranteed to need to be\n // composed here. This is because if there is redistribution, it has\n // already been handled by this point.\n if (this._isInsertionPoint(child)) {\n let flattenedNodes = shadyDataForNode(child).flattenedNodes;\n for (let j = 0; j < flattenedNodes.length; j++) {\n let distributedNode = flattenedNodes[j];\n children.push(distributedNode);\n }\n } else {\n children.push(child);\n }\n }\n return children;\n }\n\n _isInsertionPoint(node) {\n return node.localName == 'slot';\n }\n\n // Ensures that the rendered node list inside `container` is `children`.\n _updateChildNodes(container, children) {\n let composed = childNodes(container);\n let splices = calculateSplices(children, composed);\n // process removals\n for (let i=0, d=0, s; (i<splices.length) && (s=splices[i]); i++) {\n for (let j=0, n; (j < s.removed.length) && (n=s.removed[j]); j++) {\n // check if the node is still where we expect it is before trying\n // to remove it; this can happen if we move a node and\n // then schedule its previous host for distribution resulting in\n // the node being removed here.\n if (parentNode(n) === container) {\n removeChild.call(container, n);\n }\n // TODO(sorvell): avoid the need for splicing here.\n composed.splice(s.index + d, 1);\n }\n d -= s.addedCount;\n }\n // process adds\n for (let i=0, s, next; (i<splices.length) && (s=splices[i]); i++) { //eslint-disable-line no-redeclare\n next = composed[s.index];\n for (let j=s.index, n; j < s.index + s.addedCount; j++) {\n n = children[j];\n insertBefore.call(container, n, next);\n composed.splice(j, 0, n);\n }\n }\n }\n\n _ensureSlotData() {\n this._pendingSlots = this._pendingSlots || [];\n this._slotList = this._slotList || [];\n this._slotMap = this._slotMap || {};\n }\n\n _addSlots(slots) {\n this._ensureSlotData();\n this._pendingSlots.push(...slots);\n }\n\n _validateSlots() {\n if (this._pendingSlots && this._pendingSlots.length) {\n this._mapSlots(this._pendingSlots);\n this._pendingSlots = [];\n }\n }\n\n /**\n * Adds the given slots. Slots are maintained in an dom-ordered list.\n * In addition a map of name to slot is updated.\n */\n _mapSlots(slots) {\n let slotNamesToSort;\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n // ensure insertionPoints's and their parents have logical dom info.\n // save logical tree info\n // a. for shadyRoot\n // b. for insertion points (fallback)\n // c. for parents of insertion points\n recordChildNodes(slot);\n recordChildNodes(slot.parentNode);\n let name = this._nameForSlot(slot);\n if (this._slotMap[name]) {\n slotNamesToSort = slotNamesToSort || {};\n slotNamesToSort[name] = true;\n this._slotMap[name].push(slot);\n } else {\n this._slotMap[name] = [slot];\n }\n this._slotList.push(slot);\n }\n if (slotNamesToSort) {\n for (let n in slotNamesToSort) {\n this._slotMap[n] = this._sortSlots(this._slotMap[n]);\n }\n }\n }\n\n _nameForSlot(slot) {\n const name = slot['name'] || slot.getAttribute('name') || CATCHALL_NAME;\n slot.__slotName = name;\n return name;\n }\n\n /**\n * Slots are kept in an ordered list. Slots with the same name\n * are sorted here by tree order.\n */\n _sortSlots(slots) {\n // NOTE: Cannot use `compareDocumentPosition` because it's not polyfilled,\n // but the code here could be used to polyfill the preceeding/following info\n // in `compareDocumentPosition`.\n return slots.sort((a, b) => {\n let listA = ancestorList(a);\n let listB = ancestorList(b);\n for (var i=0; i < listA.length; i++) {\n let nA = listA[i];\n let nB = listB[i];\n if (nA !== nB) {\n let c$ = Array.from(nA.parentNode.childNodes);\n return c$.indexOf(nA) - c$.indexOf(nB);\n }\n }\n });\n }\n\n /**\n * Removes from tracked slot data any slots contained within `container` and\n * then updates the tracked data (_slotList and _slotMap).\n * Any removed slots also have their `assignedNodes` removed from comopsed dom.\n */\n _removeContainedSlots(container) {\n if (!this._slotList) {\n return;\n }\n this._validateSlots();\n let didRemove;\n const map = this._slotMap;\n for (let n in map) {\n let slots = map[n];\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n if (utils.contains(container, slot)) {\n slots.splice(i, 1);\n const x = this._slotList.indexOf(slot);\n if (x >= 0) {\n this._slotList.splice(x, 1);\n }\n i--;\n this._removeFlattenedNodes(slot);\n didRemove = true;\n }\n }\n }\n return didRemove;\n }\n\n _updateSlotName(slot) {\n if (!this._slotList) {\n return;\n }\n const oldName = slot.__slotName;\n const name = this._nameForSlot(slot);\n if (name === oldName) {\n return;\n }\n // remove from existing tracking\n let slots = this._slotMap[oldName];\n const i = slots.indexOf(slot);\n if (i >= 0) {\n slots.splice(i, 1);\n }\n // add to new location and sort if nedessary\n let list = this._slotMap[name] || (this._slotMap[name] = []);\n list.push(slot);\n if (list.length > 1) {\n this._slotMap[name] = this._sortSlots(list);\n }\n }\n\n _removeFlattenedNodes(slot) {\n const data = shadyDataForNode(slot);\n let n$ = data.flattenedNodes;\n if (n$) {\n for (let i=0; i<n$.length; i++) {\n let node = n$[i];\n let parent = parentNode(node);\n if (parent) {\n removeChild.call(parent, node);\n }\n }\n }\n data.flattenedNodes = [];\n data.assignedNodes = [];\n }\n\n _hasInsertionPoint() {\n this._validateSlots();\n return Boolean(this._slotList && this._slotList.length);\n }\n}\n\n/**\n Implements a pared down version of ShadowDOM's scoping, which is easy to\n polyfill across browsers.\n*/\nexport function attachShadow(host, options) {\n if (!host) {\n throw 'Must provide a host.';\n }\n if (!options) {\n throw 'Not enough arguments.'\n }\n return new ShadyRoot(ShadyRootConstructionToken, host, options);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {flush} from './flush.js';\nimport {dispatchEvent, querySelectorAll} from './native-methods.js';\nimport * as mutation from './logical-mutation.js';\nimport {ActiveElementAccessor, ShadowRootAccessor, patchAccessors, patchShadowRootAccessors, IsConnectedAccessor} from './patch-accessors.js';\nimport {addEventListener, removeEventListener} from './patch-events.js';\nimport {attachShadow, ShadyRoot} from './attach-shadow.js';\nimport {shadyDataForNode} from './shady-data.js';\n\nfunction getAssignedSlot(node) {\n mutation.renderRootNode(node);\n const nodeData = shadyDataForNode(node);\n return nodeData && nodeData.assignedSlot || null;\n}\n\nlet windowMixin = {\n\n // NOTE: ensure these methods are bound to `window` so that `this` is correct\n // when called directly from global context without a receiver; e.g.\n // `addEventListener(...)`.\n addEventListener: addEventListener.bind(window),\n\n removeEventListener: removeEventListener.bind(window)\n\n};\n\nlet nodeMixin = {\n\n addEventListener: addEventListener,\n\n removeEventListener: removeEventListener,\n\n appendChild(node) {\n return mutation.insertBefore(this, node);\n },\n\n insertBefore(node, ref_node) {\n return mutation.insertBefore(this, node, ref_node);\n },\n\n removeChild(node) {\n return mutation.removeChild(this, node);\n },\n\n /**\n * @this {Node}\n */\n replaceChild(node, ref_node) {\n mutation.insertBefore(this, node, ref_node);\n mutation.removeChild(this, ref_node);\n return node;\n },\n\n /**\n * @this {Node}\n */\n cloneNode(deep) {\n return mutation.cloneNode(this, deep);\n },\n\n /**\n * @this {Node}\n */\n getRootNode(options) {\n return mutation.getRootNode(this, options);\n },\n\n contains(node) {\n return utils.contains(this, node);\n },\n\n /**\n * @this {Node}\n */\n dispatchEvent(event) {\n flush();\n return dispatchEvent.call(this, event);\n }\n\n};\n\n// NOTE: we can do this regardless of the browser supporting native accessors\n// since this is always \"new\" in that case.\nObject.defineProperties(nodeMixin, IsConnectedAccessor);\n\n// NOTE: For some reason 'Text' redefines 'assignedSlot'\nlet textMixin = {\n /**\n * @this {Text}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n};\n\nlet fragmentMixin = {\n\n // TODO(sorvell): consider doing native QSA and filtering results.\n /**\n * @this {DocumentFragment}\n */\n querySelector(selector) {\n // match selector and halt on first result.\n let result = mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n },\n\n /**\n * @this {DocumentFragment}\n */\n // TODO(sorvell): `useNative` option relies on native querySelectorAll and\n // misses distributed nodes, see\n // https://github.com/webcomponents/shadydom/pull/210#issuecomment-361435503\n querySelectorAll(selector, useNative) {\n if (useNative) {\n const o = Array.prototype.slice.call(querySelectorAll(this, selector));\n const root = this.getRootNode();\n return o.filter(e => e.getRootNode() == root);\n }\n return mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n });\n }\n\n};\n\nlet slotMixin = {\n\n /**\n * @this {HTMLSlotElement}\n */\n assignedNodes(options) {\n if (this.localName === 'slot') {\n mutation.renderRootNode(this);\n const nodeData = shadyDataForNode(this);\n return nodeData ?\n ((options && options.flatten ? nodeData.flattenedNodes :\n nodeData.assignedNodes) || []) :\n [];\n }\n }\n\n};\n\nlet elementMixin = utils.extendAll({\n\n /**\n * @this {HTMLElement}\n */\n setAttribute(name, value) {\n mutation.setAttribute(this, name, value);\n },\n\n /**\n * @this {HTMLElement}\n */\n removeAttribute(name) {\n mutation.removeAttribute(this, name);\n },\n\n /**\n * @this {HTMLElement}\n */\n attachShadow(options) {\n return attachShadow(this, options);\n },\n\n /**\n * @this {HTMLElement}\n */\n get slot() {\n return this.getAttribute('slot');\n },\n\n /**\n * @this {HTMLElement}\n */\n set slot(value) {\n mutation.setAttribute(this, 'slot', value);\n },\n\n /**\n * @this {HTMLElement}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n\n}, fragmentMixin, slotMixin);\n\nObject.defineProperties(elementMixin, ShadowRootAccessor);\n\nlet documentMixin = utils.extendAll({\n /**\n * @this {Document}\n */\n importNode(node, deep) {\n return mutation.importNode(node, deep);\n },\n\n /**\n * @this {Document}\n */\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n\n}, fragmentMixin);\n\nObject.defineProperties(documentMixin, {\n '_activeElement': ActiveElementAccessor.activeElement\n});\n\nlet nativeBlur = HTMLElement.prototype.blur;\n\nlet htmlElementMixin = utils.extendAll({\n /**\n * @this {HTMLElement}\n */\n blur() {\n const nodeData = shadyDataForNode(this);\n let root = nodeData && nodeData.root;\n let shadowActive = root && root.activeElement;\n if (shadowActive) {\n shadowActive.blur();\n } else {\n nativeBlur.call(this);\n }\n }\n});\n\nconst shadowRootMixin = {\n addEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.addEventListener(type, fn, optionsOrCapture);\n },\n\n removeEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.removeEventListener(type, fn, optionsOrCapture);\n },\n\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n}\n\nfunction patchBuiltin(proto, obj) {\n let n$ = Object.getOwnPropertyNames(obj);\n for (let i=0; i < n$.length; i++) {\n let n = n$[i];\n let d = Object.getOwnPropertyDescriptor(obj, n);\n // NOTE: we prefer writing directly here because some browsers\n // have descriptors that are writable but not configurable (e.g.\n // `appendChild` on older browsers)\n if (d.value) {\n proto[n] = d.value;\n } else {\n Object.defineProperty(proto, n, d);\n }\n }\n}\n\n// Apply patches to builtins (e.g. Element.prototype). Some of these patches\n// can be done unconditionally (mostly methods like\n// `Element.prototype.appendChild`) and some can only be done when the browser\n// has proper descriptors on the builtin prototype\n// (e.g. `Element.prototype.firstChild`)`. When descriptors are not available,\n// elements are individually patched when needed (see e.g.\n// `patchInside/OutsideElementAccessors` in `patch-accessors.js`).\nexport function patchBuiltins() {\n let nativeHTMLElement =\n (window['customElements'] && window['customElements']['nativeHTMLElement']) ||\n HTMLElement;\n // These patches can always be done, for all supported browsers.\n patchBuiltin(ShadyRoot.prototype, shadowRootMixin);\n patchBuiltin(window.Node.prototype, nodeMixin);\n patchBuiltin(window.Window.prototype, windowMixin);\n patchBuiltin(window.Text.prototype, textMixin);\n patchBuiltin(window.DocumentFragment.prototype, fragmentMixin);\n patchBuiltin(window.Element.prototype, elementMixin);\n patchBuiltin(window.Document.prototype, documentMixin);\n if (window.HTMLSlotElement) {\n patchBuiltin(window.HTMLSlotElement.prototype, slotMixin);\n }\n patchBuiltin(nativeHTMLElement.prototype, htmlElementMixin);\n // These patches can *only* be done\n // on browsers that have proper property descriptors on builtin prototypes.\n // This includes: IE11, Edge, Chrome >= 4?; Safari >= 10, Firefox\n // On older browsers (Chrome <= 4?, Safari 9), a per element patching\n // strategy is used for patching accessors.\n if (utils.settings.hasDescriptors) {\n patchAccessors(window.Node.prototype);\n patchAccessors(window.Text.prototype);\n patchAccessors(window.DocumentFragment.prototype);\n patchAccessors(window.Element.prototype);\n patchAccessors(nativeHTMLElement.prototype);\n patchAccessors(window.Document.prototype);\n if (window.HTMLSlotElement) {\n patchAccessors(window.HTMLSlotElement.prototype);\n }\n }\n patchShadowRootAccessors(ShadyRoot.prototype);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {childNodes} = accessors;\n\nexport function recordInsertBefore(node, container, ref_node) {\n patchInsideElementAccessors(container);\n const containerData = ensureShadyDataForNode(container);\n if (containerData.firstChild !== undefined) {\n containerData.childNodes = null;\n }\n // handle document fragments\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let c$ = node.childNodes;\n for (let i=0; i < c$.length; i++) {\n linkNode(c$[i], container, ref_node);\n }\n // cleanup logical dom in doc fragment.\n const nodeData = ensureShadyDataForNode(node);\n let resetTo = (nodeData.firstChild !== undefined) ? null : undefined;\n nodeData.firstChild = nodeData.lastChild = resetTo;\n nodeData.childNodes = resetTo;\n } else {\n linkNode(node, container, ref_node);\n }\n}\n\nfunction linkNode(node, container, ref_node) {\n patchOutsideElementAccessors(node);\n ref_node = ref_node || null;\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n const ref_nodeData = ref_node ? ensureShadyDataForNode(ref_node) : null;\n // update ref_node.previousSibling <-> node\n nodeData.previousSibling = ref_node ? ref_nodeData.previousSibling :\n container.lastChild;\n let psd = shadyDataForNode(nodeData.previousSibling);\n if (psd) {\n psd.nextSibling = node;\n }\n // update node <-> ref_node\n let nsd = shadyDataForNode(nodeData.nextSibling = ref_node);\n if (nsd) {\n nsd.previousSibling = node;\n }\n // update node <-> container\n nodeData.parentNode = container;\n if (ref_node) {\n if (ref_node === containerData.firstChild) {\n containerData.firstChild = node;\n }\n } else {\n containerData.lastChild = node;\n if (!containerData.firstChild) {\n containerData.firstChild = node;\n }\n }\n // remove caching of childNodes\n containerData.childNodes = null;\n}\n\nexport function recordRemoveChild(node, container) {\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n if (node === containerData.firstChild) {\n containerData.firstChild = nodeData.nextSibling;\n }\n if (node === containerData.lastChild) {\n containerData.lastChild = nodeData.previousSibling;\n }\n let p = nodeData.previousSibling;\n let n = nodeData.nextSibling;\n if (p) {\n ensureShadyDataForNode(p).nextSibling = n;\n }\n if (n) {\n ensureShadyDataForNode(n).previousSibling = p;\n }\n // When an element is removed, logical data is no longer tracked.\n // Explicitly set `undefined` here to indicate this. This is disginguished\n // from `null` which is set if info is null.\n nodeData.parentNode = nodeData.previousSibling =\n nodeData.nextSibling = undefined;\n if (containerData.childNodes !== undefined) {\n // remove caching of childNodes\n containerData.childNodes = null;\n }\n}\n\nexport let recordChildNodes = function(node, nodes) {\n const nodeData = ensureShadyDataForNode(node);\n if (nodeData.firstChild === undefined) {\n const c$ = nodes || childNodes(node);\n nodeData.firstChild = c$[0] || null;\n nodeData.lastChild = c$[c$.length-1] || null;\n patchInsideElementAccessors(node);\n for (let i=0; i<c$.length; i++) {\n const n = c$[i];\n const sd = ensureShadyDataForNode(n);\n sd.parentNode = node;\n sd.nextSibling = c$[i+1] || null;\n sd.previousSibling = c$[i-1] || null;\n patchOutsideElementAccessors(n);\n }\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as logicalTree from './logical-tree.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode} = accessors;\n\n// Patched `insertBefore`. Note that all mutations that add nodes are routed\n// here. When a <slot> is added or a node is added to a host with a shadowRoot\n// with a slot, a standard dom `insert` call is aborted and `_asyncRender`\n// is called on the relevant shadowRoot. In all other cases, a standard dom\n// `insert` can be made, but the location and ref_node may need to be changed.\n/**\n * @param {Node} parent\n * @param {Node} node\n * @param {Node=} ref_node\n */\nexport function insertBefore(parent, node, ref_node) {\n if (node === parent) {\n throw Error(`Failed to execute 'appendChild' on 'Node': The new child element contains the parent.`);\n }\n if (ref_node) {\n const refData = shadyDataForNode(ref_node);\n const p = refData && refData.parentNode;\n if ((p !== undefined && p !== parent) ||\n (p === undefined && parentNode(ref_node) !== parent)) {\n throw Error(`Failed to execute 'insertBefore' on 'Node': The node ` +\n `before which the new node is to be inserted is not a child of this node.`);\n }\n }\n if (ref_node === node) {\n return node;\n }\n // remove from existing location\n if (node.parentNode) {\n // NOTE: avoid node.removeChild as this *can* trigger another patched\n // method (e.g. custom elements) and we want only the shady method to run.\n removeChild(node.parentNode, node);\n }\n // add to new parent\n let preventNativeInsert;\n let ownerRoot;\n let slotsAdded;\n if (!node['__noInsertionPoint']) {\n ownerRoot = utils.ownerShadyRootForNode(parent);\n slotsAdded = ownerRoot && findContainedSlots(node);\n if (slotsAdded) {\n ownerRoot._addSlots(slotsAdded);\n }\n }\n // if a slot is added, must render containing root.\n if (parent.localName === 'slot' || slotsAdded) {\n ownerRoot = ownerRoot || utils.ownerShadyRootForNode(parent);\n if (ownerRoot) {\n ownerRoot._asyncRender();\n }\n }\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordInsertBefore(node, parent, ref_node);\n // when inserting into a host with a shadowRoot with slot, use\n // `shadowRoot._asyncRender()` via `attach-shadow` module\n const parentData = shadyDataForNode(parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeInsert = true;\n // when inserting into a host with shadowRoot with NO slot, do nothing\n // as the node should not be added to composed dome anywhere.\n } else if (parentData.root) {\n preventNativeInsert = true;\n }\n }\n if (!preventNativeInsert) {\n // if adding to a shadyRoot, add to host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host : parent;\n // if ref_node, get the ref_node that's actually in composed dom.\n if (ref_node) {\n ref_node = firstComposedNode(ref_node);\n nativeMethods.insertBefore.call(container, node, ref_node);\n } else {\n nativeMethods.appendChild.call(container, node);\n }\n }\n scheduleObserver(parent, node);\n return node;\n}\n\nfunction findContainedSlots(node) {\n let slots;\n if (node.localName === 'slot') {\n slots = [node];\n } else if (node.querySelectorAll) {\n slots = node.querySelectorAll('slot');\n }\n if (slots && slots.length) {\n return slots;\n }\n}\n\n/**\n * Patched `removeChild`. Note that all dom \"removals\" are routed here.\n * Removes the given `node` from the element's `children`.\n * This method also performs dom composition.\n * @param {Node} parent\n * @param {Node} node\n*/\nexport function removeChild(parent, node) {\n if (node.parentNode !== parent) {\n throw Error('The node to be removed is not a child of this node: ' +\n node);\n }\n let preventNativeRemove;\n let ownerRoot = utils.ownerShadyRootForNode(node);\n let removingInsertionPoint;\n const parentData = shadyDataForNode(parent);\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordRemoveChild(node, parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeRemove = true;\n }\n }\n removeOwnerShadyRoot(node);\n // if removing slot, must render containing root\n if (ownerRoot) {\n let changeSlotContent = parent && parent.localName === 'slot';\n if (changeSlotContent) {\n preventNativeRemove = true;\n }\n removingInsertionPoint = ownerRoot._removeContainedSlots(node);\n if (removingInsertionPoint || changeSlotContent) {\n ownerRoot._asyncRender();\n }\n }\n if (!preventNativeRemove) {\n // if removing from a shadyRoot, remove form host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host :\n parent;\n // not guaranteed to physically be in container; e.g.\n // (1) if parent has a shadyRoot, element may or may not at distributed\n // location (could be undistributed)\n // (2) if parent is a slot, element may not ben in composed dom\n if (!(parentData.root || node.localName === 'slot') ||\n (container === parentNode(node))) {\n nativeMethods.removeChild.call(container, node);\n }\n }\n scheduleObserver(parent, null, node);\n return node;\n}\n\nfunction removeOwnerShadyRoot(node) {\n // optimization: only reset the tree if node is actually in a root\n if (hasCachedOwnerRoot(node)) {\n let c$ = node.childNodes;\n for (let i=0, l=c$.length, n; (i<l) && (n=c$[i]); i++) {\n removeOwnerShadyRoot(n);\n }\n }\n const nodeData = shadyDataForNode(node);\n if (nodeData) {\n nodeData.ownerShadyRoot = undefined;\n }\n}\n\nfunction hasCachedOwnerRoot(node) {\n const nodeData = shadyDataForNode(node);\n return Boolean(nodeData && nodeData.ownerShadyRoot !== undefined);\n}\n\n/**\n * Finds the first flattened node that is composed in the node's parent.\n * If the given node is a slot, then the first flattened node is returned\n * if it exists, otherwise advance to the node's nextSibling.\n * @param {Node} node within which to find first composed node\n * @returns {Node} first composed node\n */\nfunction firstComposedNode(node) {\n let composed = node;\n if (node && node.localName === 'slot') {\n const nodeData = shadyDataForNode(node);\n const flattened = nodeData && nodeData.flattenedNodes;\n composed = flattened && flattened.length ? flattened[0] :\n firstComposedNode(node.nextSibling);\n }\n return composed;\n}\n\nfunction hasShadowRootWithSlot(node) {\n const nodeData = shadyDataForNode(node);\n let root = nodeData && nodeData.root;\n return (root && root._hasInsertionPoint());\n}\n\n/**\n * Should be called whenever an attribute changes. If the `slot` attribute\n * changes, provokes rendering if necessary. If a `<slot>` element's `name`\n * attribute changes, updates the root's slot map and renders.\n * @param {Node} node\n * @param {string} name\n */\nfunction distributeAttributeChange(node, name) {\n if (name === 'slot') {\n const parent = node.parentNode;\n if (hasShadowRootWithSlot(parent)) {\n shadyDataForNode(parent).root._asyncRender();\n }\n } else if (node.localName === 'slot' && name === 'name') {\n let root = utils.ownerShadyRootForNode(node);\n if (root) {\n root._updateSlotName(node);\n root._asyncRender();\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Node=} addedNode\n * @param {Node=} removedNode\n */\nfunction scheduleObserver(node, addedNode, removedNode) {\n const nodeData = shadyDataForNode(node);\n const observer = nodeData && nodeData.observer;\n if (observer) {\n if (addedNode) {\n observer.addedNodes.push(addedNode);\n }\n if (removedNode) {\n observer.removedNodes.push(removedNode);\n }\n observer.schedule();\n }\n}\n\n/**\n * @param {Node} node\n * @param {Object=} options\n */\nexport function getRootNode(node, options) { // eslint-disable-line no-unused-vars\n if (!node || !node.nodeType) {\n return;\n }\n const nodeData = ensureShadyDataForNode(node);\n let root = nodeData.ownerShadyRoot;\n if (root === undefined) {\n if (utils.isShadyRoot(node)) {\n root = node;\n nodeData.ownerShadyRoot = root;\n } else {\n let parent = node.parentNode;\n root = parent ? getRootNode(parent) : node;\n // memo-ize result for performance but only memo-ize\n // result if node is in the document. This avoids a problem where a root\n // can be cached while an element is inside a fragment.\n // If this happens and we cache the result, the value can become stale\n // because for perf we avoid processing the subtree of added fragments.\n if (nativeMethods.contains.call(document.documentElement, node)) {\n nodeData.ownerShadyRoot = root;\n }\n }\n\n }\n return root;\n}\n\n// NOTE: `query` is used primarily for ShadyDOM's querySelector impl,\n// but it's also generally useful to recurse through the element tree\n// and is used by Polymer's styling system.\n/**\n * @param {Node} node\n * @param {Function} matcher\n * @param {Function=} halter\n */\nexport function query(node, matcher, halter) {\n let list = [];\n queryElements(node.childNodes, matcher,\n halter, list);\n return list;\n}\n\nfunction queryElements(elements, matcher, halter, list) {\n for (let i=0, l=elements.length, c; (i<l) && (c=elements[i]); i++) {\n if (c.nodeType === Node.ELEMENT_NODE &&\n queryElement(c, matcher, halter, list)) {\n return true;\n }\n }\n}\n\nfunction queryElement(node, matcher, halter, list) {\n let result = matcher(node);\n if (result) {\n list.push(node);\n }\n if (halter && halter(result)) {\n return result;\n }\n queryElements(node.childNodes, matcher,\n halter, list);\n}\n\nexport function renderRootNode(element) {\n var root = element.getRootNode();\n if (utils.isShadyRoot(root)) {\n root._render();\n }\n}\n\nlet scopingShim = null;\n\nexport function setAttribute(node, attr, value) {\n if (!scopingShim) {\n scopingShim = window['ShadyCSS'] && window['ShadyCSS']['ScopingShim'];\n }\n if (scopingShim && attr === 'class') {\n scopingShim['setElementClass'](node, value);\n } else {\n nativeMethods.setAttribute.call(node, attr, value);\n distributeAttributeChange(node, attr);\n }\n}\n\nexport function removeAttribute(node, attr) {\n nativeMethods.removeAttribute.call(node, attr);\n distributeAttributeChange(node, attr);\n}\n\nexport function cloneNode(node, deep) {\n if (node.localName == 'template') {\n return nativeMethods.cloneNode.call(node, deep);\n } else {\n let n = nativeMethods.cloneNode.call(node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = c$[i].cloneNode(true);\n n.appendChild(nc);\n }\n }\n return n;\n }\n}\n\n// note: Though not technically correct, we fast path `importNode`\n// when called on a node not owned by the main document.\n// This allows, for example, elements that cannot\n// contain custom elements and are therefore not likely to contain shadowRoots\n// to cloned natively. This is a fairly significant performance win.\nexport function importNode(node, deep) {\n if (node.ownerDocument !== document) {\n return nativeMethods.importNode.call(document, node, deep);\n }\n let n = nativeMethods.importNode.call(document, node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = importNode(c$[i], true);\n n.appendChild(nc);\n }\n }\n return n;\n}",null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as nativeMethods from './native-methods.js';\nimport {shadyDataForNode} from './shady-data.js';\n\n/*\nMake this name unique so it is unlikely to conflict with properties on objects passed to `addEventListener`\nhttps://github.com/webcomponents/shadydom/issues/173\n*/\nconst /** string */ eventWrappersName = `__eventWrappers${Date.now()}`;\n\n// https://github.com/w3c/webcomponents/issues/513#issuecomment-224183937\nlet alwaysComposed = {\n 'blur': true,\n 'focus': true,\n 'focusin': true,\n 'focusout': true,\n 'click': true,\n 'dblclick': true,\n 'mousedown': true,\n 'mouseenter': true,\n 'mouseleave': true,\n 'mousemove': true,\n 'mouseout': true,\n 'mouseover': true,\n 'mouseup': true,\n 'wheel': true,\n 'beforeinput': true,\n 'input': true,\n 'keydown': true,\n 'keyup': true,\n 'compositionstart': true,\n 'compositionupdate': true,\n 'compositionend': true,\n 'touchstart': true,\n 'touchend': true,\n 'touchmove': true,\n 'touchcancel': true,\n 'pointerover': true,\n 'pointerenter': true,\n 'pointerdown': true,\n 'pointermove': true,\n 'pointerup': true,\n 'pointercancel': true,\n 'pointerout': true,\n 'pointerleave': true,\n 'gotpointercapture': true,\n 'lostpointercapture': true,\n 'dragstart': true,\n 'drag': true,\n 'dragenter': true,\n 'dragleave': true,\n 'dragover': true,\n 'drop': true,\n 'dragend': true,\n 'DOMActivate': true,\n 'DOMFocusIn': true,\n 'DOMFocusOut': true,\n 'keypress': true\n};\n\nfunction pathComposer(startNode, composed) {\n let composedPath = [];\n let current = startNode;\n let startRoot = startNode === window ? window : startNode.getRootNode();\n while (current) {\n composedPath.push(current);\n if (current.assignedSlot) {\n current = current.assignedSlot;\n } else if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE && current.host && (composed || current !== startRoot)) {\n current = current.host;\n } else {\n current = current.parentNode;\n }\n }\n // event composedPath includes window when startNode's ownerRoot is document\n if (composedPath[composedPath.length - 1] === document) {\n composedPath.push(window);\n }\n return composedPath;\n}\n\nfunction retarget(refNode, path) {\n if (!utils.isShadyRoot) {\n return refNode;\n }\n // If ANCESTOR's root is not a shadow root or ANCESTOR's root is BASE's\n // shadow-including inclusive ancestor, return ANCESTOR.\n let refNodePath = pathComposer(refNode, true);\n let p$ = path;\n for (let i=0, ancestor, lastRoot, root, rootIdx; i < p$.length; i++) {\n ancestor = p$[i];\n root = ancestor === window ? window : ancestor.getRootNode();\n if (root !== lastRoot) {\n rootIdx = refNodePath.indexOf(root);\n lastRoot = root;\n }\n if (!utils.isShadyRoot(root) || rootIdx > -1) {\n return ancestor;\n }\n }\n}\n\nlet eventMixin = {\n\n /**\n * @this {Event}\n */\n get composed() {\n // isTrusted may not exist in this browser, so just check if isTrusted is explicitly false\n if (this.isTrusted !== false && this.__composed === undefined) {\n this.__composed = alwaysComposed[this.type];\n }\n return this.__composed || false;\n },\n\n /**\n * @this {Event}\n */\n composedPath() {\n if (!this.__composedPath) {\n this.__composedPath = pathComposer(this['__target'], this.composed);\n }\n return this.__composedPath;\n },\n\n /**\n * @this {Event}\n */\n get target() {\n return retarget(this.currentTarget, this.composedPath());\n },\n\n // http://w3c.github.io/webcomponents/spec/shadow/#event-relatedtarget-retargeting\n /**\n * @this {Event}\n */\n get relatedTarget() {\n if (!this.__relatedTarget) {\n return null;\n }\n if (!this.__relatedTargetComposedPath) {\n this.__relatedTargetComposedPath = pathComposer(this.__relatedTarget, true);\n }\n // find the deepest node in relatedTarget composed path that is in the same root with the currentTarget\n return retarget(this.currentTarget, this.__relatedTargetComposedPath);\n },\n /**\n * @this {Event}\n */\n stopPropagation() {\n Event.prototype.stopPropagation.call(this);\n this.__propagationStopped = true;\n },\n /**\n * @this {Event}\n */\n stopImmediatePropagation() {\n Event.prototype.stopImmediatePropagation.call(this);\n this.__immediatePropagationStopped = true;\n this.__propagationStopped = true;\n }\n\n};\n\nfunction mixinComposedFlag(Base) {\n // NOTE: avoiding use of `class` here so that transpiled output does not\n // try to do `Base.call` with a dom construtor.\n let klazz = function(type, options) {\n let event = new Base(type, options);\n event.__composed = options && Boolean(options['composed']);\n return event;\n }\n // put constructor properties on subclass\n utils.mixin(klazz, Base);\n klazz.prototype = Base.prototype;\n return klazz;\n}\n\nlet nonBubblingEventsToRetarget = {\n 'focus': true,\n 'blur': true\n};\n\n\n/**\n * Check if the event has been retargeted by comparing original `target`, and calculated `target`\n * @param {Event} event\n * @return {boolean} True if the original target and calculated target are the same\n */\nfunction hasRetargeted(event) {\n return event['__target'] !== event.target || event.__relatedTarget !== event.relatedTarget;\n}\n\n/**\n *\n * @param {Event} event\n * @param {Node} node\n * @param {string} phase\n */\nfunction fireHandlers(event, node, phase) {\n let hs = node.__handlers && node.__handlers[event.type] &&\n node.__handlers[event.type][phase];\n if (hs) {\n for (let i = 0, fn; (fn = hs[i]); i++) {\n if (hasRetargeted(event) && event.target === event.relatedTarget) {\n return;\n }\n fn.call(node, event);\n if (event.__immediatePropagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction retargetNonBubblingEvent(e) {\n let path = e.composedPath();\n let node;\n // override `currentTarget` to let patched `target` calculate correctly\n Object.defineProperty(e, 'currentTarget', {\n get: function() {\n return node;\n },\n configurable: true\n });\n for (let i = path.length - 1; i >= 0; i--) {\n node = path[i];\n // capture phase fires all capture handlers\n fireHandlers(e, node, 'capture');\n if (e.__propagationStopped) {\n return;\n }\n }\n\n // set the event phase to `AT_TARGET` as in spec\n Object.defineProperty(e, 'eventPhase', {get() { return Event.AT_TARGET }});\n\n // the event only needs to be fired when owner roots change when iterating the event path\n // keep track of the last seen owner root\n let lastFiredRoot;\n for (let i = 0; i < path.length; i++) {\n node = path[i];\n const nodeData = shadyDataForNode(node);\n const root = nodeData && nodeData.root;\n if (i === 0 || (root && root === lastFiredRoot)) {\n fireHandlers(e, node, 'bubble');\n // don't bother with window, it doesn't have `getRootNode` and will be last in the path anyway\n if (node !== window) {\n lastFiredRoot = node.getRootNode();\n }\n if (e.__propagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction listenerSettingsEqual(savedListener, node, type, capture, once, passive) {\n let {\n node: savedNode,\n type: savedType,\n capture: savedCapture,\n once: savedOnce,\n passive: savedPassive\n } = savedListener;\n return node === savedNode &&\n type === savedType &&\n capture === savedCapture &&\n once === savedOnce &&\n passive === savedPassive;\n}\n\nexport function findListener(wrappers, node, type, capture, once, passive) {\n for (let i = 0; i < wrappers.length; i++) {\n if (listenerSettingsEqual(wrappers[i], node, type, capture, once, passive)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Firefox can throw on accessing eventWrappers inside of `removeEventListener` during a selenium run\n * Try/Catch accessing eventWrappers to work around\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1353074\n */\nfunction getEventWrappers(eventLike) {\n let wrappers = null;\n try {\n wrappers = eventLike[eventWrappersName];\n } catch (e) {} // eslint-disable-line no-empty\n return wrappers;\n}\n\n/**\n * @this {Event}\n */\nexport function addEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n const handlerType = typeof fnOrObj;\n\n // bail if `fnOrObj` is not a function, not an object\n if (handlerType !== 'function' && handlerType !== 'object') {\n return;\n }\n\n // bail if `fnOrObj` is an object without a `handleEvent` method\n if (handlerType === 'object' && (!fnOrObj.handleEvent || typeof fnOrObj.handleEvent !== 'function')) {\n return;\n }\n\n // The callback `fn` might be used for multiple nodes/events. Since we generate\n // a wrapper function, we need to keep track of it when we remove the listener.\n // It's more efficient to store the node/type/options information as Array in\n // `fn` itself rather than the node (we assume that the same callback is used\n // for few nodes at most, whereas a node will likely have many event listeners).\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n // hack to let ShadyRoots have event listeners\n // event listener will be on host, but `currentTarget`\n // will be set to shadyroot for event listener\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n\n let wrappers = fnOrObj[eventWrappersName];\n if (wrappers) {\n // Stop if the wrapper function has already been created.\n if (findListener(wrappers, target, type, capture, once, passive) > -1) {\n return;\n }\n } else {\n fnOrObj[eventWrappersName] = [];\n }\n\n /**\n * @this {HTMLElement}\n * @param {Event} e\n */\n const wrapperFn = function(e) {\n // Support `once` option.\n if (once) {\n this.removeEventListener(type, fnOrObj, optionsOrCapture);\n }\n if (!e['__target']) {\n patchEvent(e);\n }\n let lastCurrentTargetDesc;\n if (target !== this) {\n // replace `currentTarget` to make `target` and `relatedTarget` correct for inside the shadowroot\n lastCurrentTargetDesc = Object.getOwnPropertyDescriptor(e, 'currentTarget');\n Object.defineProperty(e, 'currentTarget', {get() { return target }, configurable: true});\n }\n // There are two critera that should stop events from firing on this node\n // 1. the event is not composed and the current node is not in the same root as the target\n // 2. when bubbling, if after retargeting, relatedTarget and target point to the same node\n if (e.composed || e.composedPath().indexOf(target) > -1) {\n if (hasRetargeted(e) && e.target === e.relatedTarget) {\n if (e.eventPhase === Event.BUBBLING_PHASE) {\n e.stopImmediatePropagation();\n }\n return;\n }\n // prevent non-bubbling events from triggering bubbling handlers on shadowroot, but only if not in capture phase\n if (e.eventPhase !== Event.CAPTURING_PHASE && !e.bubbles && e.target !== target && !(target instanceof Window)) {\n return;\n }\n let ret = handlerType === 'function' ?\n fnOrObj.call(target, e) :\n (fnOrObj.handleEvent && fnOrObj.handleEvent(e));\n if (target !== this) {\n // replace the \"correct\" `currentTarget`\n if (lastCurrentTargetDesc) {\n Object.defineProperty(e, 'currentTarget', lastCurrentTargetDesc);\n lastCurrentTargetDesc = null;\n } else {\n delete e['currentTarget'];\n }\n }\n return ret;\n }\n };\n // Store the wrapper information.\n fnOrObj[eventWrappersName].push({\n // note: use target here which is either a shadowRoot\n // (when the host element is proxy'ing the event) or this element\n node: target,\n type: type,\n capture: capture,\n once: once,\n passive: passive,\n wrapperFn: wrapperFn\n });\n\n if (nonBubblingEventsToRetarget[type]) {\n this.__handlers = this.__handlers || {};\n this.__handlers[type] = this.__handlers[type] ||\n {'capture': [], 'bubble': []};\n this.__handlers[type][capture ? 'capture' : 'bubble'].push(wrapperFn);\n } else {\n let ael = this instanceof Window ? nativeMethods.windowAddEventListener :\n nativeMethods.addEventListener;\n ael.call(this, type, wrapperFn, optionsOrCapture);\n }\n}\n\n/**\n * @this {Event}\n */\nexport function removeEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n // Search the wrapped function.\n let wrapperFn = undefined;\n let wrappers = getEventWrappers(fnOrObj);\n if (wrappers) {\n let idx = findListener(wrappers, target, type, capture, once, passive);\n if (idx > -1) {\n wrapperFn = wrappers.splice(idx, 1)[0].wrapperFn;\n // Cleanup.\n if (!wrappers.length) {\n fnOrObj[eventWrappersName] = undefined;\n }\n }\n }\n let rel = this instanceof Window ? nativeMethods.windowRemoveEventListener :\n nativeMethods.removeEventListener;\n rel.call(this, type, wrapperFn || fnOrObj, optionsOrCapture);\n if (wrapperFn && nonBubblingEventsToRetarget[type] &&\n this.__handlers && this.__handlers[type]) {\n const arr = this.__handlers[type][capture ? 'capture' : 'bubble'];\n const idx = arr.indexOf(wrapperFn);\n if (idx > -1) {\n arr.splice(idx, 1);\n }\n }\n}\n\nfunction activateFocusEventOverrides() {\n for (let ev in nonBubblingEventsToRetarget) {\n window.addEventListener(ev, function(e) {\n if (!e['__target']) {\n patchEvent(e);\n retargetNonBubblingEvent(e);\n }\n }, true);\n }\n}\n\nfunction patchEvent(event) {\n event['__target'] = event.target;\n event.__relatedTarget = event.relatedTarget;\n // patch event prototype if we can\n if (utils.settings.hasDescriptors) {\n utils.patchPrototype(event, eventMixin);\n // and fallback to patching instance\n } else {\n utils.extend(event, eventMixin);\n }\n}\n\nlet PatchedEvent = mixinComposedFlag(window.Event);\nlet PatchedCustomEvent = mixinComposedFlag(window.CustomEvent);\nlet PatchedMouseEvent = mixinComposedFlag(window.MouseEvent);\n\nexport function patchEvents() {\n window.Event = PatchedEvent;\n window.CustomEvent = PatchedCustomEvent;\n window.MouseEvent = PatchedMouseEvent;\n activateFocusEventOverrides();\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nfunction newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n}\n\nconst EDIT_LEAVE = 0;\nconst EDIT_UPDATE = 1;\nconst EDIT_ADD = 2;\nconst EDIT_DELETE = 3;\n\n// Note: This function is *based* on the computation of the Levenshtein\n// \"edit\" distance. The one change is that \"updates\" are treated as two\n// edits - not one. With Array splices, an update is really a delete\n// followed by an add. By retaining this, we optimize for \"keeping\" the\n// maximum array items in the original array. For example:\n//\n// 'xxxx123' -> '123yyyy'\n//\n// With 1-edit updates, the shortest path would be just to update all seven\n// characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n// leaves the substring '123' intact.\nfunction calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n // \"Deletion\" columns\n let rowCount = oldEnd - oldStart + 1;\n let columnCount = currentEnd - currentStart + 1;\n let distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (let i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (let j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (let i = 1; i < rowCount; i++) {\n for (let j = 1; j < columnCount; j++) {\n if (equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n let north = distances[i - 1][j] + 1;\n let west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n}\n\n// This starts at the final weight, and walks \"backward\" by finding\n// the minimum previous weight recursively until the origin of the weight\n// matrix.\nfunction spliceOperationsFromEditDistances(distances) {\n let i = distances.length - 1;\n let j = distances[0].length - 1;\n let current = distances[i][j];\n let edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n let northWest = distances[i - 1][j - 1];\n let west = distances[i - 1][j];\n let north = distances[i][j - 1];\n\n let min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n}\n\n/**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n/**\n * Lacking individual splice mutation information, the minimal set of\n * splices can be synthesized given the previous state and final state of an\n * array. The basic approach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\nfunction calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n let prefixCount = 0;\n let suffixCount = 0;\n let splice;\n\n let minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentStart == currentEnd) {\n splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n let ops = spliceOperationsFromEditDistances(\n calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n splice = undefined;\n let splices = [];\n let index = currentStart;\n let oldIndex = oldStart;\n for (let i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n}\n\nfunction sharedPrefix(current, old, searchLength) {\n for (let i = 0; i < searchLength; i++)\n if (!equals(current[i], old[i]))\n return i;\n return searchLength;\n}\n\nfunction sharedSuffix(current, old, searchLength) {\n let index1 = current.length;\n let index2 = old.length;\n let count = 0;\n while (count < searchLength && equals(current[--index1], old[--index2]))\n count++;\n\n return count;\n}\n\nfunction equals(currentValue, previousValue) {\n return currentValue === previousValue;\n}\n\nexport function calculateSplices(current, previous) {\n return calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n}\n\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Patches elements that interacts with ShadyDOM\n * such that tree traversal and mutation apis act like they would under\n * ShadowDOM.\n *\n * This import enables seemless interaction with ShadyDOM powered\n * custom elements, enabling better interoperation with 3rd party code,\n * libraries, and frameworks that use DOM tree manipulation apis.\n */\n\nimport * as utils from './utils.js';\nimport {flush, enqueue} from './flush.js';\nimport {observeChildren, unobserveChildren, filterMutations} from './observe-changes.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {patchBuiltins} from './patch-builtins.js';\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {patchEvents} from './patch-events.js';\nimport {ShadyRoot} from './attach-shadow.js';\n\nif (utils.settings.inUse) {\n let ShadyDOM = {\n // TODO(sorvell): remove when Polymer does not depend on this.\n 'inUse': utils.settings.inUse,\n // NOTE: old browsers without prototype accessors (very old Chrome\n // and Safari) need manually patched accessors to properly set\n // `innerHTML` and `textContent` when an element is:\n // (1) inside a shadowRoot\n // (2) does not have special (slot) children itself\n // (3) and setting the property needs to provoke distribution (because\n // a nested slot is added/removed)\n 'patch': (node) => {\n patchInsideElementAccessors(node);\n patchOutsideElementAccessors(node);\n return node;\n },\n 'isShadyRoot': utils.isShadyRoot,\n 'enqueue': enqueue,\n 'flush': flush,\n 'settings': utils.settings,\n 'filterMutations': filterMutations,\n 'observeChildren': observeChildren,\n 'unobserveChildren': unobserveChildren,\n 'nativeMethods': nativeMethods,\n 'nativeTree': nativeTree\n };\n\n window['ShadyDOM'] = ShadyDOM;\n\n // Apply patches to events...\n patchEvents();\n // Apply patches to builtins (e.g. Element.prototype) where applicable.\n patchBuiltins();\n\n window.ShadowRoot = ShadyRoot;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nfunction findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport * as StyleUtil from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/* Transforms ShadowDOM styling into ShadyDOM styling\n\n* scoping:\n\n * elements in scope get scoping selector class=\"x-foo-scope\"\n * selectors re-written as follows:\n\n div button -> div.x-foo-scope button.x-foo-scope\n\n* :host -> scopeName\n\n* :host(...) -> scopeName...\n\n* ::slotted(...) -> scopeName > ...\n\n* ...:dir(ltr|rtl) -> [dir=\"ltr|rtl\"] ..., ...[dir=\"ltr|rtl\"]\n\n* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir=\"rtl\"] scopeName, scopeName[dir=\"rtl\"]\n\n*/\nconst SCOPE_NAME = 'style-scope';\n\nclass StyleTransformer {\n get SCOPE_NAME() {\n return SCOPE_NAME;\n }\n /**\n * Given a node and scope name, add a scoping class to each node\n * in the tree. This facilitates transforming css into scoped rules.\n * @param {?} node\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n dom(node, scope, shouldRemoveScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n this._transformDom(node, scope || '', shouldRemoveScope);\n }\n }\n\n _transformDom(node, selector, shouldRemoveScope) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.element(node, selector, shouldRemoveScope);\n }\n let c$ = (node.localName === 'template') ?\n (node.content || node._content).childNodes :\n node.children || node.childNodes;\n if (c$) {\n for (let i=0; i<c$.length; i++) {\n this._transformDom(c$[i], selector, shouldRemoveScope);\n }\n }\n }\n /**\n * @param {?} element\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n element(element, scope, shouldRemoveScope) {\n // note: if using classes, we add both the general 'style-scope' class\n // as well as the specific scope. This enables easy filtering of all\n // `style-scope` elements\n if (scope) {\n // note: svg on IE does not have classList so fallback to class\n if (element.classList) {\n if (shouldRemoveScope) {\n element.classList.remove(SCOPE_NAME);\n element.classList.remove(scope);\n } else {\n element.classList.add(SCOPE_NAME);\n element.classList.add(scope);\n }\n } else if (element.getAttribute) {\n let c = element.getAttribute(CLASS);\n if (shouldRemoveScope) {\n if (c) {\n let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');\n StyleUtil.setElementClassRaw(element, newValue);\n }\n } else {\n let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;\n StyleUtil.setElementClassRaw(element, newValue);\n }\n }\n }\n }\n\n /**\n * @param {?} element\n * @param {?} styleRules\n * @param {?=} callback\n */\n elementStyles(element, styleRules, callback) {\n let cssBuildType = element['__cssBuild'];\n // no need to shim selectors if settings.useNativeShadow, also\n // a shady css build will already have transformed selectors\n // NOTE: This method may be called as part of static or property shimming.\n // When there is a targeted build it will not be called for static shimming,\n // but when the property shim is used it is called and should opt out of\n // static shimming work when a proper build exists.\n let cssText = '';\n if (nativeShadow || cssBuildType === 'shady') {\n cssText = StyleUtil.toCssText(styleRules, callback);\n } else {\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n cssText = this.css(styleRules, is, typeExtension, callback) + '\\n\\n';\n }\n return cssText.trim();\n }\n\n // Given a string of cssText and a scoping string (scope), returns\n // a string of scoped css where each selector is transformed to include\n // a class created from the scope. ShadowDOM selectors are also transformed\n // (e.g. :host) to use the scoping selector.\n css(rules, scope, ext, callback) {\n let hostScope = this._calcHostScope(scope, ext);\n scope = this._calcElementScope(scope);\n let self = this;\n return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n if (!rule.isScoped) {\n self.rule(rule, scope, hostScope);\n rule.isScoped = true;\n }\n if (callback) {\n callback(rule, scope, hostScope);\n }\n });\n }\n\n _calcElementScope(scope) {\n if (scope) {\n return CSS_CLASS_PREFIX + scope;\n } else {\n return '';\n }\n }\n\n _calcHostScope(scope, ext) {\n return ext ? `[is=${scope}]` : scope;\n }\n\n rule(rule, scope, hostScope) {\n this._transformRule(rule, this._transformComplexSelector,\n scope, hostScope);\n }\n\n /**\n * transforms a css rule to a scoped rule.\n *\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRule(rule, transformer, scope, hostScope) {\n // NOTE: save transformedSelector for subsequent matching of elements\n // against selectors (e.g. when calculating style properties)\n rule['selector'] = rule.transformedSelector =\n this._transformRuleCss(rule, transformer, scope, hostScope);\n }\n\n /**\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRuleCss(rule, transformer, scope, hostScope) {\n let p$ = rule['selector'].split(COMPLEX_SELECTOR_SEP);\n // we want to skip transformation of rules that appear in keyframes,\n // because they are keyframe selectors, not element selectors.\n if (!StyleUtil.isKeyframesSelector(rule)) {\n for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {\n p$[i] = transformer.call(this, p, scope, hostScope);\n }\n }\n return p$.join(COMPLEX_SELECTOR_SEP);\n }\n\n /**\n * @param {string} selector\n * @return {string}\n */\n _twiddleNthPlus(selector) {\n return selector.replace(NTH, (m, type, inside) => {\n if (inside.indexOf('+') > -1) {\n inside = inside.replace(/\\+/g, '___');\n } else if (inside.indexOf('___') > -1) {\n inside = inside.replace(/___/g, '+');\n }\n return `:${type}(${inside})`;\n });\n }\n\n/**\n * @param {string} selector\n * @param {string} scope\n * @param {string=} hostScope\n */\n _transformComplexSelector(selector, scope, hostScope) {\n let stop = false;\n selector = selector.trim();\n // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP\n let isNth = NTH.test(selector);\n if (isNth) {\n selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\\s/g, '')})`)\n selector = this._twiddleNthPlus(selector);\n }\n selector = selector.replace(SLOTTED_START, `${HOST} $1`);\n selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {\n if (!stop) {\n let info = this._transformCompoundSelector(s, c, scope, hostScope);\n stop = stop || info.stop;\n c = info.combinator;\n s = info.value;\n }\n return c + s;\n });\n if (isNth) {\n selector = this._twiddleNthPlus(selector);\n }\n return selector;\n }\n\n _transformCompoundSelector(selector, combinator, scope, hostScope) {\n // replace :host with host scoping class\n let slottedIndex = selector.indexOf(SLOTTED);\n if (selector.indexOf(HOST) >= 0) {\n selector = this._transformHostSelector(selector, hostScope);\n // replace other selectors with scoping class\n } else if (slottedIndex !== 0) {\n selector = scope ? this._transformSimpleSelector(selector, scope) :\n selector;\n }\n // mark ::slotted() scope jump to replace with descendant selector + arg\n // also ignore left-side combinator\n let slotted = false;\n if (slottedIndex >= 0) {\n combinator = '';\n slotted = true;\n }\n // process scope jumping selectors up to the scope jump and then stop\n let stop;\n if (slotted) {\n stop = true;\n if (slotted) {\n // .zonk ::slotted(.foo) -> .zonk.scope > .foo\n selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);\n }\n }\n selector = selector.replace(DIR_PAREN, (m, before, dir) =>\n `[dir=\"${dir}\"] ${before}, ${before}[dir=\"${dir}\"]`);\n return {value: selector, combinator, stop};\n }\n\n _transformSimpleSelector(selector, scope) {\n let p$ = selector.split(PSEUDO_PREFIX);\n p$[0] += scope;\n return p$.join(PSEUDO_PREFIX);\n }\n\n // :host(...) -> scopeName...\n _transformHostSelector(selector, hostScope) {\n let m = selector.match(HOST_PAREN);\n let paren = m && m[2].trim() || '';\n if (paren) {\n if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {\n // paren starts with a type selector\n let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];\n // if the type selector is our hostScope then avoid pre-pending it\n if (typeSelector === hostScope) {\n return paren;\n // otherwise, this selector should not match in this scope so\n // output a bogus selector.\n } else {\n return SELECTOR_NO_MATCH;\n }\n } else {\n // make sure to do a replace here to catch selectors like:\n // `:host(.foo)::before`\n return selector.replace(HOST_PAREN, function(m, host, paren) {\n return hostScope + paren;\n });\n }\n // if no paren, do a straight :host replacement.\n // TODO(sorvell): this should not strictly be necessary but\n // it's needed to maintain support for `:host[foo]` type selectors\n // which have been improperly used under Shady DOM. This should be\n // deprecated.\n } else {\n return selector.replace(HOST, hostScope);\n }\n }\n\n /**\n * @param {StyleNode} rule\n */\n documentRule(rule) {\n // reset selector in case this is redone.\n rule['selector'] = rule['parsedSelector'];\n this.normalizeRootSelector(rule);\n this._transformRule(rule, this._transformDocumentSelector);\n }\n\n /**\n * @param {StyleNode} rule\n */\n normalizeRootSelector(rule) {\n if (rule['selector'] === ROOT) {\n rule['selector'] = 'html';\n }\n }\n\n/**\n * @param {string} selector\n */\n _transformDocumentSelector(selector) {\n return selector.match(SLOTTED) ?\n this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) :\n this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);\n }\n}\n\nlet NTH = /:(nth[-\\w]+)\\(([^)]+)\\)/;\nlet SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;\nlet COMPLEX_SELECTOR_SEP = ',';\nlet SIMPLE_SELECTOR_SEP = /(^|[\\s>+~]+)((?:\\[.+?\\]|[^\\s>+~=[])+)/g;\nlet SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;\nlet HOST = ':host';\nlet ROOT = ':root';\nlet SLOTTED = '::slotted';\nlet SLOTTED_START = new RegExp(`^(${SLOTTED})`);\n// NOTE: this supports 1 nested () pair for things like\n// :host(:not([selected]), more general support requires\n// parsing which seems like overkill\nlet HOST_PAREN = /(:host)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\n// similar to HOST_PAREN\nlet SLOTTED_PAREN = /(?:::slotted)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\nlet DIR_PAREN = /(.*):dir\\((?:(ltr|rtl))\\)/;\nlet CSS_CLASS_PREFIX = '.';\nlet PSEUDO_PREFIX = ':';\nlet CLASS = 'class';\nlet SELECTOR_NO_MATCH = 'should_not_match';\n\nexport default new StyleTransformer()\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/** @const {string} */\nconst infoKey = '__styleInfo';\n\nexport default class StyleInfo {\n /**\n * @param {Element} node\n * @return {StyleInfo}\n */\n static get(node) {\n if (node) {\n return node[infoKey];\n } else {\n return null;\n }\n }\n /**\n * @param {!Element} node\n * @param {StyleInfo} styleInfo\n * @return {StyleInfo}\n */\n static set(node, styleInfo) {\n node[infoKey] = styleInfo;\n return styleInfo;\n }\n /**\n * @param {StyleNode} ast\n * @param {Node=} placeholder\n * @param {Array<string>=} ownStylePropertyNames\n * @param {string=} elementName\n * @param {string=} typeExtension\n * @param {string=} cssBuild\n */\n constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {\n /** @type {StyleNode} */\n this.styleRules = ast || null;\n /** @type {Node} */\n this.placeholder = placeholder || null;\n /** @type {!Array<string>} */\n this.ownStylePropertyNames = ownStylePropertyNames || [];\n /** @type {Array<Object>} */\n this.overrideStyleProperties = null;\n /** @type {string} */\n this.elementName = elementName || '';\n /** @type {string} */\n this.cssBuild = cssBuild || '';\n /** @type {string} */\n this.typeExtension = typeExtension || '';\n /** @type {Object<string, string>} */\n this.styleProperties = null;\n /** @type {?string} */\n this.scopeSelector = null;\n /** @type {HTMLStyleElement} */\n this.customStyle = null;\n }\n _getStyleRules() {\n return this.styleRules;\n }\n}\n\nStyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport * as RX from './common-regex.js';\nimport StyleInfo from './style-info.js';\n\n// TODO: dedupe with shady\n/**\n * @param {string} selector\n * @return {boolean}\n * @this {Element}\n */\nconst matchesSelector = function(selector) {\n const method = this.matches || this.matchesSelector ||\n this.mozMatchesSelector || this.msMatchesSelector ||\n this.oMatchesSelector || this.webkitMatchesSelector;\n return method && method.call(this, selector);\n};\n\nconst IS_IE = navigator.userAgent.match('Trident');\n\nconst XSCOPE_NAME = 'x-scope';\n\nclass StyleProperties {\n get XSCOPE_NAME() {\n return XSCOPE_NAME;\n }\n/**\n * decorates styles with rule info and returns an array of used style property names\n *\n * @param {StyleNode} rules\n * @return {Array<string>}\n */\n decorateStyles(rules) {\n let self = this, props = {}, keyframes = [], ruleIndex = 0;\n StyleUtil.forEachRule(rules, function(rule) {\n self.decorateRule(rule);\n // mark in-order position of ast rule in styles block, used for cache key\n rule.index = ruleIndex++;\n self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);\n }, function onKeyframesRule(rule) {\n keyframes.push(rule);\n });\n // Cache all found keyframes rules for later reference:\n rules._keyframes = keyframes;\n // return this list of property names *consumes* in these styles.\n let names = [];\n for (let i in props) {\n names.push(i);\n }\n return names;\n }\n\n // decorate a single rule with property info\n decorateRule(rule) {\n if (rule.propertyInfo) {\n return rule.propertyInfo;\n }\n let info = {}, properties = {};\n let hasProperties = this.collectProperties(rule, properties);\n if (hasProperties) {\n info.properties = properties;\n // TODO(sorvell): workaround parser seeing mixins as additional rules\n rule['rules'] = null;\n }\n info.cssText = this.collectCssText(rule);\n rule.propertyInfo = info;\n return info;\n }\n\n // collects the custom properties from a rule's cssText\n collectProperties(rule, properties) {\n let info = rule.propertyInfo;\n if (info) {\n if (info.properties) {\n Object.assign(properties, info.properties);\n return true;\n }\n } else {\n let m, rx = RX.VAR_ASSIGN;\n let cssText = rule['parsedCssText'];\n let value;\n let any;\n while ((m = rx.exec(cssText))) {\n // note: group 2 is var, 3 is mixin\n value = (m[2] || m[3]).trim();\n // value of 'inherit' or 'unset' is equivalent to not setting the property here\n if (value !== 'inherit' || value !== 'unset') {\n properties[m[1].trim()] = value;\n }\n any = true;\n }\n return any;\n }\n\n }\n\n // returns cssText of properties that consume variables/mixins\n collectCssText(rule) {\n return this.collectConsumingCssText(rule['parsedCssText']);\n }\n\n // NOTE: we support consumption inside mixin assignment\n // but not production, so strip out {...}\n collectConsumingCssText(cssText) {\n return cssText.replace(RX.BRACKETED, '')\n .replace(RX.VAR_ASSIGN, '');\n }\n\n collectPropertiesInCssText(cssText, props) {\n let m;\n while ((m = RX.VAR_CONSUMED.exec(cssText))) {\n let name = m[1];\n // This regex catches all variable names, and following non-whitespace char\n // If next char is not ':', then variable is a consumer\n if (m[2] !== ':') {\n props[name] = true;\n }\n }\n }\n\n // turns custom properties into realized values.\n reify(props) {\n // big perf optimization here: reify only *own* properties\n // since this object has __proto__ of the element's scope properties\n let names = Object.getOwnPropertyNames(props);\n for (let i=0, n; i < names.length; i++) {\n n = names[i];\n props[n] = this.valueForProperty(props[n], props);\n }\n }\n\n // given a property value, returns the reified value\n // a property value may be:\n // (1) a literal value like: red or 5px;\n // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or\n // var(--a, var(--b));\n // (3) a literal mixin value like { properties }. Each of these properties\n // can have values that are: (a) literal, (b) variables, (c) @apply mixins.\n valueForProperty(property, props) {\n // case (1) default\n // case (3) defines a mixin and we have to reify the internals\n if (property) {\n if (property.indexOf(';') >=0) {\n property = this.valueForProperties(property, props);\n } else {\n // case (2) variable\n let self = this;\n let fn = function(prefix, value, fallback, suffix) {\n if (!value) {\n return prefix + suffix;\n }\n let propertyValue = self.valueForProperty(props[value], props);\n // if value is \"initial\", then the variable should be treated as unset\n if (!propertyValue || propertyValue === 'initial') {\n // fallback may be --a or var(--a) or literal\n propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||\n fallback;\n } else if (propertyValue === 'apply-shim-inherit') {\n // CSS build will replace `inherit` with `apply-shim-inherit`\n // for use with native css variables.\n // Since we have full control, we can use `inherit` directly.\n propertyValue = 'inherit';\n }\n return prefix + (propertyValue || '') + suffix;\n };\n property = StyleUtil.processVariableAndFallback(property, fn);\n }\n }\n return property && property.trim() || '';\n }\n\n // note: we do not yet support mixin within mixin\n valueForProperties(property, props) {\n let parts = property.split(';');\n for (let i=0, p, m; i<parts.length; i++) {\n if ((p = parts[i])) {\n RX.MIXIN_MATCH.lastIndex = 0;\n m = RX.MIXIN_MATCH.exec(p);\n if (m) {\n p = this.valueForProperty(props[m[1]], props);\n } else {\n let colon = p.indexOf(':');\n if (colon !== -1) {\n let pp = p.substring(colon);\n pp = pp.trim();\n pp = this.valueForProperty(pp, props) || pp;\n p = p.substring(0, colon) + pp;\n }\n }\n parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?\n // strip trailing ;\n p.slice(0, -1) :\n p || '';\n }\n }\n return parts.join(';');\n }\n\n applyProperties(rule, props) {\n let output = '';\n // dynamically added sheets may not be decorated so ensure they are.\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (rule.propertyInfo.cssText) {\n output = this.valueForProperties(rule.propertyInfo.cssText, props);\n }\n rule['cssText'] = output;\n }\n\n // Apply keyframe transformations to the cssText of a given rule. The\n // keyframeTransforms object is a map of keyframe names to transformer\n // functions which take in cssText and spit out transformed cssText.\n applyKeyframeTransforms(rule, keyframeTransforms) {\n let input = rule['cssText'];\n let output = rule['cssText'];\n if (rule.hasAnimations == null) {\n // Cache whether or not the rule has any animations to begin with:\n rule.hasAnimations = RX.ANIMATION_MATCH.test(input);\n }\n // If there are no animations referenced, we can skip transforms:\n if (rule.hasAnimations) {\n let transform;\n // If we haven't transformed this rule before, we iterate over all\n // transforms:\n if (rule.keyframeNamesToTransform == null) {\n rule.keyframeNamesToTransform = [];\n for (let keyframe in keyframeTransforms) {\n transform = keyframeTransforms[keyframe];\n output = transform(input);\n // If the transform actually changed the CSS text, we cache the\n // transform name for future use:\n if (input !== output) {\n input = output;\n rule.keyframeNamesToTransform.push(keyframe);\n }\n }\n } else {\n // If we already have a list of keyframe names that apply to this\n // rule, we apply only those keyframe name transforms:\n for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {\n transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];\n input = transform(input);\n }\n output = input;\n }\n }\n rule['cssText'] = output;\n }\n\n // Test if the rules in these styles matches the given `element` and if so,\n // collect any custom properties into `props`.\n /**\n * @param {StyleNode} rules\n * @param {Element} element\n */\n propertyDataFromStyles(rules, element) {\n let props = {}, self = this;\n // generates a unique key for these matches\n let o = [];\n // note: active rules excludes non-matching @media rules\n StyleUtil.forEachRule(rules, function(rule) {\n // TODO(sorvell): we could trim the set of rules at declaration\n // time to only include ones that have properties\n if (!rule.propertyInfo) {\n self.decorateRule(rule);\n }\n // match element against transformedSelector: selector may contain\n // unwanted uniquification and parsedSelector does not directly match\n // for :host selectors.\n let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];\n if (element && rule.propertyInfo.properties && selectorToMatch) {\n if (matchesSelector.call(element, selectorToMatch)) {\n self.collectProperties(rule, props);\n // produce numeric key for these matches for lookup\n addToBitMask(rule.index, o);\n }\n }\n }, null, true);\n return {properties: props, key: o};\n }\n\n /**\n * @param {Element} scope\n * @param {StyleNode} rule\n * @param {string|undefined} cssBuild\n * @param {function(Object)} callback\n */\n whenHostOrRootRule(scope, rule, cssBuild, callback) {\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (!rule.propertyInfo.properties) {\n return;\n }\n let {is, typeExtension} = StyleUtil.getIsExtends(scope);\n let hostScope = is ?\n StyleTransformer._calcHostScope(is, typeExtension) :\n 'html';\n let parsedSelector = rule['parsedSelector'];\n let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');\n let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;\n // build info is either in scope (when scope is an element) or in the style\n // when scope is the default scope; note: this allows default scope to have\n // mixed mode built and unbuilt styles.\n if (cssBuild === 'shady') {\n // :root -> x-foo > *.x-foo for elements and html for custom-style\n isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;\n // :host -> x-foo for elements, but sub-rules have .x-foo in them\n isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;\n }\n if (cssBuild === 'shadow') {\n isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';\n isHost = isHost && !isRoot;\n }\n if (!isRoot && !isHost) {\n return;\n }\n let selectorToMatch = hostScope;\n if (isHost) {\n // need to transform :host because `:host` does not work with `matches`\n if (!rule.transformedSelector) {\n // transform :host into a matchable selector\n rule.transformedSelector =\n StyleTransformer._transformRuleCss(\n rule,\n StyleTransformer._transformComplexSelector,\n StyleTransformer._calcElementScope(is),\n hostScope\n );\n }\n selectorToMatch = rule.transformedSelector || hostScope;\n }\n callback({\n selector: selectorToMatch,\n isHost: isHost,\n isRoot: isRoot\n });\n }\n/**\n * @param {Element} scope\n * @param {StyleNode} rules\n * @return {Object}\n */\n hostAndRootPropertiesForScope(scope, rules) {\n let hostProps = {}, rootProps = {}, self = this;\n // note: active rules excludes non-matching @media rules\n let cssBuild = rules && rules['__cssBuild'];\n StyleUtil.forEachRule(rules, function(rule) {\n // if scope is StyleDefaults, use _element for matchesSelector\n self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {\n let element = scope._element || scope;\n if (matchesSelector.call(element, info.selector)) {\n if (info.isHost) {\n self.collectProperties(rule, hostProps);\n } else {\n self.collectProperties(rule, rootProps);\n }\n }\n });\n }, null, true);\n return {rootProps: rootProps, hostProps: hostProps};\n }\n\n /**\n * @param {Element} element\n * @param {Object} properties\n * @param {string} scopeSelector\n */\n transformStyles(element, properties, scopeSelector) {\n let self = this;\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n let hostSelector = StyleTransformer\n ._calcHostScope(is, typeExtension);\n let rxHostSelector = element.extends ?\n '\\\\' + hostSelector.slice(0, -1) + '\\\\]' :\n hostSelector;\n let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +\n RX.HOST_SUFFIX);\n let rules = StyleInfo.get(element).styleRules;\n let keyframeTransforms =\n this._elementKeyframeTransforms(element, rules, scopeSelector);\n return StyleTransformer.elementStyles(element, rules, function(rule) {\n self.applyProperties(rule, properties);\n if (!nativeShadow &&\n !StyleUtil.isKeyframesSelector(rule) &&\n rule['cssText']) {\n // NOTE: keyframe transforms only scope munge animation names, so it\n // is not necessary to apply them in ShadowDOM.\n self.applyKeyframeTransforms(rule, keyframeTransforms);\n self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);\n }\n });\n }\n\n /**\n * @param {Element} element\n * @param {StyleNode} rules\n * @param {string} scopeSelector\n * @return {Object}\n */\n _elementKeyframeTransforms(element, rules, scopeSelector) {\n let keyframesRules = rules._keyframes;\n let keyframeTransforms = {};\n if (!nativeShadow && keyframesRules) {\n // For non-ShadowDOM, we transform all known keyframes rules in\n // advance for the current scope. This allows us to catch keyframes\n // rules that appear anywhere in the stylesheet:\n for (let i = 0, keyframesRule = keyframesRules[i];\n i < keyframesRules.length;\n keyframesRule = keyframesRules[++i]) {\n this._scopeKeyframes(keyframesRule, scopeSelector);\n keyframeTransforms[keyframesRule['keyframesName']] =\n this._keyframesRuleTransformer(keyframesRule);\n }\n }\n return keyframeTransforms;\n }\n\n // Generate a factory for transforming a chunk of CSS text to handle a\n // particular scoped keyframes rule.\n /**\n * @param {StyleNode} keyframesRule\n * @return {function(string):string}\n */\n _keyframesRuleTransformer(keyframesRule) {\n return function(cssText) {\n return cssText.replace(\n keyframesRule.keyframesNameRx,\n keyframesRule.transformedKeyframesName);\n };\n }\n\n/**\n * Transforms `@keyframes` names to be unique for the current host.\n * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0\n *\n * @param {StyleNode} rule\n * @param {string} scopeId\n */\n _scopeKeyframes(rule, scopeId) {\n // Animation names are of the form [\\w-], so ensure that the name regex does not partially apply\n // to similarly named keyframe names by checking for a word boundary at the beginning and\n // a non-word boundary or `-` at the end.\n rule.keyframesNameRx = new RegExp(`\\\\b${rule['keyframesName']}(?!\\\\B|-)`, 'g');\n rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n rule['selector'] = rule.transformedSelector.replace(\n rule['keyframesName'], rule.transformedKeyframesName);\n }\n\n // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):\n // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo\n // host selector: x-foo.wide -> .x-foo-42.wide\n // note: we use only the scope class (.x-foo-42) and not the hostSelector\n // (x-foo) to scope :host rules; this helps make property host rules\n // have low specificity. They are overrideable by class selectors but,\n // unfortunately, not by type selectors (e.g. overriding via\n // `.special` is ok, but not by `x-foo`).\n /**\n * @param {StyleNode} rule\n * @param {RegExp} hostRx\n * @param {string} hostSelector\n * @param {string} scopeId\n */\n _scopeSelector(rule, hostRx, hostSelector, scopeId) {\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n let selector = rule.transformedSelector;\n let scope = '.' + scopeId;\n let parts = selector.split(',');\n for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n parts[i] = p.match(hostRx) ?\n p.replace(hostSelector, scope) :\n scope + ' ' + p;\n }\n rule['selector'] = parts.join(',');\n }\n\n /**\n * @param {Element} element\n * @param {string} selector\n * @param {string} old\n */\n applyElementScopeSelector(element, selector, old) {\n let c = element.getAttribute('class') || '';\n let v = c;\n if (old) {\n v = c.replace(\n new RegExp('\\\\s*' + XSCOPE_NAME + '\\\\s*' + old + '\\\\s*', 'g'), ' ');\n }\n v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;\n if (c !== v) {\n StyleUtil.setElementClassRaw(element, v);\n }\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Object} properties\n * @param {string} selector\n * @param {HTMLStyleElement} style\n * @return {HTMLStyleElement}\n */\n applyElementStyle(element, properties, selector, style) {\n // calculate cssText to apply\n let cssText = style ? style.textContent || '' :\n this.transformStyles(element, properties, selector);\n // if shady and we have a cached style that is not style, decrement\n let styleInfo = StyleInfo.get(element);\n let s = styleInfo.customStyle;\n if (s && !nativeShadow && (s !== style)) {\n s['_useCount']--;\n if (s['_useCount'] <= 0 && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }\n // apply styling always under native or if we generated style\n // or the cached style is not in document(!)\n if (nativeShadow) {\n // update existing style only under native\n if (styleInfo.customStyle) {\n styleInfo.customStyle.textContent = cssText;\n style = styleInfo.customStyle;\n // otherwise, if we have css to apply, do so\n } else if (cssText) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,\n styleInfo.placeholder);\n }\n } else {\n // shady and no cache hit\n if (!style) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n if (cssText) {\n style = StyleUtil.applyCss(cssText, selector, null,\n styleInfo.placeholder);\n }\n // shady and cache hit but not in document\n } else if (!style.parentNode) {\n if (IS_IE && cssText.indexOf('@media') > -1) {\n // @media rules may be stale in IE 10 and 11\n // refresh the text content of the style to revalidate them.\n style.textContent = cssText;\n }\n StyleUtil.applyStyle(style, null, styleInfo.placeholder);\n }\n }\n // ensure this style is our custom style and increment its use count.\n if (style) {\n style['_useCount'] = style['_useCount'] || 0;\n // increment use count if we changed styles\n if (styleInfo.customStyle != style) {\n style['_useCount']++;\n }\n styleInfo.customStyle = style;\n }\n return style;\n }\n\n /**\n * @param {Element} style\n * @param {Object} properties\n */\n applyCustomStyle(style, properties) {\n let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));\n let self = this;\n style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n let css = rule['cssText'] = rule['parsedCssText'];\n if (rule.propertyInfo && rule.propertyInfo.cssText) {\n // remove property assignments\n // so next function isn't confused\n // NOTE: we have 3 categories of css:\n // (1) normal properties,\n // (2) custom property assignments (--foo: red;),\n // (3) custom property usage: border: var(--foo); @apply(--foo);\n // In elements, 1 and 3 are separated for efficiency; here they\n // are not and this makes this case unique.\n css = removeCustomPropAssignment(/** @type {string} */(css));\n // replace with reified properties, scenario is same as mixin\n rule['cssText'] = self.valueForProperties(css, properties);\n }\n });\n }\n}\n\n/**\n * @param {number} n\n * @param {Array<number>} bits\n */\nfunction addToBitMask(n, bits) {\n let o = parseInt(n / 32, 10);\n let v = 1 << (n % 32);\n bits[o] = (bits[o] || 0) | v;\n}\n\nexport default new StyleProperties();","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {applyStylePlaceHolder} from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/** @type {Object<string, !Node>} */\nlet placeholderMap = {};\n\n/**\n * @const {CustomElementRegistry}\n */\nconst ce = window['customElements'];\nif (ce && !nativeShadow) {\n /**\n * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}\n */\n const origDefine = ce['define'];\n /**\n * @param {string} name\n * @param {function(new:HTMLElement)} clazz\n * @param {{extends: string}=} options\n */\n const wrappedDefine = (name, clazz, options) => {\n placeholderMap[name] = applyStylePlaceHolder(name);\n origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);\n };\n ce['define'] = wrappedDefine;\n}\n\nexport default placeholderMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nexport default class StyleCache {\n constructor(typeMax = 100) {\n // map element name -> [{properties, styleElement, scopeSelector}]\n this.cache = {};\n this.typeMax = typeMax;\n }\n\n _validate(cacheEntry, properties, ownPropertyNames) {\n for (let idx = 0; idx < ownPropertyNames.length; idx++) {\n let pn = ownPropertyNames[idx];\n if (cacheEntry.properties[pn] !== properties[pn]) {\n return false;\n }\n }\n return true;\n }\n\n store(tagname, properties, styleElement, scopeSelector) {\n let list = this.cache[tagname] || [];\n list.push({properties, styleElement, scopeSelector});\n if (list.length > this.typeMax) {\n list.shift();\n }\n this.cache[tagname] = list;\n }\n\n fetch(tagname, properties, ownPropertyNames) {\n let list = this.cache[tagname];\n if (!list) {\n return;\n }\n // reverse list for most-recent lookups\n for (let idx = list.length - 1; idx >= 0; idx--) {\n let entry = list[idx];\n if (this._validate(entry, properties, ownPropertyNames)) {\n return entry;\n }\n }\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport {getIsExtends} from './style-util.js';\n\nexport let flush = function() {};\n\n/**\n * @param {HTMLElement} element\n * @return {!Array<string>}\n */\nfunction getClasses(element) {\n let classes = [];\n if (element.classList) {\n classes = Array.from(element.classList);\n } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {\n classes = element.getAttribute('class').split(/\\s+/);\n }\n return classes;\n}\n\n/**\n * @param {HTMLElement} element\n * @return {string}\n */\nfunction getCurrentScope(element) {\n let classes = getClasses(element);\n let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);\n if (idx > -1) {\n return classes[idx + 1];\n }\n return '';\n}\n\n/**\n * @param {Array<MutationRecord|null>|null} mxns\n */\nfunction handler(mxns) {\n for (let x=0; x < mxns.length; x++) {\n let mxn = mxns[x];\n if (mxn.target === document.documentElement ||\n mxn.target === document.head) {\n continue;\n }\n for (let i=0; i < mxn.addedNodes.length; i++) {\n let n = mxn.addedNodes[i];\n if (n.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign\n let root = n.getRootNode();\n let currentScope = getCurrentScope(n);\n // node was scoped, but now is in document\n if (currentScope && root === n.ownerDocument) {\n StyleTransformer.dom(n, currentScope, true);\n } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let newScope;\n let host = /** @type {ShadowRoot} */(root).host;\n // element may no longer be in a shadowroot\n if (!host) {\n continue;\n }\n newScope = getIsExtends(host).is;\n if (currentScope === newScope) {\n // make sure all the subtree elements are scoped correctly\n let unscoped = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(\n n, `:not(.${StyleTransformer.SCOPE_NAME})`);\n for (let j = 0; j < unscoped.length; j++) {\n StyleTransformer.element(unscoped[j], currentScope);\n }\n continue;\n }\n if (currentScope) {\n StyleTransformer.dom(n, currentScope, true);\n }\n StyleTransformer.dom(n, newScope);\n }\n }\n }\n}\n\nif (!nativeShadow) {\n let observer = new MutationObserver(handler);\n let start = (node) => {\n observer.observe(node, {childList: true, subtree: true});\n }\n let nativeCustomElements = (window['customElements'] &&\n !window['customElements']['polyfillWrapFlushCallback']);\n // need to start immediately with native custom elements\n // TODO(dfreedm): with polyfilled HTMLImports and native custom elements\n // excessive mutations may be observed; this can be optimized via cooperation\n // with the HTMLImports polyfill.\n if (nativeCustomElements) {\n start(document);\n } else {\n let delayedStart = () => {\n start(document.body);\n }\n // use polyfill timing if it's available\n if (window['HTMLImports']) {\n window['HTMLImports']['whenReady'](delayedStart);\n // otherwise push beyond native imports being ready\n // which requires RAF + readystate interactive.\n } else {\n requestAnimationFrame(function() {\n if (document.readyState === 'loading') {\n let listener = function() {\n delayedStart();\n document.removeEventListener('readystatechange', listener);\n }\n document.addEventListener('readystatechange', listener);\n } else {\n delayedStart();\n }\n });\n }\n }\n\n flush = function() {\n handler(observer.takeRecords());\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {Promise<void>} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {parse, StyleNode} from './css-parse.js';\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport StyleProperties from './style-properties.js';\nimport placeholderMap from './style-placeholder.js';\nimport StyleInfo from './style-info.js';\nimport StyleCache from './style-cache.js';\nimport {flush as watcherFlush} from './document-watcher.js';\nimport templateMap from './template-map.js';\nimport * as ApplyShimUtils from './apply-shim-utils.js';\nimport documentWait from './document-wait.js';\nimport {updateNativeProperties, detectMixin} from './common-utils.js';\nimport {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars\n\n/**\n * @const {StyleCache}\n */\nconst styleCache = new StyleCache();\n\nexport default class ScopingShim {\n constructor() {\n this._scopeCounter = {};\n this._documentOwner = document.documentElement;\n let ast = new StyleNode();\n ast['rules'] = [];\n this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));\n this._elementsHaveApplied = false;\n this._applyShim = null;\n /** @type {?CustomStyleInterfaceInterface} */\n this._customStyleInterface = null;\n documentWait(() => {\n this._ensure();\n });\n }\n flush() {\n watcherFlush();\n }\n _generateScopeSelector(name) {\n let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;\n return `${name}-${id}`;\n }\n getStyleAst(style) {\n return StyleUtil.rulesForStyle(style);\n }\n styleAstToString(ast) {\n return StyleUtil.toCssText(ast);\n }\n _gatherStyles(template) {\n return StyleUtil.gatherStyleText(template.content);\n }\n _getCssBuild(template) {\n let style = template.content.querySelector('style');\n if (!style) {\n return '';\n }\n return style.getAttribute('css-build') || '';\n }\n /**\n * Prepare the styling and template for the given element type\n *\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplate(template, elementName, typeExtension) {\n if (template._prepared) {\n return;\n }\n template._prepared = true;\n template.name = elementName;\n template.extends = typeExtension;\n templateMap[elementName] = template;\n let cssBuild = this._getCssBuild(template);\n let cssText = this._gatherStyles(template);\n let info = {\n is: elementName,\n extends: typeExtension,\n __cssBuild: cssBuild,\n };\n if (!nativeShadow) {\n StyleTransformer.dom(template.content, elementName);\n }\n // check if the styling has mixin definitions or uses\n this._ensure();\n let hasMixins = detectMixin(cssText)\n let ast = parse(cssText);\n // only run the applyshim transforms if there is a mixin involved\n if (hasMixins && nativeCssVariables && this._applyShim) {\n this._applyShim['transformRules'](ast, elementName);\n }\n template['_styleAst'] = ast;\n template._cssBuild = cssBuild;\n\n let ownPropertyNames = [];\n if (!nativeCssVariables) {\n ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);\n }\n if (!ownPropertyNames.length || nativeCssVariables) {\n let root = nativeShadow ? template.content : null;\n let placeholder = placeholderMap[elementName];\n let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);\n template._style = style;\n }\n template._ownPropertyNames = ownPropertyNames;\n }\n _generateStaticStyle(info, rules, shadowroot, placeholder) {\n let cssText = StyleTransformer.elementStyles(info, rules);\n if (cssText.length) {\n return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);\n }\n }\n _prepareHost(host) {\n let {is, typeExtension} = StyleUtil.getIsExtends(host);\n let placeholder = placeholderMap[is];\n let template = templateMap[is];\n let ast;\n let ownStylePropertyNames;\n let cssBuild;\n if (template) {\n ast = template['_styleAst'];\n ownStylePropertyNames = template._ownPropertyNames;\n cssBuild = template._cssBuild;\n }\n return StyleInfo.set(host,\n new StyleInfo(\n ast,\n placeholder,\n ownStylePropertyNames,\n is,\n typeExtension,\n cssBuild\n )\n );\n }\n _ensureApplyShim() {\n if (this._applyShim) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {\n this._applyShim = window.ShadyCSS.ApplyShim;\n this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n }\n _ensureCustomStyleInterface() {\n if (this._customStyleInterface) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {\n this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);\n /** @type {function(!HTMLStyleElement)} */\n this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};\n this._customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {\n this.flushCustomStyles();\n }\n })\n };\n }\n }\n _ensure() {\n this._ensureApplyShim();\n this._ensureCustomStyleInterface();\n }\n /**\n * Flush and apply custom styles to document\n */\n flushCustomStyles() {\n this._ensure();\n if (!this._customStyleInterface) {\n return;\n }\n let customStyles = this._customStyleInterface['processStyles']();\n // early return if custom-styles don't need validation\n if (!this._customStyleInterface['enqueued']) {\n return;\n }\n if (!nativeCssVariables) {\n this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);\n this._applyCustomStyles(customStyles);\n } else {\n this._revalidateCustomStyleApplyShim(customStyles);\n }\n this._customStyleInterface['enqueued'] = false;\n // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree\n if (this._elementsHaveApplied && !nativeCssVariables) {\n this.styleDocument();\n }\n }\n /**\n * Apply styles for the given element\n *\n * @param {!HTMLElement} host\n * @param {Object=} overrideProps\n */\n styleElement(host, overrideProps) {\n let {is} = StyleUtil.getIsExtends(host);\n let styleInfo = StyleInfo.get(host);\n if (!styleInfo) {\n styleInfo = this._prepareHost(host);\n }\n // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called\n if (!this._isRootOwner(host)) {\n this._elementsHaveApplied = true;\n }\n if (overrideProps) {\n styleInfo.overrideStyleProperties =\n styleInfo.overrideStyleProperties || {};\n Object.assign(styleInfo.overrideStyleProperties, overrideProps);\n }\n if (!nativeCssVariables) {\n this._updateProperties(host, styleInfo);\n if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {\n this._applyStyleProperties(host, styleInfo);\n }\n } else {\n if (styleInfo.overrideStyleProperties) {\n updateNativeProperties(host, styleInfo.overrideStyleProperties);\n }\n let template = templateMap[is];\n // bail early if there is no shadowroot for this element\n if (!template && !this._isRootOwner(host)) {\n return;\n }\n if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {\n // update template\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this._ensure();\n this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);\n template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update instance if native shadowdom\n if (nativeShadow) {\n let root = host.shadowRoot;\n if (root) {\n let style = root.querySelector('style');\n style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n }\n }\n styleInfo.styleRules = template['_styleAst'];\n }\n }\n }\n _styleOwnerForNode(node) {\n let root = node.getRootNode();\n let host = root.host;\n if (host) {\n if (StyleInfo.get(host)) {\n return host;\n } else {\n return this._styleOwnerForNode(host);\n }\n }\n return this._documentOwner;\n }\n _isRootOwner(node) {\n return (node === this._documentOwner);\n }\n _applyStyleProperties(host, styleInfo) {\n let is = StyleUtil.getIsExtends(host).is;\n let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);\n let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;\n let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;\n let oldScopeSelector = styleInfo.scopeSelector;\n // only generate new scope if cached style is not found\n styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);\n let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);\n if (!nativeShadow) {\n StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);\n }\n if (!cacheEntry) {\n styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);\n }\n return style;\n }\n _updateProperties(host, styleInfo) {\n let owner = this._styleOwnerForNode(host);\n let ownerStyleInfo = StyleInfo.get(owner);\n let ownerProperties = ownerStyleInfo.styleProperties;\n let props = Object.create(ownerProperties || null);\n let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);\n let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);\n let propertiesMatchingHost = propertyData.properties\n Object.assign(\n props,\n hostAndRootProps.hostProps,\n propertiesMatchingHost,\n hostAndRootProps.rootProps\n );\n this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);\n StyleProperties.reify(props);\n styleInfo.styleProperties = props;\n }\n _mixinOverrideStyles(props, overrides) {\n for (let p in overrides) {\n let v = overrides[p];\n // skip override props if they are not truthy or 0\n // in order to fall back to inherited values\n if (v || v === 0) {\n props[p] = v;\n }\n }\n }\n /**\n * Update styles of the whole document\n *\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.styleSubtree(this._documentOwner, properties);\n }\n /**\n * Update styles of a subtree\n *\n * @param {!HTMLElement} host\n * @param {Object=} properties\n */\n styleSubtree(host, properties) {\n let root = host.shadowRoot;\n if (root || this._isRootOwner(host)) {\n this.styleElement(host, properties);\n }\n // process the shadowdom children of `host`\n let shadowChildren = root && (root.children || root.childNodes);\n if (shadowChildren) {\n for (let i = 0; i < shadowChildren.length; i++) {\n let c = /** @type {!HTMLElement} */(shadowChildren[i]);\n this.styleSubtree(c);\n }\n } else {\n // process the lightdom children of `host`\n let children = host.children || host.childNodes;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n let c = /** @type {!HTMLElement} */(children[i]);\n this.styleSubtree(c);\n }\n }\n }\n }\n /* Custom Style operations */\n _revalidateCustomStyleApplyShim(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n this._revalidateApplyShim(s);\n }\n }\n }\n _applyCustomStyles(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);\n }\n }\n }\n transformCustomStyleForDocument(style) {\n let ast = StyleUtil.rulesForStyle(style);\n StyleUtil.forEachRule(ast, (rule) => {\n if (nativeShadow) {\n StyleTransformer.normalizeRootSelector(rule);\n } else {\n StyleTransformer.documentRule(rule);\n }\n if (nativeCssVariables) {\n this._ensure();\n this._applyShim && this._applyShim['transformRule'](rule);\n }\n });\n if (nativeCssVariables) {\n style.textContent = StyleUtil.toCssText(ast);\n } else {\n this._documentOwnerStyleInfo.styleRules['rules'].push(ast);\n }\n }\n _revalidateApplyShim(style) {\n if (nativeCssVariables && this._applyShim) {\n let ast = StyleUtil.rulesForStyle(style);\n this._ensure();\n this._applyShim['transformRules'](ast);\n style.textContent = StyleUtil.toCssText(ast);\n }\n }\n getComputedStyleValue(element, property) {\n let value;\n if (!nativeCssVariables) {\n // element is either a style host, or an ancestor of a style host\n let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));\n value = styleInfo.styleProperties[property];\n }\n // fall back to the property value from the computed styling\n value = value || window.getComputedStyle(element).getPropertyValue(property);\n // trim whitespace that can come after the `:` in css\n // example: padding: 2px -> \" 2px\"\n return value ? value.trim() : '';\n }\n // given an element and a classString, replaces\n // the element's class with the provided classString and adds\n // any necessary ShadyCSS static and property based scoping selectors\n setElementClass(element, classString) {\n let root = element.getRootNode();\n let classes = classString ? classString.split(/\\s/) : [];\n let scopeName = root.host && root.host.localName;\n // If no scope, try to discover scope name from existing class.\n // This can occur if, for example, a template stamped element that\n // has been scoped is manipulated when not in a root.\n if (!scopeName) {\n var classAttr = element.getAttribute('class');\n if (classAttr) {\n let k$ = classAttr.split(/\\s/);\n for (let i=0; i < k$.length; i++) {\n if (k$[i] === StyleTransformer.SCOPE_NAME) {\n scopeName = k$[i+1];\n break;\n }\n }\n }\n }\n if (scopeName) {\n classes.push(StyleTransformer.SCOPE_NAME, scopeName);\n }\n if (!nativeCssVariables) {\n let styleInfo = StyleInfo.get(element);\n if (styleInfo && styleInfo.scopeSelector) {\n classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);\n }\n }\n StyleUtil.setElementClassRaw(element, classes.join(' '));\n }\n _styleInfoForNode(node) {\n return StyleInfo.get(node);\n }\n}\n\n/* exports */\nScopingShim.prototype['flush'] = ScopingShim.prototype.flush;\nScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;\nScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;\nScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;\nScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;\nScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;\nScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;\nScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;\nScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;\nScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;\nScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;\nScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;\nObject.defineProperties(ScopingShim.prototype, {\n 'nativeShadow': {\n get() {\n return nativeShadow;\n }\n },\n 'nativeCss': {\n get() {\n return nativeCssVariables;\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ScopingShim from '../src/scoping-shim.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ScopingShim} */\nconst scopingShim = new ScopingShim();\n\nlet ApplyShim, CustomStyleInterface;\n\nif (window['ShadyCSS']) {\n ApplyShim = window['ShadyCSS']['ApplyShim'];\n CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];\n}\n\nwindow.ShadyCSS = {\n ScopingShim: scopingShim,\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplate(template, elementName, elementExtends)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n scopingShim.flushCustomStyles();\n scopingShim.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleDocument(properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return scopingShim.getComputedStyleValue(element, property);\n },\n\n nativeCss: nativeCssVariables,\n\n nativeShadow: nativeShadow\n};\n\nif (ApplyShim) {\n window.ShadyCSS.ApplyShim = ApplyShim;\n}\n\nif (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n}","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\nlet customElements = window['customElements'];\nlet HTMLImports = window['HTMLImports'];\nlet Template = window['HTMLTemplateElement'];\n\n// global for (1) existence means `WebComponentsReady` will file,\n// (2) WebComponents.ready == true means event has fired.\nwindow.WebComponents = window.WebComponents || {};\n\nif (customElements && customElements['polyfillWrapFlushCallback']) {\n // Here we ensure that the public `HTMLImports.whenReady`\n // always comes *after* custom elements have upgraded.\n let flushCallback;\n let runAndClearCallback = function runAndClearCallback() {\n if (flushCallback) {\n // make sure to run the HTMLTemplateElement polyfill before custom elements upgrade\n if (Template.bootstrap) {\n Template.bootstrap(window.document);\n }\n let cb = flushCallback;\n flushCallback = null;\n cb();\n return true;\n }\n }\n let origWhenReady = HTMLImports['whenReady'];\n customElements['polyfillWrapFlushCallback'](function(cb) {\n flushCallback = cb;\n origWhenReady(runAndClearCallback);\n });\n\n HTMLImports['whenReady'] = function(cb) {\n origWhenReady(function() {\n // custom element code may add dynamic imports\n // to match processing of native custom elements before\n // domContentLoaded, we wait for these imports to resolve first.\n if (runAndClearCallback()) {\n HTMLImports['whenReady'](cb);\n } else {\n cb();\n }\n });\n }\n\n}\n\nHTMLImports['whenReady'](function() {\n requestAnimationFrame(function() {\n window.WebComponents.ready = true;\n document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));\n });\n});","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n// It's desireable to provide a default stylesheet\n// that's convenient for styling unresolved elements, but\n// it's cumbersome to have to include this manually in every page.\n// It would make sense to put inside some HTMLImport but\n// the HTMLImports polyfill does not allow loading of stylesheets\n// that block rendering. Therefore this injection is tolerated here.\n//\n// NOTE: position: relative fixes IE's failure to inherit opacity\n// when a child is not statically positioned.\nlet style = document.createElement('style');\nstyle.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;'\n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden; position: relative;'\n + ' } \\n'\n ;\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js
new file mode 100644
index 00000000000..2e9bfc15b7e
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js
@@ -0,0 +1,55 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){/*
+
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';(function(h){function B(a,b){if("function"===typeof window.CustomEvent)return new CustomEvent(a,b);var c=document.createEvent("CustomEvent");c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c}function n(a){if(w)return a.ownerDocument!==document?a.ownerDocument:null;var b=a.__importDoc;if(!b&&a.parentNode){b=a.parentNode;if("function"===typeof b.closest)b=b.closest("link[rel=import]");else for(;!r(b)&&(b=b.parentNode););a.__importDoc=b}return b}function L(a){var b=l(document,
+"link[rel=import]:not([import-dependency])"),c=b.length;c?g(b,function(b){return t(b,function(){0===--c&&a()})}):a()}function C(a){function b(){"loading"!==document.readyState&&document.body&&(document.removeEventListener("readystatechange",b),a())}document.addEventListener("readystatechange",b);b()}function D(a){C(function(){return L(function(){return a&&a()})})}function t(a,b){if(a.__loaded)b&&b();else if("script"===a.localName&&!a.src||"style"===a.localName&&!a.firstChild)a.__loaded=!0,b&&b();
+else{var c=function(d){a.removeEventListener(d.type,c);a.__loaded=!0;b&&b()};a.addEventListener("load",c);x&&"style"===a.localName||a.addEventListener("error",c)}}function r(a){return a.nodeType===Node.ELEMENT_NODE&&"link"===a.localName&&"import"===a.rel}function k(){var a=this;this.a={};this.b=0;this.g=new MutationObserver(function(b){return a.A(b)});this.g.observe(document.head,{childList:!0,subtree:!0});this.loadImports(document)}function E(a){g(l(a,"template"),function(a){g(l(a.content,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){var b=document.createElement("script");g(a.attributes,function(a){return b.setAttribute(a.name,a.value)});b.textContent=a.textContent;a.parentNode.replaceChild(b,a)});E(a.content)})}function l(a,b){return a&&a.childNodes.length?a.querySelectorAll(b):M}function g(a,b,c){var d=a?a.length:0,f=c?-1:1;for(c=c?d-1:0;c<d&&0<=c;c+=f)b(a[c],c)}var p=document.createElement("link"),w="import"in p,M=p.querySelectorAll("*"),y=null;!1==="currentScript"in document&&Object.defineProperty(document,"currentScript",
+{get:function(){return y||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null)},configurable:!0});var N=/(url\()([^)]*)(\))/g,O=/(@import[\s]+(?!url\())([^;]*)(;)/g,P=/(<link[^>]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,e={v:function(a,b){a.href&&a.setAttribute("href",e.c(a.getAttribute("href"),b));a.src&&a.setAttribute("src",e.c(a.getAttribute("src"),b));if("style"===a.localName){var c=e.o(a.textContent,b,N);a.textContent=e.o(c,b,O)}},o:function(a,b,c){return a.replace(c,
+function(a,c,m,g){a=m.replace(/["']/g,"");b&&(a=e.c(a,b));return c+"'"+a+"'"+g})},c:function(a,b){if(void 0===e.f){e.f=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";e.f="http://a/c%20d"===c.href}catch(d){}}if(e.f)return(new URL(a,b)).href;c=e.s;c||(c=document.implementation.createHTMLDocument("temp"),e.s=c,c.i=c.createElement("base"),c.head.appendChild(c.i),c.h=c.createElement("a"));c.i.href=b;c.h.href=a;return c.h.href||a}},F={async:!0,load:function(a,b,c){if(a)if(a.match(/^data:/)){a=
+a.split(",");var d=a[1];d=-1<a[0].indexOf(";base64")?atob(d):decodeURIComponent(d);b(d)}else{var f=new XMLHttpRequest;f.open("GET",a,F.async);f.onload=function(){var a=f.responseURL||f.getResponseHeader("Location");a&&0===a.indexOf("/")&&(a=(location.origin||location.protocol+"//"+location.host)+a);var d=f.response||f.responseText;304===f.status||0===f.status||200<=f.status&&300>f.status?b(d,a):c(d)};f.send()}else c("error: href must be specified")}},x=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);
+k.prototype.loadImports=function(a){var b=this;g(l(a,"link[rel=import]"),function(a){return b.l(a)})};k.prototype.l=function(a){var b=this,c=a.href;if(void 0!==this.a[c]){var d=this.a[c];d&&d.__loaded&&(a.__import=d,this.j(a))}else this.b++,this.a[c]="pending",F.load(c,function(a,d){a=b.B(a,d||c);b.a[c]=a;b.b--;b.loadImports(a);b.m()},function(){b.a[c]=null;b.b--;b.m()})};k.prototype.B=function(a,b){if(!a)return document.createDocumentFragment();x&&(a=a.replace(P,function(a,b,c){return-1===a.indexOf("type=")?
+b+" type=import-disable "+c:a}));var c=document.createElement("template");c.innerHTML=a;if(c.content)a=c.content,E(a);else for(a=document.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);if(c=a.querySelector("base"))b=e.c(c.getAttribute("href"),b),c.removeAttribute("href");var d=0;g(l(a,'link[rel=import],link[rel=stylesheet][href][type=import-disable],style:not([type]),link[rel=stylesheet][href]:not([type]),script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){t(a);e.v(a,b);a.setAttribute("import-dependency","");"script"===a.localName&&!a.src&&a.textContent&&(a.setAttribute("src","data:text/javascript;charset=utf-8,"+encodeURIComponent(a.textContent+("\n//# sourceURL="+b+(d?"-"+d:"")+".js\n"))),a.textContent="",d++)});return a};k.prototype.m=function(){var a=this;if(!this.b){this.g.disconnect();this.flatten(document);var b=!1,c=!1,d=function(){c&&b&&(a.loadImports(document),a.b||(a.g.observe(document.head,{childList:!0,subtree:!0}),a.w()))};
+this.D(function(){c=!0;d()});this.C(function(){b=!0;d()})}};k.prototype.flatten=function(a){var b=this;g(l(a,"link[rel=import]"),function(a){var c=b.a[a.href];(a.__import=c)&&c.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(b.a[a.href]=a,a.readyState="loading",a.__import=a,b.flatten(c),a.appendChild(c))})};k.prototype.C=function(a){function b(f){if(f<d){var m=c[f],e=document.createElement("script");m.removeAttribute("import-dependency");g(m.attributes,function(a){return e.setAttribute(a.name,a.value)});
+y=e;m.parentNode.replaceChild(e,m);t(e,function(){y=null;b(f+1)})}else a()}var c=l(document,"script[import-dependency]"),d=c.length;b(0)};k.prototype.D=function(a){var b=l(document,"style[import-dependency],link[rel=stylesheet][import-dependency]"),c=b.length;if(c){var d=x&&!!document.querySelector("link[rel=stylesheet][href][type=import-disable]");g(b,function(b){t(b,function(){b.removeAttribute("import-dependency");0===--c&&a()});if(d&&b.parentNode!==document.head){var e=document.createElement(b.localName);
+e.__appliedElement=b;e.setAttribute("type","import-placeholder");b.parentNode.insertBefore(e,b.nextSibling);for(e=n(b);e&&n(e);)e=n(e);e.parentNode!==document.head&&(e=null);document.head.insertBefore(b,e);b.removeAttribute("type")}})}else a()};k.prototype.w=function(){var a=this;g(l(document,"link[rel=import]"),function(b){return a.j(b)},!0)};k.prototype.j=function(a){a.__loaded||(a.__loaded=!0,a.import&&(a.import.readyState="complete"),a.dispatchEvent(B(a.import?"load":"error",{bubbles:!1,cancelable:!1,
+detail:void 0})))};k.prototype.A=function(a){var b=this;g(a,function(a){return g(a.addedNodes,function(a){a&&a.nodeType===Node.ELEMENT_NODE&&(r(a)?b.l(a):b.loadImports(a))})})};var z=null;if(w)g(l(document,"link[rel=import]"),function(a){a.import&&"loading"===a.import.readyState||(a.__loaded=!0)}),p=function(a){a=a.target;r(a)&&(a.__loaded=!0)},document.addEventListener("load",p,!0),document.addEventListener("error",p,!0);else{var q=Object.getOwnPropertyDescriptor(Node.prototype,"baseURI");Object.defineProperty((!q||
+q.configurable?Node:Element).prototype,"baseURI",{get:function(){var a=r(this)?this:n(this);return a?a.href:q&&q.get?q.get.call(this):(document.querySelector("base")||window.location).href},configurable:!0,enumerable:!0});Object.defineProperty(HTMLLinkElement.prototype,"import",{get:function(){return this.__import||null},configurable:!0,enumerable:!0});C(function(){z=new k})}D(function(){return document.dispatchEvent(B("HTMLImportsLoaded",{cancelable:!0,bubbles:!0,detail:void 0}))});h.useNative=w;
+h.whenReady=D;h.importForElement=n;h.loadImports=function(a){z&&z.loadImports(a)}})(window.HTMLImports=window.HTMLImports||{});/*
+
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+var u=window.customElements,v=window.HTMLImports,A=window.HTMLTemplateElement;window.WebComponents=window.WebComponents||{};if(u&&u.polyfillWrapFlushCallback){var G,H=function(){if(G){A.u&&A.u(window.document);var h=G;G=null;h();return!0}},I=v.whenReady;u.polyfillWrapFlushCallback(function(h){G=h;I(H)});v.whenReady=function(h){I(function(){H()?v.whenReady(h):h()})}}
+v.whenReady(function(){requestAnimationFrame(function(){window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})});var J=document.createElement("style");J.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var K=document.querySelector("head");K.insertBefore(J,K.firstChild);/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+}).call(this);
+
+//# sourceMappingURL=webcomponents-hi.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js.map
new file mode 100644
index 00000000000..542d76c1aca
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-hi.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/@webcomponents/html-imports/src/html-imports.js","src/post-polyfill.js","src/unresolved.js"],"names":["scope","newCustomEvent","type","params","window","CustomEvent","event","document","createEvent","initCustomEvent","bubbles","cancelable","detail","importForElement","element","useNative","ownerDocument","doc","parentNode","closest","importSelector","isImportLink","whenImportsReady","callback","imports","QSA","rootImportSelector","pending","length","forEach","imp","whenElementLoaded","whenDocumentReady","stateChanged","readyState","body","removeEventListener","addEventListener","whenReady","localName","src","firstChild","onLoadingDone","isIE","node","nodeType","Node","ELEMENT_NODE","rel","constructor","Importer","documents","inflight","dynamicImportsMO","MutationObserver","m","handleMutations","observe","head","childList","subtree","loadImports","replaceScripts","fragment","template","content","scriptsSelector","script","clone","createElement","attributes","attr","setAttribute","name","value","textContent","replaceChild","selector","childNodes","querySelectorAll","emptyNodeList","list","inverseOrder","increment","i","link","currentScript","Object","defineProperty","get","scripts","configurable","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","STYLESHEET_REGEXP","Path","fixUrls","base","href","resolveUrl","getAttribute","r","replaceUrls","text","linkUrl","regexp","replace","pre","url","post","urlPath","undefined","__workingURL","u","URL","pathname","e","__tempDoc","implementation","createHTMLDocument","__base","appendChild","__anchor","Xhr","async","load","success","fail","match","pieces","split","resource","header","indexOf","atob","decodeURIComponent","request","XMLHttpRequest","open","onload","request.onload","redirectedUrl","responseURL","getResponseHeader","location","origin","protocol","host","response","responseText","status","send","test","navigator","userAgent","links","loadImport","fireEventIfNeeded","makeDocument","processImportsIfLoadingDone","createDocumentFragment","p1","p2","innerHTML","baseEl","querySelector","removeAttribute","inlineScriptIndex","n$","importDependenciesSelector","n","importDependencyAttr","encodeURIComponent","num","disconnect","flatten","scriptsOk","stylesOk","fireEvents","waitForStyles","runScripts","DOCUMENT_FRAGMENT_NODE","cloneScript","l","s","s$","pendingScriptsSelector","pendingStylesSelector","needsMove","disabledLinkSelector","placeholder","insertBefore","nextSibling","newSibling","import","dispatchEvent","eventType","mutations","addedNodes","elem","importer","imps","target","native_baseURI","getOwnPropertyDescriptor","prototype","klass","Element","ownerDoc","call","enumerable","HTMLLinkElement","HTMLImports","customElements","Template","WebComponents","flushCallback","runAndClearCallback","bootstrap","cb","origWhenReady","requestAnimationFrame","ready","style"],"mappings":"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","file":"webcomponents-hi.js","sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(scope => {\n\n /********************* base setup *********************/\n const link = document.createElement('link');\n const useNative = Boolean('import' in link);\n const emptyNodeList = link.querySelectorAll('*');\n\n // Polyfill `currentScript` for browsers without it.\n let currentScript = null;\n if ('currentScript' in document === false) {\n Object.defineProperty(document, 'currentScript', {\n get() {\n return currentScript ||\n // NOTE: only works when called in synchronously executing code.\n // readyState should check if `loading` but IE10 is\n // interactive when scripts run so we cheat. This is not needed by\n // html-imports polyfill but helps generally polyfill `currentScript`.\n (document.readyState !== 'complete' ?\n document.scripts[document.scripts.length - 1] : null);\n },\n configurable: true\n });\n }\n\n /**\n * @param {Array|NodeList|NamedNodeMap} list\n * @param {!Function} callback\n * @param {boolean=} inverseOrder\n */\n const forEach = (list, callback, inverseOrder) => {\n const length = list ? list.length : 0;\n const increment = inverseOrder ? -1 : 1;\n let i = inverseOrder ? length - 1 : 0;\n for (; i < length && i >= 0; i = i + increment) {\n callback(list[i], i);\n }\n };\n\n /**\n * @param {!Node} node\n * @param {!string} selector\n * @return {!NodeList<!Element>}\n */\n const QSA = (node, selector) => {\n // IE 11 throws a SyntaxError if a node with no children is queried with\n // a selector containing the `:not([type])` syntax.\n if (!node.childNodes.length) {\n return emptyNodeList;\n }\n return node.querySelectorAll(selector);\n };\n\n /**\n * @param {!DocumentFragment} fragment\n */\n const replaceScripts = (fragment) => {\n forEach(QSA(fragment, 'template'), template => {\n forEach(QSA(template.content, scriptsSelector), script => {\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n forEach(script.attributes, attr => clone.setAttribute(attr.name, attr.value));\n clone.textContent = script.textContent;\n script.parentNode.replaceChild(clone, script);\n });\n replaceScripts(template.content);\n });\n };\n\n /********************* path fixup *********************/\n const CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n const CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n const STYLESHEET_REGEXP = /(<link[^>]*)(rel=['|\"]?stylesheet['|\"]?[^>]*>)/g;\n\n // path fixup: style elements in imports must be made relative to the main\n // document. We fixup url's in url() and @import.\n const Path = {\n\n fixUrls(element, base) {\n if (element.href) {\n element.setAttribute('href',\n Path.resolveUrl(element.getAttribute('href'), base));\n }\n if (element.src) {\n element.setAttribute('src',\n Path.resolveUrl(element.getAttribute('src'), base));\n }\n if (element.localName === 'style') {\n const r = Path.replaceUrls(element.textContent, base, CSS_URL_REGEXP);\n element.textContent = Path.replaceUrls(r, base, CSS_IMPORT_REGEXP);\n }\n },\n\n replaceUrls(text, linkUrl, regexp) {\n return text.replace(regexp, (m, pre, url, post) => {\n let urlPath = url.replace(/[\"']/g, '');\n if (linkUrl) {\n urlPath = Path.resolveUrl(urlPath, linkUrl);\n }\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n },\n\n resolveUrl(url, base) {\n // Lazy feature detection.\n if (Path.__workingURL === undefined) {\n Path.__workingURL = false;\n try {\n const u = new URL('b', 'http://a');\n u.pathname = 'c%20d';\n Path.__workingURL = (u.href === 'http://a/c%20d');\n } catch (e) {}\n }\n\n if (Path.__workingURL) {\n return (new URL(url, base)).href;\n }\n\n // Fallback to creating an anchor into a disconnected document.\n let doc = Path.__tempDoc;\n if (!doc) {\n doc = document.implementation.createHTMLDocument('temp');\n Path.__tempDoc = doc;\n doc.__base = doc.createElement('base');\n doc.head.appendChild(doc.__base);\n doc.__anchor = doc.createElement('a');\n }\n doc.__base.href = base;\n doc.__anchor.href = url;\n return doc.__anchor.href || url;\n }\n };\n\n /********************* Xhr processor *********************/\n const Xhr = {\n\n async: true,\n\n /**\n * @param {!string} url\n * @param {!function(!string, string=)} success\n * @param {!function(!string)} fail\n */\n load(url, success, fail) {\n if (!url) {\n fail('error: href must be specified');\n } else if (url.match(/^data:/)) {\n // Handle Data URI Scheme\n const pieces = url.split(',');\n const header = pieces[0];\n let resource = pieces[1];\n if (header.indexOf(';base64') > -1) {\n resource = atob(resource);\n } else {\n resource = decodeURIComponent(resource);\n }\n success(resource);\n } else {\n const request = new XMLHttpRequest();\n request.open('GET', url, Xhr.async);\n request.onload = () => {\n // Servers redirecting an import can add a Location header to help us\n // polyfill correctly. Handle relative and full paths.\n // Prefer responseURL which already resolves redirects\n // https://xhr.spec.whatwg.org/#the-responseurl-attribute\n let redirectedUrl = request.responseURL || request.getResponseHeader('Location');\n if (redirectedUrl && redirectedUrl.indexOf('/') === 0) {\n // In IE location.origin might not work\n // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7\n const origin = (location.origin || location.protocol + '//' + location.host);\n redirectedUrl = origin + redirectedUrl;\n }\n const resource = /** @type {string} */ (request.response || request.responseText);\n if (request.status === 304 || request.status === 0 ||\n request.status >= 200 && request.status < 300) {\n success(resource, redirectedUrl);\n } else {\n fail(resource);\n }\n };\n request.send();\n }\n }\n };\n\n /********************* importer *********************/\n\n const isIE = /Trident/.test(navigator.userAgent) ||\n /Edge\\/\\d./i.test(navigator.userAgent);\n\n const importSelector = 'link[rel=import]';\n\n // Used to disable loading of resources.\n const importDisableType = 'import-disable';\n\n const disabledLinkSelector = `link[rel=stylesheet][href][type=${importDisableType}]`;\n\n const scriptsSelector = `script:not([type]),script[type=\"application/javascript\"],` +\n `script[type=\"text/javascript\"]`;\n\n const importDependenciesSelector = `${importSelector},${disabledLinkSelector},` +\n `style:not([type]),link[rel=stylesheet][href]:not([type]),` + scriptsSelector;\n\n const importDependencyAttr = 'import-dependency';\n\n const rootImportSelector = `${importSelector}:not([${importDependencyAttr}])`;\n\n const pendingScriptsSelector = `script[${importDependencyAttr}]`;\n\n const pendingStylesSelector = `style[${importDependencyAttr}],` +\n `link[rel=stylesheet][${importDependencyAttr}]`;\n\n /**\n * Importer will:\n * - load any linked import documents (with deduping)\n * - whenever an import is loaded, prompt the parser to try to parse\n * - observe imported documents for new elements (these are handled via the\n * dynamic importer)\n */\n class Importer {\n constructor() {\n this.documents = {};\n // Used to keep track of pending loads, so that flattening and firing of\n // events can be done when all resources are ready.\n this.inflight = 0;\n this.dynamicImportsMO = new MutationObserver(m => this.handleMutations(m));\n // Observe changes on <head>.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n // 1. Load imports contents\n // 2. Assign them to first import links on the document\n // 3. Wait for import styles & scripts to be done loading/running\n // 4. Fire load/error events\n this.loadImports(document);\n }\n\n /**\n * @param {!(HTMLDocument|DocumentFragment|Element)} doc\n */\n loadImports(doc) {\n const links = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(links, link => this.loadImport(link));\n }\n\n /**\n * @param {!HTMLLinkElement} link\n */\n loadImport(link) {\n const url = link.href;\n // This resource is already being handled by another import.\n if (this.documents[url] !== undefined) {\n // If import is already loaded, we can safely associate it to the link\n // and fire the load/error event.\n const imp = this.documents[url];\n if (imp && imp['__loaded']) {\n link['__import'] = imp;\n this.fireEventIfNeeded(link);\n }\n return;\n }\n this.inflight++;\n // Mark it as pending to notify others this url is being loaded.\n this.documents[url] = 'pending';\n Xhr.load(url, (resource, redirectedUrl) => {\n const doc = this.makeDocument(resource, redirectedUrl || url);\n this.documents[url] = doc;\n this.inflight--;\n // Load subtree.\n this.loadImports(doc);\n this.processImportsIfLoadingDone();\n }, () => {\n // If load fails, handle error.\n this.documents[url] = null;\n this.inflight--;\n this.processImportsIfLoadingDone();\n });\n }\n\n /**\n * Creates a new document containing resource and normalizes urls accordingly.\n * @param {string=} resource\n * @param {string=} url\n * @return {!DocumentFragment}\n */\n makeDocument(resource, url) {\n if (!resource) {\n return document.createDocumentFragment();\n }\n\n if (isIE) {\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order. We disable the loading by\n // setting the type before setting innerHTML to avoid loading\n // resources twice.\n resource = resource.replace(STYLESHEET_REGEXP, (match, p1, p2) => {\n if (match.indexOf('type=') === -1) {\n return `${p1} type=${importDisableType} ${p2}`;\n }\n return match;\n });\n }\n\n let content;\n const template = /** @type {!HTMLTemplateElement} */\n (document.createElement('template'));\n template.innerHTML = resource;\n if (template.content) {\n content = template.content;\n // Clone scripts inside templates since they won't execute when the\n // hosting template is cloned.\n replaceScripts(content);\n } else {\n // <template> not supported, create fragment and move content into it.\n content = document.createDocumentFragment();\n while (template.firstChild) {\n content.appendChild(template.firstChild);\n }\n }\n\n // Support <base> in imported docs. Resolve url and remove its href.\n const baseEl = content.querySelector('base');\n if (baseEl) {\n url = Path.resolveUrl(baseEl.getAttribute('href'), url);\n baseEl.removeAttribute('href');\n }\n\n const n$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)>} */\n (QSA(content, importDependenciesSelector));\n // For source map hints.\n let inlineScriptIndex = 0;\n forEach(n$, n => {\n // Listen for load/error events, then fix urls.\n whenElementLoaded(n);\n Path.fixUrls(n, url);\n // Mark for easier selectors.\n n.setAttribute(importDependencyAttr, '');\n // Generate source map hints for inline scripts.\n if (n.localName === 'script' && !n.src && n.textContent) {\n const num = inlineScriptIndex ? `-${inlineScriptIndex}` : '';\n const content = n.textContent + `\\n//# sourceURL=${url}${num}.js\\n`;\n // We use the src attribute so it triggers load/error events, and it's\n // easier to capture errors (e.g. parsing) like this.\n n.setAttribute('src', 'data:text/javascript;charset=utf-8,' + encodeURIComponent(content));\n n.textContent = '';\n inlineScriptIndex++;\n }\n });\n return content;\n }\n\n /**\n * Waits for loaded imports to finish loading scripts and styles, then fires\n * the load/error events.\n */\n processImportsIfLoadingDone() {\n // Wait until all resources are ready, then load import resources.\n if (this.inflight) return;\n\n // Stop observing, flatten & load resource, then restart observing <head>.\n this.dynamicImportsMO.disconnect();\n this.flatten(document);\n // We wait for styles to load, and at the same time we execute the scripts,\n // then fire the load/error events for imports to have faster whenReady\n // callback execution.\n // NOTE: This is different for native behavior where scripts would be\n // executed after the styles before them are loaded.\n // To achieve that, we could select pending styles and scripts in the\n // document and execute them sequentially in their dom order.\n let scriptsOk = false,\n stylesOk = false;\n const onLoadingDone = () => {\n if (stylesOk && scriptsOk) {\n // Catch any imports that might have been added while we\n // weren't looking, wait for them as well.\n this.loadImports(document);\n if (this.inflight) return;\n\n // Restart observing.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n this.fireEvents();\n }\n }\n this.waitForStyles(() => {\n stylesOk = true;\n onLoadingDone();\n });\n this.runScripts(() => {\n scriptsOk = true;\n onLoadingDone();\n });\n }\n\n /**\n * @param {!HTMLDocument} doc\n */\n flatten(doc) {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(n$, n => {\n const imp = this.documents[n.href];\n n['__import'] = /** @type {!Document} */ (imp);\n if (imp && imp.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n // We set the .import to be the link itself, and update its readyState.\n // Other links with the same href will point to this link.\n this.documents[n.href] = n;\n n.readyState = 'loading';\n n['__import'] = n;\n this.flatten(imp);\n n.appendChild(imp);\n }\n });\n }\n\n /**\n * Replaces all the imported scripts with a clone in order to execute them.\n * Updates the `currentScript`.\n * @param {!function()} callback\n */\n runScripts(callback) {\n const s$ = QSA(document, pendingScriptsSelector);\n const l = s$.length;\n const cloneScript = i => {\n if (i < l) {\n // The pending scripts have been generated through innerHTML and\n // browsers won't execute them for security reasons. We cannot use\n // s.cloneNode(true) either, the only way to run the script is manually\n // creating a new element and copying its attributes.\n const s = s$[i];\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n // Remove import-dependency attribute to avoid double cloning.\n s.removeAttribute(importDependencyAttr);\n forEach(s.attributes, attr => clone.setAttribute(attr.name, attr.value));\n // Update currentScript and replace original with clone script.\n currentScript = clone;\n s.parentNode.replaceChild(clone, s);\n whenElementLoaded(clone, () => {\n currentScript = null;\n cloneScript(i + 1);\n });\n } else {\n callback();\n }\n };\n cloneScript(0);\n }\n\n /**\n * Waits for all the imported stylesheets/styles to be loaded.\n * @param {!function()} callback\n */\n waitForStyles(callback) {\n const s$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLStyleElement)>} */\n (QSA(document, pendingStylesSelector));\n let pending = s$.length;\n if (!pending) {\n callback();\n return;\n }\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10472273/\n // If there is one <link rel=stylesheet> imported, we must move all imported\n // links and styles to <head>.\n const needsMove = isIE && !!document.querySelector(disabledLinkSelector);\n forEach(s$, s => {\n // Listen for load/error events, remove selector once is done loading.\n whenElementLoaded(s, () => {\n s.removeAttribute(importDependencyAttr);\n if (--pending === 0) {\n callback();\n }\n });\n // Check if was already moved to head, to handle the case where the element\n // has already been moved but it is still loading.\n if (needsMove && s.parentNode !== document.head) {\n // Replace the element we're about to move with a placeholder.\n const placeholder = document.createElement(s.localName);\n // Add reference of the moved element.\n placeholder['__appliedElement'] = s;\n // Disable this from appearing in document.styleSheets.\n placeholder.setAttribute('type', 'import-placeholder');\n // Append placeholder next to the sibling, and move original to <head>.\n s.parentNode.insertBefore(placeholder, s.nextSibling);\n let newSibling = importForElement(s);\n while (newSibling && importForElement(newSibling)) {\n newSibling = importForElement(newSibling);\n }\n if (newSibling.parentNode !== document.head) {\n newSibling = null;\n }\n document.head.insertBefore(s, newSibling);\n // Enable the loading of <link rel=stylesheet>.\n s.removeAttribute('type');\n }\n });\n }\n\n /**\n * Fires load/error events for imports in the right order .\n */\n fireEvents() {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n // Inverse order to have events firing bottom-up.\n forEach(n$, n => this.fireEventIfNeeded(n), true);\n }\n\n /**\n * Fires load/error event for the import if this wasn't done already.\n * @param {!HTMLLinkElement} link\n */\n fireEventIfNeeded(link) {\n // Don't fire twice same event.\n if (!link['__loaded']) {\n link['__loaded'] = true;\n // Update link's import readyState.\n link.import && (link.import.readyState = 'complete');\n const eventType = link.import ? 'load' : 'error';\n link.dispatchEvent(newCustomEvent(eventType, {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }));\n }\n }\n\n /**\n * @param {Array<MutationRecord>} mutations\n */\n handleMutations(mutations) {\n forEach(mutations, m => forEach(m.addedNodes, elem => {\n if (elem && elem.nodeType === Node.ELEMENT_NODE) {\n // NOTE: added scripts are not updating currentScript in IE.\n if (isImportLink(elem)) {\n this.loadImport( /** @type {!HTMLLinkElement} */ (elem));\n } else {\n this.loadImports( /** @type {!Element} */ (elem));\n }\n }\n }));\n }\n }\n\n /**\n * @param {!Node} node\n * @return {boolean}\n */\n const isImportLink = node => {\n return node.nodeType === Node.ELEMENT_NODE && node.localName === 'link' &&\n ( /** @type {!HTMLLinkElement} */ (node).rel === 'import');\n };\n\n /**\n * Waits for an element to finish loading. If already done loading, it will\n * mark the element accordingly.\n * @param {!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)} element\n * @param {function()=} callback\n */\n const whenElementLoaded = (element, callback) => {\n if (element['__loaded']) {\n callback && callback();\n } else if ((element.localName === 'script' && !element.src) ||\n (element.localName === 'style' && !element.firstChild)) {\n // Inline scripts and empty styles don't trigger load/error events,\n // consider them already loaded.\n element['__loaded'] = true;\n callback && callback();\n } else {\n const onLoadingDone = event => {\n element.removeEventListener(event.type, onLoadingDone);\n element['__loaded'] = true;\n callback && callback();\n };\n element.addEventListener('load', onLoadingDone);\n // NOTE: We listen only for load events in IE/Edge, because in IE/Edge\n // <style> with @import will fire error events for each failing @import,\n // and finally will trigger the load event when all @import are\n // finished (even if all fail).\n if (!isIE || element.localName !== 'style') {\n element.addEventListener('error', onLoadingDone);\n }\n }\n }\n\n /**\n * Calls the callback when all imports in the document at call time\n * (or at least document ready) have loaded. Callback is called synchronously\n * if imports are already done loading.\n * @param {function()=} callback\n */\n const whenReady = callback => {\n // 1. ensure the document is in a ready state (has dom), then\n // 2. watch for loading of imports and call callback when done\n whenDocumentReady(() => whenImportsReady(() => callback && callback()));\n }\n\n /**\n * Invokes the callback when document is in ready state. Callback is called\n * synchronously if document is already done loading.\n * @param {!function()} callback\n */\n const whenDocumentReady = callback => {\n const stateChanged = () => {\n // NOTE: Firefox can hit readystate interactive without document.body existing.\n // This is anti-spec, but we handle it here anyways by waiting for next change.\n if (document.readyState !== 'loading' && !!document.body) {\n document.removeEventListener('readystatechange', stateChanged);\n callback();\n }\n }\n document.addEventListener('readystatechange', stateChanged);\n stateChanged();\n }\n\n /**\n * Invokes the callback after all imports are loaded. Callback is called\n * synchronously if imports are already done loading.\n * @param {!function()} callback\n */\n const whenImportsReady = callback => {\n let imports = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, rootImportSelector));\n let pending = imports.length;\n if (!pending) {\n callback();\n return;\n }\n forEach(imports, imp => whenElementLoaded(imp, () => {\n if (--pending === 0) {\n callback();\n }\n }));\n }\n\n /**\n * Returns the import document containing the element.\n * @param {!Node} element\n * @return {HTMLLinkElement|Document|undefined}\n */\n const importForElement = element => {\n if (useNative) {\n // Return only if not in the main doc!\n return element.ownerDocument !== document ? element.ownerDocument : null;\n }\n let doc = element['__importDoc'];\n if (!doc && element.parentNode) {\n doc = /** @type {!Element} */ (element.parentNode);\n if (typeof doc.closest === 'function') {\n // Element.closest returns the element itself if it matches the selector,\n // so we search the closest import starting from the parent.\n doc = doc.closest(importSelector);\n } else {\n // Walk up the parent tree until we find an import.\n while (!isImportLink(doc) && (doc = doc.parentNode)) {}\n }\n element['__importDoc'] = doc;\n }\n return doc;\n }\n\n let importer = null;\n /**\n * Ensures imports contained in the element are imported.\n * Use this to handle dynamic imports attached to body.\n * @param {!(HTMLDocument|Element)} doc\n */\n const loadImports = (doc) => {\n if (importer) {\n importer.loadImports(doc);\n }\n };\n\n const newCustomEvent = (type, params) => {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(type, params);\n }\n const event = /** @type {!CustomEvent} */ (document.createEvent('CustomEvent'));\n event.initCustomEvent(type, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return event;\n };\n\n if (useNative) {\n // Check for imports that might already be done loading by the time this\n // script is actually executed. Native imports are blocking, so the ones\n // available in the document by this time should already have failed\n // or have .import defined.\n const imps = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n forEach(imps, imp => {\n if (!imp.import || imp.import.readyState !== 'loading') {\n imp['__loaded'] = true;\n }\n });\n // Listen for load/error events to capture dynamically added scripts.\n /**\n * @type {!function(!Event)}\n */\n const onLoadingDone = event => {\n const elem = /** @type {!Element} */ (event.target);\n if (isImportLink(elem)) {\n elem['__loaded'] = true;\n }\n };\n document.addEventListener('load', onLoadingDone, true /* useCapture */ );\n document.addEventListener('error', onLoadingDone, true /* useCapture */ );\n } else {\n // Override baseURI so that imported elements' baseURI can be used seemlessly\n // on native or polyfilled html-imports.\n // NOTE: a <link rel=import> will have `link.baseURI === link.href`, as the link\n // itself is used as the `import` document.\n /** @type {Object|undefined} */\n const native_baseURI = Object.getOwnPropertyDescriptor(Node.prototype, 'baseURI');\n // NOTE: if not configurable (e.g. safari9), set it on the Element prototype. \n const klass = !native_baseURI || native_baseURI.configurable ? Node : Element;\n Object.defineProperty(klass.prototype, 'baseURI', {\n get() {\n const ownerDoc = /** @type {HTMLLinkElement} */ (isImportLink(this) ? this : importForElement(this));\n if (ownerDoc) return ownerDoc.href;\n // Use native baseURI if possible.\n if (native_baseURI && native_baseURI.get) return native_baseURI.get.call(this);\n // Polyfill it if not available.\n const base = /** @type {HTMLBaseElement} */ (document.querySelector('base'));\n return (base || window.location).href;\n },\n configurable: true,\n enumerable: true\n });\n\n // Define 'import' read-only property.\n Object.defineProperty(HTMLLinkElement.prototype, 'import', {\n get() {\n return /** @type {HTMLLinkElement} */ (this)['__import'] || null;\n },\n configurable: true,\n enumerable: true\n });\n\n whenDocumentReady(() => {\n importer = new Importer()\n });\n }\n\n /**\n Add support for the `HTMLImportsLoaded` event and the `HTMLImports.whenReady`\n method. This api is necessary because unlike the native implementation,\n script elements do not force imports to resolve. Instead, users should wrap\n code in either an `HTMLImportsLoaded` handler or after load time in an\n `HTMLImports.whenReady(callback)` call.\n\n NOTE: This module also supports these apis under the native implementation.\n Therefore, if this file is loaded, the same code can be used under both\n the polyfill and native implementation.\n */\n whenReady(() => document.dispatchEvent(newCustomEvent('HTMLImportsLoaded', {\n cancelable: true,\n bubbles: true,\n detail: undefined\n })));\n\n // exports\n scope.useNative = useNative;\n scope.whenReady = whenReady;\n scope.importForElement = importForElement;\n scope.loadImports = loadImports;\n\n})(window.HTMLImports = (window.HTMLImports || {}));","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\nlet customElements = window['customElements'];\nlet HTMLImports = window['HTMLImports'];\nlet Template = window['HTMLTemplateElement'];\n\n// global for (1) existence means `WebComponentsReady` will file,\n// (2) WebComponents.ready == true means event has fired.\nwindow.WebComponents = window.WebComponents || {};\n\nif (customElements && customElements['polyfillWrapFlushCallback']) {\n // Here we ensure that the public `HTMLImports.whenReady`\n // always comes *after* custom elements have upgraded.\n let flushCallback;\n let runAndClearCallback = function runAndClearCallback() {\n if (flushCallback) {\n // make sure to run the HTMLTemplateElement polyfill before custom elements upgrade\n if (Template.bootstrap) {\n Template.bootstrap(window.document);\n }\n let cb = flushCallback;\n flushCallback = null;\n cb();\n return true;\n }\n }\n let origWhenReady = HTMLImports['whenReady'];\n customElements['polyfillWrapFlushCallback'](function(cb) {\n flushCallback = cb;\n origWhenReady(runAndClearCallback);\n });\n\n HTMLImports['whenReady'] = function(cb) {\n origWhenReady(function() {\n // custom element code may add dynamic imports\n // to match processing of native custom elements before\n // domContentLoaded, we wait for these imports to resolve first.\n if (runAndClearCallback()) {\n HTMLImports['whenReady'](cb);\n } else {\n cb();\n }\n });\n }\n\n}\n\nHTMLImports['whenReady'](function() {\n requestAnimationFrame(function() {\n window.WebComponents.ready = true;\n document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));\n });\n});","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n// It's desireable to provide a default stylesheet\n// that's convenient for styling unresolved elements, but\n// it's cumbersome to have to include this manually in every page.\n// It would make sense to put inside some HTMLImport but\n// the HTMLImports polyfill does not allow loading of stylesheets\n// that block rendering. Therefore this injection is tolerated here.\n//\n// NOTE: position: relative fixes IE's failure to inherit opacity\n// when a child is not statically positioned.\nlet style = document.createElement('style');\nstyle.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;'\n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden; position: relative;'\n + ' } \\n'\n ;\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js
new file mode 100644
index 00000000000..bf73f0734dd
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js
@@ -0,0 +1,221 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){/*
+
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var p,q="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,da="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};function ea(){ea=function(){};q.Symbol||(q.Symbol=fa)}var fa=function(){var a=0;return function(b){return"jscomp_symbol_"+(b||"")+a++}}();
+function ha(){ea();var a=q.Symbol.iterator;a||(a=q.Symbol.iterator=q.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&da(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ia(this)}});ha=function(){}}function ia(a){var b=0;return la(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})}function la(a){ha();a={next:a};a[q.Symbol.iterator]=function(){return this};return a}function ma(a){ha();var b=a[Symbol.iterator];return b?b.call(a):ia(a)}
+function na(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}
+(function(){if(!function(){var a=document.createEvent("Event");a.initEvent("foo",!0,!0);a.preventDefault();return a.defaultPrevented}()){var a=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){this.cancelable&&(a.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}var b=/Trident/.test(navigator.userAgent);if(!window.CustomEvent||b&&"function"!==typeof window.CustomEvent)window.CustomEvent=function(a,b){b=b||{};var c=document.createEvent("CustomEvent");
+c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c},window.CustomEvent.prototype=window.Event.prototype;if(!window.Event||b&&"function"!==typeof window.Event){var c=window.Event;window.Event=function(a,b){b=b||{};var c=document.createEvent("Event");c.initEvent(a,!!b.bubbles,!!b.cancelable);return c};if(c)for(var d in c)window.Event[d]=c[d];window.Event.prototype=c.prototype}if(!window.MouseEvent||b&&"function"!==typeof window.MouseEvent){b=window.MouseEvent;window.MouseEvent=function(a,
+b){b=b||{};var c=document.createEvent("MouseEvent");c.initMouseEvent(a,!!b.bubbles,!!b.cancelable,b.view||window,b.detail,b.screenX,b.screenY,b.clientX,b.clientY,b.ctrlKey,b.altKey,b.shiftKey,b.metaKey,b.button,b.relatedTarget);return c};if(b)for(d in b)window.MouseEvent[d]=b[d];window.MouseEvent.prototype=b.prototype}Array.from||(Array.from=function(a){return[].slice.call(a)});Object.assign||(Object.assign=function(a,b){for(var c=[].slice.call(arguments,1),d=0,e;d<c.length;d++)if(e=c[d])for(var f=
+a,m=e,n=Object.getOwnPropertyNames(m),t=0;t<n.length;t++)e=n[t],f[e]=m[e];return a})})(window.WebComponents);(function(){function a(){}function b(a,b){if(!a.childNodes.length)return[];switch(a.nodeType){case Node.DOCUMENT_NODE:return t.call(a,b);case Node.DOCUMENT_FRAGMENT_NODE:return C.call(a,b);default:return n.call(a,b)}}var c="undefined"===typeof HTMLTemplateElement,d=!(document.createDocumentFragment().cloneNode()instanceof DocumentFragment),e=!1;/Trident/.test(navigator.userAgent)&&function(){function a(a,b){if(a instanceof DocumentFragment)for(var d;d=a.firstChild;)c.call(this,d,b);else c.call(this,
+a,b);return a}e=!0;var b=Node.prototype.cloneNode;Node.prototype.cloneNode=function(a){a=b.call(this,a);this instanceof DocumentFragment&&(a.__proto__=DocumentFragment.prototype);return a};DocumentFragment.prototype.querySelectorAll=HTMLElement.prototype.querySelectorAll;DocumentFragment.prototype.querySelector=HTMLElement.prototype.querySelector;Object.defineProperties(DocumentFragment.prototype,{nodeType:{get:function(){return Node.DOCUMENT_FRAGMENT_NODE},configurable:!0},localName:{get:function(){},
+configurable:!0},nodeName:{get:function(){return"#document-fragment"},configurable:!0}});var c=Node.prototype.insertBefore;Node.prototype.insertBefore=a;var d=Node.prototype.appendChild;Node.prototype.appendChild=function(b){b instanceof DocumentFragment?a.call(this,b,null):d.call(this,b);return b};var f=Node.prototype.removeChild,h=Node.prototype.replaceChild;Node.prototype.replaceChild=function(b,c){b instanceof DocumentFragment?(a.call(this,b,c),f.call(this,c)):h.call(this,b,c);return c};Document.prototype.createDocumentFragment=
+function(){var a=this.createElement("df");a.__proto__=DocumentFragment.prototype;return a};var g=Document.prototype.importNode;Document.prototype.importNode=function(a,b){b=g.call(this,a,b||!1);a instanceof DocumentFragment&&(b.__proto__=DocumentFragment.prototype);return b}}();var f=Node.prototype.cloneNode,h=Document.prototype.createElement,g=Document.prototype.importNode,k=Node.prototype.removeChild,l=Node.prototype.appendChild,m=Node.prototype.replaceChild,n=Element.prototype.querySelectorAll,
+t=Document.prototype.querySelectorAll,C=DocumentFragment.prototype.querySelectorAll,aa=function(){if(!c){var a=document.createElement("template"),b=document.createElement("template");b.content.appendChild(document.createElement("div"));a.content.appendChild(b);a=a.cloneNode(!0);return 0===a.content.childNodes.length||0===a.content.firstChild.content.childNodes.length||d}}();if(c){var P=document.implementation.createHTMLDocument("template"),Ka=!0,ba=document.createElement("style");ba.textContent="template{display:none;}";
+var La=document.head;La.insertBefore(ba,La.firstElementChild);a.prototype=Object.create(HTMLElement.prototype);var D=!document.createElement("div").hasOwnProperty("innerHTML");a.H=function(b){if(!b.content&&b.namespaceURI===document.documentElement.namespaceURI){b.content=P.createDocumentFragment();for(var c;c=b.firstChild;)l.call(b.content,c);if(D)b.__proto__=a.prototype;else if(b.cloneNode=function(b){return a.ha(this,b)},Ka)try{va(b),ja(b)}catch(rh){Ka=!1}a.M(b.content)}};var va=function(b){Object.defineProperty(b,
+"innerHTML",{get:function(){return nb(this)},set:function(b){P.body.innerHTML=b;for(a.M(P);this.content.firstChild;)k.call(this.content,this.content.firstChild);for(;P.body.firstChild;)l.call(this.content,P.body.firstChild)},configurable:!0})},ja=function(a){Object.defineProperty(a,"outerHTML",{get:function(){return"<template>"+this.innerHTML+"</template>"},set:function(a){if(this.parentNode){P.body.innerHTML=a;for(a=this.ownerDocument.createDocumentFragment();P.body.firstChild;)l.call(a,P.body.firstChild);
+m.call(this.parentNode,a,this)}else throw Error("Failed to set the 'outerHTML' property on 'Element': This element has no parent node.");},configurable:!0})};va(a.prototype);ja(a.prototype);a.M=function(c){c=b(c,"template");for(var d=0,e=c.length,f;d<e&&(f=c[d]);d++)a.H(f)};document.addEventListener("DOMContentLoaded",function(){a.M(document)});Document.prototype.createElement=function(){var b=h.apply(this,arguments);"template"===b.localName&&a.H(b);return b};var wa=/[&\u00A0"]/g,ca=/[&\u00A0<>]/g,
+ka=function(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}};ba=function(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b};var hf=ba("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),xa=ba("style script xmp iframe noembed noframes plaintext noscript".split(" ")),nb=function(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=
+d.length,h;e<f&&(h=d[e]);e++){a:{var g=h;var k=a;var l=b;switch(g.nodeType){case Node.ELEMENT_NODE:for(var m=g.localName,n="<"+m,ya=g.attributes,Ma=0;k=ya[Ma];Ma++)n+=" "+k.name+'="'+k.value.replace(wa,ka)+'"';n+=">";g=hf[m]?n:n+nb(g,l)+"</"+m+">";break a;case Node.TEXT_NODE:g=g.data;g=k&&xa[k.localName]?g:g.replace(ca,ka);break a;case Node.COMMENT_NODE:g="\x3c!--"+g.data+"--\x3e";break a;default:throw window.console.error(g),Error("not implemented");}}c+=g}return c}}if(c||aa){a.ha=function(a,b){var c=
+f.call(a,!1);this.H&&this.H(c);b&&(l.call(c.content,f.call(a.content,!0)),ya(c.content,a.content));return c};var ya=function(c,d){if(d.querySelectorAll&&(d=b(d,"template"),0!==d.length)){c=b(c,"template");for(var e=0,f=c.length,h,g;e<f;e++)g=d[e],h=c[e],a&&a.H&&a.H(g),m.call(h.parentNode,Ma.call(g,!0),h)}},Ma=Node.prototype.cloneNode=function(b){if(!e&&d&&this instanceof DocumentFragment)if(b)var c=jf.call(this.ownerDocument,this,!0);else return this.ownerDocument.createDocumentFragment();else c=
+this.nodeType===Node.ELEMENT_NODE&&"template"===this.localName&&this.namespaceURI==document.documentElement.namespaceURI?a.ha(this,b):f.call(this,b);b&&ya(c,this);return c},jf=Document.prototype.importNode=function(c,d){d=d||!1;if("template"===c.localName)return a.ha(c,d);var e=g.call(this,c,d);if(d){ya(e,c);c=b(e,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');for(var f,k=0;k<c.length;k++){f=c[k];d=h.call(document,"script");d.textContent=f.textContent;for(var l=
+f.attributes,ka=0,xa;ka<l.length;ka++)xa=l[ka],d.setAttribute(xa.name,xa.value);m.call(f.parentNode,d,f)}}return e}}c&&(window.HTMLTemplateElement=a)})();var oa=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};var pa=0,qa,ra="undefined"!==typeof window?window:void 0,sa=ra||{},ta=sa.MutationObserver||sa.WebKitMutationObserver,ua="undefined"!==typeof Uint8ClampedArray&&"undefined"!==typeof importScripts&&"undefined"!==typeof MessageChannel;function za(){return"undefined"!==typeof qa?function(){qa(Aa)}:Ba()}function Ca(){var a=0,b=new ta(Aa),c=document.createTextNode("");b.observe(c,{characterData:!0});return function(){c.data=a=++a%2}}
+function Da(){var a=new MessageChannel;a.port1.onmessage=Aa;return function(){return a.port2.postMessage(0)}}function Ba(){var a=setTimeout;return function(){return a(Aa,1)}}var Ea=Array(1E3);function Aa(){for(var a=0;a<pa;a+=2)(0,Ea[a])(Ea[a+1]),Ea[a]=void 0,Ea[a+1]=void 0;pa=0}var Fa,Ga;
+if("undefined"===typeof self&&"undefined"!==typeof process&&"[object process]"==={}.toString.call(process))Ga=function(){return process.ub(Aa)};else{var Ha;if(ta)Ha=Ca();else{var Ia;if(ua)Ia=Da();else{var Ja;if(void 0===ra&&"function"===typeof require)try{var Na=require("vertx");qa=Na.wb||Na.vb;Ja=za()}catch(a){Ja=Ba()}else Ja=Ba();Ia=Ja}Ha=Ia}Ga=Ha}Fa=Ga;function Oa(a,b){Ea[pa]=a;Ea[pa+1]=b;pa+=2;2===pa&&Fa()};function Pa(a,b){var c=this,d=new this.constructor(Qa);void 0===d[Ra]&&Sa(d);var e=c.h;if(e){var f=arguments[e-1];Oa(function(){return Ta(e,d,f,c.f)})}else Ua(c,d,a,b);return d};function Va(a){if(a&&"object"===typeof a&&a.constructor===this)return a;var b=new this(Qa);Wa(b,a);return b};var Ra=Math.random().toString(36).substring(16);function Qa(){}var Ya=new Xa;function Za(a){try{return a.then}catch(b){return Ya.error=b,Ya}}function $a(a,b,c,d){try{a.call(b,c,d)}catch(e){return e}}function ab(a,b,c){Oa(function(a){var d=!1,f=$a(c,b,function(c){d||(d=!0,b!==c?Wa(a,c):r(a,c))},function(b){d||(d=!0,u(a,b))});!d&&f&&(d=!0,u(a,f))},a)}function bb(a,b){1===b.h?r(a,b.f):2===b.h?u(a,b.f):Ua(b,void 0,function(b){return Wa(a,b)},function(b){return u(a,b)})}
+function cb(a,b,c){b.constructor===a.constructor&&c===Pa&&b.constructor.resolve===Va?bb(a,b):c===Ya?(u(a,Ya.error),Ya.error=null):void 0===c?r(a,b):"function"===typeof c?ab(a,b,c):r(a,b)}function Wa(a,b){if(a===b)u(a,new TypeError("You cannot resolve a promise with itself"));else{var c=typeof b;null===b||"object"!==c&&"function"!==c?r(a,b):cb(a,b,Za(b))}}function db(a){a.ra&&a.ra(a.f);eb(a)}function r(a,b){void 0===a.h&&(a.f=b,a.h=1,0!==a.L.length&&Oa(eb,a))}
+function u(a,b){void 0===a.h&&(a.h=2,a.f=b,Oa(db,a))}function Ua(a,b,c,d){var e=a.L,f=e.length;a.ra=null;e[f]=b;e[f+1]=c;e[f+2]=d;0===f&&a.h&&Oa(eb,a)}function eb(a){var b=a.L,c=a.h;if(0!==b.length){for(var d,e,f=a.f,h=0;h<b.length;h+=3)d=b[h],e=b[h+c],d?Ta(c,d,e,f):e(f);a.L.length=0}}function Xa(){this.error=null}var fb=new Xa;
+function Ta(a,b,c,d){var e="function"===typeof c;if(e){try{var f=c(d)}catch(l){fb.error=l,f=fb}if(f===fb){var h=!0;var g=f.error;f.error=null}else var k=!0;if(b===f){u(b,new TypeError("A promises callback cannot return that same promise."));return}}else f=d,k=!0;void 0===b.h&&(e&&k?Wa(b,f):h?u(b,g):1===a?r(b,f):2===a&&u(b,f))}function gb(a,b){try{b(function(b){Wa(a,b)},function(b){u(a,b)})}catch(c){u(a,c)}}var hb=0;function Sa(a){a[Ra]=hb++;a.h=void 0;a.f=void 0;a.L=[]};function ib(a,b){this.Ia=a;this.D=new a(Qa);this.D[Ra]||Sa(this.D);if(oa(b))if(this.U=this.length=b.length,this.f=Array(this.length),0===this.length)r(this.D,this.f);else{this.length=this.length||0;for(a=0;void 0===this.h&&a<b.length;a++)jb(this,b[a],a);0===this.U&&r(this.D,this.f)}else u(this.D,Error("Array Methods must be provided an Array"))}
+function jb(a,b,c){var d=a.Ia,e=d.resolve;e===Va?(e=Za(b),e===Pa&&void 0!==b.h?kb(a,b.h,c,b.f):"function"!==typeof e?(a.U--,a.f[c]=b):d===v?(d=new d(Qa),cb(d,b,e),lb(a,d,c)):lb(a,new d(function(a){return a(b)}),c)):lb(a,e(b),c)}function kb(a,b,c,d){var e=a.D;void 0===e.h&&(a.U--,2===b?u(e,d):a.f[c]=d);0===a.U&&r(e,a.f)}function lb(a,b,c){Ua(b,void 0,function(b){return kb(a,1,c,b)},function(b){return kb(a,2,c,b)})};function mb(a){return(new ib(this,a)).D};function ob(a){var b=this;return oa(a)?new b(function(c,d){for(var e=a.length,f=0;f<e;f++)b.resolve(a[f]).then(c,d)}):new b(function(a,b){return b(new TypeError("You must pass an array to race."))})};function pb(a){var b=new this(Qa);u(b,a);return b};function v(a){this[Ra]=hb++;this.f=this.h=void 0;this.L=[];if(Qa!==a){if("function"!==typeof a)throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(this instanceof v)gb(this,a);else throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");}}v.prototype={constructor:v,then:Pa,a:function(a){return this.then(null,a)}};/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+window.Promise||(window.Promise=v,v.prototype["catch"]=v.prototype.a,v.prototype.then=v.prototype.then,v.all=mb,v.race=ob,v.resolve=Va,v.reject=pb);(function(a){function b(a,b){if("function"===typeof window.CustomEvent)return new CustomEvent(a,b);var c=document.createEvent("CustomEvent");c.initCustomEvent(a,!!b.bubbles,!!b.cancelable,b.detail);return c}function c(a){if(C)return a.ownerDocument!==document?a.ownerDocument:null;var b=a.__importDoc;if(!b&&a.parentNode){b=a.parentNode;if("function"===typeof b.closest)b=b.closest("link[rel=import]");else for(;!g(b)&&(b=b.parentNode););a.__importDoc=b}return b}function d(a){var b=m(document,"link[rel=import]:not([import-dependency])"),
+c=b.length;c?n(b,function(b){return h(b,function(){0===--c&&a()})}):a()}function e(a){function b(){"loading"!==document.readyState&&document.body&&(document.removeEventListener("readystatechange",b),a())}document.addEventListener("readystatechange",b);b()}function f(a){e(function(){return d(function(){return a&&a()})})}function h(a,b){if(a.__loaded)b&&b();else if("script"===a.localName&&!a.src||"style"===a.localName&&!a.firstChild)a.__loaded=!0,b&&b();else{var c=function(d){a.removeEventListener(d.type,
+c);a.__loaded=!0;b&&b()};a.addEventListener("load",c);ja&&"style"===a.localName||a.addEventListener("error",c)}}function g(a){return a.nodeType===Node.ELEMENT_NODE&&"link"===a.localName&&"import"===a.rel}function k(){var a=this;this.a={};this.b=0;this.c=new MutationObserver(function(b){return a.Va(b)});this.c.observe(document.head,{childList:!0,subtree:!0});this.loadImports(document)}function l(a){n(m(a,"template"),function(a){n(m(a.content,'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]'),
+function(a){var b=document.createElement("script");n(a.attributes,function(a){return b.setAttribute(a.name,a.value)});b.textContent=a.textContent;a.parentNode.replaceChild(b,a)});l(a.content)})}function m(a,b){return a.childNodes.length?a.querySelectorAll(b):aa}function n(a,b,c){var d=a?a.length:0,e=c?-1:1;for(c=c?d-1:0;c<d&&0<=c;c+=e)b(a[c],c)}var t=document.createElement("link"),C="import"in t,aa=t.querySelectorAll("*"),P=null;!1==="currentScript"in document&&Object.defineProperty(document,"currentScript",
+{get:function(){return P||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null)},configurable:!0});var Ka=/(url\()([^)]*)(\))/g,ba=/(@import[\s]+(?!url\())([^;]*)(;)/g,La=/(<link[^>]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,D={Pa:function(a,b){a.href&&a.setAttribute("href",D.aa(a.getAttribute("href"),b));a.src&&a.setAttribute("src",D.aa(a.getAttribute("src"),b));if("style"===a.localName){var c=D.ya(a.textContent,b,Ka);a.textContent=D.ya(c,b,ba)}},ya:function(a,b,c){return a.replace(c,
+function(a,c,d,e){a=d.replace(/["']/g,"");b&&(a=D.aa(a,b));return c+"'"+a+"'"+e})},aa:function(a,b){if(void 0===D.ga){D.ga=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";D.ga="http://a/c%20d"===c.href}catch(nb){}}if(D.ga)return(new URL(a,b)).href;c=D.Fa;c||(c=document.implementation.createHTMLDocument("temp"),D.Fa=c,c.pa=c.createElement("base"),c.head.appendChild(c.pa),c.oa=c.createElement("a"));c.pa.href=b;c.oa.href=a;return c.oa.href||a}},va={async:!0,load:function(a,b,c){if(a)if(a.match(/^data:/)){a=
+a.split(",");var d=a[1];d=-1<a[0].indexOf(";base64")?atob(d):decodeURIComponent(d);b(d)}else{var e=new XMLHttpRequest;e.open("GET",a,va.async);e.onload=function(){var a=e.responseURL||e.getResponseHeader("Location");a&&0===a.indexOf("/")&&(a=(location.origin||location.protocol+"//"+location.host)+a);var d=e.response||e.responseText;304===e.status||0===e.status||200<=e.status&&300>e.status?b(d,a):c(d)};e.send()}else c("error: href must be specified")}},ja=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);
+k.prototype.loadImports=function(a){var b=this;a=m(a,"link[rel=import]");n(a,function(a){return b.s(a)})};k.prototype.s=function(a){var b=this,c=a.href;if(void 0!==this.a[c]){var d=this.a[c];d&&d.__loaded&&(a.__import=d,this.i(a))}else this.b++,this.a[c]="pending",va.load(c,function(a,d){a=b.Wa(a,d||c);b.a[c]=a;b.b--;b.loadImports(a);b.N()},function(){b.a[c]=null;b.b--;b.N()})};k.prototype.Wa=function(a,b){if(!a)return document.createDocumentFragment();ja&&(a=a.replace(La,function(a,b,c){return-1===
+a.indexOf("type=")?b+" type=import-disable "+c:a}));var c=document.createElement("template");c.innerHTML=a;if(c.content)a=c.content,l(a);else for(a=document.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);if(c=a.querySelector("base"))b=D.aa(c.getAttribute("href"),b),c.removeAttribute("href");c=m(a,'link[rel=import],link[rel=stylesheet][href][type=import-disable],style:not([type]),link[rel=stylesheet][href]:not([type]),script:not([type]),script[type="application/javascript"],script[type="text/javascript"]');
+var d=0;n(c,function(a){h(a);D.Pa(a,b);a.setAttribute("import-dependency","");"script"===a.localName&&!a.src&&a.textContent&&(a.setAttribute("src","data:text/javascript;charset=utf-8,"+encodeURIComponent(a.textContent+("\n//# sourceURL="+b+(d?"-"+d:"")+".js\n"))),a.textContent="",d++)});return a};k.prototype.N=function(){var a=this;if(!this.b){this.c.disconnect();this.flatten(document);var b=!1,c=!1,d=function(){c&&b&&(a.loadImports(document),a.b||(a.c.observe(document.head,{childList:!0,subtree:!0}),
+a.Ta()))};this.Ya(function(){c=!0;d()});this.Xa(function(){b=!0;d()})}};k.prototype.flatten=function(a){var b=this;a=m(a,"link[rel=import]");n(a,function(a){var c=b.a[a.href];(a.__import=c)&&c.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(b.a[a.href]=a,a.readyState="loading",a.__import=a,b.flatten(c),a.appendChild(c))})};k.prototype.Xa=function(a){function b(e){if(e<d){var f=c[e],g=document.createElement("script");f.removeAttribute("import-dependency");n(f.attributes,function(a){return g.setAttribute(a.name,
+a.value)});P=g;f.parentNode.replaceChild(g,f);h(g,function(){P=null;b(e+1)})}else a()}var c=m(document,"script[import-dependency]"),d=c.length;b(0)};k.prototype.Ya=function(a){var b=m(document,"style[import-dependency],link[rel=stylesheet][import-dependency]"),d=b.length;if(d){var e=ja&&!!document.querySelector("link[rel=stylesheet][href][type=import-disable]");n(b,function(b){h(b,function(){b.removeAttribute("import-dependency");0===--d&&a()});if(e&&b.parentNode!==document.head){var f=document.createElement(b.localName);
+f.__appliedElement=b;f.setAttribute("type","import-placeholder");b.parentNode.insertBefore(f,b.nextSibling);for(f=c(b);f&&c(f);)f=c(f);f.parentNode!==document.head&&(f=null);document.head.insertBefore(b,f);b.removeAttribute("type")}})}else a()};k.prototype.Ta=function(){var a=this,b=m(document,"link[rel=import]");n(b,function(b){return a.i(b)},!0)};k.prototype.i=function(a){a.__loaded||(a.__loaded=!0,a.import&&(a.import.readyState="complete"),a.dispatchEvent(b(a.import?"load":"error",{bubbles:!1,
+cancelable:!1,detail:void 0})))};k.prototype.Va=function(a){var b=this;n(a,function(a){return n(a.addedNodes,function(a){a&&a.nodeType===Node.ELEMENT_NODE&&(g(a)?b.s(a):b.loadImports(a))})})};var wa=null;if(C)t=m(document,"link[rel=import]"),n(t,function(a){a.import&&"loading"===a.import.readyState||(a.__loaded=!0)}),t=function(a){a=a.target;g(a)&&(a.__loaded=!0)},document.addEventListener("load",t,!0),document.addEventListener("error",t,!0);else{var ca=Object.getOwnPropertyDescriptor(Node.prototype,
+"baseURI");Object.defineProperty((!ca||ca.configurable?Node:Element).prototype,"baseURI",{get:function(){var a=g(this)?this:c(this);return a?a.href:ca&&ca.get?ca.get.call(this):(document.querySelector("base")||window.location).href},configurable:!0,enumerable:!0});Object.defineProperty(HTMLLinkElement.prototype,"import",{get:function(){return this.__import||null},configurable:!0,enumerable:!0});e(function(){wa=new k})}f(function(){return document.dispatchEvent(b("HTMLImportsLoaded",{cancelable:!0,
+bubbles:!0,detail:void 0}))});a.useNative=C;a.whenReady=f;a.importForElement=c;a.loadImports=function(a){wa&&wa.loadImports(a)}})(window.HTMLImports=window.HTMLImports||{});/*
+
+ Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+window.WebComponents=window.WebComponents||{flags:{}};var qb=document.querySelector('script[src*="webcomponents-lite.js"]'),rb=/wc-(.+)/,w={};if(!w.noOpts){location.search.slice(1).split("&").forEach(function(a){a=a.split("=");var b;a[0]&&(b=a[0].match(rb))&&(w[b[1]]=a[1]||!0)});if(qb)for(var sb=0,tb;tb=qb.attributes[sb];sb++)"src"!==tb.name&&(w[tb.name]=tb.value||!0);if(w.log&&w.log.split){var ub=w.log.split(",");w.log={};ub.forEach(function(a){w.log[a]=!0})}else w.log={}}
+window.WebComponents.flags=w;var vb=w.shadydom;vb&&(window.ShadyDOM=window.ShadyDOM||{},window.ShadyDOM.force=vb);var wb=w.register||w.ce;wb&&window.customElements&&(window.customElements.forcePolyfill=wb);/*
+
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+function xb(){this.xa=this.root=null;this.Y=!1;this.C=this.T=this.la=this.assignedSlot=this.assignedNodes=this.J=null;this.childNodes=this.nextSibling=this.previousSibling=this.lastChild=this.firstChild=this.parentNode=this.O=void 0;this.Da=this.qa=!1}xb.prototype.toJSON=function(){return{}};function x(a){a.ea||(a.ea=new xb);return a.ea}function y(a){return a&&a.ea};var z=window.ShadyDOM||{};z.Ra=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var yb=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");z.w=!!(yb&&yb.configurable&&yb.get);z.va=z.force||!z.Ra;var zb=navigator.userAgent.match("Trident"),Ab=navigator.userAgent.match("Edge");void 0===z.Aa&&(z.Aa=z.w&&(zb||Ab));function Bb(a){return(a=y(a))&&void 0!==a.firstChild}function A(a){return"ShadyRoot"===a.Ja}function Cb(a){a=a.getRootNode();if(A(a))return a}
+var Db=Element.prototype,Eb=Db.matches||Db.matchesSelector||Db.mozMatchesSelector||Db.msMatchesSelector||Db.oMatchesSelector||Db.webkitMatchesSelector;function Fb(a,b){if(a&&b)for(var c=Object.getOwnPropertyNames(b),d=0,e;d<c.length&&(e=c[d]);d++){var f=Object.getOwnPropertyDescriptor(b,e);f&&Object.defineProperty(a,e,f)}}function Gb(a,b){for(var c=[],d=1;d<arguments.length;++d)c[d-1]=arguments[d];for(d=0;d<c.length;d++)Fb(a,c[d]);return a}function Hb(a,b){for(var c in b)a[c]=b[c]}
+var Ib=document.createTextNode(""),Jb=0,Kb=[];(new MutationObserver(function(){for(;Kb.length;)try{Kb.shift()()}catch(a){throw Ib.textContent=Jb++,a;}})).observe(Ib,{characterData:!0});function Lb(a){Kb.push(a);Ib.textContent=Jb++}var Mb=!!document.contains;function Nb(a,b){for(;b;){if(b==a)return!0;b=b.parentNode}return!1};var Ob=[],Pb;function Qb(a){Pb||(Pb=!0,Lb(Rb));Ob.push(a)}function Rb(){Pb=!1;for(var a=!!Ob.length;Ob.length;)Ob.shift()();return a}Rb.list=Ob;function Sb(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.X=new Set}function Tb(a){a.a||(a.a=!0,Lb(function(){Ub(a)}))}function Ub(a){if(a.a){a.a=!1;var b=a.takeRecords();b.length&&a.X.forEach(function(a){a(b)})}}Sb.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
+function Vb(a,b){var c=x(a);c.J||(c.J=new Sb);c.J.X.add(b);var d=c.J;return{Ga:b,G:d,Ka:a,takeRecords:function(){return d.takeRecords()}}}function Wb(a){var b=a&&a.G;b&&(b.X.delete(a.Ga),b.X.size||(x(a.Ka).J=null))}
+function Xb(a,b){var c=b.getRootNode();return a.map(function(a){var b=c===a.target.getRootNode();if(b&&a.addedNodes){if(b=Array.from(a.addedNodes).filter(function(a){return c===a.getRootNode()}),b.length)return a=Object.create(a),Object.defineProperty(a,"addedNodes",{value:b,configurable:!0}),a}else if(b)return a}).filter(function(a){return a})};var B={},Yb=Element.prototype.insertBefore,Zb=Element.prototype.replaceChild,$b=Element.prototype.removeChild,ac=Element.prototype.setAttribute,bc=Element.prototype.removeAttribute,cc=Element.prototype.cloneNode,dc=Document.prototype.importNode,ec=Element.prototype.addEventListener,fc=Element.prototype.removeEventListener,gc=Window.prototype.addEventListener,hc=Window.prototype.removeEventListener,ic=Element.prototype.dispatchEvent,jc=Node.prototype.contains||HTMLElement.prototype.contains,kc=Document.prototype.getElementById,
+lc=Element.prototype.querySelector,mc=DocumentFragment.prototype.querySelector,nc=Document.prototype.querySelector,oc=Element.prototype.querySelectorAll,pc=DocumentFragment.prototype.querySelectorAll,qc=Document.prototype.querySelectorAll;B.appendChild=Element.prototype.appendChild;B.insertBefore=Yb;B.replaceChild=Zb;B.removeChild=$b;B.setAttribute=ac;B.removeAttribute=bc;B.cloneNode=cc;B.importNode=dc;B.addEventListener=ec;B.removeEventListener=fc;B.fb=gc;B.gb=hc;B.dispatchEvent=ic;B.contains=jc;
+B.getElementById=kc;B.ob=lc;B.rb=mc;B.mb=nc;B.querySelector=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return lc.call(this,a);case Node.DOCUMENT_NODE:return nc.call(this,a);default:return mc.call(this,a)}};B.pb=oc;B.sb=pc;B.nb=qc;B.querySelectorAll=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return oc.call(this,a);case Node.DOCUMENT_NODE:return qc.call(this,a);default:return pc.call(this,a)}};var rc=/[&\u00A0"]/g,sc=/[&\u00A0<>]/g;function tc(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function uc(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var vc=uc("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),wc=uc("style script xmp iframe noembed noframes plaintext noscript".split(" "));
+function xc(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,h;e<f&&(h=d[e]);e++){a:{var g=h;var k=a;var l=b;switch(g.nodeType){case Node.ELEMENT_NODE:for(var m=g.localName,n="<"+m,t=g.attributes,C=0;k=t[C];C++)n+=" "+k.name+'="'+k.value.replace(rc,tc)+'"';n+=">";g=vc[m]?n:n+xc(g,l)+"</"+m+">";break a;case Node.TEXT_NODE:g=g.data;g=k&&wc[k.localName]?g:g.replace(sc,tc);break a;case Node.COMMENT_NODE:g="\x3c!--"+g.data+"--\x3e";break a;default:throw window.console.error(g),
+Error("not implemented");}}c+=g}return c};var E={},F=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),G=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1);function yc(a){var b=[];F.currentNode=a;for(a=F.firstChild();a;)b.push(a),a=F.nextSibling();return b}E.parentNode=function(a){F.currentNode=a;return F.parentNode()};E.firstChild=function(a){F.currentNode=a;return F.firstChild()};E.lastChild=function(a){F.currentNode=a;return F.lastChild()};E.previousSibling=function(a){F.currentNode=a;return F.previousSibling()};
+E.nextSibling=function(a){F.currentNode=a;return F.nextSibling()};E.childNodes=yc;E.parentElement=function(a){G.currentNode=a;return G.parentNode()};E.firstElementChild=function(a){G.currentNode=a;return G.firstChild()};E.lastElementChild=function(a){G.currentNode=a;return G.lastChild()};E.previousElementSibling=function(a){G.currentNode=a;return G.previousSibling()};E.nextElementSibling=function(a){G.currentNode=a;return G.nextSibling()};
+E.children=function(a){var b=[];G.currentNode=a;for(a=G.firstChild();a;)b.push(a),a=G.nextSibling();return b};E.innerHTML=function(a){return xc(a,function(a){return yc(a)})};E.textContent=function(a){switch(a.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:a=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);for(var b="",c;c=a.nextNode();)b+=c.nodeValue;return b;default:return a.nodeValue}};var H={},zc=z.w,Ac=[Node.prototype,Element.prototype,HTMLElement.prototype];function I(a){var b;a:{for(b=0;b<Ac.length;b++){var c=Ac[b];if(c.hasOwnProperty(a)){b=c;break a}}b=void 0}if(!b)throw Error("Could not find descriptor for "+a);return Object.getOwnPropertyDescriptor(b,a)}
+var J=zc?{parentNode:I("parentNode"),firstChild:I("firstChild"),lastChild:I("lastChild"),previousSibling:I("previousSibling"),nextSibling:I("nextSibling"),childNodes:I("childNodes"),parentElement:I("parentElement"),previousElementSibling:I("previousElementSibling"),nextElementSibling:I("nextElementSibling"),innerHTML:I("innerHTML"),textContent:I("textContent"),firstElementChild:I("firstElementChild"),lastElementChild:I("lastElementChild"),children:I("children")}:{},Bc=zc?{firstElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,
+"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"children")}:{},Cc=zc?{firstElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(Document.prototype,"children")}:{};H.wa=J;H.qb=Bc;H.lb=Cc;H.parentNode=function(a){return J.parentNode.get.call(a)};
+H.firstChild=function(a){return J.firstChild.get.call(a)};H.lastChild=function(a){return J.lastChild.get.call(a)};H.previousSibling=function(a){return J.previousSibling.get.call(a)};H.nextSibling=function(a){return J.nextSibling.get.call(a)};H.childNodes=function(a){return Array.prototype.slice.call(J.childNodes.get.call(a))};H.parentElement=function(a){return J.parentElement.get.call(a)};H.previousElementSibling=function(a){return J.previousElementSibling.get.call(a)};H.nextElementSibling=function(a){return J.nextElementSibling.get.call(a)};
+H.innerHTML=function(a){return J.innerHTML.get.call(a)};H.textContent=function(a){return J.textContent.get.call(a)};H.children=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:a=Bc.children.get.call(a);break;case Node.DOCUMENT_NODE:a=Cc.children.get.call(a);break;default:a=J.children.get.call(a)}return Array.prototype.slice.call(a)};
+H.firstElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return Bc.firstElementChild.get.call(a);case Node.DOCUMENT_NODE:return Cc.firstElementChild.get.call(a);default:return J.firstElementChild.get.call(a)}};H.lastElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return Bc.lastElementChild.get.call(a);case Node.DOCUMENT_NODE:return Cc.lastElementChild.get.call(a);default:return J.lastElementChild.get.call(a)}};var K=z.Aa?H:E;function Dc(a){for(;a.firstChild;)a.removeChild(a.firstChild)}
+var Ec=z.w,Fc=document.implementation.createHTMLDocument("inert"),Gc=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),Hc=Gc&&Gc.get,Ic=Object.getOwnPropertyDescriptor(Document.prototype,"activeElement"),Jc={parentElement:{get:function(){var a=y(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:K.parentElement(this)},configurable:!0},parentNode:{get:function(){var a=y(this);a=a&&a.parentNode;return void 0!==a?a:K.parentNode(this)},configurable:!0},
+nextSibling:{get:function(){var a=y(this);a=a&&a.nextSibling;return void 0!==a?a:K.nextSibling(this)},configurable:!0},previousSibling:{get:function(){var a=y(this);a=a&&a.previousSibling;return void 0!==a?a:K.previousSibling(this)},configurable:!0},nextElementSibling:{get:function(){var a=y(this);if(a&&void 0!==a.nextSibling){for(a=this.nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return K.nextElementSibling(this)},configurable:!0},previousElementSibling:{get:function(){var a=
+y(this);if(a&&void 0!==a.previousSibling){for(a=this.previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return K.previousElementSibling(this)},configurable:!0}},Kc={className:{get:function(){return this.getAttribute("class")||""},set:function(a){this.setAttribute("class",a)},configurable:!0}},Lc={childNodes:{get:function(){if(Bb(this)){var a=y(this);if(!a.childNodes){a.childNodes=[];for(var b=this.firstChild;b;b=b.nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=
+K.childNodes(this);c.item=function(a){return c[a]};return c},configurable:!0},childElementCount:{get:function(){return this.children.length},configurable:!0},firstChild:{get:function(){var a=y(this);a=a&&a.firstChild;return void 0!==a?a:K.firstChild(this)},configurable:!0},lastChild:{get:function(){var a=y(this);a=a&&a.lastChild;return void 0!==a?a:K.lastChild(this)},configurable:!0},textContent:{get:function(){if(Bb(this)){for(var a=[],b=0,c=this.childNodes,d;d=c[b];b++)d.nodeType!==Node.COMMENT_NODE&&
+a.push(d.textContent);return a.join("")}return K.textContent(this)},set:function(a){if("undefined"===typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!Bb(this)&&Ec){var b=this.firstChild;(b!=this.lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&Dc(this);H.wa.textContent.set.call(this,a)}else Dc(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.appendChild(document.createTextNode(a));break;default:this.nodeValue=a}},configurable:!0},firstElementChild:{get:function(){var a=
+y(this);if(a&&void 0!==a.firstChild){for(a=this.firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return K.firstElementChild(this)},configurable:!0},lastElementChild:{get:function(){var a=y(this);if(a&&void 0!==a.lastChild){for(a=this.lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return K.lastElementChild(this)},configurable:!0},children:{get:function(){var a=Bb(this)?Array.prototype.filter.call(this.childNodes,function(a){return a.nodeType===Node.ELEMENT_NODE}):
+K.children(this);a.item=function(b){return a[b]};return a},configurable:!0},innerHTML:{get:function(){return Bb(this)?xc("template"===this.localName?this.content:this):K.innerHTML(this)},set:function(a){var b="template"===this.localName?this.content:this;Dc(b);var c=this.localName;c&&"template"!==c||(c="div");c=Fc.createElement(c);for(Ec?H.wa.innerHTML.set.call(c,a):c.innerHTML=a;c.firstChild;)b.appendChild(c.firstChild)},configurable:!0}},Mc={shadowRoot:{get:function(){var a=y(this);return a&&a.xa||
+null},configurable:!0}},Nc={activeElement:{get:function(){var a=Ic&&Ic.get?Ic.get.call(document):z.w?void 0:document.activeElement;if(a&&a.nodeType){var b=!!A(this);if(this===document||b&&this.host!==a&&B.contains.call(this.host,a)){for(b=Cb(a);b&&b!==this;)a=b.host,b=Cb(a);a=this===document?b?null:a:b===this?a:null}else a=null}else a=null;return a},set:function(){},configurable:!0}};
+function L(a,b,c){for(var d in b){var e=Object.getOwnPropertyDescriptor(a,d);e&&e.configurable||!e&&c?Object.defineProperty(a,d,b[d]):c&&console.warn("Could not define",d,"on",a)}}function Oc(a){L(a,Jc);L(a,Kc);L(a,Lc);L(a,Nc)}
+function Pc(){var a=Qc.prototype;a.__proto__=DocumentFragment.prototype;L(a,Jc,!0);L(a,Lc,!0);L(a,Nc,!0);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
+configurable:!0})})}var Rc=z.w?function(){}:function(a){var b=x(a);b.qa||(b.qa=!0,L(a,Jc,!0),L(a,Kc,!0))},Sc=z.w?function(){}:function(a){x(a).Da||(L(a,Lc,!0),L(a,Mc,!0))};var Tc=K.childNodes;function Uc(a,b,c){Rc(a);c=c||null;var d=x(a),e=x(b),f=c?x(c):null;d.previousSibling=c?f.previousSibling:b.lastChild;if(f=y(d.previousSibling))f.nextSibling=a;if(f=y(d.nextSibling=c))f.previousSibling=a;d.parentNode=b;c?c===e.firstChild&&(e.firstChild=a):(e.lastChild=a,e.firstChild||(e.firstChild=a));e.childNodes=null}
+function Vc(a,b){var c=x(a);if(void 0===c.firstChild)for(b=b||Tc(a),c.firstChild=b[0]||null,c.lastChild=b[b.length-1]||null,Sc(a),c=0;c<b.length;c++){var d=b[c],e=x(d);e.parentNode=a;e.nextSibling=b[c+1]||null;e.previousSibling=b[c-1]||null;Rc(d)}};var Wc=K.parentNode;
+function Xc(a,b,c){if(b===a)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(c){var d=y(c);d=d&&d.parentNode;if(void 0!==d&&d!==a||void 0===d&&Wc(c)!==a)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(c===b)return b;b.parentNode&&Yc(b.parentNode,b);var e,f;if(!b.__noInsertionPoint){if(f=e=Cb(a)){var h;"slot"===b.localName?h=[b]:b.querySelectorAll&&
+(h=b.querySelectorAll("slot"));f=h&&h.length?h:void 0}f&&(h=e,d=f,h.v=h.v||[],h.g=h.g||[],h.j=h.j||{},h.v.push.apply(h.v,[].concat(d instanceof Array?d:na(ma(d)))))}("slot"===a.localName||f)&&(e=e||Cb(a))&&Zc(e);if(Bb(a)){e=c;Sc(a);f=x(a);void 0!==f.firstChild&&(f.childNodes=null);if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE){f=b.childNodes;for(h=0;h<f.length;h++)Uc(f[h],a,e);e=x(b);f=void 0!==e.firstChild?null:void 0;e.firstChild=e.lastChild=f;e.childNodes=f}else Uc(b,a,e);e=y(a);if($c(a)){Zc(e.root);
+var g=!0}else e.root&&(g=!0)}g||(g=A(a)?a.host:a,c?(c=ad(c),B.insertBefore.call(g,b,c)):B.appendChild.call(g,b));bd(a,b);return b}
+function Yc(a,b){if(b.parentNode!==a)throw Error("The node to be removed is not a child of this node: "+b);var c=Cb(b),d=y(a);if(Bb(a)){var e=x(b),f=x(a);b===f.firstChild&&(f.firstChild=e.nextSibling);b===f.lastChild&&(f.lastChild=e.previousSibling);var h=e.previousSibling,g=e.nextSibling;h&&(x(h).nextSibling=g);g&&(x(g).previousSibling=h);e.parentNode=e.previousSibling=e.nextSibling=void 0;void 0!==f.childNodes&&(f.childNodes=null);if($c(a)){Zc(d.root);var k=!0}}cd(b);if(c){(e=a&&"slot"===a.localName)&&
+(k=!0);if(c.g){dd(c);f=c.j;for(aa in f)for(h=f[aa],g=0;g<h.length;g++){var l=h[g];if(Nb(b,l)){h.splice(g,1);var m=c.g.indexOf(l);0<=m&&c.g.splice(m,1);g--;m=y(l);if(l=m.C)for(var n=0;n<l.length;n++){var t=l[n],C=ed(t);C&&B.removeChild.call(C,t)}m.C=[];m.assignedNodes=[];m=!0}}var aa=m}else aa=void 0;(aa||e)&&Zc(c)}k||(k=A(a)?a.host:a,(!d.root&&"slot"!==b.localName||k===Wc(b))&&B.removeChild.call(k,b));bd(a,null,b);return b}
+function cd(a){var b=y(a);if(b&&void 0!==b.O){b=a.childNodes;for(var c=0,d=b.length,e;c<d&&(e=b[c]);c++)cd(e)}if(a=y(a))a.O=void 0}function ad(a){var b=a;a&&"slot"===a.localName&&(b=(b=(b=y(a))&&b.C)&&b.length?b[0]:ad(a.nextSibling));return b}function $c(a){return(a=(a=y(a))&&a.root)&&fd(a)}
+function gd(a,b){if("slot"===b)a=a.parentNode,$c(a)&&Zc(y(a).root);else if("slot"===a.localName&&"name"===b&&(b=Cb(a))){if(b.g){var c=a.Ea,d=hd(a);if(d!==c){c=b.j[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.j[d]||(b.j[d]=[]);c.push(a);1<c.length&&(b.j[d]=id(c))}}Zc(b)}}function bd(a,b,c){if(a=(a=y(a))&&a.J)b&&a.addedNodes.push(b),c&&a.removedNodes.push(c),Tb(a)}
+function jd(a){if(a&&a.nodeType){var b=x(a),c=b.O;void 0===c&&(A(a)?(c=a,b.O=c):(c=(c=a.parentNode)?jd(c):a,B.contains.call(document.documentElement,a)&&(b.O=c)));return c}}function kd(a,b,c){var d=[];ld(a.childNodes,b,c,d);return d}function ld(a,b,c,d){for(var e=0,f=a.length,h;e<f&&(h=a[e]);e++){var g;if(g=h.nodeType===Node.ELEMENT_NODE){g=h;var k=b,l=c,m=d,n=k(g);n&&m.push(g);l&&l(n)?g=n:(ld(g.childNodes,k,l,m),g=void 0)}if(g)break}}var md=null;
+function nd(a,b,c){md||(md=window.ShadyCSS&&window.ShadyCSS.ScopingShim);md&&"class"===b?md.setElementClass(a,c):(B.setAttribute.call(a,b,c),gd(a,b))}function od(a,b){if(a.ownerDocument!==document)return B.importNode.call(document,a,b);var c=B.importNode.call(document,a,!1);if(b){a=a.childNodes;b=0;for(var d;b<a.length;b++)d=od(a[b],!0),c.appendChild(d)}return c};var pd="__eventWrappers"+Date.now(),qd={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,
+dragstart:!0,drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0};function rd(a,b){var c=[],d=a;for(a=a===window?window:a.getRootNode();d;)c.push(d),d=d.assignedSlot?d.assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d.host:d.parentNode;c[c.length-1]===document&&c.push(window);return c}
+function sd(a,b){if(!A)return a;a=rd(a,!0);for(var c=0,d,e,f,h;c<b.length;c++)if(d=b[c],f=d===window?window:d.getRootNode(),f!==e&&(h=a.indexOf(f),e=f),!A(f)||-1<h)return d}
+var td={get composed(){!1!==this.isTrusted&&void 0===this.ca&&(this.ca=qd[this.type]);return this.ca||!1},composedPath:function(){this.b||(this.b=rd(this.__target,this.composed));return this.b},get target(){return sd(this.currentTarget,this.composedPath())},get relatedTarget(){if(!this.da)return null;this.c||(this.c=rd(this.da,!0));return sd(this.currentTarget,this.c)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.a=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);
+this.a=this.i=!0}};function ud(a){function b(b,d){b=new a(b,d);b.ca=d&&!!d.composed;return b}Hb(b,a);b.prototype=a.prototype;return b}var vd={focus:!0,blur:!0};function wd(a){return a.__target!==a.target||a.da!==a.relatedTarget}function xd(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!wd(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.i);d++);}
+function yd(a){var b=a.composedPath();Object.defineProperty(a,"currentTarget",{get:function(){return d},configurable:!0});for(var c=b.length-1;0<=c;c--){var d=b[c];xd(a,d,"capture");if(a.a)return}Object.defineProperty(a,"eventPhase",{get:function(){return Event.AT_TARGET}});var e;for(c=0;c<b.length;c++){d=b[c];var f=y(d);f=f&&f.root;if(0===c||f&&f===e)if(xd(a,d,"bubble"),d!==window&&(e=d.getRootNode()),a.a)break}}
+function zd(a,b,c,d,e,f){for(var h=0;h<a.length;h++){var g=a[h],k=g.type,l=g.capture,m=g.once,n=g.passive;if(b===g.node&&c===k&&d===l&&e===m&&f===n)return h}return-1}
+function Ad(a,b,c){if(b){var d=typeof b;if("function"===d||"object"===d)if("object"!==d||b.handleEvent&&"function"===typeof b.handleEvent){if(c&&"object"===typeof c){var e=!!c.capture;var f=!!c.once;var h=!!c.passive}else e=!!c,h=f=!1;var g=c&&c.fa||this,k=b[pd];if(k){if(-1<zd(k,g,a,e,f,h))return}else b[pd]=[];k=function(e){f&&this.removeEventListener(a,b,c);e.__target||Bd(e);if(g!==this){var h=Object.getOwnPropertyDescriptor(e,"currentTarget");Object.defineProperty(e,"currentTarget",{get:function(){return g},
+configurable:!0})}if(e.composed||-1<e.composedPath().indexOf(g))if(wd(e)&&e.target===e.relatedTarget)e.eventPhase===Event.BUBBLING_PHASE&&e.stopImmediatePropagation();else if(e.eventPhase===Event.CAPTURING_PHASE||e.bubbles||e.target===g||g instanceof Window){var k="function"===d?b.call(g,e):b.handleEvent&&b.handleEvent(e);g!==this&&(h?(Object.defineProperty(e,"currentTarget",h),h=null):delete e.currentTarget);return k}};b[pd].push({node:g,type:a,capture:e,once:f,passive:h,hb:k});vd[a]?(this.__handlers=
+this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(k)):(this instanceof Window?B.fb:B.addEventListener).call(this,a,k,c)}}}
+function Cd(a,b,c){if(b){if(c&&"object"===typeof c){var d=!!c.capture;var e=!!c.once;var f=!!c.passive}else d=!!c,f=e=!1;var h=c&&c.fa||this,g=void 0;var k=null;try{k=b[pd]}catch(l){}k&&(e=zd(k,h,a,d,e,f),-1<e&&(g=k.splice(e,1)[0].hb,k.length||(b[pd]=void 0)));(this instanceof Window?B.gb:B.removeEventListener).call(this,a,g||b,c);g&&vd[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][d?"capture":"bubble"],g=a.indexOf(g),-1<g&&a.splice(g,1))}}
+function Dd(){for(var a in vd)window.addEventListener(a,function(a){a.__target||(Bd(a),yd(a))},!0)}function Bd(a){a.__target=a.target;a.da=a.relatedTarget;if(z.w){var b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__patchProto")){var c=Object.create(b);c.jb=b;Fb(c,td);b.__patchProto=c}a.__proto__=b.__patchProto}else Fb(a,td)}var Ed=ud(window.Event),Fd=ud(window.CustomEvent),Gd=ud(window.MouseEvent);function Hd(a,b){return{index:a,P:[],W:b}}
+function Id(a,b,c,d){var e=0,f=0,h=0,g=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(h=0;h<k;h++)if(a[h]!==c[h])break a;h=k}if(b==a.length&&d==c.length){g=a.length;for(var l=c.length,m=0;m<k-h&&Jd(a[--g],c[--l]);)m++;g=m}e+=h;f+=h;b-=g;d-=g;if(0==b-e&&0==d-f)return[];if(e==b){for(b=Hd(e,0);f<d;)b.P.push(c[f++]);return[b]}if(f==d)return[Hd(e,b-e)];k=e;h=f;d=d-h+1;g=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(g),b[l][0]=l;for(l=0;l<g;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<g;m++)if(a[k+m-1]===c[h+l-1])b[l][m]=
+b[l-1][m-1];else{var n=b[l-1][m]+1,t=b[l][m-1]+1;b[l][m]=n<t?n:t}k=b.length-1;h=b[0].length-1;d=b[k][h];for(a=[];0<k||0<h;)0==k?(a.push(2),h--):0==h?(a.push(3),k--):(g=b[k-1][h-1],l=b[k-1][h],m=b[k][h-1],n=l<m?l<g?l:g:m<g?m:g,n==g?(g==d?a.push(0):(a.push(1),d=g),k--,h--):n==l?(a.push(3),k--,d=l):(a.push(2),h--,d=m));a.reverse();b=void 0;k=[];for(h=0;h<a.length;h++)switch(a[h]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=Hd(e,0));b.W++;e++;b.P.push(c[f]);f++;break;case 2:b||(b=Hd(e,0));
+b.W++;e++;break;case 3:b||(b=Hd(e,0)),b.P.push(c[f]),f++}b&&k.push(b);return k}function Jd(a,b){return a===b};var ed=K.parentNode,Kd=K.childNodes,Ld={};function Md(a){var b=[];do b.unshift(a);while(a=a.parentNode);return b}function Qc(a,b,c){if(a!==Ld)throw new TypeError("Illegal constructor");this.Ja="ShadyRoot";a=Kd(b);this.host=b;this.a=c&&c.mode;Vc(b,a);c=y(b);c.root=this;c.xa="closed"!==this.a?this:null;c=x(this);c.firstChild=c.lastChild=c.parentNode=c.nextSibling=c.previousSibling=null;c.childNodes=[];this.V=!1;this.v=this.j=this.g=null;c=0;for(var d=a.length;c<d;c++)B.removeChild.call(b,a[c])}
+function Zc(a){a.V||(a.V=!0,Qb(function(){return Nd(a)}))}function Nd(a){for(var b;a;){a.V&&(b=a);a:{var c=a;a=c.host.getRootNode();if(A(a))for(var d=c.host.childNodes,e=0;e<d.length;e++)if(c=d[e],"slot"==c.localName)break a;a=void 0}}b&&b._renderRoot()}
+Qc.prototype._renderRoot=function(){this.V=!1;if(this.g){dd(this);for(var a=0,b;a<this.g.length;a++){b=this.g[a];var c=y(b),d=c.assignedNodes;c.assignedNodes=[];c.C=[];if(c.la=d)for(c=0;c<d.length;c++){var e=y(d[c]);e.T=e.assignedSlot;e.assignedSlot===b&&(e.assignedSlot=null)}}for(b=this.host.firstChild;b;b=b.nextSibling)Od(this,b);for(a=0;a<this.g.length;a++){b=this.g[a];d=y(b);if(!d.assignedNodes.length)for(c=b.firstChild;c;c=c.nextSibling)Od(this,c,b);(c=(c=y(b.parentNode))&&c.root)&&fd(c)&&c._renderRoot();
+Pd(this,d.C,d.assignedNodes);if(c=d.la){for(e=0;e<c.length;e++)y(c[e]).T=null;d.la=null;c.length>d.assignedNodes.length&&(d.Y=!0)}d.Y&&(d.Y=!1,Qd(this,b))}a=this.g;b=[];for(d=0;d<a.length;d++)c=a[d].parentNode,(e=y(c))&&e.root||!(0>b.indexOf(c))||b.push(c);for(a=0;a<b.length;a++){d=b[a];c=d===this?this.host:d;e=[];d=d.childNodes;for(var f=0;f<d.length;f++){var h=d[f];if("slot"==h.localName){h=y(h).C;for(var g=0;g<h.length;g++)e.push(h[g])}else e.push(h)}d=void 0;f=Kd(c);h=Id(e,e.length,f,f.length);
+for(var k=g=0;g<h.length&&(d=h[g]);g++){for(var l=0,m;l<d.P.length&&(m=d.P[l]);l++)ed(m)===c&&B.removeChild.call(c,m),f.splice(d.index+k,1);k-=d.W}for(k=0;k<h.length&&(d=h[k]);k++)for(g=f[d.index],l=d.index;l<d.index+d.W;l++)m=e[l],B.insertBefore.call(c,m,g),f.splice(l,0,m)}}};function Od(a,b,c){var d=x(b),e=d.T;d.T=null;c||(c=(a=a.j[b.slot||"__catchall"])&&a[0]);c?(x(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(x(d.assignedSlot).Y=!0)}
+function Pd(a,b,c){for(var d=0,e;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=y(e).assignedNodes;f&&f.length&&Pd(a,b,f)}else b.push(c[d])}function Qd(a,b){B.dispatchEvent.call(b,new Event("slotchange"));b=y(b);b.assignedSlot&&Qd(a,b.assignedSlot)}function dd(a){if(a.v&&a.v.length){for(var b=a.v,c,d=0;d<b.length;d++){var e=b[d];Vc(e);Vc(e.parentNode);var f=hd(e);a.j[f]?(c=c||{},c[f]=!0,a.j[f].push(e)):a.j[f]=[e];a.g.push(e)}if(c)for(var h in c)a.j[h]=id(a.j[h]);a.v=[]}}
+function hd(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.Ea=b}function id(a){return a.sort(function(a,c){a=Md(a);for(var b=Md(c),e=0;e<a.length;e++){c=a[e];var f=b[e];if(c!==f)return a=Array.from(c.parentNode.childNodes),a.indexOf(c)-a.indexOf(f)}})}function fd(a){dd(a);return!(!a.g||!a.g.length)};function Rd(a){var b=a.getRootNode();A(b)&&Nd(b);return(a=y(a))&&a.assignedSlot||null}
+var Sd={addEventListener:Ad.bind(window),removeEventListener:Cd.bind(window)},Td={addEventListener:Ad,removeEventListener:Cd,appendChild:function(a){return Xc(this,a)},insertBefore:function(a,b){return Xc(this,a,b)},removeChild:function(a){return Yc(this,a)},replaceChild:function(a,b){Xc(this,a,b);Yc(this,b);return a},cloneNode:function(a){if("template"==this.localName)var b=B.cloneNode.call(this,a);else if(b=B.cloneNode.call(this,!1),a){a=this.childNodes;for(var c=0,d;c<a.length;c++)d=a[c].cloneNode(!0),
+b.appendChild(d)}return b},getRootNode:function(){return jd(this)},contains:function(a){return Nb(this,a)},dispatchEvent:function(a){Rb();return B.dispatchEvent.call(this,a)}};
+Object.defineProperties(Td,{isConnected:{get:function(){if(Hc&&Hc.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;var a=this.ownerDocument;if(Mb){if(B.contains.call(a,this))return!0}else if(a.documentElement&&B.contains.call(a.documentElement,this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.parentNode||(A(a)?a.host:void 0);return!!(a&&a instanceof Document)},configurable:!0}});
+var Ud={get assignedSlot(){return Rd(this)}},Vd={querySelector:function(a){return kd(this,function(b){return Eb.call(b,a)},function(a){return!!a})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(B.querySelectorAll(this,a));var c=this.getRootNode();return b.filter(function(a){return a.getRootNode()==c})}return kd(this,function(b){return Eb.call(b,a)})}},Wd={assignedNodes:function(a){if("slot"===this.localName){var b=this.getRootNode();A(b)&&Nd(b);return(b=y(this))?(a&&a.flatten?
+b.C:b.assignedNodes)||[]:[]}}},Xd=Gb({setAttribute:function(a,b){nd(this,a,b)},removeAttribute:function(a){B.removeAttribute.call(this,a);gd(this,a)},attachShadow:function(a){if(!this)throw"Must provide a host.";if(!a)throw"Not enough arguments.";return new Qc(Ld,this,a)},get slot(){return this.getAttribute("slot")},set slot(a){nd(this,"slot",a)},get assignedSlot(){return Rd(this)}},Vd,Wd);Object.defineProperties(Xd,Mc);
+var Yd=Gb({importNode:function(a,b){return od(a,b)},getElementById:function(a){return kd(this,function(b){return b.id==a},function(a){return!!a})[0]||null}},Vd);Object.defineProperties(Yd,{_activeElement:Nc.activeElement});
+var Zd=HTMLElement.prototype.blur,$d=Gb({blur:function(){var a=y(this);(a=(a=a&&a.root)&&a.activeElement)?a.blur():Zd.call(this)}}),ae={addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.fa=this;this.host.addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.fa=this;this.host.removeEventListener(a,b,c)},getElementById:function(a){return kd(this,function(b){return b.id==a},function(a){return!!a})[0]||null}};
+function M(a,b){for(var c=Object.getOwnPropertyNames(b),d=0;d<c.length;d++){var e=c[d],f=Object.getOwnPropertyDescriptor(b,e);f.value?a[e]=f.value:Object.defineProperty(a,e,f)}};if(z.va){var ShadyDOM={inUse:z.va,patch:function(a){Sc(a);Rc(a);return a},isShadyRoot:A,enqueue:Qb,flush:Rb,settings:z,filterMutations:Xb,observeChildren:Vb,unobserveChildren:Wb,nativeMethods:B,nativeTree:K};window.ShadyDOM=ShadyDOM;window.Event=Ed;window.CustomEvent=Fd;window.MouseEvent=Gd;Dd();var be=window.customElements&&window.customElements.nativeHTMLElement||HTMLElement;M(Qc.prototype,ae);M(window.Node.prototype,Td);M(window.Window.prototype,Sd);M(window.Text.prototype,Ud);M(window.DocumentFragment.prototype,
+Vd);M(window.Element.prototype,Xd);M(window.Document.prototype,Yd);window.HTMLSlotElement&&M(window.HTMLSlotElement.prototype,Wd);M(be.prototype,$d);z.w&&(Oc(window.Node.prototype),Oc(window.Text.prototype),Oc(window.DocumentFragment.prototype),Oc(window.Element.prototype),Oc(be.prototype),Oc(window.Document.prototype),window.HTMLSlotElement&&Oc(window.HTMLSlotElement.prototype));Pc();window.ShadowRoot=Qc};var ce=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function de(a){var b=ce.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return!b&&a}function N(a){var b=a.isConnected;if(void 0!==b)return b;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}
+function ee(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
+function fe(a,b,c){c=void 0===c?new Set:c;for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)fe(d,b,c);d=ee(a,e);continue}else if("template"===f){d=ee(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)fe(e,b,c)}d=d.firstChild?d.firstChild:ee(a,d)}}function O(a,b,c){a[b]=c};function ge(){this.a=new Map;this.s=new Map;this.i=[];this.c=!1}function he(a,b,c){a.a.set(b,c);a.s.set(c.constructor,c)}function ie(a,b){a.c=!0;a.i.push(b)}function je(a,b){a.c&&fe(b,function(b){return a.b(b)})}ge.prototype.b=function(a){if(this.c&&!a.__CE_patched){a.__CE_patched=!0;for(var b=0;b<this.i.length;b++)this.i[b](a)}};function Q(a,b){var c=[];fe(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):ke(a,d)}}
+function R(a,b){var c=[];fe(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
+function S(a,b,c){c=void 0===c?{}:c;var d=c.eb||new Set,e=c.ba||function(b){return ke(a,b)},f=[];fe(b,function(b){if("link"===b.localName&&"import"===b.getAttribute("rel")){var c=b.import;c instanceof Node&&(c.__CE_isImportDocument=!0,c.__CE_hasRegistry=!0);c&&"complete"===c.readyState?c.__CE_documentLoadHandled=!0:b.addEventListener("load",function(){var c=b.import;if(!c.__CE_documentLoadHandled){c.__CE_documentLoadHandled=!0;var f=new Set(d);f.delete(c);S(a,c,{eb:f,ba:e})}})}else f.push(b)},d);
+if(a.c)for(b=0;b<f.length;b++)a.b(f[b]);for(b=0;b<f.length;b++)e(f[b])}
+function ke(a,b){if(void 0===b.__CE_state){var c=b.ownerDocument;if(c.defaultView||c.__CE_isImportDocument&&c.__CE_hasRegistry)if(c=a.a.get(b.localName)){c.constructionStack.push(b);var d=c.constructor;try{try{if(new d!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{c.constructionStack.pop()}}catch(h){throw b.__CE_state=2,h;}b.__CE_state=1;b.__CE_definition=c;if(c.attributeChangedCallback)for(c=c.observedAttributes,d=0;d<c.length;d++){var e=c[d],
+f=b.getAttribute(e);null!==f&&a.attributeChangedCallback(b,e,null,f,null)}N(b)&&a.connectedCallback(b)}}}ge.prototype.connectedCallback=function(a){var b=a.__CE_definition;b.connectedCallback&&b.connectedCallback.call(a)};ge.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;b.disconnectedCallback&&b.disconnectedCallback.call(a)};
+ge.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b)&&f.attributeChangedCallback.call(a,b,c,d,e)};function le(a){var b=document;this.l=a;this.a=b;this.G=void 0;S(this.l,this.a);"loading"===this.a.readyState&&(this.G=new MutationObserver(this.b.bind(this)),this.G.observe(this.a,{childList:!0,subtree:!0}))}le.prototype.disconnect=function(){this.G&&this.G.disconnect()};le.prototype.b=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||this.disconnect();for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)S(this.l,c[d])};function me(){var a=this;this.b=this.a=void 0;this.c=new Promise(function(b){a.b=b;a.a&&b(a.a)})}me.prototype.resolve=function(a){if(this.a)throw Error("Already resolved.");this.a=a;this.b&&this.b(a)};function T(a){this.ia=!1;this.l=a;this.ma=new Map;this.ja=function(a){return a()};this.S=!1;this.ka=[];this.Ha=new le(a)}p=T.prototype;
+p.define=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");if(!de(a))throw new SyntaxError("The element name '"+a+"' is not valid.");if(this.l.a.get(a))throw Error("A custom element with name '"+a+"' has already been defined.");if(this.ia)throw Error("A custom element is already being defined.");this.ia=!0;try{var d=function(a){var b=e[a];if(void 0!==b&&!(b instanceof Function))throw Error("The '"+a+"' callback must be a function.");
+return b},e=b.prototype;if(!(e instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var f=d("connectedCallback");var h=d("disconnectedCallback");var g=d("adoptedCallback");var k=d("attributeChangedCallback");var l=b.observedAttributes||[]}catch(m){return}finally{this.ia=!1}b={localName:a,constructor:b,connectedCallback:f,disconnectedCallback:h,adoptedCallback:g,attributeChangedCallback:k,observedAttributes:l,constructionStack:[]};he(this.l,a,b);this.ka.push(b);
+this.S||(this.S=!0,this.ja(function(){return ne(c)}))};p.ba=function(a){S(this.l,a)};
+function ne(a){if(!1!==a.S){a.S=!1;for(var b=a.ka,c=[],d=new Map,e=0;e<b.length;e++)d.set(b[e].localName,[]);S(a.l,document,{ba:function(b){if(void 0===b.__CE_state){var e=b.localName,f=d.get(e);f?f.push(b):a.l.a.get(e)&&c.push(b)}}});for(e=0;e<c.length;e++)ke(a.l,c[e]);for(;0<b.length;){var f=b.shift();e=f.localName;f=d.get(f.localName);for(var h=0;h<f.length;h++)ke(a.l,f[h]);(e=a.ma.get(e))&&e.resolve(void 0)}}}p.get=function(a){if(a=this.l.a.get(a))return a.constructor};
+p.Ba=function(a){if(!de(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.ma.get(a);if(b)return b.c;b=new me;this.ma.set(a,b);this.l.a.get(a)&&!this.ka.some(function(b){return b.localName===a})&&b.resolve(void 0);return b.c};p.Za=function(a){this.Ha.disconnect();var b=this.ja;this.ja=function(c){return a(function(){return b(c)})}};window.CustomElementRegistry=T;T.prototype.define=T.prototype.define;T.prototype.upgrade=T.prototype.ba;
+T.prototype.get=T.prototype.get;T.prototype.whenDefined=T.prototype.Ba;T.prototype.polyfillWrapFlushCallback=T.prototype.Za;var oe=window.Document.prototype.createElement,pe=window.Document.prototype.createElementNS,qe=window.Document.prototype.importNode,re=window.Document.prototype.prepend,se=window.Document.prototype.append,te=window.DocumentFragment.prototype.prepend,ue=window.DocumentFragment.prototype.append,ve=window.Node.prototype.cloneNode,we=window.Node.prototype.appendChild,xe=window.Node.prototype.insertBefore,ye=window.Node.prototype.removeChild,ze=window.Node.prototype.replaceChild,Ae=Object.getOwnPropertyDescriptor(window.Node.prototype,
+"textContent"),Be=window.Element.prototype.attachShadow,Ce=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),De=window.Element.prototype.getAttribute,Ee=window.Element.prototype.setAttribute,Fe=window.Element.prototype.removeAttribute,Ge=window.Element.prototype.getAttributeNS,He=window.Element.prototype.setAttributeNS,Ie=window.Element.prototype.removeAttributeNS,Je=window.Element.prototype.insertAdjacentElement,Ke=window.Element.prototype.insertAdjacentHTML,Le=window.Element.prototype.prepend,
+Me=window.Element.prototype.append,Ne=window.Element.prototype.before,Oe=window.Element.prototype.after,Pe=window.Element.prototype.replaceWith,Qe=window.Element.prototype.remove,Re=window.HTMLElement,Se=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),Te=window.HTMLElement.prototype.insertAdjacentElement,Ue=window.HTMLElement.prototype.insertAdjacentHTML;var Ve=new function(){};function We(){var a=Xe;window.HTMLElement=function(){function b(){var b=this.constructor,d=a.s.get(b);if(!d)throw Error("The custom element being constructed was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=oe.call(document,d.localName),Object.setPrototypeOf(e,b.prototype),e.__CE_state=1,e.__CE_definition=d,a.b(e),e;d=e.length-1;var f=e[d];if(f===Ve)throw Error("The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.");
+e[d]=Ve;Object.setPrototypeOf(f,b.prototype);a.b(f);return f}b.prototype=Re.prototype;return b}()};function Ye(a,b,c){function d(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];e=[];for(var f=[],l=0;l<d.length;l++){var m=d[l];m instanceof Element&&N(m)&&f.push(m);if(m instanceof DocumentFragment)for(m=m.firstChild;m;m=m.nextSibling)e.push(m);else e.push(m)}b.apply(this,d);for(d=0;d<f.length;d++)R(a,f[d]);if(N(this))for(d=0;d<e.length;d++)f=e[d],f instanceof Element&&Q(a,f)}}void 0!==c.$&&(b.prepend=d(c.$));void 0!==c.append&&(b.append=d(c.append))};function Ze(){var a=Xe;O(Document.prototype,"createElement",function(b){if(this.__CE_hasRegistry){var c=a.a.get(b);if(c)return new c.constructor}b=oe.call(this,b);a.b(b);return b});O(Document.prototype,"importNode",function(b,c){b=qe.call(this,b,c);this.__CE_hasRegistry?S(a,b):je(a,b);return b});O(Document.prototype,"createElementNS",function(b,c){if(this.__CE_hasRegistry&&(null===b||"http://www.w3.org/1999/xhtml"===b)){var d=a.a.get(c);if(d)return new d.constructor}b=pe.call(this,b,c);a.b(b);return b});
+Ye(a,Document.prototype,{$:re,append:se})};function $e(){var a=Xe;function b(b,d){Object.defineProperty(b,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(b){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,b);else{var c=void 0;if(this.firstChild){var e=this.childNodes,g=e.length;if(0<g&&N(this)){c=Array(g);for(var k=0;k<g;k++)c[k]=e[k]}}d.set.call(this,b);if(c)for(b=0;b<c.length;b++)R(a,c[b])}}})}O(Node.prototype,"insertBefore",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);
+b=xe.call(this,b,d);if(N(this))for(d=0;d<c.length;d++)Q(a,c[d]);return b}c=N(b);d=xe.call(this,b,d);c&&R(a,b);N(this)&&Q(a,b);return d});O(Node.prototype,"appendChild",function(b){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=we.call(this,b);if(N(this))for(var e=0;e<c.length;e++)Q(a,c[e]);return b}c=N(b);e=we.call(this,b);c&&R(a,b);N(this)&&Q(a,b);return e});O(Node.prototype,"cloneNode",function(b){b=ve.call(this,b);this.ownerDocument.__CE_hasRegistry?S(a,b):
+je(a,b);return b});O(Node.prototype,"removeChild",function(b){var c=N(b),e=ye.call(this,b);c&&R(a,b);return e});O(Node.prototype,"replaceChild",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=ze.call(this,b,d);if(N(this))for(R(a,d),d=0;d<c.length;d++)Q(a,c[d]);return b}c=N(b);var f=ze.call(this,b,d),h=N(this);h&&R(a,d);c&&R(a,b);h&&Q(a,b);return f});Ae&&Ae.get?b(Node.prototype,Ae):ie(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){for(var a=
+[],b=0;b<this.childNodes.length;b++)a.push(this.childNodes[b].textContent);return a.join("")},set:function(a){for(;this.firstChild;)ye.call(this,this.firstChild);we.call(this,document.createTextNode(a))}})})};function af(a){var b=Element.prototype;function c(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];e=[];for(var g=[],k=0;k<d.length;k++){var l=d[k];l instanceof Element&&N(l)&&g.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)e.push(l);else e.push(l)}b.apply(this,d);for(d=0;d<g.length;d++)R(a,g[d]);if(N(this))for(d=0;d<e.length;d++)g=e[d],g instanceof Element&&Q(a,g)}}void 0!==Ne&&(b.before=c(Ne));void 0!==Ne&&(b.after=c(Oe));void 0!==
+Pe&&O(b,"replaceWith",function(b){for(var c=[],d=0;d<arguments.length;++d)c[d-0]=arguments[d];d=[];for(var h=[],g=0;g<c.length;g++){var k=c[g];k instanceof Element&&N(k)&&h.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)d.push(k);else d.push(k)}g=N(this);Pe.apply(this,c);for(c=0;c<h.length;c++)R(a,h[c]);if(g)for(R(a,this),c=0;c<d.length;c++)h=d[c],h instanceof Element&&Q(a,h)});void 0!==Qe&&O(b,"remove",function(){var b=N(this);Qe.call(this);b&&R(a,this)})};function bf(){var a=Xe;function b(b,c){Object.defineProperty(b,"innerHTML",{enumerable:c.enumerable,configurable:!0,get:c.get,set:function(b){var d=this,e=void 0;N(this)&&(e=[],fe(this,function(a){a!==d&&e.push(a)}));c.set.call(this,b);if(e)for(var f=0;f<e.length;f++){var h=e[f];1===h.__CE_state&&a.disconnectedCallback(h)}this.ownerDocument.__CE_hasRegistry?S(a,this):je(a,this);return b}})}function c(b,c){O(b,"insertAdjacentElement",function(b,d){var e=N(d);b=c.call(this,b,d);e&&R(a,d);N(b)&&Q(a,
+d);return b})}function d(b,c){function d(b,c){for(var d=[];b!==c;b=b.nextSibling)d.push(b);for(c=0;c<d.length;c++)S(a,d[c])}O(b,"insertAdjacentHTML",function(a,b){a=a.toLowerCase();if("beforebegin"===a){var e=this.previousSibling;c.call(this,a,b);d(e||this.parentNode.firstChild,this)}else if("afterbegin"===a)e=this.firstChild,c.call(this,a,b),d(this.firstChild,e);else if("beforeend"===a)e=this.lastChild,c.call(this,a,b),d(e||this.firstChild,null);else if("afterend"===a)e=this.nextSibling,c.call(this,
+a,b),d(this.nextSibling,e);else throw new SyntaxError("The value provided ("+String(a)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");})}Be&&O(Element.prototype,"attachShadow",function(a){return this.__CE_shadowRoot=a=Be.call(this,a)});Ce&&Ce.get?b(Element.prototype,Ce):Se&&Se.get?b(HTMLElement.prototype,Se):ie(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){return ve.call(this,!0).innerHTML},set:function(a){var b="template"===this.localName,c=b?this.content:
+this,d=oe.call(document,this.localName);for(d.innerHTML=a;0<c.childNodes.length;)ye.call(c,c.childNodes[0]);for(a=b?d.content:d;0<a.childNodes.length;)we.call(c,a.childNodes[0])}})});O(Element.prototype,"setAttribute",function(b,c){if(1!==this.__CE_state)return Ee.call(this,b,c);var d=De.call(this,b);Ee.call(this,b,c);c=De.call(this,b);a.attributeChangedCallback(this,b,d,c,null)});O(Element.prototype,"setAttributeNS",function(b,c,d){if(1!==this.__CE_state)return He.call(this,b,c,d);var e=Ge.call(this,
+b,c);He.call(this,b,c,d);d=Ge.call(this,b,c);a.attributeChangedCallback(this,c,e,d,b)});O(Element.prototype,"removeAttribute",function(b){if(1!==this.__CE_state)return Fe.call(this,b);var c=De.call(this,b);Fe.call(this,b);null!==c&&a.attributeChangedCallback(this,b,c,null,null)});O(Element.prototype,"removeAttributeNS",function(b,c){if(1!==this.__CE_state)return Ie.call(this,b,c);var d=Ge.call(this,b,c);Ie.call(this,b,c);var e=Ge.call(this,b,c);d!==e&&a.attributeChangedCallback(this,c,d,e,b)});Te?
+c(HTMLElement.prototype,Te):Je?c(Element.prototype,Je):console.warn("Custom Elements: `Element#insertAdjacentElement` was not patched.");Ue?d(HTMLElement.prototype,Ue):Ke?d(Element.prototype,Ke):console.warn("Custom Elements: `Element#insertAdjacentHTML` was not patched.");Ye(a,Element.prototype,{$:Le,append:Me});af(a)};var cf=window.customElements;if(!cf||cf.forcePolyfill||"function"!=typeof cf.define||"function"!=typeof cf.get){var Xe=new ge;We();Ze();Ye(Xe,DocumentFragment.prototype,{$:te,append:ue});$e();bf();document.__CE_hasRegistry=!0;var customElements=new T(Xe);Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:customElements})};function df(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function ef(a){a=a.replace(ff,"").replace(gf,"");var b=kf,c=a,d=new df;d.start=0;d.end=c.length;for(var e=d,f=0,h=c.length;f<h;f++)if("{"===c[f]){e.rules||(e.rules=[]);var g=e,k=g.rules[g.rules.length-1]||null;e=new df;e.start=f+1;e.parent=g;e.previous=k;g.rules.push(e)}else"}"===c[f]&&(e.end=f+1,e=e.parent||d);return b(d,a)}
+function kf(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=lf(c),c=c.replace(mf," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=nf:c.match(of)&&(a.type=pf,a.keyframesName=a.selector.split(mf).pop()):a.type=0===c.indexOf("--")?qf:rf);if(c=a.rules)for(var d=0,e=c.length,f;d<e&&(f=c[d]);d++)kf(f,
+b);return a}function lf(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(a,c){a=c;for(c=6-a.length;c--;)a="0"+a;return"\\"+a})}
+function sf(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var h=e.length,g;f<h&&(g=e[f]);f++)d=sf(g,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(tf,"").replace(uf,""),b=b.replace(vf,"").replace(wf,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
+var rf=1,pf=7,nf=4,qf=1E3,ff=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,gf=/@import[^;]*;/gim,tf=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,uf=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,vf=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,wf=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,of=/^@[^\s]*keyframes/,mf=/\s+/g;var U=!(window.ShadyDOM&&window.ShadyDOM.inUse),xf;function yf(a){xf=a&&a.shimcssproperties?!1:U||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?xf=window.ShadyCSS.nativeCss:window.ShadyCSS?(yf(window.ShadyCSS),window.ShadyCSS=void 0):yf(window.WebComponents&&window.WebComponents.flags);var V=xf;var zf=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,Af=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,Bf=/(--[\w-]+)\s*([:,;)]|$)/gi,Cf=/(animation\s*:)|(animation-name\s*:)/,Df=/@media\s(.*)/,Ef=/\{[^}]*\}/g;var Ff=new Set;function Gf(a,b){if(!a)return"";"string"===typeof a&&(a=ef(a));b&&Hf(a,b);return sf(a,V)}function If(a){!a.__cssRules&&a.textContent&&(a.__cssRules=ef(a.textContent));return a.__cssRules||null}function Jf(a){return!!a.parent&&a.parent.type===pf}function Hf(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===nf){var h=a.selector.match(Df);h&&(window.matchMedia(h[1]).matches||(e=!0))}f===rf?b(a):c&&f===pf?c(a):f===qf&&(e=!0);if((a=a.rules)&&!e){e=0;f=a.length;for(var g;e<f&&(g=a[e]);e++)Hf(g,b,c,d)}}}
+function Kf(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;Lf(e,c,d);return e}var Mf=null;function Lf(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);Mf?a.compareDocumentPosition(Mf)===Node.DOCUMENT_POSITION_PRECEDING&&(Mf=a):Mf=a}
+function Nf(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");a:{var d=0;var e=c+3;for(var f=a.length;e<f;e++)if("("===a[e])d++;else if(")"===a[e]&&0===--d)break a;e=-1}d=a.substring(c+4,e);c=a.substring(0,c);a=Nf(a.substring(e+1),b);e=d.indexOf(",");return-1===e?b(c,d.trim(),"",a):b(c,d.substring(0,e).trim(),d.substring(e+1).trim(),a)}function Of(a,b){U?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
+function Pf(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,R:c}};function Qf(){}function Rf(a,b,c){var d=W;a.__styleScoped?a.__styleScoped=null:Sf(d,a,b||"",c)}function Sf(a,b,c,d){b.nodeType===Node.ELEMENT_NODE&&Tf(b,c,d);if(b="template"===b.localName?(b.content||b.kb).childNodes:b.children||b.childNodes)for(var e=0;e<b.length;e++)Sf(a,b[e],c,d)}
+function Tf(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute(Uf);c?d&&(b=d.replace("style-scope","").replace(b,""),Of(a,b)):Of(a,(d?d+" ":"")+"style-scope "+b)}}function Vf(a,b,c){var d=W,e=a.__cssBuild;U||"shady"===e?b=Gf(b,c):(a=Pf(a),b=Wf(d,b,a.is,a.R,c)+"\n\n");return b.trim()}
+function Wf(a,b,c,d,e){var f=Xf(c,d);c=c?Yf+c:"";return Gf(b,function(b){b.c||(b.selector=b.o=Zf(a,b,a.b,c,f),b.c=!0);e&&e(b,c,f)})}function Xf(a,b){return b?"[is="+a+"]":a}function Zf(a,b,c,d,e){var f=b.selector.split($f);if(!Jf(b)){b=0;for(var h=f.length,g;b<h&&(g=f[b]);b++)f[b]=c.call(a,g,d,e)}return f.join($f)}function ag(a){return a.replace(bg,function(a,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
+Qf.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=bg.test(a);e&&(a=a.replace(bg,function(a,b,c){return":"+b+"("+c.replace(/\s/g,"")+")"}),a=ag(a));a=a.replace(cg,dg+" $1");a=a.replace(eg,function(a,e,g){d||(a=fg(g,e,b,c),d=d||a.stop,e=a.Oa,g=a.value);return e+g});e&&(a=ag(a));return a};
+function fg(a,b,c,d){var e=a.indexOf(gg);0<=a.indexOf(dg)?a=hg(a,d):0!==e&&(a=c?ig(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(jg,function(a,b){return" > "+b}))}a=a.replace(kg,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+c+'"]'});return{value:a,Oa:b,stop:f}}function ig(a,b){a=a.split(lg);a[0]+=b;return a.join(lg)}
+function hg(a,b){var c=a.match(mg);return(c=c&&c[2].trim()||"")?c[0].match(ng)?a.replace(mg,function(a,c,f){return b+f}):c.split(ng)[0]===b?c:og:a.replace(dg,b)}function pg(a){a.selector===qg&&(a.selector="html")}Qf.prototype.c=function(a){return a.match(gg)?this.b(a,rg):ig(a.trim(),rg)};q.Object.defineProperties(Qf.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
+var bg=/:(nth[-\w]+)\(([^)]+)\)/,rg=":not(.style-scope)",$f=",",eg=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,ng=/[[.:#*]/,dg=":host",qg=":root",gg="::slotted",cg=new RegExp("^("+gg+")"),mg=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,jg=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,kg=/(.*):dir\((?:(ltr|rtl))\)/,Yf=".",lg=":",Uf="class",og="should_not_match",W=new Qf;function sg(a,b,c,d){this.B=a||null;this.b=b||null;this.na=c||[];this.K=null;this.R=d||"";this.a=this.u=this.F=null}function X(a){return a?a.__styleInfo:null}function tg(a,b){return a.__styleInfo=b}sg.prototype.c=function(){return this.B};sg.prototype._getStyleRules=sg.prototype.c;function ug(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var vg=navigator.userAgent.match("Trident");function wg(){}function xg(a){var b={},c=[],d=0;Hf(a,function(a){yg(a);a.index=d++;a=a.m.cssText;for(var c;c=Bf.exec(a);){var e=c[1];":"!==c[2]&&(b[e]=!0)}},function(a){c.push(a)});a.b=c;a=[];for(var e in b)a.push(e);return a}
+function yg(a){if(!a.m){var b={},c={};zg(a,c)&&(b.A=c,a.rules=null);b.cssText=a.parsedCssText.replace(Ef,"").replace(zf,"");a.m=b}}function zg(a,b){var c=a.m;if(c){if(c.A)return Object.assign(b,c.A),!0}else{c=a.parsedCssText;for(var d;a=zf.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
+function Ag(a,b,c){b&&(b=0<=b.indexOf(";")?Bg(a,b,c):Nf(b,function(b,e,f,h){if(!e)return b+h;(e=Ag(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=Ag(a,c[f]||f,c)||f;return b+(e||"")+h}));return b&&b.trim()||""}
+function Bg(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){Af.lastIndex=0;if(f=Af.exec(e))e=Ag(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var h=e.substring(f);h=h.trim();h=Ag(a,h,c)||h;e=e.substring(0,f)+h}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
+function Cg(a,b){var c={},d=[];Hf(a,function(a){a.m||yg(a);var e=a.o||a.parsedSelector;b&&a.m.A&&e&&ug.call(b,e)&&(zg(a,c),a=a.index,e=parseInt(a/32,10),d[e]=(d[e]||0)|1<<a%32)},null,!0);return{A:c,key:d}}
+function Dg(a,b,c,d){b.m||yg(b);if(b.m.A){var e=Pf(a);a=e.is;e=e.R;e=a?Xf(a,e):"html";var f=b.parsedSelector,h=":host > *"===f||"html"===f,g=0===f.indexOf(":host")&&!h;"shady"===c&&(h=f===e+" > *."+e||-1!==f.indexOf("html"),g=!h&&0===f.indexOf(e));"shadow"===c&&(h=":host > *"===f||"html"===f,g=g&&!h);if(h||g)c=e,g&&(b.o||(b.o=Zf(W,b,W.b,a?Yf+a:"",e)),c=b.o||e),d({ab:c,Ua:g,tb:h})}}
+function Eg(a,b){var c={},d={},e=b&&b.__cssBuild;Hf(b,function(b){Dg(a,b,e,function(e){ug.call(a.b||a,e.ab)&&(e.Ua?zg(b,c):zg(b,d))})},null,!0);return{$a:d,Sa:c}}
+function Fg(a,b,c,d){var e=Pf(b),f=Xf(e.is,e.R),h=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])");e=X(b).B;var g=Gg(e,d);return Vf(b,e,function(b){var e="";b.m||yg(b);b.m.cssText&&(e=Bg(a,b.m.cssText,c));b.cssText=e;if(!U&&!Jf(b)&&b.cssText){var k=e=b.cssText;null==b.ua&&(b.ua=Cf.test(e));if(b.ua)if(null==b.Z){b.Z=[];for(var n in g)k=g[n],k=k(e),e!==k&&(e=k,b.Z.push(n))}else{for(n=0;n<b.Z.length;++n)k=g[b.Z[n]],e=k(e);k=e}b.cssText=k;b.o=b.o||b.selector;e="."+
+d;n=b.o.split(",");k=0;for(var t=n.length,C;k<t&&(C=n[k]);k++)n[k]=C.match(h)?C.replace(f,e):e+" "+C;b.selector=n.join(",")}})}function Gg(a,b){a=a.b;var c={};if(!U&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,h=b;f.i=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+h;f.o=f.o||f.selector;f.selector=f.o.replace(f.keyframesName,f.a);c[e.keyframesName]=Hg(e)}return c}function Hg(a){return function(b){return b.replace(a.i,a.a)}}
+function Ig(a,b){var c=Jg,d=If(a);a.textContent=Gf(d,function(a){var d=a.cssText=a.parsedCssText;a.m&&a.m.cssText&&(d=d.replace(tf,"").replace(uf,""),a.cssText=Bg(c,d,b))})}q.Object.defineProperties(wg.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var Jg=new wg;var Kg={},Lg=window.customElements;if(Lg&&!U){var Mg=Lg.define;Lg.define=function(a,b,c){var d=document.createComment(" Shady DOM styles for "+a+" "),e=document.head;e.insertBefore(d,(Mf?Mf.nextSibling:null)||e.firstChild);Mf=d;Kg[a]=d;Mg.call(Lg,a,b,c)}};function Ng(){this.cache={}}Ng.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({A:b,styleElement:c,u:d});100<e.length&&e.shift();this.cache[a]=e};Ng.prototype.fetch=function(a,b,c){if(a=this.cache[a])for(var d=a.length-1;0<=d;d--){var e=a[d],f;a:{for(f=0;f<c.length;f++){var h=c[f];if(e.A[h]!==b[h]){f=!1;break a}}f=!0}if(f)return e}};function Og(){}
+function Pg(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode();var h=e;var g=[];h.classList?g=Array.from(h.classList):h instanceof window.SVGElement&&h.hasAttribute("class")&&(g=h.getAttribute("class").split(/\s+/));h=g;g=h.indexOf(W.a);if((h=-1<g?h[g+1]:"")&&f===e.ownerDocument)Rf(e,h,!0);else if(f.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&
+(f=f.host))if(f=Pf(f).is,h===f)for(e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+W.a+")"),f=0;f<e.length;f++)Tf(e[f],h);else h&&Rf(e,h,!0),Rf(e,f)}}}}
+if(!U){var Qg=new MutationObserver(Pg),Rg=function(a){Qg.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)Rg(document);else{var Sg=function(){Rg(document.body)};window.HTMLImports?window.HTMLImports.whenReady(Sg):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){Sg();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",a)}else Sg()})}Og=function(){Pg(Qg.takeRecords())}}
+var Tg=Og;var Ug={};var Vg=Promise.resolve();function Wg(a){if(a=Ug[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Xg(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Yg(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a.ta||(a.ta=!0,Vg.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a.ta=!1}))};var Zg=null,$g=window.HTMLImports&&window.HTMLImports.whenReady||null,ah;function bh(a){requestAnimationFrame(function(){$g?$g(a):(Zg||(Zg=new Promise(function(a){ah=a}),"complete"===document.readyState?ah():document.addEventListener("readystatechange",function(){"complete"===document.readyState&&ah()})),Zg.then(function(){a&&a()}))})};var ch=new Ng;function Y(){var a=this;this.N={};this.c=document.documentElement;var b=new df;b.rules=[];this.i=tg(this.c,new sg(b));this.s=!1;this.b=this.a=null;bh(function(){dh(a)})}p=Y.prototype;p.Ca=function(){Tg()};p.Qa=function(a){return If(a)};p.cb=function(a){return Gf(a)};
+p.prepareTemplate=function(a,b,c){if(!a.Ma){a.Ma=!0;a.name=b;a.extends=c;Ug[b]=a;var d=(d=a.content.querySelector("style"))?d.getAttribute("css-build")||"":"";var e=[];for(var f=a.content.querySelectorAll("style"),h=0;h<f.length;h++){var g=f[h];if(g.hasAttribute("shady-unscoped")){if(!U){var k=g.textContent;Ff.has(k)||(Ff.add(k),k=g.cloneNode(!0),document.head.appendChild(k));g.parentNode.removeChild(g)}}else e.push(g.textContent),g.parentNode.removeChild(g)}e=e.join("").trim();c={is:b,extends:c,
+ib:d};U||Rf(a.content,b);dh(this);f=Af.test(e)||zf.test(e);Af.lastIndex=0;zf.lastIndex=0;e=ef(e);f&&V&&this.a&&this.a.transformRules(e,b);a._styleAst=e;a.a=d;d=[];V||(d=xg(a._styleAst));if(!d.length||V)e=U?a.content:null,b=Kg[b],f=Vf(c,a._styleAst),b=f.length?Kf(f,c.is,e,b):void 0,a.sa=b;a.La=d}};
+function eh(a){!a.b&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.b=window.ShadyCSS.CustomStyleInterface,a.b.transformCallback=function(b){a.za(b)},a.b.validateCallback=function(){requestAnimationFrame(function(){(a.b.enqueued||a.s)&&a.I()})})}function dh(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.ApplyShim&&(a.a=window.ShadyCSS.ApplyShim,a.a.invalidCallback=Wg);eh(a)}
+p.I=function(){dh(this);if(this.b){var a=this.b.processStyles();if(this.b.enqueued){if(V)for(var b=0;b<a.length;b++){var c=this.b.getStyleForCustomStyle(a[b]);if(c&&V&&this.a){var d=If(c);dh(this);this.a.transformRules(d);c.textContent=Gf(d)}}else for(fh(this,this.c,this.i),b=0;b<a.length;b++)(c=this.b.getStyleForCustomStyle(a[b]))&&Ig(c,this.i.F);this.b.enqueued=!1;this.s&&!V&&this.styleDocument()}}};
+p.styleElement=function(a,b){var c=Pf(a).is,d=X(a);if(!d){var e=Pf(a);d=e.is;e=e.R;var f=Kg[d];d=Ug[d];if(d){var h=d._styleAst;var g=d.La}d=tg(a,new sg(h,f,g,e))}a!==this.c&&(this.s=!0);b&&(d.K=d.K||{},Object.assign(d.K,b));if(V){if(d.K){b=d.K;for(var k in b)null===k?a.style.removeProperty(k):a.style.setProperty(k,b[k])}if(((k=Ug[c])||a===this.c)&&k&&k.sa&&!Xg(k)){if(Xg(k)||k._applyShimValidatingVersion!==k._applyShimNextVersion)dh(this),this.a&&this.a.transformRules(k._styleAst,c),k.sa.textContent=
+Vf(a,d.B),Yg(k);U&&(c=a.shadowRoot)&&(c.querySelector("style").textContent=Vf(a,d.B));d.B=k._styleAst}}else if(fh(this,a,d),d.na&&d.na.length){c=d;k=Pf(a).is;d=(b=ch.fetch(k,c.F,c.na))?b.styleElement:null;h=c.u;(g=b&&b.u)||(g=this.N[k]=(this.N[k]||0)+1,g=k+"-"+g);c.u=g;g=c.u;e=Jg;e=d?d.textContent||"":Fg(e,a,c.F,g);f=X(a);var l=f.a;l&&!U&&l!==d&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));U?f.a?(f.a.textContent=e,d=f.a):e&&(d=Kf(e,g,a.shadowRoot,f.b)):d?d.parentNode||
+(vg&&-1<e.indexOf("@media")&&(d.textContent=e),Lf(d,null,f.b)):e&&(d=Kf(e,g,null,f.b));d&&(d._useCount=d._useCount||0,f.a!=d&&d._useCount++,f.a=d);g=d;U||(d=c.u,f=e=a.getAttribute("class")||"",h&&(f=e.replace(new RegExp("\\s*x-scope\\s*"+h+"\\s*","g")," ")),f+=(f?" ":"")+"x-scope "+d,e!==f&&Of(a,f));b||ch.store(k,c.F,g,c.u)}};function gh(a,b){return(b=b.getRootNode().host)?X(b)?b:gh(a,b):a.c}
+function fh(a,b,c){a=gh(a,b);var d=X(a);a=Object.create(d.F||null);var e=Eg(b,c.B);b=Cg(d.B,b).A;Object.assign(a,e.Sa,b,e.$a);b=c.K;for(var f in b)if((e=b[f])||0===e)a[f]=e;f=Jg;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=Ag(f,a[d],a);c.F=a}p.styleDocument=function(a){this.styleSubtree(this.c,a)};
+p.styleSubtree=function(a,b){var c=a.shadowRoot;(c||a===this.c)&&this.styleElement(a,b);if(b=c&&(c.children||c.childNodes))for(a=0;a<b.length;a++)this.styleSubtree(b[a]);else if(a=a.children||a.childNodes)for(b=0;b<a.length;b++)this.styleSubtree(a[b])};p.za=function(a){var b=this,c=If(a);Hf(c,function(a){if(U)pg(a);else{var c=W;a.selector=a.parsedSelector;pg(a);a.selector=a.o=Zf(c,a,c.c,void 0,void 0)}V&&(dh(b),b.a&&b.a.transformRule(a))});V?a.textContent=Gf(c):this.i.B.rules.push(c)};
+p.getComputedStyleValue=function(a,b){var c;V||(c=(X(a)||X(gh(this,a))).F[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};p.bb=function(a,b){var c=a.getRootNode();b=b?b.split(/\s/):[];c=c.host&&c.host.localName;if(!c){var d=a.getAttribute("class");if(d){d=d.split(/\s/);for(var e=0;e<d.length;e++)if(d[e]===W.a){c=d[e+1];break}}}c&&b.push(W.a,c);V||(c=X(a))&&c.u&&b.push(Jg.a,c.u);Of(a,b.join(" "))};p.Na=function(a){return X(a)};Y.prototype.flush=Y.prototype.Ca;
+Y.prototype.prepareTemplate=Y.prototype.prepareTemplate;Y.prototype.styleElement=Y.prototype.styleElement;Y.prototype.styleDocument=Y.prototype.styleDocument;Y.prototype.styleSubtree=Y.prototype.styleSubtree;Y.prototype.getComputedStyleValue=Y.prototype.getComputedStyleValue;Y.prototype.setElementClass=Y.prototype.bb;Y.prototype._styleInfoForNode=Y.prototype.Na;Y.prototype.transformCustomStyleForDocument=Y.prototype.za;Y.prototype.getStyleAst=Y.prototype.Qa;Y.prototype.styleAstToString=Y.prototype.cb;
+Y.prototype.flushCustomStyles=Y.prototype.I;Object.defineProperties(Y.prototype,{nativeShadow:{get:function(){return U}},nativeCss:{get:function(){return V}}});var Z=new Y,hh,ih;window.ShadyCSS&&(hh=window.ShadyCSS.ApplyShim,ih=window.ShadyCSS.CustomStyleInterface);window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.I();Z.prepareTemplate(a,b,c)},styleSubtree:function(a,b){Z.I();Z.styleSubtree(a,b)},styleElement:function(a){Z.I();Z.styleElement(a)},styleDocument:function(a){Z.I();Z.styleDocument(a)},getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:V,nativeShadow:U};hh&&(window.ShadyCSS.ApplyShim=hh);
+ih&&(window.ShadyCSS.CustomStyleInterface=ih);var jh=window.customElements,kh=window.HTMLImports,lh=window.HTMLTemplateElement;window.WebComponents=window.WebComponents||{};if(jh&&jh.polyfillWrapFlushCallback){var mh,nh=function(){if(mh){lh.M&&lh.M(window.document);var a=mh;mh=null;a();return!0}},oh=kh.whenReady;jh.polyfillWrapFlushCallback(function(a){mh=a;oh(nh)});kh.whenReady=function(a){oh(function(){nh()?kh.whenReady(a):a()})}}
+kh.whenReady(function(){requestAnimationFrame(function(){window.WebComponents.ready=!0;document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})});var ph=document.createElement("style");ph.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var qh=document.querySelector("head");qh.insertBefore(ph,qh.firstChild);}).call(this);
+
+//# sourceMappingURL=webcomponents-lite.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js.map
new file mode 100644
index 00000000000..6bdb99712f6
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-lite.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/@webcomponents/webcomponents-platform/webcomponents-platform.js"," [synthetic:util/global] "," [synthetic:util/defineproperty] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterator] ","node_modules/@webcomponents/template/template.js","node_modules/es6-promise/lib/es6-promise/utils.js","node_modules/es6-promise/lib/es6-promise/asap.js","node_modules/es6-promise/lib/es6-promise/then.js","node_modules/es6-promise/lib/es6-promise/-internal.js","node_modules/es6-promise/lib/es6-promise/promise/resolve.js","node_modules/es6-promise/lib/es6-promise/enumerator.js","node_modules/es6-promise/lib/es6-promise/promise.js","node_modules/es6-promise/lib/es6-promise/promise/all.js","node_modules/es6-promise/lib/es6-promise/promise/race.js","node_modules/es6-promise/lib/es6-promise/promise/reject.js","src/promise.js","node_modules/@webcomponents/html-imports/src/html-imports.js","src/pre-polyfill.js","node_modules/@webcomponents/shadydom/src/shady-data.js","node_modules/@webcomponents/shadydom/src/utils.js","node_modules/@webcomponents/shadydom/src/flush.js","node_modules/@webcomponents/shadydom/src/observe-changes.js","node_modules/@webcomponents/shadydom/src/native-methods.js","node_modules/@webcomponents/shadydom/src/innerHTML.js","node_modules/@webcomponents/shadydom/src/native-tree-walker.js","node_modules/@webcomponents/shadydom/src/native-tree-accessors.js","node_modules/@webcomponents/shadydom/src/native-tree.js","node_modules/@webcomponents/shadydom/src/patch-accessors.js","node_modules/@webcomponents/shadydom/src/attach-shadow.js","node_modules/@webcomponents/shadydom/src/patch-builtins.js","node_modules/@webcomponents/shadydom/src/logical-tree.js","node_modules/@webcomponents/shadydom/src/logical-mutation.js"," [synthetic:es6/util/arrayfromiterable] ","node_modules/@webcomponents/shadydom/src/patch-events.js","node_modules/@webcomponents/shadydom/src/array-splice.js","node_modules/@webcomponents/shadydom/src/shadydom.js","node_modules/@webcomponents/custom-elements/src/Utilities.js","node_modules/@webcomponents/custom-elements/src/CustomElementInternals.js","node_modules/@webcomponents/custom-elements/src/CustomElementState.js","node_modules/@webcomponents/custom-elements/src/DocumentConstructionObserver.js","node_modules/@webcomponents/custom-elements/src/CustomElementRegistry.js","node_modules/@webcomponents/custom-elements/src/Deferred.js","node_modules/@webcomponents/custom-elements/src/Patch/Native.js","node_modules/@webcomponents/custom-elements/src/AlreadyConstructedMarker.js","node_modules/@webcomponents/custom-elements/src/Patch/HTMLElement.js","node_modules/@webcomponents/custom-elements/src/custom-elements.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ParentNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Document.js","node_modules/@webcomponents/custom-elements/src/Patch/Node.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ChildNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Element.js","node_modules/@webcomponents/custom-elements/src/Patch/DocumentFragment.js","node_modules/@webcomponents/shadycss/src/css-parse.js","node_modules/@webcomponents/shadycss/src/style-settings.js","node_modules/@webcomponents/shadycss/src/common-regex.js","node_modules/@webcomponents/shadycss/src/unscoped-style-handler.js","node_modules/@webcomponents/shadycss/src/style-util.js","node_modules/@webcomponents/shadycss/src/style-transformer.js","node_modules/@webcomponents/shadycss/src/style-info.js","node_modules/@webcomponents/shadycss/src/style-properties.js","node_modules/@webcomponents/shadycss/src/style-placeholder.js","node_modules/@webcomponents/shadycss/src/style-cache.js","node_modules/@webcomponents/shadycss/src/document-watcher.js","node_modules/@webcomponents/shadycss/src/template-map.js","node_modules/@webcomponents/shadycss/src/apply-shim-utils.js","node_modules/@webcomponents/shadycss/src/document-wait.js","node_modules/@webcomponents/shadycss/src/scoping-shim.js","node_modules/@webcomponents/shadycss/src/common-utils.js","node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js","src/post-polyfill.js","src/unresolved.js"],"names":["$jscomp.global","$jscomp.defineProperty","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIterator","$jscomp.initSymbolIterator","$jscomp.iteratorPrototype","e","document","createEvent","initEvent","preventDefault","defaultPrevented","workingDefaultPrevented","origPreventDefault","Event","prototype","Event.prototype.preventDefault","cancelable","call","Object","defineProperty","get","configurable","isIE","test","navigator","userAgent","window","CustomEvent","window.CustomEvent","inType","params","initCustomEvent","bubbles","detail","origEvent","window.Event","i","MouseEvent","origMouseEvent","window.MouseEvent","initMouseEvent","view","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","Array","from","Array.from","object","slice","assign","Object.assign","target","sources","args","arguments","s","length","n$","getOwnPropertyNames","source","p","WebComponents","PolyfilledHTMLTemplateElement","QSA","node","selector","childNodes","nodeType","Node","DOCUMENT_NODE","docQuerySelectorAll","DOCUMENT_FRAGMENT_NODE","fragQuerySelectorAll","elementQuerySelectorAll","needsTemplate","HTMLTemplateElement","brokenDocFragment","createDocumentFragment","cloneNode","DocumentFragment","needsDocFrag","insertBefore","newNode","refNode","child","firstChild","origInsertBefore","origCloneNode","Node.prototype.cloneNode","deep","newDom","__proto__","querySelectorAll","HTMLElement","querySelector","defineProperties","origAppendChild","appendChild","Node.prototype.appendChild","origRemoveChild","removeChild","origReplaceChild","replaceChild","Node.prototype.replaceChild","newChild","oldChild","Document","Document.prototype.createDocumentFragment","frag","createElement","origImportNode","importNode","Document.prototype.importNode","impNode","capturedCloneNode","capturedCreateElement","capturedImportNode","capturedRemoveChild","capturedAppendChild","capturedReplaceChild","Element","needsCloning","t","t2","content","clone","contentDoc","implementation","createHTMLDocument","canDecorate","templateStyle","textContent","head","firstElementChild","create","canProtoPatch","hasOwnProperty","decorate","PolyfilledHTMLTemplateElement.decorate","template","namespaceURI","documentElement","template.cloneNode","_cloneNode","defineInnerHTML","defineOuterHTML","err","bootstrap","obj","getInnerHTML","set","text","body","innerHTML","parentNode","docFrag","ownerDocument","Error","PolyfilledHTMLTemplateElement.bootstrap","doc","templates","TEMPLATE_TAG","l","addEventListener","Document.prototype.createElement","el","apply","localName","escapeAttrRegExp","escapeDataRegExp","escapeReplace","c","makeSet","arr","voidElements","plaintextParents","callback","c$","ELEMENT_NODE","tagName","attrs","attributes","attr","name","value","replace","TEXT_NODE","data","COMMENT_NODE","console","error","PolyfilledHTMLTemplateElement._cloneNode","fixClonedDom","s$","t$","dom","element","scripts","scriptSelector","ns","ai","a","setAttribute","isArray","_isArray","x","toString","len","vertxNext","browserWindow","undefined","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useVertxTimer","flush","useSetTimeout","useMutationObserver","iterations","observer","createTextNode","observe","characterData","useMessageChannel","channel","port1","onmessage","port2","postMessage","globalSetTimeout","setTimeout","queue","arg","scheduleFlush","self","process","nextTick","vertx","require","runOnLoop","runOnContext","asap","then","onFulfillment","onRejection","parent","constructor","noop","PROMISE_ID","makePromise","_state","module$node_modules$es6_promise$lib$es6_promise$asap.asap","invokeCallback","_result","subscribe","resolve","Constructor","promise","Math","random","substring","GET_THEN_ERROR","ErrorObject","getThen","tryThen","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","reject","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","TypeError","type","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","TRY_CATCH_ERROR","hasCallback","failed","succeeded","initializePromise","resolver","resolvePromise","rejectPromise","id","Enumerator","input","_instanceConstructor","_remaining","_enumerate","_eachEntry","Enumerator.prototype._eachEntry","entry","_settledAt","Promise","_willSettleAt","Enumerator.prototype._settledAt","state","Enumerator.prototype._willSettleAt","enumerator","all","entries","race","_","catch","scope","newCustomEvent","event","importForElement","useNative","closest","importSelector","isImportLink","whenImportsReady","imports","rootImportSelector","pending","forEach","imp","whenElementLoaded","whenDocumentReady","stateChanged","readyState","removeEventListener","whenReady","src","onLoadingDone","rel","Importer","documents","inflight","dynamicImportsMO","m","handleMutations","childList","subtree","loadImports","replaceScripts","fragment","scriptsSelector","script","emptyNodeList","list","inverseOrder","increment","link","currentScript","CSS_URL_REGEXP","CSS_IMPORT_REGEXP","STYLESHEET_REGEXP","Path","fixUrls","base","href","resolveUrl","getAttribute","r","replaceUrls","linkUrl","regexp","pre","url","post","urlPath","__workingURL","u","URL","pathname","__tempDoc","__base","__anchor","Xhr","async","load","success","fail","match","pieces","split","resource","header","indexOf","atob","decodeURIComponent","request","XMLHttpRequest","open","onload","request.onload","redirectedUrl","responseURL","getResponseHeader","location","origin","protocol","host","response","responseText","status","send","links","loadImport","fireEventIfNeeded","makeDocument","processImportsIfLoadingDone","p1","p2","baseEl","removeAttribute","importDependenciesSelector","inlineScriptIndex","n","importDependencyAttr","encodeURIComponent","num","disconnect","flatten","scriptsOk","stylesOk","fireEvents","waitForStyles","runScripts","cloneScript","pendingScriptsSelector","pendingStylesSelector","needsMove","disabledLinkSelector","placeholder","nextSibling","newSibling","import","dispatchEvent","eventType","mutations","addedNodes","elem","importer","imps","native_baseURI","getOwnPropertyDescriptor","klass","ownerDoc","enumerable","HTMLLinkElement","HTMLImports","flagMatcher","flags","search","option","parts","f","forceShady","forceCE","ShadyData","publicRoot","root","dirty","flattenedNodes","_prevAssignedSlot","_previouslyAssignedNodes","assignedSlot","assignedNodes","previousSibling","lastChild","ownerShadyRoot","__insideAccessors","__outsideAccessors","toJSON","ensureShadyDataForNode","__shady","shadyDataForNode","settings","hasNativeShadowDOM","attachShadow","getRootNode","desc","hasDescriptors","inUse","IS_IE","IS_EDGE","useNativeAccessors","isTrackingLogicalChildNodes","nodeData","isShadyRoot","_localName","ownerShadyRootForNode","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","extend","pd","extendAll","mixin","twiddle","shift","microtask","push","hasDocumentContains","contains","container","flushList","scheduled","enqueue","didFlush","AsyncObserver","_scheduled","removedNodes","callbacks","Set","schedule","takeRecords","cb","observeChildren","sd","add","_callback","_observer","_node","unobserveChildren","handle","delete","size","filterMutations","targetRootNode","map","mutation","mutationInScope","nodes","filter","windowAddEventListener","Window","windowRemoveEventListener","getElementById","elementQuerySelector","fragmentQuerySelector","documentQuerySelector","fragmentQuerySelectorAll","documentQuerySelectorAll","nodeWalker","createTreeWalker","NodeFilter","SHOW_ALL","elementWalker","SHOW_ELEMENT","currentNode","parentElement","lastElementChild","previousElementSibling","nextElementSibling","children","textWalker","SHOW_TEXT","nextNode","nodeValue","nativeProtos","findNodeDescriptor","proto","nodeAccessors","fragmentAccessors","documentAccessors","accessors","nativeTreeAccessors","nativeTreeWalker","clearNode","inertDoc","nativeIsConnectedAccessors","nativeIsConnected","nativeActiveElementDescriptor","OutsideAccessors","ClassNameAccessor","className","InsideAccessors","item","childNodes.item","index","childElementCount","tc","cn","join","nativeAccessors","children.item","containerName","htmlContainer","ShadowRootAccessor","shadowRoot","ActiveElementAccessor","activeElement","active","nativeContains","activeRoot","patchAccessorGroup","descriptors","force","objDesc","warn","patchAccessors","patchShadowRootAccessors","ShadyRoot","nodeName","prop","patchOutsideElementAccessors","patchInsideElementAccessors","linkNode","ref_node","containerData","ref_nodeData","psd","nsd","recordChildNodes","refData","ownerRoot","slotsAdded","slots","_ensureSlotData","_pendingSlots","_slotList","_slotMap","$jscomp.arrayFromIterator","$jscomp.makeIterator","_asyncRender","resetTo","parentData","hasShadowRootWithSlot","preventNativeInsert","firstComposedNode","nativeMethods","scheduleObserver","preventNativeRemove","removeOwnerShadyRoot","changeSlotContent","_validateSlots","slot","splice","didRemove","removingInsertionPoint","composed","flattened","_hasInsertionPoint","distributeAttributeChange","oldName","__slotName","_nameForSlot","_sortSlots","addedNode","removedNode","query","matcher","halter","queryElements","elements","result","scopingShim","nc","eventWrappersName","Date","now","alwaysComposed","pathComposer","startNode","composedPath","current","startRoot","retarget","path","refNodePath","ancestor","lastRoot","rootIdx","eventMixin","isTrusted","__composed","__composedPath","currentTarget","__relatedTarget","__relatedTargetComposedPath","stopPropagation","__propagationStopped","stopImmediatePropagation","__immediatePropagationStopped","mixinComposedFlag","Base","klazz","options","nonBubblingEventsToRetarget","hasRetargeted","fireHandlers","phase","hs","__handlers","fn","retargetNonBubblingEvent","AT_TARGET","lastFiredRoot","findListener","wrappers","capture","once","passive","savedType","savedListener","savedCapture","savedOnce","savedPassive","savedNode","fnOrObj","optionsOrCapture","handlerType","handleEvent","__shadyTarget","wrapperFn","patchEvent","lastCurrentTargetDesc","eventPhase","BUBBLING_PHASE","CAPTURING_PHASE","ret","ael","idx","activateFocusEventOverrides","ev","getPrototypeOf","patchProto","__sourceProto","PatchedEvent","PatchedCustomEvent","PatchedMouseEvent","newSplice","addedCount","removed","calcSplices","currentEnd","old","oldEnd","currentStart","oldStart","prefixCount","suffixCount","minLength","min","currentValue","previousValue","index1","index2","count","equals","rowCount","columnCount","distances","j","north","west","edits","EDIT_ADD","EDIT_DELETE","northWest","EDIT_LEAVE","EDIT_UPDATE","reverse","splices","oldIndex","ShadyRootConstructionToken","ancestorList","ancestors","unshift","token","SHADYROOT_NAME","_mode","mode","hostData","MODE_CLOSED","rootData","_renderPending","_render","renderRoot","_distribute","slotData","_distributeNodeToSlot","slotParentRoot","slotParentData","_addAssignedToFlattenedNodes","prevAssignedNodes","_fireSlotChange","_compose","composeList","targetNode","distributedNode","d","next","forcedSlot","oldSlot","CATCHALL_NAME","assigned","nestedAssigned","slotNamesToSort","_mapSlots","sort","b","listA","listB","nA","nB","getAssignedSlot","windowMixin","bind","nodeMixin","IsConnectedAccessor","isConnected","textMixin","fragmentMixin","o","slotMixin","elementMixin","documentMixin","nativeBlur","blur","htmlElementMixin","shadowActive","shadowRootMixin","patchBuiltin","ShadyDOM","patch","nativeHTMLElement","Text","HTMLSlotElement","ShadowRoot","reservedTagList","isValidCustomElementName","reserved","has","validForm","nativeValue","__CE_isImportDocument","nextSiblingOrAncestorSibling","start","walkDeepDescendantElements","visitedImports","__CE_shadowRoot","setPropertyUnchecked","destination","CustomElementInternals","_localNameToDefinition","Map","_constructorToDefinition","_patches","_hasPatches","setDefinition","definition","addPatch","listener","patchTree","__CE_patched","connectTree","custom","__CE_state","connectedCallback","upgradeElement","disconnectTree","disconnectedCallback","patchAndUpgradeTree","upgrade","gatherElements","__CE_hasRegistry","__CE_documentLoadHandled","clonedVisitedImports","defaultView","localNameToDefinition","constructionStack","pop","__CE_definition","attributeChangedCallback","observedAttributes","oldValue","newValue","namespace","DocumentConstructionObserver","internals","_internals","_document","_handleMutations","Deferred","_resolve","_value","_promise","CustomElementRegistry","_elementDefinitionIsRunning","_whenDefinedDeferred","_flushCallback","this._flushCallback","_flushPending","_pendingDefinitions","_documentConstructionObserver","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry.prototype","?.prototype","define","Function","SyntaxError","getCallback","callbackValue","adoptedCallback","_flush","pendingDefinitions","elementsWithStableDefinitions","elementsWithPendingDefinitions","pendingElements","pendingUpgradableElements","deferred","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry_prototype$whenDefined","whenDefined","prior","some","polyfillWrapFlushCallback","outer","inner","Document_createElement","Document_createElementNS","createElementNS","Document_importNode","Document_prepend","Document_append","DocumentFragment_prepend","DocumentFragment_append","Node_cloneNode","Node_appendChild","Node_insertBefore","Node_removeChild","Node_replaceChild","Node_textContent","Element_attachShadow","Element_innerHTML","Element_getAttribute","Element_setAttribute","Element_removeAttribute","Element_getAttributeNS","getAttributeNS","Element_setAttributeNS","setAttributeNS","Element_removeAttributeNS","removeAttributeNS","Element_insertAdjacentElement","Element_insertAdjacentHTML","Element_prepend","Element_append","Element_before","Element_after","Element_replaceWith","Element_remove","HTMLElement_innerHTML","HTMLElement_insertAdjacentElement","HTMLElement_insertAdjacentHTML","$jscompDefaultExport","AlreadyConstructedMarker","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElement.call","setPrototypeOf","lastIndex","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement","builtIn","appendPrependPatch","builtInMethod","connectedElements","prepend","append","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_importNode.call","NS_HTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElementNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_append","patch_textContent","baseDescriptor","assignedValue","childNodesLength","insertedNodes","nativeResult","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_insertBefore.call","nodeWasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_appendChild.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_cloneNode.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_removeChild.call","nodeToInsert","nodeToRemove","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_replaceChild.call","nodeToInsertWasConnected","thisIsConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent.get","beforeAfterPatch","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_before","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_after","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_replaceWith","wasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_remove","patch_innerHTML","htmlString","removedElements","patch_insertAdjacentElement","baseMethod","position","insertedElement","patch_insertAdjacentHTML","upgradeNodesInRange","end","toLowerCase","marker","String","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow","init","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML.get","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML.get","isTemplate","rawElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_append","priorCustomElements","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_append","customElements","StyleNode","parse","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.comments","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.port","parseCss","OPEN_BRACE","previous","CLOSE_BRACE","trim","ss","_expandUnicodeEscapes","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.multipleSpaces","lastIndexOf","AT_START","MEDIA_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MEDIA_RULE","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.keyframesRule","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.KEYFRAMES_RULE","VAR_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MIXIN_RULE","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.STYLE_RULE","r$","code","repeat","stringify","preserveProperties","cssText","rules","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.customProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinApply","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.varApply","STYLE_RULE","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","port","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","nativeShadow","nativeCssVariables_","calcCssVariables","CSS","supports","ShadyCSS","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","VAR_CONSUMED","ANIMATION_MATCH","MEDIA_MATCH","BRACKETED","styleTextSet","toCssText","forEachRule","rulesForStyle","style","isKeyframesSelector","rule","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","matchMedia","applyCss","moniker","contextNode","applyStyle","lastHeadApplyNode","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","processVariableAndFallback","str","level","prefix","suffix","comma","fallback","setElementClassRaw","getIsExtends","typeExtension","is","extends","StyleTransformer","shouldRemoveScope","_transformDom","_content","classList","remove","SCOPE_NAME","CLASS","elementStyles","styleRules","cssBuildType","css","ext","hostScope","_calcHostScope","CSS_CLASS_PREFIX","isScoped","transformedSelector","_transformRuleCss","_transformComplexSelector","transformer","p$","COMPLEX_SELECTOR_SEP","_twiddleNthPlus","NTH","inside","stop","isNth","SLOTTED_START","HOST","SIMPLE_SELECTOR_SEP","info","_transformCompoundSelector","combinator","slottedIndex","SLOTTED","_transformHostSelector","_transformSimpleSelector","slotted","SLOTTED_PAREN","paren","DIR_PAREN","before","dir","PSEUDO_PREFIX","HOST_PAREN","SIMPLE_SELECTOR_PREFIX","typeSelector","SELECTOR_NO_MATCH","normalizeRootSelector","ROOT","_transformDocumentSelector","SCOPE_DOC_SELECTOR","$jscomp.global.Object.defineProperties","RegExp","StyleInfo","ast","ownStylePropertyNames","overrideStyleProperties","customStyle","scopeSelector","styleProperties","styleInfo","_getStyleRules","method","StyleProperties","decorateStyles","props","keyframes","ruleIndex","decorateRule","propertyInfo","exec","onKeyframesRule","_keyframes","names","properties","collectProperties","hasProperties","any","valueForProperty","property","valueForProperties","propertyValue","colon","pp","propertyDataFromStyles","selectorToMatch","parseInt","key","whenHostOrRootRule","cssBuild","parsedSelector","isRoot","isHost","hostAndRootPropertiesForScope","hostProps","rootProps","_element","transformStyles","hostSelector","hostRx","HOST_PREFIX","rxHostSelector","HOST_SUFFIX","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.get","keyframeTransforms","_elementKeyframeTransforms","output","hasAnimations","keyframeNamesToTransform","keyframe","transform","keyframesRules","keyframesNameRx","transformedKeyframesName","scopeId","_keyframesRuleTransformer","applyCustomStyle","XSCOPE_NAME","placeholderMap","ce","origDefine","wrappedDefine","clazz","placeHolder","createComment","after","StyleCache","cache","store","tagname","styleElement","typeMax","fetch","ownPropertyNames","pn","handler","mxns","mxn","classes","hasAttribute","currentScope","newScope","unscoped","delayedStart","requestAnimationFrame","module$node_modules$$webcomponents$shadycss$src$document_watcher.flush","templateMap","invalidate","elementName","templateIsValid","startValidatingTemplate","_validating","readyPromise","resolveFn","documentWait","styleCache","ScopingShim","_scopeCounter","_documentOwner","_documentOwnerStyleInfo","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.set","_elementsHaveApplied","_customStyleInterface","_applyShim","_ensure","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim.prototype","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim_prototype$flush","getStyleAst","styleAstToString","prepareTemplate","_prepared","styleTextParts","styles","scopingAttribute","newStyle","__cssBuild","_cssBuild","shadowroot","_style","_ownPropertyNames","_ensureCustomStyleInterface","CustomStyleInterface","transformCustomStyleForDocument","flushCustomStyles","_ensureApplyShim","ApplyShim","customStyles","_revalidateCustomStyleApplyShim","_updateProperties","_applyCustomStyles","styleDocument","overrideProps","_isRootOwner","removeProperty","setProperty","cachedStyle","cacheEntry","oldScopeSelector","cachedScopeSelector","applyElementStyle","v","_styleOwnerForNode","owner","ownerStyleInfo","hostAndRootProps","propertiesMatchingHost","propertyData","overrides","reify","styleSubtree","shadowChildren","documentRule","_transformRule","getComputedStyleValue","getComputedStyle","getPropertyValue","setElementClass","classString","scopeName","classAttr","k$","_styleInfoForNode","elementExtends","Template","flushCallback","runAndClearCallback","origWhenReady","ready"],"mappings":"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","file":"webcomponents-lite.js","sourcesContent":["/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n 'use strict';\n\n // defaultPrevented is broken in IE.\n // https://connect.microsoft.com/IE/feedback/details/790389/event-defaultprevented-returns-false-after-preventdefault-was-called\n var workingDefaultPrevented = (function() {\n var e = document.createEvent('Event');\n e.initEvent('foo', true, true);\n e.preventDefault();\n return e.defaultPrevented;\n })();\n\n if (!workingDefaultPrevented) {\n var origPreventDefault = Event.prototype.preventDefault;\n Event.prototype.preventDefault = function() {\n if (!this.cancelable) {\n return;\n }\n\n origPreventDefault.call(this);\n\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n },\n configurable: true\n });\n };\n }\n\n var isIE = /Trident/.test(navigator.userAgent);\n\n // CustomEvent constructor shim\n if (!window.CustomEvent || isIE && (typeof window.CustomEvent !== 'function')) {\n window.CustomEvent = function(inType, params) {\n params = params || {};\n var e = document.createEvent('CustomEvent');\n e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return e;\n };\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n // Event constructor shim\n if (!window.Event || isIE && (typeof window.Event !== 'function')) {\n var origEvent = window.Event;\n window.Event = function(inType, params) {\n params = params || {};\n var e = document.createEvent('Event');\n e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));\n return e;\n };\n if (origEvent) {\n for (var i in origEvent) {\n window.Event[i] = origEvent[i];\n }\n }\n window.Event.prototype = origEvent.prototype;\n }\n\n if (!window.MouseEvent || isIE && (typeof window.MouseEvent !== 'function')) {\n var origMouseEvent = window.MouseEvent;\n window.MouseEvent = function(inType, params) {\n params = params || {};\n var e = document.createEvent('MouseEvent');\n e.initMouseEvent(inType,\n Boolean(params.bubbles), Boolean(params.cancelable),\n params.view || window, params.detail,\n params.screenX, params.screenY, params.clientX, params.clientY,\n params.ctrlKey, params.altKey, params.shiftKey, params.metaKey,\n params.button, params.relatedTarget);\n return e;\n };\n if (origMouseEvent) {\n for (var i in origMouseEvent) {\n window.MouseEvent[i] = origMouseEvent[i];\n }\n }\n window.MouseEvent.prototype = origMouseEvent.prototype;\n }\n\n // ES6 stuff\n if (!Array.from) {\n Array.from = function (object) {\n return [].slice.call(object);\n };\n }\n\n if (!Object.assign) {\n var assign = function(target, source) {\n var n$ = Object.getOwnPropertyNames(source);\n for (var i=0, p; i < n$.length; i++) {\n p = n$[i];\n target[p] = source[p];\n }\n }\n\n Object.assign = function(target, sources) {\n var args = [].slice.call(arguments, 1);\n for (var i=0, s; i < args.length; i++) {\n s = args[i];\n if (s) {\n assign(target, s);\n }\n }\n return target;\n }\n }\n\n})(window.WebComponents);\n",null,null,null,null,null,"/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n// minimal template polyfill\n(function() {\n 'use strict';\n\n var needsTemplate = (typeof HTMLTemplateElement === 'undefined');\n var brokenDocFragment = !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment);\n var needsDocFrag = false;\n\n // NOTE: Replace DocumentFragment to work around IE11 bug that\n // causes children of a document fragment modified while\n // there is a mutation observer to not have a parentNode, or\n // have a broken parentNode (!?!)\n if (/Trident/.test(navigator.userAgent)) {\n (function() {\n\n needsDocFrag = true;\n\n var origCloneNode = Node.prototype.cloneNode;\n Node.prototype.cloneNode = function cloneNode(deep) {\n var newDom = origCloneNode.call(this, deep);\n if (this instanceof DocumentFragment) {\n newDom.__proto__ = DocumentFragment.prototype;\n }\n return newDom;\n };\n\n // IE's DocumentFragment querySelector code doesn't work when\n // called on an element instance\n DocumentFragment.prototype.querySelectorAll = HTMLElement.prototype.querySelectorAll;\n DocumentFragment.prototype.querySelector = HTMLElement.prototype.querySelector;\n\n Object.defineProperties(DocumentFragment.prototype, {\n 'nodeType': {\n get: function () {\n return Node.DOCUMENT_FRAGMENT_NODE;\n },\n configurable: true\n },\n\n 'localName': {\n get: function () {\n return undefined;\n },\n configurable: true\n },\n\n 'nodeName': {\n get: function () {\n return '#document-fragment';\n },\n configurable: true\n }\n });\n\n var origInsertBefore = Node.prototype.insertBefore;\n function insertBefore(newNode, refNode) {\n if (newNode instanceof DocumentFragment) {\n var child;\n while ((child = newNode.firstChild)) {\n origInsertBefore.call(this, child, refNode);\n }\n } else {\n origInsertBefore.call(this, newNode, refNode);\n }\n return newNode;\n }\n Node.prototype.insertBefore = insertBefore;\n\n var origAppendChild = Node.prototype.appendChild;\n Node.prototype.appendChild = function appendChild(child) {\n if (child instanceof DocumentFragment) {\n insertBefore.call(this, child, null);\n } else {\n origAppendChild.call(this, child);\n }\n return child;\n };\n\n var origRemoveChild = Node.prototype.removeChild;\n var origReplaceChild = Node.prototype.replaceChild;\n Node.prototype.replaceChild = function replaceChild(newChild, oldChild) {\n if (newChild instanceof DocumentFragment) {\n insertBefore.call(this, newChild, oldChild);\n origRemoveChild.call(this, oldChild);\n } else {\n origReplaceChild.call(this, newChild, oldChild);\n }\n return oldChild;\n };\n\n Document.prototype.createDocumentFragment = function createDocumentFragment() {\n var frag = this.createElement('df');\n frag.__proto__ = DocumentFragment.prototype;\n return frag;\n };\n\n var origImportNode = Document.prototype.importNode;\n Document.prototype.importNode = function importNode(impNode, deep) {\n deep = deep || false;\n var newNode = origImportNode.call(this, impNode, deep);\n if (impNode instanceof DocumentFragment) {\n newNode.__proto__ = DocumentFragment.prototype;\n }\n return newNode;\n };\n })();\n }\n\n // NOTE: we rely on this cloneNode not causing element upgrade.\n // This means this polyfill must load before the CE polyfill and\n // this would need to be re-worked if a browser supports native CE\n // but not <template>.\n var capturedCloneNode = Node.prototype.cloneNode;\n var capturedCreateElement = Document.prototype.createElement;\n var capturedImportNode = Document.prototype.importNode;\n var capturedRemoveChild = Node.prototype.removeChild;\n var capturedAppendChild = Node.prototype.appendChild;\n var capturedReplaceChild = Node.prototype.replaceChild;\n\n var elementQuerySelectorAll = Element.prototype.querySelectorAll;\n var docQuerySelectorAll = Document.prototype.querySelectorAll;\n var fragQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\n\n var scriptSelector = 'script:not([type]),script[type=\"application/javascript\"],script[type=\"text/javascript\"]';\n\n function QSA(node, selector) {\n // IE 11 throws a SyntaxError with `scriptSelector` if the node has no children due to the `:not([type])` syntax\n if (!node.childNodes.length) {\n return [];\n }\n switch (node.nodeType) {\n case Node.DOCUMENT_NODE:\n return docQuerySelectorAll.call(node, selector);\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragQuerySelectorAll.call(node, selector);\n default:\n return elementQuerySelectorAll.call(node, selector);\n }\n }\n\n // returns true if nested templates cannot be cloned (they cannot be on\n // some impl's like Safari 8 and Edge)\n // OR if cloning a document fragment does not result in a document fragment\n var needsCloning = (function() {\n if (!needsTemplate) {\n var t = document.createElement('template');\n var t2 = document.createElement('template');\n t2.content.appendChild(document.createElement('div'));\n t.content.appendChild(t2);\n var clone = t.cloneNode(true);\n return (clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0\n || brokenDocFragment);\n }\n })();\n\n var TEMPLATE_TAG = 'template';\n var PolyfilledHTMLTemplateElement = function() {};\n\n if (needsTemplate) {\n\n var contentDoc = document.implementation.createHTMLDocument('template');\n var canDecorate = true;\n\n var templateStyle = document.createElement('style');\n templateStyle.textContent = TEMPLATE_TAG + '{display:none;}';\n\n var head = document.head;\n head.insertBefore(templateStyle, head.firstElementChild);\n\n /**\n Provides a minimal shim for the <template> element.\n */\n PolyfilledHTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);\n\n\n // if elements do not have `innerHTML` on instances, then\n // templates can be patched by swizzling their prototypes.\n var canProtoPatch =\n !(document.createElement('div').hasOwnProperty('innerHTML'));\n\n /**\n The `decorate` method moves element children to the template's `content`.\n NOTE: there is no support for dynamically adding elements to templates.\n */\n PolyfilledHTMLTemplateElement.decorate = function(template) {\n // if the template is decorated or not in HTML namespace, return fast\n if (template.content || \n template.namespaceURI !== document.documentElement.namespaceURI) {\n return;\n }\n template.content = contentDoc.createDocumentFragment();\n var child;\n while ((child = template.firstChild)) {\n capturedAppendChild.call(template.content, child);\n }\n // NOTE: prefer prototype patching for performance and\n // because on some browsers (IE11), re-defining `innerHTML`\n // can result in intermittent errors.\n if (canProtoPatch) {\n template.__proto__ = PolyfilledHTMLTemplateElement.prototype;\n } else {\n template.cloneNode = function(deep) {\n return PolyfilledHTMLTemplateElement._cloneNode(this, deep);\n };\n // add innerHTML to template, if possible\n // Note: this throws on Safari 7\n if (canDecorate) {\n try {\n defineInnerHTML(template);\n defineOuterHTML(template);\n } catch (err) {\n canDecorate = false;\n }\n }\n }\n // bootstrap recursively\n PolyfilledHTMLTemplateElement.bootstrap(template.content);\n };\n\n var defineInnerHTML = function defineInnerHTML(obj) {\n Object.defineProperty(obj, 'innerHTML', {\n get: function() {\n return getInnerHTML(this);\n },\n set: function(text) {\n contentDoc.body.innerHTML = text;\n PolyfilledHTMLTemplateElement.bootstrap(contentDoc);\n while (this.content.firstChild) {\n capturedRemoveChild.call(this.content, this.content.firstChild);\n }\n while (contentDoc.body.firstChild) {\n capturedAppendChild.call(this.content, contentDoc.body.firstChild);\n }\n },\n configurable: true\n });\n };\n\n var defineOuterHTML = function defineOuterHTML(obj) {\n Object.defineProperty(obj, 'outerHTML', {\n get: function() {\n return '<' + TEMPLATE_TAG + '>' + this.innerHTML + '</' + TEMPLATE_TAG + '>';\n },\n set: function(innerHTML) {\n if (this.parentNode) {\n contentDoc.body.innerHTML = innerHTML;\n var docFrag = this.ownerDocument.createDocumentFragment();\n while (contentDoc.body.firstChild) {\n capturedAppendChild.call(docFrag, contentDoc.body.firstChild);\n }\n capturedReplaceChild.call(this.parentNode, docFrag, this);\n } else {\n throw new Error(\"Failed to set the 'outerHTML' property on 'Element': This element has no parent node.\");\n }\n },\n configurable: true\n });\n };\n\n defineInnerHTML(PolyfilledHTMLTemplateElement.prototype);\n defineOuterHTML(PolyfilledHTMLTemplateElement.prototype);\n\n /**\n The `bootstrap` method is called automatically and \"fixes\" all\n <template> elements in the document referenced by the `doc` argument.\n */\n PolyfilledHTMLTemplateElement.bootstrap = function bootstrap(doc) {\n var templates = QSA(doc, TEMPLATE_TAG);\n for (var i=0, l=templates.length, t; (i<l) && (t=templates[i]); i++) {\n PolyfilledHTMLTemplateElement.decorate(t);\n }\n };\n\n // auto-bootstrapping for main document\n document.addEventListener('DOMContentLoaded', function() {\n PolyfilledHTMLTemplateElement.bootstrap(document);\n });\n\n // Patch document.createElement to ensure newly created templates have content\n Document.prototype.createElement = function createElement() {\n var el = capturedCreateElement.apply(this, arguments);\n if (el.localName === 'template') {\n PolyfilledHTMLTemplateElement.decorate(el);\n }\n return el;\n };\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\n var escapeAttrRegExp = /[&\\u00A0\"]/g;\n var escapeDataRegExp = /[&\\u00A0<>]/g;\n\n var escapeReplace = function(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n };\n\n var escapeAttr = function(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n };\n\n var escapeData = function(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n };\n\n var makeSet = function(arr) {\n var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n };\n\n // http://www.whatwg.org/specs/web-apps/current-work/#void-elements\n var voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n ]);\n\n /**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\n var getOuterHTML = function(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n var tagName = node.localName;\n var s = '<' + tagName;\n var attrs = node.attributes;\n for (var i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n var data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n };\n\n /**\n * @param {Node} node\n * @param {Function=} callback\n */\n var getInnerHTML = function(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n var s = '';\n var c$ = callback ? callback(node) : node.childNodes;\n for (var i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n };\n\n }\n\n // make cloning/importing work!\n if (needsTemplate || needsCloning) {\n\n PolyfilledHTMLTemplateElement._cloneNode = function _cloneNode(template, deep) {\n var clone = capturedCloneNode.call(template, false);\n // NOTE: decorate doesn't auto-fix children because they are already\n // decorated so they need special clone fixup.\n if (this.decorate) {\n this.decorate(clone);\n }\n if (deep) {\n // NOTE: use native clone node to make sure CE's wrapped\n // cloneNode does not cause elements to upgrade.\n capturedAppendChild.call(clone.content, capturedCloneNode.call(template.content, true));\n // now ensure nested templates are cloned correctly.\n fixClonedDom(clone.content, template.content);\n }\n return clone;\n };\n\n // Given a source and cloned subtree, find <template>'s in the cloned\n // subtree and replace them with cloned <template>'s from source.\n // We must do this because only the source templates have proper .content.\n var fixClonedDom = function fixClonedDom(clone, source) {\n // do nothing if cloned node is not an element\n if (!source.querySelectorAll) return;\n // these two lists should be coincident\n var s$ = QSA(source, TEMPLATE_TAG);\n if (s$.length === 0) {\n return;\n }\n var t$ = QSA(clone, TEMPLATE_TAG);\n for (var i=0, l=t$.length, t, s; i<l; i++) {\n s = s$[i];\n t = t$[i];\n if (PolyfilledHTMLTemplateElement && PolyfilledHTMLTemplateElement.decorate) {\n PolyfilledHTMLTemplateElement.decorate(s);\n }\n capturedReplaceChild.call(t.parentNode, cloneNode.call(s, true), t);\n }\n };\n\n // make sure scripts inside of a cloned template are executable\n var fixClonedScripts = function fixClonedScripts(fragment) {\n var scripts = QSA(fragment, scriptSelector);\n for (var ns, s, i = 0; i < scripts.length; i++) {\n s = scripts[i];\n ns = capturedCreateElement.call(document, 'script');\n ns.textContent = s.textContent;\n var attrs = s.attributes;\n for (var ai = 0, a; ai < attrs.length; ai++) {\n a = attrs[ai];\n ns.setAttribute(a.name, a.value);\n }\n capturedReplaceChild.call(s.parentNode, ns, s);\n }\n };\n\n // override all cloning to fix the cloned subtree to contain properly\n // cloned templates.\n var cloneNode = Node.prototype.cloneNode = function cloneNode(deep) {\n var dom;\n // workaround for Edge bug cloning documentFragments\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8619646/\n if (!needsDocFrag && brokenDocFragment && this instanceof DocumentFragment) {\n if (!deep) {\n return this.ownerDocument.createDocumentFragment();\n } else {\n dom = importNode.call(this.ownerDocument, this, true);\n }\n } else if (this.nodeType === Node.ELEMENT_NODE && \n this.localName === TEMPLATE_TAG &&\n this.namespaceURI == document.documentElement.namespaceURI) {\n dom = PolyfilledHTMLTemplateElement._cloneNode(this, deep);\n } else {\n dom = capturedCloneNode.call(this, deep);\n }\n // template.content is cloned iff `deep`.\n if (deep) {\n fixClonedDom(dom, this);\n }\n return dom;\n };\n\n // NOTE: we are cloning instead of importing <template>'s.\n // However, the ownerDocument of the cloned template will be correct!\n // This is because the native import node creates the right document owned\n // subtree and `fixClonedDom` inserts cloned templates into this subtree,\n // thus updating the owner doc.\n var importNode = Document.prototype.importNode = function importNode(element, deep) {\n deep = deep || false;\n if (element.localName === TEMPLATE_TAG) {\n return PolyfilledHTMLTemplateElement._cloneNode(element, deep);\n } else {\n var dom = capturedImportNode.call(this, element, deep);\n if (deep) {\n fixClonedDom(dom, element);\n fixClonedScripts(dom);\n }\n return dom;\n }\n };\n }\n\n if (needsTemplate) {\n window.HTMLTemplateElement = PolyfilledHTMLTemplateElement;\n }\n\n})();\n","export function objectOrFunction(x) {\n let type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n\nexport function isMaybeThenable(x) {\n return x !== null && typeof x === 'object';\n}\n\nlet _isArray;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = x => Object.prototype.toString.call(x) === '[object Array]';\n}\n\nexport const isArray = _isArray;\n","let len = 0;\nlet vertxNext;\nlet customSchedulerFn;\n\nexport var asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n}\n\nexport function setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nexport function setAsap(asapFn) {\n asap = asapFn;\n}\n\nconst browserWindow = (typeof window !== 'undefined') ? window : undefined;\nconst browserGlobal = browserWindow || {};\nconst BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nconst isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nconst isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return () => process.nextTick(flush);\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function() {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n let iterations = 0;\n const observer = new BrowserMutationObserver(flush);\n const node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return () => {\n node.data = (iterations = ++iterations % 2);\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n const channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return () => channel.port2.postMessage(0);\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n const globalSetTimeout = setTimeout;\n return () => globalSetTimeout(flush, 1);\n}\n\nconst queue = new Array(1000);\nfunction flush() {\n for (let i = 0; i < len; i+=2) {\n let callback = queue[i];\n let arg = queue[i+1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i+1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n const r = require;\n const vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch(e) {\n return useSetTimeout();\n }\n}\n\nlet scheduleFlush;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n","import {\n invokeCallback,\n subscribe,\n FULFILLED,\n REJECTED,\n noop,\n makePromise,\n PROMISE_ID\n} from './-internal';\n\nimport { asap } from './asap';\n\nexport default function then(onFulfillment, onRejection) {\n const parent = this;\n\n const child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n const { _state } = parent;\n\n if (_state) {\n const callback = arguments[_state - 1];\n asap(() => invokeCallback(_state, child, callback, parent._result));\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n","import {\n objectOrFunction,\n isFunction\n} from './utils';\n\nimport {\n asap\n} from './asap';\n\nimport originalThen from './then';\nimport originalResolve from './promise/resolve';\n\nexport const PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nconst PENDING = void 0;\nconst FULFILLED = 1;\nconst REJECTED = 2;\n\nconst GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(promise => {\n var sealed = false;\n var error = tryThen(then, thenable, value => {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, reason => {\n if (sealed) { return; }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, value => resolve(promise, value),\n reason => reject(promise, reason))\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === originalThen &&\n maybeThenable.constructor.resolve === originalResolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === GET_THEN_ERROR) {\n reject(promise, GET_THEN_ERROR.error);\n GET_THEN_ERROR.error = null;\n } else if (then === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then)) {\n handleForeignThenable(promise, maybeThenable, then);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) { return; }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) { return; }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n let { _subscribers } = parent;\n let { length } = _subscribers;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n let subscribers = promise._subscribers;\n let settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n let child, callback, detail = promise._result;\n\n for (let i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nconst TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n let hasCallback = isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value.error = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (failed) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch(e) {\n reject(promise, e);\n }\n}\n\nlet id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nexport {\n nextId,\n makePromise,\n getThen,\n noop,\n resolve,\n reject,\n fulfill,\n subscribe,\n publish,\n publishRejection,\n initializePromise,\n invokeCallback,\n FULFILLED,\n REJECTED,\n PENDING,\n handleMaybeThenable\n};\n","import {\n noop,\n resolve as _resolve\n} from '../-internal';\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nexport default function resolve(object) {\n /*jshint validthis:true */\n let Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n let promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}\n","import {\n isArray,\n isMaybeThenable\n} from './utils';\n\nimport {\n noop,\n reject,\n fulfill,\n subscribe,\n FULFILLED,\n REJECTED,\n PENDING,\n getThen,\n handleMaybeThenable\n} from './-internal';\n\nimport then from './then';\nimport Promise from './promise';\nimport originalResolve from './promise/resolve';\nimport originalThen from './then';\nimport { makePromise, PROMISE_ID } from './-internal';\n\nexport default Enumerator;\nfunction Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nEnumerator.prototype._enumerate = function(input) {\n for (let i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n};\n\nEnumerator.prototype._eachEntry = function(entry, i) {\n let c = this._instanceConstructor;\n let { resolve } = c;\n\n if (resolve === originalResolve) {\n let then = getThen(entry);\n\n if (then === originalThen &&\n entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n let promise = new c(noop);\n handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(resolve => resolve(entry)), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n};\n\nEnumerator.prototype._settledAt = function(state, i, value) {\n let { promise } = this;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator.prototype._willSettleAt = function(promise, i) {\n let enumerator = this;\n\n subscribe(promise, undefined, value => enumerator._settledAt(FULFILLED, i, value),\n reason => enumerator._settledAt(REJECTED, i, reason));\n};\n","import {\n isFunction\n} from './utils';\n\nimport {\n noop,\n nextId,\n PROMISE_ID,\n initializePromise\n} from './-internal';\n\nimport {\n asap,\n setAsap,\n setScheduler\n} from './asap';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\nimport then from './then';\n\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nexport default function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;\n\nPromise.prototype = {\n constructor: Promise,\n\n/**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n let result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n let author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n*/\n then: then,\n\n/**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n*/\n catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n","import Enumerator from '../enumerator';\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nexport default function all(entries) {\n return new Enumerator(this, entries).promise;\n}\n","import {\n isArray\n} from \"../utils\";\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nexport default function race(entries) {\n /*jshint validthis:true */\n let Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor((_, reject) => reject(new TypeError('You must pass an array to race.')));\n } else {\n return new Constructor((resolve, reject) => {\n let length = entries.length;\n for (let i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n","import {\n noop,\n reject as _reject\n} from '../-internal';\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason) {\n /*jshint validthis:true */\n let Constructor = this;\n let promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\nimport ES6Promise from '../node_modules/es6-promise/lib/es6-promise/promise.js';\n\n/*\nAssign the ES6 promise polyfill to window ourselves instead of using the \"auto\" polyfill\nto work around https://github.com/webcomponents/webcomponentsjs/issues/837\n*/\nif (!window.Promise) {\n window.Promise = ES6Promise;\n // save Promise API\n ES6Promise.prototype['catch'] = ES6Promise.prototype.catch;\n ES6Promise.prototype['then'] = ES6Promise.prototype.then;\n ES6Promise['all'] = ES6Promise.all;\n ES6Promise['race'] = ES6Promise.race;\n ES6Promise['resolve'] = ES6Promise.resolve;\n ES6Promise['reject'] = ES6Promise.reject;\n}","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n(scope => {\n\n /********************* base setup *********************/\n const link = document.createElement('link');\n const useNative = Boolean('import' in link);\n const emptyNodeList = link.querySelectorAll('*');\n\n // Polyfill `currentScript` for browsers without it.\n let currentScript = null;\n if ('currentScript' in document === false) {\n Object.defineProperty(document, 'currentScript', {\n get() {\n return currentScript ||\n // NOTE: only works when called in synchronously executing code.\n // readyState should check if `loading` but IE10 is\n // interactive when scripts run so we cheat. This is not needed by\n // html-imports polyfill but helps generally polyfill `currentScript`.\n (document.readyState !== 'complete' ?\n document.scripts[document.scripts.length - 1] : null);\n },\n configurable: true\n });\n }\n\n /**\n * @param {Array|NodeList|NamedNodeMap} list\n * @param {!Function} callback\n * @param {boolean=} inverseOrder\n */\n const forEach = (list, callback, inverseOrder) => {\n const length = list ? list.length : 0;\n const increment = inverseOrder ? -1 : 1;\n let i = inverseOrder ? length - 1 : 0;\n for (; i < length && i >= 0; i = i + increment) {\n callback(list[i], i);\n }\n };\n\n /**\n * @param {!Node} node\n * @param {!string} selector\n * @return {!NodeList<!Element>}\n */\n const QSA = (node, selector) => {\n // IE 11 throws a SyntaxError if a node with no children is queried with\n // a selector containing the `:not([type])` syntax.\n if (!node.childNodes.length) {\n return emptyNodeList;\n }\n return node.querySelectorAll(selector);\n };\n\n /**\n * @param {!DocumentFragment} fragment\n */\n const replaceScripts = (fragment) => {\n forEach(QSA(fragment, 'template'), template => {\n forEach(QSA(template.content, scriptsSelector), script => {\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n forEach(script.attributes, attr => clone.setAttribute(attr.name, attr.value));\n clone.textContent = script.textContent;\n script.parentNode.replaceChild(clone, script);\n });\n replaceScripts(template.content);\n });\n };\n\n /********************* path fixup *********************/\n const CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\n const CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n const STYLESHEET_REGEXP = /(<link[^>]*)(rel=['|\"]?stylesheet['|\"]?[^>]*>)/g;\n\n // path fixup: style elements in imports must be made relative to the main\n // document. We fixup url's in url() and @import.\n const Path = {\n\n fixUrls(element, base) {\n if (element.href) {\n element.setAttribute('href',\n Path.resolveUrl(element.getAttribute('href'), base));\n }\n if (element.src) {\n element.setAttribute('src',\n Path.resolveUrl(element.getAttribute('src'), base));\n }\n if (element.localName === 'style') {\n const r = Path.replaceUrls(element.textContent, base, CSS_URL_REGEXP);\n element.textContent = Path.replaceUrls(r, base, CSS_IMPORT_REGEXP);\n }\n },\n\n replaceUrls(text, linkUrl, regexp) {\n return text.replace(regexp, (m, pre, url, post) => {\n let urlPath = url.replace(/[\"']/g, '');\n if (linkUrl) {\n urlPath = Path.resolveUrl(urlPath, linkUrl);\n }\n return pre + '\\'' + urlPath + '\\'' + post;\n });\n },\n\n resolveUrl(url, base) {\n // Lazy feature detection.\n if (Path.__workingURL === undefined) {\n Path.__workingURL = false;\n try {\n const u = new URL('b', 'http://a');\n u.pathname = 'c%20d';\n Path.__workingURL = (u.href === 'http://a/c%20d');\n } catch (e) {}\n }\n\n if (Path.__workingURL) {\n return (new URL(url, base)).href;\n }\n\n // Fallback to creating an anchor into a disconnected document.\n let doc = Path.__tempDoc;\n if (!doc) {\n doc = document.implementation.createHTMLDocument('temp');\n Path.__tempDoc = doc;\n doc.__base = doc.createElement('base');\n doc.head.appendChild(doc.__base);\n doc.__anchor = doc.createElement('a');\n }\n doc.__base.href = base;\n doc.__anchor.href = url;\n return doc.__anchor.href || url;\n }\n };\n\n /********************* Xhr processor *********************/\n const Xhr = {\n\n async: true,\n\n /**\n * @param {!string} url\n * @param {!function(!string, string=)} success\n * @param {!function(!string)} fail\n */\n load(url, success, fail) {\n if (!url) {\n fail('error: href must be specified');\n } else if (url.match(/^data:/)) {\n // Handle Data URI Scheme\n const pieces = url.split(',');\n const header = pieces[0];\n let resource = pieces[1];\n if (header.indexOf(';base64') > -1) {\n resource = atob(resource);\n } else {\n resource = decodeURIComponent(resource);\n }\n success(resource);\n } else {\n const request = new XMLHttpRequest();\n request.open('GET', url, Xhr.async);\n request.onload = () => {\n // Servers redirecting an import can add a Location header to help us\n // polyfill correctly. Handle relative and full paths.\n // Prefer responseURL which already resolves redirects\n // https://xhr.spec.whatwg.org/#the-responseurl-attribute\n let redirectedUrl = request.responseURL || request.getResponseHeader('Location');\n if (redirectedUrl && redirectedUrl.indexOf('/') === 0) {\n // In IE location.origin might not work\n // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7\n const origin = (location.origin || location.protocol + '//' + location.host);\n redirectedUrl = origin + redirectedUrl;\n }\n const resource = /** @type {string} */ (request.response || request.responseText);\n if (request.status === 304 || request.status === 0 ||\n request.status >= 200 && request.status < 300) {\n success(resource, redirectedUrl);\n } else {\n fail(resource);\n }\n };\n request.send();\n }\n }\n };\n\n /********************* importer *********************/\n\n const isIE = /Trident/.test(navigator.userAgent) ||\n /Edge\\/\\d./i.test(navigator.userAgent);\n\n const importSelector = 'link[rel=import]';\n\n // Used to disable loading of resources.\n const importDisableType = 'import-disable';\n\n const disabledLinkSelector = `link[rel=stylesheet][href][type=${importDisableType}]`;\n\n const scriptsSelector = `script:not([type]),script[type=\"application/javascript\"],` +\n `script[type=\"text/javascript\"]`;\n\n const importDependenciesSelector = `${importSelector},${disabledLinkSelector},` +\n `style:not([type]),link[rel=stylesheet][href]:not([type]),` + scriptsSelector;\n\n const importDependencyAttr = 'import-dependency';\n\n const rootImportSelector = `${importSelector}:not([${importDependencyAttr}])`;\n\n const pendingScriptsSelector = `script[${importDependencyAttr}]`;\n\n const pendingStylesSelector = `style[${importDependencyAttr}],` +\n `link[rel=stylesheet][${importDependencyAttr}]`;\n\n /**\n * Importer will:\n * - load any linked import documents (with deduping)\n * - whenever an import is loaded, prompt the parser to try to parse\n * - observe imported documents for new elements (these are handled via the\n * dynamic importer)\n */\n class Importer {\n constructor() {\n this.documents = {};\n // Used to keep track of pending loads, so that flattening and firing of\n // events can be done when all resources are ready.\n this.inflight = 0;\n this.dynamicImportsMO = new MutationObserver(m => this.handleMutations(m));\n // Observe changes on <head>.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n // 1. Load imports contents\n // 2. Assign them to first import links on the document\n // 3. Wait for import styles & scripts to be done loading/running\n // 4. Fire load/error events\n this.loadImports(document);\n }\n\n /**\n * @param {!(HTMLDocument|DocumentFragment|Element)} doc\n */\n loadImports(doc) {\n const links = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(links, link => this.loadImport(link));\n }\n\n /**\n * @param {!HTMLLinkElement} link\n */\n loadImport(link) {\n const url = link.href;\n // This resource is already being handled by another import.\n if (this.documents[url] !== undefined) {\n // If import is already loaded, we can safely associate it to the link\n // and fire the load/error event.\n const imp = this.documents[url];\n if (imp && imp['__loaded']) {\n link['__import'] = imp;\n this.fireEventIfNeeded(link);\n }\n return;\n }\n this.inflight++;\n // Mark it as pending to notify others this url is being loaded.\n this.documents[url] = 'pending';\n Xhr.load(url, (resource, redirectedUrl) => {\n const doc = this.makeDocument(resource, redirectedUrl || url);\n this.documents[url] = doc;\n this.inflight--;\n // Load subtree.\n this.loadImports(doc);\n this.processImportsIfLoadingDone();\n }, () => {\n // If load fails, handle error.\n this.documents[url] = null;\n this.inflight--;\n this.processImportsIfLoadingDone();\n });\n }\n\n /**\n * Creates a new document containing resource and normalizes urls accordingly.\n * @param {string=} resource\n * @param {string=} url\n * @return {!DocumentFragment}\n */\n makeDocument(resource, url) {\n if (!resource) {\n return document.createDocumentFragment();\n }\n\n if (isIE) {\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order. We disable the loading by\n // setting the type before setting innerHTML to avoid loading\n // resources twice.\n resource = resource.replace(STYLESHEET_REGEXP, (match, p1, p2) => {\n if (match.indexOf('type=') === -1) {\n return `${p1} type=${importDisableType} ${p2}`;\n }\n return match;\n });\n }\n\n let content;\n const template = /** @type {!HTMLTemplateElement} */\n (document.createElement('template'));\n template.innerHTML = resource;\n if (template.content) {\n content = template.content;\n // Clone scripts inside templates since they won't execute when the\n // hosting template is cloned.\n replaceScripts(content);\n } else {\n // <template> not supported, create fragment and move content into it.\n content = document.createDocumentFragment();\n while (template.firstChild) {\n content.appendChild(template.firstChild);\n }\n }\n\n // Support <base> in imported docs. Resolve url and remove its href.\n const baseEl = content.querySelector('base');\n if (baseEl) {\n url = Path.resolveUrl(baseEl.getAttribute('href'), url);\n baseEl.removeAttribute('href');\n }\n\n const n$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)>} */\n (QSA(content, importDependenciesSelector));\n // For source map hints.\n let inlineScriptIndex = 0;\n forEach(n$, n => {\n // Listen for load/error events, then fix urls.\n whenElementLoaded(n);\n Path.fixUrls(n, url);\n // Mark for easier selectors.\n n.setAttribute(importDependencyAttr, '');\n // Generate source map hints for inline scripts.\n if (n.localName === 'script' && !n.src && n.textContent) {\n const num = inlineScriptIndex ? `-${inlineScriptIndex}` : '';\n const content = n.textContent + `\\n//# sourceURL=${url}${num}.js\\n`;\n // We use the src attribute so it triggers load/error events, and it's\n // easier to capture errors (e.g. parsing) like this.\n n.setAttribute('src', 'data:text/javascript;charset=utf-8,' + encodeURIComponent(content));\n n.textContent = '';\n inlineScriptIndex++;\n }\n });\n return content;\n }\n\n /**\n * Waits for loaded imports to finish loading scripts and styles, then fires\n * the load/error events.\n */\n processImportsIfLoadingDone() {\n // Wait until all resources are ready, then load import resources.\n if (this.inflight) return;\n\n // Stop observing, flatten & load resource, then restart observing <head>.\n this.dynamicImportsMO.disconnect();\n this.flatten(document);\n // We wait for styles to load, and at the same time we execute the scripts,\n // then fire the load/error events for imports to have faster whenReady\n // callback execution.\n // NOTE: This is different for native behavior where scripts would be\n // executed after the styles before them are loaded.\n // To achieve that, we could select pending styles and scripts in the\n // document and execute them sequentially in their dom order.\n let scriptsOk = false,\n stylesOk = false;\n const onLoadingDone = () => {\n if (stylesOk && scriptsOk) {\n // Catch any imports that might have been added while we\n // weren't looking, wait for them as well.\n this.loadImports(document);\n if (this.inflight) return;\n\n // Restart observing.\n this.dynamicImportsMO.observe(document.head, {\n childList: true,\n subtree: true\n });\n this.fireEvents();\n }\n }\n this.waitForStyles(() => {\n stylesOk = true;\n onLoadingDone();\n });\n this.runScripts(() => {\n scriptsOk = true;\n onLoadingDone();\n });\n }\n\n /**\n * @param {!HTMLDocument} doc\n */\n flatten(doc) {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(doc, importSelector));\n forEach(n$, n => {\n const imp = this.documents[n.href];\n n['__import'] = /** @type {!Document} */ (imp);\n if (imp && imp.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n // We set the .import to be the link itself, and update its readyState.\n // Other links with the same href will point to this link.\n this.documents[n.href] = n;\n n.readyState = 'loading';\n n['__import'] = n;\n this.flatten(imp);\n n.appendChild(imp);\n }\n });\n }\n\n /**\n * Replaces all the imported scripts with a clone in order to execute them.\n * Updates the `currentScript`.\n * @param {!function()} callback\n */\n runScripts(callback) {\n const s$ = QSA(document, pendingScriptsSelector);\n const l = s$.length;\n const cloneScript = i => {\n if (i < l) {\n // The pending scripts have been generated through innerHTML and\n // browsers won't execute them for security reasons. We cannot use\n // s.cloneNode(true) either, the only way to run the script is manually\n // creating a new element and copying its attributes.\n const s = s$[i];\n const clone = /** @type {!HTMLScriptElement} */\n (document.createElement('script'));\n // Remove import-dependency attribute to avoid double cloning.\n s.removeAttribute(importDependencyAttr);\n forEach(s.attributes, attr => clone.setAttribute(attr.name, attr.value));\n // Update currentScript and replace original with clone script.\n currentScript = clone;\n s.parentNode.replaceChild(clone, s);\n whenElementLoaded(clone, () => {\n currentScript = null;\n cloneScript(i + 1);\n });\n } else {\n callback();\n }\n };\n cloneScript(0);\n }\n\n /**\n * Waits for all the imported stylesheets/styles to be loaded.\n * @param {!function()} callback\n */\n waitForStyles(callback) {\n const s$ = /** @type {!NodeList<!(HTMLLinkElement|HTMLStyleElement)>} */\n (QSA(document, pendingStylesSelector));\n let pending = s$.length;\n if (!pending) {\n callback();\n return;\n }\n // <link rel=stylesheet> should be appended to <head>. Not doing so\n // in IE/Edge breaks the cascading order\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10472273/\n // If there is one <link rel=stylesheet> imported, we must move all imported\n // links and styles to <head>.\n const needsMove = isIE && !!document.querySelector(disabledLinkSelector);\n forEach(s$, s => {\n // Listen for load/error events, remove selector once is done loading.\n whenElementLoaded(s, () => {\n s.removeAttribute(importDependencyAttr);\n if (--pending === 0) {\n callback();\n }\n });\n // Check if was already moved to head, to handle the case where the element\n // has already been moved but it is still loading.\n if (needsMove && s.parentNode !== document.head) {\n // Replace the element we're about to move with a placeholder.\n const placeholder = document.createElement(s.localName);\n // Add reference of the moved element.\n placeholder['__appliedElement'] = s;\n // Disable this from appearing in document.styleSheets.\n placeholder.setAttribute('type', 'import-placeholder');\n // Append placeholder next to the sibling, and move original to <head>.\n s.parentNode.insertBefore(placeholder, s.nextSibling);\n let newSibling = importForElement(s);\n while (newSibling && importForElement(newSibling)) {\n newSibling = importForElement(newSibling);\n }\n if (newSibling.parentNode !== document.head) {\n newSibling = null;\n }\n document.head.insertBefore(s, newSibling);\n // Enable the loading of <link rel=stylesheet>.\n s.removeAttribute('type');\n }\n });\n }\n\n /**\n * Fires load/error events for imports in the right order .\n */\n fireEvents() {\n const n$ = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n // Inverse order to have events firing bottom-up.\n forEach(n$, n => this.fireEventIfNeeded(n), true);\n }\n\n /**\n * Fires load/error event for the import if this wasn't done already.\n * @param {!HTMLLinkElement} link\n */\n fireEventIfNeeded(link) {\n // Don't fire twice same event.\n if (!link['__loaded']) {\n link['__loaded'] = true;\n // Update link's import readyState.\n link.import && (link.import.readyState = 'complete');\n const eventType = link.import ? 'load' : 'error';\n link.dispatchEvent(newCustomEvent(eventType, {\n bubbles: false,\n cancelable: false,\n detail: undefined\n }));\n }\n }\n\n /**\n * @param {Array<MutationRecord>} mutations\n */\n handleMutations(mutations) {\n forEach(mutations, m => forEach(m.addedNodes, elem => {\n if (elem && elem.nodeType === Node.ELEMENT_NODE) {\n // NOTE: added scripts are not updating currentScript in IE.\n if (isImportLink(elem)) {\n this.loadImport( /** @type {!HTMLLinkElement} */ (elem));\n } else {\n this.loadImports( /** @type {!Element} */ (elem));\n }\n }\n }));\n }\n }\n\n /**\n * @param {!Node} node\n * @return {boolean}\n */\n const isImportLink = node => {\n return node.nodeType === Node.ELEMENT_NODE && node.localName === 'link' &&\n ( /** @type {!HTMLLinkElement} */ (node).rel === 'import');\n };\n\n /**\n * Waits for an element to finish loading. If already done loading, it will\n * mark the element accordingly.\n * @param {!(HTMLLinkElement|HTMLScriptElement|HTMLStyleElement)} element\n * @param {function()=} callback\n */\n const whenElementLoaded = (element, callback) => {\n if (element['__loaded']) {\n callback && callback();\n } else if ((element.localName === 'script' && !element.src) ||\n (element.localName === 'style' && !element.firstChild)) {\n // Inline scripts and empty styles don't trigger load/error events,\n // consider them already loaded.\n element['__loaded'] = true;\n callback && callback();\n } else {\n const onLoadingDone = event => {\n element.removeEventListener(event.type, onLoadingDone);\n element['__loaded'] = true;\n callback && callback();\n };\n element.addEventListener('load', onLoadingDone);\n // NOTE: We listen only for load events in IE/Edge, because in IE/Edge\n // <style> with @import will fire error events for each failing @import,\n // and finally will trigger the load event when all @import are\n // finished (even if all fail).\n if (!isIE || element.localName !== 'style') {\n element.addEventListener('error', onLoadingDone);\n }\n }\n }\n\n /**\n * Calls the callback when all imports in the document at call time\n * (or at least document ready) have loaded. Callback is called synchronously\n * if imports are already done loading.\n * @param {function()=} callback\n */\n const whenReady = callback => {\n // 1. ensure the document is in a ready state (has dom), then\n // 2. watch for loading of imports and call callback when done\n whenDocumentReady(() => whenImportsReady(() => callback && callback()));\n }\n\n /**\n * Invokes the callback when document is in ready state. Callback is called\n * synchronously if document is already done loading.\n * @param {!function()} callback\n */\n const whenDocumentReady = callback => {\n const stateChanged = () => {\n // NOTE: Firefox can hit readystate interactive without document.body existing.\n // This is anti-spec, but we handle it here anyways by waiting for next change.\n if (document.readyState !== 'loading' && !!document.body) {\n document.removeEventListener('readystatechange', stateChanged);\n callback();\n }\n }\n document.addEventListener('readystatechange', stateChanged);\n stateChanged();\n }\n\n /**\n * Invokes the callback after all imports are loaded. Callback is called\n * synchronously if imports are already done loading.\n * @param {!function()} callback\n */\n const whenImportsReady = callback => {\n let imports = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, rootImportSelector));\n let pending = imports.length;\n if (!pending) {\n callback();\n return;\n }\n forEach(imports, imp => whenElementLoaded(imp, () => {\n if (--pending === 0) {\n callback();\n }\n }));\n }\n\n /**\n * Returns the import document containing the element.\n * @param {!Node} element\n * @return {HTMLLinkElement|Document|undefined}\n */\n const importForElement = element => {\n if (useNative) {\n // Return only if not in the main doc!\n return element.ownerDocument !== document ? element.ownerDocument : null;\n }\n let doc = element['__importDoc'];\n if (!doc && element.parentNode) {\n doc = /** @type {!Element} */ (element.parentNode);\n if (typeof doc.closest === 'function') {\n // Element.closest returns the element itself if it matches the selector,\n // so we search the closest import starting from the parent.\n doc = doc.closest(importSelector);\n } else {\n // Walk up the parent tree until we find an import.\n while (!isImportLink(doc) && (doc = doc.parentNode)) {}\n }\n element['__importDoc'] = doc;\n }\n return doc;\n }\n\n let importer = null;\n /**\n * Ensures imports contained in the element are imported.\n * Use this to handle dynamic imports attached to body.\n * @param {!(HTMLDocument|Element)} doc\n */\n const loadImports = (doc) => {\n if (importer) {\n importer.loadImports(doc);\n }\n };\n\n const newCustomEvent = (type, params) => {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(type, params);\n }\n const event = /** @type {!CustomEvent} */ (document.createEvent('CustomEvent'));\n event.initCustomEvent(type, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return event;\n };\n\n if (useNative) {\n // Check for imports that might already be done loading by the time this\n // script is actually executed. Native imports are blocking, so the ones\n // available in the document by this time should already have failed\n // or have .import defined.\n const imps = /** @type {!NodeList<!HTMLLinkElement>} */\n (QSA(document, importSelector));\n forEach(imps, imp => {\n if (!imp.import || imp.import.readyState !== 'loading') {\n imp['__loaded'] = true;\n }\n });\n // Listen for load/error events to capture dynamically added scripts.\n /**\n * @type {!function(!Event)}\n */\n const onLoadingDone = event => {\n const elem = /** @type {!Element} */ (event.target);\n if (isImportLink(elem)) {\n elem['__loaded'] = true;\n }\n };\n document.addEventListener('load', onLoadingDone, true /* useCapture */ );\n document.addEventListener('error', onLoadingDone, true /* useCapture */ );\n } else {\n // Override baseURI so that imported elements' baseURI can be used seemlessly\n // on native or polyfilled html-imports.\n // NOTE: a <link rel=import> will have `link.baseURI === link.href`, as the link\n // itself is used as the `import` document.\n /** @type {Object|undefined} */\n const native_baseURI = Object.getOwnPropertyDescriptor(Node.prototype, 'baseURI');\n // NOTE: if not configurable (e.g. safari9), set it on the Element prototype. \n const klass = !native_baseURI || native_baseURI.configurable ? Node : Element;\n Object.defineProperty(klass.prototype, 'baseURI', {\n get() {\n const ownerDoc = /** @type {HTMLLinkElement} */ (isImportLink(this) ? this : importForElement(this));\n if (ownerDoc) return ownerDoc.href;\n // Use native baseURI if possible.\n if (native_baseURI && native_baseURI.get) return native_baseURI.get.call(this);\n // Polyfill it if not available.\n const base = /** @type {HTMLBaseElement} */ (document.querySelector('base'));\n return (base || window.location).href;\n },\n configurable: true,\n enumerable: true\n });\n\n // Define 'import' read-only property.\n Object.defineProperty(HTMLLinkElement.prototype, 'import', {\n get() {\n return /** @type {HTMLLinkElement} */ (this)['__import'] || null;\n },\n configurable: true,\n enumerable: true\n });\n\n whenDocumentReady(() => {\n importer = new Importer()\n });\n }\n\n /**\n Add support for the `HTMLImportsLoaded` event and the `HTMLImports.whenReady`\n method. This api is necessary because unlike the native implementation,\n script elements do not force imports to resolve. Instead, users should wrap\n code in either an `HTMLImportsLoaded` handler or after load time in an\n `HTMLImports.whenReady(callback)` call.\n\n NOTE: This module also supports these apis under the native implementation.\n Therefore, if this file is loaded, the same code can be used under both\n the polyfill and native implementation.\n */\n whenReady(() => document.dispatchEvent(newCustomEvent('HTMLImportsLoaded', {\n cancelable: true,\n bubbles: true,\n detail: undefined\n })));\n\n // exports\n scope.useNative = useNative;\n scope.whenReady = whenReady;\n scope.importForElement = importForElement;\n scope.loadImports = loadImports;\n\n})(window.HTMLImports = (window.HTMLImports || {}));","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\n// Establish scope.\nwindow['WebComponents'] = window['WebComponents'] || {'flags':{}};\n\n// loading script\nlet file = 'webcomponents-lite.js';\nlet script = document.querySelector('script[src*=\"' + file + '\"]');\nlet flagMatcher = /wc-(.+)/;\n\n// Flags. Convert url arguments to flags\nlet flags = {};\nif (!flags['noOpts']) {\n // from url\n location.search.slice(1).split('&').forEach(function(option) {\n let parts = option.split('=');\n let match;\n if (parts[0] && (match = parts[0].match(flagMatcher))) {\n flags[match[1]] = parts[1] || true;\n }\n });\n // from script\n if (script) {\n for (let i=0, a; (a=script.attributes[i]); i++) {\n if (a.name !== 'src') {\n flags[a.name] = a.value || true;\n }\n }\n }\n // log flags\n if (flags['log'] && flags['log']['split']) {\n let parts = flags['log'].split(',');\n flags['log'] = {};\n parts.forEach(function(f) {\n flags['log'][f] = true;\n });\n } else {\n flags['log'] = {};\n }\n}\n\n// exports\nwindow['WebComponents']['flags'] = flags;\nlet forceShady = flags['shadydom'];\nif (forceShady) {\n window['ShadyDOM'] = window['ShadyDOM'] || {};\n window['ShadyDOM']['force'] = forceShady;\n}\n\nlet forceCE = flags['register'] || flags['ce'];\nif (forceCE && window['customElements']) {\n window['customElements']['forcePolyfill'] = forceCE;\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n\nexport class ShadyData {\n constructor() {\n /** @type {ShadowRoot} */\n this.root = null;\n /** @type {ShadowRoot} */\n this.publicRoot = null;\n this.dirty = false;\n this.observer = null;\n /** @type {Array<Node>} */\n this.assignedNodes = null;\n /** @type {Element} */\n this.assignedSlot = null;\n /** @type {Array<Node>} */\n this._previouslyAssignedNodes = null;\n /** @type {Element} */\n this._prevAssignedSlot = null;\n /** @type {Array<Node>} */\n this.flattenedNodes = null;\n this.ownerShadyRoot = undefined;\n /** @type {Node|undefined} */\n this.parentNode = undefined;\n /** @type {Node|undefined} */\n this.firstChild = undefined;\n /** @type {Node|undefined} */\n this.lastChild = undefined;\n /** @type {Node|undefined} */\n this.previousSibling = undefined;\n /** @type {Node|undefined} */\n this.nextSibling = undefined;\n /** @type {Array<Node>|undefined} */\n this.childNodes = undefined;\n this.__outsideAccessors = false;\n this.__insideAccessors = false;\n }\n\n toJSON() {\n return {};\n }\n}\n\nexport function ensureShadyDataForNode(node) {\n if (!node.__shady) {\n node.__shady = new ShadyData();\n }\n return node.__shady;\n}\n\nexport function shadyDataForNode(node) {\n return node && node.__shady;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport {shadyDataForNode} from './shady-data.js';\n\nexport let settings = window['ShadyDOM'] || {};\n\nsettings.hasNativeShadowDOM = Boolean(Element.prototype.attachShadow && Node.prototype.getRootNode);\n\nlet desc = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild');\n\nsettings.hasDescriptors = Boolean(desc && desc.configurable && desc.get);\nsettings.inUse = settings['force'] || !settings.hasNativeShadowDOM;\n\n// Default to using native accessors (instead of treewalker) only for\n// IE/Edge where they are faster.\nconst IS_IE = navigator.userAgent.match('Trident');\nconst IS_EDGE = navigator.userAgent.match('Edge');\nif (settings.useNativeAccessors === undefined) {\n settings.useNativeAccessors = settings.hasDescriptors && (IS_IE || IS_EDGE);\n}\n\nexport function isTrackingLogicalChildNodes(node) {\n const nodeData = shadyDataForNode(node);\n return (nodeData && nodeData.firstChild !== undefined);\n}\n\nexport function isShadyRoot(obj) {\n return Boolean(obj._localName === 'ShadyRoot');\n}\n\nexport function ownerShadyRootForNode(node) {\n let root = node.getRootNode();\n if (isShadyRoot(root)) {\n return root;\n }\n}\n\nlet p = Element.prototype;\nlet matches = p.matches || p.matchesSelector ||\n p.mozMatchesSelector || p.msMatchesSelector ||\n p.oMatchesSelector || p.webkitMatchesSelector;\n\nexport function matchesSelector(element, selector) {\n return matches.call(element, selector);\n}\n\nfunction copyOwnProperty(name, source, target) {\n let pd = Object.getOwnPropertyDescriptor(source, name);\n if (pd) {\n Object.defineProperty(target, name, pd);\n }\n}\n\nexport function extend(target, source) {\n if (target && source) {\n let n$ = Object.getOwnPropertyNames(source);\n for (let i=0, n; (i<n$.length) && (n=n$[i]); i++) {\n copyOwnProperty(n, source, target);\n }\n }\n return target || source;\n}\n\nexport function extendAll(target, ...sources) {\n for (let i=0; i < sources.length; i++) {\n extend(target, sources[i]);\n }\n return target;\n}\n\nexport function mixin(target, source) {\n for (var i in source) {\n target[i] = source[i];\n }\n return target;\n}\n\nexport function patchPrototype(obj, mixin) {\n let proto = Object.getPrototypeOf(obj);\n if (!proto.hasOwnProperty('__patchProto')) {\n let patchProto = Object.create(proto);\n patchProto.__sourceProto = proto;\n extend(patchProto, mixin);\n proto['__patchProto'] = patchProto;\n }\n // old browsers don't have setPrototypeOf\n obj.__proto__ = proto['__patchProto'];\n}\n\n\nlet twiddle = document.createTextNode('');\nlet content = 0;\nlet queue = [];\nnew MutationObserver(() => {\n while (queue.length) {\n // catch errors in user code...\n try {\n queue.shift()();\n } catch(e) {\n // enqueue another record and throw\n twiddle.textContent = content++;\n throw(e);\n }\n }\n}).observe(twiddle, {characterData: true});\n\n// use MutationObserver to get microtask async timing.\nexport function microtask(callback) {\n queue.push(callback);\n twiddle.textContent = content++;\n}\n\nexport const hasDocumentContains = Boolean(document.contains);\n\nexport function contains(container, node) {\n while (node) {\n if (node == container) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\n\n// render enqueuer/flusher\nlet flushList = [];\nlet scheduled;\nexport function enqueue(callback) {\n if (!scheduled) {\n scheduled = true;\n utils.microtask(flush);\n }\n flushList.push(callback);\n}\n\nexport function flush() {\n scheduled = false;\n let didFlush = Boolean(flushList.length);\n while (flushList.length) {\n flushList.shift()();\n }\n return didFlush;\n}\n\nflush['list'] = flushList;\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {ensureShadyDataForNode} from './shady-data.js';\n\nclass AsyncObserver {\n\n constructor() {\n this._scheduled = false;\n this.addedNodes = [];\n this.removedNodes = [];\n this.callbacks = new Set();\n }\n\n schedule() {\n if (!this._scheduled) {\n this._scheduled = true;\n utils.microtask(() => {\n this.flush();\n });\n }\n }\n\n flush() {\n if (this._scheduled) {\n this._scheduled = false;\n let mutations = this.takeRecords();\n if (mutations.length) {\n this.callbacks.forEach(function(cb) {\n cb(mutations);\n });\n }\n }\n }\n\n takeRecords() {\n if (this.addedNodes.length || this.removedNodes.length) {\n let mutations = [{\n addedNodes: this.addedNodes,\n removedNodes: this.removedNodes\n }];\n this.addedNodes = [];\n this.removedNodes = [];\n return mutations;\n }\n return [];\n }\n\n}\n\n// TODO(sorvell): consider instead polyfilling MutationObserver\n// directly so that users do not have to fork their code.\n// Supporting the entire api may be challenging: e.g. filtering out\n// removed nodes in the wrong scope and seeing non-distributing\n// subtree child mutations.\nexport let observeChildren = function(node, callback) {\n const sd = ensureShadyDataForNode(node);\n if (!sd.observer) {\n sd.observer = new AsyncObserver();\n }\n sd.observer.callbacks.add(callback);\n let observer = sd.observer;\n return {\n _callback: callback,\n _observer: observer,\n _node: node,\n takeRecords() {\n return observer.takeRecords()\n }\n };\n}\n\nexport let unobserveChildren = function(handle) {\n let observer = handle && handle._observer;\n if (observer) {\n observer.callbacks.delete(handle._callback);\n if (!observer.callbacks.size) {\n ensureShadyDataForNode(handle._node).observer = null;\n }\n }\n}\n\nexport function filterMutations(mutations, target) {\n /** @const {Node} */\n const targetRootNode = target.getRootNode();\n return mutations.map(function(mutation) {\n /** @const {boolean} */\n const mutationInScope = (targetRootNode === mutation.target.getRootNode());\n if (mutationInScope && mutation.addedNodes) {\n let nodes = Array.from(mutation.addedNodes).filter(function(n) {\n return (targetRootNode === n.getRootNode());\n });\n if (nodes.length) {\n mutation = Object.create(mutation);\n Object.defineProperty(mutation, 'addedNodes', {\n value: nodes,\n configurable: true\n });\n return mutation;\n }\n } else if (mutationInScope) {\n return mutation;\n }\n }).filter(function(m) { return m});\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport let appendChild = Element.prototype.appendChild;\nexport let insertBefore = Element.prototype.insertBefore;\nexport let replaceChild = Element.prototype.replaceChild;\nexport let removeChild = Element.prototype.removeChild;\nexport let setAttribute = Element.prototype.setAttribute;\nexport let removeAttribute = Element.prototype.removeAttribute;\nexport let cloneNode = Element.prototype.cloneNode;\nexport let importNode = Document.prototype.importNode;\nexport let addEventListener = Element.prototype.addEventListener;\nexport let removeEventListener = Element.prototype.removeEventListener;\nexport let windowAddEventListener = Window.prototype.addEventListener;\nexport let windowRemoveEventListener = Window.prototype.removeEventListener;\nexport let dispatchEvent = Element.prototype.dispatchEvent;\nexport let contains = Node.prototype.contains || HTMLElement.prototype.contains;\nexport let getElementById = Document.prototype.getElementById;\nexport let elementQuerySelector = Element.prototype.querySelector;\nexport let fragmentQuerySelector = DocumentFragment.prototype.querySelector;\nexport let documentQuerySelector = Document.prototype.querySelector;\nexport let querySelector = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelector.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelector.call(this, selector);\n default:\n return fragmentQuerySelector.call(this, selector);\n }\n};\nexport let elementQuerySelectorAll = Element.prototype.querySelectorAll;\nexport let fragmentQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\nexport let documentQuerySelectorAll = Document.prototype.querySelectorAll;\nexport let querySelectorAll = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelectorAll.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelectorAll.call(this, selector);\n default:\n return fragmentQuerySelectorAll.call(this, selector);\n }\n};","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n// Cribbed from ShadowDOM polyfill\n// https://github.com/webcomponents/webcomponentsjs/blob/master/src/ShadowDOM/wrappers/HTMLElement.js#L28\n/////////////////////////////////////////////////////////////////////////////\n// innerHTML and outerHTML\n\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\nlet escapeAttrRegExp = /[&\\u00A0\"]/g;\nlet escapeDataRegExp = /[&\\u00A0<>]/g;\n\nfunction escapeReplace(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n}\n\nfunction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n}\n\nfunction escapeData(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n}\n\nfunction makeSet(arr) {\n let set = {};\n for (let i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n}\n\n// http://www.whatwg.org/specs/web-apps/current-work/#void-elements\nlet voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nlet plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n]);\n\n/**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\nexport function getOuterHTML(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n let tagName = node.localName;\n let s = '<' + tagName;\n let attrs = node.attributes;\n for (let i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n let data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Function=} callback\n */\nexport function getInnerHTML(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n let s = '';\n let c$ = callback ? callback(node) : node.childNodes;\n for (let i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {getInnerHTML} from './innerHTML.js';\n\nlet nodeWalker = document.createTreeWalker(document, NodeFilter.SHOW_ALL,\n null, false);\n\nlet elementWalker = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT,\n null, false);\n\nexport function parentNode(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.parentNode();\n}\n\nexport function firstChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.firstChild();\n}\n\nexport function lastChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.lastChild();\n}\n\nexport function previousSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.previousSibling();\n}\n\nexport function nextSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.nextSibling();\n}\n\nexport function childNodes(node) {\n let nodes = [];\n nodeWalker.currentNode = node;\n let n = nodeWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = nodeWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function parentElement(node) {\n elementWalker.currentNode = node;\n return elementWalker.parentNode();\n}\n\nexport function firstElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.firstChild();\n}\n\nexport function lastElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.lastChild();\n}\n\nexport function previousElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.previousSibling();\n}\n\nexport function nextElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.nextSibling();\n}\n\nexport function children(node) {\n let nodes = [];\n elementWalker.currentNode = node;\n let n = elementWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = elementWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function innerHTML(node) {\n return getInnerHTML(node, (n) => childNodes(n));\n}\n\nexport function textContent(node) {\n /* eslint-disable no-case-declarations */\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n let textWalker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT,\n null, false);\n let content = '', n;\n while ( (n = textWalker.nextNode()) ) {\n // TODO(sorvell): can't use textContent since we patch it on Node.prototype!\n // However, should probably patch it only on element.\n content += n.nodeValue;\n }\n return content;\n default:\n return node.nodeValue;\n }\n /* eslint-enable */\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport * as utils from './utils.js';\n\nconst hasDescriptors = utils.settings.hasDescriptors;\n\n// Find descriptor on the \"lowest\" native prototype. Safe as these are not\n// overridden and we call these on nodes.\nconst nativeProtos = [Node.prototype, Element.prototype, HTMLElement.prototype];\n// note, avoid Array.find for IE11 compat.\nfunction findNativeProtoWithDescriptor(name) {\n for (let i=0; i < nativeProtos.length; i++) {\n const proto = nativeProtos[i];\n if (proto.hasOwnProperty(name)) {\n return proto;\n }\n }\n}\nfunction findNodeDescriptor(name) {\n const proto = findNativeProtoWithDescriptor(name);\n if (!proto) {\n throw Error(`Could not find descriptor for ${name}`);\n }\n return Object.getOwnPropertyDescriptor(proto, name);\n}\n\nexport const nodeAccessors = hasDescriptors ? {\n parentNode: findNodeDescriptor('parentNode'),\n firstChild: findNodeDescriptor('firstChild'),\n lastChild: findNodeDescriptor('lastChild'),\n previousSibling: findNodeDescriptor('previousSibling'),\n nextSibling: findNodeDescriptor('nextSibling'),\n childNodes: findNodeDescriptor('childNodes'),\n parentElement: findNodeDescriptor('parentElement'),\n previousElementSibling: findNodeDescriptor('previousElementSibling'),\n nextElementSibling: findNodeDescriptor('nextElementSibling'),\n innerHTML: findNodeDescriptor('innerHTML'),\n textContent: findNodeDescriptor('textContent'),\n firstElementChild: findNodeDescriptor('firstElementChild'),\n lastElementChild: findNodeDescriptor('lastElementChild'),\n children: findNodeDescriptor('children'),\n} : {};\n\nexport const fragmentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'children')\n} : {};\n\nexport const documentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n Document.prototype, 'children')\n} : {};\n\nexport function parentNode(node) {\n return nodeAccessors.parentNode.get.call(node);\n}\n\nexport function firstChild(node) {\n return nodeAccessors.firstChild.get.call(node);\n}\n\nexport function lastChild(node) {\n return nodeAccessors.lastChild.get.call(node);\n}\n\nexport function previousSibling(node) {\n return nodeAccessors.previousSibling.get.call(node);\n}\n\nexport function nextSibling(node) {\n return nodeAccessors.nextSibling.get.call(node);\n}\n\nexport function childNodes(node) {\n return Array.prototype.slice.call(nodeAccessors.childNodes.get.call(node));\n}\n\nexport function parentElement(node) {\n return nodeAccessors.parentElement.get.call(node);\n}\n\nexport function previousElementSibling(node) {\n return nodeAccessors.previousElementSibling.get.call(node);\n}\n\nexport function nextElementSibling(node) {\n return nodeAccessors.nextElementSibling.get.call(node);\n}\n\nexport function innerHTML(node) {\n return nodeAccessors.innerHTML.get.call(node);\n}\n\nexport function textContent(node) {\n return nodeAccessors.textContent.get.call(node);\n}\n\nexport function children(node) {\n let children;\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n children = fragmentAccessors.children.get.call(node);\n break;\n case Node.DOCUMENT_NODE:\n children = documentAccessors.children.get.call(node);\n break;\n default:\n children = nodeAccessors.children.get.call(node);\n break;\n }\n return Array.prototype.slice.call(children);\n}\n\nexport function firstElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.firstElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.firstElementChild.get.call(node);\n default:\n return nodeAccessors.firstElementChild.get.call(node);\n }\n}\n\nexport function lastElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.lastElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.lastElementChild.get.call(node);\n default:\n return nodeAccessors.lastElementChild.get.call(node);\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as nativeTreeWalker from './native-tree-walker.js';\nimport * as nativeTreeAccessors from './native-tree-accessors.js';\nimport * as utils from './utils.js';\n\nexport const accessors = utils.settings.useNativeAccessors ?\n nativeTreeAccessors : nativeTreeWalker;","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {getInnerHTML} from './innerHTML.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {nodeAccessors as nativeAccessors} from './native-tree-accessors.js';\nimport {contains as nativeContains} from './native-methods.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nfunction clearNode(node) {\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n}\n\nconst hasDescriptors = utils.settings.hasDescriptors;\nconst inertDoc = document.implementation.createHTMLDocument('inert');\n\nconst nativeIsConnectedAccessors =\n/** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Node.prototype, 'isConnected')\n);\n\nconst nativeIsConnected = nativeIsConnectedAccessors && nativeIsConnectedAccessors.get;\n\nconst nativeActiveElementDescriptor =\n /** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Document.prototype, 'activeElement')\n );\nfunction getDocumentActiveElement() {\n if (nativeActiveElementDescriptor && nativeActiveElementDescriptor.get) {\n return nativeActiveElementDescriptor.get.call(document);\n } else if (!utils.settings.hasDescriptors) {\n return document.activeElement;\n }\n}\n\nfunction activeElementForNode(node) {\n let active = getDocumentActiveElement();\n // In IE11, activeElement might be an empty object if the document is\n // contained in an iframe.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10998788/\n if (!active || !active.nodeType) {\n return null;\n }\n let isShadyRoot = !!(utils.isShadyRoot(node));\n if (node !== document) {\n // If this node isn't a document or shady root, then it doesn't have\n // an active element.\n if (!isShadyRoot) {\n return null;\n }\n // If this shady root's host is the active element or the active\n // element is not a descendant of the host (in the composed tree),\n // then it doesn't have an active element.\n if (node.host === active ||\n !nativeContains.call(node.host, active)) {\n return null;\n }\n }\n // This node is either the document or a shady root of which the active\n // element is a (composed) descendant of its host; iterate upwards to\n // find the active element's most shallow host within it.\n let activeRoot = utils.ownerShadyRootForNode(active);\n while (activeRoot && activeRoot !== node) {\n active = activeRoot.host;\n activeRoot = utils.ownerShadyRootForNode(active);\n }\n if (node === document) {\n // This node is the document, so activeRoot should be null.\n return activeRoot ? null : active;\n } else {\n // This node is a non-document shady root, and it should be\n // activeRoot.\n return activeRoot === node ? active : null;\n }\n}\n\nlet OutsideAccessors = {\n\n parentElement: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n let l = nodeData && nodeData.parentNode;\n if (l && l.nodeType !== Node.ELEMENT_NODE) {\n l = null;\n }\n return l !== undefined ? l : nativeTree.parentElement(this);\n },\n configurable: true\n },\n\n parentNode: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.parentNode;\n return l !== undefined ? l : nativeTree.parentNode(this);\n },\n configurable: true\n },\n\n nextSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.nextSibling;\n return l !== undefined ? l : nativeTree.nextSibling(this);\n },\n configurable: true\n },\n\n previousSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.previousSibling;\n return l !== undefined ? l : nativeTree.previousSibling(this);\n },\n configurable: true\n },\n\n // fragment, element, document\n nextElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.nextSibling !== undefined) {\n let n = this.nextSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.nextElementSibling(this);\n }\n },\n configurable: true\n },\n\n previousElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.previousSibling !== undefined) {\n let n = this.previousSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.previousElementSibling(this);\n }\n },\n configurable: true\n }\n\n};\n\nexport const ClassNameAccessor = {\n className: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return this.getAttribute('class') || '';\n },\n /**\n * @this {HTMLElement}\n */\n set(value) {\n this.setAttribute('class', value);\n },\n configurable: true\n }\n}\n\nexport const IsConnectedAccessor = {\n\n isConnected: {\n /**\n * @this {Node}\n */\n get() {\n if (nativeIsConnected && nativeIsConnected.call(this)) {\n return true;\n }\n if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {\n return false;\n }\n // Fast path for distributed nodes.\n const ownerDocument = this.ownerDocument;\n if (utils.hasDocumentContains) {\n if (nativeContains.call(ownerDocument, this)) {\n return true;\n }\n } else if (ownerDocument.documentElement &&\n nativeContains.call(ownerDocument.documentElement, this)) {\n return true;\n }\n // Slow path for non-distributed nodes.\n let node = this;\n while (node && !(node instanceof Document)) {\n node = node.parentNode || (utils.isShadyRoot(node) ? /** @type {ShadowRoot} */(node).host : undefined);\n }\n return !!(node && node instanceof Document);\n },\n configurable: true\n }\n};\n\nlet InsideAccessors = {\n\n childNodes: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let childNodes;\n if (utils.isTrackingLogicalChildNodes(this)) {\n const nodeData = shadyDataForNode(this);\n if (!nodeData.childNodes) {\n nodeData.childNodes = [];\n for (let n=this.firstChild; n; n=n.nextSibling) {\n nodeData.childNodes.push(n);\n }\n }\n childNodes = nodeData.childNodes;\n } else {\n childNodes = nativeTree.childNodes(this);\n }\n childNodes.item = function(index) {\n return childNodes[index];\n }\n return childNodes;\n },\n configurable: true\n },\n\n childElementCount: {\n /** @this {HTMLElement} */\n get() {\n return this.children.length;\n },\n configurable: true\n },\n\n firstChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.firstChild;\n return l !== undefined ? l : nativeTree.firstChild(this);\n },\n configurable: true\n },\n\n lastChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.lastChild;\n return l !== undefined ? l : nativeTree.lastChild(this);\n },\n configurable: true\n },\n\n textContent: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n let tc = [];\n for (let i = 0, cn = this.childNodes, c; (c = cn[i]); i++) {\n if (c.nodeType !== Node.COMMENT_NODE) {\n tc.push(c.textContent);\n }\n }\n return tc.join('');\n } else {\n return nativeTree.textContent(this);\n }\n },\n /**\n * @this {HTMLElement}\n * @param {string} text\n */\n set(text) {\n if (typeof text === 'undefined' || text === null) {\n text = ''\n }\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n if (!utils.isTrackingLogicalChildNodes(this) && hasDescriptors) {\n // may be removing a nested slot but fast path if we know we are not.\n const firstChild = this.firstChild;\n if (firstChild != this.lastChild ||\n (firstChild && firstChild.nodeType != Node.TEXT_NODE)) {\n clearNode(this);\n }\n nativeAccessors.textContent.set.call(this, text);\n } else {\n clearNode(this);\n // Document fragments must have no childnodes if setting a blank string\n if (text.length > 0 || this.nodeType === Node.ELEMENT_NODE) {\n this.appendChild(document.createTextNode(text));\n }\n }\n break;\n default:\n // TODO(sorvell): can't do this if patch nodeValue.\n this.nodeValue = text;\n break;\n }\n },\n configurable: true\n },\n\n // fragment, element, document\n firstElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.firstChild !== undefined) {\n let n = this.firstChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.firstElementChild(this);\n }\n },\n configurable: true\n },\n\n lastElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.lastChild !== undefined) {\n let n = this.lastChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.lastElementChild(this);\n }\n },\n configurable: true\n },\n\n children: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let children;\n if (utils.isTrackingLogicalChildNodes(this)) {\n children = Array.prototype.filter.call(this.childNodes, function(n) {\n return (n.nodeType === Node.ELEMENT_NODE);\n });\n } else {\n children = nativeTree.children(this);\n }\n children.item = function(index) {\n return children[index];\n }\n return children;\n },\n configurable: true\n },\n\n // element (HTMLElement on IE11)\n innerHTML: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n return getInnerHTML(content);\n } else {\n return nativeTree.innerHTML(this);\n }\n },\n /**\n * @this {HTMLElement}\n */\n set(text) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n clearNode(content);\n let containerName = this.localName;\n // avoid creating a template so we don't have to pull nodes form `.content`\n if (!containerName || containerName === 'template') {\n containerName = 'div';\n }\n const htmlContainer = inertDoc.createElement(containerName);\n if (hasDescriptors) {\n nativeAccessors.innerHTML.set.call(htmlContainer, text);\n } else {\n htmlContainer.innerHTML = text;\n }\n while (htmlContainer.firstChild) {\n content.appendChild(htmlContainer.firstChild);\n }\n },\n configurable: true\n }\n\n};\n\n// Note: Can be patched on element prototype on all browsers.\n// Must be patched on instance on browsers that support native Shadow DOM\n// but do not have builtin accessors (old Chrome).\nexport let ShadowRootAccessor = {\n\n shadowRoot: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n return nodeData && nodeData.publicRoot || null;\n },\n configurable: true\n }\n};\n\n// Note: Can be patched on document prototype on browsers with builtin accessors.\n// Must be patched separately on simulated ShadowRoot.\n// Must be patched as `_activeElement` on browsers without builtin accessors.\nexport let ActiveElementAccessor = {\n\n activeElement: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return activeElementForNode(this);\n },\n /**\n * @this {HTMLElement}\n */\n set() {},\n configurable: true\n }\n\n};\n\n// patch a group of descriptors on an object only if it exists or if the `force`\n// argument is true.\n/**\n * @param {!Object} obj\n * @param {!Object} descriptors\n * @param {boolean=} force\n */\nfunction patchAccessorGroup(obj, descriptors, force) {\n for (let p in descriptors) {\n let objDesc = Object.getOwnPropertyDescriptor(obj, p);\n if ((objDesc && objDesc.configurable) ||\n (!objDesc && force)) {\n Object.defineProperty(obj, p, descriptors[p]);\n } else if (force) {\n console.warn('Could not define', p, 'on', obj); // eslint-disable-line no-console\n }\n }\n}\n\n// patch dom accessors on proto where they exist\nexport function patchAccessors(proto) {\n patchAccessorGroup(proto, OutsideAccessors);\n patchAccessorGroup(proto, ClassNameAccessor);\n patchAccessorGroup(proto, InsideAccessors);\n patchAccessorGroup(proto, ActiveElementAccessor);\n}\n\nexport function patchShadowRootAccessors(proto) {\n proto.__proto__ = DocumentFragment.prototype;\n // ensure element descriptors (IE/Edge don't have em)\n patchAccessorGroup(proto, OutsideAccessors, true);\n patchAccessorGroup(proto, InsideAccessors, true);\n patchAccessorGroup(proto, ActiveElementAccessor, true);\n // Ensure native properties are all safely wrapped since ShadowRoot is not an\n // actual DocumentFragment instance.\n Object.defineProperties(proto, {\n nodeType: {\n value: Node.DOCUMENT_FRAGMENT_NODE,\n configurable: true\n },\n nodeName: {\n value: '#document-fragment',\n configurable: true\n },\n nodeValue: {\n value: null,\n configurable: true\n }\n });\n // make undefined\n [\n 'localName',\n 'namespaceURI',\n 'prefix'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n value: undefined,\n configurable: true\n });\n });\n // defer properties to host\n [\n 'ownerDocument',\n 'baseURI',\n 'isConnected'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n get() {\n return this.host[prop];\n },\n configurable: true\n });\n });\n}\n\n// ensure an element has patched \"outside\" accessors; no-op when not needed\nexport let patchOutsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__outsideAccessors) {\n sd.__outsideAccessors = true;\n patchAccessorGroup(element, OutsideAccessors, true);\n patchAccessorGroup(element, ClassNameAccessor, true);\n }\n }\n\n// ensure an element has patched \"inside\" accessors; no-op when not needed\nexport let patchInsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__insideAccessors) {\n patchAccessorGroup(element, InsideAccessors, true);\n patchAccessorGroup(element, ShadowRootAccessor, true);\n }\n }\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {calculateSplices} from './array-splice.js';\nimport * as utils from './utils.js';\nimport {enqueue} from './flush.js';\nimport {recordChildNodes} from './logical-tree.js';\nimport {removeChild, insertBefore, dispatchEvent} from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode, childNodes} = accessors;\n\n// Do not export this object. It must be passed as the first argument to the\n// ShadyRoot constructor in `attachShadow` to prevent the constructor from\n// throwing. This prevents the user from being able to manually construct a\n// ShadyRoot (i.e. `new ShadowRoot()`).\nconst ShadyRootConstructionToken = {};\n\nconst CATCHALL_NAME = '__catchall';\nconst SHADYROOT_NAME = 'ShadyRoot';\n\nconst MODE_CLOSED = 'closed';\n\nfunction ancestorList(node) {\n let ancestors = [];\n do {\n ancestors.unshift(node);\n } while ((node = node.parentNode));\n return ancestors;\n}\n\n/**\n * @constructor\n * @extends {ShadowRoot}\n */\nexport class ShadyRoot {\n\n constructor(token, host, options) {\n if (token !== ShadyRootConstructionToken) {\n throw new TypeError('Illegal constructor');\n }\n // NOTE: set a fake local name so this element can be\n // distinguished from a DocumentFragment when patching.\n // FF doesn't allow this to be `localName`\n this._localName = SHADYROOT_NAME;\n const c$ = childNodes(host);\n // root <=> host\n this.host = host;\n this._mode = options && options.mode;\n // logical dom setup\n recordChildNodes(host, c$);\n const hostData = shadyDataForNode(host);\n hostData.root = this;\n hostData.publicRoot = this._mode !== MODE_CLOSED ? this : null;\n // setup root\n const rootData = ensureShadyDataForNode(this);\n rootData.firstChild = rootData.lastChild =\n rootData.parentNode = rootData.nextSibling =\n rootData.previousSibling = null;\n rootData.childNodes = [];\n // state flags\n this._renderPending = false;\n this._hasRendered = false;\n // marsalled lazily\n this._slotList = null;\n this._slotMap = null;\n this._pendingSlots = null;\n // fast path initial render: remove existing physical dom.\n for (let i=0, l=c$.length; i < l; i++) {\n removeChild.call(host, c$[i])\n }\n }\n\n // async render\n _asyncRender() {\n if (!this._renderPending) {\n this._renderPending = true;\n enqueue(() => this._render());\n }\n }\n\n // returns the oldest renderPending ancestor root.\n _getRenderRoot() {\n let renderRoot;\n let root = this;\n while (root) {\n if (root._renderPending) {\n renderRoot = root;\n }\n root = root._rendererForHost();\n }\n return renderRoot;\n }\n\n // Returns the shadyRoot `this.host` if `this.host`\n // has children that require distribution.\n _rendererForHost() {\n let root = this.host.getRootNode();\n if (utils.isShadyRoot(root)) {\n let c$ = this.host.childNodes;\n for (let i=0, c; i < c$.length; i++) {\n c = c$[i];\n if (this._isInsertionPoint(c)) {\n return root;\n }\n }\n }\n }\n\n _render() {\n const root = this._getRenderRoot();\n if (root) {\n root['_renderRoot']();\n }\n }\n\n // NOTE: avoid renaming to ease testability.\n ['_renderRoot']() {\n this._renderPending = false;\n if (this._slotList) {\n this._distribute();\n this._compose();\n }\n this._hasRendered = true;\n }\n\n _distribute() {\n this._validateSlots();\n // capture # of previously assigned nodes to help determine if dirty.\n for (let i=0, slot; i < this._slotList.length; i++) {\n slot = this._slotList[i];\n this._clearSlotAssignedNodes(slot);\n }\n // distribute host children.\n for (let n=this.host.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n);\n }\n // fallback content, slotchange, and dirty roots\n for (let i=0; i < this._slotList.length; i++) {\n const slot = this._slotList[i];\n const slotData = shadyDataForNode(slot);\n // distribute fallback content\n if (!slotData.assignedNodes.length) {\n for (let n=slot.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n, slot);\n }\n }\n const slotParentData = shadyDataForNode(slot.parentNode);\n const slotParentRoot = slotParentData && slotParentData.root;\n if (slotParentRoot && slotParentRoot._hasInsertionPoint()) {\n slotParentRoot['_renderRoot']();\n }\n this._addAssignedToFlattenedNodes(slotData.flattenedNodes,\n slotData.assignedNodes);\n let prevAssignedNodes = slotData._previouslyAssignedNodes;\n if (prevAssignedNodes) {\n for (let i=0; i < prevAssignedNodes.length; i++) {\n shadyDataForNode(prevAssignedNodes[i])._prevAssignedSlot = null;\n }\n slotData._previouslyAssignedNodes = null;\n // dirty if previously less assigned nodes than previously assigned.\n if (prevAssignedNodes.length > slotData.assignedNodes.length) {\n slotData.dirty = true;\n }\n }\n /* Note: A slot is marked dirty whenever a node is newly assigned to it\n or a node is assigned to a different slot (done in `_distributeNodeToSlot`)\n or if the number of nodes assigned to the slot has decreased (done above);\n */\n if (slotData.dirty) {\n slotData.dirty = false;\n this._fireSlotChange(slot);\n }\n }\n }\n\n /**\n * Distributes given `node` to the appropriate slot based on its `slot`\n * attribute. If `forcedSlot` is given, then the node is distributed to the\n * `forcedSlot`.\n * Note: slot to which the node is assigned will be marked dirty for firing\n * `slotchange`.\n * @param {Node} node\n * @param {Node=} forcedSlot\n *\n */\n _distributeNodeToSlot(node, forcedSlot) {\n const nodeData = ensureShadyDataForNode(node);\n let oldSlot = nodeData._prevAssignedSlot;\n nodeData._prevAssignedSlot = null;\n let slot = forcedSlot;\n if (!slot) {\n let name = node.slot || CATCHALL_NAME;\n const list = this._slotMap[name];\n slot = list && list[0];\n }\n if (slot) {\n const slotData = ensureShadyDataForNode(slot);\n slotData.assignedNodes.push(node);\n nodeData.assignedSlot = slot;\n } else {\n nodeData.assignedSlot = undefined;\n }\n if (oldSlot !== nodeData.assignedSlot) {\n if (nodeData.assignedSlot) {\n ensureShadyDataForNode(nodeData.assignedSlot).dirty = true;\n }\n }\n }\n\n /**\n * Clears the assignedNodes tracking data for a given `slot`. Note, the current\n * assigned node data is tracked (via _previouslyAssignedNodes and\n * _prevAssignedSlot) to see if `slotchange` should fire. This data may be out\n * of date at this time because the assigned nodes may have already been\n * distributed to another root. This is ok since this data is only used to\n * track changes.\n * @param {HTMLSlotElement} slot\n */\n _clearSlotAssignedNodes(slot) {\n const slotData = shadyDataForNode(slot);\n let n$ = slotData.assignedNodes;\n slotData.assignedNodes = [];\n slotData.flattenedNodes = [];\n slotData._previouslyAssignedNodes = n$;\n if (n$) {\n for (let i=0; i < n$.length; i++) {\n let n = shadyDataForNode(n$[i]);\n n._prevAssignedSlot = n.assignedSlot;\n // only clear if it was previously set to this slot;\n // this helps ensure that if the node has otherwise been distributed\n // ignore it.\n if (n.assignedSlot === slot) {\n n.assignedSlot = null;\n }\n }\n }\n }\n\n _addAssignedToFlattenedNodes(flattened, assigned) {\n for (let i=0, n; (i<assigned.length) && (n=assigned[i]); i++) {\n if (n.localName == 'slot') {\n const nestedAssigned = shadyDataForNode(n).assignedNodes;\n if (nestedAssigned && nestedAssigned.length) {\n this._addAssignedToFlattenedNodes(flattened, nestedAssigned);\n }\n } else {\n flattened.push(assigned[i]);\n }\n }\n }\n\n _fireSlotChange(slot) {\n // NOTE: cannot bubble correctly here so not setting bubbles: true\n // Safari tech preview does not bubble but chrome does\n // Spec says it bubbles (https://dom.spec.whatwg.org/#mutation-observers)\n dispatchEvent.call(slot, new Event('slotchange'));\n const slotData = shadyDataForNode(slot);\n if (slotData.assignedSlot) {\n this._fireSlotChange(slotData.assignedSlot);\n }\n }\n\n // Reify dom such that it is at its correct rendering position\n // based on logical distribution.\n // NOTE: here we only compose parents of <slot> elements and not the\n // shadowRoot into the host. The latter is performend via a fast path\n // in the `logical-mutation`.insertBefore.\n _compose() {\n const slots = this._slotList;\n let composeList = [];\n for (let i=0; i < slots.length; i++) {\n const parent = slots[i].parentNode;\n /* compose node only if:\n (1) parent does not have a shadowRoot since shadowRoot has already\n composed into the host\n (2) we're not already composing it\n [consider (n^2) but rare better than Set]\n */\n const parentData = shadyDataForNode(parent);\n if (!(parentData && parentData.root) &&\n composeList.indexOf(parent) < 0) {\n composeList.push(parent);\n }\n }\n for (let i=0; i < composeList.length; i++) {\n const node = composeList[i];\n const targetNode = node === this ? this.host : node;\n this._updateChildNodes(targetNode, this._composeNode(node));\n }\n }\n\n // Returns the list of nodes which should be rendered inside `node`.\n _composeNode(node) {\n let children = [];\n let c$ = node.childNodes;\n for (let i = 0; i < c$.length; i++) {\n let child = c$[i];\n // Note: if we see a slot here, the nodes are guaranteed to need to be\n // composed here. This is because if there is redistribution, it has\n // already been handled by this point.\n if (this._isInsertionPoint(child)) {\n let flattenedNodes = shadyDataForNode(child).flattenedNodes;\n for (let j = 0; j < flattenedNodes.length; j++) {\n let distributedNode = flattenedNodes[j];\n children.push(distributedNode);\n }\n } else {\n children.push(child);\n }\n }\n return children;\n }\n\n _isInsertionPoint(node) {\n return node.localName == 'slot';\n }\n\n // Ensures that the rendered node list inside `container` is `children`.\n _updateChildNodes(container, children) {\n let composed = childNodes(container);\n let splices = calculateSplices(children, composed);\n // process removals\n for (let i=0, d=0, s; (i<splices.length) && (s=splices[i]); i++) {\n for (let j=0, n; (j < s.removed.length) && (n=s.removed[j]); j++) {\n // check if the node is still where we expect it is before trying\n // to remove it; this can happen if we move a node and\n // then schedule its previous host for distribution resulting in\n // the node being removed here.\n if (parentNode(n) === container) {\n removeChild.call(container, n);\n }\n // TODO(sorvell): avoid the need for splicing here.\n composed.splice(s.index + d, 1);\n }\n d -= s.addedCount;\n }\n // process adds\n for (let i=0, s, next; (i<splices.length) && (s=splices[i]); i++) { //eslint-disable-line no-redeclare\n next = composed[s.index];\n for (let j=s.index, n; j < s.index + s.addedCount; j++) {\n n = children[j];\n insertBefore.call(container, n, next);\n composed.splice(j, 0, n);\n }\n }\n }\n\n _ensureSlotData() {\n this._pendingSlots = this._pendingSlots || [];\n this._slotList = this._slotList || [];\n this._slotMap = this._slotMap || {};\n }\n\n _addSlots(slots) {\n this._ensureSlotData();\n this._pendingSlots.push(...slots);\n }\n\n _validateSlots() {\n if (this._pendingSlots && this._pendingSlots.length) {\n this._mapSlots(this._pendingSlots);\n this._pendingSlots = [];\n }\n }\n\n /**\n * Adds the given slots. Slots are maintained in an dom-ordered list.\n * In addition a map of name to slot is updated.\n */\n _mapSlots(slots) {\n let slotNamesToSort;\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n // ensure insertionPoints's and their parents have logical dom info.\n // save logical tree info\n // a. for shadyRoot\n // b. for insertion points (fallback)\n // c. for parents of insertion points\n recordChildNodes(slot);\n recordChildNodes(slot.parentNode);\n let name = this._nameForSlot(slot);\n if (this._slotMap[name]) {\n slotNamesToSort = slotNamesToSort || {};\n slotNamesToSort[name] = true;\n this._slotMap[name].push(slot);\n } else {\n this._slotMap[name] = [slot];\n }\n this._slotList.push(slot);\n }\n if (slotNamesToSort) {\n for (let n in slotNamesToSort) {\n this._slotMap[n] = this._sortSlots(this._slotMap[n]);\n }\n }\n }\n\n _nameForSlot(slot) {\n const name = slot['name'] || slot.getAttribute('name') || CATCHALL_NAME;\n slot.__slotName = name;\n return name;\n }\n\n /**\n * Slots are kept in an ordered list. Slots with the same name\n * are sorted here by tree order.\n */\n _sortSlots(slots) {\n // NOTE: Cannot use `compareDocumentPosition` because it's not polyfilled,\n // but the code here could be used to polyfill the preceeding/following info\n // in `compareDocumentPosition`.\n return slots.sort((a, b) => {\n let listA = ancestorList(a);\n let listB = ancestorList(b);\n for (var i=0; i < listA.length; i++) {\n let nA = listA[i];\n let nB = listB[i];\n if (nA !== nB) {\n let c$ = Array.from(nA.parentNode.childNodes);\n return c$.indexOf(nA) - c$.indexOf(nB);\n }\n }\n });\n }\n\n /**\n * Removes from tracked slot data any slots contained within `container` and\n * then updates the tracked data (_slotList and _slotMap).\n * Any removed slots also have their `assignedNodes` removed from comopsed dom.\n */\n _removeContainedSlots(container) {\n if (!this._slotList) {\n return;\n }\n this._validateSlots();\n let didRemove;\n const map = this._slotMap;\n for (let n in map) {\n let slots = map[n];\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n if (utils.contains(container, slot)) {\n slots.splice(i, 1);\n const x = this._slotList.indexOf(slot);\n if (x >= 0) {\n this._slotList.splice(x, 1);\n }\n i--;\n this._removeFlattenedNodes(slot);\n didRemove = true;\n }\n }\n }\n return didRemove;\n }\n\n _updateSlotName(slot) {\n if (!this._slotList) {\n return;\n }\n const oldName = slot.__slotName;\n const name = this._nameForSlot(slot);\n if (name === oldName) {\n return;\n }\n // remove from existing tracking\n let slots = this._slotMap[oldName];\n const i = slots.indexOf(slot);\n if (i >= 0) {\n slots.splice(i, 1);\n }\n // add to new location and sort if nedessary\n let list = this._slotMap[name] || (this._slotMap[name] = []);\n list.push(slot);\n if (list.length > 1) {\n this._slotMap[name] = this._sortSlots(list);\n }\n }\n\n _removeFlattenedNodes(slot) {\n const data = shadyDataForNode(slot);\n let n$ = data.flattenedNodes;\n if (n$) {\n for (let i=0; i<n$.length; i++) {\n let node = n$[i];\n let parent = parentNode(node);\n if (parent) {\n removeChild.call(parent, node);\n }\n }\n }\n data.flattenedNodes = [];\n data.assignedNodes = [];\n }\n\n _hasInsertionPoint() {\n this._validateSlots();\n return Boolean(this._slotList && this._slotList.length);\n }\n}\n\n/**\n Implements a pared down version of ShadowDOM's scoping, which is easy to\n polyfill across browsers.\n*/\nexport function attachShadow(host, options) {\n if (!host) {\n throw 'Must provide a host.';\n }\n if (!options) {\n throw 'Not enough arguments.'\n }\n return new ShadyRoot(ShadyRootConstructionToken, host, options);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {flush} from './flush.js';\nimport {dispatchEvent, querySelectorAll} from './native-methods.js';\nimport * as mutation from './logical-mutation.js';\nimport {ActiveElementAccessor, ShadowRootAccessor, patchAccessors, patchShadowRootAccessors, IsConnectedAccessor} from './patch-accessors.js';\nimport {addEventListener, removeEventListener} from './patch-events.js';\nimport {attachShadow, ShadyRoot} from './attach-shadow.js';\nimport {shadyDataForNode} from './shady-data.js';\n\nfunction getAssignedSlot(node) {\n mutation.renderRootNode(node);\n const nodeData = shadyDataForNode(node);\n return nodeData && nodeData.assignedSlot || null;\n}\n\nlet windowMixin = {\n\n // NOTE: ensure these methods are bound to `window` so that `this` is correct\n // when called directly from global context without a receiver; e.g.\n // `addEventListener(...)`.\n addEventListener: addEventListener.bind(window),\n\n removeEventListener: removeEventListener.bind(window)\n\n};\n\nlet nodeMixin = {\n\n addEventListener: addEventListener,\n\n removeEventListener: removeEventListener,\n\n appendChild(node) {\n return mutation.insertBefore(this, node);\n },\n\n insertBefore(node, ref_node) {\n return mutation.insertBefore(this, node, ref_node);\n },\n\n removeChild(node) {\n return mutation.removeChild(this, node);\n },\n\n /**\n * @this {Node}\n */\n replaceChild(node, ref_node) {\n mutation.insertBefore(this, node, ref_node);\n mutation.removeChild(this, ref_node);\n return node;\n },\n\n /**\n * @this {Node}\n */\n cloneNode(deep) {\n return mutation.cloneNode(this, deep);\n },\n\n /**\n * @this {Node}\n */\n getRootNode(options) {\n return mutation.getRootNode(this, options);\n },\n\n contains(node) {\n return utils.contains(this, node);\n },\n\n /**\n * @this {Node}\n */\n dispatchEvent(event) {\n flush();\n return dispatchEvent.call(this, event);\n }\n\n};\n\n// NOTE: we can do this regardless of the browser supporting native accessors\n// since this is always \"new\" in that case.\nObject.defineProperties(nodeMixin, IsConnectedAccessor);\n\n// NOTE: For some reason 'Text' redefines 'assignedSlot'\nlet textMixin = {\n /**\n * @this {Text}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n};\n\nlet fragmentMixin = {\n\n // TODO(sorvell): consider doing native QSA and filtering results.\n /**\n * @this {DocumentFragment}\n */\n querySelector(selector) {\n // match selector and halt on first result.\n let result = mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n },\n\n /**\n * @this {DocumentFragment}\n */\n // TODO(sorvell): `useNative` option relies on native querySelectorAll and\n // misses distributed nodes, see\n // https://github.com/webcomponents/shadydom/pull/210#issuecomment-361435503\n querySelectorAll(selector, useNative) {\n if (useNative) {\n const o = Array.prototype.slice.call(querySelectorAll(this, selector));\n const root = this.getRootNode();\n return o.filter(e => e.getRootNode() == root);\n }\n return mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n });\n }\n\n};\n\nlet slotMixin = {\n\n /**\n * @this {HTMLSlotElement}\n */\n assignedNodes(options) {\n if (this.localName === 'slot') {\n mutation.renderRootNode(this);\n const nodeData = shadyDataForNode(this);\n return nodeData ?\n ((options && options.flatten ? nodeData.flattenedNodes :\n nodeData.assignedNodes) || []) :\n [];\n }\n }\n\n};\n\nlet elementMixin = utils.extendAll({\n\n /**\n * @this {HTMLElement}\n */\n setAttribute(name, value) {\n mutation.setAttribute(this, name, value);\n },\n\n /**\n * @this {HTMLElement}\n */\n removeAttribute(name) {\n mutation.removeAttribute(this, name);\n },\n\n /**\n * @this {HTMLElement}\n */\n attachShadow(options) {\n return attachShadow(this, options);\n },\n\n /**\n * @this {HTMLElement}\n */\n get slot() {\n return this.getAttribute('slot');\n },\n\n /**\n * @this {HTMLElement}\n */\n set slot(value) {\n mutation.setAttribute(this, 'slot', value);\n },\n\n /**\n * @this {HTMLElement}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n\n}, fragmentMixin, slotMixin);\n\nObject.defineProperties(elementMixin, ShadowRootAccessor);\n\nlet documentMixin = utils.extendAll({\n /**\n * @this {Document}\n */\n importNode(node, deep) {\n return mutation.importNode(node, deep);\n },\n\n /**\n * @this {Document}\n */\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n\n}, fragmentMixin);\n\nObject.defineProperties(documentMixin, {\n '_activeElement': ActiveElementAccessor.activeElement\n});\n\nlet nativeBlur = HTMLElement.prototype.blur;\n\nlet htmlElementMixin = utils.extendAll({\n /**\n * @this {HTMLElement}\n */\n blur() {\n const nodeData = shadyDataForNode(this);\n let root = nodeData && nodeData.root;\n let shadowActive = root && root.activeElement;\n if (shadowActive) {\n shadowActive.blur();\n } else {\n nativeBlur.call(this);\n }\n }\n});\n\nconst shadowRootMixin = {\n addEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.addEventListener(type, fn, optionsOrCapture);\n },\n\n removeEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.removeEventListener(type, fn, optionsOrCapture);\n },\n\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n}\n\nfunction patchBuiltin(proto, obj) {\n let n$ = Object.getOwnPropertyNames(obj);\n for (let i=0; i < n$.length; i++) {\n let n = n$[i];\n let d = Object.getOwnPropertyDescriptor(obj, n);\n // NOTE: we prefer writing directly here because some browsers\n // have descriptors that are writable but not configurable (e.g.\n // `appendChild` on older browsers)\n if (d.value) {\n proto[n] = d.value;\n } else {\n Object.defineProperty(proto, n, d);\n }\n }\n}\n\n// Apply patches to builtins (e.g. Element.prototype). Some of these patches\n// can be done unconditionally (mostly methods like\n// `Element.prototype.appendChild`) and some can only be done when the browser\n// has proper descriptors on the builtin prototype\n// (e.g. `Element.prototype.firstChild`)`. When descriptors are not available,\n// elements are individually patched when needed (see e.g.\n// `patchInside/OutsideElementAccessors` in `patch-accessors.js`).\nexport function patchBuiltins() {\n let nativeHTMLElement =\n (window['customElements'] && window['customElements']['nativeHTMLElement']) ||\n HTMLElement;\n // These patches can always be done, for all supported browsers.\n patchBuiltin(ShadyRoot.prototype, shadowRootMixin);\n patchBuiltin(window.Node.prototype, nodeMixin);\n patchBuiltin(window.Window.prototype, windowMixin);\n patchBuiltin(window.Text.prototype, textMixin);\n patchBuiltin(window.DocumentFragment.prototype, fragmentMixin);\n patchBuiltin(window.Element.prototype, elementMixin);\n patchBuiltin(window.Document.prototype, documentMixin);\n if (window.HTMLSlotElement) {\n patchBuiltin(window.HTMLSlotElement.prototype, slotMixin);\n }\n patchBuiltin(nativeHTMLElement.prototype, htmlElementMixin);\n // These patches can *only* be done\n // on browsers that have proper property descriptors on builtin prototypes.\n // This includes: IE11, Edge, Chrome >= 4?; Safari >= 10, Firefox\n // On older browsers (Chrome <= 4?, Safari 9), a per element patching\n // strategy is used for patching accessors.\n if (utils.settings.hasDescriptors) {\n patchAccessors(window.Node.prototype);\n patchAccessors(window.Text.prototype);\n patchAccessors(window.DocumentFragment.prototype);\n patchAccessors(window.Element.prototype);\n patchAccessors(nativeHTMLElement.prototype);\n patchAccessors(window.Document.prototype);\n if (window.HTMLSlotElement) {\n patchAccessors(window.HTMLSlotElement.prototype);\n }\n }\n patchShadowRootAccessors(ShadyRoot.prototype);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {childNodes} = accessors;\n\nexport function recordInsertBefore(node, container, ref_node) {\n patchInsideElementAccessors(container);\n const containerData = ensureShadyDataForNode(container);\n if (containerData.firstChild !== undefined) {\n containerData.childNodes = null;\n }\n // handle document fragments\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let c$ = node.childNodes;\n for (let i=0; i < c$.length; i++) {\n linkNode(c$[i], container, ref_node);\n }\n // cleanup logical dom in doc fragment.\n const nodeData = ensureShadyDataForNode(node);\n let resetTo = (nodeData.firstChild !== undefined) ? null : undefined;\n nodeData.firstChild = nodeData.lastChild = resetTo;\n nodeData.childNodes = resetTo;\n } else {\n linkNode(node, container, ref_node);\n }\n}\n\nfunction linkNode(node, container, ref_node) {\n patchOutsideElementAccessors(node);\n ref_node = ref_node || null;\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n const ref_nodeData = ref_node ? ensureShadyDataForNode(ref_node) : null;\n // update ref_node.previousSibling <-> node\n nodeData.previousSibling = ref_node ? ref_nodeData.previousSibling :\n container.lastChild;\n let psd = shadyDataForNode(nodeData.previousSibling);\n if (psd) {\n psd.nextSibling = node;\n }\n // update node <-> ref_node\n let nsd = shadyDataForNode(nodeData.nextSibling = ref_node);\n if (nsd) {\n nsd.previousSibling = node;\n }\n // update node <-> container\n nodeData.parentNode = container;\n if (ref_node) {\n if (ref_node === containerData.firstChild) {\n containerData.firstChild = node;\n }\n } else {\n containerData.lastChild = node;\n if (!containerData.firstChild) {\n containerData.firstChild = node;\n }\n }\n // remove caching of childNodes\n containerData.childNodes = null;\n}\n\nexport function recordRemoveChild(node, container) {\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n if (node === containerData.firstChild) {\n containerData.firstChild = nodeData.nextSibling;\n }\n if (node === containerData.lastChild) {\n containerData.lastChild = nodeData.previousSibling;\n }\n let p = nodeData.previousSibling;\n let n = nodeData.nextSibling;\n if (p) {\n ensureShadyDataForNode(p).nextSibling = n;\n }\n if (n) {\n ensureShadyDataForNode(n).previousSibling = p;\n }\n // When an element is removed, logical data is no longer tracked.\n // Explicitly set `undefined` here to indicate this. This is disginguished\n // from `null` which is set if info is null.\n nodeData.parentNode = nodeData.previousSibling =\n nodeData.nextSibling = undefined;\n if (containerData.childNodes !== undefined) {\n // remove caching of childNodes\n containerData.childNodes = null;\n }\n}\n\nexport let recordChildNodes = function(node, nodes) {\n const nodeData = ensureShadyDataForNode(node);\n if (nodeData.firstChild === undefined) {\n const c$ = nodes || childNodes(node);\n nodeData.firstChild = c$[0] || null;\n nodeData.lastChild = c$[c$.length-1] || null;\n patchInsideElementAccessors(node);\n for (let i=0; i<c$.length; i++) {\n const n = c$[i];\n const sd = ensureShadyDataForNode(n);\n sd.parentNode = node;\n sd.nextSibling = c$[i+1] || null;\n sd.previousSibling = c$[i-1] || null;\n patchOutsideElementAccessors(n);\n }\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as logicalTree from './logical-tree.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode} = accessors;\n\n// Patched `insertBefore`. Note that all mutations that add nodes are routed\n// here. When a <slot> is added or a node is added to a host with a shadowRoot\n// with a slot, a standard dom `insert` call is aborted and `_asyncRender`\n// is called on the relevant shadowRoot. In all other cases, a standard dom\n// `insert` can be made, but the location and ref_node may need to be changed.\n/**\n * @param {Node} parent\n * @param {Node} node\n * @param {Node=} ref_node\n */\nexport function insertBefore(parent, node, ref_node) {\n if (node === parent) {\n throw Error(`Failed to execute 'appendChild' on 'Node': The new child element contains the parent.`);\n }\n if (ref_node) {\n const refData = shadyDataForNode(ref_node);\n const p = refData && refData.parentNode;\n if ((p !== undefined && p !== parent) ||\n (p === undefined && parentNode(ref_node) !== parent)) {\n throw Error(`Failed to execute 'insertBefore' on 'Node': The node ` +\n `before which the new node is to be inserted is not a child of this node.`);\n }\n }\n if (ref_node === node) {\n return node;\n }\n // remove from existing location\n if (node.parentNode) {\n // NOTE: avoid node.removeChild as this *can* trigger another patched\n // method (e.g. custom elements) and we want only the shady method to run.\n removeChild(node.parentNode, node);\n }\n // add to new parent\n let preventNativeInsert;\n let ownerRoot;\n let slotsAdded;\n if (!node['__noInsertionPoint']) {\n ownerRoot = utils.ownerShadyRootForNode(parent);\n slotsAdded = ownerRoot && findContainedSlots(node);\n if (slotsAdded) {\n ownerRoot._addSlots(slotsAdded);\n }\n }\n // if a slot is added, must render containing root.\n if (parent.localName === 'slot' || slotsAdded) {\n ownerRoot = ownerRoot || utils.ownerShadyRootForNode(parent);\n if (ownerRoot) {\n ownerRoot._asyncRender();\n }\n }\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordInsertBefore(node, parent, ref_node);\n // when inserting into a host with a shadowRoot with slot, use\n // `shadowRoot._asyncRender()` via `attach-shadow` module\n const parentData = shadyDataForNode(parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeInsert = true;\n // when inserting into a host with shadowRoot with NO slot, do nothing\n // as the node should not be added to composed dome anywhere.\n } else if (parentData.root) {\n preventNativeInsert = true;\n }\n }\n if (!preventNativeInsert) {\n // if adding to a shadyRoot, add to host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host : parent;\n // if ref_node, get the ref_node that's actually in composed dom.\n if (ref_node) {\n ref_node = firstComposedNode(ref_node);\n nativeMethods.insertBefore.call(container, node, ref_node);\n } else {\n nativeMethods.appendChild.call(container, node);\n }\n }\n scheduleObserver(parent, node);\n return node;\n}\n\nfunction findContainedSlots(node) {\n let slots;\n if (node.localName === 'slot') {\n slots = [node];\n } else if (node.querySelectorAll) {\n slots = node.querySelectorAll('slot');\n }\n if (slots && slots.length) {\n return slots;\n }\n}\n\n/**\n * Patched `removeChild`. Note that all dom \"removals\" are routed here.\n * Removes the given `node` from the element's `children`.\n * This method also performs dom composition.\n * @param {Node} parent\n * @param {Node} node\n*/\nexport function removeChild(parent, node) {\n if (node.parentNode !== parent) {\n throw Error('The node to be removed is not a child of this node: ' +\n node);\n }\n let preventNativeRemove;\n let ownerRoot = utils.ownerShadyRootForNode(node);\n let removingInsertionPoint;\n const parentData = shadyDataForNode(parent);\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordRemoveChild(node, parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeRemove = true;\n }\n }\n removeOwnerShadyRoot(node);\n // if removing slot, must render containing root\n if (ownerRoot) {\n let changeSlotContent = parent && parent.localName === 'slot';\n if (changeSlotContent) {\n preventNativeRemove = true;\n }\n removingInsertionPoint = ownerRoot._removeContainedSlots(node);\n if (removingInsertionPoint || changeSlotContent) {\n ownerRoot._asyncRender();\n }\n }\n if (!preventNativeRemove) {\n // if removing from a shadyRoot, remove form host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host :\n parent;\n // not guaranteed to physically be in container; e.g.\n // (1) if parent has a shadyRoot, element may or may not at distributed\n // location (could be undistributed)\n // (2) if parent is a slot, element may not ben in composed dom\n if (!(parentData.root || node.localName === 'slot') ||\n (container === parentNode(node))) {\n nativeMethods.removeChild.call(container, node);\n }\n }\n scheduleObserver(parent, null, node);\n return node;\n}\n\nfunction removeOwnerShadyRoot(node) {\n // optimization: only reset the tree if node is actually in a root\n if (hasCachedOwnerRoot(node)) {\n let c$ = node.childNodes;\n for (let i=0, l=c$.length, n; (i<l) && (n=c$[i]); i++) {\n removeOwnerShadyRoot(n);\n }\n }\n const nodeData = shadyDataForNode(node);\n if (nodeData) {\n nodeData.ownerShadyRoot = undefined;\n }\n}\n\nfunction hasCachedOwnerRoot(node) {\n const nodeData = shadyDataForNode(node);\n return Boolean(nodeData && nodeData.ownerShadyRoot !== undefined);\n}\n\n/**\n * Finds the first flattened node that is composed in the node's parent.\n * If the given node is a slot, then the first flattened node is returned\n * if it exists, otherwise advance to the node's nextSibling.\n * @param {Node} node within which to find first composed node\n * @returns {Node} first composed node\n */\nfunction firstComposedNode(node) {\n let composed = node;\n if (node && node.localName === 'slot') {\n const nodeData = shadyDataForNode(node);\n const flattened = nodeData && nodeData.flattenedNodes;\n composed = flattened && flattened.length ? flattened[0] :\n firstComposedNode(node.nextSibling);\n }\n return composed;\n}\n\nfunction hasShadowRootWithSlot(node) {\n const nodeData = shadyDataForNode(node);\n let root = nodeData && nodeData.root;\n return (root && root._hasInsertionPoint());\n}\n\n/**\n * Should be called whenever an attribute changes. If the `slot` attribute\n * changes, provokes rendering if necessary. If a `<slot>` element's `name`\n * attribute changes, updates the root's slot map and renders.\n * @param {Node} node\n * @param {string} name\n */\nfunction distributeAttributeChange(node, name) {\n if (name === 'slot') {\n const parent = node.parentNode;\n if (hasShadowRootWithSlot(parent)) {\n shadyDataForNode(parent).root._asyncRender();\n }\n } else if (node.localName === 'slot' && name === 'name') {\n let root = utils.ownerShadyRootForNode(node);\n if (root) {\n root._updateSlotName(node);\n root._asyncRender();\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Node=} addedNode\n * @param {Node=} removedNode\n */\nfunction scheduleObserver(node, addedNode, removedNode) {\n const nodeData = shadyDataForNode(node);\n const observer = nodeData && nodeData.observer;\n if (observer) {\n if (addedNode) {\n observer.addedNodes.push(addedNode);\n }\n if (removedNode) {\n observer.removedNodes.push(removedNode);\n }\n observer.schedule();\n }\n}\n\n/**\n * @param {Node} node\n * @param {Object=} options\n */\nexport function getRootNode(node, options) { // eslint-disable-line no-unused-vars\n if (!node || !node.nodeType) {\n return;\n }\n const nodeData = ensureShadyDataForNode(node);\n let root = nodeData.ownerShadyRoot;\n if (root === undefined) {\n if (utils.isShadyRoot(node)) {\n root = node;\n nodeData.ownerShadyRoot = root;\n } else {\n let parent = node.parentNode;\n root = parent ? getRootNode(parent) : node;\n // memo-ize result for performance but only memo-ize\n // result if node is in the document. This avoids a problem where a root\n // can be cached while an element is inside a fragment.\n // If this happens and we cache the result, the value can become stale\n // because for perf we avoid processing the subtree of added fragments.\n if (nativeMethods.contains.call(document.documentElement, node)) {\n nodeData.ownerShadyRoot = root;\n }\n }\n\n }\n return root;\n}\n\n// NOTE: `query` is used primarily for ShadyDOM's querySelector impl,\n// but it's also generally useful to recurse through the element tree\n// and is used by Polymer's styling system.\n/**\n * @param {Node} node\n * @param {Function} matcher\n * @param {Function=} halter\n */\nexport function query(node, matcher, halter) {\n let list = [];\n queryElements(node.childNodes, matcher,\n halter, list);\n return list;\n}\n\nfunction queryElements(elements, matcher, halter, list) {\n for (let i=0, l=elements.length, c; (i<l) && (c=elements[i]); i++) {\n if (c.nodeType === Node.ELEMENT_NODE &&\n queryElement(c, matcher, halter, list)) {\n return true;\n }\n }\n}\n\nfunction queryElement(node, matcher, halter, list) {\n let result = matcher(node);\n if (result) {\n list.push(node);\n }\n if (halter && halter(result)) {\n return result;\n }\n queryElements(node.childNodes, matcher,\n halter, list);\n}\n\nexport function renderRootNode(element) {\n var root = element.getRootNode();\n if (utils.isShadyRoot(root)) {\n root._render();\n }\n}\n\nlet scopingShim = null;\n\nexport function setAttribute(node, attr, value) {\n if (!scopingShim) {\n scopingShim = window['ShadyCSS'] && window['ShadyCSS']['ScopingShim'];\n }\n if (scopingShim && attr === 'class') {\n scopingShim['setElementClass'](node, value);\n } else {\n nativeMethods.setAttribute.call(node, attr, value);\n distributeAttributeChange(node, attr);\n }\n}\n\nexport function removeAttribute(node, attr) {\n nativeMethods.removeAttribute.call(node, attr);\n distributeAttributeChange(node, attr);\n}\n\nexport function cloneNode(node, deep) {\n if (node.localName == 'template') {\n return nativeMethods.cloneNode.call(node, deep);\n } else {\n let n = nativeMethods.cloneNode.call(node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = c$[i].cloneNode(true);\n n.appendChild(nc);\n }\n }\n return n;\n }\n}\n\n// note: Though not technically correct, we fast path `importNode`\n// when called on a node not owned by the main document.\n// This allows, for example, elements that cannot\n// contain custom elements and are therefore not likely to contain shadowRoots\n// to cloned natively. This is a fairly significant performance win.\nexport function importNode(node, deep) {\n if (node.ownerDocument !== document) {\n return nativeMethods.importNode.call(document, node, deep);\n }\n let n = nativeMethods.importNode.call(document, node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = importNode(c$[i], true);\n n.appendChild(nc);\n }\n }\n return n;\n}",null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as nativeMethods from './native-methods.js';\nimport {shadyDataForNode} from './shady-data.js';\n\n/*\nMake this name unique so it is unlikely to conflict with properties on objects passed to `addEventListener`\nhttps://github.com/webcomponents/shadydom/issues/173\n*/\nconst /** string */ eventWrappersName = `__eventWrappers${Date.now()}`;\n\n// https://github.com/w3c/webcomponents/issues/513#issuecomment-224183937\nlet alwaysComposed = {\n 'blur': true,\n 'focus': true,\n 'focusin': true,\n 'focusout': true,\n 'click': true,\n 'dblclick': true,\n 'mousedown': true,\n 'mouseenter': true,\n 'mouseleave': true,\n 'mousemove': true,\n 'mouseout': true,\n 'mouseover': true,\n 'mouseup': true,\n 'wheel': true,\n 'beforeinput': true,\n 'input': true,\n 'keydown': true,\n 'keyup': true,\n 'compositionstart': true,\n 'compositionupdate': true,\n 'compositionend': true,\n 'touchstart': true,\n 'touchend': true,\n 'touchmove': true,\n 'touchcancel': true,\n 'pointerover': true,\n 'pointerenter': true,\n 'pointerdown': true,\n 'pointermove': true,\n 'pointerup': true,\n 'pointercancel': true,\n 'pointerout': true,\n 'pointerleave': true,\n 'gotpointercapture': true,\n 'lostpointercapture': true,\n 'dragstart': true,\n 'drag': true,\n 'dragenter': true,\n 'dragleave': true,\n 'dragover': true,\n 'drop': true,\n 'dragend': true,\n 'DOMActivate': true,\n 'DOMFocusIn': true,\n 'DOMFocusOut': true,\n 'keypress': true\n};\n\nfunction pathComposer(startNode, composed) {\n let composedPath = [];\n let current = startNode;\n let startRoot = startNode === window ? window : startNode.getRootNode();\n while (current) {\n composedPath.push(current);\n if (current.assignedSlot) {\n current = current.assignedSlot;\n } else if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE && current.host && (composed || current !== startRoot)) {\n current = current.host;\n } else {\n current = current.parentNode;\n }\n }\n // event composedPath includes window when startNode's ownerRoot is document\n if (composedPath[composedPath.length - 1] === document) {\n composedPath.push(window);\n }\n return composedPath;\n}\n\nfunction retarget(refNode, path) {\n if (!utils.isShadyRoot) {\n return refNode;\n }\n // If ANCESTOR's root is not a shadow root or ANCESTOR's root is BASE's\n // shadow-including inclusive ancestor, return ANCESTOR.\n let refNodePath = pathComposer(refNode, true);\n let p$ = path;\n for (let i=0, ancestor, lastRoot, root, rootIdx; i < p$.length; i++) {\n ancestor = p$[i];\n root = ancestor === window ? window : ancestor.getRootNode();\n if (root !== lastRoot) {\n rootIdx = refNodePath.indexOf(root);\n lastRoot = root;\n }\n if (!utils.isShadyRoot(root) || rootIdx > -1) {\n return ancestor;\n }\n }\n}\n\nlet eventMixin = {\n\n /**\n * @this {Event}\n */\n get composed() {\n // isTrusted may not exist in this browser, so just check if isTrusted is explicitly false\n if (this.isTrusted !== false && this.__composed === undefined) {\n this.__composed = alwaysComposed[this.type];\n }\n return this.__composed || false;\n },\n\n /**\n * @this {Event}\n */\n composedPath() {\n if (!this.__composedPath) {\n this.__composedPath = pathComposer(this['__target'], this.composed);\n }\n return this.__composedPath;\n },\n\n /**\n * @this {Event}\n */\n get target() {\n return retarget(this.currentTarget, this.composedPath());\n },\n\n // http://w3c.github.io/webcomponents/spec/shadow/#event-relatedtarget-retargeting\n /**\n * @this {Event}\n */\n get relatedTarget() {\n if (!this.__relatedTarget) {\n return null;\n }\n if (!this.__relatedTargetComposedPath) {\n this.__relatedTargetComposedPath = pathComposer(this.__relatedTarget, true);\n }\n // find the deepest node in relatedTarget composed path that is in the same root with the currentTarget\n return retarget(this.currentTarget, this.__relatedTargetComposedPath);\n },\n /**\n * @this {Event}\n */\n stopPropagation() {\n Event.prototype.stopPropagation.call(this);\n this.__propagationStopped = true;\n },\n /**\n * @this {Event}\n */\n stopImmediatePropagation() {\n Event.prototype.stopImmediatePropagation.call(this);\n this.__immediatePropagationStopped = true;\n this.__propagationStopped = true;\n }\n\n};\n\nfunction mixinComposedFlag(Base) {\n // NOTE: avoiding use of `class` here so that transpiled output does not\n // try to do `Base.call` with a dom construtor.\n let klazz = function(type, options) {\n let event = new Base(type, options);\n event.__composed = options && Boolean(options['composed']);\n return event;\n }\n // put constructor properties on subclass\n utils.mixin(klazz, Base);\n klazz.prototype = Base.prototype;\n return klazz;\n}\n\nlet nonBubblingEventsToRetarget = {\n 'focus': true,\n 'blur': true\n};\n\n\n/**\n * Check if the event has been retargeted by comparing original `target`, and calculated `target`\n * @param {Event} event\n * @return {boolean} True if the original target and calculated target are the same\n */\nfunction hasRetargeted(event) {\n return event['__target'] !== event.target || event.__relatedTarget !== event.relatedTarget;\n}\n\n/**\n *\n * @param {Event} event\n * @param {Node} node\n * @param {string} phase\n */\nfunction fireHandlers(event, node, phase) {\n let hs = node.__handlers && node.__handlers[event.type] &&\n node.__handlers[event.type][phase];\n if (hs) {\n for (let i = 0, fn; (fn = hs[i]); i++) {\n if (hasRetargeted(event) && event.target === event.relatedTarget) {\n return;\n }\n fn.call(node, event);\n if (event.__immediatePropagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction retargetNonBubblingEvent(e) {\n let path = e.composedPath();\n let node;\n // override `currentTarget` to let patched `target` calculate correctly\n Object.defineProperty(e, 'currentTarget', {\n get: function() {\n return node;\n },\n configurable: true\n });\n for (let i = path.length - 1; i >= 0; i--) {\n node = path[i];\n // capture phase fires all capture handlers\n fireHandlers(e, node, 'capture');\n if (e.__propagationStopped) {\n return;\n }\n }\n\n // set the event phase to `AT_TARGET` as in spec\n Object.defineProperty(e, 'eventPhase', {get() { return Event.AT_TARGET }});\n\n // the event only needs to be fired when owner roots change when iterating the event path\n // keep track of the last seen owner root\n let lastFiredRoot;\n for (let i = 0; i < path.length; i++) {\n node = path[i];\n const nodeData = shadyDataForNode(node);\n const root = nodeData && nodeData.root;\n if (i === 0 || (root && root === lastFiredRoot)) {\n fireHandlers(e, node, 'bubble');\n // don't bother with window, it doesn't have `getRootNode` and will be last in the path anyway\n if (node !== window) {\n lastFiredRoot = node.getRootNode();\n }\n if (e.__propagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction listenerSettingsEqual(savedListener, node, type, capture, once, passive) {\n let {\n node: savedNode,\n type: savedType,\n capture: savedCapture,\n once: savedOnce,\n passive: savedPassive\n } = savedListener;\n return node === savedNode &&\n type === savedType &&\n capture === savedCapture &&\n once === savedOnce &&\n passive === savedPassive;\n}\n\nexport function findListener(wrappers, node, type, capture, once, passive) {\n for (let i = 0; i < wrappers.length; i++) {\n if (listenerSettingsEqual(wrappers[i], node, type, capture, once, passive)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Firefox can throw on accessing eventWrappers inside of `removeEventListener` during a selenium run\n * Try/Catch accessing eventWrappers to work around\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1353074\n */\nfunction getEventWrappers(eventLike) {\n let wrappers = null;\n try {\n wrappers = eventLike[eventWrappersName];\n } catch (e) {} // eslint-disable-line no-empty\n return wrappers;\n}\n\n/**\n * @this {Event}\n */\nexport function addEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n const handlerType = typeof fnOrObj;\n\n // bail if `fnOrObj` is not a function, not an object\n if (handlerType !== 'function' && handlerType !== 'object') {\n return;\n }\n\n // bail if `fnOrObj` is an object without a `handleEvent` method\n if (handlerType === 'object' && (!fnOrObj.handleEvent || typeof fnOrObj.handleEvent !== 'function')) {\n return;\n }\n\n // The callback `fn` might be used for multiple nodes/events. Since we generate\n // a wrapper function, we need to keep track of it when we remove the listener.\n // It's more efficient to store the node/type/options information as Array in\n // `fn` itself rather than the node (we assume that the same callback is used\n // for few nodes at most, whereas a node will likely have many event listeners).\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n // hack to let ShadyRoots have event listeners\n // event listener will be on host, but `currentTarget`\n // will be set to shadyroot for event listener\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n\n let wrappers = fnOrObj[eventWrappersName];\n if (wrappers) {\n // Stop if the wrapper function has already been created.\n if (findListener(wrappers, target, type, capture, once, passive) > -1) {\n return;\n }\n } else {\n fnOrObj[eventWrappersName] = [];\n }\n\n /**\n * @this {HTMLElement}\n * @param {Event} e\n */\n const wrapperFn = function(e) {\n // Support `once` option.\n if (once) {\n this.removeEventListener(type, fnOrObj, optionsOrCapture);\n }\n if (!e['__target']) {\n patchEvent(e);\n }\n let lastCurrentTargetDesc;\n if (target !== this) {\n // replace `currentTarget` to make `target` and `relatedTarget` correct for inside the shadowroot\n lastCurrentTargetDesc = Object.getOwnPropertyDescriptor(e, 'currentTarget');\n Object.defineProperty(e, 'currentTarget', {get() { return target }, configurable: true});\n }\n // There are two critera that should stop events from firing on this node\n // 1. the event is not composed and the current node is not in the same root as the target\n // 2. when bubbling, if after retargeting, relatedTarget and target point to the same node\n if (e.composed || e.composedPath().indexOf(target) > -1) {\n if (hasRetargeted(e) && e.target === e.relatedTarget) {\n if (e.eventPhase === Event.BUBBLING_PHASE) {\n e.stopImmediatePropagation();\n }\n return;\n }\n // prevent non-bubbling events from triggering bubbling handlers on shadowroot, but only if not in capture phase\n if (e.eventPhase !== Event.CAPTURING_PHASE && !e.bubbles && e.target !== target && !(target instanceof Window)) {\n return;\n }\n let ret = handlerType === 'function' ?\n fnOrObj.call(target, e) :\n (fnOrObj.handleEvent && fnOrObj.handleEvent(e));\n if (target !== this) {\n // replace the \"correct\" `currentTarget`\n if (lastCurrentTargetDesc) {\n Object.defineProperty(e, 'currentTarget', lastCurrentTargetDesc);\n lastCurrentTargetDesc = null;\n } else {\n delete e['currentTarget'];\n }\n }\n return ret;\n }\n };\n // Store the wrapper information.\n fnOrObj[eventWrappersName].push({\n // note: use target here which is either a shadowRoot\n // (when the host element is proxy'ing the event) or this element\n node: target,\n type: type,\n capture: capture,\n once: once,\n passive: passive,\n wrapperFn: wrapperFn\n });\n\n if (nonBubblingEventsToRetarget[type]) {\n this.__handlers = this.__handlers || {};\n this.__handlers[type] = this.__handlers[type] ||\n {'capture': [], 'bubble': []};\n this.__handlers[type][capture ? 'capture' : 'bubble'].push(wrapperFn);\n } else {\n let ael = this instanceof Window ? nativeMethods.windowAddEventListener :\n nativeMethods.addEventListener;\n ael.call(this, type, wrapperFn, optionsOrCapture);\n }\n}\n\n/**\n * @this {Event}\n */\nexport function removeEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n // Search the wrapped function.\n let wrapperFn = undefined;\n let wrappers = getEventWrappers(fnOrObj);\n if (wrappers) {\n let idx = findListener(wrappers, target, type, capture, once, passive);\n if (idx > -1) {\n wrapperFn = wrappers.splice(idx, 1)[0].wrapperFn;\n // Cleanup.\n if (!wrappers.length) {\n fnOrObj[eventWrappersName] = undefined;\n }\n }\n }\n let rel = this instanceof Window ? nativeMethods.windowRemoveEventListener :\n nativeMethods.removeEventListener;\n rel.call(this, type, wrapperFn || fnOrObj, optionsOrCapture);\n if (wrapperFn && nonBubblingEventsToRetarget[type] &&\n this.__handlers && this.__handlers[type]) {\n const arr = this.__handlers[type][capture ? 'capture' : 'bubble'];\n const idx = arr.indexOf(wrapperFn);\n if (idx > -1) {\n arr.splice(idx, 1);\n }\n }\n}\n\nfunction activateFocusEventOverrides() {\n for (let ev in nonBubblingEventsToRetarget) {\n window.addEventListener(ev, function(e) {\n if (!e['__target']) {\n patchEvent(e);\n retargetNonBubblingEvent(e);\n }\n }, true);\n }\n}\n\nfunction patchEvent(event) {\n event['__target'] = event.target;\n event.__relatedTarget = event.relatedTarget;\n // patch event prototype if we can\n if (utils.settings.hasDescriptors) {\n utils.patchPrototype(event, eventMixin);\n // and fallback to patching instance\n } else {\n utils.extend(event, eventMixin);\n }\n}\n\nlet PatchedEvent = mixinComposedFlag(window.Event);\nlet PatchedCustomEvent = mixinComposedFlag(window.CustomEvent);\nlet PatchedMouseEvent = mixinComposedFlag(window.MouseEvent);\n\nexport function patchEvents() {\n window.Event = PatchedEvent;\n window.CustomEvent = PatchedCustomEvent;\n window.MouseEvent = PatchedMouseEvent;\n activateFocusEventOverrides();\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nfunction newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n}\n\nconst EDIT_LEAVE = 0;\nconst EDIT_UPDATE = 1;\nconst EDIT_ADD = 2;\nconst EDIT_DELETE = 3;\n\n// Note: This function is *based* on the computation of the Levenshtein\n// \"edit\" distance. The one change is that \"updates\" are treated as two\n// edits - not one. With Array splices, an update is really a delete\n// followed by an add. By retaining this, we optimize for \"keeping\" the\n// maximum array items in the original array. For example:\n//\n// 'xxxx123' -> '123yyyy'\n//\n// With 1-edit updates, the shortest path would be just to update all seven\n// characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n// leaves the substring '123' intact.\nfunction calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n // \"Deletion\" columns\n let rowCount = oldEnd - oldStart + 1;\n let columnCount = currentEnd - currentStart + 1;\n let distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (let i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (let j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (let i = 1; i < rowCount; i++) {\n for (let j = 1; j < columnCount; j++) {\n if (equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n let north = distances[i - 1][j] + 1;\n let west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n}\n\n// This starts at the final weight, and walks \"backward\" by finding\n// the minimum previous weight recursively until the origin of the weight\n// matrix.\nfunction spliceOperationsFromEditDistances(distances) {\n let i = distances.length - 1;\n let j = distances[0].length - 1;\n let current = distances[i][j];\n let edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n let northWest = distances[i - 1][j - 1];\n let west = distances[i - 1][j];\n let north = distances[i][j - 1];\n\n let min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n}\n\n/**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n/**\n * Lacking individual splice mutation information, the minimal set of\n * splices can be synthesized given the previous state and final state of an\n * array. The basic approach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\nfunction calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n let prefixCount = 0;\n let suffixCount = 0;\n let splice;\n\n let minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentStart == currentEnd) {\n splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n let ops = spliceOperationsFromEditDistances(\n calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n splice = undefined;\n let splices = [];\n let index = currentStart;\n let oldIndex = oldStart;\n for (let i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n}\n\nfunction sharedPrefix(current, old, searchLength) {\n for (let i = 0; i < searchLength; i++)\n if (!equals(current[i], old[i]))\n return i;\n return searchLength;\n}\n\nfunction sharedSuffix(current, old, searchLength) {\n let index1 = current.length;\n let index2 = old.length;\n let count = 0;\n while (count < searchLength && equals(current[--index1], old[--index2]))\n count++;\n\n return count;\n}\n\nfunction equals(currentValue, previousValue) {\n return currentValue === previousValue;\n}\n\nexport function calculateSplices(current, previous) {\n return calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n}\n\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Patches elements that interacts with ShadyDOM\n * such that tree traversal and mutation apis act like they would under\n * ShadowDOM.\n *\n * This import enables seemless interaction with ShadyDOM powered\n * custom elements, enabling better interoperation with 3rd party code,\n * libraries, and frameworks that use DOM tree manipulation apis.\n */\n\nimport * as utils from './utils.js';\nimport {flush, enqueue} from './flush.js';\nimport {observeChildren, unobserveChildren, filterMutations} from './observe-changes.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {patchBuiltins} from './patch-builtins.js';\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {patchEvents} from './patch-events.js';\nimport {ShadyRoot} from './attach-shadow.js';\n\nif (utils.settings.inUse) {\n let ShadyDOM = {\n // TODO(sorvell): remove when Polymer does not depend on this.\n 'inUse': utils.settings.inUse,\n // NOTE: old browsers without prototype accessors (very old Chrome\n // and Safari) need manually patched accessors to properly set\n // `innerHTML` and `textContent` when an element is:\n // (1) inside a shadowRoot\n // (2) does not have special (slot) children itself\n // (3) and setting the property needs to provoke distribution (because\n // a nested slot is added/removed)\n 'patch': (node) => {\n patchInsideElementAccessors(node);\n patchOutsideElementAccessors(node);\n return node;\n },\n 'isShadyRoot': utils.isShadyRoot,\n 'enqueue': enqueue,\n 'flush': flush,\n 'settings': utils.settings,\n 'filterMutations': filterMutations,\n 'observeChildren': observeChildren,\n 'unobserveChildren': unobserveChildren,\n 'nativeMethods': nativeMethods,\n 'nativeTree': nativeTree\n };\n\n window['ShadyDOM'] = ShadyDOM;\n\n // Apply patches to events...\n patchEvents();\n // Apply patches to builtins (e.g. Element.prototype) where applicable.\n patchBuiltins();\n\n window.ShadowRoot = ShadyRoot;\n}","const reservedTagList = new Set([\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-src',\n 'font-face-uri',\n 'font-face-format',\n 'font-face-name',\n 'missing-glyph',\n]);\n\n/**\n * @param {string} localName\n * @returns {boolean}\n */\nexport function isValidCustomElementName(localName) {\n const reserved = reservedTagList.has(localName);\n const validForm = /^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(localName);\n return !reserved && validForm;\n}\n\n/**\n * @private\n * @param {!Node} node\n * @return {boolean}\n */\nexport function isConnected(node) {\n // Use `Node#isConnected`, if defined.\n const nativeValue = node.isConnected;\n if (nativeValue !== undefined) {\n return nativeValue;\n }\n\n /** @type {?Node|undefined} */\n let current = node;\n while (current && !(current.__CE_isImportDocument || current instanceof Document)) {\n current = current.parentNode || (window.ShadowRoot && current instanceof ShadowRoot ? current.host : undefined);\n }\n return !!(current && (current.__CE_isImportDocument || current instanceof Document));\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextSiblingOrAncestorSibling(root, start) {\n let node = start;\n while (node && node !== root && !node.nextSibling) {\n node = node.parentNode;\n }\n return (!node || node === root) ? null : node.nextSibling;\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextNode(root, start) {\n return start.firstChild ? start.firstChild : nextSiblingOrAncestorSibling(root, start);\n}\n\n/**\n * @param {!Node} root\n * @param {!function(!Element)} callback\n * @param {!Set<Node>=} visitedImports\n */\nexport function walkDeepDescendantElements(root, callback, visitedImports = new Set()) {\n let node = root;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = /** @type {!Element} */(node);\n\n callback(element);\n\n const localName = element.localName;\n if (localName === 'link' && element.getAttribute('rel') === 'import') {\n // If this import (polyfilled or not) has it's root node available,\n // walk it.\n const importNode = /** @type {!Node} */ (element.import);\n if (importNode instanceof Node && !visitedImports.has(importNode)) {\n // Prevent multiple walks of the same import root.\n visitedImports.add(importNode);\n\n for (let child = importNode.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n\n // Ignore descendants of import links to prevent attempting to walk the\n // elements created by the HTML Imports polyfill that we just walked\n // above.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n } else if (localName === 'template') {\n // Ignore descendants of templates. There shouldn't be any descendants\n // because they will be moved into `.content` during construction in\n // browsers that support template but, in case they exist and are still\n // waiting to be moved by a polyfill, they will be ignored.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n }\n\n // Walk shadow roots.\n const shadowRoot = element.__CE_shadowRoot;\n if (shadowRoot) {\n for (let child = shadowRoot.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n }\n\n node = nextNode(root, node);\n }\n}\n\n/**\n * Used to suppress Closure's \"Modifying the prototype is only allowed if the\n * constructor is in the same scope\" warning without using\n * `@suppress {newCheckTypes, duplicate}` because `newCheckTypes` is too broad.\n *\n * @param {!Object} destination\n * @param {string} name\n * @param {*} value\n */\nexport function setPropertyUnchecked(destination, name, value) {\n destination[name] = value;\n}\n","import * as Utilities from './Utilities.js';\nimport CEState from './CustomElementState.js';\n\nexport default class CustomElementInternals {\n constructor() {\n /** @type {!Map<string, !CustomElementDefinition>} */\n this._localNameToDefinition = new Map();\n\n /** @type {!Map<!Function, !CustomElementDefinition>} */\n this._constructorToDefinition = new Map();\n\n /** @type {!Array<!function(!Node)>} */\n this._patches = [];\n\n /** @type {boolean} */\n this._hasPatches = false;\n }\n\n /**\n * @param {string} localName\n * @param {!CustomElementDefinition} definition\n */\n setDefinition(localName, definition) {\n this._localNameToDefinition.set(localName, definition);\n this._constructorToDefinition.set(definition.constructor, definition);\n }\n\n /**\n * @param {string} localName\n * @return {!CustomElementDefinition|undefined}\n */\n localNameToDefinition(localName) {\n return this._localNameToDefinition.get(localName);\n }\n\n /**\n * @param {!Function} constructor\n * @return {!CustomElementDefinition|undefined}\n */\n constructorToDefinition(constructor) {\n return this._constructorToDefinition.get(constructor);\n }\n\n /**\n * @param {!function(!Node)} listener\n */\n addPatch(listener) {\n this._hasPatches = true;\n this._patches.push(listener);\n }\n\n /**\n * @param {!Node} node\n */\n patchTree(node) {\n if (!this._hasPatches) return;\n\n Utilities.walkDeepDescendantElements(node, element => this.patch(element));\n }\n\n /**\n * @param {!Node} node\n */\n patch(node) {\n if (!this._hasPatches) return;\n\n if (node.__CE_patched) return;\n node.__CE_patched = true;\n\n for (let i = 0; i < this._patches.length; i++) {\n this._patches[i](node);\n }\n }\n\n /**\n * @param {!Node} root\n */\n connectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.connectedCallback(element);\n } else {\n this.upgradeElement(element);\n }\n }\n }\n\n /**\n * @param {!Node} root\n */\n disconnectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.disconnectedCallback(element);\n }\n }\n }\n\n /**\n * Upgrades all uncustomized custom elements at and below a root node for\n * which there is a definition. When custom element reaction callbacks are\n * assumed to be called synchronously (which, by the current DOM / HTML spec\n * definitions, they are *not*), callbacks for both elements customized\n * synchronously by the parser and elements being upgraded occur in the same\n * relative order.\n *\n * NOTE: This function, when used to simulate the construction of a tree that\n * is already created but not customized (i.e. by the parser), does *not*\n * prevent the element from reading the 'final' (true) state of the tree. For\n * example, the element, during truly synchronous parsing / construction would\n * see that it contains no children as they have not yet been inserted.\n * However, this function does not modify the tree, the element will\n * (incorrectly) have children. Additionally, self-modification restrictions\n * for custom element constructors imposed by the DOM spec are *not* enforced.\n *\n *\n * The following nested list shows the steps extending down from the HTML\n * spec's parsing section that cause elements to be synchronously created and\n * upgraded:\n *\n * The \"in body\" insertion mode:\n * https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n * - Switch on token:\n * .. other cases ..\n * -> Any other start tag\n * - [Insert an HTML element](below) for the token.\n *\n * Insert an HTML element:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-an-html-element\n * - Insert a foreign element for the token in the HTML namespace:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-a-foreign-element\n * - Create an element for a token:\n * https://html.spec.whatwg.org/multipage/syntax.html#create-an-element-for-the-token\n * - Will execute script flag is true?\n * - (Element queue pushed to the custom element reactions stack.)\n * - Create an element:\n * https://dom.spec.whatwg.org/#concept-create-element\n * - Sync CE flag is true?\n * - Constructor called.\n * - Self-modification restrictions enforced.\n * - Sync CE flag is false?\n * - (Upgrade reaction enqueued.)\n * - Attributes appended to element.\n * (`attributeChangedCallback` reactions enqueued.)\n * - Will execute script flag is true?\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n * - (Element queue pushed to the custom element reactions stack.)\n * - Insert the element:\n * https://dom.spec.whatwg.org/#concept-node-insert\n * - Shadow-including descendants are connected. During parsing\n * construction, there are no shadow-*excluding* descendants.\n * However, the constructor may have validly attached a shadow\n * tree to itself and added descendants to that shadow tree.\n * (`connectedCallback` reactions enqueued.)\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n *\n * @param {!Node} root\n * @param {{\n * visitedImports: (!Set<!Node>|undefined),\n * upgrade: (!function(!Element)|undefined),\n * }=} options\n */\n patchAndUpgradeTree(root, options = {}) {\n const visitedImports = options.visitedImports || new Set();\n const upgrade = options.upgrade || (element => this.upgradeElement(element));\n\n const elements = [];\n\n const gatherElements = element => {\n if (element.localName === 'link' && element.getAttribute('rel') === 'import') {\n // The HTML Imports polyfill sets a descendant element of the link to\n // the `import` property, specifically this is *not* a Document.\n const importNode = /** @type {?Node} */ (element.import);\n\n if (importNode instanceof Node) {\n importNode.__CE_isImportDocument = true;\n // Connected links are associated with the registry.\n importNode.__CE_hasRegistry = true;\n }\n\n if (importNode && importNode.readyState === 'complete') {\n importNode.__CE_documentLoadHandled = true;\n } else {\n // If this link's import root is not available, its contents can't be\n // walked. Wait for 'load' and walk it when it's ready.\n element.addEventListener('load', () => {\n const importNode = /** @type {!Node} */ (element.import);\n\n if (importNode.__CE_documentLoadHandled) return;\n importNode.__CE_documentLoadHandled = true;\n\n // Clone the `visitedImports` set that was populated sync during\n // the `patchAndUpgradeTree` call that caused this 'load' handler to\n // be added. Then, remove *this* link's import node so that we can\n // walk that import again, even if it was partially walked later\n // during the same `patchAndUpgradeTree` call.\n const clonedVisitedImports = new Set(visitedImports);\n clonedVisitedImports.delete(importNode);\n\n this.patchAndUpgradeTree(importNode, {visitedImports: clonedVisitedImports, upgrade});\n });\n }\n } else {\n elements.push(element);\n }\n };\n\n // `walkDeepDescendantElements` populates (and internally checks against)\n // `visitedImports` when traversing a loaded import.\n Utilities.walkDeepDescendantElements(root, gatherElements, visitedImports);\n\n if (this._hasPatches) {\n for (let i = 0; i < elements.length; i++) {\n this.patch(elements[i]);\n }\n }\n\n for (let i = 0; i < elements.length; i++) {\n upgrade(elements[i]);\n }\n }\n\n /**\n * @param {!Element} element\n */\n upgradeElement(element) {\n const currentState = element.__CE_state;\n if (currentState !== undefined) return;\n\n // Prevent elements created in documents without a browsing context from\n // upgrading.\n //\n // https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition\n // \"If document does not have a browsing context, return null.\"\n //\n // https://html.spec.whatwg.org/multipage/window-object.html#dom-document-defaultview\n // \"The defaultView IDL attribute of the Document interface, on getting,\n // must return this Document's browsing context's WindowProxy object, if\n // this Document has an associated browsing context, or null otherwise.\"\n const ownerDocument = element.ownerDocument;\n if (\n !ownerDocument.defaultView &&\n !(ownerDocument.__CE_isImportDocument && ownerDocument.__CE_hasRegistry)\n ) return;\n\n const definition = this.localNameToDefinition(element.localName);\n if (!definition) return;\n\n definition.constructionStack.push(element);\n\n const constructor = definition.constructor;\n try {\n try {\n let result = new (constructor)();\n if (result !== element) {\n throw new Error('The custom element constructor did not produce the element being upgraded.');\n }\n } finally {\n definition.constructionStack.pop();\n }\n } catch (e) {\n element.__CE_state = CEState.failed;\n throw e;\n }\n\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n\n if (definition.attributeChangedCallback) {\n const observedAttributes = definition.observedAttributes;\n for (let i = 0; i < observedAttributes.length; i++) {\n const name = observedAttributes[i];\n const value = element.getAttribute(name);\n if (value !== null) {\n this.attributeChangedCallback(element, name, null, value, null);\n }\n }\n }\n\n if (Utilities.isConnected(element)) {\n this.connectedCallback(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n connectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.connectedCallback) {\n definition.connectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n disconnectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.disconnectedCallback) {\n definition.disconnectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n * @param {string} name\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\n attributeChangedCallback(element, name, oldValue, newValue, namespace) {\n const definition = element.__CE_definition;\n if (\n definition.attributeChangedCallback &&\n definition.observedAttributes.indexOf(name) > -1\n ) {\n definition.attributeChangedCallback.call(element, name, oldValue, newValue, namespace);\n }\n }\n}\n","/**\n * @enum {number}\n */\nconst CustomElementState = {\n custom: 1,\n failed: 2,\n};\n\nexport default CustomElementState;\n","import CustomElementInternals from './CustomElementInternals.js';\n\nexport default class DocumentConstructionObserver {\n constructor(internals, doc) {\n /**\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @type {!Document}\n */\n this._document = doc;\n\n /**\n * @type {MutationObserver|undefined}\n */\n this._observer = undefined;\n\n\n // Simulate tree construction for all currently accessible nodes in the\n // document.\n this._internals.patchAndUpgradeTree(this._document);\n\n if (this._document.readyState === 'loading') {\n this._observer = new MutationObserver(this._handleMutations.bind(this));\n\n // Nodes created by the parser are given to the observer *before* the next\n // task runs. Inline scripts are run in a new task. This means that the\n // observer will be able to handle the newly parsed nodes before the inline\n // script is run.\n this._observer.observe(this._document, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n disconnect() {\n if (this._observer) {\n this._observer.disconnect();\n }\n }\n\n /**\n * @param {!Array<!MutationRecord>} mutations\n */\n _handleMutations(mutations) {\n // Once the document's `readyState` is 'interactive' or 'complete', all new\n // nodes created within that document will be the result of script and\n // should be handled by patching.\n const readyState = this._document.readyState;\n if (readyState === 'interactive' || readyState === 'complete') {\n this.disconnect();\n }\n\n for (let i = 0; i < mutations.length; i++) {\n const addedNodes = mutations[i].addedNodes;\n for (let j = 0; j < addedNodes.length; j++) {\n const node = addedNodes[j];\n this._internals.patchAndUpgradeTree(node);\n }\n }\n }\n}\n","import CustomElementInternals from './CustomElementInternals.js';\nimport DocumentConstructionObserver from './DocumentConstructionObserver.js';\nimport Deferred from './Deferred.js';\nimport * as Utilities from './Utilities.js';\n\n/**\n * @unrestricted\n */\nexport default class CustomElementRegistry {\n\n /**\n * @param {!CustomElementInternals} internals\n */\n constructor(internals) {\n /**\n * @private\n * @type {boolean}\n */\n this._elementDefinitionIsRunning = false;\n\n /**\n * @private\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @private\n * @type {!Map<string, !Deferred<undefined>>}\n */\n this._whenDefinedDeferred = new Map();\n\n /**\n * The default flush callback triggers the document walk synchronously.\n * @private\n * @type {!Function}\n */\n this._flushCallback = fn => fn();\n\n /**\n * @private\n * @type {boolean}\n */\n this._flushPending = false;\n\n /**\n * @private\n * @type {!Array<!CustomElementDefinition>}\n */\n this._pendingDefinitions = [];\n\n /**\n * @private\n * @type {!DocumentConstructionObserver}\n */\n this._documentConstructionObserver = new DocumentConstructionObserver(internals, document);\n }\n\n /**\n * @param {string} localName\n * @param {!Function} constructor\n */\n define(localName, constructor) {\n if (!(constructor instanceof Function)) {\n throw new TypeError('Custom element constructors must be functions.');\n }\n\n if (!Utilities.isValidCustomElementName(localName)) {\n throw new SyntaxError(`The element name '${localName}' is not valid.`);\n }\n\n if (this._internals.localNameToDefinition(localName)) {\n throw new Error(`A custom element with name '${localName}' has already been defined.`);\n }\n\n if (this._elementDefinitionIsRunning) {\n throw new Error('A custom element is already being defined.');\n }\n this._elementDefinitionIsRunning = true;\n\n let connectedCallback;\n let disconnectedCallback;\n let adoptedCallback;\n let attributeChangedCallback;\n let observedAttributes;\n try {\n /** @type {!Object} */\n const prototype = constructor.prototype;\n if (!(prototype instanceof Object)) {\n throw new TypeError('The custom element constructor\\'s prototype is not an object.');\n }\n\n function getCallback(name) {\n const callbackValue = prototype[name];\n if (callbackValue !== undefined && !(callbackValue instanceof Function)) {\n throw new Error(`The '${name}' callback must be a function.`);\n }\n return callbackValue;\n }\n\n connectedCallback = getCallback('connectedCallback');\n disconnectedCallback = getCallback('disconnectedCallback');\n adoptedCallback = getCallback('adoptedCallback');\n attributeChangedCallback = getCallback('attributeChangedCallback');\n observedAttributes = constructor['observedAttributes'] || [];\n } catch (e) {\n return;\n } finally {\n this._elementDefinitionIsRunning = false;\n }\n\n const definition = {\n localName,\n constructor,\n connectedCallback,\n disconnectedCallback,\n adoptedCallback,\n attributeChangedCallback,\n observedAttributes,\n constructionStack: [],\n };\n\n this._internals.setDefinition(localName, definition);\n this._pendingDefinitions.push(definition);\n\n // If we've already called the flush callback and it hasn't called back yet,\n // don't call it again.\n if (!this._flushPending) {\n this._flushPending = true;\n this._flushCallback(() => this._flush());\n }\n }\n\n upgrade(element) {\n this._internals.patchAndUpgradeTree(element);\n }\n\n _flush() {\n // If no new definitions were defined, don't attempt to flush. This could\n // happen if a flush callback keeps the function it is given and calls it\n // multiple times.\n if (this._flushPending === false) return;\n this._flushPending = false;\n\n const pendingDefinitions = this._pendingDefinitions;\n\n /**\n * Unupgraded elements with definitions that were defined *before* the last\n * flush, in document order.\n * @type {!Array<!Element>}\n */\n const elementsWithStableDefinitions = [];\n\n /**\n * A map from `localName`s of definitions that were defined *after* the last\n * flush to unupgraded elements matching that definition, in document order.\n * @type {!Map<string, !Array<!Element>>}\n */\n const elementsWithPendingDefinitions = new Map();\n for (let i = 0; i < pendingDefinitions.length; i++) {\n elementsWithPendingDefinitions.set(pendingDefinitions[i].localName, []);\n }\n\n this._internals.patchAndUpgradeTree(document, {\n upgrade: element => {\n // Ignore the element if it has already upgraded or failed to upgrade.\n if (element.__CE_state !== undefined) return;\n\n const localName = element.localName;\n\n // If there is an applicable pending definition for the element, add the\n // element to the list of elements to be upgraded with that definition.\n const pendingElements = elementsWithPendingDefinitions.get(localName);\n if (pendingElements) {\n pendingElements.push(element);\n // If there is *any other* applicable definition for the element, add it\n // to the list of elements with stable definitions that need to be upgraded.\n } else if (this._internals.localNameToDefinition(localName)) {\n elementsWithStableDefinitions.push(element);\n }\n },\n });\n\n // Upgrade elements with 'stable' definitions first.\n for (let i = 0; i < elementsWithStableDefinitions.length; i++) {\n this._internals.upgradeElement(elementsWithStableDefinitions[i]);\n }\n\n // Upgrade elements with 'pending' definitions in the order they were defined.\n while (pendingDefinitions.length > 0) {\n const definition = pendingDefinitions.shift();\n const localName = definition.localName;\n\n // Attempt to upgrade all applicable elements.\n const pendingUpgradableElements = elementsWithPendingDefinitions.get(definition.localName);\n for (let i = 0; i < pendingUpgradableElements.length; i++) {\n this._internals.upgradeElement(pendingUpgradableElements[i]);\n }\n\n // Resolve any promises created by `whenDefined` for the definition.\n const deferred = this._whenDefinedDeferred.get(localName);\n if (deferred) {\n deferred.resolve(undefined);\n }\n }\n }\n\n /**\n * @param {string} localName\n * @return {Function|undefined}\n */\n get(localName) {\n const definition = this._internals.localNameToDefinition(localName);\n if (definition) {\n return definition.constructor;\n }\n\n return undefined;\n }\n\n /**\n * @param {string} localName\n * @return {!Promise<undefined>}\n */\n whenDefined(localName) {\n if (!Utilities.isValidCustomElementName(localName)) {\n return Promise.reject(new SyntaxError(`'${localName}' is not a valid custom element name.`));\n }\n\n const prior = this._whenDefinedDeferred.get(localName);\n if (prior) {\n return prior.toPromise();\n }\n\n const deferred = new Deferred();\n this._whenDefinedDeferred.set(localName, deferred);\n\n const definition = this._internals.localNameToDefinition(localName);\n // Resolve immediately only if the given local name has a definition *and*\n // the full document walk to upgrade elements with that local name has\n // already happened.\n if (definition && !this._pendingDefinitions.some(d => d.localName === localName)) {\n deferred.resolve(undefined);\n }\n\n return deferred.toPromise();\n }\n\n polyfillWrapFlushCallback(outer) {\n this._documentConstructionObserver.disconnect();\n const inner = this._flushCallback;\n this._flushCallback = flush => outer(() => inner(flush));\n }\n}\n\n// Closure compiler exports.\nwindow['CustomElementRegistry'] = CustomElementRegistry;\nCustomElementRegistry.prototype['define'] = CustomElementRegistry.prototype.define;\nCustomElementRegistry.prototype['upgrade'] = CustomElementRegistry.prototype.upgrade;\nCustomElementRegistry.prototype['get'] = CustomElementRegistry.prototype.get;\nCustomElementRegistry.prototype['whenDefined'] = CustomElementRegistry.prototype.whenDefined;\nCustomElementRegistry.prototype['polyfillWrapFlushCallback'] = CustomElementRegistry.prototype.polyfillWrapFlushCallback;\n","/**\n * @template T\n */\nexport default class Deferred {\n constructor() {\n /**\n * @private\n * @type {T|undefined}\n */\n this._value = undefined;\n\n /**\n * @private\n * @type {Function|undefined}\n */\n this._resolve = undefined;\n\n /**\n * @private\n * @type {!Promise<T>}\n */\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n\n if (this._value) {\n resolve(this._value);\n }\n });\n }\n\n /**\n * @param {T} value\n */\n resolve(value) {\n if (this._value) {\n throw new Error('Already resolved.');\n }\n\n this._value = value;\n\n if (this._resolve) {\n this._resolve(value);\n }\n }\n\n /**\n * @return {!Promise<T>}\n */\n toPromise() {\n return this._promise;\n }\n}\n","export default {\n Document_createElement: window.Document.prototype.createElement,\n Document_createElementNS: window.Document.prototype.createElementNS,\n Document_importNode: window.Document.prototype.importNode,\n Document_prepend: window.Document.prototype['prepend'],\n Document_append: window.Document.prototype['append'],\n DocumentFragment_prepend: window.DocumentFragment.prototype['prepend'],\n DocumentFragment_append: window.DocumentFragment.prototype['append'],\n Node_cloneNode: window.Node.prototype.cloneNode,\n Node_appendChild: window.Node.prototype.appendChild,\n Node_insertBefore: window.Node.prototype.insertBefore,\n Node_removeChild: window.Node.prototype.removeChild,\n Node_replaceChild: window.Node.prototype.replaceChild,\n Node_textContent: Object.getOwnPropertyDescriptor(window.Node.prototype, 'textContent'),\n Element_attachShadow: window.Element.prototype['attachShadow'],\n Element_innerHTML: Object.getOwnPropertyDescriptor(window.Element.prototype, 'innerHTML'),\n Element_getAttribute: window.Element.prototype.getAttribute,\n Element_setAttribute: window.Element.prototype.setAttribute,\n Element_removeAttribute: window.Element.prototype.removeAttribute,\n Element_getAttributeNS: window.Element.prototype.getAttributeNS,\n Element_setAttributeNS: window.Element.prototype.setAttributeNS,\n Element_removeAttributeNS: window.Element.prototype.removeAttributeNS,\n Element_insertAdjacentElement: window.Element.prototype['insertAdjacentElement'],\n Element_insertAdjacentHTML: window.Element.prototype['insertAdjacentHTML'],\n Element_prepend: window.Element.prototype['prepend'],\n Element_append: window.Element.prototype['append'],\n Element_before: window.Element.prototype['before'],\n Element_after: window.Element.prototype['after'],\n Element_replaceWith: window.Element.prototype['replaceWith'],\n Element_remove: window.Element.prototype['remove'],\n HTMLElement: window.HTMLElement,\n HTMLElement_innerHTML: Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, 'innerHTML'),\n HTMLElement_insertAdjacentElement: window.HTMLElement.prototype['insertAdjacentElement'],\n HTMLElement_insertAdjacentHTML: window.HTMLElement.prototype['insertAdjacentHTML'],\n};\n","/**\n * This class exists only to work around Closure's lack of a way to describe\n * singletons. It represents the 'already constructed marker' used in custom\n * element construction stacks.\n *\n * https://html.spec.whatwg.org/#concept-already-constructed-marker\n */\nclass AlreadyConstructedMarker {}\n\nexport default new AlreadyConstructedMarker();\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport AlreadyConstructedMarker from '../AlreadyConstructedMarker.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n window['HTMLElement'] = (function() {\n /**\n * @type {function(new: HTMLElement): !HTMLElement}\n */\n function HTMLElement() {\n // This should really be `new.target` but `new.target` can't be emulated\n // in ES5. Assuming the user keeps the default value of the constructor's\n // prototype's `constructor` property, this is equivalent.\n /** @type {!Function} */\n const constructor = this.constructor;\n\n const definition = internals.constructorToDefinition(constructor);\n if (!definition) {\n throw new Error('The custom element being constructed was not registered with `customElements`.');\n }\n\n const constructionStack = definition.constructionStack;\n\n if (constructionStack.length === 0) {\n const element = Native.Document_createElement.call(document, definition.localName);\n Object.setPrototypeOf(element, constructor.prototype);\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n internals.patch(element);\n return element;\n }\n\n const lastIndex = constructionStack.length - 1;\n const element = constructionStack[lastIndex];\n if (element === AlreadyConstructedMarker) {\n throw new Error('The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.');\n }\n constructionStack[lastIndex] = AlreadyConstructedMarker;\n\n Object.setPrototypeOf(element, constructor.prototype);\n internals.patch(/** @type {!HTMLElement} */ (element));\n\n return element;\n }\n\n HTMLElement.prototype = Native.HTMLElement.prototype;\n\n return HTMLElement;\n })();\n};\n","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\nimport CustomElementInternals from './CustomElementInternals.js';\nimport CustomElementRegistry from './CustomElementRegistry.js';\n\nimport PatchHTMLElement from './Patch/HTMLElement.js';\nimport PatchDocument from './Patch/Document.js';\nimport PatchDocumentFragment from './Patch/DocumentFragment.js';\nimport PatchNode from './Patch/Node.js';\nimport PatchElement from './Patch/Element.js';\n\nconst priorCustomElements = window['customElements'];\n\nif (!priorCustomElements ||\n priorCustomElements['forcePolyfill'] ||\n (typeof priorCustomElements['define'] != 'function') ||\n (typeof priorCustomElements['get'] != 'function')) {\n /** @type {!CustomElementInternals} */\n const internals = new CustomElementInternals();\n\n PatchHTMLElement(internals);\n PatchDocument(internals);\n PatchDocumentFragment(internals);\n PatchNode(internals);\n PatchElement(internals);\n\n // The main document is always associated with the registry.\n document.__CE_hasRegistry = true;\n\n /** @type {!CustomElementRegistry} */\n const customElements = new CustomElementRegistry(internals);\n\n Object.defineProperty(window, 'customElements', {\n configurable: true,\n enumerable: true,\n value: customElements,\n });\n}\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * prepend: !function(...(!Node|string)),\n * append: !function(...(!Node|string)),\n * }}\n */\nlet ParentNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ParentNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function appendPrependPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.prepend !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'prepend', appendPrependPatch(builtIn.prepend));\n }\n\n if (builtIn.append !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'append', appendPrependPatch(builtIn.append));\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n Utilities.setPropertyUnchecked(Document.prototype, 'createElement',\n /**\n * @this {Document}\n * @param {string} localName\n * @return {!Element}\n */\n function(localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElement.call(this, localName));\n internals.patch(result);\n return result;\n });\n\n Utilities.setPropertyUnchecked(Document.prototype, 'importNode',\n /**\n * @this {Document}\n * @param {!Node} node\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(node, deep) {\n const clone = Native.Document_importNode.call(this, node, deep);\n // Only create custom elements if this document is associated with the registry.\n if (!this.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n const NS_HTML = \"http://www.w3.org/1999/xhtml\";\n\n Utilities.setPropertyUnchecked(Document.prototype, 'createElementNS',\n /**\n * @this {Document}\n * @param {?string} namespace\n * @param {string} localName\n * @return {!Element}\n */\n function(namespace, localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry && (namespace === null || namespace === NS_HTML)) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElementNS.call(this, namespace, localName));\n internals.patch(result);\n return result;\n });\n\n PatchParentNode(internals, Document.prototype, {\n prepend: Native.Document_prepend,\n append: Native.Document_append,\n });\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n // `Node#nodeValue` is implemented on `Attr`.\n // `Node#textContent` is implemented on `Attr`, `Element`.\n\n Utilities.setPropertyUnchecked(Node.prototype, 'insertBefore',\n /**\n * @this {Node}\n * @param {!Node} node\n * @param {?Node} refNode\n * @return {!Node}\n */\n function(node, refNode) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'appendChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'cloneNode',\n /**\n * @this {Node}\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(deep) {\n const clone = Native.Node_cloneNode.call(this, deep);\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'removeChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_removeChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'replaceChild',\n /**\n * @this {Node}\n * @param {!Node} nodeToInsert\n * @param {!Node} nodeToRemove\n * @return {!Node}\n */\n function(nodeToInsert, nodeToRemove) {\n if (nodeToInsert instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(nodeToInsert.childNodes);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n internals.disconnectTree(nodeToRemove);\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeToInsertWasConnected = Utilities.isConnected(nodeToInsert);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n const thisIsConnected = Utilities.isConnected(this);\n\n if (thisIsConnected) {\n internals.disconnectTree(nodeToRemove);\n }\n\n if (nodeToInsertWasConnected) {\n internals.disconnectTree(nodeToInsert);\n }\n\n if (thisIsConnected) {\n internals.connectTree(nodeToInsert);\n }\n\n return nativeResult;\n });\n\n\n function patch_textContent(destination, baseDescriptor) {\n Object.defineProperty(destination, 'textContent', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Node} */ function(assignedValue) {\n // If this is a text node then there are no nodes to disconnect.\n if (this.nodeType === Node.TEXT_NODE) {\n baseDescriptor.set.call(this, assignedValue);\n return;\n }\n\n let removedNodes = undefined;\n // Checking for `firstChild` is faster than reading `childNodes.length`\n // to compare with 0.\n if (this.firstChild) {\n // Using `childNodes` is faster than `children`, even though we only\n // care about elements.\n const childNodes = this.childNodes;\n const childNodesLength = childNodes.length;\n if (childNodesLength > 0 && Utilities.isConnected(this)) {\n // Copying an array by iterating is faster than using slice.\n removedNodes = new Array(childNodesLength);\n for (let i = 0; i < childNodesLength; i++) {\n removedNodes[i] = childNodes[i];\n }\n }\n }\n\n baseDescriptor.set.call(this, assignedValue);\n\n if (removedNodes) {\n for (let i = 0; i < removedNodes.length; i++) {\n internals.disconnectTree(removedNodes[i]);\n }\n }\n },\n });\n }\n\n if (Native.Node_textContent && Native.Node_textContent.get) {\n patch_textContent(Node.prototype, Native.Node_textContent);\n } else {\n internals.addPatch(function(element) {\n patch_textContent(element, {\n enumerable: true,\n configurable: true,\n // NOTE: This implementation of the `textContent` getter assumes that\n // text nodes' `textContent` getter will not be patched.\n get: /** @this {Node} */ function() {\n /** @type {!Array<string>} */\n const parts = [];\n\n for (let i = 0; i < this.childNodes.length; i++) {\n parts.push(this.childNodes[i].textContent);\n }\n\n return parts.join('');\n },\n set: /** @this {Node} */ function(assignedValue) {\n while (this.firstChild) {\n Native.Node_removeChild.call(this, this.firstChild);\n }\n Native.Node_appendChild.call(this, document.createTextNode(assignedValue));\n },\n });\n });\n }\n};\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * before: !function(...(!Node|string)),\n * after: !function(...(!Node|string)),\n * replaceWith: !function(...(!Node|string)),\n * remove: !function(),\n * }}\n */\nlet ChildNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ChildNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function beforeAfterPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'before', beforeAfterPatch(builtIn.before));\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'after', beforeAfterPatch(builtIn.after));\n }\n\n if (builtIn.replaceWith !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'replaceWith',\n /**\n * @param {...(!Node|string)} nodes\n */\n function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.replaceWith.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (wasConnected) {\n internals.disconnectTree(this);\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n });\n }\n\n if (builtIn.remove !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'remove',\n function() {\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.remove.call(this);\n\n if (wasConnected) {\n internals.disconnectTree(this);\n }\n });\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\nimport PatchChildNode from './Interface/ChildNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n if (Native.Element_attachShadow) {\n Utilities.setPropertyUnchecked(Element.prototype, 'attachShadow',\n /**\n * @this {Element}\n * @param {!{mode: string}} init\n * @return {ShadowRoot}\n */\n function(init) {\n const shadowRoot = Native.Element_attachShadow.call(this, init);\n this.__CE_shadowRoot = shadowRoot;\n return shadowRoot;\n });\n }\n\n\n function patch_innerHTML(destination, baseDescriptor) {\n Object.defineProperty(destination, 'innerHTML', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Element} */ function(htmlString) {\n const isConnected = Utilities.isConnected(this);\n\n // NOTE: In IE11, when using the native `innerHTML` setter, all nodes\n // that were previously descendants of the context element have all of\n // their children removed as part of the set - the entire subtree is\n // 'disassembled'. This work around walks the subtree *before* using the\n // native setter.\n /** @type {!Array<!Element>|undefined} */\n let removedElements = undefined;\n if (isConnected) {\n removedElements = [];\n Utilities.walkDeepDescendantElements(this, element => {\n if (element !== this) {\n removedElements.push(element);\n }\n });\n }\n\n baseDescriptor.set.call(this, htmlString);\n\n if (removedElements) {\n for (let i = 0; i < removedElements.length; i++) {\n const element = removedElements[i];\n if (element.__CE_state === CEState.custom) {\n internals.disconnectedCallback(element);\n }\n }\n }\n\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(this);\n } else {\n internals.patchAndUpgradeTree(this);\n }\n return htmlString;\n },\n });\n }\n\n if (Native.Element_innerHTML && Native.Element_innerHTML.get) {\n patch_innerHTML(Element.prototype, Native.Element_innerHTML);\n } else if (Native.HTMLElement_innerHTML && Native.HTMLElement_innerHTML.get) {\n patch_innerHTML(HTMLElement.prototype, Native.HTMLElement_innerHTML);\n } else {\n\n internals.addPatch(function(element) {\n patch_innerHTML(element, {\n enumerable: true,\n configurable: true,\n // Implements getting `innerHTML` by performing an unpatched `cloneNode`\n // of the element and returning the resulting element's `innerHTML`.\n // TODO: Is this too expensive?\n get: /** @this {Element} */ function() {\n return Native.Node_cloneNode.call(this, true).innerHTML;\n },\n // Implements setting `innerHTML` by creating an unpatched element,\n // setting `innerHTML` of that element and replacing the target\n // element's children with those of the unpatched element.\n set: /** @this {Element} */ function(assignedValue) {\n // NOTE: re-route to `content` for `template` elements.\n // We need to do this because `template.appendChild` does not\n // route into `template.content`.\n const isTemplate = (this.localName === 'template');\n /** @type {!Node} */\n const content = isTemplate ? (/** @type {!HTMLTemplateElement} */\n (this)).content : this;\n /** @type {!Node} */\n const rawElement = Native.Document_createElement.call(document,\n this.localName);\n rawElement.innerHTML = assignedValue;\n\n while (content.childNodes.length > 0) {\n Native.Node_removeChild.call(content, content.childNodes[0]);\n }\n const container = isTemplate ? rawElement.content : rawElement;\n while (container.childNodes.length > 0) {\n Native.Node_appendChild.call(content, container.childNodes[0]);\n }\n },\n });\n });\n }\n\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttribute',\n /**\n * @this {Element}\n * @param {string} name\n * @param {string} newValue\n */\n function(name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttribute.call(this, name, newValue);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_setAttribute.call(this, name, newValue);\n newValue = Native.Element_getAttribute.call(this, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, null);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n * @param {string} newValue\n */\n function(namespace, name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttribute',\n /**\n * @this {Element}\n * @param {string} name\n */\n function(name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttribute.call(this, name);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_removeAttribute.call(this, name);\n if (oldValue !== null) {\n internals.attributeChangedCallback(this, name, oldValue, null, null);\n }\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n */\n function(namespace, name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttributeNS.call(this, namespace, name);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_removeAttributeNS.call(this, namespace, name);\n // In older browsers, `Element#getAttributeNS` may return the empty string\n // instead of null if the attribute does not exist. For details, see;\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNS#Notes\n const newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n if (oldValue !== newValue) {\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n }\n });\n\n\n function patch_insertAdjacentElement(destination, baseMethod) {\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentElement',\n /**\n * @this {Element}\n * @param {string} position\n * @param {!Element} element\n * @return {?Element}\n */\n function(position, element) {\n const wasConnected = Utilities.isConnected(element);\n const insertedElement = /** @type {!Element} */\n (baseMethod.call(this, position, element));\n\n if (wasConnected) {\n internals.disconnectTree(element);\n }\n\n if (Utilities.isConnected(insertedElement)) {\n internals.connectTree(element);\n }\n return insertedElement;\n });\n }\n\n if (Native.HTMLElement_insertAdjacentElement) {\n patch_insertAdjacentElement(HTMLElement.prototype, Native.HTMLElement_insertAdjacentElement);\n } else if (Native.Element_insertAdjacentElement) {\n patch_insertAdjacentElement(Element.prototype, Native.Element_insertAdjacentElement);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentElement` was not patched.');\n }\n\n\n function patch_insertAdjacentHTML(destination, baseMethod) {\n /**\n * Patches and upgrades all nodes which are siblings between `start`\n * (inclusive) and `end` (exclusive). If `end` is `null`, then all siblings\n * following `start` will be patched and upgraded.\n * @param {!Node} start\n * @param {?Node} end\n */\n function upgradeNodesInRange(start, end) {\n const nodes = [];\n for (let node = start; node !== end; node = node.nextSibling) {\n nodes.push(node);\n }\n for (let i = 0; i < nodes.length; i++) {\n internals.patchAndUpgradeTree(nodes[i]);\n }\n }\n\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentHTML',\n /**\n * @this {Element}\n * @param {string} position\n * @param {string} text\n */\n function(position, text) {\n position = position.toLowerCase();\n\n if (position === \"beforebegin\") {\n const marker = this.previousSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(\n /** @type {!Node} */ (marker || this.parentNode.firstChild), this);\n } else if (position === \"afterbegin\") {\n const marker = this.firstChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.firstChild), marker);\n } else if (position === \"beforeend\") {\n const marker = this.lastChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(marker || this.firstChild, null);\n } else if (position === \"afterend\") {\n const marker = this.nextSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.nextSibling), marker);\n } else {\n throw new SyntaxError(`The value provided (${String(position)}) is ` +\n \"not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.\");\n }\n });\n }\n\n if (Native.HTMLElement_insertAdjacentHTML) {\n patch_insertAdjacentHTML(HTMLElement.prototype, Native.HTMLElement_insertAdjacentHTML);\n } else if (Native.Element_insertAdjacentHTML) {\n patch_insertAdjacentHTML(Element.prototype, Native.Element_insertAdjacentHTML);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentHTML` was not patched.');\n }\n\n\n PatchParentNode(internals, Element.prototype, {\n prepend: Native.Element_prepend,\n append: Native.Element_append,\n });\n\n PatchChildNode(internals, Element.prototype, {\n before: Native.Element_before,\n after: Native.Element_after,\n replaceWith: Native.Element_replaceWith,\n remove: Native.Element_remove,\n });\n};\n","import CustomElementInternals from '../CustomElementInternals.js';\nimport Native from './Native.js';\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n PatchParentNode(internals, DocumentFragment.prototype, {\n prepend: Native.DocumentFragment_prepend,\n append: Native.DocumentFragment_append,\n });\n};\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nfunction findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport * as StyleUtil from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/* Transforms ShadowDOM styling into ShadyDOM styling\n\n* scoping:\n\n * elements in scope get scoping selector class=\"x-foo-scope\"\n * selectors re-written as follows:\n\n div button -> div.x-foo-scope button.x-foo-scope\n\n* :host -> scopeName\n\n* :host(...) -> scopeName...\n\n* ::slotted(...) -> scopeName > ...\n\n* ...:dir(ltr|rtl) -> [dir=\"ltr|rtl\"] ..., ...[dir=\"ltr|rtl\"]\n\n* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir=\"rtl\"] scopeName, scopeName[dir=\"rtl\"]\n\n*/\nconst SCOPE_NAME = 'style-scope';\n\nclass StyleTransformer {\n get SCOPE_NAME() {\n return SCOPE_NAME;\n }\n /**\n * Given a node and scope name, add a scoping class to each node\n * in the tree. This facilitates transforming css into scoped rules.\n * @param {?} node\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n dom(node, scope, shouldRemoveScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n this._transformDom(node, scope || '', shouldRemoveScope);\n }\n }\n\n _transformDom(node, selector, shouldRemoveScope) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.element(node, selector, shouldRemoveScope);\n }\n let c$ = (node.localName === 'template') ?\n (node.content || node._content).childNodes :\n node.children || node.childNodes;\n if (c$) {\n for (let i=0; i<c$.length; i++) {\n this._transformDom(c$[i], selector, shouldRemoveScope);\n }\n }\n }\n /**\n * @param {?} element\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n element(element, scope, shouldRemoveScope) {\n // note: if using classes, we add both the general 'style-scope' class\n // as well as the specific scope. This enables easy filtering of all\n // `style-scope` elements\n if (scope) {\n // note: svg on IE does not have classList so fallback to class\n if (element.classList) {\n if (shouldRemoveScope) {\n element.classList.remove(SCOPE_NAME);\n element.classList.remove(scope);\n } else {\n element.classList.add(SCOPE_NAME);\n element.classList.add(scope);\n }\n } else if (element.getAttribute) {\n let c = element.getAttribute(CLASS);\n if (shouldRemoveScope) {\n if (c) {\n let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');\n StyleUtil.setElementClassRaw(element, newValue);\n }\n } else {\n let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;\n StyleUtil.setElementClassRaw(element, newValue);\n }\n }\n }\n }\n\n /**\n * @param {?} element\n * @param {?} styleRules\n * @param {?=} callback\n */\n elementStyles(element, styleRules, callback) {\n let cssBuildType = element['__cssBuild'];\n // no need to shim selectors if settings.useNativeShadow, also\n // a shady css build will already have transformed selectors\n // NOTE: This method may be called as part of static or property shimming.\n // When there is a targeted build it will not be called for static shimming,\n // but when the property shim is used it is called and should opt out of\n // static shimming work when a proper build exists.\n let cssText = '';\n if (nativeShadow || cssBuildType === 'shady') {\n cssText = StyleUtil.toCssText(styleRules, callback);\n } else {\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n cssText = this.css(styleRules, is, typeExtension, callback) + '\\n\\n';\n }\n return cssText.trim();\n }\n\n // Given a string of cssText and a scoping string (scope), returns\n // a string of scoped css where each selector is transformed to include\n // a class created from the scope. ShadowDOM selectors are also transformed\n // (e.g. :host) to use the scoping selector.\n css(rules, scope, ext, callback) {\n let hostScope = this._calcHostScope(scope, ext);\n scope = this._calcElementScope(scope);\n let self = this;\n return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n if (!rule.isScoped) {\n self.rule(rule, scope, hostScope);\n rule.isScoped = true;\n }\n if (callback) {\n callback(rule, scope, hostScope);\n }\n });\n }\n\n _calcElementScope(scope) {\n if (scope) {\n return CSS_CLASS_PREFIX + scope;\n } else {\n return '';\n }\n }\n\n _calcHostScope(scope, ext) {\n return ext ? `[is=${scope}]` : scope;\n }\n\n rule(rule, scope, hostScope) {\n this._transformRule(rule, this._transformComplexSelector,\n scope, hostScope);\n }\n\n /**\n * transforms a css rule to a scoped rule.\n *\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRule(rule, transformer, scope, hostScope) {\n // NOTE: save transformedSelector for subsequent matching of elements\n // against selectors (e.g. when calculating style properties)\n rule['selector'] = rule.transformedSelector =\n this._transformRuleCss(rule, transformer, scope, hostScope);\n }\n\n /**\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRuleCss(rule, transformer, scope, hostScope) {\n let p$ = rule['selector'].split(COMPLEX_SELECTOR_SEP);\n // we want to skip transformation of rules that appear in keyframes,\n // because they are keyframe selectors, not element selectors.\n if (!StyleUtil.isKeyframesSelector(rule)) {\n for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {\n p$[i] = transformer.call(this, p, scope, hostScope);\n }\n }\n return p$.join(COMPLEX_SELECTOR_SEP);\n }\n\n /**\n * @param {string} selector\n * @return {string}\n */\n _twiddleNthPlus(selector) {\n return selector.replace(NTH, (m, type, inside) => {\n if (inside.indexOf('+') > -1) {\n inside = inside.replace(/\\+/g, '___');\n } else if (inside.indexOf('___') > -1) {\n inside = inside.replace(/___/g, '+');\n }\n return `:${type}(${inside})`;\n });\n }\n\n/**\n * @param {string} selector\n * @param {string} scope\n * @param {string=} hostScope\n */\n _transformComplexSelector(selector, scope, hostScope) {\n let stop = false;\n selector = selector.trim();\n // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP\n let isNth = NTH.test(selector);\n if (isNth) {\n selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\\s/g, '')})`)\n selector = this._twiddleNthPlus(selector);\n }\n selector = selector.replace(SLOTTED_START, `${HOST} $1`);\n selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {\n if (!stop) {\n let info = this._transformCompoundSelector(s, c, scope, hostScope);\n stop = stop || info.stop;\n c = info.combinator;\n s = info.value;\n }\n return c + s;\n });\n if (isNth) {\n selector = this._twiddleNthPlus(selector);\n }\n return selector;\n }\n\n _transformCompoundSelector(selector, combinator, scope, hostScope) {\n // replace :host with host scoping class\n let slottedIndex = selector.indexOf(SLOTTED);\n if (selector.indexOf(HOST) >= 0) {\n selector = this._transformHostSelector(selector, hostScope);\n // replace other selectors with scoping class\n } else if (slottedIndex !== 0) {\n selector = scope ? this._transformSimpleSelector(selector, scope) :\n selector;\n }\n // mark ::slotted() scope jump to replace with descendant selector + arg\n // also ignore left-side combinator\n let slotted = false;\n if (slottedIndex >= 0) {\n combinator = '';\n slotted = true;\n }\n // process scope jumping selectors up to the scope jump and then stop\n let stop;\n if (slotted) {\n stop = true;\n if (slotted) {\n // .zonk ::slotted(.foo) -> .zonk.scope > .foo\n selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);\n }\n }\n selector = selector.replace(DIR_PAREN, (m, before, dir) =>\n `[dir=\"${dir}\"] ${before}, ${before}[dir=\"${dir}\"]`);\n return {value: selector, combinator, stop};\n }\n\n _transformSimpleSelector(selector, scope) {\n let p$ = selector.split(PSEUDO_PREFIX);\n p$[0] += scope;\n return p$.join(PSEUDO_PREFIX);\n }\n\n // :host(...) -> scopeName...\n _transformHostSelector(selector, hostScope) {\n let m = selector.match(HOST_PAREN);\n let paren = m && m[2].trim() || '';\n if (paren) {\n if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {\n // paren starts with a type selector\n let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];\n // if the type selector is our hostScope then avoid pre-pending it\n if (typeSelector === hostScope) {\n return paren;\n // otherwise, this selector should not match in this scope so\n // output a bogus selector.\n } else {\n return SELECTOR_NO_MATCH;\n }\n } else {\n // make sure to do a replace here to catch selectors like:\n // `:host(.foo)::before`\n return selector.replace(HOST_PAREN, function(m, host, paren) {\n return hostScope + paren;\n });\n }\n // if no paren, do a straight :host replacement.\n // TODO(sorvell): this should not strictly be necessary but\n // it's needed to maintain support for `:host[foo]` type selectors\n // which have been improperly used under Shady DOM. This should be\n // deprecated.\n } else {\n return selector.replace(HOST, hostScope);\n }\n }\n\n /**\n * @param {StyleNode} rule\n */\n documentRule(rule) {\n // reset selector in case this is redone.\n rule['selector'] = rule['parsedSelector'];\n this.normalizeRootSelector(rule);\n this._transformRule(rule, this._transformDocumentSelector);\n }\n\n /**\n * @param {StyleNode} rule\n */\n normalizeRootSelector(rule) {\n if (rule['selector'] === ROOT) {\n rule['selector'] = 'html';\n }\n }\n\n/**\n * @param {string} selector\n */\n _transformDocumentSelector(selector) {\n return selector.match(SLOTTED) ?\n this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) :\n this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);\n }\n}\n\nlet NTH = /:(nth[-\\w]+)\\(([^)]+)\\)/;\nlet SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;\nlet COMPLEX_SELECTOR_SEP = ',';\nlet SIMPLE_SELECTOR_SEP = /(^|[\\s>+~]+)((?:\\[.+?\\]|[^\\s>+~=[])+)/g;\nlet SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;\nlet HOST = ':host';\nlet ROOT = ':root';\nlet SLOTTED = '::slotted';\nlet SLOTTED_START = new RegExp(`^(${SLOTTED})`);\n// NOTE: this supports 1 nested () pair for things like\n// :host(:not([selected]), more general support requires\n// parsing which seems like overkill\nlet HOST_PAREN = /(:host)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\n// similar to HOST_PAREN\nlet SLOTTED_PAREN = /(?:::slotted)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\nlet DIR_PAREN = /(.*):dir\\((?:(ltr|rtl))\\)/;\nlet CSS_CLASS_PREFIX = '.';\nlet PSEUDO_PREFIX = ':';\nlet CLASS = 'class';\nlet SELECTOR_NO_MATCH = 'should_not_match';\n\nexport default new StyleTransformer()\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/** @const {string} */\nconst infoKey = '__styleInfo';\n\nexport default class StyleInfo {\n /**\n * @param {Element} node\n * @return {StyleInfo}\n */\n static get(node) {\n if (node) {\n return node[infoKey];\n } else {\n return null;\n }\n }\n /**\n * @param {!Element} node\n * @param {StyleInfo} styleInfo\n * @return {StyleInfo}\n */\n static set(node, styleInfo) {\n node[infoKey] = styleInfo;\n return styleInfo;\n }\n /**\n * @param {StyleNode} ast\n * @param {Node=} placeholder\n * @param {Array<string>=} ownStylePropertyNames\n * @param {string=} elementName\n * @param {string=} typeExtension\n * @param {string=} cssBuild\n */\n constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {\n /** @type {StyleNode} */\n this.styleRules = ast || null;\n /** @type {Node} */\n this.placeholder = placeholder || null;\n /** @type {!Array<string>} */\n this.ownStylePropertyNames = ownStylePropertyNames || [];\n /** @type {Array<Object>} */\n this.overrideStyleProperties = null;\n /** @type {string} */\n this.elementName = elementName || '';\n /** @type {string} */\n this.cssBuild = cssBuild || '';\n /** @type {string} */\n this.typeExtension = typeExtension || '';\n /** @type {Object<string, string>} */\n this.styleProperties = null;\n /** @type {?string} */\n this.scopeSelector = null;\n /** @type {HTMLStyleElement} */\n this.customStyle = null;\n }\n _getStyleRules() {\n return this.styleRules;\n }\n}\n\nStyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport * as RX from './common-regex.js';\nimport StyleInfo from './style-info.js';\n\n// TODO: dedupe with shady\n/**\n * @param {string} selector\n * @return {boolean}\n * @this {Element}\n */\nconst matchesSelector = function(selector) {\n const method = this.matches || this.matchesSelector ||\n this.mozMatchesSelector || this.msMatchesSelector ||\n this.oMatchesSelector || this.webkitMatchesSelector;\n return method && method.call(this, selector);\n};\n\nconst IS_IE = navigator.userAgent.match('Trident');\n\nconst XSCOPE_NAME = 'x-scope';\n\nclass StyleProperties {\n get XSCOPE_NAME() {\n return XSCOPE_NAME;\n }\n/**\n * decorates styles with rule info and returns an array of used style property names\n *\n * @param {StyleNode} rules\n * @return {Array<string>}\n */\n decorateStyles(rules) {\n let self = this, props = {}, keyframes = [], ruleIndex = 0;\n StyleUtil.forEachRule(rules, function(rule) {\n self.decorateRule(rule);\n // mark in-order position of ast rule in styles block, used for cache key\n rule.index = ruleIndex++;\n self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);\n }, function onKeyframesRule(rule) {\n keyframes.push(rule);\n });\n // Cache all found keyframes rules for later reference:\n rules._keyframes = keyframes;\n // return this list of property names *consumes* in these styles.\n let names = [];\n for (let i in props) {\n names.push(i);\n }\n return names;\n }\n\n // decorate a single rule with property info\n decorateRule(rule) {\n if (rule.propertyInfo) {\n return rule.propertyInfo;\n }\n let info = {}, properties = {};\n let hasProperties = this.collectProperties(rule, properties);\n if (hasProperties) {\n info.properties = properties;\n // TODO(sorvell): workaround parser seeing mixins as additional rules\n rule['rules'] = null;\n }\n info.cssText = this.collectCssText(rule);\n rule.propertyInfo = info;\n return info;\n }\n\n // collects the custom properties from a rule's cssText\n collectProperties(rule, properties) {\n let info = rule.propertyInfo;\n if (info) {\n if (info.properties) {\n Object.assign(properties, info.properties);\n return true;\n }\n } else {\n let m, rx = RX.VAR_ASSIGN;\n let cssText = rule['parsedCssText'];\n let value;\n let any;\n while ((m = rx.exec(cssText))) {\n // note: group 2 is var, 3 is mixin\n value = (m[2] || m[3]).trim();\n // value of 'inherit' or 'unset' is equivalent to not setting the property here\n if (value !== 'inherit' || value !== 'unset') {\n properties[m[1].trim()] = value;\n }\n any = true;\n }\n return any;\n }\n\n }\n\n // returns cssText of properties that consume variables/mixins\n collectCssText(rule) {\n return this.collectConsumingCssText(rule['parsedCssText']);\n }\n\n // NOTE: we support consumption inside mixin assignment\n // but not production, so strip out {...}\n collectConsumingCssText(cssText) {\n return cssText.replace(RX.BRACKETED, '')\n .replace(RX.VAR_ASSIGN, '');\n }\n\n collectPropertiesInCssText(cssText, props) {\n let m;\n while ((m = RX.VAR_CONSUMED.exec(cssText))) {\n let name = m[1];\n // This regex catches all variable names, and following non-whitespace char\n // If next char is not ':', then variable is a consumer\n if (m[2] !== ':') {\n props[name] = true;\n }\n }\n }\n\n // turns custom properties into realized values.\n reify(props) {\n // big perf optimization here: reify only *own* properties\n // since this object has __proto__ of the element's scope properties\n let names = Object.getOwnPropertyNames(props);\n for (let i=0, n; i < names.length; i++) {\n n = names[i];\n props[n] = this.valueForProperty(props[n], props);\n }\n }\n\n // given a property value, returns the reified value\n // a property value may be:\n // (1) a literal value like: red or 5px;\n // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or\n // var(--a, var(--b));\n // (3) a literal mixin value like { properties }. Each of these properties\n // can have values that are: (a) literal, (b) variables, (c) @apply mixins.\n valueForProperty(property, props) {\n // case (1) default\n // case (3) defines a mixin and we have to reify the internals\n if (property) {\n if (property.indexOf(';') >=0) {\n property = this.valueForProperties(property, props);\n } else {\n // case (2) variable\n let self = this;\n let fn = function(prefix, value, fallback, suffix) {\n if (!value) {\n return prefix + suffix;\n }\n let propertyValue = self.valueForProperty(props[value], props);\n // if value is \"initial\", then the variable should be treated as unset\n if (!propertyValue || propertyValue === 'initial') {\n // fallback may be --a or var(--a) or literal\n propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||\n fallback;\n } else if (propertyValue === 'apply-shim-inherit') {\n // CSS build will replace `inherit` with `apply-shim-inherit`\n // for use with native css variables.\n // Since we have full control, we can use `inherit` directly.\n propertyValue = 'inherit';\n }\n return prefix + (propertyValue || '') + suffix;\n };\n property = StyleUtil.processVariableAndFallback(property, fn);\n }\n }\n return property && property.trim() || '';\n }\n\n // note: we do not yet support mixin within mixin\n valueForProperties(property, props) {\n let parts = property.split(';');\n for (let i=0, p, m; i<parts.length; i++) {\n if ((p = parts[i])) {\n RX.MIXIN_MATCH.lastIndex = 0;\n m = RX.MIXIN_MATCH.exec(p);\n if (m) {\n p = this.valueForProperty(props[m[1]], props);\n } else {\n let colon = p.indexOf(':');\n if (colon !== -1) {\n let pp = p.substring(colon);\n pp = pp.trim();\n pp = this.valueForProperty(pp, props) || pp;\n p = p.substring(0, colon) + pp;\n }\n }\n parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?\n // strip trailing ;\n p.slice(0, -1) :\n p || '';\n }\n }\n return parts.join(';');\n }\n\n applyProperties(rule, props) {\n let output = '';\n // dynamically added sheets may not be decorated so ensure they are.\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (rule.propertyInfo.cssText) {\n output = this.valueForProperties(rule.propertyInfo.cssText, props);\n }\n rule['cssText'] = output;\n }\n\n // Apply keyframe transformations to the cssText of a given rule. The\n // keyframeTransforms object is a map of keyframe names to transformer\n // functions which take in cssText and spit out transformed cssText.\n applyKeyframeTransforms(rule, keyframeTransforms) {\n let input = rule['cssText'];\n let output = rule['cssText'];\n if (rule.hasAnimations == null) {\n // Cache whether or not the rule has any animations to begin with:\n rule.hasAnimations = RX.ANIMATION_MATCH.test(input);\n }\n // If there are no animations referenced, we can skip transforms:\n if (rule.hasAnimations) {\n let transform;\n // If we haven't transformed this rule before, we iterate over all\n // transforms:\n if (rule.keyframeNamesToTransform == null) {\n rule.keyframeNamesToTransform = [];\n for (let keyframe in keyframeTransforms) {\n transform = keyframeTransforms[keyframe];\n output = transform(input);\n // If the transform actually changed the CSS text, we cache the\n // transform name for future use:\n if (input !== output) {\n input = output;\n rule.keyframeNamesToTransform.push(keyframe);\n }\n }\n } else {\n // If we already have a list of keyframe names that apply to this\n // rule, we apply only those keyframe name transforms:\n for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {\n transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];\n input = transform(input);\n }\n output = input;\n }\n }\n rule['cssText'] = output;\n }\n\n // Test if the rules in these styles matches the given `element` and if so,\n // collect any custom properties into `props`.\n /**\n * @param {StyleNode} rules\n * @param {Element} element\n */\n propertyDataFromStyles(rules, element) {\n let props = {}, self = this;\n // generates a unique key for these matches\n let o = [];\n // note: active rules excludes non-matching @media rules\n StyleUtil.forEachRule(rules, function(rule) {\n // TODO(sorvell): we could trim the set of rules at declaration\n // time to only include ones that have properties\n if (!rule.propertyInfo) {\n self.decorateRule(rule);\n }\n // match element against transformedSelector: selector may contain\n // unwanted uniquification and parsedSelector does not directly match\n // for :host selectors.\n let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];\n if (element && rule.propertyInfo.properties && selectorToMatch) {\n if (matchesSelector.call(element, selectorToMatch)) {\n self.collectProperties(rule, props);\n // produce numeric key for these matches for lookup\n addToBitMask(rule.index, o);\n }\n }\n }, null, true);\n return {properties: props, key: o};\n }\n\n /**\n * @param {Element} scope\n * @param {StyleNode} rule\n * @param {string|undefined} cssBuild\n * @param {function(Object)} callback\n */\n whenHostOrRootRule(scope, rule, cssBuild, callback) {\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (!rule.propertyInfo.properties) {\n return;\n }\n let {is, typeExtension} = StyleUtil.getIsExtends(scope);\n let hostScope = is ?\n StyleTransformer._calcHostScope(is, typeExtension) :\n 'html';\n let parsedSelector = rule['parsedSelector'];\n let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');\n let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;\n // build info is either in scope (when scope is an element) or in the style\n // when scope is the default scope; note: this allows default scope to have\n // mixed mode built and unbuilt styles.\n if (cssBuild === 'shady') {\n // :root -> x-foo > *.x-foo for elements and html for custom-style\n isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;\n // :host -> x-foo for elements, but sub-rules have .x-foo in them\n isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;\n }\n if (cssBuild === 'shadow') {\n isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';\n isHost = isHost && !isRoot;\n }\n if (!isRoot && !isHost) {\n return;\n }\n let selectorToMatch = hostScope;\n if (isHost) {\n // need to transform :host because `:host` does not work with `matches`\n if (!rule.transformedSelector) {\n // transform :host into a matchable selector\n rule.transformedSelector =\n StyleTransformer._transformRuleCss(\n rule,\n StyleTransformer._transformComplexSelector,\n StyleTransformer._calcElementScope(is),\n hostScope\n );\n }\n selectorToMatch = rule.transformedSelector || hostScope;\n }\n callback({\n selector: selectorToMatch,\n isHost: isHost,\n isRoot: isRoot\n });\n }\n/**\n * @param {Element} scope\n * @param {StyleNode} rules\n * @return {Object}\n */\n hostAndRootPropertiesForScope(scope, rules) {\n let hostProps = {}, rootProps = {}, self = this;\n // note: active rules excludes non-matching @media rules\n let cssBuild = rules && rules['__cssBuild'];\n StyleUtil.forEachRule(rules, function(rule) {\n // if scope is StyleDefaults, use _element for matchesSelector\n self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {\n let element = scope._element || scope;\n if (matchesSelector.call(element, info.selector)) {\n if (info.isHost) {\n self.collectProperties(rule, hostProps);\n } else {\n self.collectProperties(rule, rootProps);\n }\n }\n });\n }, null, true);\n return {rootProps: rootProps, hostProps: hostProps};\n }\n\n /**\n * @param {Element} element\n * @param {Object} properties\n * @param {string} scopeSelector\n */\n transformStyles(element, properties, scopeSelector) {\n let self = this;\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n let hostSelector = StyleTransformer\n ._calcHostScope(is, typeExtension);\n let rxHostSelector = element.extends ?\n '\\\\' + hostSelector.slice(0, -1) + '\\\\]' :\n hostSelector;\n let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +\n RX.HOST_SUFFIX);\n let rules = StyleInfo.get(element).styleRules;\n let keyframeTransforms =\n this._elementKeyframeTransforms(element, rules, scopeSelector);\n return StyleTransformer.elementStyles(element, rules, function(rule) {\n self.applyProperties(rule, properties);\n if (!nativeShadow &&\n !StyleUtil.isKeyframesSelector(rule) &&\n rule['cssText']) {\n // NOTE: keyframe transforms only scope munge animation names, so it\n // is not necessary to apply them in ShadowDOM.\n self.applyKeyframeTransforms(rule, keyframeTransforms);\n self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);\n }\n });\n }\n\n /**\n * @param {Element} element\n * @param {StyleNode} rules\n * @param {string} scopeSelector\n * @return {Object}\n */\n _elementKeyframeTransforms(element, rules, scopeSelector) {\n let keyframesRules = rules._keyframes;\n let keyframeTransforms = {};\n if (!nativeShadow && keyframesRules) {\n // For non-ShadowDOM, we transform all known keyframes rules in\n // advance for the current scope. This allows us to catch keyframes\n // rules that appear anywhere in the stylesheet:\n for (let i = 0, keyframesRule = keyframesRules[i];\n i < keyframesRules.length;\n keyframesRule = keyframesRules[++i]) {\n this._scopeKeyframes(keyframesRule, scopeSelector);\n keyframeTransforms[keyframesRule['keyframesName']] =\n this._keyframesRuleTransformer(keyframesRule);\n }\n }\n return keyframeTransforms;\n }\n\n // Generate a factory for transforming a chunk of CSS text to handle a\n // particular scoped keyframes rule.\n /**\n * @param {StyleNode} keyframesRule\n * @return {function(string):string}\n */\n _keyframesRuleTransformer(keyframesRule) {\n return function(cssText) {\n return cssText.replace(\n keyframesRule.keyframesNameRx,\n keyframesRule.transformedKeyframesName);\n };\n }\n\n/**\n * Transforms `@keyframes` names to be unique for the current host.\n * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0\n *\n * @param {StyleNode} rule\n * @param {string} scopeId\n */\n _scopeKeyframes(rule, scopeId) {\n // Animation names are of the form [\\w-], so ensure that the name regex does not partially apply\n // to similarly named keyframe names by checking for a word boundary at the beginning and\n // a non-word boundary or `-` at the end.\n rule.keyframesNameRx = new RegExp(`\\\\b${rule['keyframesName']}(?!\\\\B|-)`, 'g');\n rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n rule['selector'] = rule.transformedSelector.replace(\n rule['keyframesName'], rule.transformedKeyframesName);\n }\n\n // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):\n // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo\n // host selector: x-foo.wide -> .x-foo-42.wide\n // note: we use only the scope class (.x-foo-42) and not the hostSelector\n // (x-foo) to scope :host rules; this helps make property host rules\n // have low specificity. They are overrideable by class selectors but,\n // unfortunately, not by type selectors (e.g. overriding via\n // `.special` is ok, but not by `x-foo`).\n /**\n * @param {StyleNode} rule\n * @param {RegExp} hostRx\n * @param {string} hostSelector\n * @param {string} scopeId\n */\n _scopeSelector(rule, hostRx, hostSelector, scopeId) {\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n let selector = rule.transformedSelector;\n let scope = '.' + scopeId;\n let parts = selector.split(',');\n for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n parts[i] = p.match(hostRx) ?\n p.replace(hostSelector, scope) :\n scope + ' ' + p;\n }\n rule['selector'] = parts.join(',');\n }\n\n /**\n * @param {Element} element\n * @param {string} selector\n * @param {string} old\n */\n applyElementScopeSelector(element, selector, old) {\n let c = element.getAttribute('class') || '';\n let v = c;\n if (old) {\n v = c.replace(\n new RegExp('\\\\s*' + XSCOPE_NAME + '\\\\s*' + old + '\\\\s*', 'g'), ' ');\n }\n v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;\n if (c !== v) {\n StyleUtil.setElementClassRaw(element, v);\n }\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Object} properties\n * @param {string} selector\n * @param {HTMLStyleElement} style\n * @return {HTMLStyleElement}\n */\n applyElementStyle(element, properties, selector, style) {\n // calculate cssText to apply\n let cssText = style ? style.textContent || '' :\n this.transformStyles(element, properties, selector);\n // if shady and we have a cached style that is not style, decrement\n let styleInfo = StyleInfo.get(element);\n let s = styleInfo.customStyle;\n if (s && !nativeShadow && (s !== style)) {\n s['_useCount']--;\n if (s['_useCount'] <= 0 && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }\n // apply styling always under native or if we generated style\n // or the cached style is not in document(!)\n if (nativeShadow) {\n // update existing style only under native\n if (styleInfo.customStyle) {\n styleInfo.customStyle.textContent = cssText;\n style = styleInfo.customStyle;\n // otherwise, if we have css to apply, do so\n } else if (cssText) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,\n styleInfo.placeholder);\n }\n } else {\n // shady and no cache hit\n if (!style) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n if (cssText) {\n style = StyleUtil.applyCss(cssText, selector, null,\n styleInfo.placeholder);\n }\n // shady and cache hit but not in document\n } else if (!style.parentNode) {\n if (IS_IE && cssText.indexOf('@media') > -1) {\n // @media rules may be stale in IE 10 and 11\n // refresh the text content of the style to revalidate them.\n style.textContent = cssText;\n }\n StyleUtil.applyStyle(style, null, styleInfo.placeholder);\n }\n }\n // ensure this style is our custom style and increment its use count.\n if (style) {\n style['_useCount'] = style['_useCount'] || 0;\n // increment use count if we changed styles\n if (styleInfo.customStyle != style) {\n style['_useCount']++;\n }\n styleInfo.customStyle = style;\n }\n return style;\n }\n\n /**\n * @param {Element} style\n * @param {Object} properties\n */\n applyCustomStyle(style, properties) {\n let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));\n let self = this;\n style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n let css = rule['cssText'] = rule['parsedCssText'];\n if (rule.propertyInfo && rule.propertyInfo.cssText) {\n // remove property assignments\n // so next function isn't confused\n // NOTE: we have 3 categories of css:\n // (1) normal properties,\n // (2) custom property assignments (--foo: red;),\n // (3) custom property usage: border: var(--foo); @apply(--foo);\n // In elements, 1 and 3 are separated for efficiency; here they\n // are not and this makes this case unique.\n css = removeCustomPropAssignment(/** @type {string} */(css));\n // replace with reified properties, scenario is same as mixin\n rule['cssText'] = self.valueForProperties(css, properties);\n }\n });\n }\n}\n\n/**\n * @param {number} n\n * @param {Array<number>} bits\n */\nfunction addToBitMask(n, bits) {\n let o = parseInt(n / 32, 10);\n let v = 1 << (n % 32);\n bits[o] = (bits[o] || 0) | v;\n}\n\nexport default new StyleProperties();","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {applyStylePlaceHolder} from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/** @type {Object<string, !Node>} */\nlet placeholderMap = {};\n\n/**\n * @const {CustomElementRegistry}\n */\nconst ce = window['customElements'];\nif (ce && !nativeShadow) {\n /**\n * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}\n */\n const origDefine = ce['define'];\n /**\n * @param {string} name\n * @param {function(new:HTMLElement)} clazz\n * @param {{extends: string}=} options\n */\n const wrappedDefine = (name, clazz, options) => {\n placeholderMap[name] = applyStylePlaceHolder(name);\n origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);\n };\n ce['define'] = wrappedDefine;\n}\n\nexport default placeholderMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nexport default class StyleCache {\n constructor(typeMax = 100) {\n // map element name -> [{properties, styleElement, scopeSelector}]\n this.cache = {};\n this.typeMax = typeMax;\n }\n\n _validate(cacheEntry, properties, ownPropertyNames) {\n for (let idx = 0; idx < ownPropertyNames.length; idx++) {\n let pn = ownPropertyNames[idx];\n if (cacheEntry.properties[pn] !== properties[pn]) {\n return false;\n }\n }\n return true;\n }\n\n store(tagname, properties, styleElement, scopeSelector) {\n let list = this.cache[tagname] || [];\n list.push({properties, styleElement, scopeSelector});\n if (list.length > this.typeMax) {\n list.shift();\n }\n this.cache[tagname] = list;\n }\n\n fetch(tagname, properties, ownPropertyNames) {\n let list = this.cache[tagname];\n if (!list) {\n return;\n }\n // reverse list for most-recent lookups\n for (let idx = list.length - 1; idx >= 0; idx--) {\n let entry = list[idx];\n if (this._validate(entry, properties, ownPropertyNames)) {\n return entry;\n }\n }\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport {getIsExtends} from './style-util.js';\n\nexport let flush = function() {};\n\n/**\n * @param {HTMLElement} element\n * @return {!Array<string>}\n */\nfunction getClasses(element) {\n let classes = [];\n if (element.classList) {\n classes = Array.from(element.classList);\n } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {\n classes = element.getAttribute('class').split(/\\s+/);\n }\n return classes;\n}\n\n/**\n * @param {HTMLElement} element\n * @return {string}\n */\nfunction getCurrentScope(element) {\n let classes = getClasses(element);\n let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);\n if (idx > -1) {\n return classes[idx + 1];\n }\n return '';\n}\n\n/**\n * @param {Array<MutationRecord|null>|null} mxns\n */\nfunction handler(mxns) {\n for (let x=0; x < mxns.length; x++) {\n let mxn = mxns[x];\n if (mxn.target === document.documentElement ||\n mxn.target === document.head) {\n continue;\n }\n for (let i=0; i < mxn.addedNodes.length; i++) {\n let n = mxn.addedNodes[i];\n if (n.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign\n let root = n.getRootNode();\n let currentScope = getCurrentScope(n);\n // node was scoped, but now is in document\n if (currentScope && root === n.ownerDocument) {\n StyleTransformer.dom(n, currentScope, true);\n } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let newScope;\n let host = /** @type {ShadowRoot} */(root).host;\n // element may no longer be in a shadowroot\n if (!host) {\n continue;\n }\n newScope = getIsExtends(host).is;\n if (currentScope === newScope) {\n // make sure all the subtree elements are scoped correctly\n let unscoped = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(\n n, `:not(.${StyleTransformer.SCOPE_NAME})`);\n for (let j = 0; j < unscoped.length; j++) {\n StyleTransformer.element(unscoped[j], currentScope);\n }\n continue;\n }\n if (currentScope) {\n StyleTransformer.dom(n, currentScope, true);\n }\n StyleTransformer.dom(n, newScope);\n }\n }\n }\n}\n\nif (!nativeShadow) {\n let observer = new MutationObserver(handler);\n let start = (node) => {\n observer.observe(node, {childList: true, subtree: true});\n }\n let nativeCustomElements = (window['customElements'] &&\n !window['customElements']['polyfillWrapFlushCallback']);\n // need to start immediately with native custom elements\n // TODO(dfreedm): with polyfilled HTMLImports and native custom elements\n // excessive mutations may be observed; this can be optimized via cooperation\n // with the HTMLImports polyfill.\n if (nativeCustomElements) {\n start(document);\n } else {\n let delayedStart = () => {\n start(document.body);\n }\n // use polyfill timing if it's available\n if (window['HTMLImports']) {\n window['HTMLImports']['whenReady'](delayedStart);\n // otherwise push beyond native imports being ready\n // which requires RAF + readystate interactive.\n } else {\n requestAnimationFrame(function() {\n if (document.readyState === 'loading') {\n let listener = function() {\n delayedStart();\n document.removeEventListener('readystatechange', listener);\n }\n document.addEventListener('readystatechange', listener);\n } else {\n delayedStart();\n }\n });\n }\n }\n\n flush = function() {\n handler(observer.takeRecords());\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {Promise<void>} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {parse, StyleNode} from './css-parse.js';\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport StyleProperties from './style-properties.js';\nimport placeholderMap from './style-placeholder.js';\nimport StyleInfo from './style-info.js';\nimport StyleCache from './style-cache.js';\nimport {flush as watcherFlush} from './document-watcher.js';\nimport templateMap from './template-map.js';\nimport * as ApplyShimUtils from './apply-shim-utils.js';\nimport documentWait from './document-wait.js';\nimport {updateNativeProperties, detectMixin} from './common-utils.js';\nimport {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars\n\n/**\n * @const {StyleCache}\n */\nconst styleCache = new StyleCache();\n\nexport default class ScopingShim {\n constructor() {\n this._scopeCounter = {};\n this._documentOwner = document.documentElement;\n let ast = new StyleNode();\n ast['rules'] = [];\n this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));\n this._elementsHaveApplied = false;\n this._applyShim = null;\n /** @type {?CustomStyleInterfaceInterface} */\n this._customStyleInterface = null;\n documentWait(() => {\n this._ensure();\n });\n }\n flush() {\n watcherFlush();\n }\n _generateScopeSelector(name) {\n let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;\n return `${name}-${id}`;\n }\n getStyleAst(style) {\n return StyleUtil.rulesForStyle(style);\n }\n styleAstToString(ast) {\n return StyleUtil.toCssText(ast);\n }\n _gatherStyles(template) {\n return StyleUtil.gatherStyleText(template.content);\n }\n _getCssBuild(template) {\n let style = template.content.querySelector('style');\n if (!style) {\n return '';\n }\n return style.getAttribute('css-build') || '';\n }\n /**\n * Prepare the styling and template for the given element type\n *\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplate(template, elementName, typeExtension) {\n if (template._prepared) {\n return;\n }\n template._prepared = true;\n template.name = elementName;\n template.extends = typeExtension;\n templateMap[elementName] = template;\n let cssBuild = this._getCssBuild(template);\n let cssText = this._gatherStyles(template);\n let info = {\n is: elementName,\n extends: typeExtension,\n __cssBuild: cssBuild,\n };\n if (!nativeShadow) {\n StyleTransformer.dom(template.content, elementName);\n }\n // check if the styling has mixin definitions or uses\n this._ensure();\n let hasMixins = detectMixin(cssText)\n let ast = parse(cssText);\n // only run the applyshim transforms if there is a mixin involved\n if (hasMixins && nativeCssVariables && this._applyShim) {\n this._applyShim['transformRules'](ast, elementName);\n }\n template['_styleAst'] = ast;\n template._cssBuild = cssBuild;\n\n let ownPropertyNames = [];\n if (!nativeCssVariables) {\n ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);\n }\n if (!ownPropertyNames.length || nativeCssVariables) {\n let root = nativeShadow ? template.content : null;\n let placeholder = placeholderMap[elementName];\n let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);\n template._style = style;\n }\n template._ownPropertyNames = ownPropertyNames;\n }\n _generateStaticStyle(info, rules, shadowroot, placeholder) {\n let cssText = StyleTransformer.elementStyles(info, rules);\n if (cssText.length) {\n return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);\n }\n }\n _prepareHost(host) {\n let {is, typeExtension} = StyleUtil.getIsExtends(host);\n let placeholder = placeholderMap[is];\n let template = templateMap[is];\n let ast;\n let ownStylePropertyNames;\n let cssBuild;\n if (template) {\n ast = template['_styleAst'];\n ownStylePropertyNames = template._ownPropertyNames;\n cssBuild = template._cssBuild;\n }\n return StyleInfo.set(host,\n new StyleInfo(\n ast,\n placeholder,\n ownStylePropertyNames,\n is,\n typeExtension,\n cssBuild\n )\n );\n }\n _ensureApplyShim() {\n if (this._applyShim) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {\n this._applyShim = window.ShadyCSS.ApplyShim;\n this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n }\n _ensureCustomStyleInterface() {\n if (this._customStyleInterface) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {\n this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);\n /** @type {function(!HTMLStyleElement)} */\n this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};\n this._customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {\n this.flushCustomStyles();\n }\n })\n };\n }\n }\n _ensure() {\n this._ensureApplyShim();\n this._ensureCustomStyleInterface();\n }\n /**\n * Flush and apply custom styles to document\n */\n flushCustomStyles() {\n this._ensure();\n if (!this._customStyleInterface) {\n return;\n }\n let customStyles = this._customStyleInterface['processStyles']();\n // early return if custom-styles don't need validation\n if (!this._customStyleInterface['enqueued']) {\n return;\n }\n if (!nativeCssVariables) {\n this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);\n this._applyCustomStyles(customStyles);\n } else {\n this._revalidateCustomStyleApplyShim(customStyles);\n }\n this._customStyleInterface['enqueued'] = false;\n // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree\n if (this._elementsHaveApplied && !nativeCssVariables) {\n this.styleDocument();\n }\n }\n /**\n * Apply styles for the given element\n *\n * @param {!HTMLElement} host\n * @param {Object=} overrideProps\n */\n styleElement(host, overrideProps) {\n let {is} = StyleUtil.getIsExtends(host);\n let styleInfo = StyleInfo.get(host);\n if (!styleInfo) {\n styleInfo = this._prepareHost(host);\n }\n // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called\n if (!this._isRootOwner(host)) {\n this._elementsHaveApplied = true;\n }\n if (overrideProps) {\n styleInfo.overrideStyleProperties =\n styleInfo.overrideStyleProperties || {};\n Object.assign(styleInfo.overrideStyleProperties, overrideProps);\n }\n if (!nativeCssVariables) {\n this._updateProperties(host, styleInfo);\n if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {\n this._applyStyleProperties(host, styleInfo);\n }\n } else {\n if (styleInfo.overrideStyleProperties) {\n updateNativeProperties(host, styleInfo.overrideStyleProperties);\n }\n let template = templateMap[is];\n // bail early if there is no shadowroot for this element\n if (!template && !this._isRootOwner(host)) {\n return;\n }\n if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {\n // update template\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this._ensure();\n this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);\n template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update instance if native shadowdom\n if (nativeShadow) {\n let root = host.shadowRoot;\n if (root) {\n let style = root.querySelector('style');\n style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n }\n }\n styleInfo.styleRules = template['_styleAst'];\n }\n }\n }\n _styleOwnerForNode(node) {\n let root = node.getRootNode();\n let host = root.host;\n if (host) {\n if (StyleInfo.get(host)) {\n return host;\n } else {\n return this._styleOwnerForNode(host);\n }\n }\n return this._documentOwner;\n }\n _isRootOwner(node) {\n return (node === this._documentOwner);\n }\n _applyStyleProperties(host, styleInfo) {\n let is = StyleUtil.getIsExtends(host).is;\n let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);\n let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;\n let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;\n let oldScopeSelector = styleInfo.scopeSelector;\n // only generate new scope if cached style is not found\n styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);\n let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);\n if (!nativeShadow) {\n StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);\n }\n if (!cacheEntry) {\n styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);\n }\n return style;\n }\n _updateProperties(host, styleInfo) {\n let owner = this._styleOwnerForNode(host);\n let ownerStyleInfo = StyleInfo.get(owner);\n let ownerProperties = ownerStyleInfo.styleProperties;\n let props = Object.create(ownerProperties || null);\n let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);\n let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);\n let propertiesMatchingHost = propertyData.properties\n Object.assign(\n props,\n hostAndRootProps.hostProps,\n propertiesMatchingHost,\n hostAndRootProps.rootProps\n );\n this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);\n StyleProperties.reify(props);\n styleInfo.styleProperties = props;\n }\n _mixinOverrideStyles(props, overrides) {\n for (let p in overrides) {\n let v = overrides[p];\n // skip override props if they are not truthy or 0\n // in order to fall back to inherited values\n if (v || v === 0) {\n props[p] = v;\n }\n }\n }\n /**\n * Update styles of the whole document\n *\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.styleSubtree(this._documentOwner, properties);\n }\n /**\n * Update styles of a subtree\n *\n * @param {!HTMLElement} host\n * @param {Object=} properties\n */\n styleSubtree(host, properties) {\n let root = host.shadowRoot;\n if (root || this._isRootOwner(host)) {\n this.styleElement(host, properties);\n }\n // process the shadowdom children of `host`\n let shadowChildren = root && (root.children || root.childNodes);\n if (shadowChildren) {\n for (let i = 0; i < shadowChildren.length; i++) {\n let c = /** @type {!HTMLElement} */(shadowChildren[i]);\n this.styleSubtree(c);\n }\n } else {\n // process the lightdom children of `host`\n let children = host.children || host.childNodes;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n let c = /** @type {!HTMLElement} */(children[i]);\n this.styleSubtree(c);\n }\n }\n }\n }\n /* Custom Style operations */\n _revalidateCustomStyleApplyShim(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n this._revalidateApplyShim(s);\n }\n }\n }\n _applyCustomStyles(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);\n }\n }\n }\n transformCustomStyleForDocument(style) {\n let ast = StyleUtil.rulesForStyle(style);\n StyleUtil.forEachRule(ast, (rule) => {\n if (nativeShadow) {\n StyleTransformer.normalizeRootSelector(rule);\n } else {\n StyleTransformer.documentRule(rule);\n }\n if (nativeCssVariables) {\n this._ensure();\n this._applyShim && this._applyShim['transformRule'](rule);\n }\n });\n if (nativeCssVariables) {\n style.textContent = StyleUtil.toCssText(ast);\n } else {\n this._documentOwnerStyleInfo.styleRules['rules'].push(ast);\n }\n }\n _revalidateApplyShim(style) {\n if (nativeCssVariables && this._applyShim) {\n let ast = StyleUtil.rulesForStyle(style);\n this._ensure();\n this._applyShim['transformRules'](ast);\n style.textContent = StyleUtil.toCssText(ast);\n }\n }\n getComputedStyleValue(element, property) {\n let value;\n if (!nativeCssVariables) {\n // element is either a style host, or an ancestor of a style host\n let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));\n value = styleInfo.styleProperties[property];\n }\n // fall back to the property value from the computed styling\n value = value || window.getComputedStyle(element).getPropertyValue(property);\n // trim whitespace that can come after the `:` in css\n // example: padding: 2px -> \" 2px\"\n return value ? value.trim() : '';\n }\n // given an element and a classString, replaces\n // the element's class with the provided classString and adds\n // any necessary ShadyCSS static and property based scoping selectors\n setElementClass(element, classString) {\n let root = element.getRootNode();\n let classes = classString ? classString.split(/\\s/) : [];\n let scopeName = root.host && root.host.localName;\n // If no scope, try to discover scope name from existing class.\n // This can occur if, for example, a template stamped element that\n // has been scoped is manipulated when not in a root.\n if (!scopeName) {\n var classAttr = element.getAttribute('class');\n if (classAttr) {\n let k$ = classAttr.split(/\\s/);\n for (let i=0; i < k$.length; i++) {\n if (k$[i] === StyleTransformer.SCOPE_NAME) {\n scopeName = k$[i+1];\n break;\n }\n }\n }\n }\n if (scopeName) {\n classes.push(StyleTransformer.SCOPE_NAME, scopeName);\n }\n if (!nativeCssVariables) {\n let styleInfo = StyleInfo.get(element);\n if (styleInfo && styleInfo.scopeSelector) {\n classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);\n }\n }\n StyleUtil.setElementClassRaw(element, classes.join(' '));\n }\n _styleInfoForNode(node) {\n return StyleInfo.get(node);\n }\n}\n\n/* exports */\nScopingShim.prototype['flush'] = ScopingShim.prototype.flush;\nScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;\nScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;\nScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;\nScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;\nScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;\nScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;\nScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;\nScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;\nScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;\nScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;\nScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;\nObject.defineProperties(ScopingShim.prototype, {\n 'nativeShadow': {\n get() {\n return nativeShadow;\n }\n },\n 'nativeCss': {\n get() {\n return nativeCssVariables;\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ScopingShim from '../src/scoping-shim.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ScopingShim} */\nconst scopingShim = new ScopingShim();\n\nlet ApplyShim, CustomStyleInterface;\n\nif (window['ShadyCSS']) {\n ApplyShim = window['ShadyCSS']['ApplyShim'];\n CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];\n}\n\nwindow.ShadyCSS = {\n ScopingShim: scopingShim,\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplate(template, elementName, elementExtends)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n scopingShim.flushCustomStyles();\n scopingShim.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleDocument(properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return scopingShim.getComputedStyleValue(element, property);\n },\n\n nativeCss: nativeCssVariables,\n\n nativeShadow: nativeShadow\n};\n\nif (ApplyShim) {\n window.ShadyCSS.ApplyShim = ApplyShim;\n}\n\nif (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n}","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\nlet customElements = window['customElements'];\nlet HTMLImports = window['HTMLImports'];\nlet Template = window['HTMLTemplateElement'];\n\n// global for (1) existence means `WebComponentsReady` will file,\n// (2) WebComponents.ready == true means event has fired.\nwindow.WebComponents = window.WebComponents || {};\n\nif (customElements && customElements['polyfillWrapFlushCallback']) {\n // Here we ensure that the public `HTMLImports.whenReady`\n // always comes *after* custom elements have upgraded.\n let flushCallback;\n let runAndClearCallback = function runAndClearCallback() {\n if (flushCallback) {\n // make sure to run the HTMLTemplateElement polyfill before custom elements upgrade\n if (Template.bootstrap) {\n Template.bootstrap(window.document);\n }\n let cb = flushCallback;\n flushCallback = null;\n cb();\n return true;\n }\n }\n let origWhenReady = HTMLImports['whenReady'];\n customElements['polyfillWrapFlushCallback'](function(cb) {\n flushCallback = cb;\n origWhenReady(runAndClearCallback);\n });\n\n HTMLImports['whenReady'] = function(cb) {\n origWhenReady(function() {\n // custom element code may add dynamic imports\n // to match processing of native custom elements before\n // domContentLoaded, we wait for these imports to resolve first.\n if (runAndClearCallback()) {\n HTMLImports['whenReady'](cb);\n } else {\n cb();\n }\n });\n }\n\n}\n\nHTMLImports['whenReady'](function() {\n requestAnimationFrame(function() {\n window.WebComponents.ready = true;\n document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));\n });\n});","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n// It's desireable to provide a default stylesheet\n// that's convenient for styling unresolved elements, but\n// it's cumbersome to have to include this manually in every page.\n// It would make sense to put inside some HTMLImport but\n// the HTMLImports polyfill does not allow loading of stylesheets\n// that block rendering. Therefore this injection is tolerated here.\n//\n// NOTE: position: relative fixes IE's failure to inherit opacity\n// when a child is not statically positioned.\nlet style = document.createElement('style');\nstyle.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;'\n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden; position: relative;'\n + ' } \\n'\n ;\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);"]} \ No newline at end of file
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-loader.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-loader.js
new file mode 100644
index 00000000000..661285e861f
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-loader.js
@@ -0,0 +1,74 @@
+/**
+ * @license
+ * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ * Code distributed by Google as part of the polymer project is also
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+ */
+
+(function() {
+ 'use strict';
+ // global for (1) existence means `WebComponentsReady` will fire,
+ // (2) WebComponents.ready == true means event has fired.
+ window.WebComponents = window.WebComponents || {};
+ var name = 'webcomponents-loader.js';
+ // Feature detect which polyfill needs to be imported.
+ var polyfills = [];
+ if (!('import' in document.createElement('link'))) {
+ polyfills.push('hi');
+ }
+ if (!('attachShadow' in Element.prototype && 'getRootNode' in Element.prototype) ||
+ (window.ShadyDOM && window.ShadyDOM.force)) {
+ polyfills.push('sd');
+ }
+ if (!window.customElements || window.customElements.forcePolyfill) {
+ polyfills.push('ce');
+ }
+ // NOTE: any browser that does not have template or ES6 features
+ // must load the full suite (called `lite` for legacy reasons) of polyfills.
+ if (!('content' in document.createElement('template')) || !window.Promise || !Array.from ||
+ // Edge has broken fragment cloning which means you cannot clone template.content
+ !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment)) {
+ polyfills = ['lite'];
+ }
+
+ if (polyfills.length) {
+ var script = document.querySelector('script[src*="' + name +'"]');
+ var newScript = document.createElement('script');
+ // Load it from the right place.
+ var replacement = 'webcomponents-' + polyfills.join('-') + '.js';
+ var url = script.src.replace(name, replacement);
+ newScript.src = url;
+ // NOTE: this is required to ensure the polyfills are loaded before
+ // *native* html imports load on older Chrome versions. This *is* CSP
+ // compliant since CSP rules must have allowed this script to run.
+ // In all other cases, this can be async.
+ if (document.readyState === 'loading' && ('import' in document.createElement('link'))) {
+ document.write(newScript.outerHTML);
+ } else {
+ document.head.appendChild(newScript);
+ }
+ } else {
+ // Ensure `WebComponentsReady` is fired also when there are no polyfills loaded.
+ // however, we have to wait for the document to be in 'interactive' state,
+ // otherwise a rAF may fire before scripts in <body>
+
+ var fire = function() {
+ requestAnimationFrame(function() {
+ window.WebComponents.ready = true;
+ document.dispatchEvent(new CustomEvent('WebComponentsReady', {bubbles: true}));
+ });
+ };
+
+ if (document.readyState !== 'loading') {
+ fire();
+ } else {
+ document.addEventListener('readystatechange', function wait() {
+ fire();
+ document.removeEventListener('readystatechange', wait);
+ });
+ }
+ }
+})();
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js
new file mode 100644
index 00000000000..6227827a0dc
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js
@@ -0,0 +1,172 @@
+/**
+@license @nocompile
+Copyright (c) 2018 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+(function(){/*
+
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+'use strict';var n,p="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};function ba(){ba=function(){};p.Symbol||(p.Symbol=ca)}var ca=function(){var a=0;return function(b){return"jscomp_symbol_"+(b||"")+a++}}();
+function da(){ba();var a=p.Symbol.iterator;a||(a=p.Symbol.iterator=p.Symbol("iterator"));"function"!=typeof Array.prototype[a]&&aa(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return ea(this)}});da=function(){}}function ea(a){var b=0;return fa(function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}})}function fa(a){da();a={next:a};a[p.Symbol.iterator]=function(){return this};return a}function ha(a){da();var b=a[Symbol.iterator];return b?b.call(a):ea(a)}
+function ia(a){for(var b,c=[];!(b=a.next()).done;)c.push(b.value);return c}function ja(){this.ja=this.root=null;this.P=!1;this.w=this.L=this.aa=this.assignedSlot=this.assignedNodes=this.F=null;this.childNodes=this.nextSibling=this.previousSibling=this.lastChild=this.firstChild=this.parentNode=this.H=void 0;this.oa=this.da=!1}ja.prototype.toJSON=function(){return{}};function r(a){a.W||(a.W=new ja);return a.W}function t(a){return a&&a.W};var u=window.ShadyDOM||{};u.ya=!(!Element.prototype.attachShadow||!Node.prototype.getRootNode);var ka=Object.getOwnPropertyDescriptor(Node.prototype,"firstChild");u.s=!!(ka&&ka.configurable&&ka.get);u.ha=u.force||!u.ya;var la=navigator.userAgent.match("Trident"),ma=navigator.userAgent.match("Edge");void 0===u.la&&(u.la=u.s&&(la||ma));function v(a){return(a=t(a))&&void 0!==a.firstChild}function w(a){return"ShadyRoot"===a.sa}function x(a){a=a.getRootNode();if(w(a))return a}
+var na=Element.prototype,oa=na.matches||na.matchesSelector||na.mozMatchesSelector||na.msMatchesSelector||na.oMatchesSelector||na.webkitMatchesSelector;function pa(a,b){if(a&&b)for(var c=Object.getOwnPropertyNames(b),d=0,e;d<c.length&&(e=c[d]);d++){var f=Object.getOwnPropertyDescriptor(b,e);f&&Object.defineProperty(a,e,f)}}function qa(a,b){for(var c=[],d=1;d<arguments.length;++d)c[d-1]=arguments[d];for(d=0;d<c.length;d++)pa(a,c[d]);return a}function sa(a,b){for(var c in b)a[c]=b[c]}
+var ta=document.createTextNode(""),ua=0,va=[];(new MutationObserver(function(){for(;va.length;)try{va.shift()()}catch(a){throw ta.textContent=ua++,a;}})).observe(ta,{characterData:!0});function wa(a){va.push(a);ta.textContent=ua++}var xa=!!document.contains;function ya(a,b){for(;b;){if(b==a)return!0;b=b.parentNode}return!1};var za=[],Aa;function Ba(a){Aa||(Aa=!0,wa(Ca));za.push(a)}function Ca(){Aa=!1;for(var a=!!za.length;za.length;)za.shift()();return a}Ca.list=za;function Da(){this.a=!1;this.addedNodes=[];this.removedNodes=[];this.O=new Set}function Ea(a){a.a||(a.a=!0,wa(function(){Fa(a)}))}function Fa(a){if(a.a){a.a=!1;var b=a.takeRecords();b.length&&a.O.forEach(function(a){a(b)})}}Da.prototype.takeRecords=function(){if(this.addedNodes.length||this.removedNodes.length){var a=[{addedNodes:this.addedNodes,removedNodes:this.removedNodes}];this.addedNodes=[];this.removedNodes=[];return a}return[]};
+function Ga(a,b){var c=r(a);c.F||(c.F=new Da);c.F.O.add(b);var d=c.F;return{qa:b,B:d,ta:a,takeRecords:function(){return d.takeRecords()}}}function Ha(a){var b=a&&a.B;b&&(b.O.delete(a.qa),b.O.size||(r(a.ta).F=null))}
+function Ia(a,b){var c=b.getRootNode();return a.map(function(a){var b=c===a.target.getRootNode();if(b&&a.addedNodes){if(b=Array.from(a.addedNodes).filter(function(a){return c===a.getRootNode()}),b.length)return a=Object.create(a),Object.defineProperty(a,"addedNodes",{value:b,configurable:!0}),a}else if(b)return a}).filter(function(a){return a})};var y={},Ja=Element.prototype.insertBefore,Ka=Element.prototype.replaceChild,La=Element.prototype.removeChild,Ma=Element.prototype.setAttribute,Na=Element.prototype.removeAttribute,Oa=Element.prototype.cloneNode,Pa=Document.prototype.importNode,Qa=Element.prototype.addEventListener,Ra=Element.prototype.removeEventListener,Sa=Window.prototype.addEventListener,Ta=Window.prototype.removeEventListener,Ua=Element.prototype.dispatchEvent,Va=Node.prototype.contains||HTMLElement.prototype.contains,Wa=Document.prototype.getElementById,
+Xa=Element.prototype.querySelector,Ya=DocumentFragment.prototype.querySelector,Za=Document.prototype.querySelector,$a=Element.prototype.querySelectorAll,ab=DocumentFragment.prototype.querySelectorAll,bb=Document.prototype.querySelectorAll;y.appendChild=Element.prototype.appendChild;y.insertBefore=Ja;y.replaceChild=Ka;y.removeChild=La;y.setAttribute=Ma;y.removeAttribute=Na;y.cloneNode=Oa;y.importNode=Pa;y.addEventListener=Qa;y.removeEventListener=Ra;y.Ha=Sa;y.Ia=Ta;y.dispatchEvent=Ua;y.contains=Va;
+y.getElementById=Wa;y.Qa=Xa;y.Ta=Ya;y.Oa=Za;y.querySelector=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return Xa.call(this,a);case Node.DOCUMENT_NODE:return Za.call(this,a);default:return Ya.call(this,a)}};y.Ra=$a;y.Ua=ab;y.Pa=bb;y.querySelectorAll=function(a){switch(this.nodeType){case Node.ELEMENT_NODE:return $a.call(this,a);case Node.DOCUMENT_NODE:return bb.call(this,a);default:return ab.call(this,a)}};var cb=/[&\u00A0"]/g,db=/[&\u00A0<>]/g;function eb(a){switch(a){case "&":return"&amp;";case "<":return"&lt;";case ">":return"&gt;";case '"':return"&quot;";case "\u00a0":return"&nbsp;"}}function fb(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}var gb=fb("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),hb=fb("style script xmp iframe noembed noframes plaintext noscript".split(" "));
+function ib(a,b){"template"===a.localName&&(a=a.content);for(var c="",d=b?b(a):a.childNodes,e=0,f=d.length,g;e<f&&(g=d[e]);e++){a:{var h=g;var k=a;var l=b;switch(h.nodeType){case Node.ELEMENT_NODE:for(var m=h.localName,q="<"+m,O=h.attributes,L=0;k=O[L];L++)q+=" "+k.name+'="'+k.value.replace(cb,eb)+'"';q+=">";h=gb[m]?q:q+ib(h,l)+"</"+m+">";break a;case Node.TEXT_NODE:h=h.data;h=k&&hb[k.localName]?h:h.replace(db,eb);break a;case Node.COMMENT_NODE:h="\x3c!--"+h.data+"--\x3e";break a;default:throw window.console.error(h),
+Error("not implemented");}}c+=h}return c};var z={},A=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),B=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1);function jb(a){var b=[];A.currentNode=a;for(a=A.firstChild();a;)b.push(a),a=A.nextSibling();return b}z.parentNode=function(a){A.currentNode=a;return A.parentNode()};z.firstChild=function(a){A.currentNode=a;return A.firstChild()};z.lastChild=function(a){A.currentNode=a;return A.lastChild()};z.previousSibling=function(a){A.currentNode=a;return A.previousSibling()};
+z.nextSibling=function(a){A.currentNode=a;return A.nextSibling()};z.childNodes=jb;z.parentElement=function(a){B.currentNode=a;return B.parentNode()};z.firstElementChild=function(a){B.currentNode=a;return B.firstChild()};z.lastElementChild=function(a){B.currentNode=a;return B.lastChild()};z.previousElementSibling=function(a){B.currentNode=a;return B.previousSibling()};z.nextElementSibling=function(a){B.currentNode=a;return B.nextSibling()};
+z.children=function(a){var b=[];B.currentNode=a;for(a=B.firstChild();a;)b.push(a),a=B.nextSibling();return b};z.innerHTML=function(a){return ib(a,function(a){return jb(a)})};z.textContent=function(a){switch(a.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:a=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);for(var b="",c;c=a.nextNode();)b+=c.nodeValue;return b;default:return a.nodeValue}};var C={},kb=u.s,lb=[Node.prototype,Element.prototype,HTMLElement.prototype];function D(a){var b;a:{for(b=0;b<lb.length;b++){var c=lb[b];if(c.hasOwnProperty(a)){b=c;break a}}b=void 0}if(!b)throw Error("Could not find descriptor for "+a);return Object.getOwnPropertyDescriptor(b,a)}
+var E=kb?{parentNode:D("parentNode"),firstChild:D("firstChild"),lastChild:D("lastChild"),previousSibling:D("previousSibling"),nextSibling:D("nextSibling"),childNodes:D("childNodes"),parentElement:D("parentElement"),previousElementSibling:D("previousElementSibling"),nextElementSibling:D("nextElementSibling"),innerHTML:D("innerHTML"),textContent:D("textContent"),firstElementChild:D("firstElementChild"),lastElementChild:D("lastElementChild"),children:D("children")}:{},mb=kb?{firstElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,
+"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(DocumentFragment.prototype,"children")}:{},nb=kb?{firstElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"firstElementChild"),lastElementChild:Object.getOwnPropertyDescriptor(Document.prototype,"lastElementChild"),children:Object.getOwnPropertyDescriptor(Document.prototype,"children")}:{};C.ia=E;C.Sa=mb;C.Na=nb;C.parentNode=function(a){return E.parentNode.get.call(a)};
+C.firstChild=function(a){return E.firstChild.get.call(a)};C.lastChild=function(a){return E.lastChild.get.call(a)};C.previousSibling=function(a){return E.previousSibling.get.call(a)};C.nextSibling=function(a){return E.nextSibling.get.call(a)};C.childNodes=function(a){return Array.prototype.slice.call(E.childNodes.get.call(a))};C.parentElement=function(a){return E.parentElement.get.call(a)};C.previousElementSibling=function(a){return E.previousElementSibling.get.call(a)};C.nextElementSibling=function(a){return E.nextElementSibling.get.call(a)};
+C.innerHTML=function(a){return E.innerHTML.get.call(a)};C.textContent=function(a){return E.textContent.get.call(a)};C.children=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:a=mb.children.get.call(a);break;case Node.DOCUMENT_NODE:a=nb.children.get.call(a);break;default:a=E.children.get.call(a)}return Array.prototype.slice.call(a)};
+C.firstElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return mb.firstElementChild.get.call(a);case Node.DOCUMENT_NODE:return nb.firstElementChild.get.call(a);default:return E.firstElementChild.get.call(a)}};C.lastElementChild=function(a){switch(a.nodeType){case Node.DOCUMENT_FRAGMENT_NODE:return mb.lastElementChild.get.call(a);case Node.DOCUMENT_NODE:return nb.lastElementChild.get.call(a);default:return E.lastElementChild.get.call(a)}};var F=u.la?C:z;function ob(a){for(;a.firstChild;)a.removeChild(a.firstChild)}
+var pb=u.s,qb=document.implementation.createHTMLDocument("inert"),rb=Object.getOwnPropertyDescriptor(Node.prototype,"isConnected"),sb=rb&&rb.get,tb=Object.getOwnPropertyDescriptor(Document.prototype,"activeElement"),ub={parentElement:{get:function(){var a=t(this);(a=a&&a.parentNode)&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:F.parentElement(this)},configurable:!0},parentNode:{get:function(){var a=t(this);a=a&&a.parentNode;return void 0!==a?a:F.parentNode(this)},configurable:!0},
+nextSibling:{get:function(){var a=t(this);a=a&&a.nextSibling;return void 0!==a?a:F.nextSibling(this)},configurable:!0},previousSibling:{get:function(){var a=t(this);a=a&&a.previousSibling;return void 0!==a?a:F.previousSibling(this)},configurable:!0},nextElementSibling:{get:function(){var a=t(this);if(a&&void 0!==a.nextSibling){for(a=this.nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return F.nextElementSibling(this)},configurable:!0},previousElementSibling:{get:function(){var a=
+t(this);if(a&&void 0!==a.previousSibling){for(a=this.previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return F.previousElementSibling(this)},configurable:!0}},vb={className:{get:function(){return this.getAttribute("class")||""},set:function(a){this.setAttribute("class",a)},configurable:!0}},wb={childNodes:{get:function(){if(v(this)){var a=t(this);if(!a.childNodes){a.childNodes=[];for(var b=this.firstChild;b;b=b.nextSibling)a.childNodes.push(b)}var c=a.childNodes}else c=
+F.childNodes(this);c.item=function(a){return c[a]};return c},configurable:!0},childElementCount:{get:function(){return this.children.length},configurable:!0},firstChild:{get:function(){var a=t(this);a=a&&a.firstChild;return void 0!==a?a:F.firstChild(this)},configurable:!0},lastChild:{get:function(){var a=t(this);a=a&&a.lastChild;return void 0!==a?a:F.lastChild(this)},configurable:!0},textContent:{get:function(){if(v(this)){for(var a=[],b=0,c=this.childNodes,d;d=c[b];b++)d.nodeType!==Node.COMMENT_NODE&&
+a.push(d.textContent);return a.join("")}return F.textContent(this)},set:function(a){if("undefined"===typeof a||null===a)a="";switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:if(!v(this)&&pb){var b=this.firstChild;(b!=this.lastChild||b&&b.nodeType!=Node.TEXT_NODE)&&ob(this);C.ia.textContent.set.call(this,a)}else ob(this),(0<a.length||this.nodeType===Node.ELEMENT_NODE)&&this.appendChild(document.createTextNode(a));break;default:this.nodeValue=a}},configurable:!0},firstElementChild:{get:function(){var a=
+t(this);if(a&&void 0!==a.firstChild){for(a=this.firstChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return F.firstElementChild(this)},configurable:!0},lastElementChild:{get:function(){var a=t(this);if(a&&void 0!==a.lastChild){for(a=this.lastChild;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return F.lastElementChild(this)},configurable:!0},children:{get:function(){var a=v(this)?Array.prototype.filter.call(this.childNodes,function(a){return a.nodeType===Node.ELEMENT_NODE}):
+F.children(this);a.item=function(b){return a[b]};return a},configurable:!0},innerHTML:{get:function(){return v(this)?ib("template"===this.localName?this.content:this):F.innerHTML(this)},set:function(a){var b="template"===this.localName?this.content:this;ob(b);var c=this.localName;c&&"template"!==c||(c="div");c=qb.createElement(c);for(pb?C.ia.innerHTML.set.call(c,a):c.innerHTML=a;c.firstChild;)b.appendChild(c.firstChild)},configurable:!0}},xb={shadowRoot:{get:function(){var a=t(this);return a&&a.ja||
+null},configurable:!0}},yb={activeElement:{get:function(){var a=tb&&tb.get?tb.get.call(document):u.s?void 0:document.activeElement;if(a&&a.nodeType){var b=!!w(this);if(this===document||b&&this.host!==a&&y.contains.call(this.host,a)){for(b=x(a);b&&b!==this;)a=b.host,b=x(a);a=this===document?b?null:a:b===this?a:null}else a=null}else a=null;return a},set:function(){},configurable:!0}};
+function G(a,b,c){for(var d in b){var e=Object.getOwnPropertyDescriptor(a,d);e&&e.configurable||!e&&c?Object.defineProperty(a,d,b[d]):c&&console.warn("Could not define",d,"on",a)}}function H(a){G(a,ub);G(a,vb);G(a,wb);G(a,yb)}
+function zb(){var a=Ab.prototype;a.__proto__=DocumentFragment.prototype;G(a,ub,!0);G(a,wb,!0);G(a,yb,!0);Object.defineProperties(a,{nodeType:{value:Node.DOCUMENT_FRAGMENT_NODE,configurable:!0},nodeName:{value:"#document-fragment",configurable:!0},nodeValue:{value:null,configurable:!0}});["localName","namespaceURI","prefix"].forEach(function(b){Object.defineProperty(a,b,{value:void 0,configurable:!0})});["ownerDocument","baseURI","isConnected"].forEach(function(b){Object.defineProperty(a,b,{get:function(){return this.host[b]},
+configurable:!0})})}var Bb=u.s?function(){}:function(a){var b=r(a);b.da||(b.da=!0,G(a,ub,!0),G(a,vb,!0))},Cb=u.s?function(){}:function(a){r(a).oa||(G(a,wb,!0),G(a,xb,!0))};var Db=F.childNodes;function Eb(a,b,c){Bb(a);c=c||null;var d=r(a),e=r(b),f=c?r(c):null;d.previousSibling=c?f.previousSibling:b.lastChild;if(f=t(d.previousSibling))f.nextSibling=a;if(f=t(d.nextSibling=c))f.previousSibling=a;d.parentNode=b;c?c===e.firstChild&&(e.firstChild=a):(e.lastChild=a,e.firstChild||(e.firstChild=a));e.childNodes=null}
+function Fb(a,b){var c=r(a);if(void 0===c.firstChild)for(b=b||Db(a),c.firstChild=b[0]||null,c.lastChild=b[b.length-1]||null,Cb(a),c=0;c<b.length;c++){var d=b[c],e=r(d);e.parentNode=a;e.nextSibling=b[c+1]||null;e.previousSibling=b[c-1]||null;Bb(d)}};var Gb=F.parentNode;
+function Hb(a,b,c){if(b===a)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(c){var d=t(c);d=d&&d.parentNode;if(void 0!==d&&d!==a||void 0===d&&Gb(c)!==a)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(c===b)return b;b.parentNode&&Ib(b.parentNode,b);var e,f;if(!b.__noInsertionPoint){if(f=e=x(a)){var g;"slot"===b.localName?g=[b]:b.querySelectorAll&&
+(g=b.querySelectorAll("slot"));f=g&&g.length?g:void 0}f&&(g=e,d=f,g.o=g.o||[],g.f=g.f||[],g.g=g.g||{},g.o.push.apply(g.o,[].concat(d instanceof Array?d:ia(ha(d)))))}("slot"===a.localName||f)&&(e=e||x(a))&&Jb(e);if(v(a)){e=c;Cb(a);f=r(a);void 0!==f.firstChild&&(f.childNodes=null);if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE){f=b.childNodes;for(g=0;g<f.length;g++)Eb(f[g],a,e);e=r(b);f=void 0!==e.firstChild?null:void 0;e.firstChild=e.lastChild=f;e.childNodes=f}else Eb(b,a,e);e=t(a);if(Kb(a)){Jb(e.root);
+var h=!0}else e.root&&(h=!0)}h||(h=w(a)?a.host:a,c?(c=Lb(c),y.insertBefore.call(h,b,c)):y.appendChild.call(h,b));Mb(a,b);return b}
+function Ib(a,b){if(b.parentNode!==a)throw Error("The node to be removed is not a child of this node: "+b);var c=x(b),d=t(a);if(v(a)){var e=r(b),f=r(a);b===f.firstChild&&(f.firstChild=e.nextSibling);b===f.lastChild&&(f.lastChild=e.previousSibling);var g=e.previousSibling,h=e.nextSibling;g&&(r(g).nextSibling=h);h&&(r(h).previousSibling=g);e.parentNode=e.previousSibling=e.nextSibling=void 0;void 0!==f.childNodes&&(f.childNodes=null);if(Kb(a)){Jb(d.root);var k=!0}}Nb(b);if(c){(e=a&&"slot"===a.localName)&&
+(k=!0);if(c.f){Ob(c);f=c.g;for(ra in f)for(g=f[ra],h=0;h<g.length;h++){var l=g[h];if(ya(b,l)){g.splice(h,1);var m=c.f.indexOf(l);0<=m&&c.f.splice(m,1);h--;m=t(l);if(l=m.w)for(var q=0;q<l.length;q++){var O=l[q],L=Pb(O);L&&y.removeChild.call(L,O)}m.w=[];m.assignedNodes=[];m=!0}}var ra=m}else ra=void 0;(ra||e)&&Jb(c)}k||(k=w(a)?a.host:a,(!d.root&&"slot"!==b.localName||k===Gb(b))&&y.removeChild.call(k,b));Mb(a,null,b);return b}
+function Nb(a){var b=t(a);if(b&&void 0!==b.H){b=a.childNodes;for(var c=0,d=b.length,e;c<d&&(e=b[c]);c++)Nb(e)}if(a=t(a))a.H=void 0}function Lb(a){var b=a;a&&"slot"===a.localName&&(b=(b=(b=t(a))&&b.w)&&b.length?b[0]:Lb(a.nextSibling));return b}function Kb(a){return(a=(a=t(a))&&a.root)&&Qb(a)}
+function Rb(a,b){if("slot"===b)a=a.parentNode,Kb(a)&&Jb(t(a).root);else if("slot"===a.localName&&"name"===b&&(b=x(a))){if(b.f){var c=a.pa,d=Sb(a);if(d!==c){c=b.g[c];var e=c.indexOf(a);0<=e&&c.splice(e,1);c=b.g[d]||(b.g[d]=[]);c.push(a);1<c.length&&(b.g[d]=Tb(c))}}Jb(b)}}function Mb(a,b,c){if(a=(a=t(a))&&a.F)b&&a.addedNodes.push(b),c&&a.removedNodes.push(c),Ea(a)}
+function Ub(a){if(a&&a.nodeType){var b=r(a),c=b.H;void 0===c&&(w(a)?(c=a,b.H=c):(c=(c=a.parentNode)?Ub(c):a,y.contains.call(document.documentElement,a)&&(b.H=c)));return c}}function Vb(a,b,c){var d=[];Wb(a.childNodes,b,c,d);return d}function Wb(a,b,c,d){for(var e=0,f=a.length,g;e<f&&(g=a[e]);e++){var h;if(h=g.nodeType===Node.ELEMENT_NODE){h=g;var k=b,l=c,m=d,q=k(h);q&&m.push(h);l&&l(q)?h=q:(Wb(h.childNodes,k,l,m),h=void 0)}if(h)break}}var Xb=null;
+function Yb(a,b,c){Xb||(Xb=window.ShadyCSS&&window.ShadyCSS.ScopingShim);Xb&&"class"===b?Xb.setElementClass(a,c):(y.setAttribute.call(a,b,c),Rb(a,b))}function Zb(a,b){if(a.ownerDocument!==document)return y.importNode.call(document,a,b);var c=y.importNode.call(document,a,!1);if(b){a=a.childNodes;b=0;for(var d;b<a.length;b++)d=Zb(a[b],!0),c.appendChild(d)}return c};var $b="__eventWrappers"+Date.now(),ac={blur:!0,focus:!0,focusin:!0,focusout:!0,click:!0,dblclick:!0,mousedown:!0,mouseenter:!0,mouseleave:!0,mousemove:!0,mouseout:!0,mouseover:!0,mouseup:!0,wheel:!0,beforeinput:!0,input:!0,keydown:!0,keyup:!0,compositionstart:!0,compositionupdate:!0,compositionend:!0,touchstart:!0,touchend:!0,touchmove:!0,touchcancel:!0,pointerover:!0,pointerenter:!0,pointerdown:!0,pointermove:!0,pointerup:!0,pointercancel:!0,pointerout:!0,pointerleave:!0,gotpointercapture:!0,lostpointercapture:!0,
+dragstart:!0,drag:!0,dragenter:!0,dragleave:!0,dragover:!0,drop:!0,dragend:!0,DOMActivate:!0,DOMFocusIn:!0,DOMFocusOut:!0,keypress:!0};function bc(a,b){var c=[],d=a;for(a=a===window?window:a.getRootNode();d;)c.push(d),d=d.assignedSlot?d.assignedSlot:d.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&d.host&&(b||d!==a)?d.host:d.parentNode;c[c.length-1]===document&&c.push(window);return c}
+function cc(a,b){if(!w)return a;a=bc(a,!0);for(var c=0,d,e,f,g;c<b.length;c++)if(d=b[c],f=d===window?window:d.getRootNode(),f!==e&&(g=a.indexOf(f),e=f),!w(f)||-1<g)return d}
+var dc={get composed(){!1!==this.isTrusted&&void 0===this.U&&(this.U=ac[this.type]);return this.U||!1},composedPath:function(){this.b||(this.b=bc(this.__target,this.composed));return this.b},get target(){return cc(this.currentTarget,this.composedPath())},get relatedTarget(){if(!this.V)return null;this.c||(this.c=bc(this.V,!0));return cc(this.currentTarget,this.c)},stopPropagation:function(){Event.prototype.stopPropagation.call(this);this.a=!0},stopImmediatePropagation:function(){Event.prototype.stopImmediatePropagation.call(this);
+this.a=this.i=!0}};function ec(a){function b(b,d){b=new a(b,d);b.U=d&&!!d.composed;return b}sa(b,a);b.prototype=a.prototype;return b}var fc={focus:!0,blur:!0};function gc(a){return a.__target!==a.target||a.V!==a.relatedTarget}function hc(a,b,c){if(c=b.__handlers&&b.__handlers[a.type]&&b.__handlers[a.type][c])for(var d=0,e;(e=c[d])&&(!gc(a)||a.target!==a.relatedTarget)&&(e.call(b,a),!a.i);d++);}
+function ic(a){var b=a.composedPath();Object.defineProperty(a,"currentTarget",{get:function(){return d},configurable:!0});for(var c=b.length-1;0<=c;c--){var d=b[c];hc(a,d,"capture");if(a.a)return}Object.defineProperty(a,"eventPhase",{get:function(){return Event.AT_TARGET}});var e;for(c=0;c<b.length;c++){d=b[c];var f=t(d);f=f&&f.root;if(0===c||f&&f===e)if(hc(a,d,"bubble"),d!==window&&(e=d.getRootNode()),a.a)break}}
+function jc(a,b,c,d,e,f){for(var g=0;g<a.length;g++){var h=a[g],k=h.type,l=h.capture,m=h.once,q=h.passive;if(b===h.node&&c===k&&d===l&&e===m&&f===q)return g}return-1}
+function kc(a,b,c){if(b){var d=typeof b;if("function"===d||"object"===d)if("object"!==d||b.handleEvent&&"function"===typeof b.handleEvent){if(c&&"object"===typeof c){var e=!!c.capture;var f=!!c.once;var g=!!c.passive}else e=!!c,g=f=!1;var h=c&&c.X||this,k=b[$b];if(k){if(-1<jc(k,h,a,e,f,g))return}else b[$b]=[];k=function(e){f&&this.removeEventListener(a,b,c);e.__target||lc(e);if(h!==this){var g=Object.getOwnPropertyDescriptor(e,"currentTarget");Object.defineProperty(e,"currentTarget",{get:function(){return h},
+configurable:!0})}if(e.composed||-1<e.composedPath().indexOf(h))if(gc(e)&&e.target===e.relatedTarget)e.eventPhase===Event.BUBBLING_PHASE&&e.stopImmediatePropagation();else if(e.eventPhase===Event.CAPTURING_PHASE||e.bubbles||e.target===h||h instanceof Window){var k="function"===d?b.call(h,e):b.handleEvent&&b.handleEvent(e);h!==this&&(g?(Object.defineProperty(e,"currentTarget",g),g=null):delete e.currentTarget);return k}};b[$b].push({node:h,type:a,capture:e,once:f,passive:g,Ja:k});fc[a]?(this.__handlers=
+this.__handlers||{},this.__handlers[a]=this.__handlers[a]||{capture:[],bubble:[]},this.__handlers[a][e?"capture":"bubble"].push(k)):(this instanceof Window?y.Ha:y.addEventListener).call(this,a,k,c)}}}
+function mc(a,b,c){if(b){if(c&&"object"===typeof c){var d=!!c.capture;var e=!!c.once;var f=!!c.passive}else d=!!c,f=e=!1;var g=c&&c.X||this,h=void 0;var k=null;try{k=b[$b]}catch(l){}k&&(e=jc(k,g,a,d,e,f),-1<e&&(h=k.splice(e,1)[0].Ja,k.length||(b[$b]=void 0)));(this instanceof Window?y.Ia:y.removeEventListener).call(this,a,h||b,c);h&&fc[a]&&this.__handlers&&this.__handlers[a]&&(a=this.__handlers[a][d?"capture":"bubble"],h=a.indexOf(h),-1<h&&a.splice(h,1))}}
+function nc(){for(var a in fc)window.addEventListener(a,function(a){a.__target||(lc(a),ic(a))},!0)}function lc(a){a.__target=a.target;a.V=a.relatedTarget;if(u.s){var b=Object.getPrototypeOf(a);if(!b.hasOwnProperty("__patchProto")){var c=Object.create(b);c.La=b;pa(c,dc);b.__patchProto=c}a.__proto__=b.__patchProto}else pa(a,dc)}var oc=ec(window.Event),pc=ec(window.CustomEvent),qc=ec(window.MouseEvent);function rc(a,b){return{index:a,I:[],N:b}}
+function sc(a,b,c,d){var e=0,f=0,g=0,h=0,k=Math.min(b-e,d-f);if(0==e&&0==f)a:{for(g=0;g<k;g++)if(a[g]!==c[g])break a;g=k}if(b==a.length&&d==c.length){h=a.length;for(var l=c.length,m=0;m<k-g&&tc(a[--h],c[--l]);)m++;h=m}e+=g;f+=g;b-=h;d-=h;if(0==b-e&&0==d-f)return[];if(e==b){for(b=rc(e,0);f<d;)b.I.push(c[f++]);return[b]}if(f==d)return[rc(e,b-e)];k=e;g=f;d=d-g+1;h=b-k+1;b=Array(d);for(l=0;l<d;l++)b[l]=Array(h),b[l][0]=l;for(l=0;l<h;l++)b[0][l]=l;for(l=1;l<d;l++)for(m=1;m<h;m++)if(a[k+m-1]===c[g+l-1])b[l][m]=
+b[l-1][m-1];else{var q=b[l-1][m]+1,O=b[l][m-1]+1;b[l][m]=q<O?q:O}k=b.length-1;g=b[0].length-1;d=b[k][g];for(a=[];0<k||0<g;)0==k?(a.push(2),g--):0==g?(a.push(3),k--):(h=b[k-1][g-1],l=b[k-1][g],m=b[k][g-1],q=l<m?l<h?l:h:m<h?m:h,q==h?(h==d?a.push(0):(a.push(1),d=h),k--,g--):q==l?(a.push(3),k--,d=l):(a.push(2),g--,d=m));a.reverse();b=void 0;k=[];for(g=0;g<a.length;g++)switch(a[g]){case 0:b&&(k.push(b),b=void 0);e++;f++;break;case 1:b||(b=rc(e,0));b.N++;e++;b.I.push(c[f]);f++;break;case 2:b||(b=rc(e,0));
+b.N++;e++;break;case 3:b||(b=rc(e,0)),b.I.push(c[f]),f++}b&&k.push(b);return k}function tc(a,b){return a===b};var Pb=F.parentNode,uc=F.childNodes,vc={};function wc(a){var b=[];do b.unshift(a);while(a=a.parentNode);return b}function Ab(a,b,c){if(a!==vc)throw new TypeError("Illegal constructor");this.sa="ShadyRoot";a=uc(b);this.host=b;this.a=c&&c.mode;Fb(b,a);c=t(b);c.root=this;c.ja="closed"!==this.a?this:null;c=r(this);c.firstChild=c.lastChild=c.parentNode=c.nextSibling=c.previousSibling=null;c.childNodes=[];this.M=!1;this.o=this.g=this.f=null;c=0;for(var d=a.length;c<d;c++)y.removeChild.call(b,a[c])}
+function Jb(a){a.M||(a.M=!0,Ba(function(){return xc(a)}))}function xc(a){for(var b;a;){a.M&&(b=a);a:{var c=a;a=c.host.getRootNode();if(w(a))for(var d=c.host.childNodes,e=0;e<d.length;e++)if(c=d[e],"slot"==c.localName)break a;a=void 0}}b&&b._renderRoot()}
+Ab.prototype._renderRoot=function(){this.M=!1;if(this.f){Ob(this);for(var a=0,b;a<this.f.length;a++){b=this.f[a];var c=t(b),d=c.assignedNodes;c.assignedNodes=[];c.w=[];if(c.aa=d)for(c=0;c<d.length;c++){var e=t(d[c]);e.L=e.assignedSlot;e.assignedSlot===b&&(e.assignedSlot=null)}}for(b=this.host.firstChild;b;b=b.nextSibling)yc(this,b);for(a=0;a<this.f.length;a++){b=this.f[a];d=t(b);if(!d.assignedNodes.length)for(c=b.firstChild;c;c=c.nextSibling)yc(this,c,b);(c=(c=t(b.parentNode))&&c.root)&&Qb(c)&&c._renderRoot();
+zc(this,d.w,d.assignedNodes);if(c=d.aa){for(e=0;e<c.length;e++)t(c[e]).L=null;d.aa=null;c.length>d.assignedNodes.length&&(d.P=!0)}d.P&&(d.P=!1,Ac(this,b))}a=this.f;b=[];for(d=0;d<a.length;d++)c=a[d].parentNode,(e=t(c))&&e.root||!(0>b.indexOf(c))||b.push(c);for(a=0;a<b.length;a++){d=b[a];c=d===this?this.host:d;e=[];d=d.childNodes;for(var f=0;f<d.length;f++){var g=d[f];if("slot"==g.localName){g=t(g).w;for(var h=0;h<g.length;h++)e.push(g[h])}else e.push(g)}d=void 0;f=uc(c);g=sc(e,e.length,f,f.length);
+for(var k=h=0;h<g.length&&(d=g[h]);h++){for(var l=0,m;l<d.I.length&&(m=d.I[l]);l++)Pb(m)===c&&y.removeChild.call(c,m),f.splice(d.index+k,1);k-=d.N}for(k=0;k<g.length&&(d=g[k]);k++)for(h=f[d.index],l=d.index;l<d.index+d.N;l++)m=e[l],y.insertBefore.call(c,m,h),f.splice(l,0,m)}}};function yc(a,b,c){var d=r(b),e=d.L;d.L=null;c||(c=(a=a.g[b.slot||"__catchall"])&&a[0]);c?(r(c).assignedNodes.push(b),d.assignedSlot=c):d.assignedSlot=void 0;e!==d.assignedSlot&&d.assignedSlot&&(r(d.assignedSlot).P=!0)}
+function zc(a,b,c){for(var d=0,e;d<c.length&&(e=c[d]);d++)if("slot"==e.localName){var f=t(e).assignedNodes;f&&f.length&&zc(a,b,f)}else b.push(c[d])}function Ac(a,b){y.dispatchEvent.call(b,new Event("slotchange"));b=t(b);b.assignedSlot&&Ac(a,b.assignedSlot)}function Ob(a){if(a.o&&a.o.length){for(var b=a.o,c,d=0;d<b.length;d++){var e=b[d];Fb(e);Fb(e.parentNode);var f=Sb(e);a.g[f]?(c=c||{},c[f]=!0,a.g[f].push(e)):a.g[f]=[e];a.f.push(e)}if(c)for(var g in c)a.g[g]=Tb(a.g[g]);a.o=[]}}
+function Sb(a){var b=a.name||a.getAttribute("name")||"__catchall";return a.pa=b}function Tb(a){return a.sort(function(a,c){a=wc(a);for(var b=wc(c),e=0;e<a.length;e++){c=a[e];var f=b[e];if(c!==f)return a=Array.from(c.parentNode.childNodes),a.indexOf(c)-a.indexOf(f)}})}function Qb(a){Ob(a);return!(!a.f||!a.f.length)};function Bc(a){var b=a.getRootNode();w(b)&&xc(b);return(a=t(a))&&a.assignedSlot||null}
+var Cc={addEventListener:kc.bind(window),removeEventListener:mc.bind(window)},Dc={addEventListener:kc,removeEventListener:mc,appendChild:function(a){return Hb(this,a)},insertBefore:function(a,b){return Hb(this,a,b)},removeChild:function(a){return Ib(this,a)},replaceChild:function(a,b){Hb(this,a,b);Ib(this,b);return a},cloneNode:function(a){if("template"==this.localName)var b=y.cloneNode.call(this,a);else if(b=y.cloneNode.call(this,!1),a){a=this.childNodes;for(var c=0,d;c<a.length;c++)d=a[c].cloneNode(!0),
+b.appendChild(d)}return b},getRootNode:function(){return Ub(this)},contains:function(a){return ya(this,a)},dispatchEvent:function(a){Ca();return y.dispatchEvent.call(this,a)}};
+Object.defineProperties(Dc,{isConnected:{get:function(){if(sb&&sb.call(this))return!0;if(this.nodeType==Node.DOCUMENT_FRAGMENT_NODE)return!1;var a=this.ownerDocument;if(xa){if(y.contains.call(a,this))return!0}else if(a.documentElement&&y.contains.call(a.documentElement,this))return!0;for(a=this;a&&!(a instanceof Document);)a=a.parentNode||(w(a)?a.host:void 0);return!!(a&&a instanceof Document)},configurable:!0}});
+var Ec={get assignedSlot(){return Bc(this)}},Fc={querySelector:function(a){return Vb(this,function(b){return oa.call(b,a)},function(a){return!!a})[0]||null},querySelectorAll:function(a,b){if(b){b=Array.prototype.slice.call(y.querySelectorAll(this,a));var c=this.getRootNode();return b.filter(function(a){return a.getRootNode()==c})}return Vb(this,function(b){return oa.call(b,a)})}},Gc={assignedNodes:function(a){if("slot"===this.localName){var b=this.getRootNode();w(b)&&xc(b);return(b=t(this))?(a&&a.flatten?
+b.w:b.assignedNodes)||[]:[]}}},Hc=qa({setAttribute:function(a,b){Yb(this,a,b)},removeAttribute:function(a){y.removeAttribute.call(this,a);Rb(this,a)},attachShadow:function(a){if(!this)throw"Must provide a host.";if(!a)throw"Not enough arguments.";return new Ab(vc,this,a)},get slot(){return this.getAttribute("slot")},set slot(a){Yb(this,"slot",a)},get assignedSlot(){return Bc(this)}},Fc,Gc);Object.defineProperties(Hc,xb);
+var Ic=qa({importNode:function(a,b){return Zb(a,b)},getElementById:function(a){return Vb(this,function(b){return b.id==a},function(a){return!!a})[0]||null}},Fc);Object.defineProperties(Ic,{_activeElement:yb.activeElement});
+var Jc=HTMLElement.prototype.blur,Kc=qa({blur:function(){var a=t(this);(a=(a=a&&a.root)&&a.activeElement)?a.blur():Jc.call(this)}}),Lc={addEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.X=this;this.host.addEventListener(a,b,c)},removeEventListener:function(a,b,c){"object"!==typeof c&&(c={capture:!!c});c.X=this;this.host.removeEventListener(a,b,c)},getElementById:function(a){return Vb(this,function(b){return b.id==a},function(a){return!!a})[0]||null}};
+function I(a,b){for(var c=Object.getOwnPropertyNames(b),d=0;d<c.length;d++){var e=c[d],f=Object.getOwnPropertyDescriptor(b,e);f.value?a[e]=f.value:Object.defineProperty(a,e,f)}};if(u.ha){var ShadyDOM={inUse:u.ha,patch:function(a){Cb(a);Bb(a);return a},isShadyRoot:w,enqueue:Ba,flush:Ca,settings:u,filterMutations:Ia,observeChildren:Ga,unobserveChildren:Ha,nativeMethods:y,nativeTree:F};window.ShadyDOM=ShadyDOM;window.Event=oc;window.CustomEvent=pc;window.MouseEvent=qc;nc();var Mc=window.customElements&&window.customElements.nativeHTMLElement||HTMLElement;I(Ab.prototype,Lc);I(window.Node.prototype,Dc);I(window.Window.prototype,Cc);I(window.Text.prototype,Ec);I(window.DocumentFragment.prototype,
+Fc);I(window.Element.prototype,Hc);I(window.Document.prototype,Ic);window.HTMLSlotElement&&I(window.HTMLSlotElement.prototype,Gc);I(Mc.prototype,Kc);u.s&&(H(window.Node.prototype),H(window.Text.prototype),H(window.DocumentFragment.prototype),H(window.Element.prototype),H(Mc.prototype),H(window.Document.prototype),window.HTMLSlotElement&&H(window.HTMLSlotElement.prototype));zb();window.ShadowRoot=Ab};var Nc=new Set("annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph".split(" "));function Oc(a){var b=Nc.has(a);a=/^[a-z][.0-9_a-z]*-[\-.0-9_a-z]*$/.test(a);return!b&&a}function J(a){var b=a.isConnected;if(void 0!==b)return b;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}
+function Pc(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}
+function K(a,b,c){c=void 0===c?new Set:c;for(var d=a;d;){if(d.nodeType===Node.ELEMENT_NODE){var e=d;b(e);var f=e.localName;if("link"===f&&"import"===e.getAttribute("rel")){d=e.import;if(d instanceof Node&&!c.has(d))for(c.add(d),d=d.firstChild;d;d=d.nextSibling)K(d,b,c);d=Pc(a,e);continue}else if("template"===f){d=Pc(a,e);continue}if(e=e.__CE_shadowRoot)for(e=e.firstChild;e;e=e.nextSibling)K(e,b,c)}d=d.firstChild?d.firstChild:Pc(a,d)}}function M(a,b,c){a[b]=c};function Qc(){this.a=new Map;this.D=new Map;this.i=[];this.c=!1}function Rc(a,b,c){a.a.set(b,c);a.D.set(c.constructor,c)}function Sc(a,b){a.c=!0;a.i.push(b)}function Tc(a,b){a.c&&K(b,function(b){return a.b(b)})}Qc.prototype.b=function(a){if(this.c&&!a.__CE_patched){a.__CE_patched=!0;for(var b=0;b<this.i.length;b++)this.i[b](a)}};function N(a,b){var c=[];K(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state?a.connectedCallback(d):Uc(a,d)}}
+function P(a,b){var c=[];K(b,function(a){return c.push(a)});for(b=0;b<c.length;b++){var d=c[b];1===d.__CE_state&&a.disconnectedCallback(d)}}
+function Q(a,b,c){c=void 0===c?{}:c;var d=c.Ga||new Set,e=c.T||function(b){return Uc(a,b)},f=[];K(b,function(b){if("link"===b.localName&&"import"===b.getAttribute("rel")){var c=b.import;c instanceof Node&&(c.__CE_isImportDocument=!0,c.__CE_hasRegistry=!0);c&&"complete"===c.readyState?c.__CE_documentLoadHandled=!0:b.addEventListener("load",function(){var c=b.import;if(!c.__CE_documentLoadHandled){c.__CE_documentLoadHandled=!0;var f=new Set(d);f.delete(c);Q(a,c,{Ga:f,T:e})}})}else f.push(b)},d);if(a.c)for(b=
+0;b<f.length;b++)a.b(f[b]);for(b=0;b<f.length;b++)e(f[b])}
+function Uc(a,b){if(void 0===b.__CE_state){var c=b.ownerDocument;if(c.defaultView||c.__CE_isImportDocument&&c.__CE_hasRegistry)if(c=a.a.get(b.localName)){c.constructionStack.push(b);var d=c.constructor;try{try{if(new d!==b)throw Error("The custom element constructor did not produce the element being upgraded.");}finally{c.constructionStack.pop()}}catch(g){throw b.__CE_state=2,g;}b.__CE_state=1;b.__CE_definition=c;if(c.attributeChangedCallback)for(c=c.observedAttributes,d=0;d<c.length;d++){var e=c[d],
+f=b.getAttribute(e);null!==f&&a.attributeChangedCallback(b,e,null,f,null)}J(b)&&a.connectedCallback(b)}}}Qc.prototype.connectedCallback=function(a){var b=a.__CE_definition;b.connectedCallback&&b.connectedCallback.call(a)};Qc.prototype.disconnectedCallback=function(a){var b=a.__CE_definition;b.disconnectedCallback&&b.disconnectedCallback.call(a)};
+Qc.prototype.attributeChangedCallback=function(a,b,c,d,e){var f=a.__CE_definition;f.attributeChangedCallback&&-1<f.observedAttributes.indexOf(b)&&f.attributeChangedCallback.call(a,b,c,d,e)};function Vc(a){var b=document;this.h=a;this.a=b;this.B=void 0;Q(this.h,this.a);"loading"===this.a.readyState&&(this.B=new MutationObserver(this.b.bind(this)),this.B.observe(this.a,{childList:!0,subtree:!0}))}function Wc(a){a.B&&a.B.disconnect()}Vc.prototype.b=function(a){var b=this.a.readyState;"interactive"!==b&&"complete"!==b||Wc(this);for(b=0;b<a.length;b++)for(var c=a[b].addedNodes,d=0;d<c.length;d++)Q(this.h,c[d])};function Xc(){var a=this;this.b=this.a=void 0;this.c=new Promise(function(b){a.b=b;a.a&&b(a.a)})}function Yc(a){if(a.a)throw Error("Already resolved.");a.a=void 0;a.b&&a.b(void 0)};function R(a){this.Y=!1;this.h=a;this.ba=new Map;this.Z=function(a){return a()};this.K=!1;this.$=[];this.ra=new Vc(a)}n=R.prototype;
+n.define=function(a,b){var c=this;if(!(b instanceof Function))throw new TypeError("Custom element constructors must be functions.");if(!Oc(a))throw new SyntaxError("The element name '"+a+"' is not valid.");if(this.h.a.get(a))throw Error("A custom element with name '"+a+"' has already been defined.");if(this.Y)throw Error("A custom element is already being defined.");this.Y=!0;try{var d=function(a){var b=e[a];if(void 0!==b&&!(b instanceof Function))throw Error("The '"+a+"' callback must be a function.");
+return b},e=b.prototype;if(!(e instanceof Object))throw new TypeError("The custom element constructor's prototype is not an object.");var f=d("connectedCallback");var g=d("disconnectedCallback");var h=d("adoptedCallback");var k=d("attributeChangedCallback");var l=b.observedAttributes||[]}catch(m){return}finally{this.Y=!1}b={localName:a,constructor:b,connectedCallback:f,disconnectedCallback:g,adoptedCallback:h,attributeChangedCallback:k,observedAttributes:l,constructionStack:[]};Rc(this.h,a,b);this.$.push(b);
+this.K||(this.K=!0,this.Z(function(){return Zc(c)}))};n.T=function(a){Q(this.h,a)};function Zc(a){if(!1!==a.K){a.K=!1;for(var b=a.$,c=[],d=new Map,e=0;e<b.length;e++)d.set(b[e].localName,[]);Q(a.h,document,{T:function(b){if(void 0===b.__CE_state){var e=b.localName,f=d.get(e);f?f.push(b):a.h.a.get(e)&&c.push(b)}}});for(e=0;e<c.length;e++)Uc(a.h,c[e]);for(;0<b.length;){var f=b.shift();e=f.localName;f=d.get(f.localName);for(var g=0;g<f.length;g++)Uc(a.h,f[g]);(e=a.ba.get(e))&&Yc(e)}}}
+n.get=function(a){if(a=this.h.a.get(a))return a.constructor};n.ma=function(a){if(!Oc(a))return Promise.reject(new SyntaxError("'"+a+"' is not a valid custom element name."));var b=this.ba.get(a);if(b)return b.c;b=new Xc;this.ba.set(a,b);this.h.a.get(a)&&!this.$.some(function(b){return b.localName===a})&&Yc(b);return b.c};n.Ba=function(a){Wc(this.ra);var b=this.Z;this.Z=function(c){return a(function(){return b(c)})}};window.CustomElementRegistry=R;R.prototype.define=R.prototype.define;
+R.prototype.upgrade=R.prototype.T;R.prototype.get=R.prototype.get;R.prototype.whenDefined=R.prototype.ma;R.prototype.polyfillWrapFlushCallback=R.prototype.Ba;var $c=window.Document.prototype.createElement,ad=window.Document.prototype.createElementNS,bd=window.Document.prototype.importNode,cd=window.Document.prototype.prepend,dd=window.Document.prototype.append,ed=window.DocumentFragment.prototype.prepend,fd=window.DocumentFragment.prototype.append,gd=window.Node.prototype.cloneNode,hd=window.Node.prototype.appendChild,id=window.Node.prototype.insertBefore,jd=window.Node.prototype.removeChild,kd=window.Node.prototype.replaceChild,ld=Object.getOwnPropertyDescriptor(window.Node.prototype,
+"textContent"),md=window.Element.prototype.attachShadow,nd=Object.getOwnPropertyDescriptor(window.Element.prototype,"innerHTML"),od=window.Element.prototype.getAttribute,pd=window.Element.prototype.setAttribute,qd=window.Element.prototype.removeAttribute,rd=window.Element.prototype.getAttributeNS,sd=window.Element.prototype.setAttributeNS,td=window.Element.prototype.removeAttributeNS,ud=window.Element.prototype.insertAdjacentElement,vd=window.Element.prototype.insertAdjacentHTML,wd=window.Element.prototype.prepend,
+xd=window.Element.prototype.append,yd=window.Element.prototype.before,zd=window.Element.prototype.after,Ad=window.Element.prototype.replaceWith,Bd=window.Element.prototype.remove,Cd=window.HTMLElement,Dd=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,"innerHTML"),Ed=window.HTMLElement.prototype.insertAdjacentElement,Fd=window.HTMLElement.prototype.insertAdjacentHTML;var Gd=new function(){};function Hd(){var a=Id;window.HTMLElement=function(){function b(){var b=this.constructor,d=a.D.get(b);if(!d)throw Error("The custom element being constructed was not registered with `customElements`.");var e=d.constructionStack;if(0===e.length)return e=$c.call(document,d.localName),Object.setPrototypeOf(e,b.prototype),e.__CE_state=1,e.__CE_definition=d,a.b(e),e;d=e.length-1;var f=e[d];if(f===Gd)throw Error("The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.");
+e[d]=Gd;Object.setPrototypeOf(f,b.prototype);a.b(f);return f}b.prototype=Cd.prototype;return b}()};function Jd(a,b,c){function d(b){return function(c){for(var e=[],d=0;d<arguments.length;++d)e[d-0]=arguments[d];d=[];for(var f=[],l=0;l<e.length;l++){var m=e[l];m instanceof Element&&J(m)&&f.push(m);if(m instanceof DocumentFragment)for(m=m.firstChild;m;m=m.nextSibling)d.push(m);else d.push(m)}b.apply(this,e);for(e=0;e<f.length;e++)P(a,f[e]);if(J(this))for(e=0;e<d.length;e++)f=d[e],f instanceof Element&&N(a,f)}}void 0!==c.S&&(b.prepend=d(c.S));void 0!==c.append&&(b.append=d(c.append))};function Kd(){var a=Id;M(Document.prototype,"createElement",function(b){if(this.__CE_hasRegistry){var c=a.a.get(b);if(c)return new c.constructor}b=$c.call(this,b);a.b(b);return b});M(Document.prototype,"importNode",function(b,c){b=bd.call(this,b,c);this.__CE_hasRegistry?Q(a,b):Tc(a,b);return b});M(Document.prototype,"createElementNS",function(b,c){if(this.__CE_hasRegistry&&(null===b||"http://www.w3.org/1999/xhtml"===b)){var d=a.a.get(c);if(d)return new d.constructor}b=ad.call(this,b,c);a.b(b);return b});
+Jd(a,Document.prototype,{S:cd,append:dd})};function Ld(){var a=Id;function b(b,d){Object.defineProperty(b,"textContent",{enumerable:d.enumerable,configurable:!0,get:d.get,set:function(b){if(this.nodeType===Node.TEXT_NODE)d.set.call(this,b);else{var c=void 0;if(this.firstChild){var e=this.childNodes,h=e.length;if(0<h&&J(this)){c=Array(h);for(var k=0;k<h;k++)c[k]=e[k]}}d.set.call(this,b);if(c)for(b=0;b<c.length;b++)P(a,c[b])}}})}M(Node.prototype,"insertBefore",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);
+b=id.call(this,b,d);if(J(this))for(d=0;d<c.length;d++)N(a,c[d]);return b}c=J(b);d=id.call(this,b,d);c&&P(a,b);J(this)&&N(a,b);return d});M(Node.prototype,"appendChild",function(b){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=hd.call(this,b);if(J(this))for(var e=0;e<c.length;e++)N(a,c[e]);return b}c=J(b);e=hd.call(this,b);c&&P(a,b);J(this)&&N(a,b);return e});M(Node.prototype,"cloneNode",function(b){b=gd.call(this,b);this.ownerDocument.__CE_hasRegistry?Q(a,b):
+Tc(a,b);return b});M(Node.prototype,"removeChild",function(b){var c=J(b),e=jd.call(this,b);c&&P(a,b);return e});M(Node.prototype,"replaceChild",function(b,d){if(b instanceof DocumentFragment){var c=Array.prototype.slice.apply(b.childNodes);b=kd.call(this,b,d);if(J(this))for(P(a,d),d=0;d<c.length;d++)N(a,c[d]);return b}c=J(b);var f=kd.call(this,b,d),g=J(this);g&&P(a,d);c&&P(a,b);g&&N(a,b);return f});ld&&ld.get?b(Node.prototype,ld):Sc(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){for(var a=
+[],b=0;b<this.childNodes.length;b++)a.push(this.childNodes[b].textContent);return a.join("")},set:function(a){for(;this.firstChild;)jd.call(this,this.firstChild);hd.call(this,document.createTextNode(a))}})})};function Md(a){var b=Element.prototype;function c(b){return function(c){for(var d=[],e=0;e<arguments.length;++e)d[e-0]=arguments[e];e=[];for(var h=[],k=0;k<d.length;k++){var l=d[k];l instanceof Element&&J(l)&&h.push(l);if(l instanceof DocumentFragment)for(l=l.firstChild;l;l=l.nextSibling)e.push(l);else e.push(l)}b.apply(this,d);for(d=0;d<h.length;d++)P(a,h[d]);if(J(this))for(d=0;d<e.length;d++)h=e[d],h instanceof Element&&N(a,h)}}void 0!==yd&&(b.before=c(yd));void 0!==yd&&(b.after=c(zd));void 0!==
+Ad&&M(b,"replaceWith",function(b){for(var c=[],d=0;d<arguments.length;++d)c[d-0]=arguments[d];d=[];for(var g=[],h=0;h<c.length;h++){var k=c[h];k instanceof Element&&J(k)&&g.push(k);if(k instanceof DocumentFragment)for(k=k.firstChild;k;k=k.nextSibling)d.push(k);else d.push(k)}h=J(this);Ad.apply(this,c);for(c=0;c<g.length;c++)P(a,g[c]);if(h)for(P(a,this),c=0;c<d.length;c++)g=d[c],g instanceof Element&&N(a,g)});void 0!==Bd&&M(b,"remove",function(){var b=J(this);Bd.call(this);b&&P(a,this)})};function Nd(){var a=Id;function b(b,c){Object.defineProperty(b,"innerHTML",{enumerable:c.enumerable,configurable:!0,get:c.get,set:function(b){var d=this,e=void 0;J(this)&&(e=[],K(this,function(a){a!==d&&e.push(a)}));c.set.call(this,b);if(e)for(var f=0;f<e.length;f++){var g=e[f];1===g.__CE_state&&a.disconnectedCallback(g)}this.ownerDocument.__CE_hasRegistry?Q(a,this):Tc(a,this);return b}})}function c(b,c){M(b,"insertAdjacentElement",function(b,d){var e=J(d);b=c.call(this,b,d);e&&P(a,d);J(b)&&N(a,d);
+return b})}function d(b,c){function d(b,c){for(var d=[];b!==c;b=b.nextSibling)d.push(b);for(c=0;c<d.length;c++)Q(a,d[c])}M(b,"insertAdjacentHTML",function(a,b){a=a.toLowerCase();if("beforebegin"===a){var e=this.previousSibling;c.call(this,a,b);d(e||this.parentNode.firstChild,this)}else if("afterbegin"===a)e=this.firstChild,c.call(this,a,b),d(this.firstChild,e);else if("beforeend"===a)e=this.lastChild,c.call(this,a,b),d(e||this.firstChild,null);else if("afterend"===a)e=this.nextSibling,c.call(this,
+a,b),d(this.nextSibling,e);else throw new SyntaxError("The value provided ("+String(a)+") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.");})}md&&M(Element.prototype,"attachShadow",function(a){return this.__CE_shadowRoot=a=md.call(this,a)});nd&&nd.get?b(Element.prototype,nd):Dd&&Dd.get?b(HTMLElement.prototype,Dd):Sc(a,function(a){b(a,{enumerable:!0,configurable:!0,get:function(){return gd.call(this,!0).innerHTML},set:function(a){var b="template"===this.localName,c=b?this.content:
+this,d=$c.call(document,this.localName);for(d.innerHTML=a;0<c.childNodes.length;)jd.call(c,c.childNodes[0]);for(a=b?d.content:d;0<a.childNodes.length;)hd.call(c,a.childNodes[0])}})});M(Element.prototype,"setAttribute",function(b,c){if(1!==this.__CE_state)return pd.call(this,b,c);var d=od.call(this,b);pd.call(this,b,c);c=od.call(this,b);a.attributeChangedCallback(this,b,d,c,null)});M(Element.prototype,"setAttributeNS",function(b,c,d){if(1!==this.__CE_state)return sd.call(this,b,c,d);var e=rd.call(this,
+b,c);sd.call(this,b,c,d);d=rd.call(this,b,c);a.attributeChangedCallback(this,c,e,d,b)});M(Element.prototype,"removeAttribute",function(b){if(1!==this.__CE_state)return qd.call(this,b);var c=od.call(this,b);qd.call(this,b);null!==c&&a.attributeChangedCallback(this,b,c,null,null)});M(Element.prototype,"removeAttributeNS",function(b,c){if(1!==this.__CE_state)return td.call(this,b,c);var d=rd.call(this,b,c);td.call(this,b,c);var e=rd.call(this,b,c);d!==e&&a.attributeChangedCallback(this,c,d,e,b)});Ed?
+c(HTMLElement.prototype,Ed):ud?c(Element.prototype,ud):console.warn("Custom Elements: `Element#insertAdjacentElement` was not patched.");Fd?d(HTMLElement.prototype,Fd):vd?d(Element.prototype,vd):console.warn("Custom Elements: `Element#insertAdjacentHTML` was not patched.");Jd(a,Element.prototype,{S:wd,append:xd});Md(a)};/*
+
+ Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+ This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+ The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+ The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+ Code distributed by Google as part of the polymer project is also
+ subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+var Od=window.customElements;if(!Od||Od.forcePolyfill||"function"!=typeof Od.define||"function"!=typeof Od.get){var Id=new Qc;Hd();Kd();Jd(Id,DocumentFragment.prototype,{S:ed,append:fd});Ld();Nd();document.__CE_hasRegistry=!0;var customElements=new R(Id);Object.defineProperty(window,"customElements",{configurable:!0,enumerable:!0,value:customElements})};/*
+
+Copyright (c) 2017 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+*/
+function Pd(){this.end=this.start=0;this.rules=this.parent=this.previous=null;this.cssText=this.parsedCssText="";this.atRule=!1;this.type=0;this.parsedSelector=this.selector=this.keyframesName=""}
+function Qd(a){a=a.replace(Rd,"").replace(Sd,"");var b=Td,c=a,d=new Pd;d.start=0;d.end=c.length;for(var e=d,f=0,g=c.length;f<g;f++)if("{"===c[f]){e.rules||(e.rules=[]);var h=e,k=h.rules[h.rules.length-1]||null;e=new Pd;e.start=f+1;e.parent=h;e.previous=k;h.rules.push(e)}else"}"===c[f]&&(e.end=f+1,e=e.parent||d);return b(d,a)}
+function Td(a,b){var c=b.substring(a.start,a.end-1);a.parsedCssText=a.cssText=c.trim();a.parent&&(c=b.substring(a.previous?a.previous.end:a.parent.start,a.start-1),c=Ud(c),c=c.replace(Vd," "),c=c.substring(c.lastIndexOf(";")+1),c=a.parsedSelector=a.selector=c.trim(),a.atRule=0===c.indexOf("@"),a.atRule?0===c.indexOf("@media")?a.type=Wd:c.match(Xd)&&(a.type=Yd,a.keyframesName=a.selector.split(Vd).pop()):a.type=0===c.indexOf("--")?Zd:$d);if(c=a.rules)for(var d=0,e=c.length,f;d<e&&(f=c[d]);d++)Td(f,
+b);return a}function Ud(a){return a.replace(/\\([0-9a-f]{1,6})\s/gi,function(a,c){a=c;for(c=6-a.length;c--;)a="0"+a;return"\\"+a})}
+function ae(a,b,c){c=void 0===c?"":c;var d="";if(a.cssText||a.rules){var e=a.rules,f;if(f=e)f=e[0],f=!(f&&f.selector&&0===f.selector.indexOf("--"));if(f){f=0;for(var g=e.length,h;f<g&&(h=e[f]);f++)d=ae(h,b,d)}else b?b=a.cssText:(b=a.cssText,b=b.replace(be,"").replace(ce,""),b=b.replace(de,"").replace(ee,"")),(d=b.trim())&&(d=" "+d+"\n")}d&&(a.selector&&(c+=a.selector+" {\n"),c+=d,a.selector&&(c+="}\n\n"));return c}
+var $d=1,Yd=7,Wd=4,Zd=1E3,Rd=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,Sd=/@import[^;]*;/gim,be=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,ce=/(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,de=/@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,ee=/[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,Xd=/^@[^\s]*keyframes/,Vd=/\s+/g;var S=!(window.ShadyDOM&&window.ShadyDOM.inUse),fe;function ge(a){fe=a&&a.shimcssproperties?!1:S||!(navigator.userAgent.match(/AppleWebKit\/601|Edge\/15/)||!window.CSS||!CSS.supports||!CSS.supports("box-shadow","0 0 0 var(--foo)"))}window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?fe=window.ShadyCSS.nativeCss:window.ShadyCSS?(ge(window.ShadyCSS),window.ShadyCSS=void 0):ge(window.WebComponents&&window.WebComponents.flags);var T=fe;var he=/(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};{])+)|\{([^}]*)\}(?:(?=[;\s}])|$))/gi,ie=/(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,je=/(--[\w-]+)\s*([:,;)]|$)/gi,ke=/(animation\s*:)|(animation-name\s*:)/,le=/@media\s(.*)/,me=/\{[^}]*\}/g;var ne=new Set;function oe(a,b){if(!a)return"";"string"===typeof a&&(a=Qd(a));b&&pe(a,b);return ae(a,T)}function qe(a){!a.__cssRules&&a.textContent&&(a.__cssRules=Qd(a.textContent));return a.__cssRules||null}function re(a){return!!a.parent&&a.parent.type===Yd}function pe(a,b,c,d){if(a){var e=!1,f=a.type;if(d&&f===Wd){var g=a.selector.match(le);g&&(window.matchMedia(g[1]).matches||(e=!0))}f===$d?b(a):c&&f===Yd?c(a):f===Zd&&(e=!0);if((a=a.rules)&&!e){e=0;f=a.length;for(var h;e<f&&(h=a[e]);e++)pe(h,b,c,d)}}}
+function se(a,b,c,d){var e=document.createElement("style");b&&e.setAttribute("scope",b);e.textContent=a;te(e,c,d);return e}var U=null;function te(a,b,c){b=b||document.head;b.insertBefore(a,c&&c.nextSibling||b.firstChild);U?a.compareDocumentPosition(U)===Node.DOCUMENT_POSITION_PRECEDING&&(U=a):U=a}
+function ue(a,b){var c=a.indexOf("var(");if(-1===c)return b(a,"","","");a:{var d=0;var e=c+3;for(var f=a.length;e<f;e++)if("("===a[e])d++;else if(")"===a[e]&&0===--d)break a;e=-1}d=a.substring(c+4,e);c=a.substring(0,c);a=ue(a.substring(e+1),b);e=d.indexOf(",");return-1===e?b(c,d.trim(),"",a):b(c,d.substring(0,e).trim(),d.substring(e+1).trim(),a)}function ve(a,b){S?a.setAttribute("class",b):window.ShadyDOM.nativeMethods.setAttribute.call(a,"class",b)}
+function V(a){var b=a.localName,c="";b?-1<b.indexOf("-")||(c=b,b=a.getAttribute&&a.getAttribute("is")||""):(b=a.is,c=a.extends);return{is:b,J:c}};function we(){}function xe(a,b,c){var d=W;a.__styleScoped?a.__styleScoped=null:ye(d,a,b||"",c)}function ye(a,b,c,d){b.nodeType===Node.ELEMENT_NODE&&ze(b,c,d);if(b="template"===b.localName?(b.content||b.Ma).childNodes:b.children||b.childNodes)for(var e=0;e<b.length;e++)ye(a,b[e],c,d)}
+function ze(a,b,c){if(b)if(a.classList)c?(a.classList.remove("style-scope"),a.classList.remove(b)):(a.classList.add("style-scope"),a.classList.add(b));else if(a.getAttribute){var d=a.getAttribute(Ae);c?d&&(b=d.replace("style-scope","").replace(b,""),ve(a,b)):ve(a,(d?d+" ":"")+"style-scope "+b)}}function Be(a,b,c){var d=W,e=a.__cssBuild;S||"shady"===e?b=oe(b,c):(a=V(a),b=Ce(d,b,a.is,a.J,c)+"\n\n");return b.trim()}
+function Ce(a,b,c,d,e){var f=De(c,d);c=c?Ee+c:"";return oe(b,function(b){b.c||(b.selector=b.l=Fe(a,b,a.b,c,f),b.c=!0);e&&e(b,c,f)})}function De(a,b){return b?"[is="+a+"]":a}function Fe(a,b,c,d,e){var f=b.selector.split(Ge);if(!re(b)){b=0;for(var g=f.length,h;b<g&&(h=f[b]);b++)f[b]=c.call(a,h,d,e)}return f.join(Ge)}function He(a){return a.replace(Ie,function(a,c,d){-1<d.indexOf("+")?d=d.replace(/\+/g,"___"):-1<d.indexOf("___")&&(d=d.replace(/___/g,"+"));return":"+c+"("+d+")"})}
+we.prototype.b=function(a,b,c){var d=!1;a=a.trim();var e=Ie.test(a);e&&(a=a.replace(Ie,function(a,b,c){return":"+b+"("+c.replace(/\s/g,"")+")"}),a=He(a));a=a.replace(Je,Ke+" $1");a=a.replace(Le,function(a,e,h){d||(a=Me(h,e,b,c),d=d||a.stop,e=a.wa,h=a.value);return e+h});e&&(a=He(a));return a};
+function Me(a,b,c,d){var e=a.indexOf(Ne);0<=a.indexOf(Ke)?a=Oe(a,d):0!==e&&(a=c?Pe(a,c):a);c=!1;0<=e&&(b="",c=!0);if(c){var f=!0;c&&(a=a.replace(Qe,function(a,b){return" > "+b}))}a=a.replace(Re,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+c+'"]'});return{value:a,wa:b,stop:f}}function Pe(a,b){a=a.split(Se);a[0]+=b;return a.join(Se)}
+function Oe(a,b){var c=a.match(Te);return(c=c&&c[2].trim()||"")?c[0].match(Ue)?a.replace(Te,function(a,c,f){return b+f}):c.split(Ue)[0]===b?c:Ve:a.replace(Ke,b)}function We(a){a.selector===Xe&&(a.selector="html")}we.prototype.c=function(a){return a.match(Ne)?this.b(a,Ye):Pe(a.trim(),Ye)};p.Object.defineProperties(we.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});
+var Ie=/:(nth[-\w]+)\(([^)]+)\)/,Ye=":not(.style-scope)",Ge=",",Le=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,Ue=/[[.:#*]/,Ke=":host",Xe=":root",Ne="::slotted",Je=new RegExp("^("+Ne+")"),Te=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Qe=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,Re=/(.*):dir\((?:(ltr|rtl))\)/,Ee=".",Se=":",Ae="class",Ve="should_not_match",W=new we;function Ze(a,b,c,d){this.v=a||null;this.b=b||null;this.ca=c||[];this.G=null;this.J=d||"";this.a=this.m=this.A=null}function X(a){return a?a.__styleInfo:null}function $e(a,b){return a.__styleInfo=b}Ze.prototype.c=function(){return this.v};Ze.prototype._getStyleRules=Ze.prototype.c;function af(a){var b=this.matches||this.matchesSelector||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;return b&&b.call(this,a)}var bf=navigator.userAgent.match("Trident");function cf(){}function df(a){var b={},c=[],d=0;pe(a,function(a){ef(a);a.index=d++;a=a.j.cssText;for(var c;c=je.exec(a);){var e=c[1];":"!==c[2]&&(b[e]=!0)}},function(a){c.push(a)});a.b=c;a=[];for(var e in b)a.push(e);return a}
+function ef(a){if(!a.j){var b={},c={};ff(a,c)&&(b.u=c,a.rules=null);b.cssText=a.parsedCssText.replace(me,"").replace(he,"");a.j=b}}function ff(a,b){var c=a.j;if(c){if(c.u)return Object.assign(b,c.u),!0}else{c=a.parsedCssText;for(var d;a=he.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}}
+function gf(a,b,c){b&&(b=0<=b.indexOf(";")?hf(a,b,c):ue(b,function(b,e,f,g){if(!e)return b+g;(e=gf(a,c[e],c))&&"initial"!==e?"apply-shim-inherit"===e&&(e="inherit"):e=gf(a,c[f]||f,c)||f;return b+(e||"")+g}));return b&&b.trim()||""}
+function hf(a,b,c){b=b.split(";");for(var d=0,e,f;d<b.length;d++)if(e=b[d]){ie.lastIndex=0;if(f=ie.exec(e))e=gf(a,c[f[1]],c);else if(f=e.indexOf(":"),-1!==f){var g=e.substring(f);g=g.trim();g=gf(a,g,c)||g;e=e.substring(0,f)+g}b[d]=e&&e.lastIndexOf(";")===e.length-1?e.slice(0,-1):e||""}return b.join(";")}
+function jf(a,b){var c={},d=[];pe(a,function(a){a.j||ef(a);var e=a.l||a.parsedSelector;b&&a.j.u&&e&&af.call(b,e)&&(ff(a,c),a=a.index,e=parseInt(a/32,10),d[e]=(d[e]||0)|1<<a%32)},null,!0);return{u:c,key:d}}
+function kf(a,b,c,d){b.j||ef(b);if(b.j.u){var e=V(a);a=e.is;e=e.J;e=a?De(a,e):"html";var f=b.parsedSelector,g=":host > *"===f||"html"===f,h=0===f.indexOf(":host")&&!g;"shady"===c&&(g=f===e+" > *."+e||-1!==f.indexOf("html"),h=!g&&0===f.indexOf(e));"shadow"===c&&(g=":host > *"===f||"html"===f,h=h&&!g);if(g||h)c=e,h&&(b.l||(b.l=Fe(W,b,W.b,a?Ee+a:"",e)),c=b.l||e),d({Da:c,Aa:h,Va:g})}}
+function lf(a,b){var c={},d={},e=b&&b.__cssBuild;pe(b,function(b){kf(a,b,e,function(e){af.call(a.i||a,e.Da)&&(e.Aa?ff(b,c):ff(b,d))})},null,!0);return{Ca:d,za:c}}
+function mf(a,b,c,d){var e=V(b),f=De(e.is,e.J),g=new RegExp("(?:^|[^.#[:])"+(b.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])");e=X(b).v;var h=nf(e,d);return Be(b,e,function(b){var e="";b.j||ef(b);b.j.cssText&&(e=hf(a,b.j.cssText,c));b.cssText=e;if(!S&&!re(b)&&b.cssText){var k=e=b.cssText;null==b.ga&&(b.ga=ke.test(e));if(b.ga)if(null==b.R){b.R=[];for(var q in h)k=h[q],k=k(e),e!==k&&(e=k,b.R.push(q))}else{for(q=0;q<b.R.length;++q)k=h[b.R[q]],e=k(e);k=e}b.cssText=k;b.l=b.l||b.selector;e="."+d;
+q=b.l.split(",");k=0;for(var O=q.length,L;k<O&&(L=q[k]);k++)q[k]=L.match(g)?L.replace(f,e):e+" "+L;b.selector=q.join(",")}})}function nf(a,b){a=a.b;var c={};if(!S&&a)for(var d=0,e=a[d];d<a.length;e=a[++d]){var f=e,g=b;f.i=new RegExp("\\b"+f.keyframesName+"(?!\\B|-)","g");f.a=f.keyframesName+"-"+g;f.l=f.l||f.selector;f.selector=f.l.replace(f.keyframesName,f.a);c[e.keyframesName]=of(e)}return c}function of(a){return function(b){return b.replace(a.i,a.a)}}
+function pf(a,b){var c=qf,d=qe(a);a.textContent=oe(d,function(a){var d=a.cssText=a.parsedCssText;a.j&&a.j.cssText&&(d=d.replace(be,"").replace(ce,""),a.cssText=hf(c,d,b))})}p.Object.defineProperties(cf.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"x-scope"}}});var qf=new cf;var rf={},sf=window.customElements;if(sf&&!S){var tf=sf.define;sf.define=function(a,b,c){var d=document.createComment(" Shady DOM styles for "+a+" "),e=document.head;e.insertBefore(d,(U?U.nextSibling:null)||e.firstChild);U=d;rf[a]=d;tf.call(sf,a,b,c)}};function uf(){this.cache={}}uf.prototype.store=function(a,b,c,d){var e=this.cache[a]||[];e.push({u:b,styleElement:c,m:d});100<e.length&&e.shift();this.cache[a]=e};uf.prototype.fetch=function(a,b,c){if(a=this.cache[a])for(var d=a.length-1;0<=d;d--){var e=a[d],f;a:{for(f=0;f<c.length;f++){var g=c[f];if(e.u[g]!==b[g]){f=!1;break a}}f=!0}if(f)return e}};function vf(){}
+function wf(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.target!==document.documentElement&&c.target!==document.head)for(var d=0;d<c.addedNodes.length;d++){var e=c.addedNodes[d];if(e.nodeType===Node.ELEMENT_NODE){var f=e.getRootNode();var g=e;var h=[];g.classList?h=Array.from(g.classList):g instanceof window.SVGElement&&g.hasAttribute("class")&&(h=g.getAttribute("class").split(/\s+/));g=h;h=g.indexOf(W.a);if((g=-1<h?g[h+1]:"")&&f===e.ownerDocument)xe(e,g,!0);else if(f.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&
+(f=f.host))if(f=V(f).is,g===f)for(e=window.ShadyDOM.nativeMethods.querySelectorAll.call(e,":not(."+W.a+")"),f=0;f<e.length;f++)ze(e[f],g);else g&&xe(e,g,!0),xe(e,f)}}}}
+if(!S){var xf=new MutationObserver(wf),yf=function(a){xf.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)yf(document);else{var zf=function(){yf(document.body)};window.HTMLImports?window.HTMLImports.whenReady(zf):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){zf();document.removeEventListener("readystatechange",a)};document.addEventListener("readystatechange",a)}else zf()})}vf=function(){wf(xf.takeRecords())}}
+var Af=vf;var Bf={};var Cf=Promise.resolve();function Df(a){if(a=Bf[a])a._applyShimCurrentVersion=a._applyShimCurrentVersion||0,a._applyShimValidatingVersion=a._applyShimValidatingVersion||0,a._applyShimNextVersion=(a._applyShimNextVersion||0)+1}function Ef(a){return a._applyShimCurrentVersion===a._applyShimNextVersion}function Ff(a){a._applyShimValidatingVersion=a._applyShimNextVersion;a.a||(a.a=!0,Cf.then(function(){a._applyShimCurrentVersion=a._applyShimNextVersion;a.a=!1}))};var Gf=null,Hf=window.HTMLImports&&window.HTMLImports.whenReady||null,If;function Jf(a){requestAnimationFrame(function(){Hf?Hf(a):(Gf||(Gf=new Promise(function(a){If=a}),"complete"===document.readyState?If():document.addEventListener("readystatechange",function(){"complete"===document.readyState&&If()})),Gf.then(function(){a&&a()}))})};var Kf=new uf;function Y(){var a=this;this.fa={};this.c=document.documentElement;var b=new Pd;b.rules=[];this.i=$e(this.c,new Ze(b));this.D=!1;this.b=this.a=null;Jf(function(){Lf(a)})}n=Y.prototype;n.na=function(){Af()};n.xa=function(a){return qe(a)};n.Fa=function(a){return oe(a)};
+n.prepareTemplate=function(a,b,c){if(!a.b){a.b=!0;a.name=b;a.extends=c;Bf[b]=a;var d=(d=a.content.querySelector("style"))?d.getAttribute("css-build")||"":"";var e=[];for(var f=a.content.querySelectorAll("style"),g=0;g<f.length;g++){var h=f[g];if(h.hasAttribute("shady-unscoped")){if(!S){var k=h.textContent;ne.has(k)||(ne.add(k),k=h.cloneNode(!0),document.head.appendChild(k));h.parentNode.removeChild(h)}}else e.push(h.textContent),h.parentNode.removeChild(h)}e=e.join("").trim();c={is:b,extends:c,Ka:d};
+S||xe(a.content,b);Lf(this);f=ie.test(e)||he.test(e);ie.lastIndex=0;he.lastIndex=0;e=Qd(e);f&&T&&this.a&&this.a.transformRules(e,b);a._styleAst=e;a.c=d;d=[];T||(d=df(a._styleAst));if(!d.length||T)e=S?a.content:null,b=rf[b],f=Be(c,a._styleAst),b=f.length?se(f,c.is,e,b):void 0,a.ea=b;a.ua=d}};
+function Mf(a){!a.b&&window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface&&(a.b=window.ShadyCSS.CustomStyleInterface,a.b.transformCallback=function(b){a.ka(b)},a.b.validateCallback=function(){requestAnimationFrame(function(){(a.b.enqueued||a.D)&&a.C()})})}function Lf(a){!a.a&&window.ShadyCSS&&window.ShadyCSS.ApplyShim&&(a.a=window.ShadyCSS.ApplyShim,a.a.invalidCallback=Df);Mf(a)}
+n.C=function(){Lf(this);if(this.b){var a=this.b.processStyles();if(this.b.enqueued){if(T)for(var b=0;b<a.length;b++){var c=this.b.getStyleForCustomStyle(a[b]);if(c&&T&&this.a){var d=qe(c);Lf(this);this.a.transformRules(d);c.textContent=oe(d)}}else for(Nf(this,this.c,this.i),b=0;b<a.length;b++)(c=this.b.getStyleForCustomStyle(a[b]))&&pf(c,this.i.A);this.b.enqueued=!1;this.D&&!T&&this.styleDocument()}}};
+n.styleElement=function(a,b){var c=V(a).is,d=X(a);if(!d){var e=V(a);d=e.is;e=e.J;var f=rf[d];d=Bf[d];if(d){var g=d._styleAst;var h=d.ua}d=$e(a,new Ze(g,f,h,e))}a!==this.c&&(this.D=!0);b&&(d.G=d.G||{},Object.assign(d.G,b));if(T){if(d.G){b=d.G;for(var k in b)null===k?a.style.removeProperty(k):a.style.setProperty(k,b[k])}if(((k=Bf[c])||a===this.c)&&k&&k.ea&&!Ef(k)){if(Ef(k)||k._applyShimValidatingVersion!==k._applyShimNextVersion)Lf(this),this.a&&this.a.transformRules(k._styleAst,c),k.ea.textContent=
+Be(a,d.v),Ff(k);S&&(c=a.shadowRoot)&&(c.querySelector("style").textContent=Be(a,d.v));d.v=k._styleAst}}else if(Nf(this,a,d),d.ca&&d.ca.length){c=d;k=V(a).is;d=(b=Kf.fetch(k,c.A,c.ca))?b.styleElement:null;g=c.m;(h=b&&b.m)||(h=this.fa[k]=(this.fa[k]||0)+1,h=k+"-"+h);c.m=h;h=c.m;e=qf;e=d?d.textContent||"":mf(e,a,c.A,h);f=X(a);var l=f.a;l&&!S&&l!==d&&(l._useCount--,0>=l._useCount&&l.parentNode&&l.parentNode.removeChild(l));S?f.a?(f.a.textContent=e,d=f.a):e&&(d=se(e,h,a.shadowRoot,f.b)):d?d.parentNode||
+(bf&&-1<e.indexOf("@media")&&(d.textContent=e),te(d,null,f.b)):e&&(d=se(e,h,null,f.b));d&&(d._useCount=d._useCount||0,f.a!=d&&d._useCount++,f.a=d);h=d;S||(d=c.m,f=e=a.getAttribute("class")||"",g&&(f=e.replace(new RegExp("\\s*x-scope\\s*"+g+"\\s*","g")," ")),f+=(f?" ":"")+"x-scope "+d,e!==f&&ve(a,f));b||Kf.store(k,c.A,h,c.m)}};function Of(a,b){return(b=b.getRootNode().host)?X(b)?b:Of(a,b):a.c}
+function Nf(a,b,c){a=Of(a,b);var d=X(a);a=Object.create(d.A||null);var e=lf(b,c.v);b=jf(d.v,b).u;Object.assign(a,e.za,b,e.Ca);b=c.G;for(var f in b)if((e=b[f])||0===e)a[f]=e;f=qf;b=Object.getOwnPropertyNames(a);for(e=0;e<b.length;e++)d=b[e],a[d]=gf(f,a[d],a);c.A=a}n.styleDocument=function(a){this.styleSubtree(this.c,a)};
+n.styleSubtree=function(a,b){var c=a.shadowRoot;(c||a===this.c)&&this.styleElement(a,b);if(b=c&&(c.children||c.childNodes))for(a=0;a<b.length;a++)this.styleSubtree(b[a]);else if(a=a.children||a.childNodes)for(b=0;b<a.length;b++)this.styleSubtree(a[b])};n.ka=function(a){var b=this,c=qe(a);pe(c,function(a){if(S)We(a);else{var c=W;a.selector=a.parsedSelector;We(a);a.selector=a.l=Fe(c,a,c.c,void 0,void 0)}T&&(Lf(b),b.a&&b.a.transformRule(a))});T?a.textContent=oe(c):this.i.v.rules.push(c)};
+n.getComputedStyleValue=function(a,b){var c;T||(c=(X(a)||X(Of(this,a))).A[b]);return(c=c||window.getComputedStyle(a).getPropertyValue(b))?c.trim():""};n.Ea=function(a,b){var c=a.getRootNode();b=b?b.split(/\s/):[];c=c.host&&c.host.localName;if(!c){var d=a.getAttribute("class");if(d){d=d.split(/\s/);for(var e=0;e<d.length;e++)if(d[e]===W.a){c=d[e+1];break}}}c&&b.push(W.a,c);T||(c=X(a))&&c.m&&b.push(qf.a,c.m);ve(a,b.join(" "))};n.va=function(a){return X(a)};Y.prototype.flush=Y.prototype.na;
+Y.prototype.prepareTemplate=Y.prototype.prepareTemplate;Y.prototype.styleElement=Y.prototype.styleElement;Y.prototype.styleDocument=Y.prototype.styleDocument;Y.prototype.styleSubtree=Y.prototype.styleSubtree;Y.prototype.getComputedStyleValue=Y.prototype.getComputedStyleValue;Y.prototype.setElementClass=Y.prototype.Ea;Y.prototype._styleInfoForNode=Y.prototype.va;Y.prototype.transformCustomStyleForDocument=Y.prototype.ka;Y.prototype.getStyleAst=Y.prototype.xa;Y.prototype.styleAstToString=Y.prototype.Fa;
+Y.prototype.flushCustomStyles=Y.prototype.C;Object.defineProperties(Y.prototype,{nativeShadow:{get:function(){return S}},nativeCss:{get:function(){return T}}});var Z=new Y,Pf,Qf;window.ShadyCSS&&(Pf=window.ShadyCSS.ApplyShim,Qf=window.ShadyCSS.CustomStyleInterface);window.ShadyCSS={ScopingShim:Z,prepareTemplate:function(a,b,c){Z.C();Z.prepareTemplate(a,b,c)},styleSubtree:function(a,b){Z.C();Z.styleSubtree(a,b)},styleElement:function(a){Z.C();Z.styleElement(a)},styleDocument:function(a){Z.C();Z.styleDocument(a)},getComputedStyleValue:function(a,b){return Z.getComputedStyleValue(a,b)},nativeCss:T,nativeShadow:S};Pf&&(window.ShadyCSS.ApplyShim=Pf);
+Qf&&(window.ShadyCSS.CustomStyleInterface=Qf);var Rf=window.document;window.WebComponents=window.WebComponents||{};function Sf(){requestAnimationFrame(function(){window.WebComponents.ready=!0;window.document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}function Tf(){Sf();Rf.removeEventListener("readystatechange",Tf)}"loading"!==Rf.readyState?Sf():Rf.addEventListener("readystatechange",Tf);}).call(this);
+
+//# sourceMappingURL=webcomponents-sd-ce.js.map
diff --git a/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js.map b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js.map
new file mode 100644
index 00000000000..f65350827a5
--- /dev/null
+++ b/chromium/third_party/catapult/third_party/polymer2/bower_components/webcomponentsjs/webcomponents-sd-ce.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["node_modules/@webcomponents/shadydom/src/shady-data.js"," [synthetic:util/global] "," [synthetic:util/defineproperty] "," [synthetic:es6/symbol] "," [synthetic:es6/util/makeiterator] "," [synthetic:es6/util/arrayfromiterator] ","node_modules/@webcomponents/shadydom/src/utils.js","node_modules/@webcomponents/shadydom/src/flush.js","node_modules/@webcomponents/shadydom/src/observe-changes.js","node_modules/@webcomponents/shadydom/src/native-methods.js","node_modules/@webcomponents/shadydom/src/innerHTML.js","node_modules/@webcomponents/shadydom/src/native-tree-walker.js","node_modules/@webcomponents/shadydom/src/native-tree-accessors.js","node_modules/@webcomponents/shadydom/src/native-tree.js","node_modules/@webcomponents/shadydom/src/patch-accessors.js","node_modules/@webcomponents/shadydom/src/attach-shadow.js","node_modules/@webcomponents/shadydom/src/patch-builtins.js","node_modules/@webcomponents/shadydom/src/logical-tree.js","node_modules/@webcomponents/shadydom/src/logical-mutation.js"," [synthetic:es6/util/arrayfromiterable] ","node_modules/@webcomponents/shadydom/src/patch-events.js","node_modules/@webcomponents/shadydom/src/array-splice.js","node_modules/@webcomponents/shadydom/src/shadydom.js","node_modules/@webcomponents/custom-elements/src/Utilities.js","node_modules/@webcomponents/custom-elements/src/CustomElementInternals.js","node_modules/@webcomponents/custom-elements/src/CustomElementState.js","node_modules/@webcomponents/custom-elements/src/DocumentConstructionObserver.js","node_modules/@webcomponents/custom-elements/src/CustomElementRegistry.js","node_modules/@webcomponents/custom-elements/src/Deferred.js","node_modules/@webcomponents/custom-elements/src/Patch/Native.js","node_modules/@webcomponents/custom-elements/src/AlreadyConstructedMarker.js","node_modules/@webcomponents/custom-elements/src/Patch/HTMLElement.js","node_modules/@webcomponents/custom-elements/src/custom-elements.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ParentNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Document.js","node_modules/@webcomponents/custom-elements/src/Patch/Node.js","node_modules/@webcomponents/custom-elements/src/Patch/Interface/ChildNode.js","node_modules/@webcomponents/custom-elements/src/Patch/Element.js","node_modules/@webcomponents/custom-elements/src/Patch/DocumentFragment.js","node_modules/@webcomponents/shadycss/src/css-parse.js","node_modules/@webcomponents/shadycss/src/style-settings.js","node_modules/@webcomponents/shadycss/src/common-regex.js","node_modules/@webcomponents/shadycss/src/unscoped-style-handler.js","node_modules/@webcomponents/shadycss/src/style-util.js","node_modules/@webcomponents/shadycss/src/style-transformer.js","node_modules/@webcomponents/shadycss/src/style-info.js","node_modules/@webcomponents/shadycss/src/style-properties.js","node_modules/@webcomponents/shadycss/src/style-placeholder.js","node_modules/@webcomponents/shadycss/src/style-cache.js","node_modules/@webcomponents/shadycss/src/document-watcher.js","node_modules/@webcomponents/shadycss/src/template-map.js","node_modules/@webcomponents/shadycss/src/apply-shim-utils.js","node_modules/@webcomponents/shadycss/src/document-wait.js","node_modules/@webcomponents/shadycss/src/scoping-shim.js","node_modules/@webcomponents/shadycss/src/common-utils.js","node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js","entrypoints/webcomponents-sd-ce-index.js"],"names":["$jscomp.global","$jscomp.defineProperty","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIterator","$jscomp.initSymbolIterator","$jscomp.iteratorPrototype","constructor","ShadyData","publicRoot","root","dirty","flattenedNodes","_prevAssignedSlot","_previouslyAssignedNodes","assignedSlot","assignedNodes","observer","childNodes","nextSibling","previousSibling","lastChild","firstChild","parentNode","ownerShadyRoot","undefined","__insideAccessors","__outsideAccessors","toJSON","ensureShadyDataForNode","node","__shady","shadyDataForNode","settings","window","hasNativeShadowDOM","attachShadow","Element","prototype","getRootNode","Node","desc","Object","getOwnPropertyDescriptor","hasDescriptors","configurable","get","inUse","IS_IE","navigator","userAgent","match","IS_EDGE","useNativeAccessors","isTrackingLogicalChildNodes","nodeData","isShadyRoot","obj","_localName","ownerShadyRootForNode","p","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","extend","target","source","n$","getOwnPropertyNames","i","n","length","pd","defineProperty","extendAll","sources","mixin","twiddle","document","createTextNode","content","queue","observe","MutationObserver","shift","e","textContent","characterData","microtask","callback","push","hasDocumentContains","contains","container","flushList","scheduled","enqueue","flush","didFlush","AsyncObserver","_scheduled","addedNodes","removedNodes","callbacks","Set","schedule","mutations","takeRecords","forEach","cb","observeChildren","sd","add","_callback","_observer","_node","unobserveChildren","handle","delete","size","filterMutations","targetRootNode","map","mutation","mutationInScope","nodes","Array","from","filter","create","value","m","insertBefore","replaceChild","removeChild","setAttribute","removeAttribute","cloneNode","importNode","Document","addEventListener","removeEventListener","windowAddEventListener","Window","windowRemoveEventListener","dispatchEvent","HTMLElement","getElementById","elementQuerySelector","querySelector","fragmentQuerySelector","DocumentFragment","documentQuerySelector","elementQuerySelectorAll","querySelectorAll","fragmentQuerySelectorAll","documentQuerySelectorAll","appendChild","selector","nodeType","ELEMENT_NODE","call","DOCUMENT_NODE","escapeAttrRegExp","escapeDataRegExp","escapeReplace","c","makeSet","arr","set","voidElements","plaintextParents","getInnerHTML","localName","s","c$","l","child","tagName","attrs","attributes","attr","name","replace","TEXT_NODE","data","COMMENT_NODE","console","error","Error","nodeWalker","createTreeWalker","NodeFilter","SHOW_ALL","elementWalker","SHOW_ELEMENT","currentNode","parentElement","firstElementChild","lastElementChild","previousElementSibling","nextElementSibling","children","innerHTML","DOCUMENT_FRAGMENT_NODE","textWalker","SHOW_TEXT","nextNode","nodeValue","nativeProtos","findNodeDescriptor","proto","hasOwnProperty","nodeAccessors","fragmentAccessors","documentAccessors","slice","accessors","nativeTreeAccessors","nativeTreeWalker","clearNode","inertDoc","implementation","createHTMLDocument","nativeIsConnectedAccessors","nativeIsConnected","nativeActiveElementDescriptor","OutsideAccessors","ClassNameAccessor","className","getAttribute","InsideAccessors","item","childNodes.item","index","childElementCount","tc","cn","join","text","nativeAccessors","children.item","containerName","htmlContainer","createElement","ShadowRootAccessor","shadowRoot","ActiveElementAccessor","activeElement","active","host","nativeContains","activeRoot","patchAccessorGroup","descriptors","force","objDesc","warn","patchAccessors","patchShadowRootAccessors","ShadyRoot","__proto__","defineProperties","nodeName","prop","patchOutsideElementAccessors","element","patchInsideElementAccessors","linkNode","ref_node","containerData","ref_nodeData","psd","nsd","recordChildNodes","parent","refData","ownerRoot","slotsAdded","slots","_ensureSlotData","_pendingSlots","_slotList","_slotMap","$jscomp.arrayFromIterator","$jscomp.makeIterator","_asyncRender","resetTo","parentData","hasShadowRootWithSlot","preventNativeInsert","firstComposedNode","nativeMethods","scheduleObserver","preventNativeRemove","removeOwnerShadyRoot","changeSlotContent","_validateSlots","slot","splice","x","indexOf","didRemove","removingInsertionPoint","composed","flattened","_hasInsertionPoint","distributeAttributeChange","oldName","__slotName","_nameForSlot","list","_sortSlots","addedNode","removedNode","documentElement","query","matcher","halter","queryElements","elements","result","scopingShim","deep","ownerDocument","nc","eventWrappersName","Date","now","alwaysComposed","pathComposer","startNode","composedPath","current","startRoot","retarget","refNode","path","refNodePath","ancestor","lastRoot","rootIdx","eventMixin","isTrusted","__composed","type","__composedPath","currentTarget","relatedTarget","__relatedTarget","__relatedTargetComposedPath","stopPropagation","Event","__propagationStopped","stopImmediatePropagation","__immediatePropagationStopped","mixinComposedFlag","Base","klazz","options","event","nonBubblingEventsToRetarget","hasRetargeted","fireHandlers","phase","hs","__handlers","fn","retargetNonBubblingEvent","AT_TARGET","lastFiredRoot","findListener","wrappers","capture","once","passive","savedType","savedListener","savedCapture","savedOnce","savedPassive","savedNode","fnOrObj","optionsOrCapture","handlerType","handleEvent","__shadyTarget","wrapperFn","patchEvent","lastCurrentTargetDesc","eventPhase","BUBBLING_PHASE","CAPTURING_PHASE","bubbles","ret","ael","idx","rel","activateFocusEventOverrides","ev","getPrototypeOf","patchProto","__sourceProto","PatchedEvent","PatchedCustomEvent","CustomEvent","PatchedMouseEvent","MouseEvent","newSplice","addedCount","removed","calcSplices","currentEnd","old","oldEnd","currentStart","oldStart","prefixCount","suffixCount","minLength","Math","min","currentValue","previousValue","index1","index2","count","equals","rowCount","columnCount","distances","j","north","west","edits","EDIT_ADD","EDIT_DELETE","northWest","EDIT_LEAVE","EDIT_UPDATE","reverse","splices","oldIndex","ShadyRootConstructionToken","ancestorList","ancestors","unshift","token","TypeError","SHADYROOT_NAME","_mode","mode","hostData","MODE_CLOSED","rootData","_renderPending","_render","renderRoot","_distribute","slotData","_distributeNodeToSlot","slotParentRoot","slotParentData","_addAssignedToFlattenedNodes","prevAssignedNodes","_fireSlotChange","_compose","composeList","targetNode","distributedNode","d","next","forcedSlot","oldSlot","CATCHALL_NAME","assigned","nestedAssigned","slotNamesToSort","_mapSlots","sort","a","b","listA","listB","nA","nB","getAssignedSlot","windowMixin","bind","nodeMixin","IsConnectedAccessor","isConnected","textMixin","fragmentMixin","useNative","o","slotMixin","flatten","elementMixin","documentMixin","id","nativeBlur","blur","htmlElementMixin","shadowActive","shadowRootMixin","patchBuiltin","ShadyDOM","patch","nativeHTMLElement","Text","HTMLSlotElement","ShadowRoot","reservedTagList","isValidCustomElementName","reserved","has","validForm","test","nativeValue","__CE_isImportDocument","nextSiblingOrAncestorSibling","start","walkDeepDescendantElements","visitedImports","import","__CE_shadowRoot","setPropertyUnchecked","destination","CustomElementInternals","_localNameToDefinition","Map","_constructorToDefinition","_patches","_hasPatches","setDefinition","definition","addPatch","listener","patchTree","__CE_patched","connectTree","custom","__CE_state","connectedCallback","upgradeElement","disconnectTree","disconnectedCallback","patchAndUpgradeTree","upgrade","gatherElements","__CE_hasRegistry","readyState","__CE_documentLoadHandled","clonedVisitedImports","defaultView","localNameToDefinition","constructionStack","pop","failed","__CE_definition","attributeChangedCallback","observedAttributes","oldValue","newValue","namespace","DocumentConstructionObserver","internals","doc","_internals","_document","_handleMutations","childList","subtree","disconnect","Deferred","_resolve","_value","_promise","Promise","resolve","CustomElementRegistry","_elementDefinitionIsRunning","_whenDefinedDeferred","_flushCallback","this._flushCallback","_flushPending","_pendingDefinitions","_documentConstructionObserver","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry.prototype","?.prototype","define","Function","SyntaxError","getCallback","callbackValue","adoptedCallback","_flush","pendingDefinitions","elementsWithStableDefinitions","elementsWithPendingDefinitions","pendingElements","pendingUpgradableElements","deferred","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry_prototype$whenDefined","whenDefined","reject","prior","some","polyfillWrapFlushCallback","outer","inner","Document_createElement","Document_createElementNS","createElementNS","Document_importNode","Document_prepend","Document_append","DocumentFragment_prepend","DocumentFragment_append","Node_cloneNode","Node_appendChild","Node_insertBefore","Node_removeChild","Node_replaceChild","Node_textContent","Element_attachShadow","Element_innerHTML","Element_getAttribute","Element_setAttribute","Element_removeAttribute","Element_getAttributeNS","getAttributeNS","Element_setAttributeNS","setAttributeNS","Element_removeAttributeNS","removeAttributeNS","Element_insertAdjacentElement","Element_insertAdjacentHTML","Element_prepend","Element_append","Element_before","Element_after","Element_replaceWith","Element_remove","HTMLElement_innerHTML","HTMLElement_insertAdjacentElement","HTMLElement_insertAdjacentHTML","$jscompDefaultExport","AlreadyConstructedMarker","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElement.call","setPrototypeOf","lastIndex","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement","builtIn","appendPrependPatch","builtInMethod","connectedElements","apply","prepend","append","clone","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_importNode.call","NS_HTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElementNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_append","patch_textContent","baseDescriptor","enumerable","assignedValue","childNodesLength","insertedNodes","nativeResult","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_insertBefore.call","nodeWasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_appendChild.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_cloneNode.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_removeChild.call","nodeToInsert","nodeToRemove","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_replaceChild.call","nodeToInsertWasConnected","thisIsConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent.get","parts","beforeAfterPatch","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_before","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_after","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_replaceWith","wasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_remove","patch_innerHTML","htmlString","removedElements","patch_insertAdjacentElement","baseMethod","position","insertedElement","patch_insertAdjacentHTML","upgradeNodesInRange","end","toLowerCase","marker","String","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow","init","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML.get","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML.get","isTemplate","rawElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_append","priorCustomElements","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_append","customElements","StyleNode","parse","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.comments","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.port","parseCss","OPEN_BRACE","previous","CLOSE_BRACE","t","substring","trim","ss","_expandUnicodeEscapes","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.multipleSpaces","lastIndexOf","AT_START","MEDIA_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MEDIA_RULE","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.keyframesRule","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.KEYFRAMES_RULE","split","VAR_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MIXIN_RULE","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.STYLE_RULE","r$","r","code","repeat","stringify","preserveProperties","cssText","rules","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.customProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinApply","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.varApply","STYLE_RULE","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","port","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","nativeShadow","nativeCssVariables_","calcCssVariables","CSS","supports","ShadyCSS","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","VAR_CONSUMED","ANIMATION_MATCH","MEDIA_MATCH","BRACKETED","styleTextSet","toCssText","forEachRule","rulesForStyle","style","isKeyframesSelector","rule","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","matchMedia","applyCss","moniker","contextNode","applyStyle","lastHeadApplyNode","head","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","processVariableAndFallback","str","level","prefix","suffix","comma","fallback","setElementClassRaw","getIsExtends","typeExtension","is","extends","StyleTransformer","dom","scope","shouldRemoveScope","_transformDom","_content","classList","remove","SCOPE_NAME","CLASS","elementStyles","styleRules","cssBuildType","css","ext","hostScope","_calcHostScope","CSS_CLASS_PREFIX","isScoped","transformedSelector","_transformRuleCss","self","_transformComplexSelector","transformer","p$","COMPLEX_SELECTOR_SEP","_twiddleNthPlus","NTH","inside","stop","isNth","SLOTTED_START","HOST","SIMPLE_SELECTOR_SEP","info","_transformCompoundSelector","combinator","slottedIndex","SLOTTED","_transformHostSelector","_transformSimpleSelector","slotted","SLOTTED_PAREN","paren","DIR_PAREN","before","dir","PSEUDO_PREFIX","HOST_PAREN","SIMPLE_SELECTOR_PREFIX","typeSelector","SELECTOR_NO_MATCH","normalizeRootSelector","ROOT","_transformDocumentSelector","SCOPE_DOC_SELECTOR","$jscomp.global.Object.defineProperties","RegExp","StyleInfo","ast","placeholder","ownStylePropertyNames","overrideStyleProperties","customStyle","scopeSelector","styleProperties","styleInfo","_getStyleRules","method","StyleProperties","decorateStyles","props","keyframes","ruleIndex","decorateRule","propertyInfo","exec","onKeyframesRule","_keyframes","names","properties","collectProperties","hasProperties","assign","any","valueForProperty","property","valueForProperties","propertyValue","colon","pp","propertyDataFromStyles","selectorToMatch","parseInt","key","whenHostOrRootRule","cssBuild","parsedSelector","isRoot","isHost","hostAndRootPropertiesForScope","hostProps","rootProps","_element","transformStyles","hostSelector","hostRx","HOST_PREFIX","rxHostSelector","HOST_SUFFIX","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.get","keyframeTransforms","_elementKeyframeTransforms","output","input","hasAnimations","keyframeNamesToTransform","keyframe","transform","keyframesRules","keyframesNameRx","transformedKeyframesName","scopeId","_keyframesRuleTransformer","applyCustomStyle","XSCOPE_NAME","placeholderMap","ce","origDefine","wrappedDefine","clazz","placeHolder","createComment","after","StyleCache","cache","store","tagname","styleElement","typeMax","fetch","ownPropertyNames","entry","pn","handler","mxns","mxn","classes","hasAttribute","currentScope","newScope","unscoped","delayedStart","body","requestAnimationFrame","module$node_modules$$webcomponents$shadycss$src$document_watcher.flush","templateMap","promise","invalidate","elementName","template","templateIsValid","startValidatingTemplate","_validating","then","readyPromise","whenReady","resolveFn","documentWait","styleCache","ScopingShim","_scopeCounter","_documentOwner","_documentOwnerStyleInfo","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.set","_elementsHaveApplied","_customStyleInterface","_applyShim","_ensure","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim.prototype","ScopingShim$$module$node_modules$$webcomponents$shadycss$src$scoping_shim_prototype$flush","getStyleAst","styleAstToString","prepareTemplate","_prepared","styleTextParts","styles","scopingAttribute","newStyle","__cssBuild","_cssBuild","shadowroot","_style","_ownPropertyNames","_ensureCustomStyleInterface","CustomStyleInterface","transformCustomStyleForDocument","flushCustomStyles","_ensureApplyShim","ApplyShim","customStyles","_revalidateCustomStyleApplyShim","_updateProperties","_applyCustomStyles","styleDocument","overrideProps","_isRootOwner","removeProperty","setProperty","cachedStyle","cacheEntry","oldScopeSelector","cachedScopeSelector","applyElementStyle","v","_styleOwnerForNode","owner","ownerStyleInfo","hostAndRootProps","propertiesMatchingHost","propertyData","overrides","reify","styleSubtree","shadowChildren","documentRule","_transformRule","getComputedStyleValue","getComputedStyle","getPropertyValue","setElementClass","classString","scopeName","classAttr","k$","_styleInfoForNode","elementExtends","WebComponents","fire","ready","wait"],"mappings":"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","file":"webcomponents-sd-ce.js","sourcesContent":["/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n\nexport class ShadyData {\n constructor() {\n /** @type {ShadowRoot} */\n this.root = null;\n /** @type {ShadowRoot} */\n this.publicRoot = null;\n this.dirty = false;\n this.observer = null;\n /** @type {Array<Node>} */\n this.assignedNodes = null;\n /** @type {Element} */\n this.assignedSlot = null;\n /** @type {Array<Node>} */\n this._previouslyAssignedNodes = null;\n /** @type {Element} */\n this._prevAssignedSlot = null;\n /** @type {Array<Node>} */\n this.flattenedNodes = null;\n this.ownerShadyRoot = undefined;\n /** @type {Node|undefined} */\n this.parentNode = undefined;\n /** @type {Node|undefined} */\n this.firstChild = undefined;\n /** @type {Node|undefined} */\n this.lastChild = undefined;\n /** @type {Node|undefined} */\n this.previousSibling = undefined;\n /** @type {Node|undefined} */\n this.nextSibling = undefined;\n /** @type {Array<Node>|undefined} */\n this.childNodes = undefined;\n this.__outsideAccessors = false;\n this.__insideAccessors = false;\n }\n\n toJSON() {\n return {};\n }\n}\n\nexport function ensureShadyDataForNode(node) {\n if (!node.__shady) {\n node.__shady = new ShadyData();\n }\n return node.__shady;\n}\n\nexport function shadyDataForNode(node) {\n return node && node.__shady;\n}\n",null,null,null,null,null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport {shadyDataForNode} from './shady-data.js';\n\nexport let settings = window['ShadyDOM'] || {};\n\nsettings.hasNativeShadowDOM = Boolean(Element.prototype.attachShadow && Node.prototype.getRootNode);\n\nlet desc = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild');\n\nsettings.hasDescriptors = Boolean(desc && desc.configurable && desc.get);\nsettings.inUse = settings['force'] || !settings.hasNativeShadowDOM;\n\n// Default to using native accessors (instead of treewalker) only for\n// IE/Edge where they are faster.\nconst IS_IE = navigator.userAgent.match('Trident');\nconst IS_EDGE = navigator.userAgent.match('Edge');\nif (settings.useNativeAccessors === undefined) {\n settings.useNativeAccessors = settings.hasDescriptors && (IS_IE || IS_EDGE);\n}\n\nexport function isTrackingLogicalChildNodes(node) {\n const nodeData = shadyDataForNode(node);\n return (nodeData && nodeData.firstChild !== undefined);\n}\n\nexport function isShadyRoot(obj) {\n return Boolean(obj._localName === 'ShadyRoot');\n}\n\nexport function ownerShadyRootForNode(node) {\n let root = node.getRootNode();\n if (isShadyRoot(root)) {\n return root;\n }\n}\n\nlet p = Element.prototype;\nlet matches = p.matches || p.matchesSelector ||\n p.mozMatchesSelector || p.msMatchesSelector ||\n p.oMatchesSelector || p.webkitMatchesSelector;\n\nexport function matchesSelector(element, selector) {\n return matches.call(element, selector);\n}\n\nfunction copyOwnProperty(name, source, target) {\n let pd = Object.getOwnPropertyDescriptor(source, name);\n if (pd) {\n Object.defineProperty(target, name, pd);\n }\n}\n\nexport function extend(target, source) {\n if (target && source) {\n let n$ = Object.getOwnPropertyNames(source);\n for (let i=0, n; (i<n$.length) && (n=n$[i]); i++) {\n copyOwnProperty(n, source, target);\n }\n }\n return target || source;\n}\n\nexport function extendAll(target, ...sources) {\n for (let i=0; i < sources.length; i++) {\n extend(target, sources[i]);\n }\n return target;\n}\n\nexport function mixin(target, source) {\n for (var i in source) {\n target[i] = source[i];\n }\n return target;\n}\n\nexport function patchPrototype(obj, mixin) {\n let proto = Object.getPrototypeOf(obj);\n if (!proto.hasOwnProperty('__patchProto')) {\n let patchProto = Object.create(proto);\n patchProto.__sourceProto = proto;\n extend(patchProto, mixin);\n proto['__patchProto'] = patchProto;\n }\n // old browsers don't have setPrototypeOf\n obj.__proto__ = proto['__patchProto'];\n}\n\n\nlet twiddle = document.createTextNode('');\nlet content = 0;\nlet queue = [];\nnew MutationObserver(() => {\n while (queue.length) {\n // catch errors in user code...\n try {\n queue.shift()();\n } catch(e) {\n // enqueue another record and throw\n twiddle.textContent = content++;\n throw(e);\n }\n }\n}).observe(twiddle, {characterData: true});\n\n// use MutationObserver to get microtask async timing.\nexport function microtask(callback) {\n queue.push(callback);\n twiddle.textContent = content++;\n}\n\nexport const hasDocumentContains = Boolean(document.contains);\n\nexport function contains(container, node) {\n while (node) {\n if (node == container) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\n\n// render enqueuer/flusher\nlet flushList = [];\nlet scheduled;\nexport function enqueue(callback) {\n if (!scheduled) {\n scheduled = true;\n utils.microtask(flush);\n }\n flushList.push(callback);\n}\n\nexport function flush() {\n scheduled = false;\n let didFlush = Boolean(flushList.length);\n while (flushList.length) {\n flushList.shift()();\n }\n return didFlush;\n}\n\nflush['list'] = flushList;\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {ensureShadyDataForNode} from './shady-data.js';\n\nclass AsyncObserver {\n\n constructor() {\n this._scheduled = false;\n this.addedNodes = [];\n this.removedNodes = [];\n this.callbacks = new Set();\n }\n\n schedule() {\n if (!this._scheduled) {\n this._scheduled = true;\n utils.microtask(() => {\n this.flush();\n });\n }\n }\n\n flush() {\n if (this._scheduled) {\n this._scheduled = false;\n let mutations = this.takeRecords();\n if (mutations.length) {\n this.callbacks.forEach(function(cb) {\n cb(mutations);\n });\n }\n }\n }\n\n takeRecords() {\n if (this.addedNodes.length || this.removedNodes.length) {\n let mutations = [{\n addedNodes: this.addedNodes,\n removedNodes: this.removedNodes\n }];\n this.addedNodes = [];\n this.removedNodes = [];\n return mutations;\n }\n return [];\n }\n\n}\n\n// TODO(sorvell): consider instead polyfilling MutationObserver\n// directly so that users do not have to fork their code.\n// Supporting the entire api may be challenging: e.g. filtering out\n// removed nodes in the wrong scope and seeing non-distributing\n// subtree child mutations.\nexport let observeChildren = function(node, callback) {\n const sd = ensureShadyDataForNode(node);\n if (!sd.observer) {\n sd.observer = new AsyncObserver();\n }\n sd.observer.callbacks.add(callback);\n let observer = sd.observer;\n return {\n _callback: callback,\n _observer: observer,\n _node: node,\n takeRecords() {\n return observer.takeRecords()\n }\n };\n}\n\nexport let unobserveChildren = function(handle) {\n let observer = handle && handle._observer;\n if (observer) {\n observer.callbacks.delete(handle._callback);\n if (!observer.callbacks.size) {\n ensureShadyDataForNode(handle._node).observer = null;\n }\n }\n}\n\nexport function filterMutations(mutations, target) {\n /** @const {Node} */\n const targetRootNode = target.getRootNode();\n return mutations.map(function(mutation) {\n /** @const {boolean} */\n const mutationInScope = (targetRootNode === mutation.target.getRootNode());\n if (mutationInScope && mutation.addedNodes) {\n let nodes = Array.from(mutation.addedNodes).filter(function(n) {\n return (targetRootNode === n.getRootNode());\n });\n if (nodes.length) {\n mutation = Object.create(mutation);\n Object.defineProperty(mutation, 'addedNodes', {\n value: nodes,\n configurable: true\n });\n return mutation;\n }\n } else if (mutationInScope) {\n return mutation;\n }\n }).filter(function(m) { return m});\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport let appendChild = Element.prototype.appendChild;\nexport let insertBefore = Element.prototype.insertBefore;\nexport let replaceChild = Element.prototype.replaceChild;\nexport let removeChild = Element.prototype.removeChild;\nexport let setAttribute = Element.prototype.setAttribute;\nexport let removeAttribute = Element.prototype.removeAttribute;\nexport let cloneNode = Element.prototype.cloneNode;\nexport let importNode = Document.prototype.importNode;\nexport let addEventListener = Element.prototype.addEventListener;\nexport let removeEventListener = Element.prototype.removeEventListener;\nexport let windowAddEventListener = Window.prototype.addEventListener;\nexport let windowRemoveEventListener = Window.prototype.removeEventListener;\nexport let dispatchEvent = Element.prototype.dispatchEvent;\nexport let contains = Node.prototype.contains || HTMLElement.prototype.contains;\nexport let getElementById = Document.prototype.getElementById;\nexport let elementQuerySelector = Element.prototype.querySelector;\nexport let fragmentQuerySelector = DocumentFragment.prototype.querySelector;\nexport let documentQuerySelector = Document.prototype.querySelector;\nexport let querySelector = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelector.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelector.call(this, selector);\n default:\n return fragmentQuerySelector.call(this, selector);\n }\n};\nexport let elementQuerySelectorAll = Element.prototype.querySelectorAll;\nexport let fragmentQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\nexport let documentQuerySelectorAll = Document.prototype.querySelectorAll;\nexport let querySelectorAll = function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelectorAll.call(this, selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelectorAll.call(this, selector);\n default:\n return fragmentQuerySelectorAll.call(this, selector);\n }\n};","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n// Cribbed from ShadowDOM polyfill\n// https://github.com/webcomponents/webcomponentsjs/blob/master/src/ShadowDOM/wrappers/HTMLElement.js#L28\n/////////////////////////////////////////////////////////////////////////////\n// innerHTML and outerHTML\n\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\nlet escapeAttrRegExp = /[&\\u00A0\"]/g;\nlet escapeDataRegExp = /[&\\u00A0<>]/g;\n\nfunction escapeReplace(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n}\n\nfunction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n}\n\nfunction escapeData(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n}\n\nfunction makeSet(arr) {\n let set = {};\n for (let i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n}\n\n// http://www.whatwg.org/specs/web-apps/current-work/#void-elements\nlet voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nlet plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n]);\n\n/**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\nexport function getOuterHTML(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n let tagName = node.localName;\n let s = '<' + tagName;\n let attrs = node.attributes;\n for (let i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n let data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Function=} callback\n */\nexport function getInnerHTML(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n let s = '';\n let c$ = callback ? callback(node) : node.childNodes;\n for (let i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {getInnerHTML} from './innerHTML.js';\n\nlet nodeWalker = document.createTreeWalker(document, NodeFilter.SHOW_ALL,\n null, false);\n\nlet elementWalker = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT,\n null, false);\n\nexport function parentNode(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.parentNode();\n}\n\nexport function firstChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.firstChild();\n}\n\nexport function lastChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.lastChild();\n}\n\nexport function previousSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.previousSibling();\n}\n\nexport function nextSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.nextSibling();\n}\n\nexport function childNodes(node) {\n let nodes = [];\n nodeWalker.currentNode = node;\n let n = nodeWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = nodeWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function parentElement(node) {\n elementWalker.currentNode = node;\n return elementWalker.parentNode();\n}\n\nexport function firstElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.firstChild();\n}\n\nexport function lastElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.lastChild();\n}\n\nexport function previousElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.previousSibling();\n}\n\nexport function nextElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.nextSibling();\n}\n\nexport function children(node) {\n let nodes = [];\n elementWalker.currentNode = node;\n let n = elementWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = elementWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function innerHTML(node) {\n return getInnerHTML(node, (n) => childNodes(n));\n}\n\nexport function textContent(node) {\n /* eslint-disable no-case-declarations */\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n let textWalker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT,\n null, false);\n let content = '', n;\n while ( (n = textWalker.nextNode()) ) {\n // TODO(sorvell): can't use textContent since we patch it on Node.prototype!\n // However, should probably patch it only on element.\n content += n.nodeValue;\n }\n return content;\n default:\n return node.nodeValue;\n }\n /* eslint-enable */\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport * as utils from './utils.js';\n\nconst hasDescriptors = utils.settings.hasDescriptors;\n\n// Find descriptor on the \"lowest\" native prototype. Safe as these are not\n// overridden and we call these on nodes.\nconst nativeProtos = [Node.prototype, Element.prototype, HTMLElement.prototype];\n// note, avoid Array.find for IE11 compat.\nfunction findNativeProtoWithDescriptor(name) {\n for (let i=0; i < nativeProtos.length; i++) {\n const proto = nativeProtos[i];\n if (proto.hasOwnProperty(name)) {\n return proto;\n }\n }\n}\nfunction findNodeDescriptor(name) {\n const proto = findNativeProtoWithDescriptor(name);\n if (!proto) {\n throw Error(`Could not find descriptor for ${name}`);\n }\n return Object.getOwnPropertyDescriptor(proto, name);\n}\n\nexport const nodeAccessors = hasDescriptors ? {\n parentNode: findNodeDescriptor('parentNode'),\n firstChild: findNodeDescriptor('firstChild'),\n lastChild: findNodeDescriptor('lastChild'),\n previousSibling: findNodeDescriptor('previousSibling'),\n nextSibling: findNodeDescriptor('nextSibling'),\n childNodes: findNodeDescriptor('childNodes'),\n parentElement: findNodeDescriptor('parentElement'),\n previousElementSibling: findNodeDescriptor('previousElementSibling'),\n nextElementSibling: findNodeDescriptor('nextElementSibling'),\n innerHTML: findNodeDescriptor('innerHTML'),\n textContent: findNodeDescriptor('textContent'),\n firstElementChild: findNodeDescriptor('firstElementChild'),\n lastElementChild: findNodeDescriptor('lastElementChild'),\n children: findNodeDescriptor('children'),\n} : {};\n\nexport const fragmentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'children')\n} : {};\n\nexport const documentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n Document.prototype, 'children')\n} : {};\n\nexport function parentNode(node) {\n return nodeAccessors.parentNode.get.call(node);\n}\n\nexport function firstChild(node) {\n return nodeAccessors.firstChild.get.call(node);\n}\n\nexport function lastChild(node) {\n return nodeAccessors.lastChild.get.call(node);\n}\n\nexport function previousSibling(node) {\n return nodeAccessors.previousSibling.get.call(node);\n}\n\nexport function nextSibling(node) {\n return nodeAccessors.nextSibling.get.call(node);\n}\n\nexport function childNodes(node) {\n return Array.prototype.slice.call(nodeAccessors.childNodes.get.call(node));\n}\n\nexport function parentElement(node) {\n return nodeAccessors.parentElement.get.call(node);\n}\n\nexport function previousElementSibling(node) {\n return nodeAccessors.previousElementSibling.get.call(node);\n}\n\nexport function nextElementSibling(node) {\n return nodeAccessors.nextElementSibling.get.call(node);\n}\n\nexport function innerHTML(node) {\n return nodeAccessors.innerHTML.get.call(node);\n}\n\nexport function textContent(node) {\n return nodeAccessors.textContent.get.call(node);\n}\n\nexport function children(node) {\n let children;\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n children = fragmentAccessors.children.get.call(node);\n break;\n case Node.DOCUMENT_NODE:\n children = documentAccessors.children.get.call(node);\n break;\n default:\n children = nodeAccessors.children.get.call(node);\n break;\n }\n return Array.prototype.slice.call(children);\n}\n\nexport function firstElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.firstElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.firstElementChild.get.call(node);\n default:\n return nodeAccessors.firstElementChild.get.call(node);\n }\n}\n\nexport function lastElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.lastElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.lastElementChild.get.call(node);\n default:\n return nodeAccessors.lastElementChild.get.call(node);\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as nativeTreeWalker from './native-tree-walker.js';\nimport * as nativeTreeAccessors from './native-tree-accessors.js';\nimport * as utils from './utils.js';\n\nexport const accessors = utils.settings.useNativeAccessors ?\n nativeTreeAccessors : nativeTreeWalker;","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {getInnerHTML} from './innerHTML.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {nodeAccessors as nativeAccessors} from './native-tree-accessors.js';\nimport {contains as nativeContains} from './native-methods.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nfunction clearNode(node) {\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n}\n\nconst hasDescriptors = utils.settings.hasDescriptors;\nconst inertDoc = document.implementation.createHTMLDocument('inert');\n\nconst nativeIsConnectedAccessors =\n/** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Node.prototype, 'isConnected')\n);\n\nconst nativeIsConnected = nativeIsConnectedAccessors && nativeIsConnectedAccessors.get;\n\nconst nativeActiveElementDescriptor =\n /** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Document.prototype, 'activeElement')\n );\nfunction getDocumentActiveElement() {\n if (nativeActiveElementDescriptor && nativeActiveElementDescriptor.get) {\n return nativeActiveElementDescriptor.get.call(document);\n } else if (!utils.settings.hasDescriptors) {\n return document.activeElement;\n }\n}\n\nfunction activeElementForNode(node) {\n let active = getDocumentActiveElement();\n // In IE11, activeElement might be an empty object if the document is\n // contained in an iframe.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10998788/\n if (!active || !active.nodeType) {\n return null;\n }\n let isShadyRoot = !!(utils.isShadyRoot(node));\n if (node !== document) {\n // If this node isn't a document or shady root, then it doesn't have\n // an active element.\n if (!isShadyRoot) {\n return null;\n }\n // If this shady root's host is the active element or the active\n // element is not a descendant of the host (in the composed tree),\n // then it doesn't have an active element.\n if (node.host === active ||\n !nativeContains.call(node.host, active)) {\n return null;\n }\n }\n // This node is either the document or a shady root of which the active\n // element is a (composed) descendant of its host; iterate upwards to\n // find the active element's most shallow host within it.\n let activeRoot = utils.ownerShadyRootForNode(active);\n while (activeRoot && activeRoot !== node) {\n active = activeRoot.host;\n activeRoot = utils.ownerShadyRootForNode(active);\n }\n if (node === document) {\n // This node is the document, so activeRoot should be null.\n return activeRoot ? null : active;\n } else {\n // This node is a non-document shady root, and it should be\n // activeRoot.\n return activeRoot === node ? active : null;\n }\n}\n\nlet OutsideAccessors = {\n\n parentElement: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n let l = nodeData && nodeData.parentNode;\n if (l && l.nodeType !== Node.ELEMENT_NODE) {\n l = null;\n }\n return l !== undefined ? l : nativeTree.parentElement(this);\n },\n configurable: true\n },\n\n parentNode: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.parentNode;\n return l !== undefined ? l : nativeTree.parentNode(this);\n },\n configurable: true\n },\n\n nextSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.nextSibling;\n return l !== undefined ? l : nativeTree.nextSibling(this);\n },\n configurable: true\n },\n\n previousSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.previousSibling;\n return l !== undefined ? l : nativeTree.previousSibling(this);\n },\n configurable: true\n },\n\n // fragment, element, document\n nextElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.nextSibling !== undefined) {\n let n = this.nextSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.nextElementSibling(this);\n }\n },\n configurable: true\n },\n\n previousElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.previousSibling !== undefined) {\n let n = this.previousSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.previousElementSibling(this);\n }\n },\n configurable: true\n }\n\n};\n\nexport const ClassNameAccessor = {\n className: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return this.getAttribute('class') || '';\n },\n /**\n * @this {HTMLElement}\n */\n set(value) {\n this.setAttribute('class', value);\n },\n configurable: true\n }\n}\n\nexport const IsConnectedAccessor = {\n\n isConnected: {\n /**\n * @this {Node}\n */\n get() {\n if (nativeIsConnected && nativeIsConnected.call(this)) {\n return true;\n }\n if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {\n return false;\n }\n // Fast path for distributed nodes.\n const ownerDocument = this.ownerDocument;\n if (utils.hasDocumentContains) {\n if (nativeContains.call(ownerDocument, this)) {\n return true;\n }\n } else if (ownerDocument.documentElement &&\n nativeContains.call(ownerDocument.documentElement, this)) {\n return true;\n }\n // Slow path for non-distributed nodes.\n let node = this;\n while (node && !(node instanceof Document)) {\n node = node.parentNode || (utils.isShadyRoot(node) ? /** @type {ShadowRoot} */(node).host : undefined);\n }\n return !!(node && node instanceof Document);\n },\n configurable: true\n }\n};\n\nlet InsideAccessors = {\n\n childNodes: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let childNodes;\n if (utils.isTrackingLogicalChildNodes(this)) {\n const nodeData = shadyDataForNode(this);\n if (!nodeData.childNodes) {\n nodeData.childNodes = [];\n for (let n=this.firstChild; n; n=n.nextSibling) {\n nodeData.childNodes.push(n);\n }\n }\n childNodes = nodeData.childNodes;\n } else {\n childNodes = nativeTree.childNodes(this);\n }\n childNodes.item = function(index) {\n return childNodes[index];\n }\n return childNodes;\n },\n configurable: true\n },\n\n childElementCount: {\n /** @this {HTMLElement} */\n get() {\n return this.children.length;\n },\n configurable: true\n },\n\n firstChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.firstChild;\n return l !== undefined ? l : nativeTree.firstChild(this);\n },\n configurable: true\n },\n\n lastChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.lastChild;\n return l !== undefined ? l : nativeTree.lastChild(this);\n },\n configurable: true\n },\n\n textContent: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n let tc = [];\n for (let i = 0, cn = this.childNodes, c; (c = cn[i]); i++) {\n if (c.nodeType !== Node.COMMENT_NODE) {\n tc.push(c.textContent);\n }\n }\n return tc.join('');\n } else {\n return nativeTree.textContent(this);\n }\n },\n /**\n * @this {HTMLElement}\n * @param {string} text\n */\n set(text) {\n if (typeof text === 'undefined' || text === null) {\n text = ''\n }\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n if (!utils.isTrackingLogicalChildNodes(this) && hasDescriptors) {\n // may be removing a nested slot but fast path if we know we are not.\n const firstChild = this.firstChild;\n if (firstChild != this.lastChild ||\n (firstChild && firstChild.nodeType != Node.TEXT_NODE)) {\n clearNode(this);\n }\n nativeAccessors.textContent.set.call(this, text);\n } else {\n clearNode(this);\n // Document fragments must have no childnodes if setting a blank string\n if (text.length > 0 || this.nodeType === Node.ELEMENT_NODE) {\n this.appendChild(document.createTextNode(text));\n }\n }\n break;\n default:\n // TODO(sorvell): can't do this if patch nodeValue.\n this.nodeValue = text;\n break;\n }\n },\n configurable: true\n },\n\n // fragment, element, document\n firstElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.firstChild !== undefined) {\n let n = this.firstChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.firstElementChild(this);\n }\n },\n configurable: true\n },\n\n lastElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.lastChild !== undefined) {\n let n = this.lastChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.lastElementChild(this);\n }\n },\n configurable: true\n },\n\n children: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let children;\n if (utils.isTrackingLogicalChildNodes(this)) {\n children = Array.prototype.filter.call(this.childNodes, function(n) {\n return (n.nodeType === Node.ELEMENT_NODE);\n });\n } else {\n children = nativeTree.children(this);\n }\n children.item = function(index) {\n return children[index];\n }\n return children;\n },\n configurable: true\n },\n\n // element (HTMLElement on IE11)\n innerHTML: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n return getInnerHTML(content);\n } else {\n return nativeTree.innerHTML(this);\n }\n },\n /**\n * @this {HTMLElement}\n */\n set(text) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n clearNode(content);\n let containerName = this.localName;\n // avoid creating a template so we don't have to pull nodes form `.content`\n if (!containerName || containerName === 'template') {\n containerName = 'div';\n }\n const htmlContainer = inertDoc.createElement(containerName);\n if (hasDescriptors) {\n nativeAccessors.innerHTML.set.call(htmlContainer, text);\n } else {\n htmlContainer.innerHTML = text;\n }\n while (htmlContainer.firstChild) {\n content.appendChild(htmlContainer.firstChild);\n }\n },\n configurable: true\n }\n\n};\n\n// Note: Can be patched on element prototype on all browsers.\n// Must be patched on instance on browsers that support native Shadow DOM\n// but do not have builtin accessors (old Chrome).\nexport let ShadowRootAccessor = {\n\n shadowRoot: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n return nodeData && nodeData.publicRoot || null;\n },\n configurable: true\n }\n};\n\n// Note: Can be patched on document prototype on browsers with builtin accessors.\n// Must be patched separately on simulated ShadowRoot.\n// Must be patched as `_activeElement` on browsers without builtin accessors.\nexport let ActiveElementAccessor = {\n\n activeElement: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return activeElementForNode(this);\n },\n /**\n * @this {HTMLElement}\n */\n set() {},\n configurable: true\n }\n\n};\n\n// patch a group of descriptors on an object only if it exists or if the `force`\n// argument is true.\n/**\n * @param {!Object} obj\n * @param {!Object} descriptors\n * @param {boolean=} force\n */\nfunction patchAccessorGroup(obj, descriptors, force) {\n for (let p in descriptors) {\n let objDesc = Object.getOwnPropertyDescriptor(obj, p);\n if ((objDesc && objDesc.configurable) ||\n (!objDesc && force)) {\n Object.defineProperty(obj, p, descriptors[p]);\n } else if (force) {\n console.warn('Could not define', p, 'on', obj); // eslint-disable-line no-console\n }\n }\n}\n\n// patch dom accessors on proto where they exist\nexport function patchAccessors(proto) {\n patchAccessorGroup(proto, OutsideAccessors);\n patchAccessorGroup(proto, ClassNameAccessor);\n patchAccessorGroup(proto, InsideAccessors);\n patchAccessorGroup(proto, ActiveElementAccessor);\n}\n\nexport function patchShadowRootAccessors(proto) {\n proto.__proto__ = DocumentFragment.prototype;\n // ensure element descriptors (IE/Edge don't have em)\n patchAccessorGroup(proto, OutsideAccessors, true);\n patchAccessorGroup(proto, InsideAccessors, true);\n patchAccessorGroup(proto, ActiveElementAccessor, true);\n // Ensure native properties are all safely wrapped since ShadowRoot is not an\n // actual DocumentFragment instance.\n Object.defineProperties(proto, {\n nodeType: {\n value: Node.DOCUMENT_FRAGMENT_NODE,\n configurable: true\n },\n nodeName: {\n value: '#document-fragment',\n configurable: true\n },\n nodeValue: {\n value: null,\n configurable: true\n }\n });\n // make undefined\n [\n 'localName',\n 'namespaceURI',\n 'prefix'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n value: undefined,\n configurable: true\n });\n });\n // defer properties to host\n [\n 'ownerDocument',\n 'baseURI',\n 'isConnected'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n get() {\n return this.host[prop];\n },\n configurable: true\n });\n });\n}\n\n// ensure an element has patched \"outside\" accessors; no-op when not needed\nexport let patchOutsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__outsideAccessors) {\n sd.__outsideAccessors = true;\n patchAccessorGroup(element, OutsideAccessors, true);\n patchAccessorGroup(element, ClassNameAccessor, true);\n }\n }\n\n// ensure an element has patched \"inside\" accessors; no-op when not needed\nexport let patchInsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__insideAccessors) {\n patchAccessorGroup(element, InsideAccessors, true);\n patchAccessorGroup(element, ShadowRootAccessor, true);\n }\n }\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {calculateSplices} from './array-splice.js';\nimport * as utils from './utils.js';\nimport {enqueue} from './flush.js';\nimport {recordChildNodes} from './logical-tree.js';\nimport {removeChild, insertBefore, dispatchEvent} from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode, childNodes} = accessors;\n\n// Do not export this object. It must be passed as the first argument to the\n// ShadyRoot constructor in `attachShadow` to prevent the constructor from\n// throwing. This prevents the user from being able to manually construct a\n// ShadyRoot (i.e. `new ShadowRoot()`).\nconst ShadyRootConstructionToken = {};\n\nconst CATCHALL_NAME = '__catchall';\nconst SHADYROOT_NAME = 'ShadyRoot';\n\nconst MODE_CLOSED = 'closed';\n\nfunction ancestorList(node) {\n let ancestors = [];\n do {\n ancestors.unshift(node);\n } while ((node = node.parentNode));\n return ancestors;\n}\n\n/**\n * @constructor\n * @extends {ShadowRoot}\n */\nexport class ShadyRoot {\n\n constructor(token, host, options) {\n if (token !== ShadyRootConstructionToken) {\n throw new TypeError('Illegal constructor');\n }\n // NOTE: set a fake local name so this element can be\n // distinguished from a DocumentFragment when patching.\n // FF doesn't allow this to be `localName`\n this._localName = SHADYROOT_NAME;\n const c$ = childNodes(host);\n // root <=> host\n this.host = host;\n this._mode = options && options.mode;\n // logical dom setup\n recordChildNodes(host, c$);\n const hostData = shadyDataForNode(host);\n hostData.root = this;\n hostData.publicRoot = this._mode !== MODE_CLOSED ? this : null;\n // setup root\n const rootData = ensureShadyDataForNode(this);\n rootData.firstChild = rootData.lastChild =\n rootData.parentNode = rootData.nextSibling =\n rootData.previousSibling = null;\n rootData.childNodes = [];\n // state flags\n this._renderPending = false;\n this._hasRendered = false;\n // marsalled lazily\n this._slotList = null;\n this._slotMap = null;\n this._pendingSlots = null;\n // fast path initial render: remove existing physical dom.\n for (let i=0, l=c$.length; i < l; i++) {\n removeChild.call(host, c$[i])\n }\n }\n\n // async render\n _asyncRender() {\n if (!this._renderPending) {\n this._renderPending = true;\n enqueue(() => this._render());\n }\n }\n\n // returns the oldest renderPending ancestor root.\n _getRenderRoot() {\n let renderRoot;\n let root = this;\n while (root) {\n if (root._renderPending) {\n renderRoot = root;\n }\n root = root._rendererForHost();\n }\n return renderRoot;\n }\n\n // Returns the shadyRoot `this.host` if `this.host`\n // has children that require distribution.\n _rendererForHost() {\n let root = this.host.getRootNode();\n if (utils.isShadyRoot(root)) {\n let c$ = this.host.childNodes;\n for (let i=0, c; i < c$.length; i++) {\n c = c$[i];\n if (this._isInsertionPoint(c)) {\n return root;\n }\n }\n }\n }\n\n _render() {\n const root = this._getRenderRoot();\n if (root) {\n root['_renderRoot']();\n }\n }\n\n // NOTE: avoid renaming to ease testability.\n ['_renderRoot']() {\n this._renderPending = false;\n if (this._slotList) {\n this._distribute();\n this._compose();\n }\n this._hasRendered = true;\n }\n\n _distribute() {\n this._validateSlots();\n // capture # of previously assigned nodes to help determine if dirty.\n for (let i=0, slot; i < this._slotList.length; i++) {\n slot = this._slotList[i];\n this._clearSlotAssignedNodes(slot);\n }\n // distribute host children.\n for (let n=this.host.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n);\n }\n // fallback content, slotchange, and dirty roots\n for (let i=0; i < this._slotList.length; i++) {\n const slot = this._slotList[i];\n const slotData = shadyDataForNode(slot);\n // distribute fallback content\n if (!slotData.assignedNodes.length) {\n for (let n=slot.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n, slot);\n }\n }\n const slotParentData = shadyDataForNode(slot.parentNode);\n const slotParentRoot = slotParentData && slotParentData.root;\n if (slotParentRoot && slotParentRoot._hasInsertionPoint()) {\n slotParentRoot['_renderRoot']();\n }\n this._addAssignedToFlattenedNodes(slotData.flattenedNodes,\n slotData.assignedNodes);\n let prevAssignedNodes = slotData._previouslyAssignedNodes;\n if (prevAssignedNodes) {\n for (let i=0; i < prevAssignedNodes.length; i++) {\n shadyDataForNode(prevAssignedNodes[i])._prevAssignedSlot = null;\n }\n slotData._previouslyAssignedNodes = null;\n // dirty if previously less assigned nodes than previously assigned.\n if (prevAssignedNodes.length > slotData.assignedNodes.length) {\n slotData.dirty = true;\n }\n }\n /* Note: A slot is marked dirty whenever a node is newly assigned to it\n or a node is assigned to a different slot (done in `_distributeNodeToSlot`)\n or if the number of nodes assigned to the slot has decreased (done above);\n */\n if (slotData.dirty) {\n slotData.dirty = false;\n this._fireSlotChange(slot);\n }\n }\n }\n\n /**\n * Distributes given `node` to the appropriate slot based on its `slot`\n * attribute. If `forcedSlot` is given, then the node is distributed to the\n * `forcedSlot`.\n * Note: slot to which the node is assigned will be marked dirty for firing\n * `slotchange`.\n * @param {Node} node\n * @param {Node=} forcedSlot\n *\n */\n _distributeNodeToSlot(node, forcedSlot) {\n const nodeData = ensureShadyDataForNode(node);\n let oldSlot = nodeData._prevAssignedSlot;\n nodeData._prevAssignedSlot = null;\n let slot = forcedSlot;\n if (!slot) {\n let name = node.slot || CATCHALL_NAME;\n const list = this._slotMap[name];\n slot = list && list[0];\n }\n if (slot) {\n const slotData = ensureShadyDataForNode(slot);\n slotData.assignedNodes.push(node);\n nodeData.assignedSlot = slot;\n } else {\n nodeData.assignedSlot = undefined;\n }\n if (oldSlot !== nodeData.assignedSlot) {\n if (nodeData.assignedSlot) {\n ensureShadyDataForNode(nodeData.assignedSlot).dirty = true;\n }\n }\n }\n\n /**\n * Clears the assignedNodes tracking data for a given `slot`. Note, the current\n * assigned node data is tracked (via _previouslyAssignedNodes and\n * _prevAssignedSlot) to see if `slotchange` should fire. This data may be out\n * of date at this time because the assigned nodes may have already been\n * distributed to another root. This is ok since this data is only used to\n * track changes.\n * @param {HTMLSlotElement} slot\n */\n _clearSlotAssignedNodes(slot) {\n const slotData = shadyDataForNode(slot);\n let n$ = slotData.assignedNodes;\n slotData.assignedNodes = [];\n slotData.flattenedNodes = [];\n slotData._previouslyAssignedNodes = n$;\n if (n$) {\n for (let i=0; i < n$.length; i++) {\n let n = shadyDataForNode(n$[i]);\n n._prevAssignedSlot = n.assignedSlot;\n // only clear if it was previously set to this slot;\n // this helps ensure that if the node has otherwise been distributed\n // ignore it.\n if (n.assignedSlot === slot) {\n n.assignedSlot = null;\n }\n }\n }\n }\n\n _addAssignedToFlattenedNodes(flattened, assigned) {\n for (let i=0, n; (i<assigned.length) && (n=assigned[i]); i++) {\n if (n.localName == 'slot') {\n const nestedAssigned = shadyDataForNode(n).assignedNodes;\n if (nestedAssigned && nestedAssigned.length) {\n this._addAssignedToFlattenedNodes(flattened, nestedAssigned);\n }\n } else {\n flattened.push(assigned[i]);\n }\n }\n }\n\n _fireSlotChange(slot) {\n // NOTE: cannot bubble correctly here so not setting bubbles: true\n // Safari tech preview does not bubble but chrome does\n // Spec says it bubbles (https://dom.spec.whatwg.org/#mutation-observers)\n dispatchEvent.call(slot, new Event('slotchange'));\n const slotData = shadyDataForNode(slot);\n if (slotData.assignedSlot) {\n this._fireSlotChange(slotData.assignedSlot);\n }\n }\n\n // Reify dom such that it is at its correct rendering position\n // based on logical distribution.\n // NOTE: here we only compose parents of <slot> elements and not the\n // shadowRoot into the host. The latter is performend via a fast path\n // in the `logical-mutation`.insertBefore.\n _compose() {\n const slots = this._slotList;\n let composeList = [];\n for (let i=0; i < slots.length; i++) {\n const parent = slots[i].parentNode;\n /* compose node only if:\n (1) parent does not have a shadowRoot since shadowRoot has already\n composed into the host\n (2) we're not already composing it\n [consider (n^2) but rare better than Set]\n */\n const parentData = shadyDataForNode(parent);\n if (!(parentData && parentData.root) &&\n composeList.indexOf(parent) < 0) {\n composeList.push(parent);\n }\n }\n for (let i=0; i < composeList.length; i++) {\n const node = composeList[i];\n const targetNode = node === this ? this.host : node;\n this._updateChildNodes(targetNode, this._composeNode(node));\n }\n }\n\n // Returns the list of nodes which should be rendered inside `node`.\n _composeNode(node) {\n let children = [];\n let c$ = node.childNodes;\n for (let i = 0; i < c$.length; i++) {\n let child = c$[i];\n // Note: if we see a slot here, the nodes are guaranteed to need to be\n // composed here. This is because if there is redistribution, it has\n // already been handled by this point.\n if (this._isInsertionPoint(child)) {\n let flattenedNodes = shadyDataForNode(child).flattenedNodes;\n for (let j = 0; j < flattenedNodes.length; j++) {\n let distributedNode = flattenedNodes[j];\n children.push(distributedNode);\n }\n } else {\n children.push(child);\n }\n }\n return children;\n }\n\n _isInsertionPoint(node) {\n return node.localName == 'slot';\n }\n\n // Ensures that the rendered node list inside `container` is `children`.\n _updateChildNodes(container, children) {\n let composed = childNodes(container);\n let splices = calculateSplices(children, composed);\n // process removals\n for (let i=0, d=0, s; (i<splices.length) && (s=splices[i]); i++) {\n for (let j=0, n; (j < s.removed.length) && (n=s.removed[j]); j++) {\n // check if the node is still where we expect it is before trying\n // to remove it; this can happen if we move a node and\n // then schedule its previous host for distribution resulting in\n // the node being removed here.\n if (parentNode(n) === container) {\n removeChild.call(container, n);\n }\n // TODO(sorvell): avoid the need for splicing here.\n composed.splice(s.index + d, 1);\n }\n d -= s.addedCount;\n }\n // process adds\n for (let i=0, s, next; (i<splices.length) && (s=splices[i]); i++) { //eslint-disable-line no-redeclare\n next = composed[s.index];\n for (let j=s.index, n; j < s.index + s.addedCount; j++) {\n n = children[j];\n insertBefore.call(container, n, next);\n composed.splice(j, 0, n);\n }\n }\n }\n\n _ensureSlotData() {\n this._pendingSlots = this._pendingSlots || [];\n this._slotList = this._slotList || [];\n this._slotMap = this._slotMap || {};\n }\n\n _addSlots(slots) {\n this._ensureSlotData();\n this._pendingSlots.push(...slots);\n }\n\n _validateSlots() {\n if (this._pendingSlots && this._pendingSlots.length) {\n this._mapSlots(this._pendingSlots);\n this._pendingSlots = [];\n }\n }\n\n /**\n * Adds the given slots. Slots are maintained in an dom-ordered list.\n * In addition a map of name to slot is updated.\n */\n _mapSlots(slots) {\n let slotNamesToSort;\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n // ensure insertionPoints's and their parents have logical dom info.\n // save logical tree info\n // a. for shadyRoot\n // b. for insertion points (fallback)\n // c. for parents of insertion points\n recordChildNodes(slot);\n recordChildNodes(slot.parentNode);\n let name = this._nameForSlot(slot);\n if (this._slotMap[name]) {\n slotNamesToSort = slotNamesToSort || {};\n slotNamesToSort[name] = true;\n this._slotMap[name].push(slot);\n } else {\n this._slotMap[name] = [slot];\n }\n this._slotList.push(slot);\n }\n if (slotNamesToSort) {\n for (let n in slotNamesToSort) {\n this._slotMap[n] = this._sortSlots(this._slotMap[n]);\n }\n }\n }\n\n _nameForSlot(slot) {\n const name = slot['name'] || slot.getAttribute('name') || CATCHALL_NAME;\n slot.__slotName = name;\n return name;\n }\n\n /**\n * Slots are kept in an ordered list. Slots with the same name\n * are sorted here by tree order.\n */\n _sortSlots(slots) {\n // NOTE: Cannot use `compareDocumentPosition` because it's not polyfilled,\n // but the code here could be used to polyfill the preceeding/following info\n // in `compareDocumentPosition`.\n return slots.sort((a, b) => {\n let listA = ancestorList(a);\n let listB = ancestorList(b);\n for (var i=0; i < listA.length; i++) {\n let nA = listA[i];\n let nB = listB[i];\n if (nA !== nB) {\n let c$ = Array.from(nA.parentNode.childNodes);\n return c$.indexOf(nA) - c$.indexOf(nB);\n }\n }\n });\n }\n\n /**\n * Removes from tracked slot data any slots contained within `container` and\n * then updates the tracked data (_slotList and _slotMap).\n * Any removed slots also have their `assignedNodes` removed from comopsed dom.\n */\n _removeContainedSlots(container) {\n if (!this._slotList) {\n return;\n }\n this._validateSlots();\n let didRemove;\n const map = this._slotMap;\n for (let n in map) {\n let slots = map[n];\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n if (utils.contains(container, slot)) {\n slots.splice(i, 1);\n const x = this._slotList.indexOf(slot);\n if (x >= 0) {\n this._slotList.splice(x, 1);\n }\n i--;\n this._removeFlattenedNodes(slot);\n didRemove = true;\n }\n }\n }\n return didRemove;\n }\n\n _updateSlotName(slot) {\n if (!this._slotList) {\n return;\n }\n const oldName = slot.__slotName;\n const name = this._nameForSlot(slot);\n if (name === oldName) {\n return;\n }\n // remove from existing tracking\n let slots = this._slotMap[oldName];\n const i = slots.indexOf(slot);\n if (i >= 0) {\n slots.splice(i, 1);\n }\n // add to new location and sort if nedessary\n let list = this._slotMap[name] || (this._slotMap[name] = []);\n list.push(slot);\n if (list.length > 1) {\n this._slotMap[name] = this._sortSlots(list);\n }\n }\n\n _removeFlattenedNodes(slot) {\n const data = shadyDataForNode(slot);\n let n$ = data.flattenedNodes;\n if (n$) {\n for (let i=0; i<n$.length; i++) {\n let node = n$[i];\n let parent = parentNode(node);\n if (parent) {\n removeChild.call(parent, node);\n }\n }\n }\n data.flattenedNodes = [];\n data.assignedNodes = [];\n }\n\n _hasInsertionPoint() {\n this._validateSlots();\n return Boolean(this._slotList && this._slotList.length);\n }\n}\n\n/**\n Implements a pared down version of ShadowDOM's scoping, which is easy to\n polyfill across browsers.\n*/\nexport function attachShadow(host, options) {\n if (!host) {\n throw 'Must provide a host.';\n }\n if (!options) {\n throw 'Not enough arguments.'\n }\n return new ShadyRoot(ShadyRootConstructionToken, host, options);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {flush} from './flush.js';\nimport {dispatchEvent, querySelectorAll} from './native-methods.js';\nimport * as mutation from './logical-mutation.js';\nimport {ActiveElementAccessor, ShadowRootAccessor, patchAccessors, patchShadowRootAccessors, IsConnectedAccessor} from './patch-accessors.js';\nimport {addEventListener, removeEventListener} from './patch-events.js';\nimport {attachShadow, ShadyRoot} from './attach-shadow.js';\nimport {shadyDataForNode} from './shady-data.js';\n\nfunction getAssignedSlot(node) {\n mutation.renderRootNode(node);\n const nodeData = shadyDataForNode(node);\n return nodeData && nodeData.assignedSlot || null;\n}\n\nlet windowMixin = {\n\n // NOTE: ensure these methods are bound to `window` so that `this` is correct\n // when called directly from global context without a receiver; e.g.\n // `addEventListener(...)`.\n addEventListener: addEventListener.bind(window),\n\n removeEventListener: removeEventListener.bind(window)\n\n};\n\nlet nodeMixin = {\n\n addEventListener: addEventListener,\n\n removeEventListener: removeEventListener,\n\n appendChild(node) {\n return mutation.insertBefore(this, node);\n },\n\n insertBefore(node, ref_node) {\n return mutation.insertBefore(this, node, ref_node);\n },\n\n removeChild(node) {\n return mutation.removeChild(this, node);\n },\n\n /**\n * @this {Node}\n */\n replaceChild(node, ref_node) {\n mutation.insertBefore(this, node, ref_node);\n mutation.removeChild(this, ref_node);\n return node;\n },\n\n /**\n * @this {Node}\n */\n cloneNode(deep) {\n return mutation.cloneNode(this, deep);\n },\n\n /**\n * @this {Node}\n */\n getRootNode(options) {\n return mutation.getRootNode(this, options);\n },\n\n contains(node) {\n return utils.contains(this, node);\n },\n\n /**\n * @this {Node}\n */\n dispatchEvent(event) {\n flush();\n return dispatchEvent.call(this, event);\n }\n\n};\n\n// NOTE: we can do this regardless of the browser supporting native accessors\n// since this is always \"new\" in that case.\nObject.defineProperties(nodeMixin, IsConnectedAccessor);\n\n// NOTE: For some reason 'Text' redefines 'assignedSlot'\nlet textMixin = {\n /**\n * @this {Text}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n};\n\nlet fragmentMixin = {\n\n // TODO(sorvell): consider doing native QSA and filtering results.\n /**\n * @this {DocumentFragment}\n */\n querySelector(selector) {\n // match selector and halt on first result.\n let result = mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n },\n\n /**\n * @this {DocumentFragment}\n */\n // TODO(sorvell): `useNative` option relies on native querySelectorAll and\n // misses distributed nodes, see\n // https://github.com/webcomponents/shadydom/pull/210#issuecomment-361435503\n querySelectorAll(selector, useNative) {\n if (useNative) {\n const o = Array.prototype.slice.call(querySelectorAll(this, selector));\n const root = this.getRootNode();\n return o.filter(e => e.getRootNode() == root);\n }\n return mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n });\n }\n\n};\n\nlet slotMixin = {\n\n /**\n * @this {HTMLSlotElement}\n */\n assignedNodes(options) {\n if (this.localName === 'slot') {\n mutation.renderRootNode(this);\n const nodeData = shadyDataForNode(this);\n return nodeData ?\n ((options && options.flatten ? nodeData.flattenedNodes :\n nodeData.assignedNodes) || []) :\n [];\n }\n }\n\n};\n\nlet elementMixin = utils.extendAll({\n\n /**\n * @this {HTMLElement}\n */\n setAttribute(name, value) {\n mutation.setAttribute(this, name, value);\n },\n\n /**\n * @this {HTMLElement}\n */\n removeAttribute(name) {\n mutation.removeAttribute(this, name);\n },\n\n /**\n * @this {HTMLElement}\n */\n attachShadow(options) {\n return attachShadow(this, options);\n },\n\n /**\n * @this {HTMLElement}\n */\n get slot() {\n return this.getAttribute('slot');\n },\n\n /**\n * @this {HTMLElement}\n */\n set slot(value) {\n mutation.setAttribute(this, 'slot', value);\n },\n\n /**\n * @this {HTMLElement}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n\n}, fragmentMixin, slotMixin);\n\nObject.defineProperties(elementMixin, ShadowRootAccessor);\n\nlet documentMixin = utils.extendAll({\n /**\n * @this {Document}\n */\n importNode(node, deep) {\n return mutation.importNode(node, deep);\n },\n\n /**\n * @this {Document}\n */\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n\n}, fragmentMixin);\n\nObject.defineProperties(documentMixin, {\n '_activeElement': ActiveElementAccessor.activeElement\n});\n\nlet nativeBlur = HTMLElement.prototype.blur;\n\nlet htmlElementMixin = utils.extendAll({\n /**\n * @this {HTMLElement}\n */\n blur() {\n const nodeData = shadyDataForNode(this);\n let root = nodeData && nodeData.root;\n let shadowActive = root && root.activeElement;\n if (shadowActive) {\n shadowActive.blur();\n } else {\n nativeBlur.call(this);\n }\n }\n});\n\nconst shadowRootMixin = {\n addEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.addEventListener(type, fn, optionsOrCapture);\n },\n\n removeEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.removeEventListener(type, fn, optionsOrCapture);\n },\n\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n}\n\nfunction patchBuiltin(proto, obj) {\n let n$ = Object.getOwnPropertyNames(obj);\n for (let i=0; i < n$.length; i++) {\n let n = n$[i];\n let d = Object.getOwnPropertyDescriptor(obj, n);\n // NOTE: we prefer writing directly here because some browsers\n // have descriptors that are writable but not configurable (e.g.\n // `appendChild` on older browsers)\n if (d.value) {\n proto[n] = d.value;\n } else {\n Object.defineProperty(proto, n, d);\n }\n }\n}\n\n// Apply patches to builtins (e.g. Element.prototype). Some of these patches\n// can be done unconditionally (mostly methods like\n// `Element.prototype.appendChild`) and some can only be done when the browser\n// has proper descriptors on the builtin prototype\n// (e.g. `Element.prototype.firstChild`)`. When descriptors are not available,\n// elements are individually patched when needed (see e.g.\n// `patchInside/OutsideElementAccessors` in `patch-accessors.js`).\nexport function patchBuiltins() {\n let nativeHTMLElement =\n (window['customElements'] && window['customElements']['nativeHTMLElement']) ||\n HTMLElement;\n // These patches can always be done, for all supported browsers.\n patchBuiltin(ShadyRoot.prototype, shadowRootMixin);\n patchBuiltin(window.Node.prototype, nodeMixin);\n patchBuiltin(window.Window.prototype, windowMixin);\n patchBuiltin(window.Text.prototype, textMixin);\n patchBuiltin(window.DocumentFragment.prototype, fragmentMixin);\n patchBuiltin(window.Element.prototype, elementMixin);\n patchBuiltin(window.Document.prototype, documentMixin);\n if (window.HTMLSlotElement) {\n patchBuiltin(window.HTMLSlotElement.prototype, slotMixin);\n }\n patchBuiltin(nativeHTMLElement.prototype, htmlElementMixin);\n // These patches can *only* be done\n // on browsers that have proper property descriptors on builtin prototypes.\n // This includes: IE11, Edge, Chrome >= 4?; Safari >= 10, Firefox\n // On older browsers (Chrome <= 4?, Safari 9), a per element patching\n // strategy is used for patching accessors.\n if (utils.settings.hasDescriptors) {\n patchAccessors(window.Node.prototype);\n patchAccessors(window.Text.prototype);\n patchAccessors(window.DocumentFragment.prototype);\n patchAccessors(window.Element.prototype);\n patchAccessors(nativeHTMLElement.prototype);\n patchAccessors(window.Document.prototype);\n if (window.HTMLSlotElement) {\n patchAccessors(window.HTMLSlotElement.prototype);\n }\n }\n patchShadowRootAccessors(ShadyRoot.prototype);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {childNodes} = accessors;\n\nexport function recordInsertBefore(node, container, ref_node) {\n patchInsideElementAccessors(container);\n const containerData = ensureShadyDataForNode(container);\n if (containerData.firstChild !== undefined) {\n containerData.childNodes = null;\n }\n // handle document fragments\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let c$ = node.childNodes;\n for (let i=0; i < c$.length; i++) {\n linkNode(c$[i], container, ref_node);\n }\n // cleanup logical dom in doc fragment.\n const nodeData = ensureShadyDataForNode(node);\n let resetTo = (nodeData.firstChild !== undefined) ? null : undefined;\n nodeData.firstChild = nodeData.lastChild = resetTo;\n nodeData.childNodes = resetTo;\n } else {\n linkNode(node, container, ref_node);\n }\n}\n\nfunction linkNode(node, container, ref_node) {\n patchOutsideElementAccessors(node);\n ref_node = ref_node || null;\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n const ref_nodeData = ref_node ? ensureShadyDataForNode(ref_node) : null;\n // update ref_node.previousSibling <-> node\n nodeData.previousSibling = ref_node ? ref_nodeData.previousSibling :\n container.lastChild;\n let psd = shadyDataForNode(nodeData.previousSibling);\n if (psd) {\n psd.nextSibling = node;\n }\n // update node <-> ref_node\n let nsd = shadyDataForNode(nodeData.nextSibling = ref_node);\n if (nsd) {\n nsd.previousSibling = node;\n }\n // update node <-> container\n nodeData.parentNode = container;\n if (ref_node) {\n if (ref_node === containerData.firstChild) {\n containerData.firstChild = node;\n }\n } else {\n containerData.lastChild = node;\n if (!containerData.firstChild) {\n containerData.firstChild = node;\n }\n }\n // remove caching of childNodes\n containerData.childNodes = null;\n}\n\nexport function recordRemoveChild(node, container) {\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n if (node === containerData.firstChild) {\n containerData.firstChild = nodeData.nextSibling;\n }\n if (node === containerData.lastChild) {\n containerData.lastChild = nodeData.previousSibling;\n }\n let p = nodeData.previousSibling;\n let n = nodeData.nextSibling;\n if (p) {\n ensureShadyDataForNode(p).nextSibling = n;\n }\n if (n) {\n ensureShadyDataForNode(n).previousSibling = p;\n }\n // When an element is removed, logical data is no longer tracked.\n // Explicitly set `undefined` here to indicate this. This is disginguished\n // from `null` which is set if info is null.\n nodeData.parentNode = nodeData.previousSibling =\n nodeData.nextSibling = undefined;\n if (containerData.childNodes !== undefined) {\n // remove caching of childNodes\n containerData.childNodes = null;\n }\n}\n\nexport let recordChildNodes = function(node, nodes) {\n const nodeData = ensureShadyDataForNode(node);\n if (nodeData.firstChild === undefined) {\n const c$ = nodes || childNodes(node);\n nodeData.firstChild = c$[0] || null;\n nodeData.lastChild = c$[c$.length-1] || null;\n patchInsideElementAccessors(node);\n for (let i=0; i<c$.length; i++) {\n const n = c$[i];\n const sd = ensureShadyDataForNode(n);\n sd.parentNode = node;\n sd.nextSibling = c$[i+1] || null;\n sd.previousSibling = c$[i-1] || null;\n patchOutsideElementAccessors(n);\n }\n }\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as logicalTree from './logical-tree.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode} = accessors;\n\n// Patched `insertBefore`. Note that all mutations that add nodes are routed\n// here. When a <slot> is added or a node is added to a host with a shadowRoot\n// with a slot, a standard dom `insert` call is aborted and `_asyncRender`\n// is called on the relevant shadowRoot. In all other cases, a standard dom\n// `insert` can be made, but the location and ref_node may need to be changed.\n/**\n * @param {Node} parent\n * @param {Node} node\n * @param {Node=} ref_node\n */\nexport function insertBefore(parent, node, ref_node) {\n if (node === parent) {\n throw Error(`Failed to execute 'appendChild' on 'Node': The new child element contains the parent.`);\n }\n if (ref_node) {\n const refData = shadyDataForNode(ref_node);\n const p = refData && refData.parentNode;\n if ((p !== undefined && p !== parent) ||\n (p === undefined && parentNode(ref_node) !== parent)) {\n throw Error(`Failed to execute 'insertBefore' on 'Node': The node ` +\n `before which the new node is to be inserted is not a child of this node.`);\n }\n }\n if (ref_node === node) {\n return node;\n }\n // remove from existing location\n if (node.parentNode) {\n // NOTE: avoid node.removeChild as this *can* trigger another patched\n // method (e.g. custom elements) and we want only the shady method to run.\n removeChild(node.parentNode, node);\n }\n // add to new parent\n let preventNativeInsert;\n let ownerRoot;\n let slotsAdded;\n if (!node['__noInsertionPoint']) {\n ownerRoot = utils.ownerShadyRootForNode(parent);\n slotsAdded = ownerRoot && findContainedSlots(node);\n if (slotsAdded) {\n ownerRoot._addSlots(slotsAdded);\n }\n }\n // if a slot is added, must render containing root.\n if (parent.localName === 'slot' || slotsAdded) {\n ownerRoot = ownerRoot || utils.ownerShadyRootForNode(parent);\n if (ownerRoot) {\n ownerRoot._asyncRender();\n }\n }\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordInsertBefore(node, parent, ref_node);\n // when inserting into a host with a shadowRoot with slot, use\n // `shadowRoot._asyncRender()` via `attach-shadow` module\n const parentData = shadyDataForNode(parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeInsert = true;\n // when inserting into a host with shadowRoot with NO slot, do nothing\n // as the node should not be added to composed dome anywhere.\n } else if (parentData.root) {\n preventNativeInsert = true;\n }\n }\n if (!preventNativeInsert) {\n // if adding to a shadyRoot, add to host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host : parent;\n // if ref_node, get the ref_node that's actually in composed dom.\n if (ref_node) {\n ref_node = firstComposedNode(ref_node);\n nativeMethods.insertBefore.call(container, node, ref_node);\n } else {\n nativeMethods.appendChild.call(container, node);\n }\n }\n scheduleObserver(parent, node);\n return node;\n}\n\nfunction findContainedSlots(node) {\n let slots;\n if (node.localName === 'slot') {\n slots = [node];\n } else if (node.querySelectorAll) {\n slots = node.querySelectorAll('slot');\n }\n if (slots && slots.length) {\n return slots;\n }\n}\n\n/**\n * Patched `removeChild`. Note that all dom \"removals\" are routed here.\n * Removes the given `node` from the element's `children`.\n * This method also performs dom composition.\n * @param {Node} parent\n * @param {Node} node\n*/\nexport function removeChild(parent, node) {\n if (node.parentNode !== parent) {\n throw Error('The node to be removed is not a child of this node: ' +\n node);\n }\n let preventNativeRemove;\n let ownerRoot = utils.ownerShadyRootForNode(node);\n let removingInsertionPoint;\n const parentData = shadyDataForNode(parent);\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordRemoveChild(node, parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeRemove = true;\n }\n }\n removeOwnerShadyRoot(node);\n // if removing slot, must render containing root\n if (ownerRoot) {\n let changeSlotContent = parent && parent.localName === 'slot';\n if (changeSlotContent) {\n preventNativeRemove = true;\n }\n removingInsertionPoint = ownerRoot._removeContainedSlots(node);\n if (removingInsertionPoint || changeSlotContent) {\n ownerRoot._asyncRender();\n }\n }\n if (!preventNativeRemove) {\n // if removing from a shadyRoot, remove form host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host :\n parent;\n // not guaranteed to physically be in container; e.g.\n // (1) if parent has a shadyRoot, element may or may not at distributed\n // location (could be undistributed)\n // (2) if parent is a slot, element may not ben in composed dom\n if (!(parentData.root || node.localName === 'slot') ||\n (container === parentNode(node))) {\n nativeMethods.removeChild.call(container, node);\n }\n }\n scheduleObserver(parent, null, node);\n return node;\n}\n\nfunction removeOwnerShadyRoot(node) {\n // optimization: only reset the tree if node is actually in a root\n if (hasCachedOwnerRoot(node)) {\n let c$ = node.childNodes;\n for (let i=0, l=c$.length, n; (i<l) && (n=c$[i]); i++) {\n removeOwnerShadyRoot(n);\n }\n }\n const nodeData = shadyDataForNode(node);\n if (nodeData) {\n nodeData.ownerShadyRoot = undefined;\n }\n}\n\nfunction hasCachedOwnerRoot(node) {\n const nodeData = shadyDataForNode(node);\n return Boolean(nodeData && nodeData.ownerShadyRoot !== undefined);\n}\n\n/**\n * Finds the first flattened node that is composed in the node's parent.\n * If the given node is a slot, then the first flattened node is returned\n * if it exists, otherwise advance to the node's nextSibling.\n * @param {Node} node within which to find first composed node\n * @returns {Node} first composed node\n */\nfunction firstComposedNode(node) {\n let composed = node;\n if (node && node.localName === 'slot') {\n const nodeData = shadyDataForNode(node);\n const flattened = nodeData && nodeData.flattenedNodes;\n composed = flattened && flattened.length ? flattened[0] :\n firstComposedNode(node.nextSibling);\n }\n return composed;\n}\n\nfunction hasShadowRootWithSlot(node) {\n const nodeData = shadyDataForNode(node);\n let root = nodeData && nodeData.root;\n return (root && root._hasInsertionPoint());\n}\n\n/**\n * Should be called whenever an attribute changes. If the `slot` attribute\n * changes, provokes rendering if necessary. If a `<slot>` element's `name`\n * attribute changes, updates the root's slot map and renders.\n * @param {Node} node\n * @param {string} name\n */\nfunction distributeAttributeChange(node, name) {\n if (name === 'slot') {\n const parent = node.parentNode;\n if (hasShadowRootWithSlot(parent)) {\n shadyDataForNode(parent).root._asyncRender();\n }\n } else if (node.localName === 'slot' && name === 'name') {\n let root = utils.ownerShadyRootForNode(node);\n if (root) {\n root._updateSlotName(node);\n root._asyncRender();\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Node=} addedNode\n * @param {Node=} removedNode\n */\nfunction scheduleObserver(node, addedNode, removedNode) {\n const nodeData = shadyDataForNode(node);\n const observer = nodeData && nodeData.observer;\n if (observer) {\n if (addedNode) {\n observer.addedNodes.push(addedNode);\n }\n if (removedNode) {\n observer.removedNodes.push(removedNode);\n }\n observer.schedule();\n }\n}\n\n/**\n * @param {Node} node\n * @param {Object=} options\n */\nexport function getRootNode(node, options) { // eslint-disable-line no-unused-vars\n if (!node || !node.nodeType) {\n return;\n }\n const nodeData = ensureShadyDataForNode(node);\n let root = nodeData.ownerShadyRoot;\n if (root === undefined) {\n if (utils.isShadyRoot(node)) {\n root = node;\n nodeData.ownerShadyRoot = root;\n } else {\n let parent = node.parentNode;\n root = parent ? getRootNode(parent) : node;\n // memo-ize result for performance but only memo-ize\n // result if node is in the document. This avoids a problem where a root\n // can be cached while an element is inside a fragment.\n // If this happens and we cache the result, the value can become stale\n // because for perf we avoid processing the subtree of added fragments.\n if (nativeMethods.contains.call(document.documentElement, node)) {\n nodeData.ownerShadyRoot = root;\n }\n }\n\n }\n return root;\n}\n\n// NOTE: `query` is used primarily for ShadyDOM's querySelector impl,\n// but it's also generally useful to recurse through the element tree\n// and is used by Polymer's styling system.\n/**\n * @param {Node} node\n * @param {Function} matcher\n * @param {Function=} halter\n */\nexport function query(node, matcher, halter) {\n let list = [];\n queryElements(node.childNodes, matcher,\n halter, list);\n return list;\n}\n\nfunction queryElements(elements, matcher, halter, list) {\n for (let i=0, l=elements.length, c; (i<l) && (c=elements[i]); i++) {\n if (c.nodeType === Node.ELEMENT_NODE &&\n queryElement(c, matcher, halter, list)) {\n return true;\n }\n }\n}\n\nfunction queryElement(node, matcher, halter, list) {\n let result = matcher(node);\n if (result) {\n list.push(node);\n }\n if (halter && halter(result)) {\n return result;\n }\n queryElements(node.childNodes, matcher,\n halter, list);\n}\n\nexport function renderRootNode(element) {\n var root = element.getRootNode();\n if (utils.isShadyRoot(root)) {\n root._render();\n }\n}\n\nlet scopingShim = null;\n\nexport function setAttribute(node, attr, value) {\n if (!scopingShim) {\n scopingShim = window['ShadyCSS'] && window['ShadyCSS']['ScopingShim'];\n }\n if (scopingShim && attr === 'class') {\n scopingShim['setElementClass'](node, value);\n } else {\n nativeMethods.setAttribute.call(node, attr, value);\n distributeAttributeChange(node, attr);\n }\n}\n\nexport function removeAttribute(node, attr) {\n nativeMethods.removeAttribute.call(node, attr);\n distributeAttributeChange(node, attr);\n}\n\nexport function cloneNode(node, deep) {\n if (node.localName == 'template') {\n return nativeMethods.cloneNode.call(node, deep);\n } else {\n let n = nativeMethods.cloneNode.call(node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = c$[i].cloneNode(true);\n n.appendChild(nc);\n }\n }\n return n;\n }\n}\n\n// note: Though not technically correct, we fast path `importNode`\n// when called on a node not owned by the main document.\n// This allows, for example, elements that cannot\n// contain custom elements and are therefore not likely to contain shadowRoots\n// to cloned natively. This is a fairly significant performance win.\nexport function importNode(node, deep) {\n if (node.ownerDocument !== document) {\n return nativeMethods.importNode.call(document, node, deep);\n }\n let n = nativeMethods.importNode.call(document, node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = importNode(c$[i], true);\n n.appendChild(nc);\n }\n }\n return n;\n}",null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as nativeMethods from './native-methods.js';\nimport {shadyDataForNode} from './shady-data.js';\n\n/*\nMake this name unique so it is unlikely to conflict with properties on objects passed to `addEventListener`\nhttps://github.com/webcomponents/shadydom/issues/173\n*/\nconst /** string */ eventWrappersName = `__eventWrappers${Date.now()}`;\n\n// https://github.com/w3c/webcomponents/issues/513#issuecomment-224183937\nlet alwaysComposed = {\n 'blur': true,\n 'focus': true,\n 'focusin': true,\n 'focusout': true,\n 'click': true,\n 'dblclick': true,\n 'mousedown': true,\n 'mouseenter': true,\n 'mouseleave': true,\n 'mousemove': true,\n 'mouseout': true,\n 'mouseover': true,\n 'mouseup': true,\n 'wheel': true,\n 'beforeinput': true,\n 'input': true,\n 'keydown': true,\n 'keyup': true,\n 'compositionstart': true,\n 'compositionupdate': true,\n 'compositionend': true,\n 'touchstart': true,\n 'touchend': true,\n 'touchmove': true,\n 'touchcancel': true,\n 'pointerover': true,\n 'pointerenter': true,\n 'pointerdown': true,\n 'pointermove': true,\n 'pointerup': true,\n 'pointercancel': true,\n 'pointerout': true,\n 'pointerleave': true,\n 'gotpointercapture': true,\n 'lostpointercapture': true,\n 'dragstart': true,\n 'drag': true,\n 'dragenter': true,\n 'dragleave': true,\n 'dragover': true,\n 'drop': true,\n 'dragend': true,\n 'DOMActivate': true,\n 'DOMFocusIn': true,\n 'DOMFocusOut': true,\n 'keypress': true\n};\n\nfunction pathComposer(startNode, composed) {\n let composedPath = [];\n let current = startNode;\n let startRoot = startNode === window ? window : startNode.getRootNode();\n while (current) {\n composedPath.push(current);\n if (current.assignedSlot) {\n current = current.assignedSlot;\n } else if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE && current.host && (composed || current !== startRoot)) {\n current = current.host;\n } else {\n current = current.parentNode;\n }\n }\n // event composedPath includes window when startNode's ownerRoot is document\n if (composedPath[composedPath.length - 1] === document) {\n composedPath.push(window);\n }\n return composedPath;\n}\n\nfunction retarget(refNode, path) {\n if (!utils.isShadyRoot) {\n return refNode;\n }\n // If ANCESTOR's root is not a shadow root or ANCESTOR's root is BASE's\n // shadow-including inclusive ancestor, return ANCESTOR.\n let refNodePath = pathComposer(refNode, true);\n let p$ = path;\n for (let i=0, ancestor, lastRoot, root, rootIdx; i < p$.length; i++) {\n ancestor = p$[i];\n root = ancestor === window ? window : ancestor.getRootNode();\n if (root !== lastRoot) {\n rootIdx = refNodePath.indexOf(root);\n lastRoot = root;\n }\n if (!utils.isShadyRoot(root) || rootIdx > -1) {\n return ancestor;\n }\n }\n}\n\nlet eventMixin = {\n\n /**\n * @this {Event}\n */\n get composed() {\n // isTrusted may not exist in this browser, so just check if isTrusted is explicitly false\n if (this.isTrusted !== false && this.__composed === undefined) {\n this.__composed = alwaysComposed[this.type];\n }\n return this.__composed || false;\n },\n\n /**\n * @this {Event}\n */\n composedPath() {\n if (!this.__composedPath) {\n this.__composedPath = pathComposer(this['__target'], this.composed);\n }\n return this.__composedPath;\n },\n\n /**\n * @this {Event}\n */\n get target() {\n return retarget(this.currentTarget, this.composedPath());\n },\n\n // http://w3c.github.io/webcomponents/spec/shadow/#event-relatedtarget-retargeting\n /**\n * @this {Event}\n */\n get relatedTarget() {\n if (!this.__relatedTarget) {\n return null;\n }\n if (!this.__relatedTargetComposedPath) {\n this.__relatedTargetComposedPath = pathComposer(this.__relatedTarget, true);\n }\n // find the deepest node in relatedTarget composed path that is in the same root with the currentTarget\n return retarget(this.currentTarget, this.__relatedTargetComposedPath);\n },\n /**\n * @this {Event}\n */\n stopPropagation() {\n Event.prototype.stopPropagation.call(this);\n this.__propagationStopped = true;\n },\n /**\n * @this {Event}\n */\n stopImmediatePropagation() {\n Event.prototype.stopImmediatePropagation.call(this);\n this.__immediatePropagationStopped = true;\n this.__propagationStopped = true;\n }\n\n};\n\nfunction mixinComposedFlag(Base) {\n // NOTE: avoiding use of `class` here so that transpiled output does not\n // try to do `Base.call` with a dom construtor.\n let klazz = function(type, options) {\n let event = new Base(type, options);\n event.__composed = options && Boolean(options['composed']);\n return event;\n }\n // put constructor properties on subclass\n utils.mixin(klazz, Base);\n klazz.prototype = Base.prototype;\n return klazz;\n}\n\nlet nonBubblingEventsToRetarget = {\n 'focus': true,\n 'blur': true\n};\n\n\n/**\n * Check if the event has been retargeted by comparing original `target`, and calculated `target`\n * @param {Event} event\n * @return {boolean} True if the original target and calculated target are the same\n */\nfunction hasRetargeted(event) {\n return event['__target'] !== event.target || event.__relatedTarget !== event.relatedTarget;\n}\n\n/**\n *\n * @param {Event} event\n * @param {Node} node\n * @param {string} phase\n */\nfunction fireHandlers(event, node, phase) {\n let hs = node.__handlers && node.__handlers[event.type] &&\n node.__handlers[event.type][phase];\n if (hs) {\n for (let i = 0, fn; (fn = hs[i]); i++) {\n if (hasRetargeted(event) && event.target === event.relatedTarget) {\n return;\n }\n fn.call(node, event);\n if (event.__immediatePropagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction retargetNonBubblingEvent(e) {\n let path = e.composedPath();\n let node;\n // override `currentTarget` to let patched `target` calculate correctly\n Object.defineProperty(e, 'currentTarget', {\n get: function() {\n return node;\n },\n configurable: true\n });\n for (let i = path.length - 1; i >= 0; i--) {\n node = path[i];\n // capture phase fires all capture handlers\n fireHandlers(e, node, 'capture');\n if (e.__propagationStopped) {\n return;\n }\n }\n\n // set the event phase to `AT_TARGET` as in spec\n Object.defineProperty(e, 'eventPhase', {get() { return Event.AT_TARGET }});\n\n // the event only needs to be fired when owner roots change when iterating the event path\n // keep track of the last seen owner root\n let lastFiredRoot;\n for (let i = 0; i < path.length; i++) {\n node = path[i];\n const nodeData = shadyDataForNode(node);\n const root = nodeData && nodeData.root;\n if (i === 0 || (root && root === lastFiredRoot)) {\n fireHandlers(e, node, 'bubble');\n // don't bother with window, it doesn't have `getRootNode` and will be last in the path anyway\n if (node !== window) {\n lastFiredRoot = node.getRootNode();\n }\n if (e.__propagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction listenerSettingsEqual(savedListener, node, type, capture, once, passive) {\n let {\n node: savedNode,\n type: savedType,\n capture: savedCapture,\n once: savedOnce,\n passive: savedPassive\n } = savedListener;\n return node === savedNode &&\n type === savedType &&\n capture === savedCapture &&\n once === savedOnce &&\n passive === savedPassive;\n}\n\nexport function findListener(wrappers, node, type, capture, once, passive) {\n for (let i = 0; i < wrappers.length; i++) {\n if (listenerSettingsEqual(wrappers[i], node, type, capture, once, passive)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Firefox can throw on accessing eventWrappers inside of `removeEventListener` during a selenium run\n * Try/Catch accessing eventWrappers to work around\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1353074\n */\nfunction getEventWrappers(eventLike) {\n let wrappers = null;\n try {\n wrappers = eventLike[eventWrappersName];\n } catch (e) {} // eslint-disable-line no-empty\n return wrappers;\n}\n\n/**\n * @this {Event}\n */\nexport function addEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n const handlerType = typeof fnOrObj;\n\n // bail if `fnOrObj` is not a function, not an object\n if (handlerType !== 'function' && handlerType !== 'object') {\n return;\n }\n\n // bail if `fnOrObj` is an object without a `handleEvent` method\n if (handlerType === 'object' && (!fnOrObj.handleEvent || typeof fnOrObj.handleEvent !== 'function')) {\n return;\n }\n\n // The callback `fn` might be used for multiple nodes/events. Since we generate\n // a wrapper function, we need to keep track of it when we remove the listener.\n // It's more efficient to store the node/type/options information as Array in\n // `fn` itself rather than the node (we assume that the same callback is used\n // for few nodes at most, whereas a node will likely have many event listeners).\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n // hack to let ShadyRoots have event listeners\n // event listener will be on host, but `currentTarget`\n // will be set to shadyroot for event listener\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n\n let wrappers = fnOrObj[eventWrappersName];\n if (wrappers) {\n // Stop if the wrapper function has already been created.\n if (findListener(wrappers, target, type, capture, once, passive) > -1) {\n return;\n }\n } else {\n fnOrObj[eventWrappersName] = [];\n }\n\n /**\n * @this {HTMLElement}\n * @param {Event} e\n */\n const wrapperFn = function(e) {\n // Support `once` option.\n if (once) {\n this.removeEventListener(type, fnOrObj, optionsOrCapture);\n }\n if (!e['__target']) {\n patchEvent(e);\n }\n let lastCurrentTargetDesc;\n if (target !== this) {\n // replace `currentTarget` to make `target` and `relatedTarget` correct for inside the shadowroot\n lastCurrentTargetDesc = Object.getOwnPropertyDescriptor(e, 'currentTarget');\n Object.defineProperty(e, 'currentTarget', {get() { return target }, configurable: true});\n }\n // There are two critera that should stop events from firing on this node\n // 1. the event is not composed and the current node is not in the same root as the target\n // 2. when bubbling, if after retargeting, relatedTarget and target point to the same node\n if (e.composed || e.composedPath().indexOf(target) > -1) {\n if (hasRetargeted(e) && e.target === e.relatedTarget) {\n if (e.eventPhase === Event.BUBBLING_PHASE) {\n e.stopImmediatePropagation();\n }\n return;\n }\n // prevent non-bubbling events from triggering bubbling handlers on shadowroot, but only if not in capture phase\n if (e.eventPhase !== Event.CAPTURING_PHASE && !e.bubbles && e.target !== target && !(target instanceof Window)) {\n return;\n }\n let ret = handlerType === 'function' ?\n fnOrObj.call(target, e) :\n (fnOrObj.handleEvent && fnOrObj.handleEvent(e));\n if (target !== this) {\n // replace the \"correct\" `currentTarget`\n if (lastCurrentTargetDesc) {\n Object.defineProperty(e, 'currentTarget', lastCurrentTargetDesc);\n lastCurrentTargetDesc = null;\n } else {\n delete e['currentTarget'];\n }\n }\n return ret;\n }\n };\n // Store the wrapper information.\n fnOrObj[eventWrappersName].push({\n // note: use target here which is either a shadowRoot\n // (when the host element is proxy'ing the event) or this element\n node: target,\n type: type,\n capture: capture,\n once: once,\n passive: passive,\n wrapperFn: wrapperFn\n });\n\n if (nonBubblingEventsToRetarget[type]) {\n this.__handlers = this.__handlers || {};\n this.__handlers[type] = this.__handlers[type] ||\n {'capture': [], 'bubble': []};\n this.__handlers[type][capture ? 'capture' : 'bubble'].push(wrapperFn);\n } else {\n let ael = this instanceof Window ? nativeMethods.windowAddEventListener :\n nativeMethods.addEventListener;\n ael.call(this, type, wrapperFn, optionsOrCapture);\n }\n}\n\n/**\n * @this {Event}\n */\nexport function removeEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n // Search the wrapped function.\n let wrapperFn = undefined;\n let wrappers = getEventWrappers(fnOrObj);\n if (wrappers) {\n let idx = findListener(wrappers, target, type, capture, once, passive);\n if (idx > -1) {\n wrapperFn = wrappers.splice(idx, 1)[0].wrapperFn;\n // Cleanup.\n if (!wrappers.length) {\n fnOrObj[eventWrappersName] = undefined;\n }\n }\n }\n let rel = this instanceof Window ? nativeMethods.windowRemoveEventListener :\n nativeMethods.removeEventListener;\n rel.call(this, type, wrapperFn || fnOrObj, optionsOrCapture);\n if (wrapperFn && nonBubblingEventsToRetarget[type] &&\n this.__handlers && this.__handlers[type]) {\n const arr = this.__handlers[type][capture ? 'capture' : 'bubble'];\n const idx = arr.indexOf(wrapperFn);\n if (idx > -1) {\n arr.splice(idx, 1);\n }\n }\n}\n\nfunction activateFocusEventOverrides() {\n for (let ev in nonBubblingEventsToRetarget) {\n window.addEventListener(ev, function(e) {\n if (!e['__target']) {\n patchEvent(e);\n retargetNonBubblingEvent(e);\n }\n }, true);\n }\n}\n\nfunction patchEvent(event) {\n event['__target'] = event.target;\n event.__relatedTarget = event.relatedTarget;\n // patch event prototype if we can\n if (utils.settings.hasDescriptors) {\n utils.patchPrototype(event, eventMixin);\n // and fallback to patching instance\n } else {\n utils.extend(event, eventMixin);\n }\n}\n\nlet PatchedEvent = mixinComposedFlag(window.Event);\nlet PatchedCustomEvent = mixinComposedFlag(window.CustomEvent);\nlet PatchedMouseEvent = mixinComposedFlag(window.MouseEvent);\n\nexport function patchEvents() {\n window.Event = PatchedEvent;\n window.CustomEvent = PatchedCustomEvent;\n window.MouseEvent = PatchedMouseEvent;\n activateFocusEventOverrides();\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nfunction newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n}\n\nconst EDIT_LEAVE = 0;\nconst EDIT_UPDATE = 1;\nconst EDIT_ADD = 2;\nconst EDIT_DELETE = 3;\n\n// Note: This function is *based* on the computation of the Levenshtein\n// \"edit\" distance. The one change is that \"updates\" are treated as two\n// edits - not one. With Array splices, an update is really a delete\n// followed by an add. By retaining this, we optimize for \"keeping\" the\n// maximum array items in the original array. For example:\n//\n// 'xxxx123' -> '123yyyy'\n//\n// With 1-edit updates, the shortest path would be just to update all seven\n// characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n// leaves the substring '123' intact.\nfunction calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n // \"Deletion\" columns\n let rowCount = oldEnd - oldStart + 1;\n let columnCount = currentEnd - currentStart + 1;\n let distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (let i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (let j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (let i = 1; i < rowCount; i++) {\n for (let j = 1; j < columnCount; j++) {\n if (equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n let north = distances[i - 1][j] + 1;\n let west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n}\n\n// This starts at the final weight, and walks \"backward\" by finding\n// the minimum previous weight recursively until the origin of the weight\n// matrix.\nfunction spliceOperationsFromEditDistances(distances) {\n let i = distances.length - 1;\n let j = distances[0].length - 1;\n let current = distances[i][j];\n let edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n let northWest = distances[i - 1][j - 1];\n let west = distances[i - 1][j];\n let north = distances[i][j - 1];\n\n let min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n}\n\n/**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n/**\n * Lacking individual splice mutation information, the minimal set of\n * splices can be synthesized given the previous state and final state of an\n * array. The basic approach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\nfunction calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n let prefixCount = 0;\n let suffixCount = 0;\n let splice;\n\n let minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentStart == currentEnd) {\n splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n let ops = spliceOperationsFromEditDistances(\n calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n splice = undefined;\n let splices = [];\n let index = currentStart;\n let oldIndex = oldStart;\n for (let i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n}\n\nfunction sharedPrefix(current, old, searchLength) {\n for (let i = 0; i < searchLength; i++)\n if (!equals(current[i], old[i]))\n return i;\n return searchLength;\n}\n\nfunction sharedSuffix(current, old, searchLength) {\n let index1 = current.length;\n let index2 = old.length;\n let count = 0;\n while (count < searchLength && equals(current[--index1], old[--index2]))\n count++;\n\n return count;\n}\n\nfunction equals(currentValue, previousValue) {\n return currentValue === previousValue;\n}\n\nexport function calculateSplices(current, previous) {\n return calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n}\n\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Patches elements that interacts with ShadyDOM\n * such that tree traversal and mutation apis act like they would under\n * ShadowDOM.\n *\n * This import enables seemless interaction with ShadyDOM powered\n * custom elements, enabling better interoperation with 3rd party code,\n * libraries, and frameworks that use DOM tree manipulation apis.\n */\n\nimport * as utils from './utils.js';\nimport {flush, enqueue} from './flush.js';\nimport {observeChildren, unobserveChildren, filterMutations} from './observe-changes.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {patchBuiltins} from './patch-builtins.js';\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {patchEvents} from './patch-events.js';\nimport {ShadyRoot} from './attach-shadow.js';\n\nif (utils.settings.inUse) {\n let ShadyDOM = {\n // TODO(sorvell): remove when Polymer does not depend on this.\n 'inUse': utils.settings.inUse,\n // NOTE: old browsers without prototype accessors (very old Chrome\n // and Safari) need manually patched accessors to properly set\n // `innerHTML` and `textContent` when an element is:\n // (1) inside a shadowRoot\n // (2) does not have special (slot) children itself\n // (3) and setting the property needs to provoke distribution (because\n // a nested slot is added/removed)\n 'patch': (node) => {\n patchInsideElementAccessors(node);\n patchOutsideElementAccessors(node);\n return node;\n },\n 'isShadyRoot': utils.isShadyRoot,\n 'enqueue': enqueue,\n 'flush': flush,\n 'settings': utils.settings,\n 'filterMutations': filterMutations,\n 'observeChildren': observeChildren,\n 'unobserveChildren': unobserveChildren,\n 'nativeMethods': nativeMethods,\n 'nativeTree': nativeTree\n };\n\n window['ShadyDOM'] = ShadyDOM;\n\n // Apply patches to events...\n patchEvents();\n // Apply patches to builtins (e.g. Element.prototype) where applicable.\n patchBuiltins();\n\n window.ShadowRoot = ShadyRoot;\n}","const reservedTagList = new Set([\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-src',\n 'font-face-uri',\n 'font-face-format',\n 'font-face-name',\n 'missing-glyph',\n]);\n\n/**\n * @param {string} localName\n * @returns {boolean}\n */\nexport function isValidCustomElementName(localName) {\n const reserved = reservedTagList.has(localName);\n const validForm = /^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(localName);\n return !reserved && validForm;\n}\n\n/**\n * @private\n * @param {!Node} node\n * @return {boolean}\n */\nexport function isConnected(node) {\n // Use `Node#isConnected`, if defined.\n const nativeValue = node.isConnected;\n if (nativeValue !== undefined) {\n return nativeValue;\n }\n\n /** @type {?Node|undefined} */\n let current = node;\n while (current && !(current.__CE_isImportDocument || current instanceof Document)) {\n current = current.parentNode || (window.ShadowRoot && current instanceof ShadowRoot ? current.host : undefined);\n }\n return !!(current && (current.__CE_isImportDocument || current instanceof Document));\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextSiblingOrAncestorSibling(root, start) {\n let node = start;\n while (node && node !== root && !node.nextSibling) {\n node = node.parentNode;\n }\n return (!node || node === root) ? null : node.nextSibling;\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextNode(root, start) {\n return start.firstChild ? start.firstChild : nextSiblingOrAncestorSibling(root, start);\n}\n\n/**\n * @param {!Node} root\n * @param {!function(!Element)} callback\n * @param {!Set<Node>=} visitedImports\n */\nexport function walkDeepDescendantElements(root, callback, visitedImports = new Set()) {\n let node = root;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = /** @type {!Element} */(node);\n\n callback(element);\n\n const localName = element.localName;\n if (localName === 'link' && element.getAttribute('rel') === 'import') {\n // If this import (polyfilled or not) has it's root node available,\n // walk it.\n const importNode = /** @type {!Node} */ (element.import);\n if (importNode instanceof Node && !visitedImports.has(importNode)) {\n // Prevent multiple walks of the same import root.\n visitedImports.add(importNode);\n\n for (let child = importNode.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n\n // Ignore descendants of import links to prevent attempting to walk the\n // elements created by the HTML Imports polyfill that we just walked\n // above.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n } else if (localName === 'template') {\n // Ignore descendants of templates. There shouldn't be any descendants\n // because they will be moved into `.content` during construction in\n // browsers that support template but, in case they exist and are still\n // waiting to be moved by a polyfill, they will be ignored.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n }\n\n // Walk shadow roots.\n const shadowRoot = element.__CE_shadowRoot;\n if (shadowRoot) {\n for (let child = shadowRoot.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n }\n\n node = nextNode(root, node);\n }\n}\n\n/**\n * Used to suppress Closure's \"Modifying the prototype is only allowed if the\n * constructor is in the same scope\" warning without using\n * `@suppress {newCheckTypes, duplicate}` because `newCheckTypes` is too broad.\n *\n * @param {!Object} destination\n * @param {string} name\n * @param {*} value\n */\nexport function setPropertyUnchecked(destination, name, value) {\n destination[name] = value;\n}\n","import * as Utilities from './Utilities.js';\nimport CEState from './CustomElementState.js';\n\nexport default class CustomElementInternals {\n constructor() {\n /** @type {!Map<string, !CustomElementDefinition>} */\n this._localNameToDefinition = new Map();\n\n /** @type {!Map<!Function, !CustomElementDefinition>} */\n this._constructorToDefinition = new Map();\n\n /** @type {!Array<!function(!Node)>} */\n this._patches = [];\n\n /** @type {boolean} */\n this._hasPatches = false;\n }\n\n /**\n * @param {string} localName\n * @param {!CustomElementDefinition} definition\n */\n setDefinition(localName, definition) {\n this._localNameToDefinition.set(localName, definition);\n this._constructorToDefinition.set(definition.constructor, definition);\n }\n\n /**\n * @param {string} localName\n * @return {!CustomElementDefinition|undefined}\n */\n localNameToDefinition(localName) {\n return this._localNameToDefinition.get(localName);\n }\n\n /**\n * @param {!Function} constructor\n * @return {!CustomElementDefinition|undefined}\n */\n constructorToDefinition(constructor) {\n return this._constructorToDefinition.get(constructor);\n }\n\n /**\n * @param {!function(!Node)} listener\n */\n addPatch(listener) {\n this._hasPatches = true;\n this._patches.push(listener);\n }\n\n /**\n * @param {!Node} node\n */\n patchTree(node) {\n if (!this._hasPatches) return;\n\n Utilities.walkDeepDescendantElements(node, element => this.patch(element));\n }\n\n /**\n * @param {!Node} node\n */\n patch(node) {\n if (!this._hasPatches) return;\n\n if (node.__CE_patched) return;\n node.__CE_patched = true;\n\n for (let i = 0; i < this._patches.length; i++) {\n this._patches[i](node);\n }\n }\n\n /**\n * @param {!Node} root\n */\n connectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.connectedCallback(element);\n } else {\n this.upgradeElement(element);\n }\n }\n }\n\n /**\n * @param {!Node} root\n */\n disconnectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.disconnectedCallback(element);\n }\n }\n }\n\n /**\n * Upgrades all uncustomized custom elements at and below a root node for\n * which there is a definition. When custom element reaction callbacks are\n * assumed to be called synchronously (which, by the current DOM / HTML spec\n * definitions, they are *not*), callbacks for both elements customized\n * synchronously by the parser and elements being upgraded occur in the same\n * relative order.\n *\n * NOTE: This function, when used to simulate the construction of a tree that\n * is already created but not customized (i.e. by the parser), does *not*\n * prevent the element from reading the 'final' (true) state of the tree. For\n * example, the element, during truly synchronous parsing / construction would\n * see that it contains no children as they have not yet been inserted.\n * However, this function does not modify the tree, the element will\n * (incorrectly) have children. Additionally, self-modification restrictions\n * for custom element constructors imposed by the DOM spec are *not* enforced.\n *\n *\n * The following nested list shows the steps extending down from the HTML\n * spec's parsing section that cause elements to be synchronously created and\n * upgraded:\n *\n * The \"in body\" insertion mode:\n * https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n * - Switch on token:\n * .. other cases ..\n * -> Any other start tag\n * - [Insert an HTML element](below) for the token.\n *\n * Insert an HTML element:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-an-html-element\n * - Insert a foreign element for the token in the HTML namespace:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-a-foreign-element\n * - Create an element for a token:\n * https://html.spec.whatwg.org/multipage/syntax.html#create-an-element-for-the-token\n * - Will execute script flag is true?\n * - (Element queue pushed to the custom element reactions stack.)\n * - Create an element:\n * https://dom.spec.whatwg.org/#concept-create-element\n * - Sync CE flag is true?\n * - Constructor called.\n * - Self-modification restrictions enforced.\n * - Sync CE flag is false?\n * - (Upgrade reaction enqueued.)\n * - Attributes appended to element.\n * (`attributeChangedCallback` reactions enqueued.)\n * - Will execute script flag is true?\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n * - (Element queue pushed to the custom element reactions stack.)\n * - Insert the element:\n * https://dom.spec.whatwg.org/#concept-node-insert\n * - Shadow-including descendants are connected. During parsing\n * construction, there are no shadow-*excluding* descendants.\n * However, the constructor may have validly attached a shadow\n * tree to itself and added descendants to that shadow tree.\n * (`connectedCallback` reactions enqueued.)\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n *\n * @param {!Node} root\n * @param {{\n * visitedImports: (!Set<!Node>|undefined),\n * upgrade: (!function(!Element)|undefined),\n * }=} options\n */\n patchAndUpgradeTree(root, options = {}) {\n const visitedImports = options.visitedImports || new Set();\n const upgrade = options.upgrade || (element => this.upgradeElement(element));\n\n const elements = [];\n\n const gatherElements = element => {\n if (element.localName === 'link' && element.getAttribute('rel') === 'import') {\n // The HTML Imports polyfill sets a descendant element of the link to\n // the `import` property, specifically this is *not* a Document.\n const importNode = /** @type {?Node} */ (element.import);\n\n if (importNode instanceof Node) {\n importNode.__CE_isImportDocument = true;\n // Connected links are associated with the registry.\n importNode.__CE_hasRegistry = true;\n }\n\n if (importNode && importNode.readyState === 'complete') {\n importNode.__CE_documentLoadHandled = true;\n } else {\n // If this link's import root is not available, its contents can't be\n // walked. Wait for 'load' and walk it when it's ready.\n element.addEventListener('load', () => {\n const importNode = /** @type {!Node} */ (element.import);\n\n if (importNode.__CE_documentLoadHandled) return;\n importNode.__CE_documentLoadHandled = true;\n\n // Clone the `visitedImports` set that was populated sync during\n // the `patchAndUpgradeTree` call that caused this 'load' handler to\n // be added. Then, remove *this* link's import node so that we can\n // walk that import again, even if it was partially walked later\n // during the same `patchAndUpgradeTree` call.\n const clonedVisitedImports = new Set(visitedImports);\n clonedVisitedImports.delete(importNode);\n\n this.patchAndUpgradeTree(importNode, {visitedImports: clonedVisitedImports, upgrade});\n });\n }\n } else {\n elements.push(element);\n }\n };\n\n // `walkDeepDescendantElements` populates (and internally checks against)\n // `visitedImports` when traversing a loaded import.\n Utilities.walkDeepDescendantElements(root, gatherElements, visitedImports);\n\n if (this._hasPatches) {\n for (let i = 0; i < elements.length; i++) {\n this.patch(elements[i]);\n }\n }\n\n for (let i = 0; i < elements.length; i++) {\n upgrade(elements[i]);\n }\n }\n\n /**\n * @param {!Element} element\n */\n upgradeElement(element) {\n const currentState = element.__CE_state;\n if (currentState !== undefined) return;\n\n // Prevent elements created in documents without a browsing context from\n // upgrading.\n //\n // https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition\n // \"If document does not have a browsing context, return null.\"\n //\n // https://html.spec.whatwg.org/multipage/window-object.html#dom-document-defaultview\n // \"The defaultView IDL attribute of the Document interface, on getting,\n // must return this Document's browsing context's WindowProxy object, if\n // this Document has an associated browsing context, or null otherwise.\"\n const ownerDocument = element.ownerDocument;\n if (\n !ownerDocument.defaultView &&\n !(ownerDocument.__CE_isImportDocument && ownerDocument.__CE_hasRegistry)\n ) return;\n\n const definition = this.localNameToDefinition(element.localName);\n if (!definition) return;\n\n definition.constructionStack.push(element);\n\n const constructor = definition.constructor;\n try {\n try {\n let result = new (constructor)();\n if (result !== element) {\n throw new Error('The custom element constructor did not produce the element being upgraded.');\n }\n } finally {\n definition.constructionStack.pop();\n }\n } catch (e) {\n element.__CE_state = CEState.failed;\n throw e;\n }\n\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n\n if (definition.attributeChangedCallback) {\n const observedAttributes = definition.observedAttributes;\n for (let i = 0; i < observedAttributes.length; i++) {\n const name = observedAttributes[i];\n const value = element.getAttribute(name);\n if (value !== null) {\n this.attributeChangedCallback(element, name, null, value, null);\n }\n }\n }\n\n if (Utilities.isConnected(element)) {\n this.connectedCallback(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n connectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.connectedCallback) {\n definition.connectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n disconnectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.disconnectedCallback) {\n definition.disconnectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n * @param {string} name\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\n attributeChangedCallback(element, name, oldValue, newValue, namespace) {\n const definition = element.__CE_definition;\n if (\n definition.attributeChangedCallback &&\n definition.observedAttributes.indexOf(name) > -1\n ) {\n definition.attributeChangedCallback.call(element, name, oldValue, newValue, namespace);\n }\n }\n}\n","/**\n * @enum {number}\n */\nconst CustomElementState = {\n custom: 1,\n failed: 2,\n};\n\nexport default CustomElementState;\n","import CustomElementInternals from './CustomElementInternals.js';\n\nexport default class DocumentConstructionObserver {\n constructor(internals, doc) {\n /**\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @type {!Document}\n */\n this._document = doc;\n\n /**\n * @type {MutationObserver|undefined}\n */\n this._observer = undefined;\n\n\n // Simulate tree construction for all currently accessible nodes in the\n // document.\n this._internals.patchAndUpgradeTree(this._document);\n\n if (this._document.readyState === 'loading') {\n this._observer = new MutationObserver(this._handleMutations.bind(this));\n\n // Nodes created by the parser are given to the observer *before* the next\n // task runs. Inline scripts are run in a new task. This means that the\n // observer will be able to handle the newly parsed nodes before the inline\n // script is run.\n this._observer.observe(this._document, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n disconnect() {\n if (this._observer) {\n this._observer.disconnect();\n }\n }\n\n /**\n * @param {!Array<!MutationRecord>} mutations\n */\n _handleMutations(mutations) {\n // Once the document's `readyState` is 'interactive' or 'complete', all new\n // nodes created within that document will be the result of script and\n // should be handled by patching.\n const readyState = this._document.readyState;\n if (readyState === 'interactive' || readyState === 'complete') {\n this.disconnect();\n }\n\n for (let i = 0; i < mutations.length; i++) {\n const addedNodes = mutations[i].addedNodes;\n for (let j = 0; j < addedNodes.length; j++) {\n const node = addedNodes[j];\n this._internals.patchAndUpgradeTree(node);\n }\n }\n }\n}\n","import CustomElementInternals from './CustomElementInternals.js';\nimport DocumentConstructionObserver from './DocumentConstructionObserver.js';\nimport Deferred from './Deferred.js';\nimport * as Utilities from './Utilities.js';\n\n/**\n * @unrestricted\n */\nexport default class CustomElementRegistry {\n\n /**\n * @param {!CustomElementInternals} internals\n */\n constructor(internals) {\n /**\n * @private\n * @type {boolean}\n */\n this._elementDefinitionIsRunning = false;\n\n /**\n * @private\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @private\n * @type {!Map<string, !Deferred<undefined>>}\n */\n this._whenDefinedDeferred = new Map();\n\n /**\n * The default flush callback triggers the document walk synchronously.\n * @private\n * @type {!Function}\n */\n this._flushCallback = fn => fn();\n\n /**\n * @private\n * @type {boolean}\n */\n this._flushPending = false;\n\n /**\n * @private\n * @type {!Array<!CustomElementDefinition>}\n */\n this._pendingDefinitions = [];\n\n /**\n * @private\n * @type {!DocumentConstructionObserver}\n */\n this._documentConstructionObserver = new DocumentConstructionObserver(internals, document);\n }\n\n /**\n * @param {string} localName\n * @param {!Function} constructor\n */\n define(localName, constructor) {\n if (!(constructor instanceof Function)) {\n throw new TypeError('Custom element constructors must be functions.');\n }\n\n if (!Utilities.isValidCustomElementName(localName)) {\n throw new SyntaxError(`The element name '${localName}' is not valid.`);\n }\n\n if (this._internals.localNameToDefinition(localName)) {\n throw new Error(`A custom element with name '${localName}' has already been defined.`);\n }\n\n if (this._elementDefinitionIsRunning) {\n throw new Error('A custom element is already being defined.');\n }\n this._elementDefinitionIsRunning = true;\n\n let connectedCallback;\n let disconnectedCallback;\n let adoptedCallback;\n let attributeChangedCallback;\n let observedAttributes;\n try {\n /** @type {!Object} */\n const prototype = constructor.prototype;\n if (!(prototype instanceof Object)) {\n throw new TypeError('The custom element constructor\\'s prototype is not an object.');\n }\n\n function getCallback(name) {\n const callbackValue = prototype[name];\n if (callbackValue !== undefined && !(callbackValue instanceof Function)) {\n throw new Error(`The '${name}' callback must be a function.`);\n }\n return callbackValue;\n }\n\n connectedCallback = getCallback('connectedCallback');\n disconnectedCallback = getCallback('disconnectedCallback');\n adoptedCallback = getCallback('adoptedCallback');\n attributeChangedCallback = getCallback('attributeChangedCallback');\n observedAttributes = constructor['observedAttributes'] || [];\n } catch (e) {\n return;\n } finally {\n this._elementDefinitionIsRunning = false;\n }\n\n const definition = {\n localName,\n constructor,\n connectedCallback,\n disconnectedCallback,\n adoptedCallback,\n attributeChangedCallback,\n observedAttributes,\n constructionStack: [],\n };\n\n this._internals.setDefinition(localName, definition);\n this._pendingDefinitions.push(definition);\n\n // If we've already called the flush callback and it hasn't called back yet,\n // don't call it again.\n if (!this._flushPending) {\n this._flushPending = true;\n this._flushCallback(() => this._flush());\n }\n }\n\n upgrade(element) {\n this._internals.patchAndUpgradeTree(element);\n }\n\n _flush() {\n // If no new definitions were defined, don't attempt to flush. This could\n // happen if a flush callback keeps the function it is given and calls it\n // multiple times.\n if (this._flushPending === false) return;\n this._flushPending = false;\n\n const pendingDefinitions = this._pendingDefinitions;\n\n /**\n * Unupgraded elements with definitions that were defined *before* the last\n * flush, in document order.\n * @type {!Array<!Element>}\n */\n const elementsWithStableDefinitions = [];\n\n /**\n * A map from `localName`s of definitions that were defined *after* the last\n * flush to unupgraded elements matching that definition, in document order.\n * @type {!Map<string, !Array<!Element>>}\n */\n const elementsWithPendingDefinitions = new Map();\n for (let i = 0; i < pendingDefinitions.length; i++) {\n elementsWithPendingDefinitions.set(pendingDefinitions[i].localName, []);\n }\n\n this._internals.patchAndUpgradeTree(document, {\n upgrade: element => {\n // Ignore the element if it has already upgraded or failed to upgrade.\n if (element.__CE_state !== undefined) return;\n\n const localName = element.localName;\n\n // If there is an applicable pending definition for the element, add the\n // element to the list of elements to be upgraded with that definition.\n const pendingElements = elementsWithPendingDefinitions.get(localName);\n if (pendingElements) {\n pendingElements.push(element);\n // If there is *any other* applicable definition for the element, add it\n // to the list of elements with stable definitions that need to be upgraded.\n } else if (this._internals.localNameToDefinition(localName)) {\n elementsWithStableDefinitions.push(element);\n }\n },\n });\n\n // Upgrade elements with 'stable' definitions first.\n for (let i = 0; i < elementsWithStableDefinitions.length; i++) {\n this._internals.upgradeElement(elementsWithStableDefinitions[i]);\n }\n\n // Upgrade elements with 'pending' definitions in the order they were defined.\n while (pendingDefinitions.length > 0) {\n const definition = pendingDefinitions.shift();\n const localName = definition.localName;\n\n // Attempt to upgrade all applicable elements.\n const pendingUpgradableElements = elementsWithPendingDefinitions.get(definition.localName);\n for (let i = 0; i < pendingUpgradableElements.length; i++) {\n this._internals.upgradeElement(pendingUpgradableElements[i]);\n }\n\n // Resolve any promises created by `whenDefined` for the definition.\n const deferred = this._whenDefinedDeferred.get(localName);\n if (deferred) {\n deferred.resolve(undefined);\n }\n }\n }\n\n /**\n * @param {string} localName\n * @return {Function|undefined}\n */\n get(localName) {\n const definition = this._internals.localNameToDefinition(localName);\n if (definition) {\n return definition.constructor;\n }\n\n return undefined;\n }\n\n /**\n * @param {string} localName\n * @return {!Promise<undefined>}\n */\n whenDefined(localName) {\n if (!Utilities.isValidCustomElementName(localName)) {\n return Promise.reject(new SyntaxError(`'${localName}' is not a valid custom element name.`));\n }\n\n const prior = this._whenDefinedDeferred.get(localName);\n if (prior) {\n return prior.toPromise();\n }\n\n const deferred = new Deferred();\n this._whenDefinedDeferred.set(localName, deferred);\n\n const definition = this._internals.localNameToDefinition(localName);\n // Resolve immediately only if the given local name has a definition *and*\n // the full document walk to upgrade elements with that local name has\n // already happened.\n if (definition && !this._pendingDefinitions.some(d => d.localName === localName)) {\n deferred.resolve(undefined);\n }\n\n return deferred.toPromise();\n }\n\n polyfillWrapFlushCallback(outer) {\n this._documentConstructionObserver.disconnect();\n const inner = this._flushCallback;\n this._flushCallback = flush => outer(() => inner(flush));\n }\n}\n\n// Closure compiler exports.\nwindow['CustomElementRegistry'] = CustomElementRegistry;\nCustomElementRegistry.prototype['define'] = CustomElementRegistry.prototype.define;\nCustomElementRegistry.prototype['upgrade'] = CustomElementRegistry.prototype.upgrade;\nCustomElementRegistry.prototype['get'] = CustomElementRegistry.prototype.get;\nCustomElementRegistry.prototype['whenDefined'] = CustomElementRegistry.prototype.whenDefined;\nCustomElementRegistry.prototype['polyfillWrapFlushCallback'] = CustomElementRegistry.prototype.polyfillWrapFlushCallback;\n","/**\n * @template T\n */\nexport default class Deferred {\n constructor() {\n /**\n * @private\n * @type {T|undefined}\n */\n this._value = undefined;\n\n /**\n * @private\n * @type {Function|undefined}\n */\n this._resolve = undefined;\n\n /**\n * @private\n * @type {!Promise<T>}\n */\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n\n if (this._value) {\n resolve(this._value);\n }\n });\n }\n\n /**\n * @param {T} value\n */\n resolve(value) {\n if (this._value) {\n throw new Error('Already resolved.');\n }\n\n this._value = value;\n\n if (this._resolve) {\n this._resolve(value);\n }\n }\n\n /**\n * @return {!Promise<T>}\n */\n toPromise() {\n return this._promise;\n }\n}\n","export default {\n Document_createElement: window.Document.prototype.createElement,\n Document_createElementNS: window.Document.prototype.createElementNS,\n Document_importNode: window.Document.prototype.importNode,\n Document_prepend: window.Document.prototype['prepend'],\n Document_append: window.Document.prototype['append'],\n DocumentFragment_prepend: window.DocumentFragment.prototype['prepend'],\n DocumentFragment_append: window.DocumentFragment.prototype['append'],\n Node_cloneNode: window.Node.prototype.cloneNode,\n Node_appendChild: window.Node.prototype.appendChild,\n Node_insertBefore: window.Node.prototype.insertBefore,\n Node_removeChild: window.Node.prototype.removeChild,\n Node_replaceChild: window.Node.prototype.replaceChild,\n Node_textContent: Object.getOwnPropertyDescriptor(window.Node.prototype, 'textContent'),\n Element_attachShadow: window.Element.prototype['attachShadow'],\n Element_innerHTML: Object.getOwnPropertyDescriptor(window.Element.prototype, 'innerHTML'),\n Element_getAttribute: window.Element.prototype.getAttribute,\n Element_setAttribute: window.Element.prototype.setAttribute,\n Element_removeAttribute: window.Element.prototype.removeAttribute,\n Element_getAttributeNS: window.Element.prototype.getAttributeNS,\n Element_setAttributeNS: window.Element.prototype.setAttributeNS,\n Element_removeAttributeNS: window.Element.prototype.removeAttributeNS,\n Element_insertAdjacentElement: window.Element.prototype['insertAdjacentElement'],\n Element_insertAdjacentHTML: window.Element.prototype['insertAdjacentHTML'],\n Element_prepend: window.Element.prototype['prepend'],\n Element_append: window.Element.prototype['append'],\n Element_before: window.Element.prototype['before'],\n Element_after: window.Element.prototype['after'],\n Element_replaceWith: window.Element.prototype['replaceWith'],\n Element_remove: window.Element.prototype['remove'],\n HTMLElement: window.HTMLElement,\n HTMLElement_innerHTML: Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, 'innerHTML'),\n HTMLElement_insertAdjacentElement: window.HTMLElement.prototype['insertAdjacentElement'],\n HTMLElement_insertAdjacentHTML: window.HTMLElement.prototype['insertAdjacentHTML'],\n};\n","/**\n * This class exists only to work around Closure's lack of a way to describe\n * singletons. It represents the 'already constructed marker' used in custom\n * element construction stacks.\n *\n * https://html.spec.whatwg.org/#concept-already-constructed-marker\n */\nclass AlreadyConstructedMarker {}\n\nexport default new AlreadyConstructedMarker();\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport AlreadyConstructedMarker from '../AlreadyConstructedMarker.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n window['HTMLElement'] = (function() {\n /**\n * @type {function(new: HTMLElement): !HTMLElement}\n */\n function HTMLElement() {\n // This should really be `new.target` but `new.target` can't be emulated\n // in ES5. Assuming the user keeps the default value of the constructor's\n // prototype's `constructor` property, this is equivalent.\n /** @type {!Function} */\n const constructor = this.constructor;\n\n const definition = internals.constructorToDefinition(constructor);\n if (!definition) {\n throw new Error('The custom element being constructed was not registered with `customElements`.');\n }\n\n const constructionStack = definition.constructionStack;\n\n if (constructionStack.length === 0) {\n const element = Native.Document_createElement.call(document, definition.localName);\n Object.setPrototypeOf(element, constructor.prototype);\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n internals.patch(element);\n return element;\n }\n\n const lastIndex = constructionStack.length - 1;\n const element = constructionStack[lastIndex];\n if (element === AlreadyConstructedMarker) {\n throw new Error('The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.');\n }\n constructionStack[lastIndex] = AlreadyConstructedMarker;\n\n Object.setPrototypeOf(element, constructor.prototype);\n internals.patch(/** @type {!HTMLElement} */ (element));\n\n return element;\n }\n\n HTMLElement.prototype = Native.HTMLElement.prototype;\n\n return HTMLElement;\n })();\n};\n","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\nimport CustomElementInternals from './CustomElementInternals.js';\nimport CustomElementRegistry from './CustomElementRegistry.js';\n\nimport PatchHTMLElement from './Patch/HTMLElement.js';\nimport PatchDocument from './Patch/Document.js';\nimport PatchDocumentFragment from './Patch/DocumentFragment.js';\nimport PatchNode from './Patch/Node.js';\nimport PatchElement from './Patch/Element.js';\n\nconst priorCustomElements = window['customElements'];\n\nif (!priorCustomElements ||\n priorCustomElements['forcePolyfill'] ||\n (typeof priorCustomElements['define'] != 'function') ||\n (typeof priorCustomElements['get'] != 'function')) {\n /** @type {!CustomElementInternals} */\n const internals = new CustomElementInternals();\n\n PatchHTMLElement(internals);\n PatchDocument(internals);\n PatchDocumentFragment(internals);\n PatchNode(internals);\n PatchElement(internals);\n\n // The main document is always associated with the registry.\n document.__CE_hasRegistry = true;\n\n /** @type {!CustomElementRegistry} */\n const customElements = new CustomElementRegistry(internals);\n\n Object.defineProperty(window, 'customElements', {\n configurable: true,\n enumerable: true,\n value: customElements,\n });\n}\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * prepend: !function(...(!Node|string)),\n * append: !function(...(!Node|string)),\n * }}\n */\nlet ParentNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ParentNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function appendPrependPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.prepend !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'prepend', appendPrependPatch(builtIn.prepend));\n }\n\n if (builtIn.append !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'append', appendPrependPatch(builtIn.append));\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n Utilities.setPropertyUnchecked(Document.prototype, 'createElement',\n /**\n * @this {Document}\n * @param {string} localName\n * @return {!Element}\n */\n function(localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElement.call(this, localName));\n internals.patch(result);\n return result;\n });\n\n Utilities.setPropertyUnchecked(Document.prototype, 'importNode',\n /**\n * @this {Document}\n * @param {!Node} node\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(node, deep) {\n const clone = Native.Document_importNode.call(this, node, deep);\n // Only create custom elements if this document is associated with the registry.\n if (!this.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n const NS_HTML = \"http://www.w3.org/1999/xhtml\";\n\n Utilities.setPropertyUnchecked(Document.prototype, 'createElementNS',\n /**\n * @this {Document}\n * @param {?string} namespace\n * @param {string} localName\n * @return {!Element}\n */\n function(namespace, localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry && (namespace === null || namespace === NS_HTML)) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElementNS.call(this, namespace, localName));\n internals.patch(result);\n return result;\n });\n\n PatchParentNode(internals, Document.prototype, {\n prepend: Native.Document_prepend,\n append: Native.Document_append,\n });\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n // `Node#nodeValue` is implemented on `Attr`.\n // `Node#textContent` is implemented on `Attr`, `Element`.\n\n Utilities.setPropertyUnchecked(Node.prototype, 'insertBefore',\n /**\n * @this {Node}\n * @param {!Node} node\n * @param {?Node} refNode\n * @return {!Node}\n */\n function(node, refNode) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'appendChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'cloneNode',\n /**\n * @this {Node}\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(deep) {\n const clone = Native.Node_cloneNode.call(this, deep);\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'removeChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_removeChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'replaceChild',\n /**\n * @this {Node}\n * @param {!Node} nodeToInsert\n * @param {!Node} nodeToRemove\n * @return {!Node}\n */\n function(nodeToInsert, nodeToRemove) {\n if (nodeToInsert instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(nodeToInsert.childNodes);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n internals.disconnectTree(nodeToRemove);\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeToInsertWasConnected = Utilities.isConnected(nodeToInsert);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n const thisIsConnected = Utilities.isConnected(this);\n\n if (thisIsConnected) {\n internals.disconnectTree(nodeToRemove);\n }\n\n if (nodeToInsertWasConnected) {\n internals.disconnectTree(nodeToInsert);\n }\n\n if (thisIsConnected) {\n internals.connectTree(nodeToInsert);\n }\n\n return nativeResult;\n });\n\n\n function patch_textContent(destination, baseDescriptor) {\n Object.defineProperty(destination, 'textContent', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Node} */ function(assignedValue) {\n // If this is a text node then there are no nodes to disconnect.\n if (this.nodeType === Node.TEXT_NODE) {\n baseDescriptor.set.call(this, assignedValue);\n return;\n }\n\n let removedNodes = undefined;\n // Checking for `firstChild` is faster than reading `childNodes.length`\n // to compare with 0.\n if (this.firstChild) {\n // Using `childNodes` is faster than `children`, even though we only\n // care about elements.\n const childNodes = this.childNodes;\n const childNodesLength = childNodes.length;\n if (childNodesLength > 0 && Utilities.isConnected(this)) {\n // Copying an array by iterating is faster than using slice.\n removedNodes = new Array(childNodesLength);\n for (let i = 0; i < childNodesLength; i++) {\n removedNodes[i] = childNodes[i];\n }\n }\n }\n\n baseDescriptor.set.call(this, assignedValue);\n\n if (removedNodes) {\n for (let i = 0; i < removedNodes.length; i++) {\n internals.disconnectTree(removedNodes[i]);\n }\n }\n },\n });\n }\n\n if (Native.Node_textContent && Native.Node_textContent.get) {\n patch_textContent(Node.prototype, Native.Node_textContent);\n } else {\n internals.addPatch(function(element) {\n patch_textContent(element, {\n enumerable: true,\n configurable: true,\n // NOTE: This implementation of the `textContent` getter assumes that\n // text nodes' `textContent` getter will not be patched.\n get: /** @this {Node} */ function() {\n /** @type {!Array<string>} */\n const parts = [];\n\n for (let i = 0; i < this.childNodes.length; i++) {\n parts.push(this.childNodes[i].textContent);\n }\n\n return parts.join('');\n },\n set: /** @this {Node} */ function(assignedValue) {\n while (this.firstChild) {\n Native.Node_removeChild.call(this, this.firstChild);\n }\n Native.Node_appendChild.call(this, document.createTextNode(assignedValue));\n },\n });\n });\n }\n};\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * before: !function(...(!Node|string)),\n * after: !function(...(!Node|string)),\n * replaceWith: !function(...(!Node|string)),\n * remove: !function(),\n * }}\n */\nlet ChildNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ChildNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function beforeAfterPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'before', beforeAfterPatch(builtIn.before));\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'after', beforeAfterPatch(builtIn.after));\n }\n\n if (builtIn.replaceWith !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'replaceWith',\n /**\n * @param {...(!Node|string)} nodes\n */\n function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.replaceWith.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (wasConnected) {\n internals.disconnectTree(this);\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n });\n }\n\n if (builtIn.remove !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'remove',\n function() {\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.remove.call(this);\n\n if (wasConnected) {\n internals.disconnectTree(this);\n }\n });\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\nimport PatchChildNode from './Interface/ChildNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n if (Native.Element_attachShadow) {\n Utilities.setPropertyUnchecked(Element.prototype, 'attachShadow',\n /**\n * @this {Element}\n * @param {!{mode: string}} init\n * @return {ShadowRoot}\n */\n function(init) {\n const shadowRoot = Native.Element_attachShadow.call(this, init);\n this.__CE_shadowRoot = shadowRoot;\n return shadowRoot;\n });\n }\n\n\n function patch_innerHTML(destination, baseDescriptor) {\n Object.defineProperty(destination, 'innerHTML', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Element} */ function(htmlString) {\n const isConnected = Utilities.isConnected(this);\n\n // NOTE: In IE11, when using the native `innerHTML` setter, all nodes\n // that were previously descendants of the context element have all of\n // their children removed as part of the set - the entire subtree is\n // 'disassembled'. This work around walks the subtree *before* using the\n // native setter.\n /** @type {!Array<!Element>|undefined} */\n let removedElements = undefined;\n if (isConnected) {\n removedElements = [];\n Utilities.walkDeepDescendantElements(this, element => {\n if (element !== this) {\n removedElements.push(element);\n }\n });\n }\n\n baseDescriptor.set.call(this, htmlString);\n\n if (removedElements) {\n for (let i = 0; i < removedElements.length; i++) {\n const element = removedElements[i];\n if (element.__CE_state === CEState.custom) {\n internals.disconnectedCallback(element);\n }\n }\n }\n\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(this);\n } else {\n internals.patchAndUpgradeTree(this);\n }\n return htmlString;\n },\n });\n }\n\n if (Native.Element_innerHTML && Native.Element_innerHTML.get) {\n patch_innerHTML(Element.prototype, Native.Element_innerHTML);\n } else if (Native.HTMLElement_innerHTML && Native.HTMLElement_innerHTML.get) {\n patch_innerHTML(HTMLElement.prototype, Native.HTMLElement_innerHTML);\n } else {\n\n internals.addPatch(function(element) {\n patch_innerHTML(element, {\n enumerable: true,\n configurable: true,\n // Implements getting `innerHTML` by performing an unpatched `cloneNode`\n // of the element and returning the resulting element's `innerHTML`.\n // TODO: Is this too expensive?\n get: /** @this {Element} */ function() {\n return Native.Node_cloneNode.call(this, true).innerHTML;\n },\n // Implements setting `innerHTML` by creating an unpatched element,\n // setting `innerHTML` of that element and replacing the target\n // element's children with those of the unpatched element.\n set: /** @this {Element} */ function(assignedValue) {\n // NOTE: re-route to `content` for `template` elements.\n // We need to do this because `template.appendChild` does not\n // route into `template.content`.\n const isTemplate = (this.localName === 'template');\n /** @type {!Node} */\n const content = isTemplate ? (/** @type {!HTMLTemplateElement} */\n (this)).content : this;\n /** @type {!Node} */\n const rawElement = Native.Document_createElement.call(document,\n this.localName);\n rawElement.innerHTML = assignedValue;\n\n while (content.childNodes.length > 0) {\n Native.Node_removeChild.call(content, content.childNodes[0]);\n }\n const container = isTemplate ? rawElement.content : rawElement;\n while (container.childNodes.length > 0) {\n Native.Node_appendChild.call(content, container.childNodes[0]);\n }\n },\n });\n });\n }\n\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttribute',\n /**\n * @this {Element}\n * @param {string} name\n * @param {string} newValue\n */\n function(name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttribute.call(this, name, newValue);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_setAttribute.call(this, name, newValue);\n newValue = Native.Element_getAttribute.call(this, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, null);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n * @param {string} newValue\n */\n function(namespace, name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttribute',\n /**\n * @this {Element}\n * @param {string} name\n */\n function(name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttribute.call(this, name);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_removeAttribute.call(this, name);\n if (oldValue !== null) {\n internals.attributeChangedCallback(this, name, oldValue, null, null);\n }\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n */\n function(namespace, name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttributeNS.call(this, namespace, name);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_removeAttributeNS.call(this, namespace, name);\n // In older browsers, `Element#getAttributeNS` may return the empty string\n // instead of null if the attribute does not exist. For details, see;\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNS#Notes\n const newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n if (oldValue !== newValue) {\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n }\n });\n\n\n function patch_insertAdjacentElement(destination, baseMethod) {\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentElement',\n /**\n * @this {Element}\n * @param {string} position\n * @param {!Element} element\n * @return {?Element}\n */\n function(position, element) {\n const wasConnected = Utilities.isConnected(element);\n const insertedElement = /** @type {!Element} */\n (baseMethod.call(this, position, element));\n\n if (wasConnected) {\n internals.disconnectTree(element);\n }\n\n if (Utilities.isConnected(insertedElement)) {\n internals.connectTree(element);\n }\n return insertedElement;\n });\n }\n\n if (Native.HTMLElement_insertAdjacentElement) {\n patch_insertAdjacentElement(HTMLElement.prototype, Native.HTMLElement_insertAdjacentElement);\n } else if (Native.Element_insertAdjacentElement) {\n patch_insertAdjacentElement(Element.prototype, Native.Element_insertAdjacentElement);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentElement` was not patched.');\n }\n\n\n function patch_insertAdjacentHTML(destination, baseMethod) {\n /**\n * Patches and upgrades all nodes which are siblings between `start`\n * (inclusive) and `end` (exclusive). If `end` is `null`, then all siblings\n * following `start` will be patched and upgraded.\n * @param {!Node} start\n * @param {?Node} end\n */\n function upgradeNodesInRange(start, end) {\n const nodes = [];\n for (let node = start; node !== end; node = node.nextSibling) {\n nodes.push(node);\n }\n for (let i = 0; i < nodes.length; i++) {\n internals.patchAndUpgradeTree(nodes[i]);\n }\n }\n\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentHTML',\n /**\n * @this {Element}\n * @param {string} position\n * @param {string} text\n */\n function(position, text) {\n position = position.toLowerCase();\n\n if (position === \"beforebegin\") {\n const marker = this.previousSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(\n /** @type {!Node} */ (marker || this.parentNode.firstChild), this);\n } else if (position === \"afterbegin\") {\n const marker = this.firstChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.firstChild), marker);\n } else if (position === \"beforeend\") {\n const marker = this.lastChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(marker || this.firstChild, null);\n } else if (position === \"afterend\") {\n const marker = this.nextSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.nextSibling), marker);\n } else {\n throw new SyntaxError(`The value provided (${String(position)}) is ` +\n \"not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.\");\n }\n });\n }\n\n if (Native.HTMLElement_insertAdjacentHTML) {\n patch_insertAdjacentHTML(HTMLElement.prototype, Native.HTMLElement_insertAdjacentHTML);\n } else if (Native.Element_insertAdjacentHTML) {\n patch_insertAdjacentHTML(Element.prototype, Native.Element_insertAdjacentHTML);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentHTML` was not patched.');\n }\n\n\n PatchParentNode(internals, Element.prototype, {\n prepend: Native.Element_prepend,\n append: Native.Element_append,\n });\n\n PatchChildNode(internals, Element.prototype, {\n before: Native.Element_before,\n after: Native.Element_after,\n replaceWith: Native.Element_replaceWith,\n remove: Native.Element_remove,\n });\n};\n","import CustomElementInternals from '../CustomElementInternals.js';\nimport Native from './Native.js';\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n PatchParentNode(internals, DocumentFragment.prototype, {\n prepend: Native.DocumentFragment_prepend,\n append: Native.DocumentFragment_append,\n });\n};\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nfunction findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport * as StyleUtil from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/* Transforms ShadowDOM styling into ShadyDOM styling\n\n* scoping:\n\n * elements in scope get scoping selector class=\"x-foo-scope\"\n * selectors re-written as follows:\n\n div button -> div.x-foo-scope button.x-foo-scope\n\n* :host -> scopeName\n\n* :host(...) -> scopeName...\n\n* ::slotted(...) -> scopeName > ...\n\n* ...:dir(ltr|rtl) -> [dir=\"ltr|rtl\"] ..., ...[dir=\"ltr|rtl\"]\n\n* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir=\"rtl\"] scopeName, scopeName[dir=\"rtl\"]\n\n*/\nconst SCOPE_NAME = 'style-scope';\n\nclass StyleTransformer {\n get SCOPE_NAME() {\n return SCOPE_NAME;\n }\n /**\n * Given a node and scope name, add a scoping class to each node\n * in the tree. This facilitates transforming css into scoped rules.\n * @param {?} node\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n dom(node, scope, shouldRemoveScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n this._transformDom(node, scope || '', shouldRemoveScope);\n }\n }\n\n _transformDom(node, selector, shouldRemoveScope) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n this.element(node, selector, shouldRemoveScope);\n }\n let c$ = (node.localName === 'template') ?\n (node.content || node._content).childNodes :\n node.children || node.childNodes;\n if (c$) {\n for (let i=0; i<c$.length; i++) {\n this._transformDom(c$[i], selector, shouldRemoveScope);\n }\n }\n }\n /**\n * @param {?} element\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n element(element, scope, shouldRemoveScope) {\n // note: if using classes, we add both the general 'style-scope' class\n // as well as the specific scope. This enables easy filtering of all\n // `style-scope` elements\n if (scope) {\n // note: svg on IE does not have classList so fallback to class\n if (element.classList) {\n if (shouldRemoveScope) {\n element.classList.remove(SCOPE_NAME);\n element.classList.remove(scope);\n } else {\n element.classList.add(SCOPE_NAME);\n element.classList.add(scope);\n }\n } else if (element.getAttribute) {\n let c = element.getAttribute(CLASS);\n if (shouldRemoveScope) {\n if (c) {\n let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');\n StyleUtil.setElementClassRaw(element, newValue);\n }\n } else {\n let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;\n StyleUtil.setElementClassRaw(element, newValue);\n }\n }\n }\n }\n\n /**\n * @param {?} element\n * @param {?} styleRules\n * @param {?=} callback\n */\n elementStyles(element, styleRules, callback) {\n let cssBuildType = element['__cssBuild'];\n // no need to shim selectors if settings.useNativeShadow, also\n // a shady css build will already have transformed selectors\n // NOTE: This method may be called as part of static or property shimming.\n // When there is a targeted build it will not be called for static shimming,\n // but when the property shim is used it is called and should opt out of\n // static shimming work when a proper build exists.\n let cssText = '';\n if (nativeShadow || cssBuildType === 'shady') {\n cssText = StyleUtil.toCssText(styleRules, callback);\n } else {\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n cssText = this.css(styleRules, is, typeExtension, callback) + '\\n\\n';\n }\n return cssText.trim();\n }\n\n // Given a string of cssText and a scoping string (scope), returns\n // a string of scoped css where each selector is transformed to include\n // a class created from the scope. ShadowDOM selectors are also transformed\n // (e.g. :host) to use the scoping selector.\n css(rules, scope, ext, callback) {\n let hostScope = this._calcHostScope(scope, ext);\n scope = this._calcElementScope(scope);\n let self = this;\n return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n if (!rule.isScoped) {\n self.rule(rule, scope, hostScope);\n rule.isScoped = true;\n }\n if (callback) {\n callback(rule, scope, hostScope);\n }\n });\n }\n\n _calcElementScope(scope) {\n if (scope) {\n return CSS_CLASS_PREFIX + scope;\n } else {\n return '';\n }\n }\n\n _calcHostScope(scope, ext) {\n return ext ? `[is=${scope}]` : scope;\n }\n\n rule(rule, scope, hostScope) {\n this._transformRule(rule, this._transformComplexSelector,\n scope, hostScope);\n }\n\n /**\n * transforms a css rule to a scoped rule.\n *\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRule(rule, transformer, scope, hostScope) {\n // NOTE: save transformedSelector for subsequent matching of elements\n // against selectors (e.g. when calculating style properties)\n rule['selector'] = rule.transformedSelector =\n this._transformRuleCss(rule, transformer, scope, hostScope);\n }\n\n /**\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRuleCss(rule, transformer, scope, hostScope) {\n let p$ = rule['selector'].split(COMPLEX_SELECTOR_SEP);\n // we want to skip transformation of rules that appear in keyframes,\n // because they are keyframe selectors, not element selectors.\n if (!StyleUtil.isKeyframesSelector(rule)) {\n for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {\n p$[i] = transformer.call(this, p, scope, hostScope);\n }\n }\n return p$.join(COMPLEX_SELECTOR_SEP);\n }\n\n /**\n * @param {string} selector\n * @return {string}\n */\n _twiddleNthPlus(selector) {\n return selector.replace(NTH, (m, type, inside) => {\n if (inside.indexOf('+') > -1) {\n inside = inside.replace(/\\+/g, '___');\n } else if (inside.indexOf('___') > -1) {\n inside = inside.replace(/___/g, '+');\n }\n return `:${type}(${inside})`;\n });\n }\n\n/**\n * @param {string} selector\n * @param {string} scope\n * @param {string=} hostScope\n */\n _transformComplexSelector(selector, scope, hostScope) {\n let stop = false;\n selector = selector.trim();\n // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP\n let isNth = NTH.test(selector);\n if (isNth) {\n selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\\s/g, '')})`)\n selector = this._twiddleNthPlus(selector);\n }\n selector = selector.replace(SLOTTED_START, `${HOST} $1`);\n selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {\n if (!stop) {\n let info = this._transformCompoundSelector(s, c, scope, hostScope);\n stop = stop || info.stop;\n c = info.combinator;\n s = info.value;\n }\n return c + s;\n });\n if (isNth) {\n selector = this._twiddleNthPlus(selector);\n }\n return selector;\n }\n\n _transformCompoundSelector(selector, combinator, scope, hostScope) {\n // replace :host with host scoping class\n let slottedIndex = selector.indexOf(SLOTTED);\n if (selector.indexOf(HOST) >= 0) {\n selector = this._transformHostSelector(selector, hostScope);\n // replace other selectors with scoping class\n } else if (slottedIndex !== 0) {\n selector = scope ? this._transformSimpleSelector(selector, scope) :\n selector;\n }\n // mark ::slotted() scope jump to replace with descendant selector + arg\n // also ignore left-side combinator\n let slotted = false;\n if (slottedIndex >= 0) {\n combinator = '';\n slotted = true;\n }\n // process scope jumping selectors up to the scope jump and then stop\n let stop;\n if (slotted) {\n stop = true;\n if (slotted) {\n // .zonk ::slotted(.foo) -> .zonk.scope > .foo\n selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);\n }\n }\n selector = selector.replace(DIR_PAREN, (m, before, dir) =>\n `[dir=\"${dir}\"] ${before}, ${before}[dir=\"${dir}\"]`);\n return {value: selector, combinator, stop};\n }\n\n _transformSimpleSelector(selector, scope) {\n let p$ = selector.split(PSEUDO_PREFIX);\n p$[0] += scope;\n return p$.join(PSEUDO_PREFIX);\n }\n\n // :host(...) -> scopeName...\n _transformHostSelector(selector, hostScope) {\n let m = selector.match(HOST_PAREN);\n let paren = m && m[2].trim() || '';\n if (paren) {\n if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {\n // paren starts with a type selector\n let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];\n // if the type selector is our hostScope then avoid pre-pending it\n if (typeSelector === hostScope) {\n return paren;\n // otherwise, this selector should not match in this scope so\n // output a bogus selector.\n } else {\n return SELECTOR_NO_MATCH;\n }\n } else {\n // make sure to do a replace here to catch selectors like:\n // `:host(.foo)::before`\n return selector.replace(HOST_PAREN, function(m, host, paren) {\n return hostScope + paren;\n });\n }\n // if no paren, do a straight :host replacement.\n // TODO(sorvell): this should not strictly be necessary but\n // it's needed to maintain support for `:host[foo]` type selectors\n // which have been improperly used under Shady DOM. This should be\n // deprecated.\n } else {\n return selector.replace(HOST, hostScope);\n }\n }\n\n /**\n * @param {StyleNode} rule\n */\n documentRule(rule) {\n // reset selector in case this is redone.\n rule['selector'] = rule['parsedSelector'];\n this.normalizeRootSelector(rule);\n this._transformRule(rule, this._transformDocumentSelector);\n }\n\n /**\n * @param {StyleNode} rule\n */\n normalizeRootSelector(rule) {\n if (rule['selector'] === ROOT) {\n rule['selector'] = 'html';\n }\n }\n\n/**\n * @param {string} selector\n */\n _transformDocumentSelector(selector) {\n return selector.match(SLOTTED) ?\n this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) :\n this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);\n }\n}\n\nlet NTH = /:(nth[-\\w]+)\\(([^)]+)\\)/;\nlet SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;\nlet COMPLEX_SELECTOR_SEP = ',';\nlet SIMPLE_SELECTOR_SEP = /(^|[\\s>+~]+)((?:\\[.+?\\]|[^\\s>+~=[])+)/g;\nlet SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;\nlet HOST = ':host';\nlet ROOT = ':root';\nlet SLOTTED = '::slotted';\nlet SLOTTED_START = new RegExp(`^(${SLOTTED})`);\n// NOTE: this supports 1 nested () pair for things like\n// :host(:not([selected]), more general support requires\n// parsing which seems like overkill\nlet HOST_PAREN = /(:host)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\n// similar to HOST_PAREN\nlet SLOTTED_PAREN = /(?:::slotted)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\nlet DIR_PAREN = /(.*):dir\\((?:(ltr|rtl))\\)/;\nlet CSS_CLASS_PREFIX = '.';\nlet PSEUDO_PREFIX = ':';\nlet CLASS = 'class';\nlet SELECTOR_NO_MATCH = 'should_not_match';\n\nexport default new StyleTransformer()\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/** @const {string} */\nconst infoKey = '__styleInfo';\n\nexport default class StyleInfo {\n /**\n * @param {Element} node\n * @return {StyleInfo}\n */\n static get(node) {\n if (node) {\n return node[infoKey];\n } else {\n return null;\n }\n }\n /**\n * @param {!Element} node\n * @param {StyleInfo} styleInfo\n * @return {StyleInfo}\n */\n static set(node, styleInfo) {\n node[infoKey] = styleInfo;\n return styleInfo;\n }\n /**\n * @param {StyleNode} ast\n * @param {Node=} placeholder\n * @param {Array<string>=} ownStylePropertyNames\n * @param {string=} elementName\n * @param {string=} typeExtension\n * @param {string=} cssBuild\n */\n constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {\n /** @type {StyleNode} */\n this.styleRules = ast || null;\n /** @type {Node} */\n this.placeholder = placeholder || null;\n /** @type {!Array<string>} */\n this.ownStylePropertyNames = ownStylePropertyNames || [];\n /** @type {Array<Object>} */\n this.overrideStyleProperties = null;\n /** @type {string} */\n this.elementName = elementName || '';\n /** @type {string} */\n this.cssBuild = cssBuild || '';\n /** @type {string} */\n this.typeExtension = typeExtension || '';\n /** @type {Object<string, string>} */\n this.styleProperties = null;\n /** @type {?string} */\n this.scopeSelector = null;\n /** @type {HTMLStyleElement} */\n this.customStyle = null;\n }\n _getStyleRules() {\n return this.styleRules;\n }\n}\n\nStyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport * as RX from './common-regex.js';\nimport StyleInfo from './style-info.js';\n\n// TODO: dedupe with shady\n/**\n * @param {string} selector\n * @return {boolean}\n * @this {Element}\n */\nconst matchesSelector = function(selector) {\n const method = this.matches || this.matchesSelector ||\n this.mozMatchesSelector || this.msMatchesSelector ||\n this.oMatchesSelector || this.webkitMatchesSelector;\n return method && method.call(this, selector);\n};\n\nconst IS_IE = navigator.userAgent.match('Trident');\n\nconst XSCOPE_NAME = 'x-scope';\n\nclass StyleProperties {\n get XSCOPE_NAME() {\n return XSCOPE_NAME;\n }\n/**\n * decorates styles with rule info and returns an array of used style property names\n *\n * @param {StyleNode} rules\n * @return {Array<string>}\n */\n decorateStyles(rules) {\n let self = this, props = {}, keyframes = [], ruleIndex = 0;\n StyleUtil.forEachRule(rules, function(rule) {\n self.decorateRule(rule);\n // mark in-order position of ast rule in styles block, used for cache key\n rule.index = ruleIndex++;\n self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);\n }, function onKeyframesRule(rule) {\n keyframes.push(rule);\n });\n // Cache all found keyframes rules for later reference:\n rules._keyframes = keyframes;\n // return this list of property names *consumes* in these styles.\n let names = [];\n for (let i in props) {\n names.push(i);\n }\n return names;\n }\n\n // decorate a single rule with property info\n decorateRule(rule) {\n if (rule.propertyInfo) {\n return rule.propertyInfo;\n }\n let info = {}, properties = {};\n let hasProperties = this.collectProperties(rule, properties);\n if (hasProperties) {\n info.properties = properties;\n // TODO(sorvell): workaround parser seeing mixins as additional rules\n rule['rules'] = null;\n }\n info.cssText = this.collectCssText(rule);\n rule.propertyInfo = info;\n return info;\n }\n\n // collects the custom properties from a rule's cssText\n collectProperties(rule, properties) {\n let info = rule.propertyInfo;\n if (info) {\n if (info.properties) {\n Object.assign(properties, info.properties);\n return true;\n }\n } else {\n let m, rx = RX.VAR_ASSIGN;\n let cssText = rule['parsedCssText'];\n let value;\n let any;\n while ((m = rx.exec(cssText))) {\n // note: group 2 is var, 3 is mixin\n value = (m[2] || m[3]).trim();\n // value of 'inherit' or 'unset' is equivalent to not setting the property here\n if (value !== 'inherit' || value !== 'unset') {\n properties[m[1].trim()] = value;\n }\n any = true;\n }\n return any;\n }\n\n }\n\n // returns cssText of properties that consume variables/mixins\n collectCssText(rule) {\n return this.collectConsumingCssText(rule['parsedCssText']);\n }\n\n // NOTE: we support consumption inside mixin assignment\n // but not production, so strip out {...}\n collectConsumingCssText(cssText) {\n return cssText.replace(RX.BRACKETED, '')\n .replace(RX.VAR_ASSIGN, '');\n }\n\n collectPropertiesInCssText(cssText, props) {\n let m;\n while ((m = RX.VAR_CONSUMED.exec(cssText))) {\n let name = m[1];\n // This regex catches all variable names, and following non-whitespace char\n // If next char is not ':', then variable is a consumer\n if (m[2] !== ':') {\n props[name] = true;\n }\n }\n }\n\n // turns custom properties into realized values.\n reify(props) {\n // big perf optimization here: reify only *own* properties\n // since this object has __proto__ of the element's scope properties\n let names = Object.getOwnPropertyNames(props);\n for (let i=0, n; i < names.length; i++) {\n n = names[i];\n props[n] = this.valueForProperty(props[n], props);\n }\n }\n\n // given a property value, returns the reified value\n // a property value may be:\n // (1) a literal value like: red or 5px;\n // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or\n // var(--a, var(--b));\n // (3) a literal mixin value like { properties }. Each of these properties\n // can have values that are: (a) literal, (b) variables, (c) @apply mixins.\n valueForProperty(property, props) {\n // case (1) default\n // case (3) defines a mixin and we have to reify the internals\n if (property) {\n if (property.indexOf(';') >=0) {\n property = this.valueForProperties(property, props);\n } else {\n // case (2) variable\n let self = this;\n let fn = function(prefix, value, fallback, suffix) {\n if (!value) {\n return prefix + suffix;\n }\n let propertyValue = self.valueForProperty(props[value], props);\n // if value is \"initial\", then the variable should be treated as unset\n if (!propertyValue || propertyValue === 'initial') {\n // fallback may be --a or var(--a) or literal\n propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||\n fallback;\n } else if (propertyValue === 'apply-shim-inherit') {\n // CSS build will replace `inherit` with `apply-shim-inherit`\n // for use with native css variables.\n // Since we have full control, we can use `inherit` directly.\n propertyValue = 'inherit';\n }\n return prefix + (propertyValue || '') + suffix;\n };\n property = StyleUtil.processVariableAndFallback(property, fn);\n }\n }\n return property && property.trim() || '';\n }\n\n // note: we do not yet support mixin within mixin\n valueForProperties(property, props) {\n let parts = property.split(';');\n for (let i=0, p, m; i<parts.length; i++) {\n if ((p = parts[i])) {\n RX.MIXIN_MATCH.lastIndex = 0;\n m = RX.MIXIN_MATCH.exec(p);\n if (m) {\n p = this.valueForProperty(props[m[1]], props);\n } else {\n let colon = p.indexOf(':');\n if (colon !== -1) {\n let pp = p.substring(colon);\n pp = pp.trim();\n pp = this.valueForProperty(pp, props) || pp;\n p = p.substring(0, colon) + pp;\n }\n }\n parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?\n // strip trailing ;\n p.slice(0, -1) :\n p || '';\n }\n }\n return parts.join(';');\n }\n\n applyProperties(rule, props) {\n let output = '';\n // dynamically added sheets may not be decorated so ensure they are.\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (rule.propertyInfo.cssText) {\n output = this.valueForProperties(rule.propertyInfo.cssText, props);\n }\n rule['cssText'] = output;\n }\n\n // Apply keyframe transformations to the cssText of a given rule. The\n // keyframeTransforms object is a map of keyframe names to transformer\n // functions which take in cssText and spit out transformed cssText.\n applyKeyframeTransforms(rule, keyframeTransforms) {\n let input = rule['cssText'];\n let output = rule['cssText'];\n if (rule.hasAnimations == null) {\n // Cache whether or not the rule has any animations to begin with:\n rule.hasAnimations = RX.ANIMATION_MATCH.test(input);\n }\n // If there are no animations referenced, we can skip transforms:\n if (rule.hasAnimations) {\n let transform;\n // If we haven't transformed this rule before, we iterate over all\n // transforms:\n if (rule.keyframeNamesToTransform == null) {\n rule.keyframeNamesToTransform = [];\n for (let keyframe in keyframeTransforms) {\n transform = keyframeTransforms[keyframe];\n output = transform(input);\n // If the transform actually changed the CSS text, we cache the\n // transform name for future use:\n if (input !== output) {\n input = output;\n rule.keyframeNamesToTransform.push(keyframe);\n }\n }\n } else {\n // If we already have a list of keyframe names that apply to this\n // rule, we apply only those keyframe name transforms:\n for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {\n transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];\n input = transform(input);\n }\n output = input;\n }\n }\n rule['cssText'] = output;\n }\n\n // Test if the rules in these styles matches the given `element` and if so,\n // collect any custom properties into `props`.\n /**\n * @param {StyleNode} rules\n * @param {Element} element\n */\n propertyDataFromStyles(rules, element) {\n let props = {}, self = this;\n // generates a unique key for these matches\n let o = [];\n // note: active rules excludes non-matching @media rules\n StyleUtil.forEachRule(rules, function(rule) {\n // TODO(sorvell): we could trim the set of rules at declaration\n // time to only include ones that have properties\n if (!rule.propertyInfo) {\n self.decorateRule(rule);\n }\n // match element against transformedSelector: selector may contain\n // unwanted uniquification and parsedSelector does not directly match\n // for :host selectors.\n let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];\n if (element && rule.propertyInfo.properties && selectorToMatch) {\n if (matchesSelector.call(element, selectorToMatch)) {\n self.collectProperties(rule, props);\n // produce numeric key for these matches for lookup\n addToBitMask(rule.index, o);\n }\n }\n }, null, true);\n return {properties: props, key: o};\n }\n\n /**\n * @param {Element} scope\n * @param {StyleNode} rule\n * @param {string|undefined} cssBuild\n * @param {function(Object)} callback\n */\n whenHostOrRootRule(scope, rule, cssBuild, callback) {\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (!rule.propertyInfo.properties) {\n return;\n }\n let {is, typeExtension} = StyleUtil.getIsExtends(scope);\n let hostScope = is ?\n StyleTransformer._calcHostScope(is, typeExtension) :\n 'html';\n let parsedSelector = rule['parsedSelector'];\n let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');\n let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;\n // build info is either in scope (when scope is an element) or in the style\n // when scope is the default scope; note: this allows default scope to have\n // mixed mode built and unbuilt styles.\n if (cssBuild === 'shady') {\n // :root -> x-foo > *.x-foo for elements and html for custom-style\n isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;\n // :host -> x-foo for elements, but sub-rules have .x-foo in them\n isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;\n }\n if (cssBuild === 'shadow') {\n isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';\n isHost = isHost && !isRoot;\n }\n if (!isRoot && !isHost) {\n return;\n }\n let selectorToMatch = hostScope;\n if (isHost) {\n // need to transform :host because `:host` does not work with `matches`\n if (!rule.transformedSelector) {\n // transform :host into a matchable selector\n rule.transformedSelector =\n StyleTransformer._transformRuleCss(\n rule,\n StyleTransformer._transformComplexSelector,\n StyleTransformer._calcElementScope(is),\n hostScope\n );\n }\n selectorToMatch = rule.transformedSelector || hostScope;\n }\n callback({\n selector: selectorToMatch,\n isHost: isHost,\n isRoot: isRoot\n });\n }\n/**\n * @param {Element} scope\n * @param {StyleNode} rules\n * @return {Object}\n */\n hostAndRootPropertiesForScope(scope, rules) {\n let hostProps = {}, rootProps = {}, self = this;\n // note: active rules excludes non-matching @media rules\n let cssBuild = rules && rules['__cssBuild'];\n StyleUtil.forEachRule(rules, function(rule) {\n // if scope is StyleDefaults, use _element for matchesSelector\n self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {\n let element = scope._element || scope;\n if (matchesSelector.call(element, info.selector)) {\n if (info.isHost) {\n self.collectProperties(rule, hostProps);\n } else {\n self.collectProperties(rule, rootProps);\n }\n }\n });\n }, null, true);\n return {rootProps: rootProps, hostProps: hostProps};\n }\n\n /**\n * @param {Element} element\n * @param {Object} properties\n * @param {string} scopeSelector\n */\n transformStyles(element, properties, scopeSelector) {\n let self = this;\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n let hostSelector = StyleTransformer\n ._calcHostScope(is, typeExtension);\n let rxHostSelector = element.extends ?\n '\\\\' + hostSelector.slice(0, -1) + '\\\\]' :\n hostSelector;\n let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +\n RX.HOST_SUFFIX);\n let rules = StyleInfo.get(element).styleRules;\n let keyframeTransforms =\n this._elementKeyframeTransforms(element, rules, scopeSelector);\n return StyleTransformer.elementStyles(element, rules, function(rule) {\n self.applyProperties(rule, properties);\n if (!nativeShadow &&\n !StyleUtil.isKeyframesSelector(rule) &&\n rule['cssText']) {\n // NOTE: keyframe transforms only scope munge animation names, so it\n // is not necessary to apply them in ShadowDOM.\n self.applyKeyframeTransforms(rule, keyframeTransforms);\n self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);\n }\n });\n }\n\n /**\n * @param {Element} element\n * @param {StyleNode} rules\n * @param {string} scopeSelector\n * @return {Object}\n */\n _elementKeyframeTransforms(element, rules, scopeSelector) {\n let keyframesRules = rules._keyframes;\n let keyframeTransforms = {};\n if (!nativeShadow && keyframesRules) {\n // For non-ShadowDOM, we transform all known keyframes rules in\n // advance for the current scope. This allows us to catch keyframes\n // rules that appear anywhere in the stylesheet:\n for (let i = 0, keyframesRule = keyframesRules[i];\n i < keyframesRules.length;\n keyframesRule = keyframesRules[++i]) {\n this._scopeKeyframes(keyframesRule, scopeSelector);\n keyframeTransforms[keyframesRule['keyframesName']] =\n this._keyframesRuleTransformer(keyframesRule);\n }\n }\n return keyframeTransforms;\n }\n\n // Generate a factory for transforming a chunk of CSS text to handle a\n // particular scoped keyframes rule.\n /**\n * @param {StyleNode} keyframesRule\n * @return {function(string):string}\n */\n _keyframesRuleTransformer(keyframesRule) {\n return function(cssText) {\n return cssText.replace(\n keyframesRule.keyframesNameRx,\n keyframesRule.transformedKeyframesName);\n };\n }\n\n/**\n * Transforms `@keyframes` names to be unique for the current host.\n * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0\n *\n * @param {StyleNode} rule\n * @param {string} scopeId\n */\n _scopeKeyframes(rule, scopeId) {\n // Animation names are of the form [\\w-], so ensure that the name regex does not partially apply\n // to similarly named keyframe names by checking for a word boundary at the beginning and\n // a non-word boundary or `-` at the end.\n rule.keyframesNameRx = new RegExp(`\\\\b${rule['keyframesName']}(?!\\\\B|-)`, 'g');\n rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n rule['selector'] = rule.transformedSelector.replace(\n rule['keyframesName'], rule.transformedKeyframesName);\n }\n\n // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):\n // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo\n // host selector: x-foo.wide -> .x-foo-42.wide\n // note: we use only the scope class (.x-foo-42) and not the hostSelector\n // (x-foo) to scope :host rules; this helps make property host rules\n // have low specificity. They are overrideable by class selectors but,\n // unfortunately, not by type selectors (e.g. overriding via\n // `.special` is ok, but not by `x-foo`).\n /**\n * @param {StyleNode} rule\n * @param {RegExp} hostRx\n * @param {string} hostSelector\n * @param {string} scopeId\n */\n _scopeSelector(rule, hostRx, hostSelector, scopeId) {\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n let selector = rule.transformedSelector;\n let scope = '.' + scopeId;\n let parts = selector.split(',');\n for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n parts[i] = p.match(hostRx) ?\n p.replace(hostSelector, scope) :\n scope + ' ' + p;\n }\n rule['selector'] = parts.join(',');\n }\n\n /**\n * @param {Element} element\n * @param {string} selector\n * @param {string} old\n */\n applyElementScopeSelector(element, selector, old) {\n let c = element.getAttribute('class') || '';\n let v = c;\n if (old) {\n v = c.replace(\n new RegExp('\\\\s*' + XSCOPE_NAME + '\\\\s*' + old + '\\\\s*', 'g'), ' ');\n }\n v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;\n if (c !== v) {\n StyleUtil.setElementClassRaw(element, v);\n }\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Object} properties\n * @param {string} selector\n * @param {HTMLStyleElement} style\n * @return {HTMLStyleElement}\n */\n applyElementStyle(element, properties, selector, style) {\n // calculate cssText to apply\n let cssText = style ? style.textContent || '' :\n this.transformStyles(element, properties, selector);\n // if shady and we have a cached style that is not style, decrement\n let styleInfo = StyleInfo.get(element);\n let s = styleInfo.customStyle;\n if (s && !nativeShadow && (s !== style)) {\n s['_useCount']--;\n if (s['_useCount'] <= 0 && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }\n // apply styling always under native or if we generated style\n // or the cached style is not in document(!)\n if (nativeShadow) {\n // update existing style only under native\n if (styleInfo.customStyle) {\n styleInfo.customStyle.textContent = cssText;\n style = styleInfo.customStyle;\n // otherwise, if we have css to apply, do so\n } else if (cssText) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,\n styleInfo.placeholder);\n }\n } else {\n // shady and no cache hit\n if (!style) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n if (cssText) {\n style = StyleUtil.applyCss(cssText, selector, null,\n styleInfo.placeholder);\n }\n // shady and cache hit but not in document\n } else if (!style.parentNode) {\n if (IS_IE && cssText.indexOf('@media') > -1) {\n // @media rules may be stale in IE 10 and 11\n // refresh the text content of the style to revalidate them.\n style.textContent = cssText;\n }\n StyleUtil.applyStyle(style, null, styleInfo.placeholder);\n }\n }\n // ensure this style is our custom style and increment its use count.\n if (style) {\n style['_useCount'] = style['_useCount'] || 0;\n // increment use count if we changed styles\n if (styleInfo.customStyle != style) {\n style['_useCount']++;\n }\n styleInfo.customStyle = style;\n }\n return style;\n }\n\n /**\n * @param {Element} style\n * @param {Object} properties\n */\n applyCustomStyle(style, properties) {\n let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));\n let self = this;\n style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n let css = rule['cssText'] = rule['parsedCssText'];\n if (rule.propertyInfo && rule.propertyInfo.cssText) {\n // remove property assignments\n // so next function isn't confused\n // NOTE: we have 3 categories of css:\n // (1) normal properties,\n // (2) custom property assignments (--foo: red;),\n // (3) custom property usage: border: var(--foo); @apply(--foo);\n // In elements, 1 and 3 are separated for efficiency; here they\n // are not and this makes this case unique.\n css = removeCustomPropAssignment(/** @type {string} */(css));\n // replace with reified properties, scenario is same as mixin\n rule['cssText'] = self.valueForProperties(css, properties);\n }\n });\n }\n}\n\n/**\n * @param {number} n\n * @param {Array<number>} bits\n */\nfunction addToBitMask(n, bits) {\n let o = parseInt(n / 32, 10);\n let v = 1 << (n % 32);\n bits[o] = (bits[o] || 0) | v;\n}\n\nexport default new StyleProperties();","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {applyStylePlaceHolder} from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/** @type {Object<string, !Node>} */\nlet placeholderMap = {};\n\n/**\n * @const {CustomElementRegistry}\n */\nconst ce = window['customElements'];\nif (ce && !nativeShadow) {\n /**\n * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}\n */\n const origDefine = ce['define'];\n /**\n * @param {string} name\n * @param {function(new:HTMLElement)} clazz\n * @param {{extends: string}=} options\n */\n const wrappedDefine = (name, clazz, options) => {\n placeholderMap[name] = applyStylePlaceHolder(name);\n origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);\n };\n ce['define'] = wrappedDefine;\n}\n\nexport default placeholderMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nexport default class StyleCache {\n constructor(typeMax = 100) {\n // map element name -> [{properties, styleElement, scopeSelector}]\n this.cache = {};\n this.typeMax = typeMax;\n }\n\n _validate(cacheEntry, properties, ownPropertyNames) {\n for (let idx = 0; idx < ownPropertyNames.length; idx++) {\n let pn = ownPropertyNames[idx];\n if (cacheEntry.properties[pn] !== properties[pn]) {\n return false;\n }\n }\n return true;\n }\n\n store(tagname, properties, styleElement, scopeSelector) {\n let list = this.cache[tagname] || [];\n list.push({properties, styleElement, scopeSelector});\n if (list.length > this.typeMax) {\n list.shift();\n }\n this.cache[tagname] = list;\n }\n\n fetch(tagname, properties, ownPropertyNames) {\n let list = this.cache[tagname];\n if (!list) {\n return;\n }\n // reverse list for most-recent lookups\n for (let idx = list.length - 1; idx >= 0; idx--) {\n let entry = list[idx];\n if (this._validate(entry, properties, ownPropertyNames)) {\n return entry;\n }\n }\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport {getIsExtends} from './style-util.js';\n\nexport let flush = function() {};\n\n/**\n * @param {HTMLElement} element\n * @return {!Array<string>}\n */\nfunction getClasses(element) {\n let classes = [];\n if (element.classList) {\n classes = Array.from(element.classList);\n } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {\n classes = element.getAttribute('class').split(/\\s+/);\n }\n return classes;\n}\n\n/**\n * @param {HTMLElement} element\n * @return {string}\n */\nfunction getCurrentScope(element) {\n let classes = getClasses(element);\n let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);\n if (idx > -1) {\n return classes[idx + 1];\n }\n return '';\n}\n\n/**\n * @param {Array<MutationRecord|null>|null} mxns\n */\nfunction handler(mxns) {\n for (let x=0; x < mxns.length; x++) {\n let mxn = mxns[x];\n if (mxn.target === document.documentElement ||\n mxn.target === document.head) {\n continue;\n }\n for (let i=0; i < mxn.addedNodes.length; i++) {\n let n = mxn.addedNodes[i];\n if (n.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign\n let root = n.getRootNode();\n let currentScope = getCurrentScope(n);\n // node was scoped, but now is in document\n if (currentScope && root === n.ownerDocument) {\n StyleTransformer.dom(n, currentScope, true);\n } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let newScope;\n let host = /** @type {ShadowRoot} */(root).host;\n // element may no longer be in a shadowroot\n if (!host) {\n continue;\n }\n newScope = getIsExtends(host).is;\n if (currentScope === newScope) {\n // make sure all the subtree elements are scoped correctly\n let unscoped = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(\n n, `:not(.${StyleTransformer.SCOPE_NAME})`);\n for (let j = 0; j < unscoped.length; j++) {\n StyleTransformer.element(unscoped[j], currentScope);\n }\n continue;\n }\n if (currentScope) {\n StyleTransformer.dom(n, currentScope, true);\n }\n StyleTransformer.dom(n, newScope);\n }\n }\n }\n}\n\nif (!nativeShadow) {\n let observer = new MutationObserver(handler);\n let start = (node) => {\n observer.observe(node, {childList: true, subtree: true});\n }\n let nativeCustomElements = (window['customElements'] &&\n !window['customElements']['polyfillWrapFlushCallback']);\n // need to start immediately with native custom elements\n // TODO(dfreedm): with polyfilled HTMLImports and native custom elements\n // excessive mutations may be observed; this can be optimized via cooperation\n // with the HTMLImports polyfill.\n if (nativeCustomElements) {\n start(document);\n } else {\n let delayedStart = () => {\n start(document.body);\n }\n // use polyfill timing if it's available\n if (window['HTMLImports']) {\n window['HTMLImports']['whenReady'](delayedStart);\n // otherwise push beyond native imports being ready\n // which requires RAF + readystate interactive.\n } else {\n requestAnimationFrame(function() {\n if (document.readyState === 'loading') {\n let listener = function() {\n delayedStart();\n document.removeEventListener('readystatechange', listener);\n }\n document.addEventListener('readystatechange', listener);\n } else {\n delayedStart();\n }\n });\n }\n }\n\n flush = function() {\n handler(observer.takeRecords());\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {Promise<void>} */\nlet readyPromise = null;\n\n/** @type {?function(?function())} */\nlet whenReady = window['HTMLImports'] && window['HTMLImports']['whenReady'] || null;\n\n/** @type {function()} */\nlet resolveFn;\n\n/**\n * @param {?function()} callback\n */\nexport default function documentWait(callback) {\n requestAnimationFrame(function() {\n if (whenReady) {\n whenReady(callback)\n } else {\n if (!readyPromise) {\n readyPromise = new Promise((resolve) => {resolveFn = resolve});\n if (document.readyState === 'complete') {\n resolveFn();\n } else {\n document.addEventListener('readystatechange', () => {\n if (document.readyState === 'complete') {\n resolveFn();\n }\n });\n }\n }\n readyPromise.then(function(){ callback && callback(); });\n }\n });\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {parse, StyleNode} from './css-parse.js';\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport StyleProperties from './style-properties.js';\nimport placeholderMap from './style-placeholder.js';\nimport StyleInfo from './style-info.js';\nimport StyleCache from './style-cache.js';\nimport {flush as watcherFlush} from './document-watcher.js';\nimport templateMap from './template-map.js';\nimport * as ApplyShimUtils from './apply-shim-utils.js';\nimport documentWait from './document-wait.js';\nimport {updateNativeProperties, detectMixin} from './common-utils.js';\nimport {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars\n\n/**\n * @const {StyleCache}\n */\nconst styleCache = new StyleCache();\n\nexport default class ScopingShim {\n constructor() {\n this._scopeCounter = {};\n this._documentOwner = document.documentElement;\n let ast = new StyleNode();\n ast['rules'] = [];\n this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));\n this._elementsHaveApplied = false;\n this._applyShim = null;\n /** @type {?CustomStyleInterfaceInterface} */\n this._customStyleInterface = null;\n documentWait(() => {\n this._ensure();\n });\n }\n flush() {\n watcherFlush();\n }\n _generateScopeSelector(name) {\n let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;\n return `${name}-${id}`;\n }\n getStyleAst(style) {\n return StyleUtil.rulesForStyle(style);\n }\n styleAstToString(ast) {\n return StyleUtil.toCssText(ast);\n }\n _gatherStyles(template) {\n return StyleUtil.gatherStyleText(template.content);\n }\n _getCssBuild(template) {\n let style = template.content.querySelector('style');\n if (!style) {\n return '';\n }\n return style.getAttribute('css-build') || '';\n }\n /**\n * Prepare the styling and template for the given element type\n *\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplate(template, elementName, typeExtension) {\n if (template._prepared) {\n return;\n }\n template._prepared = true;\n template.name = elementName;\n template.extends = typeExtension;\n templateMap[elementName] = template;\n let cssBuild = this._getCssBuild(template);\n let cssText = this._gatherStyles(template);\n let info = {\n is: elementName,\n extends: typeExtension,\n __cssBuild: cssBuild,\n };\n if (!nativeShadow) {\n StyleTransformer.dom(template.content, elementName);\n }\n // check if the styling has mixin definitions or uses\n this._ensure();\n let hasMixins = detectMixin(cssText)\n let ast = parse(cssText);\n // only run the applyshim transforms if there is a mixin involved\n if (hasMixins && nativeCssVariables && this._applyShim) {\n this._applyShim['transformRules'](ast, elementName);\n }\n template['_styleAst'] = ast;\n template._cssBuild = cssBuild;\n\n let ownPropertyNames = [];\n if (!nativeCssVariables) {\n ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);\n }\n if (!ownPropertyNames.length || nativeCssVariables) {\n let root = nativeShadow ? template.content : null;\n let placeholder = placeholderMap[elementName];\n let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);\n template._style = style;\n }\n template._ownPropertyNames = ownPropertyNames;\n }\n _generateStaticStyle(info, rules, shadowroot, placeholder) {\n let cssText = StyleTransformer.elementStyles(info, rules);\n if (cssText.length) {\n return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);\n }\n }\n _prepareHost(host) {\n let {is, typeExtension} = StyleUtil.getIsExtends(host);\n let placeholder = placeholderMap[is];\n let template = templateMap[is];\n let ast;\n let ownStylePropertyNames;\n let cssBuild;\n if (template) {\n ast = template['_styleAst'];\n ownStylePropertyNames = template._ownPropertyNames;\n cssBuild = template._cssBuild;\n }\n return StyleInfo.set(host,\n new StyleInfo(\n ast,\n placeholder,\n ownStylePropertyNames,\n is,\n typeExtension,\n cssBuild\n )\n );\n }\n _ensureApplyShim() {\n if (this._applyShim) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {\n this._applyShim = window.ShadyCSS.ApplyShim;\n this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n }\n _ensureCustomStyleInterface() {\n if (this._customStyleInterface) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {\n this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);\n /** @type {function(!HTMLStyleElement)} */\n this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};\n this._customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {\n this.flushCustomStyles();\n }\n })\n };\n }\n }\n _ensure() {\n this._ensureApplyShim();\n this._ensureCustomStyleInterface();\n }\n /**\n * Flush and apply custom styles to document\n */\n flushCustomStyles() {\n this._ensure();\n if (!this._customStyleInterface) {\n return;\n }\n let customStyles = this._customStyleInterface['processStyles']();\n // early return if custom-styles don't need validation\n if (!this._customStyleInterface['enqueued']) {\n return;\n }\n if (!nativeCssVariables) {\n this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);\n this._applyCustomStyles(customStyles);\n } else {\n this._revalidateCustomStyleApplyShim(customStyles);\n }\n this._customStyleInterface['enqueued'] = false;\n // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree\n if (this._elementsHaveApplied && !nativeCssVariables) {\n this.styleDocument();\n }\n }\n /**\n * Apply styles for the given element\n *\n * @param {!HTMLElement} host\n * @param {Object=} overrideProps\n */\n styleElement(host, overrideProps) {\n let {is} = StyleUtil.getIsExtends(host);\n let styleInfo = StyleInfo.get(host);\n if (!styleInfo) {\n styleInfo = this._prepareHost(host);\n }\n // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called\n if (!this._isRootOwner(host)) {\n this._elementsHaveApplied = true;\n }\n if (overrideProps) {\n styleInfo.overrideStyleProperties =\n styleInfo.overrideStyleProperties || {};\n Object.assign(styleInfo.overrideStyleProperties, overrideProps);\n }\n if (!nativeCssVariables) {\n this._updateProperties(host, styleInfo);\n if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {\n this._applyStyleProperties(host, styleInfo);\n }\n } else {\n if (styleInfo.overrideStyleProperties) {\n updateNativeProperties(host, styleInfo.overrideStyleProperties);\n }\n let template = templateMap[is];\n // bail early if there is no shadowroot for this element\n if (!template && !this._isRootOwner(host)) {\n return;\n }\n if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {\n // update template\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this._ensure();\n this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);\n template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update instance if native shadowdom\n if (nativeShadow) {\n let root = host.shadowRoot;\n if (root) {\n let style = root.querySelector('style');\n style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n }\n }\n styleInfo.styleRules = template['_styleAst'];\n }\n }\n }\n _styleOwnerForNode(node) {\n let root = node.getRootNode();\n let host = root.host;\n if (host) {\n if (StyleInfo.get(host)) {\n return host;\n } else {\n return this._styleOwnerForNode(host);\n }\n }\n return this._documentOwner;\n }\n _isRootOwner(node) {\n return (node === this._documentOwner);\n }\n _applyStyleProperties(host, styleInfo) {\n let is = StyleUtil.getIsExtends(host).is;\n let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);\n let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;\n let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;\n let oldScopeSelector = styleInfo.scopeSelector;\n // only generate new scope if cached style is not found\n styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);\n let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);\n if (!nativeShadow) {\n StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);\n }\n if (!cacheEntry) {\n styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);\n }\n return style;\n }\n _updateProperties(host, styleInfo) {\n let owner = this._styleOwnerForNode(host);\n let ownerStyleInfo = StyleInfo.get(owner);\n let ownerProperties = ownerStyleInfo.styleProperties;\n let props = Object.create(ownerProperties || null);\n let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);\n let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);\n let propertiesMatchingHost = propertyData.properties\n Object.assign(\n props,\n hostAndRootProps.hostProps,\n propertiesMatchingHost,\n hostAndRootProps.rootProps\n );\n this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);\n StyleProperties.reify(props);\n styleInfo.styleProperties = props;\n }\n _mixinOverrideStyles(props, overrides) {\n for (let p in overrides) {\n let v = overrides[p];\n // skip override props if they are not truthy or 0\n // in order to fall back to inherited values\n if (v || v === 0) {\n props[p] = v;\n }\n }\n }\n /**\n * Update styles of the whole document\n *\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.styleSubtree(this._documentOwner, properties);\n }\n /**\n * Update styles of a subtree\n *\n * @param {!HTMLElement} host\n * @param {Object=} properties\n */\n styleSubtree(host, properties) {\n let root = host.shadowRoot;\n if (root || this._isRootOwner(host)) {\n this.styleElement(host, properties);\n }\n // process the shadowdom children of `host`\n let shadowChildren = root && (root.children || root.childNodes);\n if (shadowChildren) {\n for (let i = 0; i < shadowChildren.length; i++) {\n let c = /** @type {!HTMLElement} */(shadowChildren[i]);\n this.styleSubtree(c);\n }\n } else {\n // process the lightdom children of `host`\n let children = host.children || host.childNodes;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n let c = /** @type {!HTMLElement} */(children[i]);\n this.styleSubtree(c);\n }\n }\n }\n }\n /* Custom Style operations */\n _revalidateCustomStyleApplyShim(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n this._revalidateApplyShim(s);\n }\n }\n }\n _applyCustomStyles(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);\n }\n }\n }\n transformCustomStyleForDocument(style) {\n let ast = StyleUtil.rulesForStyle(style);\n StyleUtil.forEachRule(ast, (rule) => {\n if (nativeShadow) {\n StyleTransformer.normalizeRootSelector(rule);\n } else {\n StyleTransformer.documentRule(rule);\n }\n if (nativeCssVariables) {\n this._ensure();\n this._applyShim && this._applyShim['transformRule'](rule);\n }\n });\n if (nativeCssVariables) {\n style.textContent = StyleUtil.toCssText(ast);\n } else {\n this._documentOwnerStyleInfo.styleRules['rules'].push(ast);\n }\n }\n _revalidateApplyShim(style) {\n if (nativeCssVariables && this._applyShim) {\n let ast = StyleUtil.rulesForStyle(style);\n this._ensure();\n this._applyShim['transformRules'](ast);\n style.textContent = StyleUtil.toCssText(ast);\n }\n }\n getComputedStyleValue(element, property) {\n let value;\n if (!nativeCssVariables) {\n // element is either a style host, or an ancestor of a style host\n let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));\n value = styleInfo.styleProperties[property];\n }\n // fall back to the property value from the computed styling\n value = value || window.getComputedStyle(element).getPropertyValue(property);\n // trim whitespace that can come after the `:` in css\n // example: padding: 2px -> \" 2px\"\n return value ? value.trim() : '';\n }\n // given an element and a classString, replaces\n // the element's class with the provided classString and adds\n // any necessary ShadyCSS static and property based scoping selectors\n setElementClass(element, classString) {\n let root = element.getRootNode();\n let classes = classString ? classString.split(/\\s/) : [];\n let scopeName = root.host && root.host.localName;\n // If no scope, try to discover scope name from existing class.\n // This can occur if, for example, a template stamped element that\n // has been scoped is manipulated when not in a root.\n if (!scopeName) {\n var classAttr = element.getAttribute('class');\n if (classAttr) {\n let k$ = classAttr.split(/\\s/);\n for (let i=0; i < k$.length; i++) {\n if (k$[i] === StyleTransformer.SCOPE_NAME) {\n scopeName = k$[i+1];\n break;\n }\n }\n }\n }\n if (scopeName) {\n classes.push(StyleTransformer.SCOPE_NAME, scopeName);\n }\n if (!nativeCssVariables) {\n let styleInfo = StyleInfo.get(element);\n if (styleInfo && styleInfo.scopeSelector) {\n classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);\n }\n }\n StyleUtil.setElementClassRaw(element, classes.join(' '));\n }\n _styleInfoForNode(node) {\n return StyleInfo.get(node);\n }\n}\n\n/* exports */\nScopingShim.prototype['flush'] = ScopingShim.prototype.flush;\nScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;\nScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;\nScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;\nScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;\nScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;\nScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;\nScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;\nScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;\nScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;\nScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;\nScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;\nObject.defineProperties(ScopingShim.prototype, {\n 'nativeShadow': {\n get() {\n return nativeShadow;\n }\n },\n 'nativeCss': {\n get() {\n return nativeCssVariables;\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ScopingShim from '../src/scoping-shim.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ScopingShim} */\nconst scopingShim = new ScopingShim();\n\nlet ApplyShim, CustomStyleInterface;\n\nif (window['ShadyCSS']) {\n ApplyShim = window['ShadyCSS']['ApplyShim'];\n CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];\n}\n\nwindow.ShadyCSS = {\n ScopingShim: scopingShim,\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplate(template, elementName, elementExtends)\n },\n\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n scopingShim.flushCustomStyles();\n scopingShim.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleDocument(properties);\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return scopingShim.getComputedStyleValue(element, property);\n },\n\n nativeCss: nativeCssVariables,\n\n nativeShadow: nativeShadow\n};\n\nif (ApplyShim) {\n window.ShadyCSS.ApplyShim = ApplyShim;\n}\n\nif (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\n/*\n * Polyfills loaded: Custom Elements, Shady DOM/Shady CSS\n * Used in: Safari 9, Firefox, Edge\n */\n\nimport '../node_modules/@webcomponents/shadydom/src/shadydom.js';\nimport '../node_modules/@webcomponents/custom-elements/src/custom-elements.js';\nimport '../node_modules/@webcomponents/shadycss/entrypoints/scoping-shim.js';\n\nlet document = window.document;\n// global for (1) existence means `WebComponentsReady` will file,\n// (2) WebComponents.ready == true means event has fired.\nwindow.WebComponents = window.WebComponents || {};\n\nfunction fire() {\n requestAnimationFrame(() => {\n window.WebComponents.ready = true;\n window.document.dispatchEvent(new CustomEvent('WebComponentsReady', { bubbles: true }));\n })\n}\n\nfunction wait() {\n fire();\n document.removeEventListener('readystatechange', wait);\n}\n\nif (document.readyState !== 'loading') {\n fire();\n} else {\n document.addEventListener('readystatechange', wait);\n}"]} \ No newline at end of file